odin-blend2d

Odin bindings to Blend2D
Log | Files | Refs | README | LICENSE

raylib_footer.odin (3424B)


      1 // This footer comes from vendor:raylib. It shows how to manually add extra things to your bindings.
      2 // The footer is added to this file from `input/raylib_footer.odin` automatically.
      3 
      4 MAX_TEXTFORMAT_BUFFERS :: #config(RAYLIB_MAX_TEXTFORMAT_BUFFERS, 4)
      5 MAX_TEXT_BUFFER_LENGTH :: #config(RAYLIB_MAX_TEXT_BUFFER_LENGTH, 1024)
      6 
      7 import "core:mem"
      8 import "core:fmt"
      9 import "core:math/bits"
     10 
     11 //  Check if a gesture have been detected
     12 IsGestureDetected :: proc "c" (gesture: Gesture) -> bool {
     13 	foreign lib {
     14 		IsGestureDetected :: proc "c" (gesture: Gestures) -> bool ---
     15 	}
     16 	return IsGestureDetected({gesture})
     17 }
     18 
     19 // Get latest detected gesture
     20 GetGestureDetected :: proc "c" () -> Gesture {
     21 	foreign lib {
     22 		GetGestureDetected :: proc "c" () -> Gestures ---
     23 	}
     24 
     25 	return Gesture(bits.log2(transmute(u32)(GetGestureDetected())))
     26 }
     27 
     28 // Check if one specific window flag is enabled
     29 IsWindowState :: proc "c" (flag: ConfigFlag) -> bool {
     30 	foreign lib {
     31 		IsWindowState :: proc "c" (flag: ConfigFlags) -> bool ---
     32 	}
     33 
     34 	return IsWindowState({flag})
     35 }
     36 
     37 // Text formatting with variables (sprintf style)
     38 TextFormat :: proc(text: cstring, args: ..any) -> cstring {
     39 	@static buffers: [MAX_TEXTFORMAT_BUFFERS][MAX_TEXT_BUFFER_LENGTH]byte
     40 	@static index: u32
     41 	
     42 	buffer := buffers[index][:]
     43 	mem.zero_slice(buffer)
     44 	
     45 	index = (index+1)%MAX_TEXTFORMAT_BUFFERS
     46 	
     47 	str := fmt.bprintf(buffer[:len(buffer)-1], string(text), ..args)
     48 	buffer[len(str)] = 0
     49 	
     50 	return cstring(raw_data(buffer))
     51 }
     52 
     53 // Text formatting with variables (sprintf style) and allocates (must be freed with 'MemFree')
     54 TextFormatAlloc :: proc(text: cstring, args: ..any) -> cstring {
     55 	return fmt.caprintf(string(text), ..args, allocator=MemAllocator())
     56 }
     57 
     58 
     59 // Internal memory free
     60 MemFree :: proc{
     61 	MemFreePtr,
     62 	MemFreeCstring,
     63 }
     64 
     65 
     66 @(default_calling_convention="c")
     67 foreign lib {
     68 	@(link_name="MemFree")
     69 	MemFreePtr :: proc(ptr: rawptr) ---
     70 }
     71 
     72 MemFreeCstring :: proc "c" (s: cstring) {
     73 	MemFreePtr(rawptr(s))
     74 }
     75 
     76 
     77 MemAllocator :: proc "contextless" () -> mem.Allocator {
     78 	return mem.Allocator{MemAllocatorProc, nil}
     79 }
     80 
     81 MemAllocatorProc :: proc(allocator_data: rawptr, mode: mem.Allocator_Mode,
     82                          size, alignment: int,
     83                          old_memory: rawptr, old_size: int, location := #caller_location) -> (data: []byte, err: mem.Allocator_Error)  {
     84 	switch mode {
     85 	case .Alloc, .Alloc_Non_Zeroed:
     86 		ptr := MemAlloc(c.uint(size))
     87 		if ptr == nil {
     88 			err = .Out_Of_Memory
     89 			return
     90 		}
     91 		data = mem.byte_slice(ptr, size)
     92 		return
     93 	case .Free:
     94 		MemFree(old_memory)
     95 		return nil, nil
     96 	
     97 	case .Resize, .Resize_Non_Zeroed:
     98 		ptr := MemRealloc(old_memory, c.uint(size))
     99 		if ptr == nil {
    100 			err = .Out_Of_Memory
    101 			return
    102 		}
    103 		data = mem.byte_slice(ptr, size)
    104 		return
    105 	
    106 	case .Free_All, .Query_Features, .Query_Info:
    107 		return nil, .Mode_Not_Implemented
    108 	}	
    109 	return nil, .Mode_Not_Implemented
    110 }
    111 
    112 // RayLib 5.5 renamed Is*Ready to Is*Valid.
    113 // See: https://github.com/raysan5/raylib/commit/8cbf34ddc495e2bca42245f786915c27210b0507
    114 IsImageReady         :: IsImageValid
    115 IsTextureReady       :: IsTextureValid
    116 IsRenderTextureReady :: IsRenderTextureValid
    117 IsFontReady          :: IsFontValid
    118 IsModelReady         :: IsModelValid
    119 IsMaterialReady      :: IsMaterialValid
    120 IsWaveReady          :: IsWaveValid
    121 IsSoundReady         :: IsSoundValid
    122 IsMusicReady         :: IsMusicValid
    123 IsAudioStreamReady   :: IsAudioStreamValid
    124 IsShaderReady        :: IsShaderValid