wenn ich mich ni vertan hab, müssten das die gleichen ohne rle sein.
EDIT: ich will ja ni krümelkackerisch wirken, aber es wär echt cool, wenn man auch paletten-tgas laden könnte. wenn du das noch reinbaust, kommste an meine persönliche wall of fame
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hab das Edit erst jetzt gesehen. Wozu benötigst du denn überhaupt Paletten TGAs/Bilder? Denn Paletten werden von OpenGL nicht wirklich unterstützt. Es gibt zwar so etwas in der Art aber das wird vermutlich nicht in Hardware unterstützt bzw. machen Paletten in der Regel auch Qualitativ einfach keinen Sinn. Deswegen müsste/sollte ich die Paletten eigentlich gleich in RGB(A)8 umwandeln. Das Ganze würde dann auch BMPs/PNGs mit beeinflussen. Denn diese können auch Paletten benutzen. Bei BMPs besonders tragisch, denn da lese ich 8 Bit Dateien bereits ein aber ich ignoriere die Palette und behandel die Dateien als Graustufenbilder. Falls es nur um Graustufen geht das funktioniert bei TGAs bereits problemlos.
Bitte nicht falsch verstehen. Aber ich möchte nicht einfach irgendwas einbauen. Das habe ich nie und werde ich auch nie. Ich will eigentlich immer den Kosten/Nutzen Faktor im Auge behalten. Besonders, wenn es eher um etwas exotischeres geht. Denn sonst bin ich schnell wirklich große Teile meiner Zeit mit Dingen beschäftigt, die wirklich nur 1-2 Leute benutzen und der Rest braucht es einfach nicht. Zu mal das in deinem Fall keine wirkliche Einschränkung darstellt.
Ich habe dein Problem im übrigen gestern abend gefunden und behoben. Es lag an meinem internen Cache. Ich werde versuchen es heute abend hochzuladen. Und die Varianten ohne RLE funktionierten Problemlos bei mir.
PS: Die komprimierte Heightmap bringt im übrigen keine wirklichen Vorteile. Die ist nur 5 kb kleiner aber dafür ist RLE schwieriger zu laden und das dauert dann länger. ca. 25ms (RLE) im Vergleich zu ca. 3ms (ohne RLE).
Registriert: Do Feb 21, 2008 10:49 Beiträge: 55 Wohnort: Dresden
Programmiersprache: FPC/Linux
naja, ich benutze viele texturen, die original mal 8-bit palette waren. die musste ich dann auf 32bit hochdrehen. das verprasst natürlich unsinnigen platz. deswegen wäre das mit 8-bit palette echt ne feine sache.
und das mit dem länger laden ist mir wurscht, weil das ja eh nur einmal am anfang geladen wird.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Klar für dich wäre es Ideal aber ich habe dabei halt ein paar Bedenken.
- Ich müsste das für PNG und BMPs auch machen. Wobei ich bei BMPs sogar das bestehende Verhalten ändern müsste.
- Du bist seit ich die Unit angefangen habe der Erste der das haben wollte.
Was du auch nicht vergessen darfst im Grafikspeicher würden daraus wieder 24 oder bei Transparenz sogar 32 Bit werden. Also eine massive Speicherausdehnung. Das kann auch zu Verwirrungen führen, denn bei dir auf der Platte ist es ja nicht so viel.
Evtl solltest du dir auch mal PNGs anschauen. Durch den Zip Algorithmus werden die Bilder einigen Fällen sogar richtig klein. Sofern es keine Fotos sind.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo Lossy,
Ich bin jetzt grade dabei die glBtmap in die PasGUI einzubinden. Ich habe dafür einen Mini-Wrapper geschrieben, weil ich noch zwei Properties brauche und die Original glBitmap nicht verändern wollte:
BMPs und TGAs (komprimierte und unkomprimierte) funktionieren gut.
Aber ich kann keine JPEGs laden, und zwar deshalb, weil ich offenbar bei den Defines einen Fehler gemacht habe (siehe oben). Er kompiliert mir die Zeile "if not LoadJPEG(Stream) then" nicht und ich kriege daher immer die anschließende Exception:
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hallo Traude,
was sind denn das für Eigenschaften? Kann das in deinem Code nicht so recht erkennen. Evtl baue ich sie dann noch ein.
Die Defines. Ja es sind die richtigen Defines. Aber leider die falsche Stelle. Ein Define was innerhalb einer Unit definiert wurde gilt auch nur für diese. Alle anderen Units werden dadurch nicht beeinflusst. Deswegen sind alle Defines oben in der glBitmap enthalten. Alternativ kann man die Defines aber auch beim Kompiler definieren, dann sind sie global und gelten für alle Units.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Danke habs umgestellt, funktioniert jetzt.
Die beiden Properties die ich brauche sind
1) Name: das repräsentiert eine Identität (ein WideString, der beim Setzen in UpperCase umgewandelt wird damit sich die Suchfunktion des GraphicUtilityManager leichter tut)
2) FileName: das repräsentiert die Datei (ebenfalls ein WideString, der ohne Veränderungen übernommen wird)
Ob Du es einbaust oder nicht überlasse ich Dir. Ich schlage vor, dass Du Dir das ganze dann ansiehst, wenn ich es hier hereinstelle, und dann selbst entscheidest, ob Du Deine glBitmap deswegen ändern willst. Ich kann mit dem Wrapper auch leben.
Ich brauche jetzt nicht mehr lange, schätze höchstens eine Woche noch.
Letzter zu bearbeitender Punkt vor dem Publishing: Test Message System.
Traude
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ach solche Eigenschaften sind das. Nun ja. Die Antwort darauf kenne ich dann wohl schon. Ich dachte das wäre etwas zum Zugriff auf interene Daten oder so. Die Eigenschaft mit dem Namen hatte ich früher mal drin aber da ich der Einzigste war der sie eine Zeit lang genutzt hatte ist sie wieder raus geflogen. Und Dateinamen ist schwer, denn ich arbeite mit Streams. Wo die herkommen weiß ich nicht. Entsprechend würde das nur manchmal funktionieren.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hmmm. Das relativiert das jetzt irgendwie ein bisschen. Und so drüber geschlafen. Wenn sie nicht gesetzt sind ist es ja kein wirklicher "Balast".
Wobei du (Traude) benutzt ja WideStrings. WideStrings benutze ich aktuell aber so gar nicht. Spontan würden mir da so 2 Möglichkeiten vorschweben. Entweder eine Eigenschaft nur ansi. Oder eine normal ansi und eine wide. Dateinamen könnte/müsste ich beim Lesen automatisch setzen. Allerdings würde ich keine Uppercase konvertierung durchführen (können). Und Dateinamen wären auch irgendwie nur Ansi, denn WideStrings kann ich dort nicht verarbeiten.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo Lossy,
Ich habe folgende Formate bisher bei mir getestet:
*** BMP
*** TGA(komprimiert und unkomprimiert), inklusive Alphakanal
*** JPEG (mit dem beigestellten Header)
*** PNG (mit dem beigestellten Header), inklusive Alphakanal
Alle benutzten Bilder waren POT und kein einziges davon größer als 256 x 256
Property MipMap gesetzt auf mmMipmap
Windows 2000, OpenGL 1.4
Funktioniert alles reibungslos und natürlich viel schneller als mit meinem eigenen Imageobjekt, denn das ist in keiner Weise auf Schnelligkeit optimiert.
Hübscher ist es auch, denn ich hatte keine Mipmaps eingebaut.
Einzige Änderung, die ich nach der Umstellung auf die glBitmap vornehmen musste:
Es war nötig, explizit ein "Unbind" vor dem Paint durchzuführen, ansonsten wurde beim ersten Paint die letzte geladene Textur auf den Widgets dargestellt. Wenn die Variable "ShowImage" FALSE ist, wird weder ein Bind noch ein Unbind durchgeführt. Beim zweiten Paint waren die Texturen dann verschwunden. Ich nehme an, dass ein automatisches Unbind beim SwapBuffers erfolgt.
Da es aber ohnehin notwendig ist, vor dem Paint sicherzustellen, dass keine Textur grade gebunden ist (es könnte das Anwendungsprogramm vorher zeichnen), wäre mir das Einbauen des Unbind sowieso nicht erspart geblieben.
Beim Zeichnen der Textur wird alles richtig angezeigt, jedoch ist das gespeicherte Bitmap etwas anders als erwartet (siehe Anhang).
Ändert man vor dem zurück-Assignen das PixelFormat des Bitmaps, so ist der Fehler auch auf der Textur sichtbar.
Das beschriebene tritt sowohl bei Version 1.8.10 als auch bei 2.0.1 auf.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nein. Das Problem liegt tatsächlich an AssignAlphaToBitmap. Danke für den Hinweis.
Ich setze intern eine Farbpalette und anschließend ändere ich erst das Pixelformat auf 8 Bit. Dabei geht das TBitmap scheinbar her und erzeugt sich eine neue Farbpalette. Die Werte innerhalb des Bitmaps sind zwar richtig aber er hat eine falsche Farbpalette. Entsprechend werden die Werte auch auf falsche Farben gemappt. Solltest du das Bitmap wieder in die glBitmap laden, OHNE das Pixelformat zu ändern, dann sollte wieder alles okay sein. Denn die enthaltene Palette interessiert mich mal so gar nicht.
Für einen Hotfix geh mal bitte in die Methode TglBitmap.AssignAlphaToBitmap und ersetze die 4 Zeilen die Einstellungen am Bitmap vornehmen wie folgt.
Code:
Bitmap.PixelFormat:= pf8bit;
Bitmap.Palette:= CreateGrayPalette;
Bitmap.Width:= Width;
Bitmap.Height:= Height;
Werde das bei Gelegenheit fixen und eine neue Version hochladen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.