3

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);
    }
}

前もって感謝します。

4

1 に答える 1

9

代わりに bool をglUniform(1.0 または 0.0) として作成します。で値を設定しますglUniform1f(GLint location, GLfloat v0)。シェーダーで、次のように値を確認します。

if (my_uniform < 0.5) {
    // FALSE
} else {
    // TRUE
}
于 2012-08-11T05:42:25.773 に答える