我是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。在这种情况下,颜色会夹在输入纹理边缘的任何颜色处。
我希望发生的是当textureCoordinate + offset为>时,过滤器无效。 1或> 0。
我认为通过在着色器中添加条件来实现这一点非常愚蠢。相反,我宁愿告诉GPUImage过滤器仅适用于textureCoordinate + offset在[0,1]中的片段。我该怎么做?