[SOLVED] GLSL - Shader
-
Hallo!
Ich versuche derzeit kläglich per-Pixel-Lighting zu programmieren. Ich nutze GLEW und eine ARB extension (was genau weiß ich selbst nicht
):Ich bin "gezwungen" glUseProgramObjectARB() in initializeGL() (anstatt in paintGL()) zu schreiben, sonst kommt eine (Qt-spezifische) Meldung:
QOpenGLPaintEngine: Failed to create fragment programs.
(ich hoffe das ist kein Qt Problem). Jedoch will ich für diverse Anzeigen pixel-lighing ausschalten, die die schrift so zB nur noch schwer erkennbar ist!
void glWidget::initGL() { GLhandleARB programObject; GLhandleARB vertexShaderObject; GLhandleARB fragmentShaderObject; programObject = glCreateProgramObjectARB(); vertexShaderObject = createShaderARB(GL_VERTEX_SHADER_ARB, "src/shaders/pixelLighting.vert"); fragmentShaderObject = createShaderARB(GL_FRAGMENT_SHADER_ARB, "src/shaders/pixelLighting.frag"); glAttachObjectARB(programObject, vertexShaderObject); glAttachObjectARB(programObject, fragmentShaderObject); glDeleteObjectARB(vertexShaderObject); glDeleteObjectARB(fragmentShaderObject); glLinkProgramARB(programObject); perPixelLighting = &programObject; //Wenn es hier steht, geht es: glUseProgramObjectARB(*perPixelLighting); }void glWidget::paintGL() { glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //Hier kommt eine Meldung und der shader funktioniert offensichtlich nicht glUseProgramObjectARB(*perPixelLighting); //Szene zeichnen //Hier hätte ich den shader theoretisch "deaktiviert": glUseProgramObjectARB(0); //Anzeigen glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, width(), height(), 0, -50, 50); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); //Anzeigen zeichnen glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); }Ich hoffe ihr versteht was ich meine

-
Dein Handle für programObject ist lokal definiert, wenn initGL verlassen wird, existiert das handle nich mehr... da hilfts auch nichts einen pointer drauf zu speichern
-
Wie dumm von mir...

Danke!