gpt4 book ai didi

c++ - Qt 5.5 和 OpenGL : Program behaves strangely without any apparent reason

转载 作者:行者123 更新时间:2023-11-28 05:45:49 26 4
gpt4 key购买 nike

我正在编写一个简单的 OpenGL 应用程序,它具有使用片段着色器更改网格颜色的功能。但是,用于定期更改颜色的 uniform float time 变量 (sin(time)) 由于某种原因无法正常工作。

此外,整个网格填充为白色... 编辑:我只是忘记绑定(bind)当前的 shaderProgram。不做任何事情的统一 float 时间变量仍然没有固定......

PaintGL代码:

void OpenGLWidget::paintGL() {
static unsigned int frame = 0;

vao->bind();
shaders->link();
shaders->bind();

// Enabling custom shader atttributes
int timeIndex = shaders->uniformLocation("time");

qDebug() << "Time index:" << timeIndex;

shaders->setUniformValue(timeIndex, time->elapsed());
shaders->link();

qDebug() << "Frame " << frame << "| created = " << elems->isCreated() << "| time = " << time->elapsed()/1000.f;

glDrawElements(GL_TRIANGLE_FAN, rawelems.size(), GL_UNSIGNED_INT, 0);

vao->release();
++frame;
}

片段着色器:

#version 330 core

uniform float time;
out vec3 color;

void main() {
color = vec3( sin(time), 1.0f, 0.0f );
}

请注意,我省略了用于放置顶点的​​“顶点”顶点着色器属性 - 它也占用索引 0,我不确定这是否是问题所在,即使它是如何解决它。

qDebug 输出(或部分):

TimeINDEX: 0

Shader compilation log: ""
Time index: 0
Frame 0 | created = true | time = 0.268
Time index: 0
Frame 1 | created = true | time = 0.372
Time index: 0
Frame 2 | created = true | time = 0.44
...

我想知道问题是否可能在于我将顶点着色器和片段着色器都加载到 shader QOpenGLShaderProgram 对象中,但在这个阶段我只能做一些猜测一个总体方向。

最佳答案

原来问题出在行中:

shaders->link();

就在

shaders->setUniformValue(timeIndex, time->elapsed());

一旦我删除了 link() 函数调用,一切都正常运行。

关于c++ - Qt 5.5 和 OpenGL : Program behaves strangely without any apparent reason,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com