955 lines
26 KiB
Go
955 lines
26 KiB
Go
package rl
|
|
|
|
/*
|
|
#include "raylib.h"
|
|
#include "rlgl.h"
|
|
#include <stdlib.h>
|
|
*/
|
|
import "C"
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
// SetMatrixProjection - Set a custom projection matrix (replaces internal projection matrix)
|
|
func SetMatrixProjection(proj Matrix) {
|
|
cproj := proj.cptr()
|
|
C.rlSetMatrixProjection(*cproj)
|
|
}
|
|
|
|
// SetMatrixModelview - Set a custom modelview matrix (replaces internal modelview matrix)
|
|
func SetMatrixModelview(view Matrix) {
|
|
cview := view.cptr()
|
|
C.rlSetMatrixModelview(*cview)
|
|
}
|
|
|
|
// BeginShaderMode - Begin custom shader drawing
|
|
func BeginShaderMode(shader Shader) {
|
|
cshader := shader.cptr()
|
|
C.BeginShaderMode(*cshader)
|
|
}
|
|
|
|
// EndShaderMode - End custom shader drawing (use default shader)
|
|
func EndShaderMode() {
|
|
C.EndShaderMode()
|
|
}
|
|
|
|
// BeginBlendMode - Begin blending mode (alpha, additive, multiplied)
|
|
func BeginBlendMode(mode BlendMode) {
|
|
cmode := (C.int)(mode)
|
|
C.BeginBlendMode(cmode)
|
|
}
|
|
|
|
// EndBlendMode - End blending mode (reset to default: alpha blending)
|
|
func EndBlendMode() {
|
|
C.EndBlendMode()
|
|
}
|
|
|
|
// MatrixMode - Choose the current matrix to be transformed
|
|
func MatrixMode(mode int32) {
|
|
cmode := C.int(mode)
|
|
C.rlMatrixMode(cmode)
|
|
}
|
|
|
|
// PushMatrix - Push the current matrix to stack
|
|
func PushMatrix() {
|
|
C.rlPushMatrix()
|
|
}
|
|
|
|
// PopMatrix - Pop lattest inserted matrix from stack
|
|
func PopMatrix() {
|
|
C.rlPopMatrix()
|
|
}
|
|
|
|
// LoadIdentity - Reset current matrix to identity matrix
|
|
func LoadIdentity() {
|
|
C.rlLoadIdentity()
|
|
}
|
|
|
|
// Translatef - Multiply the current matrix by a translation matrix
|
|
func Translatef(x float32, y float32, z float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlTranslatef(cx, cy, cz)
|
|
}
|
|
|
|
// Rotatef - Multiply the current matrix by a rotation matrix
|
|
func Rotatef(angle float32, x float32, y float32, z float32) {
|
|
cangle := C.float(angle)
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlRotatef(cangle, cx, cy, cz)
|
|
}
|
|
|
|
// Scalef - Multiply the current matrix by a scaling matrix
|
|
func Scalef(x float32, y float32, z float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlScalef(cx, cy, cz)
|
|
}
|
|
|
|
// MultMatrix - Multiply the current matrix by another matrix
|
|
func MultMatrix(m Matrix) {
|
|
f := MatrixToFloat(m)
|
|
C.rlMultMatrixf((*C.float)(&f[0]))
|
|
}
|
|
|
|
// Frustum .
|
|
func Frustum(left float64, right float64, bottom float64, top float64, znear float64, zfar float64) {
|
|
cleft := C.double(left)
|
|
cright := C.double(right)
|
|
cbottom := C.double(bottom)
|
|
ctop := C.double(top)
|
|
cznear := C.double(znear)
|
|
czfar := C.double(zfar)
|
|
C.rlFrustum(cleft, cright, cbottom, ctop, cznear, czfar)
|
|
}
|
|
|
|
// Ortho .
|
|
func Ortho(left float64, right float64, bottom float64, top float64, znear float64, zfar float64) {
|
|
cleft := C.double(left)
|
|
cright := C.double(right)
|
|
cbottom := C.double(bottom)
|
|
ctop := C.double(top)
|
|
cznear := C.double(znear)
|
|
czfar := C.double(zfar)
|
|
C.rlOrtho(cleft, cright, cbottom, ctop, cznear, czfar)
|
|
}
|
|
|
|
// Viewport - Set the viewport area
|
|
func Viewport(x int32, y int32, width int32, height int32) {
|
|
cx := C.int(x)
|
|
cy := C.int(y)
|
|
cwidth := C.int(width)
|
|
cheight := C.int(height)
|
|
C.rlViewport(cx, cy, cwidth, cheight)
|
|
}
|
|
|
|
// Begin - Initialize drawing mode (how to organize vertex)
|
|
func Begin(mode int32) {
|
|
cmode := C.int(mode)
|
|
C.rlBegin(cmode)
|
|
}
|
|
|
|
// End - Finish vertex providing
|
|
func End() {
|
|
C.rlEnd()
|
|
}
|
|
|
|
// Vertex2i - Define one vertex (position) - 2 int
|
|
func Vertex2i(x int32, y int32) {
|
|
cx := C.int(x)
|
|
cy := C.int(y)
|
|
C.rlVertex2i(cx, cy)
|
|
}
|
|
|
|
// Vertex2f - Define one vertex (position) - 2 float
|
|
func Vertex2f(x float32, y float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
C.rlVertex2f(cx, cy)
|
|
}
|
|
|
|
// Vertex3f - Define one vertex (position) - 3 float
|
|
func Vertex3f(x float32, y float32, z float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlVertex3f(cx, cy, cz)
|
|
}
|
|
|
|
// TexCoord2f - Define one vertex (texture coordinate) - 2 float
|
|
func TexCoord2f(x float32, y float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
C.rlTexCoord2f(cx, cy)
|
|
}
|
|
|
|
// Normal3f - Define one vertex (normal) - 3 float
|
|
func Normal3f(x float32, y float32, z float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlNormal3f(cx, cy, cz)
|
|
}
|
|
|
|
// Color4ub - Define one vertex (color) - 4 byte
|
|
func Color4ub(r uint8, g uint8, b uint8, a uint8) {
|
|
cr := C.uchar(r)
|
|
cg := C.uchar(g)
|
|
cb := C.uchar(b)
|
|
ca := C.uchar(a)
|
|
C.rlColor4ub(cr, cg, cb, ca)
|
|
}
|
|
|
|
// Color3f - Define one vertex (color) - 3 float
|
|
func Color3f(x float32, y float32, z float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
C.rlColor3f(cx, cy, cz)
|
|
}
|
|
|
|
// Color4f - Define one vertex (color) - 4 float
|
|
func Color4f(x float32, y float32, z float32, w float32) {
|
|
cx := C.float(x)
|
|
cy := C.float(y)
|
|
cz := C.float(z)
|
|
cw := C.float(w)
|
|
C.rlColor4f(cx, cy, cz, cw)
|
|
}
|
|
|
|
// EnableVertexArray - Enable vertex array (VAO, if supported)
|
|
func EnableVertexArray(vaoId uint32) bool {
|
|
cvaoId := C.uint(vaoId)
|
|
return bool(C.rlEnableVertexArray(cvaoId))
|
|
}
|
|
|
|
// DisableVertexArray - Disable vertex array (VAO, if supported)
|
|
func DisableVertexArray() {
|
|
C.rlDisableVertexArray()
|
|
}
|
|
|
|
// EnableVertexBuffer - Enable vertex buffer (VBO)
|
|
func EnableVertexBuffer(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableVertexBuffer(cid)
|
|
}
|
|
|
|
// DisableVertexBuffer - Disable vertex buffer (VBO)
|
|
func DisableVertexBuffer() {
|
|
C.rlDisableVertexBuffer()
|
|
}
|
|
|
|
// EnableVertexBufferElement - Enable vertex buffer element (VBO element)
|
|
func EnableVertexBufferElement(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableVertexBufferElement(cid)
|
|
}
|
|
|
|
// DisableVertexBufferElement - Disable vertex buffer element (VBO element)
|
|
func DisableVertexBufferElement() {
|
|
C.rlDisableVertexBufferElement()
|
|
}
|
|
|
|
// EnableVertexAttribute - Enable vertex attribute index
|
|
func EnableVertexAttribute(index uint32) {
|
|
cindex := C.uint(index)
|
|
C.rlEnableVertexAttribute(cindex)
|
|
}
|
|
|
|
// DisableVertexAttribute - Disable vertex attribute index
|
|
func DisableVertexAttribute(index uint32) {
|
|
cindex := C.uint(index)
|
|
C.rlDisableVertexAttribute(cindex)
|
|
}
|
|
|
|
// ActiveTextureSlot - Select and active a texture slot
|
|
func ActiveTextureSlot(slot int32) {
|
|
cslot := C.int(slot)
|
|
C.rlActiveTextureSlot(cslot)
|
|
}
|
|
|
|
// EnableTexture - Enable texture
|
|
func EnableTexture(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableTexture(cid)
|
|
}
|
|
|
|
// DisableTexture - Disable texture
|
|
func DisableTexture() {
|
|
C.rlDisableTexture()
|
|
}
|
|
|
|
// EnableTextureCubemap - Enable texture cubemap
|
|
func EnableTextureCubemap(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableTextureCubemap(cid)
|
|
}
|
|
|
|
// DisableTextureCubemap - Disable texture cubemap
|
|
func DisableTextureCubemap() {
|
|
C.rlDisableTextureCubemap()
|
|
}
|
|
|
|
// TextureParameters - Set texture parameters (filter, wrap)
|
|
func TextureParameters(id uint32, param int32, value int32) {
|
|
cid := C.uint(id)
|
|
cparam := C.int(param)
|
|
cvalue := C.int(value)
|
|
C.rlTextureParameters(cid, cparam, cvalue)
|
|
}
|
|
|
|
// CubemapParameters - Set cubemap parameters (filter, wrap)
|
|
func CubemapParameters(id uint32, param int32, value int32) {
|
|
cid := C.uint(id)
|
|
cparam := C.int(param)
|
|
cvalue := C.int(value)
|
|
C.rlCubemapParameters(cid, cparam, cvalue)
|
|
}
|
|
|
|
// EnableShader - Enable shader program
|
|
func EnableShader(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableShader(cid)
|
|
}
|
|
|
|
// DisableShader - Disable shader program
|
|
func DisableShader() {
|
|
C.rlDisableShader()
|
|
}
|
|
|
|
// EnableFramebuffer - Enable render texture (fbo)
|
|
func EnableFramebuffer(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlEnableFramebuffer(cid)
|
|
}
|
|
|
|
// DisableFramebuffer - Disable render texture (fbo), return to default framebuffer
|
|
func DisableFramebuffer() {
|
|
C.rlDisableFramebuffer()
|
|
}
|
|
|
|
// ActiveDrawBuffers - Activate multiple draw color buffers
|
|
func ActiveDrawBuffers(count int32) {
|
|
ccount := C.int(count)
|
|
C.rlActiveDrawBuffers(ccount)
|
|
}
|
|
|
|
// EnableColorBlend - Enable color blending
|
|
func EnableColorBlend() {
|
|
C.rlEnableColorBlend()
|
|
}
|
|
|
|
// DisableColorBlend - Disable color blending
|
|
func DisableColorBlend() {
|
|
C.rlDisableColorBlend()
|
|
}
|
|
|
|
// EnableDepthTest - Enable depth test
|
|
func EnableDepthTest() {
|
|
C.rlEnableDepthTest()
|
|
}
|
|
|
|
// DisableDepthTest - Disable depth test
|
|
func DisableDepthTest() {
|
|
C.rlDisableDepthTest()
|
|
}
|
|
|
|
// EnableDepthMask - Enable depth write
|
|
func EnableDepthMask() {
|
|
C.rlEnableDepthMask()
|
|
}
|
|
|
|
// DisableDepthMask - Disable depth write
|
|
func DisableDepthMask() {
|
|
C.rlDisableDepthMask()
|
|
}
|
|
|
|
// EnableBackfaceCulling - Enable backface culling
|
|
func EnableBackfaceCulling() {
|
|
C.rlEnableBackfaceCulling()
|
|
}
|
|
|
|
// DisableBackfaceCulling - Disable backface culling
|
|
func DisableBackfaceCulling() {
|
|
C.rlDisableBackfaceCulling()
|
|
}
|
|
|
|
// SetCullFace - Set face culling mode
|
|
func SetCullFace(mode int32) {
|
|
cmode := C.int(mode)
|
|
C.rlSetCullFace(cmode)
|
|
}
|
|
|
|
// EnableScissorTest - Enable scissor test
|
|
func EnableScissorTest() {
|
|
C.rlEnableScissorTest()
|
|
}
|
|
|
|
// DisableScissorTest - Disable scissor test
|
|
func DisableScissorTest() {
|
|
C.rlDisableScissorTest()
|
|
}
|
|
|
|
// Scissor - Scissor test
|
|
func Scissor(x int32, y int32, width int32, height int32) {
|
|
cx := C.int(x)
|
|
cy := C.int(y)
|
|
cwidth := C.int(width)
|
|
cheight := C.int(height)
|
|
C.rlScissor(cx, cy, cwidth, cheight)
|
|
}
|
|
|
|
// EnableWireMode - Enable wire mode
|
|
func EnableWireMode() {
|
|
C.rlEnableWireMode()
|
|
}
|
|
|
|
// EnablePointMode - Enable point mode
|
|
func EnablePointMode() {
|
|
C.rlEnablePointMode()
|
|
}
|
|
|
|
// DisableWireMode - Disable wire mode
|
|
func DisableWireMode() {
|
|
C.rlDisableWireMode()
|
|
}
|
|
|
|
// SetLineWidth - Set the line drawing width
|
|
func SetLineWidth(width float32) {
|
|
cwidth := C.float(width)
|
|
C.rlSetLineWidth(cwidth)
|
|
}
|
|
|
|
// GetLineWidth - Get the line drawing width
|
|
func GetLineWidth() float32 {
|
|
return float32(C.rlGetLineWidth())
|
|
}
|
|
|
|
// EnableSmoothLines - Enable line aliasing
|
|
func EnableSmoothLines() {
|
|
C.rlEnableSmoothLines()
|
|
}
|
|
|
|
// DisableSmoothLines - Disable line aliasing
|
|
func DisableSmoothLines() {
|
|
C.rlDisableSmoothLines()
|
|
}
|
|
|
|
// EnableStereoRender - Enable stereo rendering
|
|
func EnableStereoRender() {
|
|
C.rlEnableStereoRender()
|
|
}
|
|
|
|
// DisableStereoRender - Disable stereo rendering
|
|
func DisableStereoRender() {
|
|
C.rlDisableStereoRender()
|
|
}
|
|
|
|
// IsStereoRenderEnabled - Check if stereo render is enabled
|
|
func IsStereoRenderEnabled() bool {
|
|
return bool(C.rlIsStereoRenderEnabled())
|
|
}
|
|
|
|
// ClearColor - Clear color buffer with color
|
|
func ClearColor(r uint8, g uint8, b uint8, a uint8) {
|
|
cr := C.uchar(r)
|
|
cg := C.uchar(g)
|
|
cb := C.uchar(b)
|
|
ca := C.uchar(a)
|
|
C.rlClearColor(cr, cg, cb, ca)
|
|
}
|
|
|
|
// ClearScreenBuffers - Clear used screen buffers (color and depth)
|
|
func ClearScreenBuffers() {
|
|
C.rlClearScreenBuffers()
|
|
}
|
|
|
|
// CheckErrors - Check and log OpenGL error codes
|
|
func CheckErrors() {
|
|
C.rlCheckErrors()
|
|
}
|
|
|
|
// SetBlendMode - Set blending mode
|
|
func SetBlendMode(mode BlendMode) {
|
|
cmode := C.int(mode)
|
|
C.rlSetBlendMode(cmode)
|
|
}
|
|
|
|
// SetBlendFactors - Set blending mode factor and equation (using OpenGL factors)
|
|
func SetBlendFactors(glSrcFactor int32, glDstFactor int32, glEquation int32) {
|
|
cglSrcFactor := C.int(glSrcFactor)
|
|
cglDstFactor := C.int(glDstFactor)
|
|
cglEquation := C.int(glEquation)
|
|
C.rlSetBlendFactors(cglSrcFactor, cglDstFactor, cglEquation)
|
|
}
|
|
|
|
// SetBlendFactorsSeparate - Set blending mode factors and equations separately (using OpenGL factors)
|
|
func SetBlendFactorsSeparate(glSrcRGB int32, glDstRGB int32, glSrcAlpha int32, glDstAlpha int32, glEqRGB int32, glEqAlpha int32) {
|
|
cglSrcRGB := C.int(glSrcRGB)
|
|
cglDstRGB := C.int(glDstRGB)
|
|
cglSrcAlpha := C.int(glSrcAlpha)
|
|
cglDstAlpha := C.int(glDstAlpha)
|
|
cglEqRGB := C.int(glEqRGB)
|
|
cglEqAlpha := C.int(glEqAlpha)
|
|
C.rlSetBlendFactorsSeparate(cglSrcRGB, cglDstRGB, cglSrcAlpha, cglDstAlpha, cglEqRGB, cglEqAlpha)
|
|
}
|
|
|
|
// GlInit - Initialize rlgl (buffers, shaders, textures, states)
|
|
func GlInit(width int32, height int32) {
|
|
cwidth := C.int(width)
|
|
cheight := C.int(height)
|
|
C.rlglInit(cwidth, cheight)
|
|
}
|
|
|
|
// GlClose - De-inititialize rlgl (buffers, shaders, textures)
|
|
func GlClose() {
|
|
C.rlglClose()
|
|
}
|
|
|
|
// GetVersion - Get current OpenGL version
|
|
func GetVersion() int32 {
|
|
return int32(C.rlGetVersion())
|
|
}
|
|
|
|
// SetFramebufferWidth - Set current framebuffer width
|
|
func SetFramebufferWidth(width int32) {
|
|
cwidth := C.int(width)
|
|
C.rlSetFramebufferWidth(cwidth)
|
|
}
|
|
|
|
// GetFramebufferWidth - Get default framebuffer width
|
|
func GetFramebufferWidth() int32 {
|
|
return int32(C.rlGetFramebufferWidth())
|
|
}
|
|
|
|
// SetFramebufferHeight - Set current framebuffer height
|
|
func SetFramebufferHeight(height int32) {
|
|
cheight := C.int(height)
|
|
C.rlSetFramebufferHeight(cheight)
|
|
}
|
|
|
|
// GetFramebufferHeight - Get default framebuffer height
|
|
func GetFramebufferHeight() int32 {
|
|
return int32(C.rlGetFramebufferHeight())
|
|
}
|
|
|
|
// GetTextureIdDefault - Get default texture id
|
|
func GetTextureIdDefault() uint32 {
|
|
return uint32(C.rlGetTextureIdDefault())
|
|
}
|
|
|
|
// GetShaderIdDefault - Get default shader id
|
|
func GetShaderIdDefault() uint32 {
|
|
return uint32(C.rlGetShaderIdDefault())
|
|
}
|
|
|
|
// LoadRenderBatch - Load a render batch system
|
|
func LoadRenderBatch(numBuffers int32, bufferElements int32) RenderBatch {
|
|
ret := C.rlLoadRenderBatch(C.int(numBuffers), C.int(bufferElements))
|
|
return *(*RenderBatch)(unsafe.Pointer(&ret))
|
|
}
|
|
|
|
// UnloadRenderBatch - Unload render batch system
|
|
func UnloadRenderBatch(batch RenderBatch) {
|
|
C.rlUnloadRenderBatch(*(*C.rlRenderBatch)(unsafe.Pointer(&batch)))
|
|
}
|
|
|
|
// DrawRenderBatch - Draw render batch data (Update->Draw->Reset)
|
|
func DrawRenderBatch(batch *RenderBatch) {
|
|
C.rlDrawRenderBatch((*C.rlRenderBatch)(unsafe.Pointer(batch)))
|
|
}
|
|
|
|
// SetRenderBatchActive - Set the active render batch for rlgl (NULL for default internal)
|
|
func SetRenderBatchActive(batch *RenderBatch) {
|
|
C.rlSetRenderBatchActive((*C.rlRenderBatch)(unsafe.Pointer(batch)))
|
|
}
|
|
|
|
// DrawRenderBatchActive - Update and draw internal render batch
|
|
func DrawRenderBatchActive() {
|
|
C.rlDrawRenderBatchActive()
|
|
}
|
|
|
|
// CheckRenderBatchLimit - Check internal buffer overflow for a given number of vertex
|
|
func CheckRenderBatchLimit(vCount int32) bool {
|
|
cvCount := C.int(vCount)
|
|
return bool(C.rlCheckRenderBatchLimit(cvCount))
|
|
}
|
|
|
|
// SetTexture - Set current texture for render batch and check buffers limits
|
|
func SetTexture(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlSetTexture(cid)
|
|
}
|
|
|
|
// LoadVertexArray - Load vertex array (vao) if supported
|
|
func LoadVertexArray() uint32 {
|
|
return uint32(C.rlLoadVertexArray())
|
|
}
|
|
|
|
// UnloadVertexBuffer .
|
|
func UnloadVertexBuffer(vboId uint32) {
|
|
cvboId := C.uint(vboId)
|
|
C.rlUnloadVertexBuffer(cvboId)
|
|
}
|
|
|
|
// SetVertexAttributeDivisor .
|
|
func SetVertexAttributeDivisor(index uint32, divisor int32) {
|
|
cindex := C.uint(index)
|
|
cdivisor := C.int(divisor)
|
|
C.rlSetVertexAttributeDivisor(cindex, cdivisor)
|
|
}
|
|
|
|
// LoadTextureDepth - Load depth texture/renderbuffer (to be attached to fbo)
|
|
func LoadTextureDepth(width, height int32, useRenderBuffer bool) {
|
|
cwidth := C.int(width)
|
|
cheight := C.int(height)
|
|
cuseRenderBuffer := C.bool(useRenderBuffer)
|
|
C.rlLoadTextureDepth(cwidth, cheight, cuseRenderBuffer)
|
|
}
|
|
|
|
// LoadFramebuffer - Load an empty framebuffer
|
|
func LoadFramebuffer(width int32, height int32) uint32 {
|
|
return uint32(C.rlLoadFramebuffer())
|
|
}
|
|
|
|
// FramebufferAttach - Attach texture/renderbuffer to a framebuffer
|
|
func FramebufferAttach(fboId uint32, texId uint32, attachType int32, texType int32, mipLevel int32) {
|
|
cfboId := C.uint(fboId)
|
|
ctexId := C.uint(texId)
|
|
cattachType := C.int(attachType)
|
|
ctexType := C.int(texType)
|
|
cmipLevel := C.int(mipLevel)
|
|
C.rlFramebufferAttach(cfboId, ctexId, cattachType, ctexType, cmipLevel)
|
|
}
|
|
|
|
// FramebufferComplete - Verify framebuffer is complete
|
|
func FramebufferComplete(id uint32) bool {
|
|
cid := C.uint(id)
|
|
return bool(C.rlFramebufferComplete(cid))
|
|
}
|
|
|
|
// UnloadFramebuffer - Delete framebuffer from GPU
|
|
func UnloadFramebuffer(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlUnloadFramebuffer(cid)
|
|
}
|
|
|
|
// LoadShaderCode - Load shader from code strings
|
|
func LoadShaderCode(vsCode string, fsCode string) uint32 {
|
|
cvsCode := C.CString(vsCode)
|
|
defer C.free(unsafe.Pointer(cvsCode))
|
|
cfsCode := C.CString(fsCode)
|
|
defer C.free(unsafe.Pointer(cfsCode))
|
|
return uint32(C.rlLoadShaderCode(cvsCode, cfsCode))
|
|
}
|
|
|
|
// CompileShader - Compile custom shader and return shader id (type: VERTEX_SHADER, FRAGMENT_SHADER, COMPUTE_SHADER)
|
|
func CompileShader(shaderCode string, type_ int32) uint32 {
|
|
cshaderCode := C.CString(shaderCode)
|
|
defer C.free(unsafe.Pointer(cshaderCode))
|
|
ctype_ := C.int(type_)
|
|
return uint32(C.rlCompileShader(cshaderCode, ctype_))
|
|
}
|
|
|
|
// LoadShaderProgram - Load custom shader program
|
|
func LoadShaderProgram(vShaderId uint32, fShaderId uint32) uint32 {
|
|
cvShaderId := C.uint(vShaderId)
|
|
cfShaderId := C.uint(fShaderId)
|
|
return uint32(C.rlLoadShaderProgram(cvShaderId, cfShaderId))
|
|
}
|
|
|
|
// UnloadShaderProgram - Unload shader program
|
|
func UnloadShaderProgram(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlUnloadShaderProgram(cid)
|
|
}
|
|
|
|
// GetLocationUniform - Get shader location uniform
|
|
func GetLocationUniform(shaderId uint32, uniformName string) int32 {
|
|
cshaderId := C.uint(shaderId)
|
|
cuniformName := C.CString(uniformName)
|
|
defer C.free(unsafe.Pointer(cuniformName))
|
|
return int32(C.rlGetLocationUniform(cshaderId, cuniformName))
|
|
}
|
|
|
|
// GetLocationAttrib - Get shader location attribute
|
|
func GetLocationAttrib(shaderId uint32, attribName string) int32 {
|
|
cshaderId := C.uint(shaderId)
|
|
cattribName := C.CString(attribName)
|
|
defer C.free(unsafe.Pointer(cattribName))
|
|
return int32(C.rlGetLocationAttrib(cshaderId, cattribName))
|
|
}
|
|
|
|
// SetUniformSampler - Set shader value sampler
|
|
func SetUniformSampler(locIndex int32, textureId uint32) {
|
|
clocIndex := C.int(locIndex)
|
|
ctextureId := C.uint(textureId)
|
|
C.rlSetUniformSampler(clocIndex, ctextureId)
|
|
}
|
|
|
|
// LoadComputeShaderProgram -
|
|
func LoadComputeShaderProgram(shaderID uint32) uint32 {
|
|
cshaderID := C.uint(shaderID)
|
|
return uint32(C.rlLoadComputeShaderProgram(cshaderID))
|
|
}
|
|
|
|
// ComputeShaderDispatch - Dispatch compute shader (equivalent to *draw* for graphics pilepine)
|
|
func ComputeShaderDispatch(groupX uint32, groupY uint32, groupZ uint32) {
|
|
cgroupX := C.uint(groupX)
|
|
cgroupY := C.uint(groupY)
|
|
cgroupZ := C.uint(groupZ)
|
|
C.rlComputeShaderDispatch(cgroupX, cgroupY, cgroupZ)
|
|
}
|
|
|
|
// LoadShaderBuffer - Load shader storage buffer object (SSBO)
|
|
func LoadShaderBuffer(size uint32, data unsafe.Pointer, usageHint int32) uint32 {
|
|
csize := C.uint(size)
|
|
cdata := data
|
|
cusageHint := C.int(usageHint)
|
|
return uint32(C.rlLoadShaderBuffer(csize, cdata, cusageHint))
|
|
}
|
|
|
|
// UnloadShaderBuffer - Unload shader storage buffer object (SSBO)
|
|
func UnloadShaderBuffer(id uint32) {
|
|
cid := C.uint(id)
|
|
C.rlUnloadShaderBuffer(cid)
|
|
}
|
|
|
|
// UpdateShaderBuffer - Update SSBO buffer data
|
|
func UpdateShaderBuffer(id uint32, data unsafe.Pointer, dataSize uint32, offset uint32) {
|
|
cid := C.uint(id)
|
|
cdata := data
|
|
cdataSize := C.uint(dataSize)
|
|
coffset := C.uint(offset)
|
|
C.rlUpdateShaderBuffer(cid, cdata, cdataSize, coffset)
|
|
}
|
|
|
|
// BindShaderBuffer - Bind SSBO buffer
|
|
func BindShaderBuffer(id uint32, index uint32) {
|
|
cid := C.uint(id)
|
|
cindex := C.uint(index)
|
|
C.rlBindShaderBuffer(cid, cindex)
|
|
}
|
|
|
|
// ReadShaderBuffer - Read SSBO buffer data (GPU->CPU)
|
|
func ReadShaderBuffer(id uint32, dest unsafe.Pointer, count uint32, offset uint32) {
|
|
cid := C.uint(id)
|
|
cdest := dest
|
|
ccount := C.uint(count)
|
|
coffset := C.uint(offset)
|
|
C.rlReadShaderBuffer(cid, cdest, ccount, coffset)
|
|
}
|
|
|
|
// CopyShaderBuffer - Copy SSBO data between buffers
|
|
func CopyShaderBuffer(destId uint32, srcId uint32, destOffset uint32, srcOffset uint32, count uint32) {
|
|
cdestId := C.uint(destId)
|
|
csrcId := C.uint(srcId)
|
|
cdestOffset := C.uint(destOffset)
|
|
csrcOffset := C.uint(srcOffset)
|
|
ccount := C.uint(count)
|
|
C.rlCopyShaderBuffer(cdestId, csrcId, cdestOffset, csrcOffset, ccount)
|
|
}
|
|
|
|
// GetShaderBufferSize - Get SSBO buffer size
|
|
func GetShaderBufferSize(id uint32) uint32 {
|
|
cid := C.uint(id)
|
|
return uint32(C.rlGetShaderBufferSize(cid))
|
|
}
|
|
|
|
// BindImageTexture - Bind image texture
|
|
func BindImageTexture(id uint32, index uint32, format int32, readonly bool) {
|
|
cid := C.uint(id)
|
|
cindex := C.uint(index)
|
|
cformat := C.int(format)
|
|
creadonly := C.bool(readonly)
|
|
C.rlBindImageTexture(cid, cindex, cformat, creadonly)
|
|
}
|
|
|
|
// GetMatrixModelview - Get internal modelview matrix
|
|
func GetMatrixModelview() Matrix {
|
|
cResult := C.rlGetMatrixModelview()
|
|
var goRes Matrix
|
|
goRes.M4 = float32(cResult.m4)
|
|
goRes.M2 = float32(cResult.m2)
|
|
goRes.M14 = float32(cResult.m14)
|
|
goRes.M3 = float32(cResult.m3)
|
|
goRes.M7 = float32(cResult.m7)
|
|
goRes.M12 = float32(cResult.m12)
|
|
goRes.M6 = float32(cResult.m6)
|
|
goRes.M15 = float32(cResult.m15)
|
|
goRes.M5 = float32(cResult.m5)
|
|
goRes.M9 = float32(cResult.m9)
|
|
goRes.M13 = float32(cResult.m13)
|
|
goRes.M10 = float32(cResult.m10)
|
|
goRes.M11 = float32(cResult.m11)
|
|
goRes.M0 = float32(cResult.m0)
|
|
goRes.M8 = float32(cResult.m8)
|
|
goRes.M1 = float32(cResult.m1)
|
|
return goRes
|
|
}
|
|
|
|
// GetMatrixProjection - Get internal projection matrix
|
|
func GetMatrixProjection() Matrix {
|
|
cResult := C.rlGetMatrixProjection()
|
|
var goRes Matrix
|
|
goRes.M13 = float32(cResult.m13)
|
|
goRes.M10 = float32(cResult.m10)
|
|
goRes.M11 = float32(cResult.m11)
|
|
goRes.M15 = float32(cResult.m15)
|
|
goRes.M5 = float32(cResult.m5)
|
|
goRes.M9 = float32(cResult.m9)
|
|
goRes.M1 = float32(cResult.m1)
|
|
goRes.M0 = float32(cResult.m0)
|
|
goRes.M8 = float32(cResult.m8)
|
|
goRes.M14 = float32(cResult.m14)
|
|
goRes.M3 = float32(cResult.m3)
|
|
goRes.M7 = float32(cResult.m7)
|
|
goRes.M4 = float32(cResult.m4)
|
|
goRes.M2 = float32(cResult.m2)
|
|
goRes.M12 = float32(cResult.m12)
|
|
goRes.M6 = float32(cResult.m6)
|
|
return goRes
|
|
}
|
|
|
|
// GetMatrixTransform - Get internal accumulated transform matrix
|
|
func GetMatrixTransform() Matrix {
|
|
cResult := C.rlGetMatrixTransform()
|
|
var goRes Matrix
|
|
goRes.M0 = float32(cResult.m0)
|
|
goRes.M8 = float32(cResult.m8)
|
|
goRes.M1 = float32(cResult.m1)
|
|
goRes.M7 = float32(cResult.m7)
|
|
goRes.M4 = float32(cResult.m4)
|
|
goRes.M2 = float32(cResult.m2)
|
|
goRes.M14 = float32(cResult.m14)
|
|
goRes.M3 = float32(cResult.m3)
|
|
goRes.M12 = float32(cResult.m12)
|
|
goRes.M6 = float32(cResult.m6)
|
|
goRes.M11 = float32(cResult.m11)
|
|
goRes.M15 = float32(cResult.m15)
|
|
goRes.M5 = float32(cResult.m5)
|
|
goRes.M9 = float32(cResult.m9)
|
|
goRes.M13 = float32(cResult.m13)
|
|
goRes.M10 = float32(cResult.m10)
|
|
return goRes
|
|
}
|
|
|
|
// GetMatrixProjectionStereo - Get internal projection matrix for stereo render (selected eye)
|
|
func GetMatrixProjectionStereo(eye int32) Matrix {
|
|
ceye := C.int(eye)
|
|
cResult := C.rlGetMatrixProjectionStereo(ceye)
|
|
var goRes Matrix
|
|
goRes.M12 = float32(cResult.m12)
|
|
goRes.M6 = float32(cResult.m6)
|
|
goRes.M15 = float32(cResult.m15)
|
|
goRes.M5 = float32(cResult.m5)
|
|
goRes.M9 = float32(cResult.m9)
|
|
goRes.M13 = float32(cResult.m13)
|
|
goRes.M10 = float32(cResult.m10)
|
|
goRes.M11 = float32(cResult.m11)
|
|
goRes.M0 = float32(cResult.m0)
|
|
goRes.M8 = float32(cResult.m8)
|
|
goRes.M1 = float32(cResult.m1)
|
|
goRes.M4 = float32(cResult.m4)
|
|
goRes.M2 = float32(cResult.m2)
|
|
goRes.M14 = float32(cResult.m14)
|
|
goRes.M3 = float32(cResult.m3)
|
|
goRes.M7 = float32(cResult.m7)
|
|
return goRes
|
|
}
|
|
|
|
// GetMatrixViewOffsetStereo - Get internal view offset matrix for stereo render (selected eye)
|
|
func GetMatrixViewOffsetStereo(eye int32) Matrix {
|
|
ceye := C.int(eye)
|
|
cResult := C.rlGetMatrixViewOffsetStereo(ceye)
|
|
var goRes Matrix
|
|
goRes.M0 = float32(cResult.m0)
|
|
goRes.M8 = float32(cResult.m8)
|
|
goRes.M1 = float32(cResult.m1)
|
|
goRes.M4 = float32(cResult.m4)
|
|
goRes.M2 = float32(cResult.m2)
|
|
goRes.M14 = float32(cResult.m14)
|
|
goRes.M3 = float32(cResult.m3)
|
|
goRes.M7 = float32(cResult.m7)
|
|
goRes.M12 = float32(cResult.m12)
|
|
goRes.M6 = float32(cResult.m6)
|
|
goRes.M5 = float32(cResult.m5)
|
|
goRes.M9 = float32(cResult.m9)
|
|
goRes.M13 = float32(cResult.m13)
|
|
goRes.M10 = float32(cResult.m10)
|
|
goRes.M11 = float32(cResult.m11)
|
|
goRes.M15 = float32(cResult.m15)
|
|
return goRes
|
|
}
|
|
|
|
// SetMatrixProjectionStereo - Set eyes projection matrices for stereo rendering
|
|
func SetMatrixProjectionStereo(right Matrix, left Matrix) {
|
|
var cright C.struct_Matrix
|
|
cright.m12 = C.float(right.M12)
|
|
cright.m6 = C.float(right.M6)
|
|
cright.m5 = C.float(right.M5)
|
|
cright.m9 = C.float(right.M9)
|
|
cright.m13 = C.float(right.M13)
|
|
cright.m10 = C.float(right.M10)
|
|
cright.m11 = C.float(right.M11)
|
|
cright.m15 = C.float(right.M15)
|
|
cright.m0 = C.float(right.M0)
|
|
cright.m8 = C.float(right.M8)
|
|
cright.m1 = C.float(right.M1)
|
|
cright.m4 = C.float(right.M4)
|
|
cright.m2 = C.float(right.M2)
|
|
cright.m14 = C.float(right.M14)
|
|
cright.m3 = C.float(right.M3)
|
|
cright.m7 = C.float(right.M7)
|
|
var cleft C.struct_Matrix
|
|
cleft.m10 = C.float(left.M10)
|
|
cleft.m11 = C.float(left.M11)
|
|
cleft.m15 = C.float(left.M15)
|
|
cleft.m5 = C.float(left.M5)
|
|
cleft.m9 = C.float(left.M9)
|
|
cleft.m13 = C.float(left.M13)
|
|
cleft.m0 = C.float(left.M0)
|
|
cleft.m8 = C.float(left.M8)
|
|
cleft.m1 = C.float(left.M1)
|
|
cleft.m3 = C.float(left.M3)
|
|
cleft.m7 = C.float(left.M7)
|
|
cleft.m4 = C.float(left.M4)
|
|
cleft.m2 = C.float(left.M2)
|
|
cleft.m14 = C.float(left.M14)
|
|
cleft.m12 = C.float(left.M12)
|
|
cleft.m6 = C.float(left.M6)
|
|
C.rlSetMatrixProjectionStereo(cright, cleft)
|
|
}
|
|
|
|
// SetMatrixViewOffsetStereo - Set eyes view offsets matrices for stereo rendering
|
|
func SetMatrixViewOffsetStereo(right Matrix, left Matrix) {
|
|
var cright C.struct_Matrix
|
|
cright.m12 = C.float(right.M12)
|
|
cright.m6 = C.float(right.M6)
|
|
cright.m5 = C.float(right.M5)
|
|
cright.m9 = C.float(right.M9)
|
|
cright.m13 = C.float(right.M13)
|
|
cright.m10 = C.float(right.M10)
|
|
cright.m11 = C.float(right.M11)
|
|
cright.m15 = C.float(right.M15)
|
|
cright.m0 = C.float(right.M0)
|
|
cright.m8 = C.float(right.M8)
|
|
cright.m1 = C.float(right.M1)
|
|
cright.m4 = C.float(right.M4)
|
|
cright.m2 = C.float(right.M2)
|
|
cright.m14 = C.float(right.M14)
|
|
cright.m3 = C.float(right.M3)
|
|
cright.m7 = C.float(right.M7)
|
|
var cleft C.struct_Matrix
|
|
cleft.m12 = C.float(left.M12)
|
|
cleft.m6 = C.float(left.M6)
|
|
cleft.m5 = C.float(left.M5)
|
|
cleft.m9 = C.float(left.M9)
|
|
cleft.m13 = C.float(left.M13)
|
|
cleft.m10 = C.float(left.M10)
|
|
cleft.m11 = C.float(left.M11)
|
|
cleft.m15 = C.float(left.M15)
|
|
cleft.m0 = C.float(left.M0)
|
|
cleft.m8 = C.float(left.M8)
|
|
cleft.m1 = C.float(left.M1)
|
|
cleft.m4 = C.float(left.M4)
|
|
cleft.m2 = C.float(left.M2)
|
|
cleft.m14 = C.float(left.M14)
|
|
cleft.m3 = C.float(left.M3)
|
|
cleft.m7 = C.float(left.M7)
|
|
C.rlSetMatrixViewOffsetStereo(cright, cleft)
|
|
}
|
|
|
|
// LoadDrawCube - Load and draw a cube
|
|
func LoadDrawCube() {
|
|
C.rlLoadDrawCube()
|
|
}
|
|
|
|
// LoadDrawQuad - Load and draw a quad
|
|
func LoadDrawQuad() {
|
|
C.rlLoadDrawQuad()
|
|
}
|