List of usage examples for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB
int GL_GEOMETRY_SHADER_ARB
To view the source code for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB.
Click Source Link
From source file:com.a2client.corex.Shader.java
License:Open Source License
public Shader(String name, List<String> defines) { String defstr = ""; for (String s : defines) defstr += s;/*from ww w . j a va 2 s .c o m*/ this.name = name + Const.EXT_SHADER + "*" + defstr; MyInputStream in = FileSys.getStream(name + Const.EXT_SHADER); Log.debug("load shader: " + name); Log.debug("defines: " + defines.toString()); String DEFINE = "#define"; String define_str = DEFINE; for (String s : defines) { define_str += " " + s + CRLF + DEFINE; } try { shaders.clear(); String source = readStreamAsString(in); // vertex String csource = define_str + " VERTEX" + CRLF + source; attach(ARBVertexShader.GL_VERTEX_SHADER_ARB, csource); // fragment csource = define_str + " FRAGMENT" + CRLF + source; attach(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB, csource); // geometry if (source.contains("#ifdef GEOMETRY")) { csource = define_str + " GEOMETRY" + CRLF + source; attach(ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB, csource); // may be need fix ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_VERTICES_OUT_ARB, 3); ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_INPUT_TYPE_ARB, GL11.GL_TRIANGLES); ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_VERTICES_OUT_ARB, GL11.GL_TRIANGLE_STRIP); } ID = ARBShaderObjects.glCreateProgramObjectARB(); Log.debug("shader id: " + ID); for (int obj : shaders) { ARBShaderObjects.glAttachObjectARB(ID, obj); } ARBShaderObjects.glLinkProgramARB(ID); if (ARBShaderObjects.glGetObjectParameteriARB(ID, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) { Log.error(getLogInfo(ID)); ID = 0; return; } ARBShaderObjects.glValidateProgramARB(ID); if (ARBShaderObjects.glGetObjectParameteriARB(ID, ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) { Log.error(getLogInfo(ID)); ID = 0; } } catch (Exception e) { e.printStackTrace(); } }
From source file:com.ardor3d.scene.state.lwjgl.LwjglShaderObjectsStateUtil.java
License:Open Source License
protected static void sendToGL(final GLSLShaderObjectsState state, final ContextCapabilities caps) { if (state.getVertexShader() == null && state.getFragmentShader() == null) { logger.warning("Could not find shader resources!" + "(both inputbuffers are null)"); state._needSendShader = false;// w ww . j av a 2s . c o m return; } if (state._programID == -1) { state._programID = ARBShaderObjects.glCreateProgramObjectARB(); } if (state.getVertexShader() != null) { if (state._vertexShaderID != -1) { removeVertShader(state); } state._vertexShaderID = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB); // Create the sources ARBShaderObjects.glShaderSourceARB(state._vertexShaderID, state.getVertexShader()); // Compile the vertex shader final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glCompileShaderARB(state._vertexShaderID); ARBShaderObjects.glGetObjectParameterARB(state._vertexShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._vertexShaderID, state._vertexShaderName); // Attach the program ARBShaderObjects.glAttachObjectARB(state._programID, state._vertexShaderID); } else if (state._vertexShaderID != -1) { removeVertShader(state); state._vertexShaderID = -1; } if (state.getFragmentShader() != null) { if (state._fragmentShaderID != -1) { removeFragShader(state); } state._fragmentShaderID = ARBShaderObjects .glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB); // Create the sources ARBShaderObjects.glShaderSourceARB(state._fragmentShaderID, state.getFragmentShader()); // Compile the fragment shader final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glCompileShaderARB(state._fragmentShaderID); ARBShaderObjects.glGetObjectParameterARB(state._fragmentShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._fragmentShaderID, state._fragmentShaderName); // Attach the program ARBShaderObjects.glAttachObjectARB(state._programID, state._fragmentShaderID); } else if (state._fragmentShaderID != -1) { removeFragShader(state); state._fragmentShaderID = -1; } if (caps.isGeometryShader4Supported()) { if (state.getGeometryShader() != null) { if (state._geometryShaderID != -1) { removeGeomShader(state); } state._geometryShaderID = ARBShaderObjects .glCreateShaderObjectARB(ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB); // Create the sources ARBShaderObjects.glShaderSourceARB(state._geometryShaderID, state.getGeometryShader()); // Compile the fragment shader final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glCompileShaderARB(state._geometryShaderID); ARBShaderObjects.glGetObjectParameterARB(state._geometryShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._geometryShaderID, state._geometryShaderName); // Attach the program ARBShaderObjects.glAttachObjectARB(state._programID, state._geometryShaderID); } else if (state._geometryShaderID != -1) { removeGeomShader(state); state._geometryShaderID = -1; } } if (caps.isTessellationShadersSupported()) { if (state.getTessellationControlShader() != null) { if (state._tessellationControlShaderID != -1) { removeTessControlShader(state); } state._tessellationControlShaderID = ARBShaderObjects .glCreateShaderObjectARB(ARBTessellationShader.GL_TESS_CONTROL_SHADER); // Create the sources ARBShaderObjects.glShaderSourceARB(state._tessellationControlShaderID, state.getTessellationControlShader()); // Compile the tessellation control shader final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glCompileShaderARB(state._tessellationControlShaderID); ARBShaderObjects.glGetObjectParameterARB(state._tessellationControlShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._tessellationControlShaderID, state._tessellationControlShaderName); // Attach the program ARBShaderObjects.glAttachObjectARB(state._programID, state._tessellationControlShaderID); } else if (state._tessellationControlShaderID != -1) { removeTessControlShader(state); state._tessellationControlShaderID = -1; } if (state.getTessellationEvaluationShader() != null) { if (state._tessellationEvaluationShaderID != -1) { removeTessEvalShader(state); } state._tessellationEvaluationShaderID = ARBShaderObjects .glCreateShaderObjectARB(ARBTessellationShader.GL_TESS_CONTROL_SHADER); // Create the sources ARBShaderObjects.glShaderSourceARB(state._tessellationEvaluationShaderID, state.getTessellationEvaluationShader()); // Compile the tessellation control shader final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glCompileShaderARB(state._tessellationEvaluationShaderID); ARBShaderObjects.glGetObjectParameterARB(state._tessellationEvaluationShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._tessellationEvaluationShaderID, state._tessellationEvaluationShaderName); // Attach the program ARBShaderObjects.glAttachObjectARB(state._programID, state._tessellationEvaluationShaderID); } else if (state._tessellationEvaluationShaderID != -1) { removeTessEvalShader(state); state._tessellationEvaluationShaderID = -1; } } ARBShaderObjects.glLinkProgramARB(state._programID); checkLinkError(state._programID); state.setNeedsRefresh(true); state._needSendShader = false; }
From source file:taiga.code.opengl.shaders.ShaderProgram.java
License:Open Source License
@Override public void load() { try {//from w ww . ja va 2s . com shaderprog = ARBShaderObjects.glCreateProgramObjectARB(); if (!fragsrc.isEmpty()) { String[] src = new String[fragsrc.size()]; fragsrc.toArray(src); attachShader(shaderprog, ARBFragmentShader.GL_FRAGMENT_SHADER_ARB, src); } if (!vertsrc.isEmpty()) { String[] src = new String[vertsrc.size()]; vertsrc.toArray(src); attachShader(shaderprog, ARBVertexShader.GL_VERTEX_SHADER_ARB, src); } if (!geomsrc.isEmpty()) { String[] src = new String[geomsrc.size()]; geomsrc.toArray(src); attachShader(shaderprog, ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB, src); } ARBShaderObjects.glLinkProgramARB(shaderprog); if (ARBShaderObjects.glGetObjectParameteriARB(shaderprog, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) { throw new RuntimeException(getLog(shaderprog)); } ARBShaderObjects.glValidateProgramARB(shaderprog); if (ARBShaderObjects.glGetObjectParameteriARB(shaderprog, ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) { throw new RuntimeException(getLog(shaderprog)); } } catch (RuntimeException ex) { ARBShaderObjects.glDeleteObjectARB(shaderprog); throw ex; } for (Location loc : locations.values()) { if (loc.uniform) loc.index = ARBShaderObjects.glGetUniformLocationARB(shaderprog, loc.name); else loc.index = ARBVertexShader.glGetAttribLocationARB(shaderprog, loc.name); } }