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

Aktuelle Zeit: Fr Jul 18, 2025 11:19

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturenkompression
BeitragVerfasst: Do Jan 08, 2004 16:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Ich habe mir kürzlich ein Texturenkompressions-tutorial durchgelesen. Als ich das vom verwendeten glBMP auf meine Textures.pas (J.H.) portieren wollte, ging entweder gar nichts mehr, bzw. die Texturen wurden komplet falsch dargestellt.

Ich habe folgende Zeilen verändert (prozedur CreateTexture):
Code:
  1.  
  2. if Format = GL_RGBA then
  3.     gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, pData)
  4.   else
  5.     gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, pData);
  6.  

=>
Code:
  1.  
  2.     gluBuild2DMipmaps(GL_TEXTURE_2D,
  3.                GL_COMPRESSED_RGB{A}_ARB,
  4.                Width, Height,
  5.                GL_RGB{A}, GL_UNSIGNED_BYTE, pData);
  6.  
  7.  


Was mache ich falsch?

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Falsch machst du da gar nix, hab das nämlich genauso in meiner erweiterten Textures.pas drin und nutze das schon länger problemlos. Aber evtl. unterstützt deine Graka die GL_ARB_texture_compression-Extension nicht, obwohl ich mir das eigentlich nicht vorstellen könnte.

P.S. : Du willst doch unkomprimierte Texturendaten komprimiert im VRAM ablegen? Oder willst du etwa bereits komprimierte Texturen zur Graka hochladen? Dafür gibts dann Befehle wie glCompressedTexImage*ARB.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 17:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Hab grad gemerkt, wo der Fehler lag: Die fehlerhaften Texturen hatten alle einen Alpha-Kanal(tga-files) -> Ich hatte im nicht-else-Zweig eine falsche Konstante (GL_RGB) verwenden. :x
Tschuldigung für die Störung. :oops: Und Danke trotzdem!

Aber jetzt brauch das Programm mindestens drei mal so lange um zu starten. Wird die Kompression etwa nicht von der HW durchgeführt?

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 17:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
gluBuildMipMaps ist leider recht langsam, liegt wohl daran. Kompression wird zwar schon in der Hardware genutzt, aber ich schätze mal das gluBuildMipMaps die Texturendaten selbst komprimiert bevor sie zur GPU hochgeladen werden.
Schneller dürfte hier die automatische Erstellung von Mipmaps via GL_SGIS_generate_mipmap sein, was aber aktuellere Hardware voraussetzt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 17:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
ok. interessant...

Die Unterstützung wäre nicht DAS Problem (im Falle des Falles lass ich die Texturen halt unkomprimiert.

Wie benutze ich dann GL_SGIS_generate_mipmap anstatt von gluBuild2DMipmaps?

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 17:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hab selbst noch nicht mit der Extension gearbeitet, aber ATI haben dazu ein Beispiel mit Quellcode in ihrer Entwicklersektion.
Bei SGIS_generate_mipmap gibt man als Texturenparameter GENERATE_MIPMAP_SGIS an. Danach erstellt die Grafikkarte bei jedem Aufruf von glTexImage*D automatisch alle Mipmaps. Was bei dieser Methode allerdings nicht gemacht wird (bin ich mir zumindest fast sicher), ist das zurechtskalieren auf 2^n, was ja bei gluBuildMipMaps2D gemacht wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ab OpenGL 1.4 sind übrigens die Konstanten
Code:
  1.   GL_GENERATE_MIPMAP                                = $8191;   // GL 1.4
  2.   GL_GENERATE_MIPMAP_HINT                           = $8192;   // GL 1.4
  3.  

schon bei der Standardimplementation dabei - bei Verwendung ist es immer schneller (oder schlechtestens gleich schnell) als die entsprechenden GLU Funktionen.
Praktisch ist es schon - weil es nervig sein kann, irgendwelche Texturen hochzuladen und sich dann zu wundern, warum es nicht funktioniert, bis man draufkommt, dass man zwar trilineare Filterung aktiviert hat, aber vergessen die entsprechenden Mipmaps zu bilden.

Da meistens auch nur die Standard GLU Implementation verwendet wird, ist diese Extension auch der (meines Wissens) einzige Weg automatisch Mipmaps für 3D-Texturen bilden zu können.

Wenn wir grad beim Thema sind: weiß eigentlich jemand, wie man andere Filtermodi als nearest, bilinear und trilinear aktiviert (z.B. anisotropisch) - oder ist dies eine reine Treibereinstellung, auf die man aus der Applikation gar keinen Einfluß hat (also dass z.B. anisotropische Filterung automatisch aktiviert wird, sobald Mipmaps verwendet werden) ?

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 21:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dafür gibts die EXT_texture_filter_anisotropic-Extension, mit der man das unabhängig vom Treiber einstellen kann. Sieht im Quellcode dann so aus :
Code:
  1. // Höchste Stufe des anisotropen Filters ermitteln
  2. glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, @MaxAnisotropy);
  3. // Anisotropen Filter aktivieren
  4. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, MaxAnisotropy);


Allerdings schummeln Grafikkartenhersteller da ja gerne, und so kann es je nach Treibereinstellung vorkommen, das die Einstellungen bzgl. des anisotropen Filters überschrieben werden. Ich hab in meinen ATI-Treibern z.B. auf 16xAF festgesetzt, wodurch z.B. obiger Code unnütz würde. Solange der Treiber aber auf Anwendungspräfernz eingestellt wurde, sollte das eigentlich gehen. Kann man ja auch schön beobachten, da sich über den Texturenparameter ja auch zur Laufzeit zwischen bilinearem bzw. anisotropem Filter wechseln lässt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2004 21:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ah, dann ist das über eine eigene Extension gelöst, und nicht in den Core-Funktionen integriert.
Danke sehr.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 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.008s | 15 Queries | GZIP : On ]