OpenGL ES 2.0 は初めてなので、ご容赦ください... BOOL フラグをフラグメント シェーダーに渡して、アプリで特定のタッチ イベントが発生した後に gl_FragColor を別の方法でレンダリングしたいと考えています。これに vec2 属性を使用して、.x 値を「BOOL」として「偽造」してみましたが、OpenGL はシェーダーが値を取得する前に値を 0.0 から 1.0 に正規化しているようです。したがって、アプリで 0.0 に設定したとしても、シェーダーが処理を行っている間、値は最終的に 1.0 に到達します。どんな提案でも大歓迎です。
頂点属性コード:
// set up context, shaders, use program etc.
[filterProgram addAttribute:@"inputBrushMode"];
inputBrushModeAttribute = [filterProgram attributeIndex:@"inputBrushMode"];
bMode[0] = 0.0;
bMode[1] = 0.0;
glVertexAttribPointer(inputBrushModeAttribute, 2, GL_FLOAT, 0, 0, bMode);
現在の頂点シェーダー コード:
...
attribute vec2 inputBrushMode;
varying highp float brushMode;
void main()
{
gl_Position = position;
...
brushMode = inputBrushMode.x;
}
現在のフラグメント シェーダー コード:
...
varying highp float brushMode;
void main()
{
if(brushMode < 0.5) {
// render the texture
gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
} else {
// cover things in yellow funk
gl_FragColor = vec4(1,1,0,1);
}
}
前もって感謝します。