mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 13:00:28 +00:00
Fix typos; Add MemAllocator which wraps the raylib allocation procedures into an Odin Allocator; Reimplement TextFormat using fmt.*printf
This commit is contained in:
49
vendor/raylib/raylib.odin
vendored
49
vendor/raylib/raylib.odin
vendored
@@ -1,6 +1,9 @@
|
||||
package raylib
|
||||
|
||||
import c "core:c/libc"
|
||||
import "core:fmt"
|
||||
import "core:mem"
|
||||
import "core:strings"
|
||||
|
||||
USE_LINALG :: #config(RAYLIB_USE_LINALG, true)
|
||||
when USE_LINALG {
|
||||
@@ -1217,7 +1220,6 @@ foreign lib {
|
||||
TextCopy :: proc(dst: [^]u8, src: cstring) -> c.int --- // Copy one string to another, returns bytes copied
|
||||
TextIsEqual :: proc(text1, text2: cstring) -> bool --- // Check if two text string are equal
|
||||
TextLength :: proc(text: cstring) -> c.uint --- // Get text length, checks for '\0' ending
|
||||
TextFormat :: proc(text: cstring, #c_vararg args: ..any) -> cstring --- // Text formatting with variables (sprintf style)
|
||||
TextSubtext :: proc(text: cstring, position: c.int, length: c.int) -> cstring --- // Get a piece of a text string
|
||||
TextReplace :: proc(text: [^]byte, replace, by: cstring) -> cstring --- // Replace text string (memory must be freed!)
|
||||
TextInsert :: proc(text, insert: cstring, position: c.int) -> cstring --- // Insert text in a position (memory must be freed!)
|
||||
@@ -1258,7 +1260,7 @@ foreign lib {
|
||||
DrawSphereWires :: proc(centerPos: Vector3, radius: f32, rings, slices: c.int, color: Color) --- // Draw sphere wires
|
||||
DrawCylinder :: proc(position: Vector3, radiusTop, radiusBottom: f32, height: f32, slices: c.int, color: Color) --- // Draw a cylinder/cone
|
||||
DrawCylinderWires :: proc(position: Vector3, radiusTop, radiusBottom: f32, height: f32, slices: c.int, color: Color) --- // Draw a cylinder/cone wires
|
||||
DrawPlane :: proc(centerPos, size: Vector2, color: Color) --- // Draw a plane XZ
|
||||
DrawPlane :: proc(centerPos: Vector3, size: Vector2, color: Color) --- // Draw a plane XZ
|
||||
DrawRay :: proc(ray: Ray, color: Color) --- // Draw a ray line
|
||||
DrawGrid :: proc(slices: c.int, spacing: f32) --- // Draw a grid (centered at (0, 0, 0))
|
||||
|
||||
@@ -1400,3 +1402,46 @@ foreign lib {
|
||||
SetAudioStreamPitch :: proc(stream: AudioStream, pitch: f32) --- // Set pitch for audio stream (1.0 is base level)
|
||||
SetAudioStreamBufferSizeDefault :: proc(size: c.int) --- // Default size for new audio streams
|
||||
}
|
||||
|
||||
|
||||
// Text formatting with variables (sprintf style)
|
||||
TextFormat :: proc(text: cstring, args: ..any) -> cstring {
|
||||
str := fmt.tprintf(string(text), ..args)
|
||||
return strings.clone_to_cstring(str, MemAllocator())
|
||||
}
|
||||
|
||||
|
||||
MemAllocator :: proc "contextless" () -> mem.Allocator {
|
||||
return mem.Allocator{MemAllocatorProc, nil}
|
||||
}
|
||||
|
||||
MemAllocatorProc :: proc(allocator_data: rawptr, mode: mem.Allocator_Mode,
|
||||
size, alignment: int,
|
||||
old_memory: rawptr, old_size: int, location := #caller_location) -> (data: []byte, err: mem.Allocator_Error) {
|
||||
switch mode {
|
||||
case .Alloc:
|
||||
ptr := MemAlloc(c.int(size))
|
||||
if ptr == nil {
|
||||
err = .Out_Of_Memory
|
||||
return
|
||||
}
|
||||
data = mem.byte_slice(ptr, size)
|
||||
return
|
||||
case .Free:
|
||||
MemFree(old_memory)
|
||||
return nil, nil
|
||||
|
||||
case .Resize:
|
||||
ptr := MemRealloc(old_memory, c.int(size))
|
||||
if ptr == nil {
|
||||
err = .Out_Of_Memory
|
||||
return
|
||||
}
|
||||
data = mem.byte_slice(ptr, size)
|
||||
return
|
||||
|
||||
case .Free_All, .Query_Features, .Query_Info:
|
||||
return nil, .Mode_Not_Implemented
|
||||
}
|
||||
return nil, .Mode_Not_Implemented
|
||||
}
|
||||
Reference in New Issue
Block a user