Illusion Graphics 2D

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Illusion Graphics 2D

Beitrag von Vermilion »

Die "Illusion Graphics 2D" Engine ist eine OpenGL basierte 2D Engine, die als Ersatz dienen soll für die PureBasic interne Sprite&Screen Library (noch nicht vervollständigt).
  • Hardware-beschleunigte Darstellung, das Drehen oder beliebige vergrößern von Grafiken übernimmt vollkommen die Grafikkarte.
  • Volle Alpha-Kanal Unterstützung.
  • Flexibilität; Die angezeigten Grafiken können ganz einfach gedreht und in der Größe verändert werden, ohne spürbare Leistungseinbußen.
  • Intern werden unkomprimierte Targa Image Files unterstützt. Für alles andere gibt es eine Funktion die ein RGB/A Datenarray aus dem Speicherliest (somit theoretisch alle Bildformate ladbar). Beispielloader vorhanden.
  • Geringe Dateigröße der Bibliothek
Ein Bug den ich immer noch nicht beheben konnte: Das Clipping, funktioniert immernoch nicht wirklich korrekt. Ich werde auch noch bekloppt. Das ist eigentlich ganz simpel, aber ich habe stundenlang probiert und experimentiert, jedoch wollte das trotzdem nicht gescheid funktionieren.

Lizenzbestimmungen
Diese Software ist vollkommen frei. Quelltext wird mitgeliefert. Macht was immer ihr damit wollt. Jedoch übernehme ich keine Verantwortung für Schäden die aus der Benutzung resultieren (genaueres in der mitgelieferten "License.txt").

Weiterentwicklung
Die Weiterentwicklung wird offiziell auf unbestimmte Dauer eingestellt. Somit gibt es auch keine Dokumentation, allerdings sind die Befehle so gut wie selbsterklärend und so stark wie möglich denen der PureBasic Sprite&Screen Befehle nachempfunden. Und es sind ganze 2(!) Beispielquelltexte mitgeliefert. Ansonsten im Quelltext der Engine selbst sind noch Kurzbeschreibungen vor jeder Prozedur (Mini Hilfe) und ist meiner Meinung nach genug kommentiert.

Für Verbesserungen, neue Beispielquelltexte oder komplett neue Includes (wie z.B. die Unterstützung von Videowiedergabe) von Nutzern (wie z.B. euch) habe ich immer ein Ohr offen und werde sie in die offizielle Version (wer weiß, wer sein eigenes Derivat davon ableitet) einbauen, sofern sie eine gewisse Qualität aufweisen / in den Rest des Salates passen.
Dies ist mein letztes Projekt durchgeführt in PureBasic, da ich nun meine Prioritäten auf Spiele Entwicklung in C# mit XNA verlege (bzw. C++ im Zusammenspiel mit der OGRE und Irrlicht Engine).

Runterladen!
98KB, *.zip Archiv
Zuletzt geändert von Vermilion am 09.09.2008 18:25, insgesamt 1-mal geändert.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Vermilion
Habs getestet. Gute Lib :allright:
Nur ich bleibe erstmal noch bei der 2DDrawing/Sprite(3D)-Lib^^

PS: Systemvorraussetzungen: bitte nur mit einem r :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ups, ok, das nächste mal nicht mehr vorzufinden. :oops: Ja, Rechtschreibung ist so eine Sache...
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Hast du vllt ein Beispiel Code mit den normalen PB-Befehlung und deinen Befehlen wo man sieht das deins wirklich schneller ist.
zB :
- Darstellung von 10000 Sprites
- Darstellung von 10000 gezerrten Sprites

habe zZ keine Zeit um mich tiefer damit zu befassen, deswegen stelle ich diese Frage :oops:


PS: Die Hilfedatei funzt nicht, habe nur leere Seiten :?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Wo steht, dass ich behaupte, dass sie insgesamt schneller ist? ^^ Naja, kann ich ja mal gleich machen, solche Tests.

Bei der Hilfedatei kann ich nicht helfen, also bei mir wird alles einwandfrei angezeigt, ich kann aber sagen, dass ich sie mit HelpMaker erstellt habe.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

habe gerade mal n Test gemacht :

Code: Alles auswählen

