OpenGL常见关键字

in out与attribute varying

在OpenGL3.0后attribute和varying就被in和out代替了,但是在Android中为了兼容还很很多用attribute和varying的这里我就解释下这两个关键字

attribute

attribute变量是只能在vertex shader中使用的变量,一般用attribute变量来表示一些顶点的数据,像我们写的三角形中就表示顶点的坐标。

varying

varying变量是vertex shader和fragment shader之间做数据传递用的。

    val vertexShaderCode =
            "layout (location = 0) attribute vec3 a_Position;"+
                    "layout (location = 1) attribute vec3 aColor;"+
                    "varying vec3  vertexColor;"+
                    "void main() {" +
                    "    gl_Position =  vec4(a_Position, 1.0);" +
                    "   vertexColor = aColor;"+
                    "}"
    val fragmentShaderCode = "varying vec3 vertexColor;"+
            "void main() {" +
            "    gl_FragColor = vec4(vertexColor, 1.0);" +
            "}"

这里我们就在vertex shader声明了一个vertexColor并且在fragment shader中使用了这个值,这里我们要注意在vertex shader和fragment shader中我们的声明要完全一致

uniform

除了attribute和varying还有一个uniform,在我的理解他就类似static final,你可以在任意一个shader中使用但是不能在shader中修改,在Android中你可以这么使用

        val fragmentShaderCode = "precision mediump float;" +
                "uniform vec4 vColor;" +
                "void main() {" +
                "  gl_FragColor = vColor;" +
                "}"
       val mMVPMatrixHandle = GLES30.glGetUniformLocation(mProgram, "uMVPMatrix")
       GLES30.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0)

你可能感兴趣的:(OpenGL常见关键字)