AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MultipleTexture Loader

Ein Thema von EWeiss · begonnen am 17. Okt 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#11

AW: MultipleTexture Loader

  Alt 21. Okt 2010, 19:24
...
Uppercase(ExtractFileExt....
...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: MultipleTexture Loader

  Alt 21. Okt 2010, 19:28
Eine Kleinigkeit:

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

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: MultipleTexture Loader

  Alt 21. Okt 2010, 19:35
...
Uppercase(ExtractFileExt....
...
Ja natürlich geht ebenfalls
Wer es denn haben will ändert alles nach
if Uppercase(ExtractFileExt(sImgName)) = '.PNGthen um

Obwohl diese Funktion letztendlich genau das gleiche tut

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: MultipleTexture Loader

  Alt 22. Okt 2010, 13:16
Hier noch ein anderer EQ (Spectrum)
Das Spectrum kann beliebig anhand von Paletten geändert werden.
Für die Leute die es interessiert.

gruss

Geändert von EWeiss ( 9. Jul 2019 um 09:32 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: MultipleTexture Loader

  Alt 1. Nov 2010, 13:17
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

Geändert von EWeiss ( 9. Jul 2019 um 09:32 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: MultipleTexture Loader

  Alt 2. Nov 2010, 14:33
Waren noch ein paar kleine unstimmigkeiten drin.
Sind jetzt beseitigt.

Geändert von EWeiss ( 9. Jul 2019 um 09:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#17

AW: MultipleTexture Loader

  Alt 2. Nov 2010, 15:42
...
Uppercase(ExtractFileExt....
...
Ja natürlich geht ebenfalls
Wer es denn haben will ändert alles nach
if Uppercase(ExtractFileExt(sImgName)) = '.PNGthen 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.

Hier beispielsweise wird immer wieder 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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: MultipleTexture Loader

  Alt 2. Nov 2010, 16:20
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

Geändert von EWeiss ( 3. Nov 2010 um 03:08 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#19

AW: MultipleTexture Loader

  Alt 3. Nov 2010, 14:25
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: MultipleTexture Loader

  Alt 3. Nov 2010, 15:51
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.
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