現在、Android用のアプリケーションを構築していますが、レンダリングを拒否するシェイダーでいくつかの問題が発生しています。GLSL Shaderは一様変数から色をレンダリングしません
は、次のフラグメントシェーダを検討:
uniform vec4 color;
void main(){
gl_FragColor = vec4(1.0);
}
このシェーダはソリッドカラー(この場合は白)でオブジェクトを描画するため正常に動作します。均一なベクトルcolor
は最適化されており、glGetUniformLocation()
(-1を返します)で見つけることはできません。均一な変数から色を取得しよう
がそうのように行うことができます:私はこれを使用する場合
uniform vec4 color;
void main(){
gl_FragColor = color;
}
しかし、何もレンダリングしません。シェーダが正常に作成され、glGetUniformLocation()
が有効な値(0)を返します。しかし、画面上に何も表示されず、黒でもありません。唯一の変更は、vec4(1.0)
をcolor
に置き換えたことです。 このコードは同じ結果があります。
uniform vec4 color;
void main(){
gl_FragColor = vec4(1.0)+color;
}
奇妙なことは、私は別のプロジェクトでシェーダをしようとしたとき、それはそれが必要として動作するので、問題は、私はコード内の他の場所で行う何かでなければならないということです。
これは私の描画方法(色変数がシェーダでないときに、それが動作することを心に留めておく)である:誰もがいずれかを持っている場合、私は、この奇妙な行動を引き起こしている可能性がありますどのような絶対にないアイデアを持っていない
GLES20.glUseProgram(colorshader);
GLES20.glUniform4f(colorIndex, 1, 1, 1, 1); //colorIndex is the result of glGetUniformLocation() called with the correct shader index and variable name.
Matrix.multiplyMM(mvpMatrix, 0, vpMatrix, 0, matrix, 0);
GLES20.glUniformMatrix4fv(matrixindex, 1, false, mvpMatrix, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vertices);
GLES20Fix.glVertexAttribPointer(Shader.ATTRIBUTE_VERTEX, 3, GLES20.GL_FLOAT, false, 12, 0);
GLES20.glLineWidth(width);
GLES20.GL_UNSIGNED_SHORT, 0);
GLES20.glDrawArrays(GLES20.GL_LINES, 0, count);
アイデアや可能な解決策、私を助けてください。
更新:
サンプラーではありません任意の均一な変数を使用すると、この(とのみ)シェーダでは、この動作が発生しているようです。
アップデート2 glGetError()
リターンエラーコード502: GL_INVALID_OPERATION
を使用します。
「画面に何も表示されず、黒く表示されません。それはどこかでエラーを示唆しています。エラーをチェックしましたか? –
@NicolBolas:私の考えは、シェーダの作成時に明示的なエラーが発生せず、カラーユニフォームの値を得ることができるので、プロセスの後半で間違っているはずです。残念ながら、私はこれをデバッグする方法を知らない。 'glGetError()'はおそらくコードの助けになるでしょうか? – Jave
'glGetError'はあなたが使うべきものです。 –