allow passing nil to LoadShader for purego as well (#172)

This commit is contained in:
JupiterRider 2024-08-21 22:54:05 +02:00
parent d374f90b45
commit 26bdccfe6f

View file

@ -11,6 +11,7 @@ import (
"unsafe"
"github.com/ebitengine/purego"
"golang.org/x/sys/windows"
)
var (
@ -91,8 +92,8 @@ var beginVrStereoMode func(config uintptr)
var endVrStereoMode func()
var loadVrStereoConfig func(config uintptr, device uintptr)
var unloadVrStereoConfig func(config uintptr)
var loadShader func(shader uintptr, vsFileName string, fsFileName string)
var loadShaderFromMemory func(shader uintptr, vsCode string, fsCode string)
var loadShader func(shader uintptr, vsFileName uintptr, fsFileName uintptr)
var loadShaderFromMemory func(shader uintptr, vsCode uintptr, fsCode uintptr)
var isShaderReady func(shader uintptr) bool
var getShaderLocation func(shader uintptr, uniformName string) int32
var getShaderLocationAttrib func(shader uintptr, attribName string) int32
@ -1377,14 +1378,44 @@ func UnloadVrStereoConfig(config VrStereoConfig) {
// LoadShader - Load shader from files and bind default locations
func LoadShader(vsFileName string, fsFileName string) Shader {
var shader Shader
loadShader(uintptr(unsafe.Pointer(&shader)), vsFileName, fsFileName)
var cvsFileName, cfsFileName *byte
if vsFileName != "" {
var err error
cvsFileName, err = windows.BytePtrFromString(vsFileName)
if err != nil {
panic(err)
}
}
if fsFileName != "" {
var err error
cfsFileName, err = windows.BytePtrFromString(fsFileName)
if err != nil {
panic(err)
}
}
loadShader(uintptr(unsafe.Pointer(&shader)), uintptr(unsafe.Pointer(cvsFileName)), uintptr(unsafe.Pointer(cfsFileName)))
return shader
}
// LoadShaderFromMemory - Load shader from code strings and bind default locations
func LoadShaderFromMemory(vsCode string, fsCode string) Shader {
var shader Shader
loadShaderFromMemory(uintptr(unsafe.Pointer(&shader)), vsCode, fsCode)
var cvsCode, cfsCode *byte
if vsCode != "" {
var err error
cvsCode, err = windows.BytePtrFromString(vsCode)
if err != nil {
panic(err)
}
}
if fsCode != "" {
var err error
cfsCode, err = windows.BytePtrFromString(fsCode)
if err != nil {
panic(err)
}
}
loadShaderFromMemory(uintptr(unsafe.Pointer(&shader)), uintptr(unsafe.Pointer(cvsCode)), uintptr(unsafe.Pointer(cfsCode)))
return shader
}