bmx-ng / sdl.mod

SDL backend for BlitzMax
7 stars 6 forks source link

[SDL.SDLRendermax2D] Added Render2Texture support #41

Closed GWRon closed 1 year ago

GWRon commented 2 years ago

Simple Sample:

SuperStrict
Framework Brl.StandardIO
Import Brl.RandomDefault
'Import Brl.GLMax2D
'Import Brl.D3D9Max2D
'Import SDL.D3D9SDLMax2D
'Import Sdl.GLSDLMax2D
'Import SDL.GL2SDLMax2D
Import Sdl.SDLRenderMax2D

Local inUseName:String

Graphics(800, 600)
SetBlend AlphaBlend

Local inUseInfo:SDLRendererInfo = TSDLRenderMax2DDriver(GetGraphicsDriver()).renderer.getInfo()
inUseName = inUseInfo.GetName()

Local rt:TRenderImage = CreateRenderImage(300, 150, False)
If Not rt Then Throw "no TRenderImage"
'render into the texture
SetRenderImage(rt)
For Local i :Int = 0 To 100
    SetColor Rand(0,255), Rand(0,255), Rand(0,255)
    DrawText("Hey", Rand(0, rt.width-50), Rand(0, rt.height-20))
Next
SetRenderImage(Null)

SetColor 255,255,255
SetClsColor 40, 80, 160
While Not KeyDown(KEY_ESCAPE)    
    Cls
    DrawText("Renderer:" + GetGraphicsDriver().ToString() + " " + inUseName, 0, 0)

    SetScale 2,2
    DrawImage(rt, MouseX(), MouseY())

    Flip
Wend

End
GWRon commented 2 years ago

Example doing a bit more:

SuperStrict
Framework Brl.StandardIO
Import Brl.RandomDefault
'Import Brl.GLMax2D
'Import Brl.D3D9Max2D
'Import SDL.D3D9SDLMax2D
'Import Sdl.GLSDLMax2D
'Import SDL.GL2SDLMax2D
Import Sdl.SDLRenderMax2D
import brl.PNGLoader
import brl.JPGLoader

Local inUseName:String

Graphics(800, 600)
SetBlend AlphaBlend

Local inUseInfo:SDLRendererInfo = TSDLRenderMax2DDriver(GetGraphicsDriver()).renderer.getInfo()
inUseName = inUseInfo.GetName()

Local img:TImage = LoadImage("bg.jpg")
Local img2:TImage = LoadImage("logo.png")

Local rt:TRenderImage = CreateRenderImageFromPixmap(LockImage(img), False)
Local rtTop:TRenderImage = CreateRenderImage(img.width, img.height, False)
midHandleimage(rt)

'render the blitzmax logo into a background,
'- render the logo in 4 "tinted" versions
SetRenderImage(rt)
SetColor 255,0,0
SetViewport(0,0, 100,100)
DrawImage(img2, 0, 0)

SetColor 0,255,0
SetViewport(100,0, 100,100)
DrawImage(img2, 0, 0)

'inbetween we render to something different
SetRenderImage(rtTop)
For Local i :Int = 0 To 100
    SetColor Rand(0,255), Rand(0,255), Rand(0,255)
    DrawText("Hey", Rand(0, rt.width-50), Rand(0, rt.height-20))
Next
SetRenderImage(rt)

SetColor 0,0,255
SetViewport(100,100, 100,100)
DrawImage(img2, 0, 0)

SetColor 255,255,255
SetViewport(0,100, 100,100)
DrawImage(img2, 0, 0)

SetViewport(0,0, rt.width, rt.height)
'draw our second render image
DrawImage(rtTop, 0,0)

'rt.clear(0,0,0,0) 'would blank out everything
SetRenderImage(Null)

'store gpu/rendertexture in pixmap and load it as bg image
'Local bgImage:TImage = LoadImage( rt.ToPixmap() )
'or
Local bgImage:TImage = LoadImage( CreatePixmapFromRenderImage(rt) )

SetColor 255,255,255
SetClsColor 40, 80, 160
While Not KeyDown(KEY_ESCAPE)    
    Cls
    DrawImage(bgImage, 0,0)
    DrawText("Renderer:" + GetGraphicsDriver().ToString() + " " + inUseName, 0, 0)

    SetScale 1,1
    DrawImage(rt, MouseX(), MouseY())

    Flip
Wend

End

bg.jpg bg

logo.png logo