Probleme mit GLSL Uniform update

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 GLSL Uniform update

Beitrag von snoob741 »

Ich versuche aktuell grad meinen OpenGL 2.x GLSL Rendermechanismus an meinen OpenGL 3.x und OpenGLES2 rendering anzugleichen. D.h. ich versuche die
in OpenGL 2.x üblichen GLSL Statecalls durch Attribute und Uniforms zu ersetzen, damit der Shader code weitgehenst identisch ist. Klappt z.B. für meine Vertexdaten
schon hervorragend, hier verwende ich anstelle von gl_Vertex ein Vertex Attibut ...

Nun versuche ich gl_ModelViewProjectionMatrix durch einen Uniform call zu ersetzen. Und zwar konkret durch glUniformMatrix4fv. Das Extension konnte ich setzen
und erhalte auch unter OpenGL 2.x einen gültigen Funktionszeiger.

Code: Alles auswählen

PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = 0;
glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)brGetProcAddress("glUniform4fv");

if(!glUniformMatrix4fv){
       throw brCore::brIllegalStateException(
       "[brGLSLShader]::checkGLSLFunctionPointers: Extension function glUniformMatrix4fv is invalid!");
}
[Fri Jun 28 14:37:23 2013]: Driver vendor: NVIDIA Corporation
[Fri Jun 28 14:37:23 2013]: OpenGL version: 3.3.0
[Fri Jun 28 14:37:23 2013]: Graphics card : GeForce GTX 260/PCIe/SSE2
[Fri Jun 28 14:37:23 2013]: Supported OpenGL extensions :
[Fri Jun 28 14:37:23 2013]: OpenGL shading language version: 3.30 NVIDIA via Cg compiler
Doch crasht mir dann die Applikation beim Aufruf dieser Funktion mit einem Segfault:

Code: Alles auswählen

Program received signal SIGSEGV, Segmentation fault.
0x0000000002ff0d64 in nvoglv64!DrvGetProcAddress ()
   from C:\Windows\system32\nvoglv64.dll
(gdb) backtrace
#0  0x0000000002ff0d64 in nvoglv64!DrvGetProcAddress ()
   from C:\Windows\system32\nvoglv64.dll
#1  0x0000000002853b81 in ?? () from C:\Windows\system32\nvoglv64.dll
#2  0x0000000007aa0290 in ?? ()
warning: (Internal error: pc 0xe in read in psymtab, but not in symtab.)

warning: (Internal error: pc 0xe in read in psymtab, but not in symtab.)

#3  0x000000000000000f in ?? ()
warning: (Internal error: pc 0xe in read in psymtab, but not in symtab.)

#4  0x00000000005ac780 in ?? ()
#5  0x0000000002a94c70 in ?? () from C:\Windows\system32\nvoglv64.dll
#6  0x0000000000000000 in ?? ()
Komischerweise knallt es nur bei dieser Funktion. Hab erst gedacht es liegt am NVidia Treiber und diesen auf den neusten Stand
gebracht. Brachte aber keinen Erfolg. Der gleiche Funktionsaufruf stirbt auch auf einem integrierten Intel Grafik Chipsatz ...
Wenn ich OpenGL 3.x oder OpenGLES2 verwende gibt es keine Probleme mit dem Funktionsaufruf.

Hat jemand eine Idee was hier schief laufen könnte?
snoob741
Beiträge: 76
Registriert: 03.04.2012, 22:36

Re: Probleme mit GLSL Uniform update

Beitrag von snoob741 »

Fehler gefunden:
glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)brGetProcAddress("glUniform4fv");
Das kann ja auch nicht funktionieren, sollte schon den richtigen Funktionsnamen verwenden. Gnarf. :x
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Probleme mit GLSL Uniform update

Beitrag von kimmi »

Schon mal daran gedacht, so etwas wie glew zu benutzen?

Gruß Kimmi
Antworten