gg/shader.go

58 lines
979 B
Go
Raw Normal View History

2023-10-23 15:45:18 +03:00
package gg
2023-05-22 23:39:01 +03:00
import (
"github.com/hajimehoshi/ebiten/v2"
//"fmt"
)
type Shader = ebiten.Shader
2023-05-25 00:42:48 +03:00
type ShaderOptions struct {
2023-05-27 18:00:27 +03:00
Shader *Shader
2023-05-25 00:42:48 +03:00
Uniforms map[string] any
Images [4]*Image
}
2023-05-22 23:39:01 +03:00
var (
2023-05-23 22:42:35 +03:00
// The shader is for example only.
SolidWhiteColorShader = MustNewShader([]byte(`
2023-05-22 23:39:01 +03:00
package main
//var Random float
2023-05-27 18:00:27 +03:00
func Fragment(dst vec4, src vec2, _ vec4) vec4 {
c := imageSrc0UnsafeAt(src)
size := imageSrc0Size()
//ret := vec4(0.1) * src.x/size.x
//ret := c * src.x/size.x
//ret.r = 1
//ret.a = c.a
//c.a = 0
//c.rg = vec2(0)
//c.a = c.b
//ret := vec4(1, 1, 1, 0)
//ret.a /= 5
//ret.a = src.x
//c.a /= 5
//c = vec4(c.a)
orig := imageSrc0Origin()
src -= orig
c.a *= (size.x-src.x)/size.x
return c
2023-05-22 23:39:01 +03:00
}
`))
)
func MustNewShader(src []byte) (*Shader) {
shader, err := NewShader(src)
if err != nil {
panic(err)
}
return shader
}
func NewShader(src []byte) (*Shader, error) {
return ebiten.NewShader(src)
}