Bir parça gölgelendiriciyi kullanarak bir ağın rengini değiştirme yeteneğine sahip basit bir OpenGL uygulaması yazıyorum. Ancak, rengin periyodik olarak değiştirilmesi için kullanılan uniform float time
değişkeni (sin(time)
) bazı nedenlerle işlevsizdir.Qt 5.5 ve OpenGL: Program herhangi bir neden olmadan garip bir şekilde davranıyor
Ayrıca, tüm kafes beyaz renkte doldurulur ... DÜZENLEME: Sadece geçerli shaderProgramı bağlamayı unuttum. hiçbir şey yapmıyor üniforma şamandıra zamanı değişken hala ... gerçi sabit değildir
PaintGL
kodu:
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;
}
fragmanı shader: Ben "köşe" atladık
#version 330 core
uniform float time;
out vec3 color;
void main() {
color = vec3(sin(time), 1.0f, 0.0f);
}
Not verteks yerleştirmek için kullanılan köşe shader özniteliği - bu da indeksi 0 alır, ben sorun bu ise ve nasıl çözülürse emin değilim.
qDebug çıkışı (veya yine de bazı), belki de problem olabilir merak
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
...
Bu işte shader
QOpenGLShaderProgram nesnesinde yüklenen her iki köşe ve shader parçası vardır, ancak Aşama, sadece genel bir doğrultuda tahminler atmaktan fazlasını yapamaz.