最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

macos - SDL_CreateTextureFromSurface() from purego-sdl3 Go binding returns nil - Stack Overflow

programmeradmin4浏览0评论

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.

发布评论

评论列表(0)

  1. 暂无评论