Ios GLSL奇怪的IF行为

Ios GLSL奇怪的IF行为,ios,opengl-es,glsl,Ios,Opengl Es,Glsl,我正在用OpenGL ES 3.0编写一个在iPad视网膜上运行的iPad应用程序 我第一次尝试使用变换反馈,顶点着色器的行为非常奇怪。IF命令中的布尔表达式似乎总是返回true,例如,此着色器: #version 300 es in ivec2 coords; out highp uint vertexID; uniform sampler2D depthTexture; uniform int yResolution; void main () { ivec2 textC

我正在用OpenGL ES 3.0编写一个在iPad视网膜上运行的iPad应用程序

我第一次尝试使用变换反馈,顶点着色器的行为非常奇怪。IF命令中的布尔表达式似乎总是返回true,例如,此着色器:

#version 300 es

in ivec2 coords;


out highp uint vertexID;

uniform sampler2D depthTexture;
uniform int yResolution;

void main () {

    ivec2 textCoords = coords;
    textCoords.y = yResolution - 1 - coords.y;

    bool val = true;
    bool val2 = false;
    if (val == val2) {
        vertexID = uint(6);
        return;
    }
    vertexID = uint(4);
    return;
}
当我映射VBO并检查值时,我得到6

我将在下面发布绘图和映射代码:

    glUseProgram(_ValidInputPixelsProg);

    uniforms[UNIFORM_VALID_INPUT_PIXEL_DEPTH_TEXTURE] = glGetUniformLocation(_ValidInputPixelsProg, "depthTexture");
    uniforms[UNIFORM_VALID_INPUT_PIXEL_Y_RESOLUTION] = glGetUniformLocation(_ValidInputPixelsProg, "yResolution");

    glUniform1i(uniforms[UNIFORM_VALID_INPUT_PIXEL_DEPTH_TEXTURE], 10);
    glUniform1i(uniforms[UNIFORM_VALID_INPUT_PIXEL_Y_RESOLUTION], RESOLUTION_Y);

    glEnable(GL_RASTERIZER_DISCARD);
    glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, inputTFB);
    glBindVertexArray(validPixelsVA);
    glBindBuffer(GL_ARRAY_BUFFER, _inputTFBBuffer);
    glBeginTransformFeedback(GL_POINTS);
    glDrawArrays(GL_POINTS, 0, RESOLUTION_INNER_XY);
    glEndTransformFeedback();
    glBindVertexArray(0);
    glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0);
    glDisable(GL_RASTERIZER_DISCARD);
    glFlush();

    glBindBuffer(GL_ARRAY_BUFFER, indexValidInputPixels);
    GLuint* ptr = (GLuint*)(glMapBufferRange(GL_ARRAY_BUFFER, 0, RESOLUTION_INNER_XY * sizeof(GLuint), GL_MAP_READ_BIT));
    ptr += 320 + 120;
    NSLog(@"\nshader value = %u \n", *ptr);
    glUnmapBuffer(GL_ARRAY_BUFFER);

有人知道我做错了什么吗?

让if语句检查一个非变量

if (val == false)
{
    vertexID = uint(6);
    return;
}

如果两个参数都是非变量,则if的行为符合预期。如果至少有一个参数是变量,那么我会得到这种奇怪的行为,它会进入