Seite 1 von 1

[OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 16.07.2012, 17:46
von Matthias Gubisch
Hallo

ich spiele mich zur Zeit ein wenig mit OpenGL Shadern.

Hier mal der Vertex Shader

Code: Alles auswählen

#version 420

layout(location = 0) in vec3 Position3;

out vec4 vertexColor;

void main ()
{
	gl_Position = gl_ModelViewProjectionMatrix * vec4(Position3, 1.0);
	vertexColor = vec4(1.0, 0.0, 0.0, 1.0);
}
und hier der Fragment Shader

Code: Alles auswählen

#version 420

in vec4 vertexColor;
out vec4 outputColor;

void main()
{
	outputColor = vertexColor;
}
Soweit ich das verstanden habe müsste mein Mesh in Rot auf dem Bildschrim erscheinen. Den Versuch mache ich an einem einfachen Dreieck.
Leider erscheint das Dreieck zwar an der richtigen Stelle, allerdings ist es tiefschwarz anstatt rot. Setze ich im Fragmentprogramm die Ausgabefarbe direkt funktioniert dies.
Es scheint mir fast so als würde der Vertexshader-Output nicht richtig an den Fragmentshader weitergegeben :(

Beim Compilieren bekomme ich weder Fehler noch Warnings.

Muss ich die Komponenten noch irgendwie manuell binden? Sämtliche Turoials die ich so gefunden habe sprechen davon dass das nicht notwendig ist.

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 16.07.2012, 21:01
von mOfl
Hast du den Vertex Shader gekürzt oder ist das der vollständige Code? Der sollte so nämlich nicht kompilieren, weil du vPosition nicht definiert hast. Die korrekte Variable für die Position lautet gl_Position, also

Code: Alles auswählen

gl_Position = gl_ModelViewProjectionMatrix * vec4(Position3, 1.0);
Probier das mal.

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 17.07.2012, 08:08
von Matthias Gubisch
Sorry war ein Copy Paste fehler, hab beim rumprobieren vPosition mal definiert gehabt. Habs oben geändert

mit gl_Position funktionierts so leider auch nicht.
Wenn ich in der ersten Zeile allerdings "#version 420 compatibility" schreibe funktioniert der Shader wie gewünscht.

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 17.07.2012, 08:49
von kristof
Ich bin mir grad nicht 100% sicher, aber so weit ich weiß ist das in OpenGL eingebaute Matrix System (also glTranslate, glRotate, glLoadMatrix ...) seit OpenGL 3.x deprecated. Einhergehend damit wurden auch die in GLSL eingebauten Variablen gl_ModelViewProjectionMatrix und co bedeutungslos.
Du müsstest also die Projektions- und Transformations-Matrizen selber berechnen und über ein uniform übergeben.
Ich bin mir aber wie gesagt nicht ganz sicher. Dafür würde aber sprechen, dass es mit der compatibility Option geht.

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 17.07.2012, 12:30
von Matthias Gubisch
Danke für den Hinweis, das Problem war tatsächlich dass es die eingebauten Matrizen nicht mehr gibt.
Schön nur dass es da keinerlei Warnungen gibt :(

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 17.07.2012, 12:51
von dot
Matthias Gubisch hat geschrieben:Danke für den Hinweis, das Problem war tatsächlich dass es die eingebauten Matrizen nicht mehr gibt.
Schön nur dass es da keinerlei Warnungen gibt :(
Hast du auch sicher einen Core Profile Context? Denn wenn ja, dann sollte das eigentlich tatsächlich nicht kompilieren...

Re: [OpenGL 4.2] VS out landet nicht in FS in

Verfasst: 17.07.2012, 17:33
von Matthias Gubisch
Hatte wohl anscheinend keinen Core Profile Context.
Habs umgestellt und jezt bekomm ich beim compilieren auch entsprechende Fehlermeldungen....

Danke nochmal für eure Hilfe