74 lines
2.1 KiB
Nim
74 lines
2.1 KiB
Nim
## This example show how to have real time pixie using sdl2 API.
|
|
|
|
import math, pixie, sdl2, sdl2/gfx
|
|
|
|
const
|
|
rmask = uint32 0x000000ff
|
|
gmask = uint32 0x0000ff00
|
|
bmask = uint32 0x00ff0000
|
|
amask = uint32 0xff000000
|
|
|
|
let
|
|
w: int32 = 256
|
|
h: int32 = 256
|
|
|
|
var
|
|
screen = newImage(w, h)
|
|
ctx = newContext(screen)
|
|
frameCount = 0
|
|
window: WindowPtr
|
|
render: RendererPtr
|
|
mainSurface: SurfacePtr
|
|
mainTexture: TexturePtr
|
|
evt = sdl2.defaultEvent
|
|
|
|
proc display() =
|
|
## Called every frame by main while loop
|
|
|
|
# draw shiny sphere on gradient background
|
|
let linerGradient = newPaint(pkGradientLinear)
|
|
linerGradient.gradientHandlePositions.add(vec2(0, 0))
|
|
linerGradient.gradientHandlePositions.add(vec2(0, 256))
|
|
linerGradient.gradientStops.add(
|
|
ColorStop(color: rgbx(0, 0, 0, 255), position: 0))
|
|
linerGradient.gradientStops.add(
|
|
ColorStop(color: rgbx(255, 255, 255, 255), position: 1))
|
|
ctx.fillStyle = linerGradient
|
|
ctx.fillRect(0, 0, 256, 256)
|
|
|
|
let radialGradient = newPaint(pkGradientRadial)
|
|
radialGradient.gradientHandlePositions.add(vec2(128, 128))
|
|
radialGradient.gradientHandlePositions.add(vec2(256, 128))
|
|
radialGradient.gradientHandlePositions.add(vec2(128, 256))
|
|
radialGradient.gradientStops.add(
|
|
ColorStop(color: rgbx(255, 255, 255, 255), position: 0))
|
|
radialGradient.gradientStops.add(
|
|
ColorStop(color: rgbx(0, 0, 0, 255), position: 1))
|
|
ctx.fillStyle = radialGradient
|
|
ctx.fillCircle(vec2(128.0, 128.0 + sin(float(frameCount)/10.0) * 20), 76.8)
|
|
|
|
inc frameCount
|
|
|
|
var dataPtr = ctx.image.data[0].addr
|
|
mainSurface = createRGBSurfaceFrom(dataPtr, cint w, cint h, cint 32, cint 4*w,
|
|
rmask, gmask, bmask, amask)
|
|
mainTexture = render.createTextureFromSurface(mainSurface)
|
|
destroy(mainSurface)
|
|
|
|
render.clear()
|
|
render.copy(mainTexture, nil, nil)
|
|
destroy(mainTexture)
|
|
|
|
render.present()
|
|
|
|
discard sdl2.init(INIT_EVERYTHING)
|
|
window = createWindow("SDL/Pixie", 100, 100, cint w, cint h, SDL_WINDOW_SHOWN)
|
|
render = createRenderer(window, -1, 0)
|
|
|
|
while true:
|
|
while pollEvent(evt):
|
|
if evt.kind == QuitEvent:
|
|
quit(0)
|
|
display()
|
|
delay(14)
|