我是 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 或 < 0 的情况。在这种情况下,颜色会钳制到输入纹理边缘的任何颜色。
我想要发生的是,当纹理坐标 + 偏移量 > 1 或 > 0 时,过滤器不起作用。
我认为通过在着色器中添加条件来做到这一点是非常愚蠢的。相反,我宁愿只告诉 GPUImage 该过滤器仅适用于纹理坐标 + 偏移量在 [0, 1] 中的片段。我该怎么做?