0

OpenG-ES 2.0 を使用していくつかのオブジェクトを描画するアプリケーションがあります。アプリケーションは、一部の samsung デバイスでレンダリングに失敗します。デバッグを試みたところ、頂点シェーダーとフラグメント シェーダーに問題があるようです。

これが私のシェーダーコードです:
Vertex Shader:

attribute vec3 Position; 
attribute vec4 SourceColor; 

varying vec4 DestinationColor; 

uniform mat4 Projection;
uniform mat4 Modelview;
uniform mat4 CordTransform;
attribute float flag;
attribute float clubColorFlag;

attribute vec2 TexCoordIn; // New
varying vec2 TexCoordOut; // New
varying float flagS;
varying float flagClubColorS;
void main(void) {   
        gl_Position = Projection * Modelview * vec4(Position,1.0);  
        flagS = flag;  
        flagClubColorS = clubColorFlag;  
        if (clubColorFlag == 1.0) {  
            DestinationColor = vec4(0.190,0.309,0.309,1.0);  
        }  
        else {   
            DestinationColor = SourceColor;  
        }  
        exCoordOut = TexCoordIn;  
        gl_PointSize = 1.0;  
    }

フラグメント シェーダー:

varying lowp vec4 DestinationColor;

varying lowp vec2 TexCoordOut; // New
uniform sampler2D Texture; // New
varying lowp float flagS;
varying lowp float flagClubColorS;
void main(void) {

    gl_FragColor = DestinationColor;
    if(flagS == 1.0){
        gl_FragColor = DestinationColor;
    }
    else if (flagClubColorS == 1.0) {
        gl_FragColor = DestinationColor;
    }
    else if (flagS == 0.0){
        gl_FragColor = DestinationColor * texture2D(Texture, TexCoordOut); // New
    }
}  

何が問題なのかわかりませんが、フラグメント シェーダーの if-else 部分をコメント アウトすると、テクスチャが均一 -1 になります。他のシナリオでは、ゼロです。どちらのシェーダーもエラーなしでコンパイルされます。
精度に関係ありますか?問題のデバッグを手伝ってください。

4

1 に答える 1

-1

後でこれを参照する予定の人のために、私自身の質問に答えています。私は問題を解決することができました。

問題はどちらのシェーダーにもありませんでした。問題は、glDrawElements()メソッドを使用して、頂点バッファーとインデックス バッファーでオブジェクトを描画していたことです。glDrawArrays()この呼び出しを頂点バッファーのみを使用するメソッドに置き換えたところ、すべて正常に機能しました。

正確な問題はまだわかりませんが、同様の問題で長い間苦労している人を助けるかもしれません.

于 2012-08-29T08:30:02.503 に答える