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

Aktuelle Zeit: Mi Apr 24, 2024 13:23

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 131 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7, 8, 9  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mo Dez 28, 2009 08:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Kann es sein, dass deine Textur bereits erstellt wurde? Also durch GenTextures. Denn fGetPixelFunc wird nur dann gesetzt wenn ein DataPointer gesetzt wird. Das passiert, wenn Daten geladen, das Format geändert wurde. Das passiert auch, wenn GenTextures die Textur erstellt hat und dann die Daten aus der Klasse gelöscht werden.

Ansonsten wüsste ich nicht wie es dazukommen könnte, dass fGetPixelFunc nil ist. Was machst du denn sonst noch so mit dem Objekt? Bzw was hat denn dein png für ein Pixelformat?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mi Dez 30, 2009 20:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 20, 2006 17:34
Beiträge: 52
Lossy eX hat geschrieben:
Kann es sein, dass deine Textur bereits erstellt wurde?

Kann sein, muss aber nicht. Es geht bei keiner von beiden Versionen. (DeleteDataAfterGenTexture ist auf false)
Lossy eX hat geschrieben:
Was machst du denn sonst noch so mit dem Objekt? Bzw was hat denn dein png für ein Pixelformat?

Laden (bei verschiedenen Texturen auf verschiedene Weisen Alphakanäle hinzufügen), Versuchen ein paar Pixel mit GetPixel in ein TBitmap zu kopieren, bei Bedarf GenTexture aufrufen und malen.

Hintergrund:
In der Textur sind mehrere Objekte für mein Spiel gespeichert (Kacheln in vielfachen von 16px), und im Editor hab ich Vorschaubilder in nem VirtualTreeview. Momentan speicher ich die Textur in nen Stream und lad das in nem TBitmap - langsam und unelegant und im zweifelsfall werden viel zu viele Pixels kopiert. Also wollte ich nur die benötigten Pixel kopieren...

_________________
2+2=5
For extremely large values of two


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Sa Jan 02, 2010 11:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also um die Texturdaten in ein TBitmap zu kopieren genügt normal auch die Methode AssignToBitmap aufzurufen (sofern das Define GLB_DELPHI aktiv ist). Dann werden die Daten direkt in die Instanz kopiert.

Mit "Was machst du denn sonst noch so" meinte ich aber, dass ich gern etwas code hätte. Aber ich glaube ich weiß woran es liegt. Die einzige Möglichkeit bei der fGetPixelFunc nil sein kann ist wenn man die Datei mit an den Kostruktor übergibt. Also Create('Blah.bmp'). Dann wird die Textur geladen, fGetPixelFunc gesetzt und nach dem Konstruktor in AfterConstruction wird fGetPixelFunc nil gesetzt. Ergo ist es dann nil. So lange bis sich das Format verändert und ein neuer Datenpointer gesetzt wird. (Alphakanal hinzufügen/entfernen).

Möglichkeit für dich wäre Zeile 6142 zu löschen. fGetPixelFunc := nil innerhalb von TglBitmap2D.AfterConstruction. Oder aber zu erst erstellen und dann mit LoadFromFile die Datei laden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Sa Jan 02, 2010 13:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 20, 2006 17:34
Beiträge: 52
Lossy eX hat geschrieben:
Also um die Texturdaten in ein TBitmap zu kopieren genügt normal auch die Methode AssignToBitmap aufzurufen (sofern das Define GLB_DELPHI aktiv ist). Dann werden die Daten direkt in die Instanz kopiert.
Dafür müsste ich Delphi verwenden. :wink:
Wilson hat geschrieben:
Und zwar verwende ich die glBitmap momentan mit Lazarus unter Windows.


