Ich schreibe eine einfache OpenGL-Anwendungen, die die Möglichkeit bietet, die Farbe eines Netzes mit einem Fragment-Shader zu ändern. Jedoch ist die uniform float time
Variable, die verwendet wird, um die Farbe (sin(time)
) regelmäßig zu ändern, aus irgendeinem Grund nicht funktionsfähig.Qt 5.5 und OpenGL: Programm verhält sich merkwürdig ohne ersichtlichen Grund
Darüber hinaus ist das gesamte Netz in einer weißen Farbe ausgefüllt ... EDIT: Ich habe einfach vergessen, das aktuelle ShaderProgramm zu binden. Der einheitliche Schwimmer Zeitvariable nichts zu tun, ist immer noch nicht, obwohl fester ...
Der PaintGL
Code:
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;
}
die Fragment-Shader:
#version 330 core
uniform float time;
out vec3 color;
void main() {
color = vec3(sin(time), 1.0f, 0.0f);
}
Hinweis ich die "Vertex" weggelassen Vertex-Shader-Attribut, das zum Platzieren der Scheitelpunkte verwendet wird - das nimmt auch den Index 0 in Anspruch, ich bin mir nicht sicher, ob dies das Problem ist und selbst, wie es zu lösen ist.
qDebug Ausgang (oder ein Teil davon sowieso):
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
...
I gefragt, ob vielleicht das Problem, dass sein kann habe ich die Vertex- und Fragment-Shader sowohl loaded im shader
QOpenGLShaderProgram Objekt, aber zu diesem Stadium I kann nicht mehr tun, als nur Schätzungen in eine allgemeine Richtung zu werfen.