Skip to content

Commit 0e9c277

Browse files
authored
Merge pull request #345 from shellfu/Issue-343
Add Compute Shader and SSBO Functions to raylib-go in `rlgl_purego.go`
2 parents 5cc3226 + 74450e3 commit 0e9c277

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

raylib/rlgl_cgo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,9 +668,9 @@ func SetUniformSampler(locIndex int32, textureId uint32) {
668668
}
669669

670670
// LoadComputeShaderProgram -
671-
func LoadComputeShaderProgram(shaderID uint) uint {
671+
func LoadComputeShaderProgram(shaderID uint32) uint32 {
672672
cshaderID := C.uint(shaderID)
673-
return uint(C.rlLoadComputeShaderProgram(cshaderID))
673+
return uint32(C.rlLoadComputeShaderProgram(cshaderID))
674674
}
675675

676676
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)

raylib/rlgl_purego.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,14 @@ var rlUnloadShaderProgram func(id uint32)
108108
var rlGetLocationUniform func(shaderId uint32, uniformName string) int32
109109
var rlGetLocationAttrib func(shaderId uint32, attribName string) int32
110110
var rlSetUniformSampler func(locIndex int32, textureId uint32)
111+
var rlLoadComputeShaderProgram func(shaderID uint32) uint32
111112
var rlComputeShaderDispatch func(groupX uint32, groupY uint32, groupZ uint32)
113+
var rlLoadShaderBuffer func(size uint32, data unsafe.Pointer, usageHint int32) uint32
114+
var rlUnloadShaderBuffer func(id uint32)
115+
var rlUpdateShaderBuffer func(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32)
116+
var rlBindShaderBuffer func(id uint32, index uint32)
117+
var rlReadShaderBuffer func(id uint32, dest unsafe.Pointer, count uint32, offset uint32)
118+
var rlCopyShaderBuffer func(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32)
112119
var rlGetShaderBufferSize func(id uint32) uint32
113120
var rlBindImageTexture func(id uint32, index uint32, format int32, readonly bool)
114121
var rlGetMatrixModelview func(matrix uintptr)
@@ -223,7 +230,14 @@ func initRlglPurego() {
223230
purego.RegisterLibFunc(&rlGetLocationUniform, raylibDll, "rlGetLocationUniform")
224231
purego.RegisterLibFunc(&rlGetLocationAttrib, raylibDll, "rlGetLocationAttrib")
225232
purego.RegisterLibFunc(&rlSetUniformSampler, raylibDll, "rlSetUniformSampler")
233+
purego.RegisterLibFunc(&rlLoadComputeShaderProgram, raylibDll, "rlLoadComputeShaderProgram")
226234
purego.RegisterLibFunc(&rlComputeShaderDispatch, raylibDll, "rlComputeShaderDispatch")
235+
purego.RegisterLibFunc(&rlLoadShaderBuffer, raylibDll, "rlLoadShaderBuffer")
236+
purego.RegisterLibFunc(&rlUnloadShaderBuffer, raylibDll, "rlUnloadShaderBuffer")
237+
purego.RegisterLibFunc(&rlUpdateShaderBuffer, raylibDll, "rlUpdateShaderBuffer")
238+
purego.RegisterLibFunc(&rlBindShaderBuffer, raylibDll, "rlBindShaderBuffer")
239+
purego.RegisterLibFunc(&rlReadShaderBuffer, raylibDll, "rlReadShaderBuffer")
240+
purego.RegisterLibFunc(&rlCopyShaderBuffer, raylibDll, "rlCopyShaderBuffer")
227241
purego.RegisterLibFunc(&rlGetShaderBufferSize, raylibDll, "rlGetShaderBufferSize")
228242
purego.RegisterLibFunc(&rlBindImageTexture, raylibDll, "rlBindImageTexture")
229243
purego.RegisterLibFunc(&rlGetMatrixModelview, raylibDll, "rlGetMatrixModelview")
@@ -746,11 +760,46 @@ func SetUniformSampler(locIndex int32, textureId uint32) {
746760
rlSetUniformSampler(locIndex, textureId)
747761
}
748762

763+
// LoadComputeShaderProgram - Load compute shader program
764+
func LoadComputeShaderProgram(shaderID uint32) uint32 {
765+
return rlLoadComputeShaderProgram(shaderID)
766+
}
767+
749768
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)
750769
func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) {
751770
rlComputeShaderDispatch(groupX, groupY, groupZ)
752771
}
753772

773+
// LoadShaderBuffer loads a shader storage buffer object (SSBO)
774+
func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 {
775+
return rlLoadShaderBuffer(size, data, usageHint)
776+
}
777+
778+
// UnloadShaderBuffer - Unload shader storage buffer object (SSBO)
779+
func UnloadShaderBuffer(id uint32) {
780+
rlUnloadShaderBuffer(id)
781+
}
782+
783+
// UpdateShaderBuffer - Update SSBO buffer data
784+
func UpdateShaderBuffer(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) {
785+
rlUpdateShaderBuffer(id, data, dataSize, offset)
786+
}
787+
788+
// BindShaderBuffer - Bind SSBO buffer
789+
func BindShaderBuffer(id uint32, index uint32) {
790+
rlBindShaderBuffer(id, index)
791+
}
792+
793+
// ReadShaderBuffer - Read SSBO buffer data (GPU->CPU)
794+
func ReadShaderBuffer(id uint32, dest unsafe.Pointer, count uint32, offset uint32) {
795+
rlReadShaderBuffer(id, dest, count, offset)
796+
}
797+
798+
// CopyShaderBuffer - Copy SSBO data between buffers
799+
func CopyShaderBuffer(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) {
800+
rlCopyShaderBuffer(destId, srcId, destOffset, srcOffset, count)
801+
}
802+
754803
// GetShaderBufferSize - Get SSBO buffer size
755804
func GetShaderBufferSize(id uint32) uint32 {
756805
return rlGetShaderBufferSize(id)

0 commit comments

Comments
 (0)