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 或 < 0 的情况。在这种情况下,颜色会钳制到输入纹理边缘的任何颜色。

我想要发生的是,当纹理坐标 + 偏移量 > 1 或 > 0 时,过滤器不起作用。

我认为通过在着色器中添加条件来做到这一点是非常愚蠢的。相反,我宁愿只告诉 GPUImage 该过滤器仅适用于纹理坐标 + 偏移量在 [0, 1] 中的片段。我该怎么做?

4

0 回答 0