Example usage for com.google.gwt.corp.webgl.client WebGL GL_LINK_STATUS

List of usage examples for com.google.gwt.corp.webgl.client WebGL GL_LINK_STATUS

Introduction

In this page you can find the example usage for com.google.gwt.corp.webgl.client WebGL GL_LINK_STATUS.

Prototype

int GL_LINK_STATUS

To view the source code for com.google.gwt.corp.webgl.client WebGL GL_LINK_STATUS.

Click Source Link

Usage

From source file:jake2.gwt.client.WebGLAdapter.java

License:Open Source License

private void initShader() {
    String vertexShaderSource = "attribute vec4 a_position;\n" + "attribute vec4 a_color;\n"
            + "attribute vec2 a_texCoord0; \n" + "attribute vec2 a_texCoord1; \n"
            + "uniform mat4 u_mvpMatrix; \n" + "varying vec4 v_color; \n" + "varying vec2 v_texCoord0; \n"
            + "varying vec2 v_texCoord1; \n" + "void main() {\n" + "  gl_Position = u_mvpMatrix * a_position;\n"
            + "  v_color = a_color;        \n" + "  v_texCoord0 = a_texCoord0;  \n"
            + "  v_texCoord1 = a_texCoord1;  \n" + "}\n";

    String fragmentShaderSource = "uniform sampler2D s_texture0;  \n" + "uniform sampler2D s_texture1;  \n"
            + "uniform int s_texEnv0;  \n" + "uniform int s_texEnv1;  \n" + "uniform int u_enable_texture_0; \n"
            + "uniform int u_enable_texture_1; \n" + "varying vec4 v_color; \n"
            + "varying vec2 v_texCoord0;      \n" + "varying vec2 v_texCoord1;" + "vec4 finalColor;      \n"
            + "void main() {                 \n" + "finalColor = v_color;"
            + "  if (u_enable_texture_0 == 1) { \n" + "    vec4 texel = texture2D(s_texture0, v_texCoord0); \n"
            + "    if(s_texEnv0 == 1) { " + "      finalColor = finalColor * texel;"
            + "    } else if (s_texEnv0 == 2) {"
            + "      finalColor = vec4(texel.r, texel.g, texel.b, finalColor.a);" + "    } else {"
            + "      finalColor = texel;" + "    }" + "}" + " if (u_enable_texture_1 == 1) { \n"
            + "      vec4 texel = texture2D(s_texture1, v_texCoord1); \n" + "    if(s_texEnv1 == 1) { "
            + "      finalColor = finalColor * texel;" + "    } else if (s_texEnv1 == 2) {"
            + "      finalColor = vec4(texel.r, texel.g, texel.b, finalColor.a);" + "    } else {"
            + "      finalColor = texel;" + "    }" + "  } \n" +
            // simple alpha check
            " if (finalColor.a == 0.0) {\n" + "   discard;\n" + " }\n" + " gl_FragColor = finalColor; \n"
            + "}\n";
    //    }//from  ww  w . j a v a 2 s  .c om

    // create our shaders
    WebGL.Shader vertexShader = loadShader(WebGL.GL_VERTEX_SHADER, vertexShaderSource);
    WebGL.Shader fragmentShader = loadShader(WebGL.GL_FRAGMENT_SHADER, fragmentShaderSource);

    if (vertexShader == null || fragmentShader == null) {
        log("Shader error");
        throw new RuntimeException("shader error");
    }

    // Create the program object
    WebGL.Program programObject = gl.glCreateProgram();
    if (programObject == null || gl.glGetError() != WebGL.GL_NO_ERROR) {
        log("Program errror");
        throw new RuntimeException("program error");
    }
    // Attach our two shaders to the program

    gl.glAttachShader(programObject, vertexShader);
    gl.glAttachShader(programObject, fragmentShader);

    // Bind "vPosition" to attribute 0
    gl.glBindAttribLocation(programObject, GLAdapter.ARRAY_POSITION, "a_position");
    gl.glBindAttribLocation(programObject, GLAdapter.ARRAY_COLOR, "a_color");
    gl.glBindAttribLocation(programObject, GLAdapter.ARRAY_TEXCOORD_0, "a_texCoord0");
    gl.glBindAttribLocation(programObject, GLAdapter.ARRAY_TEXCOORD_1, "a_texCoord1");

    // Link the program
    gl.glLinkProgram(programObject);

    //TODO(haustein) get position, color from the linker, too
    uMvpMatrix = gl.glGetUniformLocation(programObject, "u_mvpMatrix");
    uSampler0 = gl.glGetUniformLocation(programObject, "s_texture0");
    uSampler1 = gl.glGetUniformLocation(programObject, "s_texture1");
    uTexEnv0 = gl.glGetUniformLocation(programObject, "s_texEnv0");
    uTexEnv1 = gl.glGetUniformLocation(programObject, "s_texEnv1");

    uEnableTexture0 = gl.glGetUniformLocation(programObject, "u_enable_texture_0");
    uEnableTexture1 = gl.glGetUniformLocation(programObject, "u_enable_texture_1");

    // // Check the link status
    boolean linked = gl.glGetProgramParameterb(programObject, WebGL.GL_LINK_STATUS);
    if (!linked) {
        throw new RuntimeException("linker Error: " + gl.glGetProgramInfoLog(programObject));
    }

    gl.glUseProgram(programObject);

    gl.glUniform1i(uSampler0, 0);
    gl.glUniform1i(uSampler1, 1);
    gl.glActiveTexture(GL_TEXTURE0);
}