Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   MultipleTexture Loader (https://www.delphipraxis.net/155296-multipletexture-loader.html)

Bummi 21. Okt 2010 18:24

AW: MultipleTexture Loader
 
...
Uppercase(ExtractFileExt....
...

EWeiss 21. Okt 2010 18:28

AW: MultipleTexture Loader
 
Zitat:

Zitat von idefix2 (Beitrag 1057023)
Eine Kleinigkeit:

Delphi-Quellcode:
if copy(Uppercase(sImgName), length(sImgName) - 3, 4) = '.JPEG' then
        ImageType := '.JPEG';
ist vielleicht nicht so gut? Detto für .tiff

Vollkommen richtig ;)
Danke.

gruss

EWeiss 21. Okt 2010 18:35

AW: MultipleTexture Loader
 
Zitat:

Zitat von Bummi (Beitrag 1057026)
...
Uppercase(ExtractFileExt....
...

Ja natürlich geht ebenfalls :)
Wer es denn haben will ändert alles nach
Delphi-Quellcode:
if Uppercase(ExtractFileExt(sImgName)) = '.PNG' then
um

Obwohl diese Funktion letztendlich genau das gleiche tut ;)

gruss

EWeiss 22. Okt 2010 12:16

AW: MultipleTexture Loader
 
Hier noch ein anderer EQ (Spectrum) ;)
Das Spectrum kann beliebig anhand von Paletten geändert werden.
Für die Leute die es interessiert.

gruss

EWeiss 1. Nov 2010 12:17

AW: MultipleTexture Loader
 
Hab noch eine änderung vorgenommen so ist man unabhängig vom array MultibleTex
Einfach ein beliebiges Array mit übergeben das wars dann.
Ist besser wenn man mehrere Scenen hat.

Delphi-Quellcode:
procedure MakeMultipleTexture(N: integer; var MTexture: array of TMmtTex);
var
  mtCount : integer;
  K       : integer;
  nRet    : TGLenum;
  OkDelete : Bool;

begin
  mtCount := high(MTexture) - low(MTexture) + 1;
  OkDelete := False;

  // Array Redimensionieren
  SetLength(Texture, mtCount);
  if mtCount > 0 then
  begin
    for K := 0 to (mtCount - 1) do
    begin
      Texture[K] := MTexture[k].Texture;
      if Texture[K] <> 0 then
        OkDelete := True;
    end;

    // befinden sich Texturen im Array dann löschen
    if OkDelete then
    begin
      glDeleteTextures(mtCount, @Texture[1]);
      glGenTextures(mtCount, @Texture[1]);
    end;

    nRet := glGetError;
    // Überprüfung ob ein OpenGL Fehler aufgetreten ist
    if nRet = 0 then
    begin
      // alles OK Aktuelle Texture laden
      // und ins OpenGl Format konvertieren
      for K := 0 to (mtCount - 1) do
      begin
        SetLength(mPixelArray, 0);

        if CreateGLTextureFromFile(MTexture[K].FullName,
          xSize, ySize, MTexture[K].Square, K) then
        begin
          MTexture[k].Texture := Texture[K];
          glBindTexture(GL_TEXTURE_2D, Texture[K]);
          nRet := glGetError;
          if nRet = 0 then
          begin
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glTexImage2D(GL_TEXTURE_2D, 0, 4, xSize, ySize,
              0, GL_RGBA, GL_UNSIGNED_BYTE, @mPixelArray[0]);
          end;
        end;
      end;
    end;
  end;
end;
EDIT:Hab noch ein paar Sterne hinzugefügt
Und ein neues Modul erstellt.

gruss

EWeiss 2. Nov 2010 13:33

AW: MultipleTexture Loader
 
Waren noch ein paar kleine unstimmigkeiten drin.
Sind jetzt beseitigt.

mleyen 2. Nov 2010 14:42

AW: MultipleTexture Loader
 
Zitat:

Zitat von EWeiss (Beitrag 1057029)
Zitat:

Zitat von Bummi (Beitrag 1057026)
...
Uppercase(ExtractFileExt....
...

Ja natürlich geht ebenfalls :)
Wer es denn haben will ändert alles nach
Delphi-Quellcode:
if Uppercase(ExtractFileExt(sImgName)) = '.PNG' then
um

Obwohl diese Funktion letztendlich genau das gleiche tut ;)

gruss

Das Problem ist weniger die eine Zeile, eher der (doppelte) Code an sich. ZB hab ich schon ewig keine 2XX LOC-Methode gesehen. Dabei wurd hier doch immer Clean Code usw für heilig gesprochen. :lol:

Hier beispielsweise wird immer wieder
Delphi-Quellcode:
copy(), Uppercase(), length(), ...copy() Uppercase(), ...
aufgerufen.
Dabei könnte man daraus einen kleinen Einzeiler machen, welcher sicherlich performanter und dynamischer ist:
Delphi-Quellcode:
const
  SupportedImageTypes: array[0..8] of string = (
    '.BMP', '.DIB', '.GIF', '.ICO', '.JPEG', '.JPG', '.PNG', '.TIF', '.TIFF');

function GetImageType(const AImgName: string; out ImageType: string): Boolean;
begin
  ImageType := ExtractFileExt(AImgName);
  Result := StrUtils.IndexText(ImageType, SupportedImageTypes) > 0;
end;

// Und in der seitenlangen Methode dann nur noch:
  if GetImageType(sImgName, ImageType) then

EWeiss 2. Nov 2010 15:20

AW: MultipleTexture Loader
 
Delphi-Quellcode:
Dabei könnte man daraus einen kleinen Einzeiler machen, welcher sicherlich performanter und dynamischer ist:
Möglich habe es nicht gemessen ;)
Grundsätzlich kann man das ganze in eine Class Packen.. es gibt also viele möglichkeiten.
Warum eine zuzätzliche Funktion für die Abfrage erstellen letztendlich kommt es auf das gleiche heraus.
Ich denke die art und weise wie man den Filetyp ausließt spielt doch eigentlich keine rolle.
Zumindest behaupte ich das es nicht meßbar ist deine variante im vergleich zu meiner. ;)

Was nicht heißt das ich es nicht übernehmen will macht den Code etwas übersichtlicher.
*.pas wurde aktualisiert! Danke @mleyen

gruss

idefix2 3. Nov 2010 13:25

AW: MultipleTexture Loader
 
Generell sollte man, vor allem zur besseren Lesbarkeit, wo es möglich ist const-Konstruktionen verwenden statt var mit anschliessender Initialisierung.
Also z.B. auch

Delphi-Quellcode:
 
const p: array [1..12] of integer = (2,4,8,16,32,64,128,256,512,1024,2048,4096);
Je weniger unnötige Zeilen ein Programm hat, desto weniger muss man beim Studium des Codes hin- und herblättern.

EWeiss 3. Nov 2010 14:51

AW: MultipleTexture Loader
 
Zitat:

Zitat von idefix2 (Beitrag 1059333)
Generell sollte man, vor allem zur besseren Lesbarkeit, wo es möglich ist const-Konstruktionen verwenden statt var mit anschliessender Initialisierung.
Also z.B. auch

Delphi-Quellcode:
 
const p: array [1..12] of integer = (2,4,8,16,32,64,128,256,512,1024,2048,4096);
Je weniger unnötige Zeilen ein Programm hat, desto weniger muss man beim Studium des Codes hin- und herblättern.

Danke werd es ändern ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz