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

Aktuelle Zeit: Mi Okt 21, 2020 19:21

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 24Bit Textur
BeitragVerfasst: Mo Jun 12, 2017 22:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1210
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich habe eine Textur einmal al 24 Bit und einmal als 32Bit deklariert.
Code:
  1. var
  2.   Textur24: packed array[0..1, 0..1, 0..2] of byte = ((($FF, $00, $00     ), ($00, $FF, $00     )), (($00, $00, $FF     ), ($FF, $00, $00     )));
  3.   Textur32: packed array[0..1, 0..1, 0..3] of byte = ((($FF, $00, $00, $FF), ($00, $FF, $00, $FF)), (($00, $00, $FF, $FF), ($FF, $00, $00, $FF)));


Die 32Bit Textur über geben ich so, dies funktioniert funktioniert auch richtig.
Code:
  1. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, @Textur32);


Will ich aber die 24Bit Textur übergeben, kommt anstelle von Blau kommt Gelb, Und der letzte rote Pixel kommt schwarz.
Code:
  1. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, @Textur24);


Was ist mein Überlegungsfehler, das die 24Bit Textur falsch kommt ?

Die Grösser der Texturen habe ich mit SizeOf überprüft, dies scheint richtig zu sein.
Code:
  1.   Caption := IntToStr(SizeOf(Textur24)) + '  ' + IntToStr(SizeOf(Textur32));


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 24Bit Textur
BeitragVerfasst: Di Jun 13, 2017 08:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 573
Programmiersprache: C++
OpenGL erwartet standardmäßig, dass jede Zeile deiner Textur an einer Adresse beginnt, die ein Vielfaches von 4 ist (4-Byte-Alignment). Bei deiner 24bit-Textur beginnt die zweite Zeile nach 6 Bytes, OpenGL beginnt aber erst ab dem 8 Byte zu lesen. Die 2 Bytes dazwischen werden verworfen. Du hast zwei Möglichkeiten, das zu verhindern: Du erzeugst nur Texturen, deren Seitenlängen ein Vielfaches von 4 sind, also in diesem Fall eine 4x4-Textur. Oder du weist OpenGL an, sich vernünftig zu benehmen:
Code:
  1. glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 24Bit Textur
BeitragVerfasst: Di Jun 13, 2017 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1210
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Danke, das war es, ich habe beide Varianten ausprobiert.
Ich denke, das Aufrunden auf auf die nächsten 4 Byte macht mehr Sinn.

So wie es scheint, wird bei einer TBitmap auf bei den Zeilen auf die nächsten 4 Byte aufgerundet.
Sonst hätte ich dort den Effekt sicher auch schon mal bemerkt.

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.054s | 19 Queries | GZIP : On ]