B3D - Direct2D
Tadäää - ImageBuffer

Eine Hürde ist geschafft. Absofort sind Bildmanipulationen über ImageBuffer möglich.
Ein Bild wird ganz normal mit CreateImage(breite, höhe) erstellt und mit SetBuffer kann zwischen ImageBuffer und BackBuffer gewechselt werden. Wie das normale Rendern auch, müssen die Zeichenbefehle von BeginDraw() und EndDraw() umgeben sein. Anschließend ist noch ein UpdateImage Aufruf notwendig. Ist zwar jetzt ein bisschen mehr, als man von B3D gewöhnt ist, funktioniert aber im Grunde genauso einfach.
In folgendem Beispielcode wird ein 50x50 Bild erstellt. In Echtzeit wird nun das Bild manipuliert, es wird ein weißer Rahmen gezeichnet und innen drin, wird die FPS angezeigt. Die Zeit für die Bildmanipulation ist <1 ms. Aber hier habe ich noch nicht wirklich getestet, deshalb die Zeit bitte mit Vorsicht genießen.
Beispielcode:
BlitzBasic: [AUSKLAPPEN]
Für die, die es interessiert: Die ImageBuffer sind einfach nur eigene RenderTargets. Direct2D bietet hier ganz gute Möglichkeiten.
Ein Bild wird ganz normal mit CreateImage(breite, höhe) erstellt und mit SetBuffer kann zwischen ImageBuffer und BackBuffer gewechselt werden. Wie das normale Rendern auch, müssen die Zeichenbefehle von BeginDraw() und EndDraw() umgeben sein. Anschließend ist noch ein UpdateImage Aufruf notwendig. Ist zwar jetzt ein bisschen mehr, als man von B3D gewöhnt ist, funktioniert aber im Grunde genauso einfach.
In folgendem Beispielcode wird ein 50x50 Bild erstellt. In Echtzeit wird nun das Bild manipuliert, es wird ein weißer Rahmen gezeichnet und innen drin, wird die FPS angezeigt. Die Zeit für die Bildmanipulation ist <1 ms. Aber hier habe ich noch nicht wirklich getestet, deshalb die Zeit bitte mit Vorsicht genießen.
Beispielcode:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2
Initialize()
white=CreateBrush(255,255,255,255)
font=LoadFont ("Arial",18)
SetFont font
img=CreateImage(50,50)
SetBuffer BackBuffer()
While (Render() And KeyHit(1)=0)
ms=MilliSecs()
SetBuffer ImageBuffer(img)
BeginDraw()
Cls()
SelectBrush white
DrawRect (0,0,50,50,0) ; Rahmen
DrawText 10,10,fps
EndDraw()
UpdateImage (img)
SetBuffer BackBuffer()
ms2=MilliSecs()-ms
BeginDraw()
SelectBrush white
Cls()
DrawImage img, MouseX(),MouseY()
DrawText 10,10,"Zeit für Bildmanipulation: "+ms2
EndDraw()
fps=1000/(MilliSecs()-ms)
Wend
WaitKey()
clean()
Für die, die es interessiert: Die ImageBuffer sind einfach nur eigene RenderTargets. Direct2D bietet hier ganz gute Möglichkeiten.

Da mein Irrlicht Port nie fertig wurde, möchte ich das mal wieder gutmachen und zumindest eine funktionierende 2D Version zur Verfügung stellen. Die soll diesmal innerhalb den nächsten 4 Wochen (Semesterferien) auch fertig werden.
Hier habe mich nun aber von Irrlicht komplett entfernt und arbeite direkt mit Direct2D.
Direct2D ist eine Komponente von DirectX10.1, läuft aber auch auf DirectX 9 Hardware. Mehr dazu hier: Direct2D
Dies hat den Vorteil, dass ich von Irrlicht unabhängig bin, auf der aktuellen Technik aufbauen kann und mir umständliche Strukturen von Irrlicht spare. Nachteil ist hierbei, dass (vorerst) eine identische Struktur zu B3D nicht möglich ist.
Beispiel:
BlitzBasic: [AUSKLAPPEN]
Was hier natürlich gleich auffällt, sind die Brushs. Diese sind das Pendant zu dem Blitzinternen Color.
Statt
Code: [AUSKLAPPEN]
muss der Brush vorher erstellt werden, mit SetBrush setzt man den aktuellen Brush fest, der für Text, Line, Oval, Rect und co. gilt. (an dieser Stelle fällt mir gerade auf, dass Plot noch fehlt)
Code: [AUSKLAPPEN]
Was bisher alles geht:

Hier habe mich nun aber von Irrlicht komplett entfernt und arbeite direkt mit Direct2D.
Direct2D ist eine Komponente von DirectX10.1, läuft aber auch auf DirectX 9 Hardware. Mehr dazu hier: Direct2D
Dies hat den Vorteil, dass ich von Irrlicht unabhängig bin, auf der aktuellen Technik aufbauen kann und mir umständliche Strukturen von Irrlicht spare. Nachteil ist hierbei, dass (vorerst) eine identische Struktur zu B3D nicht möglich ist.
Beispiel:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2
Initialize()
testBrush=CreateBrush(5,123,242,150)
testImg = LoadImage("test.bmp")
testFont=LoadFont ("Arial",18)
SetFont testFont
While (Render() And KeyHit(1)=0)
BeginDraw()
Draw2DImage img, MouseX(), MouseY();
SelectBrush testBrush
DrawLine 10,10, 500, 500, 1
EndDraw()
Wend
Clean()
End()
Was hier natürlich gleich auffällt, sind die Brushs. Diese sind das Pendant zu dem Blitzinternen Color.
Statt
Code: [AUSKLAPPEN]
Color 255,0,255
muss der Brush vorher erstellt werden, mit SetBrush setzt man den aktuellen Brush fest, der für Text, Line, Oval, Rect und co. gilt. (an dieser Stelle fällt mir gerade auf, dass Plot noch fehlt)

Code: [AUSKLAPPEN]
brush = CreateBrush ( 255,0,255, 255) ; r,g,b, alpha
;---
SetBrush brush
;---
SetBrush brush
Was bisher alles geht:
- Initialize()
- Clean()
- Render()
- BeginDraw()
- EndDraw()
- ClsColor r%,g%,b%
- DrawLine x%,y%, x2%, y2%, stroke#
- DrawRect x%,y%, width%, height%, filled%
- DrawOval x%,y%, width%, height%, filled%
- DrawImage my_img, x%, y%
- DrawText x%, y%, "Mein Text"
- CreateBrush( r%, g%, b%, a%)
- LoadImage( "Mein Bild.bmp" )
- LoadFont ( "Font", Size% )
- SetFont my_font
- SetBrush my_brush