Skip to content

Instantly share code, notes, and snippets.

@kuri65536
Last active October 28, 2017 15:58
GenieSDL2Texture.gs

This example programs was created for Genie language from the vala SDL example.

$ git clone this.repo
$ cd this.repo
$ make
$ ./sdlsample

Prerequirement

  • install valac
  • install libsdl2-dev, libsdl2-gfx-dev, libsdl2-image-dev

Result

snapshot

[indent=4]
uses
SDL
SDLGraphics
class SDLSample: Object
const SCREEN_WIDTH: int = 640
const SCREEN_HEIGHT: int = 480
const DELAY: int = 1
const keys: array of Input.Scancode = {
Input.Scancode.UP,
Input.Scancode.DOWN,
Input.Scancode.LEFT,
Input.Scancode.RIGHT,
Input.Scancode.S,
Input.Scancode.Q}
// prop window: Video.Window // don't do this, you will get sigv.
window: Video.Window
render: Video.Renderer
rand: GLib.Rand
running: bool
flag: bool
rect: Video.Rect
rectSrc: Video.Rect
hWin: int
wWin: int
speed: int
seq: array of int
construct()
stderr.printf("construct\n")
self.rand = new GLib.Rand()
self.speed = 1
self.running = true
def run()
stderr.printf("run\n")
init_video()
var img = SDLImage.load("test.png")
var tx = Video.Texture.create_from_surface(self.render, img)
self.rect.x = 10000
self.rect.y = 0
self.rect.w = (uint)img.w
self.rect.h = (uint)img.h
self.window.get_size(out self.wWin, out self.hWin);
self.rectSrc.x = 0
self.rectSrc.y = 0
self.rectSrc.w = self.rect.w
self.rectSrc.h = self.rect.h
self.seq = new array of int[5]
stderr.printf("loop\n")
while self.running
draw(tx)
getkeys(self.seq)
SDL.Timer.delay(DELAY)
def init_video()
// stderr.printf("window.\n")
window = new Video.Window("Genie SDL Demo",
Video.Window.POS_CENTERED,
Video.Window.POS_CENTERED,
SCREEN_WIDTH, SCREEN_HEIGHT,
Video.WindowFlags.RESIZABLE)
assert self.window != null
// stderr.printf("renderer.\n")
self.render = Video.Renderer.create(
self.window, -1,
Video.RendererFlags.ACCELERATED |
Video.RendererFlags.PRESENTVSYNC)
assert self.render != null
// stderr.printf("show.\n")
self.window.show()
def draw(tx: Video.Texture)
f: bool = false
if self.rect.x > self.wWin
f = true
if self.rect.x < -(int)self.rectSrc.w
f = true
if self.rect.y > self.hWin
f = true
if self.rect.y < -(int)self.rectSrc.h
f = true
if f
self.rect.x = 0
self.rect.y = (int16)rand.int_range(0, self.hWin)
self.render.clear()
self.render.copy(tx, self.rectSrc, self.rect)
self.render.present()
def getkeys(seq: array of int
)
Event.pump()
var buf = Input.Keyboard.get_raw_state()
i: int = 0
for key in keys
seq[i] = buf[key]
if (seq[i] & 1) != buf[key]
seq[i] = seq[i] | 2
i += 1
if seq[0] != 0
self.rect.y -= self.speed
if seq[1] != 0
self.rect.y += self.speed
if seq[2] != 0
self.rect.x -= self.speed
if seq[3] != 0
self.rect.x += self.speed
if seq[4] != 0
self.speed += 1
if self.speed > (int)self.rectSrc.h
self.speed = 1
if seq[5] != 0
self.running = false
init
SDL.init(InitFlag.EVERYTHING | SDLImage.InitFlags.ALL)
var sample = new SDLSample()
sample.run()
SDL.quit()
// vi: ft=genie
src := $(shell ls *.gs)
# save_c := --save-temps
FLAGS_GENIE := --pkg sdl2 --pkg SDL2_image --pkg SDL2_gfx \
--Xcc=-I/usr/include/SDL2 $(save_c)
sdlsample: $(src)
valac $(FLAGS_GENIE) -o $@ $<
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment