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 解决了它。我仍然不知道打印语句(和其他函数调用,甚至是空函数)与它有什么关系...
我使用 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 解决了它。我仍然不知道打印语句(和其他函数调用,甚至是空函数)与它有什么关系...