Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
um abzuprüfen wieviele Textureinheiten verfügbar sind verwende ich die Funktion glGetIntegerV.
Leider liefert die Funktion mit dem Wert GL_MAX_TEXTURE_UNITS kein sinnvolles Ergebnis. Der
Aufruf von glGetIntegerV mit anderen Werten hingegen liefert die erwarteten Ergebnisse
(z.B.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
GL_MAX_TEXTURE_UNITS und GL_MAX_TEXTURE_UNITS_ARB sind genau das Gleiche. Im Header sind das zwar zwei unterschiedliche Konstanten aber bei OpenGL kommt immer nur der selbe Wert an.
Und etwas anderes wie ich finde nicht ganz unwichtiges. GL_MAX_TEXTURE_UNITS und GL_MAX_TEXTURE_IMAGE_UNITS bedeuten nicht das Gleiche. GL_MAX_TEXTURE_IMAGE_UNITS ist die Anzahl der TMUs die in einem Shader verfügbar sind. Die Anzahl der TMUs ohne Shader ist auf neueren Karten bei ATI eigentlich 8 und auf NV irgendwas zwischen 4-8. Im Shader aber 16.
Bei mir (ATI X800 GTO) funktioniert der Aufruf problemlos. Stell bitte sicher, dass OpenGL zu dem Zeitpunkt initialisiert und aktiviert ist. Bzw überprüfe auch mal welche Version von OpenGL du vor dir hast. Dazu gibt es im Header verschiedene Konstanten. GL_VERSION_1_1 etc. Für GL_MAX_TEXTURE_UNITS wird OpenGL 1.3 verrausgesetzt oder aber die Extension GL_ARB_multitexture. Und das kann heutzutage eigentlich nur dann nicht erfüllt sein, wenn du Probleme mit dem Treiber hast oder dich im Softwaremodus befindest. (Was beides wohl auf das Gleiche hinausläuft)
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
opengl ist up and running. während ich den funktionsaufruf mache um die version zu lesen, dreht sich im hintergrund eine gerenderte kugel. müsste also alles korrekt initialisiert sein.
wie ich in meinem eingangsartikel geschhrieben habe, verwende ich die dglOpengl.pas version 2.1
die darin deklarierten versionsvariablen gehen bis 2.1
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja $1F02 ist richtig.
Und mir ging es nicht darum welche Version des Headers du verwendest sondern welche Versionsvariablen gesetzt sind? Also welche Version von OpenGL du da hast? Das kannst rausfinden in dem du schaust welche von dieses GL_VERSION_?_? gesetzt sind. Denn für GL_MAX_TEXTURE_UNITS wird OpenGL 1.3 (GL_VERSION_1_3 muss gesetzt sein) verrausgesetzt. Wenn das nicht der Fall ist dann bekommst du eben den invalid enum fehler, da OpenGL das halt noch nicht kennt.
Für GL_MAX_TEXTURE_IMAGE_UNITS wird OpenGL 2.0 verrausgesetzt. Aber das ist es eigentlich was anderes.
Jetzt weiß ich also, dass meine laufende OpenGLversion 1.1 ist. Ist das von der Grafikkarte abhängig? Das Problem tauchte nämlcih erst auf, seit ich eine billige noname karte eingebaut habe, nachdem meine alte abgeraucht ist.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Diese Karte hat keine Hardwarebeschleunigung. Das sieht man daran, dass dort als Vendor Microsoft steht bzw GDI Generic als Renderer. Damit identifiziert sich die Softwareimplementation von Microsoft. Und da ist wie ich oben schon gesagt hatte Multitexturing nicht verfügbar. Was den Fehler erklärt.
Aber sonst solltest du schauen, dass du einen aktuellen Treiber drauf hast und auch ob die Hardwarebeschleunigung aktiv ist. Unter "Eigenschaften der Anzeige" -> "Einstellungen" -> "Erweitert" -> "Problembehandlung" sollte der Schieber ganz Rechts sein.
Aber normal sollten eigentlich alle Karten seit 10 Jahren zu mindest etwas Hardwarebeschleunigung haben. Außer bei OnBoard da wäre ich vorsichtig. Sonst hatte ich es auch schon mal erlegt, dass sich Treiber nicht richtig registriert hatten und deswegen opengl in Software lief. Also im Zweifel noch Treiber komplett runter und wieder neu installieren.
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.