diff --git a/README.md b/README.md index 600b2da..dd4242b 100644 --- a/README.md +++ b/README.md @@ -9,17 +9,19 @@ Golang bindings for [raylib](http://www.raylib.com/), a simple and easy-to-use l raylib C source code is included and compiled together with bindings. Note that the first build can take a few minutes. +It is also possible to use raylib-go without cgo (Windows only; see requirements below). + ### Requirements ##### Ubuntu ###### X11 - apt-get install libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev + apt-get install libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev -###### Wayland +###### Wayland - apt-get install libgl1-mesa-dev libwayland-dev libxkbcommon-dev + apt-get install libgl1-mesa-dev libwayland-dev libxkbcommon-dev ##### Fedora @@ -27,7 +29,7 @@ raylib C source code is included and compiled together with bindings. Note that dnf install mesa-libGL-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel -###### Wayland +###### Wayland dnf install mesa-libGL-devel wayland-devel libxkbcommon-devel @@ -37,6 +39,17 @@ On macOS you need Xcode or Command Line Tools for Xcode. ##### Windows +###### purego (without cgo) + +Download the raylib.dll from the assets on the [releases page](https://github.com/raysan5/raylib/releases). It is contained in the `raylib-*_win64_msvc*.zip`. +Put the raylib.dll into the root folder of your project or copy it into `C:\Windows\System32` for a system-wide installation. + +As of November 15, 2023, raylib 5.0 is the required version. + +It is also possible build the dll yourself. You can find more infos at [raylib's wiki](https://github.com/raysan5/raylib/wiki/Working-on-Windows). + +###### cgo + On Windows you need C compiler, like [Mingw-w64](https://mingw-w64.org) or [TDM-GCC](http://tdm-gcc.tdragon.net/). You can also build binary in [MSYS2](https://msys2.github.io/) shell. diff --git a/raylib/go.mod b/raylib/go.mod index 7807c9c..c5b70ff 100644 --- a/raylib/go.mod +++ b/raylib/go.mod @@ -1,3 +1,8 @@ module github.com/gen2brain/raylib-go/raylib go 1.21 + +require ( + github.com/ebitengine/purego v0.5.0 + golang.org/x/sys v0.14.0 +) diff --git a/raylib/go.sum b/raylib/go.sum new file mode 100644 index 0000000..949e8db --- /dev/null +++ b/raylib/go.sum @@ -0,0 +1,4 @@ +github.com/ebitengine/purego v0.5.0 h1:JrMGKfRIAM4/QVKaesIIT7m/UVjTj5GYhRSQYwfVdpo= +github.com/ebitengine/purego v0.5.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/raylib/purego_windows.go b/raylib/purego_windows.go new file mode 100644 index 0000000..470d16d --- /dev/null +++ b/raylib/purego_windows.go @@ -0,0 +1,44 @@ +//go:build !cgo && windows +// +build !cgo,windows + +package rl + +import ( + "fmt" + "unsafe" + + "github.com/ebitengine/purego" + "golang.org/x/sys/windows" +) + +const ( + libname = "raylib.dll" + requiredVersion = "5.0" +) + +// loadLibrary loads the raylib dll and panics on error +func loadLibrary() uintptr { + handle, err := windows.LoadLibrary(libname) + if err != nil { + panic(fmt.Errorf("cannot load library %s: %w", libname, err)) + } + + proc, err := windows.GetProcAddress(handle, "raylib_version") + if err != nil { + panic(err) + } + + version := windows.BytePtrToString(**(***byte)(unsafe.Pointer(&proc))) + if version != requiredVersion { + panic(fmt.Errorf("version %s of %s doesn't match the required version %s", version, libname, requiredVersion)) + } + + return uintptr(handle) +} + +func traceLogCallbackWrapper(fn TraceLogCallbackFun) uintptr { + return purego.NewCallback(func(logLevel int32, text *byte) uintptr { + fn(int(logLevel), windows.BytePtrToString(text)) + return 0 + }) +} diff --git a/raylib/raylib_purego.go b/raylib/raylib_purego.go new file mode 100644 index 0000000..3d5ef2a --- /dev/null +++ b/raylib/raylib_purego.go @@ -0,0 +1,3778 @@ +//go:build !cgo && windows +// +build !cgo,windows + +package rl + +import ( + "image" + "image/color" + "os" + "unsafe" + + "github.com/ebitengine/purego" +) + +var ( + // raylibDll is the pointer to the shared library + raylibDll uintptr +) + +var initWindow func(width int32, height int32, title string) +var closeWindow func() +var windowShouldClose func() bool +var isWindowReady func() bool +var isWindowFullscreen func() bool +var isWindowHidden func() bool +var isWindowMinimized func() bool +var isWindowMaximized func() bool +var isWindowFocused func() bool +var isWindowResized func() bool +var isWindowState func(flag uint32) bool +var setWindowState func(flags uint32) +var clearWindowState func(flags uint32) +var toggleFullscreen func() +var toggleBorderlessWindowed func() +var maximizeWindow func() +var minimizeWindow func() +var restoreWindow func() +var setWindowIcon func(image uintptr) +var setWindowIcons func(images uintptr, count int32) +var setWindowTitle func(title string) +var setWindowPosition func(x int32, y int32) +var setWindowMonitor func(monitor int32) +var setWindowMinSize func(width int32, height int32) +var setWindowMaxSize func(width int32, height int32) +var setWindowSize func(width int32, height int32) +var setWindowOpacity func(opacity float32) +var setWindowFocused func() +var getWindowHandle func() unsafe.Pointer +var getScreenWidth func() int32 +var getScreenHeight func() int32 +var getRenderWidth func() int32 +var getRenderHeight func() int32 +var getMonitorCount func() int32 +var getCurrentMonitor func() int32 +var getMonitorPosition func(monitor int32) uintptr +var getMonitorWidth func(monitor int32) int32 +var getMonitorHeight func(monitor int32) int32 +var getMonitorPhysicalWidth func(monitor int32) int32 +var getMonitorPhysicalHeight func(monitor int32) int32 +var getMonitorRefreshRate func(monitor int32) int32 +var getWindowPosition func() uintptr +var getWindowScaleDPI func() uintptr +var getMonitorName func(monitor int32) string +var setClipboardText func(text string) +var getClipboardText func() string +var enableEventWaiting func() +var disableEventWaiting func() +var showCursor func() +var hideCursor func() +var isCursorHidden func() bool +var enableCursor func() +var disableCursor func() +var isCursorOnScreen func() bool +var clearBackground func(col uintptr) +var beginDrawing func() +var endDrawing func() +var beginMode2D func(camera uintptr) +var endMode2D func() +var beginMode3D func(camera uintptr) +var endMode3D func() +var beginTextureMode func(target uintptr) +var endTextureMode func() +var beginShaderMode func(shader uintptr) +var endShaderMode func() +var beginBlendMode func(mode int32) +var endBlendMode func() +var beginScissorMode func(x int32, y int32, width int32, height int32) +var endScissorMode func() +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 isShaderReady func(shader uintptr) bool +var getShaderLocation func(shader uintptr, uniformName string) int32 +var getShaderLocationAttrib func(shader uintptr, attribName string) int32 +var setShaderValue func(shader uintptr, locIndex int32, value []float32, uniformType int32) +var setShaderValueV func(shader uintptr, locIndex int32, value []float32, uniformType int32, count int32) +var setShaderValueMatrix func(shader uintptr, locIndex int32, mat uintptr) +var setShaderValueTexture func(shader uintptr, locIndex int32, texture uintptr) +var unloadShader func(shader uintptr) +var getMouseRay func(ray uintptr, mousePosition uintptr, camera uintptr) +var getCameraMatrix func(mat uintptr, camera uintptr) +var getCameraMatrix2D func(mat uintptr, camera uintptr) +var getWorldToScreen func(position uintptr, camera uintptr) uintptr +var getScreenToWorld2D func(position uintptr, camera uintptr) uintptr +var getWorldToScreenEx func(position uintptr, camera uintptr, width int32, height int32) uintptr +var getWorldToScreen2D func(position uintptr, camera uintptr) uintptr +var setTargetFPS func(fps int32) +var getFrameTime func() float32 +var getTime func() float64 +var getFPS func() int32 +var swapScreenBuffer func() +var pollInputEvents func() +var waitTime func(seconds float64) +var setRandomSeed func(seed uint32) +var getRandomValue func(minimum int32, maximum int32) int32 +var loadRandomSequence func(count uint32, minimum int32, maximum int32) *int32 +var unloadRandomSequence func(sequence *int32) +var takeScreenshot func(fileName string) +var setConfigFlags func(flags uint32) +var openURL func(url string) +var traceLog func(logLevel int32, text string, args ...any) +var setTraceLogLevel func(logLevel int32) +var memAlloc func(size uint32) unsafe.Pointer +var memRealloc func(ptr unsafe.Pointer, size uint32) unsafe.Pointer +var memFree func(ptr unsafe.Pointer) +var setTraceLogCallback func(callback uintptr) +var isFileDropped func() bool +var loadDroppedFiles func(files uintptr) +var unloadDroppedFiles func(files uintptr) +var loadAutomationEventList func(automationEventList uintptr, fileName string) uintptr +var unloadAutomationEventList func(list uintptr) +var exportAutomationEventList func(list uintptr, fileName string) bool +var setAutomationEventList func(list uintptr) +var setAutomationEventBaseFrame func(frame int32) +var startAutomationEventRecording func() +var stopAutomationEventRecording func() +var playAutomationEvent func(event uintptr) +var isKeyPressed func(key int32) bool +var isKeyPressedRepeat func(key int32) bool +var isKeyDown func(key int32) bool +var isKeyReleased func(key int32) bool +var isKeyUp func(key int32) bool +var getKeyPressed func() int32 +var getCharPressed func() int32 +var setExitKey func(key int32) +var isGamepadAvailable func(gamepad int32) bool +var getGamepadName func(gamepad int32) string +var isGamepadButtonPressed func(gamepad int32, button int32) bool +var isGamepadButtonDown func(gamepad int32, button int32) bool +var isGamepadButtonReleased func(gamepad int32, button int32) bool +var isGamepadButtonUp func(gamepad int32, button int32) bool +var getGamepadButtonPressed func() int32 +var getGamepadAxisCount func(gamepad int32) int32 +var getGamepadAxisMovement func(gamepad int32, axis int32) float32 +var setGamepadMappings func(mappings string) int32 +var isMouseButtonPressed func(button int32) bool +var isMouseButtonDown func(button int32) bool +var isMouseButtonReleased func(button int32) bool +var isMouseButtonUp func(button int32) bool +var getMouseX func() int32 +var getMouseY func() int32 +var getMousePosition func() uintptr +var getMouseDelta func() uintptr +var setMousePosition func(x int32, y int32) +var setMouseOffset func(offsetX int32, offsetY int32) +var setMouseScale func(scaleX float32, scaleY float32) +var getMouseWheelMove func() float32 +var getMouseWheelMoveV func() uintptr +var setMouseCursor func(cursor int32) +var getTouchX func() int32 +var getTouchY func() int32 +var getTouchPosition func(index int32) uintptr +var getTouchPointId func(index int32) int32 +var getTouchPointCount func() int32 +var setGesturesEnabled func(flags uint32) +var isGestureDetected func(gesture uint32) bool +var getGestureDetected func() int32 +var getGestureHoldDuration func() float32 +var getGestureDragVector func() uintptr +var getGestureDragAngle func() float32 +var getGesturePinchVector func() uintptr +var getGesturePinchAngle func() float32 +var setShapesTexture func(texture uintptr, source uintptr) +var drawPixel func(posX int32, posY int32, col uintptr) +var drawPixelV func(position uintptr, col uintptr) +var drawLine func(startPosX int32, startPosY int32, endPosX int32, endPosY int32, col uintptr) +var drawLineV func(startPos uintptr, endPos uintptr, col uintptr) +var drawLineEx func(startPos uintptr, endPos uintptr, thick float32, col uintptr) +var drawLineStrip func(points *Vector2, pointCount int32, col uintptr) +var drawLineBezier func(startPos uintptr, endPos uintptr, thick float32, col uintptr) +var drawCircle func(centerX int32, centerY int32, radius float32, col uintptr) +var drawCircleSector func(center uintptr, radius float32, startAngle float32, endAngle float32, segments int32, col uintptr) +var drawCircleSectorLines func(center uintptr, radius float32, startAngle float32, endAngle float32, segments int32, col uintptr) +var drawCircleGradient func(centerX int32, centerY int32, radius float32, color1 uintptr, color2 uintptr) +var drawCircleV func(center uintptr, radius float32, col uintptr) +var drawCircleLines func(centerX int32, centerY int32, radius float32, col uintptr) +var drawCircleLinesV func(center uintptr, radius float32, col uintptr) +var drawEllipse func(centerX int32, centerY int32, radiusH float32, radiusV float32, col uintptr) +var drawEllipseLines func(centerX int32, centerY int32, radiusH float32, radiusV float32, col uintptr) +var drawRing func(center uintptr, innerRadius float32, outerRadius float32, startAngle float32, endAngle float32, segments int32, col uintptr) +var drawRingLines func(center uintptr, innerRadius float32, outerRadius float32, startAngle float32, endAngle float32, segments int32, col uintptr) +var drawRectangle func(posX int32, posY int32, width int32, height int32, col uintptr) +var drawRectangleV func(position uintptr, size uintptr, col uintptr) +var drawRectangleRec func(rec uintptr, col uintptr) +var drawRectanglePro func(rec uintptr, origin uintptr, rotation float32, col uintptr) +var drawRectangleGradientV func(posX int32, posY int32, width int32, height int32, color1 uintptr, color2 uintptr) +var drawRectangleGradientH func(posX int32, posY int32, width int32, height int32, color1 uintptr, color2 uintptr) +var drawRectangleGradientEx func(rec uintptr, col1 uintptr, col2 uintptr, col3 uintptr, col4 uintptr) +var drawRectangleLines func(posX int32, posY int32, width int32, height int32, col uintptr) +var drawRectangleLinesEx func(rec uintptr, lineThick float32, col uintptr) +var drawRectangleRounded func(rec uintptr, roundness float32, segments int32, col uintptr) +var drawRectangleRoundedLines func(rec uintptr, roundness float32, segments int32, lineThick float32, col uintptr) +var drawTriangle func(v1 uintptr, v2 uintptr, v3 uintptr, col uintptr) +var drawTriangleLines func(v1 uintptr, v2 uintptr, v3 uintptr, col uintptr) +var drawTriangleFan func(points *Vector2, pointCount int32, col uintptr) +var drawTriangleStrip func(points *Vector2, pointCount int32, col uintptr) +var drawPoly func(center uintptr, sides int32, radius float32, rotation float32, col uintptr) +var drawPolyLines func(center uintptr, sides int32, radius float32, rotation float32, col uintptr) +var drawPolyLinesEx func(center uintptr, sides int32, radius float32, rotation float32, lineThick float32, col uintptr) +var drawSplineLinear func(points *Vector2, pointCount int32, thick float32, col uintptr) +var drawSplineBasis func(points *Vector2, pointCount int32, thick float32, col uintptr) +var drawSplineCatmullRom func(points *Vector2, pointCount int32, thick float32, col uintptr) +var drawSplineBezierQuadratic func(points *Vector2, pointCount int32, thick float32, col uintptr) +var drawSplineBezierCubic func(points *Vector2, pointCount int32, thick float32, col uintptr) +var drawSplineSegmentLinear func(p1 uintptr, p2 uintptr, thick float32, col uintptr) +var drawSplineSegmentBasis func(p1 uintptr, p2 uintptr, p3 uintptr, p4 uintptr, thick float32, col uintptr) +var drawSplineSegmentCatmullRom func(p1 uintptr, p2 uintptr, p3 uintptr, p4 uintptr, thick float32, col uintptr) +var drawSplineSegmentBezierQuadratic func(p1 uintptr, c2 uintptr, p3 uintptr, thick float32, col uintptr) +var drawSplineSegmentBezierCubic func(p1 uintptr, c2 uintptr, c3 uintptr, p4 uintptr, thick float32, col uintptr) +var getSplinePointLinear func(startPos uintptr, endPos uintptr, t float32) Vector2 +var getSplinePointBasis func(p1 uintptr, p2 uintptr, p3 uintptr, p4 uintptr, t float32) Vector2 +var getSplinePointCatmullRom func(p1 uintptr, p2 uintptr, p3 uintptr, p4 uintptr, t float32) Vector2 +var getSplinePointBezierQuad func(p1 uintptr, c2 uintptr, p3 uintptr, t float32) Vector2 +var getSplinePointBezierCubic func(p1 uintptr, c2 uintptr, c3 uintptr, p4 uintptr, t float32) Vector2 +var checkCollisionRecs func(rec1 uintptr, rec2 uintptr) bool +var checkCollisionCircles func(center1 uintptr, radius1 float32, center2 uintptr, radius2 float32) bool +var checkCollisionCircleRec func(center uintptr, radius float32, rec uintptr) bool +var checkCollisionPointRec func(point uintptr, rec uintptr) bool +var checkCollisionPointCircle func(point uintptr, center uintptr, radius float32) bool +var checkCollisionPointTriangle func(point uintptr, p1 uintptr, p2 uintptr, p3 uintptr) bool +var checkCollisionPointPoly func(point uintptr, points *Vector2, pointCount int32) bool +var checkCollisionLines func(startPos1 uintptr, endPos1 uintptr, startPos2 uintptr, endPos2 uintptr, collisionPoint *Vector2) bool +var checkCollisionPointLine func(point uintptr, p1 uintptr, p2 uintptr, threshold int32) bool +var getCollisionRec func(rec uintptr, rec1 uintptr, rec2 uintptr) +var loadImage func(img uintptr, fileName string) +var loadImageRaw func(img uintptr, fileName string, width int32, height int32, format int32, headerSize int32) +var loadImageSvg func(img uintptr, fileNameOrString string, width int32, height int32) +var loadImageAnim func(img uintptr, fileName string, frames []int32) +var loadImageFromMemory func(img uintptr, fileType string, fileData []byte, dataSize int32) +var loadImageFromTexture func(img uintptr, texture uintptr) +var loadImageFromScreen func(img uintptr) +var isImageReady func(image uintptr) bool +var unloadImage func(image uintptr) +var exportImage func(image uintptr, fileName string) bool +var exportImageToMemory func(image uintptr, fileType string, fileSize *int32) *byte +var genImageColor func(image uintptr, width int32, height int32, col uintptr) +var genImageGradientLinear func(image uintptr, width int32, height int32, direction int32, start uintptr, end uintptr) +var genImageGradientRadial func(image uintptr, width int32, height int32, density float32, inner uintptr, outer uintptr) +var genImageGradientSquare func(image uintptr, width int32, height int32, density float32, inner uintptr, outer uintptr) +var genImageChecked func(image uintptr, width int32, height int32, checksX int32, checksY int32, col1 uintptr, col2 uintptr) +var genImageWhiteNoise func(image uintptr, width int32, height int32, factor float32) +var genImagePerlinNoise func(image uintptr, width int32, height int32, offsetX int32, offsetY int32, scale float32) +var genImageCellular func(image uintptr, width int32, height int32, tileSize int32) +var genImageText func(image uintptr, width int32, height int32, text string) +var imageCopy func(retImage uintptr, image uintptr) +var imageFromImage func(retImage uintptr, image uintptr, rec uintptr) +var imageText func(retImage uintptr, text string, fontSize int32, col uintptr) +var imageTextEx func(retImage uintptr, font uintptr, text string, fontSize float32, spacing float32, tint uintptr) +var imageFormat func(image *Image, newFormat int32) +var imageToPOT func(image *Image, fill uintptr) +var imageCrop func(image *Image, crop uintptr) +var imageAlphaCrop func(image *Image, threshold float32) +var imageAlphaClear func(image *Image, col uintptr, threshold float32) +var imageAlphaMask func(image *Image, alphaMask uintptr) +var imageAlphaPremultiply func(image *Image) +var imageBlurGaussian func(image *Image, blurSize int32) +var imageResize func(image *Image, newWidth int32, newHeight int32) +var imageResizeNN func(image *Image, newWidth int32, newHeight int32) +var imageResizeCanvas func(image *Image, newWidth int32, newHeight int32, offsetX int32, offsetY int32, fill uintptr) +var imageMipmaps func(image *Image) +var imageDither func(image *Image, rBpp int32, gBpp int32, bBpp int32, aBpp int32) +var imageFlipVertical func(image *Image) +var imageFlipHorizontal func(image *Image) +var imageRotate func(image *Image, degrees int32) +var imageRotateCW func(image *Image) +var imageRotateCCW func(image *Image) +var imageColorTint func(image *Image, col uintptr) +var imageColorInvert func(image *Image) +var imageColorGrayscale func(image *Image) +var imageColorContrast func(image *Image, contrast float32) +var imageColorBrightness func(image *Image, brightness int32) +var imageColorReplace func(image *Image, col uintptr, replace uintptr) +var loadImageColors func(image uintptr) *color.RGBA +var loadImagePalette func(image uintptr, maxPaletteSize int32, colorCount *int32) *color.RGBA +var unloadImageColors func(colors *color.RGBA) +var unloadImagePalette func(colors *color.RGBA) +var getImageAlphaBorder func(rec uintptr, image uintptr, threshold float32) +var getImageColor func(image uintptr, x int32, y int32) uintptr +var imageClearBackground func(dst *Image, col uintptr) +var imageDrawPixel func(dst *Image, posX int32, posY int32, col uintptr) +var imageDrawPixelV func(dst *Image, position uintptr, col uintptr) +var imageDrawLine func(dst *Image, startPosX int32, startPosY int32, endPosX int32, endPosY int32, col uintptr) +var imageDrawLineV func(dst *Image, start uintptr, end uintptr, col uintptr) +var imageDrawCircle func(dst *Image, centerX int32, centerY int32, radius int32, col uintptr) +var imageDrawCircleV func(dst *Image, center uintptr, radius int32, col uintptr) +var imageDrawCircleLines func(dst *Image, centerX int32, centerY int32, radius int32, col uintptr) +var imageDrawCircleLinesV func(dst *Image, center uintptr, radius int32, col uintptr) +var imageDrawRectangle func(dst *Image, posX int32, posY int32, width int32, height int32, col uintptr) +var imageDrawRectangleV func(dst *Image, position uintptr, size uintptr, col uintptr) +var imageDrawRectangleRec func(dst *Image, rec uintptr, col uintptr) +var imageDrawRectangleLines func(dst *Image, rec uintptr, thick int32, col uintptr) +var imageDraw func(dst *Image, src uintptr, srcRec uintptr, dstRec uintptr, tint uintptr) +var imageDrawText func(dst *Image, text string, posX int32, posY int32, fontSize int32, col uintptr) +var imageDrawTextEx func(dst *Image, font uintptr, text string, position uintptr, fontSize float32, spacing float32, tint uintptr) +var loadTexture func(texture uintptr, fileName string) +var loadTextureFromImage func(texture uintptr, image uintptr) +var loadTextureCubemap func(texture uintptr, image uintptr, layout int32) +var loadRenderTexture func(texture uintptr, width int32, height int32) +var isTextureReady func(texture uintptr) bool +var unloadTexture func(texture uintptr) +var isRenderTextureReady func(target uintptr) bool +var unloadRenderTexture func(target uintptr) +var updateTexture func(texture uintptr, pixels *color.RGBA) +var updateTextureRec func(texture uintptr, rec uintptr, pixels *color.RGBA) +var genTextureMipmaps func(texture *Texture2D) +var setTextureFilter func(texture uintptr, filter int32) +var setTextureWrap func(texture uintptr, wrap int32) +var drawTexture func(texture uintptr, posX int32, posY int32, tint uintptr) +var drawTextureV func(texture uintptr, position uintptr, tint uintptr) +var drawTextureEx func(texture uintptr, position uintptr, rotation float32, scale float32, tint uintptr) +var drawTextureRec func(texture uintptr, source uintptr, position uintptr, tint uintptr) +var drawTexturePro func(texture uintptr, source uintptr, dest uintptr, origin uintptr, rotation float32, tint uintptr) +var drawTextureNPatch func(texture uintptr, nPatchInfo uintptr, dest uintptr, origin uintptr, rotation float32, tint uintptr) +var fade func(col uintptr, alpha float32) uintptr +var colorToInt func(col uintptr) int32 +var colorNormalize func(vector4 uintptr, col uintptr) +var colorFromNormalized func(normalized uintptr) uintptr +var colorToHSV func(vector3 uintptr, col uintptr) +var colorFromHSV func(hue float32, saturation float32, value float32) uintptr +var colorTint func(col uintptr, tint uintptr) uintptr +var colorBrightness func(col uintptr, factor float32) uintptr +var colorContrast func(col uintptr, contrast float32) uintptr +var colorAlpha func(col uintptr, alpha float32) uintptr +var colorAlphaBlend func(dst uintptr, src uintptr, tint uintptr) uintptr +var getColor func(hexValue uint32) uintptr +var getPixelColor func(srcPtr unsafe.Pointer, format int32) uintptr +var setPixelColor func(dstPtr unsafe.Pointer, col uintptr, format int32) +var getPixelDataSize func(width int32, height int32, format int32) int32 +var getFontDefault func(font uintptr) +var loadFont func(font uintptr, fileName string) +var loadFontEx func(font uintptr, fileName string, fontSize int32, codepoints []int32, codepointCount int32) +var loadFontFromImage func(font uintptr, image uintptr, key uintptr, firstChar int32) +var loadFontFromMemory func(font uintptr, fileType string, fileData []byte, dataSize int32, fontSize int32, codepoints []int32, codepointCount int32) +var isFontReady func(font uintptr) bool +var loadFontData func(fileData []byte, dataSize int32, fontSize int32, codepoints []int32, codepointCount int32, _type int32) *GlyphInfo +var genImageFontAtlas func(image uintptr, glyphs *GlyphInfo, glyphRecs []*Rectangle, glyphCount int32, fontSize int32, padding int32, packMethod int32) +var unloadFontData func(glyphs *GlyphInfo, glyphCount int32) +var unloadFont func(font uintptr) +var drawFPS func(posX int32, posY int32) +var drawText func(text string, posX int32, posY int32, fontSize int32, col uintptr) +var drawTextEx func(font uintptr, text string, position uintptr, fontSize float32, spacing float32, tint uintptr) +var drawTextPro func(font uintptr, text string, position uintptr, origin uintptr, rotation float32, fontSize float32, spacing float32, tint uintptr) +var drawTextCodepoint func(font uintptr, codepoint int32, position uintptr, fontSize float32, tint uintptr) +var drawTextCodepoints func(font uintptr, codepoints []int32, codepointCount int32, position uintptr, fontSize float32, spacing float32, tint uintptr) +var setTextLineSpacing func(spacing int32) +var measureText func(text string, fontSize int32) int32 +var measureTextEx func(font uintptr, text string, fontSize float32, spacing float32) uintptr +var getGlyphIndex func(font uintptr, codepoint int32) int32 +var getGlyphInfo func(glyphInfo uintptr, font uintptr, codepoint int32) +var getGlyphAtlasRec func(rec uintptr, font uintptr, codepoint int32) +var drawLine3D func(startPos uintptr, endPos uintptr, col uintptr) +var drawPoint3D func(position uintptr, col uintptr) +var drawCircle3D func(center uintptr, radius float32, rotationAxis uintptr, rotationAngle float32, col uintptr) +var drawTriangle3D func(v1 uintptr, v2 uintptr, v3 uintptr, col uintptr) +var drawTriangleStrip3D func(points *Vector3, pointCount int32, col uintptr) +var drawCube func(position uintptr, width float32, height float32, length float32, col uintptr) +var drawCubeV func(position uintptr, size uintptr, col uintptr) +var drawCubeWires func(position uintptr, width float32, height float32, length float32, col uintptr) +var drawCubeWiresV func(position uintptr, size uintptr, col uintptr) +var drawSphere func(centerPos uintptr, radius float32, col uintptr) +var drawSphereEx func(centerPos uintptr, radius float32, rings int32, slices int32, col uintptr) +var drawSphereWires func(centerPos uintptr, radius float32, rings int32, slices int32, col uintptr) +var drawCylinder func(position uintptr, radiusTop float32, radiusBottom float32, height float32, slices int32, col uintptr) +var drawCylinderEx func(startPos uintptr, endPos uintptr, startRadius float32, endRadius float32, sides int32, col uintptr) +var drawCylinderWires func(position uintptr, radiusTop float32, radiusBottom float32, height float32, slices int32, col uintptr) +var drawCylinderWiresEx func(startPos uintptr, endPos uintptr, startRadius float32, endRadius float32, sides int32, col uintptr) +var drawCapsule func(startPos uintptr, endPos uintptr, radius float32, slices int32, rings int32, col uintptr) +var drawCapsuleWires func(startPos uintptr, endPos uintptr, radius float32, slices int32, rings int32, col uintptr) +var drawPlane func(centerPos uintptr, size uintptr, col uintptr) +var drawRay func(ray uintptr, col uintptr) +var drawGrid func(slices int32, spacing float32) +var loadModel func(model uintptr, fileName string) +var loadModelFromMesh func(model uintptr, mesh uintptr) +var isModelReady func(model uintptr) bool +var unloadModel func(model uintptr) +var getModelBoundingBox func(boundingBox uintptr, model uintptr) +var drawModel func(model uintptr, position uintptr, scale float32, tint uintptr) +var drawModelEx func(model uintptr, position uintptr, rotationAxis uintptr, rotationAngle float32, scale uintptr, tint uintptr) +var drawModelWires func(model uintptr, position uintptr, scale float32, tint uintptr) +var drawModelWiresEx func(model uintptr, position uintptr, rotationAxis uintptr, rotationAngle float32, scale uintptr, tint uintptr) +var drawBoundingBox func(box uintptr, col uintptr) +var drawBillboard func(camera uintptr, texture uintptr, position uintptr, size float32, tint uintptr) +var drawBillboardRec func(camera uintptr, texture uintptr, source uintptr, position uintptr, size uintptr, tint uintptr) +var drawBillboardPro func(camera uintptr, texture uintptr, source uintptr, position uintptr, up uintptr, size uintptr, origin uintptr, rotation float32, tint uintptr) +var uploadMesh func(mesh *Mesh, dynamic bool) +var updateMeshBuffer func(mesh uintptr, index int32, data []byte, dataSize int32, offset int32) +var unloadMesh func(mesh uintptr) +var drawMesh func(mesh uintptr, material uintptr, transform uintptr) +var drawMeshInstanced func(mesh uintptr, material uintptr, transforms []Matrix, instances int32) +var exportMesh func(mesh uintptr, fileName string) bool +var getMeshBoundingBox func(boundingBox uintptr, mesh uintptr) +var genMeshTangents func(mesh *Mesh) +var genMeshPoly func(mesh uintptr, sides int32, radius float32) +var genMeshPlane func(mesh uintptr, width float32, length float32, resX int32, resZ int32) +var genMeshCube func(mesh uintptr, width float32, height float32, length float32) +var genMeshSphere func(mesh uintptr, radius float32, rings int32, slices int32) +var genMeshHemiSphere func(mesh uintptr, radius float32, rings int32, slices int32) +var genMeshCylinder func(mesh uintptr, radius float32, height float32, slices int32) +var genMeshCone func(mesh uintptr, radius float32, height float32, slices int32) +var genMeshTorus func(mesh uintptr, radius float32, size float32, radSeg int32, sides int32) +var genMeshKnot func(mesh uintptr, radius float32, size float32, radSeg int32, sides int32) +var genMeshHeightmap func(mesh uintptr, heightmap uintptr, size uintptr) +var genMeshCubicmap func(mesh uintptr, cubicmap uintptr, cubeSize uintptr) +var loadMaterials func(fileName string, materialCount *int32) *Material +var loadMaterialDefault func(material uintptr) +var isMaterialReady func(material uintptr) bool +var unloadMaterial func(material uintptr) +var setMaterialTexture func(material *Material, mapType int32, texture uintptr) +var setModelMeshMaterial func(model *Model, meshId int32, materialId int32) +var loadModelAnimations func(fileName string, animCount *int32) *ModelAnimation +var updateModelAnimation func(model uintptr, anim uintptr, frame int32) +var unloadModelAnimation func(anim uintptr) +var unloadModelAnimations func(animations *ModelAnimation, animCount int32) +var isModelAnimationValid func(model uintptr, anim uintptr) bool +var checkCollisionSpheres func(center1 uintptr, radius1 float32, center2 uintptr, radius2 float32) bool +var checkCollisionBoxes func(box1 uintptr, box2 uintptr) bool +var checkCollisionBoxSphere func(box uintptr, center uintptr, radius float32) bool +var getRayCollisionSphere func(rayCollision uintptr, ray uintptr, center uintptr, radius float32) +var getRayCollisionBox func(rayCollision uintptr, ray uintptr, box uintptr) +var getRayCollisionMesh func(rayCollision uintptr, ray uintptr, mesh uintptr, transform uintptr) +var getRayCollisionTriangle func(rayCollision uintptr, ray uintptr, p1 uintptr, p2 uintptr, p3 uintptr) +var getRayCollisionQuad func(rayCollision uintptr, ray uintptr, p1 uintptr, p2 uintptr, p3 uintptr, p4 uintptr) +var initAudioDevice func() +var closeAudioDevice func() +var isAudioDeviceReady func() bool +var setMasterVolume func(volume float32) +var getMasterVolume func() float32 +var loadWave func(wave uintptr, fileName string) +var loadWaveFromMemory func(wave uintptr, fileType string, fileData []byte, dataSize int32) +var isWaveReady func(wave uintptr) bool +var loadSound func(sound uintptr, fileName string) +var loadSoundFromWave func(sound uintptr, wave uintptr) +var loadSoundAlias func(sound uintptr, source uintptr) +var isSoundReady func(sound uintptr) bool +var updateSound func(sound uintptr, data []byte, sampleCount int32) +var unloadWave func(wave uintptr) +var unloadSound func(sound uintptr) +var unloadSoundAlias func(alias uintptr) +var exportWave func(wave uintptr, fileName string) bool +var playSound func(sound uintptr) +var stopSound func(sound uintptr) +var pauseSound func(sound uintptr) +var resumeSound func(sound uintptr) +var isSoundPlaying func(sound uintptr) bool +var setSoundVolume func(sound uintptr, volume float32) +var setSoundPitch func(sound uintptr, pitch float32) +var setSoundPan func(sound uintptr, pan float32) +var waveCopy func(copy uintptr, wave uintptr) +var waveCrop func(wave *Wave, initSample int32, finalSample int32) +var waveFormat func(wave *Wave, sampleRate int32, sampleSize int32, channels int32) +var loadWaveSamples func(wave uintptr) *float32 +var unloadWaveSamples func(samples []float32) +var loadMusicStream func(music uintptr, fileName string) +var loadMusicStreamFromMemory func(sound uintptr, fileType string, data []byte, dataSize int32) +var isMusicReady func(music uintptr) bool +var unloadMusicStream func(music uintptr) +var playMusicStream func(music uintptr) +var isMusicStreamPlaying func(music uintptr) bool +var updateMusicStream func(music uintptr) +var stopMusicStream func(music uintptr) +var pauseMusicStream func(music uintptr) +var resumeMusicStream func(music uintptr) +var seekMusicStream func(music uintptr, position float32) +var setMusicVolume func(music uintptr, volume float32) +var setMusicPitch func(music uintptr, pitch float32) +var setMusicPan func(music uintptr, pan float32) +var getMusicTimeLength func(music uintptr) float32 +var getMusicTimePlayed func(music uintptr) float32 +var loadAudioStream func(audioStream uintptr, sampleRate uint32, sampleSize uint32, channels uint32) +var isAudioStreamReady func(stream uintptr) bool +var unloadAudioStream func(stream uintptr) +var updateAudioStream func(stream uintptr, data []float32, frameCount int32) +var isAudioStreamProcessed func(stream uintptr) bool +var playAudioStream func(stream uintptr) +var pauseAudioStream func(stream uintptr) +var resumeAudioStream func(stream uintptr) +var isAudioStreamPlaying func(stream uintptr) bool +var stopAudioStream func(stream uintptr) +var setAudioStreamVolume func(stream uintptr, volume float32) +var setAudioStreamPitch func(stream uintptr, pitch float32) +var setAudioStreamPan func(stream uintptr, pan float32) +var setAudioStreamBufferSizeDefault func(size int32) +var setAudioStreamCallback func(stream uintptr, callback uintptr) +var attachAudioStreamProcessor func(stream uintptr, processor uintptr) +var detachAudioStreamProcessor func(stream uintptr, processor uintptr) +var attachAudioMixedProcessor func(processor uintptr) +var detachAudioMixedProcessor func(processor uintptr) + +func init() { + raylibDll = loadLibrary() + + purego.RegisterLibFunc(&initWindow, raylibDll, "InitWindow") + purego.RegisterLibFunc(&closeWindow, raylibDll, "CloseWindow") + purego.RegisterLibFunc(&windowShouldClose, raylibDll, "WindowShouldClose") + purego.RegisterLibFunc(&isWindowReady, raylibDll, "IsWindowReady") + purego.RegisterLibFunc(&isWindowFullscreen, raylibDll, "IsWindowFullscreen") + purego.RegisterLibFunc(&isWindowHidden, raylibDll, "IsWindowHidden") + purego.RegisterLibFunc(&isWindowMinimized, raylibDll, "IsWindowMinimized") + purego.RegisterLibFunc(&isWindowMaximized, raylibDll, "IsWindowMaximized") + purego.RegisterLibFunc(&isWindowFocused, raylibDll, "IsWindowFocused") + purego.RegisterLibFunc(&isWindowResized, raylibDll, "IsWindowResized") + purego.RegisterLibFunc(&isWindowState, raylibDll, "IsWindowState") + purego.RegisterLibFunc(&setWindowState, raylibDll, "SetWindowState") + purego.RegisterLibFunc(&clearWindowState, raylibDll, "ClearWindowState") + purego.RegisterLibFunc(&toggleFullscreen, raylibDll, "ToggleFullscreen") + purego.RegisterLibFunc(&toggleBorderlessWindowed, raylibDll, "ToggleBorderlessWindowed") + purego.RegisterLibFunc(&maximizeWindow, raylibDll, "MaximizeWindow") + purego.RegisterLibFunc(&minimizeWindow, raylibDll, "MinimizeWindow") + purego.RegisterLibFunc(&restoreWindow, raylibDll, "RestoreWindow") + purego.RegisterLibFunc(&setWindowIcon, raylibDll, "SetWindowIcon") + purego.RegisterLibFunc(&setWindowIcons, raylibDll, "SetWindowIcons") + purego.RegisterLibFunc(&setWindowTitle, raylibDll, "SetWindowTitle") + purego.RegisterLibFunc(&setWindowPosition, raylibDll, "SetWindowPosition") + purego.RegisterLibFunc(&setWindowMonitor, raylibDll, "SetWindowMonitor") + purego.RegisterLibFunc(&setWindowMinSize, raylibDll, "SetWindowMinSize") + purego.RegisterLibFunc(&setWindowMaxSize, raylibDll, "SetWindowMaxSize") + purego.RegisterLibFunc(&setWindowSize, raylibDll, "SetWindowSize") + purego.RegisterLibFunc(&setWindowOpacity, raylibDll, "SetWindowOpacity") + purego.RegisterLibFunc(&setWindowFocused, raylibDll, "SetWindowFocused") + purego.RegisterLibFunc(&getWindowHandle, raylibDll, "GetWindowHandle") + purego.RegisterLibFunc(&getScreenWidth, raylibDll, "GetScreenWidth") + purego.RegisterLibFunc(&getScreenHeight, raylibDll, "GetScreenHeight") + purego.RegisterLibFunc(&getRenderWidth, raylibDll, "GetRenderWidth") + purego.RegisterLibFunc(&getRenderHeight, raylibDll, "GetRenderHeight") + purego.RegisterLibFunc(&getMonitorCount, raylibDll, "GetMonitorCount") + purego.RegisterLibFunc(&getCurrentMonitor, raylibDll, "GetCurrentMonitor") + purego.RegisterLibFunc(&getMonitorPosition, raylibDll, "GetMonitorPosition") + purego.RegisterLibFunc(&getMonitorWidth, raylibDll, "GetMonitorWidth") + purego.RegisterLibFunc(&getMonitorHeight, raylibDll, "GetMonitorHeight") + purego.RegisterLibFunc(&getMonitorPhysicalWidth, raylibDll, "GetMonitorPhysicalWidth") + purego.RegisterLibFunc(&getMonitorPhysicalHeight, raylibDll, "GetMonitorPhysicalHeight") + purego.RegisterLibFunc(&getMonitorRefreshRate, raylibDll, "GetMonitorRefreshRate") + purego.RegisterLibFunc(&getWindowPosition, raylibDll, "GetWindowPosition") + purego.RegisterLibFunc(&getWindowScaleDPI, raylibDll, "GetWindowScaleDPI") + purego.RegisterLibFunc(&getMonitorName, raylibDll, "GetMonitorName") + purego.RegisterLibFunc(&setClipboardText, raylibDll, "SetClipboardText") + purego.RegisterLibFunc(&getClipboardText, raylibDll, "GetClipboardText") + purego.RegisterLibFunc(&enableEventWaiting, raylibDll, "EnableEventWaiting") + purego.RegisterLibFunc(&disableEventWaiting, raylibDll, "DisableEventWaiting") + purego.RegisterLibFunc(&showCursor, raylibDll, "ShowCursor") + purego.RegisterLibFunc(&hideCursor, raylibDll, "HideCursor") + purego.RegisterLibFunc(&isCursorHidden, raylibDll, "IsCursorHidden") + purego.RegisterLibFunc(&enableCursor, raylibDll, "EnableCursor") + purego.RegisterLibFunc(&disableCursor, raylibDll, "DisableCursor") + purego.RegisterLibFunc(&isCursorOnScreen, raylibDll, "IsCursorOnScreen") + purego.RegisterLibFunc(&clearBackground, raylibDll, "ClearBackground") + purego.RegisterLibFunc(&beginDrawing, raylibDll, "BeginDrawing") + purego.RegisterLibFunc(&endDrawing, raylibDll, "EndDrawing") + purego.RegisterLibFunc(&beginMode2D, raylibDll, "BeginMode2D") + purego.RegisterLibFunc(&endMode2D, raylibDll, "EndMode2D") + purego.RegisterLibFunc(&beginMode3D, raylibDll, "BeginMode3D") + purego.RegisterLibFunc(&endMode3D, raylibDll, "EndMode3D") + purego.RegisterLibFunc(&beginTextureMode, raylibDll, "BeginTextureMode") + purego.RegisterLibFunc(&endTextureMode, raylibDll, "EndTextureMode") + purego.RegisterLibFunc(&beginShaderMode, raylibDll, "BeginShaderMode") + purego.RegisterLibFunc(&endShaderMode, raylibDll, "EndShaderMode") + purego.RegisterLibFunc(&beginBlendMode, raylibDll, "BeginBlendMode") + purego.RegisterLibFunc(&endBlendMode, raylibDll, "EndBlendMode") + purego.RegisterLibFunc(&beginScissorMode, raylibDll, "BeginScissorMode") + purego.RegisterLibFunc(&endScissorMode, raylibDll, "EndScissorMode") + purego.RegisterLibFunc(&beginVrStereoMode, raylibDll, "BeginVrStereoMode") + purego.RegisterLibFunc(&endVrStereoMode, raylibDll, "EndVrStereoMode") + purego.RegisterLibFunc(&loadVrStereoConfig, raylibDll, "LoadVrStereoConfig") + purego.RegisterLibFunc(&unloadVrStereoConfig, raylibDll, "UnloadVrStereoConfig") + purego.RegisterLibFunc(&loadShader, raylibDll, "LoadShader") + purego.RegisterLibFunc(&loadShaderFromMemory, raylibDll, "LoadShaderFromMemory") + purego.RegisterLibFunc(&isShaderReady, raylibDll, "IsShaderReady") + purego.RegisterLibFunc(&getShaderLocation, raylibDll, "GetShaderLocation") + purego.RegisterLibFunc(&getShaderLocationAttrib, raylibDll, "GetShaderLocationAttrib") + purego.RegisterLibFunc(&setShaderValue, raylibDll, "SetShaderValue") + purego.RegisterLibFunc(&setShaderValueV, raylibDll, "SetShaderValueV") + purego.RegisterLibFunc(&setShaderValueMatrix, raylibDll, "SetShaderValueMatrix") + purego.RegisterLibFunc(&setShaderValueTexture, raylibDll, "SetShaderValueTexture") + purego.RegisterLibFunc(&unloadShader, raylibDll, "UnloadShader") + purego.RegisterLibFunc(&getMouseRay, raylibDll, "GetMouseRay") + purego.RegisterLibFunc(&getCameraMatrix, raylibDll, "GetCameraMatrix") + purego.RegisterLibFunc(&getCameraMatrix2D, raylibDll, "GetCameraMatrix2D") + purego.RegisterLibFunc(&getWorldToScreen, raylibDll, "GetWorldToScreen") + purego.RegisterLibFunc(&getScreenToWorld2D, raylibDll, "GetScreenToWorld2D") + purego.RegisterLibFunc(&getWorldToScreenEx, raylibDll, "GetWorldToScreenEx") + purego.RegisterLibFunc(&getWorldToScreen2D, raylibDll, "GetWorldToScreen2D") + purego.RegisterLibFunc(&setTargetFPS, raylibDll, "SetTargetFPS") + purego.RegisterLibFunc(&getFrameTime, raylibDll, "GetFrameTime") + purego.RegisterLibFunc(&getTime, raylibDll, "GetTime") + purego.RegisterLibFunc(&getFPS, raylibDll, "GetFPS") + purego.RegisterLibFunc(&swapScreenBuffer, raylibDll, "SwapScreenBuffer") + purego.RegisterLibFunc(&pollInputEvents, raylibDll, "PollInputEvents") + purego.RegisterLibFunc(&waitTime, raylibDll, "WaitTime") + purego.RegisterLibFunc(&setRandomSeed, raylibDll, "SetRandomSeed") + purego.RegisterLibFunc(&getRandomValue, raylibDll, "GetRandomValue") + purego.RegisterLibFunc(&loadRandomSequence, raylibDll, "LoadRandomSequence") + purego.RegisterLibFunc(&unloadRandomSequence, raylibDll, "UnloadRandomSequence") + purego.RegisterLibFunc(&takeScreenshot, raylibDll, "TakeScreenshot") + purego.RegisterLibFunc(&setConfigFlags, raylibDll, "SetConfigFlags") + purego.RegisterLibFunc(&openURL, raylibDll, "OpenURL") + purego.RegisterLibFunc(&traceLog, raylibDll, "TraceLog") + purego.RegisterLibFunc(&setTraceLogLevel, raylibDll, "SetTraceLogLevel") + purego.RegisterLibFunc(&memAlloc, raylibDll, "MemAlloc") + purego.RegisterLibFunc(&memRealloc, raylibDll, "MemRealloc") + purego.RegisterLibFunc(&memFree, raylibDll, "MemFree") + purego.RegisterLibFunc(&setTraceLogCallback, raylibDll, "SetTraceLogCallback") + purego.RegisterLibFunc(&isFileDropped, raylibDll, "IsFileDropped") + purego.RegisterLibFunc(&loadDroppedFiles, raylibDll, "LoadDroppedFiles") + purego.RegisterLibFunc(&unloadDroppedFiles, raylibDll, "UnloadDroppedFiles") + purego.RegisterLibFunc(&loadAutomationEventList, raylibDll, "LoadAutomationEventList") + purego.RegisterLibFunc(&unloadAutomationEventList, raylibDll, "UnloadAutomationEventList") + purego.RegisterLibFunc(&exportAutomationEventList, raylibDll, "ExportAutomationEventList") + purego.RegisterLibFunc(&setAutomationEventList, raylibDll, "SetAutomationEventList") + purego.RegisterLibFunc(&setAutomationEventBaseFrame, raylibDll, "SetAutomationEventBaseFrame") + purego.RegisterLibFunc(&startAutomationEventRecording, raylibDll, "StartAutomationEventRecording") + purego.RegisterLibFunc(&stopAutomationEventRecording, raylibDll, "StopAutomationEventRecording") + purego.RegisterLibFunc(&playAutomationEvent, raylibDll, "PlayAutomationEvent") + purego.RegisterLibFunc(&isKeyPressed, raylibDll, "IsKeyPressed") + purego.RegisterLibFunc(&isKeyPressedRepeat, raylibDll, "IsKeyPressedRepeat") + purego.RegisterLibFunc(&isKeyDown, raylibDll, "IsKeyDown") + purego.RegisterLibFunc(&isKeyReleased, raylibDll, "IsKeyReleased") + purego.RegisterLibFunc(&isKeyUp, raylibDll, "IsKeyUp") + purego.RegisterLibFunc(&getKeyPressed, raylibDll, "GetKeyPressed") + purego.RegisterLibFunc(&getCharPressed, raylibDll, "GetCharPressed") + purego.RegisterLibFunc(&setExitKey, raylibDll, "SetExitKey") + purego.RegisterLibFunc(&isGamepadAvailable, raylibDll, "IsGamepadAvailable") + purego.RegisterLibFunc(&getGamepadName, raylibDll, "GetGamepadName") + purego.RegisterLibFunc(&isGamepadButtonPressed, raylibDll, "IsGamepadButtonPressed") + purego.RegisterLibFunc(&isGamepadButtonDown, raylibDll, "IsGamepadButtonDown") + purego.RegisterLibFunc(&isGamepadButtonReleased, raylibDll, "IsGamepadButtonReleased") + purego.RegisterLibFunc(&isGamepadButtonUp, raylibDll, "IsGamepadButtonUp") + purego.RegisterLibFunc(&getGamepadButtonPressed, raylibDll, "GetGamepadButtonPressed") + purego.RegisterLibFunc(&getGamepadAxisCount, raylibDll, "GetGamepadAxisCount") + purego.RegisterLibFunc(&getGamepadAxisMovement, raylibDll, "GetGamepadAxisMovement") + purego.RegisterLibFunc(&setGamepadMappings, raylibDll, "SetGamepadMappings") + purego.RegisterLibFunc(&isMouseButtonPressed, raylibDll, "IsMouseButtonPressed") + purego.RegisterLibFunc(&isMouseButtonDown, raylibDll, "IsMouseButtonDown") + purego.RegisterLibFunc(&isMouseButtonReleased, raylibDll, "IsMouseButtonReleased") + purego.RegisterLibFunc(&isMouseButtonUp, raylibDll, "IsMouseButtonUp") + purego.RegisterLibFunc(&getMouseX, raylibDll, "GetMouseX") + purego.RegisterLibFunc(&getMouseY, raylibDll, "GetMouseY") + purego.RegisterLibFunc(&getMousePosition, raylibDll, "GetMousePosition") + purego.RegisterLibFunc(&getMouseDelta, raylibDll, "GetMouseDelta") + purego.RegisterLibFunc(&setMousePosition, raylibDll, "SetMousePosition") + purego.RegisterLibFunc(&setMouseOffset, raylibDll, "SetMouseOffset") + purego.RegisterLibFunc(&setMouseScale, raylibDll, "SetMouseScale") + purego.RegisterLibFunc(&getMouseWheelMove, raylibDll, "GetMouseWheelMove") + purego.RegisterLibFunc(&getMouseWheelMoveV, raylibDll, "GetMouseWheelMoveV") + purego.RegisterLibFunc(&setMouseCursor, raylibDll, "SetMouseCursor") + purego.RegisterLibFunc(&getTouchX, raylibDll, "GetTouchX") + purego.RegisterLibFunc(&getTouchY, raylibDll, "GetTouchY") + purego.RegisterLibFunc(&getTouchPosition, raylibDll, "GetTouchPosition") + purego.RegisterLibFunc(&getTouchPointId, raylibDll, "GetTouchPointId") + purego.RegisterLibFunc(&getTouchPointCount, raylibDll, "GetTouchPointCount") + purego.RegisterLibFunc(&setGesturesEnabled, raylibDll, "SetGesturesEnabled") + purego.RegisterLibFunc(&isGestureDetected, raylibDll, "IsGestureDetected") + purego.RegisterLibFunc(&getGestureDetected, raylibDll, "GetGestureDetected") + purego.RegisterLibFunc(&getGestureHoldDuration, raylibDll, "GetGestureHoldDuration") + purego.RegisterLibFunc(&getGestureDragVector, raylibDll, "GetGestureDragVector") + purego.RegisterLibFunc(&getGestureDragAngle, raylibDll, "GetGestureDragAngle") + purego.RegisterLibFunc(&getGesturePinchVector, raylibDll, "GetGesturePinchVector") + purego.RegisterLibFunc(&getGesturePinchAngle, raylibDll, "GetGesturePinchAngle") + purego.RegisterLibFunc(&setShapesTexture, raylibDll, "SetShapesTexture") + purego.RegisterLibFunc(&drawPixel, raylibDll, "DrawPixel") + purego.RegisterLibFunc(&drawPixelV, raylibDll, "DrawPixelV") + purego.RegisterLibFunc(&drawLine, raylibDll, "DrawLine") + purego.RegisterLibFunc(&drawLineV, raylibDll, "DrawLineV") + purego.RegisterLibFunc(&drawLineEx, raylibDll, "DrawLineEx") + purego.RegisterLibFunc(&drawLineStrip, raylibDll, "DrawLineStrip") + purego.RegisterLibFunc(&drawLineBezier, raylibDll, "DrawLineBezier") + purego.RegisterLibFunc(&drawCircle, raylibDll, "DrawCircle") + purego.RegisterLibFunc(&drawCircleSector, raylibDll, "DrawCircleSector") + purego.RegisterLibFunc(&drawCircleSectorLines, raylibDll, "DrawCircleSectorLines") + purego.RegisterLibFunc(&drawCircleGradient, raylibDll, "DrawCircleGradient") + purego.RegisterLibFunc(&drawCircleV, raylibDll, "DrawCircleV") + purego.RegisterLibFunc(&drawCircleLines, raylibDll, "DrawCircleLines") + purego.RegisterLibFunc(&drawCircleLinesV, raylibDll, "DrawCircleLinesV") + purego.RegisterLibFunc(&drawEllipse, raylibDll, "DrawEllipse") + purego.RegisterLibFunc(&drawEllipseLines, raylibDll, "DrawEllipseLines") + purego.RegisterLibFunc(&drawRing, raylibDll, "DrawRing") + purego.RegisterLibFunc(&drawRingLines, raylibDll, "DrawRingLines") + purego.RegisterLibFunc(&drawRectangle, raylibDll, "DrawRectangle") + purego.RegisterLibFunc(&drawRectangleV, raylibDll, "DrawRectangleV") + purego.RegisterLibFunc(&drawRectangleRec, raylibDll, "DrawRectangleRec") + purego.RegisterLibFunc(&drawRectanglePro, raylibDll, "DrawRectanglePro") + purego.RegisterLibFunc(&drawRectangleGradientV, raylibDll, "DrawRectangleGradientV") + purego.RegisterLibFunc(&drawRectangleGradientH, raylibDll, "DrawRectangleGradientH") + purego.RegisterLibFunc(&drawRectangleGradientEx, raylibDll, "DrawRectangleGradientEx") + purego.RegisterLibFunc(&drawRectangleLines, raylibDll, "DrawRectangleLines") + purego.RegisterLibFunc(&drawRectangleLinesEx, raylibDll, "DrawRectangleLinesEx") + purego.RegisterLibFunc(&drawRectangleRounded, raylibDll, "DrawRectangleRounded") + purego.RegisterLibFunc(&drawRectangleRoundedLines, raylibDll, "DrawRectangleRoundedLines") + purego.RegisterLibFunc(&drawTriangle, raylibDll, "DrawTriangle") + purego.RegisterLibFunc(&drawTriangleLines, raylibDll, "DrawTriangleLines") + purego.RegisterLibFunc(&drawTriangleFan, raylibDll, "DrawTriangleFan") + purego.RegisterLibFunc(&drawTriangleStrip, raylibDll, "DrawTriangleStrip") + purego.RegisterLibFunc(&drawPoly, raylibDll, "DrawPoly") + purego.RegisterLibFunc(&drawPolyLines, raylibDll, "DrawPolyLines") + purego.RegisterLibFunc(&drawPolyLinesEx, raylibDll, "DrawPolyLinesEx") + purego.RegisterLibFunc(&drawSplineLinear, raylibDll, "DrawSplineLinear") + purego.RegisterLibFunc(&drawSplineBasis, raylibDll, "DrawSplineBasis") + purego.RegisterLibFunc(&drawSplineCatmullRom, raylibDll, "DrawSplineCatmullRom") + purego.RegisterLibFunc(&drawSplineBezierQuadratic, raylibDll, "DrawSplineBezierQuadratic") + purego.RegisterLibFunc(&drawSplineBezierCubic, raylibDll, "DrawSplineBezierCubic") + purego.RegisterLibFunc(&drawSplineSegmentLinear, raylibDll, "DrawSplineSegmentLinear") + purego.RegisterLibFunc(&drawSplineSegmentBasis, raylibDll, "DrawSplineSegmentBasis") + purego.RegisterLibFunc(&drawSplineSegmentCatmullRom, raylibDll, "DrawSplineSegmentCatmullRom") + purego.RegisterLibFunc(&drawSplineSegmentBezierQuadratic, raylibDll, "DrawSplineSegmentBezierQuadratic") + purego.RegisterLibFunc(&drawSplineSegmentBezierCubic, raylibDll, "DrawSplineSegmentBezierCubic") + purego.RegisterLibFunc(&getSplinePointLinear, raylibDll, "GetSplinePointLinear") + purego.RegisterLibFunc(&getSplinePointBasis, raylibDll, "GetSplinePointBasis") + purego.RegisterLibFunc(&getSplinePointCatmullRom, raylibDll, "GetSplinePointCatmullRom") + purego.RegisterLibFunc(&getSplinePointBezierQuad, raylibDll, "GetSplinePointBezierQuad") + purego.RegisterLibFunc(&getSplinePointBezierCubic, raylibDll, "GetSplinePointBezierCubic") + purego.RegisterLibFunc(&checkCollisionRecs, raylibDll, "CheckCollisionRecs") + purego.RegisterLibFunc(&checkCollisionCircles, raylibDll, "CheckCollisionCircles") + purego.RegisterLibFunc(&checkCollisionCircleRec, raylibDll, "CheckCollisionCircleRec") + purego.RegisterLibFunc(&checkCollisionPointRec, raylibDll, "CheckCollisionPointRec") + purego.RegisterLibFunc(&checkCollisionPointCircle, raylibDll, "CheckCollisionPointCircle") + purego.RegisterLibFunc(&checkCollisionPointTriangle, raylibDll, "CheckCollisionPointTriangle") + purego.RegisterLibFunc(&checkCollisionPointPoly, raylibDll, "CheckCollisionPointPoly") + purego.RegisterLibFunc(&checkCollisionLines, raylibDll, "CheckCollisionLines") + purego.RegisterLibFunc(&checkCollisionPointLine, raylibDll, "CheckCollisionPointLine") + purego.RegisterLibFunc(&getCollisionRec, raylibDll, "GetCollisionRec") + purego.RegisterLibFunc(&loadImage, raylibDll, "LoadImage") + purego.RegisterLibFunc(&loadImageRaw, raylibDll, "LoadImageRaw") + purego.RegisterLibFunc(&loadImageSvg, raylibDll, "LoadImageSvg") + purego.RegisterLibFunc(&loadImageAnim, raylibDll, "LoadImageAnim") + purego.RegisterLibFunc(&loadImageFromMemory, raylibDll, "LoadImageFromMemory") + purego.RegisterLibFunc(&loadImageFromTexture, raylibDll, "LoadImageFromTexture") + purego.RegisterLibFunc(&loadImageFromScreen, raylibDll, "LoadImageFromScreen") + purego.RegisterLibFunc(&isImageReady, raylibDll, "IsImageReady") + purego.RegisterLibFunc(&unloadImage, raylibDll, "UnloadImage") + purego.RegisterLibFunc(&exportImage, raylibDll, "ExportImage") + purego.RegisterLibFunc(&exportImageToMemory, raylibDll, "ExportImageToMemory") + purego.RegisterLibFunc(&genImageColor, raylibDll, "GenImageColor") + purego.RegisterLibFunc(&genImageGradientLinear, raylibDll, "GenImageGradientLinear") + purego.RegisterLibFunc(&genImageGradientRadial, raylibDll, "GenImageGradientRadial") + purego.RegisterLibFunc(&genImageGradientSquare, raylibDll, "GenImageGradientSquare") + purego.RegisterLibFunc(&genImageChecked, raylibDll, "GenImageChecked") + purego.RegisterLibFunc(&genImageWhiteNoise, raylibDll, "GenImageWhiteNoise") + purego.RegisterLibFunc(&genImagePerlinNoise, raylibDll, "GenImagePerlinNoise") + purego.RegisterLibFunc(&genImageCellular, raylibDll, "GenImageCellular") + purego.RegisterLibFunc(&genImageText, raylibDll, "GenImageText") + purego.RegisterLibFunc(&imageCopy, raylibDll, "ImageCopy") + purego.RegisterLibFunc(&imageFromImage, raylibDll, "ImageFromImage") + purego.RegisterLibFunc(&imageText, raylibDll, "ImageText") + purego.RegisterLibFunc(&imageTextEx, raylibDll, "ImageTextEx") + purego.RegisterLibFunc(&imageFormat, raylibDll, "ImageFormat") + purego.RegisterLibFunc(&imageToPOT, raylibDll, "ImageToPOT") + purego.RegisterLibFunc(&imageCrop, raylibDll, "ImageCrop") + purego.RegisterLibFunc(&imageAlphaCrop, raylibDll, "ImageAlphaCrop") + purego.RegisterLibFunc(&imageAlphaClear, raylibDll, "ImageAlphaClear") + purego.RegisterLibFunc(&imageAlphaMask, raylibDll, "ImageAlphaMask") + purego.RegisterLibFunc(&imageAlphaPremultiply, raylibDll, "ImageAlphaPremultiply") + purego.RegisterLibFunc(&imageBlurGaussian, raylibDll, "ImageBlurGaussian") + purego.RegisterLibFunc(&imageResize, raylibDll, "ImageResize") + purego.RegisterLibFunc(&imageResizeNN, raylibDll, "ImageResizeNN") + purego.RegisterLibFunc(&imageResizeCanvas, raylibDll, "ImageResizeCanvas") + purego.RegisterLibFunc(&imageMipmaps, raylibDll, "ImageMipmaps") + purego.RegisterLibFunc(&imageDither, raylibDll, "ImageDither") + purego.RegisterLibFunc(&imageFlipVertical, raylibDll, "ImageFlipVertical") + purego.RegisterLibFunc(&imageFlipHorizontal, raylibDll, "ImageFlipHorizontal") + purego.RegisterLibFunc(&imageRotate, raylibDll, "ImageRotate") + purego.RegisterLibFunc(&imageRotateCW, raylibDll, "ImageRotateCW") + purego.RegisterLibFunc(&imageRotateCCW, raylibDll, "ImageRotateCCW") + purego.RegisterLibFunc(&imageColorTint, raylibDll, "ImageColorTint") + purego.RegisterLibFunc(&imageColorInvert, raylibDll, "ImageColorInvert") + purego.RegisterLibFunc(&imageColorGrayscale, raylibDll, "ImageColorGrayscale") + purego.RegisterLibFunc(&imageColorContrast, raylibDll, "ImageColorContrast") + purego.RegisterLibFunc(&imageColorBrightness, raylibDll, "ImageColorBrightness") + purego.RegisterLibFunc(&imageColorReplace, raylibDll, "ImageColorReplace") + purego.RegisterLibFunc(&loadImageColors, raylibDll, "LoadImageColors") + purego.RegisterLibFunc(&loadImagePalette, raylibDll, "LoadImagePalette") + purego.RegisterLibFunc(&unloadImageColors, raylibDll, "UnloadImageColors") + purego.RegisterLibFunc(&unloadImagePalette, raylibDll, "UnloadImagePalette") + purego.RegisterLibFunc(&getImageAlphaBorder, raylibDll, "GetImageAlphaBorder") + purego.RegisterLibFunc(&getImageColor, raylibDll, "GetImageColor") + purego.RegisterLibFunc(&imageClearBackground, raylibDll, "ImageClearBackground") + purego.RegisterLibFunc(&imageDrawPixel, raylibDll, "ImageDrawPixel") + purego.RegisterLibFunc(&imageDrawPixelV, raylibDll, "ImageDrawPixelV") + purego.RegisterLibFunc(&imageDrawLine, raylibDll, "ImageDrawLine") + purego.RegisterLibFunc(&imageDrawLineV, raylibDll, "ImageDrawLineV") + purego.RegisterLibFunc(&imageDrawCircle, raylibDll, "ImageDrawCircle") + purego.RegisterLibFunc(&imageDrawCircleV, raylibDll, "ImageDrawCircleV") + purego.RegisterLibFunc(&imageDrawCircleLines, raylibDll, "ImageDrawCircleLines") + purego.RegisterLibFunc(&imageDrawCircleLinesV, raylibDll, "ImageDrawCircleLinesV") + purego.RegisterLibFunc(&imageDrawRectangle, raylibDll, "ImageDrawRectangle") + purego.RegisterLibFunc(&imageDrawRectangleV, raylibDll, "ImageDrawRectangleV") + purego.RegisterLibFunc(&imageDrawRectangleRec, raylibDll, "ImageDrawRectangleRec") + purego.RegisterLibFunc(&imageDrawRectangleLines, raylibDll, "ImageDrawRectangleLines") + purego.RegisterLibFunc(&imageDraw, raylibDll, "ImageDraw") + purego.RegisterLibFunc(&imageDrawText, raylibDll, "ImageDrawText") + purego.RegisterLibFunc(&imageDrawTextEx, raylibDll, "ImageDrawTextEx") + purego.RegisterLibFunc(&loadTexture, raylibDll, "LoadTexture") + purego.RegisterLibFunc(&loadTextureFromImage, raylibDll, "LoadTextureFromImage") + purego.RegisterLibFunc(&loadTextureCubemap, raylibDll, "LoadTextureCubemap") + purego.RegisterLibFunc(&loadRenderTexture, raylibDll, "LoadRenderTexture") + purego.RegisterLibFunc(&isTextureReady, raylibDll, "IsTextureReady") + purego.RegisterLibFunc(&unloadTexture, raylibDll, "UnloadTexture") + purego.RegisterLibFunc(&isRenderTextureReady, raylibDll, "IsRenderTextureReady") + purego.RegisterLibFunc(&unloadRenderTexture, raylibDll, "UnloadRenderTexture") + purego.RegisterLibFunc(&updateTexture, raylibDll, "UpdateTexture") + purego.RegisterLibFunc(&updateTextureRec, raylibDll, "UpdateTextureRec") + purego.RegisterLibFunc(&genTextureMipmaps, raylibDll, "GenTextureMipmaps") + purego.RegisterLibFunc(&setTextureFilter, raylibDll, "SetTextureFilter") + purego.RegisterLibFunc(&setTextureWrap, raylibDll, "SetTextureWrap") + purego.RegisterLibFunc(&drawTexture, raylibDll, "DrawTexture") + purego.RegisterLibFunc(&drawTextureV, raylibDll, "DrawTextureV") + purego.RegisterLibFunc(&drawTextureEx, raylibDll, "DrawTextureEx") + purego.RegisterLibFunc(&drawTextureRec, raylibDll, "DrawTextureRec") + purego.RegisterLibFunc(&drawTexturePro, raylibDll, "DrawTexturePro") + purego.RegisterLibFunc(&drawTextureNPatch, raylibDll, "DrawTextureNPatch") + purego.RegisterLibFunc(&fade, raylibDll, "Fade") + purego.RegisterLibFunc(&colorToInt, raylibDll, "ColorToInt") + purego.RegisterLibFunc(&colorNormalize, raylibDll, "ColorNormalize") + purego.RegisterLibFunc(&colorFromNormalized, raylibDll, "ColorFromNormalized") + purego.RegisterLibFunc(&colorToHSV, raylibDll, "ColorToHSV") + purego.RegisterLibFunc(&colorFromHSV, raylibDll, "ColorFromHSV") + purego.RegisterLibFunc(&colorTint, raylibDll, "ColorTint") + purego.RegisterLibFunc(&colorBrightness, raylibDll, "ColorBrightness") + purego.RegisterLibFunc(&colorContrast, raylibDll, "ColorContrast") + purego.RegisterLibFunc(&colorAlpha, raylibDll, "ColorAlpha") + purego.RegisterLibFunc(&colorAlphaBlend, raylibDll, "ColorAlphaBlend") + purego.RegisterLibFunc(&getColor, raylibDll, "GetColor") + purego.RegisterLibFunc(&getPixelColor, raylibDll, "GetPixelColor") + purego.RegisterLibFunc(&setPixelColor, raylibDll, "SetPixelColor") + purego.RegisterLibFunc(&getPixelDataSize, raylibDll, "GetPixelDataSize") + purego.RegisterLibFunc(&getFontDefault, raylibDll, "GetFontDefault") + purego.RegisterLibFunc(&loadFont, raylibDll, "LoadFont") + purego.RegisterLibFunc(&loadFontEx, raylibDll, "LoadFontEx") + purego.RegisterLibFunc(&loadFontFromImage, raylibDll, "LoadFontFromImage") + purego.RegisterLibFunc(&loadFontFromMemory, raylibDll, "LoadFontFromMemory") + purego.RegisterLibFunc(&isFontReady, raylibDll, "IsFontReady") + purego.RegisterLibFunc(&loadFontData, raylibDll, "LoadFontData") + purego.RegisterLibFunc(&genImageFontAtlas, raylibDll, "GenImageFontAtlas") + purego.RegisterLibFunc(&unloadFontData, raylibDll, "UnloadFontData") + purego.RegisterLibFunc(&unloadFont, raylibDll, "UnloadFont") + purego.RegisterLibFunc(&drawFPS, raylibDll, "DrawFPS") + purego.RegisterLibFunc(&drawText, raylibDll, "DrawText") + purego.RegisterLibFunc(&drawTextEx, raylibDll, "DrawTextEx") + purego.RegisterLibFunc(&drawTextPro, raylibDll, "DrawTextPro") + purego.RegisterLibFunc(&drawTextCodepoint, raylibDll, "DrawTextCodepoint") + purego.RegisterLibFunc(&drawTextCodepoints, raylibDll, "DrawTextCodepoints") + purego.RegisterLibFunc(&setTextLineSpacing, raylibDll, "SetTextLineSpacing") + purego.RegisterLibFunc(&measureText, raylibDll, "MeasureText") + purego.RegisterLibFunc(&measureTextEx, raylibDll, "MeasureTextEx") + purego.RegisterLibFunc(&getGlyphIndex, raylibDll, "GetGlyphIndex") + purego.RegisterLibFunc(&getGlyphInfo, raylibDll, "GetGlyphInfo") + purego.RegisterLibFunc(&getGlyphAtlasRec, raylibDll, "GetGlyphAtlasRec") + purego.RegisterLibFunc(&drawLine3D, raylibDll, "DrawLine3D") + purego.RegisterLibFunc(&drawPoint3D, raylibDll, "DrawPoint3D") + purego.RegisterLibFunc(&drawCircle3D, raylibDll, "DrawCircle3D") + purego.RegisterLibFunc(&drawTriangle3D, raylibDll, "DrawTriangle3D") + purego.RegisterLibFunc(&drawTriangleStrip3D, raylibDll, "DrawTriangleStrip3D") + purego.RegisterLibFunc(&drawCube, raylibDll, "DrawCube") + purego.RegisterLibFunc(&drawCubeV, raylibDll, "DrawCubeV") + purego.RegisterLibFunc(&drawCubeWires, raylibDll, "DrawCubeWires") + purego.RegisterLibFunc(&drawCubeWiresV, raylibDll, "DrawCubeWiresV") + purego.RegisterLibFunc(&drawSphere, raylibDll, "DrawSphere") + purego.RegisterLibFunc(&drawSphereEx, raylibDll, "DrawSphereEx") + purego.RegisterLibFunc(&drawSphereWires, raylibDll, "DrawSphereWires") + purego.RegisterLibFunc(&drawCylinder, raylibDll, "DrawCylinder") + purego.RegisterLibFunc(&drawCylinderEx, raylibDll, "DrawCylinderEx") + purego.RegisterLibFunc(&drawCylinderWires, raylibDll, "DrawCylinderWires") + purego.RegisterLibFunc(&drawCylinderWiresEx, raylibDll, "DrawCylinderWiresEx") + purego.RegisterLibFunc(&drawCapsule, raylibDll, "DrawCapsule") + purego.RegisterLibFunc(&drawCapsuleWires, raylibDll, "DrawCapsuleWires") + purego.RegisterLibFunc(&drawPlane, raylibDll, "DrawPlane") + purego.RegisterLibFunc(&drawRay, raylibDll, "DrawRay") + purego.RegisterLibFunc(&drawGrid, raylibDll, "DrawGrid") + purego.RegisterLibFunc(&loadModel, raylibDll, "LoadModel") + purego.RegisterLibFunc(&loadModelFromMesh, raylibDll, "LoadModelFromMesh") + purego.RegisterLibFunc(&isModelReady, raylibDll, "IsModelReady") + purego.RegisterLibFunc(&unloadModel, raylibDll, "UnloadModel") + purego.RegisterLibFunc(&getModelBoundingBox, raylibDll, "GetModelBoundingBox") + purego.RegisterLibFunc(&drawModel, raylibDll, "DrawModel") + purego.RegisterLibFunc(&drawModelEx, raylibDll, "DrawModelEx") + purego.RegisterLibFunc(&drawModelWires, raylibDll, "DrawModelWires") + purego.RegisterLibFunc(&drawModelWiresEx, raylibDll, "DrawModelWiresEx") + purego.RegisterLibFunc(&drawBoundingBox, raylibDll, "DrawBoundingBox") + purego.RegisterLibFunc(&drawBillboard, raylibDll, "DrawBillboard") + purego.RegisterLibFunc(&drawBillboardRec, raylibDll, "DrawBillboardRec") + purego.RegisterLibFunc(&drawBillboardPro, raylibDll, "DrawBillboardPro") + purego.RegisterLibFunc(&uploadMesh, raylibDll, "UploadMesh") + purego.RegisterLibFunc(&updateMeshBuffer, raylibDll, "UpdateMeshBuffer") + purego.RegisterLibFunc(&unloadMesh, raylibDll, "UnloadMesh") + purego.RegisterLibFunc(&drawMesh, raylibDll, "DrawMesh") + purego.RegisterLibFunc(&drawMeshInstanced, raylibDll, "DrawMeshInstanced") + purego.RegisterLibFunc(&exportMesh, raylibDll, "ExportMesh") + purego.RegisterLibFunc(&getMeshBoundingBox, raylibDll, "GetMeshBoundingBox") + purego.RegisterLibFunc(&genMeshTangents, raylibDll, "GenMeshTangents") + purego.RegisterLibFunc(&genMeshPoly, raylibDll, "GenMeshPoly") + purego.RegisterLibFunc(&genMeshPlane, raylibDll, "GenMeshPlane") + purego.RegisterLibFunc(&genMeshCube, raylibDll, "GenMeshCube") + purego.RegisterLibFunc(&genMeshSphere, raylibDll, "GenMeshSphere") + purego.RegisterLibFunc(&genMeshHemiSphere, raylibDll, "GenMeshHemiSphere") + purego.RegisterLibFunc(&genMeshCylinder, raylibDll, "GenMeshCylinder") + purego.RegisterLibFunc(&genMeshCone, raylibDll, "GenMeshCone") + purego.RegisterLibFunc(&genMeshTorus, raylibDll, "GenMeshTorus") + purego.RegisterLibFunc(&genMeshKnot, raylibDll, "GenMeshKnot") + purego.RegisterLibFunc(&genMeshHeightmap, raylibDll, "GenMeshHeightmap") + purego.RegisterLibFunc(&genMeshCubicmap, raylibDll, "GenMeshCubicmap") + purego.RegisterLibFunc(&loadMaterials, raylibDll, "LoadMaterials") + purego.RegisterLibFunc(&loadMaterialDefault, raylibDll, "LoadMaterialDefault") + purego.RegisterLibFunc(&isMaterialReady, raylibDll, "IsMaterialReady") + purego.RegisterLibFunc(&unloadMaterial, raylibDll, "UnloadMaterial") + purego.RegisterLibFunc(&setMaterialTexture, raylibDll, "SetMaterialTexture") + purego.RegisterLibFunc(&setModelMeshMaterial, raylibDll, "SetModelMeshMaterial") + purego.RegisterLibFunc(&loadModelAnimations, raylibDll, "LoadModelAnimations") + purego.RegisterLibFunc(&updateModelAnimation, raylibDll, "UpdateModelAnimation") + purego.RegisterLibFunc(&unloadModelAnimation, raylibDll, "UnloadModelAnimation") + purego.RegisterLibFunc(&unloadModelAnimations, raylibDll, "UnloadModelAnimations") + purego.RegisterLibFunc(&isModelAnimationValid, raylibDll, "IsModelAnimationValid") + purego.RegisterLibFunc(&checkCollisionSpheres, raylibDll, "CheckCollisionSpheres") + purego.RegisterLibFunc(&checkCollisionBoxes, raylibDll, "CheckCollisionBoxes") + purego.RegisterLibFunc(&checkCollisionBoxSphere, raylibDll, "CheckCollisionBoxSphere") + purego.RegisterLibFunc(&getRayCollisionSphere, raylibDll, "GetRayCollisionSphere") + purego.RegisterLibFunc(&getRayCollisionBox, raylibDll, "GetRayCollisionBox") + purego.RegisterLibFunc(&getRayCollisionMesh, raylibDll, "GetRayCollisionMesh") + purego.RegisterLibFunc(&getRayCollisionTriangle, raylibDll, "GetRayCollisionTriangle") + purego.RegisterLibFunc(&getRayCollisionQuad, raylibDll, "GetRayCollisionQuad") + purego.RegisterLibFunc(&initAudioDevice, raylibDll, "InitAudioDevice") + purego.RegisterLibFunc(&closeAudioDevice, raylibDll, "CloseAudioDevice") + purego.RegisterLibFunc(&isAudioDeviceReady, raylibDll, "IsAudioDeviceReady") + purego.RegisterLibFunc(&setMasterVolume, raylibDll, "SetMasterVolume") + purego.RegisterLibFunc(&getMasterVolume, raylibDll, "GetMasterVolume") + purego.RegisterLibFunc(&loadWave, raylibDll, "LoadWave") + purego.RegisterLibFunc(&loadWaveFromMemory, raylibDll, "LoadWaveFromMemory") + purego.RegisterLibFunc(&isWaveReady, raylibDll, "IsWaveReady") + purego.RegisterLibFunc(&loadSound, raylibDll, "LoadSound") + purego.RegisterLibFunc(&loadSoundFromWave, raylibDll, "LoadSoundFromWave") + purego.RegisterLibFunc(&loadSoundAlias, raylibDll, "LoadSoundAlias") + purego.RegisterLibFunc(&isSoundReady, raylibDll, "IsSoundReady") + purego.RegisterLibFunc(&updateSound, raylibDll, "UpdateSound") + purego.RegisterLibFunc(&unloadWave, raylibDll, "UnloadWave") + purego.RegisterLibFunc(&unloadSound, raylibDll, "UnloadSound") + purego.RegisterLibFunc(&unloadSoundAlias, raylibDll, "UnloadSoundAlias") + purego.RegisterLibFunc(&exportWave, raylibDll, "ExportWave") + purego.RegisterLibFunc(&playSound, raylibDll, "PlaySound") + purego.RegisterLibFunc(&stopSound, raylibDll, "StopSound") + purego.RegisterLibFunc(&pauseSound, raylibDll, "PauseSound") + purego.RegisterLibFunc(&resumeSound, raylibDll, "ResumeSound") + purego.RegisterLibFunc(&isSoundPlaying, raylibDll, "IsSoundPlaying") + purego.RegisterLibFunc(&setSoundVolume, raylibDll, "SetSoundVolume") + purego.RegisterLibFunc(&setSoundPitch, raylibDll, "SetSoundPitch") + purego.RegisterLibFunc(&setSoundPan, raylibDll, "SetSoundPan") + purego.RegisterLibFunc(&waveCopy, raylibDll, "WaveCopy") + purego.RegisterLibFunc(&waveCrop, raylibDll, "WaveCrop") + purego.RegisterLibFunc(&waveFormat, raylibDll, "WaveFormat") + purego.RegisterLibFunc(&loadWaveSamples, raylibDll, "LoadWaveSamples") + purego.RegisterLibFunc(&unloadWaveSamples, raylibDll, "UnloadWaveSamples") + purego.RegisterLibFunc(&loadMusicStream, raylibDll, "LoadMusicStream") + purego.RegisterLibFunc(&loadMusicStreamFromMemory, raylibDll, "LoadMusicStreamFromMemory") + purego.RegisterLibFunc(&isMusicReady, raylibDll, "IsMusicReady") + purego.RegisterLibFunc(&unloadMusicStream, raylibDll, "UnloadMusicStream") + purego.RegisterLibFunc(&playMusicStream, raylibDll, "PlayMusicStream") + purego.RegisterLibFunc(&isMusicStreamPlaying, raylibDll, "IsMusicStreamPlaying") + purego.RegisterLibFunc(&updateMusicStream, raylibDll, "UpdateMusicStream") + purego.RegisterLibFunc(&stopMusicStream, raylibDll, "StopMusicStream") + purego.RegisterLibFunc(&pauseMusicStream, raylibDll, "PauseMusicStream") + purego.RegisterLibFunc(&resumeMusicStream, raylibDll, "ResumeMusicStream") + purego.RegisterLibFunc(&seekMusicStream, raylibDll, "SeekMusicStream") + purego.RegisterLibFunc(&setMusicVolume, raylibDll, "SetMusicVolume") + purego.RegisterLibFunc(&setMusicPitch, raylibDll, "SetMusicPitch") + purego.RegisterLibFunc(&setMusicPan, raylibDll, "SetMusicPan") + purego.RegisterLibFunc(&getMusicTimeLength, raylibDll, "GetMusicTimeLength") + purego.RegisterLibFunc(&getMusicTimePlayed, raylibDll, "GetMusicTimePlayed") + purego.RegisterLibFunc(&loadAudioStream, raylibDll, "LoadAudioStream") + purego.RegisterLibFunc(&isAudioStreamReady, raylibDll, "IsAudioStreamReady") + purego.RegisterLibFunc(&unloadAudioStream, raylibDll, "UnloadAudioStream") + purego.RegisterLibFunc(&updateAudioStream, raylibDll, "UpdateAudioStream") + purego.RegisterLibFunc(&isAudioStreamProcessed, raylibDll, "IsAudioStreamProcessed") + purego.RegisterLibFunc(&playAudioStream, raylibDll, "PlayAudioStream") + purego.RegisterLibFunc(&pauseAudioStream, raylibDll, "PauseAudioStream") + purego.RegisterLibFunc(&resumeAudioStream, raylibDll, "ResumeAudioStream") + purego.RegisterLibFunc(&isAudioStreamPlaying, raylibDll, "IsAudioStreamPlaying") + purego.RegisterLibFunc(&stopAudioStream, raylibDll, "StopAudioStream") + purego.RegisterLibFunc(&setAudioStreamVolume, raylibDll, "SetAudioStreamVolume") + purego.RegisterLibFunc(&setAudioStreamPitch, raylibDll, "SetAudioStreamPitch") + purego.RegisterLibFunc(&setAudioStreamPan, raylibDll, "SetAudioStreamPan") + purego.RegisterLibFunc(&setAudioStreamBufferSizeDefault, raylibDll, "SetAudioStreamBufferSizeDefault") + purego.RegisterLibFunc(&setAudioStreamCallback, raylibDll, "SetAudioStreamCallback") + purego.RegisterLibFunc(&attachAudioStreamProcessor, raylibDll, "AttachAudioStreamProcessor") + purego.RegisterLibFunc(&detachAudioStreamProcessor, raylibDll, "DetachAudioStreamProcessor") + purego.RegisterLibFunc(&attachAudioMixedProcessor, raylibDll, "AttachAudioMixedProcessor") + purego.RegisterLibFunc(&detachAudioMixedProcessor, raylibDll, "DetachAudioMixedProcessor") +} + +// InitWindow - Initialize window and OpenGL context +func InitWindow(width int32, height int32, title string) { + initWindow(width, height, title) +} + +// CloseWindow - Close window and unload OpenGL context +func CloseWindow() { + closeWindow() +} + +// WindowShouldClose - Check if application should close (KEY_ESCAPE pressed or windows close icon clicked) +func WindowShouldClose() bool { + return windowShouldClose() +} + +// IsWindowReady - Check if window has been initialized successfully +func IsWindowReady() bool { + return isWindowReady() +} + +// IsWindowFullscreen - Check if window is currently fullscreen +func IsWindowFullscreen() bool { + return isWindowFullscreen() +} + +// IsWindowHidden - Check if window is currently hidden (only PLATFORM_DESKTOP) +func IsWindowHidden() bool { + return isWindowHidden() +} + +// IsWindowMinimized - Check if window is currently minimized (only PLATFORM_DESKTOP) +func IsWindowMinimized() bool { + return isWindowMinimized() +} + +// IsWindowMaximized - Check if window is currently maximized (only PLATFORM_DESKTOP) +func IsWindowMaximized() bool { + return isWindowMaximized() +} + +// IsWindowFocused - Check if window is currently focused (only PLATFORM_DESKTOP) +func IsWindowFocused() bool { + return isWindowFocused() +} + +// IsWindowResized - Check if window has been resized last frame +func IsWindowResized() bool { + return isWindowResized() +} + +// IsWindowState - Check if one specific window flag is enabled +func IsWindowState(flag uint32) bool { + return isWindowState(flag) +} + +// SetWindowState - Set window configuration state using flags (only PLATFORM_DESKTOP) +func SetWindowState(flags uint32) { + setWindowState(flags) +} + +// ClearWindowState - Clear window configuration state flags +func ClearWindowState(flags uint32) { + clearWindowState(flags) +} + +// ToggleFullscreen - Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) +func ToggleFullscreen() { + toggleFullscreen() +} + +// ToggleBorderlessWindowed - Toggle window state: borderless windowed (only PLATFORM_DESKTOP) +func ToggleBorderlessWindowed() { + toggleBorderlessWindowed() +} + +// MaximizeWindow - Set window state: maximized, if resizable (only PLATFORM_DESKTOP) +func MaximizeWindow() { + maximizeWindow() +} + +// MinimizeWindow - Set window state: minimized, if resizable (only PLATFORM_DESKTOP) +func MinimizeWindow() { + minimizeWindow() +} + +// RestoreWindow - Set window state: not minimized/maximized (only PLATFORM_DESKTOP) +func RestoreWindow() { + restoreWindow() +} + +// SetWindowIcon - Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) +func SetWindowIcon(image Image) { + setWindowIcon(uintptr(unsafe.Pointer(&image))) +} + +// SetWindowIcons - Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) +func SetWindowIcons(images []Image, count int32) { + setWindowIcons(uintptr(unsafe.Pointer(&images[0])), int32(len(images))) +} + +// SetWindowTitle - Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB) +func SetWindowTitle(title string) { + setWindowTitle(title) +} + +// SetWindowPosition - Set window position on screen (only PLATFORM_DESKTOP) +func SetWindowPosition(x int, y int) { + setWindowPosition(int32(x), int32(y)) +} + +// SetWindowMonitor - Set monitor for the current window +func SetWindowMonitor(monitor int) { + setWindowMonitor(int32(monitor)) +} + +// SetWindowMinSize - Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) +func SetWindowMinSize(width int, height int) { + setWindowMinSize(int32(width), int32(height)) +} + +// SetWindowMaxSize - Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE) +func SetWindowMaxSize(width int, height int) { + setWindowMaxSize(int32(width), int32(height)) +} + +// SetWindowSize - Set window dimensions +func SetWindowSize(width int, height int) { + setWindowSize(int32(width), int32(height)) +} + +// SetWindowOpacity - Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) +func SetWindowOpacity(opacity float32) { + setWindowOpacity(opacity) +} + +// SetWindowFocused - Set window focused (only PLATFORM_DESKTOP) +func SetWindowFocused() { + setWindowFocused() +} + +// GetWindowHandle - Get native window handle +func GetWindowHandle() unsafe.Pointer { + return getWindowHandle() +} + +// GetScreenWidth - Get current screen width +func GetScreenWidth() int { + return int(getScreenWidth()) +} + +// GetScreenHeight - Get current screen height +func GetScreenHeight() int { + return int(getScreenHeight()) +} + +// GetRenderWidth - Get current render width (it considers HiDPI) +func GetRenderWidth() int { + return int(getRenderWidth()) +} + +// GetRenderHeight - Get current render height (it considers HiDPI) +func GetRenderHeight() int { + return int(getRenderHeight()) +} + +// GetMonitorCount - Get number of connected monitors +func GetMonitorCount() int { + return int(getMonitorCount()) +} + +// GetCurrentMonitor - Get current connected monitor +func GetCurrentMonitor() int { + return int(getCurrentMonitor()) +} + +// GetMonitorPosition - Get specified monitor position +func GetMonitorPosition(monitor int) Vector2 { + ret := getMonitorPosition(int32(monitor)) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetMonitorWidth - Get specified monitor width (current video mode used by monitor) +func GetMonitorWidth(monitor int) int { + return int(getMonitorWidth(int32(monitor))) +} + +// GetMonitorHeight - Get specified monitor height (current video mode used by monitor) +func GetMonitorHeight(monitor int) int { + return int(getMonitorHeight(int32(monitor))) +} + +// GetMonitorPhysicalWidth - Get specified monitor physical width in millimetres +func GetMonitorPhysicalWidth(monitor int) int { + return int(getMonitorPhysicalWidth(int32(monitor))) +} + +// GetMonitorPhysicalHeight - Get specified monitor physical height in millimetres +func GetMonitorPhysicalHeight(monitor int) int { + return int(getMonitorPhysicalHeight(int32(monitor))) +} + +// GetMonitorRefreshRate - Get specified monitor refresh rate +func GetMonitorRefreshRate(monitor int) int { + return int(getMonitorRefreshRate(int32(monitor))) +} + +// GetWindowPosition - Get window position XY on monitor +func GetWindowPosition() Vector2 { + ret := getWindowPosition() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetWindowScaleDPI - Get window scale DPI factor +func GetWindowScaleDPI() Vector2 { + ret := getWindowScaleDPI() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetMonitorName - Get the human-readable, UTF-8 encoded name of the specified monitor +func GetMonitorName(monitor int) string { + return getMonitorName(int32(monitor)) +} + +// SetClipboardText - Set clipboard text content +func SetClipboardText(text string) { + setClipboardText(text) +} + +// GetClipboardText - Get clipboard text content +func GetClipboardText() string { + return getClipboardText() +} + +// EnableEventWaiting - Enable waiting for events on EndDrawing(), no automatic event polling +func EnableEventWaiting() { + enableEventWaiting() +} + +// DisableEventWaiting - Disable waiting for events on EndDrawing(), automatic events polling +func DisableEventWaiting() { + disableEventWaiting() +} + +// ShowCursor - Shows cursor +func ShowCursor() { + showCursor() +} + +// HideCursor - Hides cursor +func HideCursor() { + hideCursor() +} + +// IsCursorHidden - Check if cursor is not visible +func IsCursorHidden() bool { + return isCursorHidden() +} + +// EnableCursor - Enables cursor (unlock cursor) +func EnableCursor() { + enableCursor() +} + +// DisableCursor - Disables cursor (lock cursor) +func DisableCursor() { + disableCursor() +} + +// IsCursorOnScreen - Check if cursor is on the screen +func IsCursorOnScreen() bool { + return isCursorOnScreen() +} + +// ClearBackground - Set background color (framebuffer clear color) +func ClearBackground(col color.RGBA) { + clearBackground(*(*uintptr)(unsafe.Pointer(&col))) +} + +// BeginDrawing - Setup canvas (framebuffer) to start drawing +func BeginDrawing() { + beginDrawing() +} + +// EndDrawing - End canvas drawing and swap buffers (double buffering) +func EndDrawing() { + endDrawing() +} + +// BeginMode2D - Begin 2D mode with custom camera (2D) +func BeginMode2D(camera Camera2D) { + beginMode2D(uintptr(unsafe.Pointer(&camera))) +} + +// EndMode2D - Ends 2D mode with custom camera +func EndMode2D() { + endMode2D() +} + +// BeginMode3D - Begin 3D mode with custom camera (3D) +func BeginMode3D(camera Camera3D) { + beginMode3D(uintptr(unsafe.Pointer(&camera))) +} + +// EndMode3D - Ends 3D mode and returns to default 2D orthographic mode +func EndMode3D() { + endMode3D() +} + +// BeginTextureMode - Begin drawing to render texture +func BeginTextureMode(target RenderTexture2D) { + beginTextureMode(uintptr(unsafe.Pointer(&target))) +} + +// EndTextureMode - Ends drawing to render texture +func EndTextureMode() { + endTextureMode() +} + +// BeginShaderMode - Begin custom shader drawing +func BeginShaderMode(shader Shader) { + beginShaderMode(*(*uintptr)(unsafe.Pointer(&shader))) +} + +// EndShaderMode - End custom shader drawing (use default shader) +func EndShaderMode() { + endShaderMode() +} + +// BeginBlendMode - Begin blending mode (alpha, additive, multiplied, subtract, custom) +func BeginBlendMode(mode BlendMode) { + beginBlendMode(int32(mode)) +} + +// EndBlendMode - End blending mode (reset to default: alpha blending) +func EndBlendMode() { + endBlendMode() +} + +// BeginScissorMode - Begin scissor mode (define screen area for following drawing) +func BeginScissorMode(x int32, y int32, width int32, height int32) { + beginScissorMode(x, y, width, height) +} + +// EndScissorMode - End scissor mode +func EndScissorMode() { + endScissorMode() +} + +// BeginVrStereoMode - Begin stereo rendering (requires VR simulator) +func BeginVrStereoMode(config VrStereoConfig) {} + +// EndVrStereoMode - End stereo rendering (requires VR simulator) +func EndVrStereoMode() {} + +// LoadVrStereoConfig - Load VR stereo config for VR simulator device parameters +func LoadVrStereoConfig(device VrDeviceInfo) VrStereoConfig { + var config VrStereoConfig + loadVrStereoConfig(uintptr(unsafe.Pointer(&config)), uintptr(unsafe.Pointer(&device))) + return config +} + +// UnloadVrStereoConfig - Unload VR stereo config +func UnloadVrStereoConfig(config VrStereoConfig) { + unloadVrStereoConfig(uintptr(unsafe.Pointer(&config))) +} + +// 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) + 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) + return shader +} + +// IsShaderReady - Check if a shader is ready +func IsShaderReady(shader Shader) bool { + return isShaderReady(uintptr(unsafe.Pointer(&shader))) +} + +// GetShaderLocation - Get shader uniform location +func GetShaderLocation(shader Shader, uniformName string) int32 { + return getShaderLocation(uintptr(unsafe.Pointer(&shader)), uniformName) +} + +// GetShaderLocationAttrib - Get shader attribute location +func GetShaderLocationAttrib(shader Shader, attribName string) int32 { + return getShaderLocationAttrib(uintptr(unsafe.Pointer(&shader)), attribName) +} + +// SetShaderValue - Set shader uniform value +func SetShaderValue(shader Shader, locIndex int32, value []float32, uniformType ShaderUniformDataType) { + setShaderValue(uintptr(unsafe.Pointer(&shader)), locIndex, value, int32(uniformType)) +} + +// SetShaderValueV - Set shader uniform value vector +func SetShaderValueV(shader Shader, locIndex int32, value []float32, uniformType ShaderUniformDataType, count int32) { + setShaderValueV(uintptr(unsafe.Pointer(&shader)), locIndex, value, int32(uniformType), count) +} + +// SetShaderValueMatrix - Set shader uniform value (matrix 4x4) +func SetShaderValueMatrix(shader Shader, locIndex int32, mat Matrix) { + setShaderValueMatrix(uintptr(unsafe.Pointer(&shader)), locIndex, uintptr(unsafe.Pointer(&mat))) +} + +// SetShaderValueTexture - Set shader uniform value for texture (sampler2d) +func SetShaderValueTexture(shader Shader, locIndex int32, texture Texture2D) { + setShaderValueTexture(uintptr(unsafe.Pointer(&shader)), locIndex, uintptr(unsafe.Pointer(&texture))) +} + +// UnloadShader - Unload shader from GPU memory (VRAM) +func UnloadShader(shader Shader) { + unloadShader(uintptr(unsafe.Pointer(&shader))) +} + +// GetMouseRay - Get a ray trace from mouse position +func GetMouseRay(mousePosition Vector2, camera Camera) Ray { + var ray Ray + getMouseRay(uintptr(unsafe.Pointer(&ray)), *(*uintptr)(unsafe.Pointer(&mousePosition)), uintptr(unsafe.Pointer(&camera))) + return ray +} + +// GetCameraMatrix - Get camera transform matrix (view matrix) +func GetCameraMatrix(camera Camera) Matrix { + var mat Matrix + getCameraMatrix(uintptr(unsafe.Pointer(&mat)), uintptr(unsafe.Pointer(&camera))) + return mat +} + +// GetCameraMatrix2D - Get camera 2d transform matrix +func GetCameraMatrix2D(camera Camera2D) Matrix { + var mat Matrix + getCameraMatrix2D(uintptr(unsafe.Pointer(&mat)), uintptr(unsafe.Pointer(&camera))) + return mat +} + +// GetWorldToScreen - Get the screen space position for a 3d world space position +func GetWorldToScreen(position Vector3, camera Camera) Vector2 { + ret := getWorldToScreen(uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&camera))) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetScreenToWorld2D - Get the world space position for a 2d camera screen space position +func GetScreenToWorld2D(position Vector2, camera Camera2D) Vector2 { + ret := getScreenToWorld2D(*(*uintptr)(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&camera))) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetWorldToScreenEx - Get size position for a 3d world space position +func GetWorldToScreenEx(position Vector3, camera Camera, width int32, height int32) Vector2 { + ret := getWorldToScreenEx(uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&camera)), width, height) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetWorldToScreen2D - Get the screen space position for a 2d camera world space position +func GetWorldToScreen2D(position Vector2, camera Camera2D) Vector2 { + ret := getWorldToScreen2D(*(*uintptr)(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&camera))) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// SetTargetFPS - Set target FPS (maximum) +func SetTargetFPS(fps int32) { + setTargetFPS(fps) +} + +// GetFrameTime - Get time in seconds for last frame drawn (delta time) +func GetFrameTime() float32 { + return getFrameTime() +} + +// GetTime - Get elapsed time in seconds since InitWindow() +func GetTime() float64 { + return getTime() +} + +// GetFPS - Get current FPS +func GetFPS() int32 { + return getFPS() +} + +// SwapScreenBuffer - Swap back buffer with front buffer (screen drawing) +func SwapScreenBuffer() { + swapScreenBuffer() +} + +// PollInputEvents - Register all input events +func PollInputEvents() { + pollInputEvents() +} + +// WaitTime - Wait for some time (halt program execution) +func WaitTime(seconds float64) { + waitTime(seconds) +} + +// SetRandomSeed - Set the seed for the random number generator +// +// Note: You can use go's math/rand package instead +func SetRandomSeed(seed uint32) { + setRandomSeed(seed) +} + +// GetRandomValue - Get a random value between min and max (both included) +// +// Note: You can use go's math/rand package instead +func GetRandomValue(minimum int32, maximum int32) int32 { + return getRandomValue(minimum, maximum) +} + +// LoadRandomSequence - Load random values sequence, no values repeated +// +// Note: Use UnloadRandomSequence if you don't need the sequence any more. You can use go's math/rand.Perm function instead. +func LoadRandomSequence(count uint32, minimum int32, maximum int32) []int32 { + ret := loadRandomSequence(count, minimum, maximum) + return unsafe.Slice(ret, 10) +} + +// UnloadRandomSequence - Unload random values sequence +func UnloadRandomSequence(sequence []int32) { + unloadRandomSequence(unsafe.SliceData(sequence)) +} + +// TakeScreenshot - Takes a screenshot of current screen (filename extension defines format) +func TakeScreenshot(fileName string) { + takeScreenshot(fileName) +} + +// SetConfigFlags - Setup init configuration flags (view FLAGS) +func SetConfigFlags(flags uint32) { + setConfigFlags(flags) +} + +// OpenURL - Open URL with default system browser (if available) +func OpenURL(url string) { + openURL(url) +} + +// TraceLog - Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) +func TraceLog(logLevel TraceLogLevel, text string, args ...any) { + traceLog(int32(logLevel), text, args...) +} + +// SetTraceLogLevel - Set the current threshold (minimum) log level +func SetTraceLogLevel(logLevel TraceLogLevel) { + setTraceLogLevel(int32(logLevel)) +} + +// MemAlloc - Internal memory allocator +func MemAlloc(size uint32) unsafe.Pointer { + return memAlloc(size) +} + +// MemRealloc - Internal memory reallocator +func MemRealloc(ptr unsafe.Pointer, size uint32) unsafe.Pointer { + return memRealloc(ptr, size) +} + +// MemFree - Internal memory free +func MemFree(ptr unsafe.Pointer) { + memFree(ptr) +} + +// SetTraceLogCallback - Set custom trace log +// +// REVIEW NEEDED! 2023-11-15 JupiterRider: The argument list paramter isn't impelmented yet. +func SetTraceLogCallback(fn TraceLogCallbackFun) { + setTraceLogCallback(traceLogCallbackWrapper(fn)) +} + +// IsFileDropped - Check if a file has been dropped into window +// +// REVIEW NEEDED! 2023-11-12 JupiterRider: This funtions always returns true. +func IsFileDropped() bool { + return isFileDropped() +} + +// LoadDroppedFiles - Load dropped filepaths +func LoadDroppedFiles() []string { + var filePathList = struct { + capacity uint32 + count uint32 + paths **byte + }{} + loadDroppedFiles(uintptr(unsafe.Pointer(&filePathList))) + defer unloadDroppedFiles(uintptr(unsafe.Pointer(&filePathList))) + + tmpslice := (*[1 << 24]*byte)(unsafe.Pointer(filePathList.paths))[:filePathList.count:filePathList.count] + + gostrings := make([]string, filePathList.count) + for i, s := range tmpslice { + gostrings[i] = func(p *byte) string { + if p == nil || *p == 0 { + return "" + } + + n := 0 + for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ { + ptr = unsafe.Pointer(uintptr(ptr) + 1) + } + + return string(unsafe.Slice(p, n)) + }(s) + } + + return gostrings +} + +// UnloadDroppedFiles - Unload dropped filepaths +func UnloadDroppedFiles() {} + +// LoadAutomationEventList - Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS +func LoadAutomationEventList(fileName string) AutomationEventList { + var automationEventList AutomationEventList + loadAutomationEventList(uintptr(unsafe.Pointer(&automationEventList)), fileName) + return automationEventList +} + +// UnloadAutomationEventList - Unload automation events list from file +func UnloadAutomationEventList(list *AutomationEventList) { + unloadAutomationEventList(uintptr(unsafe.Pointer(&list))) +} + +// ExportAutomationEventList - Export automation events list as text file +func ExportAutomationEventList(list AutomationEventList, fileName string) bool { + return exportAutomationEventList(uintptr(unsafe.Pointer(&list)), fileName) +} + +// SetAutomationEventList - Set automation event list to record to +func SetAutomationEventList(list *AutomationEventList) { + setAutomationEventList(uintptr(unsafe.Pointer(&list))) +} + +// SetAutomationEventBaseFrame - Set automation event internal base frame to start recording +func SetAutomationEventBaseFrame(frame int) { + setAutomationEventBaseFrame(int32(frame)) +} + +// StartAutomationEventRecording - Start recording automation events (AutomationEventList must be set) +func StartAutomationEventRecording() { + startAutomationEventRecording() +} + +// StopAutomationEventRecording - Stop recording automation events +func StopAutomationEventRecording() { + stopAutomationEventRecording() +} + +// PlayAutomationEvent - Play a recorded automation event +func PlayAutomationEvent(event AutomationEvent) { + playAutomationEvent(uintptr(unsafe.Pointer(&event))) +} + +// IsKeyPressed - Check if a key has been pressed once +func IsKeyPressed(key int32) bool { + return isKeyPressed(key) +} + +// IsKeyPressedRepeat - Check if a key has been pressed again (Only PLATFORM_DESKTOP) +func IsKeyPressedRepeat(key int32) bool { + return isKeyPressedRepeat(key) +} + +// IsKeyDown - Check if a key is being pressed +func IsKeyDown(key int32) bool { + return isKeyDown(key) +} + +// IsKeyReleased - Check if a key has been released once +func IsKeyReleased(key int32) bool { + return isKeyReleased(key) +} + +// IsKeyUp - Check if a key is NOT being pressed +func IsKeyUp(key int32) bool { + return isKeyUp(key) +} + +// GetKeyPressed - Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty +func GetKeyPressed() int32 { + return getKeyPressed() +} + +// GetCharPressed - Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty +func GetCharPressed() int32 { + return getCharPressed() +} + +// SetExitKey - Set a custom key to exit program (default is ESC) +func SetExitKey(key int32) { + setExitKey(key) +} + +// IsGamepadAvailable - Check if a gamepad is available +func IsGamepadAvailable(gamepad int32) bool { + return isGamepadAvailable(gamepad) +} + +// GetGamepadName - Get gamepad internal name id +func GetGamepadName(gamepad int32) string { + return getGamepadName(gamepad) +} + +// IsGamepadButtonPressed - Check if a gamepad button has been pressed once +func IsGamepadButtonPressed(gamepad int32, button int32) bool { + return isGamepadButtonPressed(gamepad, button) +} + +// IsGamepadButtonDown - Check if a gamepad button is being pressed +func IsGamepadButtonDown(gamepad int32, button int32) bool { + return isGamepadButtonDown(gamepad, button) +} + +// IsGamepadButtonReleased - Check if a gamepad button has been released once +func IsGamepadButtonReleased(gamepad int32, button int32) bool { + return isGamepadButtonReleased(gamepad, button) +} + +// IsGamepadButtonUp - Check if a gamepad button is NOT being pressed +func IsGamepadButtonUp(gamepad int32, button int32) bool { + return isGamepadButtonUp(gamepad, button) +} + +// GetGamepadButtonPressed - Get the last gamepad button pressed +func GetGamepadButtonPressed() int32 { + return getGamepadButtonPressed() +} + +// GetGamepadAxisCount - Get gamepad axis count for a gamepad +func GetGamepadAxisCount(gamepad int32) int32 { + return getGamepadAxisCount(gamepad) +} + +// GetGamepadAxisMovement - Get axis movement value for a gamepad axis +func GetGamepadAxisMovement(gamepad int32, axis int32) float32 { + return getGamepadAxisMovement(gamepad, axis) +} + +// SetGamepadMappings - Set internal gamepad mappings (SDL_GameControllerDB) +func SetGamepadMappings(mappings string) int32 { + return setGamepadMappings(mappings) +} + +// IsMouseButtonPressed - Check if a mouse button has been pressed once +func IsMouseButtonPressed(button int32) bool { + return isMouseButtonPressed(button) +} + +// IsMouseButtonDown - Check if a mouse button is being pressed +func IsMouseButtonDown(button int32) bool { + return isMouseButtonDown(button) +} + +// IsMouseButtonReleased - Check if a mouse button has been released once +func IsMouseButtonReleased(button int32) bool { + return isMouseButtonReleased(button) +} + +// IsMouseButtonUp - Check if a mouse button is NOT being pressed +func IsMouseButtonUp(button int32) bool { + return isMouseButtonUp(button) +} + +// GetMouseX - Get mouse position X +func GetMouseX() int32 { + return getMouseX() +} + +// GetMouseY - Get mouse position Y +func GetMouseY() int32 { + return getMouseY() +} + +// GetMousePosition - Get mouse position XY +func GetMousePosition() Vector2 { + ret := getMousePosition() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetMouseDelta - Get mouse delta between frames +func GetMouseDelta() Vector2 { + ret := getMouseDelta() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// SetMousePosition - Set mouse position XY +func SetMousePosition(x int32, y int32) { + setMousePosition(x, y) +} + +// SetMouseOffset - Set mouse offset +func SetMouseOffset(offsetX int32, offsetY int32) { + setMouseOffset(offsetX, offsetY) +} + +// SetMouseScale - Set mouse scaling +func SetMouseScale(scaleX float32, scaleY float32) { + setMouseScale(scaleX, scaleY) +} + +// GetMouseWheelMove - Get mouse wheel movement for X or Y, whichever is larger +func GetMouseWheelMove() float32 { + return getMouseWheelMove() +} + +// GetMouseWheelMoveV - Get mouse wheel movement for both X and Y +func GetMouseWheelMoveV() Vector2 { + ret := getMouseWheelMoveV() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// SetMouseCursor - Set mouse cursor +func SetMouseCursor(cursor int32) { + setMouseCursor(cursor) +} + +// GetTouchX - Get touch position X for touch point 0 (relative to screen size) +func GetTouchX() int32 { + return getTouchX() +} + +// GetTouchY - Get touch position Y for touch point 0 (relative to screen size) +func GetTouchY() int32 { + return getTouchY() +} + +// GetTouchPosition - Get touch position XY for a touch point index (relative to screen size) +func GetTouchPosition(index int32) Vector2 { + ret := getTouchPosition(index) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetTouchPointId - Get touch point identifier for given index +func GetTouchPointId(index int32) int32 { + return getTouchPointId(index) +} + +// GetTouchPointCount - Get number of touch points +func GetTouchPointCount() int32 { + return getTouchPointCount() +} + +// SetGesturesEnabled - Enable a set of gestures using flags +func SetGesturesEnabled(flags uint32) { + setGesturesEnabled(flags) +} + +// IsGestureDetected - Check if a gesture have been detected +func IsGestureDetected(gesture Gestures) bool { + return isGestureDetected(uint32(gesture)) +} + +// GetGestureDetected - Get latest detected gesture +func GetGestureDetected() Gestures { + return Gestures(getGestureDetected()) +} + +// GetGestureHoldDuration - Get gesture hold time in milliseconds +func GetGestureHoldDuration() float32 { + return getGestureHoldDuration() +} + +// GetGestureDragVector - Get gesture drag vector +func GetGestureDragVector() Vector2 { + ret := getGestureDragVector() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetGestureDragAngle - Get gesture drag angle +func GetGestureDragAngle() float32 { + return getGestureDragAngle() +} + +// GetGesturePinchVector - Get gesture pinch delta +func GetGesturePinchVector() Vector2 { + ret := getGesturePinchVector() + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetGesturePinchAngle - Get gesture pinch angle +func GetGesturePinchAngle() float32 { + return getGesturePinchAngle() +} + +// SetShapesTexture - Set texture and rectangle to be used on shapes drawing +func SetShapesTexture(texture Texture2D, source Rectangle) { + setShapesTexture(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&source))) +} + +// DrawPixel - Draw a pixel +func DrawPixel(posX int32, posY int32, col color.RGBA) { + drawPixel(posX, posY, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPixelV - Draw a pixel (Vector version) +func DrawPixelV(position Vector2, col color.RGBA) { + drawPixelV(*(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawLine - Draw a line +func DrawLine(startPosX int32, startPosY int32, endPosX int32, endPosY int32, col color.RGBA) { + drawLine(startPosX, startPosY, endPosX, endPosY, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawLineV - Draw a line (using gl lines) +func DrawLineV(startPos Vector2, endPos Vector2, col color.RGBA) { + drawLineV(*(*uintptr)(unsafe.Pointer(&startPos)), *(*uintptr)(unsafe.Pointer(&endPos)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawLineEx - Draw a line (using triangles/quads) +func DrawLineEx(startPos Vector2, endPos Vector2, thick float32, col color.RGBA) { + drawLineEx(*(*uintptr)(unsafe.Pointer(&startPos)), *(*uintptr)(unsafe.Pointer(&endPos)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawLineStrip - Draw lines sequence (using gl lines) +func DrawLineStrip(points []Vector2, col color.RGBA) { + pointCount := int32(len(points)) + drawLineStrip((unsafe.SliceData(points)), pointCount, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawLineBezier - Draw line segment cubic-bezier in-out interpolation +func DrawLineBezier(startPos Vector2, endPos Vector2, thick float32, col color.RGBA) { + drawLineBezier(*(*uintptr)(unsafe.Pointer(&startPos)), *(*uintptr)(unsafe.Pointer(&endPos)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircle - Draw a color-filled circle +func DrawCircle(centerX int32, centerY int32, radius float32, col color.RGBA) { + drawCircle(centerX, centerY, radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircleSector - Draw a piece of a circle +func DrawCircleSector(center Vector2, radius float32, startAngle float32, endAngle float32, segments int32, col color.RGBA) { + drawCircleSector(*(*uintptr)(unsafe.Pointer(¢er)), radius, startAngle, endAngle, segments, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircleSectorLines - Draw circle sector outline +func DrawCircleSectorLines(center Vector2, radius float32, startAngle float32, endAngle float32, segments int32, col color.RGBA) { + drawCircleSectorLines(*(*uintptr)(unsafe.Pointer(¢er)), radius, startAngle, endAngle, segments, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircleGradient - Draw a gradient-filled circle +func DrawCircleGradient(centerX int32, centerY int32, radius float32, color1 color.RGBA, color2 color.RGBA) { + drawCircleGradient(centerX, centerY, radius, *(*uintptr)(unsafe.Pointer(&color1)), *(*uintptr)(unsafe.Pointer(&color2))) +} + +// DrawCircleV - Draw a color-filled circle (Vector version) +func DrawCircleV(center Vector2, radius float32, col color.RGBA) { + drawCircleV(*(*uintptr)(unsafe.Pointer(¢er)), radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircleLines - Draw circle outline +func DrawCircleLines(centerX int32, centerY int32, radius float32, col color.RGBA) { + drawCircleLines(centerX, centerY, radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircleLinesV - Draw circle outline (Vector version) +func DrawCircleLinesV(center Vector2, radius float32, col color.RGBA) { + drawCircleLinesV(*(*uintptr)(unsafe.Pointer(¢er)), radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawEllipse - Draw ellipse +func DrawEllipse(centerX int32, centerY int32, radiusH float32, radiusV float32, col color.RGBA) { + drawEllipse(centerX, centerY, radiusH, radiusV, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawEllipseLines - Draw ellipse outline +func DrawEllipseLines(centerX int32, centerY int32, radiusH float32, radiusV float32, col color.RGBA) { + drawEllipseLines(centerX, centerY, radiusH, radiusV, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRing - Draw ring +func DrawRing(center Vector2, innerRadius float32, outerRadius float32, startAngle float32, endAngle float32, segments int32, col color.RGBA) { + drawRing(*(*uintptr)(unsafe.Pointer(¢er)), innerRadius, outerRadius, startAngle, endAngle, segments, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRingLines - Draw ring outline +func DrawRingLines(center Vector2, innerRadius float32, outerRadius float32, startAngle float32, endAngle float32, segments int32, col color.RGBA) { + drawRingLines(*(*uintptr)(unsafe.Pointer(¢er)), innerRadius, outerRadius, startAngle, endAngle, segments, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangle - Draw a color-filled rectangle +func DrawRectangle(posX int32, posY int32, width int32, height int32, col color.RGBA) { + drawRectangle(posX, posY, width, height, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleV - Draw a color-filled rectangle (Vector version) +func DrawRectangleV(position Vector2, size Vector2, col color.RGBA) { + drawRectangleV(*(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleRec - Draw a color-filled rectangle +func DrawRectangleRec(rec Rectangle, col color.RGBA) { + drawRectangleRec(uintptr(unsafe.Pointer(&rec)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectanglePro - Draw a color-filled rectangle with pro parameters +func DrawRectanglePro(rec Rectangle, origin Vector2, rotation float32, col color.RGBA) { + drawRectanglePro(uintptr(unsafe.Pointer(&rec)), *(*uintptr)(unsafe.Pointer(&origin)), rotation, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleGradientV - Draw a vertical-gradient-filled rectangle +func DrawRectangleGradientV(posX int32, posY int32, width int32, height int32, color1 color.RGBA, color2 color.RGBA) { + drawRectangleGradientV(posX, posY, width, height, *(*uintptr)(unsafe.Pointer(&color1)), *(*uintptr)(unsafe.Pointer(&color2))) +} + +// DrawRectangleGradientH - Draw a horizontal-gradient-filled rectangle +func DrawRectangleGradientH(posX int32, posY int32, width int32, height int32, color1 color.RGBA, color2 color.RGBA) { + drawRectangleGradientH(posX, posY, width, height, *(*uintptr)(unsafe.Pointer(&color1)), *(*uintptr)(unsafe.Pointer(&color2))) +} + +// DrawRectangleGradientEx - Draw a gradient-filled rectangle with custom vertex colors +func DrawRectangleGradientEx(rec Rectangle, col1 color.RGBA, col2 color.RGBA, col3 color.RGBA, col4 color.RGBA) { + drawRectangleGradientEx(uintptr(unsafe.Pointer(&rec)), *(*uintptr)(unsafe.Pointer(&col1)), *(*uintptr)(unsafe.Pointer(&col2)), *(*uintptr)(unsafe.Pointer(&col3)), *(*uintptr)(unsafe.Pointer(&col4))) +} + +// DrawRectangleLines - Draw rectangle outline +func DrawRectangleLines(posX int32, posY int32, width int32, height int32, col color.RGBA) { + drawRectangleLines(posX, posY, width, height, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleLinesEx - Draw rectangle outline with extended parameters +func DrawRectangleLinesEx(rec Rectangle, lineThick float32, col color.RGBA) { + drawRectangleLinesEx(uintptr(unsafe.Pointer(&rec)), lineThick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleRounded - Draw rectangle with rounded edges +func DrawRectangleRounded(rec Rectangle, roundness float32, segments int32, col color.RGBA) { + drawRectangleRounded(uintptr(unsafe.Pointer(&rec)), roundness, segments, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRectangleRoundedLines - Draw rectangle with rounded edges outline +func DrawRectangleRoundedLines(rec Rectangle, roundness float32, segments float32, lineThick float32, col color.RGBA) { + drawRectangleRoundedLines(uintptr(unsafe.Pointer(&rec)), roundness, int32(segments), lineThick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangle - Draw a color-filled triangle (vertex in counter-clockwise order!) +func DrawTriangle(v1 Vector2, v2 Vector2, v3 Vector2, col color.RGBA) { + drawTriangle(*(*uintptr)(unsafe.Pointer(&v1)), *(*uintptr)(unsafe.Pointer(&v2)), *(*uintptr)(unsafe.Pointer(&v3)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangleLines - Draw triangle outline (vertex in counter-clockwise order!) +func DrawTriangleLines(v1 Vector2, v2 Vector2, v3 Vector2, col color.RGBA) { + drawTriangleLines(*(*uintptr)(unsafe.Pointer(&v1)), *(*uintptr)(unsafe.Pointer(&v2)), *(*uintptr)(unsafe.Pointer(&v3)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangleFan - Draw a triangle fan defined by points (first vertex is the center) +func DrawTriangleFan(points []Vector2, col color.RGBA) { + pointCount := int32(len(points)) + drawTriangleFan(unsafe.SliceData(points), pointCount, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangleStrip - Draw a triangle strip defined by points +func DrawTriangleStrip(points []Vector2, col color.RGBA) { + pointCount := int32(len(points)) + drawTriangleStrip(unsafe.SliceData(points), pointCount, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPoly - Draw a regular polygon (Vector version) +func DrawPoly(center Vector2, sides int32, radius float32, rotation float32, col color.RGBA) { + drawPoly(*(*uintptr)(unsafe.Pointer(¢er)), sides, radius, rotation, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPolyLines - Draw a polygon outline of n sides +func DrawPolyLines(center Vector2, sides int32, radius float32, rotation float32, col color.RGBA) { + drawPolyLines(*(*uintptr)(unsafe.Pointer(¢er)), sides, radius, rotation, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPolyLinesEx - Draw a polygon outline of n sides with extended parameters +func DrawPolyLinesEx(center Vector2, sides int32, radius float32, rotation float32, lineThick float32, col color.RGBA) { + drawPolyLinesEx(*(*uintptr)(unsafe.Pointer(¢er)), sides, radius, rotation, lineThick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineLinear - Draw spline: Linear, minimum 2 points +func DrawSplineLinear(points []Vector2, thick float32, col color.RGBA) { + pointCount := int32(len(points)) + drawSplineLinear(unsafe.SliceData(points), pointCount, thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineBasis - Draw spline: B-Spline, minimum 4 points +func DrawSplineBasis(points []Vector2, thick float32, col color.RGBA) { + pointCount := int32(len(points)) + drawSplineBasis(unsafe.SliceData(points), pointCount, thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineCatmullRom - Draw spline: Catmull-Rom, minimum 4 points +func DrawSplineCatmullRom(points []Vector2, thick float32, col color.RGBA) { + pointCount := int32(len(points)) + drawSplineCatmullRom(unsafe.SliceData(points), pointCount, thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineBezierQuadratic - Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...] +func DrawSplineBezierQuadratic(points []Vector2, thick float32, col color.RGBA) { + pointCount := int32(len(points)) + drawSplineBezierQuadratic(unsafe.SliceData(points), pointCount, thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineBezierCubic - Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...] +func DrawSplineBezierCubic(points []Vector2, thick float32, col color.RGBA) { + pointCount := int32(len(points)) + drawSplineBezierCubic(unsafe.SliceData(points), pointCount, thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineSegmentLinear - Draw spline segment: Linear, 2 points +func DrawSplineSegmentLinear(p1 Vector2, p2 Vector2, thick float32, col color.RGBA) { + drawSplineSegmentLinear(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineSegmentBasis - Draw spline segment: B-Spline, 4 points +func DrawSplineSegmentBasis(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, thick float32, col color.RGBA) { + drawSplineSegmentBasis(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), *(*uintptr)(unsafe.Pointer(&p3)), *(*uintptr)(unsafe.Pointer(&p4)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineSegmentCatmullRom - Draw spline segment: Catmull-Rom, 4 points +func DrawSplineSegmentCatmullRom(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, thick float32, col color.RGBA) { + drawSplineSegmentCatmullRom(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), *(*uintptr)(unsafe.Pointer(&p3)), *(*uintptr)(unsafe.Pointer(&p4)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineSegmentBezierQuadratic - Draw spline segment: Quadratic Bezier, 2 points, 1 control point +func DrawSplineSegmentBezierQuadratic(p1 Vector2, c2 Vector2, p3 Vector2, thick float32, col color.RGBA) { + drawSplineSegmentBezierQuadratic(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&c2)), *(*uintptr)(unsafe.Pointer(&p3)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSplineSegmentBezierCubic - Draw spline segment: Cubic Bezier, 2 points, 2 control points +func DrawSplineSegmentBezierCubic(p1 Vector2, c2 Vector2, c3 Vector2, p4 Vector2, thick float32, col color.RGBA) { + drawSplineSegmentBezierCubic(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&c2)), *(*uintptr)(unsafe.Pointer(&c3)), *(*uintptr)(unsafe.Pointer(&p4)), thick, *(*uintptr)(unsafe.Pointer(&col))) +} + +// GetSplinePointLinear - Get (evaluate) spline point: Linear +func GetSplinePointLinear(startPos Vector2, endPos Vector2, t float32) Vector2 { + ret := getSplinePointLinear(*(*uintptr)(unsafe.Pointer(&startPos)), *(*uintptr)(unsafe.Pointer(&endPos)), t) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetSplinePointBasis - Get (evaluate) spline point: B-Spline +func GetSplinePointBasis(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, t float32) Vector2 { + ret := getSplinePointBasis(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), *(*uintptr)(unsafe.Pointer(&p3)), *(*uintptr)(unsafe.Pointer(&p4)), t) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetSplinePointCatmullRom - Get (evaluate) spline point: Catmull-Rom +func GetSplinePointCatmullRom(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, t float32) Vector2 { + ret := getSplinePointCatmullRom(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), *(*uintptr)(unsafe.Pointer(&p3)), *(*uintptr)(unsafe.Pointer(&p4)), t) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetSplinePointBezierQuad - Get (evaluate) spline point: Quadratic Bezier +func GetSplinePointBezierQuad(p1 Vector2, c2 Vector2, p3 Vector2, t float32) Vector2 { + ret := getSplinePointBezierQuad(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&c2)), *(*uintptr)(unsafe.Pointer(&p3)), t) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetSplinePointBezierCubic - Get (evaluate) spline point: Cubic Bezier +func GetSplinePointBezierCubic(p1 Vector2, c2 Vector2, c3 Vector2, p4 Vector2, t float32) Vector2 { + ret := getSplinePointBezierCubic(*(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&c2)), *(*uintptr)(unsafe.Pointer(&c3)), *(*uintptr)(unsafe.Pointer(&p4)), t) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// CheckCollisionRecs - Check collision between two rectangles +func CheckCollisionRecs(rec1 Rectangle, rec2 Rectangle) bool { + return checkCollisionRecs(uintptr(unsafe.Pointer(&rec1)), uintptr(unsafe.Pointer(&rec2))) +} + +// CheckCollisionCircles - Check collision between two circles +func CheckCollisionCircles(center1 Vector2, radius1 float32, center2 Vector2, radius2 float32) bool { + return checkCollisionCircles(*(*uintptr)(unsafe.Pointer(¢er1)), radius1, *(*uintptr)(unsafe.Pointer(¢er2)), radius2) +} + +// CheckCollisionCircleRec - Check collision between circle and rectangle +func CheckCollisionCircleRec(center Vector2, radius float32, rec Rectangle) bool { + return checkCollisionCircleRec(*(*uintptr)(unsafe.Pointer(¢er)), radius, uintptr(unsafe.Pointer(&rec))) +} + +// CheckCollisionPointRec - Check if point is inside rectangle +func CheckCollisionPointRec(point Vector2, rec Rectangle) bool { + return checkCollisionPointRec(*(*uintptr)(unsafe.Pointer(&point)), uintptr(unsafe.Pointer(&rec))) +} + +// CheckCollisionPointCircle - Check if point is inside circle +func CheckCollisionPointCircle(point Vector2, center Vector2, radius float32) bool { + return checkCollisionPointCircle(*(*uintptr)(unsafe.Pointer(&point)), *(*uintptr)(unsafe.Pointer(¢er)), radius) +} + +// CheckCollisionPointTriangle - Check if point is inside a triangle +func CheckCollisionPointTriangle(point Vector2, p1 Vector2, p2 Vector2, p3 Vector2) bool { + return checkCollisionPointTriangle(*(*uintptr)(unsafe.Pointer(&point)), *(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), *(*uintptr)(unsafe.Pointer(&p3))) +} + +// CheckCollisionPointPoly - Check if point is within a polygon described by array of vertices +func CheckCollisionPointPoly(point Vector2, points []Vector2) bool { + pointCount := int32(len(points)) + return checkCollisionPointPoly(*(*uintptr)(unsafe.Pointer(&point)), unsafe.SliceData(points), pointCount) +} + +// CheckCollisionLines - Check the collision between two lines defined by two points each, returns collision point by reference +func CheckCollisionLines(startPos1 Vector2, endPos1 Vector2, startPos2 Vector2, endPos2 Vector2, collisionPoint *Vector2) bool { + return checkCollisionLines(*(*uintptr)(unsafe.Pointer(&startPos1)), *(*uintptr)(unsafe.Pointer(&endPos1)), *(*uintptr)(unsafe.Pointer(&startPos2)), *(*uintptr)(unsafe.Pointer(&endPos2)), collisionPoint) +} + +// CheckCollisionPointLine - Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] +func CheckCollisionPointLine(point Vector2, p1 Vector2, p2 Vector2, threshold int32) bool { + return checkCollisionPointLine(*(*uintptr)(unsafe.Pointer(&point)), *(*uintptr)(unsafe.Pointer(&p1)), *(*uintptr)(unsafe.Pointer(&p2)), threshold) +} + +// GetCollisionRec - Get collision rectangle for two rectangles collision +func GetCollisionRec(rec1 Rectangle, rec2 Rectangle) Rectangle { + var rec Rectangle + getCollisionRec(uintptr(unsafe.Pointer(&rec)), uintptr(unsafe.Pointer(&rec1)), uintptr(unsafe.Pointer(&rec2))) + return rec +} + +// LoadImage - Load image from file into CPU memory (RAM) +func LoadImage(fileName string) *Image { + var img Image + loadImage(uintptr(unsafe.Pointer(&img)), fileName) + return &img +} + +// LoadImageRaw - Load image from RAW file data +func LoadImageRaw(fileName string, width int32, height int32, format PixelFormat, headerSize int32) *Image { + var img Image + loadImageRaw(uintptr(unsafe.Pointer(&img)), fileName, width, height, int32(format), headerSize) + return &img +} + +// LoadImageSvg - Load image from SVG file data or string with specified size +func LoadImageSvg(fileNameOrString string, width int32, height int32) *Image { + var img Image + loadImageSvg(uintptr(unsafe.Pointer(&img)), fileNameOrString, width, height) + return &img +} + +// LoadImageAnim - Load image sequence from file (frames appended to image.data) +func LoadImageAnim(fileName string, frames []int32) *Image { + var img Image + loadImageAnim(uintptr(unsafe.Pointer(&img)), fileName, frames) + return &img +} + +// LoadImageFromMemory - Load image from memory buffer, fileType refers to extension: i.e. '.png' +func LoadImageFromMemory(fileType string, fileData []byte, dataSize int32) *Image { + var img Image + loadImageFromMemory(uintptr(unsafe.Pointer(&img)), fileType, fileData, dataSize) + return &img +} + +// LoadImageFromTexture - Load image from GPU texture data +func LoadImageFromTexture(texture Texture2D) *Image { + var img Image + loadImageFromTexture(uintptr(unsafe.Pointer(&img)), uintptr(unsafe.Pointer(&texture))) + return &img +} + +// LoadImageFromScreen - Load image from screen buffer and (screenshot) +func LoadImageFromScreen() *Image { + var img Image + loadImageFromScreen(uintptr(unsafe.Pointer(&img))) + return &img +} + +// IsImageReady - Check if an image is ready +func IsImageReady(image *Image) bool { + return isImageReady(uintptr(unsafe.Pointer(image))) +} + +// UnloadImage - Unload image from CPU memory (RAM) +func UnloadImage(image *Image) { + unloadImage(uintptr(unsafe.Pointer(image))) +} + +// ExportImage - Export image data to file, returns true on success +func ExportImage(image Image, fileName string) bool { + return exportImage(uintptr(unsafe.Pointer(&image)), fileName) +} + +// ExportImageToMemory - Export image to memory buffer +func ExportImageToMemory(image Image, fileType string) []byte { + var fileSize int32 + ret := exportImageToMemory(uintptr(unsafe.Pointer(&image)), fileType, &fileSize) + return unsafe.Slice(ret, fileSize) +} + +// GenImageColor - Generate image: plain color +func GenImageColor(width int, height int, col color.RGBA) *Image { + var image Image + genImageColor(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), *(*uintptr)(unsafe.Pointer(&col))) + return &image +} + +// GenImageGradientLinear - Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient +func GenImageGradientLinear(width int, height int, direction int, start color.RGBA, end color.RGBA) *Image { + var image Image + genImageGradientLinear(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), int32(direction), *(*uintptr)(unsafe.Pointer(&start)), *(*uintptr)(unsafe.Pointer(&end))) + return &image +} + +// GenImageGradientRadial - Generate image: radial gradient +func GenImageGradientRadial(width int, height int, density float32, inner color.RGBA, outer color.RGBA) *Image { + var image Image + genImageGradientRadial(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), density, *(*uintptr)(unsafe.Pointer(&inner)), *(*uintptr)(unsafe.Pointer(&outer))) + return &image +} + +// GenImageGradientSquare - Generate image: square gradient +func GenImageGradientSquare(width int, height int, density float32, inner color.RGBA, outer color.RGBA) *Image { + var image Image + genImageGradientSquare(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), density, *(*uintptr)(unsafe.Pointer(&inner)), *(*uintptr)(unsafe.Pointer(&outer))) + return &image +} + +// GenImageChecked - Generate image: checked +func GenImageChecked(width int, height int, checksX int, checksY int, col1 color.RGBA, col2 color.RGBA) *Image { + var image Image + genImageChecked(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), int32(checksX), int32(checksY), *(*uintptr)(unsafe.Pointer(&col1)), *(*uintptr)(unsafe.Pointer(&col2))) + return &image +} + +// GenImageWhiteNoise - Generate image: white noise +func GenImageWhiteNoise(width int, height int, factor float32) *Image { + var image Image + genImageWhiteNoise(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), factor) + return &image +} + +// GenImagePerlinNoise - Generate image: perlin noise +func GenImagePerlinNoise(width int, height int, offsetX int32, offsetY int32, scale float32) *Image { + var image Image + genImagePerlinNoise(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), offsetX, offsetY, scale) + return &image +} + +// GenImageCellular - Generate image: cellular algorithm, bigger tileSize means bigger cells +func GenImageCellular(width int, height int, tileSize int) *Image { + var image Image + genImageCellular(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), int32(tileSize)) + return &image +} + +// GenImageText - Generate image: grayscale image from text data +func GenImageText(width int, height int, text string) Image { + var image Image + genImageText(uintptr(unsafe.Pointer(&image)), int32(width), int32(height), text) + return image +} + +// ImageCopy - Create an image duplicate (useful for transformations) +func ImageCopy(image *Image) *Image { + var retImage Image + imageCopy(uintptr(unsafe.Pointer(&retImage)), uintptr(unsafe.Pointer(image))) + return &retImage +} + +// ImageFromImage - Create an image from another image piece +func ImageFromImage(image Image, rec Rectangle) Image { + var retImage Image + imageFromImage(uintptr(unsafe.Pointer(&retImage)), uintptr(unsafe.Pointer(&image)), uintptr(unsafe.Pointer(&rec))) + return retImage +} + +// ImageText - Create an image from text (default font) +func ImageText(text string, fontSize int32, col color.RGBA) Image { + var retImage Image + imageText(uintptr(unsafe.Pointer(&retImage)), text, fontSize, *(*uintptr)(unsafe.Pointer(&col))) + return retImage +} + +// ImageTextEx - Create an image from text (custom sprite font) +func ImageTextEx(font Font, text string, fontSize float32, spacing float32, tint color.RGBA) Image { + var retImage Image + imageTextEx(uintptr(unsafe.Pointer(&retImage)), uintptr(unsafe.Pointer(&font)), text, fontSize, spacing, *(*uintptr)(unsafe.Pointer(&tint))) + return retImage +} + +// ImageFormat - Convert image data to desired format +func ImageFormat(image *Image, newFormat PixelFormat) { + imageFormat(image, int32(newFormat)) +} + +// ImageToPOT - Convert image to POT (power-of-two) +func ImageToPOT(image *Image, fill color.RGBA) { + imageToPOT(image, *(*uintptr)(unsafe.Pointer(&fill))) +} + +// ImageCrop - Crop an image to a defined rectangle +func ImageCrop(image *Image, crop Rectangle) { + imageCrop(image, uintptr(unsafe.Pointer(&crop))) +} + +// ImageAlphaCrop - Crop image depending on alpha value +func ImageAlphaCrop(image *Image, threshold float32) { + imageAlphaCrop(image, threshold) +} + +// ImageAlphaClear - Clear alpha channel to desired color +func ImageAlphaClear(image *Image, col color.RGBA, threshold float32) { + imageAlphaClear(image, *(*uintptr)(unsafe.Pointer(&col)), threshold) +} + +// ImageAlphaMask - Apply alpha mask to image +func ImageAlphaMask(image *Image, alphaMask *Image) { + imageAlphaMask(image, uintptr(unsafe.Pointer(alphaMask))) +} + +// ImageAlphaPremultiply - Premultiply alpha channel +func ImageAlphaPremultiply(image *Image) { + imageAlphaPremultiply(image) +} + +// ImageBlurGaussian - Apply Gaussian blur using a box blur approximation +func ImageBlurGaussian(image *Image, blurSize int32) { + imageBlurGaussian(image, blurSize) +} + +// ImageResize - Resize image (Bicubic scaling algorithm) +func ImageResize(image *Image, newWidth int32, newHeight int32) { + imageResize(image, newWidth, newHeight) +} + +// ImageResizeNN - Resize image (Nearest-Neighbor scaling algorithm) +func ImageResizeNN(image *Image, newWidth int32, newHeight int32) { + imageResizeNN(image, newWidth, newHeight) +} + +// ImageResizeCanvas - Resize canvas and fill with color +func ImageResizeCanvas(image *Image, newWidth int32, newHeight int32, offsetX int32, offsetY int32, fill color.RGBA) { + imageResizeCanvas(image, newWidth, newHeight, offsetX, offsetY, *(*uintptr)(unsafe.Pointer(&fill))) +} + +// ImageMipmaps - Compute all mipmap levels for a provided image +func ImageMipmaps(image *Image) { + imageMipmaps(image) +} + +// ImageDither - Dither image data to 16bpp or lower (Floyd-Steinberg dithering) +func ImageDither(image *Image, rBpp int32, gBpp int32, bBpp int32, aBpp int32) { + imageDither(image, rBpp, gBpp, bBpp, aBpp) +} + +// ImageFlipVertical - Flip image vertically +func ImageFlipVertical(image *Image) { + imageFlipVertical(image) +} + +// ImageFlipHorizontal - Flip image horizontally +func ImageFlipHorizontal(image *Image) { + imageFlipHorizontal(image) +} + +// ImageRotate - Rotate image by input angle in degrees (-359 to 359) +func ImageRotate(image *Image, degrees int32) { + imageRotate(image, degrees) +} + +// ImageRotateCW - Rotate image clockwise 90deg +func ImageRotateCW(image *Image) { + imageRotateCW(image) +} + +// ImageRotateCCW - Rotate image counter-clockwise 90deg +func ImageRotateCCW(image *Image) { + imageRotateCCW(image) +} + +// ImageColorTint - Modify image color: tint +func ImageColorTint(image *Image, col color.RGBA) { + imageColorTint(image, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageColorInvert - Modify image color: invert +func ImageColorInvert(image *Image) { + imageColorInvert(image) +} + +// ImageColorGrayscale - Modify image color: grayscale +func ImageColorGrayscale(image *Image) { + imageColorGrayscale(image) +} + +// ImageColorContrast - Modify image color: contrast (-100 to 100) +func ImageColorContrast(image *Image, contrast float32) { + imageColorContrast(image, contrast) +} + +// ImageColorBrightness - Modify image color: brightness (-255 to 255) +func ImageColorBrightness(image *Image, brightness int32) { + imageColorBrightness(image, brightness) +} + +// ImageColorReplace - Modify image color: replace color +func ImageColorReplace(image *Image, col color.RGBA, replace color.RGBA) { + imageColorReplace(image, *(*uintptr)(unsafe.Pointer(&col)), *(*uintptr)(unsafe.Pointer(&replace))) +} + +// LoadImageColors - Load color data from image as a Color array (RGBA - 32bit) +// +// NOTE: Memory allocated should be freed using UnloadImageColors() +func LoadImageColors(image *Image) []color.RGBA { + ret := loadImageColors(uintptr(unsafe.Pointer(image))) + return unsafe.Slice(ret, image.Width*image.Height) +} + +// LoadImagePalette - Load colors palette from image as a Color array (RGBA - 32bit) +// +// NOTE: Memory allocated should be freed using UnloadImagePalette() +func LoadImagePalette(image Image, maxPaletteSize int32) []color.RGBA { + var colorCount int32 + ret := loadImagePalette(uintptr(unsafe.Pointer(&image)), maxPaletteSize, &colorCount) + return unsafe.Slice(ret, colorCount) +} + +// UnloadImageColors - Unload color data loaded with LoadImageColors() +func UnloadImageColors(colors []color.RGBA) { + unloadImageColors(unsafe.SliceData(colors)) +} + +// UnloadImagePalette - Unload colors palette loaded with LoadImagePalette() +func UnloadImagePalette(colors []color.RGBA) { + unloadImagePalette(unsafe.SliceData(colors)) +} + +// GetImageAlphaBorder - Get image alpha border rectangle +func GetImageAlphaBorder(image Image, threshold float32) Rectangle { + var rec Rectangle + getImageAlphaBorder(uintptr(unsafe.Pointer(&rec)), uintptr(unsafe.Pointer(&image)), threshold) + return rec +} + +// GetImageColor - Get image pixel color at (x, y) position +func GetImageColor(image Image, x int32, y int32) color.RGBA { + ret := getImageColor(uintptr(unsafe.Pointer(&image)), x, y) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ImageClearBackground - Clear image background with given color +func ImageClearBackground(dst *Image, col color.RGBA) { + imageClearBackground(dst, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawPixel - Draw pixel within an image +func ImageDrawPixel(dst *Image, posX int32, posY int32, col color.RGBA) { + imageDrawPixel(dst, posX, posY, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawPixelV - Draw pixel within an image (Vector version) +func ImageDrawPixelV(dst *Image, position Vector2, col color.RGBA) { + imageDrawPixelV(dst, *(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawLine - Draw line within an image +func ImageDrawLine(dst *Image, startPosX int32, startPosY int32, endPosX int32, endPosY int32, col color.RGBA) { + imageDrawLine(dst, startPosX, startPosY, endPosX, endPosY, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawLineV - Draw line within an image (Vector version) +func ImageDrawLineV(dst *Image, start Vector2, end Vector2, col color.RGBA) { + imageDrawLineV(dst, *(*uintptr)(unsafe.Pointer(&start)), *(*uintptr)(unsafe.Pointer(&end)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawCircle - Draw a filled circle within an image +func ImageDrawCircle(dst *Image, centerX int32, centerY int32, radius int32, col color.RGBA) { + imageDrawCircle(dst, centerX, centerY, radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawCircleV - Draw a filled circle within an image (Vector version) +func ImageDrawCircleV(dst *Image, center Vector2, radius int32, col color.RGBA) { + imageDrawCircleV(dst, *(*uintptr)(unsafe.Pointer(¢er)), radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawCircleLines - Draw circle outline within an image +func ImageDrawCircleLines(dst *Image, centerX int32, centerY int32, radius int32, col color.RGBA) { + imageDrawCircleLines(dst, centerX, centerY, radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawCircleLinesV - Draw circle outline within an image (Vector version) +func ImageDrawCircleLinesV(dst *Image, center Vector2, radius int32, col color.RGBA) { + imageDrawCircleLinesV(dst, *(*uintptr)(unsafe.Pointer(¢er)), radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawRectangle - Draw rectangle within an image +func ImageDrawRectangle(dst *Image, posX int32, posY int32, width int32, height int32, col color.RGBA) { + imageDrawRectangle(dst, posX, posY, width, height, *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawRectangleV - Draw rectangle within an image (Vector version) +func ImageDrawRectangleV(dst *Image, position Vector2, size Vector2, col color.RGBA) { + imageDrawRectangleV(dst, *(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawRectangleRec - Draw rectangle within an image +func ImageDrawRectangleRec(dst *Image, rec Rectangle, col color.RGBA) { + imageDrawRectangleRec(dst, uintptr(unsafe.Pointer(&rec)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDrawRectangleLines - Draw rectangle lines within an image +func ImageDrawRectangleLines(dst *Image, rec Rectangle, thick int, col color.RGBA) { + imageDrawRectangleLines(dst, uintptr(unsafe.Pointer(&rec)), int32(thick), *(*uintptr)(unsafe.Pointer(&col))) +} + +// ImageDraw - Draw a source image within a destination image (tint applied to source) +func ImageDraw(dst *Image, src *Image, srcRec Rectangle, dstRec Rectangle, tint color.RGBA) { + imageDraw(dst, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(&srcRec)), uintptr(unsafe.Pointer(&dstRec)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// ImageDrawText - Draw text (using default font) within an image (destination) +func ImageDrawText(dst *Image, posX int32, posY int32, text string, fontSize int32, col color.RGBA) { + imageDrawText(dst, text, posX, posY, fontSize, *(*uintptr)(unsafe.Pointer(&col))) + +} + +// ImageDrawTextEx - Draw text (custom sprite font) within an image (destination) +func ImageDrawTextEx(dst *Image, position Vector2, font Font, text string, fontSize float32, spacing float32, tint color.RGBA) { + imageDrawTextEx(dst, uintptr(unsafe.Pointer(&font)), text, *(*uintptr)(unsafe.Pointer(&position)), fontSize, spacing, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// LoadTexture - Load texture from file into GPU memory (VRAM) +func LoadTexture(fileName string) Texture2D { + var texture Texture2D + loadTexture(uintptr(unsafe.Pointer(&texture)), fileName) + return texture +} + +// LoadTextureFromImage - Load texture from image data +func LoadTextureFromImage(image *Image) Texture2D { + var texture Texture2D + loadTextureFromImage(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(image))) + return texture +} + +// LoadTextureCubemap - Load cubemap from image, multiple image cubemap layouts supported +func LoadTextureCubemap(image Image, layout int32) Texture2D { + var texture Texture2D + loadTextureCubemap(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&image)), layout) + return texture +} + +// LoadRenderTexture - Load texture for rendering (framebuffer) +func LoadRenderTexture(width int32, height int32) RenderTexture2D { + var texture RenderTexture2D + loadRenderTexture(uintptr(unsafe.Pointer(&texture)), width, height) + return texture +} + +// IsTextureReady - Check if a texture is ready +func IsTextureReady(texture Texture2D) bool { + return isTextureReady(uintptr(unsafe.Pointer(&texture))) +} + +// UnloadTexture - Unload texture from GPU memory (VRAM) +func UnloadTexture(texture Texture2D) { + unloadTexture(uintptr(unsafe.Pointer(&texture))) +} + +// IsRenderTextureReady - Check if a render texture is ready +func IsRenderTextureReady(target RenderTexture2D) bool { + return isRenderTextureReady(uintptr(unsafe.Pointer(&target))) +} + +// UnloadRenderTexture - Unload render texture from GPU memory (VRAM) +func UnloadRenderTexture(target RenderTexture2D) { + unloadRenderTexture(uintptr(unsafe.Pointer(&target))) +} + +// UpdateTexture - Update GPU texture with new data +func UpdateTexture(texture Texture2D, pixels []color.RGBA) { + updateTexture(uintptr(unsafe.Pointer(&texture)), unsafe.SliceData(pixels)) +} + +// UpdateTextureRec - Update GPU texture rectangle with new data +func UpdateTextureRec(texture Texture2D, rec Rectangle, pixels []color.RGBA) { + updateTextureRec(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&rec)), unsafe.SliceData(pixels)) +} + +// GenTextureMipmaps - Generate GPU mipmaps for a texture +func GenTextureMipmaps(texture *Texture2D) { + genTextureMipmaps(texture) +} + +// SetTextureFilter - Set texture scaling filter mode +func SetTextureFilter(texture Texture2D, filter TextureFilterMode) { + setTextureFilter(uintptr(unsafe.Pointer(&texture)), int32(filter)) +} + +// SetTextureWrap - Set texture wrapping mode +func SetTextureWrap(texture Texture2D, wrap TextureWrapMode) { + setTextureWrap(uintptr(unsafe.Pointer(&texture)), int32(wrap)) +} + +// DrawTexture - Draw a Texture2D +func DrawTexture(texture Texture2D, posX int32, posY int32, tint color.RGBA) { + drawTexture(uintptr(unsafe.Pointer(&texture)), posX, posY, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextureV - Draw a Texture2D with position defined as Vector2 +func DrawTextureV(texture Texture2D, position Vector2, tint color.RGBA) { + drawTextureV(uintptr(unsafe.Pointer(&texture)), *(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextureEx - Draw a Texture2D with extended parameters +func DrawTextureEx(texture Texture2D, position Vector2, rotation float32, scale float32, tint color.RGBA) { + drawTextureEx(uintptr(unsafe.Pointer(&texture)), *(*uintptr)(unsafe.Pointer(&position)), rotation, scale, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextureRec - Draw a part of a texture defined by a rectangle +func DrawTextureRec(texture Texture2D, source Rectangle, position Vector2, tint color.RGBA) { + drawTextureRec(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&source)), *(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTexturePro - Draw a part of a texture defined by a rectangle with 'pro' parameters +func DrawTexturePro(texture Texture2D, source Rectangle, dest Rectangle, origin Vector2, rotation float32, tint color.RGBA) { + drawTexturePro(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&source)), uintptr(unsafe.Pointer(&dest)), *(*uintptr)(unsafe.Pointer(&origin)), rotation, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextureNPatch - Draws a texture (or part of it) that stretches or shrinks nicely +func DrawTextureNPatch(texture Texture2D, nPatchInfo NPatchInfo, dest Rectangle, origin Vector2, rotation float32, tint color.RGBA) { + drawTextureNPatch(uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&nPatchInfo)), uintptr(unsafe.Pointer(&dest)), *(*uintptr)(unsafe.Pointer(&origin)), rotation, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// Fade - Get color with alpha applied, alpha goes from 0.0f to 1.0f +func Fade(col color.RGBA, alpha float32) color.RGBA { + ret := fade(*(*uintptr)(unsafe.Pointer(&col)), alpha) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorToInt - Get hexadecimal value for a Color +func ColorToInt(col color.RGBA) int32 { + return colorToInt(*(*uintptr)(unsafe.Pointer(&col))) +} + +// ColorNormalize - Get Color normalized as float [0..1] +func ColorNormalize(col color.RGBA) Vector4 { + var vector4 Vector4 + colorNormalize(uintptr(unsafe.Pointer(&vector4)), *(*uintptr)(unsafe.Pointer(&col))) + return vector4 +} + +// ColorFromNormalized - Get Color from normalized values [0..1] +func ColorFromNormalized(normalized Vector4) color.RGBA { + ret := colorFromNormalized(*(*uintptr)(unsafe.Pointer(&normalized))) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorToHSV - Get HSV values for a Color, hue [0..360], saturation/value [0..1] +func ColorToHSV(col color.RGBA) Vector3 { + var vector3 Vector3 + colorToHSV(uintptr(unsafe.Pointer(&vector3)), *(*uintptr)(unsafe.Pointer(&col))) + return vector3 +} + +// ColorFromHSV - Get a Color from HSV values, hue [0..360], saturation/value [0..1] +func ColorFromHSV(hue float32, saturation float32, value float32) color.RGBA { + ret := colorFromHSV(hue, saturation, value) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorTint - Get color multiplied with another color +func ColorTint(col color.RGBA, tint color.RGBA) color.RGBA { + ret := colorTint(*(*uintptr)(unsafe.Pointer(&col)), *(*uintptr)(unsafe.Pointer(&tint))) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorBrightness - Get color with brightness correction, brightness factor goes from -1.0f to 1.0f +func ColorBrightness(col color.RGBA, factor float32) color.RGBA { + ret := colorBrightness(*(*uintptr)(unsafe.Pointer(&col)), factor) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorContrast - Get color with contrast correction, contrast values between -1.0f and 1.0f +func ColorContrast(col color.RGBA, contrast float32) color.RGBA { + ret := colorContrast(*(*uintptr)(unsafe.Pointer(&col)), contrast) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorAlpha - Get color with alpha applied, alpha goes from 0.0f to 1.0f +func ColorAlpha(col color.RGBA, alpha float32) color.RGBA { + ret := colorAlpha(*(*uintptr)(unsafe.Pointer(&col)), alpha) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// ColorAlphaBlend - Get src alpha-blended into dst color with tint +func ColorAlphaBlend(dst color.RGBA, src color.RGBA, tint color.RGBA) color.RGBA { + ret := colorAlphaBlend(*(*uintptr)(unsafe.Pointer(&dst)), *(*uintptr)(unsafe.Pointer(&src)), *(*uintptr)(unsafe.Pointer(&tint))) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// GetColor - Get Color structure from hexadecimal value +func GetColor(hexValue uint) color.RGBA { + ret := getColor(uint32(hexValue)) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// GetPixelColor - Get Color from a source pixel pointer of certain format +func GetPixelColor(srcPtr unsafe.Pointer, format int32) color.RGBA { + ret := getPixelColor(srcPtr, format) + return *(*color.RGBA)(unsafe.Pointer(&ret)) +} + +// SetPixelColor - Set color formatted into destination pixel pointer +func SetPixelColor(dstPtr unsafe.Pointer, col color.RGBA, format int32) { + setPixelColor(dstPtr, *(*uintptr)(unsafe.Pointer(&col)), format) +} + +// GetPixelDataSize - Get pixel data size in bytes for certain format +func GetPixelDataSize(width int32, height int32, format int32) int32 { + return getPixelDataSize(width, height, format) +} + +// GetFontDefault - Get the default Font +func GetFontDefault() Font { + var font Font + getFontDefault(uintptr(unsafe.Pointer(&font))) + return font +} + +// LoadFont - Load font from file into GPU memory (VRAM) +func LoadFont(fileName string) Font { + var font Font + loadFont(uintptr(unsafe.Pointer(&font)), fileName) + return font +} + +// LoadFontEx - Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont +func LoadFontEx(fileName string, fontSize int32, codepoints []rune) Font { + var font Font + codepointCount := int32(len(codepoints)) + loadFontEx(uintptr(unsafe.Pointer(&font)), fileName, fontSize, codepoints, codepointCount) + return font +} + +// LoadFontFromImage - Load font from Image (XNA style) +func LoadFontFromImage(image Image, key color.RGBA, firstChar rune) Font { + var font Font + loadFontFromImage(uintptr(unsafe.Pointer(&font)), uintptr(unsafe.Pointer(&image)), *(*uintptr)(unsafe.Pointer(&key)), firstChar) + return font +} + +// LoadFontFromMemory - Load font from memory buffer, fileType refers to extension: i.e. '.ttf' +func LoadFontFromMemory(fileType string, fileData []byte, fontSize int32, codepoints []rune) Font { + var font Font + dataSize := int32(len(fileData)) + codepointCount := int32(len(codepoints)) + loadFontFromMemory(uintptr(unsafe.Pointer(&font)), fileType, fileData, dataSize, fontSize, codepoints, codepointCount) + return font +} + +// IsFontReady - Check if a font is ready +func IsFontReady(font Font) bool { + return isFontReady(uintptr(unsafe.Pointer(&font))) +} + +// LoadFontData - Load font data for further use +func LoadFontData(fileData []byte, fontSize int32, codepoints []rune, typ int32) []GlyphInfo { + dataSize := int32(len(fileData)) + codepointCount := int32(len(codepoints)) + ret := loadFontData(fileData, dataSize, fontSize, codepoints, codepointCount, typ) + return unsafe.Slice(ret, codepointCount) +} + +// GenImageFontAtlas - Generate image font atlas using chars info +func GenImageFontAtlas(glyphs []GlyphInfo, glyphRecs []*Rectangle, fontSize int32, padding int32, packMethod int32) Image { + var image Image + glyphCount := int32(len(glyphs)) + genImageFontAtlas(uintptr(unsafe.Pointer(&image)), unsafe.SliceData(glyphs), glyphRecs, glyphCount, fontSize, padding, packMethod) + return image +} + +// UnloadFontData - Unload font chars info data (RAM) +func UnloadFontData(glyphs []GlyphInfo) { + glyphCount := int32(len(glyphs)) + unloadFontData(unsafe.SliceData(glyphs), glyphCount) +} + +// UnloadFont - Unload font from GPU memory (VRAM) +func UnloadFont(font Font) { + unloadFont(uintptr(unsafe.Pointer(&font))) +} + +// DrawFPS - Draw current FPS +func DrawFPS(posX int32, posY int32) { + drawFPS(posX, posY) +} + +// DrawText - Draw text (using default font) +func DrawText(text string, posX int32, posY int32, fontSize int32, col color.RGBA) { + drawText(text, posX, posY, fontSize, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTextEx - Draw text using font and additional parameters +func DrawTextEx(font Font, text string, position Vector2, fontSize float32, spacing float32, tint color.RGBA) { + drawTextEx(uintptr(unsafe.Pointer(&font)), text, *(*uintptr)(unsafe.Pointer(&position)), fontSize, spacing, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextPro - Draw text using Font and pro parameters (rotation) +func DrawTextPro(font Font, text string, position Vector2, origin Vector2, rotation float32, fontSize float32, spacing float32, tint color.RGBA) { + drawTextPro(uintptr(unsafe.Pointer(&font)), text, *(*uintptr)(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&origin)), rotation, fontSize, spacing, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextCodepoint - Draw one character (codepoint) +func DrawTextCodepoint(font Font, codepoint rune, position Vector2, fontSize float32, tint color.RGBA) { + drawTextCodepoint(uintptr(unsafe.Pointer(&font)), codepoint, *(*uintptr)(unsafe.Pointer(&position)), fontSize, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawTextCodepoints - Draw multiple character (codepoint) +func DrawTextCodepoints(font Font, codepoints []rune, position Vector2, fontSize float32, spacing float32, tint color.RGBA) { + codepointCount := int32(len(codepoints)) + drawTextCodepoints(uintptr(unsafe.Pointer(&font)), codepoints, codepointCount, *(*uintptr)(unsafe.Pointer(&position)), fontSize, spacing, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// SetTextLineSpacing - Set vertical line spacing when drawing with line-breaks +func SetTextLineSpacing(spacing int) { + setTextLineSpacing(int32(spacing)) +} + +// MeasureText - Measure string width for default font +func MeasureText(text string, fontSize int32) int32 { + return measureText(text, fontSize) +} + +// MeasureTextEx - Measure string size for Font +func MeasureTextEx(font Font, text string, fontSize float32, spacing float32) Vector2 { + ret := measureTextEx(uintptr(unsafe.Pointer(&font)), text, fontSize, spacing) + return *(*Vector2)(unsafe.Pointer(&ret)) +} + +// GetGlyphIndex - Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found +func GetGlyphIndex(font Font, codepoint rune) int32 { + return getGlyphIndex(uintptr(unsafe.Pointer(&font)), codepoint) +} + +// GetGlyphInfo - Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found +func GetGlyphInfo(font Font, codepoint rune) GlyphInfo { + var glyphInfo GlyphInfo + getGlyphInfo(uintptr(unsafe.Pointer(&glyphInfo)), uintptr(unsafe.Pointer(&font)), codepoint) + return glyphInfo +} + +// GetGlyphAtlasRec - Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found +func GetGlyphAtlasRec(font Font, codepoint rune) Rectangle { + var rec Rectangle + getGlyphAtlasRec(uintptr(unsafe.Pointer(&rec)), uintptr(unsafe.Pointer(&font)), codepoint) + return rec +} + +// DrawLine3D - Draw a line in 3D world space +func DrawLine3D(startPos Vector3, endPos Vector3, col color.RGBA) { + drawLine3D(uintptr(unsafe.Pointer(&startPos)), uintptr(unsafe.Pointer(&endPos)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPoint3D - Draw a point in 3D space, actually a small line +func DrawPoint3D(position Vector3, col color.RGBA) { + drawPoint3D(uintptr(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCircle3D - Draw a circle in 3D world space +func DrawCircle3D(center Vector3, radius float32, rotationAxis Vector3, rotationAngle float32, col color.RGBA) { + drawCircle3D(uintptr(unsafe.Pointer(¢er)), radius, uintptr(unsafe.Pointer(&rotationAxis)), rotationAngle, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangle3D - Draw a color-filled triangle (vertex in counter-clockwise order!) +func DrawTriangle3D(v1 Vector3, v2 Vector3, v3 Vector3, col color.RGBA) { + drawTriangle3D(uintptr(unsafe.Pointer(&v1)), uintptr(unsafe.Pointer(&v2)), uintptr(unsafe.Pointer(&v3)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawTriangleStrip3D - Draw a triangle strip defined by points +func DrawTriangleStrip3D(points []Vector3, col color.RGBA) { + pointCount := int32(len(points)) + drawTriangleStrip3D(unsafe.SliceData(points), pointCount, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCube - Draw cube +func DrawCube(position Vector3, width float32, height float32, length float32, col color.RGBA) { + drawCube(uintptr(unsafe.Pointer(&position)), width, height, length, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCubeV - Draw cube (Vector version) +func DrawCubeV(position Vector3, size Vector3, col color.RGBA) { + drawCubeV(uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCubeWires - Draw cube wires +func DrawCubeWires(position Vector3, width float32, height float32, length float32, col color.RGBA) { + drawCubeWires(uintptr(unsafe.Pointer(&position)), width, height, length, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCubeWiresV - Draw cube wires (Vector version) +func DrawCubeWiresV(position Vector3, size Vector3, col color.RGBA) { + drawCubeWiresV(uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSphere - Draw sphere +func DrawSphere(centerPos Vector3, radius float32, col color.RGBA) { + drawSphere(uintptr(unsafe.Pointer(¢erPos)), radius, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSphereEx - Draw sphere with extended parameters +func DrawSphereEx(centerPos Vector3, radius float32, rings int32, slices int32, col color.RGBA) { + drawSphereEx(uintptr(unsafe.Pointer(¢erPos)), radius, rings, slices, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawSphereWires - Draw sphere wires +func DrawSphereWires(centerPos Vector3, radius float32, rings int32, slices int32, col color.RGBA) { + drawSphereWires(uintptr(unsafe.Pointer(¢erPos)), radius, rings, slices, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCylinder - Draw a cylinder/cone +func DrawCylinder(position Vector3, radiusTop float32, radiusBottom float32, height float32, slices int32, col color.RGBA) { + drawCylinder(uintptr(unsafe.Pointer(&position)), radiusTop, radiusBottom, height, slices, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCylinderEx - Draw a cylinder with base at startPos and top at endPos +func DrawCylinderEx(startPos Vector3, endPos Vector3, startRadius float32, endRadius float32, sides int32, col color.RGBA) { + drawCylinderEx(uintptr(unsafe.Pointer(&startPos)), uintptr(unsafe.Pointer(&endPos)), startRadius, endRadius, sides, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCylinderWires - Draw a cylinder/cone wires +func DrawCylinderWires(position Vector3, radiusTop float32, radiusBottom float32, height float32, slices int32, col color.RGBA) { + drawCylinderWires(uintptr(unsafe.Pointer(&position)), radiusTop, radiusBottom, height, slices, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCylinderWiresEx - Draw a cylinder wires with base at startPos and top at endPos +func DrawCylinderWiresEx(startPos Vector3, endPos Vector3, startRadius float32, endRadius float32, sides int32, col color.RGBA) { + drawCylinderWiresEx(uintptr(unsafe.Pointer(&startPos)), uintptr(unsafe.Pointer(&endPos)), startRadius, endRadius, sides, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCapsule - Draw a capsule with the center of its sphere caps at startPos and endPos +func DrawCapsule(startPos Vector3, endPos Vector3, radius float32, slices int32, rings int32, col color.RGBA) { + drawCapsule(uintptr(unsafe.Pointer(&startPos)), uintptr(unsafe.Pointer(&endPos)), radius, slices, rings, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawCapsuleWires - Draw capsule wireframe with the center of its sphere caps at startPos and endPos +func DrawCapsuleWires(startPos Vector3, endPos Vector3, radius float32, slices int32, rings int32, col color.RGBA) { + drawCapsuleWires(uintptr(unsafe.Pointer(&startPos)), uintptr(unsafe.Pointer(&endPos)), radius, slices, rings, *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawPlane - Draw a plane XZ +func DrawPlane(centerPos Vector3, size Vector2, col color.RGBA) { + drawPlane(uintptr(unsafe.Pointer(¢erPos)), *(*uintptr)(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawRay - Draw a ray line +func DrawRay(ray Ray, col color.RGBA) { + drawRay(uintptr(unsafe.Pointer(&ray)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawGrid - Draw a grid (centered at (0, 0, 0)) +func DrawGrid(slices int32, spacing float32) { + drawGrid(slices, spacing) +} + +// LoadModel - Load model from files (meshes and materials) +func LoadModel(fileName string) Model { + var model Model + loadModel(uintptr(unsafe.Pointer(&model)), fileName) + return model +} + +// LoadModelFromMesh - Load model from generated mesh (default material) +func LoadModelFromMesh(mesh Mesh) Model { + var model Model + loadModelFromMesh(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&mesh))) + return model +} + +// IsModelReady - Check if a model is ready +func IsModelReady(model Model) bool { + return isModelReady(uintptr(unsafe.Pointer(&model))) +} + +// UnloadModel - Unload model (including meshes) from memory (RAM and/or VRAM) +func UnloadModel(model Model) { + unloadModel(uintptr(unsafe.Pointer(&model))) +} + +// GetModelBoundingBox - Compute model bounding box limits (considers all meshes) +func GetModelBoundingBox(model Model) BoundingBox { + var boundingBox BoundingBox + getModelBoundingBox(uintptr(unsafe.Pointer(&boundingBox)), uintptr(unsafe.Pointer(&model))) + return boundingBox +} + +// DrawModel - Draw a model (with texture if set) +func DrawModel(model Model, position Vector3, scale float32, tint color.RGBA) { + drawModel(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&position)), scale, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawModelEx - Draw a model with extended parameters +func DrawModelEx(model Model, position Vector3, rotationAxis Vector3, rotationAngle float32, scale Vector3, tint color.RGBA) { + drawModelEx(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&rotationAxis)), rotationAngle, uintptr(unsafe.Pointer(&scale)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawModelWires - Draw a model wires (with texture if set) +func DrawModelWires(model Model, position Vector3, scale float32, tint color.RGBA) { + drawModelWires(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&position)), scale, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawModelWiresEx - Draw a model wires (with texture if set) with extended parameters +func DrawModelWiresEx(model Model, position Vector3, rotationAxis Vector3, rotationAngle float32, scale Vector3, tint color.RGBA) { + drawModelWiresEx(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&rotationAxis)), rotationAngle, uintptr(unsafe.Pointer(&scale)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawBoundingBox - Draw bounding box (wires) +func DrawBoundingBox(box BoundingBox, col color.RGBA) { + drawBoundingBox(uintptr(unsafe.Pointer(&box)), *(*uintptr)(unsafe.Pointer(&col))) +} + +// DrawBillboard - Draw a billboard texture +func DrawBillboard(camera Camera, texture Texture2D, position Vector3, size float32, tint color.RGBA) { + drawBillboard(uintptr(unsafe.Pointer(&camera)), uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&position)), size, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawBillboardRec - Draw a billboard texture defined by source +func DrawBillboardRec(camera Camera, texture Texture2D, source Rectangle, position Vector3, size Vector2, tint color.RGBA) { + drawBillboardRec(uintptr(unsafe.Pointer(&camera)), uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&source)), uintptr(unsafe.Pointer(&position)), *(*uintptr)(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&tint))) +} + +// DrawBillboardPro - Draw a billboard texture defined by source and rotation +func DrawBillboardPro(camera Camera, texture Texture2D, source Rectangle, position Vector3, up Vector3, size Vector2, origin Vector2, rotation float32, tint color.RGBA) { + drawBillboardPro(uintptr(unsafe.Pointer(&camera)), uintptr(unsafe.Pointer(&texture)), uintptr(unsafe.Pointer(&source)), uintptr(unsafe.Pointer(&position)), uintptr(unsafe.Pointer(&up)), *(*uintptr)(unsafe.Pointer(&size)), *(*uintptr)(unsafe.Pointer(&origin)), rotation, *(*uintptr)(unsafe.Pointer(&tint))) +} + +// UploadMesh - Upload mesh vertex data in GPU and provide VAO/VBO ids +func UploadMesh(mesh *Mesh, dynamic bool) { + uploadMesh(mesh, dynamic) +} + +// UpdateMeshBuffer - Update mesh vertex data in GPU for a specific buffer index +func UpdateMeshBuffer(mesh Mesh, index int32, data []byte, offset int) { + dataSize := int32(len(data)) + updateMeshBuffer(uintptr(unsafe.Pointer(&mesh)), index, data, dataSize, int32(offset)) +} + +// UnloadMesh - Unload mesh data from CPU and GPU +func UnloadMesh(mesh *Mesh) { + unloadMesh(uintptr(unsafe.Pointer(mesh))) +} + +// DrawMesh - Draw a 3d mesh with material and transform +func DrawMesh(mesh Mesh, material Material, transform Matrix) { + drawMesh(uintptr(unsafe.Pointer(&mesh)), uintptr(unsafe.Pointer(&material)), uintptr(unsafe.Pointer(&transform))) +} + +// DrawMeshInstanced - Draw multiple mesh instances with material and different transforms +func DrawMeshInstanced(mesh Mesh, material Material, transforms []Matrix, instances int32) { + drawMeshInstanced(uintptr(unsafe.Pointer(&mesh)), uintptr(unsafe.Pointer(&material)), transforms, instances) +} + +// ExportMesh - Export mesh data to file, returns true on success +func ExportMesh(mesh Mesh, fileName string) bool { + return exportMesh(uintptr(unsafe.Pointer(&mesh)), fileName) +} + +// GetMeshBoundingBox - Compute mesh bounding box limits +func GetMeshBoundingBox(mesh Mesh) BoundingBox { + var boundingBox BoundingBox + getMeshBoundingBox(uintptr(unsafe.Pointer(&boundingBox)), uintptr(unsafe.Pointer(&mesh))) + return boundingBox +} + +// GenMeshTangents - Compute mesh tangents +func GenMeshTangents(mesh *Mesh) { + genMeshTangents(mesh) +} + +// GenMeshPoly - Generate polygonal mesh +func GenMeshPoly(sides int, radius float32) Mesh { + var mesh Mesh + genMeshPoly(uintptr(unsafe.Pointer(&mesh)), int32(sides), radius) + return mesh +} + +// GenMeshPlane - Generate plane mesh (with subdivisions) +func GenMeshPlane(width float32, length float32, resX int, resZ int) Mesh { + var mesh Mesh + genMeshPlane(uintptr(unsafe.Pointer(&mesh)), width, length, int32(resX), int32(resZ)) + return mesh +} + +// GenMeshCube - Generate cuboid mesh +func GenMeshCube(width float32, height float32, length float32) Mesh { + var mesh Mesh + genMeshCube(uintptr(unsafe.Pointer(&mesh)), width, height, length) + return mesh +} + +// GenMeshSphere - Generate sphere mesh (standard sphere) +func GenMeshSphere(radius float32, rings int, slices int) Mesh { + var mesh Mesh + genMeshSphere(uintptr(unsafe.Pointer(&mesh)), radius, int32(rings), int32(slices)) + return mesh +} + +// GenMeshHemiSphere - Generate half-sphere mesh (no bottom cap) +func GenMeshHemiSphere(radius float32, rings int, slices int) Mesh { + var mesh Mesh + genMeshHemiSphere(uintptr(unsafe.Pointer(&mesh)), radius, int32(rings), int32(slices)) + return mesh +} + +// GenMeshCylinder - Generate cylinder mesh +func GenMeshCylinder(radius float32, height float32, slices int) Mesh { + var mesh Mesh + genMeshCylinder(uintptr(unsafe.Pointer(&mesh)), radius, height, int32(slices)) + return mesh +} + +// GenMeshCone - Generate cone/pyramid mesh +func GenMeshCone(radius float32, height float32, slices int) Mesh { + var mesh Mesh + genMeshCone(uintptr(unsafe.Pointer(&mesh)), radius, height, int32(slices)) + return mesh +} + +// GenMeshTorus - Generate torus mesh +func GenMeshTorus(radius float32, size float32, radSeg int, sides int) Mesh { + var mesh Mesh + genMeshTorus(uintptr(unsafe.Pointer(&mesh)), radius, size, int32(radSeg), int32(sides)) + return mesh +} + +// GenMeshKnot - Generate trefoil knot mesh +func GenMeshKnot(radius float32, size float32, radSeg int, sides int) Mesh { + var mesh Mesh + genMeshKnot(uintptr(unsafe.Pointer(&mesh)), radius, size, int32(radSeg), int32(sides)) + return mesh +} + +// GenMeshHeightmap - Generate heightmap mesh from image data +func GenMeshHeightmap(heightmap Image, size Vector3) Mesh { + var mesh Mesh + genMeshHeightmap(uintptr(unsafe.Pointer(&mesh)), uintptr(unsafe.Pointer(&heightmap)), uintptr(unsafe.Pointer(&size))) + return mesh +} + +// GenMeshCubicmap - Generate cubes-based map mesh from image data +func GenMeshCubicmap(cubicmap Image, cubeSize Vector3) Mesh { + var mesh Mesh + genMeshCubicmap(uintptr(unsafe.Pointer(&mesh)), uintptr(unsafe.Pointer(&cubicmap)), uintptr(unsafe.Pointer(&cubeSize))) + return mesh +} + +// LoadMaterials - Load materials from model file +func LoadMaterials(fileName string) []Material { + var materialCount int32 + ret := loadMaterials(fileName, &materialCount) + return unsafe.Slice(ret, materialCount) +} + +// LoadMaterialDefault - Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) +func LoadMaterialDefault() Material { + var material Material + loadMaterialDefault(uintptr(unsafe.Pointer(&material))) + return material +} + +// IsMaterialReady - Check if a material is ready +func IsMaterialReady(material Material) bool { + return isMaterialReady(uintptr(unsafe.Pointer(&material))) +} + +// UnloadMaterial - Unload material from GPU memory (VRAM) +func UnloadMaterial(material Material) { + unloadMaterial(uintptr(unsafe.Pointer(&material))) +} + +// SetMaterialTexture - Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) +func SetMaterialTexture(material *Material, mapType int32, texture Texture2D) { + setMaterialTexture(material, mapType, uintptr(unsafe.Pointer(&texture))) +} + +// SetModelMeshMaterial - Set material for a mesh +func SetModelMeshMaterial(model *Model, meshId int32, materialId int32) { + setModelMeshMaterial(model, meshId, materialId) +} + +// LoadModelAnimations - Load model animations from file +func LoadModelAnimations(fileName string) []ModelAnimation { + var animCount int32 + ret := loadModelAnimations(fileName, &animCount) + return unsafe.Slice(ret, animCount) +} + +// UpdateModelAnimation - Update model animation pose +func UpdateModelAnimation(model Model, anim ModelAnimation, frame int32) { + updateModelAnimation(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&anim)), frame) +} + +// UnloadModelAnimation - Unload animation data +func UnloadModelAnimation(anim ModelAnimation) { + unloadModelAnimation(uintptr(unsafe.Pointer(&anim))) +} + +// UnloadModelAnimations - Unload animation array data +func UnloadModelAnimations(animations []ModelAnimation) { + animCount := int32(len(animations)) + unloadModelAnimations(unsafe.SliceData(animations), animCount) +} + +// IsModelAnimationValid - Check model animation skeleton match +func IsModelAnimationValid(model Model, anim ModelAnimation) bool { + return isModelAnimationValid(uintptr(unsafe.Pointer(&model)), uintptr(unsafe.Pointer(&anim))) +} + +// CheckCollisionSpheres - Check collision between two spheres +func CheckCollisionSpheres(center1 Vector3, radius1 float32, center2 Vector3, radius2 float32) bool { + return checkCollisionSpheres(uintptr(unsafe.Pointer(¢er1)), radius1, uintptr(unsafe.Pointer(¢er2)), radius2) +} + +// CheckCollisionBoxes - Check collision between two bounding boxes +func CheckCollisionBoxes(box1 BoundingBox, box2 BoundingBox) bool { + return checkCollisionBoxes(uintptr(unsafe.Pointer(&box1)), uintptr(unsafe.Pointer(&box2))) +} + +// CheckCollisionBoxSphere - Check collision between box and sphere +func CheckCollisionBoxSphere(box BoundingBox, center Vector3, radius float32) bool { + return checkCollisionBoxSphere(uintptr(unsafe.Pointer(&box)), uintptr(unsafe.Pointer(¢er)), radius) +} + +// GetRayCollisionSphere - Get collision info between ray and sphere +func GetRayCollisionSphere(ray Ray, center Vector3, radius float32) RayCollision { + var rayCollision RayCollision + getRayCollisionSphere(uintptr(unsafe.Pointer(&rayCollision)), uintptr(unsafe.Pointer(&ray)), uintptr(unsafe.Pointer(¢er)), radius) + return rayCollision +} + +// GetRayCollisionBox - Get collision info between ray and box +func GetRayCollisionBox(ray Ray, box BoundingBox) RayCollision { + var rayCollision RayCollision + getRayCollisionBox(uintptr(unsafe.Pointer(&rayCollision)), uintptr(unsafe.Pointer(&ray)), uintptr(unsafe.Pointer(&box))) + return rayCollision +} + +// GetRayCollisionMesh - Get collision info between ray and mesh +func GetRayCollisionMesh(ray Ray, mesh Mesh, transform Matrix) RayCollision { + var rayCollision RayCollision + getRayCollisionMesh(uintptr(unsafe.Pointer(&rayCollision)), uintptr(unsafe.Pointer(&ray)), uintptr(unsafe.Pointer(&mesh)), uintptr(unsafe.Pointer(&transform))) + return rayCollision +} + +// GetRayCollisionTriangle - Get collision info between ray and triangle +func GetRayCollisionTriangle(ray Ray, p1 Vector3, p2 Vector3, p3 Vector3) RayCollision { + var rayCollision RayCollision + getRayCollisionTriangle(uintptr(unsafe.Pointer(&rayCollision)), uintptr(unsafe.Pointer(&ray)), uintptr(unsafe.Pointer(&p1)), uintptr(unsafe.Pointer(&p2)), uintptr(unsafe.Pointer(&p3))) + return rayCollision +} + +// GetRayCollisionQuad - Get collision info between ray and quad +func GetRayCollisionQuad(ray Ray, p1 Vector3, p2 Vector3, p3 Vector3, p4 Vector3) RayCollision { + var rayCollision RayCollision + getRayCollisionQuad(uintptr(unsafe.Pointer(&rayCollision)), uintptr(unsafe.Pointer(&ray)), uintptr(unsafe.Pointer(&p1)), uintptr(unsafe.Pointer(&p2)), uintptr(unsafe.Pointer(&p3)), uintptr(unsafe.Pointer(&p4))) + return rayCollision +} + +// InitAudioDevice - Initialize audio device and context +func InitAudioDevice() { + initAudioDevice() +} + +// CloseAudioDevice - Close the audio device and context +func CloseAudioDevice() { + closeAudioDevice() +} + +// IsAudioDeviceReady - Check if audio device has been initialized successfully +func IsAudioDeviceReady() bool { + return isAudioDeviceReady() +} + +// SetMasterVolume - Set master volume (listener) +func SetMasterVolume(volume float32) { + setMasterVolume(volume) +} + +// GetMasterVolume - Get master volume (listener) +func GetMasterVolume() float32 { + return getMasterVolume() +} + +// LoadWave - Load wave data from file +func LoadWave(fileName string) Wave { + var wave Wave + loadWave(uintptr(unsafe.Pointer(&wave)), fileName) + return wave +} + +// LoadWaveFromMemory - Load wave from memory buffer, fileType refers to extension: i.e. '.wav' +func LoadWaveFromMemory(fileType string, fileData []byte, dataSize int32) Wave { + var wave Wave + loadWaveFromMemory(uintptr(unsafe.Pointer(&wave)), fileType, fileData, dataSize) + return wave +} + +// IsWaveReady - Checks if wave data is ready +func IsWaveReady(wave Wave) bool { + return isWaveReady(uintptr(unsafe.Pointer(&wave))) +} + +// LoadSound - Load sound from file +func LoadSound(fileName string) Sound { + var sound Sound + loadSound(uintptr(unsafe.Pointer(&sound)), fileName) + return sound +} + +// LoadSoundFromWave - Load sound from wave data +func LoadSoundFromWave(wave Wave) Sound { + var sound Sound + loadSoundFromWave(uintptr(unsafe.Pointer(&sound)), uintptr(unsafe.Pointer(&wave))) + return sound +} + +// LoadSoundAlias - Create a new sound that shares the same sample data as the source sound, does not own the sound data +func LoadSoundAlias(source Sound) Sound { + var sound Sound + loadSoundAlias(uintptr(unsafe.Pointer(&sound)), uintptr(unsafe.Pointer(&source))) + return sound +} + +// IsSoundReady - Checks if a sound is ready +func IsSoundReady(sound Sound) bool { + return isSoundReady(uintptr(unsafe.Pointer(&sound))) +} + +// UpdateSound - Update sound buffer with new data +func UpdateSound(sound Sound, data []byte, sampleCount int32) { + updateSound(uintptr(unsafe.Pointer(&sound)), data, sampleCount) +} + +// UnloadWave - Unload wave data +func UnloadWave(wave Wave) { + unloadWave(uintptr(unsafe.Pointer(&wave))) +} + +// UnloadSound - Unload sound +func UnloadSound(sound Sound) { + unloadSound(uintptr(unsafe.Pointer(&sound))) +} + +// UnloadSoundAlias - Unload a sound alias (does not deallocate sample data) +func UnloadSoundAlias(alias Sound) { + unloadSoundAlias(uintptr(unsafe.Pointer(&alias))) +} + +// ExportWave - Export wave data to file, returns true on success +func ExportWave(wave Wave, fileName string) bool { + return exportWave(uintptr(unsafe.Pointer(&wave)), fileName) +} + +// PlaySound - Play a sound +func PlaySound(sound Sound) { + playSound(uintptr(unsafe.Pointer(&sound))) +} + +// StopSound - Stop playing a sound +func StopSound(sound Sound) { + stopSound(uintptr(unsafe.Pointer(&sound))) +} + +// PauseSound - Pause a sound +func PauseSound(sound Sound) { + pauseSound(uintptr(unsafe.Pointer(&sound))) +} + +// ResumeSound - Resume a paused sound +func ResumeSound(sound Sound) { + resumeSound(uintptr(unsafe.Pointer(&sound))) +} + +// IsSoundPlaying - Check if a sound is currently playing +func IsSoundPlaying(sound Sound) bool { + return isSoundPlaying(uintptr(unsafe.Pointer(&sound))) +} + +// SetSoundVolume - Set volume for a sound (1.0 is max level) +func SetSoundVolume(sound Sound, volume float32) { + setSoundVolume(uintptr(unsafe.Pointer(&sound)), volume) +} + +// SetSoundPitch - Set pitch for a sound (1.0 is base level) +func SetSoundPitch(sound Sound, pitch float32) { + setSoundPitch(uintptr(unsafe.Pointer(&sound)), pitch) +} + +// SetSoundPan - Set pan for a sound (0.5 is center) +func SetSoundPan(sound Sound, pan float32) { + setSoundPan(uintptr(unsafe.Pointer(&sound)), pan) +} + +// WaveCopy - Copy a wave to a new wave +func WaveCopy(wave Wave) Wave { + var copy Wave + waveCopy(uintptr(unsafe.Pointer(©)), uintptr(unsafe.Pointer(&wave))) + return copy +} + +// WaveCrop - Crop a wave to defined samples range +func WaveCrop(wave *Wave, initSample int32, finalSample int32) { + waveCrop(wave, initSample, finalSample) +} + +// WaveFormat - Convert wave data to desired format +func WaveFormat(wave *Wave, sampleRate int32, sampleSize int32, channels int32) { + waveFormat(wave, sampleRate, sampleRate, channels) +} + +// LoadWaveSamples - Load samples data from wave as a 32bit float data array +func LoadWaveSamples(wave Wave) []float32 { + ret := loadWaveSamples(uintptr(unsafe.Pointer(&wave))) + return unsafe.Slice(ret, wave.FrameCount*wave.Channels) +} + +// UnloadWaveSamples - Unload samples data loaded with LoadWaveSamples() +func UnloadWaveSamples(samples []float32) { + unloadWaveSamples(samples) +} + +// LoadMusicStream - Load music stream from file +func LoadMusicStream(fileName string) Music { + var music Music + loadMusicStream(uintptr(unsafe.Pointer(&music)), fileName) + return music +} + +// LoadMusicStreamFromMemory - Load music stream from data +func LoadMusicStreamFromMemory(fileType string, data []byte, dataSize int32) Music { + var music Music + loadMusicStreamFromMemory(uintptr(unsafe.Pointer(&music)), fileType, data, dataSize) + return music +} + +// IsMusicReady - Checks if a music stream is ready +func IsMusicReady(music Music) bool { + return isMusicReady(uintptr(unsafe.Pointer(&music))) +} + +// UnloadMusicStream - Unload music stream +func UnloadMusicStream(music Music) { + unloadMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// PlayMusicStream - Start music playing +func PlayMusicStream(music Music) { + playMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// IsMusicStreamPlaying - Check if music is playing +func IsMusicStreamPlaying(music Music) bool { + return isMusicStreamPlaying(uintptr(unsafe.Pointer(&music))) +} + +// UpdateMusicStream - Updates buffers for music streaming +func UpdateMusicStream(music Music) { + updateMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// StopMusicStream - Stop music playing +func StopMusicStream(music Music) { + stopMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// PauseMusicStream - Pause music playing +func PauseMusicStream(music Music) { + pauseMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// ResumeMusicStream - Resume playing paused music +func ResumeMusicStream(music Music) { + resumeMusicStream(uintptr(unsafe.Pointer(&music))) +} + +// SeekMusicStream - Seek music to a position (in seconds) +func SeekMusicStream(music Music, position float32) { + seekMusicStream(uintptr(unsafe.Pointer(&music)), position) +} + +// SetMusicVolume - Set volume for music (1.0 is max level) +func SetMusicVolume(music Music, volume float32) { + setMusicVolume(uintptr(unsafe.Pointer(&music)), volume) +} + +// SetMusicPitch - Set pitch for a music (1.0 is base level) +func SetMusicPitch(music Music, pitch float32) { + setMusicPitch(uintptr(unsafe.Pointer(&music)), pitch) +} + +// SetMusicPan - Set pan for a music (0.5 is center) +func SetMusicPan(music Music, pan float32) { + setMusicPan(uintptr(unsafe.Pointer(&music)), pan) +} + +// GetMusicTimeLength - Get music time length (in seconds) +func GetMusicTimeLength(music Music) float32 { + return getMusicTimeLength(uintptr(unsafe.Pointer(&music))) +} + +// GetMusicTimePlayed - Get current music time played (in seconds) +func GetMusicTimePlayed(music Music) float32 { + return getMusicTimePlayed(uintptr(unsafe.Pointer(&music))) +} + +// LoadAudioStream - Load audio stream (to stream raw audio pcm data) +func LoadAudioStream(sampleRate uint32, sampleSize uint32, channels uint32) AudioStream { + var audioStream AudioStream + loadAudioStream(uintptr(unsafe.Pointer(&audioStream)), sampleRate, sampleSize, channels) + return audioStream +} + +// IsAudioStreamReady - Checks if an audio stream is ready +func IsAudioStreamReady(stream AudioStream) bool { + return isAudioStreamReady(uintptr(unsafe.Pointer(&stream))) +} + +// UnloadAudioStream - Unload audio stream and free memory +func UnloadAudioStream(stream AudioStream) { + unloadAudioStream(uintptr(unsafe.Pointer(&stream))) +} + +// UpdateAudioStream - Update audio stream buffers with data +func UpdateAudioStream(stream AudioStream, data []float32) { + frameCount := int32(len(data)) + updateAudioStream(uintptr(unsafe.Pointer(&stream)), data, frameCount) +} + +// IsAudioStreamProcessed - Check if any audio stream buffers requires refill +func IsAudioStreamProcessed(stream AudioStream) bool { + return isAudioStreamProcessed(uintptr(unsafe.Pointer(&stream))) +} + +// PlayAudioStream - Play audio stream +func PlayAudioStream(stream AudioStream) { + playAudioStream(uintptr(unsafe.Pointer(&stream))) +} + +// PauseAudioStream - Pause audio stream +func PauseAudioStream(stream AudioStream) { + pauseAudioStream(uintptr(unsafe.Pointer(&stream))) +} + +// ResumeAudioStream - Resume audio stream +func ResumeAudioStream(stream AudioStream) { + resumeAudioStream(uintptr(unsafe.Pointer(&stream))) +} + +// IsAudioStreamPlaying - Check if audio stream is playing +func IsAudioStreamPlaying(stream AudioStream) bool { + return isAudioStreamPlaying(uintptr(unsafe.Pointer(&stream))) +} + +// StopAudioStream - Stop audio stream +func StopAudioStream(stream AudioStream) { + stopAudioStream(uintptr(unsafe.Pointer(&stream))) +} + +// SetAudioStreamVolume - Set volume for audio stream (1.0 is max level) +func SetAudioStreamVolume(stream AudioStream, volume float32) { + setAudioStreamVolume(uintptr(unsafe.Pointer(&stream)), volume) +} + +// SetAudioStreamPitch - Set pitch for audio stream (1.0 is base level) +func SetAudioStreamPitch(stream AudioStream, pitch float32) { + setAudioStreamPitch(uintptr(unsafe.Pointer(&stream)), pitch) +} + +// SetAudioStreamPan - Set pan for audio stream (0.5 is centered) +func SetAudioStreamPan(stream AudioStream, pan float32) { + setAudioStreamPan(uintptr(unsafe.Pointer(&stream)), pan) +} + +// SetAudioStreamBufferSizeDefault - Default size for new audio streams +func SetAudioStreamBufferSizeDefault(size int32) { + setAudioStreamBufferSizeDefault(size) +} + +// SetAudioStreamCallback - Audio thread callback to request new data +func SetAudioStreamCallback(stream AudioStream, callback AudioCallback) { + fn := purego.NewCallback(func(bufferData unsafe.Pointer, frames int32) uintptr { + callback(unsafe.Slice((*float32)(bufferData), frames), int(frames)) + return 0 + }) + setAudioStreamCallback(uintptr(unsafe.Pointer(&stream)), fn) +} + +// AttachAudioStreamProcessor - Attach audio stream processor to stream, receives the samples as s +func AttachAudioStreamProcessor(stream AudioStream, processor AudioCallback) { + fn := purego.NewCallback(func(bufferData unsafe.Pointer, frames int32) uintptr { + processor(unsafe.Slice((*float32)(bufferData), frames), int(frames)) + return 0 + }) + attachAudioStreamProcessor(uintptr(unsafe.Pointer(&stream)), fn) +} + +// DetachAudioStreamProcessor - Detach audio stream processor from stream +func DetachAudioStreamProcessor(stream AudioStream, processor AudioCallback) { + fn := purego.NewCallback(func(bufferData unsafe.Pointer, frames int32) uintptr { + processor(unsafe.Slice((*float32)(bufferData), frames), int(frames)) + return 0 + }) + detachAudioStreamProcessor(uintptr(unsafe.Pointer(&stream)), fn) +} + +// AttachAudioMixedProcessor - Attach audio stream processor to the entire audio pipeline, receives the samples as s +func AttachAudioMixedProcessor(processor AudioCallback) { + fn := purego.NewCallback(func(bufferData unsafe.Pointer, frames int32) uintptr { + processor(unsafe.Slice((*float32)(bufferData), frames), int(frames)) + return 0 + }) + attachAudioMixedProcessor(fn) +} + +// DetachAudioMixedProcessor - Detach audio stream processor from the entire audio pipeline +func DetachAudioMixedProcessor(processor AudioCallback) { + fn := purego.NewCallback(func(bufferData unsafe.Pointer, frames int32) uintptr { + processor(unsafe.Slice((*float32)(bufferData), frames), int(frames)) + return 0 + }) + detachAudioMixedProcessor(fn) +} + +// SetCallbackFunc - Sets callback function +func SetCallbackFunc(func()) { +} + +// NewImageFromImage - Returns new Image from Go image.Image +func NewImageFromImage(img image.Image) *Image { + size := img.Bounds().Size() + + ret := GenImageColor(size.X, size.Y, White) + + for y := 0; y < size.Y; y++ { + for x := 0; x < size.X; x++ { + col := img.At(x, y) + r, g, b, a := col.RGBA() + rcolor := NewColor(uint8(r), uint8(g), uint8(b), uint8(a)) + ImageDrawPixel(ret, int32(x), int32(y), rcolor) + } + } + + return ret +} + +// ToImage converts a Image to Go image.Image +func (i *Image) ToImage() image.Image { + img := image.NewRGBA(image.Rect(0, 0, int(i.Width), int(i.Height))) + + // Get pixel data from image (RGBA 32bit) + ret := LoadImageColors(i) + pixels := (*[1 << 24]uint8)(unsafe.Pointer(unsafe.SliceData(ret)))[0 : i.Width*i.Height*4] + + img.Pix = pixels + + return img +} + +// OpenAsset - Open asset +func OpenAsset(name string) (Asset, error) { + f, err := os.Open(name) + if err != nil { + return nil, err + } + return f, nil +} + +// HomeDir - Returns user home directory +// NOTE: On Android this returns internal data path and must be called after InitWindow +func HomeDir() string { + if homeDir, err := os.UserHomeDir(); err == nil { + return homeDir + } + return "" +}