github/jupiterrider/purego-sdl3
I am having difficulty in getting the following 'Hello World' example to run, and am wondering what I have done wrong:
package main
import (
"github/jupiterrider/purego-sdl3/sdl"
"github/jupiterrider/purego-sdl3/ttf"
)
func main() {
var (
window *sdl.Window
renderer *sdl.Renderer
font *ttf.Font
)
if !sdl.SetHint(sdl.HintRenderVSync, "1") {
panic(sdl.GetError())
}
// initialise sdl
if !sdl.Init(sdl.InitVideo) {
panic(sdl.GetError())
}
defer sdl.Quit()
// initialise ttf
ttf.Init()
if !ttf.Init() {
panic(sdl.GetError())
}
defer ttf.Quit()
window = sdl.CreateWindow("Viewdata Terminal 0.1", 1280, 720, sdl.WindowResizable)
if window == nil {
panic(sdl.GetError())
}
renderer = sdl.CreateRenderer(window, "")
if renderer == nil {
panic(sdl.GetError())
}
// clean up
defer func() {
// stack based calls so executed in last-in first out order
defer sdl.DestroyWindow(window)
defer sdl.DestroyRenderer(renderer)
defer ttf.CloseFont(font)
}()
// create the font
font = ttf.OpenFont("./fonts/KosugiMaru-Regular.ttf", 32)
if font == nil {
panic(sdl.GetError())
}
// create some text
color := sdl.Color{255, 255, 255, sdl.AlphaOpaque}
text := "Hello World"
textSurface := ttf.RenderTextBlended(font, text, uint64(len(text)), color)
// create the texture
texture := sdl.CreateTextureFromSurface(renderer, textSurface)
sdl.DestroySurface(textSurface)
if texture == nil {
sdl.Log("Couldn't create text: %s\n", sdl.GetError())
panic(sdl.GetError())
}
Outer:
for {
var event sdl.Event
for sdl.PollEvent(&event) {
switch event.Type() {
case sdl.EventQuit:
break Outer
case sdl.EventKeyDown:
if event.Key().Scancode == sdl.ScancodeEscape {
break Outer
}
}
}
var w int32 = 0.0
var h int32 = 0.0
var dst sdl.FRect
const scale float32 = 4.0
/* Center the text and scale it up */
sdl.GetRenderOutputSize(renderer, &w, &h)
sdl.SetRenderScale(renderer, scale, scale)
sdl.GetTextureSize(texture, &dst.W, &dst.H)
dst.X = ((float32(w) / scale) - dst.W) / 2
dst.Y = ((float32(h) / scale) - dst.H) / 2
/* Draw the text */
sdl.SetRenderDrawColor(renderer, 0, 0, 0, 255)
sdl.RenderClear(renderer)
sdl.RenderTexture(renderer, texture, nil, &dst)
sdl.RenderPresent(renderer)
}
}
The issue I have is that the texture returned from sdl.GetTextureFromSurface() always returns nil, the sdl.GetError() reports
Couldn't create text: Parameter 'SDL_CreateTextureFromSurface(): surface' is invalid
panic: Parameter 'SDL_CreateTextureFromSurface(): surface' is invalid
Based on the variables window in my IDE, the textSurface seems to have height and width and a whole load of pixels. Any help?
I'm using Go 1.24.1 on MacOS 14.6.1 with SDL 3.2.8 and SDL_TTF 3.2.0.