diff --git a/examples/go.mod b/examples/go.mod index 9b9293c..d731bb6 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,9 +1,20 @@ module github.com/BrownNPC/Raylib-Go-Wasm/examples -go 1.24.1 +go 1.26.1 -replace github.com/gen2brain/raylib-go/raylib => ../raylib +require ( + github.com/gen2brain/raylib-go/raygui v0.0.0-00010101000000-000000000000 + github.com/gen2brain/raylib-go/raylib v0.55.1 +) -require github.com/gen2brain/raylib-go/raylib v0.0.0-00010101000000-000000000000 +replace ( + github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime => ../wasm-runtime -require github.com/BrownNPC/wasm-ffi-go v1.1.0 // indirect + github.com/gen2brain/raylib-go/raygui => ../raygui + github.com/gen2brain/raylib-go/raylib => ../raylib +) + +require ( + github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime v0.0.0-20260421110350-7c24b2d5e6d3 // indirect + github.com/BrownNPC/wasm-ffi-go v1.2.0 // indirect +) diff --git a/examples/go.sum b/examples/go.sum index 808648e..b242b0a 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,2 +1,2 @@ -github.com/BrownNPC/wasm-ffi-go v1.1.0 h1:oashfuQflpB+qx/xI71Gvim3YN/0iIny5TMIpzEFz0Y= -github.com/BrownNPC/wasm-ffi-go v1.1.0/go.mod h1:D5+RBMb672fgw6vPz4HOWYxpyrmPrIao8VqlXihOFFg= +github.com/BrownNPC/wasm-ffi-go v1.2.0 h1:Lknst90sTLTkE870OKNP/Vw36TohQIJ4ln8W1IG9Zl0= +github.com/BrownNPC/wasm-ffi-go v1.2.0/go.mod h1:D5+RBMb672fgw6vPz4HOWYxpyrmPrIao8VqlXihOFFg= diff --git a/examples/raygui/main.go b/examples/raygui/main.go new file mode 100644 index 0000000..37e9446 --- /dev/null +++ b/examples/raygui/main.go @@ -0,0 +1,284 @@ +//go:build js + +package main + +import ( + "fmt" + + gui "github.com/gen2brain/raylib-go/raygui" + rl "github.com/gen2brain/raylib-go/raylib" +) + +/******************************************************************************************* +* +* raygui - controls test suite +* +* TEST CONTROLS: +* - gui.DropdownBox() +* - gui.CheckBox() +* - gui.Spinner() +* - gui.ValueBox() +* - gui.TextBox() +* - gui.Button() +* - gui.ComboBox() +* - gui.ListView() +* - gui.ToggleGroup() +* - gui.ColorPicker() +* - gui.Slider() +* - gui.SliderBar() +* - gui.ProgressBar() +* - gui.ColorBarAlpha() +* - gui.ScrollPanel() +* +* +* DEPENDENCIES: +* raylib 4.0 - Windowing/input management and drawing. +* raygui 3.2 - Immediate-mode GUI controls. +* +* COMPILATION (Windows - MinGW): +* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99 +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2016-2022 Ramon Santamaria (@raysan5) +* +**********************************************************************************************/ + +//#define RAYGUI_CUSTOM_ICONS // It requires providing gui_icons.h in the same directory +//#include "gui_icons.h" // External icons data provided, it can be generated with rGuiIcons tool + +// ------------------------------------------------------------------------------------ +// Program main entry point +// ------------------------------------------------------------------------------------ +func main() { + // Initialization + //--------------------------------------------------------------------------------------- + const ( + screenWidth = 690 + screenHeight = 560 + ) + + rl.InitWindow(screenWidth, screenHeight, "raygui - controls test suite") + rl.SetExitKey(0) + + // GUI controls initialization + //---------------------------------------------------------------------------------- + var ( + dropdownBox000Active int32 = 0 + dropDown000EditMode bool = false + + dropdownBox001Active int32 = 0 + dropDown001EditMode bool = false + + spinner001Value int32 = 0 + spinnerEditMode bool = false + + valueBox002Value int32 = 0 + valueBoxEditMode bool = false + + textBoxText = "Text box" + textBoxEditMode bool = false + + // listViewScrollIndex int32 = 0 + // listViewActive int32 = -1 + + // listViewExScrollIndex int32 = 0 + // listViewExActive int32 = 2 + // listViewExFocus int32 = -1 + // listViewExList = []string{"This", "is", "a", "list view", "with", "disable", "elements", "amazing!"} + + colorPickerValue = rl.Red + + sliderValue float32 = 50 + sliderBarValue float32 = 60 + progressValue float32 = 0.4 + + forceSquaredChecked bool = false + + alphaValue float32 = 0.5 + + comboBoxActive int32 = 1 + + toggleGroupActive int32 = 0 + + viewScroll = rl.Vector2{0, 0} + + //---------------------------------------------------------------------------------- + + // Custom GUI font loading + //Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0); + //GuiSetFont(font); + + exitWindow bool = false + showMessageBox bool = false + + textInput string + showTextInputBox bool = false + + // TODO textInputFileName string + ) + + rl.SetTargetFPS(60) + //-------------------------------------------------------------------------------------- + + // Main game loop + update := func() { // Detect window close button or ESC key + _ = exitWindow + // Update + //---------------------------------------------------------------------------------- + + if rl.IsKeyPressed(rl.KeyEscape) { + showMessageBox = !showMessageBox + } + + if rl.IsKeyDown(rl.KeyLeftControl) && rl.IsKeyPressed(rl.KeyS) { + showTextInputBox = true + } + + // TODO if rl.IsFileDropped() { + // TODO var droppedFiles gui.FilePathList = rl.LoadDroppedFiles() + // TODO if (droppedFiles.count > 0) && rl.IsFileExtension(droppedFiles.paths[0], ".rgs") { + // TODO gui.LoadStyle(droppedFiles.paths[0]) + // TODO } + // TODO rl.UnloadDroppedFiles(droppedFiles) // Clear internal buffers + // TODO } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + rl.BeginDrawing() + + rl.ClearBackground(rl.GetColor(uint(gui.GetStyle(gui.DEFAULT, gui.BACKGROUND_COLOR)))) + + // raygui: controls drawing + //---------------------------------------------------------------------------------- + if dropDown000EditMode || dropDown001EditMode { + gui.Lock() + } else if !dropDown000EditMode && !dropDown001EditMode { + gui.Unlock() + } + //GuiDisable(); + + // First GUI column + //GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + forceSquaredChecked = gui.CheckBox(rl.Rectangle{25, 108, 15, 15}, "FORCE CHECK!", forceSquaredChecked) + + gui.SetStyle(gui.TEXTBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER) + //GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + gui.Spinner(rl.Rectangle{25, 135, 125, 30}, "", &spinner001Value, 0, 100, spinnerEditMode) + + if gui.ValueBox(rl.Rectangle{25, 175, 125, 30}, "", &valueBox002Value, 0, 100, valueBoxEditMode) { + valueBoxEditMode = !valueBoxEditMode + } + gui.SetStyle(gui.TEXTBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_LEFT) + if gui.TextBox(rl.Rectangle{25, 215, 125, 30}, &textBoxText, 64, textBoxEditMode) { + textBoxEditMode = !textBoxEditMode + } + + gui.SetStyle(gui.BUTTON, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER) + + if gui.Button(rl.Rectangle{25, 255, 125, 30}, gui.IconText(gui.ICON_FILE_SAVE, "Save File")) { + showTextInputBox = true + } + + gui.GroupBox(rl.Rectangle{25, 310, 125, 150}, "STATES") + //GuiLock(); + gui.SetState(gui.STATE_NORMAL) + if gui.Button(rl.Rectangle{30, 320, 115, 30}, "NORMAL") { + } + gui.SetState(gui.STATE_FOCUSED) + if gui.Button(rl.Rectangle{30, 355, 115, 30}, "FOCUSED") { + } + gui.SetState(gui.STATE_PRESSED) + if gui.Button(rl.Rectangle{30, 390, 115, 30}, "#15#PRESSED") { + } + gui.SetState(gui.STATE_DISABLED) + if gui.Button(rl.Rectangle{30, 425, 115, 30}, "DISABLED") { + } + gui.SetState(gui.STATE_NORMAL) + //GuiUnlock(); + + comboBoxActive = gui.ComboBox(rl.Rectangle{25, 470, 125, 30}, "ONE;TWO;THREE;FOUR", comboBoxActive) + + // NOTE: gui.DropdownBox must draw after any other control that can be covered on unfolding + gui.SetStyle(gui.DROPDOWNBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_LEFT) + if gui.DropdownBox(rl.Rectangle{25, 65, 125, 30}, "#01#ONE;#02#TWO;#03#THREE;#04#FOUR", &dropdownBox001Active, dropDown001EditMode) { + dropDown001EditMode = !dropDown001EditMode + } + + gui.SetStyle(gui.DROPDOWNBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER) + if gui.DropdownBox(rl.Rectangle{25, 25, 125, 30}, "ONE;TWO;THREE", &dropdownBox000Active, dropDown000EditMode) { + dropDown000EditMode = !dropDown000EditMode + } + + // Second GUI column + // listViewActive = gui.ListView(rl.Rectangle{165, 25, 140, 140}, "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey", &listViewScrollIndex, listViewActive) + // listViewExActive = gui.ListViewEx(rl.Rectangle{165, 180, 140, 200}, listViewExList, &listViewExFocus, &listViewExScrollIndex, listViewExActive) + + toggleGroupActive = gui.ToggleGroup(rl.Rectangle{165, 400, 140, 25}, "#1#ONE\n#3#TWO\n#8#THREE\n#23#", toggleGroupActive) + + // Third GUI column + gui.Panel(rl.NewRectangle(320, 25, 225, 140), "Panel Info") + colorPickerValue = gui.ColorPicker(rl.Rectangle{320, 185, 196, 192}, "", colorPickerValue) + + sliderValue = gui.Slider(rl.Rectangle{355, 400, 165, 20}, "TEST", + fmt.Sprintf("%2.2f", sliderValue), sliderValue, -50, 100) + sliderBarValue = gui.SliderBar(rl.Rectangle{320, 430, 200, 20}, "", + fmt.Sprintf("%2.2f", sliderBarValue), sliderBarValue, 0, 100) + progressValue = gui.ProgressBar(rl.Rectangle{320, 460, 200, 20}, "", "", progressValue, 0, 1) + + // NOTE: View rectangle could be used to perform some scissor test + var view rl.Rectangle + gui.ScrollPanel(rl.Rectangle{560, 25, 102, 354}, "", rl.Rectangle{560, 25, 300, 1200}, &viewScroll, &view) + + var mouseCell rl.Vector2 + gui.Grid(rl.Rectangle{560, 25 + 180 + 195, 100, 120}, "", 20, 3, &mouseCell) + + alphaValue = gui.ColorBarAlpha(rl.Rectangle{320, 490, 200, 30}, "", alphaValue) + + gui.StatusBar(rl.Rectangle{0, float32(rl.GetScreenHeight()) - 20, float32(rl.GetScreenWidth()), 20}, "This is a status bar") + + if showMessageBox { + rl.DrawRectangle(0, 0, int32(rl.GetScreenWidth()), int32(rl.GetScreenHeight()), rl.Fade(rl.RayWhite, 0.8)) + var result int32 = gui.MessageBox(rl.Rectangle{float32(rl.GetScreenWidth())/2 - 125, float32(rl.GetScreenHeight())/2 - 50, 250, 100}, gui.IconText(gui.ICON_EXIT, "Close Window"), "Do you really want to exit?", "Yes;No") + + if (result == 0) || (result == 2) { + showMessageBox = false + } else if result == 1 { + exitWindow = true + } + } + + if showTextInputBox { + rl.DrawRectangle(0, 0, int32(rl.GetScreenWidth()), int32(rl.GetScreenHeight()), rl.Fade(rl.RayWhite, 0.8)) + var secretViewActive bool + var result int32 = gui.TextInputBox( + rl.Rectangle{float32(rl.GetScreenWidth())/2 - 120, float32(rl.GetScreenHeight())/2 - 60, 240, 140}, + "Save", + gui.IconText(gui.ICON_FILE_SAVE, "Save file as..."), + "Ok;Cancel", + &textInput, 255, &secretViewActive) + + if result == 1 { + // TODO: Validate textInput value and save + // strcpy(textInputFileName, textInput) + // TODO textInputFileName = textInput + } + if (result == 0) || (result == 1) || (result == 2) { + showTextInputBox = false + //strcpy(textInput, "\0"); + textInput = "" + } + } + //---------------------------------------------------------------------------------- + + rl.EndDrawing() + //---------------------------------------------------------------------------------- + } + rl.SetMain(update) + + // De-Initialization + //-------------------------------------------------------------------------------------- + rl.CloseWindow() // Close window and OpenGL context + //-------------------------------------------------------------------------------------- +} diff --git a/index/index.html b/index/index.html index 6a1d51c..b601842 100644 --- a/index/index.html +++ b/index/index.html @@ -1,61 +1,27 @@ - - - + -
-
-
-
Loading…
-
-
- diff --git a/index/index.js b/index/index.js index d19f170..38b9226 100644 --- a/index/index.js +++ b/index/index.js @@ -1,30 +1,46 @@ -const overlay = document.getElementById('loading-overlay'); -function hideOverlay() { overlay.style.display = 'none' } -function showOverlay() { overlay.style.display = 'flex' } - -// show loading overlay -showOverlay(); +// disable right click context menu +document.getElementById("canvas").addEventListener( + "contextmenu", + (e) => e.preventDefault(), +); +// INITIALIZE RAYLIB import Module from "./rl/raylib.js"; - const wasmBinary = await fetch("./rl/raylib.wasm") - .then(r => r.arrayBuffer()); - -// disable right click context menu -document.getElementById("canvas").addEventListener('contextmenu', e => e.preventDefault()) + .then((r) => r.arrayBuffer()); -let mod = await Module({ - canvas: document.getElementById('canvas'), +const raylib = await Module({ + canvas: document.getElementById("canvas"), wasmBinary: new Uint8Array(wasmBinary), }); -window.mod = mod +// INITIALIZE GO const go = new Go(); -WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject) - .then(result => { - // hide loading overlay before running code - hideOverlay(); - go.run(result.instance); - }) - .catch(console.error); +// inject raylib +go.importObject.raylib = raylib; +go.importObject.globalThis = globalThis; +globalThis.raylib = raylib; +// compatibility with old bindings (v1) +globalThis.mod = raylib; + +import { Runtime } from "./runtime.js"; // helper funtions +//init +const runtime = new Runtime(); +// inject custom runtime methods +Object.assign(go.importObject.gojs, { + CStringFromGoString: runtime.CStringFromGoString.bind(runtime), + CStringGetLength: runtime.CStringGetLength.bind(runtime), + CStringArrayGetLength: runtime.CStringArrayGetLength.bind(runtime), + CopyToC: runtime.CopyToC.bind(runtime), + CopyToGo: runtime.CopyToGo.bind(runtime), + Alert: runtime.Alert.bind(runtime), +}); + +WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then( + (result) => { + const instance = result.instance; + globalThis.goInstance = instance; + go.run(instance); + }, +); diff --git a/index/runtime.js b/index/runtime.js new file mode 100644 index 0000000..f5e27dc --- /dev/null +++ b/index/runtime.js @@ -0,0 +1,156 @@ +// Helper functions called from Go via go:wasmimport + +class Runtime { + constructor() { + } + get mem() { + return new DataView(globalThis.goInstance.exports.mem.buffer); + } + getmem(addr, len) { + return new Uint8Array(globalThis.goInstance.exports.mem.buffer, addr, len); + } + get Sp() { + return globalThis.goInstance.exports.getsp() >>> 0; + } + // ---- Helpers from wasm_exec.js ---- + setInt32 = (addr, v) => { + return this.mem.setUint32(addr + 0, v, true); + }; + getInt32 = (addr) => { + return this.mem.getUint32(addr + 0, true); + }; + + setInt64 = (addr, v) => { + this.mem.setUint32(addr + 0, v, true); + this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true); + }; + + getInt64 = (addr) => { + const low = this.mem.getUint32(addr + 0, true); + const high = this.mem.getInt32(addr + 4, true); + return low + high * 4294967296; + }; + + loadSlice = (addr) => { + const array = this.getInt64(addr + 0); + const len = this.getInt64(addr + 8); + return this.getmem(array, len); + }; + + // ---- Runtime helpers ---- + getRaylibU8Array(cptr, len) { + return new Uint8Array( // js slice + globalThis.raylib.HEAPU8.buffer, + cptr, + len, + ); + } + // func(cptr) cstr + // Scans for null terminator and returns the length + CStringGetLength = (sp) => { + sp >>>= 0; + const cStr = this.getInt32(sp + 8 * 1); + const view = raylib.HEAPU8.subarray(cStr); + let len = 0; + while (view[len] !== 0) { + len++; + } + this.setInt32(sp + 8 * 2, len); + }; + // func(string) cptr + // returns pointer to C string in raylib memory + CStringFromGoString = (sp) => { + sp >>>= 0; + // get string addr and length + const saddr = this.getInt64(sp + 8 * 1); // go string address + const len = this.getInt64(sp + 8 * 2); // go string length + + const goStrView = this.getmem(saddr, len); // js slice + + // malloc cstr with room for null terminator + const cstr = globalThis.raylib._malloc(len + 1); + const cStrView = this.getRaylibU8Array(cstr, len + 1); + + // copy Go string to C + cStrView.set(goStrView); + // // set last byte to null terminator + cStrView[len] = 0; + // return cstr + this.setInt32(sp + 8 * 3, cstr); + }; + CStringArrayGetLength = (sp) => { + sp >>>= 0; + + const basePtr = this.getInt32(sp + 8 * 1); + const heap32 = raylib.HEAP32; + + let count = 0; + const idx = basePtr >> 2; // convert byte offset → i32 index + const heapLen = heap32.length; + + while (idx + count < heapLen) { + const ptr = heap32[idx + count]; + if (ptr === 0) break; + count++; + } + + if (idx + count >= heapLen) { + throw new Error("CStringArrayGetLength: reached heap end without finding NULL terminator"); + } + + this.setInt32(sp + 8 * 2, count); + }; + // func(src unsafe.Pointer, srcSize, dstCptr cptr) + // copies Go memory to C memory. Useful for copying slices and structs. + // Destination C array must have enough space. + // src must be a type. cannot be a slice. To pass a slice, use unsafe.SliceData + CopyToC = (sp) => { + sp >>>= 0; + const srcGoPtr = this.getInt64(sp + 8 * 1); + const srcSize = this.getInt32(sp + 8 * 2); // size of the dstGoPtr + // size and pointer are packed into a single 64bit int by Go's compiler + const dstCptr = this.getInt32(sp + 8 * 2 + 4); + + const goBytes = this.getmem(srcGoPtr, srcSize); + this.getRaylibU8Array(dstCptr, srcSize).set(goBytes); + }; + // func(dstGoPtr unsafe.Pointer, size int32, src cptr) + // copies C memory to a Go pointer. Useful for copying C structs into Go structs + // + // example usage: + // type Person struct{ + // Age string + // } + // + // var cPtrToPersonInCHeap cptr = ... + // + // var p Person + // CopyToGo(unsafe.Pointer(&p),unsafe.SizeOf(p),cPtrToPersonInCHeap) + // + // p.Age == (whatever it was in C) + CopyToGo = (sp) => { + sp >>>= 0; + const dstGoPtr = this.getInt64(sp + 8 * 1); + const size = this.getInt32(sp + 8 * 2); // size of the dstGoPtr + // size and pointer are packed into a single 64bit int by Go's compiler + const srcCptr = this.getInt32(sp + 8 * 2 + 4); + + const srcCBytes = this.getRaylibU8Array(srcCptr, size); + const dstGoBytes = this.getmem(dstGoPtr, size); + // copy C bytes to Go + dstGoBytes.set(srcCBytes); + }; + // func alert(string) + Alert = (sp) => { + sp >>>= 0; + const saddr = this.getInt64(sp + 8 * 1); + const len = this.getInt64(sp + 8 * 2); + const strU8 = this.getmem(saddr, len); + + const decoder = new TextDecoder("utf-8"); // 'utf-8' is the default encoding + const str = decoder.decode(strU8); + alert(str); + }; +} + +export { Runtime }; diff --git a/raygui/cstring.go b/raygui/cstring.go new file mode 100644 index 0000000..03187f9 --- /dev/null +++ b/raygui/cstring.go @@ -0,0 +1,109 @@ +//go:build js + +package raygui + +import ( + "github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime" +) + +func makeStringArray(size int) wasm.Ptr { + var arr = make([]wasm.Ptr, size) + ptr, _ := wasm.CopySliceToC(arr) + return ptr +} + +func setStringArray(arr wasm.Ptr, idx int, cstring wasm.Ptr) { + wasm.CopyToC(&cstring, arr+(wasm.Ptr(idx*wasm.PTR_SIZE))) +} + +// TODO: do this in the runtime if possible. +// CStringArray represents an array of pointers to NULL terminated C strings, +// the array itself is terminated with a NULL +type CStringArray struct { + Pointer wasm.Ptr + Length int +} + +// NewCStringArray returns an instance of CStringArray +func NewCStringArray() *CStringArray { + return &CStringArray{} +} + +// NewCStringArray returns an instance of CStringArray +func NewCStringArrayFromPointer(p wasm.Ptr) *CStringArray { + length := wasm.CStringArrayGetLength(p) + return &CStringArray{ + Pointer: p, + Length: int(length), + } +} + +// NewCStringArrayFromSlice makes an instance of CStringArray then copy the +// input slice to it. The returned CStringArray takes ownership of the allocated +// C memory and must be Free()d by the caller. +func NewCStringArrayFromSlice(ss []string) *CStringArray { + var arr CStringArray + arr.Copy(ss) + return &arr +} + +// TODO: do this in the runtime if possible. +// ToSlice converts CStringArray to Go slice of strings +func (arr *CStringArray) ToSlice() []string { + if arr.Length == 0 || arr.Pointer == 0 { + return []string{} + } + + var ss []string + p := arr.Pointer + //NOTE: upstream raylib-go does this wrong. + for i := 0; i < arr.Length; i++ { + var cs wasm.Ptr + wasm.CopyToGo(p, wasm.PTR_SIZE, &cs) + if cs == 0 { // skip NULL - the last element + break + } + ss = append(ss, wasm.GoString(cs)) + p += wasm.PTR_SIZE + } + return ss +} + +// TODO: do this in the runtime if possible. +// Copy converts Go slice of strings to C underlying struct of CStringArray +func (arr *CStringArray) Copy(ss []string) { + // Free existing C memory if any + if arr.Pointer != 0 || arr.Length > 0 { + arr.Free() + } + + arr.Length = len(ss) + 1 // one more element for NULL at the end + arr.Pointer = makeStringArray(arr.Length) + + for i, s := range ss { + str := wasm.CString(s) + // copy the pointer into the array. + // A CStringArray is an array of pointers. + wasm.CopyToC(&str, arr.Pointer+wasm.Ptr(i*wasm.PTR_SIZE)) + } +} + +// TODO: do this in the runtime if possible. +// +// Free frees C underlying struct of CStringArray +// MUST call this method after using CStringArray +// Exception: If you use NewCStringArrayFromPointer() to create CStringArray object +// and you use other way to free C underlying structure pointed by the pointer, +// then don't need to call Free() +func (arr *CStringArray) Free() { + for i := range wasm.Ptr(arr.Length) { + idx := (i * wasm.PTR_SIZE) + var cs wasm.Ptr + wasm.CopyToGo(arr.Pointer+idx, wasm.PTR_SIZE, &cs) + if cs == 0 { // skip NULL - the last element + break + } + wasm.Free(cs) + } + wasm.Free(arr.Pointer) +} diff --git a/raygui/go.mod b/raygui/go.mod new file mode 100644 index 0000000..cb90c60 --- /dev/null +++ b/raygui/go.mod @@ -0,0 +1,14 @@ +module github.com/BrownNPC/Raylib-Go-Wasm/raygui + +require ( + github.com/BrownNPC/Raylib-Go-Wasm/raylib v0.0.0-20260421110350-7c24b2d5e6d3 + github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime v0.0.0-20260421110350-7c24b2d5e6d3 +) + +require github.com/BrownNPC/wasm-ffi-go v1.2.0 // indirect + +replace github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime => ../wasm-runtime + +replace github.com/BrownNPC/Raylib-Go-Wasm/raylib => ../raylib + +go 1.26.1 diff --git a/raygui/go.sum b/raygui/go.sum new file mode 100644 index 0000000..b242b0a --- /dev/null +++ b/raygui/go.sum @@ -0,0 +1,2 @@ +github.com/BrownNPC/wasm-ffi-go v1.2.0 h1:Lknst90sTLTkE870OKNP/Vw36TohQIJ4ln8W1IG9Zl0= +github.com/BrownNPC/wasm-ffi-go v1.2.0/go.mod h1:D5+RBMb672fgw6vPz4HOWYxpyrmPrIao8VqlXihOFFg= diff --git a/raygui/raygui.go b/raygui/raygui.go new file mode 100644 index 0000000..2e5e9ac --- /dev/null +++ b/raygui/raygui.go @@ -0,0 +1,1595 @@ +//go:build js + +package raygui + +import ( + "image/color" + + wasm "github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime" + rl "github.com/BrownNPC/Raylib-Go-Wasm/raylib" +) + +type ( + ControlID uint16 + PropertyID uint16 + PropertyValue uint32 + + IconID uint32 +) + +func (p PropertyID) IsExtended() bool { + return p >= 16 +} + +func (v PropertyValue) AsColor() rl.Color { + return rl.Color{uint8(v >> 24), uint8(v >> 16), uint8(v >> 8), uint8(v)} +} + +func NewColorPropertyValue(color rl.Color) PropertyValue { + return PropertyValue(uint32(color.R)<<24 + uint32(color.G)<<16 + uint32(color.B)<<8 + uint32(color.A)) +} + +// Gui control state +const ( + STATE_NORMAL PropertyValue = iota + STATE_FOCUSED + STATE_PRESSED + STATE_DISABLED +) + +// Gui control text alignment +const ( + TEXT_ALIGN_LEFT PropertyValue = iota + TEXT_ALIGN_CENTER + TEXT_ALIGN_RIGHT +) + +// Gui control text alignment vertical +// NOTE: Text vertical position inside the text bounds +const ( + TEXT_ALIGN_TOP PropertyValue = iota + TEXT_ALIGN_MIDDLE + TEXT_ALIGN_BOTTOM +) + +// Gui control text wrap mode +// NOTE: Useful for multiline text +const ( + TEXT_WRAP_NONE PropertyValue = iota + TEXT_WRAP_CHAR + TEXT_WRAP_WORD +) + +const ( + SCROLLBAR_LEFT_SIDE PropertyValue = iota + SCROLLBAR_RIGHT_SIDE +) + +// Gui controls +const ( + // Default -> populates to all controls when set + DEFAULT ControlID = iota + + // Basic controls + LABEL // Used also for: LABELBUTTON + BUTTON + TOGGLE // Used also for: TOGGLEGROUP + SLIDER // Used also for: SLIDERBAR, TOGGLESLIDER + PROGRESSBAR + CHECKBOX + COMBOBOX + DROPDOWNBOX + TEXTBOX // Used also for: TEXTBOXMULTI + VALUEBOX + CONTROL11 + LISTVIEW + COLORPICKER + SCROLLBAR + STATUSBAR +) + +// ---------------------------------------------------------------------------------- +// Module Types and Structures Definition +// ---------------------------------------------------------------------------------- +// Gui control property style color element +const ( + BORDER PropertyID = iota + BASE + TEXT + OTHER +) + +// Gui base properties for every control +// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties) +const ( + BORDER_COLOR_NORMAL PropertyID = iota // Control border color in STATE_NORMAL + BASE_COLOR_NORMAL // Control base color in STATE_NORMAL + TEXT_COLOR_NORMAL // Control text color in STATE_NORMAL + BORDER_COLOR_FOCUSED // Control border color in STATE_FOCUSED + BASE_COLOR_FOCUSED // Control base color in STATE_FOCUSED + TEXT_COLOR_FOCUSED // Control text color in STATE_FOCUSED + BORDER_COLOR_PRESSED // Control border color in STATE_PRESSED + BASE_COLOR_PRESSED // Control base color in STATE_PRESSED + TEXT_COLOR_PRESSED // Control text color in STATE_PRESSED + BORDER_COLOR_DISABLED // Control border color in STATE_DISABLED + BASE_COLOR_DISABLED // Control base color in STATE_DISABLED + TEXT_COLOR_DISABLED // Control text color in STATE_DISABLED + BORDER_WIDTH // Control border size, 0 for no border + TEXT_PADDING // Control text padding, not considering border + TEXT_ALIGNMENT // Control text horizontal alignment inside control text bound (after border and padding) +) + +// Gui extended properties depend on control +// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default, max 8 properties) +// ---------------------------------------------------------------------------------- +// DEFAULT extended properties +// NOTE: Those properties are common to all controls or global +// WARNING: We only have 8 slots for those properties by default!!! -> New global control: TEXT? +const ( + TEXT_SIZE PropertyID = 16 + iota // Text size (glyphs max height) + TEXT_SPACING // Text spacing between glyphs + LINE_COLOR // Line control color + BACKGROUND_COLOR // Background color + TEXT_LINE_SPACING // Text spacing between lines + TEXT_ALIGNMENT_VERTICAL // Text vertical alignment inside text bounds (after border and padding) + TEXT_WRAP_MODE // Text wrap-mode inside text bounds +) + +// Toggle/ToggleGroup +const ( + GROUP_PADDING PropertyID = 16 + iota // ToggleGroup separation between toggles +) + +// Slider/SliderBar +const ( + SLIDER_WIDTH PropertyID = 16 + iota // Slider size of internal bar + SLIDER_PADDING // Slider/SliderBar internal bar padding +) + +// ProgressBar +const ( + PROGRESS_PADDING PropertyID = 16 + iota // ProgressBar internal padding +) + +// ScrollBar +const ( + ARROWS_SIZE PropertyID = 16 + iota // ScrollBar arrows size + ARROWS_VISIBLE // ScrollBar arrows visible + SCROLL_SLIDER_PADDING // ScrollBar slider internal padding + SCROLL_SLIDER_SIZE // ScrollBar slider size + SCROLL_PADDING // ScrollBar scroll padding from arrows + SCROLL_SPEED // ScrollBar scrolling speed +) + +// CheckBox +const ( + CHECK_PADDING PropertyID = 16 + iota // CheckBox internal check padding +) + +// ComboBox +const ( + COMBO_BUTTON_WIDTH PropertyID = 16 + iota // ComboBox right button width + COMBO_BUTTON_SPACING // ComboBox button separation +) + +// DropdownBox +const ( + ARROW_PADDING PropertyID = 16 + iota // DropdownBox arrow separation from border and items + DROPDOWN_ITEMS_SPACING // DropdownBox items separation + DROPDOWN_ARROW_HIDDEN // DropdownBox arrow hidden + DROPDOWN_ROLL_UP // DropdownBox roll up flag (default rolls down) +) + +// TextBox/TextBoxMulti/ValueBox/Spinner +const ( + TEXT_READONLY PropertyID = 16 + iota // TextBox in read-only mode: 0-text editable, 1-text no-editable +) + +// ValueBox/Spinner +const ( + SPINNER_BUTTON_WIDTH PropertyID = 16 // Spinner left/right buttons width + SPINNER_BUTTON_SPACING // Spinner buttons separation +) + +// ListView +const ( + LIST_ITEMS_HEIGHT PropertyID = 16 + iota // ListView items height + LIST_ITEMS_SPACING // ListView items separation + SCROLLBAR_WIDTH // ListView scrollbar size (usually width) + SCROLLBAR_SIDE // ListView scrollbar side (0-SCROLLBAR_LEFT_SIDE, 1-SCROLLBAR_RIGHT_SIDE) + LIST_ITEMS_BORDER_NORMAL // ListView items border enabled in normal state + LIST_ITEMS_BORDER_WIDTH // ListView items border width +) + +// ColorPicker +const ( + COLOR_SELECTOR_SIZE PropertyID = 16 + iota + HUEBAR_WIDTH // ColorPicker right hue bar width + HUEBAR_PADDING // ColorPicker right hue bar separation from panel + HUEBAR_SELECTOR_HEIGHT // ColorPicker right hue bar selector height + HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow +) + +// Icons enumeration +const ( + ICON_NONE IconID = 0 + ICON_FOLDER_FILE_OPEN IconID = 1 + ICON_FILE_SAVE_CLASSIC IconID = 2 + ICON_FOLDER_OPEN IconID = 3 + ICON_FOLDER_SAVE IconID = 4 + ICON_FILE_OPEN IconID = 5 + ICON_FILE_SAVE IconID = 6 + ICON_FILE_EXPORT IconID = 7 + ICON_FILE_ADD IconID = 8 + ICON_FILE_DELETE IconID = 9 + ICON_FILETYPE_TEXT IconID = 10 + ICON_FILETYPE_AUDIO IconID = 11 + ICON_FILETYPE_IMAGE IconID = 12 + ICON_FILETYPE_PLAY IconID = 13 + ICON_FILETYPE_VIDEO IconID = 14 + ICON_FILETYPE_INFO IconID = 15 + ICON_FILE_COPY IconID = 16 + ICON_FILE_CUT IconID = 17 + ICON_FILE_PASTE IconID = 18 + ICON_CURSOR_HAND IconID = 19 + ICON_CURSOR_POINTER IconID = 20 + ICON_CURSOR_CLASSIC IconID = 21 + ICON_PENCIL IconID = 22 + ICON_PENCIL_BIG IconID = 23 + ICON_BRUSH_CLASSIC IconID = 24 + ICON_BRUSH_PAINTER IconID = 25 + ICON_WATER_DROP IconID = 26 + ICON_COLOR_PICKER IconID = 27 + ICON_RUBBER IconID = 28 + ICON_COLOR_BUCKET IconID = 29 + ICON_TEXT_T IconID = 30 + ICON_TEXT_A IconID = 31 + ICON_SCALE IconID = 32 + ICON_RESIZE IconID = 33 + ICON_FILTER_POINT IconID = 34 + ICON_FILTER_BILINEAR IconID = 35 + ICON_CROP IconID = 36 + ICON_CROP_ALPHA IconID = 37 + ICON_SQUARE_TOGGLE IconID = 38 + ICON_SYMMETRY IconID = 39 + ICON_SYMMETRY_HORIZONTAL IconID = 40 + ICON_SYMMETRY_VERTICAL IconID = 41 + ICON_LENS IconID = 42 + ICON_LENS_BIG IconID = 43 + ICON_EYE_ON IconID = 44 + ICON_EYE_OFF IconID = 45 + ICON_FILTER_TOP IconID = 46 + ICON_FILTER IconID = 47 + ICON_TARGET_POINT IconID = 48 + ICON_TARGET_SMALL IconID = 49 + ICON_TARGET_BIG IconID = 50 + ICON_TARGET_MOVE IconID = 51 + ICON_CURSOR_MOVE IconID = 52 + ICON_CURSOR_SCALE IconID = 53 + ICON_CURSOR_SCALE_RIGHT IconID = 54 + ICON_CURSOR_SCALE_LEFT IconID = 55 + ICON_UNDO IconID = 56 + ICON_REDO IconID = 57 + ICON_REREDO IconID = 58 + ICON_MUTATE IconID = 59 + ICON_ROTATE IconID = 60 + ICON_REPEAT IconID = 61 + ICON_SHUFFLE IconID = 62 + ICON_EMPTYBOX IconID = 63 + ICON_TARGET IconID = 64 + ICON_TARGET_SMALL_FILL IconID = 65 + ICON_TARGET_BIG_FILL IconID = 66 + ICON_TARGET_MOVE_FILL IconID = 67 + ICON_CURSOR_MOVE_FILL IconID = 68 + ICON_CURSOR_SCALE_FILL IconID = 69 + ICON_CURSOR_SCALE_RIGHT_FILL IconID = 70 + ICON_CURSOR_SCALE_LEFT_FILL IconID = 71 + ICON_UNDO_FILL IconID = 72 + ICON_REDO_FILL IconID = 73 + ICON_REREDO_FILL IconID = 74 + ICON_MUTATE_FILL IconID = 75 + ICON_ROTATE_FILL IconID = 76 + ICON_REPEAT_FILL IconID = 77 + ICON_SHUFFLE_FILL IconID = 78 + ICON_EMPTYBOX_SMALL IconID = 79 + ICON_BOX IconID = 80 + ICON_BOX_TOP IconID = 81 + ICON_BOX_TOP_RIGHT IconID = 82 + ICON_BOX_RIGHT IconID = 83 + ICON_BOX_BOTTOM_RIGHT IconID = 84 + ICON_BOX_BOTTOM IconID = 85 + ICON_BOX_BOTTOM_LEFT IconID = 86 + ICON_BOX_LEFT IconID = 87 + ICON_BOX_TOP_LEFT IconID = 88 + ICON_BOX_CENTER IconID = 89 + ICON_BOX_CIRCLE_MASK IconID = 90 + ICON_POT IconID = 91 + ICON_ALPHA_MULTIPLY IconID = 92 + ICON_ALPHA_CLEAR IconID = 93 + ICON_DITHERING IconID = 94 + ICON_MIPMAPS IconID = 95 + ICON_BOX_GRID IconID = 96 + ICON_GRID IconID = 97 + ICON_BOX_CORNERS_SMALL IconID = 98 + ICON_BOX_CORNERS_BIG IconID = 99 + ICON_FOUR_BOXES IconID = 100 + ICON_GRID_FILL IconID = 101 + ICON_BOX_MULTISIZE IconID = 102 + ICON_ZOOM_SMALL IconID = 103 + ICON_ZOOM_MEDIUM IconID = 104 + ICON_ZOOM_BIG IconID = 105 + ICON_ZOOM_ALL IconID = 106 + ICON_ZOOM_CENTER IconID = 107 + ICON_BOX_DOTS_SMALL IconID = 108 + ICON_BOX_DOTS_BIG IconID = 109 + ICON_BOX_CONCENTRIC IconID = 110 + ICON_BOX_GRID_BIG IconID = 111 + ICON_OK_TICK IconID = 112 + ICON_CROSS IconID = 113 + ICON_ARROW_LEFT IconID = 114 + ICON_ARROW_RIGHT IconID = 115 + ICON_ARROW_DOWN IconID = 116 + ICON_ARROW_UP IconID = 117 + ICON_ARROW_LEFT_FILL IconID = 118 + ICON_ARROW_RIGHT_FILL IconID = 119 + ICON_ARROW_DOWN_FILL IconID = 120 + ICON_ARROW_UP_FILL IconID = 121 + ICON_AUDIO IconID = 122 + ICON_FX IconID = 123 + ICON_WAVE IconID = 124 + ICON_WAVE_SINUS IconID = 125 + ICON_WAVE_SQUARE IconID = 126 + ICON_WAVE_TRIANGULAR IconID = 127 + ICON_CROSS_SMALL IconID = 128 + ICON_PLAYER_PREVIOUS IconID = 129 + ICON_PLAYER_PLAY_BACK IconID = 130 + ICON_PLAYER_PLAY IconID = 131 + ICON_PLAYER_PAUSE IconID = 132 + ICON_PLAYER_STOP IconID = 133 + ICON_PLAYER_NEXT IconID = 134 + ICON_PLAYER_RECORD IconID = 135 + ICON_MAGNET IconID = 136 + ICON_LOCK_CLOSE IconID = 137 + ICON_LOCK_OPEN IconID = 138 + ICON_CLOCK IconID = 139 + ICON_TOOLS IconID = 140 + ICON_GEAR IconID = 141 + ICON_GEAR_BIG IconID = 142 + ICON_BIN IconID = 143 + ICON_HAND_POINTER IconID = 144 + ICON_LASER IconID = 145 + ICON_COIN IconID = 146 + ICON_EXPLOSION IconID = 147 + ICON_1UP IconID = 148 + ICON_PLAYER IconID = 149 + ICON_PLAYER_JUMP IconID = 150 + ICON_KEY IconID = 151 + ICON_DEMON IconID = 152 + ICON_TEXT_POPUP IconID = 153 + ICON_GEAR_EX IconID = 154 + ICON_CRACK IconID = 155 + ICON_CRACK_POINTS IconID = 156 + ICON_STAR IconID = 157 + ICON_DOOR IconID = 158 + ICON_EXIT IconID = 159 + ICON_MODE_2D IconID = 160 + ICON_MODE_3D IconID = 161 + ICON_CUBE IconID = 162 + ICON_CUBE_FACE_TOP IconID = 163 + ICON_CUBE_FACE_LEFT IconID = 164 + ICON_CUBE_FACE_FRONT IconID = 165 + ICON_CUBE_FACE_BOTTOM IconID = 166 + ICON_CUBE_FACE_RIGHT IconID = 167 + ICON_CUBE_FACE_BACK IconID = 168 + ICON_CAMERA IconID = 169 + ICON_SPECIAL IconID = 170 + ICON_LINK_NET IconID = 171 + ICON_LINK_BOXES IconID = 172 + ICON_LINK_MULTI IconID = 173 + ICON_LINK IconID = 174 + ICON_LINK_BROKE IconID = 175 + ICON_TEXT_NOTES IconID = 176 + ICON_NOTEBOOK IconID = 177 + ICON_SUITCASE IconID = 178 + ICON_SUITCASE_ZIP IconID = 179 + ICON_MAILBOX IconID = 180 + ICON_MONITOR IconID = 181 + ICON_PRINTER IconID = 182 + ICON_PHOTO_CAMERA IconID = 183 + ICON_PHOTO_CAMERA_FLASH IconID = 184 + ICON_HOUSE IconID = 185 + ICON_HEART IconID = 186 + ICON_CORNER IconID = 187 + ICON_VERTICAL_BARS IconID = 188 + ICON_VERTICAL_BARS_FILL IconID = 189 + ICON_LIFE_BARS IconID = 190 + ICON_INFO IconID = 191 + ICON_CROSSLINE IconID = 192 + ICON_HELP IconID = 193 + ICON_FILETYPE_ALPHA IconID = 194 + ICON_FILETYPE_HOME IconID = 195 + ICON_LAYERS_VISIBLE IconID = 196 + ICON_LAYERS IconID = 197 + ICON_WINDOW IconID = 198 + ICON_HIDPI IconID = 199 + ICON_FILETYPE_BINARY IconID = 200 + ICON_HEX IconID = 201 + ICON_SHIELD IconID = 202 + ICON_FILE_NEW IconID = 203 + ICON_FOLDER_ADD IconID = 204 + ICON_ALARM IconID = 205 + ICON_CPU IconID = 206 + ICON_ROM IconID = 207 + ICON_STEP_OVER IconID = 208 + ICON_STEP_INTO IconID = 209 + ICON_STEP_OUT IconID = 210 + ICON_RESTART IconID = 211 + ICON_BREAKPOINT_ON IconID = 212 + ICON_BREAKPOINT_OFF IconID = 213 + ICON_BURGER_MENU IconID = 214 + ICON_CASE_SENSITIVE IconID = 215 + ICON_REG_EXP IconID = 216 + ICON_FOLDER IconID = 217 + ICON_FILE IconID = 218 + ICON_SAND_TIMER IconID = 219 + ICON_WARNING IconID = 220 + ICON_HELP_BOX IconID = 221 + ICON_INFO_BOX IconID = 222 + ICON_PRIORITY IconID = 223 + ICON_LAYERS_ISO IconID = 224 + ICON_LAYERS2 IconID = 225 + ICON_MLAYERS IconID = 226 + ICON_MAPS IconID = 227 + ICON_HOT IconID = 228 + ICON_LABEL IconID = 229 + ICON_NAME_ID IconID = 230 + ICON_SLICING IconID = 231 + ICON_MANUAL_CONTROL IconID = 232 + ICON_COLLISION IconID = 233 + ICON_CIRCLE_ADD IconID = 234 + ICON_CIRCLE_ADD_FILL IconID = 235 + ICON_CIRCLE_WARNING IconID = 236 + ICON_CIRCLE_WARNING_FILL IconID = 237 + ICON_BOX_MORE IconID = 238 + ICON_BOX_MORE_FILL IconID = 239 + ICON_BOX_MINUS IconID = 240 + ICON_BOX_MINUS_FILL IconID = 241 + ICON_UNION IconID = 242 + ICON_INTERSECTION IconID = 243 + ICON_DIFFERENCE IconID = 244 + ICON_SPHERE IconID = 245 + ICON_CYLINDER IconID = 246 + ICON_CONE IconID = 247 + ICON_ELLIPSOID IconID = 248 + ICON_CAPSULE IconID = 249 + ICON_250 IconID = 250 + ICON_251 IconID = 251 + ICON_252 IconID = 252 + ICON_253 IconID = 253 + ICON_254 IconID = 254 + ICON_255 IconID = 255 +) + +//---------------------------------------------------------------------------------- +// Gui Setup Functions Definition +//---------------------------------------------------------------------------------- + +//go:wasmimport raylib _GuiEnable +//go:noescape +func guiEnable() + +// Enable gui global state +func Enable() { + guiEnable() +} + +//go:wasmimport raylib _GuiDisable +//go:noescape +func guiDisable() + +// Disable gui global state +func Disable() { + guiDisable() +} + +//go:wasmimport raylib _GuiLock +//go:noescape +func guiLock() + +// Lock gui global state +func Lock() { + guiLock() +} + +//go:wasmimport raylib _GuiUnlock +//go:noescape +func guiUnlock() + +// Unlock gui global state +func Unlock() { + guiUnlock() +} + +// Check if gui is locked (global state) +// +//go:wasmimport raylib _GuiIsLocked +//go:noescape +func IsLocked() bool + +// Set gui controls alpha global state +// +//go:wasmimport raylib _GuiSetAlpha +//go:noescape +func SetAlpha(alpha float32) + +// Set gui state (global state) +// +//go:wasmimport raylib _GuiSetState +//go:noescape +func SetState(state PropertyValue) + +// Get gui state (global state) +// +//go:wasmimport raylib _GuiGetState +//go:noescape +func GetState() PropertyValue + +//go:wasmimport raylib _GuiSetFont +//go:noescape +func guiSetFont(font wasm.Ptr) + +// Set custom gui font +func SetFont(font rl.Font) { + v, free := wasm.CopyValueToC(&font) + defer free() + guiSetFont(v) +} + +//go:wasmimport raylib _GuiGetFont +//go:noescape +func guiGetFont(ret wasm.Ptr) + +// Get custom gui font +func GetFont() rl.Font { + var ret rl.Font + v, free := wasm.MallocV[rl.Font]() + defer free() + + guiGetFont(v) + wasm.CopyValueToGo(v, &ret) + return ret +} + +//go:wasmimport raylib _GuiSetStyle +//go:noescape +func guiSetStyle(control, property, value int32) int32 + +// Set control style property value +func SetStyle(control ControlID, property PropertyID, value PropertyValue) { + ccontrol := int32(control) + cproperty := int32(property) + cvalue := int32(value) + guiSetStyle(ccontrol, cproperty, cvalue) +} + +//go:wasmimport raylib _GuiGetStyle +//go:noescape +func guiGetStyle(control, property int32) int32 + +// Get control style property value +func GetStyle(control ControlID, property PropertyID) PropertyValue { + ccontrol := int32(control) + cproperty := int32(property) + return PropertyValue(guiGetStyle(ccontrol, cproperty)) +} + +func GetColor(control ControlID, property PropertyID) rl.Color { + color := guiGetStyle(int32(control), int32(property)) + return rl.Color{R: uint8(color >> 24), G: uint8(color >> 16), B: uint8(color >> 8), A: uint8(color)} +} + +//---------------------------------------------------------------------------------- +// Gui Controls Functions Definition +//---------------------------------------------------------------------------------- + +//go:wasmimport raylib _GuiWindowBox +//go:noescape +func guiWindowBox(bounds wasm.Ptr, title wasm.Ptr) int32 + +// Window Box control +func WindowBox(bounds rl.Rectangle, title string) bool { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + ctitle := wasm.CString(title) + defer wasm.Free(ctitle) + return guiWindowBox(cbounds, ctitle) != 0 +} + +//go:wasmimport raylib _GuiGroupBox +//go:noescape +func guiGroupBox(bounds wasm.Ptr, text wasm.Ptr) + +// Group Box control with text name +func GroupBox(bounds rl.Rectangle, text string) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiGroupBox(cbounds, ctext) +} + +//go:wasmimport raylib _GuiLine +//go:noescape +func guiLine(bounds wasm.Ptr, text wasm.Ptr) + +// Line control +func Line(bounds rl.Rectangle, text string) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiLine(cbounds, ctext) +} + +//go:wasmimport raylib _GuiPanel +//go:noescape +func guiPanel(bounds wasm.Ptr, text wasm.Ptr) + +// Panel control +func Panel(bounds rl.Rectangle, text string) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiPanel(cbounds, ctext) +} + +/* +//go:wasmimport raylib _GuiTabBar +//go:noescape +func guiTabBar(bounds rl.Rectangle, text []wasm.Ptr, active *int32) int32 + +// Tab Bar control, returns the current TAB closing requested, -1 otherwise +func TabBar(bounds rl.Rectangle, text []string, active *int32) int32 { + var cbounds rl.Rectangle + cbounds.X = float32(bounds.X) + cbounds.Y = float32(bounds.Y) + cbounds.Width = float32(bounds.Width) + cbounds.Height = float32(bounds.Height) + + ctext := NewCStringArrayFromSlice(text) + defer ctext.Free() + + count := int32(len(text)) + + if active == nil { + active = new(int32) + } + cactive := int32(*active) + defer func() { + *active = int32(cactive) + }() + return int32(guiTabBar(cbounds, (*wasm.Ptr)(ctext.Pointer), count, cactive)) +} +*/ + +//go:wasmimport raylib _GuiScrollPanel +//go:noescape +func guiScrollPanel(bounds wasm.Ptr, text wasm.Ptr, content wasm.Ptr, scroll wasm.Ptr, view wasm.Ptr) + +// Scroll Panel control +func ScrollPanel(bounds rl.Rectangle, text string, content rl.Rectangle, scroll *rl.Vector2, view *rl.Rectangle) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + ccontent, free := wasm.CopyValueToC(&content) + defer free() + + cscroll, free := wasm.CopyValueToC(scroll) + defer free() + + cview, free := wasm.CopyValueToC(view) + defer free() + + guiScrollPanel(cbounds, ctext, ccontent, cscroll, cview) + + wasm.CopyValueToGo(cscroll, scroll) + wasm.CopyValueToGo(cview, view) +} + +//go:wasmimport raylib _GuiLabel +//go:noescape +func guiLabel(bounds wasm.Ptr, text wasm.Ptr) + +// Label control +func Label(bounds rl.Rectangle, text string) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiLabel(cbounds, ctext) +} + +//go:wasmimport raylib _GuiButton +//go:noescape +func guiButton(bounds wasm.Ptr, text wasm.Ptr) int32 + +// Button control, returns true when clicked +func Button(bounds rl.Rectangle, text string) bool { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + return guiButton(cbounds, ctext) != 0 +} + +//go:wasmimport raylib _GuiLabelButton +//go:noescape +func guiLabelButton(bounds wasm.Ptr, text wasm.Ptr) int32 + +// LabelButton control, returns true when clicked +func LabelButton(bounds rl.Rectangle, text string) bool { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return guiLabelButton(cbounds, ctext) != 0 +} + +//go:wasmimport raylib _GuiToggle +//go:noescape +func guiToggle(bounds wasm.Ptr, text wasm.Ptr, active int32) int32 + +// Toggle control, returns true when active +func Toggle(bounds rl.Rectangle, text string, active bool) bool { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + return guiToggle(cbounds, ctext, wasm.BtoI(active)) != 0 +} + +//go:wasmimport raylib _GuiToggleGroup +//go:noescape +func guiToggleGroup(bounds wasm.Ptr, text wasm.Ptr, active int32) int32 + +// ToggleGroup control, returns active toggle index +func ToggleGroup(bounds rl.Rectangle, text string, active int32) int32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return guiToggleGroup(cbounds, ctext, active) +} + +//go:wasmimport raylib _GuiToggleSlider +//go:noescape +func guiToggleSlider(bounds wasm.Ptr, text wasm.Ptr, active int32) int32 + +// ToggleSlider control, returns true when clicked +func ToggleSlider(bounds rl.Rectangle, text string, active int32) int32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return guiToggleSlider(cbounds, ctext, active) +} + +//go:wasmimport raylib _GuiCheckBox +//go:noescape +func guiCheckBox(bounds wasm.Ptr, text wasm.Ptr, checked wasm.Ptr) int32 + +// CheckBox control, returns true when active +func CheckBox(bounds rl.Rectangle, text string, checked bool) bool { + + cbounds, freeBounds := wasm.CopyValueToC(&bounds) + defer freeBounds() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + cchecked, freeChecked := wasm.CopyValueToC(&checked) + defer func() { + wasm.CopyValueToGo(cchecked,&checked) + freeChecked() + }() + guiCheckBox(cbounds, ctext, cchecked) + return checked +} + +//go:wasmimport raylib _GuiComboBox +//go:noescape +func guiComboBox(bounds wasm.Ptr, text wasm.Ptr, active int32) int32 + +// ComboBox control, returns selected item index +func ComboBox(bounds rl.Rectangle, text string, active int32) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return guiComboBox(cbounds, ctext, active) +} + +//go:wasmimport raylib _GuiDropdownBox +//go:noescape +func guiDropdownBox(bounds wasm.Ptr, text wasm.Ptr, active wasm.Ptr, editMode int32) int32 + +// DropdownBox control, returns true when clicked +func DropdownBox(bounds rl.Rectangle, text string, active *int32, editMode bool) bool { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + if active == nil { + active = new(int32) + } + cactive, free := wasm.CopyValueToC(active) + defer func() { + wasm.CopyValueToGo(cactive, active) + free() + }() + + ceditMode := wasm.BtoI(editMode) + + return guiDropdownBox(cbounds, ctext, cactive, ceditMode) != 0 +} + +//go:wasmimport raylib _GuiTextBox +//go:noescape +func guiTextBox(bounds wasm.Ptr, text wasm.Ptr, textSize int32, editMode int32) int32 + +// TextBox control, updates input text, returns true on ENTER pressed or defocused +func TextBox(bounds rl.Rectangle, text *string, textSize int32, editMode bool) bool { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + // Allocate writable buffer of size textSize + // Truncate to textSize-1 and NUL-terminate + currentText := []byte(*text) + if len(currentText) > int(textSize)-1 { + currentText = currentText[:int(textSize)-1] + } + // Create a zero-filled buffer of size textSize + buffer := make([]byte, textSize) + copy(buffer, currentText) + // buffer is already zero-filled by make, so NUL-termination is automatic + + ctext, freeText := wasm.CopySliceToC(buffer) + defer freeText() + + ctextSize := int32(textSize) + ceditMode := wasm.BtoI(editMode) + + result := guiTextBox(cbounds, ctext, ctextSize, ceditMode) != 0 + + // Copy the result back + *text = wasm.GoString(ctext) + + return result +} + +//go:wasmimport raylib _GuiSpinner +//go:noescape +func guiSpinner(bounds wasm.Ptr, text wasm.Ptr, value wasm.Ptr, minValue, maxValue int32, editMode int32) int32 + +// Spinner control, sets value to the selected number and returns true when clicked. +func Spinner(bounds rl.Rectangle, text string, value *int32, minValue, maxValue int, editMode bool) bool { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + if value == nil { + value = new(int32) + } + cvalue, free := wasm.CopyValueToC(value) + defer func() { + wasm.CopyValueToGo(cvalue, value) + free() + }() + + return guiSpinner(cbounds, ctext, cvalue, int32(minValue), int32(maxValue), wasm.BtoI(editMode)) != 0 +} + +//go:wasmimport raylib _GuiValueBox +//go:noescape +func guiValueBox(bounds wasm.Ptr, text wasm.Ptr, value wasm.Ptr, minValue, maxValue int32, editMode int32) int32 + +// ValueBox control, updates input text with numbers +func ValueBox(bounds rl.Rectangle, text string, value *int32, minValue, maxValue int, editMode bool) bool { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + if value == nil { + value = new(int32) + } + + cvalue, free := wasm.CopyValueToC(value) + defer func() { + wasm.CopyValueToGo(cvalue, value) + free() + }() + cminValue := int32(minValue) + cmaxValue := int32(maxValue) + ceditMode := wasm.BtoI(editMode) + + return guiValueBox(cbounds, ctext, cvalue, cminValue, cmaxValue, ceditMode) != 0 +} + +/* +//go:wasmimport raylib _GuiValueBoxFloat +//go:noescape +func guiValueBoxFloat(bounds rl.Rectangle, text wasm.Ptr, textValue *wasm.Ptr, value *float32, editMode int32) int32 + +// Floating point Value Box control, updates input val_str with numbers +func ValueBoxFloat(bounds rl.Rectangle, text string, textValue *string, value *float32, editMode bool) bool { + var cbounds rl.Rectangle + cbounds.X = float32(bounds.X) + cbounds.Y = float32(bounds.Y) + cbounds.Width = float32(bounds.Width) + cbounds.Height = float32(bounds.Height) + var ctext wasm.Ptr + if len(text) > 0 { + ctext = wasm.CString(text) + defer wasm.Free(ctext) + } + + bs := []byte(*textValue) + if len(bs) == 0 { + bs = []byte{byte(0)} + } + if 0 < len(bs) && bs[len(bs)-1] != byte(0) { // minimalize allocation + bs = append(bs, byte(0)) // for next input symbols + } + ctextValue := (wasm.Ptr)(unsafe.Pointer(bs[0])) + defer func() { + *textValue = strings.Trim(string(bs), "\x00") + // no need : wasm.Free(ctext) + }() + + if value == nil { + value = new(float32) + } + cvalue := float32(*value) + defer func() { + *value = float32(cvalue) + }() + + return guiValueBoxFloat(cbounds, ctext, ctextValue, &cvalue, wasm.BtoI(editMode)) != 0 +} +*/ + +//go:wasmimport raylib _GuiSlider +//go:noescape +func guiSlider(bounds wasm.Ptr, textLeft, textRight wasm.Ptr, value, minValue, maxValue float32) float32 + +// Slider control +func Slider(bounds rl.Rectangle, textLeft, textRight string, value, minValue, maxValue float32) float32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctextLeft := wasm.CString(textLeft) + defer wasm.Free(ctextLeft) + ctextRight := wasm.CString(textRight) + defer wasm.Free(ctextRight) + + cvalue := float32(value) + cminValue := float32(minValue) + cmaxValue := float32(maxValue) + return guiSlider(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue) +} + +//go:wasmimport raylib _GuiSliderBar +//go:noescape +func guiSliderBar(bounds wasm.Ptr, textLeft, textRight wasm.Ptr, value, minValue, maxValue float32) float32 + +// SliderBar control, returns selected value +func SliderBar(bounds rl.Rectangle, textLeft, textRight string, value, minValue, maxValue float32) float32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctextLeft := wasm.CString(textLeft) + defer wasm.Free(ctextLeft) + ctextRight := wasm.CString(textRight) + defer wasm.Free(ctextRight) + + cvalue := float32(value) + cminValue := float32(minValue) + cmaxValue := float32(maxValue) + guiSliderBar(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue) + return float32(cvalue) +} + +//go:wasmimport raylib _GuiProgressBar +//go:noescape +func guiProgressBar(bounds wasm.Ptr, textLeft, textRight wasm.Ptr, value, minValue, maxValue float32) float32 + +// ProgressBar control, shows current progress value +func ProgressBar(bounds rl.Rectangle, textLeft, textRight string, value, minValue, maxValue float32) float32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctextLeft := wasm.CString(textLeft) + defer wasm.Free(ctextLeft) + ctextRight := wasm.CString(textRight) + defer wasm.Free(ctextRight) + + cvalue := float32(value) + cminValue := float32(minValue) + cmaxValue := float32(maxValue) + return guiProgressBar(cbounds, ctextLeft, ctextRight, cvalue, cminValue, cmaxValue) +} + +// StatusBar control, shows info text + +//go:wasmimport raylib _GuiStatusBar +//go:noescape +func guiStatusBar(bounds wasm.Ptr, text wasm.Ptr) + +func StatusBar(bounds rl.Rectangle, text string) { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiStatusBar(cbounds, ctext) +} + +// DummyRectangle control, intended for placeholding + +//go:wasmimport raylib _GuiDummyRec +//go:noescape +func guiDummyRec(bounds wasm.Ptr, text wasm.Ptr) + +func DummyRec(bounds rl.Rectangle, text string) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + guiDummyRec(cbounds, ctext) +} + +// ListView control, returns selected list item index + +//go:wasmimport raylib _GuiListView +//go:noescape +func guiListView(bounds wasm.Ptr, text wasm.Ptr, scrollIndex wasm.Ptr, active int32) int32 + +func ListView(bounds rl.Rectangle, text string, scrollIndex *int32, active int32) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + if scrollIndex == nil { + scrollIndex = new(int32) + } + cscrollIndex, free := wasm.CopyValueToC(scrollIndex) + defer func() { + wasm.CopyValueToGo(cscrollIndex, scrollIndex) + free() + }() + + cactive := int32(active) + + return guiListView(cbounds, ctext, cscrollIndex, cactive) +} + +//go:wasmimport raylib _GuiListViewEx +//go:noescape +func guiListViewEx(bounds wasm.Ptr, text wasm.Ptr, count int32, scrollIndex wasm.Ptr, active wasm.Ptr, focus wasm.Ptr) int32 + +// ListView control with extended parameters +func ListViewEx(bounds rl.Rectangle, text []string, + scrollIndex, focus *int32, active int32) int32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := NewCStringArrayFromSlice(text) + defer ctext.Free() + + if focus == nil { + focus = new(int32) + } + if scrollIndex == nil { + scrollIndex = new(int32) + } + + cscrollIndex, free := wasm.CopyValueToC(scrollIndex) + defer func() { + wasm.CopyValueToGo(cscrollIndex, scrollIndex) + free() + }() + + cactive, freeActive := wasm.CopyValueToC(&active) + defer freeActive() + + cfocus, freeFocus := wasm.CopyValueToC(focus) + defer freeFocus() + + count := int32(len(text)) + guiListViewEx(cbounds, ctext.Pointer, count, cscrollIndex, cactive, cfocus) + + // Copy values back before freeing + wasm.CopyValueToGo(cactive, &active) + wasm.CopyValueToGo(cfocus, focus) + + return active +} + +//go:wasmimport raylib _GuiColorPanel +//go:noescape +func guiColorPanel(ret wasm.Ptr, bounds wasm.Ptr, text wasm.Ptr, color wasm.Ptr) + +// ColorPanel control, Color (RGBA) variant +func ColorPanel(bounds rl.Rectangle, text string, color rl.Color) rl.Color { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + ccolor, free := wasm.CopyValueToC(&color) + defer free() + + var v rl.Color + ret, freeRet := wasm.MallocV[rl.Color]() + defer freeRet() + + guiColorPanel(ret, cbounds, ctext, ccolor) + wasm.CopyValueToGo(ret, &v) + return v +} + +//go:wasmimport raylib _GuiColorBarAlpha +//go:noescape +func guiColorBarAlpha(bounds wasm.Ptr, text wasm.Ptr, alpha float32) float32 + +// ColorBarAlpha control, returns alpha value normalized [0..1] +func ColorBarAlpha(bounds rl.Rectangle, text string, alpha float32) float32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + calpha := float32(alpha) + return guiColorBarAlpha(cbounds, ctext, calpha) +} + +//go:wasmimport raylib _GuiColorBarHue +//go:noescape +func guiColorBarHue(bounds wasm.Ptr, text wasm.Ptr, value float32) float32 + +// ColorBarHue control, returns alpha value normalized [0..1] +func ColorBarHue(bounds rl.Rectangle, text string, value float32) float32 { + + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + cvalue := float32(value) + return guiColorBarHue(cbounds, ctext, cvalue) +} + +//go:wasmimport raylib _GuiColorPicker +//go:noescape +func guiColorPicker(ret wasm.Ptr, bounds wasm.Ptr, text wasm.Ptr, color wasm.Ptr) + +// ColorPicker control (multiple color controls) +// NOTE: this picker converts RGB to HSV, which can cause the Hue control to jump. If you have this problem, consider using the HSV variant instead +func ColorPicker(bounds rl.Rectangle, text string, color rl.Color) rl.Color { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + ccolor, free := wasm.CopyValueToC(&color) + defer free() + var v rl.Color + ret, free := wasm.CopyValueToC(&v) + defer func() { + wasm.CopyValueToGo(ret, &v) + free() + }() + guiColorPicker(ret, cbounds, ctext, ccolor) + return v +} + +//go:wasmimport raylib _GuiColorPickerHSV +//go:noescape +func guiColorPickerHSV(bounds wasm.Ptr, text wasm.Ptr, colorHSV wasm.Ptr) int32 + +// ColorPicker control that avoids conversion to RGB on each call (multiple color controls) +func ColorPickerHSV(bounds rl.Rectangle, text string, colorHSV *rl.Vector3) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + ccolorHSV, free := wasm.CopyValueToC(colorHSV) + defer func() { + wasm.CopyValueToGo(ccolorHSV, colorHSV) + free() + }() + + return int32(guiColorPickerHSV(cbounds, ctext, ccolorHSV)) +} + +//go:wasmimport raylib _GuiColorPanelHSV +//go:noescape +func guiColorPanelHSV(bounds wasm.Ptr, text wasm.Ptr, colorHSV wasm.Ptr) int32 + +// ColorPanel control that returns HSV color value +func ColorPanelHSV(bounds rl.Rectangle, text string, colorHSV *rl.Vector3) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + ccolorHSV, free := wasm.CopyValueToC(colorHSV) + defer func() { + wasm.CopyValueToGo(ccolorHSV, colorHSV) + free() + }() + return int32(guiColorPanelHSV(cbounds, ctext, ccolorHSV)) +} + +//go:wasmimport raylib _GuiMessageBox +//go:noescape +func guiMessageBox(bounds wasm.Ptr, title, message, buttons wasm.Ptr) int32 + +// MessageBox control +func MessageBox(bounds rl.Rectangle, title, message, buttons string) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctitle := wasm.CString(title) + defer wasm.Free(ctitle) + cmessage := wasm.CString(message) + defer wasm.Free(cmessage) + + cbuttons := wasm.CString(buttons) + defer wasm.Free(cbuttons) + + return int32(guiMessageBox(cbounds, ctitle, cmessage, cbuttons)) +} + +// +//go:wasmimport raylib _GuiTextInputBox +//go:noescape +func guiTextInputBox(bounds wasm.Ptr, title, message, buttons wasm.Ptr, text wasm.Ptr, textMaxSize int32, secretViewActive wasm.Ptr) int32 + +// TextInputBox control, ask for text +func TextInputBox(bounds rl.Rectangle, title, message, buttons string, text *string, textMaxSize int32, secretViewActive *bool) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + var ctitle wasm.Ptr + if len(title) > 0 { + ctitle = wasm.CString(title) + defer wasm.Free(ctitle) + } + + var cmessage wasm.Ptr + if len(message) > 0 { + cmessage = wasm.CString(message) + defer wasm.Free(cmessage) + } + + cbuttons := wasm.CString(buttons) + defer wasm.Free(cbuttons) + + // Allocate writable buffer of size textMaxSize + // Truncate to textMaxSize-1 and NUL-terminate + currentText := []byte(*text) + if len(currentText) > int(textMaxSize)-1 { + currentText = currentText[:int(textMaxSize)-1] + } + // Create a zero-filled buffer of size textMaxSize + buffer := make([]byte, textMaxSize) + copy(buffer, currentText) + // buffer is already zero-filled by make, so NUL-termination is automatic + + ctext, freeText := wasm.CopySliceToC(buffer) + defer freeText() + + ctextMaxSize := int32(textMaxSize) + + csecretViewActive, free := wasm.CopyValueToC(secretViewActive) + defer func() { + wasm.CopyValueToGo(csecretViewActive, secretViewActive) + free() + }() + + result := int32(guiTextInputBox(cbounds, ctitle, cmessage, cbuttons, ctext, ctextMaxSize, csecretViewActive)) + + // Copy the result back + *text = wasm.GoString(ctext) + + return result +} + +//go:wasmimport raylib _GuiGrid +//go:noescape +func guiGrid(bounds wasm.Ptr, text wasm.Ptr, spacing float32, subdivs int32, mouseCell wasm.Ptr) int32 + +// Grid control, returns mouse cell position +func Grid(bounds rl.Rectangle, text string, spacing float32, subdivs int32, mouseCell *rl.Vector2) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + cspacing := float32(spacing) + csubdivs := int32(subdivs) + cmouseCell, free := wasm.CopyValueToC(mouseCell) + defer func() { + wasm.CopyValueToGo(cmouseCell, mouseCell) + free() + }() + return guiGrid(cbounds, ctext, cspacing, csubdivs, cmouseCell) +} + +//---------------------------------------------------------------------------------- +// Tooltip management functions +// NOTE: Tooltips requires some global variables: tooltipPtr +//---------------------------------------------------------------------------------- + +// Enable gui tooltips (global state) +// +//go:wasmimport raylib _GuiEnableTooltip +//go:noescape +func EnableTooltip() + +// Disable gui tooltips (global state) +// +//go:wasmimport raylib _GuiDisableTooltip +//go:noescape +func DisableTooltip() + +//go:wasmimport raylib _GuiSetTooltip +//go:noescape +func guiSetTooltip(tooltip wasm.Ptr) + +// Set tooltip string +func SetTooltip(tooltip string) { + ctooltip := wasm.CString(tooltip) + defer wasm.Free(ctooltip) + guiSetTooltip(ctooltip) +} + +//---------------------------------------------------------------------------------- +// Styles loading functions +//---------------------------------------------------------------------------------- + +//go:wasmimport raylib _GuiLoadStyle +//go:noescape +func guiLoadStyle(fileName wasm.Ptr) + +// Load raygui style file (.rgs) +func LoadStyle(fileName string) { + cfileName := wasm.CString(fileName) + defer wasm.Free(cfileName) + guiLoadStyle(cfileName) +} + +//go:wasmimport raylib _GuiLoadStyleDefault +//go:noescape +func guiLoadStyleDefault() + +// Load style default over global style +func LoadStyleDefault() { + guiLoadStyleDefault() +} + +//go:wasmimport raylib _GuiIconText +//go:noescape +func guiIconText(iconId int32, text wasm.Ptr) wasm.Ptr + +// IconText gets text with icon id prepended (if supported) +func IconText(iconId IconID, text string) string { + ciconId := int32(iconId) + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return wasm.GoString(guiIconText(ciconId, ctext)) +} + +//go:wasmimport raylib _GuiLoadIcons +//go:noescape +func guiLoadIcons(fileName wasm.Ptr, loadIconsName int32) + +// Load raygui icons file (.rgi) +func LoadIcons(fileName string, loadIconsName bool) { + cfileName := wasm.CString(fileName) + defer wasm.Free(cfileName) + guiLoadIcons(cfileName, wasm.BtoI(loadIconsName)) +} + +/* +//go:wasmimport raylib _GuiLoadIconsFromMemory +//go:noescape +func guiLoadIconsFromMemory(data []byte, size int32, loadIconsName int32) + +// Load icons from memory (Binary files only) +func LoadIconsFromMemory(data []byte, loadIconsName bool) { + guiLoadIconsFromMemory((*uint8)(unsafe.Pointer(data[0])), int32(len(data)), wasm.BtoI(loadIconsName)) +} +*/ + +//go:wasmimport raylib _GuiDrawIcon +//go:noescape +func guiDrawIcon(iconId, posX, posY, pixelSize int32, col wasm.Ptr) + +// Draw icon using pixel size at specified position +func DrawIcon(iconId IconID, posX, posY, pixelSize int32, col color.RGBA) { + ccol, free := wasm.CopyValueToC(&col) + defer free() + guiDrawIcon(int32(iconId), int32(posX), int32(posY), int32(pixelSize), ccol) +} + +// Set icon drawing size +// +//go:wasmimport raylib _GuiSetIconScale +//go:noescape +func SetIconScale(scale int32) + +//go:wasmimport raylib _GuiGetTextWidth +//go:noescape +func guiGetTextWidth(text wasm.Ptr) int32 + +// Get text width considering gui style and icon size (if required) +func GetTextWidth(text string) int32 { + ctext := wasm.CString(text) + defer wasm.Free(ctext) + return int32(guiGetTextWidth(ctext)) +} + +//---------------------------------------------------------------------------------- +// Module Internal Functions Definition +//---------------------------------------------------------------------------------- + +/* +//go:wasmimport raylib _GuiLoadStyleFromMemory +//go:noescape +func guiLoadStyleFromMemory(data wasm.Ptr, size int32) + +// Load style from memory (Binary files only) +func LoadStyleFromMemory(data []byte) { + guiLoadStyleFromMemory((*uint8)(unsafe.Pointer(data[0])), int32(len(data))) +} +*/ + +//go:wasmimport raylib _GuiScrollBar +//go:noescape +func guiScrollBar(bounds wasm.Ptr, value, minValue, maxValue int32) int32 + +// ScrollBar control +func ScrollBar(bounds rl.Rectangle, value, minValue, maxValue int32) int32 { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + cvalue := int32(value) + cminValue := int32(minValue) + cmaxValue := int32(maxValue) + + return int32(guiScrollBar(cbounds, cvalue, cminValue, cmaxValue)) +} + +//go:wasmimport raylib _GuiFade +//go:noescape +func guiFade(ret wasm.Ptr, color wasm.Ptr, alpha float32) + +// Color fade-in or fade-out, alpha value normalized [0..1] +// WARNING: It multiplies current alpha by alpha scale factor +func Fade(color rl.Color, alpha float32) rl.Color { + + ccolor, free := wasm.CopyValueToC(&color) + defer free() + + var v rl.Color + ret, free := wasm.CopyValueToC(&v) + defer func() { + wasm.CopyValueToGo(ret, &v) + free() + }() + + guiFade(ret, ccolor, alpha) + return v +} + +//---------------------------------------------------------------------------------- +// Additional Draw functions +//---------------------------------------------------------------------------------- + +//go:wasmimport raylib _GuiDrawRectangle +//go:noescape +func guiDrawRectangle(bounds wasm.Ptr, borderWidth int32, borderColor, fillColor wasm.Ptr) + +func DrawRectangle(bounds rl.Rectangle, borderWidth int32, borderColor, fillColor rl.Color) { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + cfillColor, free := wasm.CopyValueToC(&fillColor) + defer free() + cborderColor, free := wasm.CopyValueToC(&borderColor) + defer free() + + bw := int32(borderWidth) + + guiDrawRectangle(cbounds, bw, cborderColor, cfillColor) +} + +// DrawText - static void GuiDrawText(const char *text, Rectangle textBounds, int alignment, Color tint); + +//go:wasmimport raylib _GuiDrawText +//go:noescape +func guiDrawText(text wasm.Ptr, position wasm.Ptr, alignment int32, color wasm.Ptr) + +func DrawText(text string, position rl.Rectangle, alignment int32, color rl.Color) { + + cposition, free := wasm.CopyValueToC(&position) + defer free() + ccolor, free := wasm.CopyValueToC(&color) + defer free() + + ctext := wasm.CString(text) + defer wasm.Free(ctext) + + calignment := int32(alignment) + guiDrawText(ctext, cposition, calignment, ccolor) +} + +//go:wasmimport raylib _GuiGetTextBounds +//go:noescape +func guiGetTextBounds(ret wasm.Ptr, control int32, bounds wasm.Ptr) + +// GetTextBounds - static Rectangle GetTextBounds(int control, Rectangle bounds) +func GetTextBounds(control ControlID, bounds rl.Rectangle) rl.Rectangle { + cbounds, free := wasm.CopyValueToC(&bounds) + defer free() + + ccontrol := uint16(control) + var v rl.Rectangle + cret, free := wasm.CopyValueToC(&v) + defer func() { + wasm.CopyValueToGo(cret, &v) + free() + }() + guiGetTextBounds(cret, int32(ccontrol), cbounds) + return v +} diff --git a/raylib/go.sum b/raylib/go.sum index 808648e..b242b0a 100644 --- a/raylib/go.sum +++ b/raylib/go.sum @@ -1,2 +1,2 @@ -github.com/BrownNPC/wasm-ffi-go v1.1.0 h1:oashfuQflpB+qx/xI71Gvim3YN/0iIny5TMIpzEFz0Y= -github.com/BrownNPC/wasm-ffi-go v1.1.0/go.mod h1:D5+RBMb672fgw6vPz4HOWYxpyrmPrIao8VqlXihOFFg= +github.com/BrownNPC/wasm-ffi-go v1.2.0 h1:Lknst90sTLTkE870OKNP/Vw36TohQIJ4ln8W1IG9Zl0= +github.com/BrownNPC/wasm-ffi-go v1.2.0/go.mod h1:D5+RBMb672fgw6vPz4HOWYxpyrmPrIao8VqlXihOFFg= diff --git a/raylib/rcore_wasm.go b/raylib/rcore_wasm.go index 71b447e..f1ef90e 100644 --- a/raylib/rcore_wasm.go +++ b/raylib/rcore_wasm.go @@ -2174,7 +2174,6 @@ func ExportImageToMemory(image Image, fileType string) []byte { return zero } - // 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 zero *Image @@ -2591,7 +2590,6 @@ func LoadTexture(fileName string) Texture2D { return v } - // LoadTextureCubemap - Load cubemap from image, multiple image cubemap layouts supported func LoadTextureCubemap(image *Image, layout int32) Texture2D { ret, fl := loadTextureCubemap.Call(image, layout) @@ -3922,7 +3920,6 @@ func SetCallbackFunc() { wasm.Free(fl...) } - // ToImage converts a Image to Go image.Image func ToImage() image.Image { // ret, fl := toImage.Call() diff --git a/wasm-runtime/api/rlapi.go b/wasm-runtime/api/rlapi.go new file mode 100644 index 0000000..be1fefd --- /dev/null +++ b/wasm-runtime/api/rlapi.go @@ -0,0 +1,76 @@ +package api + +import ( + _ "embed" + "encoding/json" +) + +var Api RlApi + +//go:embed rlapi.json +var rlApiJson []byte + +func init() { + err := json.Unmarshal(rlApiJson, &Api) + if err != nil { + panic(err) + } +} + +type RlDefine struct { + Name string `json:"name"` + Type string `json:"type"` + Value StringyValue `json:"value"` + Description string `json:"description"` +} + + +type RlField struct { + Type string `json:"type"` + Name string `json:"name"` + Description string `json:"description"` +} +type RlStruct struct { + Name string `json:"name"` + Description string `json:"description"` + Fields []RlField `json:"fields"` +} +type RlAlias struct { + Type string `json:"type"` + Name string `json:"name"` + Description string `json:"description"` +} +type RlValue struct { + Name string `json:"name"` + Value int `json:"value"` + Description string `json:"description"` +} +type RlEnum struct { + Name string `json:"name"` + Description string `json:"description"` + Values []RlValue `json:"values"` +} +type RlParam struct { + Type string `json:"type"` + Name string `json:"name"` +} +type RlCallback struct { + Name string `json:"name"` + Description string `json:"description"` + ReturnType string `json:"returnType"` + Params []RlParam `json:"params"` +} +type RlFunction struct { + Name string `json:"name"` + Description string `json:"description"` + ReturnType string `json:"returnType"` + Params []RlParam `json:"params,omitempty"` +} +type RlApi struct { + Defines []RlDefine `json:"defines"` + Structs []RlStruct `json:"structs"` + Aliases []RlAlias `json:"aliases"` + Enums []RlEnum `json:"enums"` + Callbacks []RlCallback `json:"callbacks"` + Functions []RlFunction `json:"functions"` +} diff --git a/wasm-runtime/api/rlapi.json b/wasm-runtime/api/rlapi.json new file mode 100644 index 0000000..d4c059c --- /dev/null +++ b/wasm-runtime/api/rlapi.json @@ -0,0 +1,12463 @@ +{ + "defines": [ + { + "name": "RAYLIB_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RAYLIB_VERSION_MAJOR", + "type": "INT", + "value": 5, + "description": "" + }, + { + "name": "RAYLIB_VERSION_MINOR", + "type": "INT", + "value": 6, + "description": "" + }, + { + "name": "RAYLIB_VERSION_PATCH", + "type": "INT", + "value": 0, + "description": "" + }, + { + "name": "RAYLIB_VERSION", + "type": "STRING", + "value": "5.6-dev", + "description": "" + }, + { + "name": "__declspec(x)", + "type": "MACRO", + "value": "__attribute__((x))", + "description": "" + }, + { + "name": "RLAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "Building the library as a Win32 shared library (.dll)" + }, + { + "name": "PI", + "type": "FLOAT", + "value": 3.14159265358979323846, + "description": "" + }, + { + "name": "DEG2RAD", + "type": "FLOAT_MATH", + "value": "(PI/180.0f)", + "description": "" + }, + { + "name": "RAD2DEG", + "type": "FLOAT_MATH", + "value": "(180.0f/PI)", + "description": "" + }, + { + "name": "RL_MALLOC(sz)", + "type": "MACRO", + "value": "malloc(sz)", + "description": "" + }, + { + "name": "RL_CALLOC(n,sz)", + "type": "MACRO", + "value": "calloc(n,sz)", + "description": "" + }, + { + "name": "RL_REALLOC(ptr,sz)", + "type": "MACRO", + "value": "realloc(ptr,sz)", + "description": "" + }, + { + "name": "RL_FREE(ptr)", + "type": "MACRO", + "value": "free(ptr)", + "description": "" + }, + { + "name": "CLITERAL(type)", + "type": "MACRO", + "value": "type", + "description": "" + }, + { + "name": "RL_COLOR_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_RECTANGLE_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR2_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR3_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR4_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_QUATERNION_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_MATRIX_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "LIGHTGRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 200, 200, 200, 255 }", + "description": "Light Gray" + }, + { + "name": "GRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 130, 130, 130, 255 }", + "description": "Gray" + }, + { + "name": "DARKGRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 80, 80, 80, 255 }", + "description": "Dark Gray" + }, + { + "name": "YELLOW", + "type": "COLOR", + "value": "CLITERAL(Color){ 253, 249, 0, 255 }", + "description": "Yellow" + }, + { + "name": "GOLD", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 203, 0, 255 }", + "description": "Gold" + }, + { + "name": "ORANGE", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 161, 0, 255 }", + "description": "Orange" + }, + { + "name": "PINK", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 109, 194, 255 }", + "description": "Pink" + }, + { + "name": "RED", + "type": "COLOR", + "value": "CLITERAL(Color){ 230, 41, 55, 255 }", + "description": "Red" + }, + { + "name": "MAROON", + "type": "COLOR", + "value": "CLITERAL(Color){ 190, 33, 55, 255 }", + "description": "Maroon" + }, + { + "name": "GREEN", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 228, 48, 255 }", + "description": "Green" + }, + { + "name": "LIME", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 158, 47, 255 }", + "description": "Lime" + }, + { + "name": "DARKGREEN", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 117, 44, 255 }", + "description": "Dark Green" + }, + { + "name": "SKYBLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 102, 191, 255, 255 }", + "description": "Sky Blue" + }, + { + "name": "BLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 121, 241, 255 }", + "description": "Blue" + }, + { + "name": "DARKBLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 82, 172, 255 }", + "description": "Dark Blue" + }, + { + "name": "PURPLE", + "type": "COLOR", + "value": "CLITERAL(Color){ 200, 122, 255, 255 }", + "description": "Purple" + }, + { + "name": "VIOLET", + "type": "COLOR", + "value": "CLITERAL(Color){ 135, 60, 190, 255 }", + "description": "Violet" + }, + { + "name": "DARKPURPLE", + "type": "COLOR", + "value": "CLITERAL(Color){ 112, 31, 126, 255 }", + "description": "Dark Purple" + }, + { + "name": "BEIGE", + "type": "COLOR", + "value": "CLITERAL(Color){ 211, 176, 131, 255 }", + "description": "Beige" + }, + { + "name": "BROWN", + "type": "COLOR", + "value": "CLITERAL(Color){ 127, 106, 79, 255 }", + "description": "Brown" + }, + { + "name": "DARKBROWN", + "type": "COLOR", + "value": "CLITERAL(Color){ 76, 63, 47, 255 }", + "description": "Dark Brown" + }, + { + "name": "WHITE", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 255, 255, 255 }", + "description": "White" + }, + { + "name": "BLACK", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 0, 0, 255 }", + "description": "Black" + }, + { + "name": "BLANK", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 0, 0, 0 }", + "description": "Blank (Transparent)" + }, + { + "name": "MAGENTA", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 0, 255, 255 }", + "description": "Magenta" + }, + { + "name": "RAYWHITE", + "type": "COLOR", + "value": "CLITERAL(Color){ 245, 245, 245, 255 }", + "description": "My own White (raylib logo)" + }, + { + "name": "RL_BOOL_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "MOUSE_LEFT_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_LEFT", + "description": "" + }, + { + "name": "MOUSE_RIGHT_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_RIGHT", + "description": "" + }, + { + "name": "MOUSE_MIDDLE_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_MIDDLE", + "description": "" + }, + { + "name": "MATERIAL_MAP_DIFFUSE", + "type": "UNKNOWN", + "value": "MATERIAL_MAP_ALBEDO", + "description": "" + }, + { + "name": "MATERIAL_MAP_SPECULAR", + "type": "UNKNOWN", + "value": "MATERIAL_MAP_METALNESS", + "description": "" + }, + { + "name": "SHADER_LOC_MAP_DIFFUSE", + "type": "UNKNOWN", + "value": "SHADER_LOC_MAP_ALBEDO", + "description": "" + }, + { + "name": "SHADER_LOC_MAP_SPECULAR", + "type": "UNKNOWN", + "value": "SHADER_LOC_MAP_METALNESS", + "description": "" + }, + { + "name": "GetMouseRay", + "type": "UNKNOWN", + "value": "GetScreenToWorldRay", + "description": "Compatibility hack for previous raylib versions" + } + ], + "structs": [ + { + "name": "Vector2", + "description": "Vector2, 2 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + } + ] + }, + { + "name": "Vector3", + "description": "Vector3, 3 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + }, + { + "type": "float", + "name": "z", + "description": "Vector z component" + } + ] + }, + { + "name": "Vector4", + "description": "Vector4, 4 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + }, + { + "type": "float", + "name": "z", + "description": "Vector z component" + }, + { + "type": "float", + "name": "w", + "description": "Vector w component" + } + ] + }, + { + "name": "Matrix", + "description": "Matrix, 4x4 components, column major, OpenGL style, right-handed", + "fields": [ + { + "type": "float", + "name": "m0", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m4", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m8", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m12", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m1", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m5", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m9", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m13", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m2", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m6", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m10", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m14", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m3", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m7", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m11", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m15", + "description": "Matrix fourth row (4 components)" + } + ] + }, + { + "name": "Color", + "description": "Color, 4 components, R8G8B8A8 (32bit)", + "fields": [ + { + "type": "unsigned char", + "name": "r", + "description": "Color red value" + }, + { + "type": "unsigned char", + "name": "g", + "description": "Color green value" + }, + { + "type": "unsigned char", + "name": "b", + "description": "Color blue value" + }, + { + "type": "unsigned char", + "name": "a", + "description": "Color alpha value" + } + ] + }, + { + "name": "Rectangle", + "description": "Rectangle, 4 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Rectangle top-left corner position x" + }, + { + "type": "float", + "name": "y", + "description": "Rectangle top-left corner position y" + }, + { + "type": "float", + "name": "width", + "description": "Rectangle width" + }, + { + "type": "float", + "name": "height", + "description": "Rectangle height" + } + ] + }, + { + "name": "Image", + "description": "Image, pixel data stored in CPU memory (RAM)", + "fields": [ + { + "type": "void *", + "name": "data", + "description": "Image raw data" + }, + { + "type": "int", + "name": "width", + "description": "Image base width" + }, + { + "type": "int", + "name": "height", + "description": "Image base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "Texture", + "description": "Texture, tex data stored in GPU memory (VRAM)", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "OpenGL texture id" + }, + { + "type": "int", + "name": "width", + "description": "Texture base width" + }, + { + "type": "int", + "name": "height", + "description": "Texture base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "RenderTexture", + "description": "RenderTexture, fbo for texture rendering", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "OpenGL framebuffer object id" + }, + { + "type": "Texture", + "name": "texture", + "description": "Color buffer attachment texture" + }, + { + "type": "Texture", + "name": "depth", + "description": "Depth buffer attachment texture" + } + ] + }, + { + "name": "NPatchInfo", + "description": "NPatchInfo, n-patch layout info", + "fields": [ + { + "type": "Rectangle", + "name": "source", + "description": "Texture source rectangle" + }, + { + "type": "int", + "name": "left", + "description": "Left border offset" + }, + { + "type": "int", + "name": "top", + "description": "Top border offset" + }, + { + "type": "int", + "name": "right", + "description": "Right border offset" + }, + { + "type": "int", + "name": "bottom", + "description": "Bottom border offset" + }, + { + "type": "int", + "name": "layout", + "description": "Layout of the n-patch: 3x3, 1x3 or 3x1" + } + ] + }, + { + "name": "GlyphInfo", + "description": "GlyphInfo, font characters glyphs info", + "fields": [ + { + "type": "int", + "name": "value", + "description": "Character value (Unicode)" + }, + { + "type": "int", + "name": "offsetX", + "description": "Character offset X when drawing" + }, + { + "type": "int", + "name": "offsetY", + "description": "Character offset Y when drawing" + }, + { + "type": "int", + "name": "advanceX", + "description": "Character advance position X" + }, + { + "type": "Image", + "name": "image", + "description": "Character image data" + } + ] + }, + { + "name": "Font", + "description": "Font, font texture and GlyphInfo array data", + "fields": [ + { + "type": "int", + "name": "baseSize", + "description": "Base size (default chars height)" + }, + { + "type": "int", + "name": "glyphCount", + "description": "Number of glyph characters" + }, + { + "type": "int", + "name": "glyphPadding", + "description": "Padding around the glyph characters" + }, + { + "type": "Texture2D", + "name": "texture", + "description": "Texture atlas containing the glyphs" + }, + { + "type": "Rectangle *", + "name": "recs", + "description": "Rectangles in texture for the glyphs" + }, + { + "type": "GlyphInfo *", + "name": "glyphs", + "description": "Glyphs info data" + } + ] + }, + { + "name": "Camera3D", + "description": "Camera, defines position/orientation in 3d space", + "fields": [ + { + "type": "Vector3", + "name": "position", + "description": "Camera position" + }, + { + "type": "Vector3", + "name": "target", + "description": "Camera target it looks-at" + }, + { + "type": "Vector3", + "name": "up", + "description": "Camera up vector (rotation over its axis)" + }, + { + "type": "float", + "name": "fovy", + "description": "Camera field-of-view aperture in Y (degrees) in perspective, used as near plane height in world units in orthographic" + }, + { + "type": "int", + "name": "projection", + "description": "Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC" + } + ] + }, + { + "name": "Camera2D", + "description": "Camera2D, defines position/orientation in 2d space", + "fields": [ + { + "type": "Vector2", + "name": "offset", + "description": "Camera offset (screen space offset from window origin)" + }, + { + "type": "Vector2", + "name": "target", + "description": "Camera target (world space target point that is mapped to screen space offset)" + }, + { + "type": "float", + "name": "rotation", + "description": "Camera rotation in degrees (pivots around target)" + }, + { + "type": "float", + "name": "zoom", + "description": "Camera zoom (scaling around target), must not be set to 0, set to 1.0f for no scale" + } + ] + }, + { + "name": "Mesh", + "description": "Mesh, vertex data and vao/vbo", + "fields": [ + { + "type": "int", + "name": "vertexCount", + "description": "Number of vertices stored in arrays" + }, + { + "type": "int", + "name": "triangleCount", + "description": "Number of triangles stored (indexed or not)" + }, + { + "type": "float *", + "name": "vertices", + "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)" + }, + { + "type": "float *", + "name": "texcoords", + "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)" + }, + { + "type": "float *", + "name": "texcoords2", + "description": "Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)" + }, + { + "type": "float *", + "name": "normals", + "description": "Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)" + }, + { + "type": "float *", + "name": "tangents", + "description": "Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)" + }, + { + "type": "unsigned char *", + "name": "colors", + "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)" + }, + { + "type": "unsigned short *", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed)" + }, + { + "type": "float *", + "name": "animVertices", + "description": "Animated vertex positions (after bones transformations)" + }, + { + "type": "float *", + "name": "animNormals", + "description": "Animated normals (after bones transformations)" + }, + { + "type": "unsigned char *", + "name": "boneIds", + "description": "Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) (shader-location = 6)" + }, + { + "type": "float *", + "name": "boneWeights", + "description": "Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7)" + }, + { + "type": "Matrix *", + "name": "boneMatrices", + "description": "Bones animated transformation matrices" + }, + { + "type": "int", + "name": "boneCount", + "description": "Number of bones" + }, + { + "type": "unsigned int", + "name": "vaoId", + "description": "OpenGL Vertex Array Object id" + }, + { + "type": "unsigned int *", + "name": "vboId", + "description": "OpenGL Vertex Buffer Objects id (default vertex data)" + } + ] + }, + { + "name": "Shader", + "description": "Shader", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "Shader program id" + }, + { + "type": "int *", + "name": "locs", + "description": "Shader locations array (RL_MAX_SHADER_LOCATIONS)" + } + ] + }, + { + "name": "MaterialMap", + "description": "MaterialMap", + "fields": [ + { + "type": "Texture2D", + "name": "texture", + "description": "Material map texture" + }, + { + "type": "Color", + "name": "color", + "description": "Material map color" + }, + { + "type": "float", + "name": "value", + "description": "Material map value" + } + ] + }, + { + "name": "Material", + "description": "Material, includes shader and maps", + "fields": [ + { + "type": "Shader", + "name": "shader", + "description": "Material shader" + }, + { + "type": "MaterialMap *", + "name": "maps", + "description": "Material maps array (MAX_MATERIAL_MAPS)" + }, + { + "type": "float[4]", + "name": "params", + "description": "Material generic parameters (if required)" + } + ] + }, + { + "name": "Transform", + "description": "Transform, vertex transformation data", + "fields": [ + { + "type": "Vector3", + "name": "translation", + "description": "Translation" + }, + { + "type": "Quaternion", + "name": "rotation", + "description": "Rotation" + }, + { + "type": "Vector3", + "name": "scale", + "description": "Scale" + } + ] + }, + { + "name": "BoneInfo", + "description": "Bone, skeletal animation bone", + "fields": [ + { + "type": "char[32]", + "name": "name", + "description": "Bone name" + }, + { + "type": "int", + "name": "parent", + "description": "Bone parent" + } + ] + }, + { + "name": "Model", + "description": "Model, meshes, materials and animation data", + "fields": [ + { + "type": "Matrix", + "name": "transform", + "description": "Local transform matrix" + }, + { + "type": "int", + "name": "meshCount", + "description": "Number of meshes" + }, + { + "type": "int", + "name": "materialCount", + "description": "Number of materials" + }, + { + "type": "Mesh *", + "name": "meshes", + "description": "Meshes array" + }, + { + "type": "Material *", + "name": "materials", + "description": "Materials array" + }, + { + "type": "int *", + "name": "meshMaterial", + "description": "Mesh material number" + }, + { + "type": "int", + "name": "boneCount", + "description": "Number of bones" + }, + { + "type": "BoneInfo *", + "name": "bones", + "description": "Bones information (skeleton)" + }, + { + "type": "Transform *", + "name": "bindPose", + "description": "Bones base transformation (pose)" + } + ] + }, + { + "name": "ModelAnimation", + "description": "ModelAnimation", + "fields": [ + { + "type": "int", + "name": "boneCount", + "description": "Number of bones" + }, + { + "type": "int", + "name": "frameCount", + "description": "Number of animation frames" + }, + { + "type": "BoneInfo *", + "name": "bones", + "description": "Bones information (skeleton)" + }, + { + "type": "Transform **", + "name": "framePoses", + "description": "Poses array by frame" + }, + { + "type": "char[32]", + "name": "name", + "description": "Animation name" + } + ] + }, + { + "name": "Ray", + "description": "Ray, ray for raycasting", + "fields": [ + { + "type": "Vector3", + "name": "position", + "description": "Ray position (origin)" + }, + { + "type": "Vector3", + "name": "direction", + "description": "Ray direction (normalized)" + } + ] + }, + { + "name": "RayCollision", + "description": "RayCollision, ray hit information", + "fields": [ + { + "type": "bool", + "name": "hit", + "description": "Did the ray hit something?" + }, + { + "type": "float", + "name": "distance", + "description": "Distance to the nearest hit" + }, + { + "type": "Vector3", + "name": "point", + "description": "Point of the nearest hit" + }, + { + "type": "Vector3", + "name": "normal", + "description": "Surface normal of hit" + } + ] + }, + { + "name": "BoundingBox", + "description": "BoundingBox", + "fields": [ + { + "type": "Vector3", + "name": "min", + "description": "Minimum vertex box-corner" + }, + { + "type": "Vector3", + "name": "max", + "description": "Maximum vertex box-corner" + } + ] + }, + { + "name": "Wave", + "description": "Wave, audio wave data", + "fields": [ + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + }, + { + "type": "unsigned int", + "name": "sampleRate", + "description": "Frequency (samples per second)" + }, + { + "type": "unsigned int", + "name": "sampleSize", + "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + "type": "unsigned int", + "name": "channels", + "description": "Number of channels (1-mono, 2-stereo, ...)" + }, + { + "type": "void *", + "name": "data", + "description": "Buffer data pointer" + } + ] + }, + { + "name": "AudioStream", + "description": "AudioStream, custom audio stream", + "fields": [ + { + "type": "rAudioBuffer *", + "name": "buffer", + "description": "Pointer to internal data used by the audio system" + }, + { + "type": "rAudioProcessor *", + "name": "processor", + "description": "Pointer to internal data processor, useful for audio effects" + }, + { + "type": "unsigned int", + "name": "sampleRate", + "description": "Frequency (samples per second)" + }, + { + "type": "unsigned int", + "name": "sampleSize", + "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + "type": "unsigned int", + "name": "channels", + "description": "Number of channels (1-mono, 2-stereo, ...)" + } + ] + }, + { + "name": "Sound", + "description": "Sound", + "fields": [ + { + "type": "AudioStream", + "name": "stream", + "description": "Audio stream" + }, + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + } + ] + }, + { + "name": "Music", + "description": "Music, audio stream, anything longer than ~10 seconds should be streamed", + "fields": [ + { + "type": "AudioStream", + "name": "stream", + "description": "Audio stream" + }, + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + }, + { + "type": "bool", + "name": "looping", + "description": "Music looping enable" + }, + { + "type": "int", + "name": "ctxType", + "description": "Type of music context (audio filetype)" + }, + { + "type": "void *", + "name": "ctxData", + "description": "Audio context data, depends on type" + } + ] + }, + { + "name": "VrDeviceInfo", + "description": "VrDeviceInfo, Head-Mounted-Display device parameters", + "fields": [ + { + "type": "int", + "name": "hResolution", + "description": "Horizontal resolution in pixels" + }, + { + "type": "int", + "name": "vResolution", + "description": "Vertical resolution in pixels" + }, + { + "type": "float", + "name": "hScreenSize", + "description": "Horizontal size in meters" + }, + { + "type": "float", + "name": "vScreenSize", + "description": "Vertical size in meters" + }, + { + "type": "float", + "name": "eyeToScreenDistance", + "description": "Distance between eye and display in meters" + }, + { + "type": "float", + "name": "lensSeparationDistance", + "description": "Lens separation distance in meters" + }, + { + "type": "float", + "name": "interpupillaryDistance", + "description": "IPD (distance between pupils) in meters" + }, + { + "type": "float[4]", + "name": "lensDistortionValues", + "description": "Lens distortion constant parameters" + }, + { + "type": "float[4]", + "name": "chromaAbCorrection", + "description": "Chromatic aberration correction parameters" + } + ] + }, + { + "name": "VrStereoConfig", + "description": "VrStereoConfig, VR stereo rendering configuration for simulator", + "fields": [ + { + "type": "Matrix[2]", + "name": "projection", + "description": "VR projection matrices (per eye)" + }, + { + "type": "Matrix[2]", + "name": "viewOffset", + "description": "VR view offset matrices (per eye)" + }, + { + "type": "float[2]", + "name": "leftLensCenter", + "description": "VR left lens center" + }, + { + "type": "float[2]", + "name": "rightLensCenter", + "description": "VR right lens center" + }, + { + "type": "float[2]", + "name": "leftScreenCenter", + "description": "VR left screen center" + }, + { + "type": "float[2]", + "name": "rightScreenCenter", + "description": "VR right screen center" + }, + { + "type": "float[2]", + "name": "scale", + "description": "VR distortion scale" + }, + { + "type": "float[2]", + "name": "scaleIn", + "description": "VR distortion scale in" + } + ] + }, + { + "name": "FilePathList", + "description": "File path list", + "fields": [ + { + "type": "unsigned int", + "name": "count", + "description": "Filepaths entries count" + }, + { + "type": "char **", + "name": "paths", + "description": "Filepaths entries" + } + ] + }, + { + "name": "AutomationEvent", + "description": "Automation event", + "fields": [ + { + "type": "unsigned int", + "name": "frame", + "description": "Event frame" + }, + { + "type": "unsigned int", + "name": "type", + "description": "Event type (AutomationEventType)" + }, + { + "type": "int[4]", + "name": "params", + "description": "Event parameters (if required)" + } + ] + }, + { + "name": "AutomationEventList", + "description": "Automation event list", + "fields": [ + { + "type": "unsigned int", + "name": "capacity", + "description": "Events max entries (MAX_AUTOMATION_EVENTS)" + }, + { + "type": "unsigned int", + "name": "count", + "description": "Events entries count" + }, + { + "type": "AutomationEvent *", + "name": "events", + "description": "Events entries" + } + ] + } + ], + "aliases": [ + { + "type": "Vector4", + "name": "Quaternion", + "description": "Quaternion, 4 components (Vector4 alias)" + }, + { + "type": "Texture", + "name": "Texture2D", + "description": "Texture2D, same as Texture" + }, + { + "type": "Texture", + "name": "TextureCubemap", + "description": "TextureCubemap, same as Texture" + }, + { + "type": "RenderTexture", + "name": "RenderTexture2D", + "description": "RenderTexture2D, same as RenderTexture" + }, + { + "type": "Camera3D", + "name": "Camera", + "description": "Camera type fallback, defaults to Camera3D" + } + ], + "enums": [ + { + "name": "ConfigFlags", + "description": "System/Window config flags", + "values": [ + { + "name": "FLAG_VSYNC_HINT", + "value": 64, + "description": "Set to try enabling V-Sync on GPU" + }, + { + "name": "FLAG_FULLSCREEN_MODE", + "value": 2, + "description": "Set to run program in fullscreen" + }, + { + "name": "FLAG_WINDOW_RESIZABLE", + "value": 4, + "description": "Set to allow resizable window" + }, + { + "name": "FLAG_WINDOW_UNDECORATED", + "value": 8, + "description": "Set to disable window decoration (frame and buttons)" + }, + { + "name": "FLAG_WINDOW_HIDDEN", + "value": 128, + "description": "Set to hide window" + }, + { + "name": "FLAG_WINDOW_MINIMIZED", + "value": 512, + "description": "Set to minimize window (iconify)" + }, + { + "name": "FLAG_WINDOW_MAXIMIZED", + "value": 1024, + "description": "Set to maximize window (expanded to monitor)" + }, + { + "name": "FLAG_WINDOW_UNFOCUSED", + "value": 2048, + "description": "Set to window non focused" + }, + { + "name": "FLAG_WINDOW_TOPMOST", + "value": 4096, + "description": "Set to window always on top" + }, + { + "name": "FLAG_WINDOW_ALWAYS_RUN", + "value": 256, + "description": "Set to allow windows running while minimized" + }, + { + "name": "FLAG_WINDOW_TRANSPARENT", + "value": 16, + "description": "Set to allow transparent framebuffer" + }, + { + "name": "FLAG_WINDOW_HIGHDPI", + "value": 8192, + "description": "Set to support HighDPI" + }, + { + "name": "FLAG_WINDOW_MOUSE_PASSTHROUGH", + "value": 16384, + "description": "Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED" + }, + { + "name": "FLAG_BORDERLESS_WINDOWED_MODE", + "value": 32768, + "description": "Set to run program in borderless windowed mode" + }, + { + "name": "FLAG_MSAA_4X_HINT", + "value": 32, + "description": "Set to try enabling MSAA 4X" + }, + { + "name": "FLAG_INTERLACED_HINT", + "value": 65536, + "description": "Set to try enabling interlaced video format (for V3D)" + } + ] + }, + { + "name": "TraceLogLevel", + "description": "Trace log level", + "values": [ + { + "name": "LOG_ALL", + "value": 0, + "description": "Display all logs" + }, + { + "name": "LOG_TRACE", + "value": 1, + "description": "Trace logging, intended for internal use only" + }, + { + "name": "LOG_DEBUG", + "value": 2, + "description": "Debug logging, used for internal debugging, it should be disabled on release builds" + }, + { + "name": "LOG_INFO", + "value": 3, + "description": "Info logging, used for program execution info" + }, + { + "name": "LOG_WARNING", + "value": 4, + "description": "Warning logging, used on recoverable failures" + }, + { + "name": "LOG_ERROR", + "value": 5, + "description": "Error logging, used on unrecoverable failures" + }, + { + "name": "LOG_FATAL", + "value": 6, + "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)" + }, + { + "name": "LOG_NONE", + "value": 7, + "description": "Disable logging" + } + ] + }, + { + "name": "KeyboardKey", + "description": "Keyboard keys (US keyboard layout)", + "values": [ + { + "name": "KEY_NULL", + "value": 0, + "description": "Key: NULL, used for no key pressed" + }, + { + "name": "KEY_APOSTROPHE", + "value": 39, + "description": "Key: '" + }, + { + "name": "KEY_COMMA", + "value": 44, + "description": "Key: ," + }, + { + "name": "KEY_MINUS", + "value": 45, + "description": "Key: -" + }, + { + "name": "KEY_PERIOD", + "value": 46, + "description": "Key: ." + }, + { + "name": "KEY_SLASH", + "value": 47, + "description": "Key: /" + }, + { + "name": "KEY_ZERO", + "value": 48, + "description": "Key: 0" + }, + { + "name": "KEY_ONE", + "value": 49, + "description": "Key: 1" + }, + { + "name": "KEY_TWO", + "value": 50, + "description": "Key: 2" + }, + { + "name": "KEY_THREE", + "value": 51, + "description": "Key: 3" + }, + { + "name": "KEY_FOUR", + "value": 52, + "description": "Key: 4" + }, + { + "name": "KEY_FIVE", + "value": 53, + "description": "Key: 5" + }, + { + "name": "KEY_SIX", + "value": 54, + "description": "Key: 6" + }, + { + "name": "KEY_SEVEN", + "value": 55, + "description": "Key: 7" + }, + { + "name": "KEY_EIGHT", + "value": 56, + "description": "Key: 8" + }, + { + "name": "KEY_NINE", + "value": 57, + "description": "Key: 9" + }, + { + "name": "KEY_SEMICOLON", + "value": 59, + "description": "Key: ;" + }, + { + "name": "KEY_EQUAL", + "value": 61, + "description": "Key: =" + }, + { + "name": "KEY_A", + "value": 65, + "description": "Key: A | a" + }, + { + "name": "KEY_B", + "value": 66, + "description": "Key: B | b" + }, + { + "name": "KEY_C", + "value": 67, + "description": "Key: C | c" + }, + { + "name": "KEY_D", + "value": 68, + "description": "Key: D | d" + }, + { + "name": "KEY_E", + "value": 69, + "description": "Key: E | e" + }, + { + "name": "KEY_F", + "value": 70, + "description": "Key: F | f" + }, + { + "name": "KEY_G", + "value": 71, + "description": "Key: G | g" + }, + { + "name": "KEY_H", + "value": 72, + "description": "Key: H | h" + }, + { + "name": "KEY_I", + "value": 73, + "description": "Key: I | i" + }, + { + "name": "KEY_J", + "value": 74, + "description": "Key: J | j" + }, + { + "name": "KEY_K", + "value": 75, + "description": "Key: K | k" + }, + { + "name": "KEY_L", + "value": 76, + "description": "Key: L | l" + }, + { + "name": "KEY_M", + "value": 77, + "description": "Key: M | m" + }, + { + "name": "KEY_N", + "value": 78, + "description": "Key: N | n" + }, + { + "name": "KEY_O", + "value": 79, + "description": "Key: O | o" + }, + { + "name": "KEY_P", + "value": 80, + "description": "Key: P | p" + }, + { + "name": "KEY_Q", + "value": 81, + "description": "Key: Q | q" + }, + { + "name": "KEY_R", + "value": 82, + "description": "Key: R | r" + }, + { + "name": "KEY_S", + "value": 83, + "description": "Key: S | s" + }, + { + "name": "KEY_T", + "value": 84, + "description": "Key: T | t" + }, + { + "name": "KEY_U", + "value": 85, + "description": "Key: U | u" + }, + { + "name": "KEY_V", + "value": 86, + "description": "Key: V | v" + }, + { + "name": "KEY_W", + "value": 87, + "description": "Key: W | w" + }, + { + "name": "KEY_X", + "value": 88, + "description": "Key: X | x" + }, + { + "name": "KEY_Y", + "value": 89, + "description": "Key: Y | y" + }, + { + "name": "KEY_Z", + "value": 90, + "description": "Key: Z | z" + }, + { + "name": "KEY_LEFT_BRACKET", + "value": 91, + "description": "Key: [" + }, + { + "name": "KEY_BACKSLASH", + "value": 92, + "description": "Key: '\\'" + }, + { + "name": "KEY_RIGHT_BRACKET", + "value": 93, + "description": "Key: ]" + }, + { + "name": "KEY_GRAVE", + "value": 96, + "description": "Key: `" + }, + { + "name": "KEY_SPACE", + "value": 32, + "description": "Key: Space" + }, + { + "name": "KEY_ESCAPE", + "value": 256, + "description": "Key: Esc" + }, + { + "name": "KEY_ENTER", + "value": 257, + "description": "Key: Enter" + }, + { + "name": "KEY_TAB", + "value": 258, + "description": "Key: Tab" + }, + { + "name": "KEY_BACKSPACE", + "value": 259, + "description": "Key: Backspace" + }, + { + "name": "KEY_INSERT", + "value": 260, + "description": "Key: Ins" + }, + { + "name": "KEY_DELETE", + "value": 261, + "description": "Key: Del" + }, + { + "name": "KEY_RIGHT", + "value": 262, + "description": "Key: Cursor right" + }, + { + "name": "KEY_LEFT", + "value": 263, + "description": "Key: Cursor left" + }, + { + "name": "KEY_DOWN", + "value": 264, + "description": "Key: Cursor down" + }, + { + "name": "KEY_UP", + "value": 265, + "description": "Key: Cursor up" + }, + { + "name": "KEY_PAGE_UP", + "value": 266, + "description": "Key: Page up" + }, + { + "name": "KEY_PAGE_DOWN", + "value": 267, + "description": "Key: Page down" + }, + { + "name": "KEY_HOME", + "value": 268, + "description": "Key: Home" + }, + { + "name": "KEY_END", + "value": 269, + "description": "Key: End" + }, + { + "name": "KEY_CAPS_LOCK", + "value": 280, + "description": "Key: Caps lock" + }, + { + "name": "KEY_SCROLL_LOCK", + "value": 281, + "description": "Key: Scroll down" + }, + { + "name": "KEY_NUM_LOCK", + "value": 282, + "description": "Key: Num lock" + }, + { + "name": "KEY_PRINT_SCREEN", + "value": 283, + "description": "Key: Print screen" + }, + { + "name": "KEY_PAUSE", + "value": 284, + "description": "Key: Pause" + }, + { + "name": "KEY_F1", + "value": 290, + "description": "Key: F1" + }, + { + "name": "KEY_F2", + "value": 291, + "description": "Key: F2" + }, + { + "name": "KEY_F3", + "value": 292, + "description": "Key: F3" + }, + { + "name": "KEY_F4", + "value": 293, + "description": "Key: F4" + }, + { + "name": "KEY_F5", + "value": 294, + "description": "Key: F5" + }, + { + "name": "KEY_F6", + "value": 295, + "description": "Key: F6" + }, + { + "name": "KEY_F7", + "value": 296, + "description": "Key: F7" + }, + { + "name": "KEY_F8", + "value": 297, + "description": "Key: F8" + }, + { + "name": "KEY_F9", + "value": 298, + "description": "Key: F9" + }, + { + "name": "KEY_F10", + "value": 299, + "description": "Key: F10" + }, + { + "name": "KEY_F11", + "value": 300, + "description": "Key: F11" + }, + { + "name": "KEY_F12", + "value": 301, + "description": "Key: F12" + }, + { + "name": "KEY_LEFT_SHIFT", + "value": 340, + "description": "Key: Shift left" + }, + { + "name": "KEY_LEFT_CONTROL", + "value": 341, + "description": "Key: Control left" + }, + { + "name": "KEY_LEFT_ALT", + "value": 342, + "description": "Key: Alt left" + }, + { + "name": "KEY_LEFT_SUPER", + "value": 343, + "description": "Key: Super left" + }, + { + "name": "KEY_RIGHT_SHIFT", + "value": 344, + "description": "Key: Shift right" + }, + { + "name": "KEY_RIGHT_CONTROL", + "value": 345, + "description": "Key: Control right" + }, + { + "name": "KEY_RIGHT_ALT", + "value": 346, + "description": "Key: Alt right" + }, + { + "name": "KEY_RIGHT_SUPER", + "value": 347, + "description": "Key: Super right" + }, + { + "name": "KEY_KB_MENU", + "value": 348, + "description": "Key: KB menu" + }, + { + "name": "KEY_KP_0", + "value": 320, + "description": "Key: Keypad 0" + }, + { + "name": "KEY_KP_1", + "value": 321, + "description": "Key: Keypad 1" + }, + { + "name": "KEY_KP_2", + "value": 322, + "description": "Key: Keypad 2" + }, + { + "name": "KEY_KP_3", + "value": 323, + "description": "Key: Keypad 3" + }, + { + "name": "KEY_KP_4", + "value": 324, + "description": "Key: Keypad 4" + }, + { + "name": "KEY_KP_5", + "value": 325, + "description": "Key: Keypad 5" + }, + { + "name": "KEY_KP_6", + "value": 326, + "description": "Key: Keypad 6" + }, + { + "name": "KEY_KP_7", + "value": 327, + "description": "Key: Keypad 7" + }, + { + "name": "KEY_KP_8", + "value": 328, + "description": "Key: Keypad 8" + }, + { + "name": "KEY_KP_9", + "value": 329, + "description": "Key: Keypad 9" + }, + { + "name": "KEY_KP_DECIMAL", + "value": 330, + "description": "Key: Keypad ." + }, + { + "name": "KEY_KP_DIVIDE", + "value": 331, + "description": "Key: Keypad /" + }, + { + "name": "KEY_KP_MULTIPLY", + "value": 332, + "description": "Key: Keypad *" + }, + { + "name": "KEY_KP_SUBTRACT", + "value": 333, + "description": "Key: Keypad -" + }, + { + "name": "KEY_KP_ADD", + "value": 334, + "description": "Key: Keypad +" + }, + { + "name": "KEY_KP_ENTER", + "value": 335, + "description": "Key: Keypad Enter" + }, + { + "name": "KEY_KP_EQUAL", + "value": 336, + "description": "Key: Keypad =" + }, + { + "name": "KEY_BACK", + "value": 4, + "description": "Key: Android back button" + }, + { + "name": "KEY_MENU", + "value": 5, + "description": "Key: Android menu button" + }, + { + "name": "KEY_VOLUME_UP", + "value": 24, + "description": "Key: Android volume up button" + }, + { + "name": "KEY_VOLUME_DOWN", + "value": 25, + "description": "Key: Android volume down button" + } + ] + }, + { + "name": "MouseButton", + "description": "Mouse buttons", + "values": [ + { + "name": "MOUSE_BUTTON_LEFT", + "value": 0, + "description": "Mouse button left" + }, + { + "name": "MOUSE_BUTTON_RIGHT", + "value": 1, + "description": "Mouse button right" + }, + { + "name": "MOUSE_BUTTON_MIDDLE", + "value": 2, + "description": "Mouse button middle (pressed wheel)" + }, + { + "name": "MOUSE_BUTTON_SIDE", + "value": 3, + "description": "Mouse button side (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_EXTRA", + "value": 4, + "description": "Mouse button extra (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_FORWARD", + "value": 5, + "description": "Mouse button forward (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_BACK", + "value": 6, + "description": "Mouse button back (advanced mouse device)" + } + ] + }, + { + "name": "MouseCursor", + "description": "Mouse cursor", + "values": [ + { + "name": "MOUSE_CURSOR_DEFAULT", + "value": 0, + "description": "Default pointer shape" + }, + { + "name": "MOUSE_CURSOR_ARROW", + "value": 1, + "description": "Arrow shape" + }, + { + "name": "MOUSE_CURSOR_IBEAM", + "value": 2, + "description": "Text writing cursor shape" + }, + { + "name": "MOUSE_CURSOR_CROSSHAIR", + "value": 3, + "description": "Cross shape" + }, + { + "name": "MOUSE_CURSOR_POINTING_HAND", + "value": 4, + "description": "Pointing hand cursor" + }, + { + "name": "MOUSE_CURSOR_RESIZE_EW", + "value": 5, + "description": "Horizontal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NS", + "value": 6, + "description": "Vertical resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NWSE", + "value": 7, + "description": "Top-left to bottom-right diagonal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NESW", + "value": 8, + "description": "The top-right to bottom-left diagonal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_ALL", + "value": 9, + "description": "The omnidirectional resize/move cursor shape" + }, + { + "name": "MOUSE_CURSOR_NOT_ALLOWED", + "value": 10, + "description": "The operation-not-allowed shape" + } + ] + }, + { + "name": "GamepadButton", + "description": "Gamepad buttons", + "values": [ + { + "name": "GAMEPAD_BUTTON_UNKNOWN", + "value": 0, + "description": "Unknown button, just for error checking" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_UP", + "value": 1, + "description": "Gamepad left DPAD up button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_RIGHT", + "value": 2, + "description": "Gamepad left DPAD right button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_DOWN", + "value": 3, + "description": "Gamepad left DPAD down button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_LEFT", + "value": 4, + "description": "Gamepad left DPAD left button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_UP", + "value": 5, + "description": "Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT", + "value": 6, + "description": "Gamepad right button right (i.e. PS3: Circle, Xbox: B)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_DOWN", + "value": 7, + "description": "Gamepad right button down (i.e. PS3: Cross, Xbox: A)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_LEFT", + "value": 8, + "description": "Gamepad right button left (i.e. PS3: Square, Xbox: X)" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_1", + "value": 9, + "description": "Gamepad top/back trigger left (first), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_2", + "value": 10, + "description": "Gamepad top/back trigger left (second), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_1", + "value": 11, + "description": "Gamepad top/back trigger right (first), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_2", + "value": 12, + "description": "Gamepad top/back trigger right (second), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE_LEFT", + "value": 13, + "description": "Gamepad center buttons, left one (i.e. PS3: Select)" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE", + "value": 14, + "description": "Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE_RIGHT", + "value": 15, + "description": "Gamepad center buttons, right one (i.e. PS3: Start)" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_THUMB", + "value": 16, + "description": "Gamepad joystick pressed button left" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_THUMB", + "value": 17, + "description": "Gamepad joystick pressed button right" + } + ] + }, + { + "name": "GamepadAxis", + "description": "Gamepad axes", + "values": [ + { + "name": "GAMEPAD_AXIS_LEFT_X", + "value": 0, + "description": "Gamepad left stick X axis" + }, + { + "name": "GAMEPAD_AXIS_LEFT_Y", + "value": 1, + "description": "Gamepad left stick Y axis" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_X", + "value": 2, + "description": "Gamepad right stick X axis" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_Y", + "value": 3, + "description": "Gamepad right stick Y axis" + }, + { + "name": "GAMEPAD_AXIS_LEFT_TRIGGER", + "value": 4, + "description": "Gamepad back trigger left, pressure level: [1..-1]" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_TRIGGER", + "value": 5, + "description": "Gamepad back trigger right, pressure level: [1..-1]" + } + ] + }, + { + "name": "MaterialMapIndex", + "description": "Material map index", + "values": [ + { + "name": "MATERIAL_MAP_ALBEDO", + "value": 0, + "description": "Albedo material (same as: MATERIAL_MAP_DIFFUSE)" + }, + { + "name": "MATERIAL_MAP_METALNESS", + "value": 1, + "description": "Metalness material (same as: MATERIAL_MAP_SPECULAR)" + }, + { + "name": "MATERIAL_MAP_NORMAL", + "value": 2, + "description": "Normal material" + }, + { + "name": "MATERIAL_MAP_ROUGHNESS", + "value": 3, + "description": "Roughness material" + }, + { + "name": "MATERIAL_MAP_OCCLUSION", + "value": 4, + "description": "Ambient occlusion material" + }, + { + "name": "MATERIAL_MAP_EMISSION", + "value": 5, + "description": "Emission material" + }, + { + "name": "MATERIAL_MAP_HEIGHT", + "value": 6, + "description": "Heightmap material" + }, + { + "name": "MATERIAL_MAP_CUBEMAP", + "value": 7, + "description": "Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_IRRADIANCE", + "value": 8, + "description": "Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_PREFILTER", + "value": 9, + "description": "Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_BRDF", + "value": 10, + "description": "Brdf material" + } + ] + }, + { + "name": "ShaderLocationIndex", + "description": "Shader location index", + "values": [ + { + "name": "SHADER_LOC_VERTEX_POSITION", + "value": 0, + "description": "Shader location: vertex attribute: position" + }, + { + "name": "SHADER_LOC_VERTEX_TEXCOORD01", + "value": 1, + "description": "Shader location: vertex attribute: texcoord01" + }, + { + "name": "SHADER_LOC_VERTEX_TEXCOORD02", + "value": 2, + "description": "Shader location: vertex attribute: texcoord02" + }, + { + "name": "SHADER_LOC_VERTEX_NORMAL", + "value": 3, + "description": "Shader location: vertex attribute: normal" + }, + { + "name": "SHADER_LOC_VERTEX_TANGENT", + "value": 4, + "description": "Shader location: vertex attribute: tangent" + }, + { + "name": "SHADER_LOC_VERTEX_COLOR", + "value": 5, + "description": "Shader location: vertex attribute: color" + }, + { + "name": "SHADER_LOC_MATRIX_MVP", + "value": 6, + "description": "Shader location: matrix uniform: model-view-projection" + }, + { + "name": "SHADER_LOC_MATRIX_VIEW", + "value": 7, + "description": "Shader location: matrix uniform: view (camera transform)" + }, + { + "name": "SHADER_LOC_MATRIX_PROJECTION", + "value": 8, + "description": "Shader location: matrix uniform: projection" + }, + { + "name": "SHADER_LOC_MATRIX_MODEL", + "value": 9, + "description": "Shader location: matrix uniform: model (transform)" + }, + { + "name": "SHADER_LOC_MATRIX_NORMAL", + "value": 10, + "description": "Shader location: matrix uniform: normal" + }, + { + "name": "SHADER_LOC_VECTOR_VIEW", + "value": 11, + "description": "Shader location: vector uniform: view" + }, + { + "name": "SHADER_LOC_COLOR_DIFFUSE", + "value": 12, + "description": "Shader location: vector uniform: diffuse color" + }, + { + "name": "SHADER_LOC_COLOR_SPECULAR", + "value": 13, + "description": "Shader location: vector uniform: specular color" + }, + { + "name": "SHADER_LOC_COLOR_AMBIENT", + "value": 14, + "description": "Shader location: vector uniform: ambient color" + }, + { + "name": "SHADER_LOC_MAP_ALBEDO", + "value": 15, + "description": "Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)" + }, + { + "name": "SHADER_LOC_MAP_METALNESS", + "value": 16, + "description": "Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)" + }, + { + "name": "SHADER_LOC_MAP_NORMAL", + "value": 17, + "description": "Shader location: sampler2d texture: normal" + }, + { + "name": "SHADER_LOC_MAP_ROUGHNESS", + "value": 18, + "description": "Shader location: sampler2d texture: roughness" + }, + { + "name": "SHADER_LOC_MAP_OCCLUSION", + "value": 19, + "description": "Shader location: sampler2d texture: occlusion" + }, + { + "name": "SHADER_LOC_MAP_EMISSION", + "value": 20, + "description": "Shader location: sampler2d texture: emission" + }, + { + "name": "SHADER_LOC_MAP_HEIGHT", + "value": 21, + "description": "Shader location: sampler2d texture: height" + }, + { + "name": "SHADER_LOC_MAP_CUBEMAP", + "value": 22, + "description": "Shader location: samplerCube texture: cubemap" + }, + { + "name": "SHADER_LOC_MAP_IRRADIANCE", + "value": 23, + "description": "Shader location: samplerCube texture: irradiance" + }, + { + "name": "SHADER_LOC_MAP_PREFILTER", + "value": 24, + "description": "Shader location: samplerCube texture: prefilter" + }, + { + "name": "SHADER_LOC_MAP_BRDF", + "value": 25, + "description": "Shader location: sampler2d texture: brdf" + }, + { + "name": "SHADER_LOC_VERTEX_BONEIDS", + "value": 26, + "description": "Shader location: vertex attribute: boneIds" + }, + { + "name": "SHADER_LOC_VERTEX_BONEWEIGHTS", + "value": 27, + "description": "Shader location: vertex attribute: boneWeights" + }, + { + "name": "SHADER_LOC_BONE_MATRICES", + "value": 28, + "description": "Shader location: array of matrices uniform: boneMatrices" + }, + { + "name": "SHADER_LOC_VERTEX_INSTANCE_TX", + "value": 29, + "description": "Shader location: vertex attribute: instanceTransform" + } + ] + }, + { + "name": "ShaderUniformDataType", + "description": "Shader uniform data type", + "values": [ + { + "name": "SHADER_UNIFORM_FLOAT", + "value": 0, + "description": "Shader uniform type: float" + }, + { + "name": "SHADER_UNIFORM_VEC2", + "value": 1, + "description": "Shader uniform type: vec2 (2 float)" + }, + { + "name": "SHADER_UNIFORM_VEC3", + "value": 2, + "description": "Shader uniform type: vec3 (3 float)" + }, + { + "name": "SHADER_UNIFORM_VEC4", + "value": 3, + "description": "Shader uniform type: vec4 (4 float)" + }, + { + "name": "SHADER_UNIFORM_INT", + "value": 4, + "description": "Shader uniform type: int" + }, + { + "name": "SHADER_UNIFORM_IVEC2", + "value": 5, + "description": "Shader uniform type: ivec2 (2 int)" + }, + { + "name": "SHADER_UNIFORM_IVEC3", + "value": 6, + "description": "Shader uniform type: ivec3 (3 int)" + }, + { + "name": "SHADER_UNIFORM_IVEC4", + "value": 7, + "description": "Shader uniform type: ivec4 (4 int)" + }, + { + "name": "SHADER_UNIFORM_UINT", + "value": 8, + "description": "Shader uniform type: unsigned int" + }, + { + "name": "SHADER_UNIFORM_UIVEC2", + "value": 9, + "description": "Shader uniform type: uivec2 (2 unsigned int)" + }, + { + "name": "SHADER_UNIFORM_UIVEC3", + "value": 10, + "description": "Shader uniform type: uivec3 (3 unsigned int)" + }, + { + "name": "SHADER_UNIFORM_UIVEC4", + "value": 11, + "description": "Shader uniform type: uivec4 (4 unsigned int)" + }, + { + "name": "SHADER_UNIFORM_SAMPLER2D", + "value": 12, + "description": "Shader uniform type: sampler2d" + } + ] + }, + { + "name": "ShaderAttributeDataType", + "description": "Shader attribute data types", + "values": [ + { + "name": "SHADER_ATTRIB_FLOAT", + "value": 0, + "description": "Shader attribute type: float" + }, + { + "name": "SHADER_ATTRIB_VEC2", + "value": 1, + "description": "Shader attribute type: vec2 (2 float)" + }, + { + "name": "SHADER_ATTRIB_VEC3", + "value": 2, + "description": "Shader attribute type: vec3 (3 float)" + }, + { + "name": "SHADER_ATTRIB_VEC4", + "value": 3, + "description": "Shader attribute type: vec4 (4 float)" + } + ] + }, + { + "name": "PixelFormat", + "description": "Pixel formats", + "values": [ + { + "name": "PIXELFORMAT_UNCOMPRESSED_GRAYSCALE", + "value": 1, + "description": "8 bit per pixel (no alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA", + "value": 2, + "description": "8*2 bpp (2 channels)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R5G6B5", + "value": 3, + "description": "16 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8", + "value": 4, + "description": "24 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R5G5B5A1", + "value": 5, + "description": "16 bpp (1 bit alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R4G4B4A4", + "value": 6, + "description": "16 bpp (4 bit alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8A8", + "value": 7, + "description": "32 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32", + "value": 8, + "description": "32 bpp (1 channel - float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32", + "value": 9, + "description": "32*3 bpp (3 channels - float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32A32", + "value": 10, + "description": "32*4 bpp (4 channels - float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R16", + "value": 11, + "description": "16 bpp (1 channel - half float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16", + "value": 12, + "description": "16*3 bpp (3 channels - half float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16A16", + "value": 13, + "description": "16*4 bpp (4 channels - half float)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT1_RGB", + "value": 14, + "description": "4 bpp (no alpha)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT1_RGBA", + "value": 15, + "description": "4 bpp (1 bit alpha)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT3_RGBA", + "value": 16, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT5_RGBA", + "value": 17, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC1_RGB", + "value": 18, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC2_RGB", + "value": 19, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA", + "value": 20, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_PVRT_RGB", + "value": 21, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_PVRT_RGBA", + "value": 22, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA", + "value": 23, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA", + "value": 24, + "description": "2 bpp" + } + ] + }, + { + "name": "TextureFilter", + "description": "Texture parameters: filter mode", + "values": [ + { + "name": "TEXTURE_FILTER_POINT", + "value": 0, + "description": "No filter, just pixel approximation" + }, + { + "name": "TEXTURE_FILTER_BILINEAR", + "value": 1, + "description": "Linear filtering" + }, + { + "name": "TEXTURE_FILTER_TRILINEAR", + "value": 2, + "description": "Trilinear filtering (linear with mipmaps)" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_4X", + "value": 3, + "description": "Anisotropic filtering 4x" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_8X", + "value": 4, + "description": "Anisotropic filtering 8x" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_16X", + "value": 5, + "description": "Anisotropic filtering 16x" + } + ] + }, + { + "name": "TextureWrap", + "description": "Texture parameters: wrap mode", + "values": [ + { + "name": "TEXTURE_WRAP_REPEAT", + "value": 0, + "description": "Repeats texture in tiled mode" + }, + { + "name": "TEXTURE_WRAP_CLAMP", + "value": 1, + "description": "Clamps texture to edge pixel in tiled mode" + }, + { + "name": "TEXTURE_WRAP_MIRROR_REPEAT", + "value": 2, + "description": "Mirrors and repeats the texture in tiled mode" + }, + { + "name": "TEXTURE_WRAP_MIRROR_CLAMP", + "value": 3, + "description": "Mirrors and clamps to border the texture in tiled mode" + } + ] + }, + { + "name": "CubemapLayout", + "description": "Cubemap layouts", + "values": [ + { + "name": "CUBEMAP_LAYOUT_AUTO_DETECT", + "value": 0, + "description": "Automatically detect layout type" + }, + { + "name": "CUBEMAP_LAYOUT_LINE_VERTICAL", + "value": 1, + "description": "Layout is defined by a vertical line with faces" + }, + { + "name": "CUBEMAP_LAYOUT_LINE_HORIZONTAL", + "value": 2, + "description": "Layout is defined by a horizontal line with faces" + }, + { + "name": "CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR", + "value": 3, + "description": "Layout is defined by a 3x4 cross with cubemap faces" + }, + { + "name": "CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE", + "value": 4, + "description": "Layout is defined by a 4x3 cross with cubemap faces" + } + ] + }, + { + "name": "FontType", + "description": "Font type, defines generation method", + "values": [ + { + "name": "FONT_DEFAULT", + "value": 0, + "description": "Default font generation, anti-aliased" + }, + { + "name": "FONT_BITMAP", + "value": 1, + "description": "Bitmap font generation, no anti-aliasing" + }, + { + "name": "FONT_SDF", + "value": 2, + "description": "SDF font generation, requires external shader" + } + ] + }, + { + "name": "BlendMode", + "description": "Color blending modes (pre-defined)", + "values": [ + { + "name": "BLEND_ALPHA", + "value": 0, + "description": "Blend textures considering alpha (default)" + }, + { + "name": "BLEND_ADDITIVE", + "value": 1, + "description": "Blend textures adding colors" + }, + { + "name": "BLEND_MULTIPLIED", + "value": 2, + "description": "Blend textures multiplying colors" + }, + { + "name": "BLEND_ADD_COLORS", + "value": 3, + "description": "Blend textures adding colors (alternative)" + }, + { + "name": "BLEND_SUBTRACT_COLORS", + "value": 4, + "description": "Blend textures subtracting colors (alternative)" + }, + { + "name": "BLEND_ALPHA_PREMULTIPLY", + "value": 5, + "description": "Blend premultiplied textures considering alpha" + }, + { + "name": "BLEND_CUSTOM", + "value": 6, + "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())" + }, + { + "name": "BLEND_CUSTOM_SEPARATE", + "value": 7, + "description": "Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())" + } + ] + }, + { + "name": "Gesture", + "description": "Gesture", + "values": [ + { + "name": "GESTURE_NONE", + "value": 0, + "description": "No gesture" + }, + { + "name": "GESTURE_TAP", + "value": 1, + "description": "Tap gesture" + }, + { + "name": "GESTURE_DOUBLETAP", + "value": 2, + "description": "Double tap gesture" + }, + { + "name": "GESTURE_HOLD", + "value": 4, + "description": "Hold gesture" + }, + { + "name": "GESTURE_DRAG", + "value": 8, + "description": "Drag gesture" + }, + { + "name": "GESTURE_SWIPE_RIGHT", + "value": 16, + "description": "Swipe right gesture" + }, + { + "name": "GESTURE_SWIPE_LEFT", + "value": 32, + "description": "Swipe left gesture" + }, + { + "name": "GESTURE_SWIPE_UP", + "value": 64, + "description": "Swipe up gesture" + }, + { + "name": "GESTURE_SWIPE_DOWN", + "value": 128, + "description": "Swipe down gesture" + }, + { + "name": "GESTURE_PINCH_IN", + "value": 256, + "description": "Pinch in gesture" + }, + { + "name": "GESTURE_PINCH_OUT", + "value": 512, + "description": "Pinch out gesture" + } + ] + }, + { + "name": "CameraMode", + "description": "Camera system modes", + "values": [ + { + "name": "CAMERA_CUSTOM", + "value": 0, + "description": "Camera custom, controlled by user (UpdateCamera() does nothing)" + }, + { + "name": "CAMERA_FREE", + "value": 1, + "description": "Camera free mode" + }, + { + "name": "CAMERA_ORBITAL", + "value": 2, + "description": "Camera orbital, around target, zoom supported" + }, + { + "name": "CAMERA_FIRST_PERSON", + "value": 3, + "description": "Camera first person" + }, + { + "name": "CAMERA_THIRD_PERSON", + "value": 4, + "description": "Camera third person" + } + ] + }, + { + "name": "CameraProjection", + "description": "Camera projection", + "values": [ + { + "name": "CAMERA_PERSPECTIVE", + "value": 0, + "description": "Perspective projection" + }, + { + "name": "CAMERA_ORTHOGRAPHIC", + "value": 1, + "description": "Orthographic projection" + } + ] + }, + { + "name": "NPatchLayout", + "description": "N-patch layout", + "values": [ + { + "name": "NPATCH_NINE_PATCH", + "value": 0, + "description": "Npatch layout: 3x3 tiles" + }, + { + "name": "NPATCH_THREE_PATCH_VERTICAL", + "value": 1, + "description": "Npatch layout: 1x3 tiles" + }, + { + "name": "NPATCH_THREE_PATCH_HORIZONTAL", + "value": 2, + "description": "Npatch layout: 3x1 tiles" + } + ] + } + ], + "callbacks": [ + { + "name": "TraceLogCallback", + "description": "Logging: Redirect trace log messages", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "va_list", + "name": "args" + } + ] + }, + { + "name": "LoadFileDataCallback", + "description": "FileIO: Load binary data", + "returnType": "unsigned char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "dataSize" + } + ] + }, + { + "name": "SaveFileDataCallback", + "description": "FileIO: Save binary data", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "LoadFileTextCallback", + "description": "FileIO: Load text data", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "SaveFileTextCallback", + "description": "FileIO: Save text data", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "AudioCallback", + "description": "", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "bufferData" + }, + { + "type": "unsigned int", + "name": "frames" + } + ] + } + ], + "functions": [ + { + "name": "InitWindow", + "description": "Initialize window and OpenGL context", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "const char *", + "name": "title" + } + ] + }, + { + "name": "CloseWindow", + "description": "Close window and unload OpenGL context", + "returnType": "void" + }, + { + "name": "WindowShouldClose", + "description": "Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)", + "returnType": "bool" + }, + { + "name": "IsWindowReady", + "description": "Check if window has been initialized successfully", + "returnType": "bool" + }, + { + "name": "IsWindowFullscreen", + "description": "Check if window is currently fullscreen", + "returnType": "bool" + }, + { + "name": "IsWindowHidden", + "description": "Check if window is currently hidden", + "returnType": "bool" + }, + { + "name": "IsWindowMinimized", + "description": "Check if window is currently minimized", + "returnType": "bool" + }, + { + "name": "IsWindowMaximized", + "description": "Check if window is currently maximized", + "returnType": "bool" + }, + { + "name": "IsWindowFocused", + "description": "Check if window is currently focused", + "returnType": "bool" + }, + { + "name": "IsWindowResized", + "description": "Check if window has been resized last frame", + "returnType": "bool" + }, + { + "name": "IsWindowState", + "description": "Check if one specific window flag is enabled", + "returnType": "bool", + "params": [ + { + "type": "unsigned int", + "name": "flag" + } + ] + }, + { + "name": "SetWindowState", + "description": "Set window configuration state using flags", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "ClearWindowState", + "description": "Clear window configuration state flags", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "ToggleFullscreen", + "description": "Toggle window state: fullscreen/windowed, resizes monitor to match window resolution", + "returnType": "void" + }, + { + "name": "ToggleBorderlessWindowed", + "description": "Toggle window state: borderless windowed, resizes window to match monitor resolution", + "returnType": "void" + }, + { + "name": "MaximizeWindow", + "description": "Set window state: maximized, if resizable", + "returnType": "void" + }, + { + "name": "MinimizeWindow", + "description": "Set window state: minimized, if resizable", + "returnType": "void" + }, + { + "name": "RestoreWindow", + "description": "Restore window from being minimized/maximized", + "returnType": "void" + }, + { + "name": "SetWindowIcon", + "description": "Set icon for window (single image, RGBA 32bit)", + "returnType": "void", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "SetWindowIcons", + "description": "Set icon for window (multiple images, RGBA 32bit)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "images" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "SetWindowTitle", + "description": "Set title for window", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "title" + } + ] + }, + { + "name": "SetWindowPosition", + "description": "Set window position on screen", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "SetWindowMonitor", + "description": "Set monitor for the current window", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "SetWindowMinSize", + "description": "Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "SetWindowMaxSize", + "description": "Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "SetWindowSize", + "description": "Set window dimensions", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "SetWindowOpacity", + "description": "Set window opacity [0.0f..1.0f]", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "opacity" + } + ] + }, + { + "name": "SetWindowFocused", + "description": "Set window focused", + "returnType": "void" + }, + { + "name": "GetWindowHandle", + "description": "Get native window handle", + "returnType": "void *" + }, + { + "name": "GetScreenWidth", + "description": "Get current screen width", + "returnType": "int" + }, + { + "name": "GetScreenHeight", + "description": "Get current screen height", + "returnType": "int" + }, + { + "name": "GetRenderWidth", + "description": "Get current render width (it considers HiDPI)", + "returnType": "int" + }, + { + "name": "GetRenderHeight", + "description": "Get current render height (it considers HiDPI)", + "returnType": "int" + }, + { + "name": "GetMonitorCount", + "description": "Get number of connected monitors", + "returnType": "int" + }, + { + "name": "GetCurrentMonitor", + "description": "Get current monitor where window is placed", + "returnType": "int" + }, + { + "name": "GetMonitorPosition", + "description": "Get specified monitor position", + "returnType": "Vector2", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorWidth", + "description": "Get specified monitor width (current video mode used by monitor)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorHeight", + "description": "Get specified monitor height (current video mode used by monitor)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorPhysicalWidth", + "description": "Get specified monitor physical width in millimetres", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorPhysicalHeight", + "description": "Get specified monitor physical height in millimetres", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorRefreshRate", + "description": "Get specified monitor refresh rate", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetWindowPosition", + "description": "Get window position XY on monitor", + "returnType": "Vector2" + }, + { + "name": "GetWindowScaleDPI", + "description": "Get window scale DPI factor", + "returnType": "Vector2" + }, + { + "name": "GetMonitorName", + "description": "Get the human-readable, UTF-8 encoded name of the specified monitor", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "SetClipboardText", + "description": "Set clipboard text content", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GetClipboardText", + "description": "Get clipboard text content", + "returnType": "const char *" + }, + { + "name": "GetClipboardImage", + "description": "Get clipboard image content", + "returnType": "Image" + }, + { + "name": "EnableEventWaiting", + "description": "Enable waiting for events on EndDrawing(), no automatic event polling", + "returnType": "void" + }, + { + "name": "DisableEventWaiting", + "description": "Disable waiting for events on EndDrawing(), automatic events polling", + "returnType": "void" + }, + { + "name": "ShowCursor", + "description": "Shows cursor", + "returnType": "void" + }, + { + "name": "HideCursor", + "description": "Hides cursor", + "returnType": "void" + }, + { + "name": "IsCursorHidden", + "description": "Check if cursor is not visible", + "returnType": "bool" + }, + { + "name": "EnableCursor", + "description": "Enables cursor (unlock cursor)", + "returnType": "void" + }, + { + "name": "DisableCursor", + "description": "Disables cursor (lock cursor)", + "returnType": "void" + }, + { + "name": "IsCursorOnScreen", + "description": "Check if cursor is on the screen", + "returnType": "bool" + }, + { + "name": "ClearBackground", + "description": "Set background color (framebuffer clear color)", + "returnType": "void", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "BeginDrawing", + "description": "Setup canvas (framebuffer) to start drawing", + "returnType": "void" + }, + { + "name": "EndDrawing", + "description": "End canvas drawing and swap buffers (double buffering)", + "returnType": "void" + }, + { + "name": "BeginMode2D", + "description": "Begin 2D mode with custom camera (2D)", + "returnType": "void", + "params": [ + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "EndMode2D", + "description": "Ends 2D mode with custom camera", + "returnType": "void" + }, + { + "name": "BeginMode3D", + "description": "Begin 3D mode with custom camera (3D)", + "returnType": "void", + "params": [ + { + "type": "Camera3D", + "name": "camera" + } + ] + }, + { + "name": "EndMode3D", + "description": "Ends 3D mode and returns to default 2D orthographic mode", + "returnType": "void" + }, + { + "name": "BeginTextureMode", + "description": "Begin drawing to render texture", + "returnType": "void", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "EndTextureMode", + "description": "Ends drawing to render texture", + "returnType": "void" + }, + { + "name": "BeginShaderMode", + "description": "Begin custom shader drawing", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "EndShaderMode", + "description": "End custom shader drawing (use default shader)", + "returnType": "void" + }, + { + "name": "BeginBlendMode", + "description": "Begin blending mode (alpha, additive, multiplied, subtract, custom)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "EndBlendMode", + "description": "End blending mode (reset to default: alpha blending)", + "returnType": "void" + }, + { + "name": "BeginScissorMode", + "description": "Begin scissor mode (define screen area for following drawing)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "EndScissorMode", + "description": "End scissor mode", + "returnType": "void" + }, + { + "name": "BeginVrStereoMode", + "description": "Begin stereo rendering (requires VR simulator)", + "returnType": "void", + "params": [ + { + "type": "VrStereoConfig", + "name": "config" + } + ] + }, + { + "name": "EndVrStereoMode", + "description": "End stereo rendering (requires VR simulator)", + "returnType": "void" + }, + { + "name": "LoadVrStereoConfig", + "description": "Load VR stereo config for VR simulator device parameters", + "returnType": "VrStereoConfig", + "params": [ + { + "type": "VrDeviceInfo", + "name": "device" + } + ] + }, + { + "name": "UnloadVrStereoConfig", + "description": "Unload VR stereo config", + "returnType": "void", + "params": [ + { + "type": "VrStereoConfig", + "name": "config" + } + ] + }, + { + "name": "LoadShader", + "description": "Load shader from files and bind default locations", + "returnType": "Shader", + "params": [ + { + "type": "const char *", + "name": "vsFileName" + }, + { + "type": "const char *", + "name": "fsFileName" + } + ] + }, + { + "name": "LoadShaderFromMemory", + "description": "Load shader from code strings and bind default locations", + "returnType": "Shader", + "params": [ + { + "type": "const char *", + "name": "vsCode" + }, + { + "type": "const char *", + "name": "fsCode" + } + ] + }, + { + "name": "IsShaderValid", + "description": "Check if a shader is valid (loaded on GPU)", + "returnType": "bool", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "GetShaderLocation", + "description": "Get shader uniform location", + "returnType": "int", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "const char *", + "name": "uniformName" + } + ] + }, + { + "name": "GetShaderLocationAttrib", + "description": "Get shader attribute location", + "returnType": "int", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "const char *", + "name": "attribName" + } + ] + }, + { + "name": "SetShaderValue", + "description": "Set shader uniform value", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "uniformType" + } + ] + }, + { + "name": "SetShaderValueV", + "description": "Set shader uniform value vector", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "uniformType" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "SetShaderValueMatrix", + "description": "Set shader uniform value (matrix 4x4)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "SetShaderValueTexture", + "description": "Set shader uniform value and bind the texture (sampler2d)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "UnloadShader", + "description": "Unload shader from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "GetScreenToWorldRay", + "description": "Get a ray trace from screen position (i.e mouse)", + "returnType": "Ray", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetScreenToWorldRayEx", + "description": "Get a ray trace from screen position (i.e mouse) in a viewport", + "returnType": "Ray", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "GetWorldToScreen", + "description": "Get the screen space position for a 3d world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetWorldToScreenEx", + "description": "Get size position for a 3d world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "GetWorldToScreen2D", + "description": "Get the screen space position for a 2d camera world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "GetScreenToWorld2D", + "description": "Get the world space position for a 2d camera screen space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "GetCameraMatrix", + "description": "Get camera transform matrix (view matrix)", + "returnType": "Matrix", + "params": [ + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetCameraMatrix2D", + "description": "Get camera 2d transform matrix", + "returnType": "Matrix", + "params": [ + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "SetTargetFPS", + "description": "Set target FPS (maximum)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "fps" + } + ] + }, + { + "name": "GetFrameTime", + "description": "Get time in seconds for last frame drawn (delta time)", + "returnType": "float" + }, + { + "name": "GetTime", + "description": "Get elapsed time in seconds since InitWindow()", + "returnType": "double" + }, + { + "name": "GetFPS", + "description": "Get current FPS", + "returnType": "int" + }, + { + "name": "SwapScreenBuffer", + "description": "Swap back buffer with front buffer (screen drawing)", + "returnType": "void" + }, + { + "name": "PollInputEvents", + "description": "Register all input events", + "returnType": "void" + }, + { + "name": "WaitTime", + "description": "Wait for some time (halt program execution)", + "returnType": "void", + "params": [ + { + "type": "double", + "name": "seconds" + } + ] + }, + { + "name": "SetRandomSeed", + "description": "Set the seed for the random number generator", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "seed" + } + ] + }, + { + "name": "GetRandomValue", + "description": "Get a random value between min and max (both included)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "min" + }, + { + "type": "int", + "name": "max" + } + ] + }, + { + "name": "LoadRandomSequence", + "description": "Load random values sequence, no values repeated", + "returnType": "int *", + "params": [ + { + "type": "unsigned int", + "name": "count" + }, + { + "type": "int", + "name": "min" + }, + { + "type": "int", + "name": "max" + } + ] + }, + { + "name": "UnloadRandomSequence", + "description": "Unload random values sequence", + "returnType": "void", + "params": [ + { + "type": "int *", + "name": "sequence" + } + ] + }, + { + "name": "TakeScreenshot", + "description": "Takes a screenshot of current screen (filename extension defines format)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "SetConfigFlags", + "description": "Setup init configuration flags (view FLAGS)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "OpenURL", + "description": "Open URL with default system browser (if available)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "url" + } + ] + }, + { + "name": "SetTraceLogLevel", + "description": "Set the current threshold (minimum) log level", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + } + ] + }, + { + "name": "TraceLog", + "description": "Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "...", + "name": "args" + } + ] + }, + { + "name": "SetTraceLogCallback", + "description": "Set custom trace log", + "returnType": "void", + "params": [ + { + "type": "TraceLogCallback", + "name": "callback" + } + ] + }, + { + "name": "MemAlloc", + "description": "Internal memory allocator", + "returnType": "void *", + "params": [ + { + "type": "unsigned int", + "name": "size" + } + ] + }, + { + "name": "MemRealloc", + "description": "Internal memory reallocator", + "returnType": "void *", + "params": [ + { + "type": "void *", + "name": "ptr" + }, + { + "type": "unsigned int", + "name": "size" + } + ] + }, + { + "name": "MemFree", + "description": "Internal memory free", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "ptr" + } + ] + }, + { + "name": "LoadFileData", + "description": "Load file data as byte array (read)", + "returnType": "unsigned char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "dataSize" + } + ] + }, + { + "name": "UnloadFileData", + "description": "Unload file data allocated by LoadFileData()", + "returnType": "void", + "params": [ + { + "type": "unsigned char *", + "name": "data" + } + ] + }, + { + "name": "SaveFileData", + "description": "Save data to file from byte array (write), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "ExportDataAsCode", + "description": "Export data to code (.h), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadFileText", + "description": "Load text data from file (read), returns a '\\0' terminated string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "UnloadFileText", + "description": "Unload file text data allocated by LoadFileText()", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "SaveFileText", + "description": "Save text data to file (write), string must be '\\0' terminated, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "SetLoadFileDataCallback", + "description": "Set custom file binary data loader", + "returnType": "void", + "params": [ + { + "type": "LoadFileDataCallback", + "name": "callback" + } + ] + }, + { + "name": "SetSaveFileDataCallback", + "description": "Set custom file binary data saver", + "returnType": "void", + "params": [ + { + "type": "SaveFileDataCallback", + "name": "callback" + } + ] + }, + { + "name": "SetLoadFileTextCallback", + "description": "Set custom file text data loader", + "returnType": "void", + "params": [ + { + "type": "LoadFileTextCallback", + "name": "callback" + } + ] + }, + { + "name": "SetSaveFileTextCallback", + "description": "Set custom file text data saver", + "returnType": "void", + "params": [ + { + "type": "SaveFileTextCallback", + "name": "callback" + } + ] + }, + { + "name": "FileRename", + "description": "Rename file (if exists)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "fileRename" + } + ] + }, + { + "name": "FileRemove", + "description": "Remove file (if exists)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "FileCopy", + "description": "Copy file from one path to another, dstPath created if it doesn't exist", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "srcPath" + }, + { + "type": "const char *", + "name": "dstPath" + } + ] + }, + { + "name": "FileMove", + "description": "Move file from one directory to another, dstPath created if it doesn't exist", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "srcPath" + }, + { + "type": "const char *", + "name": "dstPath" + } + ] + }, + { + "name": "FileTextReplace", + "description": "Replace text in an existing file", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "search" + }, + { + "type": "const char *", + "name": "replacement" + } + ] + }, + { + "name": "FileTextFindIndex", + "description": "Find text in existing file", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "search" + } + ] + }, + { + "name": "FileExists", + "description": "Check if file exists", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "DirectoryExists", + "description": "Check if a directory path exists", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "IsFileExtension", + "description": "Check file extension (recommended include point: .png, .wav)", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "ext" + } + ] + }, + { + "name": "GetFileLength", + "description": "Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetFileModTime", + "description": "Get file modification time (last write time)", + "returnType": "long", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetFileExtension", + "description": "Get pointer to extension for a filename string (includes dot: '.png')", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetFileName", + "description": "Get pointer to filename for a path string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetFileNameWithoutExt", + "description": "Get filename string without extension (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetDirectoryPath", + "description": "Get full path for a given fileName with path (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetPrevDirectoryPath", + "description": "Get previous directory path for a given path (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "GetWorkingDirectory", + "description": "Get current working directory (uses static string)", + "returnType": "const char *" + }, + { + "name": "GetApplicationDirectory", + "description": "Get the directory of the running application (uses static string)", + "returnType": "const char *" + }, + { + "name": "MakeDirectory", + "description": "Create directories (including full path requested), returns 0 on success", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "ChangeDirectory", + "description": "Change working directory, return true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "IsPathFile", + "description": "Check if a given path is a file or a directory", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "path" + } + ] + }, + { + "name": "IsFileNameValid", + "description": "Check if fileName is valid for the platform/OS", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadDirectoryFiles", + "description": "Load directory filepaths", + "returnType": "FilePathList", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "LoadDirectoryFilesEx", + "description": "Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result", + "returnType": "FilePathList", + "params": [ + { + "type": "const char *", + "name": "basePath" + }, + { + "type": "const char *", + "name": "filter" + }, + { + "type": "bool", + "name": "scanSubdirs" + } + ] + }, + { + "name": "UnloadDirectoryFiles", + "description": "Unload filepaths", + "returnType": "void", + "params": [ + { + "type": "FilePathList", + "name": "files" + } + ] + }, + { + "name": "IsFileDropped", + "description": "Check if a file has been dropped into window", + "returnType": "bool" + }, + { + "name": "LoadDroppedFiles", + "description": "Load dropped filepaths", + "returnType": "FilePathList" + }, + { + "name": "UnloadDroppedFiles", + "description": "Unload dropped filepaths", + "returnType": "void", + "params": [ + { + "type": "FilePathList", + "name": "files" + } + ] + }, + { + "name": "GetDirectoryFileCount", + "description": "Get the file count in a directory", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "GetDirectoryFileCountEx", + "description": "Get the file count in a directory with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "basePath" + }, + { + "type": "const char *", + "name": "filter" + }, + { + "type": "bool", + "name": "scanSubdirs" + } + ] + }, + { + "name": "CompressData", + "description": "Compress data (DEFLATE algorithm), memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int *", + "name": "compDataSize" + } + ] + }, + { + "name": "DecompressData", + "description": "Decompress data (DEFLATE algorithm), memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const unsigned char *", + "name": "compData" + }, + { + "type": "int", + "name": "compDataSize" + }, + { + "type": "int *", + "name": "dataSize" + } + ] + }, + { + "name": "EncodeDataBase64", + "description": "Encode data to Base64 string (includes NULL terminator), memory must be MemFree()", + "returnType": "char *", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int *", + "name": "outputSize" + } + ] + }, + { + "name": "DecodeDataBase64", + "description": "Decode Base64 string (expected NULL terminated), memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "outputSize" + } + ] + }, + { + "name": "ComputeCRC32", + "description": "Compute CRC32 hash code", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "ComputeMD5", + "description": "Compute MD5 hash code, returns static int[4] (16 bytes)", + "returnType": "unsigned int *", + "params": [ + { + "type": "unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "ComputeSHA1", + "description": "Compute SHA1 hash code, returns static int[5] (20 bytes)", + "returnType": "unsigned int *", + "params": [ + { + "type": "unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "ComputeSHA256", + "description": "Compute SHA256 hash code, returns static int[8] (32 bytes)", + "returnType": "unsigned int *", + "params": [ + { + "type": "unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "LoadAutomationEventList", + "description": "Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS", + "returnType": "AutomationEventList", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "UnloadAutomationEventList", + "description": "Unload automation events list from file", + "returnType": "void", + "params": [ + { + "type": "AutomationEventList", + "name": "list" + } + ] + }, + { + "name": "ExportAutomationEventList", + "description": "Export automation events list as text file", + "returnType": "bool", + "params": [ + { + "type": "AutomationEventList", + "name": "list" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "SetAutomationEventList", + "description": "Set automation event list to record to", + "returnType": "void", + "params": [ + { + "type": "AutomationEventList *", + "name": "list" + } + ] + }, + { + "name": "SetAutomationEventBaseFrame", + "description": "Set automation event internal base frame to start recording", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "frame" + } + ] + }, + { + "name": "StartAutomationEventRecording", + "description": "Start recording automation events (AutomationEventList must be set)", + "returnType": "void" + }, + { + "name": "StopAutomationEventRecording", + "description": "Stop recording automation events", + "returnType": "void" + }, + { + "name": "PlayAutomationEvent", + "description": "Play a recorded automation event", + "returnType": "void", + "params": [ + { + "type": "AutomationEvent", + "name": "event" + } + ] + }, + { + "name": "IsKeyPressed", + "description": "Check if a key has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyPressedRepeat", + "description": "Check if a key has been pressed again", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyDown", + "description": "Check if a key is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyReleased", + "description": "Check if a key has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyUp", + "description": "Check if a key is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "GetKeyPressed", + "description": "Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty", + "returnType": "int" + }, + { + "name": "GetCharPressed", + "description": "Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty", + "returnType": "int" + }, + { + "name": "GetKeyName", + "description": "Get name of a QWERTY key on the current keyboard layout (eg returns string 'q' for KEY_A on an AZERTY keyboard)", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "SetExitKey", + "description": "Set a custom key to exit program (default is ESC)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsGamepadAvailable", + "description": "Check if a gamepad is available", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "GetGamepadName", + "description": "Get gamepad internal name id", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "IsGamepadButtonPressed", + "description": "Check if a gamepad button has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonDown", + "description": "Check if a gamepad button is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonReleased", + "description": "Check if a gamepad button has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonUp", + "description": "Check if a gamepad button is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "GetGamepadButtonPressed", + "description": "Get the last gamepad button pressed", + "returnType": "int" + }, + { + "name": "GetGamepadAxisCount", + "description": "Get axis count for a gamepad", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "GetGamepadAxisMovement", + "description": "Get movement value for a gamepad axis", + "returnType": "float", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "axis" + } + ] + }, + { + "name": "SetGamepadMappings", + "description": "Set internal gamepad mappings (SDL_GameControllerDB)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "mappings" + } + ] + }, + { + "name": "SetGamepadVibration", + "description": "Set gamepad vibration for both motors (duration in seconds)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "float", + "name": "leftMotor" + }, + { + "type": "float", + "name": "rightMotor" + }, + { + "type": "float", + "name": "duration" + } + ] + }, + { + "name": "IsMouseButtonPressed", + "description": "Check if a mouse button has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonDown", + "description": "Check if a mouse button is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonReleased", + "description": "Check if a mouse button has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonUp", + "description": "Check if a mouse button is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "GetMouseX", + "description": "Get mouse position X", + "returnType": "int" + }, + { + "name": "GetMouseY", + "description": "Get mouse position Y", + "returnType": "int" + }, + { + "name": "GetMousePosition", + "description": "Get mouse position XY", + "returnType": "Vector2" + }, + { + "name": "GetMouseDelta", + "description": "Get mouse delta between frames", + "returnType": "Vector2" + }, + { + "name": "SetMousePosition", + "description": "Set mouse position XY", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "SetMouseOffset", + "description": "Set mouse offset", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + } + ] + }, + { + "name": "SetMouseScale", + "description": "Set mouse scaling", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "scaleX" + }, + { + "type": "float", + "name": "scaleY" + } + ] + }, + { + "name": "GetMouseWheelMove", + "description": "Get mouse wheel movement for X or Y, whichever is larger", + "returnType": "float" + }, + { + "name": "GetMouseWheelMoveV", + "description": "Get mouse wheel movement for both X and Y", + "returnType": "Vector2" + }, + { + "name": "SetMouseCursor", + "description": "Set mouse cursor", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "cursor" + } + ] + }, + { + "name": "GetTouchX", + "description": "Get touch position X for touch point 0 (relative to screen size)", + "returnType": "int" + }, + { + "name": "GetTouchY", + "description": "Get touch position Y for touch point 0 (relative to screen size)", + "returnType": "int" + }, + { + "name": "GetTouchPosition", + "description": "Get touch position XY for a touch point index (relative to screen size)", + "returnType": "Vector2", + "params": [ + { + "type": "int", + "name": "index" + } + ] + }, + { + "name": "GetTouchPointId", + "description": "Get touch point identifier for given index", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "index" + } + ] + }, + { + "name": "GetTouchPointCount", + "description": "Get number of touch points", + "returnType": "int" + }, + { + "name": "SetGesturesEnabled", + "description": "Enable a set of gestures using flags", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "IsGestureDetected", + "description": "Check if a gesture have been detected", + "returnType": "bool", + "params": [ + { + "type": "unsigned int", + "name": "gesture" + } + ] + }, + { + "name": "GetGestureDetected", + "description": "Get latest detected gesture", + "returnType": "int" + }, + { + "name": "GetGestureHoldDuration", + "description": "Get gesture hold time in seconds", + "returnType": "float" + }, + { + "name": "GetGestureDragVector", + "description": "Get gesture drag vector", + "returnType": "Vector2" + }, + { + "name": "GetGestureDragAngle", + "description": "Get gesture drag angle", + "returnType": "float" + }, + { + "name": "GetGesturePinchVector", + "description": "Get gesture pinch delta", + "returnType": "Vector2" + }, + { + "name": "GetGesturePinchAngle", + "description": "Get gesture pinch angle", + "returnType": "float" + }, + { + "name": "UpdateCamera", + "description": "Update camera position for selected mode", + "returnType": "void", + "params": [ + { + "type": "Camera *", + "name": "camera" + }, + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "UpdateCameraPro", + "description": "Update camera movement/rotation", + "returnType": "void", + "params": [ + { + "type": "Camera *", + "name": "camera" + }, + { + "type": "Vector3", + "name": "movement" + }, + { + "type": "Vector3", + "name": "rotation" + }, + { + "type": "float", + "name": "zoom" + } + ] + }, + { + "name": "SetShapesTexture", + "description": "Set texture and rectangle to be used on shapes drawing", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + } + ] + }, + { + "name": "GetShapesTexture", + "description": "Get texture that is used for shapes drawing", + "returnType": "Texture2D" + }, + { + "name": "GetShapesTextureRectangle", + "description": "Get texture source rectangle that is used for shapes drawing", + "returnType": "Rectangle" + }, + { + "name": "DrawPixel", + "description": "Draw a pixel using geometry [Can be slow, use with care]", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPixelV", + "description": "Draw a pixel using geometry (Vector version) [Can be slow, use with care]", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLine", + "description": "Draw a line", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "startPosX" + }, + { + "type": "int", + "name": "startPosY" + }, + { + "type": "int", + "name": "endPosX" + }, + { + "type": "int", + "name": "endPosY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineV", + "description": "Draw a line (using gl lines)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineEx", + "description": "Draw a line (using triangles/quads)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineStrip", + "description": "Draw lines sequence (using gl lines)", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineBezier", + "description": "Draw line segment cubic-bezier in-out interpolation", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineDashed", + "description": "Draw a dashed line", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "int", + "name": "dashSize" + }, + { + "type": "int", + "name": "spaceSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircle", + "description": "Draw a color-filled circle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleSector", + "description": "Draw a piece of a circle", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleSectorLines", + "description": "Draw circle sector outline", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleGradient", + "description": "Draw a gradient-filled circle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "inner" + }, + { + "type": "Color", + "name": "outer" + } + ] + }, + { + "name": "DrawCircleV", + "description": "Draw a color-filled circle (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleLines", + "description": "Draw circle outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleLinesV", + "description": "Draw circle outline (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipse", + "description": "Draw ellipse", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipseV", + "description": "Draw ellipse (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipseLines", + "description": "Draw ellipse outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipseLinesV", + "description": "Draw ellipse outline (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRing", + "description": "Draw ring", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "innerRadius" + }, + { + "type": "float", + "name": "outerRadius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRingLines", + "description": "Draw ring outline", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "innerRadius" + }, + { + "type": "float", + "name": "outerRadius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangle", + "description": "Draw a color-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleV", + "description": "Draw a color-filled rectangle (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRec", + "description": "Draw a color-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectanglePro", + "description": "Draw a color-filled rectangle with pro parameters", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleGradientV", + "description": "Draw a vertical-gradient-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "top" + }, + { + "type": "Color", + "name": "bottom" + } + ] + }, + { + "name": "DrawRectangleGradientH", + "description": "Draw a horizontal-gradient-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "left" + }, + { + "type": "Color", + "name": "right" + } + ] + }, + { + "name": "DrawRectangleGradientEx", + "description": "Draw a gradient-filled rectangle with custom vertex colors", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "topLeft" + }, + { + "type": "Color", + "name": "bottomLeft" + }, + { + "type": "Color", + "name": "bottomRight" + }, + { + "type": "Color", + "name": "topRight" + } + ] + }, + { + "name": "DrawRectangleLines", + "description": "Draw rectangle outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleLinesEx", + "description": "Draw rectangle outline with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRounded", + "description": "Draw rectangle with rounded edges", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "roundness" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRoundedLines", + "description": "Draw rectangle lines with rounded edges", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "roundness" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRoundedLinesEx", + "description": "Draw rectangle with rounded edges outline", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "roundness" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangle", + "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleLines", + "description": "Draw triangle outline (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleFan", + "description": "Draw a triangle fan defined by points (first vertex is the center)", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleStrip", + "description": "Draw a triangle strip defined by points", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPoly", + "description": "Draw a regular polygon (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPolyLines", + "description": "Draw a polygon outline of n sides", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPolyLinesEx", + "description": "Draw a polygon outline of n sides with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineLinear", + "description": "Draw spline: Linear, minimum 2 points", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineBasis", + "description": "Draw spline: B-Spline, minimum 4 points", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineCatmullRom", + "description": "Draw spline: Catmull-Rom, minimum 4 points", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineBezierQuadratic", + "description": "Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineBezierCubic", + "description": "Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]", + "returnType": "void", + "params": [ + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineSegmentLinear", + "description": "Draw spline segment: Linear, 2 points", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineSegmentBasis", + "description": "Draw spline segment: B-Spline, 4 points", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineSegmentCatmullRom", + "description": "Draw spline segment: Catmull-Rom, 4 points", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineSegmentBezierQuadratic", + "description": "Draw spline segment: Quadratic Bezier, 2 points, 1 control point", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "c2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSplineSegmentBezierCubic", + "description": "Draw spline segment: Cubic Bezier, 2 points, 2 control points", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "c2" + }, + { + "type": "Vector2", + "name": "c3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GetSplinePointLinear", + "description": "Get (evaluate) spline point: Linear", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "float", + "name": "t" + } + ] + }, + { + "name": "GetSplinePointBasis", + "description": "Get (evaluate) spline point: B-Spline", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "t" + } + ] + }, + { + "name": "GetSplinePointCatmullRom", + "description": "Get (evaluate) spline point: Catmull-Rom", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "t" + } + ] + }, + { + "name": "GetSplinePointBezierQuad", + "description": "Get (evaluate) spline point: Quadratic Bezier", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "c2" + }, + { + "type": "Vector2", + "name": "p3" + }, + { + "type": "float", + "name": "t" + } + ] + }, + { + "name": "GetSplinePointBezierCubic", + "description": "Get (evaluate) spline point: Cubic Bezier", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "c2" + }, + { + "type": "Vector2", + "name": "c3" + }, + { + "type": "Vector2", + "name": "p4" + }, + { + "type": "float", + "name": "t" + } + ] + }, + { + "name": "CheckCollisionRecs", + "description": "Check collision between two rectangles", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "rec1" + }, + { + "type": "Rectangle", + "name": "rec2" + } + ] + }, + { + "name": "CheckCollisionCircles", + "description": "Check collision between two circles", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "center1" + }, + { + "type": "float", + "name": "radius1" + }, + { + "type": "Vector2", + "name": "center2" + }, + { + "type": "float", + "name": "radius2" + } + ] + }, + { + "name": "CheckCollisionCircleRec", + "description": "Check collision between circle and rectangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "CheckCollisionCircleLine", + "description": "Check if circle collides with a line created betweeen two points [p1] and [p2]", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + } + ] + }, + { + "name": "CheckCollisionPointRec", + "description": "Check if point is inside rectangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "CheckCollisionPointCircle", + "description": "Check if point is inside circle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "CheckCollisionPointTriangle", + "description": "Check if point is inside a triangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + } + ] + }, + { + "name": "CheckCollisionPointLine", + "description": "Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "int", + "name": "threshold" + } + ] + }, + { + "name": "CheckCollisionPointPoly", + "description": "Check if point is within a polygon described by array of vertices", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + } + ] + }, + { + "name": "CheckCollisionLines", + "description": "Check the collision between two lines defined by two points each, returns collision point by reference", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "startPos1" + }, + { + "type": "Vector2", + "name": "endPos1" + }, + { + "type": "Vector2", + "name": "startPos2" + }, + { + "type": "Vector2", + "name": "endPos2" + }, + { + "type": "Vector2 *", + "name": "collisionPoint" + } + ] + }, + { + "name": "GetCollisionRec", + "description": "Get collision rectangle for two rectangles collision", + "returnType": "Rectangle", + "params": [ + { + "type": "Rectangle", + "name": "rec1" + }, + { + "type": "Rectangle", + "name": "rec2" + } + ] + }, + { + "name": "LoadImage", + "description": "Load image from file into CPU memory (RAM)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadImageRaw", + "description": "Load image from RAW file data", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "int", + "name": "headerSize" + } + ] + }, + { + "name": "LoadImageAnim", + "description": "Load image sequence from file (frames appended to image.data)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "frames" + } + ] + }, + { + "name": "LoadImageAnimFromMemory", + "description": "Load image sequence from memory buffer", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int *", + "name": "frames" + } + ] + }, + { + "name": "LoadImageFromMemory", + "description": "Load image from memory buffer, fileType refers to extension: i.e. '.png'", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "LoadImageFromTexture", + "description": "Load image from GPU texture data", + "returnType": "Image", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "LoadImageFromScreen", + "description": "Load image from screen buffer and (screenshot)", + "returnType": "Image" + }, + { + "name": "IsImageValid", + "description": "Check if an image is valid (data and parameters)", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "UnloadImage", + "description": "Unload image from CPU memory (RAM)", + "returnType": "void", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "ExportImage", + "description": "Export image data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "ExportImageToMemory", + "description": "Export image to memory buffer", + "returnType": "unsigned char *", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "int *", + "name": "fileSize" + } + ] + }, + { + "name": "ExportImageAsCode", + "description": "Export image as code file defining an array of bytes, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GenImageColor", + "description": "Generate image: plain color", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GenImageGradientLinear", + "description": "Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "direction" + }, + { + "type": "Color", + "name": "start" + }, + { + "type": "Color", + "name": "end" + } + ] + }, + { + "name": "GenImageGradientRadial", + "description": "Generate image: radial gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "float", + "name": "density" + }, + { + "type": "Color", + "name": "inner" + }, + { + "type": "Color", + "name": "outer" + } + ] + }, + { + "name": "GenImageGradientSquare", + "description": "Generate image: square gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "float", + "name": "density" + }, + { + "type": "Color", + "name": "inner" + }, + { + "type": "Color", + "name": "outer" + } + ] + }, + { + "name": "GenImageChecked", + "description": "Generate image: checked", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "checksX" + }, + { + "type": "int", + "name": "checksY" + }, + { + "type": "Color", + "name": "col1" + }, + { + "type": "Color", + "name": "col2" + } + ] + }, + { + "name": "GenImageWhiteNoise", + "description": "Generate image: white noise", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "float", + "name": "factor" + } + ] + }, + { + "name": "GenImagePerlinNoise", + "description": "Generate image: perlin noise", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + }, + { + "type": "float", + "name": "scale" + } + ] + }, + { + "name": "GenImageCellular", + "description": "Generate image: cellular algorithm, bigger tileSize means bigger cells", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "tileSize" + } + ] + }, + { + "name": "GenImageText", + "description": "Generate image: grayscale image from text data", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "ImageCopy", + "description": "Create an image duplicate (useful for transformations)", + "returnType": "Image", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "ImageFromImage", + "description": "Create an image from another image piece", + "returnType": "Image", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "ImageFromChannel", + "description": "Create an image from a selected channel of another image (GRAYSCALE)", + "returnType": "Image", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "selectedChannel" + } + ] + }, + { + "name": "ImageText", + "description": "Create an image from text (default font)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageTextEx", + "description": "Create an image from text (custom sprite font)", + "returnType": "Image", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ImageFormat", + "description": "Convert image data to desired format", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newFormat" + } + ] + }, + { + "name": "ImageToPOT", + "description": "Convert image to POT (power-of-two)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "fill" + } + ] + }, + { + "name": "ImageCrop", + "description": "Crop an image to a defined rectangle", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Rectangle", + "name": "crop" + } + ] + }, + { + "name": "ImageAlphaCrop", + "description": "Crop image depending on alpha value", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "ImageAlphaClear", + "description": "Clear alpha channel to desired color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "ImageAlphaMask", + "description": "Apply alpha mask to image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Image", + "name": "alphaMask" + } + ] + }, + { + "name": "ImageAlphaPremultiply", + "description": "Premultiply alpha channel", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageBlurGaussian", + "description": "Apply Gaussian blur using a box blur approximation", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "blurSize" + } + ] + }, + { + "name": "ImageKernelConvolution", + "description": "Apply custom square convolution kernel to image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "const float *", + "name": "kernel" + }, + { + "type": "int", + "name": "kernelSize" + } + ] + }, + { + "name": "ImageResize", + "description": "Resize image (Bicubic scaling algorithm)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + } + ] + }, + { + "name": "ImageResizeNN", + "description": "Resize image (Nearest-Neighbor scaling algorithm)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + } + ] + }, + { + "name": "ImageResizeCanvas", + "description": "Resize canvas and fill with color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + }, + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + }, + { + "type": "Color", + "name": "fill" + } + ] + }, + { + "name": "ImageMipmaps", + "description": "Compute all mipmap levels for a provided image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageDither", + "description": "Dither image data to 16bpp or lower (Floyd-Steinberg dithering)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "rBpp" + }, + { + "type": "int", + "name": "gBpp" + }, + { + "type": "int", + "name": "bBpp" + }, + { + "type": "int", + "name": "aBpp" + } + ] + }, + { + "name": "ImageFlipVertical", + "description": "Flip image vertically", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageFlipHorizontal", + "description": "Flip image horizontally", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageRotate", + "description": "Rotate image by input angle in degrees (-359 to 359)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "degrees" + } + ] + }, + { + "name": "ImageRotateCW", + "description": "Rotate image clockwise 90deg", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageRotateCCW", + "description": "Rotate image counter-clockwise 90deg", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorTint", + "description": "Modify image color: tint", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageColorInvert", + "description": "Modify image color: invert", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorGrayscale", + "description": "Modify image color: grayscale", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorContrast", + "description": "Modify image color: contrast (-100 to 100)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "float", + "name": "contrast" + } + ] + }, + { + "name": "ImageColorBrightness", + "description": "Modify image color: brightness (-255 to 255)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "brightness" + } + ] + }, + { + "name": "ImageColorReplace", + "description": "Modify image color: replace color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "Color", + "name": "replace" + } + ] + }, + { + "name": "LoadImageColors", + "description": "Load color data from image as a Color array (RGBA - 32bit)", + "returnType": "Color *", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "LoadImagePalette", + "description": "Load colors palette from image as a Color array (RGBA - 32bit)", + "returnType": "Color *", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "maxPaletteSize" + }, + { + "type": "int *", + "name": "colorCount" + } + ] + }, + { + "name": "UnloadImageColors", + "description": "Unload color data loaded with LoadImageColors()", + "returnType": "void", + "params": [ + { + "type": "Color *", + "name": "colors" + } + ] + }, + { + "name": "UnloadImagePalette", + "description": "Unload colors palette loaded with LoadImagePalette()", + "returnType": "void", + "params": [ + { + "type": "Color *", + "name": "colors" + } + ] + }, + { + "name": "GetImageAlphaBorder", + "description": "Get image alpha border rectangle", + "returnType": "Rectangle", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "GetImageColor", + "description": "Get image pixel color at (x, y) position", + "returnType": "Color", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "ImageClearBackground", + "description": "Clear image background with given color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawPixel", + "description": "Draw pixel within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawPixelV", + "description": "Draw pixel within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawLine", + "description": "Draw line within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "startPosX" + }, + { + "type": "int", + "name": "startPosY" + }, + { + "type": "int", + "name": "endPosX" + }, + { + "type": "int", + "name": "endPosY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawLineV", + "description": "Draw line within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "start" + }, + { + "type": "Vector2", + "name": "end" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawLineEx", + "description": "Draw a line defining thickness within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "start" + }, + { + "type": "Vector2", + "name": "end" + }, + { + "type": "int", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircle", + "description": "Draw a filled circle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleV", + "description": "Draw a filled circle within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleLines", + "description": "Draw circle outline within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleLinesV", + "description": "Draw circle outline within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangle", + "description": "Draw rectangle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleV", + "description": "Draw rectangle within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleRec", + "description": "Draw rectangle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleLines", + "description": "Draw rectangle lines within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "int", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTriangle", + "description": "Draw triangle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTriangleEx", + "description": "Draw triangle with interpolated colors within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "c1" + }, + { + "type": "Color", + "name": "c2" + }, + { + "type": "Color", + "name": "c3" + } + ] + }, + { + "name": "ImageDrawTriangleLines", + "description": "Draw triangle outline within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTriangleFan", + "description": "Draw a triangle fan defined by points within an image (first vertex is the center)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTriangleStrip", + "description": "Draw a triangle strip defined by points within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "const Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDraw", + "description": "Draw a source image within a destination image (tint applied to source)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Image", + "name": "src" + }, + { + "type": "Rectangle", + "name": "srcRec" + }, + { + "type": "Rectangle", + "name": "dstRec" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ImageDrawText", + "description": "Draw text (using default font) within an image (destination)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTextEx", + "description": "Draw text (custom sprite font) within an image (destination)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "LoadTexture", + "description": "Load texture from file into GPU memory (VRAM)", + "returnType": "Texture2D", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadTextureFromImage", + "description": "Load texture from image data", + "returnType": "Texture2D", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "LoadTextureCubemap", + "description": "Load cubemap from image, multiple image cubemap layouts supported", + "returnType": "TextureCubemap", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "layout" + } + ] + }, + { + "name": "LoadRenderTexture", + "description": "Load texture for rendering (framebuffer)", + "returnType": "RenderTexture2D", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "IsTextureValid", + "description": "Check if a texture is valid (loaded in GPU)", + "returnType": "bool", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "UnloadTexture", + "description": "Unload texture from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "IsRenderTextureValid", + "description": "Check if a render texture is valid (loaded in GPU)", + "returnType": "bool", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "UnloadRenderTexture", + "description": "Unload render texture from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "UpdateTexture", + "description": "Update GPU texture with new data (pixels should be able to fill texture)", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "const void *", + "name": "pixels" + } + ] + }, + { + "name": "UpdateTextureRec", + "description": "Update GPU texture rectangle with new data (pixels and rec should fit in texture)", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "const void *", + "name": "pixels" + } + ] + }, + { + "name": "GenTextureMipmaps", + "description": "Generate GPU mipmaps for a texture", + "returnType": "void", + "params": [ + { + "type": "Texture2D *", + "name": "texture" + } + ] + }, + { + "name": "SetTextureFilter", + "description": "Set texture scaling filter mode", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "filter" + } + ] + }, + { + "name": "SetTextureWrap", + "description": "Set texture wrapping mode", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "wrap" + } + ] + }, + { + "name": "DrawTexture", + "description": "Draw a Texture2D", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureV", + "description": "Draw a Texture2D with position defined as Vector2", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureEx", + "description": "Draw a Texture2D with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureRec", + "description": "Draw a part of a texture defined by a rectangle", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTexturePro", + "description": "Draw a part of a texture defined by a rectangle with 'pro' parameters", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Rectangle", + "name": "dest" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureNPatch", + "description": "Draws a texture (or part of it) that stretches or shrinks nicely", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "NPatchInfo", + "name": "nPatchInfo" + }, + { + "type": "Rectangle", + "name": "dest" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ColorIsEqual", + "description": "Check if two colors are equal", + "returnType": "bool", + "params": [ + { + "type": "Color", + "name": "col1" + }, + { + "type": "Color", + "name": "col2" + } + ] + }, + { + "name": "Fade", + "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "ColorToInt", + "description": "Get hexadecimal value for a Color (0xRRGGBBAA)", + "returnType": "int", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorNormalize", + "description": "Get Color normalized as float [0..1]", + "returnType": "Vector4", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorFromNormalized", + "description": "Get Color from normalized values [0..1]", + "returnType": "Color", + "params": [ + { + "type": "Vector4", + "name": "normalized" + } + ] + }, + { + "name": "ColorToHSV", + "description": "Get HSV values for a Color, hue [0..360], saturation/value [0..1]", + "returnType": "Vector3", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorFromHSV", + "description": "Get a Color from HSV values, hue [0..360], saturation/value [0..1]", + "returnType": "Color", + "params": [ + { + "type": "float", + "name": "hue" + }, + { + "type": "float", + "name": "saturation" + }, + { + "type": "float", + "name": "value" + } + ] + }, + { + "name": "ColorTint", + "description": "Get color multiplied with another color", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ColorBrightness", + "description": "Get color with brightness correction, brightness factor goes from -1.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "factor" + } + ] + }, + { + "name": "ColorContrast", + "description": "Get color with contrast correction, contrast values between -1.0f and 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "contrast" + } + ] + }, + { + "name": "ColorAlpha", + "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "ColorAlphaBlend", + "description": "Get src alpha-blended into dst color with tint", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "dst" + }, + { + "type": "Color", + "name": "src" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ColorLerp", + "description": "Get color lerp interpolation between two colors, factor [0.0f..1.0f]", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color1" + }, + { + "type": "Color", + "name": "color2" + }, + { + "type": "float", + "name": "factor" + } + ] + }, + { + "name": "GetColor", + "description": "Get Color structure from hexadecimal value", + "returnType": "Color", + "params": [ + { + "type": "unsigned int", + "name": "hexValue" + } + ] + }, + { + "name": "GetPixelColor", + "description": "Get Color from a source pixel pointer of certain format", + "returnType": "Color", + "params": [ + { + "type": "void *", + "name": "srcPtr" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "SetPixelColor", + "description": "Set color formatted into destination pixel pointer", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "dstPtr" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "GetPixelDataSize", + "description": "Get pixel data size in bytes for certain format", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "GetFontDefault", + "description": "Get the default Font", + "returnType": "Font" + }, + { + "name": "LoadFont", + "description": "Load font from file into GPU memory (VRAM)", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadFontEx", + "description": "Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "codepointCount" + } + ] + }, + { + "name": "LoadFontFromImage", + "description": "Load font from Image (XNA style)", + "returnType": "Font", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "Color", + "name": "key" + }, + { + "type": "int", + "name": "firstChar" + } + ] + }, + { + "name": "LoadFontFromMemory", + "description": "Load font from memory buffer, fileType refers to extension: i.e. '.ttf'", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "codepointCount" + } + ] + }, + { + "name": "IsFontValid", + "description": "Check if a font is valid (font data loaded, WARNING: GPU texture not checked)", + "returnType": "bool", + "params": [ + { + "type": "Font", + "name": "font" + } + ] + }, + { + "name": "LoadFontData", + "description": "Load font data for further use", + "returnType": "GlyphInfo *", + "params": [ + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "codepointCount" + }, + { + "type": "int", + "name": "type" + }, + { + "type": "int *", + "name": "glyphCount" + } + ] + }, + { + "name": "GenImageFontAtlas", + "description": "Generate image font atlas using chars info", + "returnType": "Image", + "params": [ + { + "type": "const GlyphInfo *", + "name": "glyphs" + }, + { + "type": "Rectangle **", + "name": "glyphRecs" + }, + { + "type": "int", + "name": "glyphCount" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "int", + "name": "padding" + }, + { + "type": "int", + "name": "packMethod" + } + ] + }, + { + "name": "UnloadFontData", + "description": "Unload font chars info data (RAM)", + "returnType": "void", + "params": [ + { + "type": "GlyphInfo *", + "name": "glyphs" + }, + { + "type": "int", + "name": "glyphCount" + } + ] + }, + { + "name": "UnloadFont", + "description": "Unload font from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + } + ] + }, + { + "name": "ExportFontAsCode", + "description": "Export font as code file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "DrawFPS", + "description": "Draw current FPS", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + } + ] + }, + { + "name": "DrawText", + "description": "Draw text (using default font)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTextEx", + "description": "Draw text using font and additional parameters", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextPro", + "description": "Draw text using Font and pro parameters (rotation)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextCodepoint", + "description": "Draw one character (codepoint)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextCodepoints", + "description": "Draw multiple character (codepoint)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "codepointCount" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "SetTextLineSpacing", + "description": "Set vertical line spacing when drawing with line-breaks", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "spacing" + } + ] + }, + { + "name": "MeasureText", + "description": "Measure string width for default font", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "fontSize" + } + ] + }, + { + "name": "MeasureTextEx", + "description": "Measure string size for Font", + "returnType": "Vector2", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + } + ] + }, + { + "name": "GetGlyphIndex", + "description": "Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "int", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "GetGlyphInfo", + "description": "Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "GlyphInfo", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "GetGlyphAtlasRec", + "description": "Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "Rectangle", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "LoadUTF8", + "description": "Load UTF-8 text encoded from codepoints array", + "returnType": "char *", + "params": [ + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "length" + } + ] + }, + { + "name": "UnloadUTF8", + "description": "Unload UTF-8 text encoded from codepoints array", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "LoadCodepoints", + "description": "Load all codepoints from a UTF-8 text string, codepoints count returned by parameter", + "returnType": "int *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "count" + } + ] + }, + { + "name": "UnloadCodepoints", + "description": "Unload codepoints data from memory", + "returnType": "void", + "params": [ + { + "type": "int *", + "name": "codepoints" + } + ] + }, + { + "name": "GetCodepointCount", + "description": "Get total number of codepoints in a UTF-8 encoded string", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GetCodepoint", + "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "GetCodepointNext", + "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "GetCodepointPrevious", + "description": "Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "CodepointToUTF8", + "description": "Encode one codepoint into UTF-8 byte array (array length returned as parameter)", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "codepoint" + }, + { + "type": "int *", + "name": "utf8Size" + } + ] + }, + { + "name": "LoadTextLines", + "description": "Load text as separate lines ('\\n')", + "returnType": "char **", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "count" + } + ] + }, + { + "name": "UnloadTextLines", + "description": "Unload text lines", + "returnType": "void", + "params": [ + { + "type": "char **", + "name": "text" + }, + { + "type": "int", + "name": "lineCount" + } + ] + }, + { + "name": "TextCopy", + "description": "Copy one string to another, returns bytes copied", + "returnType": "int", + "params": [ + { + "type": "char *", + "name": "dst" + }, + { + "type": "const char *", + "name": "src" + } + ] + }, + { + "name": "TextIsEqual", + "description": "Check if two text string are equal", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "text1" + }, + { + "type": "const char *", + "name": "text2" + } + ] + }, + { + "name": "TextLength", + "description": "Get text length, checks for '\\0' ending", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextFormat", + "description": "Text formatting with variables (sprintf() style)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "...", + "name": "args" + } + ] + }, + { + "name": "TextSubtext", + "description": "Get a piece of a text string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "position" + }, + { + "type": "int", + "name": "length" + } + ] + }, + { + "name": "TextRemoveSpaces", + "description": "Remove text spaces, concat words", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GetTextBetween", + "description": "Get text between two strings", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "begin" + }, + { + "type": "const char *", + "name": "end" + } + ] + }, + { + "name": "TextReplace", + "description": "Replace text string (WARNING: memory must be freed!)", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "search" + }, + { + "type": "const char *", + "name": "replacement" + } + ] + }, + { + "name": "TextReplaceBetween", + "description": "Replace text between two specific strings (WARNING: memory must be freed!)", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "begin" + }, + { + "type": "const char *", + "name": "end" + }, + { + "type": "const char *", + "name": "replacement" + } + ] + }, + { + "name": "TextInsert", + "description": "Insert text in a position (WARNING: memory must be freed!)", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "insert" + }, + { + "type": "int", + "name": "position" + } + ] + }, + { + "name": "TextJoin", + "description": "Join text strings with delimiter", + "returnType": "char *", + "params": [ + { + "type": "char **", + "name": "textList" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "const char *", + "name": "delimiter" + } + ] + }, + { + "name": "TextSplit", + "description": "Split text into multiple strings, using MAX_TEXTSPLIT_COUNT static strings", + "returnType": "char **", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "char", + "name": "delimiter" + }, + { + "type": "int *", + "name": "count" + } + ] + }, + { + "name": "TextAppend", + "description": "Append text at specific position and move cursor", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + }, + { + "type": "const char *", + "name": "append" + }, + { + "type": "int *", + "name": "position" + } + ] + }, + { + "name": "TextFindIndex", + "description": "Find first text occurrence within a string, -1 if not found", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "search" + } + ] + }, + { + "name": "TextToUpper", + "description": "Get upper case version of provided string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToLower", + "description": "Get lower case version of provided string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToPascal", + "description": "Get Pascal case notation version of provided string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToSnake", + "description": "Get Snake case notation version of provided string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToCamel", + "description": "Get Camel case notation version of provided string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToInteger", + "description": "Get integer value from text", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToFloat", + "description": "Get float value from text", + "returnType": "float", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "DrawLine3D", + "description": "Draw a line in 3D world space", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPoint3D", + "description": "Draw a point in 3D space, actually a small line", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircle3D", + "description": "Draw a circle in 3D world space", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangle3D", + "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + }, + { + "type": "Vector3", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleStrip3D", + "description": "Draw a triangle strip defined by points", + "returnType": "void", + "params": [ + { + "type": "const Vector3 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCube", + "description": "Draw cube", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeV", + "description": "Draw cube (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeWires", + "description": "Draw cube wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeWiresV", + "description": "Draw cube wires (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphere", + "description": "Draw sphere", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphereEx", + "description": "Draw sphere with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphereWires", + "description": "Draw sphere wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinder", + "description": "Draw a cylinder/cone", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "radiusTop" + }, + { + "type": "float", + "name": "radiusBottom" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderEx", + "description": "Draw a cylinder with base at startPos and top at endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "startRadius" + }, + { + "type": "float", + "name": "endRadius" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderWires", + "description": "Draw a cylinder/cone wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "radiusTop" + }, + { + "type": "float", + "name": "radiusBottom" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderWiresEx", + "description": "Draw a cylinder wires with base at startPos and top at endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "startRadius" + }, + { + "type": "float", + "name": "endRadius" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCapsule", + "description": "Draw a capsule with the center of its sphere caps at startPos and endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCapsuleWires", + "description": "Draw capsule wireframe with the center of its sphere caps at startPos and endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPlane", + "description": "Draw a plane XZ", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRay", + "description": "Draw a ray line", + "returnType": "void", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawGrid", + "description": "Draw a grid (centered at (0, 0, 0))", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "slices" + }, + { + "type": "float", + "name": "spacing" + } + ] + }, + { + "name": "LoadModel", + "description": "Load model from files (meshes and materials)", + "returnType": "Model", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadModelFromMesh", + "description": "Load model from generated mesh (default material)", + "returnType": "Model", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "IsModelValid", + "description": "Check if a model is valid (loaded in GPU, VAO/VBOs)", + "returnType": "bool", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "UnloadModel", + "description": "Unload model (including meshes) from memory (RAM and/or VRAM)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "GetModelBoundingBox", + "description": "Compute model bounding box limits (considers all meshes)", + "returnType": "BoundingBox", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "DrawModel", + "description": "Draw a model (with texture if set)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelEx", + "description": "Draw a model with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Vector3", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelWires", + "description": "Draw a model wires (with texture if set)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelWiresEx", + "description": "Draw a model wires (with texture if set) with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Vector3", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelPoints", + "description": "Draw a model as points", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelPointsEx", + "description": "Draw a model as points with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Vector3", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBoundingBox", + "description": "Draw bounding box (wires)", + "returnType": "void", + "params": [ + { + "type": "BoundingBox", + "name": "box" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawBillboard", + "description": "Draw a billboard texture", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBillboardRec", + "description": "Draw a billboard texture defined by source", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBillboardPro", + "description": "Draw a billboard texture defined by source and rotation", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "up" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "UploadMesh", + "description": "Upload mesh vertex data in GPU and provide VAO/VBO ids", + "returnType": "void", + "params": [ + { + "type": "Mesh *", + "name": "mesh" + }, + { + "type": "bool", + "name": "dynamic" + } + ] + }, + { + "name": "UpdateMeshBuffer", + "description": "Update mesh vertex data in GPU for a specific buffer index", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "int", + "name": "index" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "offset" + } + ] + }, + { + "name": "UnloadMesh", + "description": "Unload mesh data from CPU and GPU", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "DrawMesh", + "description": "Draw a 3d mesh with material and transform", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Material", + "name": "material" + }, + { + "type": "Matrix", + "name": "transform" + } + ] + }, + { + "name": "DrawMeshInstanced", + "description": "Draw multiple mesh instances with material and different transforms", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Material", + "name": "material" + }, + { + "type": "const Matrix *", + "name": "transforms" + }, + { + "type": "int", + "name": "instances" + } + ] + }, + { + "name": "GetMeshBoundingBox", + "description": "Compute mesh bounding box limits", + "returnType": "BoundingBox", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "GenMeshTangents", + "description": "Compute mesh tangents", + "returnType": "void", + "params": [ + { + "type": "Mesh *", + "name": "mesh" + } + ] + }, + { + "name": "ExportMesh", + "description": "Export mesh data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "ExportMeshAsCode", + "description": "Export mesh as code file (.h) defining multiple arrays of vertex attributes", + "returnType": "bool", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GenMeshPoly", + "description": "Generate polygonal mesh", + "returnType": "Mesh", + "params": [ + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GenMeshPlane", + "description": "Generate plane mesh (with subdivisions)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "int", + "name": "resX" + }, + { + "type": "int", + "name": "resZ" + } + ] + }, + { + "name": "GenMeshCube", + "description": "Generate cuboid mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + } + ] + }, + { + "name": "GenMeshSphere", + "description": "Generate sphere mesh (standard sphere)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshHemiSphere", + "description": "Generate half-sphere mesh (no bottom cap)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshCylinder", + "description": "Generate cylinder mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshCone", + "description": "Generate cone/pyramid mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshTorus", + "description": "Generate torus mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "size" + }, + { + "type": "int", + "name": "radSeg" + }, + { + "type": "int", + "name": "sides" + } + ] + }, + { + "name": "GenMeshKnot", + "description": "Generate trefoil knot mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "size" + }, + { + "type": "int", + "name": "radSeg" + }, + { + "type": "int", + "name": "sides" + } + ] + }, + { + "name": "GenMeshHeightmap", + "description": "Generate heightmap mesh from image data", + "returnType": "Mesh", + "params": [ + { + "type": "Image", + "name": "heightmap" + }, + { + "type": "Vector3", + "name": "size" + } + ] + }, + { + "name": "GenMeshCubicmap", + "description": "Generate cubes-based map mesh from image data", + "returnType": "Mesh", + "params": [ + { + "type": "Image", + "name": "cubicmap" + }, + { + "type": "Vector3", + "name": "cubeSize" + } + ] + }, + { + "name": "LoadMaterials", + "description": "Load materials from model file", + "returnType": "Material *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "materialCount" + } + ] + }, + { + "name": "LoadMaterialDefault", + "description": "Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)", + "returnType": "Material" + }, + { + "name": "IsMaterialValid", + "description": "Check if a material is valid (shader assigned, map textures loaded in GPU)", + "returnType": "bool", + "params": [ + { + "type": "Material", + "name": "material" + } + ] + }, + { + "name": "UnloadMaterial", + "description": "Unload material from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Material", + "name": "material" + } + ] + }, + { + "name": "SetMaterialTexture", + "description": "Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)", + "returnType": "void", + "params": [ + { + "type": "Material *", + "name": "material" + }, + { + "type": "int", + "name": "mapType" + }, + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "SetModelMeshMaterial", + "description": "Set material for a mesh", + "returnType": "void", + "params": [ + { + "type": "Model *", + "name": "model" + }, + { + "type": "int", + "name": "meshId" + }, + { + "type": "int", + "name": "materialId" + } + ] + }, + { + "name": "LoadModelAnimations", + "description": "Load model animations from file", + "returnType": "ModelAnimation *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "animCount" + } + ] + }, + { + "name": "UpdateModelAnimation", + "description": "Update model animation pose (CPU)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "ModelAnimation", + "name": "anim" + }, + { + "type": "int", + "name": "frame" + } + ] + }, + { + "name": "UpdateModelAnimationBones", + "description": "Update model animation mesh bone matrices (GPU skinning)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "ModelAnimation", + "name": "anim" + }, + { + "type": "int", + "name": "frame" + } + ] + }, + { + "name": "UnloadModelAnimation", + "description": "Unload animation data", + "returnType": "void", + "params": [ + { + "type": "ModelAnimation", + "name": "anim" + } + ] + }, + { + "name": "UnloadModelAnimations", + "description": "Unload animation array data", + "returnType": "void", + "params": [ + { + "type": "ModelAnimation *", + "name": "animations" + }, + { + "type": "int", + "name": "animCount" + } + ] + }, + { + "name": "IsModelAnimationValid", + "description": "Check model animation skeleton match", + "returnType": "bool", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "ModelAnimation", + "name": "anim" + } + ] + }, + { + "name": "CheckCollisionSpheres", + "description": "Check collision between two spheres", + "returnType": "bool", + "params": [ + { + "type": "Vector3", + "name": "center1" + }, + { + "type": "float", + "name": "radius1" + }, + { + "type": "Vector3", + "name": "center2" + }, + { + "type": "float", + "name": "radius2" + } + ] + }, + { + "name": "CheckCollisionBoxes", + "description": "Check collision between two bounding boxes", + "returnType": "bool", + "params": [ + { + "type": "BoundingBox", + "name": "box1" + }, + { + "type": "BoundingBox", + "name": "box2" + } + ] + }, + { + "name": "CheckCollisionBoxSphere", + "description": "Check collision between box and sphere", + "returnType": "bool", + "params": [ + { + "type": "BoundingBox", + "name": "box" + }, + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GetRayCollisionSphere", + "description": "Get collision info between ray and sphere", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GetRayCollisionBox", + "description": "Get collision info between ray and box", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "BoundingBox", + "name": "box" + } + ] + }, + { + "name": "GetRayCollisionMesh", + "description": "Get collision info between ray and mesh", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Matrix", + "name": "transform" + } + ] + }, + { + "name": "GetRayCollisionTriangle", + "description": "Get collision info between ray and triangle", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "p1" + }, + { + "type": "Vector3", + "name": "p2" + }, + { + "type": "Vector3", + "name": "p3" + } + ] + }, + { + "name": "GetRayCollisionQuad", + "description": "Get collision info between ray and quad", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "p1" + }, + { + "type": "Vector3", + "name": "p2" + }, + { + "type": "Vector3", + "name": "p3" + }, + { + "type": "Vector3", + "name": "p4" + } + ] + }, + { + "name": "InitAudioDevice", + "description": "Initialize audio device and context", + "returnType": "void" + }, + { + "name": "CloseAudioDevice", + "description": "Close the audio device and context", + "returnType": "void" + }, + { + "name": "IsAudioDeviceReady", + "description": "Check if audio device has been initialized successfully", + "returnType": "bool" + }, + { + "name": "SetMasterVolume", + "description": "Set master volume (listener)", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "GetMasterVolume", + "description": "Get master volume (listener)", + "returnType": "float" + }, + { + "name": "LoadWave", + "description": "Load wave data from file", + "returnType": "Wave", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadWaveFromMemory", + "description": "Load wave from memory buffer, fileType refers to extension: i.e. '.wav'", + "returnType": "Wave", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "IsWaveValid", + "description": "Checks if wave data is valid (data loaded and parameters)", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "LoadSound", + "description": "Load sound from file", + "returnType": "Sound", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadSoundFromWave", + "description": "Load sound from wave data", + "returnType": "Sound", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "LoadSoundAlias", + "description": "Create a new sound that shares the same sample data as the source sound, does not own the sound data", + "returnType": "Sound", + "params": [ + { + "type": "Sound", + "name": "source" + } + ] + }, + { + "name": "IsSoundValid", + "description": "Checks if a sound is valid (data loaded and buffers initialized)", + "returnType": "bool", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "UpdateSound", + "description": "Update sound buffer with new data (default data format: 32 bit float, stereo)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "sampleCount" + } + ] + }, + { + "name": "UnloadWave", + "description": "Unload wave data", + "returnType": "void", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "UnloadSound", + "description": "Unload sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "UnloadSoundAlias", + "description": "Unload a sound alias (does not deallocate sample data)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "alias" + } + ] + }, + { + "name": "ExportWave", + "description": "Export wave data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "ExportWaveAsCode", + "description": "Export wave sample data to code (.h), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "PlaySound", + "description": "Play a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "StopSound", + "description": "Stop playing a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "PauseSound", + "description": "Pause a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "ResumeSound", + "description": "Resume a paused sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "IsSoundPlaying", + "description": "Check if a sound is currently playing", + "returnType": "bool", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "SetSoundVolume", + "description": "Set volume for a sound (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetSoundPitch", + "description": "Set pitch for a sound (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetSoundPan", + "description": "Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "WaveCopy", + "description": "Copy a wave to a new wave", + "returnType": "Wave", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "WaveCrop", + "description": "Crop a wave to defined frames range", + "returnType": "void", + "params": [ + { + "type": "Wave *", + "name": "wave" + }, + { + "type": "int", + "name": "initFrame" + }, + { + "type": "int", + "name": "finalFrame" + } + ] + }, + { + "name": "WaveFormat", + "description": "Convert wave data to desired format", + "returnType": "void", + "params": [ + { + "type": "Wave *", + "name": "wave" + }, + { + "type": "int", + "name": "sampleRate" + }, + { + "type": "int", + "name": "sampleSize" + }, + { + "type": "int", + "name": "channels" + } + ] + }, + { + "name": "LoadWaveSamples", + "description": "Load samples data from wave as a 32bit float data array", + "returnType": "float *", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "UnloadWaveSamples", + "description": "Unload samples data loaded with LoadWaveSamples()", + "returnType": "void", + "params": [ + { + "type": "float *", + "name": "samples" + } + ] + }, + { + "name": "LoadMusicStream", + "description": "Load music stream from file", + "returnType": "Music", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadMusicStreamFromMemory", + "description": "Load music stream from data", + "returnType": "Music", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "IsMusicValid", + "description": "Checks if a music stream is valid (context and buffers initialized)", + "returnType": "bool", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "UnloadMusicStream", + "description": "Unload music stream", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "PlayMusicStream", + "description": "Start music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "IsMusicStreamPlaying", + "description": "Check if music is playing", + "returnType": "bool", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "UpdateMusicStream", + "description": "Updates buffers for music streaming", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "StopMusicStream", + "description": "Stop music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "PauseMusicStream", + "description": "Pause music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "ResumeMusicStream", + "description": "Resume playing paused music", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "SeekMusicStream", + "description": "Seek music to a position (in seconds)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "position" + } + ] + }, + { + "name": "SetMusicVolume", + "description": "Set volume for music (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetMusicPitch", + "description": "Set pitch for a music (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetMusicPan", + "description": "Set pan for a music (-1.0 left, 0.0 center, 1.0 right)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "GetMusicTimeLength", + "description": "Get music time length (in seconds)", + "returnType": "float", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "GetMusicTimePlayed", + "description": "Get current music time played (in seconds)", + "returnType": "float", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "LoadAudioStream", + "description": "Load audio stream (to stream raw audio pcm data)", + "returnType": "AudioStream", + "params": [ + { + "type": "unsigned int", + "name": "sampleRate" + }, + { + "type": "unsigned int", + "name": "sampleSize" + }, + { + "type": "unsigned int", + "name": "channels" + } + ] + }, + { + "name": "IsAudioStreamValid", + "description": "Checks if an audio stream is valid (buffers initialized)", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "UnloadAudioStream", + "description": "Unload audio stream and free memory", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "UpdateAudioStream", + "description": "Update audio stream buffers with data", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "frameCount" + } + ] + }, + { + "name": "IsAudioStreamProcessed", + "description": "Check if any audio stream buffers requires refill", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "PlayAudioStream", + "description": "Play audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "PauseAudioStream", + "description": "Pause audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "ResumeAudioStream", + "description": "Resume audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "IsAudioStreamPlaying", + "description": "Check if audio stream is playing", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "StopAudioStream", + "description": "Stop audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "SetAudioStreamVolume", + "description": "Set volume for audio stream (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetAudioStreamPitch", + "description": "Set pitch for audio stream (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetAudioStreamPan", + "description": "Set pan for audio stream (0.5 is centered)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "SetAudioStreamBufferSizeDefault", + "description": "Default size for new audio streams", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "size" + } + ] + }, + { + "name": "SetAudioStreamCallback", + "description": "Audio thread callback to request new data", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "callback" + } + ] + }, + { + "name": "AttachAudioStreamProcessor", + "description": "Attach audio stream processor to stream, receives frames x 2 samples as 'float' (stereo)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "DetachAudioStreamProcessor", + "description": "Detach audio stream processor from stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "AttachAudioMixedProcessor", + "description": "Attach audio stream processor to the entire audio pipeline, receives frames x 2 samples as 'float' (stereo)", + "returnType": "void", + "params": [ + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "DetachAudioMixedProcessor", + "description": "Detach audio stream processor from the entire audio pipeline", + "returnType": "void", + "params": [ + { + "type": "AudioCallback", + "name": "processor" + } + ] + } + ] +} diff --git a/wasm-runtime/api/stringyvalue.go b/wasm-runtime/api/stringyvalue.go new file mode 100644 index 0000000..4176fec --- /dev/null +++ b/wasm-runtime/api/stringyvalue.go @@ -0,0 +1,28 @@ +package api + +import "encoding/json" + +type StringyValue string + +// convert the json type to a string. +func (s *StringyValue) UnmarshalJSON(b []byte) error { + // null + if string(b) == "null" { + *s = "" + return nil + } + + // quoted string + if len(b) > 0 && b[0] == '"' { + var v string + if err := json.Unmarshal(b, &v); err != nil { + return err + } + *s = StringyValue(v) + return nil + } + + // number / bare token → keep textual form + *s = StringyValue(b) + return nil +} diff --git a/wasm-runtime/go.mod b/wasm-runtime/go.mod new file mode 100644 index 0000000..9e29a39 --- /dev/null +++ b/wasm-runtime/go.mod @@ -0,0 +1,3 @@ +module github.com/BrownNPC/Raylib-Go-Wasm/wasm-runtime + +go 1.26.1 diff --git a/wasm-runtime/rl/.gitkeep b/wasm-runtime/rl/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/wasm-runtime/rl/aliases_gen_formatted.go b/wasm-runtime/rl/aliases_gen_formatted.go new file mode 100644 index 0000000..85f4693 --- /dev/null +++ b/wasm-runtime/rl/aliases_gen_formatted.go @@ -0,0 +1,20 @@ +// AUTOGENERATED FILE. DO NOT EDIT + +//go:build js + +package rl + +// Quaternion, 4 components (Vector4 alias) +type Quaternion = Vector4 + +// Texture2D, same as Texture +type Texture2D = Texture + +// TextureCubemap, same as Texture +type TextureCubemap = Texture + +// RenderTexture2D, same as RenderTexture +type RenderTexture2D = RenderTexture + +// Camera type fallback, defaults to Camera3D +type Camera = Camera3D diff --git a/wasm-runtime/rl/defines_gen_formatted.go b/wasm-runtime/rl/defines_gen_formatted.go new file mode 100644 index 0000000..5005057 --- /dev/null +++ b/wasm-runtime/rl/defines_gen_formatted.go @@ -0,0 +1,121 @@ +// AUTOGENERATED FILE. DO NOT EDIT + +//go:build js + +package rl + +const RaylibVersionMajor = 5 + +const RaylibVersionMinor = 6 + +const RaylibVersionPatch = 0 + +const RaylibVersion = "5.6-dev" + +const Pi = 3.14159265358979323846 + +const Deg2Rad = (Pi / 180.0) + +const Rad2Deg = (180.0 / Pi) + +//Light Gray +var Lightgray = Color{200, 200, 200, 255} + +//Gray +var Gray = Color{130, 130, 130, 255} + +//Dark Gray +var Darkgray = Color{80, 80, 80, 255} + +//Yellow +var Yellow = Color{253, 249, 0, 255} + +//Gold +var Gold = Color{255, 203, 0, 255} + +//Orange +var Orange = Color{255, 161, 0, 255} + +//Pink +var Pink = Color{255, 109, 194, 255} + +//Red +var Red = Color{230, 41, 55, 255} + +//Maroon +var Maroon = Color{190, 33, 55, 255} + +//Green +var Green = Color{0, 228, 48, 255} + +//Lime +var Lime = Color{0, 158, 47, 255} + +//Dark Green +var DarkGreen = Color{0, 117, 44, 255} + +//Sky Blue +var Skyblue = Color{102, 191, 255, 255} + +//Blue +var Blue = Color{0, 121, 241, 255} + +//Dark Blue +var Darkblue = Color{0, 82, 172, 255} + +//Purple +var Purple = Color{200, 122, 255, 255} + +//Violet +var Violet = Color{135, 60, 190, 255} + +//Dark Purple +var Darkpurple = Color{112, 31, 126, 255} + +//Beige +var Beige = Color{211, 176, 131, 255} + +//Brown +var Brown = Color{127, 106, 79, 255} + +//Dark Brown +var Darkbrown = Color{76, 63, 47, 255} + +//White +var White = Color{255, 255, 255, 255} + +//Black +var Black = Color{0, 0, 0, 255} + +//Blank (Transparent) +var Blank = Color{0, 0, 0, 0} + +//Magenta +var Magenta = Color{255, 0, 255, 255} + +//My own White (raylib logo) +var Raywhite = Color{245, 245, 245, 255} + +// +const MouseLeftButton = MouseButtonLeft + +// +const MouseRightButton = MouseButtonRight + +// +const MouseMiddleButton = MouseButtonMiddle + +// +const MaterialMapDiffuse = MaterialMapAlbedo + +// +const MaterialMapSpecular = MaterialMapMetalness + +// +const ShaderLocMapDiffuse = ShaderLocMapAlbedo + +// +const ShaderLocMapSpecular = ShaderLocMapMetalness + +//Compatibility hack for previous raylib versions +var GetMouseRay = GetScreenToWorldRay diff --git a/wasm-runtime/rl/enums_gen_formatted.go b/wasm-runtime/rl/enums_gen_formatted.go new file mode 100644 index 0000000..303b8d2 --- /dev/null +++ b/wasm-runtime/rl/enums_gen_formatted.go @@ -0,0 +1,741 @@ +// AUTOGENERATED FILE. DO NOT EDIT + +//go:build js + +package rl + +// System/Window config flags +type ConfigFlags = int32 + +const ( + // Set to try enabling V-Sync on GPU + FlagVsyncHint = 64 + // Set to run program in fullscreen + FlagFullscreenMode = 2 + // Set to allow resizable window + FlagWindowResizable = 4 + // Set to disable window decoration (frame and buttons) + FlagWindowUndecorated = 8 + // Set to hide window + FlagWindowHidden = 128 + // Set to minimize window (iconify) + FlagWindowMinimized = 512 + // Set to maximize window (expanded to monitor) + FlagWindowMaximized = 1024 + // Set to window non focused + FlagWindowUnfocused = 2048 + // Set to window always on top + FlagWindowTopmost = 4096 + // Set to allow windows running while minimized + FlagWindowAlwaysRun = 256 + // Set to allow transparent framebuffer + FlagWindowTransparent = 16 + // Set to support HighDPI + FlagWindowHighdpi = 8192 + // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED + FlagWindowMousePassthrough = 16384 + // Set to run program in borderless windowed mode + FlagBorderlessWindowedMode = 32768 + // Set to try enabling MSAA 4X + FlagMsaa4XHint = 32 + // Set to try enabling interlaced video format (for V3D) + FlagInterlacedHint = 65536 +) + +// Trace log level +type TraceLogLevel = int32 + +const ( + // Display all logs + LogAll = 0 + // Trace logging, intended for internal use only + LogTrace = 1 + // Debug logging, used for internal debugging, it should be disabled on release builds + LogDebug = 2 + // Info logging, used for program execution info + LogInfo = 3 + // Warning logging, used on recoverable failures + LogWarning = 4 + // Error logging, used on unrecoverable failures + LogError = 5 + // Fatal logging, used to abort program: exit(EXIT_FAILURE) + LogFatal = 6 + // Disable logging + LogNone = 7 +) + +// Keyboard keys (US keyboard layout) +type KeyboardKey = int32 + +const ( + // Key: NULL, used for no key pressed + KeyNull = 0 + // Key: ' + KeyApostrophe = 39 + // Key: , + KeyComma = 44 + // Key: - + KeyMinus = 45 + // Key: . + KeyPeriod = 46 + // Key: / + KeySlash = 47 + // Key: 0 + KeyZero = 48 + // Key: 1 + KeyOne = 49 + // Key: 2 + KeyTwo = 50 + // Key: 3 + KeyThree = 51 + // Key: 4 + KeyFour = 52 + // Key: 5 + KeyFive = 53 + // Key: 6 + KeySix = 54 + // Key: 7 + KeySeven = 55 + // Key: 8 + KeyEight = 56 + // Key: 9 + KeyNine = 57 + // Key: ; + KeySemicolon = 59 + // Key: = + KeyEqual = 61 + // Key: A | a + KeyA = 65 + // Key: B | b + KeyB = 66 + // Key: C | c + KeyC = 67 + // Key: D | d + KeyD = 68 + // Key: E | e + KeyE = 69 + // Key: F | f + KeyF = 70 + // Key: G | g + KeyG = 71 + // Key: H | h + KeyH = 72 + // Key: I | i + KeyI = 73 + // Key: J | j + KeyJ = 74 + // Key: K | k + KeyK = 75 + // Key: L | l + KeyL = 76 + // Key: M | m + KeyM = 77 + // Key: N | n + KeyN = 78 + // Key: O | o + KeyO = 79 + // Key: P | p + KeyP = 80 + // Key: Q | q + KeyQ = 81 + // Key: R | r + KeyR = 82 + // Key: S | s + KeyS = 83 + // Key: T | t + KeyT = 84 + // Key: U | u + KeyU = 85 + // Key: V | v + KeyV = 86 + // Key: W | w + KeyW = 87 + // Key: X | x + KeyX = 88 + // Key: Y | y + KeyY = 89 + // Key: Z | z + KeyZ = 90 + // Key: [ + KeyLeftBracket = 91 + // Key: '\' + KeyBackslash = 92 + // Key: ] + KeyRightBracket = 93 + // Key: ` + KeyGrave = 96 + // Key: Space + KeySpace = 32 + // Key: Esc + KeyEscape = 256 + // Key: Enter + KeyEnter = 257 + // Key: Tab + KeyTab = 258 + // Key: Backspace + KeyBackspace = 259 + // Key: Ins + KeyInsert = 260 + // Key: Del + KeyDelete = 261 + // Key: Cursor right + KeyRight = 262 + // Key: Cursor left + KeyLeft = 263 + // Key: Cursor down + KeyDown = 264 + // Key: Cursor up + KeyUp = 265 + // Key: Page up + KeyPageUp = 266 + // Key: Page down + KeyPageDown = 267 + // Key: Home + KeyHome = 268 + // Key: End + KeyEnd = 269 + // Key: Caps lock + KeyCapsLock = 280 + // Key: Scroll down + KeyScrollLock = 281 + // Key: Num lock + KeyNumLock = 282 + // Key: Print screen + KeyPrintScreen = 283 + // Key: Pause + KeyPause = 284 + // Key: F1 + KeyF1 = 290 + // Key: F2 + KeyF2 = 291 + // Key: F3 + KeyF3 = 292 + // Key: F4 + KeyF4 = 293 + // Key: F5 + KeyF5 = 294 + // Key: F6 + KeyF6 = 295 + // Key: F7 + KeyF7 = 296 + // Key: F8 + KeyF8 = 297 + // Key: F9 + KeyF9 = 298 + // Key: F10 + KeyF10 = 299 + // Key: F11 + KeyF11 = 300 + // Key: F12 + KeyF12 = 301 + // Key: Shift left + KeyLeftShift = 340 + // Key: Control left + KeyLeftControl = 341 + // Key: Alt left + KeyLeftAlt = 342 + // Key: Super left + KeyLeftSuper = 343 + // Key: Shift right + KeyRightShift = 344 + // Key: Control right + KeyRightControl = 345 + // Key: Alt right + KeyRightAlt = 346 + // Key: Super right + KeyRightSuper = 347 + // Key: KB menu + KeyKbMenu = 348 + // Key: Keypad 0 + KeyKp0 = 320 + // Key: Keypad 1 + KeyKp1 = 321 + // Key: Keypad 2 + KeyKp2 = 322 + // Key: Keypad 3 + KeyKp3 = 323 + // Key: Keypad 4 + KeyKp4 = 324 + // Key: Keypad 5 + KeyKp5 = 325 + // Key: Keypad 6 + KeyKp6 = 326 + // Key: Keypad 7 + KeyKp7 = 327 + // Key: Keypad 8 + KeyKp8 = 328 + // Key: Keypad 9 + KeyKp9 = 329 + // Key: Keypad . + KeyKpDecimal = 330 + // Key: Keypad / + KeyKpDivide = 331 + // Key: Keypad * + KeyKpMultiply = 332 + // Key: Keypad - + KeyKpSubtract = 333 + // Key: Keypad + + KeyKpAdd = 334 + // Key: Keypad Enter + KeyKpEnter = 335 + // Key: Keypad = + KeyKpEqual = 336 + // Key: Android back button + KeyBack = 4 + // Key: Android menu button + KeyMenu = 5 + // Key: Android volume up button + KeyVolumeUp = 24 + // Key: Android volume down button + KeyVolumeDown = 25 +) + +// Mouse buttons +type MouseButton = int32 + +const ( + // Mouse button left + MouseButtonLeft = 0 + // Mouse button right + MouseButtonRight = 1 + // Mouse button middle (pressed wheel) + MouseButtonMiddle = 2 + // Mouse button side (advanced mouse device) + MouseButtonSide = 3 + // Mouse button extra (advanced mouse device) + MouseButtonExtra = 4 + // Mouse button forward (advanced mouse device) + MouseButtonForward = 5 + // Mouse button back (advanced mouse device) + MouseButtonBack = 6 +) + +// Mouse cursor +type MouseCursor = int32 + +const ( + // Default pointer shape + MouseCursorDefault = 0 + // Arrow shape + MouseCursorArrow = 1 + // Text writing cursor shape + MouseCursorIbeam = 2 + // Cross shape + MouseCursorCrosshair = 3 + // Pointing hand cursor + MouseCursorPointingHand = 4 + // Horizontal resize/move arrow shape + MouseCursorResizeEw = 5 + // Vertical resize/move arrow shape + MouseCursorResizeNs = 6 + // Top-left to bottom-right diagonal resize/move arrow shape + MouseCursorResizeNwse = 7 + // The top-right to bottom-left diagonal resize/move arrow shape + MouseCursorResizeNesw = 8 + // The omnidirectional resize/move cursor shape + MouseCursorResizeAll = 9 + // The operation-not-allowed shape + MouseCursorNotAllowed = 10 +) + +// Gamepad buttons +type GamepadButton = int32 + +const ( + // Unknown button, just for error checking + GamepadButtonUnknown = 0 + // Gamepad left DPAD up button + GamepadButtonLeftFaceUp = 1 + // Gamepad left DPAD right button + GamepadButtonLeftFaceRight = 2 + // Gamepad left DPAD down button + GamepadButtonLeftFaceDown = 3 + // Gamepad left DPAD left button + GamepadButtonLeftFaceLeft = 4 + // Gamepad right button up (i.e. PS3: Triangle, Xbox: Y) + GamepadButtonRightFaceUp = 5 + // Gamepad right button right (i.e. PS3: Circle, Xbox: B) + GamepadButtonRightFaceRight = 6 + // Gamepad right button down (i.e. PS3: Cross, Xbox: A) + GamepadButtonRightFaceDown = 7 + // Gamepad right button left (i.e. PS3: Square, Xbox: X) + GamepadButtonRightFaceLeft = 8 + // Gamepad top/back trigger left (first), it could be a trailing button + GamepadButtonLeftTrigger1 = 9 + // Gamepad top/back trigger left (second), it could be a trailing button + GamepadButtonLeftTrigger2 = 10 + // Gamepad top/back trigger right (first), it could be a trailing button + GamepadButtonRightTrigger1 = 11 + // Gamepad top/back trigger right (second), it could be a trailing button + GamepadButtonRightTrigger2 = 12 + // Gamepad center buttons, left one (i.e. PS3: Select) + GamepadButtonMiddleLeft = 13 + // Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX) + GamepadButtonMiddle = 14 + // Gamepad center buttons, right one (i.e. PS3: Start) + GamepadButtonMiddleRight = 15 + // Gamepad joystick pressed button left + GamepadButtonLeftThumb = 16 + // Gamepad joystick pressed button right + GamepadButtonRightThumb = 17 +) + +// Gamepad axes +type GamepadAxis = int32 + +const ( + // Gamepad left stick X axis + GamepadAxisLeftX = 0 + // Gamepad left stick Y axis + GamepadAxisLeftY = 1 + // Gamepad right stick X axis + GamepadAxisRightX = 2 + // Gamepad right stick Y axis + GamepadAxisRightY = 3 + // Gamepad back trigger left, pressure level: [1..-1] + GamepadAxisLeftTrigger = 4 + // Gamepad back trigger right, pressure level: [1..-1] + GamepadAxisRightTrigger = 5 +) + +// Material map index +type MaterialMapIndex = int32 + +const ( + // Albedo material (same as: MATERIAL_MAP_DIFFUSE) + MaterialMapAlbedo = 0 + // Metalness material (same as: MATERIAL_MAP_SPECULAR) + MaterialMapMetalness = 1 + // Normal material + MaterialMapNormal = 2 + // Roughness material + MaterialMapRoughness = 3 + // Ambient occlusion material + MaterialMapOcclusion = 4 + // Emission material + MaterialMapEmission = 5 + // Heightmap material + MaterialMapHeight = 6 + // Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MaterialMapCubemap = 7 + // Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MaterialMapIrradiance = 8 + // Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MaterialMapPrefilter = 9 + // Brdf material + MaterialMapBrdf = 10 +) + +// Shader location index +type ShaderLocationIndex = int32 + +const ( + // Shader location: vertex attribute: position + ShaderLocVertexPosition = 0 + // Shader location: vertex attribute: texcoord01 + ShaderLocVertexTexcoord01 = 1 + // Shader location: vertex attribute: texcoord02 + ShaderLocVertexTexcoord02 = 2 + // Shader location: vertex attribute: normal + ShaderLocVertexNormal = 3 + // Shader location: vertex attribute: tangent + ShaderLocVertexTangent = 4 + // Shader location: vertex attribute: color + ShaderLocVertexColor = 5 + // Shader location: matrix uniform: model-view-projection + ShaderLocMatrixMvp = 6 + // Shader location: matrix uniform: view (camera transform) + ShaderLocMatrixView = 7 + // Shader location: matrix uniform: projection + ShaderLocMatrixProjection = 8 + // Shader location: matrix uniform: model (transform) + ShaderLocMatrixModel = 9 + // Shader location: matrix uniform: normal + ShaderLocMatrixNormal = 10 + // Shader location: vector uniform: view + ShaderLocVectorView = 11 + // Shader location: vector uniform: diffuse color + ShaderLocColorDiffuse = 12 + // Shader location: vector uniform: specular color + ShaderLocColorSpecular = 13 + // Shader location: vector uniform: ambient color + ShaderLocColorAmbient = 14 + // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE) + ShaderLocMapAlbedo = 15 + // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR) + ShaderLocMapMetalness = 16 + // Shader location: sampler2d texture: normal + ShaderLocMapNormal = 17 + // Shader location: sampler2d texture: roughness + ShaderLocMapRoughness = 18 + // Shader location: sampler2d texture: occlusion + ShaderLocMapOcclusion = 19 + // Shader location: sampler2d texture: emission + ShaderLocMapEmission = 20 + // Shader location: sampler2d texture: height + ShaderLocMapHeight = 21 + // Shader location: samplerCube texture: cubemap + ShaderLocMapCubemap = 22 + // Shader location: samplerCube texture: irradiance + ShaderLocMapIrradiance = 23 + // Shader location: samplerCube texture: prefilter + ShaderLocMapPrefilter = 24 + // Shader location: sampler2d texture: brdf + ShaderLocMapBrdf = 25 + // Shader location: vertex attribute: boneIds + ShaderLocVertexBoneids = 26 + // Shader location: vertex attribute: boneWeights + ShaderLocVertexBoneweights = 27 + // Shader location: array of matrices uniform: boneMatrices + ShaderLocBoneMatrices = 28 + // Shader location: vertex attribute: instanceTransform + ShaderLocVertexInstanceTx = 29 +) + +// Shader uniform data type +type ShaderUniformDataType = int32 + +const ( + // Shader uniform type: float + ShaderUniformFloat = 0 + // Shader uniform type: vec2 (2 float) + ShaderUniformVec2 = 1 + // Shader uniform type: vec3 (3 float) + ShaderUniformVec3 = 2 + // Shader uniform type: vec4 (4 float) + ShaderUniformVec4 = 3 + // Shader uniform type: int + ShaderUniformInt = 4 + // Shader uniform type: ivec2 (2 int) + ShaderUniformIvec2 = 5 + // Shader uniform type: ivec3 (3 int) + ShaderUniformIvec3 = 6 + // Shader uniform type: ivec4 (4 int) + ShaderUniformIvec4 = 7 + // Shader uniform type: unsigned int + ShaderUniformUint = 8 + // Shader uniform type: uivec2 (2 unsigned int) + ShaderUniformUivec2 = 9 + // Shader uniform type: uivec3 (3 unsigned int) + ShaderUniformUivec3 = 10 + // Shader uniform type: uivec4 (4 unsigned int) + ShaderUniformUivec4 = 11 + // Shader uniform type: sampler2d + ShaderUniformSampler2D = 12 +) + +// Shader attribute data types +type ShaderAttributeDataType = int32 + +const ( + // Shader attribute type: float + ShaderAttribFloat = 0 + // Shader attribute type: vec2 (2 float) + ShaderAttribVec2 = 1 + // Shader attribute type: vec3 (3 float) + ShaderAttribVec3 = 2 + // Shader attribute type: vec4 (4 float) + ShaderAttribVec4 = 3 +) + +// Pixel formats +type PixelFormat = int32 + +const ( + // 8 bit per pixel (no alpha) + PixelformatUncompressedGrayscale = 1 + // 8*2 bpp (2 channels) + PixelformatUncompressedGrayAlpha = 2 + // 16 bpp + PixelformatUncompressedR5G6B5 = 3 + // 24 bpp + PixelformatUncompressedR8G8B8 = 4 + // 16 bpp (1 bit alpha) + PixelformatUncompressedR5G5B5A1 = 5 + // 16 bpp (4 bit alpha) + PixelformatUncompressedR4G4B4A4 = 6 + // 32 bpp + PixelformatUncompressedR8G8B8A8 = 7 + // 32 bpp (1 channel - float) + PixelformatUncompressedR32 = 8 + // 32*3 bpp (3 channels - float) + PixelformatUncompressedR32G32B32 = 9 + // 32*4 bpp (4 channels - float) + PixelformatUncompressedR32G32B32A32 = 10 + // 16 bpp (1 channel - half float) + PixelformatUncompressedR16 = 11 + // 16*3 bpp (3 channels - half float) + PixelformatUncompressedR16G16B16 = 12 + // 16*4 bpp (4 channels - half float) + PixelformatUncompressedR16G16B16A16 = 13 + // 4 bpp (no alpha) + PixelformatCompressedDxt1Rgb = 14 + // 4 bpp (1 bit alpha) + PixelformatCompressedDxt1Rgba = 15 + // 8 bpp + PixelformatCompressedDxt3Rgba = 16 + // 8 bpp + PixelformatCompressedDxt5Rgba = 17 + // 4 bpp + PixelformatCompressedEtc1Rgb = 18 + // 4 bpp + PixelformatCompressedEtc2Rgb = 19 + // 8 bpp + PixelformatCompressedEtc2EacRgba = 20 + // 4 bpp + PixelformatCompressedPvrtRgb = 21 + // 4 bpp + PixelformatCompressedPvrtRgba = 22 + // 8 bpp + PixelformatCompressedAstc4X4Rgba = 23 + // 2 bpp + PixelformatCompressedAstc8X8Rgba = 24 +) + +// Texture parameters: filter mode +type TextureFilter = int32 + +const ( + // No filter, just pixel approximation + TextureFilterPoint = 0 + // Linear filtering + TextureFilterBilinear = 1 + // Trilinear filtering (linear with mipmaps) + TextureFilterTrilinear = 2 + // Anisotropic filtering 4x + TextureFilterAnisotropic4X = 3 + // Anisotropic filtering 8x + TextureFilterAnisotropic8X = 4 + // Anisotropic filtering 16x + TextureFilterAnisotropic16X = 5 +) + +// Texture parameters: wrap mode +type TextureWrap = int32 + +const ( + // Repeats texture in tiled mode + TextureWrapRepeat = 0 + // Clamps texture to edge pixel in tiled mode + TextureWrapClamp = 1 + // Mirrors and repeats the texture in tiled mode + TextureWrapMirrorRepeat = 2 + // Mirrors and clamps to border the texture in tiled mode + TextureWrapMirrorClamp = 3 +) + +// Cubemap layouts +type CubemapLayout = int32 + +const ( + // Automatically detect layout type + CubemapLayoutAutoDetect = 0 + // Layout is defined by a vertical line with faces + CubemapLayoutLineVertical = 1 + // Layout is defined by a horizontal line with faces + CubemapLayoutLineHorizontal = 2 + // Layout is defined by a 3x4 cross with cubemap faces + CubemapLayoutCrossThreeByFour = 3 + // Layout is defined by a 4x3 cross with cubemap faces + CubemapLayoutCrossFourByThree = 4 +) + +// Font type, defines generation method +type FontType = int32 + +const ( + // Default font generation, anti-aliased + FontDefault = 0 + // Bitmap font generation, no anti-aliasing + FontBitmap = 1 + // SDF font generation, requires external shader + FontSdf = 2 +) + +// Color blending modes (pre-defined) +type BlendMode = int32 + +const ( + // Blend textures considering alpha (default) + BlendAlpha = 0 + // Blend textures adding colors + BlendAdditive = 1 + // Blend textures multiplying colors + BlendMultiplied = 2 + // Blend textures adding colors (alternative) + BlendAddColors = 3 + // Blend textures subtracting colors (alternative) + BlendSubtractColors = 4 + // Blend premultiplied textures considering alpha + BlendAlphaPremultiply = 5 + // Blend textures using custom src/dst factors (use rlSetBlendFactors()) + BlendCustom = 6 + // Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate()) + BlendCustomSeparate = 7 +) + +// Gesture +type Gesture = int32 + +const ( + // No gesture + GestureNone = 0 + // Tap gesture + GestureTap = 1 + // Double tap gesture + GestureDoubletap = 2 + // Hold gesture + GestureHold = 4 + // Drag gesture + GestureDrag = 8 + // Swipe right gesture + GestureSwipeRight = 16 + // Swipe left gesture + GestureSwipeLeft = 32 + // Swipe up gesture + GestureSwipeUp = 64 + // Swipe down gesture + GestureSwipeDown = 128 + // Pinch in gesture + GesturePinchIn = 256 + // Pinch out gesture + GesturePinchOut = 512 +) + +// Camera system modes +type CameraMode = int32 + +const ( + // Camera custom, controlled by user (UpdateCamera() does nothing) + CameraCustom = 0 + // Camera free mode + CameraFree = 1 + // Camera orbital, around target, zoom supported + CameraOrbital = 2 + // Camera first person + CameraFirstPerson = 3 + // Camera third person + CameraThirdPerson = 4 +) + +// Camera projection +type CameraProjection = int32 + +const ( + // Perspective projection + CameraPerspective = 0 + // Orthographic projection + CameraOrthographic = 1 +) + +// N-patch layout +type NPatchLayout = int32 + +const ( + // Npatch layout: 3x3 tiles + NpatchNinePatch = 0 + // Npatch layout: 1x3 tiles + NpatchThreePatchVertical = 1 + // Npatch layout: 3x1 tiles + NpatchThreePatchHorizontal = 2 +) diff --git a/wasm-runtime/rl/funcimport_gen_unformatted.go b/wasm-runtime/rl/funcimport_gen_unformatted.go new file mode 100644 index 0000000..a4e5b1a --- /dev/null +++ b/wasm-runtime/rl/funcimport_gen_unformatted.go @@ -0,0 +1,4589 @@ +// AUTOGENERATED FILE. DO NOT EDIT + +//go:build js + +package rl + +//go:wasmimport _raylib _InitWindow +//go:noescape +func initWindow( + Width int32, + Height int32, + Title cptr, +) + +//go:wasmimport _raylib _CloseWindow +//go:noescape +func closeWindow() + +//go:wasmimport _raylib _WindowShouldClose +//go:noescape +func windowShouldClose( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowReady +//go:noescape +func isWindowReady( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowFullscreen +//go:noescape +func isWindowFullscreen( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowHidden +//go:noescape +func isWindowHidden( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowMinimized +//go:noescape +func isWindowMinimized( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowMaximized +//go:noescape +func isWindowMaximized( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowFocused +//go:noescape +func isWindowFocused( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowResized +//go:noescape +func isWindowResized( + ret cptr, +) + +//go:wasmimport _raylib _IsWindowState +//go:noescape +func isWindowState( + ret cptr, + Flag uint32, +) + +//go:wasmimport _raylib _SetWindowState +//go:noescape +func setWindowState( + Flags uint32, +) + +//go:wasmimport _raylib _ClearWindowState +//go:noescape +func clearWindowState( + Flags uint32, +) + +//go:wasmimport _raylib _ToggleFullscreen +//go:noescape +func toggleFullscreen() + +//go:wasmimport _raylib _ToggleBorderlessWindowed +//go:noescape +func toggleBorderlessWindowed() + +//go:wasmimport _raylib _MaximizeWindow +//go:noescape +func maximizeWindow() + +//go:wasmimport _raylib _MinimizeWindow +//go:noescape +func minimizeWindow() + +//go:wasmimport _raylib _RestoreWindow +//go:noescape +func restoreWindow() + +//go:wasmimport _raylib _SetWindowIcon +//go:noescape +func setWindowIcon( + Image cptr, +) + +//go:wasmimport _raylib _SetWindowIcons +//go:noescape +func setWindowIcons( + Images cptr, + Count int32, +) + +//go:wasmimport _raylib _SetWindowTitle +//go:noescape +func setWindowTitle( + Title cptr, +) + +//go:wasmimport _raylib _SetWindowPosition +//go:noescape +func setWindowPosition( + X int32, + Y int32, +) + +//go:wasmimport _raylib _SetWindowMonitor +//go:noescape +func setWindowMonitor( + Monitor int32, +) + +//go:wasmimport _raylib _SetWindowMinSize +//go:noescape +func setWindowMinSize( + Width int32, + Height int32, +) + +//go:wasmimport _raylib _SetWindowMaxSize +//go:noescape +func setWindowMaxSize( + Width int32, + Height int32, +) + +//go:wasmimport _raylib _SetWindowSize +//go:noescape +func setWindowSize( + Width int32, + Height int32, +) + +//go:wasmimport _raylib _SetWindowOpacity +//go:noescape +func setWindowOpacity( + Opacity float32, +) + +//go:wasmimport _raylib _SetWindowFocused +//go:noescape +func setWindowFocused() + +//go:wasmimport _raylib _GetWindowHandle +//go:noescape +func getWindowHandle( + ret cptr, +) + +//go:wasmimport _raylib _GetScreenWidth +//go:noescape +func getScreenWidth( + ret int32, +) + +//go:wasmimport _raylib _GetScreenHeight +//go:noescape +func getScreenHeight( + ret int32, +) + +//go:wasmimport _raylib _GetRenderWidth +//go:noescape +func getRenderWidth( + ret int32, +) + +//go:wasmimport _raylib _GetRenderHeight +//go:noescape +func getRenderHeight( + ret int32, +) + +//go:wasmimport _raylib _GetMonitorCount +//go:noescape +func getMonitorCount( + ret int32, +) + +//go:wasmimport _raylib _GetCurrentMonitor +//go:noescape +func getCurrentMonitor( + ret int32, +) + +//go:wasmimport _raylib _GetMonitorPosition +//go:noescape +func getMonitorPosition( + ret cptr, + Monitor int32, +) + +//go:wasmimport _raylib _GetMonitorWidth +//go:noescape +func getMonitorWidth( + ret int32, + Monitor int32, +) + +//go:wasmimport _raylib _GetMonitorHeight +//go:noescape +func getMonitorHeight( + ret int32, + Monitor int32, +) + +//go:wasmimport _raylib _GetMonitorPhysicalWidth +//go:noescape +func getMonitorPhysicalWidth( + ret int32, + Monitor int32, +) + +//go:wasmimport _raylib _GetMonitorPhysicalHeight +//go:noescape +func getMonitorPhysicalHeight( + ret int32, + Monitor int32, +) + +//go:wasmimport _raylib _GetMonitorRefreshRate +//go:noescape +func getMonitorRefreshRate( + ret int32, + Monitor int32, +) + +//go:wasmimport _raylib _GetWindowPosition +//go:noescape +func getWindowPosition( + ret cptr, +) + +//go:wasmimport _raylib _GetWindowScaleDPI +//go:noescape +func getWindowScaleDPI( + ret cptr, +) + +//go:wasmimport _raylib _GetMonitorName +//go:noescape +func getMonitorName( + ret cptr, + Monitor int32, +) + +//go:wasmimport _raylib _SetClipboardText +//go:noescape +func setClipboardText( + Text cptr, +) + +//go:wasmimport _raylib _GetClipboardText +//go:noescape +func getClipboardText( + ret cptr, +) + +//go:wasmimport _raylib _GetClipboardImage +//go:noescape +func getClipboardImage( + ret cptr, +) + +//go:wasmimport _raylib _EnableEventWaiting +//go:noescape +func enableEventWaiting() + +//go:wasmimport _raylib _DisableEventWaiting +//go:noescape +func disableEventWaiting() + +//go:wasmimport _raylib _ShowCursor +//go:noescape +func showCursor() + +//go:wasmimport _raylib _HideCursor +//go:noescape +func hideCursor() + +//go:wasmimport _raylib _IsCursorHidden +//go:noescape +func isCursorHidden( + ret cptr, +) + +//go:wasmimport _raylib _EnableCursor +//go:noescape +func enableCursor() + +//go:wasmimport _raylib _DisableCursor +//go:noescape +func disableCursor() + +//go:wasmimport _raylib _IsCursorOnScreen +//go:noescape +func isCursorOnScreen( + ret cptr, +) + +//go:wasmimport _raylib _ClearBackground +//go:noescape +func clearBackground( + Color cptr, +) + +//go:wasmimport _raylib _BeginDrawing +//go:noescape +func beginDrawing() + +//go:wasmimport _raylib _EndDrawing +//go:noescape +func endDrawing() + +//go:wasmimport _raylib _BeginMode2D +//go:noescape +func beginMode2D( + Camera cptr, +) + +//go:wasmimport _raylib _EndMode2D +//go:noescape +func endMode2D() + +//go:wasmimport _raylib _BeginMode3D +//go:noescape +func beginMode3D( + Camera cptr, +) + +//go:wasmimport _raylib _EndMode3D +//go:noescape +func endMode3D() + +//go:wasmimport _raylib _BeginTextureMode +//go:noescape +func beginTextureMode( + Target cptr, +) + +//go:wasmimport _raylib _EndTextureMode +//go:noescape +func endTextureMode() + +//go:wasmimport _raylib _BeginShaderMode +//go:noescape +func beginShaderMode( + Shader cptr, +) + +//go:wasmimport _raylib _EndShaderMode +//go:noescape +func endShaderMode() + +//go:wasmimport _raylib _BeginBlendMode +//go:noescape +func beginBlendMode( + Mode int32, +) + +//go:wasmimport _raylib _EndBlendMode +//go:noescape +func endBlendMode() + +//go:wasmimport _raylib _BeginScissorMode +//go:noescape +func beginScissorMode( + X int32, + Y int32, + Width int32, + Height int32, +) + +//go:wasmimport _raylib _EndScissorMode +//go:noescape +func endScissorMode() + +//go:wasmimport _raylib _BeginVrStereoMode +//go:noescape +func beginVrStereoMode( + Config cptr, +) + +//go:wasmimport _raylib _EndVrStereoMode +//go:noescape +func endVrStereoMode() + +//go:wasmimport _raylib _LoadVrStereoConfig +//go:noescape +func loadVrStereoConfig( + ret cptr, + Device cptr, +) + +//go:wasmimport _raylib _UnloadVrStereoConfig +//go:noescape +func unloadVrStereoConfig( + Config cptr, +) + +//go:wasmimport _raylib _LoadShader +//go:noescape +func loadShader( + ret cptr, + VsFileName cptr, + FsFileName cptr, +) + +//go:wasmimport _raylib _LoadShaderFromMemory +//go:noescape +func loadShaderFromMemory( + ret cptr, + VsCode cptr, + FsCode cptr, +) + +//go:wasmimport _raylib _IsShaderValid +//go:noescape +func isShaderValid( + ret cptr, + Shader cptr, +) + +//go:wasmimport _raylib _GetShaderLocation +//go:noescape +func getShaderLocation( + ret int32, + Shader cptr, + UniformName cptr, +) + +//go:wasmimport _raylib _GetShaderLocationAttrib +//go:noescape +func getShaderLocationAttrib( + ret int32, + Shader cptr, + AttribName cptr, +) + +//go:wasmimport _raylib _SetShaderValue +//go:noescape +func setShaderValue( + Shader cptr, + LocIndex int32, + Value cptr, + UniformType int32, +) + +//go:wasmimport _raylib _SetShaderValueV +//go:noescape +func setShaderValueV( + Shader cptr, + LocIndex int32, + Value cptr, + UniformType int32, + Count int32, +) + +//go:wasmimport _raylib _SetShaderValueMatrix +//go:noescape +func setShaderValueMatrix( + Shader cptr, + LocIndex int32, + Mat cptr, +) + +//go:wasmimport _raylib _SetShaderValueTexture +//go:noescape +func setShaderValueTexture( + Shader cptr, + LocIndex int32, + Texture cptr, +) + +//go:wasmimport _raylib _UnloadShader +//go:noescape +func unloadShader( + Shader cptr, +) + +//go:wasmimport _raylib _GetScreenToWorldRay +//go:noescape +func getScreenToWorldRay( + ret cptr, + Position cptr, + Camera cptr, +) + +//go:wasmimport _raylib _GetScreenToWorldRayEx +//go:noescape +func getScreenToWorldRayEx( + ret cptr, + Position cptr, + Camera cptr, + Width int32, + Height int32, +) + +//go:wasmimport _raylib _GetWorldToScreen +//go:noescape +func getWorldToScreen( + ret cptr, + Position cptr, + Camera cptr, +) + +//go:wasmimport _raylib _GetWorldToScreenEx +//go:noescape +func getWorldToScreenEx( + ret cptr, + Position cptr, + Camera cptr, + Width int32, + Height int32, +) + +//go:wasmimport _raylib _GetWorldToScreen2D +//go:noescape +func getWorldToScreen2D( + ret cptr, + Position cptr, + Camera cptr, +) + +//go:wasmimport _raylib _GetScreenToWorld2D +//go:noescape +func getScreenToWorld2D( + ret cptr, + Position cptr, + Camera cptr, +) + +//go:wasmimport _raylib _GetCameraMatrix +//go:noescape +func getCameraMatrix( + ret cptr, + Camera cptr, +) + +//go:wasmimport _raylib _GetCameraMatrix2D +//go:noescape +func getCameraMatrix2D( + ret cptr, + Camera cptr, +) + +//go:wasmimport _raylib _SetTargetFPS +//go:noescape +func setTargetFPS( + Fps int32, +) + +//go:wasmimport _raylib _GetFrameTime +//go:noescape +func getFrameTime( + ret float32, +) + +//go:wasmimport _raylib _GetTime +//go:noescape +func getTime( + ret float64, +) + +//go:wasmimport _raylib _GetFPS +//go:noescape +func getFPS( + ret int32, +) + +//go:wasmimport _raylib _SwapScreenBuffer +//go:noescape +func swapScreenBuffer() + +//go:wasmimport _raylib _PollInputEvents +//go:noescape +func pollInputEvents() + +//go:wasmimport _raylib _WaitTime +//go:noescape +func waitTime( + Seconds float64, +) + +//go:wasmimport _raylib _SetRandomSeed +//go:noescape +func setRandomSeed( + Seed uint32, +) + +//go:wasmimport _raylib _GetRandomValue +//go:noescape +func getRandomValue( + ret int32, + Min int32, + Max int32, +) + +//go:wasmimport _raylib _LoadRandomSequence +//go:noescape +func loadRandomSequence( + ret cptr, + Count uint32, + Min int32, + Max int32, +) + +//go:wasmimport _raylib _UnloadRandomSequence +//go:noescape +func unloadRandomSequence( + Sequence cptr, +) + +//go:wasmimport _raylib _TakeScreenshot +//go:noescape +func takeScreenshot( + FileName cptr, +) + +//go:wasmimport _raylib _SetConfigFlags +//go:noescape +func setConfigFlags( + Flags uint32, +) + +//go:wasmimport _raylib _OpenURL +//go:noescape +func openURL( + Url cptr, +) + +//go:wasmimport _raylib _SetTraceLogLevel +//go:noescape +func setTraceLogLevel( + LogLevel int32, +) + +//go:wasmimport _raylib _TraceLog +//go:noescape +func traceLog( + LogLevel int32, + Text cptr, + Args cptr, +) + +//go:wasmimport _raylib _SetTraceLogCallback +//go:noescape +func setTraceLogCallback( + Callback cptr, +) + +//go:wasmimport _raylib _MemAlloc +//go:noescape +func memAlloc( + ret cptr, + Size uint32, +) + +//go:wasmimport _raylib _MemRealloc +//go:noescape +func memRealloc( + ret cptr, + Ptr cptr, + Size uint32, +) + +//go:wasmimport _raylib _MemFree +//go:noescape +func memFree( + Ptr cptr, +) + +//go:wasmimport _raylib _LoadFileData +//go:noescape +func loadFileData( + ret cptr, + FileName cptr, + DataSize cptr, +) + +//go:wasmimport _raylib _UnloadFileData +//go:noescape +func unloadFileData( + Data cptr, +) + +//go:wasmimport _raylib _SaveFileData +//go:noescape +func saveFileData( + ret cptr, + FileName cptr, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _ExportDataAsCode +//go:noescape +func exportDataAsCode( + ret cptr, + Data cptr, + DataSize int32, + FileName cptr, +) + +//go:wasmimport _raylib _LoadFileText +//go:noescape +func loadFileText( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _UnloadFileText +//go:noescape +func unloadFileText( + Text cptr, +) + +//go:wasmimport _raylib _SaveFileText +//go:noescape +func saveFileText( + ret cptr, + FileName cptr, + Text cptr, +) + +//go:wasmimport _raylib _SetLoadFileDataCallback +//go:noescape +func setLoadFileDataCallback( + Callback cptr, +) + +//go:wasmimport _raylib _SetSaveFileDataCallback +//go:noescape +func setSaveFileDataCallback( + Callback cptr, +) + +//go:wasmimport _raylib _SetLoadFileTextCallback +//go:noescape +func setLoadFileTextCallback( + Callback cptr, +) + +//go:wasmimport _raylib _SetSaveFileTextCallback +//go:noescape +func setSaveFileTextCallback( + Callback cptr, +) + +//go:wasmimport _raylib _FileRename +//go:noescape +func fileRename( + ret int32, + FileName cptr, + FileRename cptr, +) + +//go:wasmimport _raylib _FileRemove +//go:noescape +func fileRemove( + ret int32, + FileName cptr, +) + +//go:wasmimport _raylib _FileCopy +//go:noescape +func fileCopy( + ret int32, + SrcPath cptr, + DstPath cptr, +) + +//go:wasmimport _raylib _FileMove +//go:noescape +func fileMove( + ret int32, + SrcPath cptr, + DstPath cptr, +) + +//go:wasmimport _raylib _FileTextReplace +//go:noescape +func fileTextReplace( + ret int32, + FileName cptr, + Search cptr, + Replacement cptr, +) + +//go:wasmimport _raylib _FileTextFindIndex +//go:noescape +func fileTextFindIndex( + ret int32, + FileName cptr, + Search cptr, +) + +//go:wasmimport _raylib _FileExists +//go:noescape +func fileExists( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _DirectoryExists +//go:noescape +func directoryExists( + ret cptr, + DirPath cptr, +) + +//go:wasmimport _raylib _IsFileExtension +//go:noescape +func isFileExtension( + ret cptr, + FileName cptr, + Ext cptr, +) + +//go:wasmimport _raylib _GetFileLength +//go:noescape +func getFileLength( + ret int32, + FileName cptr, +) + +//go:wasmimport _raylib _GetFileModTime +//go:noescape +func getFileModTime( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _GetFileExtension +//go:noescape +func getFileExtension( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _GetFileName +//go:noescape +func getFileName( + ret cptr, + FilePath cptr, +) + +//go:wasmimport _raylib _GetFileNameWithoutExt +//go:noescape +func getFileNameWithoutExt( + ret cptr, + FilePath cptr, +) + +//go:wasmimport _raylib _GetDirectoryPath +//go:noescape +func getDirectoryPath( + ret cptr, + FilePath cptr, +) + +//go:wasmimport _raylib _GetPrevDirectoryPath +//go:noescape +func getPrevDirectoryPath( + ret cptr, + DirPath cptr, +) + +//go:wasmimport _raylib _GetWorkingDirectory +//go:noescape +func getWorkingDirectory( + ret cptr, +) + +//go:wasmimport _raylib _GetApplicationDirectory +//go:noescape +func getApplicationDirectory( + ret cptr, +) + +//go:wasmimport _raylib _MakeDirectory +//go:noescape +func makeDirectory( + ret int32, + DirPath cptr, +) + +//go:wasmimport _raylib _ChangeDirectory +//go:noescape +func changeDirectory( + ret cptr, + DirPath cptr, +) + +//go:wasmimport _raylib _IsPathFile +//go:noescape +func isPathFile( + ret cptr, + Path cptr, +) + +//go:wasmimport _raylib _IsFileNameValid +//go:noescape +func isFileNameValid( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadDirectoryFiles +//go:noescape +func loadDirectoryFiles( + ret cptr, + DirPath cptr, +) + +//go:wasmimport _raylib _LoadDirectoryFilesEx +//go:noescape +func loadDirectoryFilesEx( + ret cptr, + BasePath cptr, + Filter cptr, + ScanSubdirs cptr, +) + +//go:wasmimport _raylib _UnloadDirectoryFiles +//go:noescape +func unloadDirectoryFiles( + Files cptr, +) + +//go:wasmimport _raylib _IsFileDropped +//go:noescape +func isFileDropped( + ret cptr, +) + +//go:wasmimport _raylib _LoadDroppedFiles +//go:noescape +func loadDroppedFiles( + ret cptr, +) + +//go:wasmimport _raylib _UnloadDroppedFiles +//go:noescape +func unloadDroppedFiles( + Files cptr, +) + +//go:wasmimport _raylib _GetDirectoryFileCount +//go:noescape +func getDirectoryFileCount( + ret uint32, + DirPath cptr, +) + +//go:wasmimport _raylib _GetDirectoryFileCountEx +//go:noescape +func getDirectoryFileCountEx( + ret uint32, + BasePath cptr, + Filter cptr, + ScanSubdirs cptr, +) + +//go:wasmimport _raylib _CompressData +//go:noescape +func compressData( + ret cptr, + Data cptr, + DataSize int32, + CompDataSize cptr, +) + +//go:wasmimport _raylib _DecompressData +//go:noescape +func decompressData( + ret cptr, + CompData cptr, + CompDataSize int32, + DataSize cptr, +) + +//go:wasmimport _raylib _EncodeDataBase64 +//go:noescape +func encodeDataBase64( + ret cptr, + Data cptr, + DataSize int32, + OutputSize cptr, +) + +//go:wasmimport _raylib _DecodeDataBase64 +//go:noescape +func decodeDataBase64( + ret cptr, + Text cptr, + OutputSize cptr, +) + +//go:wasmimport _raylib _ComputeCRC32 +//go:noescape +func computeCRC32( + ret uint32, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _ComputeMD5 +//go:noescape +func computeMD5( + ret cptr, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _ComputeSHA1 +//go:noescape +func computeSHA1( + ret cptr, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _ComputeSHA256 +//go:noescape +func computeSHA256( + ret cptr, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _LoadAutomationEventList +//go:noescape +func loadAutomationEventList( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _UnloadAutomationEventList +//go:noescape +func unloadAutomationEventList( + List cptr, +) + +//go:wasmimport _raylib _ExportAutomationEventList +//go:noescape +func exportAutomationEventList( + ret cptr, + List cptr, + FileName cptr, +) + +//go:wasmimport _raylib _SetAutomationEventList +//go:noescape +func setAutomationEventList( + List cptr, +) + +//go:wasmimport _raylib _SetAutomationEventBaseFrame +//go:noescape +func setAutomationEventBaseFrame( + Frame int32, +) + +//go:wasmimport _raylib _StartAutomationEventRecording +//go:noescape +func startAutomationEventRecording() + +//go:wasmimport _raylib _StopAutomationEventRecording +//go:noescape +func stopAutomationEventRecording() + +//go:wasmimport _raylib _PlayAutomationEvent +//go:noescape +func playAutomationEvent( + Event cptr, +) + +//go:wasmimport _raylib _IsKeyPressed +//go:noescape +func isKeyPressed( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _IsKeyPressedRepeat +//go:noescape +func isKeyPressedRepeat( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _IsKeyDown +//go:noescape +func isKeyDown( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _IsKeyReleased +//go:noescape +func isKeyReleased( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _IsKeyUp +//go:noescape +func isKeyUp( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _GetKeyPressed +//go:noescape +func getKeyPressed( + ret int32, +) + +//go:wasmimport _raylib _GetCharPressed +//go:noescape +func getCharPressed( + ret int32, +) + +//go:wasmimport _raylib _GetKeyName +//go:noescape +func getKeyName( + ret cptr, + Key int32, +) + +//go:wasmimport _raylib _SetExitKey +//go:noescape +func setExitKey( + Key int32, +) + +//go:wasmimport _raylib _IsGamepadAvailable +//go:noescape +func isGamepadAvailable( + ret cptr, + Gamepad int32, +) + +//go:wasmimport _raylib _GetGamepadName +//go:noescape +func getGamepadName( + ret cptr, + Gamepad int32, +) + +//go:wasmimport _raylib _IsGamepadButtonPressed +//go:noescape +func isGamepadButtonPressed( + ret cptr, + Gamepad int32, + Button int32, +) + +//go:wasmimport _raylib _IsGamepadButtonDown +//go:noescape +func isGamepadButtonDown( + ret cptr, + Gamepad int32, + Button int32, +) + +//go:wasmimport _raylib _IsGamepadButtonReleased +//go:noescape +func isGamepadButtonReleased( + ret cptr, + Gamepad int32, + Button int32, +) + +//go:wasmimport _raylib _IsGamepadButtonUp +//go:noescape +func isGamepadButtonUp( + ret cptr, + Gamepad int32, + Button int32, +) + +//go:wasmimport _raylib _GetGamepadButtonPressed +//go:noescape +func getGamepadButtonPressed( + ret int32, +) + +//go:wasmimport _raylib _GetGamepadAxisCount +//go:noescape +func getGamepadAxisCount( + ret int32, + Gamepad int32, +) + +//go:wasmimport _raylib _GetGamepadAxisMovement +//go:noescape +func getGamepadAxisMovement( + ret float32, + Gamepad int32, + Axis int32, +) + +//go:wasmimport _raylib _SetGamepadMappings +//go:noescape +func setGamepadMappings( + ret int32, + Mappings cptr, +) + +//go:wasmimport _raylib _SetGamepadVibration +//go:noescape +func setGamepadVibration( + Gamepad int32, + LeftMotor float32, + RightMotor float32, + Duration float32, +) + +//go:wasmimport _raylib _IsMouseButtonPressed +//go:noescape +func isMouseButtonPressed( + ret cptr, + Button int32, +) + +//go:wasmimport _raylib _IsMouseButtonDown +//go:noescape +func isMouseButtonDown( + ret cptr, + Button int32, +) + +//go:wasmimport _raylib _IsMouseButtonReleased +//go:noescape +func isMouseButtonReleased( + ret cptr, + Button int32, +) + +//go:wasmimport _raylib _IsMouseButtonUp +//go:noescape +func isMouseButtonUp( + ret cptr, + Button int32, +) + +//go:wasmimport _raylib _GetMouseX +//go:noescape +func getMouseX( + ret int32, +) + +//go:wasmimport _raylib _GetMouseY +//go:noescape +func getMouseY( + ret int32, +) + +//go:wasmimport _raylib _GetMousePosition +//go:noescape +func getMousePosition( + ret cptr, +) + +//go:wasmimport _raylib _GetMouseDelta +//go:noescape +func getMouseDelta( + ret cptr, +) + +//go:wasmimport _raylib _SetMousePosition +//go:noescape +func setMousePosition( + X int32, + Y int32, +) + +//go:wasmimport _raylib _SetMouseOffset +//go:noescape +func setMouseOffset( + OffsetX int32, + OffsetY int32, +) + +//go:wasmimport _raylib _SetMouseScale +//go:noescape +func setMouseScale( + ScaleX float32, + ScaleY float32, +) + +//go:wasmimport _raylib _GetMouseWheelMove +//go:noescape +func getMouseWheelMove( + ret float32, +) + +//go:wasmimport _raylib _GetMouseWheelMoveV +//go:noescape +func getMouseWheelMoveV( + ret cptr, +) + +//go:wasmimport _raylib _SetMouseCursor +//go:noescape +func setMouseCursor( + Cursor int32, +) + +//go:wasmimport _raylib _GetTouchX +//go:noescape +func getTouchX( + ret int32, +) + +//go:wasmimport _raylib _GetTouchY +//go:noescape +func getTouchY( + ret int32, +) + +//go:wasmimport _raylib _GetTouchPosition +//go:noescape +func getTouchPosition( + ret cptr, + Index int32, +) + +//go:wasmimport _raylib _GetTouchPointId +//go:noescape +func getTouchPointId( + ret int32, + Index int32, +) + +//go:wasmimport _raylib _GetTouchPointCount +//go:noescape +func getTouchPointCount( + ret int32, +) + +//go:wasmimport _raylib _SetGesturesEnabled +//go:noescape +func setGesturesEnabled( + Flags uint32, +) + +//go:wasmimport _raylib _IsGestureDetected +//go:noescape +func isGestureDetected( + ret cptr, + Gesture uint32, +) + +//go:wasmimport _raylib _GetGestureDetected +//go:noescape +func getGestureDetected( + ret int32, +) + +//go:wasmimport _raylib _GetGestureHoldDuration +//go:noescape +func getGestureHoldDuration( + ret float32, +) + +//go:wasmimport _raylib _GetGestureDragVector +//go:noescape +func getGestureDragVector( + ret cptr, +) + +//go:wasmimport _raylib _GetGestureDragAngle +//go:noescape +func getGestureDragAngle( + ret float32, +) + +//go:wasmimport _raylib _GetGesturePinchVector +//go:noescape +func getGesturePinchVector( + ret cptr, +) + +//go:wasmimport _raylib _GetGesturePinchAngle +//go:noescape +func getGesturePinchAngle( + ret float32, +) + +//go:wasmimport _raylib _UpdateCamera +//go:noescape +func updateCamera( + Camera cptr, + Mode int32, +) + +//go:wasmimport _raylib _UpdateCameraPro +//go:noescape +func updateCameraPro( + Camera cptr, + Movement cptr, + Rotation cptr, + Zoom float32, +) + +//go:wasmimport _raylib _SetShapesTexture +//go:noescape +func setShapesTexture( + Texture cptr, + Source cptr, +) + +//go:wasmimport _raylib _GetShapesTexture +//go:noescape +func getShapesTexture( + ret cptr, +) + +//go:wasmimport _raylib _GetShapesTextureRectangle +//go:noescape +func getShapesTextureRectangle( + ret cptr, +) + +//go:wasmimport _raylib _DrawPixel +//go:noescape +func drawPixel( + PosX int32, + PosY int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawPixelV +//go:noescape +func drawPixelV( + Position cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawLine +//go:noescape +func drawLine( + StartPosX int32, + StartPosY int32, + EndPosX int32, + EndPosY int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawLineV +//go:noescape +func drawLineV( + StartPos cptr, + EndPos cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawLineEx +//go:noescape +func drawLineEx( + StartPos cptr, + EndPos cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawLineStrip +//go:noescape +func drawLineStrip( + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawLineBezier +//go:noescape +func drawLineBezier( + StartPos cptr, + EndPos cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawLineDashed +//go:noescape +func drawLineDashed( + StartPos cptr, + EndPos cptr, + DashSize int32, + SpaceSize int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircle +//go:noescape +func drawCircle( + CenterX int32, + CenterY int32, + Radius float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircleSector +//go:noescape +func drawCircleSector( + Center cptr, + Radius float32, + StartAngle float32, + EndAngle float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircleSectorLines +//go:noescape +func drawCircleSectorLines( + Center cptr, + Radius float32, + StartAngle float32, + EndAngle float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircleGradient +//go:noescape +func drawCircleGradient( + CenterX int32, + CenterY int32, + Radius float32, + Inner cptr, + Outer cptr, +) + +//go:wasmimport _raylib _DrawCircleV +//go:noescape +func drawCircleV( + Center cptr, + Radius float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircleLines +//go:noescape +func drawCircleLines( + CenterX int32, + CenterY int32, + Radius float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircleLinesV +//go:noescape +func drawCircleLinesV( + Center cptr, + Radius float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawEllipse +//go:noescape +func drawEllipse( + CenterX int32, + CenterY int32, + RadiusH float32, + RadiusV float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawEllipseV +//go:noescape +func drawEllipseV( + Center cptr, + RadiusH float32, + RadiusV float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawEllipseLines +//go:noescape +func drawEllipseLines( + CenterX int32, + CenterY int32, + RadiusH float32, + RadiusV float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawEllipseLinesV +//go:noescape +func drawEllipseLinesV( + Center cptr, + RadiusH float32, + RadiusV float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRing +//go:noescape +func drawRing( + Center cptr, + InnerRadius float32, + OuterRadius float32, + StartAngle float32, + EndAngle float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRingLines +//go:noescape +func drawRingLines( + Center cptr, + InnerRadius float32, + OuterRadius float32, + StartAngle float32, + EndAngle float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangle +//go:noescape +func drawRectangle( + PosX int32, + PosY int32, + Width int32, + Height int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleV +//go:noescape +func drawRectangleV( + Position cptr, + Size cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleRec +//go:noescape +func drawRectangleRec( + Rec cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectanglePro +//go:noescape +func drawRectanglePro( + Rec cptr, + Origin cptr, + Rotation float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleGradientV +//go:noescape +func drawRectangleGradientV( + PosX int32, + PosY int32, + Width int32, + Height int32, + Top cptr, + Bottom cptr, +) + +//go:wasmimport _raylib _DrawRectangleGradientH +//go:noescape +func drawRectangleGradientH( + PosX int32, + PosY int32, + Width int32, + Height int32, + Left cptr, + Right cptr, +) + +//go:wasmimport _raylib _DrawRectangleGradientEx +//go:noescape +func drawRectangleGradientEx( + Rec cptr, + TopLeft cptr, + BottomLeft cptr, + BottomRight cptr, + TopRight cptr, +) + +//go:wasmimport _raylib _DrawRectangleLines +//go:noescape +func drawRectangleLines( + PosX int32, + PosY int32, + Width int32, + Height int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleLinesEx +//go:noescape +func drawRectangleLinesEx( + Rec cptr, + LineThick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleRounded +//go:noescape +func drawRectangleRounded( + Rec cptr, + Roundness float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleRoundedLines +//go:noescape +func drawRectangleRoundedLines( + Rec cptr, + Roundness float32, + Segments int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawRectangleRoundedLinesEx +//go:noescape +func drawRectangleRoundedLinesEx( + Rec cptr, + Roundness float32, + Segments int32, + LineThick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangle +//go:noescape +func drawTriangle( + V1 cptr, + V2 cptr, + V3 cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangleLines +//go:noescape +func drawTriangleLines( + V1 cptr, + V2 cptr, + V3 cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangleFan +//go:noescape +func drawTriangleFan( + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangleStrip +//go:noescape +func drawTriangleStrip( + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawPoly +//go:noescape +func drawPoly( + Center cptr, + Sides int32, + Radius float32, + Rotation float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawPolyLines +//go:noescape +func drawPolyLines( + Center cptr, + Sides int32, + Radius float32, + Rotation float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawPolyLinesEx +//go:noescape +func drawPolyLinesEx( + Center cptr, + Sides int32, + Radius float32, + Rotation float32, + LineThick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineLinear +//go:noescape +func drawSplineLinear( + Points cptr, + PointCount int32, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineBasis +//go:noescape +func drawSplineBasis( + Points cptr, + PointCount int32, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineCatmullRom +//go:noescape +func drawSplineCatmullRom( + Points cptr, + PointCount int32, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineBezierQuadratic +//go:noescape +func drawSplineBezierQuadratic( + Points cptr, + PointCount int32, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineBezierCubic +//go:noescape +func drawSplineBezierCubic( + Points cptr, + PointCount int32, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineSegmentLinear +//go:noescape +func drawSplineSegmentLinear( + P1 cptr, + P2 cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineSegmentBasis +//go:noescape +func drawSplineSegmentBasis( + P1 cptr, + P2 cptr, + P3 cptr, + P4 cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineSegmentCatmullRom +//go:noescape +func drawSplineSegmentCatmullRom( + P1 cptr, + P2 cptr, + P3 cptr, + P4 cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineSegmentBezierQuadratic +//go:noescape +func drawSplineSegmentBezierQuadratic( + P1 cptr, + C2 cptr, + P3 cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSplineSegmentBezierCubic +//go:noescape +func drawSplineSegmentBezierCubic( + P1 cptr, + C2 cptr, + C3 cptr, + P4 cptr, + Thick float32, + Color cptr, +) + +//go:wasmimport _raylib _GetSplinePointLinear +//go:noescape +func getSplinePointLinear( + ret cptr, + StartPos cptr, + EndPos cptr, + T float32, +) + +//go:wasmimport _raylib _GetSplinePointBasis +//go:noescape +func getSplinePointBasis( + ret cptr, + P1 cptr, + P2 cptr, + P3 cptr, + P4 cptr, + T float32, +) + +//go:wasmimport _raylib _GetSplinePointCatmullRom +//go:noescape +func getSplinePointCatmullRom( + ret cptr, + P1 cptr, + P2 cptr, + P3 cptr, + P4 cptr, + T float32, +) + +//go:wasmimport _raylib _GetSplinePointBezierQuad +//go:noescape +func getSplinePointBezierQuad( + ret cptr, + P1 cptr, + C2 cptr, + P3 cptr, + T float32, +) + +//go:wasmimport _raylib _GetSplinePointBezierCubic +//go:noescape +func getSplinePointBezierCubic( + ret cptr, + P1 cptr, + C2 cptr, + C3 cptr, + P4 cptr, + T float32, +) + +//go:wasmimport _raylib _CheckCollisionRecs +//go:noescape +func checkCollisionRecs( + ret cptr, + Rec1 cptr, + Rec2 cptr, +) + +//go:wasmimport _raylib _CheckCollisionCircles +//go:noescape +func checkCollisionCircles( + ret cptr, + Center1 cptr, + Radius1 float32, + Center2 cptr, + Radius2 float32, +) + +//go:wasmimport _raylib _CheckCollisionCircleRec +//go:noescape +func checkCollisionCircleRec( + ret cptr, + Center cptr, + Radius float32, + Rec cptr, +) + +//go:wasmimport _raylib _CheckCollisionCircleLine +//go:noescape +func checkCollisionCircleLine( + ret cptr, + Center cptr, + Radius float32, + P1 cptr, + P2 cptr, +) + +//go:wasmimport _raylib _CheckCollisionPointRec +//go:noescape +func checkCollisionPointRec( + ret cptr, + Point cptr, + Rec cptr, +) + +//go:wasmimport _raylib _CheckCollisionPointCircle +//go:noescape +func checkCollisionPointCircle( + ret cptr, + Point cptr, + Center cptr, + Radius float32, +) + +//go:wasmimport _raylib _CheckCollisionPointTriangle +//go:noescape +func checkCollisionPointTriangle( + ret cptr, + Point cptr, + P1 cptr, + P2 cptr, + P3 cptr, +) + +//go:wasmimport _raylib _CheckCollisionPointLine +//go:noescape +func checkCollisionPointLine( + ret cptr, + Point cptr, + P1 cptr, + P2 cptr, + Threshold int32, +) + +//go:wasmimport _raylib _CheckCollisionPointPoly +//go:noescape +func checkCollisionPointPoly( + ret cptr, + Point cptr, + Points cptr, + PointCount int32, +) + +//go:wasmimport _raylib _CheckCollisionLines +//go:noescape +func checkCollisionLines( + ret cptr, + StartPos1 cptr, + EndPos1 cptr, + StartPos2 cptr, + EndPos2 cptr, + CollisionPoint cptr, +) + +//go:wasmimport _raylib _GetCollisionRec +//go:noescape +func getCollisionRec( + ret cptr, + Rec1 cptr, + Rec2 cptr, +) + +//go:wasmimport _raylib _LoadImage +//go:noescape +func loadImage( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadImageRaw +//go:noescape +func loadImageRaw( + ret cptr, + FileName cptr, + Width int32, + Height int32, + Format int32, + HeaderSize int32, +) + +//go:wasmimport _raylib _LoadImageAnim +//go:noescape +func loadImageAnim( + ret cptr, + FileName cptr, + Frames cptr, +) + +//go:wasmimport _raylib _LoadImageAnimFromMemory +//go:noescape +func loadImageAnimFromMemory( + ret cptr, + FileType cptr, + FileData cptr, + DataSize int32, + Frames cptr, +) + +//go:wasmimport _raylib _LoadImageFromMemory +//go:noescape +func loadImageFromMemory( + ret cptr, + FileType cptr, + FileData cptr, + DataSize int32, +) + +//go:wasmimport _raylib _LoadImageFromTexture +//go:noescape +func loadImageFromTexture( + ret cptr, + Texture cptr, +) + +//go:wasmimport _raylib _LoadImageFromScreen +//go:noescape +func loadImageFromScreen( + ret cptr, +) + +//go:wasmimport _raylib _IsImageValid +//go:noescape +func isImageValid( + ret cptr, + Image cptr, +) + +//go:wasmimport _raylib _UnloadImage +//go:noescape +func unloadImage( + Image cptr, +) + +//go:wasmimport _raylib _ExportImage +//go:noescape +func exportImage( + ret cptr, + Image cptr, + FileName cptr, +) + +//go:wasmimport _raylib _ExportImageToMemory +//go:noescape +func exportImageToMemory( + ret cptr, + Image cptr, + FileType cptr, + FileSize cptr, +) + +//go:wasmimport _raylib _ExportImageAsCode +//go:noescape +func exportImageAsCode( + ret cptr, + Image cptr, + FileName cptr, +) + +//go:wasmimport _raylib _GenImageColor +//go:noescape +func genImageColor( + ret cptr, + Width int32, + Height int32, + Color cptr, +) + +//go:wasmimport _raylib _GenImageGradientLinear +//go:noescape +func genImageGradientLinear( + ret cptr, + Width int32, + Height int32, + Direction int32, + Start cptr, + End cptr, +) + +//go:wasmimport _raylib _GenImageGradientRadial +//go:noescape +func genImageGradientRadial( + ret cptr, + Width int32, + Height int32, + Density float32, + Inner cptr, + Outer cptr, +) + +//go:wasmimport _raylib _GenImageGradientSquare +//go:noescape +func genImageGradientSquare( + ret cptr, + Width int32, + Height int32, + Density float32, + Inner cptr, + Outer cptr, +) + +//go:wasmimport _raylib _GenImageChecked +//go:noescape +func genImageChecked( + ret cptr, + Width int32, + Height int32, + ChecksX int32, + ChecksY int32, + Col1 cptr, + Col2 cptr, +) + +//go:wasmimport _raylib _GenImageWhiteNoise +//go:noescape +func genImageWhiteNoise( + ret cptr, + Width int32, + Height int32, + Factor float32, +) + +//go:wasmimport _raylib _GenImagePerlinNoise +//go:noescape +func genImagePerlinNoise( + ret cptr, + Width int32, + Height int32, + OffsetX int32, + OffsetY int32, + Scale float32, +) + +//go:wasmimport _raylib _GenImageCellular +//go:noescape +func genImageCellular( + ret cptr, + Width int32, + Height int32, + TileSize int32, +) + +//go:wasmimport _raylib _GenImageText +//go:noescape +func genImageText( + ret cptr, + Width int32, + Height int32, + Text cptr, +) + +//go:wasmimport _raylib _ImageCopy +//go:noescape +func imageCopy( + ret cptr, + Image cptr, +) + +//go:wasmimport _raylib _ImageFromImage +//go:noescape +func imageFromImage( + ret cptr, + Image cptr, + Rec cptr, +) + +//go:wasmimport _raylib _ImageFromChannel +//go:noescape +func imageFromChannel( + ret cptr, + Image cptr, + SelectedChannel int32, +) + +//go:wasmimport _raylib _ImageText +//go:noescape +func imageText( + ret cptr, + Text cptr, + FontSize int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageTextEx +//go:noescape +func imageTextEx( + ret cptr, + Font cptr, + Text cptr, + FontSize float32, + Spacing float32, + Tint cptr, +) + +//go:wasmimport _raylib _ImageFormat +//go:noescape +func imageFormat( + Image cptr, + NewFormat int32, +) + +//go:wasmimport _raylib _ImageToPOT +//go:noescape +func imageToPOT( + Image cptr, + Fill cptr, +) + +//go:wasmimport _raylib _ImageCrop +//go:noescape +func imageCrop( + Image cptr, + Crop cptr, +) + +//go:wasmimport _raylib _ImageAlphaCrop +//go:noescape +func imageAlphaCrop( + Image cptr, + Threshold float32, +) + +//go:wasmimport _raylib _ImageAlphaClear +//go:noescape +func imageAlphaClear( + Image cptr, + Color cptr, + Threshold float32, +) + +//go:wasmimport _raylib _ImageAlphaMask +//go:noescape +func imageAlphaMask( + Image cptr, + AlphaMask cptr, +) + +//go:wasmimport _raylib _ImageAlphaPremultiply +//go:noescape +func imageAlphaPremultiply( + Image cptr, +) + +//go:wasmimport _raylib _ImageBlurGaussian +//go:noescape +func imageBlurGaussian( + Image cptr, + BlurSize int32, +) + +//go:wasmimport _raylib _ImageKernelConvolution +//go:noescape +func imageKernelConvolution( + Image cptr, + Kernel cptr, + KernelSize int32, +) + +//go:wasmimport _raylib _ImageResize +//go:noescape +func imageResize( + Image cptr, + NewWidth int32, + NewHeight int32, +) + +//go:wasmimport _raylib _ImageResizeNN +//go:noescape +func imageResizeNN( + Image cptr, + NewWidth int32, + NewHeight int32, +) + +//go:wasmimport _raylib _ImageResizeCanvas +//go:noescape +func imageResizeCanvas( + Image cptr, + NewWidth int32, + NewHeight int32, + OffsetX int32, + OffsetY int32, + Fill cptr, +) + +//go:wasmimport _raylib _ImageMipmaps +//go:noescape +func imageMipmaps( + Image cptr, +) + +//go:wasmimport _raylib _ImageDither +//go:noescape +func imageDither( + Image cptr, + RBpp int32, + GBpp int32, + BBpp int32, + ABpp int32, +) + +//go:wasmimport _raylib _ImageFlipVertical +//go:noescape +func imageFlipVertical( + Image cptr, +) + +//go:wasmimport _raylib _ImageFlipHorizontal +//go:noescape +func imageFlipHorizontal( + Image cptr, +) + +//go:wasmimport _raylib _ImageRotate +//go:noescape +func imageRotate( + Image cptr, + Degrees int32, +) + +//go:wasmimport _raylib _ImageRotateCW +//go:noescape +func imageRotateCW( + Image cptr, +) + +//go:wasmimport _raylib _ImageRotateCCW +//go:noescape +func imageRotateCCW( + Image cptr, +) + +//go:wasmimport _raylib _ImageColorTint +//go:noescape +func imageColorTint( + Image cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageColorInvert +//go:noescape +func imageColorInvert( + Image cptr, +) + +//go:wasmimport _raylib _ImageColorGrayscale +//go:noescape +func imageColorGrayscale( + Image cptr, +) + +//go:wasmimport _raylib _ImageColorContrast +//go:noescape +func imageColorContrast( + Image cptr, + Contrast float32, +) + +//go:wasmimport _raylib _ImageColorBrightness +//go:noescape +func imageColorBrightness( + Image cptr, + Brightness int32, +) + +//go:wasmimport _raylib _ImageColorReplace +//go:noescape +func imageColorReplace( + Image cptr, + Color cptr, + Replace cptr, +) + +//go:wasmimport _raylib _LoadImageColors +//go:noescape +func loadImageColors( + ret cptr, + Image cptr, +) + +//go:wasmimport _raylib _LoadImagePalette +//go:noescape +func loadImagePalette( + ret cptr, + Image cptr, + MaxPaletteSize int32, + ColorCount cptr, +) + +//go:wasmimport _raylib _UnloadImageColors +//go:noescape +func unloadImageColors( + Colors cptr, +) + +//go:wasmimport _raylib _UnloadImagePalette +//go:noescape +func unloadImagePalette( + Colors cptr, +) + +//go:wasmimport _raylib _GetImageAlphaBorder +//go:noescape +func getImageAlphaBorder( + ret cptr, + Image cptr, + Threshold float32, +) + +//go:wasmimport _raylib _GetImageColor +//go:noescape +func getImageColor( + ret cptr, + Image cptr, + X int32, + Y int32, +) + +//go:wasmimport _raylib _ImageClearBackground +//go:noescape +func imageClearBackground( + Dst cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawPixel +//go:noescape +func imageDrawPixel( + Dst cptr, + PosX int32, + PosY int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawPixelV +//go:noescape +func imageDrawPixelV( + Dst cptr, + Position cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawLine +//go:noescape +func imageDrawLine( + Dst cptr, + StartPosX int32, + StartPosY int32, + EndPosX int32, + EndPosY int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawLineV +//go:noescape +func imageDrawLineV( + Dst cptr, + Start cptr, + End cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawLineEx +//go:noescape +func imageDrawLineEx( + Dst cptr, + Start cptr, + End cptr, + Thick int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawCircle +//go:noescape +func imageDrawCircle( + Dst cptr, + CenterX int32, + CenterY int32, + Radius int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawCircleV +//go:noescape +func imageDrawCircleV( + Dst cptr, + Center cptr, + Radius int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawCircleLines +//go:noescape +func imageDrawCircleLines( + Dst cptr, + CenterX int32, + CenterY int32, + Radius int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawCircleLinesV +//go:noescape +func imageDrawCircleLinesV( + Dst cptr, + Center cptr, + Radius int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawRectangle +//go:noescape +func imageDrawRectangle( + Dst cptr, + PosX int32, + PosY int32, + Width int32, + Height int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawRectangleV +//go:noescape +func imageDrawRectangleV( + Dst cptr, + Position cptr, + Size cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawRectangleRec +//go:noescape +func imageDrawRectangleRec( + Dst cptr, + Rec cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawRectangleLines +//go:noescape +func imageDrawRectangleLines( + Dst cptr, + Rec cptr, + Thick int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawTriangle +//go:noescape +func imageDrawTriangle( + Dst cptr, + V1 cptr, + V2 cptr, + V3 cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawTriangleEx +//go:noescape +func imageDrawTriangleEx( + Dst cptr, + V1 cptr, + V2 cptr, + V3 cptr, + C1 cptr, + C2 cptr, + C3 cptr, +) + +//go:wasmimport _raylib _ImageDrawTriangleLines +//go:noescape +func imageDrawTriangleLines( + Dst cptr, + V1 cptr, + V2 cptr, + V3 cptr, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawTriangleFan +//go:noescape +func imageDrawTriangleFan( + Dst cptr, + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawTriangleStrip +//go:noescape +func imageDrawTriangleStrip( + Dst cptr, + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDraw +//go:noescape +func imageDraw( + Dst cptr, + Src cptr, + SrcRec cptr, + DstRec cptr, + Tint cptr, +) + +//go:wasmimport _raylib _ImageDrawText +//go:noescape +func imageDrawText( + Dst cptr, + Text cptr, + PosX int32, + PosY int32, + FontSize int32, + Color cptr, +) + +//go:wasmimport _raylib _ImageDrawTextEx +//go:noescape +func imageDrawTextEx( + Dst cptr, + Font cptr, + Text cptr, + Position cptr, + FontSize float32, + Spacing float32, + Tint cptr, +) + +//go:wasmimport _raylib _LoadTexture +//go:noescape +func loadTexture( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadTextureFromImage +//go:noescape +func loadTextureFromImage( + ret cptr, + Image cptr, +) + +//go:wasmimport _raylib _LoadTextureCubemap +//go:noescape +func loadTextureCubemap( + ret cptr, + Image cptr, + Layout int32, +) + +//go:wasmimport _raylib _LoadRenderTexture +//go:noescape +func loadRenderTexture( + ret cptr, + Width int32, + Height int32, +) + +//go:wasmimport _raylib _IsTextureValid +//go:noescape +func isTextureValid( + ret cptr, + Texture cptr, +) + +//go:wasmimport _raylib _UnloadTexture +//go:noescape +func unloadTexture( + Texture cptr, +) + +//go:wasmimport _raylib _IsRenderTextureValid +//go:noescape +func isRenderTextureValid( + ret cptr, + Target cptr, +) + +//go:wasmimport _raylib _UnloadRenderTexture +//go:noescape +func unloadRenderTexture( + Target cptr, +) + +//go:wasmimport _raylib _UpdateTexture +//go:noescape +func updateTexture( + Texture cptr, + Pixels cptr, +) + +//go:wasmimport _raylib _UpdateTextureRec +//go:noescape +func updateTextureRec( + Texture cptr, + Rec cptr, + Pixels cptr, +) + +//go:wasmimport _raylib _GenTextureMipmaps +//go:noescape +func genTextureMipmaps( + Texture cptr, +) + +//go:wasmimport _raylib _SetTextureFilter +//go:noescape +func setTextureFilter( + Texture cptr, + Filter int32, +) + +//go:wasmimport _raylib _SetTextureWrap +//go:noescape +func setTextureWrap( + Texture cptr, + Wrap int32, +) + +//go:wasmimport _raylib _DrawTexture +//go:noescape +func drawTexture( + Texture cptr, + PosX int32, + PosY int32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextureV +//go:noescape +func drawTextureV( + Texture cptr, + Position cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextureEx +//go:noescape +func drawTextureEx( + Texture cptr, + Position cptr, + Rotation float32, + Scale float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextureRec +//go:noescape +func drawTextureRec( + Texture cptr, + Source cptr, + Position cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTexturePro +//go:noescape +func drawTexturePro( + Texture cptr, + Source cptr, + Dest cptr, + Origin cptr, + Rotation float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextureNPatch +//go:noescape +func drawTextureNPatch( + Texture cptr, + NPatchInfo cptr, + Dest cptr, + Origin cptr, + Rotation float32, + Tint cptr, +) + +//go:wasmimport _raylib _ColorIsEqual +//go:noescape +func colorIsEqual( + ret cptr, + Col1 cptr, + Col2 cptr, +) + +//go:wasmimport _raylib _Fade +//go:noescape +func fade( + ret cptr, + Color cptr, + Alpha float32, +) + +//go:wasmimport _raylib _ColorToInt +//go:noescape +func colorToInt( + ret int32, + Color cptr, +) + +//go:wasmimport _raylib _ColorNormalize +//go:noescape +func colorNormalize( + ret cptr, + Color cptr, +) + +//go:wasmimport _raylib _ColorFromNormalized +//go:noescape +func colorFromNormalized( + ret cptr, + Normalized cptr, +) + +//go:wasmimport _raylib _ColorToHSV +//go:noescape +func colorToHSV( + ret cptr, + Color cptr, +) + +//go:wasmimport _raylib _ColorFromHSV +//go:noescape +func colorFromHSV( + ret cptr, + Hue float32, + Saturation float32, + Value float32, +) + +//go:wasmimport _raylib _ColorTint +//go:noescape +func colorTint( + ret cptr, + Color cptr, + Tint cptr, +) + +//go:wasmimport _raylib _ColorBrightness +//go:noescape +func colorBrightness( + ret cptr, + Color cptr, + Factor float32, +) + +//go:wasmimport _raylib _ColorContrast +//go:noescape +func colorContrast( + ret cptr, + Color cptr, + Contrast float32, +) + +//go:wasmimport _raylib _ColorAlpha +//go:noescape +func colorAlpha( + ret cptr, + Color cptr, + Alpha float32, +) + +//go:wasmimport _raylib _ColorAlphaBlend +//go:noescape +func colorAlphaBlend( + ret cptr, + Dst cptr, + Src cptr, + Tint cptr, +) + +//go:wasmimport _raylib _ColorLerp +//go:noescape +func colorLerp( + ret cptr, + Color1 cptr, + Color2 cptr, + Factor float32, +) + +//go:wasmimport _raylib _GetColor +//go:noescape +func getColor( + ret cptr, + HexValue uint32, +) + +//go:wasmimport _raylib _GetPixelColor +//go:noescape +func getPixelColor( + ret cptr, + SrcPtr cptr, + Format int32, +) + +//go:wasmimport _raylib _SetPixelColor +//go:noescape +func setPixelColor( + DstPtr cptr, + Color cptr, + Format int32, +) + +//go:wasmimport _raylib _GetPixelDataSize +//go:noescape +func getPixelDataSize( + ret int32, + Width int32, + Height int32, + Format int32, +) + +//go:wasmimport _raylib _GetFontDefault +//go:noescape +func getFontDefault( + ret cptr, +) + +//go:wasmimport _raylib _LoadFont +//go:noescape +func loadFont( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadFontEx +//go:noescape +func loadFontEx( + ret cptr, + FileName cptr, + FontSize int32, + Codepoints cptr, + CodepointCount int32, +) + +//go:wasmimport _raylib _LoadFontFromImage +//go:noescape +func loadFontFromImage( + ret cptr, + Image cptr, + Key cptr, + FirstChar int32, +) + +//go:wasmimport _raylib _LoadFontFromMemory +//go:noescape +func loadFontFromMemory( + ret cptr, + FileType cptr, + FileData cptr, + DataSize int32, + FontSize int32, + Codepoints cptr, + CodepointCount int32, +) + +//go:wasmimport _raylib _IsFontValid +//go:noescape +func isFontValid( + ret cptr, + Font cptr, +) + +//go:wasmimport _raylib _LoadFontData +//go:noescape +func loadFontData( + ret cptr, + FileData cptr, + DataSize int32, + FontSize int32, + Codepoints cptr, + CodepointCount int32, + Type int32, + GlyphCount cptr, +) + +//go:wasmimport _raylib _GenImageFontAtlas +//go:noescape +func genImageFontAtlas( + ret cptr, + Glyphs cptr, + GlyphRecs cptr, + GlyphCount int32, + FontSize int32, + Padding int32, + PackMethod int32, +) + +//go:wasmimport _raylib _UnloadFontData +//go:noescape +func unloadFontData( + Glyphs cptr, + GlyphCount int32, +) + +//go:wasmimport _raylib _UnloadFont +//go:noescape +func unloadFont( + Font cptr, +) + +//go:wasmimport _raylib _ExportFontAsCode +//go:noescape +func exportFontAsCode( + ret cptr, + Font cptr, + FileName cptr, +) + +//go:wasmimport _raylib _DrawFPS +//go:noescape +func drawFPS( + PosX int32, + PosY int32, +) + +//go:wasmimport _raylib _DrawText +//go:noescape +func drawText( + Text cptr, + PosX int32, + PosY int32, + FontSize int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawTextEx +//go:noescape +func drawTextEx( + Font cptr, + Text cptr, + Position cptr, + FontSize float32, + Spacing float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextPro +//go:noescape +func drawTextPro( + Font cptr, + Text cptr, + Position cptr, + Origin cptr, + Rotation float32, + FontSize float32, + Spacing float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextCodepoint +//go:noescape +func drawTextCodepoint( + Font cptr, + Codepoint int32, + Position cptr, + FontSize float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawTextCodepoints +//go:noescape +func drawTextCodepoints( + Font cptr, + Codepoints cptr, + CodepointCount int32, + Position cptr, + FontSize float32, + Spacing float32, + Tint cptr, +) + +//go:wasmimport _raylib _SetTextLineSpacing +//go:noescape +func setTextLineSpacing( + Spacing int32, +) + +//go:wasmimport _raylib _MeasureText +//go:noescape +func measureText( + ret int32, + Text cptr, + FontSize int32, +) + +//go:wasmimport _raylib _MeasureTextEx +//go:noescape +func measureTextEx( + ret cptr, + Font cptr, + Text cptr, + FontSize float32, + Spacing float32, +) + +//go:wasmimport _raylib _GetGlyphIndex +//go:noescape +func getGlyphIndex( + ret int32, + Font cptr, + Codepoint int32, +) + +//go:wasmimport _raylib _GetGlyphInfo +//go:noescape +func getGlyphInfo( + ret cptr, + Font cptr, + Codepoint int32, +) + +//go:wasmimport _raylib _GetGlyphAtlasRec +//go:noescape +func getGlyphAtlasRec( + ret cptr, + Font cptr, + Codepoint int32, +) + +//go:wasmimport _raylib _LoadUTF8 +//go:noescape +func loadUTF8( + ret cptr, + Codepoints cptr, + Length int32, +) + +//go:wasmimport _raylib _UnloadUTF8 +//go:noescape +func unloadUTF8( + Text cptr, +) + +//go:wasmimport _raylib _LoadCodepoints +//go:noescape +func loadCodepoints( + ret cptr, + Text cptr, + Count cptr, +) + +//go:wasmimport _raylib _UnloadCodepoints +//go:noescape +func unloadCodepoints( + Codepoints cptr, +) + +//go:wasmimport _raylib _GetCodepointCount +//go:noescape +func getCodepointCount( + ret int32, + Text cptr, +) + +//go:wasmimport _raylib _GetCodepoint +//go:noescape +func getCodepoint( + ret int32, + Text cptr, + CodepointSize cptr, +) + +//go:wasmimport _raylib _GetCodepointNext +//go:noescape +func getCodepointNext( + ret int32, + Text cptr, + CodepointSize cptr, +) + +//go:wasmimport _raylib _GetCodepointPrevious +//go:noescape +func getCodepointPrevious( + ret int32, + Text cptr, + CodepointSize cptr, +) + +//go:wasmimport _raylib _CodepointToUTF8 +//go:noescape +func codepointToUTF8( + ret cptr, + Codepoint int32, + Utf8Size cptr, +) + +//go:wasmimport _raylib _LoadTextLines +//go:noescape +func loadTextLines( + ret cptr, + Text cptr, + Count cptr, +) + +//go:wasmimport _raylib _UnloadTextLines +//go:noescape +func unloadTextLines( + Text cptr, + LineCount int32, +) + +//go:wasmimport _raylib _TextCopy +//go:noescape +func textCopy( + ret int32, + Dst cptr, + Src cptr, +) + +//go:wasmimport _raylib _TextIsEqual +//go:noescape +func textIsEqual( + ret cptr, + Text1 cptr, + Text2 cptr, +) + +//go:wasmimport _raylib _TextLength +//go:noescape +func textLength( + ret uint32, + Text cptr, +) + +//go:wasmimport _raylib _TextFormat +//go:noescape +func textFormat( + ret cptr, + Text cptr, + Args cptr, +) + +//go:wasmimport _raylib _TextSubtext +//go:noescape +func textSubtext( + ret cptr, + Text cptr, + Position int32, + Length int32, +) + +//go:wasmimport _raylib _TextRemoveSpaces +//go:noescape +func textRemoveSpaces( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _GetTextBetween +//go:noescape +func getTextBetween( + ret cptr, + Text cptr, + Begin cptr, + End cptr, +) + +//go:wasmimport _raylib _TextReplace +//go:noescape +func textReplace( + ret cptr, + Text cptr, + Search cptr, + Replacement cptr, +) + +//go:wasmimport _raylib _TextReplaceBetween +//go:noescape +func textReplaceBetween( + ret cptr, + Text cptr, + Begin cptr, + End cptr, + Replacement cptr, +) + +//go:wasmimport _raylib _TextInsert +//go:noescape +func textInsert( + ret cptr, + Text cptr, + Insert cptr, + Position int32, +) + +//go:wasmimport _raylib _TextJoin +//go:noescape +func textJoin( + ret cptr, + TextList cptr, + Count int32, + Delimiter cptr, +) + +//go:wasmimport _raylib _TextSplit +//go:noescape +func textSplit( + ret cptr, + Text cptr, + Delimiter byte, + Count cptr, +) + +//go:wasmimport _raylib _TextAppend +//go:noescape +func textAppend( + Text cptr, + Append cptr, + Position cptr, +) + +//go:wasmimport _raylib _TextFindIndex +//go:noescape +func textFindIndex( + ret int32, + Text cptr, + Search cptr, +) + +//go:wasmimport _raylib _TextToUpper +//go:noescape +func textToUpper( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _TextToLower +//go:noescape +func textToLower( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _TextToPascal +//go:noescape +func textToPascal( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _TextToSnake +//go:noescape +func textToSnake( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _TextToCamel +//go:noescape +func textToCamel( + ret cptr, + Text cptr, +) + +//go:wasmimport _raylib _TextToInteger +//go:noescape +func textToInteger( + ret int32, + Text cptr, +) + +//go:wasmimport _raylib _TextToFloat +//go:noescape +func textToFloat( + ret float32, + Text cptr, +) + +//go:wasmimport _raylib _DrawLine3D +//go:noescape +func drawLine3D( + StartPos cptr, + EndPos cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawPoint3D +//go:noescape +func drawPoint3D( + Position cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawCircle3D +//go:noescape +func drawCircle3D( + Center cptr, + Radius float32, + RotationAxis cptr, + RotationAngle float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangle3D +//go:noescape +func drawTriangle3D( + V1 cptr, + V2 cptr, + V3 cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawTriangleStrip3D +//go:noescape +func drawTriangleStrip3D( + Points cptr, + PointCount int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCube +//go:noescape +func drawCube( + Position cptr, + Width float32, + Height float32, + Length float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCubeV +//go:noescape +func drawCubeV( + Position cptr, + Size cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawCubeWires +//go:noescape +func drawCubeWires( + Position cptr, + Width float32, + Height float32, + Length float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCubeWiresV +//go:noescape +func drawCubeWiresV( + Position cptr, + Size cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawSphere +//go:noescape +func drawSphere( + CenterPos cptr, + Radius float32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSphereEx +//go:noescape +func drawSphereEx( + CenterPos cptr, + Radius float32, + Rings int32, + Slices int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawSphereWires +//go:noescape +func drawSphereWires( + CenterPos cptr, + Radius float32, + Rings int32, + Slices int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCylinder +//go:noescape +func drawCylinder( + Position cptr, + RadiusTop float32, + RadiusBottom float32, + Height float32, + Slices int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCylinderEx +//go:noescape +func drawCylinderEx( + StartPos cptr, + EndPos cptr, + StartRadius float32, + EndRadius float32, + Sides int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCylinderWires +//go:noescape +func drawCylinderWires( + Position cptr, + RadiusTop float32, + RadiusBottom float32, + Height float32, + Slices int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCylinderWiresEx +//go:noescape +func drawCylinderWiresEx( + StartPos cptr, + EndPos cptr, + StartRadius float32, + EndRadius float32, + Sides int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCapsule +//go:noescape +func drawCapsule( + StartPos cptr, + EndPos cptr, + Radius float32, + Slices int32, + Rings int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawCapsuleWires +//go:noescape +func drawCapsuleWires( + StartPos cptr, + EndPos cptr, + Radius float32, + Slices int32, + Rings int32, + Color cptr, +) + +//go:wasmimport _raylib _DrawPlane +//go:noescape +func drawPlane( + CenterPos cptr, + Size cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawRay +//go:noescape +func drawRay( + Ray cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawGrid +//go:noescape +func drawGrid( + Slices int32, + Spacing float32, +) + +//go:wasmimport _raylib _LoadModel +//go:noescape +func loadModel( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadModelFromMesh +//go:noescape +func loadModelFromMesh( + ret cptr, + Mesh cptr, +) + +//go:wasmimport _raylib _IsModelValid +//go:noescape +func isModelValid( + ret cptr, + Model cptr, +) + +//go:wasmimport _raylib _UnloadModel +//go:noescape +func unloadModel( + Model cptr, +) + +//go:wasmimport _raylib _GetModelBoundingBox +//go:noescape +func getModelBoundingBox( + ret cptr, + Model cptr, +) + +//go:wasmimport _raylib _DrawModel +//go:noescape +func drawModel( + Model cptr, + Position cptr, + Scale float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawModelEx +//go:noescape +func drawModelEx( + Model cptr, + Position cptr, + RotationAxis cptr, + RotationAngle float32, + Scale cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawModelWires +//go:noescape +func drawModelWires( + Model cptr, + Position cptr, + Scale float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawModelWiresEx +//go:noescape +func drawModelWiresEx( + Model cptr, + Position cptr, + RotationAxis cptr, + RotationAngle float32, + Scale cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawModelPoints +//go:noescape +func drawModelPoints( + Model cptr, + Position cptr, + Scale float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawModelPointsEx +//go:noescape +func drawModelPointsEx( + Model cptr, + Position cptr, + RotationAxis cptr, + RotationAngle float32, + Scale cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawBoundingBox +//go:noescape +func drawBoundingBox( + Box cptr, + Color cptr, +) + +//go:wasmimport _raylib _DrawBillboard +//go:noescape +func drawBillboard( + Camera cptr, + Texture cptr, + Position cptr, + Scale float32, + Tint cptr, +) + +//go:wasmimport _raylib _DrawBillboardRec +//go:noescape +func drawBillboardRec( + Camera cptr, + Texture cptr, + Source cptr, + Position cptr, + Size cptr, + Tint cptr, +) + +//go:wasmimport _raylib _DrawBillboardPro +//go:noescape +func drawBillboardPro( + Camera cptr, + Texture cptr, + Source cptr, + Position cptr, + Up cptr, + Size cptr, + Origin cptr, + Rotation float32, + Tint cptr, +) + +//go:wasmimport _raylib _UploadMesh +//go:noescape +func uploadMesh( + Mesh cptr, + Dynamic cptr, +) + +//go:wasmimport _raylib _UpdateMeshBuffer +//go:noescape +func updateMeshBuffer( + Mesh cptr, + Index int32, + Data cptr, + DataSize int32, + Offset int32, +) + +//go:wasmimport _raylib _UnloadMesh +//go:noescape +func unloadMesh( + Mesh cptr, +) + +//go:wasmimport _raylib _DrawMesh +//go:noescape +func drawMesh( + Mesh cptr, + Material cptr, + Transform cptr, +) + +//go:wasmimport _raylib _DrawMeshInstanced +//go:noescape +func drawMeshInstanced( + Mesh cptr, + Material cptr, + Transforms cptr, + Instances int32, +) + +//go:wasmimport _raylib _GetMeshBoundingBox +//go:noescape +func getMeshBoundingBox( + ret cptr, + Mesh cptr, +) + +//go:wasmimport _raylib _GenMeshTangents +//go:noescape +func genMeshTangents( + Mesh cptr, +) + +//go:wasmimport _raylib _ExportMesh +//go:noescape +func exportMesh( + ret cptr, + Mesh cptr, + FileName cptr, +) + +//go:wasmimport _raylib _ExportMeshAsCode +//go:noescape +func exportMeshAsCode( + ret cptr, + Mesh cptr, + FileName cptr, +) + +//go:wasmimport _raylib _GenMeshPoly +//go:noescape +func genMeshPoly( + ret cptr, + Sides int32, + Radius float32, +) + +//go:wasmimport _raylib _GenMeshPlane +//go:noescape +func genMeshPlane( + ret cptr, + Width float32, + Length float32, + ResX int32, + ResZ int32, +) + +//go:wasmimport _raylib _GenMeshCube +//go:noescape +func genMeshCube( + ret cptr, + Width float32, + Height float32, + Length float32, +) + +//go:wasmimport _raylib _GenMeshSphere +//go:noescape +func genMeshSphere( + ret cptr, + Radius float32, + Rings int32, + Slices int32, +) + +//go:wasmimport _raylib _GenMeshHemiSphere +//go:noescape +func genMeshHemiSphere( + ret cptr, + Radius float32, + Rings int32, + Slices int32, +) + +//go:wasmimport _raylib _GenMeshCylinder +//go:noescape +func genMeshCylinder( + ret cptr, + Radius float32, + Height float32, + Slices int32, +) + +//go:wasmimport _raylib _GenMeshCone +//go:noescape +func genMeshCone( + ret cptr, + Radius float32, + Height float32, + Slices int32, +) + +//go:wasmimport _raylib _GenMeshTorus +//go:noescape +func genMeshTorus( + ret cptr, + Radius float32, + Size float32, + RadSeg int32, + Sides int32, +) + +//go:wasmimport _raylib _GenMeshKnot +//go:noescape +func genMeshKnot( + ret cptr, + Radius float32, + Size float32, + RadSeg int32, + Sides int32, +) + +//go:wasmimport _raylib _GenMeshHeightmap +//go:noescape +func genMeshHeightmap( + ret cptr, + Heightmap cptr, + Size cptr, +) + +//go:wasmimport _raylib _GenMeshCubicmap +//go:noescape +func genMeshCubicmap( + ret cptr, + Cubicmap cptr, + CubeSize cptr, +) + +//go:wasmimport _raylib _LoadMaterials +//go:noescape +func loadMaterials( + ret cptr, + FileName cptr, + MaterialCount cptr, +) + +//go:wasmimport _raylib _LoadMaterialDefault +//go:noescape +func loadMaterialDefault( + ret cptr, +) + +//go:wasmimport _raylib _IsMaterialValid +//go:noescape +func isMaterialValid( + ret cptr, + Material cptr, +) + +//go:wasmimport _raylib _UnloadMaterial +//go:noescape +func unloadMaterial( + Material cptr, +) + +//go:wasmimport _raylib _SetMaterialTexture +//go:noescape +func setMaterialTexture( + Material cptr, + MapType int32, + Texture cptr, +) + +//go:wasmimport _raylib _SetModelMeshMaterial +//go:noescape +func setModelMeshMaterial( + Model cptr, + MeshId int32, + MaterialId int32, +) + +//go:wasmimport _raylib _LoadModelAnimations +//go:noescape +func loadModelAnimations( + ret cptr, + FileName cptr, + AnimCount cptr, +) + +//go:wasmimport _raylib _UpdateModelAnimation +//go:noescape +func updateModelAnimation( + Model cptr, + Anim cptr, + Frame int32, +) + +//go:wasmimport _raylib _UpdateModelAnimationBones +//go:noescape +func updateModelAnimationBones( + Model cptr, + Anim cptr, + Frame int32, +) + +//go:wasmimport _raylib _UnloadModelAnimation +//go:noescape +func unloadModelAnimation( + Anim cptr, +) + +//go:wasmimport _raylib _UnloadModelAnimations +//go:noescape +func unloadModelAnimations( + Animations cptr, + AnimCount int32, +) + +//go:wasmimport _raylib _IsModelAnimationValid +//go:noescape +func isModelAnimationValid( + ret cptr, + Model cptr, + Anim cptr, +) + +//go:wasmimport _raylib _CheckCollisionSpheres +//go:noescape +func checkCollisionSpheres( + ret cptr, + Center1 cptr, + Radius1 float32, + Center2 cptr, + Radius2 float32, +) + +//go:wasmimport _raylib _CheckCollisionBoxes +//go:noescape +func checkCollisionBoxes( + ret cptr, + Box1 cptr, + Box2 cptr, +) + +//go:wasmimport _raylib _CheckCollisionBoxSphere +//go:noescape +func checkCollisionBoxSphere( + ret cptr, + Box cptr, + Center cptr, + Radius float32, +) + +//go:wasmimport _raylib _GetRayCollisionSphere +//go:noescape +func getRayCollisionSphere( + ret cptr, + Ray cptr, + Center cptr, + Radius float32, +) + +//go:wasmimport _raylib _GetRayCollisionBox +//go:noescape +func getRayCollisionBox( + ret cptr, + Ray cptr, + Box cptr, +) + +//go:wasmimport _raylib _GetRayCollisionMesh +//go:noescape +func getRayCollisionMesh( + ret cptr, + Ray cptr, + Mesh cptr, + Transform cptr, +) + +//go:wasmimport _raylib _GetRayCollisionTriangle +//go:noescape +func getRayCollisionTriangle( + ret cptr, + Ray cptr, + P1 cptr, + P2 cptr, + P3 cptr, +) + +//go:wasmimport _raylib _GetRayCollisionQuad +//go:noescape +func getRayCollisionQuad( + ret cptr, + Ray cptr, + P1 cptr, + P2 cptr, + P3 cptr, + P4 cptr, +) + +//go:wasmimport _raylib _InitAudioDevice +//go:noescape +func initAudioDevice() + +//go:wasmimport _raylib _CloseAudioDevice +//go:noescape +func closeAudioDevice() + +//go:wasmimport _raylib _IsAudioDeviceReady +//go:noescape +func isAudioDeviceReady( + ret cptr, +) + +//go:wasmimport _raylib _SetMasterVolume +//go:noescape +func setMasterVolume( + Volume float32, +) + +//go:wasmimport _raylib _GetMasterVolume +//go:noescape +func getMasterVolume( + ret float32, +) + +//go:wasmimport _raylib _LoadWave +//go:noescape +func loadWave( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadWaveFromMemory +//go:noescape +func loadWaveFromMemory( + ret cptr, + FileType cptr, + FileData cptr, + DataSize int32, +) + +//go:wasmimport _raylib _IsWaveValid +//go:noescape +func isWaveValid( + ret cptr, + Wave cptr, +) + +//go:wasmimport _raylib _LoadSound +//go:noescape +func loadSound( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadSoundFromWave +//go:noescape +func loadSoundFromWave( + ret cptr, + Wave cptr, +) + +//go:wasmimport _raylib _LoadSoundAlias +//go:noescape +func loadSoundAlias( + ret cptr, + Source cptr, +) + +//go:wasmimport _raylib _IsSoundValid +//go:noescape +func isSoundValid( + ret cptr, + Sound cptr, +) + +//go:wasmimport _raylib _UpdateSound +//go:noescape +func updateSound( + Sound cptr, + Data cptr, + SampleCount int32, +) + +//go:wasmimport _raylib _UnloadWave +//go:noescape +func unloadWave( + Wave cptr, +) + +//go:wasmimport _raylib _UnloadSound +//go:noescape +func unloadSound( + Sound cptr, +) + +//go:wasmimport _raylib _UnloadSoundAlias +//go:noescape +func unloadSoundAlias( + Alias cptr, +) + +//go:wasmimport _raylib _ExportWave +//go:noescape +func exportWave( + ret cptr, + Wave cptr, + FileName cptr, +) + +//go:wasmimport _raylib _ExportWaveAsCode +//go:noescape +func exportWaveAsCode( + ret cptr, + Wave cptr, + FileName cptr, +) + +//go:wasmimport _raylib _PlaySound +//go:noescape +func playSound( + Sound cptr, +) + +//go:wasmimport _raylib _StopSound +//go:noescape +func stopSound( + Sound cptr, +) + +//go:wasmimport _raylib _PauseSound +//go:noescape +func pauseSound( + Sound cptr, +) + +//go:wasmimport _raylib _ResumeSound +//go:noescape +func resumeSound( + Sound cptr, +) + +//go:wasmimport _raylib _IsSoundPlaying +//go:noescape +func isSoundPlaying( + ret cptr, + Sound cptr, +) + +//go:wasmimport _raylib _SetSoundVolume +//go:noescape +func setSoundVolume( + Sound cptr, + Volume float32, +) + +//go:wasmimport _raylib _SetSoundPitch +//go:noescape +func setSoundPitch( + Sound cptr, + Pitch float32, +) + +//go:wasmimport _raylib _SetSoundPan +//go:noescape +func setSoundPan( + Sound cptr, + Pan float32, +) + +//go:wasmimport _raylib _WaveCopy +//go:noescape +func waveCopy( + ret cptr, + Wave cptr, +) + +//go:wasmimport _raylib _WaveCrop +//go:noescape +func waveCrop( + Wave cptr, + InitFrame int32, + FinalFrame int32, +) + +//go:wasmimport _raylib _WaveFormat +//go:noescape +func waveFormat( + Wave cptr, + SampleRate int32, + SampleSize int32, + Channels int32, +) + +//go:wasmimport _raylib _LoadWaveSamples +//go:noescape +func loadWaveSamples( + ret cptr, + Wave cptr, +) + +//go:wasmimport _raylib _UnloadWaveSamples +//go:noescape +func unloadWaveSamples( + Samples cptr, +) + +//go:wasmimport _raylib _LoadMusicStream +//go:noescape +func loadMusicStream( + ret cptr, + FileName cptr, +) + +//go:wasmimport _raylib _LoadMusicStreamFromMemory +//go:noescape +func loadMusicStreamFromMemory( + ret cptr, + FileType cptr, + Data cptr, + DataSize int32, +) + +//go:wasmimport _raylib _IsMusicValid +//go:noescape +func isMusicValid( + ret cptr, + Music cptr, +) + +//go:wasmimport _raylib _UnloadMusicStream +//go:noescape +func unloadMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _PlayMusicStream +//go:noescape +func playMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _IsMusicStreamPlaying +//go:noescape +func isMusicStreamPlaying( + ret cptr, + Music cptr, +) + +//go:wasmimport _raylib _UpdateMusicStream +//go:noescape +func updateMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _StopMusicStream +//go:noescape +func stopMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _PauseMusicStream +//go:noescape +func pauseMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _ResumeMusicStream +//go:noescape +func resumeMusicStream( + Music cptr, +) + +//go:wasmimport _raylib _SeekMusicStream +//go:noescape +func seekMusicStream( + Music cptr, + Position float32, +) + +//go:wasmimport _raylib _SetMusicVolume +//go:noescape +func setMusicVolume( + Music cptr, + Volume float32, +) + +//go:wasmimport _raylib _SetMusicPitch +//go:noescape +func setMusicPitch( + Music cptr, + Pitch float32, +) + +//go:wasmimport _raylib _SetMusicPan +//go:noescape +func setMusicPan( + Music cptr, + Pan float32, +) + +//go:wasmimport _raylib _GetMusicTimeLength +//go:noescape +func getMusicTimeLength( + ret float32, + Music cptr, +) + +//go:wasmimport _raylib _GetMusicTimePlayed +//go:noescape +func getMusicTimePlayed( + ret float32, + Music cptr, +) + +//go:wasmimport _raylib _LoadAudioStream +//go:noescape +func loadAudioStream( + ret cptr, + SampleRate uint32, + SampleSize uint32, + Channels uint32, +) + +//go:wasmimport _raylib _IsAudioStreamValid +//go:noescape +func isAudioStreamValid( + ret cptr, + Stream cptr, +) + +//go:wasmimport _raylib _UnloadAudioStream +//go:noescape +func unloadAudioStream( + Stream cptr, +) + +//go:wasmimport _raylib _UpdateAudioStream +//go:noescape +func updateAudioStream( + Stream cptr, + Data cptr, + FrameCount int32, +) + +//go:wasmimport _raylib _IsAudioStreamProcessed +//go:noescape +func isAudioStreamProcessed( + ret cptr, + Stream cptr, +) + +//go:wasmimport _raylib _PlayAudioStream +//go:noescape +func playAudioStream( + Stream cptr, +) + +//go:wasmimport _raylib _PauseAudioStream +//go:noescape +func pauseAudioStream( + Stream cptr, +) + +//go:wasmimport _raylib _ResumeAudioStream +//go:noescape +func resumeAudioStream( + Stream cptr, +) + +//go:wasmimport _raylib _IsAudioStreamPlaying +//go:noescape +func isAudioStreamPlaying( + ret cptr, + Stream cptr, +) + +//go:wasmimport _raylib _StopAudioStream +//go:noescape +func stopAudioStream( + Stream cptr, +) + +//go:wasmimport _raylib _SetAudioStreamVolume +//go:noescape +func setAudioStreamVolume( + Stream cptr, + Volume float32, +) + +//go:wasmimport _raylib _SetAudioStreamPitch +//go:noescape +func setAudioStreamPitch( + Stream cptr, + Pitch float32, +) + +//go:wasmimport _raylib _SetAudioStreamPan +//go:noescape +func setAudioStreamPan( + Stream cptr, + Pan float32, +) + +//go:wasmimport _raylib _SetAudioStreamBufferSizeDefault +//go:noescape +func setAudioStreamBufferSizeDefault( + Size int32, +) + +//go:wasmimport _raylib _SetAudioStreamCallback +//go:noescape +func setAudioStreamCallback( + Stream cptr, + Callback cptr, +) + +//go:wasmimport _raylib _AttachAudioStreamProcessor +//go:noescape +func attachAudioStreamProcessor( + Stream cptr, + Processor cptr, +) + +//go:wasmimport _raylib _DetachAudioStreamProcessor +//go:noescape +func detachAudioStreamProcessor( + Stream cptr, + Processor cptr, +) + +//go:wasmimport _raylib _AttachAudioMixedProcessor +//go:noescape +func attachAudioMixedProcessor( + Processor cptr, +) + +//go:wasmimport _raylib _DetachAudioMixedProcessor +//go:noescape +func detachAudioMixedProcessor( + Processor cptr, +) diff --git a/wasm-runtime/rl/go.mod b/wasm-runtime/rl/go.mod new file mode 100644 index 0000000..2556a58 --- /dev/null +++ b/wasm-runtime/rl/go.mod @@ -0,0 +1,4 @@ +module rl + +go 1.25.6 + diff --git a/wasm-runtime/rl/structs_gen_formatted.go b/wasm-runtime/rl/structs_gen_formatted.go new file mode 100644 index 0000000..a10fb6d --- /dev/null +++ b/wasm-runtime/rl/structs_gen_formatted.go @@ -0,0 +1,307 @@ +// AUTOGENERATED FILE. DO NOT EDIT + +//go:build js + +package rl + +// Vector2, 2 components +type Vector2 struct { + X float32 // Vector x component + Y float32 // Vector y component +} + +// Vector3, 3 components +type Vector3 struct { + X float32 // Vector x component + Y float32 // Vector y component + Z float32 // Vector z component +} + +// Vector4, 4 components +type Vector4 struct { + X float32 // Vector x component + Y float32 // Vector y component + Z float32 // Vector z component + W float32 // Vector w component +} + +// Matrix, 4x4 components, column major, OpenGL style, right-handed +type Matrix struct { + M0 float32 // Matrix first row (4 components) + M4 float32 // Matrix first row (4 components) + M8 float32 // Matrix first row (4 components) + M12 float32 // Matrix first row (4 components) + M1 float32 // Matrix second row (4 components) + M5 float32 // Matrix second row (4 components) + M9 float32 // Matrix second row (4 components) + M13 float32 // Matrix second row (4 components) + M2 float32 // Matrix third row (4 components) + M6 float32 // Matrix third row (4 components) + M10 float32 // Matrix third row (4 components) + M14 float32 // Matrix third row (4 components) + M3 float32 // Matrix fourth row (4 components) + M7 float32 // Matrix fourth row (4 components) + M11 float32 // Matrix fourth row (4 components) + M15 float32 // Matrix fourth row (4 components) +} + +// Color, 4 components, R8G8B8A8 (32bit) +type Color struct { + R byte // Color red value + G byte // Color green value + B byte // Color blue value + A byte // Color alpha value +} + +// Rectangle, 4 components +type Rectangle struct { + X float32 // Rectangle top-left corner position x + Y float32 // Rectangle top-left corner position y + Width float32 // Rectangle width + Height float32 // Rectangle height +} + +// Image, pixel data stored in CPU memory (RAM) +type Image struct { + Data cptr // Image raw data + Width int32 // Image base width + Height int32 // Image base height + Mipmaps int32 // Mipmap levels, 1 by default + Format int32 // Data format (PixelFormat type) +} + +// Texture, tex data stored in GPU memory (VRAM) +type Texture struct { + Id uint32 // OpenGL texture id + Width int32 // Texture base width + Height int32 // Texture base height + Mipmaps int32 // Mipmap levels, 1 by default + Format int32 // Data format (PixelFormat type) +} + +// RenderTexture, fbo for texture rendering +type RenderTexture struct { + Id uint32 // OpenGL framebuffer object id + Texture Texture // Color buffer attachment texture + Depth Texture // Depth buffer attachment texture +} + +// NPatchInfo, n-patch layout info +type NPatchInfo struct { + Source Rectangle // Texture source rectangle + Left int32 // Left border offset + Top int32 // Top border offset + Right int32 // Right border offset + Bottom int32 // Bottom border offset + Layout int32 // Layout of the n-patch: 3x3, 1x3 or 3x1 +} + +// GlyphInfo, font characters glyphs info +type GlyphInfo struct { + Value int32 // Character value (Unicode) + OffsetX int32 // Character offset X when drawing + OffsetY int32 // Character offset Y when drawing + AdvanceX int32 // Character advance position X + Image Image // Character image data +} + +// Font, font texture and GlyphInfo array data +type Font struct { + BaseSize int32 // Base size (default chars height) + GlyphCount int32 // Number of glyph characters + GlyphPadding int32 // Padding around the glyph characters + Texture Texture2D // Texture atlas containing the glyphs + Recs cptr // Rectangles in texture for the glyphs + Glyphs cptr // Glyphs info data +} + +// Camera, defines position/orientation in 3d space +type Camera3D struct { + Position Vector3 // Camera position + Target Vector3 // Camera target it looks-at + Up Vector3 // Camera up vector (rotation over its axis) + Fovy float32 // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane height in world units in orthographic + Projection int32 // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC +} + +// Camera2D, defines position/orientation in 2d space +type Camera2D struct { + Offset Vector2 // Camera offset (screen space offset from window origin) + Target Vector2 // Camera target (world space target point that is mapped to screen space offset) + Rotation float32 // Camera rotation in degrees (pivots around target) + Zoom float32 // Camera zoom (scaling around target), must not be set to 0, set to 1.0f for no scale +} + +// Mesh, vertex data and vao/vbo +type Mesh struct { + VertexCount int32 // Number of vertices stored in arrays + TriangleCount int32 // Number of triangles stored (indexed or not) + Vertices cptr // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + Texcoords cptr // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + Texcoords2 cptr // Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5) + Normals cptr // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + Tangents cptr // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + Colors cptr // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + Indices cptr // Vertex indices (in case vertex data comes indexed) + AnimVertices cptr // Animated vertex positions (after bones transformations) + AnimNormals cptr // Animated normals (after bones transformations) + BoneIds cptr // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) (shader-location = 6) + BoneWeights cptr // Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7) + BoneMatrices cptr // Bones animated transformation matrices + BoneCount int32 // Number of bones + VaoId uint32 // OpenGL Vertex Array Object id + VboId cptr // OpenGL Vertex Buffer Objects id (default vertex data) +} + +// Shader +type Shader struct { + Id uint32 // Shader program id + Locs cptr // Shader locations array (RL_MAX_SHADER_LOCATIONS) +} + +// MaterialMap +type MaterialMap struct { + Texture Texture2D // Material map texture + Color Color // Material map color + Value float32 // Material map value +} + +// Material, includes shader and maps +type Material struct { + Shader Shader // Material shader + Maps cptr // Material maps array (MAX_MATERIAL_MAPS) + Params [4]float32 // Material generic parameters (if required) +} + +// Transform, vertex transformation data +type Transform struct { + Translation Vector3 // Translation + Rotation Quaternion // Rotation + Scale Vector3 // Scale +} + +// Bone, skeletal animation bone +type BoneInfo struct { + Name [32]byte // Bone name + Parent int32 // Bone parent +} + +// Model, meshes, materials and animation data +type Model struct { + Transform Matrix // Local transform matrix + MeshCount int32 // Number of meshes + MaterialCount int32 // Number of materials + Meshes cptr // Meshes array + Materials cptr // Materials array + MeshMaterial cptr // Mesh material number + BoneCount int32 // Number of bones + Bones cptr // Bones information (skeleton) + BindPose cptr // Bones base transformation (pose) +} + +// ModelAnimation +type ModelAnimation struct { + BoneCount int32 // Number of bones + FrameCount int32 // Number of animation frames + Bones cptr // Bones information (skeleton) + FramePoses cptr // Poses array by frame + Name [32]byte // Animation name +} + +// Ray, ray for raycasting +type Ray struct { + Position Vector3 // Ray position (origin) + Direction Vector3 // Ray direction (normalized) +} + +// RayCollision, ray hit information +type RayCollision struct { + Hit bool // Did the ray hit something? + Distance float32 // Distance to the nearest hit + Point Vector3 // Point of the nearest hit + Normal Vector3 // Surface normal of hit +} + +// BoundingBox +type BoundingBox struct { + Min Vector3 // Minimum vertex box-corner + Max Vector3 // Maximum vertex box-corner +} + +// Wave, audio wave data +type Wave struct { + FrameCount uint32 // Total number of frames (considering channels) + SampleRate uint32 // Frequency (samples per second) + SampleSize uint32 // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + Channels uint32 // Number of channels (1-mono, 2-stereo, ...) + Data cptr // Buffer data pointer +} + +// AudioStream, custom audio stream +type AudioStream struct { + Buffer cptr // Pointer to internal data used by the audio system + Processor cptr // Pointer to internal data processor, useful for audio effects + SampleRate uint32 // Frequency (samples per second) + SampleSize uint32 // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + Channels uint32 // Number of channels (1-mono, 2-stereo, ...) +} + +// Sound +type Sound struct { + Stream AudioStream // Audio stream + FrameCount uint32 // Total number of frames (considering channels) +} + +// Music, audio stream, anything longer than ~10 seconds should be streamed +type Music struct { + Stream AudioStream // Audio stream + FrameCount uint32 // Total number of frames (considering channels) + Looping bool // Music looping enable + CtxType int32 // Type of music context (audio filetype) + CtxData cptr // Audio context data, depends on type +} + +// VrDeviceInfo, Head-Mounted-Display device parameters +type VrDeviceInfo struct { + HResolution int32 // Horizontal resolution in pixels + VResolution int32 // Vertical resolution in pixels + HScreenSize float32 // Horizontal size in meters + VScreenSize float32 // Vertical size in meters + EyeToScreenDistance float32 // Distance between eye and display in meters + LensSeparationDistance float32 // Lens separation distance in meters + InterpupillaryDistance float32 // IPD (distance between pupils) in meters + LensDistortionValues [4]float32 // Lens distortion constant parameters + ChromaAbCorrection [4]float32 // Chromatic aberration correction parameters +} + +// VrStereoConfig, VR stereo rendering configuration for simulator +type VrStereoConfig struct { + Projection [2]Matrix // VR projection matrices (per eye) + ViewOffset [2]Matrix // VR view offset matrices (per eye) + LeftLensCenter [2]float32 // VR left lens center + RightLensCenter [2]float32 // VR right lens center + LeftScreenCenter [2]float32 // VR left screen center + RightScreenCenter [2]float32 // VR right screen center + Scale [2]float32 // VR distortion scale + ScaleIn [2]float32 // VR distortion scale in +} + +// File path list +type FilePathList struct { + Count uint32 // Filepaths entries count + Paths cptr // Filepaths entries +} + +// Automation event +type AutomationEvent struct { + Frame uint32 // Event frame + Type uint32 // Event type (AutomationEventType) + Params [4]int32 // Event parameters (if required) +} + +// Automation event list +type AutomationEventList struct { + Capacity uint32 // Events max entries (MAX_AUTOMATION_EVENTS) + Count uint32 // Events entries count + Events cptr // Events entries +} diff --git a/wasm-runtime/templates/aliases.go.gotmpl b/wasm-runtime/templates/aliases.go.gotmpl new file mode 100644 index 0000000..717f967 --- /dev/null +++ b/wasm-runtime/templates/aliases.go.gotmpl @@ -0,0 +1,16 @@ +{{- $root := . -}} + +// AUTOGENERATED FILE. DO NOT EDIT +{{if .BuildTags}} +//go:build {{.BuildTags}} +{{end}} +package rl + +{{- range .Imports }} +import {{ . }} +{{- end }} + +{{- range .Aliases}} +// {{ .Description}} +type {{ .Name}} = {{.Type}} +{{- end}} diff --git a/wasm-runtime/templates/defines.go.gotmpl b/wasm-runtime/templates/defines.go.gotmpl new file mode 100644 index 0000000..56513eb --- /dev/null +++ b/wasm-runtime/templates/defines.go.gotmpl @@ -0,0 +1,30 @@ +{{- $root := . -}} + +// AUTOGENERATED FILE. DO NOT EDIT +{{if .BuildTags}} +//go:build {{.BuildTags}} +{{end}} +package rl + +{{- range .Imports }} +import {{ . }} +{{- end }} + + +{{- range .Defines}} +{{if contains .Type "INT" "FLOAT" "FLOAT_MATH" "STRING" }} + {{if .Description}} + // {{- .Description}} + {{- end}} + const {{.Name}} = {{.Value}} +{{- end}} +{{if contains .Type "COLOR"}} + //{{- .Description}} + var {{.Name}} = {{.Value}} +{{- end}} + +{{if contains .Type "UNKNOWN"}} + // {{- .Description}} + {{.Value}} +{{- end}} +{{- end}} diff --git a/wasm-runtime/templates/enums.go.gotmpl b/wasm-runtime/templates/enums.go.gotmpl new file mode 100644 index 0000000..f06dd4b --- /dev/null +++ b/wasm-runtime/templates/enums.go.gotmpl @@ -0,0 +1,23 @@ + +{{- $root := . -}} + +// AUTOGENERATED FILE. DO NOT EDIT +{{if .BuildTags}} +//go:build {{.BuildTags}} +{{end}} +package rl + +{{- range .Imports }} +import {{ . }} +{{- end }} + +{{- range .Enums}} +// {{ .Description}} +type {{ .Name}} = int32 +const ( + {{- range .Values}} + // {{.Description}} + {{.Name}} = {{.Value}} + {{- end}} +) +{{- end}} diff --git a/wasm-runtime/templates/funcimport.go.gotmpl b/wasm-runtime/templates/funcimport.go.gotmpl new file mode 100644 index 0000000..0571118 --- /dev/null +++ b/wasm-runtime/templates/funcimport.go.gotmpl @@ -0,0 +1,20 @@ +{{- $root := . -}} + +// AUTOGENERATED FILE. DO NOT EDIT +{{if .BuildTags}} +//go:build {{.BuildTags}} +{{end}} +package rl + +{{- range .Imports }} +import {{ . }} +{{- end }} + +{{- range .FuncImports}} +{{ .Description}} +func {{.Name}} ( + {{- range .Params}} + {{.Name}} {{.Type}}, + {{- end}} +) +{{- end}} diff --git a/wasm-runtime/templates/structs.go.gotmpl b/wasm-runtime/templates/structs.go.gotmpl new file mode 100644 index 0000000..46f641b --- /dev/null +++ b/wasm-runtime/templates/structs.go.gotmpl @@ -0,0 +1,22 @@ +{{- $root := . -}} + +// AUTOGENERATED FILE. DO NOT EDIT +{{if .BuildTags}} +//go:build {{.BuildTags}} +{{end}} +package rl + +{{- range .Imports }} +import {{ . }} +{{- end }} + +{{- range .Structs}} + +// {{ .Description}} +type {{ .Name}} struct { + {{- range .Fields }} + {{ .Name }} {{ .Type }} // {{.Description}} + {{- end }} +} + +{{- end}} diff --git a/wasm-runtime/templates/templates.go b/wasm-runtime/templates/templates.go new file mode 100644 index 0000000..3600221 --- /dev/null +++ b/wasm-runtime/templates/templates.go @@ -0,0 +1,57 @@ +package templates + +import ( + "bytes" + _ "embed" + "fmt" + "go/format" + "os" + "text/template" +) + +// LoadTemplate takes in a gotempl as a string and a name for the template. +// It panics if template could not be parsed. +func LoadTemplate(templ, name string) *template.Template { + return template.Must(template.New(name). + Parse(templ)) +} + +// LoadTemplate takes in a gotempl as a string and a name for the template. +// It panics if template could not be parsed. +func LoadTemplateFuncs(templ, name string, funcs template.FuncMap) *template.Template { + return template.Must(template.New(name). + Funcs(funcs). + Parse(templ)) +} + +// GenerateCode will generate the template using model. and write a file to disk in the format: +// rl/{name}_gen_unformatted.go +func GenerateCode(model any, templ string, name string, funcs template.FuncMap) { + structs := LoadTemplateFuncs(templ, name, funcs) + var buf bytes.Buffer + if err := structs.Execute(&buf, model); err != nil { + panic(err) + } + if err := os.WriteFile(fmt.Sprintf("rl/%s_gen_unformatted.go", name), buf.Bytes(), 0644); err != nil { + panic(err) + } +} + +// GenerateCode will generate the template using model. and write a file to disk in the format: +// rl/{name}_gen_formatted.go +func GenerateCodeFormatted(model any, templ string, name string, funcs template.FuncMap) { + structs := LoadTemplateFuncs(templ, name, funcs) + var buf bytes.Buffer + if err := structs.Execute(&buf, model); err != nil { + panic(err) + } + + formatted, err := format.Source(buf.Bytes()) + if err != nil { + panic(err) + } + + if err := os.WriteFile(fmt.Sprintf("rl/%s_gen_formatted.go", name), formatted, 0644); err != nil { + panic(err) + } +} diff --git a/wasm-runtime/wasm.go b/wasm-runtime/wasm.go new file mode 100644 index 0000000..2078a90 --- /dev/null +++ b/wasm-runtime/wasm.go @@ -0,0 +1,170 @@ +//go:build js + +package wasm + +import ( + "reflect" + "syscall/js" + "unsafe" +) + +// Ptr is a pointer to raylib wasm memory +type Ptr = uint32 + +const PTR_SIZE = 4 // bytes + +// Allocates memory on raylib heap +// +//go:wasmimport raylib _malloc +//go:noescape +func malloc(size Ptr) Ptr + +// malloc the size of V +func MallocV[T any]() (Ptr, func()) { + ptr := malloc(Ptr(reflect.TypeFor[T]().Size())) + return ptr, func() { Free(ptr) } +} + +// Free memory allocated on raylib heap +// +//go:wasmimport raylib _free +//go:noescape +func Free(Ptr) + +// _copyToC copies a Go type/struct to C memory. Useful for copying slices and structs. +// +// Destination C array must have enough space. +// +// NOTE: Value must be a type, it cannot be a slice. +// To pass a slice, use [unsafe.SliceData] +// +//go:wasmimport gojs CopyToC +//go:noescape +func _copyToC(Value unsafe.Pointer, srcSize, dstCptr Ptr) + +// copies C memory to a Go pointer. Useful for copying C structs into Go structs +// +// example usage: +// +// type Person struct{ +// Age int32 +// } +// +// var cPtrToPersonInCHeap cptr = ... +// +// var p Person +// CopyToGo(unsafe.Pointer(&p),unsafe.SizeOf(p),cPtrToPersonInCHeap) +// +// p.Age == (whatever it was in C) +// +//go:wasmimport gojs CopyToGo +//go:noescape +func _copyToGo(dstGoPtr unsafe.Pointer, size Ptr, src Ptr) + +// Copies the src value to the dst cptr +func CopyToC[T any](src *T, dst Ptr) { + size := Ptr(reflect.TypeFor[T]().Size()) + _copyToC(unsafe.Pointer(src), size, dst) +} + +// Copies srcSize bytes from src into dst. +func CopyToGo[T any](src Ptr, srcSize Ptr, dst *T) { + _copyToGo(unsafe.Pointer(dst), srcSize, src) +} + +// The allocated C string lives on the raylib heap and must be free()'d +// +//go:wasmimport gojs CStringFromGoString +//go:noescape +func CString(string) Ptr + +// Scan for null terminator and return length excluding the null terminator. +// +//go:wasmimport gojs CStringGetLength +//go:noescape +func _cStringGetLength(cstr Ptr) Ptr + +// Scan for null terminator and return length excluding the null terminator. +// +//go:wasmimport gojs CStringArrayGetLength +//go:noescape +func CStringArrayGetLength(cstrArray Ptr) Ptr + +// Copies a C string to Go memory without freeing the C string. +func GoString(cstr Ptr) string { + size := _cStringGetLength(cstr) + dstStr := make([]byte, size) + CopySliceToGo(cstr, dstStr) + return string(dstStr) +} + +// Convert boolean to int32 +func BtoI(v bool) int32 { + if v == true { + return 1 + } else { + return 0 + } +} + +// CopyValueToC copies a value to C and returns a pointer to it. +// +// NOTE: Value cannot be a slice. For a slice, use [CopySliceToC] +func CopyValueToC[T any](srcValue *T) (Ptr, func()) { + dst, free := MallocV[T]() + CopyToC(srcValue, dst) + return dst, free +} + +// CopySliceToC allocates a copy of a slice in C memory and returns a cptr to it. +// +// NOTE: Value MUST be a slice +func CopySliceToC[Slice ~[]E, E any](s Slice) (Ptr, func()) { + // size of the slice's underlying array in bytes + sliceSize := Ptr(unsafe.Sizeof(s[:1][0])) * Ptr(len(s)) + // allocate C array to hold Value + dstCptr := malloc(sliceSize) + // copy underlying array memory to C + _copyToC(unsafe.Pointer(unsafe.SliceData(s)), sliceSize, dstCptr) + return dstCptr, func() { Free(dstCptr) } +} + +// CopyValueToGo copies a value from C memory to Go memory. +// Useful for copying structs +// +// NOTE: Slices are not supported. Use [CopySliceToGo] +func CopyValueToGo[T any](src Ptr, dst *T) { + size := Ptr(unsafe.Sizeof(*dst)) + _copyToGo(unsafe.Pointer(dst), size, src) +} + +// CopySliceToGo copies a C array into a Go Slice. +// +// It copies bytes to the underlying array of the slice. +func CopySliceToGo[Slice ~[]E, E any](src Ptr, dst Slice) { + // size of underlying array + var occupiedSize = len(dst) + if occupiedSize == 0 { + occupiedSize = cap(dst) + } + size := Ptr(unsafe.Sizeof(dst[0])) * Ptr(occupiedSize) + dstPtr := unsafe.SliceData(dst) + _copyToGo(unsafe.Pointer(dstPtr), size, src) +} + +//go:wasmimport gojs Alert +//go:noescape +func Alert(string) + +// Use this instead of a for loop on web platform +// Everything that you would do inside the for-loop must be done inside UpdateAndDrawFrame +func SetMain(UpdateAndDrawFrame func()) { + var updateLoop js.Func + updateLoop = js.FuncOf(func(this js.Value, args []js.Value) any { + UpdateAndDrawFrame() + js.Global().Call("requestAnimationFrame", updateLoop) + return nil + }) + js.Global().Call("requestAnimationFrame", updateLoop) + select {} +}