私は 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 に伝えます。どうすればいいですか?