From 361d3962cff55aa816e8a2757412cf1a7673ba03 Mon Sep 17 00:00:00 2001 From: Not-Nik Date: Sun, 30 Jun 2024 21:03:56 +0200 Subject: [PATCH] Allow passing null pointers to certain rlgl functions (#112) --- lib/generate_functions.py | 15 ++++++++++++--- lib/rlgl-ext.zig | 4 ++-- lib/rlgl.zig | 4 ++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/generate_functions.py b/lib/generate_functions.py index b94e127..cff7b56 100644 --- a/lib/generate_functions.py +++ b/lib/generate_functions.py @@ -45,7 +45,7 @@ def c_to_zig_type(c: str) -> str: return const + c -def ziggify_type(name: str, t: str) -> str: +def ziggify_type(name: str, t: str, func_name) -> str: NO_STRINGS = ["data", "fileData", "compData"] single = [ @@ -288,7 +288,16 @@ def parse_header(header_name: str, output_file: str, ext_file: str, prefix: str, arg_type = c_to_zig_type(arg_type) arg_name, arg_type = fix_pointer(arg_name, arg_type) - zig_type = ziggify_type(arg_name, arg_type) + + single_opt = [ + ("rlDrawVertexArrayElements", "buffer"), + ("rlDrawVertexArrayElementsInstanced", "buffer") + ] + + if arg_type.startswith("*") and (func_name, arg_name) in single_opt: + arg_type = "?" + arg_type + + zig_type = ziggify_type(arg_name, arg_type, func_name) zig_types.add(arg_type) zig_c_arguments.append(arg_name + ": " + add_namespace_to_type(arg_type)) # Put everything together. @@ -346,7 +355,7 @@ def parse_header(header_name: str, output_file: str, ext_file: str, prefix: str, if func_name in manual or "FromMemory" in func_name: continue - zig_return = ziggify_type(func_name, return_type) + zig_return = ziggify_type(func_name, return_type, func_name) return_cast = make_return_cast(return_type, zig_return, f"cdef.{func_name}({zig_call_args})") if return_cast: diff --git a/lib/rlgl-ext.zig b/lib/rlgl-ext.zig index 9dcbd6a..daf0933 100644 --- a/lib/rlgl-ext.zig +++ b/lib/rlgl-ext.zig @@ -110,9 +110,9 @@ pub extern "c" fn rlSetVertexAttribute(index: c_uint, compSize: c_int, ty: c_int pub extern "c" fn rlSetVertexAttributeDivisor(index: c_uint, divisor: c_int) void; pub extern "c" fn rlSetVertexAttributeDefault(locIndex: c_int, value: *const anyopaque, attribType: c_int, count: c_int) void; pub extern "c" fn rlDrawVertexArray(offset: c_int, count: c_int) void; -pub extern "c" fn rlDrawVertexArrayElements(offset: c_int, count: c_int, buffer: *const anyopaque) void; +pub extern "c" fn rlDrawVertexArrayElements(offset: c_int, count: c_int, buffer: ?*const anyopaque) void; pub extern "c" fn rlDrawVertexArrayInstanced(offset: c_int, count: c_int, instances: c_int) void; -pub extern "c" fn rlDrawVertexArrayElementsInstanced(offset: c_int, count: c_int, buffer: *const anyopaque, instances: c_int) void; +pub extern "c" fn rlDrawVertexArrayElementsInstanced(offset: c_int, count: c_int, buffer: ?*const anyopaque, instances: c_int) void; pub extern "c" fn rlLoadTexture(data: *const anyopaque, width: c_int, height: c_int, format: c_int, mipmapCount: c_int) c_uint; pub extern "c" fn rlLoadTextureDepth(width: c_int, height: c_int, useRenderBuffer: bool) c_uint; pub extern "c" fn rlLoadTextureCubemap(data: *const anyopaque, size: c_int, format: c_int) c_uint; diff --git a/lib/rlgl.zig b/lib/rlgl.zig index 1f505f1..b52a61c 100644 --- a/lib/rlgl.zig +++ b/lib/rlgl.zig @@ -612,7 +612,7 @@ pub fn rlDrawVertexArray(offset: i32, count: i32) void { cdef.rlDrawVertexArray(@as(c_int, offset), @as(c_int, count)); } -pub fn rlDrawVertexArrayElements(offset: i32, count: i32, buffer: *const anyopaque) void { +pub fn rlDrawVertexArrayElements(offset: i32, count: i32, buffer: ?*const anyopaque) void { cdef.rlDrawVertexArrayElements(@as(c_int, offset), @as(c_int, count), buffer); } @@ -620,7 +620,7 @@ pub fn rlDrawVertexArrayInstanced(offset: i32, count: i32, instances: i32) void cdef.rlDrawVertexArrayInstanced(@as(c_int, offset), @as(c_int, count), @as(c_int, instances)); } -pub fn rlDrawVertexArrayElementsInstanced(offset: i32, count: i32, buffer: *const anyopaque, instances: i32) void { +pub fn rlDrawVertexArrayElementsInstanced(offset: i32, count: i32, buffer: ?*const anyopaque, instances: i32) void { cdef.rlDrawVertexArrayElementsInstanced(@as(c_int, offset), @as(c_int, count), buffer, @as(c_int, instances)); }