0

私は OpenGL と GPUImage を初めて使用するので、これが OpenGL の質問なのか GPUImage の質問なのかわかりません。

出力カラーにカラー オフセットを適用することで、入力をカラー コンポーネントに分離するフラグメント シェーダーを作成しました。

NSString *const kRGBShiftShaderString = SHADER_STRING
(
 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 uniform highp vec2 redOffset;
 uniform highp vec2 greenOffset;
 uniform highp vec2 blueOffset;

 void main()
 {
     highp vec4 textureColor      = texture2D(inputImageTexture, textureCoordinate);

     highp vec4 redOffsetColor    = texture2D(inputImageTexture, textureCoordinate + redOffset);
     highp vec4 greenOffsetColor  = texture2D(inputImageTexture, textureCoordinate + greenOffset);
     highp vec4 blueOffsetColor   = texture2D(inputImageTexture, textureCoordinate + blueOffset);

     highp vec4 outputColor;

     outputColor.r         = redOffsetColor.r;
     outputColor.g         = greenOffsetColor.g;
     outputColor.b         = blueOffsetColor.b;
     outputColor.a         = 1.0;

     gl_FragColor = outputColor;

 }
);

textureCoordinate + offsetこれは、1 つ以上のコンポーネントで > 1 または < 0の場合を除いて、意図したとおりに機能します。その場合、色は入力テクスチャのエッジにある色に固定されます。

私が望んでいるのは、textureCoordinate + オフセットが > 1 または >0 の場合、フィルターは効果がないということです。

シェーダーに条件を入れてこれを行うのはかなりばかげていると思います。代わりに、テクスチャ座標 + オフセットが [0, 1] にあるフラグメントにのみフィルターが適用されることを GPUImage に伝えます。どうすればいいですか?

4

0 に答える 0