OpenGL:除非打印到控制台,否则不会渲染颜色(来自制服)

OpenGL: won't render color (from uniform) unless printing to the console

我使用 OpenGL 显示了一个带有一些颜色的简单正方形。今天我尝试使用制服设置它的颜色(实际上只是绿色值),它包含当前时间的某种正弦曲线。看起来制服的值只是 0.0,因为它没有显示绿色(将其他颜色设置为 0.0 时为黑色),除非 我在循环中添加一个打印语句(我可以放置它在任何地方)。如果我这样做,它会显示一个颜色变化很好的正方形。

这是怎么回事?!

这是主要来源:

        // MAIN LOOP
        while !window.should_close() {

            // UPDATE STUFF
            let time_value = glfwGetTime();
            let green_value = ((time_value.sin() / 2.0) + 0.5) as GLfloat;
            program.set_uniform1f("uGreenValue", green_value);

            println!("yoo"); // it only works when this is somewhere in the loop 

            // RENDER STUFF
            gl::Clear(gl::COLOR_BUFFER_BIT);
            gl::DrawElements(gl::TRIANGLES, 6, gl::UNSIGNED_INT, 0 as *const GLvoid);

            window.swap_buffers();

这是顶点着色器:

#version 330 core

layout (location = 0) in vec2 aPosition;
layout (location = 1) in float aRedValue;
uniform float uGreenValue;

out float redValue;
out float greenValue;

void main()
{
    gl_Position = vec4(aPosition, 0.0, 1.0);
    redValue = aRedValue;
    greenValue = uGreenValue;
}

这是片段着色器:

#version 330 core

out vec4 Color;
in float redValue;
in float greenValue;

void main()
{
    Color = vec4(redValue, 0.0f, greenValue, 1.0f);
}

我想我找到问题了!在 set_uniform 函数中,我为 glGetUniFormLocation 函数提供了一个非 null 终止的 &str,它并不是在所有情况下都有效。使用 &cstr 解决了它。我仍然不知道打印语句(和其他函数调用,甚至是空函数)与它有什么关系...