Ich hab einen Teil komplett vergessen gehabt, an dem es wohl liegt: Und zwar passe ich die Texturen wenn das System keine NPOT Texturen unterstützt auf POT an
(Aufgrund eines komischen Fehlers hat der das auf meinem System auch gemacht, obwohl mein PC das unterstützt, jetzt nach einem neukompilieren tut ers nicht mehr und GetPixel funktioniert auch). Hier ist jedenfalls der Code:
Code:
  1. procedure ResizeToPot(var glBitmap:TGlBitmap2d; out usedFractionX,usedFractionY:Single);  overload;
  2. var
  3.   newBMP:TglBitmap2d;
  4.   srcpixel,dstPixel:PByte;
  5.   y:Integer;
  6.   Size:Integer;
  7. begin
  8.   //Check if needed
  9.   if not (GL_ARB_texture_non_power_of_two or GL_VERSION_2_0) then
  10.   begin
  11.     //New glBitmap
  12.     newBMP:=TglBitmap2D.Create(glBitmapPosition(nextPOT(glBitmap.width),nextPOT(glBitmap.height)),glBitmap.InternalFormat);
  13.     newBMP.AddAlphaFromValue(0);
  14.     UsedFractionX:=glBitmap.Width/newBmp.Width;
  15.     UsedFractionY:=glBitmap.Height/newBmp.Height;
  16.     try
  17.       //Size of one row
  18.       Size:=Trunc(glBitmap.Width * FormatGetSize(glBitmap.InternalFormat));
  19.       for y := 0 to glBitmap.Height-1  do
  20.       begin
  21.         //Get Pointers
  22.         SrcPixel := glBitmap.Scanline[y];
  23.         DstPixel := newBMP.ScanLine[y];
  24.         //And Copy it
  25.         Move(SrcPixel^,dstPixel^,size);
  26.       end;
  27.     finally
  28.       glBitmap.Free;
  29.       glBitmap:=newBmp;
  30.     end;
  31.   end else
  32.   begin
  33.     usedFractionX:=1;
  34.     usedFractionY:=1;
  35.   end;
  36. end;  
  37.  
  38. function NextPOT(num:Integer):Integer;
  39. begin
  40.   result:=1;
  41.   while num>result do
  42.     result:=result*2;
  43. end;    

_________________
2+2=5
For extremely large values of two


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Sa Jan 02, 2010 19:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
With delphi 2009 i am having troubles loading jpg textures with glbitmap 2.02 using GLB_DELPHI_JPEG.

The offending line seems to be (3747):
Code:
  1.   // if Bitmap then read file.
  2.   if ((Temp[0] = chr($FF)) and (Temp[1] = chr($D8))) then begin

all is read into Temp[0] and nothing is in Temp[1]. Possible due to that line 3737 is defined as:
Code:
  1.   Temp: array[0..1]of char;

instead of:
Code:
  1.   Temp: array[0..1]of ansichar;

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: So Jan 03, 2010 12:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wilson hat geschrieben:
Lossy eX hat geschrieben:
Also um die Texturdaten in ein TBitmap zu kopieren genügt normal auch die Methode AssignToBitmap aufzurufen (sofern das Define GLB_DELPHI aktiv ist). Dann werden die Daten direkt in die Instanz kopiert.
Dafür müsste ich Delphi verwenden. :wink:
Wilson hat geschrieben:
Und zwar verwende ich die glBitmap momentan mit Lazarus unter Windows.

Ups. Das muss wohl an mir irgendwie vorbei gegangen sein. ;) Damit fällt das wohl ein bisschen flach. Die TBitmaps von Lazarus werde gar nicht unterstützt. Ob ich das tun werde weiß ich allerdings noch nicht.

Und bei deinem Code ist das vom Prinzip das Gleiche wie bei Create an dem ein Dateinamen übergeben wird. Im Konstruktor wird das Bild erstellt und im AfterConstruction wird fGetPixelFunc wieder gelöscht. Es sei denn das Bild hat keinen AlphaKanal dann wird der durch AddAlphaFromValue erstellt und nach dem Konstruktor wird fGetPixelFunc wieder gesetzt. Wenn die aber schon einen hat passiert da nix.

Musst du vorerst so machen wie ich das gesagt habe bis ich das angepasst habe. Und danke.

Noeska: Danke ich werde es anpassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: So Jan 03, 2010 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 20, 2006 17:34
Beiträge: 52
Danke, funktioniert so. :D

_________________
2+2=5
For extremely large values of two


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Di Apr 12, 2011 12:14 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Hallo Lossey,
gerade hat man mich darauf aufmerksam gemacht, dass ich Dir ein mutmaßliches Bugfix mitteilen sollte.

