3dtrial/renderer4/raybuffer.go

71 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-08-05 07:25:58 +00:00
package main
import (
rl "github.com/gen2brain/raylib-go/raylib"
"log"
)
type RaylibBuffer struct {
Data []rl.Color
Image *rl.Image
Texture rl.Texture2D
Width uint
Height uint
}
func NewRaylibBuffer(width uint, height uint) *RaylibBuffer {
log.Printf("Creating new raylib framebuffer using texture + image")
//rl.NewTexture2D(1, Width, Height, 0, )
rlimage := rl.GenImageColor(int(width), int(height), rl.Black)
rl.ImageFormat(rlimage, rl.UncompressedR8g8b8a8)
log.Printf("Generated baseline image: %v", rlimage)
rltexture := rl.LoadTextureFromImage(rlimage)
log.Printf("Generated texture from image")
data := rl.LoadImageColors(rlimage)
log.Printf("Generated pixel data from image")
return &RaylibBuffer{
Data: data,
Image: rlimage,
Texture: rltexture,
Width: width,
Height: height,
}
}
func (fb *RaylibBuffer) Dims() (uint, uint) {
return fb.Width, fb.Height
}
// Sure hope this gets inlined...
func (fb *RaylibBuffer) Set(x uint, y uint, r byte, g byte, b byte) {
// if x >= fb.Width || y >= fb.Height {
// return
// }
// fb.Data[x+y*fb.Width].R = r
// fb.Data[x+y*fb.Width].G = g
// fb.Data[x+y*fb.Width].B = b
c := &fb.Data[x+y*fb.Width]
c.R = r
c.G = g
c.B = b
}
func (fb *RaylibBuffer) Get(x uint, y uint) (byte, byte, byte) {
if x >= fb.Width || y >= fb.Height {
return 0, 0, 0
}
return fb.Data[x+y*fb.Width].R,
fb.Data[x+y*fb.Width].G,
fb.Data[x+y*fb.Width].B
}
func (fb *RaylibBuffer) GetUv(u float32, v float32) (byte, byte, byte) {
x := uint(float32(fb.Width)*u) & (fb.Width - 1)
y := uint(float32(fb.Height)*(1-v)) & (fb.Height - 1)
c := &fb.Data[x+y*fb.Width]
return c.R, c.G, c.B
// fb.Data[x+y*fb.Width].R,
// fb.Data[x+y*fb.Width].G,
// fb.Data[x+y*fb.Width].B
}