Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Salut,
ich habe das Problem, das mein Proggi beim Aufruf von glUseProgramObjectARB eine GL_INVALID_OPERATION wirft.
Ein Blick ins WIKI zeigt mir folgende Möglichkeiten:
Zitat:
GL_INVALID_OPERATION wird generierrt wenn programObj nicht vom Typ GL_PROGRAM_OBJECT_ARB ist. GL_INVALID_OPERATION wird generiert wenn das Programm nicht installiert werden konnte. GL_INVALID_OPERATION wird generiert wenn glUseProgramObjectARB zwischen einem glBegin und dem zugehörigen glEnd aufgerufen wird.
Die letzte Möglichkeit kann ich definitiv ausschliessen. Die beiden anderen nicht zu 100%. Eigentlich sollte dann ja das folgende nicht passieren:
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hast du schon mal versucht den Fehler häufiger abzufragen? Also das Stück mit glGetError in eine Procedure und dann zwischen jede Zeile. Also so, dass du genau sehen kannst wann der fehler denn genau auftritt. Evtl liegt er ja nur ganz wo anders und wird erst nur dann bemerkt.
Ist das Ergebnis was du erhält denn eigentlich korrekt oder wird auch nichts dargestellt?
Eine Anmerkung am Rande. Das mit den Texturen kann du auch einfacher haben. GL_TEXTURE_3D und GL_TEXTURE_3D_EXT haben beide ein und den selben Wert. Sind also auch für OpenGL ein und das Selbe. GL_TEXTURE_3D wird seit OpenGL 1.2 im Core unterstützt. Sollte es aber nicht unterstützt werden so setzt du GL_EXT_texture3D stillschweigend vorraus. Ich denke es wäre besser wenn du überprüfst ob OpenGL > 1.2 ist oder ob die Extension unterstützt wird.
und in meiner OnRender-Routine findet sich jetzt nur noch das glUseProgramObjectARB.
Geladen werden die Shader wie vorher in AssignData bzw. AssignColormap.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also wegen dem glUseProgramObjectARB muss ich passen. Für mich sieht es in Ordnung aus aber ich kenne mich damit auch nicht so super aus. Liefert dir glSlang_GetInfoLog(Shader) eigentlich einen Text, wenn das Benutzen des Shaders nicht geklappt hat?
Ich denke aber auch mal, dass glUseProgramObjectARB(SlangProg); nur ein Übertragungsfehler ist. Denn eigentlich sollte das ja bestimmt Shader heißen.
3D Textur: Auch auf die Gefahr hin, dass ich mich unglücklich mache.
Anstelle von
Code:
if@glTexImage3D <> nilthen
glEnable(GL_TEXTURE_3D)
else
glEnable(GL_TEXTURE_3D_EXT);
kannst du auch vollgendes schreiben.
Code:
if@glTexImage3D <> nilthen
glEnable(GL_TEXTURE_3D)
else
glEnable(GL_TEXTURE_3D);
Und damit könntest du es auch auf glEnable(GL_TEXTURE_3D); beschränken. Das hat den gleichen Effekt, da GL_TEXTURE_3D = GL_TEXTURE_3D_EXT ist. Die beiden Extensions unterscheiden sich lediglich im Namen und der Variable in der ihre Funktionspointer abgelegt werden. Ich würde sogar fast Wetten, dass die Funktionspointer die Gleichen sind.
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Lossy eX hat geschrieben:
Und damit könntest du es auch auf glEnable(GL_TEXTURE_3D); beschränken. Das hat den gleichen Effekt, da GL_TEXTURE_3D = GL_TEXTURE_3D_EXT ist. Die beiden Extensions unterscheiden sich lediglich im Namen und der Variable in der ihre Funktionspointer abgelegt werden. Ich würde sogar fast Wetten, dass die Funktionspointer die Gleichen sind.
Im Prinzip hast Du Recht. Nur bevor ich die jetzige Grafikkarte bekommen habe (GF6600) lief das ganze (ok es kroch...) auf nem OnBoard Grafikchipsatz. (Müßte eigentlich Intel SiS gewesen sein. - Weiß schon nicht mehr)
Der hat sich mit OpenGL 1.2 kompatibel gemeldet, kannte aber die GL_TEXTURE_3D nicht. Von daher ist die Abfrage da noch drin...
Ist leider nicht alles so heile in der OpenGL-Welt wie man sich das manchmal wünschen würde. Noch ein Beispiel? Such mal auf ner ATI 9x00 nach GL_IMAGING-Subset. Gibts auf den Apple Karten, aber für Windows gibts das nicht. Obwohl es seit OpenGL 1.2 eigentlich Standard sein sollte...
Habe eben den ganzen Kram gelöscht (zumindest den Shader Teil) und baue das nochmal neu. Vielleicht habe ich ja irgendwo einfach was übersehen.
Danke für die Hilfe.
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
GL_TEXTURE_3D und GL_TEXTURE_3D_EXT sind allerdings 2 constanten, die beide den selben Wert ($806F) haben. Insofern sollte es vollkommen egal sein, welchen der beiden Werte man einsetzt. Entweder die Graka kann 3D texturen, dann ist es egal welchen der beiden man einsetzt, oder sie kann es nicht, dann funktionieren aber beide nicht.
Durch den Programmcode wollte ich mich jetzt nich wühlen, hättest du nicht die benötigten Dateien hochladen können, dass man mal testen könnte? so auf den ersten Blick find ich das jedenfalls nicht ersichtlich.
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Das Problem hat sich auf wundersame Weise gelöst. Nachdem ich das alles nochmal neu geschrieben habe, funktioniert es jetzt. Warum auch immer.
EDV = Ende der Vernunft
3D Textures
Hm, ok. Überzeugt. Sind tatsächlich die gleichen Konstanten. Dann brauche ich die Abfrage nur noch bei,
Code:
if@glTexImage3D =nilthen
glTexImage3DExt([...])
else
glTexImage3D ([...]);
Bedankt.
Zu den benötigten Dateien gehören (leider) ein paar Komponenten, ein kleines Framework aussen drum sowie mindestens ein Datensatz. Und allein der ist schon 16MB groß.
Sonst gerne die Dateien, aber da das so schlecht zu trennen ist, indem Fall lieber den Quellcode.
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.