Unter Delphi 2009 habe ich in der Procedure LoadPNG folgendes geeändert:
Code:
  1. Header: Array[0..7] of Byte;
  2. Zeile 3329-> Header: Array[0..7] of AnsiChar;
  3.  
  4. PngHeader: Array[0..7] of Byte = (#137,..
  5. Zeile 3335-> PngHeader: Array[0..7] of AnsiChar = (#137,


Die LibPNG, die Du empfiehlst, funktionierte nicht. D2009 hatte aber eine eigene Unit für PNGs.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Do Apr 14, 2011 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo. Danke für den Hinweis. Wobei ich das wohl genau andersrum machen würde. Also weiterhin Bytes benutzen und bei dem Konstantenarray dann die Raute entfernen. So ist es ja eigentlich von anfang an geplannt gewesen. Werde das irgendwann mal fixen.

Jens01 hat geschrieben:
Die LibPNG, die Du empfiehlst, funktionierte nicht. D2009 hatte aber eine eigene Unit für PNGs.
Dazu kann ich nix sagen, da das letzte Delphi womit ich privat gearbeitet habe war Turbo Delphi. Und zum Kompilieren/Testen hatte ich nur mal eine Testversion. Was die PNG Unit in Delphi angeht. Die Unit pngimage wird von der glBitmap.pas immernoch unterstützt. Nur leider gibt es die nicht mehr, da CodeGear (mal wieder) nichts besseres zu tun hatte als sie zu kaufen und vom Markt zu nehmen. Das war auch einer der Gründe warum ich überhaupt die Unterstützung für die libPNG ins Leben gerufen habe.

Lossy


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mi Okt 16, 2013 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Heyho,

hab grad nen kleinen Bug entdeckt: beim Speichern von TGA's fliegt mir mein Programm um die Ohren. Grund dafür ist folgende Methode: TglBitmap.SaveTGA.ConvertData. Da wird von 0 bis Width*Height gezählt, das ist aber ein Pixel zu viel :)

Code:
  1.   procedure ConvertData(pTemp: pByte);
  2.   var
  3.     Idx, PixelSize: Integer;
  4.     Temp: byte;
  5.   begin
  6.     PixelSize := fPixelSize;
  7.  
  8.     for Idx := 0 to Height * Width do begin
  9.       Temp := pByteArray(pTemp)^[2];
  10.       pByteArray(pTemp)^[2] := pByteArray(pTemp)^[0];
  11.       pByteArray(pTemp)^[0] := Temp;
  12.  
  13.       Inc(pTemp, PixelSize);
  14.     end;
  15.   end;


MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mi Okt 16, 2013 19:51 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Mal gucken, ob Lossy noch antwortet. Laut seiner Internetseite hat er sich von der Programmierung abgewendet.
Ich schätze, wenn wir die Projekte aktuell halten wollen, müssen wir das zukünftig selbst machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mi Okt 16, 2013 20:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Jo, hab ich schon fast befürchtet. In der glBitmap gibts es hier und da noch paar Sachen die ich gern anders machen würde... Ma sehen, wenn ich ma Zeit finde nehm ich das vlt mal in Angriff :)

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Mi Okt 16, 2013 20:21 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Seine Projekte sind allesamt gut zu gebrauchen. Wäre einfach schade, wenn die versumpfen würden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: Do Okt 17, 2013 15:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Jens01 hat geschrieben:
Mal gucken, ob Lossy noch antwortet. Laut seiner Internetseite hat er sich von der Programmierung abgewendet.

Jain. Ich programmiere noch. Allerdings weder Delphi noch OpenGL sondern nur Dinge die ich persönlich gebrauchen kann. Und das Ganze dann auch noch in C#.

Jens01 hat geschrieben:
Ich schätze, wenn wir die Projekte aktuell halten wollen, müssen wir das zukünftig selbst machen.

Da hast du wohl nicht ganz unrecht. Wobei die glBitmap gerade für OpenGL 3.0+ nie wirklich richtig fit war. Aber von meiner Seite aus spricht auch nichts dagegen, wenn das jemand weiterführen möchte. Sofern der Verweis auf den originalen Urheber und die Quellen nicht entfernt wird. Also frei nach dem Motto "basierend auf glbitmap von blah blah". Bei allem Anderen bin ich flexibel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glBitmap
BeitragVerfasst: So Okt 20, 2013 17:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm... also Bugfixings wie dem TGA Problem stehst du ja dann positiv gegenüber. Jetzt würde es Sinn machen die Unit irgendwo immer korrigiert bereit zu stellen.
Ich könnte mir vorstellen das im Wiki zu "hosten". Einfacher Grund: Es gibt eine Versionsgeschichte, Es gibt eine einfache diff möglichkeit frei Haus, es ist eigentlich nur ein Textfile und es gibt bereits einen Artikel: Glbitmap_loader
Wenn also jemand einen Fix machen will, besorgt er sich den aktuellsten Stand aus dem Wiki, fixt das und lädt die neue Version mit Kommentar (gern auch im Header des Files) wieder hoch.

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 131 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7, 8, 9  Nächste
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 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.139s | 17 Queries | GZIP : On ]