Go SDL2 游戏开发入门5-texture 渲染技术
前言
SDL2 宣称加入了新的渲染技术, 就是基于硬件加速的 texture 渲染, 我也不知道这个 texture 指的是什么, 不妨猜一猜, 应该是纹理图片吧
我们这里不纠结 SDL 的具体技术啦, 直接上 Go 代码
代码
package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) const ( W = 670 H = 620 ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, W, H, sdl.WINDOW_SHOWN) defer window.Destroy() renderer, _ := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) defer renderer.Destroy() renderer.SetDrawColor(128, 128, 128, 255) pngImage, _ := img.Load("../asserts/image/texture.png") texture, _ := renderer.CreateTextureFromSurface(pngImage) pngImage.Free() defer texture.Destroy() src := sdl.Rect{0, 0, 200, 200} dst := sdl.Rect{0, 0, W, H} running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: println("Quit") running = false break } } renderer.Clear() renderer.Copy(texture, &src, &dst) renderer.Present() sdl.Delay(16) } }
- 首先我们还是先创建一个窗口 window, 长为 W, 宽为 H
- 然后我们在窗口上创建一个渲染器, 函数为 CreateRenderer, 第 1 个参数就是指向某个具体的窗口, 后两个参数先不管
- SetDrawColor, 先设置渲染器的初始颜色, 参数是 RGBA 的值
- Load 加载图片, 很熟了
- CreateTextureFromSurface 根据 surface 创建一个 texture
- 创建完之后就可以把 surface 释放掉
- 设置两个矩形块 src 和 dst, src 是取 texture 的范围, dst 是将 texture 渲染到窗口上的位置和范围
- 主循环中首先 renderer.Clear 先渲染成上一次设置的颜色, 然后 renderer.Copy 把 texture 放置到具体的位置, 再 renderer.Present 刷新即可