Galaxy Note 2上的奇怪的OpenGL ES 2.0错误

时间:2013-06-25 01:48:59

标签: android opengl-es opengl-es-2.0 galaxy

此顶点着色器代码适用于除 Galaxy Note 2 之外的所有设备。 gl_Position = uMVPMatrix * vPosition; 如果我将矩阵乘法反转为: gl_Position = vPosition * uMVPMatrix;我实际上可以让事情出现。

不幸的是,反过来要求我完全重写我的转换库。

有没有人对可能导致此问题的原因有任何见解,这是设备的opengl驱动程序错误吗?

着色器代码

private final String vertexShaderCode =
    // This matrix member variable provides a hook to manipulate
    // the coordinates of the objects that use this vertex shader
    "uniform mat4 uMVPMatrix;" +

    "attribute vec4 vPosition;" +
    "attribute vec2 a_TexCoordinate;" +
    "varying vec2 v_TexCoordinate;" +
    "void main() {" +
    // the matrix must be included as a modifier of gl_Position
    "v_TexCoordinate = a_TexCoordinate;" +
    "gl_Position = uMVPMatrix * vPosition;" +
    "}";

private final String fragmentShaderCode =
    "precision mediump float;" +
    "uniform sampler2D u_Texture;" +
    "varying vec2 v_TexCoordinate;" +
    "void main() {" +
    "  gl_FragColor = texture2D(u_Texture, v_TexCoordinate);" +
    //"  gl_FragColor = vec4(v_TexCoordinate, 0, 1);" +
    "}";

1 个答案:

答案 0 :(得分:0)

这不仅仅是一个星系2平台。

这是一个数学问题。因为glsl / hlsl都使用列主要顺序,

这是乘以MATRIX x VECTOR

的正确方法

您可以使用

中的选项转置矩阵
  
    

glUniformMatrix4fv(h_Uniforms [UNIFORMS_PROJECTION],1, GL_FALSE或GL_TRUE ,g_proxtrans.s);

  

显然,如果不尝试使用选项(GL_TRUE是使用转置),每个帧都可以调用此函数。