Skip to content

Commit 5cc3226

Browse files
authored
Merge pull request #344 from shellfu/Issue-343
Add Compute Shader and SSBO Functions to raylib-go
2 parents 49aab27 + 5c31cc3 commit 5cc3226

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

raylib/rlgl_cgo.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,12 @@ func SetUniformSampler(locIndex int32, textureId uint32) {
667667
C.rlSetUniformSampler(clocIndex, ctextureId)
668668
}
669669

670+
// LoadComputeShaderProgram -
671+
func LoadComputeShaderProgram(shaderID uint) uint {
672+
cshaderID := C.uint(shaderID)
673+
return uint(C.rlLoadComputeShaderProgram(cshaderID))
674+
}
675+
670676
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)
671677
func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) {
672678
cgroupX := C.uint(groupX)
@@ -675,6 +681,55 @@ func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) {
675681
C.rlComputeShaderDispatch(cgroupX, cgroupY, cgroupZ)
676682
}
677683

684+
// LoadShaderBuffer - Load shader storage buffer object (SSBO)
685+
func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 {
686+
csize := C.uint(size)
687+
cdata := data
688+
cusageHint := C.int(usageHint)
689+
return uint32(C.rlLoadShaderBuffer(csize, cdata, cusageHint))
690+
}
691+
692+
// UnloadShaderBuffer - Unload shader storage buffer object (SSBO)
693+
func UnloadShaderBuffer(id uint32) {
694+
cid := C.uint(id)
695+
C.rlUnloadShaderBuffer(cid)
696+
}
697+
698+
// UpdateShaderBuffer - Update SSBO buffer data
699+
func UpdateShaderBuffer(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) {
700+
cid := C.uint(id)
701+
cdata := data
702+
cdataSize := C.uint(dataSize)
703+
coffset := C.uint(offset)
704+
C.rlUpdateShaderBuffer(cid, cdata, cdataSize, coffset)
705+
}
706+
707+
// BindShaderBuffer - Bind SSBO buffer
708+
func BindShaderBuffer(id uint32, index uint32) {
709+
cid := C.uint(id)
710+
cindex := C.uint(index)
711+
C.rlBindShaderBuffer(cid, cindex)
712+
}
713+
714+
// ReadShaderBuffer - Read SSBO buffer data (GPU->CPU)
715+
func ReadShaderBuffer(id uint32, dest unsafe.Pointer, count uint32, offset uint32) {
716+
cid := C.uint(id)
717+
cdest := dest
718+
ccount := C.uint(count)
719+
coffset := C.uint(offset)
720+
C.rlReadShaderBuffer(cid, cdest, ccount, coffset)
721+
}
722+
723+
// CopyShaderBuffer - Copy SSBO data between buffers
724+
func CopyShaderBuffer(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) {
725+
cdestId := C.uint(destId)
726+
csrcId := C.uint(srcId)
727+
cdestOffset := C.uint(destOffset)
728+
csrcOffset := C.uint(srcOffset)
729+
ccount := C.uint(count)
730+
C.rlCopyShaderBuffer(cdestId, csrcId, cdestOffset, csrcOffset, ccount)
731+
}
732+
678733
// GetShaderBufferSize - Get SSBO buffer size
679734
func GetShaderBufferSize(id uint32) uint32 {
680735
cid := C.uint(id)

0 commit comments

Comments
 (0)