diff options
| author | s-ol <s+removethis@s-ol.nu> | 2021-03-13 11:04:42 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2021-03-13 11:04:46 +0000 |
| commit | a1b3adfbe29756f68951fec692eb759e2a1e4fd5 (patch) | |
| tree | b564fcafc2be821c250141d5a883ba8f3a1adc1d /src/renderdoc.zig | |
| parent | add Nix flake (diff) | |
| download | openxPriments-a1b3adfbe29756f68951fec692eb759e2a1e4fd5.tar.gz openxPriments-a1b3adfbe29756f68951fec692eb759e2a1e4fd5.zip | |
enable renderdoc via build flag
Diffstat (limited to 'src/renderdoc.zig')
| -rw-r--r-- | src/renderdoc.zig | 144 |
1 files changed, 79 insertions, 65 deletions
diff --git a/src/renderdoc.zig b/src/renderdoc.zig index 48cbb16..97d335c 100644 --- a/src/renderdoc.zig +++ b/src/renderdoc.zig @@ -1,77 +1,91 @@ -const std = @import("std"); -const c = @cImport({ - @cInclude("renderdoc_app.h"); - @cInclude("dlfcn.h"); -}); +const options = @import("build_options"); -fn fix_fields(comptime T: type) type { - const TypeId = std.builtin.TypeId; - var ti = @typeInfo(T); +usingnamespace if (options.renderdoc) + struct { + const std = @import("std"); + const c = @cImport({ + @cInclude("renderdoc_app.h"); + @cInclude("dlfcn.h"); + }); - const num_fields = ti.Struct.fields.len; - var fields = [_]TypeId.StructField{undefined} ** num_fields; - for (ti.Struct.fields) |field, i| { - var field_ti = @typeInfo(field.field_type); + fn fix_fields(comptime T: type) type { + const TypeId = std.builtin.TypeId; + var ti = @typeInfo(T); - switch (field_ti) { - .Optional => |opt| { - fields[i] = TypeId.StructField{ - .name = field.name, - .field_type = opt.child, - .default_value = @as(opt.child, fields[i].default_value), - .is_comptime = field.is_comptime, - .alignment = field.alignment, - }; - }, - else => { - fields[i] = field; + const num_fields = ti.Struct.fields.len; + var fields = [_]TypeId.StructField{undefined} ** num_fields; + for (ti.Struct.fields) |field, i| { + var field_ti = @typeInfo(field.field_type); + + switch (field_ti) { + .Optional => |opt| { + fields[i] = TypeId.StructField{ + .name = field.name, + .field_type = opt.child, + .default_value = @as(opt.child, fields[i].default_value), + .is_comptime = field.is_comptime, + .alignment = field.alignment, + }; + }, + else => { + fields[i] = field; + }, + } } + + ti.Struct.fields = fields[0..]; + return @Type(.{ + .Struct = .{ + .layout = .Extern, + .fields = fields, + .decls = [_]TypeId.Declaration{}, + .is_tuple = false, + }, + }); } - } - - ti.Struct.fields = fields[0..]; - return @Type(.{ - .Struct = .{ - .layout = .Extern, - .fields = fields, - .decls = [_]TypeId.Declaration{}, - .is_tuple = false, - }, - }); -} -const API = struct { - StartFrameCapture: fn (c.RENDERDOC_DevicePointer, c.RENDERDOC_WindowHandle) callconv(.C) void, - EndFrameCapture: fn (c.RENDERDOC_DevicePointer, c.RENDERDOC_WindowHandle) callconv(.C) u32, -}; + const API = struct { + StartFrameCapture: fn (c.RENDERDOC_DevicePointer, c.RENDERDOC_WindowHandle) callconv(.C) void, + EndFrameCapture: fn (c.RENDERDOC_DevicePointer, c.RENDERDOC_WindowHandle) callconv(.C) u32, + }; -pub var api: ?API = null; + extern fn RENDERDOC_GetAPI(c.RENDERDOC_Version, [*c]?*c_void) callconv(.C) c_int; -extern fn RENDERDOC_GetAPI(c.RENDERDOC_Version, [*c]?*c_void) callconv(.C) c_int; + pub var api: ?API = null; -pub fn load_api() !void { - var tmp_api: ?*c.RENDERDOC_API_1_1_2 = null; - if (RENDERDOC_GetAPI(.eRENDERDOC_API_Version_1_1_2, @ptrCast([*c]?*c_void, &tmp_api)) != 1) { - return error.Unknown; - } + pub fn load_api() !void { + var tmp_api: ?*c.RENDERDOC_API_1_1_2 = null; + if (RENDERDOC_GetAPI(.eRENDERDOC_API_Version_1_1_2, @ptrCast([*c]?*c_void, &tmp_api)) != 1) { + return error.Unknown; + } - if (tmp_api) |_api| { - var local_api : API = undefined; - var have_all: bool = true; - if (_api.StartFrameCapture) |fp| { - local_api.StartFrameCapture = fp; - } else { - return error.NoStart; - } - - if (_api.EndFrameCapture) |fp| { - local_api.EndFrameCapture = fp; - } else { - return error.NoEnd; - } + if (tmp_api) |_api| { + var local_api: API = undefined; + var have_all: bool = true; + if (_api.StartFrameCapture) |fp| { + local_api.StartFrameCapture = fp; + } else { + return error.NoStart; + } + + if (_api.EndFrameCapture) |fp| { + local_api.EndFrameCapture = fp; + } else { + return error.NoEnd; + } - api = local_api; - } else { - return error.ApiEmpty; + api = local_api; + } else { + return error.ApiEmpty; + } + } } -} +else + struct { + pub const api: ?u32 = null; + + pub fn load_api() !void { + if (false) + return error.NonError; + } + }; |
