mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Make TextFormat use static internal buffers; Add TextFormatAlloc
This commit is contained in:
Vendored
+20
@@ -10,6 +10,9 @@ when USE_LINALG {
|
|||||||
import "core:math/linalg"
|
import "core:math/linalg"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MAX_TEXTFORMAT_BUFFERS :: #config(RAYLIB_MAX_TEXTFORMAT_BUFFERS, 4)
|
||||||
|
MAX_TEXT_BUFFER_LENGTH :: #config(RAYLIB_MAX_TEXT_BUFFER_LENGTH, 1024)
|
||||||
|
|
||||||
#assert(size_of(rune) == size_of(c.int))
|
#assert(size_of(rune) == size_of(c.int))
|
||||||
|
|
||||||
when ODIN_OS == "windows" {
|
when ODIN_OS == "windows" {
|
||||||
@@ -1404,8 +1407,25 @@ foreign lib {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Text formatting with variables (sprintf style)
|
// Text formatting with variables (sprintf style)
|
||||||
TextFormat :: proc(text: cstring, args: ..any) -> cstring {
|
TextFormat :: proc(text: cstring, args: ..any) -> cstring {
|
||||||
|
@static buffers: [MAX_TEXTFORMAT_BUFFERS][MAX_TEXT_BUFFER_LENGTH]byte
|
||||||
|
@static index: u32
|
||||||
|
|
||||||
|
buffer := buffers[index][:]
|
||||||
|
mem.zero_slice(buffer)
|
||||||
|
|
||||||
|
index = (index+1)%MAX_TEXTFORMAT_BUFFERS
|
||||||
|
|
||||||
|
str := fmt.bprintf(buffer[:len(buffer)-1], string(text), ..args)
|
||||||
|
buffer[len(str)] = 0
|
||||||
|
|
||||||
|
return cstring(raw_data(buffer))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Text formatting with variables (sprintf style) and allocates (must be freed with 'MemFree')
|
||||||
|
TextFormatAlloc :: proc(text: cstring, args: ..any) -> cstring {
|
||||||
str := fmt.tprintf(string(text), ..args)
|
str := fmt.tprintf(string(text), ..args)
|
||||||
return strings.clone_to_cstring(str, MemAllocator())
|
return strings.clone_to_cstring(str, MemAllocator())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user