0

次のようにシェーダーに値を設定できます。

public void setOpacity(float op){

    GLES20.glUseProgram(iProgId);

    // get handle to transformation matrix
    mOpacityHandle = GLES20.glGetUniformLocation(iProgId, "opValue");

    //Apply the opacity value
    GLES20.glUniform1f(mOpacityHandle, op);

}

これは正常に機能します (この特定の例では、このコードを使用してクワッドの不透明度を設定しています)

しかし、シェーダーから設定したばかりの値を照会するにはどうすればよいでしょうか? たとえば、getOpacityメソッドで使用するには?

4

2 に答える 2

1

シェーダーによって書き込また値を読み取ることはできませんが、glGetUniformfv を使用してプログラムの状態からユニフォームの値を読み取ることができます。

したがって、セッターに対応するゲッターは次のようになります。

public float getOpacity(void){
    float value;

    mOpacityHandle = GLES20.glGetUniformLocation(iProgId, "opValue");

    GLES20.glGetUniformfv(iProgId, mOpacityHandle, &value);
    return value;
}

詳細については、Khronos のマニュアル ページを参照してください。

于 2013-06-27T23:50:49.350 に答える
1

OpenGL ES には、シェーダーから値を読み取る機能がありません。これが、シェーダー コードのデバッグが非常に難しい理由です。

glReadPixels() を使用して、フラグメント シェーダーがフレーム バッファーにレンダリングするものを読み戻すことは可能ですが、これは非常に遅いため、実際にはデバッグ手法としてのみ実用的です。

于 2013-06-26T23:44:58.550 に答える