Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 00:01

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Apr 15, 2011 15:15 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich habe eine frage zu den beiden opengl funktionen:

glClientActiveTexture
glActiveTexture

Bin gerade dabei den Rendercode für VBO´s zu definieren und würde es gerne so nahezu möglich GL3 compiliant handeln,
damit später ein umstieg von GL2 auf GL3 kein problem mehr ist.

Ich habe gesehen im glext.h header, das glClientActiveTexture deprecated ist in GL3.

Aktuell nutze ich die glxxxxxPointer funktionen um meine offsets zu definieren im VBO.
Diese sind auch deprecated in GL3.

Was nutzt man stattdessen dann? Wenn es was anderes gibt, kann man das auch in GL 2.1 Standard nutzen?

Mein aktuelles projekt wird auf OpenGL 2.1 aufgesetzt, damit ich so wenig alten kram wie möglich habe aber dennoch das auf älterer Hardware laufen lassen kann. Allerdings habe ich vor auch GL3 zu unterstützen.

Sind das zufällig die glEnableVertexAttribArray und glVertexAttribPointer funktionen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Apr 16, 2011 13:18 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Das Problem: ohne glVertexPointer stürtzt das (bei mir (mit glew)) ab. (Indexpointer ist bei mir interessanterweise optional und es funzt trotzdem.) Also wirste wohl entweder auf drauf hoffen müssen das es deine Grafikkarte abwärtskompatibel ist oder du nutzt shader.

Ohne die Fkt und ohne Shader weiß ja OpenGL nicht welchen Datentyp du benutzt.

Hilft dir jetzt vllt nicht so ganz weiter aber du weißt zumindest schonmal das du nicht alleine mit diesem Problem bist. :D


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Apr 16, 2011 13:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, mit glVertexAttribPointer macht man das soweit ich weiß (wo sind die ganzen GL3 Gurus?). Da musst du alle Infos, die du brauchst, über solche Vertexattribute an den obligatorischen Shader übergeben.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Apr 16, 2011 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi,

glVertexAttribPointer ist schon ganz richtig, das schöne bei GL3 ist, dass du das ganze in Vertex Array Objects kapseln kannst. Dann musst du dich um die VBOs und die Vertex Attribute nicht mehr kümmern, sondern bindest einfach das VAO, rufst glDraw* auf und wiederholst das fürs nächste Objekt.

Das Erstellen eines VAOs sieht ungefähr so aus:
Code:
  1.  
  2. GLuint vao;
  3. glGenVertexArrays(1, &vao);
  4. glBindVertexArray(vao);
  5.  
  6. GLuint vbo;
  7. glGenBuffers(1, &vbo);
  8. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  9. glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
  10.  
  11. glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
  12. glEnableVertexAttribArray(0);
  13. glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), static_cast<char *>(0) + 2 * sizeof(float));
  14. glEnableVertexAttribArray(1);
  15.  
  16. glBindVertexArray(0);
  17.  

Dieser code würde z.B. für 2D-Daten gehen. D.h. du hast in Vertex Attribut 0 jeweils 2 floats (vertex koordinaten) und in Attribut 1 auch 2 floats (textur koordinaten).
Diese Attribute werden im Shader ganz normal ausgelesen wie gl_TexCoord etc., nur dass du die Variablen dafür selber spezifizierst.

Zeichnen geht damit ungefähr so:
Code:
  1.  
  2. glBindVertexArray(vao);
  3. glDrawArrays(...);
  4. glBindVertexArray(0);
  5.  


Wie das allerdings mit Kompatibilität zu GL2 aussieht, weiss ich nicht.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]