3

この頂点シェーダー コードは、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);" +
    "}";
4

1 に答える 1