XIncludeFile "Illusion2d.pbi"
Global Image.l, n.l
IllOpenScreen(640, 480, "Simple", #False) ; Open the Screen with a Resolution of 640x480
Image = IllLoadTargaImage("media/ground0.tga") ; Load the image

Time = timeGetTime_()
For i = 1 To 100
  IllBegin()
    For n = 1 To 1000 
      IllSetImagePosition(Image, Random(1000), Random(1000)) ; Position it
      IllSetImageRotation(Image, Random(359))
      IllDisplayImage(Image) ; Just Display the image
    Next n  
  IllEnd()  
Next i
Time1 = timeGetTime_()-Time

Ergebnis = MessageRequester("", Str(Time1))
vs.

Code: Alles auswählen

InitSprite()
InitSprite3D()
UseTGAImageDecoder()

OpenWindow(0, 0, 0, 640, 480, "Simple", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
 
 LoadSprite(1, "media/ground0.tga", #PB_Sprite_Texture)
 CreateSprite3D(1,1)
 
Time = timeGetTime_()
For i = 1 To 100
 WindowEvent()
 ClearScreen(0)

 Start3D()
  For n = 1 To 1000 
   RotateSprite3D(1, Random(359),0)
   DisplaySprite3D(1, Random(1000), Random(1000)) ; Just Display the image
  Next n
 Stop3D()

 FlipBuffers()  
Next i
Time1 = timeGetTime_()-Time

Ergebnis = MessageRequester("", Str(Time1))
Ergebnis:
928 zu 1738

also ist deins fast doppelt so schnell wie PB :allright:

EDIT: Jedoch bei 10facher Bilderanzahl pro Frame:
8700 zu 8600 :?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Das hat einen Grund, ich suche gerade bloß welchen, weil ich denke, das lässt sich noch optimieren... bei meiner Engine wird übrigens die Bildschirmwiederholungsrate (Hz) nicht verändert. Weitere Notiz (bin gerade mit Vista online): Bei Sprite3D schaltet sich die Aero Oberfläche aus, bei Illusion2Dnicht.
Und bei mir werden alle Quads geblendet gerendert, also es ist egal ob sie 24 Bit Farbtiefe haben (also dann ohne Transparenz) oder Alpha Kanal haben, sie werden so oder so mit der Blending Funktion gerendert. Vielleicht sollte ich das ändern...

Also wenn man nun nicht tausende Sprites auf ein mal darstellen möchte, ist meine die bessere Wahl bezüglich Performance. Wobei ich persönlich nicht gerade so Wert lege auf diese Milisekunden Unterschied, die da beim Rendern von tausenden Sprites sind. :)

Edit: Bei 10-facher Bildzahl ist meine Engine immer noch um 2 Sekunden schneller. :?
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Damit ist PB schneller:

Code: Alles auswählen

InitSprite() 
InitSprite3D() 
UseTGAImageDecoder() 

OpenWindow(0, 0, 0, 640, 480, "Simple", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0) 
  
 SetFrameRate(99999)
 LoadSprite(1, "media/ground0.tga", #PB_Sprite_Texture) 
 CreateSprite3D(1,1) 
  
Time = timeGetTime_() 
For i = 1 To 100 
 
 ClearScreen(0) 

 Start3D() 
  
  For n = 1 To 1000 
    RotateSprite3D(1, Random(359),0) 
   DisplaySprite3D(1, Random(1000), Random(1000)) ; Just Display the image 
  Next n 
 Stop3D() 

 FlipBuffers(0)  
Next i 
Time1 = timeGetTime_()-Time 

Ergebnis = MessageRequester("", Str(Time1)) 
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Bei mir variiert das irgendwie, wahrscheinlich wegen dem Kram im Hintergrund.

Sprite3D: ~3700 Millisekunden
Illusion2D: ~2650 Millisekunden

Bei mir einfach schneller. Kann aber auch daran liegen (dass DirectX so langsam ist), dass ich DirectX 10 als Software aber nur DirectX 9 als Hardware habe, und der dann wieder emulieren/interpolieren oder soetwas muss.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Vermilion hat geschrieben:Bei mir variiert das irgendwie, wahrscheinlich wegen dem Kram im Hintergrund.

Sprite3D: ~3700 Millisekunden
Illusion2D: ~2650 Millisekunden

Bei mir einfach schneller. Kann aber auch daran liegen (dass DirectX so langsam ist), dass ich DirectX 10 als Software aber nur DirectX 9 als Hardware habe, und der dann wieder emulieren/interpolieren oder soetwas muss.
Du hast doch OpenGL verwendet und nicht DirectX :freak: .

Hast du wenigstens die Display-Lists oder Vertex-Arrays/VBOs verwendet? Dann wäre es schon um ein vielfaches schneller.
Zuletzt geändert von DarkDragon am 13.03.2008 20:47, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten