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

Aktuelle Zeit: Fr Jul 18, 2025 11:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Dez 28, 2005 17:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hab diesen Code zum Laden von Texturen (C++)

Code:
  1. GLuint TglTexManager::loadTexture(string name, GLuint format)
  2. {
  3.     SDL_Surface* tex;
  4.     GLint internalFormat;
  5.     GLuint texID;
  6.     string path;
  7.     path = texturePath + name;
  8.    
  9.     tex = IMG_Load(path.c_str());
  10.     if (!tex)
  11.     {
  12.         cerr << "!TglTexManager! -> Texture could not be loaded: " << path << endl;
  13.         return 0;
  14.     }
  15.    
  16.     glGenTextures(1,&texID);
  17.     glBindTexture(GL_TEXTURE_2D,texID);
  18.    
  19.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  20.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  21.  
  22.     if ( (format == GL_RGBA)||(format == GL_BGRA))
  23.         internalFormat = 4;
  24.     else internalFormat = 3;
  25.    
  26.     glTexImage2D(   GL_TEXTURE_2D, 0, internalFormat,
  27.                     tex->w, tex->h, 0,
  28.                     format, GL_UNSIGNED_BYTE,
  29.                     tex->pixels);
  30.  
  31.     SDL_FreeSurface(tex);
  32.    
  33.     return texID;
  34. };


Jetzt wollte ich eigentlich per format angeben ob GL_RGBA, GL_RGB, oder GL_BGR ... benutzt werden soll, je nach Texturformat (jpg, TGA, ... ).

Allerdings frage ich mich ob das nötig ist. Und zwar wird ja durch SDL_image immer die Textur in dem SDL_Surface bereit gestellt. Wenn dieses Surface prizipiell immer einen Alpha Kanal besitzt, könnte ich einfach versuchen immer RGBA zu benutzen. Dann ginge es nur noch darum zu testen, ob die Implementation GL_BGRA unterstützt oder nicht.

Deshalb meine Frage: Kann ich davon ausgehen, dass das Surface immer einen Alphakanal hat, und kann ich GL_RGB sowie GL_BGR ignorieren egal welches Format ich lade, weil ja das Surface eh ein Alpha Kanal hinzufügt?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 18:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Nein, es hat nicht immer einen Alphakanal.
Davon darfst du nicht ausgehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 22:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Habt ihr dann ne Idee, wie ich leicht herausfinden kann, welche Parameter ich an glTexImage2D übergeben muss?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 01:29 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Code:
  1. surface->format->bytesperpixel

Bei 4 mit Alpha, bei 3 ohne, bei 2 aus dem Fenster springen und bei 1 die Daten für OpenGL noch umwandeln da mit Palette versehen.
BGR kannst du mit SDL_Image abfragen, wobei du nur auf TGA und BMP aufpassen musst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 07:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
2 Ist durchaus nicht so schlim. Es gibt ja auch 16 Bit BMPs und das wäre dann GL_R5G6B5. Wobei wenn es sich dabei um ein TGA handelt wäre es eher GL_LuminanceAlpha. Also Grau mit Alpha. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 11:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Danke...Das könnte gängig werden.

Hast du auch noch den Funktionsnamen für mich ionis? Ich mein für das BGR abfragen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 14:44 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Code:
  1. if copy(Uppercase(path), length(path)-3, 4) = '.TGA' then
  2.   begin
  3.     BGR:=True
  4.   end
  5.   else
  6.   begin
  7.     //testing for BMP, using SDL_Image
  8.     rwop:=SDL_RWFromFile(PChar(path), 'rb');
  9.  
  10.     if rwop<>nil then
  11.     begin
  12.       if Img_isBMP(rwop)<>0 then BGR:=True;
  13.     end
  14.     else
  15.     begin
  16.       raise EEasySDLTextureFail.Create('Cannot read file: '+path);
  17.       exit;
  18.     end;
  19.  
  20.     if SDL_RWClose(rwop)<>0 then
  21.     begin //hope it works like planned to 'free' the rwop, it is really an undocumentated feature
  22.       raise EEasySDLTextureFail.Create('Cannot close file: '+path);
  23.       exit;
  24.     end;
  25.   end;

Das Übersetzen in C darfst du diesmal gerne übernehmen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 15:07 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Wollte es gerade sagen. Machs Dir nicht so komplex und werf einen Blick in easySDLTextures.pas. Sonst zitiert Jonas sein Werke irgendwann hier komplett runter ;-)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
hmmm...Kann sein, dass ich zu Müde bin, aber wo testest du, ob BGR überhaupt verfügbar ist?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:49 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Langsam habe ich Angst vor Phobeus. Er hat Recht mit seiner Wahrsehung
Code:
  1.     //BGR is supported form 1.2, lower version need to swap manuall
  2.     if (not GL_VERSION_1_2) and (BGR)
  3.     and (tex_surface.format.BytesPerPixel>2) then
  4.     begin
  5.       SwapBGR(tex_surface);
  6.       BGR:=False;
  7.     end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 15:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hätte noch paar. Fragen... ;) Aber bevor ich jetzt hier alles runterleier, kann man das Sourcefile irgendwie ziehen (ohne das komplette SDK zu laden) ?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 15:42 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Nein ;)


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 31, 2005 10:35 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Jein ;) Aber an 2 MB wirds wohl kaum scheitern O_o

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


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


Wer ist online?

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