Merge pull request #345 from shellfu/Issue-343

Add Compute Shader and SSBO Functions to raylib-go in `rlgl_purego.go`
This commit is contained in:
Milan Nikolic 2024-01-23 19:00:55 +01:00 committed by GitHub
commit 0e9c277161
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 51 additions and 2 deletions

View file

@ -668,9 +668,9 @@ func SetUniformSampler(locIndex int32, textureId uint32) {
} }
// LoadComputeShaderProgram - // LoadComputeShaderProgram -
func LoadComputeShaderProgram(shaderID uint) uint { func LoadComputeShaderProgram(shaderID uint32) uint32 {
cshaderID := C.uint(shaderID) cshaderID := C.uint(shaderID)
return uint(C.rlLoadComputeShaderProgram(cshaderID)) return uint32(C.rlLoadComputeShaderProgram(cshaderID))
} }
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine) // ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)

View file

@ -108,7 +108,14 @@ var rlUnloadShaderProgram func(id uint32)
var rlGetLocationUniform func(shaderId uint32, uniformName string) int32 var rlGetLocationUniform func(shaderId uint32, uniformName string) int32
var rlGetLocationAttrib func(shaderId uint32, attribName string) int32 var rlGetLocationAttrib func(shaderId uint32, attribName string) int32
var rlSetUniformSampler func(locIndex int32, textureId uint32) var rlSetUniformSampler func(locIndex int32, textureId uint32)
var rlLoadComputeShaderProgram func(shaderID uint32) uint32
var rlComputeShaderDispatch func(groupX uint32, groupY uint32, groupZ uint32) var rlComputeShaderDispatch func(groupX uint32, groupY uint32, groupZ uint32)
var rlLoadShaderBuffer func(size uint32, data unsafe.Pointer, usageHint int32) uint32
var rlUnloadShaderBuffer func(id uint32)
var rlUpdateShaderBuffer func(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32)
var rlBindShaderBuffer func(id uint32, index uint32)
var rlReadShaderBuffer func(id uint32, dest unsafe.Pointer, count uint32, offset uint32)
var rlCopyShaderBuffer func(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32)
var rlGetShaderBufferSize func(id uint32) uint32 var rlGetShaderBufferSize func(id uint32) uint32
var rlBindImageTexture func(id uint32, index uint32, format int32, readonly bool) var rlBindImageTexture func(id uint32, index uint32, format int32, readonly bool)
var rlGetMatrixModelview func(matrix uintptr) var rlGetMatrixModelview func(matrix uintptr)
@ -223,7 +230,14 @@ func initRlglPurego() {
purego.RegisterLibFunc(&rlGetLocationUniform, raylibDll, "rlGetLocationUniform") purego.RegisterLibFunc(&rlGetLocationUniform, raylibDll, "rlGetLocationUniform")
purego.RegisterLibFunc(&rlGetLocationAttrib, raylibDll, "rlGetLocationAttrib") purego.RegisterLibFunc(&rlGetLocationAttrib, raylibDll, "rlGetLocationAttrib")
purego.RegisterLibFunc(&rlSetUniformSampler, raylibDll, "rlSetUniformSampler") purego.RegisterLibFunc(&rlSetUniformSampler, raylibDll, "rlSetUniformSampler")
purego.RegisterLibFunc(&rlLoadComputeShaderProgram, raylibDll, "rlLoadComputeShaderProgram")
purego.RegisterLibFunc(&rlComputeShaderDispatch, raylibDll, "rlComputeShaderDispatch") purego.RegisterLibFunc(&rlComputeShaderDispatch, raylibDll, "rlComputeShaderDispatch")
purego.RegisterLibFunc(&rlLoadShaderBuffer, raylibDll, "rlLoadShaderBuffer")
purego.RegisterLibFunc(&rlUnloadShaderBuffer, raylibDll, "rlUnloadShaderBuffer")
purego.RegisterLibFunc(&rlUpdateShaderBuffer, raylibDll, "rlUpdateShaderBuffer")
purego.RegisterLibFunc(&rlBindShaderBuffer, raylibDll, "rlBindShaderBuffer")
purego.RegisterLibFunc(&rlReadShaderBuffer, raylibDll, "rlReadShaderBuffer")
purego.RegisterLibFunc(&rlCopyShaderBuffer, raylibDll, "rlCopyShaderBuffer")
purego.RegisterLibFunc(&rlGetShaderBufferSize, raylibDll, "rlGetShaderBufferSize") purego.RegisterLibFunc(&rlGetShaderBufferSize, raylibDll, "rlGetShaderBufferSize")
purego.RegisterLibFunc(&rlBindImageTexture, raylibDll, "rlBindImageTexture") purego.RegisterLibFunc(&rlBindImageTexture, raylibDll, "rlBindImageTexture")
purego.RegisterLibFunc(&rlGetMatrixModelview, raylibDll, "rlGetMatrixModelview") purego.RegisterLibFunc(&rlGetMatrixModelview, raylibDll, "rlGetMatrixModelview")
@ -746,11 +760,46 @@ func SetUniformSampler(locIndex int32, textureId uint32) {
rlSetUniformSampler(locIndex, textureId) rlSetUniformSampler(locIndex, textureId)
} }
// LoadComputeShaderProgram - Load compute shader program
func LoadComputeShaderProgram(shaderID uint32) uint32 {
return rlLoadComputeShaderProgram(shaderID)
}
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine) // ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)
func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) { func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) {
rlComputeShaderDispatch(groupX, groupY, groupZ) rlComputeShaderDispatch(groupX, groupY, groupZ)
} }
// LoadShaderBuffer loads a shader storage buffer object (SSBO)
func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 {
return rlLoadShaderBuffer(size, data, usageHint)
}
// UnloadShaderBuffer - Unload shader storage buffer object (SSBO)
func UnloadShaderBuffer(id uint32) {
rlUnloadShaderBuffer(id)
}
// UpdateShaderBuffer - Update SSBO buffer data
func UpdateShaderBuffer(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) {
rlUpdateShaderBuffer(id, data, dataSize, offset)
}
// BindShaderBuffer - Bind SSBO buffer
func BindShaderBuffer(id uint32, index uint32) {
rlBindShaderBuffer(id, index)
}
// ReadShaderBuffer - Read SSBO buffer data (GPU->CPU)
func ReadShaderBuffer(id uint32, dest unsafe.Pointer, count uint32, offset uint32) {
rlReadShaderBuffer(id, dest, count, offset)
}
// CopyShaderBuffer - Copy SSBO data between buffers
func CopyShaderBuffer(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) {
rlCopyShaderBuffer(destId, srcId, destOffset, srcOffset, count)
}
// GetShaderBufferSize - Get SSBO buffer size // GetShaderBufferSize - Get SSBO buffer size
func GetShaderBufferSize(id uint32) uint32 { func GetShaderBufferSize(id uint32) uint32 {
return rlGetShaderBufferSize(id) return rlGetShaderBufferSize(id)