Opengl es 如何确定GLSL ES中纹理的奇偶线

Opengl es 如何确定GLSL ES中纹理的奇偶线,opengl-es,glsl,shader,Opengl Es,Glsl,Shader,我需要删除纹理中的所有奇数线-这是一个简单的逐行扫描的一部分 在下面的代码示例中,我没有从纹理中获取RGB,而是选择输出奇数行的白色和偶数行的红色,这样我就可以直观地检查结果是否符合我的预期 _texcoord是从顶点着色器传入的,x和y的范围均为[0,1] uniform sampler2D sampler0; /* not used here because we directly output White or Red color */ varying highp vec2 _texcoo

我需要删除纹理中的所有奇数线-这是一个简单的逐行扫描的一部分

在下面的代码示例中,我没有从纹理中获取RGB,而是选择输出奇数行的白色和偶数行的红色,这样我就可以直观地检查结果是否符合我的预期

_texcoord是从顶点着色器传入的,x和y的范围均为[0,1]

uniform sampler2D sampler0; /* not used here because we directly output White or Red color */
varying highp vec2 _texcoord;
void main() {
    highp float height = 480.0; /* assume texture has height of 480 */
    highp float y = height * _texcoord.y;
    if (mod(y, 2.0) >= 1.0) {
        gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
    } else {
        gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0); 
    }
}
渲染到屏幕时,输出不是预期的。垂直方向是RRWWWRW,但我真的很期待RW(即红色和白色交替)

我的代码运行在iOS上,目标是GLE2.0,所以在Android上和GLE2.0应该没有什么不同

问题:我哪里做错了

编辑

  • 是,纹理高度正确
  • 我想我的问题是:给定一个texcoord.y,如何判断它是指纹理的奇数线还是偶数线
    确保纹理高度为480cm使用
    sampler2D
    不是一个好主意。您需要直接的整数索引纹理访问,而不是插值采样。如何禁用插值采样并使用整数索引纹理访问?GL_纹理_矩形在GLESIMHO中不可用,着色器应按预期工作。你确定错误不可能在其他地方吗?你的输出矩形(我假设这里是一个矩形)的高度也是480px吗?我觉得你的着色器不错。
    void main(void)
    {
        vec2 p= vec2(floor(gl_FragCoord.x), floor(gl_FragCoord.y));
        if (mod(p.y, 2.0)==0.0)
            gl_FragColor = vec4(texture2D(tex,uv).xyz ,1.0);
        else
            gl_FragColor = vec4(0.0,0.0,0.0 ,1.0);
    }