Example usage for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB

List of usage examples for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB

Introduction

In this page you can find the example usage for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB.

Prototype

int GL_GEOMETRY_SHADER_ARB

To view the source code for org.lwjgl.opengl ARBGeometryShader4 GL_GEOMETRY_SHADER_ARB.

Click Source Link

Document

Accepted by the type parameter of CreateShader and returned by the params parameter of GetShaderiv.

Usage

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);
    }
}