Probleme mit OpenGL3 Texturing

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
snoob741
Beiträge: 76
Registriert: 03.04.2012, 22:36

Probleme mit OpenGL3 Texturing

Beitrag von snoob741 »

Ich vesuche grade mein OpenGL2 Code auf OpenGL3 zu migrieren. Dabei habe ich meine GLSL Shader schon soweit angepasst, dass sie OpenGL3 konform sind und nicht auf die fixed function Pipeline zurückgreifen. Unter OpenGL2 bekomme ich das gewünschte Resultat gerendert. Unter OpenGL3 trotz der gleichen Bindings sehe ich nichts beim rendering, sobald ich eine Textur im fragment Shader verwende (setzte ich anstelle des textur outputs einen harten farbwert dann wird mein QUAD korrekt gerendert, d.h. die Positionierung passt). Meine Vermutung ist daher, dass entweder etwas mit den Bindings der Texturkoordinaten oder dem Sampler nicht passt...

Da ich irgenwie weder GLSDevil noch den gDEBugger zum Laufen bekomme habe ich mir mal mit APITrace zwei Logs (GUI hab ich noch nicht zum Fliegen bekommen) erstellt, soweit ich das überblicken kann sind beide Traces im wesentlichen Identisch und auch die relevanten Bindings für die Texturkoordinaten und dem Sampler sind identisch.

Eigentlich sollten die Shader Bindings für OpenGL3 doch indentisch sein (solange ich noch kein GLSL Layout verwende) oder? Habe beide Traces schon mehrfach überprüft, sehe keinen nennenswerten Unterschied ... Hat jemand eine Idee was hier falsch sein könnte?
Dateianhänge
trace-gl3.log
API Trace OpenGL 3
(262.08 KiB) 240-mal heruntergeladen
trace-gl2.log
API Trace OpenGL 2
(280.04 KiB) 212-mal heruntergeladen
Benutzeravatar
mOfl
Beiträge: 37
Registriert: 23.10.2010, 21:53

Re: Probleme mit OpenGL3 Texturing

Beitrag von mOfl »

Der erste Schritt ist auf die Schnelle, den aktuellen State auf Fehler zu prüfen:

Code: Alles auswählen

GLenum error = glGetError();
glGetError löscht den Fehler, nachdem er zurückgegeben wurde, d. h. beim erneuten Aufruf bekommst du sicher 0 zurück, solange kein neuer Fehler aufgetreten ist. Jetzt kannst du dich im Code von unten nach oben tasten und schauen, bei welchem gl-Call genau du in einen fehlerhaften State gekommen bist - vorausgesetzt, es treten irgendwelche Fehler auf. Wenn du den Call identifiziert hast, schaust du z. B. in die API und kannst nachlesen, in welchem Fall der Call diesen Fehlercode produziert. Beim Texturing kann das zum Beispiel am falschen Generieren der Mipmap oder an falschen Texturparametern liegen.

OpenGL 3.2+ und Fixed Function schließen sich übrigens nicht aus, es ist im Compatibility Profile weiterhin alles erlaubt. Nur im Core Profile wirst du gezwungen, auf veraltete Funktionalität zu verzichten. Dann werden bei deprecated Calls zur Laufzeit (im Shadercode beim Kompilieren) Fehler zurückgegeben, aus denen du ebenfalls nützliche Informationen gewinnst.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Probleme mit OpenGL3 Texturing

Beitrag von Jonathan »

Hast du daran gedacht, dass du keine Texturen an Texture-Sampler binden kannst? Du musst sowohl Textur als auch Textur-Sampler an eine Texturunit binden, die dann die Schnittstelle zwischen denen herstellt. Siehe dazu auch die OpenGL Doku:

http://www.opengl.org/wiki/GLSL_Sampler ... o_samplers
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten