voxel-test/rmodels.tmpzig

40465 lines
2.1 MiB

pub const __builtin_bswap16 = @import("std").zig.c_builtins.__builtin_bswap16;
pub const __builtin_bswap32 = @import("std").zig.c_builtins.__builtin_bswap32;
pub const __builtin_bswap64 = @import("std").zig.c_builtins.__builtin_bswap64;
pub const __builtin_signbit = @import("std").zig.c_builtins.__builtin_signbit;
pub const __builtin_signbitf = @import("std").zig.c_builtins.__builtin_signbitf;
pub const __builtin_popcount = @import("std").zig.c_builtins.__builtin_popcount;
pub const __builtin_ctz = @import("std").zig.c_builtins.__builtin_ctz;
pub const __builtin_clz = @import("std").zig.c_builtins.__builtin_clz;
pub const __builtin_sqrt = @import("std").zig.c_builtins.__builtin_sqrt;
pub const __builtin_sqrtf = @import("std").zig.c_builtins.__builtin_sqrtf;
pub const __builtin_sin = @import("std").zig.c_builtins.__builtin_sin;
pub const __builtin_sinf = @import("std").zig.c_builtins.__builtin_sinf;
pub const __builtin_cos = @import("std").zig.c_builtins.__builtin_cos;
pub const __builtin_cosf = @import("std").zig.c_builtins.__builtin_cosf;
pub const __builtin_exp = @import("std").zig.c_builtins.__builtin_exp;
pub const __builtin_expf = @import("std").zig.c_builtins.__builtin_expf;
pub const __builtin_exp2 = @import("std").zig.c_builtins.__builtin_exp2;
pub const __builtin_exp2f = @import("std").zig.c_builtins.__builtin_exp2f;
pub const __builtin_log = @import("std").zig.c_builtins.__builtin_log;
pub const __builtin_logf = @import("std").zig.c_builtins.__builtin_logf;
pub const __builtin_log2 = @import("std").zig.c_builtins.__builtin_log2;
pub const __builtin_log2f = @import("std").zig.c_builtins.__builtin_log2f;
pub const __builtin_log10 = @import("std").zig.c_builtins.__builtin_log10;
pub const __builtin_log10f = @import("std").zig.c_builtins.__builtin_log10f;
pub const __builtin_abs = @import("std").zig.c_builtins.__builtin_abs;
pub const __builtin_labs = @import("std").zig.c_builtins.__builtin_labs;
pub const __builtin_llabs = @import("std").zig.c_builtins.__builtin_llabs;
pub const __builtin_fabs = @import("std").zig.c_builtins.__builtin_fabs;
pub const __builtin_fabsf = @import("std").zig.c_builtins.__builtin_fabsf;
pub const __builtin_floor = @import("std").zig.c_builtins.__builtin_floor;
pub const __builtin_floorf = @import("std").zig.c_builtins.__builtin_floorf;
pub const __builtin_ceil = @import("std").zig.c_builtins.__builtin_ceil;
pub const __builtin_ceilf = @import("std").zig.c_builtins.__builtin_ceilf;
pub const __builtin_trunc = @import("std").zig.c_builtins.__builtin_trunc;
pub const __builtin_truncf = @import("std").zig.c_builtins.__builtin_truncf;
pub const __builtin_round = @import("std").zig.c_builtins.__builtin_round;
pub const __builtin_roundf = @import("std").zig.c_builtins.__builtin_roundf;
pub const __builtin_strlen = @import("std").zig.c_builtins.__builtin_strlen;
pub const __builtin_strcmp = @import("std").zig.c_builtins.__builtin_strcmp;
pub const __builtin_object_size = @import("std").zig.c_builtins.__builtin_object_size;
pub const __builtin___memset_chk = @import("std").zig.c_builtins.__builtin___memset_chk;
pub const __builtin_memset = @import("std").zig.c_builtins.__builtin_memset;
pub const __builtin___memcpy_chk = @import("std").zig.c_builtins.__builtin___memcpy_chk;
pub const __builtin_memcpy = @import("std").zig.c_builtins.__builtin_memcpy;
pub const __builtin_expect = @import("std").zig.c_builtins.__builtin_expect;
pub const __builtin_nanf = @import("std").zig.c_builtins.__builtin_nanf;
pub const __builtin_huge_valf = @import("std").zig.c_builtins.__builtin_huge_valf;
pub const __builtin_inff = @import("std").zig.c_builtins.__builtin_inff;
pub const __builtin_isnan = @import("std").zig.c_builtins.__builtin_isnan;
pub const __builtin_isinf = @import("std").zig.c_builtins.__builtin_isinf;
pub const __builtin_isinf_sign = @import("std").zig.c_builtins.__builtin_isinf_sign;
pub const __has_builtin = @import("std").zig.c_builtins.__has_builtin;
pub const __builtin_assume = @import("std").zig.c_builtins.__builtin_assume;
pub const __builtin_unreachable = @import("std").zig.c_builtins.__builtin_unreachable;
pub const __builtin_constant_p = @import("std").zig.c_builtins.__builtin_constant_p;
pub const __builtin_mul_overflow = @import("std").zig.c_builtins.__builtin_mul_overflow;
pub const struct___va_list_tag_1 = extern struct {
gp_offset: c_uint = @import("std").mem.zeroes(c_uint),
fp_offset: c_uint = @import("std").mem.zeroes(c_uint),
overflow_arg_area: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
reg_save_area: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
};
pub const __builtin_va_list = [1]struct___va_list_tag_1;
pub const __gnuc_va_list = __builtin_va_list;
pub const va_list = __builtin_va_list;
pub const struct_Vector2 = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
};
pub const Vector2 = struct_Vector2;
pub const struct_Vector3 = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
z: f32 = @import("std").mem.zeroes(f32),
};
pub const Vector3 = struct_Vector3;
pub const struct_Vector4 = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
z: f32 = @import("std").mem.zeroes(f32),
w: f32 = @import("std").mem.zeroes(f32),
};
pub const Vector4 = struct_Vector4;
pub const Quaternion = Vector4;
pub const struct_Matrix = extern struct {
m0: f32 = @import("std").mem.zeroes(f32),
m4: f32 = @import("std").mem.zeroes(f32),
m8: f32 = @import("std").mem.zeroes(f32),
m12: f32 = @import("std").mem.zeroes(f32),
m1: f32 = @import("std").mem.zeroes(f32),
m5: f32 = @import("std").mem.zeroes(f32),
m9: f32 = @import("std").mem.zeroes(f32),
m13: f32 = @import("std").mem.zeroes(f32),
m2: f32 = @import("std").mem.zeroes(f32),
m6: f32 = @import("std").mem.zeroes(f32),
m10: f32 = @import("std").mem.zeroes(f32),
m14: f32 = @import("std").mem.zeroes(f32),
m3: f32 = @import("std").mem.zeroes(f32),
m7: f32 = @import("std").mem.zeroes(f32),
m11: f32 = @import("std").mem.zeroes(f32),
m15: f32 = @import("std").mem.zeroes(f32),
};
pub const Matrix = struct_Matrix;
pub const struct_Color = extern struct {
r: u8 = @import("std").mem.zeroes(u8),
g: u8 = @import("std").mem.zeroes(u8),
b: u8 = @import("std").mem.zeroes(u8),
a: u8 = @import("std").mem.zeroes(u8),
};
pub const Color = struct_Color;
pub const struct_Rectangle = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
width: f32 = @import("std").mem.zeroes(f32),
height: f32 = @import("std").mem.zeroes(f32),
};
pub const Rectangle = struct_Rectangle;
pub const struct_Image = extern struct {
data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
width: c_int = @import("std").mem.zeroes(c_int),
height: c_int = @import("std").mem.zeroes(c_int),
mipmaps: c_int = @import("std").mem.zeroes(c_int),
format: c_int = @import("std").mem.zeroes(c_int),
};
pub const Image = struct_Image;
pub const struct_Texture = extern struct {
id: c_uint = @import("std").mem.zeroes(c_uint),
width: c_int = @import("std").mem.zeroes(c_int),
height: c_int = @import("std").mem.zeroes(c_int),
mipmaps: c_int = @import("std").mem.zeroes(c_int),
format: c_int = @import("std").mem.zeroes(c_int),
};
pub const Texture = struct_Texture;
pub const Texture2D = Texture;
pub const TextureCubemap = Texture;
pub const struct_RenderTexture = extern struct {
id: c_uint = @import("std").mem.zeroes(c_uint),
texture: Texture = @import("std").mem.zeroes(Texture),
depth: Texture = @import("std").mem.zeroes(Texture),
};
pub const RenderTexture = struct_RenderTexture;
pub const RenderTexture2D = RenderTexture;
pub const struct_NPatchInfo = extern struct {
source: Rectangle = @import("std").mem.zeroes(Rectangle),
left: c_int = @import("std").mem.zeroes(c_int),
top: c_int = @import("std").mem.zeroes(c_int),
right: c_int = @import("std").mem.zeroes(c_int),
bottom: c_int = @import("std").mem.zeroes(c_int),
layout: c_int = @import("std").mem.zeroes(c_int),
};
pub const NPatchInfo = struct_NPatchInfo;
pub const struct_GlyphInfo = extern struct {
value: c_int = @import("std").mem.zeroes(c_int),
offsetX: c_int = @import("std").mem.zeroes(c_int),
offsetY: c_int = @import("std").mem.zeroes(c_int),
advanceX: c_int = @import("std").mem.zeroes(c_int),
image: Image = @import("std").mem.zeroes(Image),
};
pub const GlyphInfo = struct_GlyphInfo;
pub const struct_Font = extern struct {
baseSize: c_int = @import("std").mem.zeroes(c_int),
glyphCount: c_int = @import("std").mem.zeroes(c_int),
glyphPadding: c_int = @import("std").mem.zeroes(c_int),
texture: Texture2D = @import("std").mem.zeroes(Texture2D),
recs: [*c]Rectangle = @import("std").mem.zeroes([*c]Rectangle),
glyphs: [*c]GlyphInfo = @import("std").mem.zeroes([*c]GlyphInfo),
};
pub const Font = struct_Font;
pub const struct_Camera3D = extern struct {
position: Vector3 = @import("std").mem.zeroes(Vector3),
target: Vector3 = @import("std").mem.zeroes(Vector3),
up: Vector3 = @import("std").mem.zeroes(Vector3),
fovy: f32 = @import("std").mem.zeroes(f32),
projection: c_int = @import("std").mem.zeroes(c_int),
};
pub const Camera3D = struct_Camera3D;
pub const Camera = Camera3D;
pub const struct_Camera2D = extern struct {
offset: Vector2 = @import("std").mem.zeroes(Vector2),
target: Vector2 = @import("std").mem.zeroes(Vector2),
rotation: f32 = @import("std").mem.zeroes(f32),
zoom: f32 = @import("std").mem.zeroes(f32),
};
pub const Camera2D = struct_Camera2D;
pub const struct_Mesh = extern struct {
vertexCount: c_int = @import("std").mem.zeroes(c_int),
triangleCount: c_int = @import("std").mem.zeroes(c_int),
vertices: [*c]f32 = @import("std").mem.zeroes([*c]f32),
texcoords: [*c]f32 = @import("std").mem.zeroes([*c]f32),
texcoords2: [*c]f32 = @import("std").mem.zeroes([*c]f32),
normals: [*c]f32 = @import("std").mem.zeroes([*c]f32),
tangents: [*c]f32 = @import("std").mem.zeroes([*c]f32),
colors: [*c]u8 = @import("std").mem.zeroes([*c]u8),
indices: [*c]c_ushort = @import("std").mem.zeroes([*c]c_ushort),
animVertices: [*c]f32 = @import("std").mem.zeroes([*c]f32),
animNormals: [*c]f32 = @import("std").mem.zeroes([*c]f32),
boneIds: [*c]u8 = @import("std").mem.zeroes([*c]u8),
boneWeights: [*c]f32 = @import("std").mem.zeroes([*c]f32),
vaoId: c_uint = @import("std").mem.zeroes(c_uint),
vboId: [*c]c_uint = @import("std").mem.zeroes([*c]c_uint),
};
pub const Mesh = struct_Mesh;
pub const struct_Shader = extern struct {
id: c_uint = @import("std").mem.zeroes(c_uint),
locs: [*c]c_int = @import("std").mem.zeroes([*c]c_int),
};
pub const Shader = struct_Shader;
pub const struct_MaterialMap = extern struct {
texture: Texture2D = @import("std").mem.zeroes(Texture2D),
color: Color = @import("std").mem.zeroes(Color),
value: f32 = @import("std").mem.zeroes(f32),
};
pub const MaterialMap = struct_MaterialMap;
pub const struct_Material = extern struct {
shader: Shader = @import("std").mem.zeroes(Shader),
maps: [*c]MaterialMap = @import("std").mem.zeroes([*c]MaterialMap),
params: [4]f32 = @import("std").mem.zeroes([4]f32),
};
pub const Material = struct_Material;
pub const struct_Transform = extern struct {
translation: Vector3 = @import("std").mem.zeroes(Vector3),
rotation: Quaternion = @import("std").mem.zeroes(Quaternion),
scale: Vector3 = @import("std").mem.zeroes(Vector3),
};
pub const Transform = struct_Transform;
pub const struct_BoneInfo = extern struct {
name: [32]u8 = @import("std").mem.zeroes([32]u8),
parent: c_int = @import("std").mem.zeroes(c_int),
};
pub const BoneInfo = struct_BoneInfo;
pub const struct_Model = extern struct {
transform: Matrix = @import("std").mem.zeroes(Matrix),
meshCount: c_int = @import("std").mem.zeroes(c_int),
materialCount: c_int = @import("std").mem.zeroes(c_int),
meshes: [*c]Mesh = @import("std").mem.zeroes([*c]Mesh),
materials: [*c]Material = @import("std").mem.zeroes([*c]Material),
meshMaterial: [*c]c_int = @import("std").mem.zeroes([*c]c_int),
boneCount: c_int = @import("std").mem.zeroes(c_int),
bones: [*c]BoneInfo = @import("std").mem.zeroes([*c]BoneInfo),
bindPose: [*c]Transform = @import("std").mem.zeroes([*c]Transform),
};
pub const Model = struct_Model;
pub const struct_ModelAnimation = extern struct {
boneCount: c_int = @import("std").mem.zeroes(c_int),
frameCount: c_int = @import("std").mem.zeroes(c_int),
bones: [*c]BoneInfo = @import("std").mem.zeroes([*c]BoneInfo),
framePoses: [*c][*c]Transform = @import("std").mem.zeroes([*c][*c]Transform),
name: [32]u8 = @import("std").mem.zeroes([32]u8),
};
pub const ModelAnimation = struct_ModelAnimation;
pub const struct_Ray = extern struct {
position: Vector3 = @import("std").mem.zeroes(Vector3),
direction: Vector3 = @import("std").mem.zeroes(Vector3),
};
pub const Ray = struct_Ray;
pub const struct_RayCollision = extern struct {
hit: bool = @import("std").mem.zeroes(bool),
distance: f32 = @import("std").mem.zeroes(f32),
point: Vector3 = @import("std").mem.zeroes(Vector3),
normal: Vector3 = @import("std").mem.zeroes(Vector3),
};
pub const RayCollision = struct_RayCollision;
pub const struct_BoundingBox = extern struct {
min: Vector3 = @import("std").mem.zeroes(Vector3),
max: Vector3 = @import("std").mem.zeroes(Vector3),
};
pub const BoundingBox = struct_BoundingBox;
pub const struct_Wave = extern struct {
frameCount: c_uint = @import("std").mem.zeroes(c_uint),
sampleRate: c_uint = @import("std").mem.zeroes(c_uint),
sampleSize: c_uint = @import("std").mem.zeroes(c_uint),
channels: c_uint = @import("std").mem.zeroes(c_uint),
data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
};
pub const Wave = struct_Wave;
pub const struct_rAudioBuffer = opaque {};
pub const rAudioBuffer = struct_rAudioBuffer;
pub const struct_rAudioProcessor = opaque {};
pub const rAudioProcessor = struct_rAudioProcessor;
pub const struct_AudioStream = extern struct {
buffer: ?*rAudioBuffer = @import("std").mem.zeroes(?*rAudioBuffer),
processor: ?*rAudioProcessor = @import("std").mem.zeroes(?*rAudioProcessor),
sampleRate: c_uint = @import("std").mem.zeroes(c_uint),
sampleSize: c_uint = @import("std").mem.zeroes(c_uint),
channels: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const AudioStream = struct_AudioStream;
pub const struct_Sound = extern struct {
stream: AudioStream = @import("std").mem.zeroes(AudioStream),
frameCount: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const Sound = struct_Sound;
pub const struct_Music = extern struct {
stream: AudioStream = @import("std").mem.zeroes(AudioStream),
frameCount: c_uint = @import("std").mem.zeroes(c_uint),
looping: bool = @import("std").mem.zeroes(bool),
ctxType: c_int = @import("std").mem.zeroes(c_int),
ctxData: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
};
pub const Music = struct_Music;
pub const struct_VrDeviceInfo = extern struct {
hResolution: c_int = @import("std").mem.zeroes(c_int),
vResolution: c_int = @import("std").mem.zeroes(c_int),
hScreenSize: f32 = @import("std").mem.zeroes(f32),
vScreenSize: f32 = @import("std").mem.zeroes(f32),
eyeToScreenDistance: f32 = @import("std").mem.zeroes(f32),
lensSeparationDistance: f32 = @import("std").mem.zeroes(f32),
interpupillaryDistance: f32 = @import("std").mem.zeroes(f32),
lensDistortionValues: [4]f32 = @import("std").mem.zeroes([4]f32),
chromaAbCorrection: [4]f32 = @import("std").mem.zeroes([4]f32),
};
pub const VrDeviceInfo = struct_VrDeviceInfo;
pub const struct_VrStereoConfig = extern struct {
projection: [2]Matrix = @import("std").mem.zeroes([2]Matrix),
viewOffset: [2]Matrix = @import("std").mem.zeroes([2]Matrix),
leftLensCenter: [2]f32 = @import("std").mem.zeroes([2]f32),
rightLensCenter: [2]f32 = @import("std").mem.zeroes([2]f32),
leftScreenCenter: [2]f32 = @import("std").mem.zeroes([2]f32),
rightScreenCenter: [2]f32 = @import("std").mem.zeroes([2]f32),
scale: [2]f32 = @import("std").mem.zeroes([2]f32),
scaleIn: [2]f32 = @import("std").mem.zeroes([2]f32),
};
pub const VrStereoConfig = struct_VrStereoConfig;
pub const struct_FilePathList = extern struct {
capacity: c_uint = @import("std").mem.zeroes(c_uint),
count: c_uint = @import("std").mem.zeroes(c_uint),
paths: [*c][*c]u8 = @import("std").mem.zeroes([*c][*c]u8),
};
pub const FilePathList = struct_FilePathList;
pub const struct_AutomationEvent = extern struct {
frame: c_uint = @import("std").mem.zeroes(c_uint),
type: c_uint = @import("std").mem.zeroes(c_uint),
params: [4]c_int = @import("std").mem.zeroes([4]c_int),
};
pub const AutomationEvent = struct_AutomationEvent;
pub const struct_AutomationEventList = extern struct {
capacity: c_uint = @import("std").mem.zeroes(c_uint),
count: c_uint = @import("std").mem.zeroes(c_uint),
events: [*c]AutomationEvent = @import("std").mem.zeroes([*c]AutomationEvent),
};
pub const AutomationEventList = struct_AutomationEventList;
pub const FLAG_VSYNC_HINT: c_int = 64;
pub const FLAG_FULLSCREEN_MODE: c_int = 2;
pub const FLAG_WINDOW_RESIZABLE: c_int = 4;
pub const FLAG_WINDOW_UNDECORATED: c_int = 8;
pub const FLAG_WINDOW_HIDDEN: c_int = 128;
pub const FLAG_WINDOW_MINIMIZED: c_int = 512;
pub const FLAG_WINDOW_MAXIMIZED: c_int = 1024;
pub const FLAG_WINDOW_UNFOCUSED: c_int = 2048;
pub const FLAG_WINDOW_TOPMOST: c_int = 4096;
pub const FLAG_WINDOW_ALWAYS_RUN: c_int = 256;
pub const FLAG_WINDOW_TRANSPARENT: c_int = 16;
pub const FLAG_WINDOW_HIGHDPI: c_int = 8192;
pub const FLAG_WINDOW_MOUSE_PASSTHROUGH: c_int = 16384;
pub const FLAG_BORDERLESS_WINDOWED_MODE: c_int = 32768;
pub const FLAG_MSAA_4X_HINT: c_int = 32;
pub const FLAG_INTERLACED_HINT: c_int = 65536;
pub const ConfigFlags = c_uint;
pub const LOG_ALL: c_int = 0;
pub const LOG_TRACE: c_int = 1;
pub const LOG_DEBUG: c_int = 2;
pub const LOG_INFO: c_int = 3;
pub const LOG_WARNING: c_int = 4;
pub const LOG_ERROR: c_int = 5;
pub const LOG_FATAL: c_int = 6;
pub const LOG_NONE: c_int = 7;
pub const TraceLogLevel = c_uint;
pub const KEY_NULL: c_int = 0;
pub const KEY_APOSTROPHE: c_int = 39;
pub const KEY_COMMA: c_int = 44;
pub const KEY_MINUS: c_int = 45;
pub const KEY_PERIOD: c_int = 46;
pub const KEY_SLASH: c_int = 47;
pub const KEY_ZERO: c_int = 48;
pub const KEY_ONE: c_int = 49;
pub const KEY_TWO: c_int = 50;
pub const KEY_THREE: c_int = 51;
pub const KEY_FOUR: c_int = 52;
pub const KEY_FIVE: c_int = 53;
pub const KEY_SIX: c_int = 54;
pub const KEY_SEVEN: c_int = 55;
pub const KEY_EIGHT: c_int = 56;
pub const KEY_NINE: c_int = 57;
pub const KEY_SEMICOLON: c_int = 59;
pub const KEY_EQUAL: c_int = 61;
pub const KEY_A: c_int = 65;
pub const KEY_B: c_int = 66;
pub const KEY_C: c_int = 67;
pub const KEY_D: c_int = 68;
pub const KEY_E: c_int = 69;
pub const KEY_F: c_int = 70;
pub const KEY_G: c_int = 71;
pub const KEY_H: c_int = 72;
pub const KEY_I: c_int = 73;
pub const KEY_J: c_int = 74;
pub const KEY_K: c_int = 75;
pub const KEY_L: c_int = 76;
pub const KEY_M: c_int = 77;
pub const KEY_N: c_int = 78;
pub const KEY_O: c_int = 79;
pub const KEY_P: c_int = 80;
pub const KEY_Q: c_int = 81;
pub const KEY_R: c_int = 82;
pub const KEY_S: c_int = 83;
pub const KEY_T: c_int = 84;
pub const KEY_U: c_int = 85;
pub const KEY_V: c_int = 86;
pub const KEY_W: c_int = 87;
pub const KEY_X: c_int = 88;
pub const KEY_Y: c_int = 89;
pub const KEY_Z: c_int = 90;
pub const KEY_LEFT_BRACKET: c_int = 91;
pub const KEY_BACKSLASH: c_int = 92;
pub const KEY_RIGHT_BRACKET: c_int = 93;
pub const KEY_GRAVE: c_int = 96;
pub const KEY_SPACE: c_int = 32;
pub const KEY_ESCAPE: c_int = 256;
pub const KEY_ENTER: c_int = 257;
pub const KEY_TAB: c_int = 258;
pub const KEY_BACKSPACE: c_int = 259;
pub const KEY_INSERT: c_int = 260;
pub const KEY_DELETE: c_int = 261;
pub const KEY_RIGHT: c_int = 262;
pub const KEY_LEFT: c_int = 263;
pub const KEY_DOWN: c_int = 264;
pub const KEY_UP: c_int = 265;
pub const KEY_PAGE_UP: c_int = 266;
pub const KEY_PAGE_DOWN: c_int = 267;
pub const KEY_HOME: c_int = 268;
pub const KEY_END: c_int = 269;
pub const KEY_CAPS_LOCK: c_int = 280;
pub const KEY_SCROLL_LOCK: c_int = 281;
pub const KEY_NUM_LOCK: c_int = 282;
pub const KEY_PRINT_SCREEN: c_int = 283;
pub const KEY_PAUSE: c_int = 284;
pub const KEY_F1: c_int = 290;
pub const KEY_F2: c_int = 291;
pub const KEY_F3: c_int = 292;
pub const KEY_F4: c_int = 293;
pub const KEY_F5: c_int = 294;
pub const KEY_F6: c_int = 295;
pub const KEY_F7: c_int = 296;
pub const KEY_F8: c_int = 297;
pub const KEY_F9: c_int = 298;
pub const KEY_F10: c_int = 299;
pub const KEY_F11: c_int = 300;
pub const KEY_F12: c_int = 301;
pub const KEY_LEFT_SHIFT: c_int = 340;
pub const KEY_LEFT_CONTROL: c_int = 341;
pub const KEY_LEFT_ALT: c_int = 342;
pub const KEY_LEFT_SUPER: c_int = 343;
pub const KEY_RIGHT_SHIFT: c_int = 344;
pub const KEY_RIGHT_CONTROL: c_int = 345;
pub const KEY_RIGHT_ALT: c_int = 346;
pub const KEY_RIGHT_SUPER: c_int = 347;
pub const KEY_KB_MENU: c_int = 348;
pub const KEY_KP_0: c_int = 320;
pub const KEY_KP_1: c_int = 321;
pub const KEY_KP_2: c_int = 322;
pub const KEY_KP_3: c_int = 323;
pub const KEY_KP_4: c_int = 324;
pub const KEY_KP_5: c_int = 325;
pub const KEY_KP_6: c_int = 326;
pub const KEY_KP_7: c_int = 327;
pub const KEY_KP_8: c_int = 328;
pub const KEY_KP_9: c_int = 329;
pub const KEY_KP_DECIMAL: c_int = 330;
pub const KEY_KP_DIVIDE: c_int = 331;
pub const KEY_KP_MULTIPLY: c_int = 332;
pub const KEY_KP_SUBTRACT: c_int = 333;
pub const KEY_KP_ADD: c_int = 334;
pub const KEY_KP_ENTER: c_int = 335;
pub const KEY_KP_EQUAL: c_int = 336;
pub const KEY_BACK: c_int = 4;
pub const KEY_MENU: c_int = 5;
pub const KEY_VOLUME_UP: c_int = 24;
pub const KEY_VOLUME_DOWN: c_int = 25;
pub const KeyboardKey = c_uint;
pub const MOUSE_BUTTON_LEFT: c_int = 0;
pub const MOUSE_BUTTON_RIGHT: c_int = 1;
pub const MOUSE_BUTTON_MIDDLE: c_int = 2;
pub const MOUSE_BUTTON_SIDE: c_int = 3;
pub const MOUSE_BUTTON_EXTRA: c_int = 4;
pub const MOUSE_BUTTON_FORWARD: c_int = 5;
pub const MOUSE_BUTTON_BACK: c_int = 6;
pub const MouseButton = c_uint;
pub const MOUSE_CURSOR_DEFAULT: c_int = 0;
pub const MOUSE_CURSOR_ARROW: c_int = 1;
pub const MOUSE_CURSOR_IBEAM: c_int = 2;
pub const MOUSE_CURSOR_CROSSHAIR: c_int = 3;
pub const MOUSE_CURSOR_POINTING_HAND: c_int = 4;
pub const MOUSE_CURSOR_RESIZE_EW: c_int = 5;
pub const MOUSE_CURSOR_RESIZE_NS: c_int = 6;
pub const MOUSE_CURSOR_RESIZE_NWSE: c_int = 7;
pub const MOUSE_CURSOR_RESIZE_NESW: c_int = 8;
pub const MOUSE_CURSOR_RESIZE_ALL: c_int = 9;
pub const MOUSE_CURSOR_NOT_ALLOWED: c_int = 10;
pub const MouseCursor = c_uint;
pub const GAMEPAD_BUTTON_UNKNOWN: c_int = 0;
pub const GAMEPAD_BUTTON_LEFT_FACE_UP: c_int = 1;
pub const GAMEPAD_BUTTON_LEFT_FACE_RIGHT: c_int = 2;
pub const GAMEPAD_BUTTON_LEFT_FACE_DOWN: c_int = 3;
pub const GAMEPAD_BUTTON_LEFT_FACE_LEFT: c_int = 4;
pub const GAMEPAD_BUTTON_RIGHT_FACE_UP: c_int = 5;
pub const GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: c_int = 6;
pub const GAMEPAD_BUTTON_RIGHT_FACE_DOWN: c_int = 7;
pub const GAMEPAD_BUTTON_RIGHT_FACE_LEFT: c_int = 8;
pub const GAMEPAD_BUTTON_LEFT_TRIGGER_1: c_int = 9;
pub const GAMEPAD_BUTTON_LEFT_TRIGGER_2: c_int = 10;
pub const GAMEPAD_BUTTON_RIGHT_TRIGGER_1: c_int = 11;
pub const GAMEPAD_BUTTON_RIGHT_TRIGGER_2: c_int = 12;
pub const GAMEPAD_BUTTON_MIDDLE_LEFT: c_int = 13;
pub const GAMEPAD_BUTTON_MIDDLE: c_int = 14;
pub const GAMEPAD_BUTTON_MIDDLE_RIGHT: c_int = 15;
pub const GAMEPAD_BUTTON_LEFT_THUMB: c_int = 16;
pub const GAMEPAD_BUTTON_RIGHT_THUMB: c_int = 17;
pub const GamepadButton = c_uint;
pub const GAMEPAD_AXIS_LEFT_X: c_int = 0;
pub const GAMEPAD_AXIS_LEFT_Y: c_int = 1;
pub const GAMEPAD_AXIS_RIGHT_X: c_int = 2;
pub const GAMEPAD_AXIS_RIGHT_Y: c_int = 3;
pub const GAMEPAD_AXIS_LEFT_TRIGGER: c_int = 4;
pub const GAMEPAD_AXIS_RIGHT_TRIGGER: c_int = 5;
pub const GamepadAxis = c_uint;
pub const MATERIAL_MAP_ALBEDO: c_int = 0;
pub const MATERIAL_MAP_METALNESS: c_int = 1;
pub const MATERIAL_MAP_NORMAL: c_int = 2;
pub const MATERIAL_MAP_ROUGHNESS: c_int = 3;
pub const MATERIAL_MAP_OCCLUSION: c_int = 4;
pub const MATERIAL_MAP_EMISSION: c_int = 5;
pub const MATERIAL_MAP_HEIGHT: c_int = 6;
pub const MATERIAL_MAP_CUBEMAP: c_int = 7;
pub const MATERIAL_MAP_IRRADIANCE: c_int = 8;
pub const MATERIAL_MAP_PREFILTER: c_int = 9;
pub const MATERIAL_MAP_BRDF: c_int = 10;
pub const MaterialMapIndex = c_uint;
pub const SHADER_LOC_VERTEX_POSITION: c_int = 0;
pub const SHADER_LOC_VERTEX_TEXCOORD01: c_int = 1;
pub const SHADER_LOC_VERTEX_TEXCOORD02: c_int = 2;
pub const SHADER_LOC_VERTEX_NORMAL: c_int = 3;
pub const SHADER_LOC_VERTEX_TANGENT: c_int = 4;
pub const SHADER_LOC_VERTEX_COLOR: c_int = 5;
pub const SHADER_LOC_MATRIX_MVP: c_int = 6;
pub const SHADER_LOC_MATRIX_VIEW: c_int = 7;
pub const SHADER_LOC_MATRIX_PROJECTION: c_int = 8;
pub const SHADER_LOC_MATRIX_MODEL: c_int = 9;
pub const SHADER_LOC_MATRIX_NORMAL: c_int = 10;
pub const SHADER_LOC_VECTOR_VIEW: c_int = 11;
pub const SHADER_LOC_COLOR_DIFFUSE: c_int = 12;
pub const SHADER_LOC_COLOR_SPECULAR: c_int = 13;
pub const SHADER_LOC_COLOR_AMBIENT: c_int = 14;
pub const SHADER_LOC_MAP_ALBEDO: c_int = 15;
pub const SHADER_LOC_MAP_METALNESS: c_int = 16;
pub const SHADER_LOC_MAP_NORMAL: c_int = 17;
pub const SHADER_LOC_MAP_ROUGHNESS: c_int = 18;
pub const SHADER_LOC_MAP_OCCLUSION: c_int = 19;
pub const SHADER_LOC_MAP_EMISSION: c_int = 20;
pub const SHADER_LOC_MAP_HEIGHT: c_int = 21;
pub const SHADER_LOC_MAP_CUBEMAP: c_int = 22;
pub const SHADER_LOC_MAP_IRRADIANCE: c_int = 23;
pub const SHADER_LOC_MAP_PREFILTER: c_int = 24;
pub const SHADER_LOC_MAP_BRDF: c_int = 25;
pub const ShaderLocationIndex = c_uint;
pub const SHADER_UNIFORM_FLOAT: c_int = 0;
pub const SHADER_UNIFORM_VEC2: c_int = 1;
pub const SHADER_UNIFORM_VEC3: c_int = 2;
pub const SHADER_UNIFORM_VEC4: c_int = 3;
pub const SHADER_UNIFORM_INT: c_int = 4;
pub const SHADER_UNIFORM_IVEC2: c_int = 5;
pub const SHADER_UNIFORM_IVEC3: c_int = 6;
pub const SHADER_UNIFORM_IVEC4: c_int = 7;
pub const SHADER_UNIFORM_SAMPLER2D: c_int = 8;
pub const ShaderUniformDataType = c_uint;
pub const SHADER_ATTRIB_FLOAT: c_int = 0;
pub const SHADER_ATTRIB_VEC2: c_int = 1;
pub const SHADER_ATTRIB_VEC3: c_int = 2;
pub const SHADER_ATTRIB_VEC4: c_int = 3;
pub const ShaderAttributeDataType = c_uint;
pub const PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: c_int = 1;
pub const PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: c_int = 2;
pub const PIXELFORMAT_UNCOMPRESSED_R5G6B5: c_int = 3;
pub const PIXELFORMAT_UNCOMPRESSED_R8G8B8: c_int = 4;
pub const PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: c_int = 5;
pub const PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: c_int = 6;
pub const PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: c_int = 7;
pub const PIXELFORMAT_UNCOMPRESSED_R32: c_int = 8;
pub const PIXELFORMAT_UNCOMPRESSED_R32G32B32: c_int = 9;
pub const PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: c_int = 10;
pub const PIXELFORMAT_UNCOMPRESSED_R16: c_int = 11;
pub const PIXELFORMAT_UNCOMPRESSED_R16G16B16: c_int = 12;
pub const PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: c_int = 13;
pub const PIXELFORMAT_COMPRESSED_DXT1_RGB: c_int = 14;
pub const PIXELFORMAT_COMPRESSED_DXT1_RGBA: c_int = 15;
pub const PIXELFORMAT_COMPRESSED_DXT3_RGBA: c_int = 16;
pub const PIXELFORMAT_COMPRESSED_DXT5_RGBA: c_int = 17;
pub const PIXELFORMAT_COMPRESSED_ETC1_RGB: c_int = 18;
pub const PIXELFORMAT_COMPRESSED_ETC2_RGB: c_int = 19;
pub const PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: c_int = 20;
pub const PIXELFORMAT_COMPRESSED_PVRT_RGB: c_int = 21;
pub const PIXELFORMAT_COMPRESSED_PVRT_RGBA: c_int = 22;
pub const PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: c_int = 23;
pub const PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: c_int = 24;
pub const PixelFormat = c_uint;
pub const TEXTURE_FILTER_POINT: c_int = 0;
pub const TEXTURE_FILTER_BILINEAR: c_int = 1;
pub const TEXTURE_FILTER_TRILINEAR: c_int = 2;
pub const TEXTURE_FILTER_ANISOTROPIC_4X: c_int = 3;
pub const TEXTURE_FILTER_ANISOTROPIC_8X: c_int = 4;
pub const TEXTURE_FILTER_ANISOTROPIC_16X: c_int = 5;
pub const TextureFilter = c_uint;
pub const TEXTURE_WRAP_REPEAT: c_int = 0;
pub const TEXTURE_WRAP_CLAMP: c_int = 1;
pub const TEXTURE_WRAP_MIRROR_REPEAT: c_int = 2;
pub const TEXTURE_WRAP_MIRROR_CLAMP: c_int = 3;
pub const TextureWrap = c_uint;
pub const CUBEMAP_LAYOUT_AUTO_DETECT: c_int = 0;
pub const CUBEMAP_LAYOUT_LINE_VERTICAL: c_int = 1;
pub const CUBEMAP_LAYOUT_LINE_HORIZONTAL: c_int = 2;
pub const CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: c_int = 3;
pub const CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: c_int = 4;
pub const CUBEMAP_LAYOUT_PANORAMA: c_int = 5;
pub const CubemapLayout = c_uint;
pub const FONT_DEFAULT: c_int = 0;
pub const FONT_BITMAP: c_int = 1;
pub const FONT_SDF: c_int = 2;
pub const FontType = c_uint;
pub const BLEND_ALPHA: c_int = 0;
pub const BLEND_ADDITIVE: c_int = 1;
pub const BLEND_MULTIPLIED: c_int = 2;
pub const BLEND_ADD_COLORS: c_int = 3;
pub const BLEND_SUBTRACT_COLORS: c_int = 4;
pub const BLEND_ALPHA_PREMULTIPLY: c_int = 5;
pub const BLEND_CUSTOM: c_int = 6;
pub const BLEND_CUSTOM_SEPARATE: c_int = 7;
pub const BlendMode = c_uint;
pub const GESTURE_NONE: c_int = 0;
pub const GESTURE_TAP: c_int = 1;
pub const GESTURE_DOUBLETAP: c_int = 2;
pub const GESTURE_HOLD: c_int = 4;
pub const GESTURE_DRAG: c_int = 8;
pub const GESTURE_SWIPE_RIGHT: c_int = 16;
pub const GESTURE_SWIPE_LEFT: c_int = 32;
pub const GESTURE_SWIPE_UP: c_int = 64;
pub const GESTURE_SWIPE_DOWN: c_int = 128;
pub const GESTURE_PINCH_IN: c_int = 256;
pub const GESTURE_PINCH_OUT: c_int = 512;
pub const Gesture = c_uint;
pub const CAMERA_CUSTOM: c_int = 0;
pub const CAMERA_FREE: c_int = 1;
pub const CAMERA_ORBITAL: c_int = 2;
pub const CAMERA_FIRST_PERSON: c_int = 3;
pub const CAMERA_THIRD_PERSON: c_int = 4;
pub const CameraMode = c_uint;
pub const CAMERA_PERSPECTIVE: c_int = 0;
pub const CAMERA_ORTHOGRAPHIC: c_int = 1;
pub const CameraProjection = c_uint;
pub const NPATCH_NINE_PATCH: c_int = 0;
pub const NPATCH_THREE_PATCH_VERTICAL: c_int = 1;
pub const NPATCH_THREE_PATCH_HORIZONTAL: c_int = 2;
pub const NPatchLayout = c_uint;
pub const TraceLogCallback = ?*const fn (c_int, [*c]const u8, [*c]struct___va_list_tag_1) callconv(.C) void;
pub const LoadFileDataCallback = ?*const fn ([*c]const u8, [*c]c_int) callconv(.C) [*c]u8;
pub const SaveFileDataCallback = ?*const fn ([*c]const u8, ?*anyopaque, c_int) callconv(.C) bool;
pub const LoadFileTextCallback = ?*const fn ([*c]const u8) callconv(.C) [*c]u8;
pub const SaveFileTextCallback = ?*const fn ([*c]const u8, [*c]u8) callconv(.C) bool;
pub extern fn InitWindow(width: c_int, height: c_int, title: [*c]const u8) void;
pub extern fn CloseWindow() void;
pub extern fn WindowShouldClose() bool;
pub extern fn IsWindowReady() bool;
pub extern fn IsWindowFullscreen() bool;
pub extern fn IsWindowHidden() bool;
pub extern fn IsWindowMinimized() bool;
pub extern fn IsWindowMaximized() bool;
pub extern fn IsWindowFocused() bool;
pub extern fn IsWindowResized() bool;
pub extern fn IsWindowState(flag: c_uint) bool;
pub extern fn SetWindowState(flags: c_uint) void;
pub extern fn ClearWindowState(flags: c_uint) void;
pub extern fn ToggleFullscreen() void;
pub extern fn ToggleBorderlessWindowed() void;
pub extern fn MaximizeWindow() void;
pub extern fn MinimizeWindow() void;
pub extern fn RestoreWindow() void;
pub extern fn SetWindowIcon(image: Image) void;
pub extern fn SetWindowIcons(images: [*c]Image, count: c_int) void;
pub extern fn SetWindowTitle(title: [*c]const u8) void;
pub extern fn SetWindowPosition(x: c_int, y: c_int) void;
pub extern fn SetWindowMonitor(monitor: c_int) void;
pub extern fn SetWindowMinSize(width: c_int, height: c_int) void;
pub extern fn SetWindowMaxSize(width: c_int, height: c_int) void;
pub extern fn SetWindowSize(width: c_int, height: c_int) void;
pub extern fn SetWindowOpacity(opacity: f32) void;
pub extern fn SetWindowFocused() void;
pub extern fn GetWindowHandle() ?*anyopaque;
pub extern fn GetScreenWidth() c_int;
pub extern fn GetScreenHeight() c_int;
pub extern fn GetRenderWidth() c_int;
pub extern fn GetRenderHeight() c_int;
pub extern fn GetMonitorCount() c_int;
pub extern fn GetCurrentMonitor() c_int;
pub extern fn GetMonitorPosition(monitor: c_int) Vector2;
pub extern fn GetMonitorWidth(monitor: c_int) c_int;
pub extern fn GetMonitorHeight(monitor: c_int) c_int;
pub extern fn GetMonitorPhysicalWidth(monitor: c_int) c_int;
pub extern fn GetMonitorPhysicalHeight(monitor: c_int) c_int;
pub extern fn GetMonitorRefreshRate(monitor: c_int) c_int;
pub extern fn GetWindowPosition() Vector2;
pub extern fn GetWindowScaleDPI() Vector2;
pub extern fn GetMonitorName(monitor: c_int) [*c]const u8;
pub extern fn SetClipboardText(text: [*c]const u8) void;
pub extern fn GetClipboardText() [*c]const u8;
pub extern fn EnableEventWaiting() void;
pub extern fn DisableEventWaiting() void;
pub extern fn ShowCursor() void;
pub extern fn HideCursor() void;
pub extern fn IsCursorHidden() bool;
pub extern fn EnableCursor() void;
pub extern fn DisableCursor() void;
pub extern fn IsCursorOnScreen() bool;
pub extern fn ClearBackground(color: Color) void;
pub extern fn BeginDrawing() void;
pub extern fn EndDrawing() void;
pub extern fn BeginMode2D(camera: Camera2D) void;
pub extern fn EndMode2D() void;
pub extern fn BeginMode3D(camera: Camera3D) void;
pub extern fn EndMode3D() void;
pub extern fn BeginTextureMode(target: RenderTexture2D) void;
pub extern fn EndTextureMode() void;
pub extern fn BeginShaderMode(shader: Shader) void;
pub extern fn EndShaderMode() void;
pub extern fn BeginBlendMode(mode: c_int) void;
pub extern fn EndBlendMode() void;
pub extern fn BeginScissorMode(x: c_int, y: c_int, width: c_int, height: c_int) void;
pub extern fn EndScissorMode() void;
pub extern fn BeginVrStereoMode(config: VrStereoConfig) void;
pub extern fn EndVrStereoMode() void;
pub extern fn LoadVrStereoConfig(device: VrDeviceInfo) VrStereoConfig;
pub extern fn UnloadVrStereoConfig(config: VrStereoConfig) void;
pub extern fn LoadShader(vsFileName: [*c]const u8, fsFileName: [*c]const u8) Shader;
pub extern fn LoadShaderFromMemory(vsCode: [*c]const u8, fsCode: [*c]const u8) Shader;
pub extern fn IsShaderReady(shader: Shader) bool;
pub extern fn GetShaderLocation(shader: Shader, uniformName: [*c]const u8) c_int;
pub extern fn GetShaderLocationAttrib(shader: Shader, attribName: [*c]const u8) c_int;
pub extern fn SetShaderValue(shader: Shader, locIndex: c_int, value: ?*const anyopaque, uniformType: c_int) void;
pub extern fn SetShaderValueV(shader: Shader, locIndex: c_int, value: ?*const anyopaque, uniformType: c_int, count: c_int) void;
pub extern fn SetShaderValueMatrix(shader: Shader, locIndex: c_int, mat: Matrix) void;
pub extern fn SetShaderValueTexture(shader: Shader, locIndex: c_int, texture: Texture2D) void;
pub extern fn UnloadShader(shader: Shader) void;
pub extern fn GetScreenToWorldRay(position: Vector2, camera: Camera) Ray;
pub extern fn GetScreenToWorldRayEx(position: Vector2, camera: Camera, width: c_int, height: c_int) Ray;
pub extern fn GetWorldToScreen(position: Vector3, camera: Camera) Vector2;
pub extern fn GetWorldToScreenEx(position: Vector3, camera: Camera, width: c_int, height: c_int) Vector2;
pub extern fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) Vector2;
pub extern fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) Vector2;
pub extern fn GetCameraMatrix(camera: Camera) Matrix;
pub extern fn GetCameraMatrix2D(camera: Camera2D) Matrix;
pub extern fn SetTargetFPS(fps: c_int) void;
pub extern fn GetFrameTime() f32;
pub extern fn GetTime() f64;
pub extern fn GetFPS() c_int;
pub extern fn SwapScreenBuffer() void;
pub extern fn PollInputEvents() void;
pub extern fn WaitTime(seconds: f64) void;
pub extern fn SetRandomSeed(seed: c_uint) void;
pub extern fn GetRandomValue(min: c_int, max: c_int) c_int;
pub extern fn LoadRandomSequence(count: c_uint, min: c_int, max: c_int) [*c]c_int;
pub extern fn UnloadRandomSequence(sequence: [*c]c_int) void;
pub extern fn TakeScreenshot(fileName: [*c]const u8) void;
pub extern fn SetConfigFlags(flags: c_uint) void;
pub extern fn OpenURL(url: [*c]const u8) void;
pub extern fn TraceLog(logLevel: c_int, text: [*c]const u8, ...) void;
pub extern fn SetTraceLogLevel(logLevel: c_int) void;
pub extern fn MemAlloc(size: c_uint) ?*anyopaque;
pub extern fn MemRealloc(ptr: ?*anyopaque, size: c_uint) ?*anyopaque;
pub extern fn MemFree(ptr: ?*anyopaque) void;
pub extern fn SetTraceLogCallback(callback: TraceLogCallback) void;
pub extern fn SetLoadFileDataCallback(callback: LoadFileDataCallback) void;
pub extern fn SetSaveFileDataCallback(callback: SaveFileDataCallback) void;
pub extern fn SetLoadFileTextCallback(callback: LoadFileTextCallback) void;
pub extern fn SetSaveFileTextCallback(callback: SaveFileTextCallback) void;
pub extern fn LoadFileData(fileName: [*c]const u8, dataSize: [*c]c_int) [*c]u8;
pub extern fn UnloadFileData(data: [*c]u8) void;
pub extern fn SaveFileData(fileName: [*c]const u8, data: ?*anyopaque, dataSize: c_int) bool;
pub extern fn ExportDataAsCode(data: [*c]const u8, dataSize: c_int, fileName: [*c]const u8) bool;
pub extern fn LoadFileText(fileName: [*c]const u8) [*c]u8;
pub extern fn UnloadFileText(text: [*c]u8) void;
pub extern fn SaveFileText(fileName: [*c]const u8, text: [*c]u8) bool;
pub extern fn FileExists(fileName: [*c]const u8) bool;
pub extern fn DirectoryExists(dirPath: [*c]const u8) bool;
pub extern fn IsFileExtension(fileName: [*c]const u8, ext: [*c]const u8) bool;
pub extern fn GetFileLength(fileName: [*c]const u8) c_int;
pub extern fn GetFileExtension(fileName: [*c]const u8) [*c]const u8;
pub extern fn GetFileName(filePath: [*c]const u8) [*c]const u8;
pub extern fn GetFileNameWithoutExt(filePath: [*c]const u8) [*c]const u8;
pub extern fn GetDirectoryPath(filePath: [*c]const u8) [*c]const u8;
pub extern fn GetPrevDirectoryPath(dirPath: [*c]const u8) [*c]const u8;
pub extern fn GetWorkingDirectory() [*c]const u8;
pub extern fn GetApplicationDirectory() [*c]const u8;
pub extern fn ChangeDirectory(dir: [*c]const u8) bool;
pub extern fn IsPathFile(path: [*c]const u8) bool;
pub extern fn IsFileNameValid(fileName: [*c]const u8) bool;
pub extern fn LoadDirectoryFiles(dirPath: [*c]const u8) FilePathList;
pub extern fn LoadDirectoryFilesEx(basePath: [*c]const u8, filter: [*c]const u8, scanSubdirs: bool) FilePathList;
pub extern fn UnloadDirectoryFiles(files: FilePathList) void;
pub extern fn IsFileDropped() bool;
pub extern fn LoadDroppedFiles() FilePathList;
pub extern fn UnloadDroppedFiles(files: FilePathList) void;
pub extern fn GetFileModTime(fileName: [*c]const u8) c_long;
pub extern fn CompressData(data: [*c]const u8, dataSize: c_int, compDataSize: [*c]c_int) [*c]u8;
pub extern fn DecompressData(compData: [*c]const u8, compDataSize: c_int, dataSize: [*c]c_int) [*c]u8;
pub extern fn EncodeDataBase64(data: [*c]const u8, dataSize: c_int, outputSize: [*c]c_int) [*c]u8;
pub extern fn DecodeDataBase64(data: [*c]const u8, outputSize: [*c]c_int) [*c]u8;
pub extern fn LoadAutomationEventList(fileName: [*c]const u8) AutomationEventList;
pub extern fn UnloadAutomationEventList(list: AutomationEventList) void;
pub extern fn ExportAutomationEventList(list: AutomationEventList, fileName: [*c]const u8) bool;
pub extern fn SetAutomationEventList(list: [*c]AutomationEventList) void;
pub extern fn SetAutomationEventBaseFrame(frame: c_int) void;
pub extern fn StartAutomationEventRecording() void;
pub extern fn StopAutomationEventRecording() void;
pub extern fn PlayAutomationEvent(event: AutomationEvent) void;
pub extern fn IsKeyPressed(key: c_int) bool;
pub extern fn IsKeyPressedRepeat(key: c_int) bool;
pub extern fn IsKeyDown(key: c_int) bool;
pub extern fn IsKeyReleased(key: c_int) bool;
pub extern fn IsKeyUp(key: c_int) bool;
pub extern fn GetKeyPressed() c_int;
pub extern fn GetCharPressed() c_int;
pub extern fn SetExitKey(key: c_int) void;
pub extern fn IsGamepadAvailable(gamepad: c_int) bool;
pub extern fn GetGamepadName(gamepad: c_int) [*c]const u8;
pub extern fn IsGamepadButtonPressed(gamepad: c_int, button: c_int) bool;
pub extern fn IsGamepadButtonDown(gamepad: c_int, button: c_int) bool;
pub extern fn IsGamepadButtonReleased(gamepad: c_int, button: c_int) bool;
pub extern fn IsGamepadButtonUp(gamepad: c_int, button: c_int) bool;
pub extern fn GetGamepadButtonPressed() c_int;
pub extern fn GetGamepadAxisCount(gamepad: c_int) c_int;
pub extern fn GetGamepadAxisMovement(gamepad: c_int, axis: c_int) f32;
pub extern fn SetGamepadMappings(mappings: [*c]const u8) c_int;
pub extern fn SetGamepadVibration(gamepad: c_int, leftMotor: f32, rightMotor: f32) void;
pub extern fn IsMouseButtonPressed(button: c_int) bool;
pub extern fn IsMouseButtonDown(button: c_int) bool;
pub extern fn IsMouseButtonReleased(button: c_int) bool;
pub extern fn IsMouseButtonUp(button: c_int) bool;
pub extern fn GetMouseX() c_int;
pub extern fn GetMouseY() c_int;
pub extern fn GetMousePosition() Vector2;
pub extern fn GetMouseDelta() Vector2;
pub extern fn SetMousePosition(x: c_int, y: c_int) void;
pub extern fn SetMouseOffset(offsetX: c_int, offsetY: c_int) void;
pub extern fn SetMouseScale(scaleX: f32, scaleY: f32) void;
pub extern fn GetMouseWheelMove() f32;
pub extern fn GetMouseWheelMoveV() Vector2;
pub extern fn SetMouseCursor(cursor: c_int) void;
pub extern fn GetTouchX() c_int;
pub extern fn GetTouchY() c_int;
pub extern fn GetTouchPosition(index: c_int) Vector2;
pub extern fn GetTouchPointId(index: c_int) c_int;
pub extern fn GetTouchPointCount() c_int;
pub extern fn SetGesturesEnabled(flags: c_uint) void;
pub extern fn IsGestureDetected(gesture: c_uint) bool;
pub extern fn GetGestureDetected() c_int;
pub extern fn GetGestureHoldDuration() f32;
pub extern fn GetGestureDragVector() Vector2;
pub extern fn GetGestureDragAngle() f32;
pub extern fn GetGesturePinchVector() Vector2;
pub extern fn GetGesturePinchAngle() f32;
pub extern fn UpdateCamera(camera: [*c]Camera, mode: c_int) void;
pub extern fn UpdateCameraPro(camera: [*c]Camera, movement: Vector3, rotation: Vector3, zoom: f32) void;
pub extern fn SetShapesTexture(texture: Texture2D, source: Rectangle) void;
pub extern fn GetShapesTexture() Texture2D;
pub extern fn GetShapesTextureRectangle() Rectangle;
pub extern fn DrawPixel(posX: c_int, posY: c_int, color: Color) void;
pub extern fn DrawPixelV(position: Vector2, color: Color) void;
pub extern fn DrawLine(startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: Color) void;
pub extern fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color) void;
pub extern fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void;
pub extern fn DrawLineStrip(points: [*c]const Vector2, pointCount: c_int, color: Color) void;
pub extern fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void;
pub extern fn DrawCircle(centerX: c_int, centerY: c_int, radius: f32, color: Color) void;
pub extern fn DrawCircleSector(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void;
pub extern fn DrawCircleSectorLines(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void;
pub extern fn DrawCircleGradient(centerX: c_int, centerY: c_int, radius: f32, inner: Color, outer: Color) void;
pub extern fn DrawCircleV(center: Vector2, radius: f32, color: Color) void;
pub extern fn DrawCircleLines(centerX: c_int, centerY: c_int, radius: f32, color: Color) void;
pub extern fn DrawCircleLinesV(center: Vector2, radius: f32, color: Color) void;
pub extern fn DrawEllipse(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: Color) void;
pub extern fn DrawEllipseLines(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: Color) void;
pub extern fn DrawRing(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void;
pub extern fn DrawRingLines(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void;
pub extern fn DrawRectangle(posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void;
pub extern fn DrawRectangleV(position: Vector2, size: Vector2, color: Color) void;
pub extern fn DrawRectangleRec(rec: Rectangle, color: Color) void;
pub extern fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color) void;
pub extern fn DrawRectangleGradientV(posX: c_int, posY: c_int, width: c_int, height: c_int, top: Color, bottom: Color) void;
pub extern fn DrawRectangleGradientH(posX: c_int, posY: c_int, width: c_int, height: c_int, left: Color, right: Color) void;
pub extern fn DrawRectangleGradientEx(rec: Rectangle, topLeft: Color, bottomLeft: Color, topRight: Color, bottomRight: Color) void;
pub extern fn DrawRectangleLines(posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void;
pub extern fn DrawRectangleLinesEx(rec: Rectangle, lineThick: f32, color: Color) void;
pub extern fn DrawRectangleRounded(rec: Rectangle, roundness: f32, segments: c_int, color: Color) void;
pub extern fn DrawRectangleRoundedLines(rec: Rectangle, roundness: f32, segments: c_int, color: Color) void;
pub extern fn DrawRectangleRoundedLinesEx(rec: Rectangle, roundness: f32, segments: c_int, lineThick: f32, color: Color) void;
pub extern fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void;
pub extern fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void;
pub extern fn DrawTriangleFan(points: [*c]const Vector2, pointCount: c_int, color: Color) void;
pub extern fn DrawTriangleStrip(points: [*c]const Vector2, pointCount: c_int, color: Color) void;
pub extern fn DrawPoly(center: Vector2, sides: c_int, radius: f32, rotation: f32, color: Color) void;
pub extern fn DrawPolyLines(center: Vector2, sides: c_int, radius: f32, rotation: f32, color: Color) void;
pub extern fn DrawPolyLinesEx(center: Vector2, sides: c_int, radius: f32, rotation: f32, lineThick: f32, color: Color) void;
pub extern fn DrawSplineLinear(points: [*c]const Vector2, pointCount: c_int, thick: f32, color: Color) void;
pub extern fn DrawSplineBasis(points: [*c]const Vector2, pointCount: c_int, thick: f32, color: Color) void;
pub extern fn DrawSplineCatmullRom(points: [*c]const Vector2, pointCount: c_int, thick: f32, color: Color) void;
pub extern fn DrawSplineBezierQuadratic(points: [*c]const Vector2, pointCount: c_int, thick: f32, color: Color) void;
pub extern fn DrawSplineBezierCubic(points: [*c]const Vector2, pointCount: c_int, thick: f32, color: Color) void;
pub extern fn DrawSplineSegmentLinear(p1: Vector2, p2: Vector2, thick: f32, color: Color) void;
pub extern fn DrawSplineSegmentBasis(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2, thick: f32, color: Color) void;
pub extern fn DrawSplineSegmentCatmullRom(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2, thick: f32, color: Color) void;
pub extern fn DrawSplineSegmentBezierQuadratic(p1: Vector2, c2: Vector2, p3: Vector2, thick: f32, color: Color) void;
pub extern fn DrawSplineSegmentBezierCubic(p1: Vector2, c2: Vector2, c3: Vector2, p4: Vector2, thick: f32, color: Color) void;
pub extern fn GetSplinePointLinear(startPos: Vector2, endPos: Vector2, t: f32) Vector2;
pub extern fn GetSplinePointBasis(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2, t: f32) Vector2;
pub extern fn GetSplinePointCatmullRom(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2, t: f32) Vector2;
pub extern fn GetSplinePointBezierQuad(p1: Vector2, c2: Vector2, p3: Vector2, t: f32) Vector2;
pub extern fn GetSplinePointBezierCubic(p1: Vector2, c2: Vector2, c3: Vector2, p4: Vector2, t: f32) Vector2;
pub extern fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) bool;
pub extern fn CheckCollisionCircles(center1: Vector2, radius1: f32, center2: Vector2, radius2: f32) bool;
pub extern fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) bool;
pub extern fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) bool;
pub extern fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) bool;
pub extern fn CheckCollisionPointTriangle(point: Vector2, p1: Vector2, p2: Vector2, p3: Vector2) bool;
pub extern fn CheckCollisionPointPoly(point: Vector2, points: [*c]const Vector2, pointCount: c_int) bool;
pub extern fn CheckCollisionLines(startPos1: Vector2, endPos1: Vector2, startPos2: Vector2, endPos2: Vector2, collisionPoint: [*c]Vector2) bool;
pub extern fn CheckCollisionPointLine(point: Vector2, p1: Vector2, p2: Vector2, threshold: c_int) bool;
pub extern fn CheckCollisionCircleLine(center: Vector2, radius: f32, p1: Vector2, p2: Vector2) bool;
pub extern fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) Rectangle;
pub extern fn LoadImage(fileName: [*c]const u8) Image;
pub extern fn LoadImageRaw(fileName: [*c]const u8, width: c_int, height: c_int, format: c_int, headerSize: c_int) Image;
pub extern fn LoadImageSvg(fileNameOrString: [*c]const u8, width: c_int, height: c_int) Image;
pub extern fn LoadImageAnim(fileName: [*c]const u8, frames: [*c]c_int) Image;
pub extern fn LoadImageAnimFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int, frames: [*c]c_int) Image;
pub extern fn LoadImageFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) Image;
pub extern fn LoadImageFromTexture(texture: Texture2D) Image;
pub extern fn LoadImageFromScreen() Image;
pub extern fn IsImageReady(image: Image) bool;
pub extern fn UnloadImage(image: Image) void;
pub extern fn ExportImage(image: Image, fileName: [*c]const u8) bool;
pub extern fn ExportImageToMemory(image: Image, fileType: [*c]const u8, fileSize: [*c]c_int) [*c]u8;
pub extern fn ExportImageAsCode(image: Image, fileName: [*c]const u8) bool;
pub extern fn GenImageColor(width: c_int, height: c_int, color: Color) Image;
pub extern fn GenImageGradientLinear(width: c_int, height: c_int, direction: c_int, start: Color, end: Color) Image;
pub extern fn GenImageGradientRadial(width: c_int, height: c_int, density: f32, inner: Color, outer: Color) Image;
pub extern fn GenImageGradientSquare(width: c_int, height: c_int, density: f32, inner: Color, outer: Color) Image;
pub extern fn GenImageChecked(width: c_int, height: c_int, checksX: c_int, checksY: c_int, col1: Color, col2: Color) Image;
pub extern fn GenImageWhiteNoise(width: c_int, height: c_int, factor: f32) Image;
pub extern fn GenImagePerlinNoise(width: c_int, height: c_int, offsetX: c_int, offsetY: c_int, scale: f32) Image;
pub extern fn GenImageCellular(width: c_int, height: c_int, tileSize: c_int) Image;
pub extern fn GenImageText(width: c_int, height: c_int, text: [*c]const u8) Image;
pub extern fn ImageCopy(image: Image) Image;
pub extern fn ImageFromImage(image: Image, rec: Rectangle) Image;
pub extern fn ImageFromChannel(image: Image, selectedChannel: c_int) Image;
pub extern fn ImageText(text: [*c]const u8, fontSize: c_int, color: Color) Image;
pub extern fn ImageTextEx(font: Font, text: [*c]const u8, fontSize: f32, spacing: f32, tint: Color) Image;
pub extern fn ImageFormat(image: [*c]Image, newFormat: c_int) void;
pub extern fn ImageToPOT(image: [*c]Image, fill: Color) void;
pub extern fn ImageCrop(image: [*c]Image, crop: Rectangle) void;
pub extern fn ImageAlphaCrop(image: [*c]Image, threshold: f32) void;
pub extern fn ImageAlphaClear(image: [*c]Image, color: Color, threshold: f32) void;
pub extern fn ImageAlphaMask(image: [*c]Image, alphaMask: Image) void;
pub extern fn ImageAlphaPremultiply(image: [*c]Image) void;
pub extern fn ImageBlurGaussian(image: [*c]Image, blurSize: c_int) void;
pub extern fn ImageKernelConvolution(image: [*c]Image, kernel: [*c]const f32, kernelSize: c_int) void;
pub extern fn ImageResize(image: [*c]Image, newWidth: c_int, newHeight: c_int) void;
pub extern fn ImageResizeNN(image: [*c]Image, newWidth: c_int, newHeight: c_int) void;
pub extern fn ImageResizeCanvas(image: [*c]Image, newWidth: c_int, newHeight: c_int, offsetX: c_int, offsetY: c_int, fill: Color) void;
pub extern fn ImageMipmaps(image: [*c]Image) void;
pub extern fn ImageDither(image: [*c]Image, rBpp: c_int, gBpp: c_int, bBpp: c_int, aBpp: c_int) void;
pub extern fn ImageFlipVertical(image: [*c]Image) void;
pub extern fn ImageFlipHorizontal(image: [*c]Image) void;
pub extern fn ImageRotate(image: [*c]Image, degrees: c_int) void;
pub extern fn ImageRotateCW(image: [*c]Image) void;
pub extern fn ImageRotateCCW(image: [*c]Image) void;
pub extern fn ImageColorTint(image: [*c]Image, color: Color) void;
pub extern fn ImageColorInvert(image: [*c]Image) void;
pub extern fn ImageColorGrayscale(image: [*c]Image) void;
pub extern fn ImageColorContrast(image: [*c]Image, contrast: f32) void;
pub extern fn ImageColorBrightness(image: [*c]Image, brightness: c_int) void;
pub extern fn ImageColorReplace(image: [*c]Image, color: Color, replace: Color) void;
pub extern fn LoadImageColors(image: Image) [*c]Color;
pub extern fn LoadImagePalette(image: Image, maxPaletteSize: c_int, colorCount: [*c]c_int) [*c]Color;
pub extern fn UnloadImageColors(colors: [*c]Color) void;
pub extern fn UnloadImagePalette(colors: [*c]Color) void;
pub extern fn GetImageAlphaBorder(image: Image, threshold: f32) Rectangle;
pub extern fn GetImageColor(image: Image, x: c_int, y: c_int) Color;
pub extern fn ImageClearBackground(dst: [*c]Image, color: Color) void;
pub extern fn ImageDrawPixel(dst: [*c]Image, posX: c_int, posY: c_int, color: Color) void;
pub extern fn ImageDrawPixelV(dst: [*c]Image, position: Vector2, color: Color) void;
pub extern fn ImageDrawLine(dst: [*c]Image, startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: Color) void;
pub extern fn ImageDrawLineV(dst: [*c]Image, start: Vector2, end: Vector2, color: Color) void;
pub extern fn ImageDrawLineEx(dst: [*c]Image, start: Vector2, end: Vector2, thick: c_int, color: Color) void;
pub extern fn ImageDrawCircle(dst: [*c]Image, centerX: c_int, centerY: c_int, radius: c_int, color: Color) void;
pub extern fn ImageDrawCircleV(dst: [*c]Image, center: Vector2, radius: c_int, color: Color) void;
pub extern fn ImageDrawCircleLines(dst: [*c]Image, centerX: c_int, centerY: c_int, radius: c_int, color: Color) void;
pub extern fn ImageDrawCircleLinesV(dst: [*c]Image, center: Vector2, radius: c_int, color: Color) void;
pub extern fn ImageDrawRectangle(dst: [*c]Image, posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void;
pub extern fn ImageDrawRectangleV(dst: [*c]Image, position: Vector2, size: Vector2, color: Color) void;
pub extern fn ImageDrawRectangleRec(dst: [*c]Image, rec: Rectangle, color: Color) void;
pub extern fn ImageDrawRectangleLines(dst: [*c]Image, rec: Rectangle, thick: c_int, color: Color) void;
pub extern fn ImageDrawTriangle(dst: [*c]Image, v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void;
pub extern fn ImageDrawTriangleEx(dst: [*c]Image, v1: Vector2, v2: Vector2, v3: Vector2, c1: Color, c2: Color, c3: Color) void;
pub extern fn ImageDrawTriangleLines(dst: [*c]Image, v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void;
pub extern fn ImageDrawTriangleFan(dst: [*c]Image, points: [*c]Vector2, pointCount: c_int, color: Color) void;
pub extern fn ImageDrawTriangleStrip(dst: [*c]Image, points: [*c]Vector2, pointCount: c_int, color: Color) void;
pub extern fn ImageDraw(dst: [*c]Image, src: Image, srcRec: Rectangle, dstRec: Rectangle, tint: Color) void;
pub extern fn ImageDrawText(dst: [*c]Image, text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: Color) void;
pub extern fn ImageDrawTextEx(dst: [*c]Image, font: Font, text: [*c]const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void;
pub extern fn LoadTexture(fileName: [*c]const u8) Texture2D;
pub extern fn LoadTextureFromImage(image: Image) Texture2D;
pub extern fn LoadTextureCubemap(image: Image, layout: c_int) TextureCubemap;
pub extern fn LoadRenderTexture(width: c_int, height: c_int) RenderTexture2D;
pub extern fn IsTextureReady(texture: Texture2D) bool;
pub extern fn UnloadTexture(texture: Texture2D) void;
pub extern fn IsRenderTextureReady(target: RenderTexture2D) bool;
pub extern fn UnloadRenderTexture(target: RenderTexture2D) void;
pub extern fn UpdateTexture(texture: Texture2D, pixels: ?*const anyopaque) void;
pub extern fn UpdateTextureRec(texture: Texture2D, rec: Rectangle, pixels: ?*const anyopaque) void;
pub extern fn GenTextureMipmaps(texture: [*c]Texture2D) void;
pub extern fn SetTextureFilter(texture: Texture2D, filter: c_int) void;
pub extern fn SetTextureWrap(texture: Texture2D, wrap: c_int) void;
pub extern fn DrawTexture(texture: Texture2D, posX: c_int, posY: c_int, tint: Color) void;
pub extern fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color) void;
pub extern fn DrawTextureEx(texture: Texture2D, position: Vector2, rotation: f32, scale: f32, tint: Color) void;
pub extern fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color) void;
pub extern fn DrawTexturePro(texture: Texture2D, source: Rectangle, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void;
pub extern fn DrawTextureNPatch(texture: Texture2D, nPatchInfo: NPatchInfo, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void;
pub extern fn ColorIsEqual(col1: Color, col2: Color) bool;
pub extern fn Fade(color: Color, alpha: f32) Color;
pub extern fn ColorToInt(color: Color) c_int;
pub extern fn ColorNormalize(color: Color) Vector4;
pub extern fn ColorFromNormalized(normalized: Vector4) Color;
pub extern fn ColorToHSV(color: Color) Vector3;
pub extern fn ColorFromHSV(hue: f32, saturation: f32, value: f32) Color;
pub extern fn ColorTint(color: Color, tint: Color) Color;
pub extern fn ColorBrightness(color: Color, factor: f32) Color;
pub extern fn ColorContrast(color: Color, contrast: f32) Color;
pub extern fn ColorAlpha(color: Color, alpha: f32) Color;
pub extern fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) Color;
pub extern fn GetColor(hexValue: c_uint) Color;
pub extern fn GetPixelColor(srcPtr: ?*anyopaque, format: c_int) Color;
pub extern fn SetPixelColor(dstPtr: ?*anyopaque, color: Color, format: c_int) void;
pub extern fn GetPixelDataSize(width: c_int, height: c_int, format: c_int) c_int;
pub extern fn GetFontDefault() Font;
pub extern fn LoadFont(fileName: [*c]const u8) Font;
pub extern fn LoadFontEx(fileName: [*c]const u8, fontSize: c_int, codepoints: [*c]c_int, codepointCount: c_int) Font;
pub extern fn LoadFontFromImage(image: Image, key: Color, firstChar: c_int) Font;
pub extern fn LoadFontFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, codepoints: [*c]c_int, codepointCount: c_int) Font;
pub extern fn IsFontReady(font: Font) bool;
pub extern fn LoadFontData(fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, codepoints: [*c]c_int, codepointCount: c_int, @"type": c_int) [*c]GlyphInfo;
pub extern fn GenImageFontAtlas(glyphs: [*c]const GlyphInfo, glyphRecs: [*c][*c]Rectangle, glyphCount: c_int, fontSize: c_int, padding: c_int, packMethod: c_int) Image;
pub extern fn UnloadFontData(glyphs: [*c]GlyphInfo, glyphCount: c_int) void;
pub extern fn UnloadFont(font: Font) void;
pub extern fn ExportFontAsCode(font: Font, fileName: [*c]const u8) bool;
pub extern fn DrawFPS(posX: c_int, posY: c_int) void;
pub extern fn DrawText(text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: Color) void;
pub extern fn DrawTextEx(font: Font, text: [*c]const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void;
pub extern fn DrawTextPro(font: Font, text: [*c]const u8, position: Vector2, origin: Vector2, rotation: f32, fontSize: f32, spacing: f32, tint: Color) void;
pub extern fn DrawTextCodepoint(font: Font, codepoint: c_int, position: Vector2, fontSize: f32, tint: Color) void;
pub extern fn DrawTextCodepoints(font: Font, codepoints: [*c]const c_int, codepointCount: c_int, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void;
pub extern fn SetTextLineSpacing(spacing: c_int) void;
pub extern fn MeasureText(text: [*c]const u8, fontSize: c_int) c_int;
pub extern fn MeasureTextEx(font: Font, text: [*c]const u8, fontSize: f32, spacing: f32) Vector2;
pub extern fn GetGlyphIndex(font: Font, codepoint: c_int) c_int;
pub extern fn GetGlyphInfo(font: Font, codepoint: c_int) GlyphInfo;
pub extern fn GetGlyphAtlasRec(font: Font, codepoint: c_int) Rectangle;
pub extern fn LoadUTF8(codepoints: [*c]const c_int, length: c_int) [*c]u8;
pub extern fn UnloadUTF8(text: [*c]u8) void;
pub extern fn LoadCodepoints(text: [*c]const u8, count: [*c]c_int) [*c]c_int;
pub extern fn UnloadCodepoints(codepoints: [*c]c_int) void;
pub extern fn GetCodepointCount(text: [*c]const u8) c_int;
pub extern fn GetCodepoint(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern fn GetCodepointNext(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern fn GetCodepointPrevious(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern fn CodepointToUTF8(codepoint: c_int, utf8Size: [*c]c_int) [*c]const u8;
pub extern fn TextCopy(dst: [*c]u8, src: [*c]const u8) c_int;
pub extern fn TextIsEqual(text1: [*c]const u8, text2: [*c]const u8) bool;
pub extern fn TextLength(text: [*c]const u8) c_uint;
pub extern fn TextFormat(text: [*c]const u8, ...) [*c]const u8;
pub extern fn TextSubtext(text: [*c]const u8, position: c_int, length: c_int) [*c]const u8;
pub extern fn TextReplace(text: [*c]const u8, replace: [*c]const u8, by: [*c]const u8) [*c]u8;
pub extern fn TextInsert(text: [*c]const u8, insert: [*c]const u8, position: c_int) [*c]u8;
pub extern fn TextJoin(textList: [*c][*c]const u8, count: c_int, delimiter: [*c]const u8) [*c]const u8;
pub extern fn TextSplit(text: [*c]const u8, delimiter: u8, count: [*c]c_int) [*c][*c]const u8;
pub extern fn TextAppend(text: [*c]u8, append: [*c]const u8, position: [*c]c_int) void;
pub extern fn TextFindIndex(text: [*c]const u8, find: [*c]const u8) c_int;
pub extern fn TextToUpper(text: [*c]const u8) [*c]const u8;
pub extern fn TextToLower(text: [*c]const u8) [*c]const u8;
pub extern fn TextToPascal(text: [*c]const u8) [*c]const u8;
pub extern fn TextToSnake(text: [*c]const u8) [*c]const u8;
pub extern fn TextToCamel(text: [*c]const u8) [*c]const u8;
pub extern fn TextToInteger(text: [*c]const u8) c_int;
pub extern fn TextToFloat(text: [*c]const u8) f32;
pub export fn DrawLine3D(arg_startPos: Vector3, arg_endPos: Vector3, arg_color: Color) void {
var startPos = arg_startPos;
_ = &startPos;
var endPos = arg_endPos;
_ = &endPos;
var color = arg_color;
_ = &color;
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(startPos.x, startPos.y, startPos.z);
rlVertex3f(endPos.x, endPos.y, endPos.z);
rlEnd();
}
pub export fn DrawPoint3D(arg_position: Vector3, arg_color: Color) void {
var position = arg_position;
_ = &position;
var color = arg_color;
_ = &color;
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(0.0, 0.0, 0.0);
rlVertex3f(0.0, 0.0, 0.10000000149011612);
rlEnd();
rlPopMatrix();
}
pub export fn DrawCircle3D(arg_center: Vector3, arg_radius: f32, arg_rotationAxis: Vector3, arg_rotationAngle: f32, arg_color: Color) void {
var center = arg_center;
_ = &center;
var radius = arg_radius;
_ = &radius;
var rotationAxis = arg_rotationAxis;
_ = &rotationAxis;
var rotationAngle = arg_rotationAngle;
_ = &rotationAngle;
var color = arg_color;
_ = &color;
rlPushMatrix();
rlTranslatef(center.x, center.y, center.z);
rlRotatef(rotationAngle, rotationAxis.x, rotationAxis.y, rotationAxis.z);
rlBegin(@as(c_int, 1));
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 360)) : (i += @as(c_int, 10)) {
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(sinf((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * radius, cosf((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * radius, 0.0);
rlVertex3f(sinf((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 10)))) * radius, cosf((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 10)))) * radius, 0.0);
}
}
rlEnd();
rlPopMatrix();
}
pub export fn DrawTriangle3D(arg_v1: Vector3, arg_v2: Vector3, arg_v3: Vector3, arg_color: Color) void {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var v3 = arg_v3;
_ = &v3;
var color = arg_color;
_ = &color;
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(v1.x, v1.y, v1.z);
rlVertex3f(v2.x, v2.y, v2.z);
rlVertex3f(v3.x, v3.y, v3.z);
rlEnd();
}
pub export fn DrawTriangleStrip3D(arg_points: [*c]const Vector3, arg_pointCount: c_int, arg_color: Color) void {
var points = arg_points;
_ = &points;
var pointCount = arg_pointCount;
_ = &pointCount;
var color = arg_color;
_ = &color;
if (pointCount < @as(c_int, 3)) return;
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var i: c_int = 2;
_ = &i;
while (i < pointCount) : (i += 1) {
if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 2)) == @as(c_int, 0)) {
rlVertex3f((blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
rlVertex3f((blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
rlVertex3f((blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
} else {
rlVertex3f((blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i;
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
rlVertex3f((blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i - @as(c_int, 1);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
rlVertex3f((blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x, (blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y, (blk: {
const tmp = i - @as(c_int, 2);
if (tmp >= 0) break :blk points + @as(usize, @intCast(tmp)) else break :blk points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z);
}
}
}
rlEnd();
}
pub export fn DrawCube(arg_position: Vector3, arg_width: f32, arg_height: f32, arg_length: f32, arg_color: Color) void {
var position = arg_position;
_ = &position;
var width = arg_width;
_ = &width;
var height = arg_height;
_ = &height;
var length = arg_length;
_ = &length;
var color = arg_color;
_ = &color;
var x: f32 = 0.0;
_ = &x;
var y: f32 = 0.0;
_ = &y;
var z: f32 = 0.0;
_ = &z;
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
rlNormal3f(0.0, 0.0, 1.0);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlNormal3f(0.0, 0.0, -1.0);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlNormal3f(0.0, 1.0, 0.0);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlNormal3f(0.0, -1.0, 0.0);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlNormal3f(1.0, 0.0, 0.0);
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlNormal3f(-1.0, 0.0, 0.0);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlEnd();
rlPopMatrix();
}
pub export fn DrawCubeV(arg_position: Vector3, arg_size: Vector3, arg_color: Color) void {
var position = arg_position;
_ = &position;
var size = arg_size;
_ = &size;
var color = arg_color;
_ = &color;
DrawCube(position, size.x, size.y, size.z, color);
}
pub export fn DrawCubeWires(arg_position: Vector3, arg_width: f32, arg_height: f32, arg_length: f32, arg_color: Color) void {
var position = arg_position;
_ = &position;
var width = arg_width;
_ = &width;
var height = arg_height;
_ = &height;
var length = arg_length;
_ = &length;
var color = arg_color;
_ = &color;
var x: f32 = 0.0;
_ = &x;
var y: f32 = 0.0;
_ = &y;
var z: f32 = 0.0;
_ = &z;
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y + (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x - (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z + (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlVertex3f(x + (width / @as(f32, @floatFromInt(@as(c_int, 2)))), y - (height / @as(f32, @floatFromInt(@as(c_int, 2)))), z - (length / @as(f32, @floatFromInt(@as(c_int, 2)))));
rlEnd();
rlPopMatrix();
}
pub export fn DrawCubeWiresV(arg_position: Vector3, arg_size: Vector3, arg_color: Color) void {
var position = arg_position;
_ = &position;
var size = arg_size;
_ = &size;
var color = arg_color;
_ = &color;
DrawCubeWires(position, size.x, size.y, size.z, color);
}
pub export fn DrawSphere(arg_centerPos: Vector3, arg_radius: f32, arg_color: Color) void {
var centerPos = arg_centerPos;
_ = &centerPos;
var radius = arg_radius;
_ = &radius;
var color = arg_color;
_ = &color;
DrawSphereEx(centerPos, radius, @as(c_int, 16), @as(c_int, 16), color);
}
pub export fn DrawSphereEx(arg_centerPos: Vector3, arg_radius: f32, arg_rings: c_int, arg_slices: c_int, arg_color: Color) void {
var centerPos = arg_centerPos;
_ = &centerPos;
var radius = arg_radius;
_ = &radius;
var rings = arg_rings;
_ = &rings;
var slices = arg_slices;
_ = &slices;
var color = arg_color;
_ = &color;
rlPushMatrix();
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
rlScalef(radius, radius, radius);
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
var ringangle: f32 = (3.1415927410125732 / 180.0) * (180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1))));
_ = &ringangle;
var sliceangle: f32 = (3.1415927410125732 / 180.0) * (360.0 / @as(f32, @floatFromInt(slices)));
_ = &sliceangle;
var cosring: f32 = cosf(ringangle);
_ = &cosring;
var sinring: f32 = sinf(ringangle);
_ = &sinring;
var cosslice: f32 = cosf(sliceangle);
_ = &cosslice;
var sinslice: f32 = sinf(sliceangle);
_ = &sinslice;
var vertices: [4]Vector3 = [1]Vector3{
Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
},
} ++ [1]Vector3{@import("std").mem.zeroes(Vector3)} ** 3;
_ = &vertices;
vertices[@as(c_uint, @intCast(@as(c_int, 2)))] = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
};
vertices[@as(c_uint, @intCast(@as(c_int, 3)))] = Vector3{
.x = sinring,
.y = cosring,
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
};
{
var i: c_int = 0;
_ = &i;
while (i < (rings + @as(c_int, 1))) : (i += 1) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
vertices[@as(c_uint, @intCast(@as(c_int, 0)))] = vertices[@as(c_uint, @intCast(@as(c_int, 2)))];
vertices[@as(c_uint, @intCast(@as(c_int, 1)))] = vertices[@as(c_uint, @intCast(@as(c_int, 3)))];
vertices[@as(c_uint, @intCast(@as(c_int, 2)))] = Vector3{
.x = (cosslice * vertices[@as(c_uint, @intCast(@as(c_int, 2)))].x) - (sinslice * vertices[@as(c_uint, @intCast(@as(c_int, 2)))].z),
.y = vertices[@as(c_uint, @intCast(@as(c_int, 2)))].y,
.z = (sinslice * vertices[@as(c_uint, @intCast(@as(c_int, 2)))].x) + (cosslice * vertices[@as(c_uint, @intCast(@as(c_int, 2)))].z),
};
vertices[@as(c_uint, @intCast(@as(c_int, 3)))] = Vector3{
.x = (cosslice * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x) - (sinslice * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].z),
.y = vertices[@as(c_uint, @intCast(@as(c_int, 3)))].y,
.z = (sinslice * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x) + (cosslice * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].z),
};
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 0)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 0)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 0)))].z);
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 3)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 3)))].z);
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 1)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 1)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 1)))].z);
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 0)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 0)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 0)))].z);
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 2)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 2)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 2)))].z);
rlVertex3f(vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x, vertices[@as(c_uint, @intCast(@as(c_int, 3)))].y, vertices[@as(c_uint, @intCast(@as(c_int, 3)))].z);
}
}
vertices[@as(c_uint, @intCast(@as(c_int, 2)))] = vertices[@as(c_uint, @intCast(@as(c_int, 3)))];
vertices[@as(c_uint, @intCast(@as(c_int, 3)))] = Vector3{
.x = (cosring * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x) + (sinring * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].y),
.y = (-sinring * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].x) + (cosring * vertices[@as(c_uint, @intCast(@as(c_int, 3)))].y),
.z = vertices[@as(c_uint, @intCast(@as(c_int, 3)))].z,
};
}
}
rlEnd();
rlPopMatrix();
}
pub export fn DrawSphereWires(arg_centerPos: Vector3, arg_radius: f32, arg_rings: c_int, arg_slices: c_int, arg_color: Color) void {
var centerPos = arg_centerPos;
_ = &centerPos;
var radius = arg_radius;
_ = &radius;
var rings = arg_rings;
_ = &rings;
var slices = arg_slices;
_ = &slices;
var color = arg_color;
_ = &color;
rlPushMatrix();
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
rlScalef(radius, radius, radius);
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var i: c_int = 0;
_ = &i;
while (i < (rings + @as(c_int, 2))) : (i += 1) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))));
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j + @as(c_int, 1)))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j + @as(c_int, 1)))) / @as(f32, @floatFromInt(slices)))));
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j + @as(c_int, 1)))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j + @as(c_int, 1)))) / @as(f32, @floatFromInt(slices)))));
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))));
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i + @as(c_int, 1)))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))));
rlVertex3f(cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))) * sinf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))), sinf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))), cosf((3.1415927410125732 / 180.0) * (@as(f32, @floatFromInt(@as(c_int, 270))) + ((180.0 / @as(f32, @floatFromInt(rings + @as(c_int, 1)))) * @as(f32, @floatFromInt(i))))) * cosf((3.1415927410125732 / 180.0) * ((360.0 * @as(f32, @floatFromInt(j))) / @as(f32, @floatFromInt(slices)))));
}
}
}
}
rlEnd();
rlPopMatrix();
}
pub export fn DrawCylinder(arg_position: Vector3, arg_radiusTop: f32, arg_radiusBottom: f32, arg_height: f32, arg_sides: c_int, arg_color: Color) void {
var position = arg_position;
_ = &position;
var radiusTop = arg_radiusTop;
_ = &radiusTop;
var radiusBottom = arg_radiusBottom;
_ = &radiusBottom;
var height = arg_height;
_ = &height;
var sides = arg_sides;
_ = &sides;
var color = arg_color;
_ = &color;
if (sides < @as(c_int, 3)) {
sides = 3;
}
const angleStep: f32 = 360.0 / @as(f32, @floatFromInt(sides));
_ = &angleStep;
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
if (radiusTop > @as(f32, @floatFromInt(@as(c_int, 0)))) {
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop);
}
}
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
rlVertex3f(@as(f32, @floatFromInt(@as(c_int, 0))), height, @as(f32, @floatFromInt(@as(c_int, 0))));
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop);
}
}
} else {
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
rlVertex3f(@as(f32, @floatFromInt(@as(c_int, 0))), height, @as(f32, @floatFromInt(@as(c_int, 0))));
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom);
}
}
}
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
rlVertex3f(@as(f32, @floatFromInt(@as(c_int, 0))), @as(f32, @floatFromInt(@as(c_int, 0))), @as(f32, @floatFromInt(@as(c_int, 0))));
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
}
}
rlEnd();
rlPopMatrix();
}
pub export fn DrawCylinderEx(arg_startPos: Vector3, arg_endPos: Vector3, arg_startRadius: f32, arg_endRadius: f32, arg_sides: c_int, arg_color: Color) void {
var startPos = arg_startPos;
_ = &startPos;
var endPos = arg_endPos;
_ = &endPos;
var startRadius = arg_startRadius;
_ = &startRadius;
var endRadius = arg_endRadius;
_ = &endRadius;
var sides = arg_sides;
_ = &sides;
var color = arg_color;
_ = &color;
if (sides < @as(c_int, 3)) {
sides = 3;
}
var direction: Vector3 = Vector3{
.x = endPos.x - startPos.x,
.y = endPos.y - startPos.y,
.z = endPos.z - startPos.z,
};
_ = &direction;
if (((direction.x == @as(f32, @floatFromInt(@as(c_int, 0)))) and (direction.y == @as(f32, @floatFromInt(@as(c_int, 0))))) and (direction.z == @as(f32, @floatFromInt(@as(c_int, 0))))) return;
var b1: Vector3 = Vector3Normalize(Vector3Perpendicular(direction));
_ = &b1;
var b2: Vector3 = Vector3Normalize(Vector3CrossProduct(b1, direction));
_ = &b2;
var baseAngle: f32 = (2.0 * 3.1415927410125732) / @as(f32, @floatFromInt(sides));
_ = &baseAngle;
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
var s1: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * startRadius;
_ = &s1;
var c1: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * startRadius;
_ = &c1;
var w1: Vector3 = Vector3{
.x = (startPos.x + (s1 * b1.x)) + (c1 * b2.x),
.y = (startPos.y + (s1 * b1.y)) + (c1 * b2.y),
.z = (startPos.z + (s1 * b1.z)) + (c1 * b2.z),
};
_ = &w1;
var s2: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * startRadius;
_ = &s2;
var c2: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * startRadius;
_ = &c2;
var w2: Vector3 = Vector3{
.x = (startPos.x + (s2 * b1.x)) + (c2 * b2.x),
.y = (startPos.y + (s2 * b1.y)) + (c2 * b2.y),
.z = (startPos.z + (s2 * b1.z)) + (c2 * b2.z),
};
_ = &w2;
var s3: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * endRadius;
_ = &s3;
var c3: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * endRadius;
_ = &c3;
var w3: Vector3 = Vector3{
.x = (endPos.x + (s3 * b1.x)) + (c3 * b2.x),
.y = (endPos.y + (s3 * b1.y)) + (c3 * b2.y),
.z = (endPos.z + (s3 * b1.z)) + (c3 * b2.z),
};
_ = &w3;
var s4: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * endRadius;
_ = &s4;
var c4: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * endRadius;
_ = &c4;
var w4: Vector3 = Vector3{
.x = (endPos.x + (s4 * b1.x)) + (c4 * b2.x),
.y = (endPos.y + (s4 * b1.y)) + (c4 * b2.y),
.z = (endPos.z + (s4 * b1.z)) + (c4 * b2.z),
};
_ = &w4;
if (startRadius > @as(f32, @floatFromInt(@as(c_int, 0)))) {
rlVertex3f(startPos.x, startPos.y, startPos.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w1.x, w1.y, w1.z);
}
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w4.x, w4.y, w4.z);
rlVertex3f(w3.x, w3.y, w3.z);
if (endRadius > @as(f32, @floatFromInt(@as(c_int, 0)))) {
rlVertex3f(endPos.x, endPos.y, endPos.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w4.x, w4.y, w4.z);
}
}
}
rlEnd();
}
pub export fn DrawCylinderWires(arg_position: Vector3, arg_radiusTop: f32, arg_radiusBottom: f32, arg_height: f32, arg_sides: c_int, arg_color: Color) void {
var position = arg_position;
_ = &position;
var radiusTop = arg_radiusTop;
_ = &radiusTop;
var radiusBottom = arg_radiusBottom;
_ = &radiusBottom;
var height = arg_height;
_ = &height;
var sides = arg_sides;
_ = &sides;
var color = arg_color;
_ = &color;
if (sides < @as(c_int, 3)) {
sides = 3;
}
const angleStep: f32 = 360.0 / @as(f32, @floatFromInt(sides));
_ = &angleStep;
rlPushMatrix();
rlTranslatef(position.x, position.y, position.z);
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusBottom);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop, height, cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusTop);
rlVertex3f(sinf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom, @as(f32, @floatFromInt(@as(c_int, 0))), cosf(((3.1415927410125732 / 180.0) * @as(f32, @floatFromInt(i))) * angleStep) * radiusBottom);
}
}
rlEnd();
rlPopMatrix();
}
pub export fn DrawCylinderWiresEx(arg_startPos: Vector3, arg_endPos: Vector3, arg_startRadius: f32, arg_endRadius: f32, arg_sides: c_int, arg_color: Color) void {
var startPos = arg_startPos;
_ = &startPos;
var endPos = arg_endPos;
_ = &endPos;
var startRadius = arg_startRadius;
_ = &startRadius;
var endRadius = arg_endRadius;
_ = &endRadius;
var sides = arg_sides;
_ = &sides;
var color = arg_color;
_ = &color;
if (sides < @as(c_int, 3)) {
sides = 3;
}
var direction: Vector3 = Vector3{
.x = endPos.x - startPos.x,
.y = endPos.y - startPos.y,
.z = endPos.z - startPos.z,
};
_ = &direction;
if (((direction.x == @as(f32, @floatFromInt(@as(c_int, 0)))) and (direction.y == @as(f32, @floatFromInt(@as(c_int, 0))))) and (direction.z == @as(f32, @floatFromInt(@as(c_int, 0))))) return;
var b1: Vector3 = Vector3Normalize(Vector3Perpendicular(direction));
_ = &b1;
var b2: Vector3 = Vector3Normalize(Vector3CrossProduct(b1, direction));
_ = &b2;
var baseAngle: f32 = (2.0 * 3.1415927410125732) / @as(f32, @floatFromInt(sides));
_ = &baseAngle;
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var i: c_int = 0;
_ = &i;
while (i < sides) : (i += 1) {
var s1: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * startRadius;
_ = &s1;
var c1: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * startRadius;
_ = &c1;
var w1: Vector3 = Vector3{
.x = (startPos.x + (s1 * b1.x)) + (c1 * b2.x),
.y = (startPos.y + (s1 * b1.y)) + (c1 * b2.y),
.z = (startPos.z + (s1 * b1.z)) + (c1 * b2.z),
};
_ = &w1;
var s2: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * startRadius;
_ = &s2;
var c2: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * startRadius;
_ = &c2;
var w2: Vector3 = Vector3{
.x = (startPos.x + (s2 * b1.x)) + (c2 * b2.x),
.y = (startPos.y + (s2 * b1.y)) + (c2 * b2.y),
.z = (startPos.z + (s2 * b1.z)) + (c2 * b2.z),
};
_ = &w2;
var s3: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * endRadius;
_ = &s3;
var c3: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * endRadius;
_ = &c3;
var w3: Vector3 = Vector3{
.x = (endPos.x + (s3 * b1.x)) + (c3 * b2.x),
.y = (endPos.y + (s3 * b1.y)) + (c3 * b2.y),
.z = (endPos.z + (s3 * b1.z)) + (c3 * b2.z),
};
_ = &w3;
var s4: f32 = sinf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * endRadius;
_ = &s4;
var c4: f32 = cosf(baseAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * endRadius;
_ = &c4;
var w4: Vector3 = Vector3{
.x = (endPos.x + (s4 * b1.x)) + (c4 * b2.x),
.y = (endPos.y + (s4 * b1.y)) + (c4 * b2.y),
.z = (endPos.z + (s4 * b1.z)) + (c4 * b2.z),
};
_ = &w4;
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w4.x, w4.y, w4.z);
}
}
rlEnd();
}
pub export fn DrawCapsule(arg_startPos: Vector3, arg_endPos: Vector3, arg_radius: f32, arg_slices: c_int, arg_rings: c_int, arg_color: Color) void {
var startPos = arg_startPos;
_ = &startPos;
var endPos = arg_endPos;
_ = &endPos;
var radius = arg_radius;
_ = &radius;
var slices = arg_slices;
_ = &slices;
var rings = arg_rings;
_ = &rings;
var color = arg_color;
_ = &color;
if (slices < @as(c_int, 3)) {
slices = 3;
}
var direction: Vector3 = Vector3{
.x = endPos.x - startPos.x,
.y = endPos.y - startPos.y,
.z = endPos.z - startPos.z,
};
_ = &direction;
var sphereCase: bool = ((direction.x == @as(f32, @floatFromInt(@as(c_int, 0)))) and (direction.y == @as(f32, @floatFromInt(@as(c_int, 0))))) and (direction.z == @as(f32, @floatFromInt(@as(c_int, 0))));
_ = &sphereCase;
if (sphereCase) {
direction = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
}
var b0: Vector3 = Vector3Normalize(direction);
_ = &b0;
var b1: Vector3 = Vector3Normalize(Vector3Perpendicular(direction));
_ = &b1;
var b2: Vector3 = Vector3Normalize(Vector3CrossProduct(b1, direction));
_ = &b2;
var capCenter: Vector3 = endPos;
_ = &capCenter;
var baseSliceAngle: f32 = (2.0 * 3.1415927410125732) / @as(f32, @floatFromInt(slices));
_ = &baseSliceAngle;
var baseRingAngle: f32 = (3.1415927410125732 * 0.5) / @as(f32, @floatFromInt(rings));
_ = &baseRingAngle;
rlBegin(@as(c_int, 4));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var c: c_int = 0;
_ = &c;
while (c < @as(c_int, 2)) : (c += 1) {
{
var i: c_int = 0;
_ = &i;
while (i < rings) : (i += 1) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
var ringSin1: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringSin1;
var ringCos1: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringCos1;
var w1: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.x) + (ringSin1 * b1.x)) + (ringCos1 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.y) + (ringSin1 * b1.y)) + (ringCos1 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.z) + (ringSin1 * b1.z)) + (ringCos1 * b2.z)) * radius),
};
_ = &w1;
var ringSin2: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringSin2;
var ringCos2: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringCos2;
var w2: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.x) + (ringSin2 * b1.x)) + (ringCos2 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.y) + (ringSin2 * b1.y)) + (ringCos2 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.z) + (ringSin2 * b1.z)) + (ringCos2 * b2.z)) * radius),
};
_ = &w2;
var ringSin3: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringSin3;
var ringCos3: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringCos3;
var w3: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.x) + (ringSin3 * b1.x)) + (ringCos3 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.y) + (ringSin3 * b1.y)) + (ringCos3 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.z) + (ringSin3 * b1.z)) + (ringCos3 * b2.z)) * radius),
};
_ = &w3;
var ringSin4: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringSin4;
var ringCos4: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringCos4;
var w4: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.x) + (ringSin4 * b1.x)) + (ringCos4 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.y) + (ringSin4 * b1.y)) + (ringCos4 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.z) + (ringSin4 * b1.z)) + (ringCos4 * b2.z)) * radius),
};
_ = &w4;
if (c == @as(c_int, 0)) {
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w4.x, w4.y, w4.z);
rlVertex3f(w3.x, w3.y, w3.z);
} else {
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w4.x, w4.y, w4.z);
}
}
}
}
}
capCenter = startPos;
b0 = Vector3Scale(b0, -1.0);
}
}
if (!sphereCase) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
var ringSin1: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringSin1;
var ringCos1: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringCos1;
var w1: Vector3 = Vector3{
.x = (startPos.x + (ringSin1 * b1.x)) + (ringCos1 * b2.x),
.y = (startPos.y + (ringSin1 * b1.y)) + (ringCos1 * b2.y),
.z = (startPos.z + (ringSin1 * b1.z)) + (ringCos1 * b2.z),
};
_ = &w1;
var ringSin2: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringSin2;
var ringCos2: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringCos2;
var w2: Vector3 = Vector3{
.x = (startPos.x + (ringSin2 * b1.x)) + (ringCos2 * b2.x),
.y = (startPos.y + (ringSin2 * b1.y)) + (ringCos2 * b2.y),
.z = (startPos.z + (ringSin2 * b1.z)) + (ringCos2 * b2.z),
};
_ = &w2;
var ringSin3: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringSin3;
var ringCos3: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringCos3;
var w3: Vector3 = Vector3{
.x = (endPos.x + (ringSin3 * b1.x)) + (ringCos3 * b2.x),
.y = (endPos.y + (ringSin3 * b1.y)) + (ringCos3 * b2.y),
.z = (endPos.z + (ringSin3 * b1.z)) + (ringCos3 * b2.z),
};
_ = &w3;
var ringSin4: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringSin4;
var ringCos4: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringCos4;
var w4: Vector3 = Vector3{
.x = (endPos.x + (ringSin4 * b1.x)) + (ringCos4 * b2.x),
.y = (endPos.y + (ringSin4 * b1.y)) + (ringCos4 * b2.y),
.z = (endPos.z + (ringSin4 * b1.z)) + (ringCos4 * b2.z),
};
_ = &w4;
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w4.x, w4.y, w4.z);
rlVertex3f(w3.x, w3.y, w3.z);
}
}
}
rlEnd();
}
pub export fn DrawCapsuleWires(arg_startPos: Vector3, arg_endPos: Vector3, arg_radius: f32, arg_slices: c_int, arg_rings: c_int, arg_color: Color) void {
var startPos = arg_startPos;
_ = &startPos;
var endPos = arg_endPos;
_ = &endPos;
var radius = arg_radius;
_ = &radius;
var slices = arg_slices;
_ = &slices;
var rings = arg_rings;
_ = &rings;
var color = arg_color;
_ = &color;
if (slices < @as(c_int, 3)) {
slices = 3;
}
var direction: Vector3 = Vector3{
.x = endPos.x - startPos.x,
.y = endPos.y - startPos.y,
.z = endPos.z - startPos.z,
};
_ = &direction;
var sphereCase: bool = ((direction.x == @as(f32, @floatFromInt(@as(c_int, 0)))) and (direction.y == @as(f32, @floatFromInt(@as(c_int, 0))))) and (direction.z == @as(f32, @floatFromInt(@as(c_int, 0))));
_ = &sphereCase;
if (sphereCase) {
direction = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
}
var b0: Vector3 = Vector3Normalize(direction);
_ = &b0;
var b1: Vector3 = Vector3Normalize(Vector3Perpendicular(direction));
_ = &b1;
var b2: Vector3 = Vector3Normalize(Vector3CrossProduct(b1, direction));
_ = &b2;
var capCenter: Vector3 = endPos;
_ = &capCenter;
var baseSliceAngle: f32 = (2.0 * 3.1415927410125732) / @as(f32, @floatFromInt(slices));
_ = &baseSliceAngle;
var baseRingAngle: f32 = (3.1415927410125732 * 0.5) / @as(f32, @floatFromInt(rings));
_ = &baseRingAngle;
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
{
var c: c_int = 0;
_ = &c;
while (c < @as(c_int, 2)) : (c += 1) {
{
var i: c_int = 0;
_ = &i;
while (i < rings) : (i += 1) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
var ringSin1: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringSin1;
var ringCos1: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringCos1;
var w1: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.x) + (ringSin1 * b1.x)) + (ringCos1 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.y) + (ringSin1 * b1.y)) + (ringCos1 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.z) + (ringSin1 * b1.z)) + (ringCos1 * b2.z)) * radius),
};
_ = &w1;
var ringSin2: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringSin2;
var ringCos2: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0))));
_ = &ringCos2;
var w2: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.x) + (ringSin2 * b1.x)) + (ringCos2 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.y) + (ringSin2 * b1.y)) + (ringCos2 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 0)))) * b0.z) + (ringSin2 * b1.z)) + (ringCos2 * b2.z)) * radius),
};
_ = &w2;
var ringSin3: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringSin3;
var ringCos3: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringCos3;
var w3: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.x) + (ringSin3 * b1.x)) + (ringCos3 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.y) + (ringSin3 * b1.y)) + (ringCos3 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.z) + (ringSin3 * b1.z)) + (ringCos3 * b2.z)) * radius),
};
_ = &w3;
var ringSin4: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringSin4;
var ringCos4: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * cosf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1))));
_ = &ringCos4;
var w4: Vector3 = Vector3{
.x = capCenter.x + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.x) + (ringSin4 * b1.x)) + (ringCos4 * b2.x)) * radius),
.y = capCenter.y + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.y) + (ringSin4 * b1.y)) + (ringCos4 * b2.y)) * radius),
.z = capCenter.z + ((((sinf(baseRingAngle * @as(f32, @floatFromInt(i + @as(c_int, 1)))) * b0.z) + (ringSin4 * b1.z)) + (ringCos4 * b2.z)) * radius),
};
_ = &w4;
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w4.x, w4.y, w4.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w4.x, w4.y, w4.z);
}
}
}
}
capCenter = startPos;
b0 = Vector3Scale(b0, -1.0);
}
}
if (!sphereCase) {
{
var j: c_int = 0;
_ = &j;
while (j < slices) : (j += 1) {
var ringSin1: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringSin1;
var ringCos1: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringCos1;
var w1: Vector3 = Vector3{
.x = (startPos.x + (ringSin1 * b1.x)) + (ringCos1 * b2.x),
.y = (startPos.y + (ringSin1 * b1.y)) + (ringCos1 * b2.y),
.z = (startPos.z + (ringSin1 * b1.z)) + (ringCos1 * b2.z),
};
_ = &w1;
var ringSin2: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringSin2;
var ringCos2: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringCos2;
var w2: Vector3 = Vector3{
.x = (startPos.x + (ringSin2 * b1.x)) + (ringCos2 * b2.x),
.y = (startPos.y + (ringSin2 * b1.y)) + (ringCos2 * b2.y),
.z = (startPos.z + (ringSin2 * b1.z)) + (ringCos2 * b2.z),
};
_ = &w2;
var ringSin3: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringSin3;
var ringCos3: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 0)))) * radius;
_ = &ringCos3;
var w3: Vector3 = Vector3{
.x = (endPos.x + (ringSin3 * b1.x)) + (ringCos3 * b2.x),
.y = (endPos.y + (ringSin3 * b1.y)) + (ringCos3 * b2.y),
.z = (endPos.z + (ringSin3 * b1.z)) + (ringCos3 * b2.z),
};
_ = &w3;
var ringSin4: f32 = sinf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringSin4;
var ringCos4: f32 = cosf(baseSliceAngle * @as(f32, @floatFromInt(j + @as(c_int, 1)))) * radius;
_ = &ringCos4;
var w4: Vector3 = Vector3{
.x = (endPos.x + (ringSin4 * b1.x)) + (ringCos4 * b2.x),
.y = (endPos.y + (ringSin4 * b1.y)) + (ringCos4 * b2.y),
.z = (endPos.z + (ringSin4 * b1.z)) + (ringCos4 * b2.z),
};
_ = &w4;
rlVertex3f(w1.x, w1.y, w1.z);
rlVertex3f(w3.x, w3.y, w3.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w4.x, w4.y, w4.z);
rlVertex3f(w2.x, w2.y, w2.z);
rlVertex3f(w3.x, w3.y, w3.z);
}
}
}
rlEnd();
}
pub export fn DrawPlane(arg_centerPos: Vector3, arg_size: Vector2, arg_color: Color) void {
var centerPos = arg_centerPos;
_ = &centerPos;
var size = arg_size;
_ = &size;
var color = arg_color;
_ = &color;
rlPushMatrix();
rlTranslatef(centerPos.x, centerPos.y, centerPos.z);
rlScalef(size.x, 1.0, size.y);
rlBegin(@as(c_int, 7));
rlColor4ub(color.r, color.g, color.b, color.a);
rlNormal3f(0.0, 1.0, 0.0);
rlVertex3f(-0.5, 0.0, -0.5);
rlVertex3f(-0.5, 0.0, 0.5);
rlVertex3f(0.5, 0.0, 0.5);
rlVertex3f(0.5, 0.0, -0.5);
rlEnd();
rlPopMatrix();
}
pub export fn DrawRay(arg_ray: Ray, arg_color: Color) void {
var ray = arg_ray;
_ = &ray;
var color = arg_color;
_ = &color;
var scale: f32 = 10000;
_ = &scale;
rlBegin(@as(c_int, 1));
rlColor4ub(color.r, color.g, color.b, color.a);
rlColor4ub(color.r, color.g, color.b, color.a);
rlVertex3f(ray.position.x, ray.position.y, ray.position.z);
rlVertex3f(ray.position.x + (ray.direction.x * scale), ray.position.y + (ray.direction.y * scale), ray.position.z + (ray.direction.z * scale));
rlEnd();
}
pub export fn DrawGrid(arg_slices: c_int, arg_spacing: f32) void {
var slices = arg_slices;
_ = &slices;
var spacing = arg_spacing;
_ = &spacing;
var halfSlices: c_int = @divTrunc(slices, @as(c_int, 2));
_ = &halfSlices;
rlBegin(@as(c_int, 1));
{
var i: c_int = -halfSlices;
_ = &i;
while (i <= halfSlices) : (i += 1) {
if (i == @as(c_int, 0)) {
rlColor3f(0.5, 0.5, 0.5);
} else {
rlColor3f(0.75, 0.75, 0.75);
}
rlVertex3f(@as(f32, @floatFromInt(i)) * spacing, 0.0, @as(f32, @floatFromInt(-halfSlices)) * spacing);
rlVertex3f(@as(f32, @floatFromInt(i)) * spacing, 0.0, @as(f32, @floatFromInt(halfSlices)) * spacing);
rlVertex3f(@as(f32, @floatFromInt(-halfSlices)) * spacing, 0.0, @as(f32, @floatFromInt(i)) * spacing);
rlVertex3f(@as(f32, @floatFromInt(halfSlices)) * spacing, 0.0, @as(f32, @floatFromInt(i)) * spacing);
}
}
rlEnd();
}
pub export fn LoadModel(arg_fileName: [*c]const u8) Model {
var fileName = arg_fileName;
_ = &fileName;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
if (IsFileExtension(fileName, ".obj")) {
model = LoadOBJ(fileName);
}
if (IsFileExtension(fileName, ".iqm")) {
model = LoadIQM(fileName);
}
if ((@as(c_int, @intFromBool(IsFileExtension(fileName, ".gltf"))) != 0) or (@as(c_int, @intFromBool(IsFileExtension(fileName, ".glb"))) != 0)) {
model = LoadGLTF(fileName);
}
if (IsFileExtension(fileName, ".vox")) {
model = LoadVOX(fileName);
}
if (IsFileExtension(fileName, ".m3d")) {
model = LoadM3D(fileName);
}
model.transform = MatrixIdentity();
if ((model.meshCount != @as(c_int, 0)) and (model.meshes != @as([*c]Mesh, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
UploadMesh(&(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(c_int, 0) != 0);
}
}
} else {
TraceLog(LOG_WARNING, "MESH: [%s] Failed to load model mesh(es) data", fileName);
}
if (model.materialCount == @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MATERIAL: [%s] Failed to load model material data, default to white material", fileName);
model.materialCount = 1;
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount))), @sizeOf(Material)))));
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
if (model.meshMaterial == @as([*c]c_int, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
}
}
return model;
}
pub export fn LoadModelFromMesh(arg_mesh: Mesh) Model {
var mesh = arg_mesh;
_ = &mesh;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
model.transform = MatrixIdentity();
model.meshCount = 1;
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(Mesh)))));
model.meshes[@as(c_uint, @intCast(@as(c_int, 0)))] = mesh;
model.materialCount = 1;
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount))), @sizeOf(Material)))));
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
model.meshMaterial[@as(c_uint, @intCast(@as(c_int, 0)))] = 0;
return model;
}
pub export fn IsModelReady(arg_model: Model) bool {
var model = arg_model;
_ = &model;
var result: bool = @as(c_int, 0) != 0;
_ = &result;
if (((((model.meshes != @as([*c]Mesh, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) and (model.materials != @as([*c]Material, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) and (model.meshMaterial != @as([*c]c_int, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) and (model.meshCount > @as(c_int, 0))) and (model.materialCount > @as(c_int, 0))) {
result = @as(c_int, 1) != 0;
}
return result;
}
pub export fn UnloadModel(arg_model: Model) void {
var model = arg_model;
_ = &model;
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
UnloadMesh((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
}
}
{
var i: c_int = 0;
_ = &i;
while (i < model.materialCount) : (i += 1) {
free(@as(?*anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.materials + @as(usize, @intCast(tmp)) else break :blk model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.maps)));
}
}
free(@as(?*anyopaque, @ptrCast(model.meshes)));
free(@as(?*anyopaque, @ptrCast(model.materials)));
free(@as(?*anyopaque, @ptrCast(model.meshMaterial)));
free(@as(?*anyopaque, @ptrCast(model.bones)));
free(@as(?*anyopaque, @ptrCast(model.bindPose)));
TraceLog(LOG_INFO, "MODEL: Unloaded model (and meshes) from RAM and VRAM");
}
pub export fn GetModelBoundingBox(arg_model: Model) BoundingBox {
var model = arg_model;
_ = &model;
var bounds: BoundingBox = BoundingBox{
.min = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
},
.max = @import("std").mem.zeroes(Vector3),
};
_ = &bounds;
if (model.meshCount > @as(c_int, 0)) {
var temp: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &temp;
bounds = GetMeshBoundingBox(model.meshes[@as(c_uint, @intCast(@as(c_int, 0)))]);
{
var i: c_int = 1;
_ = &i;
while (i < model.meshCount) : (i += 1) {
var tempBounds: BoundingBox = GetMeshBoundingBox((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
_ = &tempBounds;
temp.x = if (bounds.min.x < tempBounds.min.x) bounds.min.x else tempBounds.min.x;
temp.y = if (bounds.min.y < tempBounds.min.y) bounds.min.y else tempBounds.min.y;
temp.z = if (bounds.min.z < tempBounds.min.z) bounds.min.z else tempBounds.min.z;
bounds.min = temp;
temp.x = if (bounds.max.x > tempBounds.max.x) bounds.max.x else tempBounds.max.x;
temp.y = if (bounds.max.y > tempBounds.max.y) bounds.max.y else tempBounds.max.y;
temp.z = if (bounds.max.z > tempBounds.max.z) bounds.max.z else tempBounds.max.z;
bounds.max = temp;
}
}
}
bounds.min = Vector3Transform(bounds.min, model.transform);
bounds.max = Vector3Transform(bounds.max, model.transform);
return bounds;
}
pub export fn DrawModel(arg_model: Model, arg_position: Vector3, arg_scale: f32, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
var vScale: Vector3 = Vector3{
.x = scale,
.y = scale,
.z = scale,
};
_ = &vScale;
var rotationAxis: Vector3 = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
_ = &rotationAxis;
DrawModelEx(model, position, rotationAxis, 0.0, vScale, tint);
}
pub export fn DrawModelEx(arg_model: Model, arg_position: Vector3, arg_rotationAxis: Vector3, arg_rotationAngle: f32, arg_scale: Vector3, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var rotationAxis = arg_rotationAxis;
_ = &rotationAxis;
var rotationAngle = arg_rotationAngle;
_ = &rotationAngle;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
var matScale: Matrix = MatrixScale(scale.x, scale.y, scale.z);
_ = &matScale;
var matRotation: Matrix = MatrixRotate(rotationAxis, rotationAngle * (3.1415927410125732 / 180.0));
_ = &matRotation;
var matTranslation: Matrix = MatrixTranslate(position.x, position.y, position.z);
_ = &matTranslation;
var matTransform: Matrix = MatrixMultiply(MatrixMultiply(matScale, matRotation), matTranslation);
_ = &matTransform;
model.transform = MatrixMultiply(model.transform, matTransform);
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
var color: Color = (blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color;
_ = &color;
var colorTint: Color = Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
_ = &colorTint;
colorTint.r = @as(u8, @bitCast(@as(i8, @truncate(@divTrunc(@as(c_int, @bitCast(@as(c_uint, color.r))) * @as(c_int, @bitCast(@as(c_uint, tint.r))), @as(c_int, 255))))));
colorTint.g = @as(u8, @bitCast(@as(i8, @truncate(@divTrunc(@as(c_int, @bitCast(@as(c_uint, color.g))) * @as(c_int, @bitCast(@as(c_uint, tint.g))), @as(c_int, 255))))));
colorTint.b = @as(u8, @bitCast(@as(i8, @truncate(@divTrunc(@as(c_int, @bitCast(@as(c_uint, color.b))) * @as(c_int, @bitCast(@as(c_uint, tint.b))), @as(c_int, 255))))));
colorTint.a = @as(u8, @bitCast(@as(i8, @truncate(@divTrunc(@as(c_int, @bitCast(@as(c_uint, color.a))) * @as(c_int, @bitCast(@as(c_uint, tint.a))), @as(c_int, 255))))));
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = colorTint;
DrawMesh((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.meshMaterial + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*;
if (tmp >= 0) break :blk model.materials + @as(usize, @intCast(tmp)) else break :blk model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, model.transform);
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.meshMaterial + @as(usize, @intCast(tmp_3)) else break :blk_2 model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = color;
}
}
}
pub export fn DrawModelWires(arg_model: Model, arg_position: Vector3, arg_scale: f32, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
rlEnableWireMode();
DrawModel(model, position, scale, tint);
rlDisableWireMode();
}
pub export fn DrawModelWiresEx(arg_model: Model, arg_position: Vector3, arg_rotationAxis: Vector3, arg_rotationAngle: f32, arg_scale: Vector3, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var rotationAxis = arg_rotationAxis;
_ = &rotationAxis;
var rotationAngle = arg_rotationAngle;
_ = &rotationAngle;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
rlEnableWireMode();
DrawModelEx(model, position, rotationAxis, rotationAngle, scale, tint);
rlDisableWireMode();
}
pub export fn DrawModelPoints(arg_model: Model, arg_position: Vector3, arg_scale: f32, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
rlEnablePointMode();
rlDisableBackfaceCulling();
DrawModel(model, position, scale, tint);
rlEnableBackfaceCulling();
rlDisableWireMode();
}
pub export fn DrawModelPointsEx(arg_model: Model, arg_position: Vector3, arg_rotationAxis: Vector3, arg_rotationAngle: f32, arg_scale: Vector3, arg_tint: Color) void {
var model = arg_model;
_ = &model;
var position = arg_position;
_ = &position;
var rotationAxis = arg_rotationAxis;
_ = &rotationAxis;
var rotationAngle = arg_rotationAngle;
_ = &rotationAngle;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
rlEnablePointMode();
rlDisableBackfaceCulling();
DrawModelEx(model, position, rotationAxis, rotationAngle, scale, tint);
rlEnableBackfaceCulling();
rlDisableWireMode();
}
pub export fn DrawBoundingBox(arg_box: BoundingBox, arg_color: Color) void {
var box = arg_box;
_ = &box;
var color = arg_color;
_ = &color;
var size: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &size;
size.x = fabsf(box.max.x - box.min.x);
size.y = fabsf(box.max.y - box.min.y);
size.z = fabsf(box.max.z - box.min.z);
var center: Vector3 = Vector3{
.x = box.min.x + (size.x / 2.0),
.y = box.min.y + (size.y / 2.0),
.z = box.min.z + (size.z / 2.0),
};
_ = &center;
DrawCubeWires(center, size.x, size.y, size.z, color);
}
pub export fn DrawBillboard(arg_camera: Camera, arg_texture: Texture2D, arg_position: Vector3, arg_scale: f32, arg_tint: Color) void {
var camera = arg_camera;
_ = &camera;
var texture = arg_texture;
_ = &texture;
var position = arg_position;
_ = &position;
var scale = arg_scale;
_ = &scale;
var tint = arg_tint;
_ = &tint;
var source: Rectangle = Rectangle{
.x = 0.0,
.y = 0.0,
.width = @as(f32, @floatFromInt(texture.width)),
.height = @as(f32, @floatFromInt(texture.height)),
};
_ = &source;
DrawBillboardRec(camera, texture, source, position, Vector2{
.x = scale * fabsf(source.width / source.height),
.y = scale,
}, tint);
}
pub export fn DrawBillboardRec(arg_camera: Camera, arg_texture: Texture2D, arg_source: Rectangle, arg_position: Vector3, arg_size: Vector2, arg_tint: Color) void {
var camera = arg_camera;
_ = &camera;
var texture = arg_texture;
_ = &texture;
var source = arg_source;
_ = &source;
var position = arg_position;
_ = &position;
var size = arg_size;
_ = &size;
var tint = arg_tint;
_ = &tint;
var up: Vector3 = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
_ = &up;
DrawBillboardPro(camera, texture, source, position, up, size, Vector2Scale(size, @as(f32, @floatCast(0.5))), 0.0, tint);
}
pub export fn DrawBillboardPro(arg_camera: Camera, arg_texture: Texture2D, arg_source: Rectangle, arg_position: Vector3, arg_up: Vector3, arg_size: Vector2, arg_origin: Vector2, arg_rotation: f32, arg_tint: Color) void {
var camera = arg_camera;
_ = &camera;
var texture = arg_texture;
_ = &texture;
var source = arg_source;
_ = &source;
var position = arg_position;
_ = &position;
var up = arg_up;
_ = &up;
var size = arg_size;
_ = &size;
var origin = arg_origin;
_ = &origin;
var rotation = arg_rotation;
_ = &rotation;
var tint = arg_tint;
_ = &tint;
var matView: Matrix = MatrixLookAt(camera.position, camera.target, camera.up);
_ = &matView;
var right: Vector3 = Vector3{
.x = matView.m0,
.y = matView.m4,
.z = matView.m8,
};
_ = &right;
right = Vector3Scale(right, size.x);
up = Vector3Scale(up, size.y);
if (size.x < 0.0) {
source.x += size.x;
source.width *= @as(f32, @floatCast(-1.0));
right = Vector3Negate(right);
origin.x *= -1.0;
}
if (size.y < 0.0) {
source.y += size.y;
source.height *= @as(f32, @floatCast(-1.0));
up = Vector3Negate(up);
origin.y *= -1.0;
}
var forward: Vector3 = undefined;
_ = &forward;
if (@as(f64, @floatCast(rotation)) != 0.0) {
forward = Vector3CrossProduct(right, up);
}
var origin3D: Vector3 = Vector3Add(Vector3Scale(Vector3Normalize(right), origin.x), Vector3Scale(Vector3Normalize(up), origin.y));
_ = &origin3D;
var points: [4]Vector3 = undefined;
_ = &points;
points[@as(c_uint, @intCast(@as(c_int, 0)))] = Vector3Zero();
points[@as(c_uint, @intCast(@as(c_int, 1)))] = right;
points[@as(c_uint, @intCast(@as(c_int, 2)))] = Vector3Add(up, right);
points[@as(c_uint, @intCast(@as(c_int, 3)))] = up;
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 4)) : (i += 1) {
points[@as(c_uint, @intCast(i))] = Vector3Subtract(points[@as(c_uint, @intCast(i))], origin3D);
if (@as(f64, @floatCast(rotation)) != 0.0) {
points[@as(c_uint, @intCast(i))] = Vector3RotateByAxisAngle(points[@as(c_uint, @intCast(i))], forward, rotation * (3.1415927410125732 / 180.0));
}
points[@as(c_uint, @intCast(i))] = Vector3Add(points[@as(c_uint, @intCast(i))], position);
}
}
var texcoords: [4]Vector2 = undefined;
_ = &texcoords;
texcoords[@as(c_uint, @intCast(@as(c_int, 0)))] = Vector2{
.x = source.x / @as(f32, @floatFromInt(texture.width)),
.y = (source.y + source.height) / @as(f32, @floatFromInt(texture.height)),
};
texcoords[@as(c_uint, @intCast(@as(c_int, 1)))] = Vector2{
.x = (source.x + source.width) / @as(f32, @floatFromInt(texture.width)),
.y = (source.y + source.height) / @as(f32, @floatFromInt(texture.height)),
};
texcoords[@as(c_uint, @intCast(@as(c_int, 2)))] = Vector2{
.x = (source.x + source.width) / @as(f32, @floatFromInt(texture.width)),
.y = source.y / @as(f32, @floatFromInt(texture.height)),
};
texcoords[@as(c_uint, @intCast(@as(c_int, 3)))] = Vector2{
.x = source.x / @as(f32, @floatFromInt(texture.width)),
.y = source.y / @as(f32, @floatFromInt(texture.height)),
};
rlSetTexture(texture.id);
rlBegin(@as(c_int, 7));
rlColor4ub(tint.r, tint.g, tint.b, tint.a);
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 4)) : (i += 1) {
rlTexCoord2f(texcoords[@as(c_uint, @intCast(i))].x, texcoords[@as(c_uint, @intCast(i))].y);
rlVertex3f(points[@as(c_uint, @intCast(i))].x, points[@as(c_uint, @intCast(i))].y, points[@as(c_uint, @intCast(i))].z);
}
}
rlEnd();
rlSetTexture(@as(c_uint, @bitCast(@as(c_int, 0))));
}
pub export fn UploadMesh(arg_mesh: [*c]Mesh, arg_dynamic: bool) void {
var mesh = arg_mesh;
_ = &mesh;
var dynamic = arg_dynamic;
_ = &dynamic;
if (mesh.*.vaoId > @as(c_uint, @bitCast(@as(c_int, 0)))) {
TraceLog(LOG_WARNING, "VAO: [ID %i] Trying to re-load an already loaded mesh", mesh.*.vaoId);
return;
}
mesh.*.vboId = @as([*c]c_uint, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 7)))), @sizeOf(c_uint)))));
mesh.*.vaoId = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 0)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 1)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 2)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 3)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 4)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 5)))] = 0;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 6)))] = 0;
mesh.*.vaoId = rlLoadVertexArray();
_ = rlEnableVertexArray(mesh.*.vaoId);
var vertices: ?*anyopaque = @as(?*anyopaque, @ptrCast(if (mesh.*.animVertices != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) mesh.*.animVertices else mesh.*.vertices));
_ = &vertices;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 0)))] = rlLoadVertexBuffer(vertices, @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 0))), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 0))));
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 1)))] = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(mesh.*.texcoords)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 1))), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 1))));
if (mesh.*.normals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
var normals: ?*anyopaque = @as(?*anyopaque, @ptrCast(if (mesh.*.animNormals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) mesh.*.animNormals else mesh.*.normals));
_ = &normals;
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 2)))] = rlLoadVertexBuffer(normals, @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 2))), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 2))));
} else {
var value: [3]f32 = [3]f32{
1.0,
1.0,
1.0,
};
_ = &value;
rlSetVertexAttributeDefault(@as(c_int, 2), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC3, @as(c_int, 3));
rlDisableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 2))));
}
if (mesh.*.colors != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 3)))] = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(mesh.*.colors)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(u8))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 3))), @as(c_int, 4), @as(c_int, 5121), @as(c_int, 1) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 3))));
} else {
var value: [4]f32 = [4]f32{
1.0,
1.0,
1.0,
1.0,
};
_ = &value;
rlSetVertexAttributeDefault(@as(c_int, 3), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC4, @as(c_int, 4));
rlDisableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 3))));
}
if (mesh.*.tangents != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 4)))] = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(mesh.*.tangents)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(f32))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 4))), @as(c_int, 4), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 4))));
} else {
var value: [4]f32 = [4]f32{
0.0,
0.0,
0.0,
0.0,
};
_ = &value;
rlSetVertexAttributeDefault(@as(c_int, 4), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC4, @as(c_int, 4));
rlDisableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 4))));
}
if (mesh.*.texcoords2 != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 5)))] = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(mesh.*.texcoords2)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32))))), dynamic);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 5))), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 5))));
} else {
var value: [2]f32 = [2]f32{
0.0,
0.0,
};
_ = &value;
rlSetVertexAttributeDefault(@as(c_int, 5), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC2, @as(c_int, 2));
rlDisableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 5))));
}
if (mesh.*.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
mesh.*.vboId[@as(c_uint, @intCast(@as(c_int, 6)))] = rlLoadVertexBufferElement(@as(?*const anyopaque, @ptrCast(mesh.*.indices)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.triangleCount * @as(c_int, 3)))) *% @sizeOf(c_ushort))))), dynamic);
}
if (mesh.*.vaoId > @as(c_uint, @bitCast(@as(c_int, 0)))) {
TraceLog(LOG_INFO, "VAO: [ID %i] Mesh uploaded successfully to VRAM (GPU)", mesh.*.vaoId);
} else {
TraceLog(LOG_INFO, "VBO: Mesh uploaded successfully to VRAM (GPU)");
}
rlDisableVertexArray();
}
pub export fn UpdateMeshBuffer(arg_mesh: Mesh, arg_index_1: c_int, arg_data: ?*const anyopaque, arg_dataSize: c_int, arg_offset: c_int) void {
var mesh = arg_mesh;
_ = &mesh;
var index_1 = arg_index_1;
_ = &index_1;
var data = arg_data;
_ = &data;
var dataSize = arg_dataSize;
_ = &dataSize;
var offset = arg_offset;
_ = &offset;
rlUpdateVertexBuffer((blk: {
const tmp = index_1;
if (tmp >= 0) break :blk mesh.vboId + @as(usize, @intCast(tmp)) else break :blk mesh.vboId - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, data, dataSize, offset);
}
pub export fn UnloadMesh(arg_mesh: Mesh) void {
var mesh = arg_mesh;
_ = &mesh;
rlUnloadVertexArray(mesh.vaoId);
if (mesh.vboId != @as([*c]c_uint, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 7)) : (i += 1) {
rlUnloadVertexBuffer((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.vboId + @as(usize, @intCast(tmp)) else break :blk mesh.vboId - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
}
}
free(@as(?*anyopaque, @ptrCast(mesh.vboId)));
free(@as(?*anyopaque, @ptrCast(mesh.vertices)));
free(@as(?*anyopaque, @ptrCast(mesh.texcoords)));
free(@as(?*anyopaque, @ptrCast(mesh.normals)));
free(@as(?*anyopaque, @ptrCast(mesh.colors)));
free(@as(?*anyopaque, @ptrCast(mesh.tangents)));
free(@as(?*anyopaque, @ptrCast(mesh.texcoords2)));
free(@as(?*anyopaque, @ptrCast(mesh.indices)));
free(@as(?*anyopaque, @ptrCast(mesh.animVertices)));
free(@as(?*anyopaque, @ptrCast(mesh.animNormals)));
free(@as(?*anyopaque, @ptrCast(mesh.boneWeights)));
free(@as(?*anyopaque, @ptrCast(mesh.boneIds)));
}
pub export fn DrawMesh(arg_mesh: Mesh, arg_material: Material, arg_transform: Matrix) void {
var mesh = arg_mesh;
_ = &mesh;
var material = arg_material;
_ = &material;
var transform = arg_transform;
_ = &transform;
rlEnableShader(material.shader.id);
if ((blk: {
const tmp = SHADER_LOC_COLOR_DIFFUSE;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
var values: [4]f32 = [4]f32{
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a)) / 255.0,
};
_ = &values;
rlSetUniform((blk: {
const tmp = SHADER_LOC_COLOR_DIFFUSE;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&values))))), SHADER_UNIFORM_VEC4, @as(c_int, 1));
}
if ((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
var values: [4]f32 = [4]f32{
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a)) / 255.0,
};
_ = &values;
rlSetUniform((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&values))))), SHADER_UNIFORM_VEC4, @as(c_int, 1));
}
var matModel: Matrix = MatrixIdentity();
_ = &matModel;
var matView: Matrix = rlGetMatrixModelview();
_ = &matView;
var matModelView: Matrix = MatrixIdentity();
_ = &matModelView;
var matProjection: Matrix = rlGetMatrixProjection();
_ = &matProjection;
if ((blk: {
const tmp = SHADER_LOC_MATRIX_VIEW;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_VIEW;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matView);
}
if ((blk: {
const tmp = SHADER_LOC_MATRIX_PROJECTION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_PROJECTION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matProjection);
}
matModel = MatrixMultiply(transform, rlGetMatrixTransform());
if ((blk: {
const tmp = SHADER_LOC_MATRIX_MODEL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_MODEL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matModel);
}
matModelView = MatrixMultiply(matModel, matView);
if ((blk: {
const tmp = SHADER_LOC_MATRIX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, MatrixTranspose(MatrixInvert(matModel)));
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 12)) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id > @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlActiveTextureSlot(i);
if (((i == MATERIAL_MAP_IRRADIANCE) or (i == MATERIAL_MAP_PREFILTER)) or (i == MATERIAL_MAP_CUBEMAP)) {
rlEnableTextureCubemap((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id);
} else {
rlEnableTexture((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id);
}
rlSetUniform((blk: {
const tmp = SHADER_LOC_MAP_ALBEDO + i;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(&i)), SHADER_UNIFORM_INT, @as(c_int, 1));
}
}
}
if (!rlEnableVertexArray(mesh.vaoId)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 0)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_POSITION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_POSITION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 1)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD01;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD01;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
if ((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 2)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
if (mesh.vboId[@as(c_uint, @intCast(@as(c_int, 3)))] != @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 3)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 4), @as(c_int, 5121), @as(c_int, 1) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
} else {
var value: [4]f32 = [4]f32{
1.0,
1.0,
1.0,
1.0,
};
_ = &value;
rlSetVertexAttributeDefault((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC4, @as(c_int, 4));
rlDisableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 4)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 4), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 5)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
rlEnableVertexBufferElement(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 6)))]);
}
}
var eyeCount: c_int = 1;
_ = &eyeCount;
if (rlIsStereoRenderEnabled()) {
eyeCount = 2;
}
{
var eye: c_int = 0;
_ = &eye;
while (eye < eyeCount) : (eye += 1) {
var matModelViewProjection: Matrix = MatrixIdentity();
_ = &matModelViewProjection;
if (eyeCount == @as(c_int, 1)) {
matModelViewProjection = MatrixMultiply(matModelView, matProjection);
} else {
rlViewport(@divTrunc(eye * rlGetFramebufferWidth(), @as(c_int, 2)), @as(c_int, 0), @divTrunc(rlGetFramebufferWidth(), @as(c_int, 2)), rlGetFramebufferHeight());
matModelViewProjection = MatrixMultiply(MatrixMultiply(matModelView, rlGetMatrixViewOffsetStereo(eye)), rlGetMatrixProjectionStereo(eye));
}
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_MVP;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matModelViewProjection);
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
rlDrawVertexArrayElements(@as(c_int, 0), mesh.triangleCount * @as(c_int, 3), null);
} else {
rlDrawVertexArray(@as(c_int, 0), mesh.vertexCount);
}
}
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 12)) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id > @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlActiveTextureSlot(i);
if (((i == MATERIAL_MAP_IRRADIANCE) or (i == MATERIAL_MAP_PREFILTER)) or (i == MATERIAL_MAP_CUBEMAP)) {
rlDisableTextureCubemap();
} else {
rlDisableTexture();
}
}
}
}
rlDisableVertexArray();
rlDisableVertexBuffer();
rlDisableVertexBufferElement();
rlDisableShader();
rlSetMatrixModelview(matView);
rlSetMatrixProjection(matProjection);
}
pub const struct_float16 = extern struct {
v: [16]f32 = @import("std").mem.zeroes([16]f32),
};
pub const float16 = struct_float16;
pub export fn DrawMeshInstanced(arg_mesh: Mesh, arg_material: Material, arg_transforms: [*c]const Matrix, arg_instances: c_int) void {
var mesh = arg_mesh;
_ = &mesh;
var material = arg_material;
_ = &material;
var transforms = arg_transforms;
_ = &transforms;
var instances = arg_instances;
_ = &instances;
var instanceTransforms: [*c]float16 = null;
_ = &instanceTransforms;
var instancesVboId: c_uint = 0;
_ = &instancesVboId;
rlEnableShader(material.shader.id);
if ((blk: {
const tmp = SHADER_LOC_COLOR_DIFFUSE;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
var values: [4]f32 = [4]f32{
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a)) / 255.0,
};
_ = &values;
rlSetUniform((blk: {
const tmp = SHADER_LOC_COLOR_DIFFUSE;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&values))))), SHADER_UNIFORM_VEC4, @as(c_int, 1));
}
if ((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
var values: [4]f32 = [4]f32{
@as(f32, @floatFromInt((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b)) / 255.0,
@as(f32, @floatFromInt((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a)) / 255.0,
};
_ = &values;
rlSetUniform((blk: {
const tmp = SHADER_LOC_COLOR_SPECULAR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&values))))), SHADER_UNIFORM_VEC4, @as(c_int, 1));
}
var matModel: Matrix = MatrixIdentity();
_ = &matModel;
var matView: Matrix = rlGetMatrixModelview();
_ = &matView;
var matModelView: Matrix = MatrixIdentity();
_ = &matModelView;
var matProjection: Matrix = rlGetMatrixProjection();
_ = &matProjection;
if ((blk: {
const tmp = SHADER_LOC_MATRIX_VIEW;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_VIEW;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matView);
}
if ((blk: {
const tmp = SHADER_LOC_MATRIX_PROJECTION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_PROJECTION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matProjection);
}
instanceTransforms = @as([*c]float16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, instances))) *% @sizeOf(float16)))));
{
var i: c_int = 0;
_ = &i;
while (i < instances) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk instanceTransforms + @as(usize, @intCast(tmp)) else break :blk instanceTransforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = MatrixToFloatV((blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
}
}
_ = rlEnableVertexArray(mesh.vaoId);
instancesVboId = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(instanceTransforms)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, instances))) *% @sizeOf(float16))))), @as(c_int, 0) != 0);
{
var i: c_uint = 0;
_ = &i;
while (i < @as(c_uint, @bitCast(@as(c_int, 4)))) : (i +%= 1) {
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_MATRIX_MODEL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)) +% i);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_MATRIX_MODEL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)) +% i, @as(c_int, 4), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf(Matrix))))), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_ulong, i))) *% @sizeOf(Vector4))))));
rlSetVertexAttributeDivisor(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_MATRIX_MODEL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)) +% i, @as(c_int, 1));
}
}
rlDisableVertexBuffer();
rlDisableVertexArray();
matModelView = MatrixMultiply(rlGetMatrixTransform(), matView);
if ((blk: {
const tmp = SHADER_LOC_MATRIX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, MatrixTranspose(MatrixInvert(matModel)));
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 12)) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id > @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlActiveTextureSlot(i);
if (((i == MATERIAL_MAP_IRRADIANCE) or (i == MATERIAL_MAP_PREFILTER)) or (i == MATERIAL_MAP_CUBEMAP)) {
rlEnableTextureCubemap((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id);
} else {
rlEnableTexture((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id);
}
rlSetUniform((blk: {
const tmp = SHADER_LOC_MAP_ALBEDO + i;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(&i)), SHADER_UNIFORM_INT, @as(c_int, 1));
}
}
}
if (!rlEnableVertexArray(mesh.vaoId)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 0)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_POSITION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_POSITION;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 1)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD01;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD01;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
if ((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 2)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 3), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_NORMAL;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
if (mesh.vboId[@as(c_uint, @intCast(@as(c_int, 3)))] != @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 3)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 4), @as(c_int, 5121), @as(c_int, 1) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
} else {
var value: [4]f32 = [4]f32{
1.0,
1.0,
1.0,
1.0,
};
_ = &value;
rlSetVertexAttributeDefault((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&value))))), SHADER_ATTRIB_VEC4, @as(c_int, 4));
rlDisableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_COLOR;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 4)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 4), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if ((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != -@as(c_int, 1)) {
rlEnableVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 5)))]);
rlSetVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 2), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast((blk: {
const tmp = SHADER_LOC_VERTEX_TEXCOORD02;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
rlEnableVertexBufferElement(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 6)))]);
}
}
var eyeCount: c_int = 1;
_ = &eyeCount;
if (rlIsStereoRenderEnabled()) {
eyeCount = 2;
}
{
var eye: c_int = 0;
_ = &eye;
while (eye < eyeCount) : (eye += 1) {
var matModelViewProjection: Matrix = MatrixIdentity();
_ = &matModelViewProjection;
if (eyeCount == @as(c_int, 1)) {
matModelViewProjection = MatrixMultiply(matModelView, matProjection);
} else {
rlViewport(@divTrunc(eye * rlGetFramebufferWidth(), @as(c_int, 2)), @as(c_int, 0), @divTrunc(rlGetFramebufferWidth(), @as(c_int, 2)), rlGetFramebufferHeight());
matModelViewProjection = MatrixMultiply(MatrixMultiply(matModelView, rlGetMatrixViewOffsetStereo(eye)), rlGetMatrixProjectionStereo(eye));
}
rlSetUniformMatrix((blk: {
const tmp = SHADER_LOC_MATRIX_MVP;
if (tmp >= 0) break :blk material.shader.locs + @as(usize, @intCast(tmp)) else break :blk material.shader.locs - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, matModelViewProjection);
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
rlDrawVertexArrayElementsInstanced(@as(c_int, 0), mesh.triangleCount * @as(c_int, 3), null, instances);
} else {
rlDrawVertexArrayInstanced(@as(c_int, 0), mesh.vertexCount, instances);
}
}
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 12)) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id > @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlActiveTextureSlot(i);
if (((i == MATERIAL_MAP_IRRADIANCE) or (i == MATERIAL_MAP_PREFILTER)) or (i == MATERIAL_MAP_CUBEMAP)) {
rlDisableTextureCubemap();
} else {
rlDisableTexture();
}
}
}
}
rlDisableVertexArray();
rlDisableVertexBuffer();
rlDisableVertexBufferElement();
rlDisableShader();
rlUnloadVertexBuffer(instancesVboId);
free(@as(?*anyopaque, @ptrCast(instanceTransforms)));
}
pub export fn GetMeshBoundingBox(arg_mesh: Mesh) BoundingBox {
var mesh = arg_mesh;
_ = &mesh;
var minVertex: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &minVertex;
var maxVertex: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &maxVertex;
if (mesh.vertices != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
minVertex = Vector3{
.x = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 2)))],
};
maxVertex = Vector3{
.x = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = mesh.vertices[@as(c_uint, @intCast(@as(c_int, 2)))],
};
{
var i: c_int = 1;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
minVertex = Vector3Min(minVertex, Vector3{
.x = (blk: {
const tmp = i * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
});
maxVertex = Vector3Max(maxVertex, Vector3{
.x = (blk: {
const tmp = i * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
});
}
}
}
var box: BoundingBox = BoundingBox{
.min = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
},
.max = @import("std").mem.zeroes(Vector3),
};
_ = &box;
box.min = minVertex;
box.max = maxVertex;
return box;
}
pub export fn GenMeshTangents(arg_mesh: [*c]Mesh) void {
var mesh = arg_mesh;
_ = &mesh;
if ((mesh.*.vertices == @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) or (mesh.*.texcoords == @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
TraceLog(LOG_WARNING, "MESH: Tangents generation requires texcoord vertex attribute data");
return;
}
if (mesh.*.tangents == @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
mesh.*.tangents = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(f32)))));
} else {
free(@as(?*anyopaque, @ptrCast(mesh.*.tangents)));
mesh.*.tangents = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(f32)))));
}
var tan1: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount))) *% @sizeOf(Vector3)))));
_ = &tan1;
var tan2: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount))) *% @sizeOf(Vector3)))));
_ = &tan2;
if (@import("std").zig.c_translation.signedRemainder(mesh.*.vertexCount, @as(c_int, 3)) != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MESH: vertexCount expected to be a multiple of 3. Expect uninitialized values.");
}
{
var i: c_int = 0;
_ = &i;
while (i <= (mesh.*.vertexCount - @as(c_int, 3))) : (i += @as(c_int, 3)) {
var v1: Vector3 = Vector3{
.x = (blk: {
const tmp = ((i + @as(c_int, 0)) * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 0)) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = ((i + @as(c_int, 0)) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &v1;
var v2: Vector3 = Vector3{
.x = (blk: {
const tmp = ((i + @as(c_int, 1)) * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 1)) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = ((i + @as(c_int, 1)) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &v2;
var v3: Vector3 = Vector3{
.x = (blk: {
const tmp = ((i + @as(c_int, 2)) * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 2)) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = ((i + @as(c_int, 2)) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.*.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &v3;
var uv1: Vector2 = Vector2{
.x = (blk: {
const tmp = ((i + @as(c_int, 0)) * @as(c_int, 2)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 0)) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &uv1;
var uv2: Vector2 = Vector2{
.x = (blk: {
const tmp = ((i + @as(c_int, 1)) * @as(c_int, 2)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 1)) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &uv2;
var uv3: Vector2 = Vector2{
.x = (blk: {
const tmp = ((i + @as(c_int, 2)) * @as(c_int, 2)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = ((i + @as(c_int, 2)) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &uv3;
var x1: f32 = v2.x - v1.x;
_ = &x1;
var y1_1: f32 = v2.y - v1.y;
_ = &y1_1;
var z1: f32 = v2.z - v1.z;
_ = &z1;
var x2: f32 = v3.x - v1.x;
_ = &x2;
var y2: f32 = v3.y - v1.y;
_ = &y2;
var z2: f32 = v3.z - v1.z;
_ = &z2;
var s1: f32 = uv2.x - uv1.x;
_ = &s1;
var t1: f32 = uv2.y - uv1.y;
_ = &t1;
var s2: f32 = uv3.x - uv1.x;
_ = &s2;
var t2: f32 = uv3.y - uv1.y;
_ = &t2;
var div_2: f32 = (s1 * t2) - (s2 * t1);
_ = &div_2;
var r: f32 = if (div_2 == 0.0) 0.0 else 1.0 / div_2;
_ = &r;
var sdir: Vector3 = Vector3{
.x = ((t2 * x1) - (t1 * x2)) * r,
.y = ((t2 * y1_1) - (t1 * y2)) * r,
.z = ((t2 * z1) - (t1 * z2)) * r,
};
_ = &sdir;
var tdir: Vector3 = Vector3{
.x = ((s1 * x2) - (s2 * x1)) * r,
.y = ((s1 * y2) - (s2 * y1_1)) * r,
.z = ((s1 * z2) - (s2 * z1)) * r,
};
_ = &tdir;
(blk: {
const tmp = i + @as(c_int, 0);
if (tmp >= 0) break :blk tan1 + @as(usize, @intCast(tmp)) else break :blk tan1 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = sdir;
(blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk tan1 + @as(usize, @intCast(tmp)) else break :blk tan1 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = sdir;
(blk: {
const tmp = i + @as(c_int, 2);
if (tmp >= 0) break :blk tan1 + @as(usize, @intCast(tmp)) else break :blk tan1 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = sdir;
(blk: {
const tmp = i + @as(c_int, 0);
if (tmp >= 0) break :blk tan2 + @as(usize, @intCast(tmp)) else break :blk tan2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tdir;
(blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk tan2 + @as(usize, @intCast(tmp)) else break :blk tan2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tdir;
(blk: {
const tmp = i + @as(c_int, 2);
if (tmp >= 0) break :blk tan2 + @as(usize, @intCast(tmp)) else break :blk tan2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tdir;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.vertexCount) : (i += 1) {
var normal: Vector3 = Vector3{
.x = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.normals + @as(usize, @intCast(tmp)) else break :blk mesh.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.normals + @as(usize, @intCast(tmp)) else break :blk mesh.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.*.normals + @as(usize, @intCast(tmp)) else break :blk mesh.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
_ = &normal;
var tangent: Vector3 = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tan1 + @as(usize, @intCast(tmp)) else break :blk tan1 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &tangent;
Vector3OrthoNormalize(&normal, &tangent);
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.*.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.*.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tangent.x;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.*.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.*.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tangent.y;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.*.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.*.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = tangent.z;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.*.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.*.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = if (Vector3DotProduct(Vector3CrossProduct(normal, tangent), (blk: {
const tmp = i;
if (tmp >= 0) break :blk tan2 + @as(usize, @intCast(tmp)) else break :blk tan2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*) < 0.0) -1.0 else 1.0;
}
}
free(@as(?*anyopaque, @ptrCast(tan1)));
free(@as(?*anyopaque, @ptrCast(tan2)));
if (mesh.*.vboId != @as([*c]c_uint, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
if ((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk mesh.*.vboId + @as(usize, @intCast(tmp)) else break :blk mesh.*.vboId - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* != @as(c_uint, @bitCast(@as(c_int, 0)))) {
rlUpdateVertexBuffer((blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk mesh.*.vboId + @as(usize, @intCast(tmp)) else break :blk mesh.*.vboId - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, @as(?*const anyopaque, @ptrCast(mesh.*.tangents)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(f32))))), @as(c_int, 0));
} else {
(blk: {
const tmp = SHADER_LOC_VERTEX_TANGENT;
if (tmp >= 0) break :blk mesh.*.vboId + @as(usize, @intCast(tmp)) else break :blk mesh.*.vboId - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = rlLoadVertexBuffer(@as(?*const anyopaque, @ptrCast(mesh.*.tangents)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.*.vertexCount * @as(c_int, 4)))) *% @sizeOf(f32))))), @as(c_int, 0) != 0);
}
_ = rlEnableVertexArray(mesh.*.vaoId);
rlSetVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 4))), @as(c_int, 4), @as(c_int, 5126), @as(c_int, 0) != 0, @as(c_int, 0), @as(c_int, 0));
rlEnableVertexAttribute(@as(c_uint, @bitCast(@as(c_int, 4))));
rlDisableVertexArray();
}
TraceLog(LOG_INFO, "MESH: Tangents data computed and uploaded for provided mesh");
}
pub export fn ExportMesh(arg_mesh: Mesh, arg_fileName: [*c]const u8) bool {
var mesh = arg_mesh;
_ = &mesh;
var fileName = arg_fileName;
_ = &fileName;
var success: bool = @as(c_int, 0) != 0;
_ = &success;
if (IsFileExtension(fileName, ".obj")) {
var dataSize: c_int = (((mesh.vertexCount * @as(c_int, @bitCast(@as(c_uint, @truncate(strlen("v 0000.00f 0000.00f 0000.00f")))))) + (mesh.vertexCount * @as(c_int, @bitCast(@as(c_uint, @truncate(strlen("vt 0.000f 0.00f"))))))) + (mesh.vertexCount * @as(c_int, @bitCast(@as(c_uint, @truncate(strlen("vn 0.000f 0.00f 0.00f"))))))) + (mesh.triangleCount * @as(c_int, @bitCast(@as(c_uint, @truncate(strlen("f 00000/00000/00000 00000/00000/00000 00000/00000/00000"))))));
_ = &dataSize;
var txtData: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (dataSize * @as(c_int, 2)) + @as(c_int, 2000)))), @sizeOf(u8)))));
_ = &txtData;
var byteCount: c_int = 0;
_ = &byteCount;
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# //////////////////////////////////////////////////////////////////////////////////\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // rMeshOBJ exporter v1.0 - Mesh exported as triangle faces and not optimized //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // more info and bugs-report: github.com/raysan5/raylib //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // feedback and support: ray[at]raylib.com //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // Copyright (c) 2018-2024 Ramon Santamaria (@raysan5) //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# // //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# //////////////////////////////////////////////////////////////////////////////////\n\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# Vertex Count: %i\n", mesh.vertexCount);
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "# Triangle Count: %i\n\n", mesh.triangleCount);
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "g mesh\n");
{
var i: c_int = 0;
_ = &i;
var v: c_int = 0;
_ = &v;
while (i < mesh.vertexCount) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &v;
ref.* += @as(c_int, 3);
break :blk_1 ref.*;
};
}) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "v %.2f %.2f %.2f\n", @as(f64, @floatCast((blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(f64, @floatCast((blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(f64, @floatCast((blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
{
var i: c_int = 0;
_ = &i;
var v: c_int = 0;
_ = &v;
while (i < mesh.vertexCount) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &v;
ref.* += @as(c_int, 2);
break :blk_1 ref.*;
};
}) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "vt %.3f %.3f\n", @as(f64, @floatCast((blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(f64, @floatCast((blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
{
var i: c_int = 0;
_ = &i;
var v: c_int = 0;
_ = &v;
while (i < mesh.vertexCount) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &v;
ref.* += @as(c_int, 3);
break :blk_1 ref.*;
};
}) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "vn %.3f %.3f %.3f\n", @as(f64, @floatCast((blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(f64, @floatCast((blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(f64, @floatCast((blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
{
var i: c_int = 0;
_ = &i;
var v: c_int = 0;
_ = &v;
while (i < mesh.triangleCount) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &v;
ref.* += @as(c_int, 3);
break :blk_1 ref.*;
};
}) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "f %i/%i/%i %i/%i/%i %i/%i/%i\n", @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, 1));
}
}
} else {
{
var i: c_int = 0;
_ = &i;
var v: c_int = 1;
_ = &v;
while (i < mesh.triangleCount) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &v;
ref.* += @as(c_int, 3);
break :blk_1 ref.*;
};
}) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "f %i/%i/%i %i/%i/%i %i/%i/%i\n", v, v, v, v + @as(c_int, 1), v + @as(c_int, 1), v + @as(c_int, 1), v + @as(c_int, 2), v + @as(c_int, 2), v + @as(c_int, 2));
}
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "\n");
success = SaveFileText(fileName, txtData);
free(@as(?*anyopaque, @ptrCast(txtData)));
} else if (IsFileExtension(fileName, ".raw")) {}
return success;
}
pub export fn ExportMeshAsCode(arg_mesh: Mesh, arg_fileName: [*c]const u8) bool {
var mesh = arg_mesh;
_ = &mesh;
var fileName = arg_fileName;
_ = &fileName;
var success: bool = @as(c_int, 0) != 0;
_ = &success;
var txtData: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (@as(c_int, 64) * @as(c_int, 1024)) * @as(c_int, 1024)))), @sizeOf(u8)))));
_ = &txtData;
var byteCount: c_int = 0;
_ = &byteCount;
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "////////////////////////////////////////////////////////////////////////////////////////\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// MeshAsCode exporter v1.0 - Mesh vertex data exported as arrays //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// more info and bugs-report: github.com/raysan5/raylib //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// feedback and support: ray[at]raylib.com //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// Copyright (c) 2023 Ramon Santamaria (@raysan5) //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// //\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "////////////////////////////////////////////////////////////////////////////////////////\n\n");
var varFileName: [256]u8 = [1]u8{
0,
} ++ [1]u8{0} ** 255;
_ = &varFileName;
_ = strcpy(@as([*c]u8, @ptrCast(@alignCast(&varFileName))), GetFileNameWithoutExt(fileName));
{
var i: c_int = 0;
_ = &i;
while (@as(c_int, @bitCast(@as(c_uint, varFileName[@as(c_uint, @intCast(i))]))) != @as(c_int, '\x00')) : (i += 1) if ((@as(c_int, @bitCast(@as(c_uint, varFileName[@as(c_uint, @intCast(i))]))) >= @as(c_int, 'a')) and (@as(c_int, @bitCast(@as(c_uint, varFileName[@as(c_uint, @intCast(i))]))) <= @as(c_int, 'z'))) {
varFileName[@as(c_uint, @intCast(i))] = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, varFileName[@as(c_uint, @intCast(i))]))) - @as(c_int, 32)))));
};
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "// Mesh basic information\n");
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "#define %s_VERTEX_COUNT %i\n", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount);
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "#define %s_TRIANGLE_COUNT %i\n\n", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.triangleCount);
if (mesh.vertices != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static float %s_VERTEX_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 3));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 3)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%.3ff,\n" else "%.3ff, ", @as(f64, @floatCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%.3ff };\n\n", @as(f64, @floatCast((blk: {
const tmp = (mesh.vertexCount * @as(c_int, 3)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.texcoords != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static float %s_TEXCOORD_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 2));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 2)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%.3ff,\n" else "%.3ff, ", @as(f64, @floatCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%.3ff };\n\n", @as(f64, @floatCast((blk: {
const tmp = (mesh.vertexCount * @as(c_int, 2)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.texcoords2 != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static float %s_TEXCOORD2_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 2));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 2)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%.3ff,\n" else "%.3ff, ", @as(f64, @floatCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.texcoords2 + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%.3ff };\n\n", @as(f64, @floatCast((blk: {
const tmp = (mesh.vertexCount * @as(c_int, 2)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords2 + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords2 - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.normals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static float %s_NORMAL_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 3));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 3)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%.3ff,\n" else "%.3ff, ", @as(f64, @floatCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%.3ff };\n\n", @as(f64, @floatCast((blk: {
const tmp = (mesh.vertexCount * @as(c_int, 3)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.tangents != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static float %s_TANGENT_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 4));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 4)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%.3ff,\n" else "%.3ff, ", @as(f64, @floatCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%.3ff };\n\n", @as(f64, @floatCast((blk: {
const tmp = (mesh.vertexCount * @as(c_int, 4)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.tangents + @as(usize, @intCast(tmp)) else break :blk mesh.tangents - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
if (mesh.colors != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static unsigned char %s_COLOR_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.vertexCount * @as(c_int, 4));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.vertexCount * @as(c_int, 4)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "0x%x,\n" else "0x%x, ", @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.colors + @as(usize, @intCast(tmp)) else break :blk mesh.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "0x%x };\n\n", @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (mesh.vertexCount * @as(c_int, 4)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.colors + @as(usize, @intCast(tmp)) else break :blk mesh.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
if (mesh.indices != @as([*c]c_ushort, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "static unsigned short %s_INDEX_DATA[%i] = { ", @as([*c]u8, @ptrCast(@alignCast(&varFileName))), mesh.triangleCount * @as(c_int, 3));
{
var i: c_int = 0;
_ = &i;
while (i < ((mesh.triangleCount * @as(c_int, 3)) - @as(c_int, 1))) : (i += 1) {
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), if (@import("std").zig.c_translation.signedRemainder(i, @as(c_int, 20)) == @as(c_int, 0)) "%i,\n" else "%i, ", @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
}
byteCount += sprintf(txtData + @as(usize, @bitCast(@as(isize, @intCast(byteCount)))), "%i };\n", @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (mesh.triangleCount * @as(c_int, 3)) - @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
success = SaveFileText(fileName, txtData);
free(@as(?*anyopaque, @ptrCast(txtData)));
return success;
}
pub export fn GenMeshPoly(arg_sides: c_int, arg_radius: f32) Mesh {
var sides = arg_sides;
_ = &sides;
var radius = arg_radius;
_ = &radius;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if (sides < @as(c_int, 3)) return mesh;
var vertexCount: c_int = sides * @as(c_int, 3);
_ = &vertexCount;
var vertices: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector3)))));
_ = &vertices;
var d: f32 = 0.0;
_ = &d;
var dStep: f32 = 360.0 / @as(f32, @floatFromInt(sides));
_ = &dStep;
{
var v: c_int = 0;
_ = &v;
while (v < (vertexCount - @as(c_int, 2))) : (v += @as(c_int, 3)) {
(blk: {
const tmp = v;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = 0.0,
.y = 0.0,
.z = 0.0,
};
(blk: {
const tmp = v + @as(c_int, 1);
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = sinf((3.1415927410125732 / 180.0) * d) * radius,
.y = 0.0,
.z = cosf((3.1415927410125732 / 180.0) * d) * radius,
};
(blk: {
const tmp = v + @as(c_int, 2);
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = sinf((3.1415927410125732 / 180.0) * (d + dStep)) * radius,
.y = 0.0,
.z = cosf((3.1415927410125732 / 180.0) * (d + dStep)) * radius,
};
d += dStep;
}
}
var normals: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector3)))));
_ = &normals;
{
var n: c_int = 0;
_ = &n;
while (n < vertexCount) : (n += 1) {
(blk: {
const tmp = n;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
}
}
var texcoords: [*c]Vector2 = @as([*c]Vector2, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector2)))));
_ = &texcoords;
{
var n: c_int = 0;
_ = &n;
while (n < vertexCount) : (n += 1) {
(blk: {
const tmp = n;
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = 0.0,
.y = 0.0,
};
}
}
mesh.vertexCount = vertexCount;
mesh.triangleCount = sides;
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 3) * i;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 2) * i;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 2) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 3) * i;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
}
}
free(@as(?*anyopaque, @ptrCast(vertices)));
free(@as(?*anyopaque, @ptrCast(normals)));
free(@as(?*anyopaque, @ptrCast(texcoords)));
UploadMesh(&mesh, @as(c_int, 0) != 0);
return mesh;
}
pub export fn GenMeshPlane(arg_width: f32, arg_length: f32, arg_resX: c_int, arg_resZ: c_int) Mesh {
var width = arg_width;
_ = &width;
var length = arg_length;
_ = &length;
var resX = arg_resX;
_ = &resX;
var resZ = arg_resZ;
_ = &resZ;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
resX += 1;
resZ += 1;
var vertexCount: c_int = resX * resZ;
_ = &vertexCount;
var vertices: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector3)))));
_ = &vertices;
{
var z: c_int = 0;
_ = &z;
while (z < resZ) : (z += 1) {
var zPos: f32 = ((@as(f32, @floatFromInt(z)) / @as(f32, @floatFromInt(resZ - @as(c_int, 1)))) - 0.5) * length;
_ = &zPos;
{
var x: c_int = 0;
_ = &x;
while (x < resX) : (x += 1) {
var xPos: f32 = ((@as(f32, @floatFromInt(x)) / @as(f32, @floatFromInt(resX - @as(c_int, 1)))) - 0.5) * width;
_ = &xPos;
(blk: {
const tmp = x + (z * resX);
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = xPos,
.y = 0.0,
.z = zPos,
};
}
}
}
}
var normals: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector3)))));
_ = &normals;
{
var n: c_int = 0;
_ = &n;
while (n < vertexCount) : (n += 1) {
(blk: {
const tmp = n;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
}
}
var texcoords: [*c]Vector2 = @as([*c]Vector2, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, vertexCount))) *% @sizeOf(Vector2)))));
_ = &texcoords;
{
var v: c_int = 0;
_ = &v;
while (v < resZ) : (v += 1) {
{
var u: c_int = 0;
_ = &u;
while (u < resX) : (u += 1) {
(blk: {
const tmp = u + (v * resX);
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = @as(f32, @floatFromInt(u)) / @as(f32, @floatFromInt(resX - @as(c_int, 1))),
.y = @as(f32, @floatFromInt(v)) / @as(f32, @floatFromInt(resZ - @as(c_int, 1))),
};
}
}
}
}
var numFaces: c_int = (resX - @as(c_int, 1)) * (resZ - @as(c_int, 1));
_ = &numFaces;
var triangles: [*c]c_int = @as([*c]c_int, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, numFaces * @as(c_int, 6)))) *% @sizeOf(c_int)))));
_ = &triangles;
var t: c_int = 0;
_ = &t;
{
var face: c_int = 0;
_ = &face;
while (face < numFaces) : (face += 1) {
var i: c_int = face + @divTrunc(face, resX - @as(c_int, 1));
_ = &i;
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i + resX;
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i + @as(c_int, 1);
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i;
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i + resX;
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (i + resX) + @as(c_int, 1);
(blk: {
const tmp = blk_1: {
const ref = &t;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i + @as(c_int, 1);
}
}
mesh.vertexCount = vertexCount;
mesh.triangleCount = numFaces * @as(c_int, 2);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.indices = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.triangleCount * @as(c_int, 3)))) *% @sizeOf(c_ushort)))));
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 3) * i;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk vertices + @as(usize, @intCast(tmp)) else break :blk vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 2) * i;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 2) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk texcoords + @as(usize, @intCast(tmp)) else break :blk texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.vertexCount) : (i += 1) {
(blk: {
const tmp = @as(c_int, 3) * i;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = (@as(c_int, 3) * i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk normals + @as(usize, @intCast(tmp)) else break :blk normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < (mesh.triangleCount * @as(c_int, 3))) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate((blk: {
const tmp = i;
if (tmp >= 0) break :blk triangles + @as(usize, @intCast(tmp)) else break :blk triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
}
free(@as(?*anyopaque, @ptrCast(vertices)));
free(@as(?*anyopaque, @ptrCast(normals)));
free(@as(?*anyopaque, @ptrCast(texcoords)));
free(@as(?*anyopaque, @ptrCast(triangles)));
UploadMesh(&mesh, @as(c_int, 0) != 0);
return mesh;
}
pub export fn GenMeshCube(arg_width: f32, arg_height: f32, arg_length: f32) Mesh {
var width = arg_width;
_ = &width;
var height = arg_height;
_ = &height;
var length = arg_length;
_ = &length;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
var vertices: [72]f32 = [72]f32{
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
-height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
length / @as(f32, @floatFromInt(@as(c_int, 2))),
-width / @as(f32, @floatFromInt(@as(c_int, 2))),
height / @as(f32, @floatFromInt(@as(c_int, 2))),
-length / @as(f32, @floatFromInt(@as(c_int, 2))),
};
_ = &vertices;
var texcoords: [48]f32 = [48]f32{
0.0,
0.0,
1.0,
0.0,
1.0,
1.0,
0.0,
1.0,
1.0,
0.0,
1.0,
1.0,
0.0,
1.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
1.0,
1.0,
1.0,
1.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
1.0,
0.0,
1.0,
1.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
1.0,
1.0,
0.0,
1.0,
};
_ = &texcoords;
var normals: [72]f32 = [72]f32{
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
-1.0,
0.0,
0.0,
};
_ = &normals;
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.vertices)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&vertices))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 3)))) *% @sizeOf(f32));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 2)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.texcoords)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&texcoords))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 2)))) *% @sizeOf(f32));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.normals)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&normals))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 24) * @as(c_int, 3)))) *% @sizeOf(f32));
mesh.indices = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 36)))) *% @sizeOf(c_ushort)))));
var k: c_int = 0;
_ = &k;
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 36)) : (i += @as(c_int, 6)) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate(@as(c_int, 4) * k))));
(blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate((@as(c_int, 4) * k) + @as(c_int, 1)))));
(blk: {
const tmp = i + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate((@as(c_int, 4) * k) + @as(c_int, 2)))));
(blk: {
const tmp = i + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate(@as(c_int, 4) * k))));
(blk: {
const tmp = i + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate((@as(c_int, 4) * k) + @as(c_int, 2)))));
(blk: {
const tmp = i + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_short, @truncate((@as(c_int, 4) * k) + @as(c_int, 3)))));
k += 1;
}
}
mesh.vertexCount = 24;
mesh.triangleCount = 12;
UploadMesh(&mesh, @as(c_int, 0) != 0);
return mesh;
}
pub const struct_par_shapes_mesh_s = extern struct {
points: [*c]f32 = @import("std").mem.zeroes([*c]f32),
npoints: c_int = @import("std").mem.zeroes(c_int),
triangles: [*c]u16 = @import("std").mem.zeroes([*c]u16),
ntriangles: c_int = @import("std").mem.zeroes(c_int),
normals: [*c]f32 = @import("std").mem.zeroes([*c]f32),
tcoords: [*c]f32 = @import("std").mem.zeroes([*c]f32),
};
pub const par_shapes_mesh = struct_par_shapes_mesh_s;
pub export fn GenMeshSphere(arg_radius: f32, arg_rings: c_int, arg_slices: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var rings = arg_rings;
_ = &rings;
var slices = arg_slices;
_ = &slices;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if ((rings >= @as(c_int, 3)) and (slices >= @as(c_int, 3))) {
var sphere: [*c]par_shapes_mesh = par_shapes_create_parametric_sphere(slices, rings);
_ = &sphere;
par_shapes_scale(sphere, radius, radius, radius);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = sphere.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = sphere.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.tcoords + @as(usize, @intCast(tmp)) else break :blk sphere.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.tcoords + @as(usize, @intCast(tmp)) else break :blk sphere.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(sphere);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: sphere");
}
return mesh;
}
pub export fn GenMeshHemiSphere(arg_radius: f32, arg_rings: c_int, arg_slices: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var rings = arg_rings;
_ = &rings;
var slices = arg_slices;
_ = &slices;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if ((rings >= @as(c_int, 3)) and (slices >= @as(c_int, 3))) {
if (radius < 0.0) {
radius = 0.0;
}
var sphere: [*c]par_shapes_mesh = par_shapes_create_hemisphere(slices, rings);
_ = &sphere;
par_shapes_scale(sphere, radius, radius, radius);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (sphere.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = sphere.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = sphere.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.points + @as(usize, @intCast(tmp)) else break :blk sphere.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.normals + @as(usize, @intCast(tmp)) else break :blk sphere.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk sphere.*.tcoords + @as(usize, @intCast(tmp)) else break :blk sphere.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 sphere.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 sphere.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk sphere.*.tcoords + @as(usize, @intCast(tmp)) else break :blk sphere.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(sphere);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: hemisphere");
}
return mesh;
}
pub export fn GenMeshCylinder(arg_radius: f32, arg_height: f32, arg_slices: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var height = arg_height;
_ = &height;
var slices = arg_slices;
_ = &slices;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if (slices >= @as(c_int, 3)) {
var cylinder: [*c]par_shapes_mesh = par_shapes_create_cylinder(slices, @as(c_int, 8));
_ = &cylinder;
par_shapes_scale(cylinder, radius, radius, height);
par_shapes_rotate(cylinder, -3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
1,
0,
0,
})))));
var capTop: [*c]par_shapes_mesh = par_shapes_create_disk(radius, slices, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
0,
})))), @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
1,
})))));
_ = &capTop;
capTop.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * capTop.*.npoints))) *% @sizeOf(f32)))));
{
var i: c_int = 0;
_ = &i;
while (i < (@as(c_int, 2) * capTop.*.npoints)) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk capTop.*.tcoords + @as(usize, @intCast(tmp)) else break :blk capTop.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0.0;
}
}
par_shapes_rotate(capTop, -3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
1,
0,
0,
})))));
par_shapes_rotate(capTop, @as(f32, @floatFromInt(@as(c_int, 90))) * (3.1415927410125732 / 180.0), @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
1,
0,
})))));
par_shapes_translate(capTop, @as(f32, @floatFromInt(@as(c_int, 0))), height, @as(f32, @floatFromInt(@as(c_int, 0))));
var capBottom: [*c]par_shapes_mesh = par_shapes_create_disk(radius, slices, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
0,
})))), @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
@as(f32, @floatFromInt(-@as(c_int, 1))),
})))));
_ = &capBottom;
capBottom.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * capBottom.*.npoints))) *% @sizeOf(f32)))));
{
var i: c_int = 0;
_ = &i;
while (i < (@as(c_int, 2) * capBottom.*.npoints)) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk capBottom.*.tcoords + @as(usize, @intCast(tmp)) else break :blk capBottom.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0.949999988079071;
}
}
par_shapes_rotate(capBottom, 3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
1,
0,
0,
})))));
par_shapes_rotate(capBottom, @as(f32, @floatFromInt(-@as(c_int, 90))) * (3.1415927410125732 / 180.0), @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
1,
0,
})))));
par_shapes_merge_and_free(cylinder, capTop);
par_shapes_merge_and_free(cylinder, capBottom);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cylinder.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cylinder.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cylinder.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = cylinder.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = cylinder.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk cylinder.*.points + @as(usize, @intCast(tmp)) else break :blk cylinder.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk cylinder.*.points + @as(usize, @intCast(tmp)) else break :blk cylinder.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk cylinder.*.points + @as(usize, @intCast(tmp)) else break :blk cylinder.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk cylinder.*.normals + @as(usize, @intCast(tmp)) else break :blk cylinder.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk cylinder.*.normals + @as(usize, @intCast(tmp)) else break :blk cylinder.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk cylinder.*.normals + @as(usize, @intCast(tmp)) else break :blk cylinder.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk cylinder.*.tcoords + @as(usize, @intCast(tmp)) else break :blk cylinder.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cylinder.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cylinder.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk cylinder.*.tcoords + @as(usize, @intCast(tmp)) else break :blk cylinder.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(cylinder);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: cylinder");
}
return mesh;
}
pub export fn GenMeshCone(arg_radius: f32, arg_height: f32, arg_slices: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var height = arg_height;
_ = &height;
var slices = arg_slices;
_ = &slices;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if (slices >= @as(c_int, 3)) {
var cone: [*c]par_shapes_mesh = par_shapes_create_cone(slices, @as(c_int, 8));
_ = &cone;
par_shapes_scale(cone, radius, radius, height);
par_shapes_rotate(cone, -3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
1,
0,
0,
})))));
par_shapes_rotate(cone, 3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
1,
0,
})))));
var capBottom: [*c]par_shapes_mesh = par_shapes_create_disk(radius, slices, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
0,
})))), @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
0,
0,
@as(f32, @floatFromInt(-@as(c_int, 1))),
})))));
_ = &capBottom;
capBottom.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * capBottom.*.npoints))) *% @sizeOf(f32)))));
{
var i: c_int = 0;
_ = &i;
while (i < (@as(c_int, 2) * capBottom.*.npoints)) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk capBottom.*.tcoords + @as(usize, @intCast(tmp)) else break :blk capBottom.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0.949999988079071;
}
}
par_shapes_rotate(capBottom, 3.1415927410125732 / 2.0, @as([*c]f32, @ptrCast(@alignCast(&([3]f32{
1,
0,
0,
})))));
par_shapes_merge_and_free(cone, capBottom);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cone.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cone.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (cone.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = cone.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = cone.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk cone.*.points + @as(usize, @intCast(tmp)) else break :blk cone.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk cone.*.points + @as(usize, @intCast(tmp)) else break :blk cone.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk cone.*.points + @as(usize, @intCast(tmp)) else break :blk cone.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk cone.*.normals + @as(usize, @intCast(tmp)) else break :blk cone.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk cone.*.normals + @as(usize, @intCast(tmp)) else break :blk cone.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk cone.*.normals + @as(usize, @intCast(tmp)) else break :blk cone.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk cone.*.tcoords + @as(usize, @intCast(tmp)) else break :blk cone.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 cone.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 cone.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk cone.*.tcoords + @as(usize, @intCast(tmp)) else break :blk cone.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(cone);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: cone");
}
return mesh;
}
pub export fn GenMeshTorus(arg_radius: f32, arg_size: f32, arg_radSeg: c_int, arg_sides: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var size = arg_size;
_ = &size;
var radSeg = arg_radSeg;
_ = &radSeg;
var sides = arg_sides;
_ = &sides;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if ((sides >= @as(c_int, 3)) and (radSeg >= @as(c_int, 3))) {
if (radius > 1.0) {
radius = 1.0;
} else if (radius < 0.10000000149011612) {
radius = 0.10000000149011612;
}
var torus: [*c]par_shapes_mesh = par_shapes_create_torus(radSeg, sides, radius);
_ = &torus;
par_shapes_scale(torus, size / @as(f32, @floatFromInt(@as(c_int, 2))), size / @as(f32, @floatFromInt(@as(c_int, 2))), size / @as(f32, @floatFromInt(@as(c_int, 2))));
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (torus.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (torus.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (torus.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = torus.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = torus.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk torus.*.points + @as(usize, @intCast(tmp)) else break :blk torus.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk torus.*.points + @as(usize, @intCast(tmp)) else break :blk torus.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk torus.*.points + @as(usize, @intCast(tmp)) else break :blk torus.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk torus.*.normals + @as(usize, @intCast(tmp)) else break :blk torus.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk torus.*.normals + @as(usize, @intCast(tmp)) else break :blk torus.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk torus.*.normals + @as(usize, @intCast(tmp)) else break :blk torus.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk torus.*.tcoords + @as(usize, @intCast(tmp)) else break :blk torus.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 torus.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 torus.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk torus.*.tcoords + @as(usize, @intCast(tmp)) else break :blk torus.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(torus);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: torus");
}
return mesh;
}
pub export fn GenMeshKnot(arg_radius: f32, arg_size: f32, arg_radSeg: c_int, arg_sides: c_int) Mesh {
var radius = arg_radius;
_ = &radius;
var size = arg_size;
_ = &size;
var radSeg = arg_radSeg;
_ = &radSeg;
var sides = arg_sides;
_ = &sides;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
if ((sides >= @as(c_int, 3)) and (radSeg >= @as(c_int, 3))) {
if (radius > 3.0) {
radius = 3.0;
} else if (radius < 0.5) {
radius = 0.5;
}
var knot: [*c]par_shapes_mesh = par_shapes_create_trefoil_knot(radSeg, sides, radius);
_ = &knot;
par_shapes_scale(knot, size, size, size);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (knot.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (knot.*.ntriangles * @as(c_int, 3)) * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, (knot.*.ntriangles * @as(c_int, 3)) * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.vertexCount = knot.*.ntriangles * @as(c_int, 3);
mesh.triangleCount = knot.*.ntriangles;
{
var k: c_int = 0;
_ = &k;
while (k < mesh.vertexCount) : (k += 1) {
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk knot.*.points + @as(usize, @intCast(tmp)) else break :blk knot.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk knot.*.points + @as(usize, @intCast(tmp)) else break :blk knot.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk knot.*.points + @as(usize, @intCast(tmp)) else break :blk knot.*.points - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3);
if (tmp >= 0) break :blk knot.*.normals + @as(usize, @intCast(tmp)) else break :blk knot.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk knot.*.normals + @as(usize, @intCast(tmp)) else break :blk knot.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk knot.*.normals + @as(usize, @intCast(tmp)) else break :blk knot.*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = k * @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2);
if (tmp >= 0) break :blk knot.*.tcoords + @as(usize, @intCast(tmp)) else break :blk knot.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (k * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_uint, (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 knot.*.triangles + @as(usize, @intCast(tmp_2)) else break :blk_1 knot.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk knot.*.tcoords + @as(usize, @intCast(tmp)) else break :blk knot.*.tcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
par_shapes_free_mesh(knot);
UploadMesh(&mesh, @as(c_int, 0) != 0);
} else {
TraceLog(LOG_WARNING, "MESH: Failed to generate mesh: knot");
}
return mesh;
}
pub export fn GenMeshHeightmap(arg_heightmap: Image, arg_size: Vector3) Mesh {
var heightmap = arg_heightmap;
_ = &heightmap;
var size = arg_size;
_ = &size;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
var mapX: c_int = heightmap.width;
_ = &mapX;
var mapZ: c_int = heightmap.height;
_ = &mapZ;
var pixels: [*c]Color = LoadImageColors(heightmap);
_ = &pixels;
mesh.triangleCount = ((mapX - @as(c_int, 1)) * (mapZ - @as(c_int, 1))) * @as(c_int, 2);
mesh.vertexCount = mesh.triangleCount * @as(c_int, 3);
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.colors = null;
var vCounter: c_int = 0;
_ = &vCounter;
var tcCounter: c_int = 0;
_ = &tcCounter;
var nCounter: c_int = 0;
_ = &nCounter;
var scaleFactor: Vector3 = Vector3{
.x = size.x / @as(f32, @floatFromInt(mapX - @as(c_int, 1))),
.y = size.y / 255.0,
.z = size.z / @as(f32, @floatFromInt(mapZ - @as(c_int, 1))),
};
_ = &scaleFactor;
var vA: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &vA;
var vB: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &vB;
var vC: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &vC;
var vN: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &vN;
{
var z: c_int = 0;
_ = &z;
while (z < (mapZ - @as(c_int, 1))) : (z += 1) {
{
var x: c_int = 0;
_ = &x;
while (x < (mapX - @as(c_int, 1))) : (x += 1) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x)) * scaleFactor.x;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (@as(f32, @floatFromInt((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g)))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))))) / 3.0) * scaleFactor.y;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z)) * scaleFactor.z;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x)) * scaleFactor.x;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (@as(f32, @floatFromInt((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g)))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = x + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))))) / 3.0) * scaleFactor.y;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z + @as(c_int, 1))) * scaleFactor.z;
(blk: {
const tmp = vCounter + @as(c_int, 6);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x + @as(c_int, 1))) * scaleFactor.x;
(blk: {
const tmp = vCounter + @as(c_int, 7);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (@as(f32, @floatFromInt((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g)))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + (z * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))))) / 3.0) * scaleFactor.y;
(blk: {
const tmp = vCounter + @as(c_int, 8);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z)) * scaleFactor.z;
(blk: {
const tmp = vCounter + @as(c_int, 9);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 6);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 10);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 7);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 11);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 8);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 12);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 13);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 14);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = vCounter + @as(c_int, 15);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x + @as(c_int, 1))) * scaleFactor.x;
(blk: {
const tmp = vCounter + @as(c_int, 16);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (@as(f32, @floatFromInt((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g)))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (x + @as(c_int, 1)) + ((z + @as(c_int, 1)) * mapX);
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))))) / 3.0) * scaleFactor.y;
(blk: {
const tmp = vCounter + @as(c_int, 17);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z + @as(c_int, 1))) * scaleFactor.z;
vCounter += @as(c_int, 18);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x)) / @as(f32, @floatFromInt(mapX - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z)) / @as(f32, @floatFromInt(mapZ - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x)) / @as(f32, @floatFromInt(mapX - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z + @as(c_int, 1))) / @as(f32, @floatFromInt(mapZ - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x + @as(c_int, 1))) / @as(f32, @floatFromInt(mapX - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z)) / @as(f32, @floatFromInt(mapZ - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 6);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = tcCounter + @as(c_int, 7);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = tcCounter + @as(c_int, 8);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = tcCounter + @as(c_int, 9);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = tcCounter + @as(c_int, 10);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(x + @as(c_int, 1))) / @as(f32, @floatFromInt(mapX - @as(c_int, 1)));
(blk: {
const tmp = tcCounter + @as(c_int, 11);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(z + @as(c_int, 1))) / @as(f32, @floatFromInt(mapZ - @as(c_int, 1)));
tcCounter += @as(c_int, 12);
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 18)) : (i += @as(c_int, 9)) {
vA.x = (blk: {
const tmp = nCounter + i;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vA.y = (blk: {
const tmp = (nCounter + i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vA.z = (blk: {
const tmp = (nCounter + i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vB.x = (blk: {
const tmp = (nCounter + i) + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vB.y = (blk: {
const tmp = (nCounter + i) + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vB.z = (blk: {
const tmp = (nCounter + i) + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vC.x = (blk: {
const tmp = (nCounter + i) + @as(c_int, 6);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vC.y = (blk: {
const tmp = (nCounter + i) + @as(c_int, 7);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vC.z = (blk: {
const tmp = (nCounter + i) + @as(c_int, 8);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
vN = Vector3Normalize(Vector3CrossProduct(Vector3Subtract(vB, vA), Vector3Subtract(vC, vA)));
(blk: {
const tmp = nCounter + i;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.x;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.y;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.z;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 3);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.x;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 4);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.y;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 5);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.z;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 6);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.x;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 7);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.y;
(blk: {
const tmp = (nCounter + i) + @as(c_int, 8);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vN.z;
}
}
nCounter += @as(c_int, 18);
}
}
}
}
UnloadImageColors(pixels);
UploadMesh(&mesh, @as(c_int, 0) != 0);
return mesh;
}
pub export fn GenMeshCubicmap(arg_cubicmap: Image, arg_cubeSize: Vector3) Mesh {
var cubicmap = arg_cubicmap;
_ = &cubicmap;
var cubeSize = arg_cubeSize;
_ = &cubeSize;
var mesh: Mesh = Mesh{
.vertexCount = @as(c_int, 0),
.triangleCount = 0,
.vertices = null,
.texcoords = null,
.texcoords2 = null,
.normals = null,
.tangents = null,
.colors = null,
.indices = null,
.animVertices = null,
.animNormals = null,
.boneIds = null,
.boneWeights = null,
.vaoId = 0,
.vboId = null,
};
_ = &mesh;
var pixels: [*c]Color = LoadImageColors(cubicmap);
_ = &pixels;
var maxTriangles: c_int = (cubicmap.width * cubicmap.height) * @as(c_int, 12);
_ = &maxTriangles;
var vCounter: c_int = 0;
_ = &vCounter;
var tcCounter: c_int = 0;
_ = &tcCounter;
var nCounter: c_int = 0;
_ = &nCounter;
var w: f32 = cubeSize.x;
_ = &w;
var h: f32 = cubeSize.z;
_ = &h;
var h2: f32 = cubeSize.y;
_ = &h2;
var mapVertices: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, maxTriangles * @as(c_int, 3)))) *% @sizeOf(Vector3)))));
_ = &mapVertices;
var mapTexcoords: [*c]Vector2 = @as([*c]Vector2, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, maxTriangles * @as(c_int, 3)))) *% @sizeOf(Vector2)))));
_ = &mapTexcoords;
var mapNormals: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, maxTriangles * @as(c_int, 3)))) *% @sizeOf(Vector3)))));
_ = &mapNormals;
var n1: Vector3 = Vector3{
.x = 1.0,
.y = 0.0,
.z = 0.0,
};
_ = &n1;
var n2: Vector3 = Vector3{
.x = -1.0,
.y = 0.0,
.z = 0.0,
};
_ = &n2;
var n3: Vector3 = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
_ = &n3;
var n4: Vector3 = Vector3{
.x = 0.0,
.y = -1.0,
.z = 0.0,
};
_ = &n4;
var n5: Vector3 = Vector3{
.x = 0.0,
.y = 0.0,
.z = -1.0,
};
_ = &n5;
var n6: Vector3 = Vector3{
.x = 0.0,
.y = 0.0,
.z = 1.0,
};
_ = &n6;
const struct_RectangleF = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
width: f32 = @import("std").mem.zeroes(f32),
height: f32 = @import("std").mem.zeroes(f32),
};
_ = &struct_RectangleF;
const RectangleF = struct_RectangleF;
_ = &RectangleF;
var rightTexUV: RectangleF = RectangleF{
.x = 0.0,
.y = 0.0,
.width = 0.5,
.height = 0.5,
};
_ = &rightTexUV;
var leftTexUV: RectangleF = RectangleF{
.x = 0.5,
.y = 0.0,
.width = 0.5,
.height = 0.5,
};
_ = &leftTexUV;
var frontTexUV: RectangleF = RectangleF{
.x = 0.0,
.y = 0.0,
.width = 0.5,
.height = 0.5,
};
_ = &frontTexUV;
var backTexUV: RectangleF = RectangleF{
.x = 0.5,
.y = 0.0,
.width = 0.5,
.height = 0.5,
};
_ = &backTexUV;
var topTexUV: RectangleF = RectangleF{
.x = 0.0,
.y = 0.5,
.width = 0.5,
.height = 0.5,
};
_ = &topTexUV;
var bottomTexUV: RectangleF = RectangleF{
.x = 0.5,
.y = 0.5,
.width = 0.5,
.height = 0.5,
};
_ = &bottomTexUV;
{
var z: c_int = 0;
_ = &z;
while (z < cubicmap.height) : (z += 1) {
{
var x: c_int = 0;
_ = &x;
while (x < cubicmap.width) : (x += 1) {
var v1: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) - 0.5),
.y = h2,
.z = h * (@as(f32, @floatFromInt(z)) - 0.5),
};
_ = &v1;
var v2: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) - 0.5),
.y = h2,
.z = h * (@as(f32, @floatFromInt(z)) + 0.5),
};
_ = &v2;
var v3: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) + 0.5),
.y = h2,
.z = h * (@as(f32, @floatFromInt(z)) + 0.5),
};
_ = &v3;
var v4: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) + 0.5),
.y = h2,
.z = h * (@as(f32, @floatFromInt(z)) - 0.5),
};
_ = &v4;
var v5: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) + 0.5),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = h * (@as(f32, @floatFromInt(z)) - 0.5),
};
_ = &v5;
var v6: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) - 0.5),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = h * (@as(f32, @floatFromInt(z)) - 0.5),
};
_ = &v6;
var v7: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) - 0.5),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = h * (@as(f32, @floatFromInt(z)) + 0.5),
};
_ = &v7;
var v8: Vector3 = Vector3{
.x = w * (@as(f32, @floatFromInt(x)) + 0.5),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = h * (@as(f32, @floatFromInt(z)) + 0.5),
};
_ = &v8;
if ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a))))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v2;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v4;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y + topTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y + topTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y + topTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y,
};
tcCounter += @as(c_int, 6);
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v5;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y + bottomTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y + bottomTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y + bottomTexUV.height,
};
tcCounter += @as(c_int, 6);
if (((z < (cubicmap.height - @as(c_int, 1))) and ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z + @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z + @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z + @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z + @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a)))))) or (z == (cubicmap.height - @as(c_int, 1)))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v2;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n6;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x,
.y = frontTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x,
.y = frontTexUV.y + frontTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x + frontTexUV.width,
.y = frontTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x + frontTexUV.width,
.y = frontTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x,
.y = frontTexUV.y + frontTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = frontTexUV.x + frontTexUV.width,
.y = frontTexUV.y + frontTexUV.height,
};
tcCounter += @as(c_int, 6);
}
if (((z > @as(c_int, 0)) and ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z - @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z - @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z - @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = ((z - @as(c_int, 1)) * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a)))))) or (z == @as(c_int, 0))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v5;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v4;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v5;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n5;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x + backTexUV.width,
.y = backTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x,
.y = backTexUV.y + backTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x + backTexUV.width,
.y = backTexUV.y + backTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x + backTexUV.width,
.y = backTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x,
.y = backTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = backTexUV.x,
.y = backTexUV.y + backTexUV.height,
};
tcCounter += @as(c_int, 6);
}
if (((x < (cubicmap.width - @as(c_int, 1))) and ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x + @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x + @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x + @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x + @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a)))))) or (x == (cubicmap.width - @as(c_int, 1)))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v4;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v4;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v5;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n1;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x,
.y = rightTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x,
.y = rightTexUV.y + rightTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x + rightTexUV.width,
.y = rightTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x + rightTexUV.width,
.y = rightTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x,
.y = rightTexUV.y + rightTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = rightTexUV.x + rightTexUV.width,
.y = rightTexUV.y + rightTexUV.height,
};
tcCounter += @as(c_int, 6);
}
if (((x > @as(c_int, 0)) and ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x - @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x - @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x - @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + (x - @as(c_int, 1));
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a)))))) or (x == @as(c_int, 0))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v2;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n2;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x,
.y = leftTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x + leftTexUV.width,
.y = leftTexUV.y + leftTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x + leftTexUV.width,
.y = leftTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x,
.y = leftTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x,
.y = leftTexUV.y + leftTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = leftTexUV.x + leftTexUV.width,
.y = leftTexUV.y + leftTexUV.height,
};
tcCounter += @as(c_int, 6);
}
} else if ((((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.r))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).r)))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.g))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).g))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.b))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).b))))) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = (z * cubicmap.width) + x;
if (tmp >= 0) break :blk pixels + @as(usize, @intCast(tmp)) else break :blk pixels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.a))) == @as(c_int, @bitCast(@as(c_uint, (Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
}).a))))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v2;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v1;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v4;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v3;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n4;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y + topTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y + topTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x,
.y = topTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = topTexUV.x + topTexUV.width,
.y = topTexUV.y + topTexUV.height,
};
tcCounter += @as(c_int, 6);
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v7;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
(blk: {
const tmp = vCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v6;
(blk: {
const tmp = vCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v8;
(blk: {
const tmp = vCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = v5;
vCounter += @as(c_int, 6);
(blk: {
const tmp = nCounter;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
(blk: {
const tmp = nCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = n3;
nCounter += @as(c_int, 6);
(blk: {
const tmp = tcCounter;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y + bottomTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y + bottomTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 3);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x + bottomTexUV.width,
.y = bottomTexUV.y,
};
(blk: {
const tmp = tcCounter + @as(c_int, 4);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y + bottomTexUV.height,
};
(blk: {
const tmp = tcCounter + @as(c_int, 5);
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Vector2{
.x = bottomTexUV.x,
.y = bottomTexUV.y,
};
tcCounter += @as(c_int, 6);
}
}
}
}
}
mesh.vertexCount = vCounter;
mesh.triangleCount = @divTrunc(vCounter, @as(c_int, 3));
mesh.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32)))));
mesh.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 2)))) *% @sizeOf(f32)))));
mesh.colors = null;
var fCounter: c_int = 0;
_ = &fCounter;
{
var i: c_int = 0;
_ = &i;
while (i < vCounter) : (i += 1) {
(blk: {
const tmp = fCounter;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = fCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = fCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapVertices + @as(usize, @intCast(tmp)) else break :blk mapVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
fCounter += @as(c_int, 3);
}
}
fCounter = 0;
{
var i: c_int = 0;
_ = &i;
while (i < nCounter) : (i += 1) {
(blk: {
const tmp = fCounter;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = fCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
(blk: {
const tmp = fCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapNormals + @as(usize, @intCast(tmp)) else break :blk mapNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.z;
fCounter += @as(c_int, 3);
}
}
fCounter = 0;
{
var i: c_int = 0;
_ = &i;
while (i < tcCounter) : (i += 1) {
(blk: {
const tmp = fCounter;
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.x;
(blk: {
const tmp = fCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.texcoords + @as(usize, @intCast(tmp)) else break :blk mesh.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = i;
if (tmp >= 0) break :blk mapTexcoords + @as(usize, @intCast(tmp)) else break :blk mapTexcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.y;
fCounter += @as(c_int, 2);
}
}
free(@as(?*anyopaque, @ptrCast(mapVertices)));
free(@as(?*anyopaque, @ptrCast(mapNormals)));
free(@as(?*anyopaque, @ptrCast(mapTexcoords)));
UnloadImageColors(pixels);
UploadMesh(&mesh, @as(c_int, 0) != 0);
return mesh;
}
pub export fn LoadMaterials(arg_fileName: [*c]const u8, arg_materialCount: [*c]c_int) [*c]Material {
var fileName = arg_fileName;
_ = &fileName;
var materialCount = arg_materialCount;
_ = &materialCount;
var materials: [*c]Material = null;
_ = &materials;
var count: c_uint = 0;
_ = &count;
if (IsFileExtension(fileName, ".mtl")) {
var mats: [*c]tinyobj_material_t = null;
_ = &mats;
var result: c_int = tinyobj_parse_mtl_file(&mats, &count, fileName);
_ = &result;
if (result != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MATERIAL: [%s] Failed to parse materials file", fileName);
}
materials = @as([*c]Material, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, count))) *% @sizeOf(Material)))));
ProcessMaterialsOBJ(materials, mats, @as(c_int, @bitCast(count)));
tinyobj_materials_free(mats, count);
}
materialCount.* = @as(c_int, @bitCast(count));
return materials;
}
pub export fn LoadMaterialDefault() Material {
var material: Material = Material{
.shader = Shader{
.id = @as(c_uint, @bitCast(@as(c_int, 0))),
.locs = null,
},
.maps = null,
.params = @import("std").mem.zeroes([4]f32),
};
_ = &material;
material.maps = @as([*c]MaterialMap, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 12)))), @sizeOf(MaterialMap)))));
material.shader.id = rlGetShaderIdDefault();
material.shader.locs = rlGetShaderLocsDefault();
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = Texture2D{
.id = rlGetTextureIdDefault(),
.width = @as(c_int, 1),
.height = @as(c_int, 1),
.mipmaps = @as(c_int, 1),
.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8,
};
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
return material;
}
pub export fn IsMaterialReady(arg_material: Material) bool {
var material = arg_material;
_ = &material;
var result: bool = @as(c_int, 0) != 0;
_ = &result;
if ((material.maps != @as([*c]MaterialMap, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) and (material.shader.id > @as(c_uint, @bitCast(@as(c_int, 0))))) {
result = @as(c_int, 1) != 0;
}
return result;
}
pub export fn UnloadMaterial(arg_material: Material) void {
var material = arg_material;
_ = &material;
if (material.shader.id != rlGetShaderIdDefault()) {
UnloadShader(material.shader);
}
if (material.maps != @as([*c]MaterialMap, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 12)) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id != rlGetTextureIdDefault()) {
rlUnloadTexture((blk: {
const tmp = i;
if (tmp >= 0) break :blk material.maps + @as(usize, @intCast(tmp)) else break :blk material.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture.id);
}
}
}
}
free(@as(?*anyopaque, @ptrCast(material.maps)));
}
pub export fn SetMaterialTexture(arg_material: [*c]Material, arg_mapType: c_int, arg_texture: Texture2D) void {
var material = arg_material;
_ = &material;
var mapType = arg_mapType;
_ = &mapType;
var texture = arg_texture;
_ = &texture;
(blk: {
const tmp = mapType;
if (tmp >= 0) break :blk material.*.maps + @as(usize, @intCast(tmp)) else break :blk material.*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = texture;
}
pub export fn SetModelMeshMaterial(arg_model: [*c]Model, arg_meshId: c_int, arg_materialId: c_int) void {
var model = arg_model;
_ = &model;
var meshId = arg_meshId;
_ = &meshId;
var materialId = arg_materialId;
_ = &materialId;
if (meshId >= model.*.meshCount) {
TraceLog(LOG_WARNING, "MESH: Id greater than mesh count");
} else if (materialId >= model.*.materialCount) {
TraceLog(LOG_WARNING, "MATERIAL: Id greater than material count");
} else {
(blk: {
const tmp = meshId;
if (tmp >= 0) break :blk model.*.meshMaterial + @as(usize, @intCast(tmp)) else break :blk model.*.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = materialId;
}
}
pub export fn LoadModelAnimations(arg_fileName: [*c]const u8, arg_animCount: [*c]c_int) [*c]ModelAnimation {
var fileName = arg_fileName;
_ = &fileName;
var animCount = arg_animCount;
_ = &animCount;
var animations: [*c]ModelAnimation = null;
_ = &animations;
if (IsFileExtension(fileName, ".iqm")) {
animations = LoadModelAnimationsIQM(fileName, animCount);
}
if (IsFileExtension(fileName, ".m3d")) {
animations = LoadModelAnimationsM3D(fileName, animCount);
}
if (IsFileExtension(fileName, ".gltf;.glb")) {
animations = LoadModelAnimationsGLTF(fileName, animCount);
}
return animations;
}
pub export fn UpdateModelAnimation(arg_model: Model, arg_anim: ModelAnimation, arg_frame: c_int) void {
var model = arg_model;
_ = &model;
var anim = arg_anim;
_ = &anim;
var frame = arg_frame;
_ = &frame;
if (((anim.frameCount > @as(c_int, 0)) and (anim.bones != @as([*c]BoneInfo, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) and (anim.framePoses != @as([*c][*c]Transform, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
if (frame >= anim.frameCount) {
frame = @import("std").zig.c_translation.signedRemainder(frame, anim.frameCount);
}
{
var m: c_int = 0;
_ = &m;
while (m < model.meshCount) : (m += 1) {
var mesh: Mesh = (blk: {
const tmp = m;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &mesh;
if ((mesh.boneIds == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) or (mesh.boneWeights == @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
TraceLog(LOG_WARNING, "MODEL: UpdateModelAnimation(): Mesh %i has no connection to bones", m);
continue;
}
var updated: bool = @as(c_int, 0) != 0;
_ = &updated;
var animVertex: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &animVertex;
var animNormal: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &animNormal;
var inTranslation: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &inTranslation;
var inRotation: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &inRotation;
var outTranslation: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &outTranslation;
var outRotation: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &outRotation;
var outScale: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &outScale;
var boneId: c_int = 0;
_ = &boneId;
var boneCounter: c_int = 0;
_ = &boneCounter;
var boneWeight: f32 = @as(f32, @floatCast(0.0));
_ = &boneWeight;
const vValues: c_int = mesh.vertexCount * @as(c_int, 3);
_ = &vValues;
{
var vCounter: c_int = 0;
_ = &vCounter;
while (vCounter < vValues) : (vCounter += @as(c_int, 3)) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
if (mesh.animNormals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
}
{
var j: c_int = 0;
_ = &j;
while (j < @as(c_int, 4)) : (_ = blk: {
j += 1;
break :blk blk_1: {
const ref = &boneCounter;
const tmp = ref.*;
ref.* += 1;
break :blk_1 tmp;
};
}) {
boneWeight = (blk: {
const tmp = boneCounter;
if (tmp >= 0) break :blk mesh.boneWeights + @as(usize, @intCast(tmp)) else break :blk mesh.boneWeights - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
if (boneWeight == 0.0) continue;
boneId = @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = boneCounter;
if (tmp >= 0) break :blk mesh.boneIds + @as(usize, @intCast(tmp)) else break :blk mesh.boneIds - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
inTranslation = (blk: {
const tmp = boneId;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation;
inRotation = (blk: {
const tmp = boneId;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation;
outTranslation = (blk: {
const tmp = boneId;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation;
outRotation = (blk: {
const tmp = boneId;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation;
outScale = (blk: {
const tmp = boneId;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = frame;
if (tmp_2 >= 0) break :blk_1 anim.framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale;
animVertex = Vector3{
.x = (blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.vertices + @as(usize, @intCast(tmp)) else break :blk mesh.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
animVertex = Vector3Subtract(animVertex, inTranslation);
animVertex = Vector3Multiply(animVertex, outScale);
animVertex = Vector3RotateByQuaternion(animVertex, QuaternionMultiply(outRotation, QuaternionInvert(inRotation)));
animVertex = Vector3Add(animVertex, outTranslation);
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animVertex.x * boneWeight;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animVertex.y * boneWeight;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.animVertices + @as(usize, @intCast(tmp)) else break :blk mesh.animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animVertex.z * boneWeight;
updated = @as(c_int, 1) != 0;
if (mesh.normals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
animNormal = Vector3{
.x = (blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.y = (blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
.z = (blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.normals + @as(usize, @intCast(tmp)) else break :blk mesh.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*,
};
animNormal = Vector3RotateByQuaternion(animNormal, QuaternionMultiply(outRotation, QuaternionInvert(inRotation)));
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animNormal.x * boneWeight;
(blk: {
const tmp = vCounter + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animNormal.y * boneWeight;
(blk: {
const tmp = vCounter + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.animNormals + @as(usize, @intCast(tmp)) else break :blk mesh.animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* += animNormal.z * boneWeight;
}
}
}
}
}
if (updated) {
rlUpdateVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 0)))], @as(?*const anyopaque, @ptrCast(mesh.animVertices)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32))))), @as(c_int, 0));
rlUpdateVertexBuffer(mesh.vboId[@as(c_uint, @intCast(@as(c_int, 2)))], @as(?*const anyopaque, @ptrCast(mesh.animNormals)), @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, mesh.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32))))), @as(c_int, 0));
}
}
}
}
}
pub export fn UnloadModelAnimation(arg_anim: ModelAnimation) void {
var anim = arg_anim;
_ = &anim;
{
var i: c_int = 0;
_ = &i;
while (i < anim.frameCount) : (i += 1) {
free(@as(?*anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk anim.framePoses + @as(usize, @intCast(tmp)) else break :blk anim.framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
}
}
free(@as(?*anyopaque, @ptrCast(anim.bones)));
free(@as(?*anyopaque, @ptrCast(anim.framePoses)));
}
pub export fn UnloadModelAnimations(arg_animations: [*c]ModelAnimation, arg_animCount: c_int) void {
var animations = arg_animations;
_ = &animations;
var animCount = arg_animCount;
_ = &animCount;
{
var i: c_int = 0;
_ = &i;
while (i < animCount) : (i += 1) {
UnloadModelAnimation((blk: {
const tmp = i;
if (tmp >= 0) break :blk animations + @as(usize, @intCast(tmp)) else break :blk animations - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
}
}
free(@as(?*anyopaque, @ptrCast(animations)));
}
pub export fn IsModelAnimationValid(arg_model: Model, arg_anim: ModelAnimation) bool {
var model = arg_model;
_ = &model;
var anim = arg_anim;
_ = &anim;
var result: c_int = 1;
_ = &result;
if (model.boneCount != anim.boneCount) {
result = 0;
} else {
{
var i: c_int = 0;
_ = &i;
while (i < model.boneCount) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent != (blk: {
const tmp = i;
if (tmp >= 0) break :blk anim.bones + @as(usize, @intCast(tmp)) else break :blk anim.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent) {
result = 0;
break;
}
}
}
}
return result != 0;
}
pub export fn CheckCollisionSpheres(arg_center1: Vector3, arg_radius1: f32, arg_center2: Vector3, arg_radius2: f32) bool {
var center1 = arg_center1;
_ = &center1;
var radius1 = arg_radius1;
_ = &radius1;
var center2 = arg_center2;
_ = &center2;
var radius2 = arg_radius2;
_ = &radius2;
var collision: bool = @as(c_int, 0) != 0;
_ = &collision;
if (Vector3DotProduct(Vector3Subtract(center2, center1), Vector3Subtract(center2, center1)) <= ((radius1 + radius2) * (radius1 + radius2))) {
collision = @as(c_int, 1) != 0;
}
return collision;
}
pub export fn CheckCollisionBoxes(arg_box1: BoundingBox, arg_box2: BoundingBox) bool {
var box1 = arg_box1;
_ = &box1;
var box2 = arg_box2;
_ = &box2;
var collision: bool = @as(c_int, 1) != 0;
_ = &collision;
if ((box1.max.x >= box2.min.x) and (box1.min.x <= box2.max.x)) {
if ((box1.max.y < box2.min.y) or (box1.min.y > box2.max.y)) {
collision = @as(c_int, 0) != 0;
}
if ((box1.max.z < box2.min.z) or (box1.min.z > box2.max.z)) {
collision = @as(c_int, 0) != 0;
}
} else {
collision = @as(c_int, 0) != 0;
}
return collision;
}
pub export fn CheckCollisionBoxSphere(arg_box: BoundingBox, arg_center: Vector3, arg_radius: f32) bool {
var box = arg_box;
_ = &box;
var center = arg_center;
_ = &center;
var radius = arg_radius;
_ = &radius;
var collision: bool = @as(c_int, 0) != 0;
_ = &collision;
var dmin: f32 = 0;
_ = &dmin;
if (center.x < box.min.x) {
dmin += powf(center.x - box.min.x, @as(f32, @floatFromInt(@as(c_int, 2))));
} else if (center.x > box.max.x) {
dmin += powf(center.x - box.max.x, @as(f32, @floatFromInt(@as(c_int, 2))));
}
if (center.y < box.min.y) {
dmin += powf(center.y - box.min.y, @as(f32, @floatFromInt(@as(c_int, 2))));
} else if (center.y > box.max.y) {
dmin += powf(center.y - box.max.y, @as(f32, @floatFromInt(@as(c_int, 2))));
}
if (center.z < box.min.z) {
dmin += powf(center.z - box.min.z, @as(f32, @floatFromInt(@as(c_int, 2))));
} else if (center.z > box.max.z) {
dmin += powf(center.z - box.max.z, @as(f32, @floatFromInt(@as(c_int, 2))));
}
if (dmin <= (radius * radius)) {
collision = @as(c_int, 1) != 0;
}
return collision;
}
pub export fn GetRayCollisionSphere(arg_ray: Ray, arg_center: Vector3, arg_radius: f32) RayCollision {
var ray = arg_ray;
_ = &ray;
var center = arg_center;
_ = &center;
var radius = arg_radius;
_ = &radius;
var collision: RayCollision = RayCollision{
.hit = @as(c_int, 0) != 0,
.distance = 0,
.point = @import("std").mem.zeroes(Vector3),
.normal = @import("std").mem.zeroes(Vector3),
};
_ = &collision;
var raySpherePos: Vector3 = Vector3Subtract(center, ray.position);
_ = &raySpherePos;
var vector: f32 = Vector3DotProduct(raySpherePos, ray.direction);
_ = &vector;
var distance: f32 = Vector3Length(raySpherePos);
_ = &distance;
var d: f32 = (radius * radius) - ((distance * distance) - (vector * vector));
_ = &d;
collision.hit = d >= 0.0;
if (distance < radius) {
collision.distance = vector + sqrtf(d);
collision.point = Vector3Add(ray.position, Vector3Scale(ray.direction, collision.distance));
collision.normal = Vector3Negate(Vector3Normalize(Vector3Subtract(collision.point, center)));
} else {
collision.distance = vector - sqrtf(d);
collision.point = Vector3Add(ray.position, Vector3Scale(ray.direction, collision.distance));
collision.normal = Vector3Normalize(Vector3Subtract(collision.point, center));
}
return collision;
}
pub export fn GetRayCollisionBox(arg_ray: Ray, arg_box: BoundingBox) RayCollision {
var ray = arg_ray;
_ = &ray;
var box = arg_box;
_ = &box;
var collision: RayCollision = RayCollision{
.hit = @as(c_int, 0) != 0,
.distance = 0,
.point = @import("std").mem.zeroes(Vector3),
.normal = @import("std").mem.zeroes(Vector3),
};
_ = &collision;
var insideBox: bool = (((((ray.position.x > box.min.x) and (ray.position.x < box.max.x)) and (ray.position.y > box.min.y)) and (ray.position.y < box.max.y)) and (ray.position.z > box.min.z)) and (ray.position.z < box.max.z);
_ = &insideBox;
if (insideBox) {
ray.direction = Vector3Negate(ray.direction);
}
var t: [11]f32 = [1]f32{
0,
} ++ [1]f32{0} ** 10;
_ = &t;
t[@as(c_uint, @intCast(@as(c_int, 8)))] = 1.0 / ray.direction.x;
t[@as(c_uint, @intCast(@as(c_int, 9)))] = 1.0 / ray.direction.y;
t[@as(c_uint, @intCast(@as(c_int, 10)))] = 1.0 / ray.direction.z;
t[@as(c_uint, @intCast(@as(c_int, 0)))] = (box.min.x - ray.position.x) * t[@as(c_uint, @intCast(@as(c_int, 8)))];
t[@as(c_uint, @intCast(@as(c_int, 1)))] = (box.max.x - ray.position.x) * t[@as(c_uint, @intCast(@as(c_int, 8)))];
t[@as(c_uint, @intCast(@as(c_int, 2)))] = (box.min.y - ray.position.y) * t[@as(c_uint, @intCast(@as(c_int, 9)))];
t[@as(c_uint, @intCast(@as(c_int, 3)))] = (box.max.y - ray.position.y) * t[@as(c_uint, @intCast(@as(c_int, 9)))];
t[@as(c_uint, @intCast(@as(c_int, 4)))] = (box.min.z - ray.position.z) * t[@as(c_uint, @intCast(@as(c_int, 10)))];
t[@as(c_uint, @intCast(@as(c_int, 5)))] = (box.max.z - ray.position.z) * t[@as(c_uint, @intCast(@as(c_int, 10)))];
t[@as(c_uint, @intCast(@as(c_int, 6)))] = @as(f32, @floatCast(fmax(fmax(fmin(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 1)))]))), fmin(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 2)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 3)))])))), fmin(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 4)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 5)))]))))));
t[@as(c_uint, @intCast(@as(c_int, 7)))] = @as(f32, @floatCast(fmin(fmin(fmax(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 1)))]))), fmax(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 2)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 3)))])))), fmax(@as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 4)))])), @as(f64, @floatCast(t[@as(c_uint, @intCast(@as(c_int, 5)))]))))));
collision.hit = !((t[@as(c_uint, @intCast(@as(c_int, 7)))] < @as(f32, @floatFromInt(@as(c_int, 0)))) or (t[@as(c_uint, @intCast(@as(c_int, 6)))] > t[@as(c_uint, @intCast(@as(c_int, 7)))]));
collision.distance = t[@as(c_uint, @intCast(@as(c_int, 6)))];
collision.point = Vector3Add(ray.position, Vector3Scale(ray.direction, collision.distance));
collision.normal = Vector3Lerp(box.min, box.max, 0.5);
collision.normal = Vector3Subtract(collision.point, collision.normal);
collision.normal = Vector3Scale(collision.normal, 2.009999990463257);
collision.normal = Vector3Divide(collision.normal, Vector3Subtract(box.max, box.min));
collision.normal.x = @as(f32, @floatFromInt(@as(c_int, @intFromFloat(collision.normal.x))));
collision.normal.y = @as(f32, @floatFromInt(@as(c_int, @intFromFloat(collision.normal.y))));
collision.normal.z = @as(f32, @floatFromInt(@as(c_int, @intFromFloat(collision.normal.z))));
collision.normal = Vector3Normalize(collision.normal);
if (insideBox) {
ray.direction = Vector3Negate(ray.direction);
collision.distance *= -1.0;
collision.normal = Vector3Negate(collision.normal);
}
return collision;
}
pub export fn GetRayCollisionMesh(arg_ray: Ray, arg_mesh: Mesh, arg_transform: Matrix) RayCollision {
var ray = arg_ray;
_ = &ray;
var mesh = arg_mesh;
_ = &mesh;
var transform = arg_transform;
_ = &transform;
var collision: RayCollision = RayCollision{
.hit = @as(c_int, 0) != 0,
.distance = 0,
.point = @import("std").mem.zeroes(Vector3),
.normal = @import("std").mem.zeroes(Vector3),
};
_ = &collision;
if (mesh.vertices != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
var triangleCount: c_int = mesh.triangleCount;
_ = &triangleCount;
{
var i: c_int = 0;
_ = &i;
while (i < triangleCount) : (i += 1) {
var a: Vector3 = undefined;
_ = &a;
var b: Vector3 = undefined;
_ = &b;
var c: Vector3 = undefined;
_ = &c;
var vertdata: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(mesh.vertices)));
_ = &vertdata;
if (mesh.indices != null) {
a = vertdata[(blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*];
b = vertdata[(blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*];
c = vertdata[(blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk mesh.indices + @as(usize, @intCast(tmp)) else break :blk mesh.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*];
} else {
a = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk vertdata + @as(usize, @intCast(tmp)) else break :blk vertdata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
b = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk vertdata + @as(usize, @intCast(tmp)) else break :blk vertdata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
c = (blk: {
const tmp = (i * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk vertdata + @as(usize, @intCast(tmp)) else break :blk vertdata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
a = Vector3Transform(a, transform);
b = Vector3Transform(b, transform);
c = Vector3Transform(c, transform);
var triHitInfo: RayCollision = GetRayCollisionTriangle(ray, a, b, c);
_ = &triHitInfo;
if (triHitInfo.hit) {
if (!collision.hit or (collision.distance > triHitInfo.distance)) {
collision = triHitInfo;
}
}
}
}
}
return collision;
}
pub export fn GetRayCollisionTriangle(arg_ray: Ray, arg_p1: Vector3, arg_p2: Vector3, arg_p3: Vector3) RayCollision {
var ray = arg_ray;
_ = &ray;
var p1 = arg_p1;
_ = &p1;
var p2 = arg_p2;
_ = &p2;
var p3 = arg_p3;
_ = &p3;
var collision: RayCollision = RayCollision{
.hit = @as(c_int, 0) != 0,
.distance = 0,
.point = @import("std").mem.zeroes(Vector3),
.normal = @import("std").mem.zeroes(Vector3),
};
_ = &collision;
var edge1: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &edge1;
var edge2: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &edge2;
var p: Vector3 = undefined;
_ = &p;
var q: Vector3 = undefined;
_ = &q;
var tv: Vector3 = undefined;
_ = &tv;
var det: f32 = undefined;
_ = &det;
var invDet: f32 = undefined;
_ = &invDet;
var u: f32 = undefined;
_ = &u;
var v: f32 = undefined;
_ = &v;
var t: f32 = undefined;
_ = &t;
edge1 = Vector3Subtract(p2, p1);
edge2 = Vector3Subtract(p3, p1);
p = Vector3CrossProduct(ray.direction, edge2);
det = Vector3DotProduct(edge1, p);
if ((det > -0.0000009999999974752427) and (det < 0.0000009999999974752427)) return collision;
invDet = 1.0 / det;
tv = Vector3Subtract(ray.position, p1);
u = Vector3DotProduct(tv, p) * invDet;
if ((u < 0.0) or (u > 1.0)) return collision;
q = Vector3CrossProduct(tv, edge1);
v = Vector3DotProduct(ray.direction, q) * invDet;
if ((v < 0.0) or ((u + v) > 1.0)) return collision;
t = Vector3DotProduct(edge2, q) * invDet;
if (t > 0.0000009999999974752427) {
collision.hit = @as(c_int, 1) != 0;
collision.distance = t;
collision.normal = Vector3Normalize(Vector3CrossProduct(edge1, edge2));
collision.point = Vector3Add(ray.position, Vector3Scale(ray.direction, t));
}
return collision;
}
pub export fn GetRayCollisionQuad(arg_ray: Ray, arg_p1: Vector3, arg_p2: Vector3, arg_p3: Vector3, arg_p4: Vector3) RayCollision {
var ray = arg_ray;
_ = &ray;
var p1 = arg_p1;
_ = &p1;
var p2 = arg_p2;
_ = &p2;
var p3 = arg_p3;
_ = &p3;
var p4 = arg_p4;
_ = &p4;
var collision: RayCollision = RayCollision{
.hit = @as(c_int, 0) != 0,
.distance = 0,
.point = @import("std").mem.zeroes(Vector3),
.normal = @import("std").mem.zeroes(Vector3),
};
_ = &collision;
collision = GetRayCollisionTriangle(ray, p1, p2, p4);
if (!collision.hit) {
collision = GetRayCollisionTriangle(ray, p2, p3, p4);
}
return collision;
}
pub const AudioCallback = ?*const fn (?*anyopaque, c_uint) callconv(.C) void;
pub extern fn InitAudioDevice() void;
pub extern fn CloseAudioDevice() void;
pub extern fn IsAudioDeviceReady() bool;
pub extern fn SetMasterVolume(volume: f32) void;
pub extern fn GetMasterVolume() f32;
pub extern fn LoadWave(fileName: [*c]const u8) Wave;
pub extern fn LoadWaveFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) Wave;
pub extern fn IsWaveReady(wave: Wave) bool;
pub extern fn LoadSound(fileName: [*c]const u8) Sound;
pub extern fn LoadSoundFromWave(wave: Wave) Sound;
pub extern fn LoadSoundAlias(source: Sound) Sound;
pub extern fn IsSoundReady(sound: Sound) bool;
pub extern fn UpdateSound(sound: Sound, data: ?*const anyopaque, sampleCount: c_int) void;
pub extern fn UnloadWave(wave: Wave) void;
pub extern fn UnloadSound(sound: Sound) void;
pub extern fn UnloadSoundAlias(alias: Sound) void;
pub extern fn ExportWave(wave: Wave, fileName: [*c]const u8) bool;
pub extern fn ExportWaveAsCode(wave: Wave, fileName: [*c]const u8) bool;
pub extern fn PlaySound(sound: Sound) void;
pub extern fn StopSound(sound: Sound) void;
pub extern fn PauseSound(sound: Sound) void;
pub extern fn ResumeSound(sound: Sound) void;
pub extern fn IsSoundPlaying(sound: Sound) bool;
pub extern fn SetSoundVolume(sound: Sound, volume: f32) void;
pub extern fn SetSoundPitch(sound: Sound, pitch: f32) void;
pub extern fn SetSoundPan(sound: Sound, pan: f32) void;
pub extern fn WaveCopy(wave: Wave) Wave;
pub extern fn WaveCrop(wave: [*c]Wave, initFrame: c_int, finalFrame: c_int) void;
pub extern fn WaveFormat(wave: [*c]Wave, sampleRate: c_int, sampleSize: c_int, channels: c_int) void;
pub extern fn LoadWaveSamples(wave: Wave) [*c]f32;
pub extern fn UnloadWaveSamples(samples: [*c]f32) void;
pub extern fn LoadMusicStream(fileName: [*c]const u8) Music;
pub extern fn LoadMusicStreamFromMemory(fileType: [*c]const u8, data: [*c]const u8, dataSize: c_int) Music;
pub extern fn IsMusicReady(music: Music) bool;
pub extern fn UnloadMusicStream(music: Music) void;
pub extern fn PlayMusicStream(music: Music) void;
pub extern fn IsMusicStreamPlaying(music: Music) bool;
pub extern fn UpdateMusicStream(music: Music) void;
pub extern fn StopMusicStream(music: Music) void;
pub extern fn PauseMusicStream(music: Music) void;
pub extern fn ResumeMusicStream(music: Music) void;
pub extern fn SeekMusicStream(music: Music, position: f32) void;
pub extern fn SetMusicVolume(music: Music, volume: f32) void;
pub extern fn SetMusicPitch(music: Music, pitch: f32) void;
pub extern fn SetMusicPan(music: Music, pan: f32) void;
pub extern fn GetMusicTimeLength(music: Music) f32;
pub extern fn GetMusicTimePlayed(music: Music) f32;
pub extern fn LoadAudioStream(sampleRate: c_uint, sampleSize: c_uint, channels: c_uint) AudioStream;
pub extern fn IsAudioStreamReady(stream: AudioStream) bool;
pub extern fn UnloadAudioStream(stream: AudioStream) void;
pub extern fn UpdateAudioStream(stream: AudioStream, data: ?*const anyopaque, frameCount: c_int) void;
pub extern fn IsAudioStreamProcessed(stream: AudioStream) bool;
pub extern fn PlayAudioStream(stream: AudioStream) void;
pub extern fn PauseAudioStream(stream: AudioStream) void;
pub extern fn ResumeAudioStream(stream: AudioStream) void;
pub extern fn IsAudioStreamPlaying(stream: AudioStream) bool;
pub extern fn StopAudioStream(stream: AudioStream) void;
pub extern fn SetAudioStreamVolume(stream: AudioStream, volume: f32) void;
pub extern fn SetAudioStreamPitch(stream: AudioStream, pitch: f32) void;
pub extern fn SetAudioStreamPan(stream: AudioStream, pan: f32) void;
pub extern fn SetAudioStreamBufferSizeDefault(size: c_int) void;
pub extern fn SetAudioStreamCallback(stream: AudioStream, callback: AudioCallback) void;
pub extern fn AttachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void;
pub extern fn DetachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void;
pub extern fn AttachAudioMixedProcessor(processor: AudioCallback) void;
pub extern fn DetachAudioMixedProcessor(processor: AudioCallback) void;
pub const struct_rlVertexBuffer = extern struct {
elementCount: c_int = @import("std").mem.zeroes(c_int),
vertices: [*c]f32 = @import("std").mem.zeroes([*c]f32),
texcoords: [*c]f32 = @import("std").mem.zeroes([*c]f32),
normals: [*c]f32 = @import("std").mem.zeroes([*c]f32),
colors: [*c]u8 = @import("std").mem.zeroes([*c]u8),
indices: [*c]c_uint = @import("std").mem.zeroes([*c]c_uint),
vaoId: c_uint = @import("std").mem.zeroes(c_uint),
vboId: [5]c_uint = @import("std").mem.zeroes([5]c_uint),
};
pub const rlVertexBuffer = struct_rlVertexBuffer;
pub const struct_rlDrawCall = extern struct {
mode: c_int = @import("std").mem.zeroes(c_int),
vertexCount: c_int = @import("std").mem.zeroes(c_int),
vertexAlignment: c_int = @import("std").mem.zeroes(c_int),
textureId: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const rlDrawCall = struct_rlDrawCall;
pub const struct_rlRenderBatch = extern struct {
bufferCount: c_int = @import("std").mem.zeroes(c_int),
currentBuffer: c_int = @import("std").mem.zeroes(c_int),
vertexBuffer: [*c]rlVertexBuffer = @import("std").mem.zeroes([*c]rlVertexBuffer),
draws: [*c]rlDrawCall = @import("std").mem.zeroes([*c]rlDrawCall),
drawCounter: c_int = @import("std").mem.zeroes(c_int),
currentDepth: f32 = @import("std").mem.zeroes(f32),
};
pub const rlRenderBatch = struct_rlRenderBatch;
pub const RL_OPENGL_11: c_int = 1;
pub const RL_OPENGL_21: c_int = 2;
pub const RL_OPENGL_33: c_int = 3;
pub const RL_OPENGL_43: c_int = 4;
pub const RL_OPENGL_ES_20: c_int = 5;
pub const RL_OPENGL_ES_30: c_int = 6;
pub const rlGlVersion = c_uint;
pub const RL_LOG_ALL: c_int = 0;
pub const RL_LOG_TRACE: c_int = 1;
pub const RL_LOG_DEBUG: c_int = 2;
pub const RL_LOG_INFO: c_int = 3;
pub const RL_LOG_WARNING: c_int = 4;
pub const RL_LOG_ERROR: c_int = 5;
pub const RL_LOG_FATAL: c_int = 6;
pub const RL_LOG_NONE: c_int = 7;
pub const rlTraceLogLevel = c_uint;
pub const RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: c_int = 1;
pub const RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: c_int = 2;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5: c_int = 3;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8: c_int = 4;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: c_int = 5;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: c_int = 6;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: c_int = 7;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R32: c_int = 8;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: c_int = 9;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: c_int = 10;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R16: c_int = 11;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: c_int = 12;
pub const RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: c_int = 13;
pub const RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: c_int = 14;
pub const RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: c_int = 15;
pub const RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: c_int = 16;
pub const RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA: c_int = 17;
pub const RL_PIXELFORMAT_COMPRESSED_ETC1_RGB: c_int = 18;
pub const RL_PIXELFORMAT_COMPRESSED_ETC2_RGB: c_int = 19;
pub const RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: c_int = 20;
pub const RL_PIXELFORMAT_COMPRESSED_PVRT_RGB: c_int = 21;
pub const RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA: c_int = 22;
pub const RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: c_int = 23;
pub const RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: c_int = 24;
pub const rlPixelFormat = c_uint;
pub const RL_TEXTURE_FILTER_POINT: c_int = 0;
pub const RL_TEXTURE_FILTER_BILINEAR: c_int = 1;
pub const RL_TEXTURE_FILTER_TRILINEAR: c_int = 2;
pub const RL_TEXTURE_FILTER_ANISOTROPIC_4X: c_int = 3;
pub const RL_TEXTURE_FILTER_ANISOTROPIC_8X: c_int = 4;
pub const RL_TEXTURE_FILTER_ANISOTROPIC_16X: c_int = 5;
pub const rlTextureFilter = c_uint;
pub const RL_BLEND_ALPHA: c_int = 0;
pub const RL_BLEND_ADDITIVE: c_int = 1;
pub const RL_BLEND_MULTIPLIED: c_int = 2;
pub const RL_BLEND_ADD_COLORS: c_int = 3;
pub const RL_BLEND_SUBTRACT_COLORS: c_int = 4;
pub const RL_BLEND_ALPHA_PREMULTIPLY: c_int = 5;
pub const RL_BLEND_CUSTOM: c_int = 6;
pub const RL_BLEND_CUSTOM_SEPARATE: c_int = 7;
pub const rlBlendMode = c_uint;
pub const RL_SHADER_LOC_VERTEX_POSITION: c_int = 0;
pub const RL_SHADER_LOC_VERTEX_TEXCOORD01: c_int = 1;
pub const RL_SHADER_LOC_VERTEX_TEXCOORD02: c_int = 2;
pub const RL_SHADER_LOC_VERTEX_NORMAL: c_int = 3;
pub const RL_SHADER_LOC_VERTEX_TANGENT: c_int = 4;
pub const RL_SHADER_LOC_VERTEX_COLOR: c_int = 5;
pub const RL_SHADER_LOC_MATRIX_MVP: c_int = 6;
pub const RL_SHADER_LOC_MATRIX_VIEW: c_int = 7;
pub const RL_SHADER_LOC_MATRIX_PROJECTION: c_int = 8;
pub const RL_SHADER_LOC_MATRIX_MODEL: c_int = 9;
pub const RL_SHADER_LOC_MATRIX_NORMAL: c_int = 10;
pub const RL_SHADER_LOC_VECTOR_VIEW: c_int = 11;
pub const RL_SHADER_LOC_COLOR_DIFFUSE: c_int = 12;
pub const RL_SHADER_LOC_COLOR_SPECULAR: c_int = 13;
pub const RL_SHADER_LOC_COLOR_AMBIENT: c_int = 14;
pub const RL_SHADER_LOC_MAP_ALBEDO: c_int = 15;
pub const RL_SHADER_LOC_MAP_METALNESS: c_int = 16;
pub const RL_SHADER_LOC_MAP_NORMAL: c_int = 17;
pub const RL_SHADER_LOC_MAP_ROUGHNESS: c_int = 18;
pub const RL_SHADER_LOC_MAP_OCCLUSION: c_int = 19;
pub const RL_SHADER_LOC_MAP_EMISSION: c_int = 20;
pub const RL_SHADER_LOC_MAP_HEIGHT: c_int = 21;
pub const RL_SHADER_LOC_MAP_CUBEMAP: c_int = 22;
pub const RL_SHADER_LOC_MAP_IRRADIANCE: c_int = 23;
pub const RL_SHADER_LOC_MAP_PREFILTER: c_int = 24;
pub const RL_SHADER_LOC_MAP_BRDF: c_int = 25;
pub const rlShaderLocationIndex = c_uint;
pub const RL_SHADER_UNIFORM_FLOAT: c_int = 0;
pub const RL_SHADER_UNIFORM_VEC2: c_int = 1;
pub const RL_SHADER_UNIFORM_VEC3: c_int = 2;
pub const RL_SHADER_UNIFORM_VEC4: c_int = 3;
pub const RL_SHADER_UNIFORM_INT: c_int = 4;
pub const RL_SHADER_UNIFORM_IVEC2: c_int = 5;
pub const RL_SHADER_UNIFORM_IVEC3: c_int = 6;
pub const RL_SHADER_UNIFORM_IVEC4: c_int = 7;
pub const RL_SHADER_UNIFORM_UINT: c_int = 8;
pub const RL_SHADER_UNIFORM_UIVEC2: c_int = 9;
pub const RL_SHADER_UNIFORM_UIVEC3: c_int = 10;
pub const RL_SHADER_UNIFORM_UIVEC4: c_int = 11;
pub const RL_SHADER_UNIFORM_SAMPLER2D: c_int = 12;
pub const rlShaderUniformDataType = c_uint;
pub const RL_SHADER_ATTRIB_FLOAT: c_int = 0;
pub const RL_SHADER_ATTRIB_VEC2: c_int = 1;
pub const RL_SHADER_ATTRIB_VEC3: c_int = 2;
pub const RL_SHADER_ATTRIB_VEC4: c_int = 3;
pub const rlShaderAttributeDataType = c_uint;
pub const RL_ATTACHMENT_COLOR_CHANNEL0: c_int = 0;
pub const RL_ATTACHMENT_COLOR_CHANNEL1: c_int = 1;
pub const RL_ATTACHMENT_COLOR_CHANNEL2: c_int = 2;
pub const RL_ATTACHMENT_COLOR_CHANNEL3: c_int = 3;
pub const RL_ATTACHMENT_COLOR_CHANNEL4: c_int = 4;
pub const RL_ATTACHMENT_COLOR_CHANNEL5: c_int = 5;
pub const RL_ATTACHMENT_COLOR_CHANNEL6: c_int = 6;
pub const RL_ATTACHMENT_COLOR_CHANNEL7: c_int = 7;
pub const RL_ATTACHMENT_DEPTH: c_int = 100;
pub const RL_ATTACHMENT_STENCIL: c_int = 200;
pub const rlFramebufferAttachType = c_uint;
pub const RL_ATTACHMENT_CUBEMAP_POSITIVE_X: c_int = 0;
pub const RL_ATTACHMENT_CUBEMAP_NEGATIVE_X: c_int = 1;
pub const RL_ATTACHMENT_CUBEMAP_POSITIVE_Y: c_int = 2;
pub const RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y: c_int = 3;
pub const RL_ATTACHMENT_CUBEMAP_POSITIVE_Z: c_int = 4;
pub const RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z: c_int = 5;
pub const RL_ATTACHMENT_TEXTURE2D: c_int = 100;
pub const RL_ATTACHMENT_RENDERBUFFER: c_int = 200;
pub const rlFramebufferAttachTextureType = c_uint;
pub const RL_CULL_FACE_FRONT: c_int = 0;
pub const RL_CULL_FACE_BACK: c_int = 1;
pub const rlCullMode = c_uint;
pub extern fn rlMatrixMode(mode: c_int) void;
pub extern fn rlPushMatrix() void;
pub extern fn rlPopMatrix() void;
pub extern fn rlLoadIdentity() void;
pub extern fn rlTranslatef(x: f32, y: f32, z: f32) void;
pub extern fn rlRotatef(angle: f32, x: f32, y: f32, z: f32) void;
pub extern fn rlScalef(x: f32, y: f32, z: f32) void;
pub extern fn rlMultMatrixf(matf: [*c]const f32) void;
pub extern fn rlFrustum(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64) void;
pub extern fn rlOrtho(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64) void;
pub extern fn rlViewport(x: c_int, y: c_int, width: c_int, height: c_int) void;
pub extern fn rlSetClipPlanes(nearPlane: f64, farPlane: f64) void;
pub extern fn rlGetCullDistanceNear() f64;
pub extern fn rlGetCullDistanceFar() f64;
pub extern fn rlBegin(mode: c_int) void;
pub extern fn rlEnd() void;
pub extern fn rlVertex2i(x: c_int, y: c_int) void;
pub extern fn rlVertex2f(x: f32, y: f32) void;
pub extern fn rlVertex3f(x: f32, y: f32, z: f32) void;
pub extern fn rlTexCoord2f(x: f32, y: f32) void;
pub extern fn rlNormal3f(x: f32, y: f32, z: f32) void;
pub extern fn rlColor4ub(r: u8, g: u8, b: u8, a: u8) void;
pub extern fn rlColor3f(x: f32, y: f32, z: f32) void;
pub extern fn rlColor4f(x: f32, y: f32, z: f32, w: f32) void;
pub extern fn rlEnableVertexArray(vaoId: c_uint) bool;
pub extern fn rlDisableVertexArray() void;
pub extern fn rlEnableVertexBuffer(id: c_uint) void;
pub extern fn rlDisableVertexBuffer() void;
pub extern fn rlEnableVertexBufferElement(id: c_uint) void;
pub extern fn rlDisableVertexBufferElement() void;
pub extern fn rlEnableVertexAttribute(index: c_uint) void;
pub extern fn rlDisableVertexAttribute(index: c_uint) void;
pub extern fn rlActiveTextureSlot(slot: c_int) void;
pub extern fn rlEnableTexture(id: c_uint) void;
pub extern fn rlDisableTexture() void;
pub extern fn rlEnableTextureCubemap(id: c_uint) void;
pub extern fn rlDisableTextureCubemap() void;
pub extern fn rlTextureParameters(id: c_uint, param: c_int, value: c_int) void;
pub extern fn rlCubemapParameters(id: c_uint, param: c_int, value: c_int) void;
pub extern fn rlEnableShader(id: c_uint) void;
pub extern fn rlDisableShader() void;
pub extern fn rlEnableFramebuffer(id: c_uint) void;
pub extern fn rlDisableFramebuffer() void;
pub extern fn rlGetActiveFramebuffer() c_uint;
pub extern fn rlActiveDrawBuffers(count: c_int) void;
pub extern fn rlBlitFramebuffer(srcX: c_int, srcY: c_int, srcWidth: c_int, srcHeight: c_int, dstX: c_int, dstY: c_int, dstWidth: c_int, dstHeight: c_int, bufferMask: c_int) void;
pub extern fn rlBindFramebuffer(target: c_uint, framebuffer: c_uint) void;
pub extern fn rlEnableColorBlend() void;
pub extern fn rlDisableColorBlend() void;
pub extern fn rlEnableDepthTest() void;
pub extern fn rlDisableDepthTest() void;
pub extern fn rlEnableDepthMask() void;
pub extern fn rlDisableDepthMask() void;
pub extern fn rlEnableBackfaceCulling() void;
pub extern fn rlDisableBackfaceCulling() void;
pub extern fn rlColorMask(r: bool, g: bool, b: bool, a: bool) void;
pub extern fn rlSetCullFace(mode: c_int) void;
pub extern fn rlEnableScissorTest() void;
pub extern fn rlDisableScissorTest() void;
pub extern fn rlScissor(x: c_int, y: c_int, width: c_int, height: c_int) void;
pub extern fn rlEnableWireMode() void;
pub extern fn rlEnablePointMode() void;
pub extern fn rlDisableWireMode() void;
pub extern fn rlSetLineWidth(width: f32) void;
pub extern fn rlGetLineWidth() f32;
pub extern fn rlEnableSmoothLines() void;
pub extern fn rlDisableSmoothLines() void;
pub extern fn rlEnableStereoRender() void;
pub extern fn rlDisableStereoRender() void;
pub extern fn rlIsStereoRenderEnabled() bool;
pub extern fn rlClearColor(r: u8, g: u8, b: u8, a: u8) void;
pub extern fn rlClearScreenBuffers() void;
pub extern fn rlCheckErrors() void;
pub extern fn rlSetBlendMode(mode: c_int) void;
pub extern fn rlSetBlendFactors(glSrcFactor: c_int, glDstFactor: c_int, glEquation: c_int) void;
pub extern fn rlSetBlendFactorsSeparate(glSrcRGB: c_int, glDstRGB: c_int, glSrcAlpha: c_int, glDstAlpha: c_int, glEqRGB: c_int, glEqAlpha: c_int) void;
pub extern fn rlglInit(width: c_int, height: c_int) void;
pub extern fn rlglClose() void;
pub extern fn rlLoadExtensions(loader: ?*anyopaque) void;
pub extern fn rlGetVersion() c_int;
pub extern fn rlSetFramebufferWidth(width: c_int) void;
pub extern fn rlGetFramebufferWidth() c_int;
pub extern fn rlSetFramebufferHeight(height: c_int) void;
pub extern fn rlGetFramebufferHeight() c_int;
pub extern fn rlGetTextureIdDefault() c_uint;
pub extern fn rlGetShaderIdDefault() c_uint;
pub extern fn rlGetShaderLocsDefault() [*c]c_int;
pub extern fn rlLoadRenderBatch(numBuffers: c_int, bufferElements: c_int) rlRenderBatch;
pub extern fn rlUnloadRenderBatch(batch: rlRenderBatch) void;
pub extern fn rlDrawRenderBatch(batch: [*c]rlRenderBatch) void;
pub extern fn rlSetRenderBatchActive(batch: [*c]rlRenderBatch) void;
pub extern fn rlDrawRenderBatchActive() void;
pub extern fn rlCheckRenderBatchLimit(vCount: c_int) bool;
pub extern fn rlSetTexture(id: c_uint) void;
pub extern fn rlLoadVertexArray() c_uint;
pub extern fn rlLoadVertexBuffer(buffer: ?*const anyopaque, size: c_int, dynamic: bool) c_uint;
pub extern fn rlLoadVertexBufferElement(buffer: ?*const anyopaque, size: c_int, dynamic: bool) c_uint;
pub extern fn rlUpdateVertexBuffer(bufferId: c_uint, data: ?*const anyopaque, dataSize: c_int, offset: c_int) void;
pub extern fn rlUpdateVertexBufferElements(id: c_uint, data: ?*const anyopaque, dataSize: c_int, offset: c_int) void;
pub extern fn rlUnloadVertexArray(vaoId: c_uint) void;
pub extern fn rlUnloadVertexBuffer(vboId: c_uint) void;
pub extern fn rlSetVertexAttribute(index: c_uint, compSize: c_int, @"type": c_int, normalized: bool, stride: c_int, offset: c_int) void;
pub extern fn rlSetVertexAttributeDivisor(index: c_uint, divisor: c_int) void;
pub extern fn rlSetVertexAttributeDefault(locIndex: c_int, value: ?*const anyopaque, attribType: c_int, count: c_int) void;
pub extern fn rlDrawVertexArray(offset: c_int, count: c_int) void;
pub extern fn rlDrawVertexArrayElements(offset: c_int, count: c_int, buffer: ?*const anyopaque) void;
pub extern fn rlDrawVertexArrayInstanced(offset: c_int, count: c_int, instances: c_int) void;
pub extern fn rlDrawVertexArrayElementsInstanced(offset: c_int, count: c_int, buffer: ?*const anyopaque, instances: c_int) void;
pub extern fn rlLoadTexture(data: ?*const anyopaque, width: c_int, height: c_int, format: c_int, mipmapCount: c_int) c_uint;
pub extern fn rlLoadTextureDepth(width: c_int, height: c_int, useRenderBuffer: bool) c_uint;
pub extern fn rlLoadTextureCubemap(data: ?*const anyopaque, size: c_int, format: c_int) c_uint;
pub extern fn rlUpdateTexture(id: c_uint, offsetX: c_int, offsetY: c_int, width: c_int, height: c_int, format: c_int, data: ?*const anyopaque) void;
pub extern fn rlGetGlTextureFormats(format: c_int, glInternalFormat: [*c]c_uint, glFormat: [*c]c_uint, glType: [*c]c_uint) void;
pub extern fn rlGetPixelFormatName(format: c_uint) [*c]const u8;
pub extern fn rlUnloadTexture(id: c_uint) void;
pub extern fn rlGenTextureMipmaps(id: c_uint, width: c_int, height: c_int, format: c_int, mipmaps: [*c]c_int) void;
pub extern fn rlReadTexturePixels(id: c_uint, width: c_int, height: c_int, format: c_int) ?*anyopaque;
pub extern fn rlReadScreenPixels(width: c_int, height: c_int) [*c]u8;
pub extern fn rlLoadFramebuffer() c_uint;
pub extern fn rlFramebufferAttach(fboId: c_uint, texId: c_uint, attachType: c_int, texType: c_int, mipLevel: c_int) void;
pub extern fn rlFramebufferComplete(id: c_uint) bool;
pub extern fn rlUnloadFramebuffer(id: c_uint) void;
pub extern fn rlLoadShaderCode(vsCode: [*c]const u8, fsCode: [*c]const u8) c_uint;
pub extern fn rlCompileShader(shaderCode: [*c]const u8, @"type": c_int) c_uint;
pub extern fn rlLoadShaderProgram(vShaderId: c_uint, fShaderId: c_uint) c_uint;
pub extern fn rlUnloadShaderProgram(id: c_uint) void;
pub extern fn rlGetLocationUniform(shaderId: c_uint, uniformName: [*c]const u8) c_int;
pub extern fn rlGetLocationAttrib(shaderId: c_uint, attribName: [*c]const u8) c_int;
pub extern fn rlSetUniform(locIndex: c_int, value: ?*const anyopaque, uniformType: c_int, count: c_int) void;
pub extern fn rlSetUniformMatrix(locIndex: c_int, mat: Matrix) void;
pub extern fn rlSetUniformSampler(locIndex: c_int, textureId: c_uint) void;
pub extern fn rlSetShader(id: c_uint, locs: [*c]c_int) void;
pub extern fn rlLoadComputeShaderProgram(shaderId: c_uint) c_uint;
pub extern fn rlComputeShaderDispatch(groupX: c_uint, groupY: c_uint, groupZ: c_uint) void;
pub extern fn rlLoadShaderBuffer(size: c_uint, data: ?*const anyopaque, usageHint: c_int) c_uint;
pub extern fn rlUnloadShaderBuffer(ssboId: c_uint) void;
pub extern fn rlUpdateShaderBuffer(id: c_uint, data: ?*const anyopaque, dataSize: c_uint, offset: c_uint) void;
pub extern fn rlBindShaderBuffer(id: c_uint, index: c_uint) void;
pub extern fn rlReadShaderBuffer(id: c_uint, dest: ?*anyopaque, count: c_uint, offset: c_uint) void;
pub extern fn rlCopyShaderBuffer(destId: c_uint, srcId: c_uint, destOffset: c_uint, srcOffset: c_uint, count: c_uint) void;
pub extern fn rlGetShaderBufferSize(id: c_uint) c_uint;
pub extern fn rlBindImageTexture(id: c_uint, index: c_uint, format: c_int, readonly: bool) void;
pub extern fn rlGetMatrixModelview() Matrix;
pub extern fn rlGetMatrixProjection() Matrix;
pub extern fn rlGetMatrixTransform() Matrix;
pub extern fn rlGetMatrixProjectionStereo(eye: c_int) Matrix;
pub extern fn rlGetMatrixViewOffsetStereo(eye: c_int) Matrix;
pub extern fn rlSetMatrixProjection(proj: Matrix) void;
pub extern fn rlSetMatrixModelview(view: Matrix) void;
pub extern fn rlSetMatrixProjectionStereo(right: Matrix, left: Matrix) void;
pub extern fn rlSetMatrixViewOffsetStereo(right: Matrix, left: Matrix) void;
pub extern fn rlLoadDrawCube() void;
pub extern fn rlLoadDrawQuad() void;
pub const struct_float3 = extern struct {
v: [3]f32 = @import("std").mem.zeroes([3]f32),
};
pub const float3 = struct_float3;
pub const __u_char = u8;
pub const __u_short = c_ushort;
pub const __u_int = c_uint;
pub const __u_long = c_ulong;
pub const __int8_t = i8;
pub const __uint8_t = u8;
pub const __int16_t = c_short;
pub const __uint16_t = c_ushort;
pub const __int32_t = c_int;
pub const __uint32_t = c_uint;
pub const __int64_t = c_long;
pub const __uint64_t = c_ulong;
pub const __int_least8_t = __int8_t;
pub const __uint_least8_t = __uint8_t;
pub const __int_least16_t = __int16_t;
pub const __uint_least16_t = __uint16_t;
pub const __int_least32_t = __int32_t;
pub const __uint_least32_t = __uint32_t;
pub const __int_least64_t = __int64_t;
pub const __uint_least64_t = __uint64_t;
pub const __quad_t = c_long;
pub const __u_quad_t = c_ulong;
pub const __intmax_t = c_long;
pub const __uintmax_t = c_ulong;
pub const __dev_t = c_ulong;
pub const __uid_t = c_uint;
pub const __gid_t = c_uint;
pub const __ino_t = c_ulong;
pub const __ino64_t = c_ulong;
pub const __mode_t = c_uint;
pub const __nlink_t = c_ulong;
pub const __off_t = c_long;
pub const __off64_t = c_long;
pub const __pid_t = c_int;
pub const __fsid_t = extern struct {
__val: [2]c_int = @import("std").mem.zeroes([2]c_int),
};
pub const __clock_t = c_long;
pub const __rlim_t = c_ulong;
pub const __rlim64_t = c_ulong;
pub const __id_t = c_uint;
pub const __time_t = c_long;
pub const __useconds_t = c_uint;
pub const __suseconds_t = c_long;
pub const __suseconds64_t = c_long;
pub const __daddr_t = c_int;
pub const __key_t = c_int;
pub const __clockid_t = c_int;
pub const __timer_t = ?*anyopaque;
pub const __blksize_t = c_long;
pub const __blkcnt_t = c_long;
pub const __blkcnt64_t = c_long;
pub const __fsblkcnt_t = c_ulong;
pub const __fsblkcnt64_t = c_ulong;
pub const __fsfilcnt_t = c_ulong;
pub const __fsfilcnt64_t = c_ulong;
pub const __fsword_t = c_long;
pub const __ssize_t = c_long;
pub const __syscall_slong_t = c_long;
pub const __syscall_ulong_t = c_ulong;
pub const __loff_t = __off64_t;
pub const __caddr_t = [*c]u8;
pub const __intptr_t = c_long;
pub const __socklen_t = c_uint;
pub const __sig_atomic_t = c_int;
pub const _Float32 = f32;
pub const _Float64 = f64;
pub const _Float32x = f64;
pub const _Float64x = c_longdouble;
pub const float_t = f32;
pub const double_t = f64;
pub extern fn __fpclassify(__value: f64) c_int;
pub extern fn __signbit(__value: f64) c_int;
pub extern fn __isinf(__value: f64) c_int;
pub extern fn __finite(__value: f64) c_int;
pub extern fn __isnan(__value: f64) c_int;
pub extern fn __iseqsig(__x: f64, __y: f64) c_int;
pub extern fn __issignaling(__value: f64) c_int;
pub extern fn acos(__x: f64) f64;
pub extern fn __acos(__x: f64) f64;
pub extern fn asin(__x: f64) f64;
pub extern fn __asin(__x: f64) f64;
pub extern fn atan(__x: f64) f64;
pub extern fn __atan(__x: f64) f64;
pub extern fn atan2(__y: f64, __x: f64) f64;
pub extern fn __atan2(__y: f64, __x: f64) f64;
pub extern fn cos(__x: f64) f64;
pub extern fn __cos(__x: f64) f64;
pub extern fn sin(__x: f64) f64;
pub extern fn __sin(__x: f64) f64;
pub extern fn tan(__x: f64) f64;
pub extern fn __tan(__x: f64) f64;
pub extern fn cosh(__x: f64) f64;
pub extern fn __cosh(__x: f64) f64;
pub extern fn sinh(__x: f64) f64;
pub extern fn __sinh(__x: f64) f64;
pub extern fn tanh(__x: f64) f64;
pub extern fn __tanh(__x: f64) f64;
pub extern fn acosh(__x: f64) f64;
pub extern fn __acosh(__x: f64) f64;
pub extern fn asinh(__x: f64) f64;
pub extern fn __asinh(__x: f64) f64;
pub extern fn atanh(__x: f64) f64;
pub extern fn __atanh(__x: f64) f64;
pub extern fn exp(__x: f64) f64;
pub extern fn __exp(__x: f64) f64;
pub extern fn frexp(__x: f64, __exponent: [*c]c_int) f64;
pub extern fn __frexp(__x: f64, __exponent: [*c]c_int) f64;
pub extern fn ldexp(__x: f64, __exponent: c_int) f64;
pub extern fn __ldexp(__x: f64, __exponent: c_int) f64;
pub extern fn log(__x: f64) f64;
pub extern fn __log(__x: f64) f64;
pub extern fn log10(__x: f64) f64;
pub extern fn __log10(__x: f64) f64;
pub extern fn modf(__x: f64, __iptr: [*c]f64) f64;
pub extern fn __modf(__x: f64, __iptr: [*c]f64) f64;
pub extern fn expm1(__x: f64) f64;
pub extern fn __expm1(__x: f64) f64;
pub extern fn log1p(__x: f64) f64;
pub extern fn __log1p(__x: f64) f64;
pub extern fn logb(__x: f64) f64;
pub extern fn __logb(__x: f64) f64;
pub extern fn exp2(__x: f64) f64;
pub extern fn __exp2(__x: f64) f64;
pub extern fn log2(__x: f64) f64;
pub extern fn __log2(__x: f64) f64;
pub extern fn pow(__x: f64, __y: f64) f64;
pub extern fn __pow(__x: f64, __y: f64) f64;
pub extern fn sqrt(__x: f64) f64;
pub extern fn __sqrt(__x: f64) f64;
pub extern fn hypot(__x: f64, __y: f64) f64;
pub extern fn __hypot(__x: f64, __y: f64) f64;
pub extern fn cbrt(__x: f64) f64;
pub extern fn __cbrt(__x: f64) f64;
pub extern fn ceil(__x: f64) f64;
pub extern fn __ceil(__x: f64) f64;
pub extern fn fabs(__x: f64) f64;
pub extern fn __fabs(__x: f64) f64;
pub extern fn floor(__x: f64) f64;
pub extern fn __floor(__x: f64) f64;
pub extern fn fmod(__x: f64, __y: f64) f64;
pub extern fn __fmod(__x: f64, __y: f64) f64;
pub extern fn isinf(__value: f64) c_int;
pub extern fn finite(__value: f64) c_int;
pub extern fn drem(__x: f64, __y: f64) f64;
pub extern fn __drem(__x: f64, __y: f64) f64;
pub extern fn significand(__x: f64) f64;
pub extern fn __significand(__x: f64) f64;
pub extern fn copysign(__x: f64, __y: f64) f64;
pub extern fn __copysign(__x: f64, __y: f64) f64;
pub extern fn nan(__tagb: [*c]const u8) f64;
pub extern fn __nan(__tagb: [*c]const u8) f64;
pub extern fn isnan(__value: f64) c_int;
pub extern fn j0(f64) f64;
pub extern fn __j0(f64) f64;
pub extern fn j1(f64) f64;
pub extern fn __j1(f64) f64;
pub extern fn jn(c_int, f64) f64;
pub extern fn __jn(c_int, f64) f64;
pub extern fn y0(f64) f64;
pub extern fn __y0(f64) f64;
pub extern fn y1(f64) f64;
pub extern fn __y1(f64) f64;
pub extern fn yn(c_int, f64) f64;
pub extern fn __yn(c_int, f64) f64;
pub extern fn erf(f64) f64;
pub extern fn __erf(f64) f64;
pub extern fn erfc(f64) f64;
pub extern fn __erfc(f64) f64;
pub extern fn lgamma(f64) f64;
pub extern fn __lgamma(f64) f64;
pub extern fn tgamma(f64) f64;
pub extern fn __tgamma(f64) f64;
pub extern fn gamma(f64) f64;
pub extern fn __gamma(f64) f64;
pub extern fn lgamma_r(f64, __signgamp: [*c]c_int) f64;
pub extern fn __lgamma_r(f64, __signgamp: [*c]c_int) f64;
pub extern fn rint(__x: f64) f64;
pub extern fn __rint(__x: f64) f64;
pub extern fn nextafter(__x: f64, __y: f64) f64;
pub extern fn __nextafter(__x: f64, __y: f64) f64;
pub extern fn nexttoward(__x: f64, __y: c_longdouble) f64;
pub extern fn __nexttoward(__x: f64, __y: c_longdouble) f64;
pub extern fn remainder(__x: f64, __y: f64) f64;
pub extern fn __remainder(__x: f64, __y: f64) f64;
pub extern fn scalbn(__x: f64, __n: c_int) f64;
pub extern fn __scalbn(__x: f64, __n: c_int) f64;
pub extern fn ilogb(__x: f64) c_int;
pub extern fn __ilogb(__x: f64) c_int;
pub extern fn scalbln(__x: f64, __n: c_long) f64;
pub extern fn __scalbln(__x: f64, __n: c_long) f64;
pub extern fn nearbyint(__x: f64) f64;
pub extern fn __nearbyint(__x: f64) f64;
pub extern fn round(__x: f64) f64;
pub extern fn __round(__x: f64) f64;
pub extern fn trunc(__x: f64) f64;
pub extern fn __trunc(__x: f64) f64;
pub extern fn remquo(__x: f64, __y: f64, __quo: [*c]c_int) f64;
pub extern fn __remquo(__x: f64, __y: f64, __quo: [*c]c_int) f64;
pub extern fn lrint(__x: f64) c_long;
pub extern fn __lrint(__x: f64) c_long;
pub extern fn llrint(__x: f64) c_longlong;
pub extern fn __llrint(__x: f64) c_longlong;
pub extern fn lround(__x: f64) c_long;
pub extern fn __lround(__x: f64) c_long;
pub extern fn llround(__x: f64) c_longlong;
pub extern fn __llround(__x: f64) c_longlong;
pub extern fn fdim(__x: f64, __y: f64) f64;
pub extern fn __fdim(__x: f64, __y: f64) f64;
pub extern fn fmax(__x: f64, __y: f64) f64;
pub extern fn __fmax(__x: f64, __y: f64) f64;
pub extern fn fmin(__x: f64, __y: f64) f64;
pub extern fn __fmin(__x: f64, __y: f64) f64;
pub extern fn fma(__x: f64, __y: f64, __z: f64) f64;
pub extern fn __fma(__x: f64, __y: f64, __z: f64) f64;
pub extern fn scalb(__x: f64, __n: f64) f64;
pub extern fn __scalb(__x: f64, __n: f64) f64;
pub extern fn __fpclassifyf(__value: f32) c_int;
pub extern fn __signbitf(__value: f32) c_int;
pub extern fn __isinff(__value: f32) c_int;
pub extern fn __finitef(__value: f32) c_int;
pub extern fn __isnanf(__value: f32) c_int;
pub extern fn __iseqsigf(__x: f32, __y: f32) c_int;
pub extern fn __issignalingf(__value: f32) c_int;
pub extern fn acosf(__x: f32) f32;
pub extern fn __acosf(__x: f32) f32;
pub extern fn asinf(__x: f32) f32;
pub extern fn __asinf(__x: f32) f32;
pub extern fn atanf(__x: f32) f32;
pub extern fn __atanf(__x: f32) f32;
pub extern fn atan2f(__y: f32, __x: f32) f32;
pub extern fn __atan2f(__y: f32, __x: f32) f32;
pub extern fn cosf(__x: f32) f32;
pub extern fn __cosf(__x: f32) f32;
pub extern fn sinf(__x: f32) f32;
pub extern fn __sinf(__x: f32) f32;
pub extern fn tanf(__x: f32) f32;
pub extern fn __tanf(__x: f32) f32;
pub extern fn coshf(__x: f32) f32;
pub extern fn __coshf(__x: f32) f32;
pub extern fn sinhf(__x: f32) f32;
pub extern fn __sinhf(__x: f32) f32;
pub extern fn tanhf(__x: f32) f32;
pub extern fn __tanhf(__x: f32) f32;
pub extern fn acoshf(__x: f32) f32;
pub extern fn __acoshf(__x: f32) f32;
pub extern fn asinhf(__x: f32) f32;
pub extern fn __asinhf(__x: f32) f32;
pub extern fn atanhf(__x: f32) f32;
pub extern fn __atanhf(__x: f32) f32;
pub extern fn expf(__x: f32) f32;
pub extern fn __expf(__x: f32) f32;
pub extern fn frexpf(__x: f32, __exponent: [*c]c_int) f32;
pub extern fn __frexpf(__x: f32, __exponent: [*c]c_int) f32;
pub extern fn ldexpf(__x: f32, __exponent: c_int) f32;
pub extern fn __ldexpf(__x: f32, __exponent: c_int) f32;
pub extern fn logf(__x: f32) f32;
pub extern fn __logf(__x: f32) f32;
pub extern fn log10f(__x: f32) f32;
pub extern fn __log10f(__x: f32) f32;
pub extern fn modff(__x: f32, __iptr: [*c]f32) f32;
pub extern fn __modff(__x: f32, __iptr: [*c]f32) f32;
pub extern fn expm1f(__x: f32) f32;
pub extern fn __expm1f(__x: f32) f32;
pub extern fn log1pf(__x: f32) f32;
pub extern fn __log1pf(__x: f32) f32;
pub extern fn logbf(__x: f32) f32;
pub extern fn __logbf(__x: f32) f32;
pub extern fn exp2f(__x: f32) f32;
pub extern fn __exp2f(__x: f32) f32;
pub extern fn log2f(__x: f32) f32;
pub extern fn __log2f(__x: f32) f32;
pub extern fn powf(__x: f32, __y: f32) f32;
pub extern fn __powf(__x: f32, __y: f32) f32;
pub extern fn sqrtf(__x: f32) f32;
pub extern fn __sqrtf(__x: f32) f32;
pub extern fn hypotf(__x: f32, __y: f32) f32;
pub extern fn __hypotf(__x: f32, __y: f32) f32;
pub extern fn cbrtf(__x: f32) f32;
pub extern fn __cbrtf(__x: f32) f32;
pub extern fn ceilf(__x: f32) f32;
pub extern fn __ceilf(__x: f32) f32;
pub extern fn fabsf(__x: f32) f32;
pub extern fn __fabsf(__x: f32) f32;
pub extern fn floorf(__x: f32) f32;
pub extern fn __floorf(__x: f32) f32;
pub extern fn fmodf(__x: f32, __y: f32) f32;
pub extern fn __fmodf(__x: f32, __y: f32) f32;
pub extern fn isinff(__value: f32) c_int;
pub extern fn finitef(__value: f32) c_int;
pub extern fn dremf(__x: f32, __y: f32) f32;
pub extern fn __dremf(__x: f32, __y: f32) f32;
pub extern fn significandf(__x: f32) f32;
pub extern fn __significandf(__x: f32) f32;
pub extern fn copysignf(__x: f32, __y: f32) f32;
pub extern fn __copysignf(__x: f32, __y: f32) f32;
pub extern fn nanf(__tagb: [*c]const u8) f32;
pub extern fn __nanf(__tagb: [*c]const u8) f32;
pub extern fn isnanf(__value: f32) c_int;
pub extern fn j0f(f32) f32;
pub extern fn __j0f(f32) f32;
pub extern fn j1f(f32) f32;
pub extern fn __j1f(f32) f32;
pub extern fn jnf(c_int, f32) f32;
pub extern fn __jnf(c_int, f32) f32;
pub extern fn y0f(f32) f32;
pub extern fn __y0f(f32) f32;
pub extern fn y1f(f32) f32;
pub extern fn __y1f(f32) f32;
pub extern fn ynf(c_int, f32) f32;
pub extern fn __ynf(c_int, f32) f32;
pub extern fn erff(f32) f32;
pub extern fn __erff(f32) f32;
pub extern fn erfcf(f32) f32;
pub extern fn __erfcf(f32) f32;
pub extern fn lgammaf(f32) f32;
pub extern fn __lgammaf(f32) f32;
pub extern fn tgammaf(f32) f32;
pub extern fn __tgammaf(f32) f32;
pub extern fn gammaf(f32) f32;
pub extern fn __gammaf(f32) f32;
pub extern fn lgammaf_r(f32, __signgamp: [*c]c_int) f32;
pub extern fn __lgammaf_r(f32, __signgamp: [*c]c_int) f32;
pub extern fn rintf(__x: f32) f32;
pub extern fn __rintf(__x: f32) f32;
pub extern fn nextafterf(__x: f32, __y: f32) f32;
pub extern fn __nextafterf(__x: f32, __y: f32) f32;
pub extern fn nexttowardf(__x: f32, __y: c_longdouble) f32;
pub extern fn __nexttowardf(__x: f32, __y: c_longdouble) f32;
pub extern fn remainderf(__x: f32, __y: f32) f32;
pub extern fn __remainderf(__x: f32, __y: f32) f32;
pub extern fn scalbnf(__x: f32, __n: c_int) f32;
pub extern fn __scalbnf(__x: f32, __n: c_int) f32;
pub extern fn ilogbf(__x: f32) c_int;
pub extern fn __ilogbf(__x: f32) c_int;
pub extern fn scalblnf(__x: f32, __n: c_long) f32;
pub extern fn __scalblnf(__x: f32, __n: c_long) f32;
pub extern fn nearbyintf(__x: f32) f32;
pub extern fn __nearbyintf(__x: f32) f32;
pub extern fn roundf(__x: f32) f32;
pub extern fn __roundf(__x: f32) f32;
pub extern fn truncf(__x: f32) f32;
pub extern fn __truncf(__x: f32) f32;
pub extern fn remquof(__x: f32, __y: f32, __quo: [*c]c_int) f32;
pub extern fn __remquof(__x: f32, __y: f32, __quo: [*c]c_int) f32;
pub extern fn lrintf(__x: f32) c_long;
pub extern fn __lrintf(__x: f32) c_long;
pub extern fn llrintf(__x: f32) c_longlong;
pub extern fn __llrintf(__x: f32) c_longlong;
pub extern fn lroundf(__x: f32) c_long;
pub extern fn __lroundf(__x: f32) c_long;
pub extern fn llroundf(__x: f32) c_longlong;
pub extern fn __llroundf(__x: f32) c_longlong;
pub extern fn fdimf(__x: f32, __y: f32) f32;
pub extern fn __fdimf(__x: f32, __y: f32) f32;
pub extern fn fmaxf(__x: f32, __y: f32) f32;
pub extern fn __fmaxf(__x: f32, __y: f32) f32;
pub extern fn fminf(__x: f32, __y: f32) f32;
pub extern fn __fminf(__x: f32, __y: f32) f32;
pub extern fn fmaf(__x: f32, __y: f32, __z: f32) f32;
pub extern fn __fmaf(__x: f32, __y: f32, __z: f32) f32;
pub extern fn scalbf(__x: f32, __n: f32) f32;
pub extern fn __scalbf(__x: f32, __n: f32) f32;
pub extern fn __fpclassifyl(__value: c_longdouble) c_int;
pub extern fn __signbitl(__value: c_longdouble) c_int;
pub extern fn __isinfl(__value: c_longdouble) c_int;
pub extern fn __finitel(__value: c_longdouble) c_int;
pub extern fn __isnanl(__value: c_longdouble) c_int;
pub extern fn __iseqsigl(__x: c_longdouble, __y: c_longdouble) c_int;
pub extern fn __issignalingl(__value: c_longdouble) c_int;
pub extern fn acosl(__x: c_longdouble) c_longdouble;
pub extern fn __acosl(__x: c_longdouble) c_longdouble;
pub extern fn asinl(__x: c_longdouble) c_longdouble;
pub extern fn __asinl(__x: c_longdouble) c_longdouble;
pub extern fn atanl(__x: c_longdouble) c_longdouble;
pub extern fn __atanl(__x: c_longdouble) c_longdouble;
pub extern fn atan2l(__y: c_longdouble, __x: c_longdouble) c_longdouble;
pub extern fn __atan2l(__y: c_longdouble, __x: c_longdouble) c_longdouble;
pub extern fn cosl(__x: c_longdouble) c_longdouble;
pub extern fn __cosl(__x: c_longdouble) c_longdouble;
pub extern fn sinl(__x: c_longdouble) c_longdouble;
pub extern fn __sinl(__x: c_longdouble) c_longdouble;
pub extern fn tanl(__x: c_longdouble) c_longdouble;
pub extern fn __tanl(__x: c_longdouble) c_longdouble;
pub extern fn coshl(__x: c_longdouble) c_longdouble;
pub extern fn __coshl(__x: c_longdouble) c_longdouble;
pub extern fn sinhl(__x: c_longdouble) c_longdouble;
pub extern fn __sinhl(__x: c_longdouble) c_longdouble;
pub extern fn tanhl(__x: c_longdouble) c_longdouble;
pub extern fn __tanhl(__x: c_longdouble) c_longdouble;
pub extern fn acoshl(__x: c_longdouble) c_longdouble;
pub extern fn __acoshl(__x: c_longdouble) c_longdouble;
pub extern fn asinhl(__x: c_longdouble) c_longdouble;
pub extern fn __asinhl(__x: c_longdouble) c_longdouble;
pub extern fn atanhl(__x: c_longdouble) c_longdouble;
pub extern fn __atanhl(__x: c_longdouble) c_longdouble;
pub extern fn expl(__x: c_longdouble) c_longdouble;
pub extern fn __expl(__x: c_longdouble) c_longdouble;
pub extern fn frexpl(__x: c_longdouble, __exponent: [*c]c_int) c_longdouble;
pub extern fn __frexpl(__x: c_longdouble, __exponent: [*c]c_int) c_longdouble;
pub extern fn ldexpl(__x: c_longdouble, __exponent: c_int) c_longdouble;
pub extern fn __ldexpl(__x: c_longdouble, __exponent: c_int) c_longdouble;
pub extern fn logl(__x: c_longdouble) c_longdouble;
pub extern fn __logl(__x: c_longdouble) c_longdouble;
pub extern fn log10l(__x: c_longdouble) c_longdouble;
pub extern fn __log10l(__x: c_longdouble) c_longdouble;
pub extern fn modfl(__x: c_longdouble, __iptr: [*c]c_longdouble) c_longdouble;
pub extern fn __modfl(__x: c_longdouble, __iptr: [*c]c_longdouble) c_longdouble;
pub extern fn expm1l(__x: c_longdouble) c_longdouble;
pub extern fn __expm1l(__x: c_longdouble) c_longdouble;
pub extern fn log1pl(__x: c_longdouble) c_longdouble;
pub extern fn __log1pl(__x: c_longdouble) c_longdouble;
pub extern fn logbl(__x: c_longdouble) c_longdouble;
pub extern fn __logbl(__x: c_longdouble) c_longdouble;
pub extern fn exp2l(__x: c_longdouble) c_longdouble;
pub extern fn __exp2l(__x: c_longdouble) c_longdouble;
pub extern fn log2l(__x: c_longdouble) c_longdouble;
pub extern fn __log2l(__x: c_longdouble) c_longdouble;
pub extern fn powl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __powl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn sqrtl(__x: c_longdouble) c_longdouble;
pub extern fn __sqrtl(__x: c_longdouble) c_longdouble;
pub extern fn hypotl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __hypotl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn cbrtl(__x: c_longdouble) c_longdouble;
pub extern fn __cbrtl(__x: c_longdouble) c_longdouble;
pub extern fn ceill(__x: c_longdouble) c_longdouble;
pub extern fn __ceill(__x: c_longdouble) c_longdouble;
pub extern fn fabsl(__x: c_longdouble) c_longdouble;
pub extern fn __fabsl(__x: c_longdouble) c_longdouble;
pub extern fn floorl(__x: c_longdouble) c_longdouble;
pub extern fn __floorl(__x: c_longdouble) c_longdouble;
pub extern fn fmodl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __fmodl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn isinfl(__value: c_longdouble) c_int;
pub extern fn finitel(__value: c_longdouble) c_int;
pub extern fn dreml(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __dreml(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn significandl(__x: c_longdouble) c_longdouble;
pub extern fn __significandl(__x: c_longdouble) c_longdouble;
pub extern fn copysignl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __copysignl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn nanl(__tagb: [*c]const u8) c_longdouble;
pub extern fn __nanl(__tagb: [*c]const u8) c_longdouble;
pub extern fn isnanl(__value: c_longdouble) c_int;
pub extern fn j0l(c_longdouble) c_longdouble;
pub extern fn __j0l(c_longdouble) c_longdouble;
pub extern fn j1l(c_longdouble) c_longdouble;
pub extern fn __j1l(c_longdouble) c_longdouble;
pub extern fn jnl(c_int, c_longdouble) c_longdouble;
pub extern fn __jnl(c_int, c_longdouble) c_longdouble;
pub extern fn y0l(c_longdouble) c_longdouble;
pub extern fn __y0l(c_longdouble) c_longdouble;
pub extern fn y1l(c_longdouble) c_longdouble;
pub extern fn __y1l(c_longdouble) c_longdouble;
pub extern fn ynl(c_int, c_longdouble) c_longdouble;
pub extern fn __ynl(c_int, c_longdouble) c_longdouble;
pub extern fn erfl(c_longdouble) c_longdouble;
pub extern fn __erfl(c_longdouble) c_longdouble;
pub extern fn erfcl(c_longdouble) c_longdouble;
pub extern fn __erfcl(c_longdouble) c_longdouble;
pub extern fn lgammal(c_longdouble) c_longdouble;
pub extern fn __lgammal(c_longdouble) c_longdouble;
pub extern fn tgammal(c_longdouble) c_longdouble;
pub extern fn __tgammal(c_longdouble) c_longdouble;
pub extern fn gammal(c_longdouble) c_longdouble;
pub extern fn __gammal(c_longdouble) c_longdouble;
pub extern fn lgammal_r(c_longdouble, __signgamp: [*c]c_int) c_longdouble;
pub extern fn __lgammal_r(c_longdouble, __signgamp: [*c]c_int) c_longdouble;
pub extern fn rintl(__x: c_longdouble) c_longdouble;
pub extern fn __rintl(__x: c_longdouble) c_longdouble;
pub extern fn nextafterl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __nextafterl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn nexttowardl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __nexttowardl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn remainderl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __remainderl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn scalbnl(__x: c_longdouble, __n: c_int) c_longdouble;
pub extern fn __scalbnl(__x: c_longdouble, __n: c_int) c_longdouble;
pub extern fn ilogbl(__x: c_longdouble) c_int;
pub extern fn __ilogbl(__x: c_longdouble) c_int;
pub extern fn scalblnl(__x: c_longdouble, __n: c_long) c_longdouble;
pub extern fn __scalblnl(__x: c_longdouble, __n: c_long) c_longdouble;
pub extern fn nearbyintl(__x: c_longdouble) c_longdouble;
pub extern fn __nearbyintl(__x: c_longdouble) c_longdouble;
pub extern fn roundl(__x: c_longdouble) c_longdouble;
pub extern fn __roundl(__x: c_longdouble) c_longdouble;
pub extern fn truncl(__x: c_longdouble) c_longdouble;
pub extern fn __truncl(__x: c_longdouble) c_longdouble;
pub extern fn remquol(__x: c_longdouble, __y: c_longdouble, __quo: [*c]c_int) c_longdouble;
pub extern fn __remquol(__x: c_longdouble, __y: c_longdouble, __quo: [*c]c_int) c_longdouble;
pub extern fn lrintl(__x: c_longdouble) c_long;
pub extern fn __lrintl(__x: c_longdouble) c_long;
pub extern fn llrintl(__x: c_longdouble) c_longlong;
pub extern fn __llrintl(__x: c_longdouble) c_longlong;
pub extern fn lroundl(__x: c_longdouble) c_long;
pub extern fn __lroundl(__x: c_longdouble) c_long;
pub extern fn llroundl(__x: c_longdouble) c_longlong;
pub extern fn __llroundl(__x: c_longdouble) c_longlong;
pub extern fn fdiml(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __fdiml(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn fmaxl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __fmaxl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn fminl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn __fminl(__x: c_longdouble, __y: c_longdouble) c_longdouble;
pub extern fn fmal(__x: c_longdouble, __y: c_longdouble, __z: c_longdouble) c_longdouble;
pub extern fn __fmal(__x: c_longdouble, __y: c_longdouble, __z: c_longdouble) c_longdouble;
pub extern fn scalbl(__x: c_longdouble, __n: c_longdouble) c_longdouble;
pub extern fn __scalbl(__x: c_longdouble, __n: c_longdouble) c_longdouble;
pub extern var signgam: c_int;
pub const FP_NAN: c_int = 0;
pub const FP_INFINITE: c_int = 1;
pub const FP_ZERO: c_int = 2;
pub const FP_SUBNORMAL: c_int = 3;
pub const FP_NORMAL: c_int = 4;
const enum_unnamed_2 = c_uint;
pub fn Clamp(arg_value: f32, arg_min: f32, arg_max: f32) callconv(.C) f32 {
var value = arg_value;
_ = &value;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: f32 = if (value < min) min else value;
_ = &result;
if (result > max) {
result = max;
}
return result;
}
pub fn Lerp(arg_start: f32, arg_end: f32, arg_amount: f32) callconv(.C) f32 {
var start = arg_start;
_ = &start;
var end = arg_end;
_ = &end;
var amount = arg_amount;
_ = &amount;
var result: f32 = start + (amount * (end - start));
_ = &result;
return result;
}
pub fn Normalize(arg_value: f32, arg_start: f32, arg_end: f32) callconv(.C) f32 {
var value = arg_value;
_ = &value;
var start = arg_start;
_ = &start;
var end = arg_end;
_ = &end;
var result: f32 = (value - start) / (end - start);
_ = &result;
return result;
}
pub fn Remap(arg_value: f32, arg_inputStart: f32, arg_inputEnd: f32, arg_outputStart: f32, arg_outputEnd: f32) callconv(.C) f32 {
var value = arg_value;
_ = &value;
var inputStart = arg_inputStart;
_ = &inputStart;
var inputEnd = arg_inputEnd;
_ = &inputEnd;
var outputStart = arg_outputStart;
_ = &outputStart;
var outputEnd = arg_outputEnd;
_ = &outputEnd;
var result: f32 = (((value - inputStart) / (inputEnd - inputStart)) * (outputEnd - outputStart)) + outputStart;
_ = &result;
return result;
}
pub fn Wrap(arg_value: f32, arg_min: f32, arg_max: f32) callconv(.C) f32 {
var value = arg_value;
_ = &value;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: f32 = value - ((max - min) * floorf((value - min) / (max - min)));
_ = &result;
return result;
}
pub fn FloatEquals(arg_x: f32, arg_y: f32) callconv(.C) c_int {
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var result: c_int = @intFromBool(fabsf(x - y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(x), fabsf(y)))));
_ = &result;
return result;
}
pub fn Vector2Zero() callconv(.C) Vector2 {
var result: Vector2 = Vector2{
.x = 0.0,
.y = 0.0,
};
_ = &result;
return result;
}
pub fn Vector2One() callconv(.C) Vector2 {
var result: Vector2 = Vector2{
.x = 1.0,
.y = 1.0,
};
_ = &result;
return result;
}
pub fn Vector2Add(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = v1.x + v2.x,
.y = v1.y + v2.y,
};
_ = &result;
return result;
}
pub fn Vector2AddValue(arg_v: Vector2, arg_add: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var add = arg_add;
_ = &add;
var result: Vector2 = Vector2{
.x = v.x + add,
.y = v.y + add,
};
_ = &result;
return result;
}
pub fn Vector2Subtract(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = v1.x - v2.x,
.y = v1.y - v2.y,
};
_ = &result;
return result;
}
pub fn Vector2SubtractValue(arg_v: Vector2, arg_sub: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var sub = arg_sub;
_ = &sub;
var result: Vector2 = Vector2{
.x = v.x - sub,
.y = v.y - sub,
};
_ = &result;
return result;
}
pub fn Vector2Length(arg_v: Vector2) callconv(.C) f32 {
var v = arg_v;
_ = &v;
var result: f32 = sqrtf((v.x * v.x) + (v.y * v.y));
_ = &result;
return result;
}
pub fn Vector2LengthSqr(arg_v: Vector2) callconv(.C) f32 {
var v = arg_v;
_ = &v;
var result: f32 = (v.x * v.x) + (v.y * v.y);
_ = &result;
return result;
}
pub fn Vector2DotProduct(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = (v1.x * v2.x) + (v1.y * v2.y);
_ = &result;
return result;
}
pub fn Vector2Distance(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = sqrtf(((v1.x - v2.x) * (v1.x - v2.x)) + ((v1.y - v2.y) * (v1.y - v2.y)));
_ = &result;
return result;
}
pub fn Vector2DistanceSqr(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = ((v1.x - v2.x) * (v1.x - v2.x)) + ((v1.y - v2.y) * (v1.y - v2.y));
_ = &result;
return result;
}
pub fn Vector2Angle(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = 0.0;
_ = &result;
var dot: f32 = (v1.x * v2.x) + (v1.y * v2.y);
_ = &dot;
var det: f32 = (v1.x * v2.y) - (v1.y * v2.x);
_ = &det;
result = atan2f(det, dot);
return result;
}
pub fn Vector2LineAngle(arg_start: Vector2, arg_end: Vector2) callconv(.C) f32 {
var start = arg_start;
_ = &start;
var end = arg_end;
_ = &end;
var result: f32 = 0.0;
_ = &result;
result = -atan2f(end.y - start.y, end.x - start.x);
return result;
}
pub fn Vector2Scale(arg_v: Vector2, arg_scale: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var scale = arg_scale;
_ = &scale;
var result: Vector2 = Vector2{
.x = v.x * scale,
.y = v.y * scale,
};
_ = &result;
return result;
}
pub fn Vector2Multiply(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = v1.x * v2.x,
.y = v1.y * v2.y,
};
_ = &result;
return result;
}
pub fn Vector2Negate(arg_v: Vector2) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var result: Vector2 = Vector2{
.x = -v.x,
.y = -v.y,
};
_ = &result;
return result;
}
pub fn Vector2Divide(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = v1.x / v2.x,
.y = v1.y / v2.y,
};
_ = &result;
return result;
}
pub fn Vector2Normalize(arg_v: Vector2) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var length: f32 = sqrtf((v.x * v.x) + (v.y * v.y));
_ = &length;
if (length > @as(f32, @floatFromInt(@as(c_int, 0)))) {
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x = v.x * ilength;
result.y = v.y * ilength;
}
return result;
}
pub fn Vector2Transform(arg_v: Vector2, arg_mat: Matrix) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var mat = arg_mat;
_ = &mat;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var x: f32 = v.x;
_ = &x;
var y: f32 = v.y;
_ = &y;
var z: f32 = 0;
_ = &z;
result.x = (((mat.m0 * x) + (mat.m4 * y)) + (mat.m8 * z)) + mat.m12;
result.y = (((mat.m1 * x) + (mat.m5 * y)) + (mat.m9 * z)) + mat.m13;
return result;
}
pub fn Vector2Lerp(arg_v1: Vector2, arg_v2: Vector2, arg_amount: f32) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var amount = arg_amount;
_ = &amount;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
result.x = v1.x + (amount * (v2.x - v1.x));
result.y = v1.y + (amount * (v2.y - v1.y));
return result;
}
pub fn Vector2Reflect(arg_v: Vector2, arg_normal: Vector2) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var normal = arg_normal;
_ = &normal;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var dotProduct: f32 = (v.x * normal.x) + (v.y * normal.y);
_ = &dotProduct;
result.x = v.x - ((2.0 * normal.x) * dotProduct);
result.y = v.y - ((2.0 * normal.y) * dotProduct);
return result;
}
pub fn Vector2Min(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
result.x = fminf(v1.x, v2.x);
result.y = fminf(v1.y, v2.y);
return result;
}
pub fn Vector2Max(arg_v1: Vector2, arg_v2: Vector2) callconv(.C) Vector2 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
result.x = fmaxf(v1.x, v2.x);
result.y = fmaxf(v1.y, v2.y);
return result;
}
pub fn Vector2Rotate(arg_v: Vector2, arg_angle: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var angle = arg_angle;
_ = &angle;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var cosres: f32 = cosf(angle);
_ = &cosres;
var sinres: f32 = sinf(angle);
_ = &sinres;
result.x = (v.x * cosres) - (v.y * sinres);
result.y = (v.x * sinres) + (v.y * cosres);
return result;
}
pub fn Vector2MoveTowards(arg_v: Vector2, arg_target: Vector2, arg_maxDistance: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var target = arg_target;
_ = &target;
var maxDistance = arg_maxDistance;
_ = &maxDistance;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var dx: f32 = target.x - v.x;
_ = &dx;
var dy: f32 = target.y - v.y;
_ = &dy;
var value: f32 = (dx * dx) + (dy * dy);
_ = &value;
if ((value == @as(f32, @floatFromInt(@as(c_int, 0)))) or ((maxDistance >= @as(f32, @floatFromInt(@as(c_int, 0)))) and (value <= (maxDistance * maxDistance)))) return target;
var dist: f32 = sqrtf(value);
_ = &dist;
result.x = v.x + ((dx / dist) * maxDistance);
result.y = v.y + ((dy / dist) * maxDistance);
return result;
}
pub fn Vector2Invert(arg_v: Vector2) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var result: Vector2 = Vector2{
.x = 1.0 / v.x,
.y = 1.0 / v.y,
};
_ = &result;
return result;
}
pub fn Vector2Clamp(arg_v: Vector2, arg_min: Vector2, arg_max: Vector2) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
result.x = fminf(max.x, fmaxf(min.x, v.x));
result.y = fminf(max.y, fmaxf(min.y, v.y));
return result;
}
pub fn Vector2ClampValue(arg_v: Vector2, arg_min: f32, arg_max: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: Vector2 = v;
_ = &result;
var length: f32 = (v.x * v.x) + (v.y * v.y);
_ = &length;
if (length > 0.0) {
length = sqrtf(length);
var scale: f32 = 1;
_ = &scale;
if (length < min) {
scale = min / length;
} else if (length > max) {
scale = max / length;
}
result.x = v.x * scale;
result.y = v.y * scale;
}
return result;
}
pub fn Vector2Equals(arg_p: Vector2, arg_q: Vector2) callconv(.C) c_int {
var p = arg_p;
_ = &p;
var q = arg_q;
_ = &q;
var result: c_int = @intFromBool((fabsf(p.x - q.x) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.x), fabsf(q.x))))) and (fabsf(p.y - q.y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.y), fabsf(q.y))))));
_ = &result;
return result;
}
pub fn Vector2Refract(arg_v: Vector2, arg_n: Vector2, arg_r: f32) callconv(.C) Vector2 {
var v = arg_v;
_ = &v;
var n = arg_n;
_ = &n;
var r = arg_r;
_ = &r;
var result: Vector2 = Vector2{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
};
_ = &result;
var dot: f32 = (v.x * n.x) + (v.y * n.y);
_ = &dot;
var d: f32 = 1.0 - ((r * r) * (1.0 - (dot * dot)));
_ = &d;
if (d >= 0.0) {
d = sqrtf(d);
v.x = (r * v.x) - (((r * dot) + d) * n.x);
v.y = (r * v.y) - (((r * dot) + d) * n.y);
result = v;
}
return result;
}
pub fn Vector3Zero() callconv(.C) Vector3 {
var result: Vector3 = Vector3{
.x = 0.0,
.y = 0.0,
.z = 0.0,
};
_ = &result;
return result;
}
pub fn Vector3One() callconv(.C) Vector3 {
var result: Vector3 = Vector3{
.x = 1.0,
.y = 1.0,
.z = 1.0,
};
_ = &result;
return result;
}
pub fn Vector3Add(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = v1.x + v2.x,
.y = v1.y + v2.y,
.z = v1.z + v2.z,
};
_ = &result;
return result;
}
pub fn Vector3AddValue(arg_v: Vector3, arg_add: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var add = arg_add;
_ = &add;
var result: Vector3 = Vector3{
.x = v.x + add,
.y = v.y + add,
.z = v.z + add,
};
_ = &result;
return result;
}
pub fn Vector3Subtract(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = v1.x - v2.x,
.y = v1.y - v2.y,
.z = v1.z - v2.z,
};
_ = &result;
return result;
}
pub fn Vector3SubtractValue(arg_v: Vector3, arg_sub: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var sub = arg_sub;
_ = &sub;
var result: Vector3 = Vector3{
.x = v.x - sub,
.y = v.y - sub,
.z = v.z - sub,
};
_ = &result;
return result;
}
pub fn Vector3Scale(arg_v: Vector3, arg_scalar: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var scalar = arg_scalar;
_ = &scalar;
var result: Vector3 = Vector3{
.x = v.x * scalar,
.y = v.y * scalar,
.z = v.z * scalar,
};
_ = &result;
return result;
}
pub fn Vector3Multiply(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = v1.x * v2.x,
.y = v1.y * v2.y,
.z = v1.z * v2.z,
};
_ = &result;
return result;
}
pub fn Vector3CrossProduct(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = (v1.y * v2.z) - (v1.z * v2.y),
.y = (v1.z * v2.x) - (v1.x * v2.z),
.z = (v1.x * v2.y) - (v1.y * v2.x),
};
_ = &result;
return result;
}
pub fn Vector3Perpendicular(arg_v: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var min: f32 = fabsf(v.x);
_ = &min;
var cardinalAxis: Vector3 = Vector3{
.x = 1.0,
.y = 0.0,
.z = 0.0,
};
_ = &cardinalAxis;
if (fabsf(v.y) < min) {
min = fabsf(v.y);
var tmp: Vector3 = Vector3{
.x = 0.0,
.y = 1.0,
.z = 0.0,
};
_ = &tmp;
cardinalAxis = tmp;
}
if (fabsf(v.z) < min) {
var tmp: Vector3 = Vector3{
.x = 0.0,
.y = 0.0,
.z = 1.0,
};
_ = &tmp;
cardinalAxis = tmp;
}
result.x = (v.y * cardinalAxis.z) - (v.z * cardinalAxis.y);
result.y = (v.z * cardinalAxis.x) - (v.x * cardinalAxis.z);
result.z = (v.x * cardinalAxis.y) - (v.y * cardinalAxis.x);
return result;
}
pub fn Vector3Length(v: Vector3) callconv(.C) f32 {
_ = &v;
var result: f32 = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
_ = &result;
return result;
}
pub fn Vector3LengthSqr(v: Vector3) callconv(.C) f32 {
_ = &v;
var result: f32 = ((v.x * v.x) + (v.y * v.y)) + (v.z * v.z);
_ = &result;
return result;
}
pub fn Vector3DotProduct(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = ((v1.x * v2.x) + (v1.y * v2.y)) + (v1.z * v2.z);
_ = &result;
return result;
}
pub fn Vector3Distance(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = 0.0;
_ = &result;
var dx: f32 = v2.x - v1.x;
_ = &dx;
var dy: f32 = v2.y - v1.y;
_ = &dy;
var dz: f32 = v2.z - v1.z;
_ = &dz;
result = sqrtf(((dx * dx) + (dy * dy)) + (dz * dz));
return result;
}
pub fn Vector3DistanceSqr(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = 0.0;
_ = &result;
var dx: f32 = v2.x - v1.x;
_ = &dx;
var dy: f32 = v2.y - v1.y;
_ = &dy;
var dz: f32 = v2.z - v1.z;
_ = &dz;
result = ((dx * dx) + (dy * dy)) + (dz * dz);
return result;
}
pub fn Vector3Angle(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = 0.0;
_ = &result;
var cross: Vector3 = Vector3{
.x = (v1.y * v2.z) - (v1.z * v2.y),
.y = (v1.z * v2.x) - (v1.x * v2.z),
.z = (v1.x * v2.y) - (v1.y * v2.x),
};
_ = &cross;
var len: f32 = sqrtf(((cross.x * cross.x) + (cross.y * cross.y)) + (cross.z * cross.z));
_ = &len;
var dot: f32 = ((v1.x * v2.x) + (v1.y * v2.y)) + (v1.z * v2.z);
_ = &dot;
result = atan2f(len, dot);
return result;
}
pub fn Vector3Negate(arg_v: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var result: Vector3 = Vector3{
.x = -v.x,
.y = -v.y,
.z = -v.z,
};
_ = &result;
return result;
}
pub fn Vector3Divide(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = v1.x / v2.x,
.y = v1.y / v2.y,
.z = v1.z / v2.z,
};
_ = &result;
return result;
}
pub fn Vector3Normalize(arg_v: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var result: Vector3 = v;
_ = &result;
var length: f32 = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
_ = &length;
if (length != 0.0) {
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x *= ilength;
result.y *= ilength;
result.z *= ilength;
}
return result;
}
pub fn Vector3Project(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var v1dv2: f32 = ((v1.x * v2.x) + (v1.y * v2.y)) + (v1.z * v2.z);
_ = &v1dv2;
var v2dv2: f32 = ((v2.x * v2.x) + (v2.y * v2.y)) + (v2.z * v2.z);
_ = &v2dv2;
var mag: f32 = v1dv2 / v2dv2;
_ = &mag;
result.x = v2.x * mag;
result.y = v2.y * mag;
result.z = v2.z * mag;
return result;
}
pub fn Vector3Reject(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var v1dv2: f32 = ((v1.x * v2.x) + (v1.y * v2.y)) + (v1.z * v2.z);
_ = &v1dv2;
var v2dv2: f32 = ((v2.x * v2.x) + (v2.y * v2.y)) + (v2.z * v2.z);
_ = &v2dv2;
var mag: f32 = v1dv2 / v2dv2;
_ = &mag;
result.x = v1.x - (v2.x * mag);
result.y = v1.y - (v2.y * mag);
result.z = v1.z - (v2.z * mag);
return result;
}
pub fn Vector3OrthoNormalize(arg_v1: [*c]Vector3, arg_v2: [*c]Vector3) callconv(.C) void {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var length: f32 = 0.0;
_ = &length;
var ilength: f32 = 0.0;
_ = &ilength;
var v: Vector3 = v1.*;
_ = &v;
length = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
v1.*.x *= ilength;
v1.*.y *= ilength;
v1.*.z *= ilength;
var vn1: Vector3 = Vector3{
.x = (v1.*.y * v2.*.z) - (v1.*.z * v2.*.y),
.y = (v1.*.z * v2.*.x) - (v1.*.x * v2.*.z),
.z = (v1.*.x * v2.*.y) - (v1.*.y * v2.*.x),
};
_ = &vn1;
v = vn1;
length = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
vn1.x *= ilength;
vn1.y *= ilength;
vn1.z *= ilength;
var vn2: Vector3 = Vector3{
.x = (vn1.y * v1.*.z) - (vn1.z * v1.*.y),
.y = (vn1.z * v1.*.x) - (vn1.x * v1.*.z),
.z = (vn1.x * v1.*.y) - (vn1.y * v1.*.x),
};
_ = &vn2;
v2.* = vn2;
}
pub fn Vector3Transform(arg_v: Vector3, arg_mat: Matrix) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var mat = arg_mat;
_ = &mat;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var x: f32 = v.x;
_ = &x;
var y: f32 = v.y;
_ = &y;
var z: f32 = v.z;
_ = &z;
result.x = (((mat.m0 * x) + (mat.m4 * y)) + (mat.m8 * z)) + mat.m12;
result.y = (((mat.m1 * x) + (mat.m5 * y)) + (mat.m9 * z)) + mat.m13;
result.z = (((mat.m2 * x) + (mat.m6 * y)) + (mat.m10 * z)) + mat.m14;
return result;
}
pub fn Vector3RotateByQuaternion(arg_v: Vector3, arg_q: Quaternion) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var q = arg_q;
_ = &q;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
result.x = ((v.x * ((((q.x * q.x) + (q.w * q.w)) - (q.y * q.y)) - (q.z * q.z))) + (v.y * (((@as(f32, @floatFromInt(@as(c_int, 2))) * q.x) * q.y) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.w) * q.z)))) + (v.z * (((@as(f32, @floatFromInt(@as(c_int, 2))) * q.x) * q.z) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.w) * q.y)));
result.y = ((v.x * (((@as(f32, @floatFromInt(@as(c_int, 2))) * q.w) * q.z) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.x) * q.y))) + (v.y * ((((q.w * q.w) - (q.x * q.x)) + (q.y * q.y)) - (q.z * q.z)))) + (v.z * (((@as(f32, @floatFromInt(-@as(c_int, 2))) * q.w) * q.x) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.y) * q.z)));
result.z = ((v.x * (((@as(f32, @floatFromInt(-@as(c_int, 2))) * q.w) * q.y) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.x) * q.z))) + (v.y * (((@as(f32, @floatFromInt(@as(c_int, 2))) * q.w) * q.x) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * q.y) * q.z)))) + (v.z * ((((q.w * q.w) - (q.x * q.x)) - (q.y * q.y)) + (q.z * q.z)));
return result;
}
pub fn Vector3RotateByAxisAngle(arg_v: Vector3, arg_axis: Vector3, arg_angle: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var axis = arg_axis;
_ = &axis;
var angle = arg_angle;
_ = &angle;
var result: Vector3 = v;
_ = &result;
var length: f32 = sqrtf(((axis.x * axis.x) + (axis.y * axis.y)) + (axis.z * axis.z));
_ = &length;
if (length == 0.0) {
length = 1.0;
}
var ilength: f32 = 1.0 / length;
_ = &ilength;
axis.x *= ilength;
axis.y *= ilength;
axis.z *= ilength;
angle /= 2.0;
var a: f32 = sinf(angle);
_ = &a;
var b: f32 = axis.x * a;
_ = &b;
var c: f32 = axis.y * a;
_ = &c;
var d: f32 = axis.z * a;
_ = &d;
a = cosf(angle);
var w: Vector3 = Vector3{
.x = b,
.y = c,
.z = d,
};
_ = &w;
var wv: Vector3 = Vector3{
.x = (w.y * v.z) - (w.z * v.y),
.y = (w.z * v.x) - (w.x * v.z),
.z = (w.x * v.y) - (w.y * v.x),
};
_ = &wv;
var wwv: Vector3 = Vector3{
.x = (w.y * wv.z) - (w.z * wv.y),
.y = (w.z * wv.x) - (w.x * wv.z),
.z = (w.x * wv.y) - (w.y * wv.x),
};
_ = &wwv;
a *= @as(f32, @floatFromInt(@as(c_int, 2)));
wv.x *= a;
wv.y *= a;
wv.z *= a;
wwv.x *= @as(f32, @floatFromInt(@as(c_int, 2)));
wwv.y *= @as(f32, @floatFromInt(@as(c_int, 2)));
wwv.z *= @as(f32, @floatFromInt(@as(c_int, 2)));
result.x += wv.x;
result.y += wv.y;
result.z += wv.z;
result.x += wwv.x;
result.y += wwv.y;
result.z += wwv.z;
return result;
}
pub fn Vector3MoveTowards(arg_v: Vector3, arg_target: Vector3, arg_maxDistance: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var target = arg_target;
_ = &target;
var maxDistance = arg_maxDistance;
_ = &maxDistance;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var dx: f32 = target.x - v.x;
_ = &dx;
var dy: f32 = target.y - v.y;
_ = &dy;
var dz: f32 = target.z - v.z;
_ = &dz;
var value: f32 = ((dx * dx) + (dy * dy)) + (dz * dz);
_ = &value;
if ((value == @as(f32, @floatFromInt(@as(c_int, 0)))) or ((maxDistance >= @as(f32, @floatFromInt(@as(c_int, 0)))) and (value <= (maxDistance * maxDistance)))) return target;
var dist: f32 = sqrtf(value);
_ = &dist;
result.x = v.x + ((dx / dist) * maxDistance);
result.y = v.y + ((dy / dist) * maxDistance);
result.z = v.z + ((dz / dist) * maxDistance);
return result;
}
pub fn Vector3Lerp(arg_v1: Vector3, arg_v2: Vector3, arg_amount: f32) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var amount = arg_amount;
_ = &amount;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
result.x = v1.x + (amount * (v2.x - v1.x));
result.y = v1.y + (amount * (v2.y - v1.y));
result.z = v1.z + (amount * (v2.z - v1.z));
return result;
}
pub fn Vector3CubicHermite(arg_v1: Vector3, arg_tangent1: Vector3, arg_v2: Vector3, arg_tangent2: Vector3, arg_amount: f32) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var tangent1 = arg_tangent1;
_ = &tangent1;
var v2 = arg_v2;
_ = &v2;
var tangent2 = arg_tangent2;
_ = &tangent2;
var amount = arg_amount;
_ = &amount;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var amountPow2: f32 = amount * amount;
_ = &amountPow2;
var amountPow3: f32 = (amount * amount) * amount;
_ = &amountPow3;
result.x = ((((((@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow3) - (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) + @as(f32, @floatFromInt(@as(c_int, 1)))) * v1.x) + (((amountPow3 - (@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow2)) + amount) * tangent1.x)) + (((@as(f32, @floatFromInt(-@as(c_int, 2))) * amountPow3) + (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) * v2.x)) + ((amountPow3 - amountPow2) * tangent2.x);
result.y = ((((((@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow3) - (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) + @as(f32, @floatFromInt(@as(c_int, 1)))) * v1.y) + (((amountPow3 - (@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow2)) + amount) * tangent1.y)) + (((@as(f32, @floatFromInt(-@as(c_int, 2))) * amountPow3) + (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) * v2.y)) + ((amountPow3 - amountPow2) * tangent2.y);
result.z = ((((((@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow3) - (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) + @as(f32, @floatFromInt(@as(c_int, 1)))) * v1.z) + (((amountPow3 - (@as(f32, @floatFromInt(@as(c_int, 2))) * amountPow2)) + amount) * tangent1.z)) + (((@as(f32, @floatFromInt(-@as(c_int, 2))) * amountPow3) + (@as(f32, @floatFromInt(@as(c_int, 3))) * amountPow2)) * v2.z)) + ((amountPow3 - amountPow2) * tangent2.z);
return result;
}
pub fn Vector3Reflect(arg_v: Vector3, arg_normal: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var normal = arg_normal;
_ = &normal;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var dotProduct: f32 = ((v.x * normal.x) + (v.y * normal.y)) + (v.z * normal.z);
_ = &dotProduct;
result.x = v.x - ((2.0 * normal.x) * dotProduct);
result.y = v.y - ((2.0 * normal.y) * dotProduct);
result.z = v.z - ((2.0 * normal.z) * dotProduct);
return result;
}
pub fn Vector3Min(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
result.x = fminf(v1.x, v2.x);
result.y = fminf(v1.y, v2.y);
result.z = fminf(v1.z, v2.z);
return result;
}
pub fn Vector3Max(arg_v1: Vector3, arg_v2: Vector3) callconv(.C) Vector3 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
result.x = fmaxf(v1.x, v2.x);
result.y = fmaxf(v1.y, v2.y);
result.z = fmaxf(v1.z, v2.z);
return result;
}
pub fn Vector3Barycenter(arg_p: Vector3, arg_a: Vector3, arg_b: Vector3, arg_c: Vector3) callconv(.C) Vector3 {
var p = arg_p;
_ = &p;
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var c = arg_c;
_ = &c;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var v0: Vector3 = Vector3{
.x = b.x - a.x,
.y = b.y - a.y,
.z = b.z - a.z,
};
_ = &v0;
var v1: Vector3 = Vector3{
.x = c.x - a.x,
.y = c.y - a.y,
.z = c.z - a.z,
};
_ = &v1;
var v2: Vector3 = Vector3{
.x = p.x - a.x,
.y = p.y - a.y,
.z = p.z - a.z,
};
_ = &v2;
var d00: f32 = ((v0.x * v0.x) + (v0.y * v0.y)) + (v0.z * v0.z);
_ = &d00;
var d01: f32 = ((v0.x * v1.x) + (v0.y * v1.y)) + (v0.z * v1.z);
_ = &d01;
var d11: f32 = ((v1.x * v1.x) + (v1.y * v1.y)) + (v1.z * v1.z);
_ = &d11;
var d20: f32 = ((v2.x * v0.x) + (v2.y * v0.y)) + (v2.z * v0.z);
_ = &d20;
var d21: f32 = ((v2.x * v1.x) + (v2.y * v1.y)) + (v2.z * v1.z);
_ = &d21;
var denom: f32 = (d00 * d11) - (d01 * d01);
_ = &denom;
result.y = ((d11 * d20) - (d01 * d21)) / denom;
result.z = ((d00 * d21) - (d01 * d20)) / denom;
result.x = 1.0 - (result.z + result.y);
return result;
}
pub fn Vector3Unproject(arg_source: Vector3, arg_projection: Matrix, arg_view: Matrix) callconv(.C) Vector3 {
var source = arg_source;
_ = &source;
var projection = arg_projection;
_ = &projection;
var view = arg_view;
_ = &view;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var matViewProj: Matrix = Matrix{
.m0 = (((view.m0 * projection.m0) + (view.m1 * projection.m4)) + (view.m2 * projection.m8)) + (view.m3 * projection.m12),
.m4 = (((view.m0 * projection.m1) + (view.m1 * projection.m5)) + (view.m2 * projection.m9)) + (view.m3 * projection.m13),
.m8 = (((view.m0 * projection.m2) + (view.m1 * projection.m6)) + (view.m2 * projection.m10)) + (view.m3 * projection.m14),
.m12 = (((view.m0 * projection.m3) + (view.m1 * projection.m7)) + (view.m2 * projection.m11)) + (view.m3 * projection.m15),
.m1 = (((view.m4 * projection.m0) + (view.m5 * projection.m4)) + (view.m6 * projection.m8)) + (view.m7 * projection.m12),
.m5 = (((view.m4 * projection.m1) + (view.m5 * projection.m5)) + (view.m6 * projection.m9)) + (view.m7 * projection.m13),
.m9 = (((view.m4 * projection.m2) + (view.m5 * projection.m6)) + (view.m6 * projection.m10)) + (view.m7 * projection.m14),
.m13 = (((view.m4 * projection.m3) + (view.m5 * projection.m7)) + (view.m6 * projection.m11)) + (view.m7 * projection.m15),
.m2 = (((view.m8 * projection.m0) + (view.m9 * projection.m4)) + (view.m10 * projection.m8)) + (view.m11 * projection.m12),
.m6 = (((view.m8 * projection.m1) + (view.m9 * projection.m5)) + (view.m10 * projection.m9)) + (view.m11 * projection.m13),
.m10 = (((view.m8 * projection.m2) + (view.m9 * projection.m6)) + (view.m10 * projection.m10)) + (view.m11 * projection.m14),
.m14 = (((view.m8 * projection.m3) + (view.m9 * projection.m7)) + (view.m10 * projection.m11)) + (view.m11 * projection.m15),
.m3 = (((view.m12 * projection.m0) + (view.m13 * projection.m4)) + (view.m14 * projection.m8)) + (view.m15 * projection.m12),
.m7 = (((view.m12 * projection.m1) + (view.m13 * projection.m5)) + (view.m14 * projection.m9)) + (view.m15 * projection.m13),
.m11 = (((view.m12 * projection.m2) + (view.m13 * projection.m6)) + (view.m14 * projection.m10)) + (view.m15 * projection.m14),
.m15 = (((view.m12 * projection.m3) + (view.m13 * projection.m7)) + (view.m14 * projection.m11)) + (view.m15 * projection.m15),
};
_ = &matViewProj;
var a00: f32 = matViewProj.m0;
_ = &a00;
var a01: f32 = matViewProj.m1;
_ = &a01;
var a02: f32 = matViewProj.m2;
_ = &a02;
var a03: f32 = matViewProj.m3;
_ = &a03;
var a10: f32 = matViewProj.m4;
_ = &a10;
var a11: f32 = matViewProj.m5;
_ = &a11;
var a12: f32 = matViewProj.m6;
_ = &a12;
var a13: f32 = matViewProj.m7;
_ = &a13;
var a20: f32 = matViewProj.m8;
_ = &a20;
var a21: f32 = matViewProj.m9;
_ = &a21;
var a22: f32 = matViewProj.m10;
_ = &a22;
var a23: f32 = matViewProj.m11;
_ = &a23;
var a30: f32 = matViewProj.m12;
_ = &a30;
var a31: f32 = matViewProj.m13;
_ = &a31;
var a32: f32 = matViewProj.m14;
_ = &a32;
var a33: f32 = matViewProj.m15;
_ = &a33;
var b00: f32 = (a00 * a11) - (a01 * a10);
_ = &b00;
var b01: f32 = (a00 * a12) - (a02 * a10);
_ = &b01;
var b02: f32 = (a00 * a13) - (a03 * a10);
_ = &b02;
var b03: f32 = (a01 * a12) - (a02 * a11);
_ = &b03;
var b04: f32 = (a01 * a13) - (a03 * a11);
_ = &b04;
var b05: f32 = (a02 * a13) - (a03 * a12);
_ = &b05;
var b06: f32 = (a20 * a31) - (a21 * a30);
_ = &b06;
var b07: f32 = (a20 * a32) - (a22 * a30);
_ = &b07;
var b08: f32 = (a20 * a33) - (a23 * a30);
_ = &b08;
var b09: f32 = (a21 * a32) - (a22 * a31);
_ = &b09;
var b10: f32 = (a21 * a33) - (a23 * a31);
_ = &b10;
var b11: f32 = (a22 * a33) - (a23 * a32);
_ = &b11;
var invDet: f32 = 1.0 / ((((((b00 * b11) - (b01 * b10)) + (b02 * b09)) + (b03 * b08)) - (b04 * b07)) + (b05 * b06));
_ = &invDet;
var matViewProjInv: Matrix = Matrix{
.m0 = (((a11 * b11) - (a12 * b10)) + (a13 * b09)) * invDet,
.m4 = (((-a01 * b11) + (a02 * b10)) - (a03 * b09)) * invDet,
.m8 = (((a31 * b05) - (a32 * b04)) + (a33 * b03)) * invDet,
.m12 = (((-a21 * b05) + (a22 * b04)) - (a23 * b03)) * invDet,
.m1 = (((-a10 * b11) + (a12 * b08)) - (a13 * b07)) * invDet,
.m5 = (((a00 * b11) - (a02 * b08)) + (a03 * b07)) * invDet,
.m9 = (((-a30 * b05) + (a32 * b02)) - (a33 * b01)) * invDet,
.m13 = (((a20 * b05) - (a22 * b02)) + (a23 * b01)) * invDet,
.m2 = (((a10 * b10) - (a11 * b08)) + (a13 * b06)) * invDet,
.m6 = (((-a00 * b10) + (a01 * b08)) - (a03 * b06)) * invDet,
.m10 = (((a30 * b04) - (a31 * b02)) + (a33 * b00)) * invDet,
.m14 = (((-a20 * b04) + (a21 * b02)) - (a23 * b00)) * invDet,
.m3 = (((-a10 * b09) + (a11 * b07)) - (a12 * b06)) * invDet,
.m7 = (((a00 * b09) - (a01 * b07)) + (a02 * b06)) * invDet,
.m11 = (((-a30 * b03) + (a31 * b01)) - (a32 * b00)) * invDet,
.m15 = (((a20 * b03) - (a21 * b01)) + (a22 * b00)) * invDet,
};
_ = &matViewProjInv;
var quat: Quaternion = Quaternion{
.x = source.x,
.y = source.y,
.z = source.z,
.w = 1.0,
};
_ = &quat;
var qtransformed: Quaternion = Quaternion{
.x = (((matViewProjInv.m0 * quat.x) + (matViewProjInv.m4 * quat.y)) + (matViewProjInv.m8 * quat.z)) + (matViewProjInv.m12 * quat.w),
.y = (((matViewProjInv.m1 * quat.x) + (matViewProjInv.m5 * quat.y)) + (matViewProjInv.m9 * quat.z)) + (matViewProjInv.m13 * quat.w),
.z = (((matViewProjInv.m2 * quat.x) + (matViewProjInv.m6 * quat.y)) + (matViewProjInv.m10 * quat.z)) + (matViewProjInv.m14 * quat.w),
.w = (((matViewProjInv.m3 * quat.x) + (matViewProjInv.m7 * quat.y)) + (matViewProjInv.m11 * quat.z)) + (matViewProjInv.m15 * quat.w),
};
_ = &qtransformed;
result.x = qtransformed.x / qtransformed.w;
result.y = qtransformed.y / qtransformed.w;
result.z = qtransformed.z / qtransformed.w;
return result;
}
pub fn Vector3ToFloatV(arg_v: Vector3) callconv(.C) float3 {
var v = arg_v;
_ = &v;
var buffer: float3 = float3{
.v = [1]f32{
0,
} ++ [1]f32{0} ** 2,
};
_ = &buffer;
buffer.v[@as(c_uint, @intCast(@as(c_int, 0)))] = v.x;
buffer.v[@as(c_uint, @intCast(@as(c_int, 1)))] = v.y;
buffer.v[@as(c_uint, @intCast(@as(c_int, 2)))] = v.z;
return buffer;
}
pub fn Vector3Invert(arg_v: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var result: Vector3 = Vector3{
.x = 1.0 / v.x,
.y = 1.0 / v.y,
.z = 1.0 / v.z,
};
_ = &result;
return result;
}
pub fn Vector3Clamp(arg_v: Vector3, arg_min: Vector3, arg_max: Vector3) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
result.x = fminf(max.x, fmaxf(min.x, v.x));
result.y = fminf(max.y, fmaxf(min.y, v.y));
result.z = fminf(max.z, fmaxf(min.z, v.z));
return result;
}
pub fn Vector3ClampValue(arg_v: Vector3, arg_min: f32, arg_max: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var min = arg_min;
_ = &min;
var max = arg_max;
_ = &max;
var result: Vector3 = v;
_ = &result;
var length: f32 = ((v.x * v.x) + (v.y * v.y)) + (v.z * v.z);
_ = &length;
if (length > 0.0) {
length = sqrtf(length);
var scale: f32 = 1;
_ = &scale;
if (length < min) {
scale = min / length;
} else if (length > max) {
scale = max / length;
}
result.x = v.x * scale;
result.y = v.y * scale;
result.z = v.z * scale;
}
return result;
}
pub fn Vector3Equals(arg_p: Vector3, arg_q: Vector3) callconv(.C) c_int {
var p = arg_p;
_ = &p;
var q = arg_q;
_ = &q;
var result: c_int = @intFromBool(((fabsf(p.x - q.x) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.x), fabsf(q.x))))) and (fabsf(p.y - q.y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.y), fabsf(q.y)))))) and (fabsf(p.z - q.z) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.z), fabsf(q.z))))));
_ = &result;
return result;
}
pub fn Vector3Refract(arg_v: Vector3, arg_n: Vector3, arg_r: f32) callconv(.C) Vector3 {
var v = arg_v;
_ = &v;
var n = arg_n;
_ = &n;
var r = arg_r;
_ = &r;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var dot: f32 = ((v.x * n.x) + (v.y * n.y)) + (v.z * n.z);
_ = &dot;
var d: f32 = 1.0 - ((r * r) * (1.0 - (dot * dot)));
_ = &d;
if (d >= 0.0) {
d = sqrtf(d);
v.x = (r * v.x) - (((r * dot) + d) * n.x);
v.y = (r * v.y) - (((r * dot) + d) * n.y);
v.z = (r * v.z) - (((r * dot) + d) * n.z);
result = v;
}
return result;
}
pub fn Vector4Zero() callconv(.C) Vector4 {
var result: Vector4 = Vector4{
.x = 0.0,
.y = 0.0,
.z = 0.0,
.w = 0.0,
};
_ = &result;
return result;
}
pub fn Vector4One() callconv(.C) Vector4 {
var result: Vector4 = Vector4{
.x = 1.0,
.y = 1.0,
.z = 1.0,
.w = 1.0,
};
_ = &result;
return result;
}
pub fn Vector4Add(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = v1.x + v2.x,
.y = v1.y + v2.y,
.z = v1.z + v2.z,
.w = v1.w + v2.w,
};
_ = &result;
return result;
}
pub fn Vector4AddValue(arg_v: Vector4, arg_add: f32) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var add = arg_add;
_ = &add;
var result: Vector4 = Vector4{
.x = v.x + add,
.y = v.y + add,
.z = v.z + add,
.w = v.w + add,
};
_ = &result;
return result;
}
pub fn Vector4Subtract(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = v1.x - v2.x,
.y = v1.y - v2.y,
.z = v1.z - v2.z,
.w = v1.w - v2.w,
};
_ = &result;
return result;
}
pub fn Vector4SubtractValue(arg_v: Vector4, arg_add: f32) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var add = arg_add;
_ = &add;
var result: Vector4 = Vector4{
.x = v.x - add,
.y = v.y - add,
.z = v.z - add,
.w = v.w - add,
};
_ = &result;
return result;
}
pub fn Vector4Length(arg_v: Vector4) callconv(.C) f32 {
var v = arg_v;
_ = &v;
var result: f32 = sqrtf((((v.x * v.x) + (v.y * v.y)) + (v.z * v.z)) + (v.w * v.w));
_ = &result;
return result;
}
pub fn Vector4LengthSqr(arg_v: Vector4) callconv(.C) f32 {
var v = arg_v;
_ = &v;
var result: f32 = (((v.x * v.x) + (v.y * v.y)) + (v.z * v.z)) + (v.w * v.w);
_ = &result;
return result;
}
pub fn Vector4DotProduct(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = (((v1.x * v2.x) + (v1.y * v2.y)) + (v1.z * v2.z)) + (v1.w * v2.w);
_ = &result;
return result;
}
pub fn Vector4Distance(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = sqrtf(((((v1.x - v2.x) * (v1.x - v2.x)) + ((v1.y - v2.y) * (v1.y - v2.y))) + ((v1.z - v2.z) * (v1.z - v2.z))) + ((v1.w - v2.w) * (v1.w - v2.w)));
_ = &result;
return result;
}
pub fn Vector4DistanceSqr(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) f32 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: f32 = ((((v1.x - v2.x) * (v1.x - v2.x)) + ((v1.y - v2.y) * (v1.y - v2.y))) + ((v1.z - v2.z) * (v1.z - v2.z))) + ((v1.w - v2.w) * (v1.w - v2.w));
_ = &result;
return result;
}
pub fn Vector4Scale(arg_v: Vector4, arg_scale: f32) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var scale = arg_scale;
_ = &scale;
var result: Vector4 = Vector4{
.x = v.x * scale,
.y = v.y * scale,
.z = v.z * scale,
.w = v.w * scale,
};
_ = &result;
return result;
}
pub fn Vector4Multiply(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = v1.x * v2.x,
.y = v1.y * v2.y,
.z = v1.z * v2.z,
.w = v1.w * v2.w,
};
_ = &result;
return result;
}
pub fn Vector4Negate(arg_v: Vector4) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var result: Vector4 = Vector4{
.x = -v.x,
.y = -v.y,
.z = -v.z,
.w = -v.w,
};
_ = &result;
return result;
}
pub fn Vector4Divide(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = v1.x / v2.x,
.y = v1.y / v2.y,
.z = v1.z / v2.z,
.w = v1.w / v2.w,
};
_ = &result;
return result;
}
pub fn Vector4Normalize(arg_v: Vector4) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var result: Vector4 = Vector4{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var length: f32 = sqrtf((((v.x * v.x) + (v.y * v.y)) + (v.z * v.z)) + (v.w * v.w));
_ = &length;
if (length > @as(f32, @floatFromInt(@as(c_int, 0)))) {
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x = v.x * ilength;
result.y = v.y * ilength;
result.z = v.z * ilength;
result.w = v.w * ilength;
}
return result;
}
pub fn Vector4Min(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = fminf(v1.x, v2.x);
result.y = fminf(v1.y, v2.y);
result.z = fminf(v1.z, v2.z);
result.w = fminf(v1.w, v2.w);
return result;
}
pub fn Vector4Max(arg_v1: Vector4, arg_v2: Vector4) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var result: Vector4 = Vector4{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = fmaxf(v1.x, v2.x);
result.y = fmaxf(v1.y, v2.y);
result.z = fmaxf(v1.z, v2.z);
result.w = fmaxf(v1.w, v2.w);
return result;
}
pub fn Vector4Lerp(arg_v1: Vector4, arg_v2: Vector4, arg_amount: f32) callconv(.C) Vector4 {
var v1 = arg_v1;
_ = &v1;
var v2 = arg_v2;
_ = &v2;
var amount = arg_amount;
_ = &amount;
var result: Vector4 = Vector4{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = v1.x + (amount * (v2.x - v1.x));
result.y = v1.y + (amount * (v2.y - v1.y));
result.z = v1.z + (amount * (v2.z - v1.z));
result.w = v1.w + (amount * (v2.w - v1.w));
return result;
}
pub fn Vector4MoveTowards(arg_v: Vector4, arg_target: Vector4, arg_maxDistance: f32) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var target = arg_target;
_ = &target;
var maxDistance = arg_maxDistance;
_ = &maxDistance;
var result: Vector4 = Vector4{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var dx: f32 = target.x - v.x;
_ = &dx;
var dy: f32 = target.y - v.y;
_ = &dy;
var dz: f32 = target.z - v.z;
_ = &dz;
var dw: f32 = target.w - v.w;
_ = &dw;
var value: f32 = (((dx * dx) + (dy * dy)) + (dz * dz)) + (dw * dw);
_ = &value;
if ((value == @as(f32, @floatFromInt(@as(c_int, 0)))) or ((maxDistance >= @as(f32, @floatFromInt(@as(c_int, 0)))) and (value <= (maxDistance * maxDistance)))) return target;
var dist: f32 = sqrtf(value);
_ = &dist;
result.x = v.x + ((dx / dist) * maxDistance);
result.y = v.y + ((dy / dist) * maxDistance);
result.z = v.z + ((dz / dist) * maxDistance);
result.w = v.w + ((dw / dist) * maxDistance);
return result;
}
pub fn Vector4Invert(arg_v: Vector4) callconv(.C) Vector4 {
var v = arg_v;
_ = &v;
var result: Vector4 = Vector4{
.x = 1.0 / v.x,
.y = 1.0 / v.y,
.z = 1.0 / v.z,
.w = 1.0 / v.w,
};
_ = &result;
return result;
}
pub fn Vector4Equals(arg_p: Vector4, arg_q: Vector4) callconv(.C) c_int {
var p = arg_p;
_ = &p;
var q = arg_q;
_ = &q;
var result: c_int = @intFromBool((((fabsf(p.x - q.x) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.x), fabsf(q.x))))) and (fabsf(p.y - q.y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.y), fabsf(q.y)))))) and (fabsf(p.z - q.z) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.z), fabsf(q.z)))))) and (fabsf(p.w - q.w) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.w), fabsf(q.w))))));
_ = &result;
return result;
}
pub fn MatrixDeterminant(arg_mat: Matrix) callconv(.C) f32 {
var mat = arg_mat;
_ = &mat;
var result: f32 = 0.0;
_ = &result;
var a00: f32 = mat.m0;
_ = &a00;
var a01: f32 = mat.m1;
_ = &a01;
var a02: f32 = mat.m2;
_ = &a02;
var a03: f32 = mat.m3;
_ = &a03;
var a10: f32 = mat.m4;
_ = &a10;
var a11: f32 = mat.m5;
_ = &a11;
var a12: f32 = mat.m6;
_ = &a12;
var a13: f32 = mat.m7;
_ = &a13;
var a20: f32 = mat.m8;
_ = &a20;
var a21: f32 = mat.m9;
_ = &a21;
var a22: f32 = mat.m10;
_ = &a22;
var a23: f32 = mat.m11;
_ = &a23;
var a30: f32 = mat.m12;
_ = &a30;
var a31: f32 = mat.m13;
_ = &a31;
var a32: f32 = mat.m14;
_ = &a32;
var a33: f32 = mat.m15;
_ = &a33;
result = (((((((((((((((((((((((((a30 * a21) * a12) * a03) - (((a20 * a31) * a12) * a03)) - (((a30 * a11) * a22) * a03)) + (((a10 * a31) * a22) * a03)) + (((a20 * a11) * a32) * a03)) - (((a10 * a21) * a32) * a03)) - (((a30 * a21) * a02) * a13)) + (((a20 * a31) * a02) * a13)) + (((a30 * a01) * a22) * a13)) - (((a00 * a31) * a22) * a13)) - (((a20 * a01) * a32) * a13)) + (((a00 * a21) * a32) * a13)) + (((a30 * a11) * a02) * a23)) - (((a10 * a31) * a02) * a23)) - (((a30 * a01) * a12) * a23)) + (((a00 * a31) * a12) * a23)) + (((a10 * a01) * a32) * a23)) - (((a00 * a11) * a32) * a23)) - (((a20 * a11) * a02) * a33)) + (((a10 * a21) * a02) * a33)) + (((a20 * a01) * a12) * a33)) - (((a00 * a21) * a12) * a33)) - (((a10 * a01) * a22) * a33)) + (((a00 * a11) * a22) * a33);
return result;
}
pub fn MatrixTrace(arg_mat: Matrix) callconv(.C) f32 {
var mat = arg_mat;
_ = &mat;
var result: f32 = ((mat.m0 + mat.m5) + mat.m10) + mat.m15;
_ = &result;
return result;
}
pub fn MatrixTranspose(arg_mat: Matrix) callconv(.C) Matrix {
var mat = arg_mat;
_ = &mat;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
result.m0 = mat.m0;
result.m1 = mat.m4;
result.m2 = mat.m8;
result.m3 = mat.m12;
result.m4 = mat.m1;
result.m5 = mat.m5;
result.m6 = mat.m9;
result.m7 = mat.m13;
result.m8 = mat.m2;
result.m9 = mat.m6;
result.m10 = mat.m10;
result.m11 = mat.m14;
result.m12 = mat.m3;
result.m13 = mat.m7;
result.m14 = mat.m11;
result.m15 = mat.m15;
return result;
}
pub fn MatrixInvert(arg_mat: Matrix) callconv(.C) Matrix {
var mat = arg_mat;
_ = &mat;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var a00: f32 = mat.m0;
_ = &a00;
var a01: f32 = mat.m1;
_ = &a01;
var a02: f32 = mat.m2;
_ = &a02;
var a03: f32 = mat.m3;
_ = &a03;
var a10: f32 = mat.m4;
_ = &a10;
var a11: f32 = mat.m5;
_ = &a11;
var a12: f32 = mat.m6;
_ = &a12;
var a13: f32 = mat.m7;
_ = &a13;
var a20: f32 = mat.m8;
_ = &a20;
var a21: f32 = mat.m9;
_ = &a21;
var a22: f32 = mat.m10;
_ = &a22;
var a23: f32 = mat.m11;
_ = &a23;
var a30: f32 = mat.m12;
_ = &a30;
var a31: f32 = mat.m13;
_ = &a31;
var a32: f32 = mat.m14;
_ = &a32;
var a33: f32 = mat.m15;
_ = &a33;
var b00: f32 = (a00 * a11) - (a01 * a10);
_ = &b00;
var b01: f32 = (a00 * a12) - (a02 * a10);
_ = &b01;
var b02: f32 = (a00 * a13) - (a03 * a10);
_ = &b02;
var b03: f32 = (a01 * a12) - (a02 * a11);
_ = &b03;
var b04: f32 = (a01 * a13) - (a03 * a11);
_ = &b04;
var b05: f32 = (a02 * a13) - (a03 * a12);
_ = &b05;
var b06: f32 = (a20 * a31) - (a21 * a30);
_ = &b06;
var b07: f32 = (a20 * a32) - (a22 * a30);
_ = &b07;
var b08: f32 = (a20 * a33) - (a23 * a30);
_ = &b08;
var b09: f32 = (a21 * a32) - (a22 * a31);
_ = &b09;
var b10: f32 = (a21 * a33) - (a23 * a31);
_ = &b10;
var b11: f32 = (a22 * a33) - (a23 * a32);
_ = &b11;
var invDet: f32 = 1.0 / ((((((b00 * b11) - (b01 * b10)) + (b02 * b09)) + (b03 * b08)) - (b04 * b07)) + (b05 * b06));
_ = &invDet;
result.m0 = (((a11 * b11) - (a12 * b10)) + (a13 * b09)) * invDet;
result.m1 = (((-a01 * b11) + (a02 * b10)) - (a03 * b09)) * invDet;
result.m2 = (((a31 * b05) - (a32 * b04)) + (a33 * b03)) * invDet;
result.m3 = (((-a21 * b05) + (a22 * b04)) - (a23 * b03)) * invDet;
result.m4 = (((-a10 * b11) + (a12 * b08)) - (a13 * b07)) * invDet;
result.m5 = (((a00 * b11) - (a02 * b08)) + (a03 * b07)) * invDet;
result.m6 = (((-a30 * b05) + (a32 * b02)) - (a33 * b01)) * invDet;
result.m7 = (((a20 * b05) - (a22 * b02)) + (a23 * b01)) * invDet;
result.m8 = (((a10 * b10) - (a11 * b08)) + (a13 * b06)) * invDet;
result.m9 = (((-a00 * b10) + (a01 * b08)) - (a03 * b06)) * invDet;
result.m10 = (((a30 * b04) - (a31 * b02)) + (a33 * b00)) * invDet;
result.m11 = (((-a20 * b04) + (a21 * b02)) - (a23 * b00)) * invDet;
result.m12 = (((-a10 * b09) + (a11 * b07)) - (a12 * b06)) * invDet;
result.m13 = (((a00 * b09) - (a01 * b07)) + (a02 * b06)) * invDet;
result.m14 = (((-a30 * b03) + (a31 * b01)) - (a32 * b00)) * invDet;
result.m15 = (((a20 * b03) - (a21 * b01)) + (a22 * b00)) * invDet;
return result;
}
pub fn MatrixIdentity() callconv(.C) Matrix {
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
return result;
}
pub fn MatrixAdd(arg_left: Matrix, arg_right: Matrix) callconv(.C) Matrix {
var left = arg_left;
_ = &left;
var right = arg_right;
_ = &right;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
result.m0 = left.m0 + right.m0;
result.m1 = left.m1 + right.m1;
result.m2 = left.m2 + right.m2;
result.m3 = left.m3 + right.m3;
result.m4 = left.m4 + right.m4;
result.m5 = left.m5 + right.m5;
result.m6 = left.m6 + right.m6;
result.m7 = left.m7 + right.m7;
result.m8 = left.m8 + right.m8;
result.m9 = left.m9 + right.m9;
result.m10 = left.m10 + right.m10;
result.m11 = left.m11 + right.m11;
result.m12 = left.m12 + right.m12;
result.m13 = left.m13 + right.m13;
result.m14 = left.m14 + right.m14;
result.m15 = left.m15 + right.m15;
return result;
}
pub fn MatrixSubtract(arg_left: Matrix, arg_right: Matrix) callconv(.C) Matrix {
var left = arg_left;
_ = &left;
var right = arg_right;
_ = &right;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
result.m0 = left.m0 - right.m0;
result.m1 = left.m1 - right.m1;
result.m2 = left.m2 - right.m2;
result.m3 = left.m3 - right.m3;
result.m4 = left.m4 - right.m4;
result.m5 = left.m5 - right.m5;
result.m6 = left.m6 - right.m6;
result.m7 = left.m7 - right.m7;
result.m8 = left.m8 - right.m8;
result.m9 = left.m9 - right.m9;
result.m10 = left.m10 - right.m10;
result.m11 = left.m11 - right.m11;
result.m12 = left.m12 - right.m12;
result.m13 = left.m13 - right.m13;
result.m14 = left.m14 - right.m14;
result.m15 = left.m15 - right.m15;
return result;
}
pub fn MatrixMultiply(arg_left: Matrix, arg_right: Matrix) callconv(.C) Matrix {
var left = arg_left;
_ = &left;
var right = arg_right;
_ = &right;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
result.m0 = (((left.m0 * right.m0) + (left.m1 * right.m4)) + (left.m2 * right.m8)) + (left.m3 * right.m12);
result.m1 = (((left.m0 * right.m1) + (left.m1 * right.m5)) + (left.m2 * right.m9)) + (left.m3 * right.m13);
result.m2 = (((left.m0 * right.m2) + (left.m1 * right.m6)) + (left.m2 * right.m10)) + (left.m3 * right.m14);
result.m3 = (((left.m0 * right.m3) + (left.m1 * right.m7)) + (left.m2 * right.m11)) + (left.m3 * right.m15);
result.m4 = (((left.m4 * right.m0) + (left.m5 * right.m4)) + (left.m6 * right.m8)) + (left.m7 * right.m12);
result.m5 = (((left.m4 * right.m1) + (left.m5 * right.m5)) + (left.m6 * right.m9)) + (left.m7 * right.m13);
result.m6 = (((left.m4 * right.m2) + (left.m5 * right.m6)) + (left.m6 * right.m10)) + (left.m7 * right.m14);
result.m7 = (((left.m4 * right.m3) + (left.m5 * right.m7)) + (left.m6 * right.m11)) + (left.m7 * right.m15);
result.m8 = (((left.m8 * right.m0) + (left.m9 * right.m4)) + (left.m10 * right.m8)) + (left.m11 * right.m12);
result.m9 = (((left.m8 * right.m1) + (left.m9 * right.m5)) + (left.m10 * right.m9)) + (left.m11 * right.m13);
result.m10 = (((left.m8 * right.m2) + (left.m9 * right.m6)) + (left.m10 * right.m10)) + (left.m11 * right.m14);
result.m11 = (((left.m8 * right.m3) + (left.m9 * right.m7)) + (left.m10 * right.m11)) + (left.m11 * right.m15);
result.m12 = (((left.m12 * right.m0) + (left.m13 * right.m4)) + (left.m14 * right.m8)) + (left.m15 * right.m12);
result.m13 = (((left.m12 * right.m1) + (left.m13 * right.m5)) + (left.m14 * right.m9)) + (left.m15 * right.m13);
result.m14 = (((left.m12 * right.m2) + (left.m13 * right.m6)) + (left.m14 * right.m10)) + (left.m15 * right.m14);
result.m15 = (((left.m12 * right.m3) + (left.m13 * right.m7)) + (left.m14 * right.m11)) + (left.m15 * right.m15);
return result;
}
pub fn MatrixTranslate(arg_x: f32, arg_y: f32, arg_z: f32) callconv(.C) Matrix {
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = x,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = y,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = z,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
return result;
}
pub fn MatrixRotate(arg_axis: Vector3, arg_angle: f32) callconv(.C) Matrix {
var axis = arg_axis;
_ = &axis;
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var x: f32 = axis.x;
_ = &x;
var y: f32 = axis.y;
_ = &y;
var z: f32 = axis.z;
_ = &z;
var lengthSquared: f32 = ((x * x) + (y * y)) + (z * z);
_ = &lengthSquared;
if ((lengthSquared != 1.0) and (lengthSquared != 0.0)) {
var ilength: f32 = 1.0 / sqrtf(lengthSquared);
_ = &ilength;
x *= ilength;
y *= ilength;
z *= ilength;
}
var sinres: f32 = sinf(angle);
_ = &sinres;
var cosres: f32 = cosf(angle);
_ = &cosres;
var t: f32 = 1.0 - cosres;
_ = &t;
result.m0 = ((x * x) * t) + cosres;
result.m1 = ((y * x) * t) + (z * sinres);
result.m2 = ((z * x) * t) - (y * sinres);
result.m3 = 0.0;
result.m4 = ((x * y) * t) - (z * sinres);
result.m5 = ((y * y) * t) + cosres;
result.m6 = ((z * y) * t) + (x * sinres);
result.m7 = 0.0;
result.m8 = ((x * z) * t) + (y * sinres);
result.m9 = ((y * z) * t) - (x * sinres);
result.m10 = ((z * z) * t) + cosres;
result.m11 = 0.0;
result.m12 = 0.0;
result.m13 = 0.0;
result.m14 = 0.0;
result.m15 = 1.0;
return result;
}
pub fn MatrixRotateX(arg_angle: f32) callconv(.C) Matrix {
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
var cosres: f32 = cosf(angle);
_ = &cosres;
var sinres: f32 = sinf(angle);
_ = &sinres;
result.m5 = cosres;
result.m6 = sinres;
result.m9 = -sinres;
result.m10 = cosres;
return result;
}
pub fn MatrixRotateY(arg_angle: f32) callconv(.C) Matrix {
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
var cosres: f32 = cosf(angle);
_ = &cosres;
var sinres: f32 = sinf(angle);
_ = &sinres;
result.m0 = cosres;
result.m2 = -sinres;
result.m8 = sinres;
result.m10 = cosres;
return result;
}
pub fn MatrixRotateZ(arg_angle: f32) callconv(.C) Matrix {
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
var cosres: f32 = cosf(angle);
_ = &cosres;
var sinres: f32 = sinf(angle);
_ = &sinres;
result.m0 = cosres;
result.m1 = sinres;
result.m4 = -sinres;
result.m5 = cosres;
return result;
}
pub fn MatrixRotateXYZ(arg_angle: Vector3) callconv(.C) Matrix {
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
var cosz: f32 = cosf(-angle.z);
_ = &cosz;
var sinz: f32 = sinf(-angle.z);
_ = &sinz;
var cosy: f32 = cosf(-angle.y);
_ = &cosy;
var siny: f32 = sinf(-angle.y);
_ = &siny;
var cosx: f32 = cosf(-angle.x);
_ = &cosx;
var sinx: f32 = sinf(-angle.x);
_ = &sinx;
result.m0 = cosz * cosy;
result.m1 = ((cosz * siny) * sinx) - (sinz * cosx);
result.m2 = ((cosz * siny) * cosx) + (sinz * sinx);
result.m4 = sinz * cosy;
result.m5 = ((sinz * siny) * sinx) + (cosz * cosx);
result.m6 = ((sinz * siny) * cosx) - (cosz * sinx);
result.m8 = -siny;
result.m9 = cosy * sinx;
result.m10 = cosy * cosx;
return result;
}
pub fn MatrixRotateZYX(arg_angle: Vector3) callconv(.C) Matrix {
var angle = arg_angle;
_ = &angle;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var cz: f32 = cosf(angle.z);
_ = &cz;
var sz: f32 = sinf(angle.z);
_ = &sz;
var cy: f32 = cosf(angle.y);
_ = &cy;
var sy: f32 = sinf(angle.y);
_ = &sy;
var cx: f32 = cosf(angle.x);
_ = &cx;
var sx: f32 = sinf(angle.x);
_ = &sx;
result.m0 = cz * cy;
result.m4 = ((cz * sy) * sx) - (cx * sz);
result.m8 = (sz * sx) + ((cz * cx) * sy);
result.m12 = 0;
result.m1 = cy * sz;
result.m5 = (cz * cx) + ((sz * sy) * sx);
result.m9 = ((cx * sz) * sy) - (cz * sx);
result.m13 = 0;
result.m2 = -sy;
result.m6 = cy * sx;
result.m10 = cy * cx;
result.m14 = 0;
result.m3 = 0;
result.m7 = 0;
result.m11 = 0;
result.m15 = 1;
return result;
}
pub fn MatrixScale(arg_x: f32, arg_y: f32, arg_z: f32) callconv(.C) Matrix {
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var result: Matrix = Matrix{
.m0 = x,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = y,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = z,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
return result;
}
pub fn MatrixFrustum(arg_left: f64, arg_right: f64, arg_bottom: f64, arg_top: f64, arg_nearPlane: f64, arg_farPlane: f64) callconv(.C) Matrix {
var left = arg_left;
_ = &left;
var right = arg_right;
_ = &right;
var bottom = arg_bottom;
_ = &bottom;
var top = arg_top;
_ = &top;
var nearPlane = arg_nearPlane;
_ = &nearPlane;
var farPlane = arg_farPlane;
_ = &farPlane;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var rl: f32 = @as(f32, @floatCast(right - left));
_ = &rl;
var tb: f32 = @as(f32, @floatCast(top - bottom));
_ = &tb;
var @"fn": f32 = @as(f32, @floatCast(farPlane - nearPlane));
_ = &@"fn";
result.m0 = (@as(f32, @floatCast(nearPlane)) * 2.0) / rl;
result.m1 = 0.0;
result.m2 = 0.0;
result.m3 = 0.0;
result.m4 = 0.0;
result.m5 = (@as(f32, @floatCast(nearPlane)) * 2.0) / tb;
result.m6 = 0.0;
result.m7 = 0.0;
result.m8 = (@as(f32, @floatCast(right)) + @as(f32, @floatCast(left))) / rl;
result.m9 = (@as(f32, @floatCast(top)) + @as(f32, @floatCast(bottom))) / tb;
result.m10 = -(@as(f32, @floatCast(farPlane)) + @as(f32, @floatCast(nearPlane))) / @"fn";
result.m11 = -1.0;
result.m12 = 0.0;
result.m13 = 0.0;
result.m14 = -((@as(f32, @floatCast(farPlane)) * @as(f32, @floatCast(nearPlane))) * 2.0) / @"fn";
result.m15 = 0.0;
return result;
}
pub fn MatrixPerspective(arg_fovY: f64, arg_aspect: f64, arg_nearPlane: f64, arg_farPlane: f64) callconv(.C) Matrix {
var fovY = arg_fovY;
_ = &fovY;
var aspect = arg_aspect;
_ = &aspect;
var nearPlane = arg_nearPlane;
_ = &nearPlane;
var farPlane = arg_farPlane;
_ = &farPlane;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var top: f64 = nearPlane * tan(fovY * 0.5);
_ = &top;
var bottom: f64 = -top;
_ = &bottom;
var right: f64 = top * aspect;
_ = &right;
var left: f64 = -right;
_ = &left;
var rl: f32 = @as(f32, @floatCast(right - left));
_ = &rl;
var tb: f32 = @as(f32, @floatCast(top - bottom));
_ = &tb;
var @"fn": f32 = @as(f32, @floatCast(farPlane - nearPlane));
_ = &@"fn";
result.m0 = (@as(f32, @floatCast(nearPlane)) * 2.0) / rl;
result.m5 = (@as(f32, @floatCast(nearPlane)) * 2.0) / tb;
result.m8 = (@as(f32, @floatCast(right)) + @as(f32, @floatCast(left))) / rl;
result.m9 = (@as(f32, @floatCast(top)) + @as(f32, @floatCast(bottom))) / tb;
result.m10 = -(@as(f32, @floatCast(farPlane)) + @as(f32, @floatCast(nearPlane))) / @"fn";
result.m11 = -1.0;
result.m14 = -((@as(f32, @floatCast(farPlane)) * @as(f32, @floatCast(nearPlane))) * 2.0) / @"fn";
return result;
}
pub fn MatrixOrtho(arg_left: f64, arg_right: f64, arg_bottom: f64, arg_top: f64, arg_nearPlane: f64, arg_farPlane: f64) callconv(.C) Matrix {
var left = arg_left;
_ = &left;
var right = arg_right;
_ = &right;
var bottom = arg_bottom;
_ = &bottom;
var top = arg_top;
_ = &top;
var nearPlane = arg_nearPlane;
_ = &nearPlane;
var farPlane = arg_farPlane;
_ = &farPlane;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var rl: f32 = @as(f32, @floatCast(right - left));
_ = &rl;
var tb: f32 = @as(f32, @floatCast(top - bottom));
_ = &tb;
var @"fn": f32 = @as(f32, @floatCast(farPlane - nearPlane));
_ = &@"fn";
result.m0 = 2.0 / rl;
result.m1 = 0.0;
result.m2 = 0.0;
result.m3 = 0.0;
result.m4 = 0.0;
result.m5 = 2.0 / tb;
result.m6 = 0.0;
result.m7 = 0.0;
result.m8 = 0.0;
result.m9 = 0.0;
result.m10 = -2.0 / @"fn";
result.m11 = 0.0;
result.m12 = -(@as(f32, @floatCast(left)) + @as(f32, @floatCast(right))) / rl;
result.m13 = -(@as(f32, @floatCast(top)) + @as(f32, @floatCast(bottom))) / tb;
result.m14 = -(@as(f32, @floatCast(farPlane)) + @as(f32, @floatCast(nearPlane))) / @"fn";
result.m15 = 1.0;
return result;
}
pub fn MatrixLookAt(arg_eye: Vector3, arg_target: Vector3, arg_up: Vector3) callconv(.C) Matrix {
var eye = arg_eye;
_ = &eye;
var target = arg_target;
_ = &target;
var up = arg_up;
_ = &up;
var result: Matrix = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
};
_ = &result;
var length: f32 = 0.0;
_ = &length;
var ilength: f32 = 0.0;
_ = &ilength;
var vz: Vector3 = Vector3{
.x = eye.x - target.x,
.y = eye.y - target.y,
.z = eye.z - target.z,
};
_ = &vz;
var v: Vector3 = vz;
_ = &v;
length = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
vz.x *= ilength;
vz.y *= ilength;
vz.z *= ilength;
var vx: Vector3 = Vector3{
.x = (up.y * vz.z) - (up.z * vz.y),
.y = (up.z * vz.x) - (up.x * vz.z),
.z = (up.x * vz.y) - (up.y * vz.x),
};
_ = &vx;
v = vx;
length = sqrtf(((v.x * v.x) + (v.y * v.y)) + (v.z * v.z));
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
vx.x *= ilength;
vx.y *= ilength;
vx.z *= ilength;
var vy: Vector3 = Vector3{
.x = (vz.y * vx.z) - (vz.z * vx.y),
.y = (vz.z * vx.x) - (vz.x * vx.z),
.z = (vz.x * vx.y) - (vz.y * vx.x),
};
_ = &vy;
result.m0 = vx.x;
result.m1 = vy.x;
result.m2 = vz.x;
result.m3 = 0.0;
result.m4 = vx.y;
result.m5 = vy.y;
result.m6 = vz.y;
result.m7 = 0.0;
result.m8 = vx.z;
result.m9 = vy.z;
result.m10 = vz.z;
result.m11 = 0.0;
result.m12 = -(((vx.x * eye.x) + (vx.y * eye.y)) + (vx.z * eye.z));
result.m13 = -(((vy.x * eye.x) + (vy.y * eye.y)) + (vy.z * eye.z));
result.m14 = -(((vz.x * eye.x) + (vz.y * eye.y)) + (vz.z * eye.z));
result.m15 = 1.0;
return result;
}
pub fn MatrixToFloatV(arg_mat: Matrix) callconv(.C) float16 {
var mat = arg_mat;
_ = &mat;
var result: float16 = float16{
.v = [1]f32{
0,
} ++ [1]f32{0} ** 15,
};
_ = &result;
result.v[@as(c_uint, @intCast(@as(c_int, 0)))] = mat.m0;
result.v[@as(c_uint, @intCast(@as(c_int, 1)))] = mat.m1;
result.v[@as(c_uint, @intCast(@as(c_int, 2)))] = mat.m2;
result.v[@as(c_uint, @intCast(@as(c_int, 3)))] = mat.m3;
result.v[@as(c_uint, @intCast(@as(c_int, 4)))] = mat.m4;
result.v[@as(c_uint, @intCast(@as(c_int, 5)))] = mat.m5;
result.v[@as(c_uint, @intCast(@as(c_int, 6)))] = mat.m6;
result.v[@as(c_uint, @intCast(@as(c_int, 7)))] = mat.m7;
result.v[@as(c_uint, @intCast(@as(c_int, 8)))] = mat.m8;
result.v[@as(c_uint, @intCast(@as(c_int, 9)))] = mat.m9;
result.v[@as(c_uint, @intCast(@as(c_int, 10)))] = mat.m10;
result.v[@as(c_uint, @intCast(@as(c_int, 11)))] = mat.m11;
result.v[@as(c_uint, @intCast(@as(c_int, 12)))] = mat.m12;
result.v[@as(c_uint, @intCast(@as(c_int, 13)))] = mat.m13;
result.v[@as(c_uint, @intCast(@as(c_int, 14)))] = mat.m14;
result.v[@as(c_uint, @intCast(@as(c_int, 15)))] = mat.m15;
return result;
}
pub fn QuaternionAdd(arg_q1: Quaternion, arg_q2: Quaternion) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var result: Quaternion = Quaternion{
.x = q1.x + q2.x,
.y = q1.y + q2.y,
.z = q1.z + q2.z,
.w = q1.w + q2.w,
};
_ = &result;
return result;
}
pub fn QuaternionAddValue(arg_q: Quaternion, arg_add: f32) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var add = arg_add;
_ = &add;
var result: Quaternion = Quaternion{
.x = q.x + add,
.y = q.y + add,
.z = q.z + add,
.w = q.w + add,
};
_ = &result;
return result;
}
pub fn QuaternionSubtract(arg_q1: Quaternion, arg_q2: Quaternion) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var result: Quaternion = Quaternion{
.x = q1.x - q2.x,
.y = q1.y - q2.y,
.z = q1.z - q2.z,
.w = q1.w - q2.w,
};
_ = &result;
return result;
}
pub fn QuaternionSubtractValue(arg_q: Quaternion, arg_sub: f32) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var sub = arg_sub;
_ = &sub;
var result: Quaternion = Quaternion{
.x = q.x - sub,
.y = q.y - sub,
.z = q.z - sub,
.w = q.w - sub,
};
_ = &result;
return result;
}
pub fn QuaternionIdentity() callconv(.C) Quaternion {
var result: Quaternion = Quaternion{
.x = 0.0,
.y = 0.0,
.z = 0.0,
.w = 1.0,
};
_ = &result;
return result;
}
pub fn QuaternionLength(arg_q: Quaternion) callconv(.C) f32 {
var q = arg_q;
_ = &q;
var result: f32 = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
_ = &result;
return result;
}
pub fn QuaternionNormalize(arg_q: Quaternion) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var length: f32 = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
_ = &length;
if (length == 0.0) {
length = 1.0;
}
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x = q.x * ilength;
result.y = q.y * ilength;
result.z = q.z * ilength;
result.w = q.w * ilength;
return result;
}
pub fn QuaternionInvert(arg_q: Quaternion) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var result: Quaternion = q;
_ = &result;
var lengthSq: f32 = (((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w);
_ = &lengthSq;
if (lengthSq != 0.0) {
var invLength: f32 = 1.0 / lengthSq;
_ = &invLength;
result.x *= -invLength;
result.y *= -invLength;
result.z *= -invLength;
result.w *= invLength;
}
return result;
}
pub fn QuaternionMultiply(arg_q1: Quaternion, arg_q2: Quaternion) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var qax: f32 = q1.x;
_ = &qax;
var qay: f32 = q1.y;
_ = &qay;
var qaz: f32 = q1.z;
_ = &qaz;
var qaw: f32 = q1.w;
_ = &qaw;
var qbx: f32 = q2.x;
_ = &qbx;
var qby: f32 = q2.y;
_ = &qby;
var qbz: f32 = q2.z;
_ = &qbz;
var qbw: f32 = q2.w;
_ = &qbw;
result.x = (((qax * qbw) + (qaw * qbx)) + (qay * qbz)) - (qaz * qby);
result.y = (((qay * qbw) + (qaw * qby)) + (qaz * qbx)) - (qax * qbz);
result.z = (((qaz * qbw) + (qaw * qbz)) + (qax * qby)) - (qay * qbx);
result.w = (((qaw * qbw) - (qax * qbx)) - (qay * qby)) - (qaz * qbz);
return result;
}
pub fn QuaternionScale(arg_q: Quaternion, arg_mul: f32) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var mul = arg_mul;
_ = &mul;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = q.x * mul;
result.y = q.y * mul;
result.z = q.z * mul;
result.w = q.w * mul;
return result;
}
pub fn QuaternionDivide(arg_q1: Quaternion, arg_q2: Quaternion) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var result: Quaternion = Quaternion{
.x = q1.x / q2.x,
.y = q1.y / q2.y,
.z = q1.z / q2.z,
.w = q1.w / q2.w,
};
_ = &result;
return result;
}
pub fn QuaternionLerp(arg_q1: Quaternion, arg_q2: Quaternion, arg_amount: f32) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var amount = arg_amount;
_ = &amount;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = q1.x + (amount * (q2.x - q1.x));
result.y = q1.y + (amount * (q2.y - q1.y));
result.z = q1.z + (amount * (q2.z - q1.z));
result.w = q1.w + (amount * (q2.w - q1.w));
return result;
}
pub fn QuaternionNlerp(arg_q1: Quaternion, arg_q2: Quaternion, arg_amount: f32) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var amount = arg_amount;
_ = &amount;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = q1.x + (amount * (q2.x - q1.x));
result.y = q1.y + (amount * (q2.y - q1.y));
result.z = q1.z + (amount * (q2.z - q1.z));
result.w = q1.w + (amount * (q2.w - q1.w));
var q: Quaternion = result;
_ = &q;
var length: f32 = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
_ = &length;
if (length == 0.0) {
length = 1.0;
}
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x = q.x * ilength;
result.y = q.y * ilength;
result.z = q.z * ilength;
result.w = q.w * ilength;
return result;
}
pub fn QuaternionSlerp(arg_q1: Quaternion, arg_q2: Quaternion, arg_amount: f32) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var q2 = arg_q2;
_ = &q2;
var amount = arg_amount;
_ = &amount;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var cosHalfTheta: f32 = (((q1.x * q2.x) + (q1.y * q2.y)) + (q1.z * q2.z)) + (q1.w * q2.w);
_ = &cosHalfTheta;
if (cosHalfTheta < @as(f32, @floatFromInt(@as(c_int, 0)))) {
q2.x = -q2.x;
q2.y = -q2.y;
q2.z = -q2.z;
q2.w = -q2.w;
cosHalfTheta = -cosHalfTheta;
}
if (fabsf(cosHalfTheta) >= 1.0) {
result = q1;
} else if (cosHalfTheta > 0.949999988079071) {
result = QuaternionNlerp(q1, q2, amount);
} else {
var halfTheta: f32 = acosf(cosHalfTheta);
_ = &halfTheta;
var sinHalfTheta: f32 = sqrtf(1.0 - (cosHalfTheta * cosHalfTheta));
_ = &sinHalfTheta;
if (fabsf(sinHalfTheta) < 0.0000009999999974752427) {
result.x = (q1.x * 0.5) + (q2.x * 0.5);
result.y = (q1.y * 0.5) + (q2.y * 0.5);
result.z = (q1.z * 0.5) + (q2.z * 0.5);
result.w = (q1.w * 0.5) + (q2.w * 0.5);
} else {
var ratioA: f32 = sinf((@as(f32, @floatFromInt(@as(c_int, 1))) - amount) * halfTheta) / sinHalfTheta;
_ = &ratioA;
var ratioB: f32 = sinf(amount * halfTheta) / sinHalfTheta;
_ = &ratioB;
result.x = (q1.x * ratioA) + (q2.x * ratioB);
result.y = (q1.y * ratioA) + (q2.y * ratioB);
result.z = (q1.z * ratioA) + (q2.z * ratioB);
result.w = (q1.w * ratioA) + (q2.w * ratioB);
}
}
return result;
}
pub fn QuaternionCubicHermiteSpline(arg_q1: Quaternion, arg_outTangent1: Quaternion, arg_q2: Quaternion, arg_inTangent2: Quaternion, arg_t: f32) callconv(.C) Quaternion {
var q1 = arg_q1;
_ = &q1;
var outTangent1 = arg_outTangent1;
_ = &outTangent1;
var q2 = arg_q2;
_ = &q2;
var inTangent2 = arg_inTangent2;
_ = &inTangent2;
var t = arg_t;
_ = &t;
var t2: f32 = t * t;
_ = &t2;
var t3: f32 = t2 * t;
_ = &t3;
var h00: f32 = ((@as(f32, @floatFromInt(@as(c_int, 2))) * t3) - (@as(f32, @floatFromInt(@as(c_int, 3))) * t2)) + @as(f32, @floatFromInt(@as(c_int, 1)));
_ = &h00;
var h10: f32 = (t3 - (@as(f32, @floatFromInt(@as(c_int, 2))) * t2)) + t;
_ = &h10;
var h01: f32 = (@as(f32, @floatFromInt(-@as(c_int, 2))) * t3) + (@as(f32, @floatFromInt(@as(c_int, 3))) * t2);
_ = &h01;
var h11: f32 = t3 - t2;
_ = &h11;
var p0: Quaternion = QuaternionScale(q1, h00);
_ = &p0;
var m0: Quaternion = QuaternionScale(outTangent1, h10);
_ = &m0;
var p1: Quaternion = QuaternionScale(q2, h01);
_ = &p1;
var m1: Quaternion = QuaternionScale(inTangent2, h11);
_ = &m1;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result = QuaternionAdd(p0, m0);
result = QuaternionAdd(result, p1);
result = QuaternionAdd(result, m1);
result = QuaternionNormalize(result);
return result;
}
pub fn QuaternionFromVector3ToVector3(arg_from: Vector3, arg_to: Vector3) callconv(.C) Quaternion {
var from = arg_from;
_ = &from;
var to = arg_to;
_ = &to;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var cos2Theta: f32 = ((from.x * to.x) + (from.y * to.y)) + (from.z * to.z);
_ = &cos2Theta;
var cross: Vector3 = Vector3{
.x = (from.y * to.z) - (from.z * to.y),
.y = (from.z * to.x) - (from.x * to.z),
.z = (from.x * to.y) - (from.y * to.x),
};
_ = &cross;
result.x = cross.x;
result.y = cross.y;
result.z = cross.z;
result.w = 1.0 + cos2Theta;
var q: Quaternion = result;
_ = &q;
var length: f32 = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
_ = &length;
if (length == 0.0) {
length = 1.0;
}
var ilength: f32 = 1.0 / length;
_ = &ilength;
result.x = q.x * ilength;
result.y = q.y * ilength;
result.z = q.z * ilength;
result.w = q.w * ilength;
return result;
}
pub fn QuaternionFromMatrix(arg_mat: Matrix) callconv(.C) Quaternion {
var mat = arg_mat;
_ = &mat;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var fourWSquaredMinus1: f32 = (mat.m0 + mat.m5) + mat.m10;
_ = &fourWSquaredMinus1;
var fourXSquaredMinus1: f32 = (mat.m0 - mat.m5) - mat.m10;
_ = &fourXSquaredMinus1;
var fourYSquaredMinus1: f32 = (mat.m5 - mat.m0) - mat.m10;
_ = &fourYSquaredMinus1;
var fourZSquaredMinus1: f32 = (mat.m10 - mat.m0) - mat.m5;
_ = &fourZSquaredMinus1;
var biggestIndex: c_int = 0;
_ = &biggestIndex;
var fourBiggestSquaredMinus1: f32 = fourWSquaredMinus1;
_ = &fourBiggestSquaredMinus1;
if (fourXSquaredMinus1 > fourBiggestSquaredMinus1) {
fourBiggestSquaredMinus1 = fourXSquaredMinus1;
biggestIndex = 1;
}
if (fourYSquaredMinus1 > fourBiggestSquaredMinus1) {
fourBiggestSquaredMinus1 = fourYSquaredMinus1;
biggestIndex = 2;
}
if (fourZSquaredMinus1 > fourBiggestSquaredMinus1) {
fourBiggestSquaredMinus1 = fourZSquaredMinus1;
biggestIndex = 3;
}
var biggestVal: f32 = sqrtf(fourBiggestSquaredMinus1 + 1.0) * 0.5;
_ = &biggestVal;
var mult: f32 = 0.25 / biggestVal;
_ = &mult;
while (true) {
switch (biggestIndex) {
@as(c_int, 0) => {
result.w = biggestVal;
result.x = (mat.m6 - mat.m9) * mult;
result.y = (mat.m8 - mat.m2) * mult;
result.z = (mat.m1 - mat.m4) * mult;
break;
},
@as(c_int, 1) => {
result.x = biggestVal;
result.w = (mat.m6 - mat.m9) * mult;
result.y = (mat.m1 + mat.m4) * mult;
result.z = (mat.m8 + mat.m2) * mult;
break;
},
@as(c_int, 2) => {
result.y = biggestVal;
result.w = (mat.m8 - mat.m2) * mult;
result.x = (mat.m1 + mat.m4) * mult;
result.z = (mat.m6 + mat.m9) * mult;
break;
},
@as(c_int, 3) => {
result.z = biggestVal;
result.w = (mat.m1 - mat.m4) * mult;
result.x = (mat.m8 + mat.m2) * mult;
result.y = (mat.m6 + mat.m9) * mult;
break;
},
else => {},
}
break;
}
return result;
}
pub fn QuaternionToMatrix(arg_q: Quaternion) callconv(.C) Matrix {
var q = arg_q;
_ = &q;
var result: Matrix = Matrix{
.m0 = 1.0,
.m4 = 0.0,
.m8 = 0.0,
.m12 = 0.0,
.m1 = 0.0,
.m5 = 1.0,
.m9 = 0.0,
.m13 = 0.0,
.m2 = 0.0,
.m6 = 0.0,
.m10 = 1.0,
.m14 = 0.0,
.m3 = 0.0,
.m7 = 0.0,
.m11 = 0.0,
.m15 = 1.0,
};
_ = &result;
var a2: f32 = q.x * q.x;
_ = &a2;
var b2: f32 = q.y * q.y;
_ = &b2;
var c2: f32 = q.z * q.z;
_ = &c2;
var ac: f32 = q.x * q.z;
_ = &ac;
var ab: f32 = q.x * q.y;
_ = &ab;
var bc: f32 = q.y * q.z;
_ = &bc;
var ad: f32 = q.w * q.x;
_ = &ad;
var bd: f32 = q.w * q.y;
_ = &bd;
var cd: f32 = q.w * q.z;
_ = &cd;
result.m0 = @as(f32, @floatFromInt(@as(c_int, 1))) - (@as(f32, @floatFromInt(@as(c_int, 2))) * (b2 + c2));
result.m1 = @as(f32, @floatFromInt(@as(c_int, 2))) * (ab + cd);
result.m2 = @as(f32, @floatFromInt(@as(c_int, 2))) * (ac - bd);
result.m4 = @as(f32, @floatFromInt(@as(c_int, 2))) * (ab - cd);
result.m5 = @as(f32, @floatFromInt(@as(c_int, 1))) - (@as(f32, @floatFromInt(@as(c_int, 2))) * (a2 + c2));
result.m6 = @as(f32, @floatFromInt(@as(c_int, 2))) * (bc + ad);
result.m8 = @as(f32, @floatFromInt(@as(c_int, 2))) * (ac + bd);
result.m9 = @as(f32, @floatFromInt(@as(c_int, 2))) * (bc - ad);
result.m10 = @as(f32, @floatFromInt(@as(c_int, 1))) - (@as(f32, @floatFromInt(@as(c_int, 2))) * (a2 + b2));
return result;
}
pub fn QuaternionFromAxisAngle(arg_axis: Vector3, arg_angle: f32) callconv(.C) Quaternion {
var axis = arg_axis;
_ = &axis;
var angle = arg_angle;
_ = &angle;
var result: Quaternion = Quaternion{
.x = 0.0,
.y = 0.0,
.z = 0.0,
.w = 1.0,
};
_ = &result;
var axisLength: f32 = sqrtf(((axis.x * axis.x) + (axis.y * axis.y)) + (axis.z * axis.z));
_ = &axisLength;
if (axisLength != 0.0) {
angle *= 0.5;
var length: f32 = 0.0;
_ = &length;
var ilength: f32 = 0.0;
_ = &ilength;
length = axisLength;
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
axis.x *= ilength;
axis.y *= ilength;
axis.z *= ilength;
var sinres: f32 = sinf(angle);
_ = &sinres;
var cosres: f32 = cosf(angle);
_ = &cosres;
result.x = axis.x * sinres;
result.y = axis.y * sinres;
result.z = axis.z * sinres;
result.w = cosres;
var q: Quaternion = result;
_ = &q;
length = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
if (length == 0.0) {
length = 1.0;
}
ilength = 1.0 / length;
result.x = q.x * ilength;
result.y = q.y * ilength;
result.z = q.z * ilength;
result.w = q.w * ilength;
}
return result;
}
pub fn QuaternionToAxisAngle(arg_q: Quaternion, arg_outAxis: [*c]Vector3, arg_outAngle: [*c]f32) callconv(.C) void {
var q = arg_q;
_ = &q;
var outAxis = arg_outAxis;
_ = &outAxis;
var outAngle = arg_outAngle;
_ = &outAngle;
if (fabsf(q.w) > 1.0) {
var length: f32 = sqrtf((((q.x * q.x) + (q.y * q.y)) + (q.z * q.z)) + (q.w * q.w));
_ = &length;
if (length == 0.0) {
length = 1.0;
}
var ilength: f32 = 1.0 / length;
_ = &ilength;
q.x = q.x * ilength;
q.y = q.y * ilength;
q.z = q.z * ilength;
q.w = q.w * ilength;
}
var resAxis: Vector3 = Vector3{
.x = 0.0,
.y = 0.0,
.z = 0.0,
};
_ = &resAxis;
var resAngle: f32 = 2.0 * acosf(q.w);
_ = &resAngle;
var den: f32 = sqrtf(1.0 - (q.w * q.w));
_ = &den;
if (den > 0.0000009999999974752427) {
resAxis.x = q.x / den;
resAxis.y = q.y / den;
resAxis.z = q.z / den;
} else {
resAxis.x = 1.0;
}
outAxis.* = resAxis;
outAngle.* = resAngle;
}
pub fn QuaternionFromEuler(arg_pitch: f32, arg_yaw: f32, arg_roll: f32) callconv(.C) Quaternion {
var pitch = arg_pitch;
_ = &pitch;
var yaw = arg_yaw;
_ = &yaw;
var roll = arg_roll;
_ = &roll;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
var x0: f32 = cosf(pitch * 0.5);
_ = &x0;
var x1: f32 = sinf(pitch * 0.5);
_ = &x1;
var y0_1: f32 = cosf(yaw * 0.5);
_ = &y0_1;
var y1_2: f32 = sinf(yaw * 0.5);
_ = &y1_2;
var z0: f32 = cosf(roll * 0.5);
_ = &z0;
var z1: f32 = sinf(roll * 0.5);
_ = &z1;
result.x = ((x1 * y0_1) * z0) - ((x0 * y1_2) * z1);
result.y = ((x0 * y1_2) * z0) + ((x1 * y0_1) * z1);
result.z = ((x0 * y0_1) * z1) - ((x1 * y1_2) * z0);
result.w = ((x0 * y0_1) * z0) + ((x1 * y1_2) * z1);
return result;
}
pub fn QuaternionToEuler(arg_q: Quaternion) callconv(.C) Vector3 {
var q = arg_q;
_ = &q;
var result: Vector3 = Vector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
};
_ = &result;
var x0: f32 = 2.0 * ((q.w * q.x) + (q.y * q.z));
_ = &x0;
var x1: f32 = 1.0 - (2.0 * ((q.x * q.x) + (q.y * q.y)));
_ = &x1;
result.x = atan2f(x0, x1);
var y0_1: f32 = 2.0 * ((q.w * q.y) - (q.z * q.x));
_ = &y0_1;
y0_1 = if (y0_1 > 1.0) 1.0 else y0_1;
y0_1 = if (y0_1 < -1.0) -1.0 else y0_1;
result.y = asinf(y0_1);
var z0: f32 = 2.0 * ((q.w * q.z) + (q.x * q.y));
_ = &z0;
var z1: f32 = 1.0 - (2.0 * ((q.y * q.y) + (q.z * q.z)));
_ = &z1;
result.z = atan2f(z0, z1);
return result;
}
pub fn QuaternionTransform(arg_q: Quaternion, arg_mat: Matrix) callconv(.C) Quaternion {
var q = arg_q;
_ = &q;
var mat = arg_mat;
_ = &mat;
var result: Quaternion = Quaternion{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = 0,
.z = 0,
.w = 0,
};
_ = &result;
result.x = (((mat.m0 * q.x) + (mat.m4 * q.y)) + (mat.m8 * q.z)) + (mat.m12 * q.w);
result.y = (((mat.m1 * q.x) + (mat.m5 * q.y)) + (mat.m9 * q.z)) + (mat.m13 * q.w);
result.z = (((mat.m2 * q.x) + (mat.m6 * q.y)) + (mat.m10 * q.z)) + (mat.m14 * q.w);
result.w = (((mat.m3 * q.x) + (mat.m7 * q.y)) + (mat.m11 * q.z)) + (mat.m15 * q.w);
return result;
}
pub fn QuaternionEquals(arg_p: Quaternion, arg_q: Quaternion) callconv(.C) c_int {
var p = arg_p;
_ = &p;
var q = arg_q;
_ = &q;
var result: c_int = @intFromBool(((((fabsf(p.x - q.x) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.x), fabsf(q.x))))) and (fabsf(p.y - q.y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.y), fabsf(q.y)))))) and (fabsf(p.z - q.z) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.z), fabsf(q.z)))))) and (fabsf(p.w - q.w) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.w), fabsf(q.w)))))) or ((((fabsf(p.x + q.x) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.x), fabsf(q.x))))) and (fabsf(p.y + q.y) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.y), fabsf(q.y)))))) and (fabsf(p.z + q.z) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.z), fabsf(q.z)))))) and (fabsf(p.w + q.w) <= (0.0000009999999974752427 * fmaxf(1.0, fmaxf(fabsf(p.w), fabsf(q.w)))))));
_ = &result;
return result;
}
pub fn MatrixDecompose(arg_mat: Matrix, arg_translation: [*c]Vector3, arg_rotation: [*c]Quaternion, arg_scale: [*c]Vector3) callconv(.C) void {
var mat = arg_mat;
_ = &mat;
var translation = arg_translation;
_ = &translation;
var rotation = arg_rotation;
_ = &rotation;
var scale = arg_scale;
_ = &scale;
translation.*.x = mat.m12;
translation.*.y = mat.m13;
translation.*.z = mat.m14;
const a: f32 = mat.m0;
_ = &a;
const b: f32 = mat.m4;
_ = &b;
const c: f32 = mat.m8;
_ = &c;
const d: f32 = mat.m1;
_ = &d;
const e: f32 = mat.m5;
_ = &e;
const f: f32 = mat.m9;
_ = &f;
const g: f32 = mat.m2;
_ = &g;
const h: f32 = mat.m6;
_ = &h;
const i: f32 = mat.m10;
_ = &i;
const A: f32 = (e * i) - (f * h);
_ = &A;
const B: f32 = (f * g) - (d * i);
_ = &B;
const C: f32 = (d * h) - (e * g);
_ = &C;
const det: f32 = ((a * A) + (b * B)) + (c * C);
_ = &det;
var abc: Vector3 = Vector3{
.x = a,
.y = b,
.z = c,
};
_ = &abc;
var def: Vector3 = Vector3{
.x = d,
.y = e,
.z = f,
};
_ = &def;
var ghi: Vector3 = Vector3{
.x = g,
.y = h,
.z = i,
};
_ = &ghi;
var scalex: f32 = Vector3Length(abc);
_ = &scalex;
var scaley: f32 = Vector3Length(def);
_ = &scaley;
var scalez: f32 = Vector3Length(ghi);
_ = &scalez;
var s: Vector3 = Vector3{
.x = scalex,
.y = scaley,
.z = scalez,
};
_ = &s;
if (det < @as(f32, @floatFromInt(@as(c_int, 0)))) {
s = Vector3Negate(s);
}
scale.* = s;
var clone: Matrix = mat;
_ = &clone;
if (!(FloatEquals(det, @as(f32, @floatFromInt(@as(c_int, 0)))) != 0)) {
clone.m0 /= s.x;
clone.m5 /= s.y;
clone.m10 /= s.z;
rotation.* = QuaternionFromMatrix(clone);
} else {
rotation.* = QuaternionIdentity();
}
}
const union_unnamed_3 = extern union {
__wch: c_uint,
__wchb: [4]u8,
};
pub const __mbstate_t = extern struct {
__count: c_int = @import("std").mem.zeroes(c_int),
__value: union_unnamed_3 = @import("std").mem.zeroes(union_unnamed_3),
};
pub const struct__G_fpos_t = extern struct {
__pos: __off_t = @import("std").mem.zeroes(__off_t),
__state: __mbstate_t = @import("std").mem.zeroes(__mbstate_t),
};
pub const __fpos_t = struct__G_fpos_t;
pub const struct__G_fpos64_t = extern struct {
__pos: __off64_t = @import("std").mem.zeroes(__off64_t),
__state: __mbstate_t = @import("std").mem.zeroes(__mbstate_t),
};
pub const __fpos64_t = struct__G_fpos64_t;
pub const struct__IO_marker = opaque {};
pub const _IO_lock_t = anyopaque;
pub const struct__IO_codecvt = opaque {};
pub const struct__IO_wide_data = opaque {};
pub const struct__IO_FILE = extern struct {
_flags: c_int = @import("std").mem.zeroes(c_int),
_IO_read_ptr: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_read_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_read_base: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_write_base: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_write_ptr: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_write_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_buf_base: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_buf_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_save_base: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_backup_base: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_IO_save_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
_markers: ?*struct__IO_marker = @import("std").mem.zeroes(?*struct__IO_marker),
_chain: [*c]struct__IO_FILE = @import("std").mem.zeroes([*c]struct__IO_FILE),
_fileno: c_int = @import("std").mem.zeroes(c_int),
_flags2: c_int = @import("std").mem.zeroes(c_int),
_old_offset: __off_t = @import("std").mem.zeroes(__off_t),
_cur_column: c_ushort = @import("std").mem.zeroes(c_ushort),
_vtable_offset: i8 = @import("std").mem.zeroes(i8),
_shortbuf: [1]u8 = @import("std").mem.zeroes([1]u8),
_lock: ?*_IO_lock_t = @import("std").mem.zeroes(?*_IO_lock_t),
_offset: __off64_t = @import("std").mem.zeroes(__off64_t),
_codecvt: ?*struct__IO_codecvt = @import("std").mem.zeroes(?*struct__IO_codecvt),
_wide_data: ?*struct__IO_wide_data = @import("std").mem.zeroes(?*struct__IO_wide_data),
_freeres_list: [*c]struct__IO_FILE = @import("std").mem.zeroes([*c]struct__IO_FILE),
_freeres_buf: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
_prevchain: [*c][*c]struct__IO_FILE = @import("std").mem.zeroes([*c][*c]struct__IO_FILE),
_mode: c_int = @import("std").mem.zeroes(c_int),
_unused2: [20]u8 = @import("std").mem.zeroes([20]u8),
};
pub const __FILE = struct__IO_FILE;
pub const FILE = struct__IO_FILE;
pub const cookie_read_function_t = fn (?*anyopaque, [*c]u8, usize) callconv(.C) __ssize_t;
pub const cookie_write_function_t = fn (?*anyopaque, [*c]const u8, usize) callconv(.C) __ssize_t;
pub const cookie_seek_function_t = fn (?*anyopaque, [*c]__off64_t, c_int) callconv(.C) c_int;
pub const cookie_close_function_t = fn (?*anyopaque) callconv(.C) c_int;
pub const struct__IO_cookie_io_functions_t = extern struct {
read: ?*const cookie_read_function_t = @import("std").mem.zeroes(?*const cookie_read_function_t),
write: ?*const cookie_write_function_t = @import("std").mem.zeroes(?*const cookie_write_function_t),
seek: ?*const cookie_seek_function_t = @import("std").mem.zeroes(?*const cookie_seek_function_t),
close: ?*const cookie_close_function_t = @import("std").mem.zeroes(?*const cookie_close_function_t),
};
pub const cookie_io_functions_t = struct__IO_cookie_io_functions_t;
pub const off_t = __off_t;
pub const fpos_t = __fpos_t;
pub extern var stdin: [*c]FILE;
pub extern var stdout: [*c]FILE;
pub extern var stderr: [*c]FILE;
pub extern fn remove(__filename: [*c]const u8) c_int;
pub extern fn rename(__old: [*c]const u8, __new: [*c]const u8) c_int;
pub extern fn renameat(__oldfd: c_int, __old: [*c]const u8, __newfd: c_int, __new: [*c]const u8) c_int;
pub extern fn fclose(__stream: [*c]FILE) c_int;
pub extern fn tmpfile() [*c]FILE;
pub extern fn tmpnam([*c]u8) [*c]u8;
pub extern fn tmpnam_r(__s: [*c]u8) [*c]u8;
pub extern fn tempnam(__dir: [*c]const u8, __pfx: [*c]const u8) [*c]u8;
pub extern fn fflush(__stream: [*c]FILE) c_int;
pub extern fn fflush_unlocked(__stream: [*c]FILE) c_int;
pub extern fn fopen(__filename: [*c]const u8, __modes: [*c]const u8) [*c]FILE;
pub extern fn freopen(noalias __filename: [*c]const u8, noalias __modes: [*c]const u8, noalias __stream: [*c]FILE) [*c]FILE;
pub extern fn fdopen(__fd: c_int, __modes: [*c]const u8) [*c]FILE;
pub extern fn fopencookie(noalias __magic_cookie: ?*anyopaque, noalias __modes: [*c]const u8, __io_funcs: cookie_io_functions_t) [*c]FILE;
pub extern fn fmemopen(__s: ?*anyopaque, __len: usize, __modes: [*c]const u8) [*c]FILE;
pub extern fn open_memstream(__bufloc: [*c][*c]u8, __sizeloc: [*c]usize) [*c]FILE;
pub extern fn setbuf(noalias __stream: [*c]FILE, noalias __buf: [*c]u8) void;
pub extern fn setvbuf(noalias __stream: [*c]FILE, noalias __buf: [*c]u8, __modes: c_int, __n: usize) c_int;
pub extern fn setbuffer(noalias __stream: [*c]FILE, noalias __buf: [*c]u8, __size: usize) void;
pub extern fn setlinebuf(__stream: [*c]FILE) void;
pub extern fn fprintf(__stream: [*c]FILE, __format: [*c]const u8, ...) c_int;
pub extern fn printf(__format: [*c]const u8, ...) c_int;
pub extern fn sprintf(__s: [*c]u8, __format: [*c]const u8, ...) c_int;
pub extern fn vfprintf(__s: [*c]FILE, __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn vprintf(__format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn vsprintf(__s: [*c]u8, __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn snprintf(__s: [*c]u8, __maxlen: c_ulong, __format: [*c]const u8, ...) c_int;
pub extern fn vsnprintf(__s: [*c]u8, __maxlen: c_ulong, __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn vasprintf(noalias __ptr: [*c][*c]u8, noalias __f: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn __asprintf(noalias __ptr: [*c][*c]u8, noalias __fmt: [*c]const u8, ...) c_int;
pub extern fn asprintf(noalias __ptr: [*c][*c]u8, noalias __fmt: [*c]const u8, ...) c_int;
pub extern fn vdprintf(__fd: c_int, noalias __fmt: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn dprintf(__fd: c_int, noalias __fmt: [*c]const u8, ...) c_int;
pub extern fn fscanf(noalias __stream: [*c]FILE, noalias __format: [*c]const u8, ...) c_int;
pub extern fn scanf(noalias __format: [*c]const u8, ...) c_int;
pub extern fn sscanf(noalias __s: [*c]const u8, noalias __format: [*c]const u8, ...) c_int;
pub extern fn vfscanf(noalias __s: [*c]FILE, noalias __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn vscanf(noalias __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn vsscanf(noalias __s: [*c]const u8, noalias __format: [*c]const u8, __arg: [*c]struct___va_list_tag_1) c_int;
pub extern fn fgetc(__stream: [*c]FILE) c_int;
pub extern fn getc(__stream: [*c]FILE) c_int;
pub extern fn getchar() c_int;
pub extern fn getc_unlocked(__stream: [*c]FILE) c_int;
pub extern fn getchar_unlocked() c_int;
pub extern fn fgetc_unlocked(__stream: [*c]FILE) c_int;
pub extern fn fputc(__c: c_int, __stream: [*c]FILE) c_int;
pub extern fn putc(__c: c_int, __stream: [*c]FILE) c_int;
pub extern fn putchar(__c: c_int) c_int;
pub extern fn fputc_unlocked(__c: c_int, __stream: [*c]FILE) c_int;
pub extern fn putc_unlocked(__c: c_int, __stream: [*c]FILE) c_int;
pub extern fn putchar_unlocked(__c: c_int) c_int;
pub extern fn getw(__stream: [*c]FILE) c_int;
pub extern fn putw(__w: c_int, __stream: [*c]FILE) c_int;
pub extern fn fgets(noalias __s: [*c]u8, __n: c_int, noalias __stream: [*c]FILE) [*c]u8;
pub extern fn __getdelim(noalias __lineptr: [*c][*c]u8, noalias __n: [*c]usize, __delimiter: c_int, noalias __stream: [*c]FILE) __ssize_t;
pub extern fn getdelim(noalias __lineptr: [*c][*c]u8, noalias __n: [*c]usize, __delimiter: c_int, noalias __stream: [*c]FILE) __ssize_t;
pub extern fn getline(noalias __lineptr: [*c][*c]u8, noalias __n: [*c]usize, noalias __stream: [*c]FILE) __ssize_t;
pub extern fn fputs(noalias __s: [*c]const u8, noalias __stream: [*c]FILE) c_int;
pub extern fn puts(__s: [*c]const u8) c_int;
pub extern fn ungetc(__c: c_int, __stream: [*c]FILE) c_int;
pub extern fn fread(__ptr: ?*anyopaque, __size: c_ulong, __n: c_ulong, __stream: [*c]FILE) c_ulong;
pub extern fn fwrite(__ptr: ?*const anyopaque, __size: c_ulong, __n: c_ulong, __s: [*c]FILE) c_ulong;
pub extern fn fread_unlocked(noalias __ptr: ?*anyopaque, __size: usize, __n: usize, noalias __stream: [*c]FILE) usize;
pub extern fn fwrite_unlocked(noalias __ptr: ?*const anyopaque, __size: usize, __n: usize, noalias __stream: [*c]FILE) usize;
pub extern fn fseek(__stream: [*c]FILE, __off: c_long, __whence: c_int) c_int;
pub extern fn ftell(__stream: [*c]FILE) c_long;
pub extern fn rewind(__stream: [*c]FILE) void;
pub extern fn fseeko(__stream: [*c]FILE, __off: __off_t, __whence: c_int) c_int;
pub extern fn ftello(__stream: [*c]FILE) __off_t;
pub extern fn fgetpos(noalias __stream: [*c]FILE, noalias __pos: [*c]fpos_t) c_int;
pub extern fn fsetpos(__stream: [*c]FILE, __pos: [*c]const fpos_t) c_int;
pub extern fn clearerr(__stream: [*c]FILE) void;
pub extern fn feof(__stream: [*c]FILE) c_int;
pub extern fn ferror(__stream: [*c]FILE) c_int;
pub extern fn clearerr_unlocked(__stream: [*c]FILE) void;
pub extern fn feof_unlocked(__stream: [*c]FILE) c_int;
pub extern fn ferror_unlocked(__stream: [*c]FILE) c_int;
pub extern fn perror(__s: [*c]const u8) void;
pub extern fn fileno(__stream: [*c]FILE) c_int;
pub extern fn fileno_unlocked(__stream: [*c]FILE) c_int;
pub extern fn pclose(__stream: [*c]FILE) c_int;
pub extern fn popen(__command: [*c]const u8, __modes: [*c]const u8) [*c]FILE;
pub extern fn ctermid(__s: [*c]u8) [*c]u8;
pub extern fn flockfile(__stream: [*c]FILE) void;
pub extern fn ftrylockfile(__stream: [*c]FILE) c_int;
pub extern fn funlockfile(__stream: [*c]FILE) void;
pub extern fn __uflow([*c]FILE) c_int;
pub extern fn __overflow([*c]FILE, c_int) c_int;
pub const wchar_t = c_int;
pub const div_t = extern struct {
quot: c_int = @import("std").mem.zeroes(c_int),
rem: c_int = @import("std").mem.zeroes(c_int),
};
pub const ldiv_t = extern struct {
quot: c_long = @import("std").mem.zeroes(c_long),
rem: c_long = @import("std").mem.zeroes(c_long),
};
pub const lldiv_t = extern struct {
quot: c_longlong = @import("std").mem.zeroes(c_longlong),
rem: c_longlong = @import("std").mem.zeroes(c_longlong),
};
pub extern fn __ctype_get_mb_cur_max() usize;
pub extern fn atof(__nptr: [*c]const u8) f64;
pub extern fn atoi(__nptr: [*c]const u8) c_int;
pub extern fn atol(__nptr: [*c]const u8) c_long;
pub extern fn atoll(__nptr: [*c]const u8) c_longlong;
pub extern fn strtod(__nptr: [*c]const u8, __endptr: [*c][*c]u8) f64;
pub extern fn strtof(__nptr: [*c]const u8, __endptr: [*c][*c]u8) f32;
pub extern fn strtold(__nptr: [*c]const u8, __endptr: [*c][*c]u8) c_longdouble;
pub extern fn strtol(__nptr: [*c]const u8, __endptr: [*c][*c]u8, __base: c_int) c_long;
pub extern fn strtoul(__nptr: [*c]const u8, __endptr: [*c][*c]u8, __base: c_int) c_ulong;
pub extern fn strtoq(noalias __nptr: [*c]const u8, noalias __endptr: [*c][*c]u8, __base: c_int) c_longlong;
pub extern fn strtouq(noalias __nptr: [*c]const u8, noalias __endptr: [*c][*c]u8, __base: c_int) c_ulonglong;
pub extern fn strtoll(__nptr: [*c]const u8, __endptr: [*c][*c]u8, __base: c_int) c_longlong;
pub extern fn strtoull(__nptr: [*c]const u8, __endptr: [*c][*c]u8, __base: c_int) c_ulonglong;
pub extern fn l64a(__n: c_long) [*c]u8;
pub extern fn a64l(__s: [*c]const u8) c_long;
pub const u_char = __u_char;
pub const u_short = __u_short;
pub const u_int = __u_int;
pub const u_long = __u_long;
pub const quad_t = __quad_t;
pub const u_quad_t = __u_quad_t;
pub const fsid_t = __fsid_t;
pub const loff_t = __loff_t;
pub const ino_t = __ino_t;
pub const dev_t = __dev_t;
pub const gid_t = __gid_t;
pub const mode_t = __mode_t;
pub const nlink_t = __nlink_t;
pub const uid_t = __uid_t;
pub const pid_t = __pid_t;
pub const id_t = __id_t;
pub const daddr_t = __daddr_t;
pub const caddr_t = __caddr_t;
pub const key_t = __key_t;
pub const clock_t = __clock_t;
pub const clockid_t = __clockid_t;
pub const time_t = __time_t;
pub const timer_t = __timer_t;
pub const ulong = c_ulong;
pub const ushort = c_ushort;
pub const uint = c_uint;
pub const u_int8_t = __uint8_t;
pub const u_int16_t = __uint16_t;
pub const u_int32_t = __uint32_t;
pub const u_int64_t = __uint64_t;
pub const register_t = c_long;
pub fn __bswap_16(arg___bsx: __uint16_t) callconv(.C) __uint16_t {
var __bsx = arg___bsx;
_ = &__bsx;
return @as(__uint16_t, @bitCast(@as(c_short, @truncate(((@as(c_int, @bitCast(@as(c_uint, __bsx))) >> @intCast(8)) & @as(c_int, 255)) | ((@as(c_int, @bitCast(@as(c_uint, __bsx))) & @as(c_int, 255)) << @intCast(8))))));
}
pub fn __bswap_32(arg___bsx: __uint32_t) callconv(.C) __uint32_t {
var __bsx = arg___bsx;
_ = &__bsx;
return ((((__bsx & @as(c_uint, 4278190080)) >> @intCast(24)) | ((__bsx & @as(c_uint, 16711680)) >> @intCast(8))) | ((__bsx & @as(c_uint, 65280)) << @intCast(8))) | ((__bsx & @as(c_uint, 255)) << @intCast(24));
}
pub fn __bswap_64(arg___bsx: __uint64_t) callconv(.C) __uint64_t {
var __bsx = arg___bsx;
_ = &__bsx;
return @as(__uint64_t, @bitCast(@as(c_ulong, @truncate(((((((((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 18374686479671623680)) >> @intCast(56)) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 71776119061217280)) >> @intCast(40))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 280375465082880)) >> @intCast(24))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 1095216660480)) >> @intCast(8))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 4278190080)) << @intCast(8))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 16711680)) << @intCast(24))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 65280)) << @intCast(40))) | ((@as(c_ulonglong, @bitCast(@as(c_ulonglong, __bsx))) & @as(c_ulonglong, 255)) << @intCast(56))))));
}
pub fn __uint16_identity(arg___x: __uint16_t) callconv(.C) __uint16_t {
var __x = arg___x;
_ = &__x;
return __x;
}
pub fn __uint32_identity(arg___x: __uint32_t) callconv(.C) __uint32_t {
var __x = arg___x;
_ = &__x;
return __x;
}
pub fn __uint64_identity(arg___x: __uint64_t) callconv(.C) __uint64_t {
var __x = arg___x;
_ = &__x;
return __x;
}
pub const __sigset_t = extern struct {
__val: [16]c_ulong = @import("std").mem.zeroes([16]c_ulong),
};
pub const sigset_t = __sigset_t;
pub const struct_timeval = extern struct {
tv_sec: __time_t = @import("std").mem.zeroes(__time_t),
tv_usec: __suseconds_t = @import("std").mem.zeroes(__suseconds_t),
};
pub const struct_timespec = extern struct {
tv_sec: __time_t = @import("std").mem.zeroes(__time_t),
tv_nsec: __syscall_slong_t = @import("std").mem.zeroes(__syscall_slong_t),
};
pub const suseconds_t = __suseconds_t;
pub const __fd_mask = c_long;
pub const fd_set = extern struct {
__fds_bits: [16]__fd_mask = @import("std").mem.zeroes([16]__fd_mask),
};
pub const fd_mask = __fd_mask;
pub extern fn select(__nfds: c_int, noalias __readfds: [*c]fd_set, noalias __writefds: [*c]fd_set, noalias __exceptfds: [*c]fd_set, noalias __timeout: [*c]struct_timeval) c_int;
pub extern fn pselect(__nfds: c_int, noalias __readfds: [*c]fd_set, noalias __writefds: [*c]fd_set, noalias __exceptfds: [*c]fd_set, noalias __timeout: [*c]const struct_timespec, noalias __sigmask: [*c]const __sigset_t) c_int;
pub const blksize_t = __blksize_t;
pub const blkcnt_t = __blkcnt_t;
pub const fsblkcnt_t = __fsblkcnt_t;
pub const fsfilcnt_t = __fsfilcnt_t;
const struct_unnamed_4 = extern struct {
__low: c_uint = @import("std").mem.zeroes(c_uint),
__high: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const __atomic_wide_counter = extern union {
__value64: c_ulonglong,
__value32: struct_unnamed_4,
};
pub const struct___pthread_internal_list = extern struct {
__prev: [*c]struct___pthread_internal_list = @import("std").mem.zeroes([*c]struct___pthread_internal_list),
__next: [*c]struct___pthread_internal_list = @import("std").mem.zeroes([*c]struct___pthread_internal_list),
};
pub const __pthread_list_t = struct___pthread_internal_list;
pub const struct___pthread_internal_slist = extern struct {
__next: [*c]struct___pthread_internal_slist = @import("std").mem.zeroes([*c]struct___pthread_internal_slist),
};
pub const __pthread_slist_t = struct___pthread_internal_slist;
pub const struct___pthread_mutex_s = extern struct {
__lock: c_int = @import("std").mem.zeroes(c_int),
__count: c_uint = @import("std").mem.zeroes(c_uint),
__owner: c_int = @import("std").mem.zeroes(c_int),
__nusers: c_uint = @import("std").mem.zeroes(c_uint),
__kind: c_int = @import("std").mem.zeroes(c_int),
__spins: c_short = @import("std").mem.zeroes(c_short),
__elision: c_short = @import("std").mem.zeroes(c_short),
__list: __pthread_list_t = @import("std").mem.zeroes(__pthread_list_t),
};
pub const struct___pthread_rwlock_arch_t = extern struct {
__readers: c_uint = @import("std").mem.zeroes(c_uint),
__writers: c_uint = @import("std").mem.zeroes(c_uint),
__wrphase_futex: c_uint = @import("std").mem.zeroes(c_uint),
__writers_futex: c_uint = @import("std").mem.zeroes(c_uint),
__pad3: c_uint = @import("std").mem.zeroes(c_uint),
__pad4: c_uint = @import("std").mem.zeroes(c_uint),
__cur_writer: c_int = @import("std").mem.zeroes(c_int),
__shared: c_int = @import("std").mem.zeroes(c_int),
__rwelision: i8 = @import("std").mem.zeroes(i8),
__pad1: [7]u8 = @import("std").mem.zeroes([7]u8),
__pad2: c_ulong = @import("std").mem.zeroes(c_ulong),
__flags: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const struct___pthread_cond_s = extern struct {
__wseq: __atomic_wide_counter = @import("std").mem.zeroes(__atomic_wide_counter),
__g1_start: __atomic_wide_counter = @import("std").mem.zeroes(__atomic_wide_counter),
__g_refs: [2]c_uint = @import("std").mem.zeroes([2]c_uint),
__g_size: [2]c_uint = @import("std").mem.zeroes([2]c_uint),
__g1_orig_size: c_uint = @import("std").mem.zeroes(c_uint),
__wrefs: c_uint = @import("std").mem.zeroes(c_uint),
__g_signals: [2]c_uint = @import("std").mem.zeroes([2]c_uint),
};
pub const __tss_t = c_uint;
pub const __thrd_t = c_ulong;
pub const __once_flag = extern struct {
__data: c_int = @import("std").mem.zeroes(c_int),
};
pub const pthread_t = c_ulong;
pub const pthread_mutexattr_t = extern union {
__size: [4]u8,
__align: c_int,
};
pub const pthread_condattr_t = extern union {
__size: [4]u8,
__align: c_int,
};
pub const pthread_key_t = c_uint;
pub const pthread_once_t = c_int;
pub const union_pthread_attr_t = extern union {
__size: [56]u8,
__align: c_long,
};
pub const pthread_attr_t = union_pthread_attr_t;
pub const pthread_mutex_t = extern union {
__data: struct___pthread_mutex_s,
__size: [40]u8,
__align: c_long,
};
pub const pthread_cond_t = extern union {
__data: struct___pthread_cond_s,
__size: [48]u8,
__align: c_longlong,
};
pub const pthread_rwlock_t = extern union {
__data: struct___pthread_rwlock_arch_t,
__size: [56]u8,
__align: c_long,
};
pub const pthread_rwlockattr_t = extern union {
__size: [8]u8,
__align: c_long,
};
pub const pthread_spinlock_t = c_int;
pub const pthread_barrier_t = extern union {
__size: [32]u8,
__align: c_long,
};
pub const pthread_barrierattr_t = extern union {
__size: [4]u8,
__align: c_int,
};
pub extern fn random() c_long;
pub extern fn srandom(__seed: c_uint) void;
pub extern fn initstate(__seed: c_uint, __statebuf: [*c]u8, __statelen: usize) [*c]u8;
pub extern fn setstate(__statebuf: [*c]u8) [*c]u8;
pub const struct_random_data = extern struct {
fptr: [*c]i32 = @import("std").mem.zeroes([*c]i32),
rptr: [*c]i32 = @import("std").mem.zeroes([*c]i32),
state: [*c]i32 = @import("std").mem.zeroes([*c]i32),
rand_type: c_int = @import("std").mem.zeroes(c_int),
rand_deg: c_int = @import("std").mem.zeroes(c_int),
rand_sep: c_int = @import("std").mem.zeroes(c_int),
end_ptr: [*c]i32 = @import("std").mem.zeroes([*c]i32),
};
pub extern fn random_r(noalias __buf: [*c]struct_random_data, noalias __result: [*c]i32) c_int;
pub extern fn srandom_r(__seed: c_uint, __buf: [*c]struct_random_data) c_int;
pub extern fn initstate_r(__seed: c_uint, noalias __statebuf: [*c]u8, __statelen: usize, noalias __buf: [*c]struct_random_data) c_int;
pub extern fn setstate_r(noalias __statebuf: [*c]u8, noalias __buf: [*c]struct_random_data) c_int;
pub extern fn rand() c_int;
pub extern fn srand(__seed: c_uint) void;
pub extern fn rand_r(__seed: [*c]c_uint) c_int;
pub extern fn drand48() f64;
pub extern fn erand48(__xsubi: [*c]c_ushort) f64;
pub extern fn lrand48() c_long;
pub extern fn nrand48(__xsubi: [*c]c_ushort) c_long;
pub extern fn mrand48() c_long;
pub extern fn jrand48(__xsubi: [*c]c_ushort) c_long;
pub extern fn srand48(__seedval: c_long) void;
pub extern fn seed48(__seed16v: [*c]c_ushort) [*c]c_ushort;
pub extern fn lcong48(__param: [*c]c_ushort) void;
pub const struct_drand48_data = extern struct {
__x: [3]c_ushort = @import("std").mem.zeroes([3]c_ushort),
__old_x: [3]c_ushort = @import("std").mem.zeroes([3]c_ushort),
__c: c_ushort = @import("std").mem.zeroes(c_ushort),
__init: c_ushort = @import("std").mem.zeroes(c_ushort),
__a: c_ulonglong = @import("std").mem.zeroes(c_ulonglong),
};
pub extern fn drand48_r(noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]f64) c_int;
pub extern fn erand48_r(__xsubi: [*c]c_ushort, noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]f64) c_int;
pub extern fn lrand48_r(noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]c_long) c_int;
pub extern fn nrand48_r(__xsubi: [*c]c_ushort, noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]c_long) c_int;
pub extern fn mrand48_r(noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]c_long) c_int;
pub extern fn jrand48_r(__xsubi: [*c]c_ushort, noalias __buffer: [*c]struct_drand48_data, noalias __result: [*c]c_long) c_int;
pub extern fn srand48_r(__seedval: c_long, __buffer: [*c]struct_drand48_data) c_int;
pub extern fn seed48_r(__seed16v: [*c]c_ushort, __buffer: [*c]struct_drand48_data) c_int;
pub extern fn lcong48_r(__param: [*c]c_ushort, __buffer: [*c]struct_drand48_data) c_int;
pub extern fn arc4random() __uint32_t;
pub extern fn arc4random_buf(__buf: ?*anyopaque, __size: usize) void;
pub extern fn arc4random_uniform(__upper_bound: __uint32_t) __uint32_t;
pub extern fn malloc(__size: c_ulong) ?*anyopaque;
pub extern fn calloc(__nmemb: c_ulong, __size: c_ulong) ?*anyopaque;
pub extern fn realloc(__ptr: ?*anyopaque, __size: c_ulong) ?*anyopaque;
pub extern fn free(__ptr: ?*anyopaque) void;
pub extern fn reallocarray(__ptr: ?*anyopaque, __nmemb: usize, __size: usize) ?*anyopaque;
pub extern fn alloca(__size: c_ulong) ?*anyopaque;
pub extern fn valloc(__size: usize) ?*anyopaque;
pub extern fn posix_memalign(__memptr: [*c]?*anyopaque, __alignment: usize, __size: usize) c_int;
pub extern fn aligned_alloc(__alignment: c_ulong, __size: c_ulong) ?*anyopaque;
pub extern fn abort() noreturn;
pub extern fn atexit(__func: ?*const fn () callconv(.C) void) c_int;
pub extern fn at_quick_exit(__func: ?*const fn () callconv(.C) void) c_int;
pub extern fn on_exit(__func: ?*const fn (c_int, ?*anyopaque) callconv(.C) void, __arg: ?*anyopaque) c_int;
pub extern fn exit(__status: c_int) noreturn;
pub extern fn quick_exit(__status: c_int) noreturn;
pub extern fn _Exit(__status: c_int) noreturn;
pub extern fn getenv(__name: [*c]const u8) [*c]u8;
pub extern fn putenv(__string: [*c]u8) c_int;
pub extern fn setenv(__name: [*c]const u8, __value: [*c]const u8, __replace: c_int) c_int;
pub extern fn unsetenv(__name: [*c]const u8) c_int;
pub extern fn clearenv() c_int;
pub extern fn mktemp(__template: [*c]u8) [*c]u8;
pub extern fn mkstemp(__template: [*c]u8) c_int;
pub extern fn mkstemps(__template: [*c]u8, __suffixlen: c_int) c_int;
pub extern fn mkdtemp(__template: [*c]u8) [*c]u8;
pub extern fn system(__command: [*c]const u8) c_int;
pub extern fn realpath(noalias __name: [*c]const u8, noalias __resolved: [*c]u8) [*c]u8;
pub const __compar_fn_t = ?*const fn (?*const anyopaque, ?*const anyopaque) callconv(.C) c_int;
pub extern fn bsearch(__key: ?*const anyopaque, __base: ?*const anyopaque, __nmemb: usize, __size: usize, __compar: __compar_fn_t) ?*anyopaque;
pub extern fn qsort(__base: ?*anyopaque, __nmemb: usize, __size: usize, __compar: __compar_fn_t) void;
pub extern fn abs(__x: c_int) c_int;
pub extern fn labs(__x: c_long) c_long;
pub extern fn llabs(__x: c_longlong) c_longlong;
pub extern fn div(__numer: c_int, __denom: c_int) div_t;
pub extern fn ldiv(__numer: c_long, __denom: c_long) ldiv_t;
pub extern fn lldiv(__numer: c_longlong, __denom: c_longlong) lldiv_t;
pub extern fn ecvt(__value: f64, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int) [*c]u8;
pub extern fn fcvt(__value: f64, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int) [*c]u8;
pub extern fn gcvt(__value: f64, __ndigit: c_int, __buf: [*c]u8) [*c]u8;
pub extern fn qecvt(__value: c_longdouble, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int) [*c]u8;
pub extern fn qfcvt(__value: c_longdouble, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int) [*c]u8;
pub extern fn qgcvt(__value: c_longdouble, __ndigit: c_int, __buf: [*c]u8) [*c]u8;
pub extern fn ecvt_r(__value: f64, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int, noalias __buf: [*c]u8, __len: usize) c_int;
pub extern fn fcvt_r(__value: f64, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int, noalias __buf: [*c]u8, __len: usize) c_int;
pub extern fn qecvt_r(__value: c_longdouble, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int, noalias __buf: [*c]u8, __len: usize) c_int;
pub extern fn qfcvt_r(__value: c_longdouble, __ndigit: c_int, noalias __decpt: [*c]c_int, noalias __sign: [*c]c_int, noalias __buf: [*c]u8, __len: usize) c_int;
pub extern fn mblen(__s: [*c]const u8, __n: usize) c_int;
pub extern fn mbtowc(noalias __pwc: [*c]wchar_t, noalias __s: [*c]const u8, __n: usize) c_int;
pub extern fn wctomb(__s: [*c]u8, __wchar: wchar_t) c_int;
pub extern fn mbstowcs(noalias __pwcs: [*c]wchar_t, noalias __s: [*c]const u8, __n: usize) usize;
pub extern fn wcstombs(noalias __s: [*c]u8, noalias __pwcs: [*c]const wchar_t, __n: usize) usize;
pub extern fn rpmatch(__response: [*c]const u8) c_int;
pub extern fn getsubopt(noalias __optionp: [*c][*c]u8, noalias __tokens: [*c]const [*c]u8, noalias __valuep: [*c][*c]u8) c_int;
pub extern fn getloadavg(__loadavg: [*c]f64, __nelem: c_int) c_int;
pub extern fn memcpy(__dest: ?*anyopaque, __src: ?*const anyopaque, __n: c_ulong) ?*anyopaque;
pub extern fn memmove(__dest: ?*anyopaque, __src: ?*const anyopaque, __n: c_ulong) ?*anyopaque;
pub extern fn memccpy(__dest: ?*anyopaque, __src: ?*const anyopaque, __c: c_int, __n: c_ulong) ?*anyopaque;
pub extern fn memset(__s: ?*anyopaque, __c: c_int, __n: c_ulong) ?*anyopaque;
pub extern fn memcmp(__s1: ?*const anyopaque, __s2: ?*const anyopaque, __n: c_ulong) c_int;
pub extern fn __memcmpeq(__s1: ?*const anyopaque, __s2: ?*const anyopaque, __n: usize) c_int;
pub extern fn memchr(__s: ?*const anyopaque, __c: c_int, __n: c_ulong) ?*anyopaque;
pub extern fn strcpy(__dest: [*c]u8, __src: [*c]const u8) [*c]u8;
pub extern fn strncpy(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) [*c]u8;
pub extern fn strcat(__dest: [*c]u8, __src: [*c]const u8) [*c]u8;
pub extern fn strncat(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) [*c]u8;
pub extern fn strcmp(__s1: [*c]const u8, __s2: [*c]const u8) c_int;
pub extern fn strncmp(__s1: [*c]const u8, __s2: [*c]const u8, __n: c_ulong) c_int;
pub extern fn strcoll(__s1: [*c]const u8, __s2: [*c]const u8) c_int;
pub extern fn strxfrm(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) c_ulong;
pub const struct___locale_data_5 = opaque {};
pub const struct___locale_struct = extern struct {
__locales: [13]?*struct___locale_data_5 = @import("std").mem.zeroes([13]?*struct___locale_data_5),
__ctype_b: [*c]const c_ushort = @import("std").mem.zeroes([*c]const c_ushort),
__ctype_tolower: [*c]const c_int = @import("std").mem.zeroes([*c]const c_int),
__ctype_toupper: [*c]const c_int = @import("std").mem.zeroes([*c]const c_int),
__names: [13][*c]const u8 = @import("std").mem.zeroes([13][*c]const u8),
};
pub const __locale_t = [*c]struct___locale_struct;
pub const locale_t = __locale_t;
pub extern fn strcoll_l(__s1: [*c]const u8, __s2: [*c]const u8, __l: locale_t) c_int;
pub extern fn strxfrm_l(__dest: [*c]u8, __src: [*c]const u8, __n: usize, __l: locale_t) usize;
pub extern fn strdup(__s: [*c]const u8) [*c]u8;
pub extern fn strndup(__string: [*c]const u8, __n: c_ulong) [*c]u8;
pub extern fn strchr(__s: [*c]const u8, __c: c_int) [*c]u8;
pub extern fn strrchr(__s: [*c]const u8, __c: c_int) [*c]u8;
pub extern fn strchrnul(__s: [*c]const u8, __c: c_int) [*c]u8;
pub extern fn strcspn(__s: [*c]const u8, __reject: [*c]const u8) c_ulong;
pub extern fn strspn(__s: [*c]const u8, __accept: [*c]const u8) c_ulong;
pub extern fn strpbrk(__s: [*c]const u8, __accept: [*c]const u8) [*c]u8;
pub extern fn strstr(__haystack: [*c]const u8, __needle: [*c]const u8) [*c]u8;
pub extern fn strtok(__s: [*c]u8, __delim: [*c]const u8) [*c]u8;
pub extern fn __strtok_r(noalias __s: [*c]u8, noalias __delim: [*c]const u8, noalias __save_ptr: [*c][*c]u8) [*c]u8;
pub extern fn strtok_r(noalias __s: [*c]u8, noalias __delim: [*c]const u8, noalias __save_ptr: [*c][*c]u8) [*c]u8;
pub extern fn strcasestr(__haystack: [*c]const u8, __needle: [*c]const u8) [*c]u8;
pub extern fn memmem(__haystack: ?*const anyopaque, __haystacklen: usize, __needle: ?*const anyopaque, __needlelen: usize) ?*anyopaque;
pub extern fn __mempcpy(noalias __dest: ?*anyopaque, noalias __src: ?*const anyopaque, __n: usize) ?*anyopaque;
pub extern fn mempcpy(__dest: ?*anyopaque, __src: ?*const anyopaque, __n: c_ulong) ?*anyopaque;
pub extern fn strlen(__s: [*c]const u8) c_ulong;
pub extern fn strnlen(__string: [*c]const u8, __maxlen: usize) usize;
pub extern fn strerror(__errnum: c_int) [*c]u8;
pub extern fn strerror_r(__errnum: c_int, __buf: [*c]u8, __buflen: usize) c_int;
pub extern fn strerror_l(__errnum: c_int, __l: locale_t) [*c]u8;
pub extern fn bcmp(__s1: ?*const anyopaque, __s2: ?*const anyopaque, __n: c_ulong) c_int;
pub extern fn bcopy(__src: ?*const anyopaque, __dest: ?*anyopaque, __n: c_ulong) void;
pub extern fn bzero(__s: ?*anyopaque, __n: c_ulong) void;
pub extern fn index(__s: [*c]const u8, __c: c_int) [*c]u8;
pub extern fn rindex(__s: [*c]const u8, __c: c_int) [*c]u8;
pub extern fn ffs(__i: c_int) c_int;
pub extern fn ffsl(__l: c_long) c_int;
pub extern fn ffsll(__ll: c_longlong) c_int;
pub extern fn strcasecmp(__s1: [*c]const u8, __s2: [*c]const u8) c_int;
pub extern fn strncasecmp(__s1: [*c]const u8, __s2: [*c]const u8, __n: c_ulong) c_int;
pub extern fn strcasecmp_l(__s1: [*c]const u8, __s2: [*c]const u8, __loc: locale_t) c_int;
pub extern fn strncasecmp_l(__s1: [*c]const u8, __s2: [*c]const u8, __n: usize, __loc: locale_t) c_int;
pub extern fn explicit_bzero(__s: ?*anyopaque, __n: usize) void;
pub extern fn strsep(noalias __stringp: [*c][*c]u8, noalias __delim: [*c]const u8) [*c]u8;
pub extern fn strsignal(__sig: c_int) [*c]u8;
pub extern fn __stpcpy(noalias __dest: [*c]u8, noalias __src: [*c]const u8) [*c]u8;
pub extern fn stpcpy(__dest: [*c]u8, __src: [*c]const u8) [*c]u8;
pub extern fn __stpncpy(noalias __dest: [*c]u8, noalias __src: [*c]const u8, __n: usize) [*c]u8;
pub extern fn stpncpy(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) [*c]u8;
pub extern fn strlcpy(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) c_ulong;
pub extern fn strlcat(__dest: [*c]u8, __src: [*c]const u8, __n: c_ulong) c_ulong;
pub const tinyobj_material_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
ambient: [3]f32 = @import("std").mem.zeroes([3]f32),
diffuse: [3]f32 = @import("std").mem.zeroes([3]f32),
specular: [3]f32 = @import("std").mem.zeroes([3]f32),
transmittance: [3]f32 = @import("std").mem.zeroes([3]f32),
emission: [3]f32 = @import("std").mem.zeroes([3]f32),
shininess: f32 = @import("std").mem.zeroes(f32),
ior: f32 = @import("std").mem.zeroes(f32),
dissolve: f32 = @import("std").mem.zeroes(f32),
illum: c_int = @import("std").mem.zeroes(c_int),
pad0: c_int = @import("std").mem.zeroes(c_int),
ambient_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
diffuse_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
specular_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
specular_highlight_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
bump_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
displacement_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
alpha_texname: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const tinyobj_shape_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
face_offset: c_uint = @import("std").mem.zeroes(c_uint),
length: c_uint = @import("std").mem.zeroes(c_uint),
};
pub const tinyobj_vertex_index_t = extern struct {
v_idx: c_int = @import("std").mem.zeroes(c_int),
vt_idx: c_int = @import("std").mem.zeroes(c_int),
vn_idx: c_int = @import("std").mem.zeroes(c_int),
};
pub const tinyobj_attrib_t = extern struct {
num_vertices: c_uint = @import("std").mem.zeroes(c_uint),
num_normals: c_uint = @import("std").mem.zeroes(c_uint),
num_texcoords: c_uint = @import("std").mem.zeroes(c_uint),
num_faces: c_uint = @import("std").mem.zeroes(c_uint),
num_face_num_verts: c_uint = @import("std").mem.zeroes(c_uint),
pad0: c_int = @import("std").mem.zeroes(c_int),
vertices: [*c]f32 = @import("std").mem.zeroes([*c]f32),
normals: [*c]f32 = @import("std").mem.zeroes([*c]f32),
texcoords: [*c]f32 = @import("std").mem.zeroes([*c]f32),
faces: [*c]tinyobj_vertex_index_t = @import("std").mem.zeroes([*c]tinyobj_vertex_index_t),
face_num_verts: [*c]c_int = @import("std").mem.zeroes([*c]c_int),
material_ids: [*c]c_int = @import("std").mem.zeroes([*c]c_int),
};
pub export fn tinyobj_parse_obj(arg_attrib: [*c]tinyobj_attrib_t, arg_shapes: [*c][*c]tinyobj_shape_t, arg_num_shapes: [*c]c_uint, arg_materials_out: [*c][*c]tinyobj_material_t, arg_num_materials_out: [*c]c_uint, arg_buf: [*c]const u8, arg_len: c_uint, arg_flags: c_uint) c_int {
var attrib = arg_attrib;
_ = &attrib;
var shapes = arg_shapes;
_ = &shapes;
var num_shapes = arg_num_shapes;
_ = &num_shapes;
var materials_out = arg_materials_out;
_ = &materials_out;
var num_materials_out = arg_num_materials_out;
_ = &num_materials_out;
var buf = arg_buf;
_ = &buf;
var len = arg_len;
_ = &len;
var flags = arg_flags;
_ = &flags;
var line_infos: [*c]LineInfo = null;
_ = &line_infos;
var commands: [*c]Command = null;
_ = &commands;
var num_lines: c_uint = 0;
_ = &num_lines;
var num_v: c_uint = 0;
_ = &num_v;
var num_vn: c_uint = 0;
_ = &num_vn;
var num_vt: c_uint = 0;
_ = &num_vt;
var num_f: c_uint = 0;
_ = &num_f;
var num_faces: c_uint = 0;
_ = &num_faces;
var mtllib_line_index: c_int = -@as(c_int, 1);
_ = &mtllib_line_index;
var materials: [*c]tinyobj_material_t = null;
_ = &materials;
var num_materials: c_uint = 0;
_ = &num_materials;
var material_table: hash_table_t = undefined;
_ = &material_table;
if (len < @as(c_uint, @bitCast(@as(c_int, 1)))) return -@as(c_int, 2);
if (attrib == @as([*c]tinyobj_attrib_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
if (shapes == @as([*c][*c]tinyobj_shape_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
if (num_shapes == @as([*c]c_uint, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
if (buf == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
if (materials_out == @as([*c][*c]tinyobj_material_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
if (num_materials_out == @as([*c]c_uint, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return -@as(c_int, 2);
tinyobj_attrib_init(attrib);
{
var i: c_uint = undefined;
_ = &i;
var end_idx: c_uint = len;
_ = &end_idx;
var prev_pos: c_uint = 0;
_ = &prev_pos;
var line_no: c_uint = 0;
_ = &line_no;
var last_line_ending: c_uint = 0;
_ = &last_line_ending;
{
i = 0;
while (i < end_idx) : (i +%= 1) {
if (is_line_ending(buf, i, end_idx) != 0) {
num_lines +%= 1;
last_line_ending = i;
}
}
}
if ((end_idx -% last_line_ending) > @as(c_uint, @bitCast(@as(c_int, 0)))) {
num_lines +%= 1;
}
if (num_lines == @as(c_uint, @bitCast(@as(c_int, 0)))) return -@as(c_int, 1);
line_infos = @as([*c]LineInfo, @ptrCast(@alignCast(malloc(@sizeOf(LineInfo) *% @as(c_ulong, @bitCast(@as(c_ulong, num_lines)))))));
{
i = 0;
while (i < end_idx) : (i +%= 1) {
if (is_line_ending(buf, i, end_idx) != 0) {
line_infos[line_no].pos = prev_pos;
line_infos[line_no].len = i -% prev_pos;
if ((i > @as(c_uint, @bitCast(@as(c_int, 0)))) and (@as(c_int, @bitCast(@as(c_uint, buf[i -% @as(c_uint, @bitCast(@as(c_int, 1)))]))) == @as(c_int, '\r'))) {
line_infos[line_no].len -%= 1;
}
prev_pos = i +% @as(c_uint, @bitCast(@as(c_int, 1)));
line_no +%= 1;
}
}
}
if ((end_idx -% last_line_ending) > @as(c_uint, @bitCast(@as(c_int, 0)))) {
line_infos[line_no].pos = prev_pos;
line_infos[line_no].len = (end_idx -% @as(c_uint, @bitCast(@as(c_int, 1)))) -% last_line_ending;
}
}
commands = @as([*c]Command, @ptrCast(@alignCast(malloc(@sizeOf(Command) *% @as(c_ulong, @bitCast(@as(c_ulong, num_lines)))))));
create_hash_table(@as(c_uint, @bitCast(@as(c_int, 10))), &material_table);
{
var i: c_uint = 0;
_ = &i;
{
i = 0;
while (i < num_lines) : (i +%= 1) {
var ret: c_int = parseLine(&commands[i], &buf[line_infos[i].pos], line_infos[i].len, @as(c_int, @bitCast(flags & @as(c_uint, @bitCast(@as(c_int, 1) << @intCast(0))))));
_ = &ret;
if (ret != 0) {
if (commands[i].type == @as(c_uint, @bitCast(COMMAND_V))) {
num_v +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_VN))) {
num_vn +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_VT))) {
num_vt +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_F))) {
num_f +%= commands[i].num_f;
num_faces +%= commands[i].num_f_num_verts;
}
if (commands[i].type == @as(c_uint, @bitCast(COMMAND_MTLLIB))) {
mtllib_line_index = @as(c_int, @bitCast(i));
}
}
}
}
}
if (line_infos != null) {
free(@as(?*anyopaque, @ptrCast(line_infos)));
}
if (((mtllib_line_index >= @as(c_int, 0)) and ((blk: {
const tmp = mtllib_line_index;
if (tmp >= 0) break :blk commands + @as(usize, @intCast(tmp)) else break :blk commands - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.mtllib_name != null)) and ((blk: {
const tmp = mtllib_line_index;
if (tmp >= 0) break :blk commands + @as(usize, @intCast(tmp)) else break :blk commands - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.mtllib_name_len > @as(c_uint, @bitCast(@as(c_int, 0))))) {
var filename: [*c]u8 = my_strndup((blk: {
const tmp = mtllib_line_index;
if (tmp >= 0) break :blk commands + @as(usize, @intCast(tmp)) else break :blk commands - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.mtllib_name, (blk: {
const tmp = mtllib_line_index;
if (tmp >= 0) break :blk commands + @as(usize, @intCast(tmp)) else break :blk commands - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.mtllib_name_len);
_ = &filename;
var ret: c_int = tinyobj_parse_and_index_mtl_file(&materials, &num_materials, filename, &material_table);
_ = &ret;
if (ret != @as(c_int, 0)) {
_ = fprintf(stderr, "TINYOBJ: Failed to parse material file '%s': %d\n", filename, ret);
}
free(@as(?*anyopaque, @ptrCast(filename)));
}
{
var v_count: c_uint = 0;
_ = &v_count;
var n_count: c_uint = 0;
_ = &n_count;
var t_count: c_uint = 0;
_ = &t_count;
var f_count: c_uint = 0;
_ = &f_count;
var face_count: c_uint = 0;
_ = &face_count;
var material_id: c_int = -@as(c_int, 1);
_ = &material_id;
var i: c_uint = 0;
_ = &i;
attrib.*.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, num_v)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
attrib.*.num_vertices = num_v;
attrib.*.normals = @as([*c]f32, @ptrCast(@alignCast(malloc((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, num_vn)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
attrib.*.num_normals = num_vn;
attrib.*.texcoords = @as([*c]f32, @ptrCast(@alignCast(malloc((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, num_vt)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2))))))));
attrib.*.num_texcoords = num_vt;
attrib.*.faces = @as([*c]tinyobj_vertex_index_t, @ptrCast(@alignCast(malloc(@sizeOf(tinyobj_vertex_index_t) *% @as(c_ulong, @bitCast(@as(c_ulong, num_f)))))));
attrib.*.face_num_verts = @as([*c]c_int, @ptrCast(@alignCast(malloc(@sizeOf(c_int) *% @as(c_ulong, @bitCast(@as(c_ulong, num_faces)))))));
attrib.*.num_faces = num_faces;
attrib.*.num_face_num_verts = num_f;
attrib.*.material_ids = @as([*c]c_int, @ptrCast(@alignCast(malloc(@sizeOf(c_int) *% @as(c_ulong, @bitCast(@as(c_ulong, num_faces)))))));
{
i = 0;
while (i < num_lines) : (i +%= 1) {
if (commands[i].type == @as(c_uint, @bitCast(COMMAND_EMPTY))) {
continue;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_USEMTL))) {
if ((commands[i].material_name != null) and (commands[i].material_name_len > @as(c_uint, @bitCast(@as(c_int, 0))))) {
var material_name_null_term: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, commands[i].material_name_len +% @as(c_uint, @bitCast(@as(c_int, 1))))))))));
_ = &material_name_null_term;
_ = memcpy(@as(?*anyopaque, @ptrCast(material_name_null_term)), @as(?*const anyopaque, @ptrCast(commands[i].material_name)), @as(c_ulong, @bitCast(@as(c_ulong, commands[i].material_name_len))));
material_name_null_term[commands[i].material_name_len] = 0;
if (hash_table_exists(material_name_null_term, &material_table) != 0) {
material_id = @as(c_int, @bitCast(@as(c_int, @truncate(hash_table_get(material_name_null_term, &material_table)))));
} else {
material_id = -@as(c_int, 1);
}
free(@as(?*anyopaque, @ptrCast(material_name_null_term)));
}
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_V))) {
attrib.*.vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% v_count) +% @as(c_uint, @bitCast(@as(c_int, 0)))] = commands[i].vx;
attrib.*.vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% v_count) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = commands[i].vy;
attrib.*.vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% v_count) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = commands[i].vz;
v_count +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_VN))) {
attrib.*.normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n_count) +% @as(c_uint, @bitCast(@as(c_int, 0)))] = commands[i].nx;
attrib.*.normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n_count) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = commands[i].ny;
attrib.*.normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n_count) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = commands[i].nz;
n_count +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_VT))) {
attrib.*.texcoords[(@as(c_uint, @bitCast(@as(c_int, 2))) *% t_count) +% @as(c_uint, @bitCast(@as(c_int, 0)))] = commands[i].tx;
attrib.*.texcoords[(@as(c_uint, @bitCast(@as(c_int, 2))) *% t_count) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = commands[i].ty;
t_count +%= 1;
} else if (commands[i].type == @as(c_uint, @bitCast(COMMAND_F))) {
var k: c_uint = 0;
_ = &k;
{
k = 0;
while (k < commands[i].num_f) : (k +%= 1) {
var vi: tinyobj_vertex_index_t = commands[i].f[k];
_ = &vi;
var v_idx: c_int = fixIndex(vi.v_idx, v_count);
_ = &v_idx;
var vn_idx: c_int = fixIndex(vi.vn_idx, n_count);
_ = &vn_idx;
var vt_idx: c_int = fixIndex(vi.vt_idx, t_count);
_ = &vt_idx;
attrib.*.faces[f_count +% k].v_idx = v_idx;
attrib.*.faces[f_count +% k].vn_idx = vn_idx;
attrib.*.faces[f_count +% k].vt_idx = vt_idx;
}
}
{
k = 0;
while (k < commands[i].num_f_num_verts) : (k +%= 1) {
attrib.*.material_ids[face_count +% k] = material_id;
attrib.*.face_num_verts[face_count +% k] = commands[i].f_num_verts[k];
}
}
f_count +%= commands[i].num_f;
face_count +%= commands[i].num_f_num_verts;
}
}
}
}
{
var face_count: c_uint = 0;
_ = &face_count;
var i: c_uint = 0;
_ = &i;
var n: c_uint = 0;
_ = &n;
var shape_idx: c_uint = 0;
_ = &shape_idx;
var shape_name: [*c]const u8 = null;
_ = &shape_name;
var shape_name_len: c_uint = 0;
_ = &shape_name_len;
var prev_shape_name: [*c]const u8 = null;
_ = &prev_shape_name;
var prev_shape_name_len: c_uint = 0;
_ = &prev_shape_name_len;
var prev_shape_face_offset: c_uint = 0;
_ = &prev_shape_face_offset;
var prev_face_offset: c_uint = 0;
_ = &prev_face_offset;
var prev_shape: tinyobj_shape_t = tinyobj_shape_t{
.name = null,
.face_offset = @as(c_uint, @bitCast(@as(c_int, 0))),
.length = @as(c_uint, @bitCast(@as(c_int, 0))),
};
_ = &prev_shape;
{
i = 0;
while (i < num_lines) : (i +%= 1) {
if ((commands[i].type == @as(c_uint, @bitCast(COMMAND_O))) or (commands[i].type == @as(c_uint, @bitCast(COMMAND_G)))) {
n +%= 1;
}
}
}
shapes.* = @as([*c]tinyobj_shape_t, @ptrCast(@alignCast(malloc(@sizeOf(tinyobj_shape_t) *% @as(c_ulong, @bitCast(@as(c_ulong, n +% @as(c_uint, @bitCast(@as(c_int, 1))))))))));
{
i = 0;
while (i < num_lines) : (i +%= 1) {
if ((commands[i].type == @as(c_uint, @bitCast(COMMAND_O))) or (commands[i].type == @as(c_uint, @bitCast(COMMAND_G)))) {
if (commands[i].type == @as(c_uint, @bitCast(COMMAND_O))) {
shape_name = commands[i].object_name;
shape_name_len = commands[i].object_name_len;
} else {
shape_name = commands[i].group_name;
shape_name_len = commands[i].group_name_len;
}
if (face_count == @as(c_uint, @bitCast(@as(c_int, 0)))) {
prev_shape_name = shape_name;
prev_shape_name_len = shape_name_len;
prev_shape_face_offset = face_count;
prev_face_offset = face_count;
} else {
if (shape_idx == @as(c_uint, @bitCast(@as(c_int, 0)))) {
shapes.*[shape_idx].name = my_strndup(prev_shape_name, prev_shape_name_len);
shapes.*[shape_idx].face_offset = prev_shape.face_offset;
shapes.*[shape_idx].length = face_count -% prev_face_offset;
shape_idx +%= 1;
prev_face_offset = face_count;
} else {
if ((face_count -% prev_face_offset) > @as(c_uint, @bitCast(@as(c_int, 0)))) {
shapes.*[shape_idx].name = my_strndup(prev_shape_name, prev_shape_name_len);
shapes.*[shape_idx].face_offset = prev_face_offset;
shapes.*[shape_idx].length = face_count -% prev_face_offset;
shape_idx +%= 1;
prev_face_offset = face_count;
}
}
prev_shape_name = shape_name;
prev_shape_name_len = shape_name_len;
prev_shape_face_offset = face_count;
}
}
if (commands[i].type == @as(c_uint, @bitCast(COMMAND_F))) {
face_count +%= 1;
}
}
}
if ((face_count -% prev_face_offset) > @as(c_uint, @bitCast(@as(c_int, 0)))) {
var length: c_uint = face_count -% prev_shape_face_offset;
_ = &length;
if (length > @as(c_uint, @bitCast(@as(c_int, 0)))) {
shapes.*[shape_idx].name = my_strndup(prev_shape_name, prev_shape_name_len);
shapes.*[shape_idx].face_offset = prev_face_offset;
shapes.*[shape_idx].length = face_count -% prev_face_offset;
shape_idx +%= 1;
}
} else {}
num_shapes.* = shape_idx;
}
if (commands != null) {
free(@as(?*anyopaque, @ptrCast(commands)));
}
destroy_hash_table(&material_table);
materials_out.* = materials;
num_materials_out.* = num_materials;
return @as(c_int, 0);
}
pub export fn tinyobj_parse_mtl_file(arg_materials_out: [*c][*c]tinyobj_material_t, arg_num_materials_out: [*c]c_uint, arg_filename: [*c]const u8) c_int {
var materials_out = arg_materials_out;
_ = &materials_out;
var num_materials_out = arg_num_materials_out;
_ = &num_materials_out;
var filename = arg_filename;
_ = &filename;
return tinyobj_parse_and_index_mtl_file(materials_out, num_materials_out, filename, null);
}
pub export fn tinyobj_attrib_init(arg_attrib: [*c]tinyobj_attrib_t) void {
var attrib = arg_attrib;
_ = &attrib;
attrib.*.vertices = null;
attrib.*.num_vertices = 0;
attrib.*.normals = null;
attrib.*.num_normals = 0;
attrib.*.texcoords = null;
attrib.*.num_texcoords = 0;
attrib.*.faces = null;
attrib.*.num_faces = 0;
attrib.*.face_num_verts = null;
attrib.*.num_face_num_verts = 0;
attrib.*.material_ids = null;
}
pub export fn tinyobj_attrib_free(arg_attrib: [*c]tinyobj_attrib_t) void {
var attrib = arg_attrib;
_ = &attrib;
if (attrib.*.vertices != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.vertices)));
}
if (attrib.*.normals != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.normals)));
}
if (attrib.*.texcoords != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.texcoords)));
}
if (attrib.*.faces != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.faces)));
}
if (attrib.*.face_num_verts != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.face_num_verts)));
}
if (attrib.*.material_ids != null) {
free(@as(?*anyopaque, @ptrCast(attrib.*.material_ids)));
}
}
pub export fn tinyobj_shapes_free(arg_shapes: [*c]tinyobj_shape_t, arg_num_shapes: c_uint) void {
var shapes = arg_shapes;
_ = &shapes;
var num_shapes = arg_num_shapes;
_ = &num_shapes;
var i: c_uint = undefined;
_ = &i;
if (shapes == @as([*c]tinyobj_shape_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return;
{
i = 0;
while (i < num_shapes) : (i +%= 1) {
if (shapes[i].name != null) {
free(@as(?*anyopaque, @ptrCast(shapes[i].name)));
}
}
}
free(@as(?*anyopaque, @ptrCast(shapes)));
}
pub export fn tinyobj_materials_free(arg_materials: [*c]tinyobj_material_t, arg_num_materials: c_uint) void {
var materials = arg_materials;
_ = &materials;
var num_materials = arg_num_materials;
_ = &num_materials;
var i: c_uint = undefined;
_ = &i;
if (materials == @as([*c]tinyobj_material_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return;
{
i = 0;
while (i < num_materials) : (i +%= 1) {
if (materials[i].name != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].name)));
}
if (materials[i].ambient_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].ambient_texname)));
}
if (materials[i].diffuse_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].diffuse_texname)));
}
if (materials[i].specular_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].specular_texname)));
}
if (materials[i].specular_highlight_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].specular_highlight_texname)));
}
if (materials[i].bump_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].bump_texname)));
}
if (materials[i].displacement_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].displacement_texname)));
}
if (materials[i].alpha_texname != null) {
free(@as(?*anyopaque, @ptrCast(materials[i].alpha_texname)));
}
}
}
free(@as(?*anyopaque, @ptrCast(materials)));
}
pub extern fn __assert_fail(__assertion: [*c]const u8, __file: [*c]const u8, __line: c_uint, __function: [*c]const u8) noreturn;
pub extern fn __assert_perror_fail(__errnum: c_int, __file: [*c]const u8, __line: c_uint, __function: [*c]const u8) noreturn;
pub extern fn __assert(__assertion: [*c]const u8, __file: [*c]const u8, __line: c_int) noreturn;
pub extern fn __errno_location() [*c]c_int;
pub fn skip_space(arg_token: [*c][*c]const u8) callconv(.C) void {
var token = arg_token;
_ = &token;
while ((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\t'))) {
token.* += 1;
}
}
pub fn skip_space_and_cr(arg_token: [*c][*c]const u8) callconv(.C) void {
var token = arg_token;
_ = &token;
while (((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\t'))) or (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\r'))) {
token.* += 1;
}
}
pub fn until_space(arg_token: [*c]const u8) callconv(.C) c_int {
var token = arg_token;
_ = &token;
var p: [*c]const u8 = token;
_ = &p;
while ((((@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\x00')) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, ' '))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\t'))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\r'))) {
p += 1;
}
return @as(c_int, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(p) -% @intFromPtr(token))), @sizeOf(u8))))));
}
pub fn length_until_newline(arg_token: [*c]const u8, arg_n: c_uint) callconv(.C) c_uint {
var token = arg_token;
_ = &token;
var n = arg_n;
_ = &n;
var len: c_uint = 0;
_ = &len;
{
len = 0;
while (len < (n -% @as(c_uint, @bitCast(@as(c_int, 1))))) : (len +%= 1) {
if (@as(c_int, @bitCast(@as(c_uint, token[len]))) == @as(c_int, '\n')) {
break;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[len]))) == @as(c_int, '\r')) and ((len < (n -% @as(c_uint, @bitCast(@as(c_int, 2))))) and (@as(c_int, @bitCast(@as(c_uint, token[len +% @as(c_uint, @bitCast(@as(c_int, 1)))]))) != @as(c_int, '\n')))) {
break;
}
}
}
return len;
}
pub fn length_until_line_feed(arg_token: [*c]const u8, arg_n: c_uint) callconv(.C) c_uint {
var token = arg_token;
_ = &token;
var n = arg_n;
_ = &n;
var len: c_uint = 0;
_ = &len;
{
len = 0;
while (len < n) : (len +%= 1) {
if ((@as(c_int, @bitCast(@as(c_uint, token[len]))) == @as(c_int, '\n')) or (@as(c_int, @bitCast(@as(c_uint, token[len]))) == @as(c_int, '\r'))) {
break;
}
}
}
return len;
}
pub fn my_atoi(arg_c: [*c]const u8) callconv(.C) c_int {
var c = arg_c;
_ = &c;
var value: c_int = 0;
_ = &value;
var sign: c_int = 1;
_ = &sign;
if ((@as(c_int, @bitCast(@as(c_uint, c.*))) == @as(c_int, '+')) or (@as(c_int, @bitCast(@as(c_uint, c.*))) == @as(c_int, '-'))) {
if (@as(c_int, @bitCast(@as(c_uint, c.*))) == @as(c_int, '-')) {
sign = -@as(c_int, 1);
}
c += 1;
}
while ((@as(c_int, @bitCast(@as(c_uint, c.*))) >= @as(c_int, '0')) and (@as(c_int, @bitCast(@as(c_uint, c.*))) <= @as(c_int, '9'))) {
value *= @as(c_int, 10);
value += @as(c_int, @bitCast(@as(c_uint, c.*))) - @as(c_int, '0');
c += 1;
}
return value * sign;
}
pub fn fixIndex(arg_idx: c_int, arg_n: c_uint) callconv(.C) c_int {
var idx = arg_idx;
_ = &idx;
var n = arg_n;
_ = &n;
if (idx > @as(c_int, 0)) return idx - @as(c_int, 1);
if (idx == @as(c_int, 0)) return 0;
return @as(c_int, @bitCast(n)) + idx;
}
pub fn parseRawTriple(arg_token: [*c][*c]const u8) callconv(.C) tinyobj_vertex_index_t {
var token = arg_token;
_ = &token;
var vi: tinyobj_vertex_index_t = undefined;
_ = &vi;
vi.v_idx = @as(c_int, @bitCast(@as(c_uint, 2147483648)));
vi.vn_idx = @as(c_int, @bitCast(@as(c_uint, 2147483648)));
vi.vt_idx = @as(c_int, @bitCast(@as(c_uint, 2147483648)));
vi.v_idx = my_atoi(token.*);
while (((((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\x00')) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, ' '))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\t'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\r'))) {
token.* += 1;
}
if (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/')) {
return vi;
}
token.* += 1;
if (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '/')) {
token.* += 1;
vi.vn_idx = my_atoi(token.*);
while (((((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\x00')) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, ' '))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\t'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\r'))) {
token.* += 1;
}
return vi;
}
vi.vt_idx = my_atoi(token.*);
while (((((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\x00')) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, ' '))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\t'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\r'))) {
token.* += 1;
}
if (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/')) {
return vi;
}
token.* += 1;
vi.vn_idx = my_atoi(token.*);
while (((((@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\x00')) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '/'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, ' '))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\t'))) and (@as(c_int, @bitCast(@as(c_uint, token.*[@as(c_uint, @intCast(@as(c_int, 0)))]))) != @as(c_int, '\r'))) {
token.* += 1;
}
return vi;
}
pub fn parseInt(arg_token: [*c][*c]const u8) callconv(.C) c_int {
var token = arg_token;
_ = &token;
var i: c_int = 0;
_ = &i;
skip_space(token);
i = my_atoi(token.*);
token.* += @as(usize, @bitCast(@as(isize, @intCast(until_space(token.*)))));
return i;
}
// ./external/tinyobj_loader_c.h:334:5: warning: TODO implement translation of stmt class GotoStmtClass
// ./external/tinyobj_loader_c.h:296:12: warning: unable to translate function, demoted to extern
pub extern fn tryParseDouble(arg_s: [*c]const u8, arg_s_end: [*c]const u8, arg_result: [*c]f64) callconv(.C) c_int;
pub fn parseFloat(arg_token: [*c][*c]const u8) callconv(.C) f32 {
var token = arg_token;
_ = &token;
var end: [*c]const u8 = undefined;
_ = &end;
var val: f64 = 0.0;
_ = &val;
var f: f32 = 0.0;
_ = &f;
skip_space(token);
end = token.* + @as(usize, @bitCast(@as(isize, @intCast(until_space(token.*)))));
val = 0.0;
_ = tryParseDouble(token.*, end, &val);
f = @as(f32, @floatCast(val));
token.* = end;
return f;
}
pub fn parseFloat2(arg_x: [*c]f32, arg_y: [*c]f32, arg_token: [*c][*c]const u8) callconv(.C) void {
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var token = arg_token;
_ = &token;
x.* = parseFloat(token);
y.* = parseFloat(token);
}
pub fn parseFloat3(arg_x: [*c]f32, arg_y: [*c]f32, arg_z: [*c]f32, arg_token: [*c][*c]const u8) callconv(.C) void {
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var token = arg_token;
_ = &token;
x.* = parseFloat(token);
y.* = parseFloat(token);
z.* = parseFloat(token);
}
pub fn my_strnlen(arg_s: [*c]const u8, arg_n: c_uint) callconv(.C) c_uint {
var s = arg_s;
_ = &s;
var n = arg_n;
_ = &n;
var p: [*c]const u8 = @as([*c]const u8, @ptrCast(@alignCast(memchr(@as(?*const anyopaque, @ptrCast(s)), @as(c_int, 0), @as(c_ulong, @bitCast(@as(c_ulong, n)))))));
_ = &p;
return if (p != null) @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(p) -% @intFromPtr(s))), @sizeOf(u8)))))) else n;
}
pub fn my_strdup(arg_s: [*c]const u8, arg_max_length: c_uint) callconv(.C) [*c]u8 {
var s = arg_s;
_ = &s;
var max_length = arg_max_length;
_ = &max_length;
var d: [*c]u8 = undefined;
_ = &d;
var len: c_uint = undefined;
_ = &len;
if (s == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return null;
len = length_until_line_feed(s, max_length);
d = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, len +% @as(c_uint, @bitCast(@as(c_int, 1))))))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(d)), @as(?*const anyopaque, @ptrCast(s)), @as(c_ulong, @bitCast(@as(c_ulong, len))));
d[len] = '\x00';
return d;
}
pub fn my_strndup(arg_s: [*c]const u8, arg_len: c_uint) callconv(.C) [*c]u8 {
var s = arg_s;
_ = &s;
var len = arg_len;
_ = &len;
var d: [*c]u8 = undefined;
_ = &d;
var slen: c_uint = undefined;
_ = &slen;
if (s == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return null;
if (len == @as(c_uint, @bitCast(@as(c_int, 0)))) return null;
slen = my_strnlen(s, len);
d = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, slen +% @as(c_uint, @bitCast(@as(c_int, 1))))))))));
if (!(d != null)) {
return null;
}
_ = memcpy(@as(?*anyopaque, @ptrCast(d)), @as(?*const anyopaque, @ptrCast(s)), @as(c_ulong, @bitCast(@as(c_ulong, slen))));
d[slen] = '\x00';
return d;
}
pub export fn dynamic_fgets(arg_buf: [*c][*c]u8, arg_size: [*c]c_uint, arg_file: [*c]FILE) [*c]u8 {
var buf = arg_buf;
_ = &buf;
var size = arg_size;
_ = &size;
var file = arg_file;
_ = &file;
var offset: [*c]u8 = undefined;
_ = &offset;
var ret: [*c]u8 = undefined;
_ = &ret;
var old_size: c_uint = undefined;
_ = &old_size;
if (!((blk: {
const tmp = fgets(buf.*, @as(c_int, @bitCast(size.*)), file);
ret = tmp;
break :blk tmp;
}) != null)) {
return ret;
}
if (@as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))) != strchr(buf.*, @as(c_int, '\n'))) {
return ret;
}
while (true) {
old_size = size.*;
size.* *%= @as(c_uint, @bitCast(@as(c_int, 2)));
buf.* = @as([*c]u8, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(buf.*)), @as(c_ulong, @bitCast(@as(c_ulong, size.*)))))));
offset = &buf.*[old_size -% @as(c_uint, @bitCast(@as(c_int, 1)))];
ret = fgets(offset, @as(c_int, @bitCast(old_size +% @as(c_uint, @bitCast(@as(c_int, 1))))), file);
if (!((ret != null) and (@as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))) == strchr(buf.*, @as(c_int, '\n'))))) break;
}
return ret;
}
pub fn initMaterial(arg_material: [*c]tinyobj_material_t) callconv(.C) void {
var material = arg_material;
_ = &material;
var i: c_int = undefined;
_ = &i;
material.*.name = null;
material.*.ambient_texname = null;
material.*.diffuse_texname = null;
material.*.specular_texname = null;
material.*.specular_highlight_texname = null;
material.*.bump_texname = null;
material.*.displacement_texname = null;
material.*.alpha_texname = null;
{
i = 0;
while (i < @as(c_int, 3)) : (i += 1) {
material.*.ambient[@as(c_uint, @intCast(i))] = 0.0;
material.*.diffuse[@as(c_uint, @intCast(i))] = 0.0;
material.*.specular[@as(c_uint, @intCast(i))] = 0.0;
material.*.transmittance[@as(c_uint, @intCast(i))] = 0.0;
material.*.emission[@as(c_uint, @intCast(i))] = 0.0;
}
}
material.*.illum = 0;
material.*.dissolve = 1.0;
material.*.shininess = 1.0;
material.*.ior = 1.0;
}
pub const struct_hash_table_entry_t = extern struct {
hash: c_ulong = @import("std").mem.zeroes(c_ulong),
filled: c_int = @import("std").mem.zeroes(c_int),
pad0: c_int = @import("std").mem.zeroes(c_int),
value: c_long = @import("std").mem.zeroes(c_long),
next: [*c]struct_hash_table_entry_t = @import("std").mem.zeroes([*c]struct_hash_table_entry_t),
};
pub const hash_table_entry_t = struct_hash_table_entry_t;
pub const hash_table_t = extern struct {
hashes: [*c]c_ulong = @import("std").mem.zeroes([*c]c_ulong),
entries: [*c]hash_table_entry_t = @import("std").mem.zeroes([*c]hash_table_entry_t),
capacity: c_uint = @import("std").mem.zeroes(c_uint),
n: c_uint = @import("std").mem.zeroes(c_uint),
};
pub fn hash_djb2(arg_str: [*c]const u8) callconv(.C) c_ulong {
var str = arg_str;
_ = &str;
var hash: c_ulong = @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5381))));
_ = &hash;
var c: c_int = undefined;
_ = &c;
while ((blk: {
const tmp = @as(c_int, @bitCast(@as(c_uint, (blk_1: {
const ref = &str;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
}).*)));
c = tmp;
break :blk tmp;
}) != 0) {
hash = ((hash << @intCast(5)) +% hash) +% @as(c_ulong, @bitCast(@as(c_long, c)));
}
return hash;
}
pub fn create_hash_table(arg_start_capacity: c_uint, arg_hash_table: [*c]hash_table_t) callconv(.C) void {
var start_capacity = arg_start_capacity;
_ = &start_capacity;
var hash_table = arg_hash_table;
_ = &hash_table;
if (start_capacity < @as(c_uint, @bitCast(@as(c_int, 1)))) {
start_capacity = 10;
}
hash_table.*.hashes = @as([*c]c_ulong, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, start_capacity))) *% @sizeOf(c_ulong)))));
hash_table.*.entries = @as([*c]hash_table_entry_t, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_ulong, start_capacity))), @sizeOf(hash_table_entry_t)))));
hash_table.*.capacity = start_capacity;
hash_table.*.n = 0;
}
pub fn destroy_hash_table(arg_hash_table: [*c]hash_table_t) callconv(.C) void {
var hash_table = arg_hash_table;
_ = &hash_table;
free(@as(?*anyopaque, @ptrCast(hash_table.*.entries)));
free(@as(?*anyopaque, @ptrCast(hash_table.*.hashes)));
}
pub fn hash_table_insert_value(arg_hash: c_ulong, arg_value: c_long, arg_hash_table: [*c]hash_table_t) callconv(.C) c_int {
var hash = arg_hash;
_ = &hash;
var value = arg_value;
_ = &value;
var hash_table = arg_hash_table;
_ = &hash_table;
var start_index: c_uint = @as(c_uint, @bitCast(@as(c_uint, @truncate(hash % @as(c_ulong, @bitCast(@as(c_ulong, hash_table.*.capacity)))))));
_ = &start_index;
var index_1: c_uint = start_index;
_ = &index_1;
var start_entry: [*c]hash_table_entry_t = hash_table.*.entries + start_index;
_ = &start_entry;
var i: c_uint = undefined;
_ = &i;
var entry: [*c]hash_table_entry_t = undefined;
_ = &entry;
{
i = 1;
while (hash_table.*.entries[index_1].filled != 0) : (i +%= 1) {
if (i >= hash_table.*.capacity) return 1;
index_1 = (start_index +% (i *% i)) % hash_table.*.capacity;
}
}
entry = hash_table.*.entries + index_1;
entry.*.hash = hash;
entry.*.filled = 1;
entry.*.value = value;
if (index_1 != start_index) {
entry.*.next = start_entry.*.next;
start_entry.*.next = entry;
}
return 0;
}
pub fn hash_table_insert(arg_hash: c_ulong, arg_value: c_long, arg_hash_table: [*c]hash_table_t) callconv(.C) c_int {
var hash = arg_hash;
_ = &hash;
var value = arg_value;
_ = &value;
var hash_table = arg_hash_table;
_ = &hash_table;
var ret: c_int = hash_table_insert_value(hash, value, hash_table);
_ = &ret;
if (ret == @as(c_int, 0)) {
hash_table.*.hashes[hash_table.*.n] = hash;
hash_table.*.n +%= 1;
}
return ret;
}
pub fn hash_table_find(arg_hash: c_ulong, arg_hash_table: [*c]hash_table_t) callconv(.C) [*c]hash_table_entry_t {
var hash = arg_hash;
_ = &hash;
var hash_table = arg_hash_table;
_ = &hash_table;
var entry: [*c]hash_table_entry_t = hash_table.*.entries + (hash % @as(c_ulong, @bitCast(@as(c_ulong, hash_table.*.capacity))));
_ = &entry;
while (entry != null) {
if ((entry.*.hash == hash) and (entry.*.filled != 0)) {
return entry;
}
entry = entry.*.next;
}
return null;
}
pub fn hash_table_maybe_grow(arg_new_n: c_uint, arg_hash_table: [*c]hash_table_t) callconv(.C) void {
var new_n = arg_new_n;
_ = &new_n;
var hash_table = arg_hash_table;
_ = &hash_table;
var new_capacity: c_uint = undefined;
_ = &new_capacity;
var new_hash_table: hash_table_t = undefined;
_ = &new_hash_table;
var i: c_uint = undefined;
_ = &i;
if (new_n <= hash_table.*.capacity) {
return;
}
new_capacity = @as(c_uint, @bitCast(@as(c_int, 2))) *% (if ((@as(c_uint, @bitCast(@as(c_int, 2))) *% hash_table.*.capacity) > new_n) hash_table.*.capacity else new_n);
new_hash_table.hashes = blk: {
const tmp = @as([*c]c_ulong, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(hash_table.*.hashes)), @sizeOf(c_ulong) *% @as(c_ulong, @bitCast(@as(c_ulong, new_capacity)))))));
hash_table.*.hashes = tmp;
break :blk tmp;
};
new_hash_table.entries = @as([*c]hash_table_entry_t, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_ulong, new_capacity))), @sizeOf(hash_table_entry_t)))));
new_hash_table.capacity = new_capacity;
new_hash_table.n = hash_table.*.n;
{
i = 0;
while (i < hash_table.*.capacity) : (i +%= 1) {
var entry: [*c]hash_table_entry_t = hash_table_find(hash_table.*.hashes[i], hash_table);
_ = &entry;
_ = hash_table_insert_value(hash_table.*.hashes[i], entry.*.value, &new_hash_table);
}
}
free(@as(?*anyopaque, @ptrCast(hash_table.*.entries)));
hash_table.* = new_hash_table;
}
pub fn hash_table_exists(arg_name: [*c]const u8, arg_hash_table: [*c]hash_table_t) callconv(.C) c_int {
var name = arg_name;
_ = &name;
var hash_table = arg_hash_table;
_ = &hash_table;
return @intFromBool(hash_table_find(hash_djb2(@as([*c]const u8, @ptrCast(@alignCast(name)))), hash_table) != @as([*c]hash_table_entry_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))));
}
pub fn hash_table_set(arg_name: [*c]const u8, arg_val: c_uint, arg_hash_table: [*c]hash_table_t) callconv(.C) void {
var name = arg_name;
_ = &name;
var val = arg_val;
_ = &val;
var hash_table = arg_hash_table;
_ = &hash_table;
var hash: c_ulong = hash_djb2(@as([*c]const u8, @ptrCast(@alignCast(name))));
_ = &hash;
var entry: [*c]hash_table_entry_t = hash_table_find(hash, hash_table);
_ = &entry;
if (entry != null) {
entry.*.value = @as(c_long, @bitCast(@as(c_ulong, val)));
return;
}
while (true) {
hash_table_maybe_grow(hash_table.*.n +% @as(c_uint, @bitCast(@as(c_int, 1))), hash_table);
if (!(hash_table_insert(hash, @as(c_long, @bitCast(@as(c_ulong, val))), hash_table) != @as(c_int, 0))) break;
}
}
pub fn hash_table_get(arg_name: [*c]const u8, arg_hash_table: [*c]hash_table_t) callconv(.C) c_long {
var name = arg_name;
_ = &name;
var hash_table = arg_hash_table;
_ = &hash_table;
var ret: [*c]hash_table_entry_t = hash_table_find(hash_djb2(@as([*c]const u8, @ptrCast(@alignCast(name)))), hash_table);
_ = &ret;
return ret.*.value;
}
pub fn tinyobj_material_add(arg_prev: [*c]tinyobj_material_t, arg_num_materials: c_uint, arg_new_mat: [*c]tinyobj_material_t) callconv(.C) [*c]tinyobj_material_t {
var prev = arg_prev;
_ = &prev;
var num_materials = arg_num_materials;
_ = &num_materials;
var new_mat = arg_new_mat;
_ = &new_mat;
var dst: [*c]tinyobj_material_t = undefined;
_ = &dst;
dst = @as([*c]tinyobj_material_t, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(prev)), @sizeOf(tinyobj_material_t) *% @as(c_ulong, @bitCast(@as(c_ulong, num_materials +% @as(c_uint, @bitCast(@as(c_int, 1))))))))));
dst[num_materials] = new_mat.*;
return dst;
}
pub fn tinyobj_parse_and_index_mtl_file(arg_materials_out: [*c][*c]tinyobj_material_t, arg_num_materials_out: [*c]c_uint, arg_filename: [*c]const u8, arg_material_table: [*c]hash_table_t) callconv(.C) c_int {
var materials_out = arg_materials_out;
_ = &materials_out;
var num_materials_out = arg_num_materials_out;
_ = &num_materials_out;
var filename = arg_filename;
_ = &filename;
var material_table = arg_material_table;
_ = &material_table;
var material: tinyobj_material_t = undefined;
_ = &material;
var buffer_size: c_uint = 128;
_ = &buffer_size;
var linebuf: [*c]u8 = undefined;
_ = &linebuf;
var fp: [*c]FILE = undefined;
_ = &fp;
var num_materials: c_uint = 0;
_ = &num_materials;
var materials: [*c]tinyobj_material_t = null;
_ = &materials;
var has_previous_material: c_int = 0;
_ = &has_previous_material;
var line_end: [*c]const u8 = null;
_ = &line_end;
if (materials_out == @as([*c][*c]tinyobj_material_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return -@as(c_int, 2);
}
if (num_materials_out == @as([*c]c_uint, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return -@as(c_int, 2);
}
materials_out.* = null;
num_materials_out.* = 0;
fp = fopen(filename, "rt");
if (!(fp != null)) {
_ = fprintf(stderr, "TINYOBJ: Error reading file '%s': %s (%d)\n", filename, strerror(__errno_location().*), __errno_location().*);
return -@as(c_int, 3);
}
initMaterial(&material);
linebuf = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, buffer_size)))))));
while (@as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))) != dynamic_fgets(&linebuf, &buffer_size, fp)) {
var token: [*c]const u8 = linebuf;
_ = &token;
line_end = token + strlen(token);
token += @as([*c]const u8, @ptrFromInt(strspn(token, " \t")));
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (token != null) {} else {
__assert_fail("token", "./external/tinyobj_loader_c.h", @as(c_uint, @bitCast(@as(c_int, 767))), "int tinyobj_parse_and_index_mtl_file(tinyobj_material_t **, unsigned int *, const char *, hash_table_t *)");
};
};
};
if (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\x00')) continue;
if (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '#')) continue;
if ((@as(c_int, 0) == strncmp(token, "newmtl", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
var namebuf: [4096]u8 = undefined;
_ = &namebuf;
if (has_previous_material != 0) {
materials = tinyobj_material_add(materials, num_materials, &material);
num_materials +%= 1;
} else {
has_previous_material = 1;
}
initMaterial(&material);
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
_ = sscanf(token, "%s", @as([*c]u8, @ptrCast(@alignCast(&namebuf))));
material.name = my_strdup(@as([*c]u8, @ptrCast(@alignCast(&namebuf))), @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
if (material_table != null) {
hash_table_set(material.name, num_materials, material_table);
}
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'K')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'a'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var r: f32 = undefined;
_ = &r;
var g: f32 = undefined;
_ = &g;
var b: f32 = undefined;
_ = &b;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&r, &g, &b, &token);
material.ambient[@as(c_uint, @intCast(@as(c_int, 0)))] = r;
material.ambient[@as(c_uint, @intCast(@as(c_int, 1)))] = g;
material.ambient[@as(c_uint, @intCast(@as(c_int, 2)))] = b;
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'K')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'd'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var r: f32 = undefined;
_ = &r;
var g: f32 = undefined;
_ = &g;
var b: f32 = undefined;
_ = &b;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&r, &g, &b, &token);
material.diffuse[@as(c_uint, @intCast(@as(c_int, 0)))] = r;
material.diffuse[@as(c_uint, @intCast(@as(c_int, 1)))] = g;
material.diffuse[@as(c_uint, @intCast(@as(c_int, 2)))] = b;
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'K')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 's'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var r: f32 = undefined;
_ = &r;
var g: f32 = undefined;
_ = &g;
var b: f32 = undefined;
_ = &b;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&r, &g, &b, &token);
material.specular[@as(c_uint, @intCast(@as(c_int, 0)))] = r;
material.specular[@as(c_uint, @intCast(@as(c_int, 1)))] = g;
material.specular[@as(c_uint, @intCast(@as(c_int, 2)))] = b;
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'K')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 't'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var r: f32 = undefined;
_ = &r;
var g: f32 = undefined;
_ = &g;
var b: f32 = undefined;
_ = &b;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&r, &g, &b, &token);
material.transmittance[@as(c_uint, @intCast(@as(c_int, 0)))] = r;
material.transmittance[@as(c_uint, @intCast(@as(c_int, 1)))] = g;
material.transmittance[@as(c_uint, @intCast(@as(c_int, 2)))] = b;
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'N')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'i'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
material.ior = parseFloat(&token);
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'K')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'e'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var r: f32 = undefined;
_ = &r;
var g: f32 = undefined;
_ = &g;
var b: f32 = undefined;
_ = &b;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&r, &g, &b, &token);
material.emission[@as(c_uint, @intCast(@as(c_int, 0)))] = r;
material.emission[@as(c_uint, @intCast(@as(c_int, 1)))] = g;
material.emission[@as(c_uint, @intCast(@as(c_int, 2)))] = b;
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'N')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 's'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
material.shininess = parseFloat(&token);
continue;
}
if ((@as(c_int, 0) == strncmp(token, "illum", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 5)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 5)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6)))));
material.illum = parseInt(&token);
continue;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'd')) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
material.dissolve = parseFloat(&token);
continue;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'T')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'r'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
material.dissolve = 1.0 - parseFloat(&token);
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_Ka", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
material.ambient_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_Kd", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
material.diffuse_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_Ks", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
material.specular_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_Ns", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
material.specular_highlight_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_bump", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 8)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 8)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 8)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 9)))));
material.bump_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "map_d", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 5)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 5)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6)))));
material.alpha_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "bump", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 4)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 4)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 5)))));
material.bump_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
if ((@as(c_int, 0) == strncmp(token, "disp", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 4)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 4)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 5)))));
material.displacement_texname = my_strdup(token, @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(line_end) -% @intFromPtr(token))), @sizeOf(u8)))))));
continue;
}
}
_ = fclose(fp);
if (material.name != null) {
materials = tinyobj_material_add(materials, num_materials, &material);
num_materials +%= 1;
}
num_materials_out.* = num_materials;
materials_out.* = materials;
if (linebuf != null) {
free(@as(?*anyopaque, @ptrCast(linebuf)));
}
return @as(c_int, 0);
}
pub const COMMAND_EMPTY: c_int = 0;
pub const COMMAND_V: c_int = 1;
pub const COMMAND_VN: c_int = 2;
pub const COMMAND_VT: c_int = 3;
pub const COMMAND_F: c_int = 4;
pub const COMMAND_G: c_int = 5;
pub const COMMAND_O: c_int = 6;
pub const COMMAND_USEMTL: c_int = 7;
pub const COMMAND_MTLLIB: c_int = 8;
pub const CommandType = c_uint;
pub const Command = extern struct {
vx: f32 = @import("std").mem.zeroes(f32),
vy: f32 = @import("std").mem.zeroes(f32),
vz: f32 = @import("std").mem.zeroes(f32),
nx: f32 = @import("std").mem.zeroes(f32),
ny: f32 = @import("std").mem.zeroes(f32),
nz: f32 = @import("std").mem.zeroes(f32),
tx: f32 = @import("std").mem.zeroes(f32),
ty: f32 = @import("std").mem.zeroes(f32),
f: [16]tinyobj_vertex_index_t = @import("std").mem.zeroes([16]tinyobj_vertex_index_t),
num_f: c_uint = @import("std").mem.zeroes(c_uint),
f_num_verts: [16]c_int = @import("std").mem.zeroes([16]c_int),
num_f_num_verts: c_uint = @import("std").mem.zeroes(c_uint),
group_name: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
group_name_len: c_uint = @import("std").mem.zeroes(c_uint),
pad0: c_int = @import("std").mem.zeroes(c_int),
object_name: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
object_name_len: c_uint = @import("std").mem.zeroes(c_uint),
pad1: c_int = @import("std").mem.zeroes(c_int),
material_name: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
material_name_len: c_uint = @import("std").mem.zeroes(c_uint),
pad2: c_int = @import("std").mem.zeroes(c_int),
mtllib_name: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
mtllib_name_len: c_uint = @import("std").mem.zeroes(c_uint),
type: CommandType = @import("std").mem.zeroes(CommandType),
};
pub fn parseLine(arg_command: [*c]Command, arg_p: [*c]const u8, arg_p_len: c_uint, arg_triangulate: c_int) callconv(.C) c_int {
var command = arg_command;
_ = &command;
var p = arg_p;
_ = &p;
var p_len = arg_p_len;
_ = &p_len;
var triangulate = arg_triangulate;
_ = &triangulate;
var linebuf: [4096]u8 = undefined;
_ = &linebuf;
var token: [*c]const u8 = undefined;
_ = &token;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (p_len < @as(c_uint, @bitCast(@as(c_int, 4095)))) {} else {
__assert_fail("p_len < 4095", "./external/tinyobj_loader_c.h", @as(c_uint, @bitCast(@as(c_int, 1023))), "int parseLine(Command *, const char *, unsigned int, int)");
};
};
};
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&linebuf))))), @as(?*const anyopaque, @ptrCast(p)), @as(c_ulong, @bitCast(@as(c_ulong, p_len))));
linebuf[p_len] = '\x00';
token = @as([*c]u8, @ptrCast(@alignCast(&linebuf)));
command.*.type = @as(c_uint, @bitCast(COMMAND_EMPTY));
skip_space(&token);
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (token != null) {} else {
__assert_fail("token", "./external/tinyobj_loader_c.h", @as(c_uint, @bitCast(@as(c_int, 1035))), "int parseLine(Command *, const char *, unsigned int, int)");
};
};
};
if (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\x00')) {
return 0;
}
if (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '#')) {
return 0;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'v')) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, '\t')))) {
var x: f32 = undefined;
_ = &x;
var y: f32 = undefined;
_ = &y;
var z: f32 = undefined;
_ = &z;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
parseFloat3(&x, &y, &z, &token);
command.*.vx = x;
command.*.vy = y;
command.*.vz = z;
command.*.type = @as(c_uint, @bitCast(COMMAND_V));
return 1;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'v')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'n'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var x: f32 = undefined;
_ = &x;
var y: f32 = undefined;
_ = &y;
var z: f32 = undefined;
_ = &z;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
parseFloat3(&x, &y, &z, &token);
command.*.nx = x;
command.*.ny = y;
command.*.nz = z;
command.*.type = @as(c_uint, @bitCast(COMMAND_VN));
return 1;
}
if (((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'v')) and (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 't'))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, '\t')))) {
var x: f32 = undefined;
_ = &x;
var y: f32 = undefined;
_ = &y;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
parseFloat2(&x, &y, &token);
command.*.tx = x;
command.*.ty = y;
command.*.type = @as(c_uint, @bitCast(COMMAND_VT));
return 1;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'f')) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, '\t')))) {
var num_f: c_uint = 0;
_ = &num_f;
var f: [16]tinyobj_vertex_index_t = undefined;
_ = &f;
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
skip_space(&token);
while (!(((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\r')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\n'))) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, '\x00')))) {
var vi: tinyobj_vertex_index_t = parseRawTriple(&token);
_ = &vi;
skip_space_and_cr(&token);
f[num_f] = vi;
num_f +%= 1;
}
command.*.type = @as(c_uint, @bitCast(COMMAND_F));
if (triangulate != 0) {
var k: c_uint = undefined;
_ = &k;
var n: c_uint = 0;
_ = &n;
var @"i0": tinyobj_vertex_index_t = f[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &@"i0";
var @"i1": tinyobj_vertex_index_t = undefined;
_ = &@"i1";
var @"i2": tinyobj_vertex_index_t = f[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &@"i2";
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((@as(c_uint, @bitCast(@as(c_int, 3))) *% num_f) < @as(c_uint, @bitCast(@as(c_int, 16)))) {} else {
__assert_fail("3 * num_f < TINYOBJ_MAX_FACES_PER_F_LINE", "./external/tinyobj_loader_c.h", @as(c_uint, @bitCast(@as(c_int, 1105))), "int parseLine(Command *, const char *, unsigned int, int)");
};
};
};
{
k = 2;
while (k < num_f) : (k +%= 1) {
@"i1" = @"i2";
@"i2" = f[k];
command.*.f[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n) +% @as(c_uint, @bitCast(@as(c_int, 0)))] = @"i0";
command.*.f[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = @"i1";
command.*.f[(@as(c_uint, @bitCast(@as(c_int, 3))) *% n) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = @"i2";
command.*.f_num_verts[n] = 3;
n +%= 1;
}
}
command.*.num_f = @as(c_uint, @bitCast(@as(c_int, 3))) *% n;
command.*.num_f_num_verts = n;
} else {
var k: c_uint = 0;
_ = &k;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (num_f < @as(c_uint, @bitCast(@as(c_int, 16)))) {} else {
__assert_fail("num_f < TINYOBJ_MAX_FACES_PER_F_LINE", "./external/tinyobj_loader_c.h", @as(c_uint, @bitCast(@as(c_int, 1122))), "int parseLine(Command *, const char *, unsigned int, int)");
};
};
};
{
k = 0;
while (k < num_f) : (k +%= 1) {
command.*.f[k] = f[k];
}
}
command.*.num_f = num_f;
command.*.f_num_verts[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(c_int, @bitCast(num_f));
command.*.num_f_num_verts = 1;
}
return 1;
}
if ((@as(c_int, 0) == strncmp(token, "usemtl", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
skip_space(&token);
command.*.material_name = p + @as(usize, @bitCast(@as(isize, @intCast(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))));
command.*.material_name_len = length_until_newline(token, (p_len -% @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))))) +% @as(c_uint, @bitCast(@as(c_int, 1))));
command.*.type = @as(c_uint, @bitCast(COMMAND_USEMTL));
return 1;
}
if ((@as(c_int, 0) == strncmp(token, "mtllib", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 6)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7)))));
skip_space(&token);
command.*.mtllib_name = p + @as(usize, @bitCast(@as(isize, @intCast(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))));
command.*.mtllib_name_len = length_until_newline(token, p_len -% @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))))) +% @as(c_uint, @bitCast(@as(c_int, 1)));
command.*.type = @as(c_uint, @bitCast(COMMAND_MTLLIB));
return 1;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'g')) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
command.*.group_name = p + @as(usize, @bitCast(@as(isize, @intCast(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))));
command.*.group_name_len = length_until_newline(token, p_len -% @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))))) +% @as(c_uint, @bitCast(@as(c_int, 1)));
command.*.type = @as(c_uint, @bitCast(COMMAND_G));
return 1;
}
if ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'o')) and ((@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, token[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, '\t')))) {
token += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
command.*.object_name = p + @as(usize, @bitCast(@as(isize, @intCast(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))));
command.*.object_name_len = length_until_newline(token, p_len -% @as(c_uint, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(token) -% @intFromPtr(@as([*c]u8, @ptrCast(@alignCast(&linebuf)))))), @sizeOf(u8))))))) +% @as(c_uint, @bitCast(@as(c_int, 1)));
command.*.type = @as(c_uint, @bitCast(COMMAND_O));
return 1;
}
return 0;
}
pub const LineInfo = extern struct {
pos: c_uint = @import("std").mem.zeroes(c_uint),
len: c_uint = @import("std").mem.zeroes(c_uint),
};
pub fn is_line_ending(arg_p: [*c]const u8, arg_i: c_uint, arg_end_i: c_uint) callconv(.C) c_int {
var p = arg_p;
_ = &p;
var i = arg_i;
_ = &i;
var end_i = arg_end_i;
_ = &end_i;
if (@as(c_int, @bitCast(@as(c_uint, p[i]))) == @as(c_int, '\x00')) return 1;
if (@as(c_int, @bitCast(@as(c_uint, p[i]))) == @as(c_int, '\n')) return 1;
if (@as(c_int, @bitCast(@as(c_uint, p[i]))) == @as(c_int, '\r')) {
if (((i +% @as(c_uint, @bitCast(@as(c_int, 1)))) < end_i) and (@as(c_int, @bitCast(@as(c_uint, p[i +% @as(c_uint, @bitCast(@as(c_int, 1)))]))) != @as(c_int, '\n'))) {
return 1;
}
}
return 0;
}
pub const ptrdiff_t = c_long;
pub const max_align_t = extern struct {
__clang_max_align_nonce1: c_longlong align(8) = @import("std").mem.zeroes(c_longlong),
__clang_max_align_nonce2: c_longdouble align(16) = @import("std").mem.zeroes(c_longdouble),
};
pub const int_least8_t = __int_least8_t;
pub const int_least16_t = __int_least16_t;
pub const int_least32_t = __int_least32_t;
pub const int_least64_t = __int_least64_t;
pub const uint_least8_t = __uint_least8_t;
pub const uint_least16_t = __uint_least16_t;
pub const uint_least32_t = __uint_least32_t;
pub const uint_least64_t = __uint_least64_t;
pub const int_fast8_t = i8;
pub const int_fast16_t = c_long;
pub const int_fast32_t = c_long;
pub const int_fast64_t = c_long;
pub const uint_fast8_t = u8;
pub const uint_fast16_t = c_ulong;
pub const uint_fast32_t = c_ulong;
pub const uint_fast64_t = c_ulong;
pub const intmax_t = __intmax_t;
pub const uintmax_t = __uintmax_t;
pub const cgltf_size = usize;
pub const cgltf_ssize = c_longlong;
pub const cgltf_float = f32;
pub const cgltf_int = c_int;
pub const cgltf_uint = c_uint;
pub const cgltf_bool = c_int;
pub const cgltf_file_type_invalid: c_int = 0;
pub const cgltf_file_type_gltf: c_int = 1;
pub const cgltf_file_type_glb: c_int = 2;
pub const cgltf_file_type_max_enum: c_int = 3;
pub const enum_cgltf_file_type = c_uint;
pub const cgltf_file_type = enum_cgltf_file_type;
pub const cgltf_result_success: c_int = 0;
pub const cgltf_result_data_too_short: c_int = 1;
pub const cgltf_result_unknown_format: c_int = 2;
pub const cgltf_result_invalid_json: c_int = 3;
pub const cgltf_result_invalid_gltf: c_int = 4;
pub const cgltf_result_invalid_options: c_int = 5;
pub const cgltf_result_file_not_found: c_int = 6;
pub const cgltf_result_io_error: c_int = 7;
pub const cgltf_result_out_of_memory: c_int = 8;
pub const cgltf_result_legacy_gltf: c_int = 9;
pub const cgltf_result_max_enum: c_int = 10;
pub const enum_cgltf_result = c_uint;
pub const cgltf_result = enum_cgltf_result;
pub const struct_cgltf_memory_options = extern struct {
alloc_func: ?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque = @import("std").mem.zeroes(?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque),
free_func: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void = @import("std").mem.zeroes(?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void),
user_data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
};
pub const cgltf_memory_options = struct_cgltf_memory_options;
pub const struct_cgltf_file_options = extern struct {
read: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, [*c]const u8, [*c]cgltf_size, [*c]?*anyopaque) callconv(.C) cgltf_result = @import("std").mem.zeroes(?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, [*c]const u8, [*c]cgltf_size, [*c]?*anyopaque) callconv(.C) cgltf_result),
release: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, ?*anyopaque) callconv(.C) void = @import("std").mem.zeroes(?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, ?*anyopaque) callconv(.C) void),
user_data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
};
pub const cgltf_file_options = struct_cgltf_file_options;
pub const struct_cgltf_options = extern struct {
type: cgltf_file_type = @import("std").mem.zeroes(cgltf_file_type),
json_token_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
memory: cgltf_memory_options = @import("std").mem.zeroes(cgltf_memory_options),
file: cgltf_file_options = @import("std").mem.zeroes(cgltf_file_options),
};
pub const cgltf_options = struct_cgltf_options;
pub const cgltf_buffer_view_type_invalid: c_int = 0;
pub const cgltf_buffer_view_type_indices: c_int = 1;
pub const cgltf_buffer_view_type_vertices: c_int = 2;
pub const cgltf_buffer_view_type_max_enum: c_int = 3;
pub const enum_cgltf_buffer_view_type = c_uint;
pub const cgltf_buffer_view_type = enum_cgltf_buffer_view_type;
pub const cgltf_attribute_type_invalid: c_int = 0;
pub const cgltf_attribute_type_position: c_int = 1;
pub const cgltf_attribute_type_normal: c_int = 2;
pub const cgltf_attribute_type_tangent: c_int = 3;
pub const cgltf_attribute_type_texcoord: c_int = 4;
pub const cgltf_attribute_type_color: c_int = 5;
pub const cgltf_attribute_type_joints: c_int = 6;
pub const cgltf_attribute_type_weights: c_int = 7;
pub const cgltf_attribute_type_custom: c_int = 8;
pub const cgltf_attribute_type_max_enum: c_int = 9;
pub const enum_cgltf_attribute_type = c_uint;
pub const cgltf_attribute_type = enum_cgltf_attribute_type;
pub const cgltf_component_type_invalid: c_int = 0;
pub const cgltf_component_type_r_8: c_int = 1;
pub const cgltf_component_type_r_8u: c_int = 2;
pub const cgltf_component_type_r_16: c_int = 3;
pub const cgltf_component_type_r_16u: c_int = 4;
pub const cgltf_component_type_r_32u: c_int = 5;
pub const cgltf_component_type_r_32f: c_int = 6;
pub const cgltf_component_type_max_enum: c_int = 7;
pub const enum_cgltf_component_type = c_uint;
pub const cgltf_component_type = enum_cgltf_component_type;
pub const cgltf_type_invalid: c_int = 0;
pub const cgltf_type_scalar: c_int = 1;
pub const cgltf_type_vec2: c_int = 2;
pub const cgltf_type_vec3: c_int = 3;
pub const cgltf_type_vec4: c_int = 4;
pub const cgltf_type_mat2: c_int = 5;
pub const cgltf_type_mat3: c_int = 6;
pub const cgltf_type_mat4: c_int = 7;
pub const cgltf_type_max_enum: c_int = 8;
pub const enum_cgltf_type = c_uint;
pub const cgltf_type = enum_cgltf_type;
pub const cgltf_primitive_type_invalid: c_int = 0;
pub const cgltf_primitive_type_points: c_int = 1;
pub const cgltf_primitive_type_lines: c_int = 2;
pub const cgltf_primitive_type_line_loop: c_int = 3;
pub const cgltf_primitive_type_line_strip: c_int = 4;
pub const cgltf_primitive_type_triangles: c_int = 5;
pub const cgltf_primitive_type_triangle_strip: c_int = 6;
pub const cgltf_primitive_type_triangle_fan: c_int = 7;
pub const cgltf_primitive_type_max_enum: c_int = 8;
pub const enum_cgltf_primitive_type = c_uint;
pub const cgltf_primitive_type = enum_cgltf_primitive_type;
pub const cgltf_alpha_mode_opaque: c_int = 0;
pub const cgltf_alpha_mode_mask: c_int = 1;
pub const cgltf_alpha_mode_blend: c_int = 2;
pub const cgltf_alpha_mode_max_enum: c_int = 3;
pub const enum_cgltf_alpha_mode = c_uint;
pub const cgltf_alpha_mode = enum_cgltf_alpha_mode;
pub const cgltf_animation_path_type_invalid: c_int = 0;
pub const cgltf_animation_path_type_translation: c_int = 1;
pub const cgltf_animation_path_type_rotation: c_int = 2;
pub const cgltf_animation_path_type_scale: c_int = 3;
pub const cgltf_animation_path_type_weights: c_int = 4;
pub const cgltf_animation_path_type_max_enum: c_int = 5;
pub const enum_cgltf_animation_path_type = c_uint;
pub const cgltf_animation_path_type = enum_cgltf_animation_path_type;
pub const cgltf_interpolation_type_linear: c_int = 0;
pub const cgltf_interpolation_type_step: c_int = 1;
pub const cgltf_interpolation_type_cubic_spline: c_int = 2;
pub const cgltf_interpolation_type_max_enum: c_int = 3;
pub const enum_cgltf_interpolation_type = c_uint;
pub const cgltf_interpolation_type = enum_cgltf_interpolation_type;
pub const cgltf_camera_type_invalid: c_int = 0;
pub const cgltf_camera_type_perspective: c_int = 1;
pub const cgltf_camera_type_orthographic: c_int = 2;
pub const cgltf_camera_type_max_enum: c_int = 3;
pub const enum_cgltf_camera_type = c_uint;
pub const cgltf_camera_type = enum_cgltf_camera_type;
pub const cgltf_light_type_invalid: c_int = 0;
pub const cgltf_light_type_directional: c_int = 1;
pub const cgltf_light_type_point: c_int = 2;
pub const cgltf_light_type_spot: c_int = 3;
pub const cgltf_light_type_max_enum: c_int = 4;
pub const enum_cgltf_light_type = c_uint;
pub const cgltf_light_type = enum_cgltf_light_type;
pub const cgltf_data_free_method_none: c_int = 0;
pub const cgltf_data_free_method_file_release: c_int = 1;
pub const cgltf_data_free_method_memory_free: c_int = 2;
pub const cgltf_data_free_method_max_enum: c_int = 3;
pub const enum_cgltf_data_free_method = c_uint;
pub const cgltf_data_free_method = enum_cgltf_data_free_method;
pub const struct_cgltf_extras = extern struct {
start_offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
end_offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
data: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const cgltf_extras = struct_cgltf_extras;
pub const struct_cgltf_extension = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
data: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const cgltf_extension = struct_cgltf_extension;
pub const struct_cgltf_buffer = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
size: cgltf_size = @import("std").mem.zeroes(cgltf_size),
uri: [*c]u8 = @import("std").mem.zeroes([*c]u8),
data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
data_free_method: cgltf_data_free_method = @import("std").mem.zeroes(cgltf_data_free_method),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_buffer = struct_cgltf_buffer;
pub const cgltf_meshopt_compression_mode_invalid: c_int = 0;
pub const cgltf_meshopt_compression_mode_attributes: c_int = 1;
pub const cgltf_meshopt_compression_mode_triangles: c_int = 2;
pub const cgltf_meshopt_compression_mode_indices: c_int = 3;
pub const cgltf_meshopt_compression_mode_max_enum: c_int = 4;
pub const enum_cgltf_meshopt_compression_mode = c_uint;
pub const cgltf_meshopt_compression_mode = enum_cgltf_meshopt_compression_mode;
pub const cgltf_meshopt_compression_filter_none: c_int = 0;
pub const cgltf_meshopt_compression_filter_octahedral: c_int = 1;
pub const cgltf_meshopt_compression_filter_quaternion: c_int = 2;
pub const cgltf_meshopt_compression_filter_exponential: c_int = 3;
pub const cgltf_meshopt_compression_filter_max_enum: c_int = 4;
pub const enum_cgltf_meshopt_compression_filter = c_uint;
pub const cgltf_meshopt_compression_filter = enum_cgltf_meshopt_compression_filter;
pub const struct_cgltf_meshopt_compression = extern struct {
buffer: [*c]cgltf_buffer = @import("std").mem.zeroes([*c]cgltf_buffer),
offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
size: cgltf_size = @import("std").mem.zeroes(cgltf_size),
stride: cgltf_size = @import("std").mem.zeroes(cgltf_size),
count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
mode: cgltf_meshopt_compression_mode = @import("std").mem.zeroes(cgltf_meshopt_compression_mode),
filter: cgltf_meshopt_compression_filter = @import("std").mem.zeroes(cgltf_meshopt_compression_filter),
};
pub const cgltf_meshopt_compression = struct_cgltf_meshopt_compression;
pub const struct_cgltf_buffer_view = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
buffer: [*c]cgltf_buffer = @import("std").mem.zeroes([*c]cgltf_buffer),
offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
size: cgltf_size = @import("std").mem.zeroes(cgltf_size),
stride: cgltf_size = @import("std").mem.zeroes(cgltf_size),
type: cgltf_buffer_view_type = @import("std").mem.zeroes(cgltf_buffer_view_type),
data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
has_meshopt_compression: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
meshopt_compression: cgltf_meshopt_compression = @import("std").mem.zeroes(cgltf_meshopt_compression),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_buffer_view = struct_cgltf_buffer_view;
pub const struct_cgltf_accessor_sparse = extern struct {
count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
indices_buffer_view: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
indices_byte_offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
indices_component_type: cgltf_component_type = @import("std").mem.zeroes(cgltf_component_type),
values_buffer_view: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
values_byte_offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
};
pub const cgltf_accessor_sparse = struct_cgltf_accessor_sparse;
pub const struct_cgltf_accessor = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
component_type: cgltf_component_type = @import("std").mem.zeroes(cgltf_component_type),
normalized: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
type: cgltf_type = @import("std").mem.zeroes(cgltf_type),
offset: cgltf_size = @import("std").mem.zeroes(cgltf_size),
count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
stride: cgltf_size = @import("std").mem.zeroes(cgltf_size),
buffer_view: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
has_min: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
min: [16]cgltf_float = @import("std").mem.zeroes([16]cgltf_float),
has_max: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
max: [16]cgltf_float = @import("std").mem.zeroes([16]cgltf_float),
is_sparse: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
sparse: cgltf_accessor_sparse = @import("std").mem.zeroes(cgltf_accessor_sparse),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_accessor = struct_cgltf_accessor;
pub const struct_cgltf_attribute = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
type: cgltf_attribute_type = @import("std").mem.zeroes(cgltf_attribute_type),
index: cgltf_int = @import("std").mem.zeroes(cgltf_int),
data: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
};
pub const cgltf_attribute = struct_cgltf_attribute;
pub const struct_cgltf_image = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
uri: [*c]u8 = @import("std").mem.zeroes([*c]u8),
buffer_view: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
mime_type: [*c]u8 = @import("std").mem.zeroes([*c]u8),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_image = struct_cgltf_image;
pub const struct_cgltf_sampler = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
mag_filter: cgltf_int = @import("std").mem.zeroes(cgltf_int),
min_filter: cgltf_int = @import("std").mem.zeroes(cgltf_int),
wrap_s: cgltf_int = @import("std").mem.zeroes(cgltf_int),
wrap_t: cgltf_int = @import("std").mem.zeroes(cgltf_int),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_sampler = struct_cgltf_sampler;
pub const struct_cgltf_texture = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
image: [*c]cgltf_image = @import("std").mem.zeroes([*c]cgltf_image),
sampler: [*c]cgltf_sampler = @import("std").mem.zeroes([*c]cgltf_sampler),
has_basisu: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
basisu_image: [*c]cgltf_image = @import("std").mem.zeroes([*c]cgltf_image),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_texture = struct_cgltf_texture;
pub const struct_cgltf_texture_transform = extern struct {
offset: [2]cgltf_float = @import("std").mem.zeroes([2]cgltf_float),
rotation: cgltf_float = @import("std").mem.zeroes(cgltf_float),
scale: [2]cgltf_float = @import("std").mem.zeroes([2]cgltf_float),
has_texcoord: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
texcoord: cgltf_int = @import("std").mem.zeroes(cgltf_int),
};
pub const cgltf_texture_transform = struct_cgltf_texture_transform;
pub const struct_cgltf_texture_view = extern struct {
texture: [*c]cgltf_texture = @import("std").mem.zeroes([*c]cgltf_texture),
texcoord: cgltf_int = @import("std").mem.zeroes(cgltf_int),
scale: cgltf_float = @import("std").mem.zeroes(cgltf_float),
has_transform: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
transform: cgltf_texture_transform = @import("std").mem.zeroes(cgltf_texture_transform),
};
pub const cgltf_texture_view = struct_cgltf_texture_view;
pub const struct_cgltf_pbr_metallic_roughness = extern struct {
base_color_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
metallic_roughness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
base_color_factor: [4]cgltf_float = @import("std").mem.zeroes([4]cgltf_float),
metallic_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
roughness_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_pbr_metallic_roughness = struct_cgltf_pbr_metallic_roughness;
pub const struct_cgltf_pbr_specular_glossiness = extern struct {
diffuse_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
specular_glossiness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
diffuse_factor: [4]cgltf_float = @import("std").mem.zeroes([4]cgltf_float),
specular_factor: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
glossiness_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_pbr_specular_glossiness = struct_cgltf_pbr_specular_glossiness;
pub const struct_cgltf_clearcoat = extern struct {
clearcoat_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
clearcoat_roughness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
clearcoat_normal_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
clearcoat_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
clearcoat_roughness_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_clearcoat = struct_cgltf_clearcoat;
pub const struct_cgltf_transmission = extern struct {
transmission_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
transmission_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_transmission = struct_cgltf_transmission;
pub const struct_cgltf_ior = extern struct {
ior: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_ior = struct_cgltf_ior;
pub const struct_cgltf_specular = extern struct {
specular_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
specular_color_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
specular_color_factor: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
specular_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_specular = struct_cgltf_specular;
pub const struct_cgltf_volume = extern struct {
thickness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
thickness_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
attenuation_color: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
attenuation_distance: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_volume = struct_cgltf_volume;
pub const struct_cgltf_sheen = extern struct {
sheen_color_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
sheen_color_factor: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
sheen_roughness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
sheen_roughness_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_sheen = struct_cgltf_sheen;
pub const struct_cgltf_emissive_strength = extern struct {
emissive_strength: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_emissive_strength = struct_cgltf_emissive_strength;
pub const struct_cgltf_iridescence = extern struct {
iridescence_factor: cgltf_float = @import("std").mem.zeroes(cgltf_float),
iridescence_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
iridescence_ior: cgltf_float = @import("std").mem.zeroes(cgltf_float),
iridescence_thickness_min: cgltf_float = @import("std").mem.zeroes(cgltf_float),
iridescence_thickness_max: cgltf_float = @import("std").mem.zeroes(cgltf_float),
iridescence_thickness_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
};
pub const cgltf_iridescence = struct_cgltf_iridescence;
pub const struct_cgltf_anisotropy = extern struct {
anisotropy_strength: cgltf_float = @import("std").mem.zeroes(cgltf_float),
anisotropy_rotation: cgltf_float = @import("std").mem.zeroes(cgltf_float),
anisotropy_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
};
pub const cgltf_anisotropy = struct_cgltf_anisotropy;
pub const struct_cgltf_dispersion = extern struct {
dispersion: cgltf_float = @import("std").mem.zeroes(cgltf_float),
};
pub const cgltf_dispersion = struct_cgltf_dispersion;
pub const struct_cgltf_material = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
has_pbr_metallic_roughness: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_pbr_specular_glossiness: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_clearcoat: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_transmission: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_volume: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_ior: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_specular: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_sheen: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_emissive_strength: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_iridescence: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_anisotropy: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_dispersion: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
pbr_metallic_roughness: cgltf_pbr_metallic_roughness = @import("std").mem.zeroes(cgltf_pbr_metallic_roughness),
pbr_specular_glossiness: cgltf_pbr_specular_glossiness = @import("std").mem.zeroes(cgltf_pbr_specular_glossiness),
clearcoat: cgltf_clearcoat = @import("std").mem.zeroes(cgltf_clearcoat),
ior: cgltf_ior = @import("std").mem.zeroes(cgltf_ior),
specular: cgltf_specular = @import("std").mem.zeroes(cgltf_specular),
sheen: cgltf_sheen = @import("std").mem.zeroes(cgltf_sheen),
transmission: cgltf_transmission = @import("std").mem.zeroes(cgltf_transmission),
volume: cgltf_volume = @import("std").mem.zeroes(cgltf_volume),
emissive_strength: cgltf_emissive_strength = @import("std").mem.zeroes(cgltf_emissive_strength),
iridescence: cgltf_iridescence = @import("std").mem.zeroes(cgltf_iridescence),
anisotropy: cgltf_anisotropy = @import("std").mem.zeroes(cgltf_anisotropy),
dispersion: cgltf_dispersion = @import("std").mem.zeroes(cgltf_dispersion),
normal_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
occlusion_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
emissive_texture: cgltf_texture_view = @import("std").mem.zeroes(cgltf_texture_view),
emissive_factor: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
alpha_mode: cgltf_alpha_mode = @import("std").mem.zeroes(cgltf_alpha_mode),
alpha_cutoff: cgltf_float = @import("std").mem.zeroes(cgltf_float),
double_sided: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
unlit: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_material = struct_cgltf_material;
pub const struct_cgltf_material_mapping = extern struct {
variant: cgltf_size = @import("std").mem.zeroes(cgltf_size),
material: [*c]cgltf_material = @import("std").mem.zeroes([*c]cgltf_material),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
};
pub const cgltf_material_mapping = struct_cgltf_material_mapping;
pub const struct_cgltf_morph_target = extern struct {
attributes: [*c]cgltf_attribute = @import("std").mem.zeroes([*c]cgltf_attribute),
attributes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
};
pub const cgltf_morph_target = struct_cgltf_morph_target;
pub const struct_cgltf_draco_mesh_compression = extern struct {
buffer_view: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
attributes: [*c]cgltf_attribute = @import("std").mem.zeroes([*c]cgltf_attribute),
attributes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
};
pub const cgltf_draco_mesh_compression = struct_cgltf_draco_mesh_compression;
pub const struct_cgltf_mesh_gpu_instancing = extern struct {
attributes: [*c]cgltf_attribute = @import("std").mem.zeroes([*c]cgltf_attribute),
attributes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
};
pub const cgltf_mesh_gpu_instancing = struct_cgltf_mesh_gpu_instancing;
pub const struct_cgltf_primitive = extern struct {
type: cgltf_primitive_type = @import("std").mem.zeroes(cgltf_primitive_type),
indices: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
material: [*c]cgltf_material = @import("std").mem.zeroes([*c]cgltf_material),
attributes: [*c]cgltf_attribute = @import("std").mem.zeroes([*c]cgltf_attribute),
attributes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
targets: [*c]cgltf_morph_target = @import("std").mem.zeroes([*c]cgltf_morph_target),
targets_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
has_draco_mesh_compression: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
draco_mesh_compression: cgltf_draco_mesh_compression = @import("std").mem.zeroes(cgltf_draco_mesh_compression),
mappings: [*c]cgltf_material_mapping = @import("std").mem.zeroes([*c]cgltf_material_mapping),
mappings_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_primitive = struct_cgltf_primitive;
pub const struct_cgltf_mesh = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
primitives: [*c]cgltf_primitive = @import("std").mem.zeroes([*c]cgltf_primitive),
primitives_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
weights: [*c]cgltf_float = @import("std").mem.zeroes([*c]cgltf_float),
weights_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
target_names: [*c][*c]u8 = @import("std").mem.zeroes([*c][*c]u8),
target_names_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_mesh = struct_cgltf_mesh;
pub const cgltf_node = struct_cgltf_node;
pub const struct_cgltf_skin = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
joints: [*c][*c]cgltf_node = @import("std").mem.zeroes([*c][*c]cgltf_node),
joints_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
skeleton: [*c]cgltf_node = @import("std").mem.zeroes([*c]cgltf_node),
inverse_bind_matrices: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_skin = struct_cgltf_skin;
pub const struct_cgltf_camera_perspective = extern struct {
has_aspect_ratio: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
aspect_ratio: cgltf_float = @import("std").mem.zeroes(cgltf_float),
yfov: cgltf_float = @import("std").mem.zeroes(cgltf_float),
has_zfar: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
zfar: cgltf_float = @import("std").mem.zeroes(cgltf_float),
znear: cgltf_float = @import("std").mem.zeroes(cgltf_float),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
};
pub const cgltf_camera_perspective = struct_cgltf_camera_perspective;
pub const struct_cgltf_camera_orthographic = extern struct {
xmag: cgltf_float = @import("std").mem.zeroes(cgltf_float),
ymag: cgltf_float = @import("std").mem.zeroes(cgltf_float),
zfar: cgltf_float = @import("std").mem.zeroes(cgltf_float),
znear: cgltf_float = @import("std").mem.zeroes(cgltf_float),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
};
pub const cgltf_camera_orthographic = struct_cgltf_camera_orthographic;
const union_unnamed_6 = extern union {
perspective: cgltf_camera_perspective,
orthographic: cgltf_camera_orthographic,
};
pub const struct_cgltf_camera = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
type: cgltf_camera_type = @import("std").mem.zeroes(cgltf_camera_type),
data: union_unnamed_6 = @import("std").mem.zeroes(union_unnamed_6),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_camera = struct_cgltf_camera;
pub const struct_cgltf_light = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
color: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
intensity: cgltf_float = @import("std").mem.zeroes(cgltf_float),
type: cgltf_light_type = @import("std").mem.zeroes(cgltf_light_type),
range: cgltf_float = @import("std").mem.zeroes(cgltf_float),
spot_inner_cone_angle: cgltf_float = @import("std").mem.zeroes(cgltf_float),
spot_outer_cone_angle: cgltf_float = @import("std").mem.zeroes(cgltf_float),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
};
pub const cgltf_light = struct_cgltf_light;
pub const struct_cgltf_node = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
parent: [*c]cgltf_node = @import("std").mem.zeroes([*c]cgltf_node),
children: [*c][*c]cgltf_node = @import("std").mem.zeroes([*c][*c]cgltf_node),
children_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
skin: [*c]cgltf_skin = @import("std").mem.zeroes([*c]cgltf_skin),
mesh: [*c]cgltf_mesh = @import("std").mem.zeroes([*c]cgltf_mesh),
camera: [*c]cgltf_camera = @import("std").mem.zeroes([*c]cgltf_camera),
light: [*c]cgltf_light = @import("std").mem.zeroes([*c]cgltf_light),
weights: [*c]cgltf_float = @import("std").mem.zeroes([*c]cgltf_float),
weights_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
has_translation: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_rotation: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_scale: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
has_matrix: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
translation: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
rotation: [4]cgltf_float = @import("std").mem.zeroes([4]cgltf_float),
scale: [3]cgltf_float = @import("std").mem.zeroes([3]cgltf_float),
matrix: [16]cgltf_float = @import("std").mem.zeroes([16]cgltf_float),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
has_mesh_gpu_instancing: cgltf_bool = @import("std").mem.zeroes(cgltf_bool),
mesh_gpu_instancing: cgltf_mesh_gpu_instancing = @import("std").mem.zeroes(cgltf_mesh_gpu_instancing),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const struct_cgltf_scene = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
nodes: [*c][*c]cgltf_node = @import("std").mem.zeroes([*c][*c]cgltf_node),
nodes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_scene = struct_cgltf_scene;
pub const struct_cgltf_animation_sampler = extern struct {
input: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
output: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
interpolation: cgltf_interpolation_type = @import("std").mem.zeroes(cgltf_interpolation_type),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_animation_sampler = struct_cgltf_animation_sampler;
pub const struct_cgltf_animation_channel = extern struct {
sampler: [*c]cgltf_animation_sampler = @import("std").mem.zeroes([*c]cgltf_animation_sampler),
target_node: [*c]cgltf_node = @import("std").mem.zeroes([*c]cgltf_node),
target_path: cgltf_animation_path_type = @import("std").mem.zeroes(cgltf_animation_path_type),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_animation_channel = struct_cgltf_animation_channel;
pub const struct_cgltf_animation = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
samplers: [*c]cgltf_animation_sampler = @import("std").mem.zeroes([*c]cgltf_animation_sampler),
samplers_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
channels: [*c]cgltf_animation_channel = @import("std").mem.zeroes([*c]cgltf_animation_channel),
channels_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_animation = struct_cgltf_animation;
pub const struct_cgltf_material_variant = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
};
pub const cgltf_material_variant = struct_cgltf_material_variant;
pub const struct_cgltf_asset = extern struct {
copyright: [*c]u8 = @import("std").mem.zeroes([*c]u8),
generator: [*c]u8 = @import("std").mem.zeroes([*c]u8),
version: [*c]u8 = @import("std").mem.zeroes([*c]u8),
min_version: [*c]u8 = @import("std").mem.zeroes([*c]u8),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
};
pub const cgltf_asset = struct_cgltf_asset;
pub const struct_cgltf_data = extern struct {
file_type: cgltf_file_type = @import("std").mem.zeroes(cgltf_file_type),
file_data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
asset: cgltf_asset = @import("std").mem.zeroes(cgltf_asset),
meshes: [*c]cgltf_mesh = @import("std").mem.zeroes([*c]cgltf_mesh),
meshes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
materials: [*c]cgltf_material = @import("std").mem.zeroes([*c]cgltf_material),
materials_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
accessors: [*c]cgltf_accessor = @import("std").mem.zeroes([*c]cgltf_accessor),
accessors_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
buffer_views: [*c]cgltf_buffer_view = @import("std").mem.zeroes([*c]cgltf_buffer_view),
buffer_views_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
buffers: [*c]cgltf_buffer = @import("std").mem.zeroes([*c]cgltf_buffer),
buffers_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
images: [*c]cgltf_image = @import("std").mem.zeroes([*c]cgltf_image),
images_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
textures: [*c]cgltf_texture = @import("std").mem.zeroes([*c]cgltf_texture),
textures_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
samplers: [*c]cgltf_sampler = @import("std").mem.zeroes([*c]cgltf_sampler),
samplers_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
skins: [*c]cgltf_skin = @import("std").mem.zeroes([*c]cgltf_skin),
skins_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
cameras: [*c]cgltf_camera = @import("std").mem.zeroes([*c]cgltf_camera),
cameras_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
lights: [*c]cgltf_light = @import("std").mem.zeroes([*c]cgltf_light),
lights_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
nodes: [*c]cgltf_node = @import("std").mem.zeroes([*c]cgltf_node),
nodes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
scenes: [*c]cgltf_scene = @import("std").mem.zeroes([*c]cgltf_scene),
scenes_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
scene: [*c]cgltf_scene = @import("std").mem.zeroes([*c]cgltf_scene),
animations: [*c]cgltf_animation = @import("std").mem.zeroes([*c]cgltf_animation),
animations_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
variants: [*c]cgltf_material_variant = @import("std").mem.zeroes([*c]cgltf_material_variant),
variants_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extras: cgltf_extras = @import("std").mem.zeroes(cgltf_extras),
data_extensions_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
data_extensions: [*c]cgltf_extension = @import("std").mem.zeroes([*c]cgltf_extension),
extensions_used: [*c][*c]u8 = @import("std").mem.zeroes([*c][*c]u8),
extensions_used_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
extensions_required: [*c][*c]u8 = @import("std").mem.zeroes([*c][*c]u8),
extensions_required_count: cgltf_size = @import("std").mem.zeroes(cgltf_size),
json: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
json_size: cgltf_size = @import("std").mem.zeroes(cgltf_size),
bin: ?*const anyopaque = @import("std").mem.zeroes(?*const anyopaque),
bin_size: cgltf_size = @import("std").mem.zeroes(cgltf_size),
memory: cgltf_memory_options = @import("std").mem.zeroes(cgltf_memory_options),
file: cgltf_file_options = @import("std").mem.zeroes(cgltf_file_options),
};
pub const cgltf_data = struct_cgltf_data;
pub export fn cgltf_parse(arg_options: [*c]const cgltf_options, arg_data: ?*const anyopaque, arg_size: cgltf_size, arg_out_data: [*c][*c]cgltf_data) cgltf_result {
var options = arg_options;
_ = &options;
var data = arg_data;
_ = &data;
var size = arg_size;
_ = &size;
var out_data = arg_out_data;
_ = &out_data;
if (size < @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12))))) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
if (options == @as([*c]const cgltf_options, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return @as(c_uint, @bitCast(cgltf_result_invalid_options));
}
var fixed_options: cgltf_options = options.*;
_ = &fixed_options;
if (fixed_options.memory.alloc_func == @as(?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
fixed_options.memory.alloc_func = &cgltf_default_alloc;
}
if (fixed_options.memory.free_func == @as(?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
fixed_options.memory.free_func = &cgltf_default_free;
}
var tmp: u32 = undefined;
_ = &tmp;
_ = memcpy(@as(?*anyopaque, @ptrCast(&tmp)), data, @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (tmp != GlbMagic) {
if (fixed_options.type == @as(c_uint, @bitCast(cgltf_file_type_invalid))) {
fixed_options.type = @as(c_uint, @bitCast(cgltf_file_type_gltf));
} else if (fixed_options.type == @as(c_uint, @bitCast(cgltf_file_type_glb))) {
return @as(c_uint, @bitCast(cgltf_result_unknown_format));
}
}
if (fixed_options.type == @as(c_uint, @bitCast(cgltf_file_type_gltf))) {
var json_result: cgltf_result = cgltf_parse_json(&fixed_options, @as([*c]const u8, @ptrCast(@alignCast(data))), size, out_data);
_ = &json_result;
if (json_result != @as(c_uint, @bitCast(cgltf_result_success))) {
return json_result;
}
out_data.*.*.file_type = @as(c_uint, @bitCast(cgltf_file_type_gltf));
return @as(c_uint, @bitCast(cgltf_result_success));
}
var ptr: [*c]const u8 = @as([*c]const u8, @ptrCast(@alignCast(data)));
_ = &ptr;
_ = memcpy(@as(?*anyopaque, @ptrCast(&tmp)), @as(?*const anyopaque, @ptrCast(ptr + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
var version: u32 = tmp;
_ = &version;
if (version != GlbVersion) {
return @as(c_uint, @bitCast(if (version < GlbVersion) cgltf_result_legacy_gltf else cgltf_result_unknown_format));
}
_ = memcpy(@as(?*anyopaque, @ptrCast(&tmp)), @as(?*const anyopaque, @ptrCast(ptr + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 8))))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (@as(cgltf_size, @bitCast(@as(c_ulong, tmp))) > size) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
var json_chunk: [*c]const u8 = ptr + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 12)))));
_ = &json_chunk;
if (@as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12) + @as(c_int, 8)))) > size) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
var json_length: u32 = undefined;
_ = &json_length;
_ = memcpy(@as(?*anyopaque, @ptrCast(&json_length)), @as(?*const anyopaque, @ptrCast(json_chunk)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (@as(cgltf_size, @bitCast(@as(c_ulong, json_length))) > ((size -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))))) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
_ = memcpy(@as(?*anyopaque, @ptrCast(&tmp)), @as(?*const anyopaque, @ptrCast(json_chunk + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (tmp != GlbMagicJsonChunk) {
return @as(c_uint, @bitCast(cgltf_result_unknown_format));
}
json_chunk += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 8)))));
var bin: ?*const anyopaque = null;
_ = &bin;
var bin_size: cgltf_size = 0;
_ = &bin_size;
if (@as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))) <= (((size -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8))))) -% @as(cgltf_size, @bitCast(@as(c_ulong, json_length))))) {
var bin_chunk: [*c]const u8 = json_chunk + json_length;
_ = &bin_chunk;
var bin_length: u32 = undefined;
_ = &bin_length;
_ = memcpy(@as(?*anyopaque, @ptrCast(&bin_length)), @as(?*const anyopaque, @ptrCast(bin_chunk)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (@as(cgltf_size, @bitCast(@as(c_ulong, bin_length))) > ((((size -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8))))) -% @as(cgltf_size, @bitCast(@as(c_ulong, json_length)))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))))) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
_ = memcpy(@as(?*anyopaque, @ptrCast(&tmp)), @as(?*const anyopaque, @ptrCast(bin_chunk + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
if (tmp != GlbMagicBinChunk) {
return @as(c_uint, @bitCast(cgltf_result_unknown_format));
}
bin_chunk += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 8)))));
bin = @as(?*const anyopaque, @ptrCast(bin_chunk));
bin_size = @as(cgltf_size, @bitCast(@as(c_ulong, bin_length)));
}
var json_result: cgltf_result = cgltf_parse_json(&fixed_options, json_chunk, @as(cgltf_size, @bitCast(@as(c_ulong, json_length))), out_data);
_ = &json_result;
if (json_result != @as(c_uint, @bitCast(cgltf_result_success))) {
return json_result;
}
out_data.*.*.file_type = @as(c_uint, @bitCast(cgltf_file_type_glb));
out_data.*.*.bin = bin;
out_data.*.*.bin_size = bin_size;
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_parse_file(arg_options: [*c]const cgltf_options, arg_path: [*c]const u8, arg_out_data: [*c][*c]cgltf_data) cgltf_result {
var options = arg_options;
_ = &options;
var path = arg_path;
_ = &path;
var out_data = arg_out_data;
_ = &out_data;
if (options == @as([*c]const cgltf_options, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return @as(c_uint, @bitCast(cgltf_result_invalid_options));
}
var file_read: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, [*c]const u8, [*c]cgltf_size, [*c]?*anyopaque) callconv(.C) cgltf_result = if (options.*.file.read != null) options.*.file.read else &cgltf_default_file_read;
_ = &file_read;
var file_release: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, ?*anyopaque) callconv(.C) void = if (options.*.file.release != null) options.*.file.release else &cgltf_default_file_release;
_ = &file_release;
var file_data: ?*anyopaque = @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
_ = &file_data;
var file_size: cgltf_size = 0;
_ = &file_size;
var result: cgltf_result = file_read.?(&options.*.memory, &options.*.file, path, &file_size, &file_data);
_ = &result;
if (result != @as(c_uint, @bitCast(cgltf_result_success))) {
return result;
}
result = cgltf_parse(options, file_data, file_size, out_data);
if (result != @as(c_uint, @bitCast(cgltf_result_success))) {
file_release.?(&options.*.memory, &options.*.file, file_data);
return result;
}
out_data.*.*.file_data = file_data;
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_load_buffers(arg_options: [*c]const cgltf_options, arg_data: [*c]cgltf_data, arg_gltf_path: [*c]const u8) cgltf_result {
var options = arg_options;
_ = &options;
var data = arg_data;
_ = &data;
var gltf_path = arg_gltf_path;
_ = &gltf_path;
if (options == @as([*c]const cgltf_options, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return @as(c_uint, @bitCast(cgltf_result_invalid_options));
}
if ((((data.*.buffers_count != 0) and (data.*.buffers[@as(c_uint, @intCast(@as(c_int, 0)))].data == @as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))) and (data.*.buffers[@as(c_uint, @intCast(@as(c_int, 0)))].uri == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) and (data.*.bin != null)) {
if (data.*.bin_size < data.*.buffers[@as(c_uint, @intCast(@as(c_int, 0)))].size) {
return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
data.*.buffers[@as(c_uint, @intCast(@as(c_int, 0)))].data = @as(?*anyopaque, @ptrCast(@volatileCast(@constCast(data.*.bin))));
data.*.buffers[@as(c_uint, @intCast(@as(c_int, 0)))].data_free_method = @as(c_uint, @bitCast(cgltf_data_free_method_none));
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.buffers_count) : (i +%= 1) {
if (data.*.buffers[i].data != null) {
continue;
}
var uri: [*c]const u8 = data.*.buffers[i].uri;
_ = &uri;
if (uri == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
continue;
}
if (strncmp(uri, "data:", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5))))) == @as(c_int, 0)) {
var comma: [*c]const u8 = strchr(uri, @as(c_int, ','));
_ = &comma;
if (((comma != null) and (@divExact(@as(c_long, @bitCast(@intFromPtr(comma) -% @intFromPtr(uri))), @sizeOf(u8)) >= @as(c_long, @bitCast(@as(c_long, @as(c_int, 7)))))) and (strncmp(comma - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 7))))), ";base64", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 7))))) == @as(c_int, 0))) {
var res: cgltf_result = cgltf_load_buffer_base64(options, data.*.buffers[i].size, comma + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))), &data.*.buffers[i].data);
_ = &res;
data.*.buffers[i].data_free_method = @as(c_uint, @bitCast(cgltf_data_free_method_memory_free));
if (res != @as(c_uint, @bitCast(cgltf_result_success))) {
return res;
}
} else {
return @as(c_uint, @bitCast(cgltf_result_unknown_format));
}
} else if ((strstr(uri, "://") == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) and (gltf_path != null)) {
var res: cgltf_result = cgltf_load_buffer_file(options, data.*.buffers[i].size, uri, gltf_path, &data.*.buffers[i].data);
_ = &res;
data.*.buffers[i].data_free_method = @as(c_uint, @bitCast(cgltf_data_free_method_file_release));
if (res != @as(c_uint, @bitCast(cgltf_result_success))) {
return res;
}
} else {
return @as(c_uint, @bitCast(cgltf_result_unknown_format));
}
}
}
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_load_buffer_base64(arg_options: [*c]const cgltf_options, arg_size: cgltf_size, arg_base64: [*c]const u8, arg_out_data: [*c]?*anyopaque) cgltf_result {
var options = arg_options;
_ = &options;
var size = arg_size;
_ = &size;
var base64 = arg_base64;
_ = &base64;
var out_data = arg_out_data;
_ = &out_data;
var memory_alloc: ?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque = if (options.*.memory.alloc_func != null) options.*.memory.alloc_func else &cgltf_default_alloc;
_ = &memory_alloc;
var memory_free: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void = if (options.*.memory.free_func != null) options.*.memory.free_func else &cgltf_default_free;
_ = &memory_free;
var data: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(memory_alloc.?(options.*.memory.user_data, size))));
_ = &data;
if (!(data != null)) {
return @as(c_uint, @bitCast(cgltf_result_out_of_memory));
}
var buffer: c_uint = 0;
_ = &buffer;
var buffer_bits: c_uint = 0;
_ = &buffer_bits;
{
var i: cgltf_size = 0;
_ = &i;
while (i < size) : (i +%= 1) {
while (buffer_bits < @as(c_uint, @bitCast(@as(c_int, 8)))) {
var ch: u8 = (blk: {
const ref = &base64;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
_ = &ch;
var index_1: c_int = if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'A'))) < @as(c_uint, @bitCast(@as(c_int, 26)))) @as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'A') else if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'a'))) < @as(c_uint, @bitCast(@as(c_int, 26)))) (@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'a')) + @as(c_int, 26) else if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, '0'))) < @as(c_uint, @bitCast(@as(c_int, 10)))) (@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, '0')) + @as(c_int, 52) else if (@as(c_int, @bitCast(@as(c_uint, ch))) == @as(c_int, '+')) @as(c_int, 62) else if (@as(c_int, @bitCast(@as(c_uint, ch))) == @as(c_int, '/')) @as(c_int, 63) else -@as(c_int, 1);
_ = &index_1;
if (index_1 < @as(c_int, 0)) {
memory_free.?(options.*.memory.user_data, @as(?*anyopaque, @ptrCast(data)));
return @as(c_uint, @bitCast(cgltf_result_io_error));
}
buffer = (buffer << @intCast(6)) | @as(c_uint, @bitCast(index_1));
buffer_bits +%= @as(c_uint, @bitCast(@as(c_int, 6)));
}
data[i] = @as(u8, @bitCast(@as(u8, @truncate(buffer >> @intCast(buffer_bits -% @as(c_uint, @bitCast(@as(c_int, 8))))))));
buffer_bits -%= @as(c_uint, @bitCast(@as(c_int, 8)));
}
}
out_data.* = @as(?*anyopaque, @ptrCast(data));
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_decode_string(arg_string: [*c]u8) cgltf_size {
var string = arg_string;
_ = &string;
var read_1: [*c]u8 = string + strcspn(string, "\\");
_ = &read_1;
if (@as(c_int, @bitCast(@as(c_uint, read_1.*))) == @as(c_int, 0)) {
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(read_1) -% @intFromPtr(string))), @sizeOf(u8))));
}
var write_2: [*c]u8 = string;
_ = &write_2;
var last: [*c]u8 = string;
_ = &last;
while (true) {
var written: cgltf_size = @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(read_1) -% @intFromPtr(last))), @sizeOf(u8))));
_ = &written;
_ = memmove(@as(?*anyopaque, @ptrCast(write_2)), @as(?*const anyopaque, @ptrCast(last)), written);
write_2 += @as([*c]u8, @ptrFromInt(written));
if (@as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &read_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*))) == @as(c_int, 0)) {
break;
}
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &read_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)))) {
@as(c_int, 34) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '"';
break;
},
@as(c_int, 47) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '/';
break;
},
@as(c_int, 92) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\\';
break;
},
@as(c_int, 98) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\x08';
break;
},
@as(c_int, 102) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\x0c';
break;
},
@as(c_int, 114) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\r';
break;
},
@as(c_int, 110) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\n';
break;
},
@as(c_int, 116) => {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\t';
break;
},
@as(c_int, 117) => {
{
var character: c_int = 0;
_ = &character;
{
var i: cgltf_size = 0;
_ = &i;
while (i < @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) : (i +%= 1) {
character = (character << @intCast(4)) + cgltf_unhex((blk: {
const ref = &read_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*);
}
}
if (character <= @as(c_int, 127)) {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(character & @as(c_int, 255)))));
} else if (character <= @as(c_int, 2047)) {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 192) | ((character >> @intCast(6)) & @as(c_int, 255))))));
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 128) | (character & @as(c_int, 63))))));
} else {
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 224) | ((character >> @intCast(12)) & @as(c_int, 255))))));
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 128) | ((character >> @intCast(6)) & @as(c_int, 63))))));
(blk: {
const ref = &write_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 128) | (character & @as(c_int, 63))))));
}
break;
}
},
else => break,
}
break;
}
last = read_1;
read_1 += @as([*c]u8, @ptrFromInt(strcspn(read_1, "\\")));
}
write_2.* = 0;
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(write_2) -% @intFromPtr(string))), @sizeOf(u8))));
}
pub export fn cgltf_decode_uri(arg_uri: [*c]u8) cgltf_size {
var uri = arg_uri;
_ = &uri;
var write_1: [*c]u8 = uri;
_ = &write_1;
var i: [*c]u8 = uri;
_ = &i;
while (i.* != 0) {
if (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '%')) {
var ch1: c_int = cgltf_unhex(i[@as(c_uint, @intCast(@as(c_int, 1)))]);
_ = &ch1;
if (ch1 >= @as(c_int, 0)) {
var ch2: c_int = cgltf_unhex(i[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &ch2;
if (ch2 >= @as(c_int, 0)) {
(blk: {
const ref = &write_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate((ch1 * @as(c_int, 16)) + ch2))));
i += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
continue;
}
}
}
(blk: {
const ref = &write_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &i;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
}
write_1.* = 0;
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(write_1) -% @intFromPtr(uri))), @sizeOf(u8))));
}
pub export fn cgltf_validate(arg_data: [*c]cgltf_data) cgltf_result {
var data = arg_data;
_ = &data;
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.accessors_count) : (i +%= 1) {
var accessor: [*c]cgltf_accessor = &data.*.accessors[i];
_ = &accessor;
if (data.*.accessors[i].component_type == @as(c_uint, @bitCast(cgltf_component_type_invalid))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (data.*.accessors[i].type == @as(c_uint, @bitCast(cgltf_type_invalid))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
var element_size: cgltf_size = cgltf_calc_size(accessor.*.type, accessor.*.component_type);
_ = &element_size;
if (accessor.*.buffer_view != null) {
var req_size: cgltf_size = (accessor.*.offset +% (accessor.*.stride *% (accessor.*.count -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))))) +% element_size;
_ = &req_size;
if (accessor.*.buffer_view.*.size < req_size) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
if (accessor.*.is_sparse != 0) {
var sparse: [*c]cgltf_accessor_sparse = &accessor.*.sparse;
_ = &sparse;
var indices_component_size: cgltf_size = cgltf_component_size(sparse.*.indices_component_type);
_ = &indices_component_size;
var indices_req_size: cgltf_size = sparse.*.indices_byte_offset +% (indices_component_size *% sparse.*.count);
_ = &indices_req_size;
var values_req_size: cgltf_size = sparse.*.values_byte_offset +% (element_size *% sparse.*.count);
_ = &values_req_size;
if ((sparse.*.indices_buffer_view.*.size < indices_req_size) or (sparse.*.values_buffer_view.*.size < values_req_size)) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
if (((sparse.*.indices_component_type != @as(c_uint, @bitCast(cgltf_component_type_r_8u))) and (sparse.*.indices_component_type != @as(c_uint, @bitCast(cgltf_component_type_r_16u)))) and (sparse.*.indices_component_type != @as(c_uint, @bitCast(cgltf_component_type_r_32u)))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (sparse.*.indices_buffer_view.*.buffer.*.data != null) {
var index_bound: cgltf_size = cgltf_calc_index_bound(sparse.*.indices_buffer_view, sparse.*.indices_byte_offset, sparse.*.indices_component_type, sparse.*.count);
_ = &index_bound;
if (index_bound >= accessor.*.count) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.buffer_views_count) : (i +%= 1) {
var req_size: cgltf_size = data.*.buffer_views[i].offset +% data.*.buffer_views[i].size;
_ = &req_size;
if ((data.*.buffer_views[i].buffer != null) and (data.*.buffer_views[i].buffer.*.size < req_size)) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
if (data.*.buffer_views[i].has_meshopt_compression != 0) {
var mc: [*c]cgltf_meshopt_compression = &data.*.buffer_views[i].meshopt_compression;
_ = &mc;
if ((mc.*.buffer == @as([*c]cgltf_buffer, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) or (mc.*.buffer.*.size < (mc.*.offset +% mc.*.size))) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
if ((data.*.buffer_views[i].stride != 0) and (mc.*.stride != data.*.buffer_views[i].stride)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (data.*.buffer_views[i].size != (mc.*.stride *% mc.*.count)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_invalid))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_attributes))) and !(((mc.*.stride % @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) and (mc.*.stride <= @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 256))))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_triangles))) and ((mc.*.count % @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0)))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((((mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_triangles))) or (mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_indices)))) and (mc.*.stride != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2)))))) and (mc.*.stride != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (((mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_triangles))) or (mc.*.mode == @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_indices)))) and (mc.*.filter != @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_none)))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (((mc.*.filter == @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_octahedral))) and (mc.*.stride != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) and (mc.*.stride != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((mc.*.filter == @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_quaternion))) and (mc.*.stride != @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.meshes_count) : (i +%= 1) {
if (data.*.meshes[i].weights != null) {
if ((data.*.meshes[i].primitives_count != 0) and (data.*.meshes[i].primitives[@as(c_uint, @intCast(@as(c_int, 0)))].targets_count != data.*.meshes[i].weights_count)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
if (data.*.meshes[i].target_names != null) {
if ((data.*.meshes[i].primitives_count != 0) and (data.*.meshes[i].primitives[@as(c_uint, @intCast(@as(c_int, 0)))].targets_count != data.*.meshes[i].target_names_count)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.meshes[i].primitives_count) : (j +%= 1) {
if (data.*.meshes[i].primitives[j].type == @as(c_uint, @bitCast(cgltf_primitive_type_invalid))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (data.*.meshes[i].primitives[j].targets_count != data.*.meshes[i].primitives[@as(c_uint, @intCast(@as(c_int, 0)))].targets_count) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (data.*.meshes[i].primitives[j].attributes_count == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
var first: [*c]cgltf_accessor = data.*.meshes[i].primitives[j].attributes[@as(c_uint, @intCast(@as(c_int, 0)))].data;
_ = &first;
if (first.*.count == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].attributes_count) : (k +%= 1) {
if (data.*.meshes[i].primitives[j].attributes[k].data.*.count != first.*.count) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].targets_count) : (k +%= 1) {
{
var m: cgltf_size = 0;
_ = &m;
while (m < data.*.meshes[i].primitives[j].targets[k].attributes_count) : (m +%= 1) {
if (data.*.meshes[i].primitives[j].targets[k].attributes[m].data.*.count != first.*.count) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
}
var indices: [*c]cgltf_accessor = data.*.meshes[i].primitives[j].indices;
_ = &indices;
if ((((indices != null) and (indices.*.component_type != @as(c_uint, @bitCast(cgltf_component_type_r_8u)))) and (indices.*.component_type != @as(c_uint, @bitCast(cgltf_component_type_r_16u)))) and (indices.*.component_type != @as(c_uint, @bitCast(cgltf_component_type_r_32u)))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((indices != null) and (indices.*.type != @as(c_uint, @bitCast(cgltf_type_scalar)))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if ((indices != null) and (indices.*.stride != cgltf_component_size(indices.*.component_type))) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
if (((indices != null) and (indices.*.buffer_view != null)) and (indices.*.buffer_view.*.buffer.*.data != null)) {
var index_bound: cgltf_size = cgltf_calc_index_bound(indices.*.buffer_view, indices.*.offset, indices.*.component_type, indices.*.count);
_ = &index_bound;
if (index_bound >= first.*.count) return @as(c_uint, @bitCast(cgltf_result_data_too_short));
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].mappings_count) : (k +%= 1) {
if (data.*.meshes[i].primitives[j].mappings[k].variant >= data.*.variants_count) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.nodes_count) : (i +%= 1) {
if ((data.*.nodes[i].weights != null) and (data.*.nodes[i].mesh != null)) {
if ((data.*.nodes[i].mesh.*.primitives_count != 0) and (data.*.nodes[i].mesh.*.primitives[@as(c_uint, @intCast(@as(c_int, 0)))].targets_count != data.*.nodes[i].weights_count)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.nodes_count) : (i +%= 1) {
var p1: [*c]cgltf_node = data.*.nodes[i].parent;
_ = &p1;
var p2: [*c]cgltf_node = if (p1 != null) p1.*.parent else null;
_ = &p2;
while ((p1 != null) and (p2 != null)) {
if (p1 == p2) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
p1 = p1.*.parent;
p2 = if (p2.*.parent != null) p2.*.parent.*.parent else null;
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.scenes_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.scenes[i].nodes_count) : (j +%= 1) {
if (data.*.scenes[i].nodes[j].*.parent != null) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.animations_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.animations[i].channels_count) : (j +%= 1) {
var channel: [*c]cgltf_animation_channel = &data.*.animations[i].channels[j];
_ = &channel;
if (!(channel.*.target_node != null)) {
continue;
}
var components: cgltf_size = 1;
_ = &components;
if (channel.*.target_path == @as(c_uint, @bitCast(cgltf_animation_path_type_weights))) {
if (!(channel.*.target_node.*.mesh != null) or !(channel.*.target_node.*.mesh.*.primitives_count != 0)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
components = channel.*.target_node.*.mesh.*.primitives[@as(c_uint, @intCast(@as(c_int, 0)))].targets_count;
}
var values: cgltf_size = @as(cgltf_size, @bitCast(@as(c_long, if (channel.*.sampler.*.interpolation == @as(c_uint, @bitCast(cgltf_interpolation_type_cubic_spline))) @as(c_int, 3) else @as(c_int, 1))));
_ = &values;
if (((channel.*.sampler.*.input.*.count *% components) *% values) != channel.*.sampler.*.output.*.count) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.variants_count) : (i +%= 1) {
if (!(data.*.variants[i].name != null)) return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
}
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_free(arg_data: [*c]cgltf_data) void {
var data = arg_data;
_ = &data;
if (!(data != null)) {
return;
}
var file_release: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, ?*anyopaque) callconv(.C) void = if (data.*.file.release != null) data.*.file.release else &cgltf_default_file_release;
_ = &file_release;
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.asset.copyright)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.asset.generator)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.asset.version)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.asset.min_version)));
cgltf_free_extensions(data, data.*.asset.extensions, data.*.asset.extensions_count);
cgltf_free_extras(data, &data.*.asset.extras);
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.accessors_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.accessors[i].name)));
cgltf_free_extensions(data, data.*.accessors[i].extensions, data.*.accessors[i].extensions_count);
cgltf_free_extras(data, &data.*.accessors[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.accessors)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.buffer_views_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.buffer_views[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, data.*.buffer_views[i].data);
cgltf_free_extensions(data, data.*.buffer_views[i].extensions, data.*.buffer_views[i].extensions_count);
cgltf_free_extras(data, &data.*.buffer_views[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.buffer_views)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.buffers_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.buffers[i].name)));
if (data.*.buffers[i].data_free_method == @as(c_uint, @bitCast(cgltf_data_free_method_file_release))) {
file_release.?(&data.*.memory, &data.*.file, data.*.buffers[i].data);
} else if (data.*.buffers[i].data_free_method == @as(c_uint, @bitCast(cgltf_data_free_method_memory_free))) {
data.*.memory.free_func.?(data.*.memory.user_data, data.*.buffers[i].data);
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.buffers[i].uri)));
cgltf_free_extensions(data, data.*.buffers[i].extensions, data.*.buffers[i].extensions_count);
cgltf_free_extras(data, &data.*.buffers[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.buffers)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.meshes_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].name)));
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.meshes[i].primitives_count) : (j +%= 1) {
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].attributes_count) : (k +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].attributes[k].name)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].attributes)));
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].targets_count) : (k +%= 1) {
{
var m: cgltf_size = 0;
_ = &m;
while (m < data.*.meshes[i].primitives[j].targets[k].attributes_count) : (m +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].targets[k].attributes[m].name)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].targets[k].attributes)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].targets)));
if (data.*.meshes[i].primitives[j].has_draco_mesh_compression != 0) {
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].draco_mesh_compression.attributes_count) : (k +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].draco_mesh_compression.attributes[k].name)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].draco_mesh_compression.attributes)));
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].mappings_count) : (k +%= 1) {
cgltf_free_extras(data, &data.*.meshes[i].primitives[j].mappings[k].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives[j].mappings)));
cgltf_free_extensions(data, data.*.meshes[i].primitives[j].extensions, data.*.meshes[i].primitives[j].extensions_count);
cgltf_free_extras(data, &data.*.meshes[i].primitives[j].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].primitives)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].weights)));
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.meshes[i].target_names_count) : (j +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].target_names[j])));
}
}
cgltf_free_extensions(data, data.*.meshes[i].extensions, data.*.meshes[i].extensions_count);
cgltf_free_extras(data, &data.*.meshes[i].extras);
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes[i].target_names)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.meshes)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.materials_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.materials[i].name)));
cgltf_free_extensions(data, data.*.materials[i].extensions, data.*.materials[i].extensions_count);
cgltf_free_extras(data, &data.*.materials[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.materials)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.images_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.images[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.images[i].uri)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.images[i].mime_type)));
cgltf_free_extensions(data, data.*.images[i].extensions, data.*.images[i].extensions_count);
cgltf_free_extras(data, &data.*.images[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.images)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.textures_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.textures[i].name)));
cgltf_free_extensions(data, data.*.textures[i].extensions, data.*.textures[i].extensions_count);
cgltf_free_extras(data, &data.*.textures[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.textures)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.samplers_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.samplers[i].name)));
cgltf_free_extensions(data, data.*.samplers[i].extensions, data.*.samplers[i].extensions_count);
cgltf_free_extras(data, &data.*.samplers[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.samplers)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.skins_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.skins[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.skins[i].joints)));
cgltf_free_extensions(data, data.*.skins[i].extensions, data.*.skins[i].extensions_count);
cgltf_free_extras(data, &data.*.skins[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.skins)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.cameras_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.cameras[i].name)));
if (data.*.cameras[i].type == @as(c_uint, @bitCast(cgltf_camera_type_perspective))) {
cgltf_free_extras(data, &data.*.cameras[i].data.perspective.extras);
} else if (data.*.cameras[i].type == @as(c_uint, @bitCast(cgltf_camera_type_orthographic))) {
cgltf_free_extras(data, &data.*.cameras[i].data.orthographic.extras);
}
cgltf_free_extensions(data, data.*.cameras[i].extensions, data.*.cameras[i].extensions_count);
cgltf_free_extras(data, &data.*.cameras[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.cameras)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.lights_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.lights[i].name)));
cgltf_free_extras(data, &data.*.lights[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.lights)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.nodes_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes[i].children)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes[i].weights)));
if (data.*.nodes[i].has_mesh_gpu_instancing != 0) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.nodes[i].mesh_gpu_instancing.attributes_count) : (j +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes[i].mesh_gpu_instancing.attributes[j].name)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes[i].mesh_gpu_instancing.attributes)));
}
cgltf_free_extensions(data, data.*.nodes[i].extensions, data.*.nodes[i].extensions_count);
cgltf_free_extras(data, &data.*.nodes[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.nodes)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.scenes_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.scenes[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.scenes[i].nodes)));
cgltf_free_extensions(data, data.*.scenes[i].extensions, data.*.scenes[i].extensions_count);
cgltf_free_extras(data, &data.*.scenes[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.scenes)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.animations_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.animations[i].name)));
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.animations[i].samplers_count) : (j +%= 1) {
cgltf_free_extensions(data, data.*.animations[i].samplers[j].extensions, data.*.animations[i].samplers[j].extensions_count);
cgltf_free_extras(data, &data.*.animations[i].samplers[j].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.animations[i].samplers)));
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.animations[i].channels_count) : (j +%= 1) {
cgltf_free_extensions(data, data.*.animations[i].channels[j].extensions, data.*.animations[i].channels[j].extensions_count);
cgltf_free_extras(data, &data.*.animations[i].channels[j].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.animations[i].channels)));
cgltf_free_extensions(data, data.*.animations[i].extensions, data.*.animations[i].extensions_count);
cgltf_free_extras(data, &data.*.animations[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.animations)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.variants_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.variants[i].name)));
cgltf_free_extras(data, &data.*.variants[i].extras);
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.variants)));
cgltf_free_extensions(data, data.*.data_extensions, data.*.data_extensions_count);
cgltf_free_extras(data, &data.*.extras);
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.extensions_used_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.extensions_used[i])));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.extensions_used)));
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.extensions_required_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.extensions_required[i])));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data.*.extensions_required)));
file_release.?(&data.*.memory, &data.*.file, data.*.file_data);
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(data)));
}
pub export fn cgltf_node_transform_local(arg_node: [*c]const cgltf_node, arg_out_matrix: [*c]cgltf_float) void {
var node = arg_node;
_ = &node;
var out_matrix = arg_out_matrix;
_ = &out_matrix;
var lm: [*c]cgltf_float = out_matrix;
_ = &lm;
if (node.*.has_matrix != 0) {
_ = memcpy(@as(?*anyopaque, @ptrCast(lm)), @as(?*const anyopaque, @ptrCast(@as([*c]const cgltf_float, @ptrCast(@alignCast(&node.*.matrix))))), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 16)))));
} else {
var tx: f32 = node.*.translation[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &tx;
var ty: f32 = node.*.translation[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &ty;
var tz: f32 = node.*.translation[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &tz;
var qx: f32 = node.*.rotation[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &qx;
var qy: f32 = node.*.rotation[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &qy;
var qz: f32 = node.*.rotation[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &qz;
var qw: f32 = node.*.rotation[@as(c_uint, @intCast(@as(c_int, 3)))];
_ = &qw;
var sx: f32 = node.*.scale[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &sx;
var sy: f32 = node.*.scale[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &sy;
var sz: f32 = node.*.scale[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &sz;
lm[@as(c_uint, @intCast(@as(c_int, 0)))] = ((@as(f32, @floatFromInt(@as(c_int, 1))) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qy)) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qz) * qz)) * sx;
lm[@as(c_uint, @intCast(@as(c_int, 1)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qy) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * qz) * qw)) * sx;
lm[@as(c_uint, @intCast(@as(c_int, 2)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qz) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qw)) * sx;
lm[@as(c_uint, @intCast(@as(c_int, 3)))] = 0.0;
lm[@as(c_uint, @intCast(@as(c_int, 4)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qy) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qz) * qw)) * sy;
lm[@as(c_uint, @intCast(@as(c_int, 5)))] = ((@as(f32, @floatFromInt(@as(c_int, 1))) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qx)) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qz) * qz)) * sy;
lm[@as(c_uint, @intCast(@as(c_int, 6)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qz) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qw)) * sy;
lm[@as(c_uint, @intCast(@as(c_int, 7)))] = 0.0;
lm[@as(c_uint, @intCast(@as(c_int, 8)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qz) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qw)) * sz;
lm[@as(c_uint, @intCast(@as(c_int, 9)))] = (((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qz) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qw)) * sz;
lm[@as(c_uint, @intCast(@as(c_int, 10)))] = ((@as(f32, @floatFromInt(@as(c_int, 1))) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qx) * qx)) - ((@as(f32, @floatFromInt(@as(c_int, 2))) * qy) * qy)) * sz;
lm[@as(c_uint, @intCast(@as(c_int, 11)))] = 0.0;
lm[@as(c_uint, @intCast(@as(c_int, 12)))] = tx;
lm[@as(c_uint, @intCast(@as(c_int, 13)))] = ty;
lm[@as(c_uint, @intCast(@as(c_int, 14)))] = tz;
lm[@as(c_uint, @intCast(@as(c_int, 15)))] = 1.0;
}
}
pub export fn cgltf_node_transform_world(arg_node: [*c]const cgltf_node, arg_out_matrix: [*c]cgltf_float) void {
var node = arg_node;
_ = &node;
var out_matrix = arg_out_matrix;
_ = &out_matrix;
var lm: [*c]cgltf_float = out_matrix;
_ = &lm;
cgltf_node_transform_local(node, lm);
var parent: [*c]const cgltf_node = node.*.parent;
_ = &parent;
while (parent != null) {
var pm: [16]f32 = undefined;
_ = &pm;
cgltf_node_transform_local(parent, @as([*c]f32, @ptrCast(@alignCast(&pm))));
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 4)) : (i += 1) {
var l0: f32 = (blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 0);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &l0;
var l1: f32 = (blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 1);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &l1;
var l2: f32 = (blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 2);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &l2;
var r0: f32 = ((l0 * pm[@as(c_uint, @intCast(@as(c_int, 0)))]) + (l1 * pm[@as(c_uint, @intCast(@as(c_int, 4)))])) + (l2 * pm[@as(c_uint, @intCast(@as(c_int, 8)))]);
_ = &r0;
var r1: f32 = ((l0 * pm[@as(c_uint, @intCast(@as(c_int, 1)))]) + (l1 * pm[@as(c_uint, @intCast(@as(c_int, 5)))])) + (l2 * pm[@as(c_uint, @intCast(@as(c_int, 9)))]);
_ = &r1;
var r2: f32 = ((l0 * pm[@as(c_uint, @intCast(@as(c_int, 2)))]) + (l1 * pm[@as(c_uint, @intCast(@as(c_int, 6)))])) + (l2 * pm[@as(c_uint, @intCast(@as(c_int, 10)))]);
_ = &r2;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 0);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = r0;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 1);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = r1;
(blk: {
const tmp = (i * @as(c_int, 4)) + @as(c_int, 2);
if (tmp >= 0) break :blk lm + @as(usize, @intCast(tmp)) else break :blk lm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = r2;
}
}
lm[@as(c_uint, @intCast(@as(c_int, 12)))] += @as(cgltf_float, @floatCast(pm[@as(c_uint, @intCast(@as(c_int, 12)))]));
lm[@as(c_uint, @intCast(@as(c_int, 13)))] += @as(cgltf_float, @floatCast(pm[@as(c_uint, @intCast(@as(c_int, 13)))]));
lm[@as(c_uint, @intCast(@as(c_int, 14)))] += @as(cgltf_float, @floatCast(pm[@as(c_uint, @intCast(@as(c_int, 14)))]));
parent = parent.*.parent;
}
}
pub export fn cgltf_buffer_view_data(arg_view: [*c]const cgltf_buffer_view) [*c]const u8 {
var view = arg_view;
_ = &view;
if (view.*.data != null) return @as([*c]const u8, @ptrCast(@alignCast(view.*.data)));
if (!(view.*.buffer.*.data != null)) return null;
var result: [*c]const u8 = @as([*c]const u8, @ptrCast(@alignCast(view.*.buffer.*.data)));
_ = &result;
result += @as([*c]const u8, @ptrFromInt(view.*.offset));
return result;
}
pub export fn cgltf_accessor_read_float(arg_accessor: [*c]const cgltf_accessor, arg_index_1: cgltf_size, arg_out: [*c]cgltf_float, arg_element_size: cgltf_size) cgltf_bool {
var accessor = arg_accessor;
_ = &accessor;
var index_1 = arg_index_1;
_ = &index_1;
var out = arg_out;
_ = &out;
var element_size = arg_element_size;
_ = &element_size;
if (accessor.*.is_sparse != 0) {
return 0;
}
if (accessor.*.buffer_view == @as([*c]cgltf_buffer_view, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = memset(@as(?*anyopaque, @ptrCast(out)), @as(c_int, 0), element_size *% @sizeOf(cgltf_float));
return 1;
}
var element: [*c]const u8 = cgltf_buffer_view_data(accessor.*.buffer_view);
_ = &element;
if (element == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
element += @as([*c]const u8, @ptrFromInt(accessor.*.offset +% (accessor.*.stride *% index_1)));
return cgltf_element_read_float(element, accessor.*.type, accessor.*.component_type, accessor.*.normalized, out, element_size);
}
pub export fn cgltf_accessor_read_uint(arg_accessor: [*c]const cgltf_accessor, arg_index_1: cgltf_size, arg_out: [*c]cgltf_uint, arg_element_size: cgltf_size) cgltf_bool {
var accessor = arg_accessor;
_ = &accessor;
var index_1 = arg_index_1;
_ = &index_1;
var out = arg_out;
_ = &out;
var element_size = arg_element_size;
_ = &element_size;
if (accessor.*.is_sparse != 0) {
return 0;
}
if (accessor.*.buffer_view == @as([*c]cgltf_buffer_view, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = memset(@as(?*anyopaque, @ptrCast(out)), @as(c_int, 0), element_size *% @sizeOf(cgltf_uint));
return 1;
}
var element: [*c]const u8 = cgltf_buffer_view_data(accessor.*.buffer_view);
_ = &element;
if (element == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
element += @as([*c]const u8, @ptrFromInt(accessor.*.offset +% (accessor.*.stride *% index_1)));
return cgltf_element_read_uint(element, accessor.*.type, accessor.*.component_type, out, element_size);
}
pub export fn cgltf_accessor_read_index(arg_accessor: [*c]const cgltf_accessor, arg_index_1: cgltf_size) cgltf_size {
var accessor = arg_accessor;
_ = &accessor;
var index_1 = arg_index_1;
_ = &index_1;
if (accessor.*.is_sparse != 0) {
return 0;
}
if (accessor.*.buffer_view == @as([*c]cgltf_buffer_view, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
var element: [*c]const u8 = cgltf_buffer_view_data(accessor.*.buffer_view);
_ = &element;
if (element == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
element += @as([*c]const u8, @ptrFromInt(accessor.*.offset +% (accessor.*.stride *% index_1)));
return cgltf_component_read_index(@as(?*const anyopaque, @ptrCast(element)), accessor.*.component_type);
}
pub export fn cgltf_num_components(arg_type: cgltf_type) cgltf_size {
var @"type" = arg_type;
_ = &@"type";
while (true) {
switch (@"type") {
@as(c_uint, @bitCast(@as(c_int, 2))) => return 2,
@as(c_uint, @bitCast(@as(c_int, 3))) => return 3,
@as(c_uint, @bitCast(@as(c_int, 4))) => return 4,
@as(c_uint, @bitCast(@as(c_int, 5))) => return 4,
@as(c_uint, @bitCast(@as(c_int, 6))) => return 9,
@as(c_uint, @bitCast(@as(c_int, 7))) => return 16,
else => return 1,
}
break;
}
return @import("std").mem.zeroes(cgltf_size);
}
pub export fn cgltf_component_size(arg_component_type: cgltf_component_type) cgltf_size {
var component_type = arg_component_type;
_ = &component_type;
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 1))), @as(c_uint, @bitCast(@as(c_int, 2))) => return 1,
@as(c_uint, @bitCast(@as(c_int, 3))), @as(c_uint, @bitCast(@as(c_int, 4))) => return 2,
@as(c_uint, @bitCast(@as(c_int, 5))), @as(c_uint, @bitCast(@as(c_int, 6))) => return 4,
else => return 0,
}
break;
}
return @import("std").mem.zeroes(cgltf_size);
}
pub export fn cgltf_calc_size(arg_type: cgltf_type, arg_component_type: cgltf_component_type) cgltf_size {
var @"type" = arg_type;
_ = &@"type";
var component_type = arg_component_type;
_ = &component_type;
var component_size: cgltf_size = cgltf_component_size(component_type);
_ = &component_size;
if ((@"type" == @as(c_uint, @bitCast(cgltf_type_mat2))) and (component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))))) {
return @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 8)))) *% component_size;
} else if ((@"type" == @as(c_uint, @bitCast(cgltf_type_mat3))) and ((component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))) or (component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))))) {
return @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 12)))) *% component_size;
}
return component_size *% cgltf_num_components(@"type");
}
pub export fn cgltf_accessor_unpack_floats(arg_accessor: [*c]const cgltf_accessor, arg_out: [*c]cgltf_float, arg_float_count: cgltf_size) cgltf_size {
var accessor = arg_accessor;
_ = &accessor;
var out = arg_out;
_ = &out;
var float_count = arg_float_count;
_ = &float_count;
var floats_per_element: cgltf_size = cgltf_num_components(accessor.*.type);
_ = &floats_per_element;
var available_floats: cgltf_size = accessor.*.count *% floats_per_element;
_ = &available_floats;
if (out == @as([*c]cgltf_float, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return available_floats;
}
float_count = if (available_floats < float_count) available_floats else float_count;
var element_count: cgltf_size = float_count / floats_per_element;
_ = &element_count;
if (accessor.*.buffer_view == @as([*c]cgltf_buffer_view, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = memset(@as(?*anyopaque, @ptrCast(out)), @as(c_int, 0), (element_count *% floats_per_element) *% @sizeOf(cgltf_float));
} else {
var element: [*c]const u8 = cgltf_buffer_view_data(accessor.*.buffer_view);
_ = &element;
if (element == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
element += @as([*c]const u8, @ptrFromInt(accessor.*.offset));
if ((accessor.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) and (accessor.*.stride == (floats_per_element *% @sizeOf(cgltf_float)))) {
_ = memcpy(@as(?*anyopaque, @ptrCast(out)), @as(?*const anyopaque, @ptrCast(element)), (element_count *% floats_per_element) *% @sizeOf(cgltf_float));
} else {
var dest: [*c]cgltf_float = out;
_ = &dest;
{
var index_1: cgltf_size = 0;
_ = &index_1;
while (index_1 < element_count) : (_ = blk: {
_ = blk_1: {
index_1 +%= 1;
break :blk_1 blk_2: {
const ref = &dest;
ref.* += @as([*c]cgltf_float, @ptrFromInt(floats_per_element));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &element;
ref.* += @as([*c]const u8, @ptrFromInt(accessor.*.stride));
break :blk_1 ref.*;
};
}) {
if (!(cgltf_element_read_float(element, accessor.*.type, accessor.*.component_type, accessor.*.normalized, dest, floats_per_element) != 0)) {
return 0;
}
}
}
}
}
if (accessor.*.is_sparse != 0) {
var sparse: [*c]const cgltf_accessor_sparse = &accessor.*.sparse;
_ = &sparse;
var index_data: [*c]const u8 = cgltf_buffer_view_data(sparse.*.indices_buffer_view);
_ = &index_data;
var reader_head: [*c]const u8 = cgltf_buffer_view_data(sparse.*.values_buffer_view);
_ = &reader_head;
if ((index_data == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) or (reader_head == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
return 0;
}
index_data += @as([*c]const u8, @ptrFromInt(sparse.*.indices_byte_offset));
reader_head += @as([*c]const u8, @ptrFromInt(sparse.*.values_byte_offset));
var index_stride: cgltf_size = cgltf_component_size(sparse.*.indices_component_type);
_ = &index_stride;
{
var reader_index: cgltf_size = 0;
_ = &reader_index;
while (reader_index < sparse.*.count) : (_ = blk: {
_ = blk_1: {
reader_index +%= 1;
break :blk_1 blk_2: {
const ref = &index_data;
ref.* += @as([*c]const u8, @ptrFromInt(index_stride));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &reader_head;
ref.* += @as([*c]const u8, @ptrFromInt(accessor.*.stride));
break :blk_1 ref.*;
};
}) {
var writer_index: usize = cgltf_component_read_index(@as(?*const anyopaque, @ptrCast(index_data)), sparse.*.indices_component_type);
_ = &writer_index;
var writer_head: [*c]f32 = out + (writer_index *% floats_per_element);
_ = &writer_head;
if (!(cgltf_element_read_float(reader_head, accessor.*.type, accessor.*.component_type, accessor.*.normalized, writer_head, floats_per_element) != 0)) {
return 0;
}
}
}
}
return element_count *% floats_per_element;
}
pub export fn cgltf_accessor_unpack_indices(arg_accessor: [*c]const cgltf_accessor, arg_out: ?*anyopaque, arg_out_component_size: cgltf_size, arg_index_count: cgltf_size) cgltf_size {
var accessor = arg_accessor;
_ = &accessor;
var out = arg_out;
_ = &out;
var out_component_size = arg_out_component_size;
_ = &out_component_size;
var index_count = arg_index_count;
_ = &index_count;
if (out == @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
return accessor.*.count;
}
index_count = if (accessor.*.count < index_count) accessor.*.count else index_count;
var index_component_size: cgltf_size = cgltf_component_size(accessor.*.component_type);
_ = &index_component_size;
if (accessor.*.is_sparse != 0) {
return 0;
}
if (accessor.*.buffer_view == @as([*c]cgltf_buffer_view, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
if (index_component_size > out_component_size) {
return 0;
}
var element: [*c]const u8 = cgltf_buffer_view_data(accessor.*.buffer_view);
_ = &element;
if (element == @as([*c]const u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
element += @as([*c]const u8, @ptrFromInt(accessor.*.offset));
if ((index_component_size == out_component_size) and (accessor.*.stride == out_component_size)) {
_ = memcpy(out, @as(?*const anyopaque, @ptrCast(element)), index_count *% index_component_size);
return index_count;
}
while (true) {
switch (out_component_size) {
@as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2)))) => {
{
var index_1: cgltf_size = 0;
_ = &index_1;
while (index_1 < index_count) : (_ = blk: {
index_1 +%= 1;
break :blk blk_1: {
const ref = &element;
ref.* += @as([*c]const u8, @ptrFromInt(accessor.*.stride));
break :blk_1 ref.*;
};
}) {
@as([*c]u16, @ptrCast(@alignCast(out)))[index_1] = @as(u16, @bitCast(@as(c_ushort, @truncate(cgltf_component_read_index(@as(?*const anyopaque, @ptrCast(element)), accessor.*.component_type)))));
}
}
break;
},
@as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))) => {
{
var index_1: cgltf_size = 0;
_ = &index_1;
while (index_1 < index_count) : (_ = blk: {
index_1 +%= 1;
break :blk blk_1: {
const ref = &element;
ref.* += @as([*c]const u8, @ptrFromInt(accessor.*.stride));
break :blk_1 ref.*;
};
}) {
@as([*c]u32, @ptrCast(@alignCast(out)))[index_1] = @as(u32, @bitCast(@as(c_uint, @truncate(cgltf_component_read_index(@as(?*const anyopaque, @ptrCast(element)), accessor.*.component_type)))));
}
}
break;
},
else => break,
}
break;
}
return index_count;
}
pub export fn cgltf_copy_extras_json(arg_data: [*c]const cgltf_data, arg_extras: [*c]const cgltf_extras, arg_dest: [*c]u8, arg_dest_size: [*c]cgltf_size) cgltf_result {
var data = arg_data;
_ = &data;
var extras = arg_extras;
_ = &extras;
var dest = arg_dest;
_ = &dest;
var dest_size = arg_dest_size;
_ = &dest_size;
var json_size: cgltf_size = extras.*.end_offset -% extras.*.start_offset;
_ = &json_size;
if (!(dest != null)) {
if (dest_size != null) {
dest_size.* = json_size +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))));
return @as(c_uint, @bitCast(cgltf_result_success));
}
return @as(c_uint, @bitCast(cgltf_result_invalid_options));
}
if ((dest_size.* +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))) < json_size) {
_ = strncpy(dest, data.*.json + extras.*.start_offset, dest_size.* -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))));
dest[dest_size.* -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))] = 0;
} else {
_ = strncpy(dest, data.*.json + extras.*.start_offset, json_size);
dest[json_size] = 0;
}
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub export fn cgltf_mesh_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_mesh) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.meshes))), @sizeOf(cgltf_mesh)))) < data.*.meshes_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->meshes) < data->meshes_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2485))), "cgltf_size cgltf_mesh_index(const cgltf_data *, const cgltf_mesh *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.meshes))), @sizeOf(cgltf_mesh))));
}
pub export fn cgltf_material_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_material) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.materials))), @sizeOf(cgltf_material)))) < data.*.materials_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->materials) < data->materials_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2491))), "cgltf_size cgltf_material_index(const cgltf_data *, const cgltf_material *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.materials))), @sizeOf(cgltf_material))));
}
pub export fn cgltf_accessor_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_accessor) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.accessors))), @sizeOf(cgltf_accessor)))) < data.*.accessors_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->accessors) < data->accessors_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2497))), "cgltf_size cgltf_accessor_index(const cgltf_data *, const cgltf_accessor *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.accessors))), @sizeOf(cgltf_accessor))));
}
pub export fn cgltf_buffer_view_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_buffer_view) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.buffer_views))), @sizeOf(cgltf_buffer_view)))) < data.*.buffer_views_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->buffer_views) < data->buffer_views_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2503))), "cgltf_size cgltf_buffer_view_index(const cgltf_data *, const cgltf_buffer_view *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.buffer_views))), @sizeOf(cgltf_buffer_view))));
}
pub export fn cgltf_buffer_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_buffer) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.buffers))), @sizeOf(cgltf_buffer)))) < data.*.buffers_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->buffers) < data->buffers_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2509))), "cgltf_size cgltf_buffer_index(const cgltf_data *, const cgltf_buffer *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.buffers))), @sizeOf(cgltf_buffer))));
}
pub export fn cgltf_image_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_image) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.images))), @sizeOf(cgltf_image)))) < data.*.images_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->images) < data->images_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2515))), "cgltf_size cgltf_image_index(const cgltf_data *, const cgltf_image *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.images))), @sizeOf(cgltf_image))));
}
pub export fn cgltf_texture_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_texture) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.textures))), @sizeOf(cgltf_texture)))) < data.*.textures_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->textures) < data->textures_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2521))), "cgltf_size cgltf_texture_index(const cgltf_data *, const cgltf_texture *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.textures))), @sizeOf(cgltf_texture))));
}
pub export fn cgltf_sampler_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_sampler) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.samplers))), @sizeOf(cgltf_sampler)))) < data.*.samplers_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->samplers) < data->samplers_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2527))), "cgltf_size cgltf_sampler_index(const cgltf_data *, const cgltf_sampler *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.samplers))), @sizeOf(cgltf_sampler))));
}
pub export fn cgltf_skin_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_skin) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.skins))), @sizeOf(cgltf_skin)))) < data.*.skins_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->skins) < data->skins_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2533))), "cgltf_size cgltf_skin_index(const cgltf_data *, const cgltf_skin *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.skins))), @sizeOf(cgltf_skin))));
}
pub export fn cgltf_camera_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_camera) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.cameras))), @sizeOf(cgltf_camera)))) < data.*.cameras_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->cameras) < data->cameras_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2539))), "cgltf_size cgltf_camera_index(const cgltf_data *, const cgltf_camera *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.cameras))), @sizeOf(cgltf_camera))));
}
pub export fn cgltf_light_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_light) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.lights))), @sizeOf(cgltf_light)))) < data.*.lights_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->lights) < data->lights_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2545))), "cgltf_size cgltf_light_index(const cgltf_data *, const cgltf_light *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.lights))), @sizeOf(cgltf_light))));
}
pub export fn cgltf_node_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_node) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.nodes))), @sizeOf(cgltf_node)))) < data.*.nodes_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->nodes) < data->nodes_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2551))), "cgltf_size cgltf_node_index(const cgltf_data *, const cgltf_node *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.nodes))), @sizeOf(cgltf_node))));
}
pub export fn cgltf_scene_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_scene) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.scenes))), @sizeOf(cgltf_scene)))) < data.*.scenes_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->scenes) < data->scenes_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2557))), "cgltf_size cgltf_scene_index(const cgltf_data *, const cgltf_scene *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.scenes))), @sizeOf(cgltf_scene))));
}
pub export fn cgltf_animation_index(arg_data: [*c]const cgltf_data, arg_object: [*c]const cgltf_animation) cgltf_size {
var data = arg_data;
_ = &data;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.animations))), @sizeOf(cgltf_animation)))) < data.*.animations_count)) {} else {
__assert_fail("object && (cgltf_size)(object - data->animations) < data->animations_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2563))), "cgltf_size cgltf_animation_index(const cgltf_data *, const cgltf_animation *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(data.*.animations))), @sizeOf(cgltf_animation))));
}
pub export fn cgltf_animation_sampler_index(arg_animation: [*c]const cgltf_animation, arg_object: [*c]const cgltf_animation_sampler) cgltf_size {
var animation = arg_animation;
_ = &animation;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(animation.*.samplers))), @sizeOf(cgltf_animation_sampler)))) < animation.*.samplers_count)) {} else {
__assert_fail("object && (cgltf_size)(object - animation->samplers) < animation->samplers_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2569))), "cgltf_size cgltf_animation_sampler_index(const cgltf_animation *, const cgltf_animation_sampler *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(animation.*.samplers))), @sizeOf(cgltf_animation_sampler))));
}
pub export fn cgltf_animation_channel_index(arg_animation: [*c]const cgltf_animation, arg_object: [*c]const cgltf_animation_channel) cgltf_size {
var animation = arg_animation;
_ = &animation;
var object = arg_object;
_ = &object;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((object != null) and (@as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(animation.*.channels))), @sizeOf(cgltf_animation_channel)))) < animation.*.channels_count)) {} else {
__assert_fail("object && (cgltf_size)(object - animation->channels) < animation->channels_count", "./external/cgltf.h", @as(c_uint, @bitCast(@as(c_int, 2575))), "cgltf_size cgltf_animation_channel_index(const cgltf_animation *, const cgltf_animation_channel *)");
};
};
};
return @as(cgltf_size, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(object) -% @intFromPtr(animation.*.channels))), @sizeOf(cgltf_animation_channel))));
}
pub const JSMN_UNDEFINED: c_int = 0;
pub const JSMN_OBJECT: c_int = 1;
pub const JSMN_ARRAY: c_int = 2;
pub const JSMN_STRING: c_int = 3;
pub const JSMN_PRIMITIVE: c_int = 4;
pub const jsmntype_t = c_uint;
pub const JSMN_ERROR_NOMEM: c_int = -1;
pub const JSMN_ERROR_INVAL: c_int = -2;
pub const JSMN_ERROR_PART: c_int = -3;
pub const enum_jsmnerr = c_int;
pub const jsmntok_t = extern struct {
type: jsmntype_t = @import("std").mem.zeroes(jsmntype_t),
start: ptrdiff_t = @import("std").mem.zeroes(ptrdiff_t),
end: ptrdiff_t = @import("std").mem.zeroes(ptrdiff_t),
size: c_int = @import("std").mem.zeroes(c_int),
parent: c_int = @import("std").mem.zeroes(c_int),
};
pub const jsmn_parser = extern struct {
pos: usize = @import("std").mem.zeroes(usize),
toknext: c_uint = @import("std").mem.zeroes(c_uint),
toksuper: c_int = @import("std").mem.zeroes(c_int),
};
pub fn jsmn_init(arg_parser: [*c]jsmn_parser) callconv(.C) void {
var parser = arg_parser;
_ = &parser;
parser.*.pos = 0;
parser.*.toknext = 0;
parser.*.toksuper = -@as(c_int, 1);
}
pub fn jsmn_parse(arg_parser: [*c]jsmn_parser, arg_js: [*c]const u8, arg_len: usize, arg_tokens: [*c]jsmntok_t, arg_num_tokens: usize) callconv(.C) c_int {
var parser = arg_parser;
_ = &parser;
var js = arg_js;
_ = &js;
var len = arg_len;
_ = &len;
var tokens = arg_tokens;
_ = &tokens;
var num_tokens = arg_num_tokens;
_ = &num_tokens;
var r: c_int = undefined;
_ = &r;
var i: c_int = undefined;
_ = &i;
var token: [*c]jsmntok_t = undefined;
_ = &token;
var count: c_int = @as(c_int, @bitCast(parser.*.toknext));
_ = &count;
while ((parser.*.pos < len) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) != @as(c_int, '\x00'))) : (parser.*.pos +%= 1) {
var c: u8 = undefined;
_ = &c;
var @"type": jsmntype_t = undefined;
_ = &@"type";
c = js[parser.*.pos];
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, c)))) {
@as(c_int, 123), @as(c_int, 91) => {
count += 1;
if (tokens == @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
break;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return JSMN_ERROR_NOMEM;
if (parser.*.toksuper != -@as(c_int, 1)) {
(blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size += 1;
token.*.parent = parser.*.toksuper;
}
token.*.type = @as(c_uint, @bitCast(if (@as(c_int, @bitCast(@as(c_uint, c))) == @as(c_int, '{')) JSMN_OBJECT else JSMN_ARRAY));
token.*.start = @as(ptrdiff_t, @bitCast(parser.*.pos));
parser.*.toksuper = @as(c_int, @bitCast(parser.*.toknext -% @as(c_uint, @bitCast(@as(c_int, 1)))));
break;
},
@as(c_int, 125), @as(c_int, 93) => {
if (tokens == @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) break;
@"type" = @as(c_uint, @bitCast(if (@as(c_int, @bitCast(@as(c_uint, c))) == @as(c_int, '}')) JSMN_OBJECT else JSMN_ARRAY));
if (parser.*.toknext < @as(c_uint, @bitCast(@as(c_int, 1)))) {
return JSMN_ERROR_INVAL;
}
token = &tokens[parser.*.toknext -% @as(c_uint, @bitCast(@as(c_int, 1)))];
while (true) {
if ((token.*.start != @as(ptrdiff_t, @bitCast(@as(c_long, -@as(c_int, 1))))) and (token.*.end == @as(ptrdiff_t, @bitCast(@as(c_long, -@as(c_int, 1)))))) {
if (token.*.type != @"type") {
return JSMN_ERROR_INVAL;
}
token.*.end = @as(ptrdiff_t, @bitCast(parser.*.pos +% @as(usize, @bitCast(@as(c_long, @as(c_int, 1))))));
parser.*.toksuper = token.*.parent;
break;
}
if (token.*.parent == -@as(c_int, 1)) {
if ((token.*.type != @"type") or (parser.*.toksuper == -@as(c_int, 1))) {
return JSMN_ERROR_INVAL;
}
break;
}
token = &(blk: {
const tmp = token.*.parent;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
break;
},
@as(c_int, 34) => {
r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
if (r < @as(c_int, 0)) return r;
count += 1;
if ((parser.*.toksuper != -@as(c_int, 1)) and (tokens != @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
(blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size += 1;
}
break;
},
@as(c_int, 9), @as(c_int, 13), @as(c_int, 10), @as(c_int, 32) => break,
@as(c_int, 58) => {
parser.*.toksuper = @as(c_int, @bitCast(parser.*.toknext -% @as(c_uint, @bitCast(@as(c_int, 1)))));
break;
},
@as(c_int, 44) => {
if ((((tokens != @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) and (parser.*.toksuper != -@as(c_int, 1))) and ((blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY)))) and ((blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT)))) {
parser.*.toksuper = (blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent;
}
break;
},
@as(c_int, 45), @as(c_int, 48), @as(c_int, 49), @as(c_int, 50), @as(c_int, 51), @as(c_int, 52), @as(c_int, 53), @as(c_int, 54), @as(c_int, 55), @as(c_int, 56), @as(c_int, 57), @as(c_int, 116), @as(c_int, 102), @as(c_int, 110) => {
if ((tokens != @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) and (parser.*.toksuper != -@as(c_int, 1))) {
var t: [*c]jsmntok_t = &(blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &t;
if ((t.*.type == @as(c_uint, @bitCast(JSMN_OBJECT))) or ((t.*.type == @as(c_uint, @bitCast(JSMN_STRING))) and (t.*.size != @as(c_int, 0)))) {
return JSMN_ERROR_INVAL;
}
}
r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
if (r < @as(c_int, 0)) return r;
count += 1;
if ((parser.*.toksuper != -@as(c_int, 1)) and (tokens != @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
(blk: {
const tmp = parser.*.toksuper;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size += 1;
}
break;
},
else => return JSMN_ERROR_INVAL,
}
break;
}
}
if (tokens != @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
{
i = @as(c_int, @bitCast(parser.*.toknext -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (i -= 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start != @as(ptrdiff_t, @bitCast(@as(c_long, -@as(c_int, 1))))) and ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end == @as(ptrdiff_t, @bitCast(@as(c_long, -@as(c_int, 1)))))) {
return JSMN_ERROR_PART;
}
}
}
}
return count;
}
pub const GlbVersion: u32 = 2;
pub const GlbMagic: u32 = @as(u32, @bitCast(@as(c_int, 1179937895)));
pub const GlbMagicJsonChunk: u32 = @as(u32, @bitCast(@as(c_int, 1313821514)));
pub const GlbMagicBinChunk: u32 = @as(u32, @bitCast(@as(c_int, 5130562)));
pub fn cgltf_default_alloc(arg_user: ?*anyopaque, arg_size: cgltf_size) callconv(.C) ?*anyopaque {
var user = arg_user;
_ = &user;
var size = arg_size;
_ = &size;
_ = &user;
return malloc(size);
}
pub fn cgltf_default_free(arg_user: ?*anyopaque, arg_ptr: ?*anyopaque) callconv(.C) void {
var user = arg_user;
_ = &user;
var ptr = arg_ptr;
_ = &ptr;
_ = &user;
free(ptr);
}
pub fn cgltf_calloc(arg_options: [*c]cgltf_options, arg_element_size: usize, arg_count: cgltf_size) callconv(.C) ?*anyopaque {
var options = arg_options;
_ = &options;
var element_size = arg_element_size;
_ = &element_size;
var count = arg_count;
_ = &count;
if ((@as(c_ulong, 18446744073709551615) / element_size) < count) {
return @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
}
var result: ?*anyopaque = options.*.memory.alloc_func.?(options.*.memory.user_data, element_size *% count);
_ = &result;
if (!(result != null)) {
return @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
}
_ = memset(result, @as(c_int, 0), element_size *% count);
return result;
}
pub fn cgltf_default_file_read(arg_memory_options: [*c]const struct_cgltf_memory_options, arg_file_options: [*c]const struct_cgltf_file_options, arg_path: [*c]const u8, arg_size: [*c]cgltf_size, arg_data: [*c]?*anyopaque) callconv(.C) cgltf_result {
var memory_options = arg_memory_options;
_ = &memory_options;
var file_options = arg_file_options;
_ = &file_options;
var path = arg_path;
_ = &path;
var size = arg_size;
_ = &size;
var data = arg_data;
_ = &data;
_ = &file_options;
var memory_alloc: ?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque = if (memory_options.*.alloc_func != null) memory_options.*.alloc_func else &cgltf_default_alloc;
_ = &memory_alloc;
var memory_free: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void = if (memory_options.*.free_func != null) memory_options.*.free_func else &cgltf_default_free;
_ = &memory_free;
var file: [*c]FILE = fopen(path, "rb");
_ = &file;
if (!(file != null)) {
return @as(c_uint, @bitCast(cgltf_result_file_not_found));
}
var file_size: cgltf_size = if (size != null) size.* else @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))));
_ = &file_size;
if (file_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) {
_ = fseek(file, @as(c_long, @bitCast(@as(c_long, @as(c_int, 0)))), @as(c_int, 2));
var length: c_long = ftell(file);
_ = &length;
if (length < @as(c_long, @bitCast(@as(c_long, @as(c_int, 0))))) {
_ = fclose(file);
return @as(c_uint, @bitCast(cgltf_result_io_error));
}
_ = fseek(file, @as(c_long, @bitCast(@as(c_long, @as(c_int, 0)))), @as(c_int, 0));
file_size = @as(cgltf_size, @bitCast(length));
}
var file_data: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(memory_alloc.?(memory_options.*.user_data, file_size))));
_ = &file_data;
if (!(file_data != null)) {
_ = fclose(file);
return @as(c_uint, @bitCast(cgltf_result_out_of_memory));
}
var read_size: cgltf_size = fread(@as(?*anyopaque, @ptrCast(file_data)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))), file_size, file);
_ = &read_size;
_ = fclose(file);
if (read_size != file_size) {
memory_free.?(memory_options.*.user_data, @as(?*anyopaque, @ptrCast(file_data)));
return @as(c_uint, @bitCast(cgltf_result_io_error));
}
if (size != null) {
size.* = file_size;
}
if (data != null) {
data.* = @as(?*anyopaque, @ptrCast(file_data));
}
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub fn cgltf_default_file_release(arg_memory_options: [*c]const struct_cgltf_memory_options, arg_file_options: [*c]const struct_cgltf_file_options, arg_data: ?*anyopaque) callconv(.C) void {
var memory_options = arg_memory_options;
_ = &memory_options;
var file_options = arg_file_options;
_ = &file_options;
var data = arg_data;
_ = &data;
_ = &file_options;
var memfree: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void = if (memory_options.*.free_func != null) memory_options.*.free_func else &cgltf_default_free;
_ = &memfree;
memfree.?(memory_options.*.user_data, data);
}
pub export fn cgltf_parse_json(arg_options: [*c]cgltf_options, arg_json_chunk: [*c]const u8, arg_size: cgltf_size, arg_out_data: [*c][*c]cgltf_data) cgltf_result {
var options = arg_options;
_ = &options;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var size = arg_size;
_ = &size;
var out_data = arg_out_data;
_ = &out_data;
var parser: jsmn_parser = jsmn_parser{
.pos = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))),
.toknext = @as(c_uint, @bitCast(@as(c_int, 0))),
.toksuper = @as(c_int, 0),
};
_ = &parser;
if (options.*.json_token_count == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) {
var token_count: c_int = jsmn_parse(&parser, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))), size, null, @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))));
_ = &token_count;
if (token_count <= @as(c_int, 0)) {
return @as(c_uint, @bitCast(cgltf_result_invalid_json));
}
options.*.json_token_count = @as(cgltf_size, @bitCast(@as(c_long, token_count)));
}
var tokens: [*c]jsmntok_t = @as([*c]jsmntok_t, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, @sizeOf(jsmntok_t) *% (options.*.json_token_count +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))))))));
_ = &tokens;
if (!(tokens != null)) {
return @as(c_uint, @bitCast(cgltf_result_out_of_memory));
}
jsmn_init(&parser);
var token_count: c_int = jsmn_parse(&parser, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))), size, tokens, options.*.json_token_count);
_ = &token_count;
if (token_count <= @as(c_int, 0)) {
options.*.memory.free_func.?(options.*.memory.user_data, @as(?*anyopaque, @ptrCast(tokens)));
return @as(c_uint, @bitCast(cgltf_result_invalid_json));
}
(blk: {
const tmp = token_count;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type = @as(c_uint, @bitCast(JSMN_UNDEFINED));
var data: [*c]cgltf_data = @as([*c]cgltf_data, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, @sizeOf(cgltf_data)))));
_ = &data;
if (!(data != null)) {
options.*.memory.free_func.?(options.*.memory.user_data, @as(?*anyopaque, @ptrCast(tokens)));
return @as(c_uint, @bitCast(cgltf_result_out_of_memory));
}
_ = memset(@as(?*anyopaque, @ptrCast(data)), @as(c_int, 0), @sizeOf(cgltf_data));
data.*.memory = options.*.memory;
data.*.file = options.*.file;
var i: c_int = cgltf_parse_json_root(options, tokens, @as(c_int, 0), json_chunk, data);
_ = &i;
options.*.memory.free_func.?(options.*.memory.user_data, @as(?*anyopaque, @ptrCast(tokens)));
if (i < @as(c_int, 0)) {
cgltf_free(data);
while (true) {
switch (i) {
@as(c_int, -2) => return @as(c_uint, @bitCast(cgltf_result_out_of_memory)),
@as(c_int, -3) => return @as(c_uint, @bitCast(cgltf_result_legacy_gltf)),
else => return @as(c_uint, @bitCast(cgltf_result_invalid_gltf)),
}
break;
}
}
if (cgltf_fixup_pointers(data) < @as(c_int, 0)) {
cgltf_free(data);
return @as(c_uint, @bitCast(cgltf_result_invalid_gltf));
}
data.*.json = @as([*c]const u8, @ptrCast(@alignCast(json_chunk)));
data.*.json_size = size;
out_data.* = data;
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub fn cgltf_combine_paths(arg_path: [*c]u8, arg_base: [*c]const u8, arg_uri: [*c]const u8) callconv(.C) void {
var path = arg_path;
_ = &path;
var base = arg_base;
_ = &base;
var uri = arg_uri;
_ = &uri;
var s0: [*c]const u8 = strrchr(base, @as(c_int, '/'));
_ = &s0;
var s1: [*c]const u8 = strrchr(base, @as(c_int, '\\'));
_ = &s1;
var slash: [*c]const u8 = if (s0 != null) if ((s1 != null) and (s1 > s0)) s1 else s0 else s1;
_ = &slash;
if (slash != null) {
var prefix: usize = @as(usize, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(slash) -% @intFromPtr(base))), @sizeOf(u8)) + @as(c_long, @bitCast(@as(c_long, @as(c_int, 1))))));
_ = &prefix;
_ = strncpy(path, base, prefix);
_ = strcpy(path + prefix, uri);
} else {
_ = strcpy(path, uri);
}
}
pub fn cgltf_load_buffer_file(arg_options: [*c]const cgltf_options, arg_size: cgltf_size, arg_uri: [*c]const u8, arg_gltf_path: [*c]const u8, arg_out_data: [*c]?*anyopaque) callconv(.C) cgltf_result {
var options = arg_options;
_ = &options;
var size = arg_size;
_ = &size;
var uri = arg_uri;
_ = &uri;
var gltf_path = arg_gltf_path;
_ = &gltf_path;
var out_data = arg_out_data;
_ = &out_data;
var memory_alloc: ?*const fn (?*anyopaque, cgltf_size) callconv(.C) ?*anyopaque = if (options.*.memory.alloc_func != null) options.*.memory.alloc_func else &cgltf_default_alloc;
_ = &memory_alloc;
var memory_free: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.C) void = if (options.*.memory.free_func != null) options.*.memory.free_func else &cgltf_default_free;
_ = &memory_free;
var file_read: ?*const fn ([*c]const struct_cgltf_memory_options, [*c]const struct_cgltf_file_options, [*c]const u8, [*c]cgltf_size, [*c]?*anyopaque) callconv(.C) cgltf_result = if (options.*.file.read != null) options.*.file.read else &cgltf_default_file_read;
_ = &file_read;
var path: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(memory_alloc.?(options.*.memory.user_data, (strlen(uri) +% strlen(gltf_path)) +% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &path;
if (!(path != null)) {
return @as(c_uint, @bitCast(cgltf_result_out_of_memory));
}
cgltf_combine_paths(path, gltf_path, uri);
_ = cgltf_decode_uri((path + strlen(path)) - strlen(uri));
var file_data: ?*anyopaque = @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
_ = &file_data;
var result: cgltf_result = file_read.?(&options.*.memory, &options.*.file, path, &size, &file_data);
_ = &result;
memory_free.?(options.*.memory.user_data, @as(?*anyopaque, @ptrCast(path)));
out_data.* = if (result == @as(c_uint, @bitCast(cgltf_result_success))) file_data else @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
return result;
}
pub fn cgltf_unhex(arg_ch: u8) callconv(.C) c_int {
var ch = arg_ch;
_ = &ch;
return if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, '0'))) < @as(c_uint, @bitCast(@as(c_int, 10)))) @as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, '0') else if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'A'))) < @as(c_uint, @bitCast(@as(c_int, 6)))) (@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'A')) + @as(c_int, 10) else if (@as(c_uint, @bitCast(@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'a'))) < @as(c_uint, @bitCast(@as(c_int, 6)))) (@as(c_int, @bitCast(@as(c_uint, ch))) - @as(c_int, 'a')) + @as(c_int, 10) else -@as(c_int, 1);
}
pub fn cgltf_calc_index_bound(arg_buffer_view: [*c]cgltf_buffer_view, arg_offset: cgltf_size, arg_component_type: cgltf_component_type, arg_count: cgltf_size) callconv(.C) cgltf_size {
var buffer_view = arg_buffer_view;
_ = &buffer_view;
var offset = arg_offset;
_ = &offset;
var component_type = arg_component_type;
_ = &component_type;
var count = arg_count;
_ = &count;
var data: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(buffer_view.*.buffer.*.data))) + offset) + buffer_view.*.offset;
_ = &data;
var bound: cgltf_size = 0;
_ = &bound;
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 2))) => {
{
var i: usize = 0;
_ = &i;
while (i < count) : (i +%= 1) {
var v: cgltf_size = @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]u8, @ptrCast(@alignCast(data)))[i])));
_ = &v;
bound = if (bound > v) bound else v;
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 4))) => {
{
var i: usize = 0;
_ = &i;
while (i < count) : (i +%= 1) {
var v: cgltf_size = @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]c_ushort, @ptrCast(@alignCast(data)))[i])));
_ = &v;
bound = if (bound > v) bound else v;
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 5))) => {
{
var i: usize = 0;
_ = &i;
while (i < count) : (i +%= 1) {
var v: cgltf_size = @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]c_uint, @ptrCast(@alignCast(data)))[i])));
_ = &v;
bound = if (bound > v) bound else v;
}
}
break;
},
else => {
{}
},
}
break;
}
return bound;
}
pub fn cgltf_free_extras(arg_data: [*c]cgltf_data, arg_extras: [*c]cgltf_extras) callconv(.C) void {
var data = arg_data;
_ = &data;
var extras = arg_extras;
_ = &extras;
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(extras.*.data)));
}
pub fn cgltf_free_extensions(arg_data: [*c]cgltf_data, arg_extensions: [*c]cgltf_extension, arg_extensions_count: cgltf_size) callconv(.C) void {
var data = arg_data;
_ = &data;
var extensions = arg_extensions;
_ = &extensions;
var extensions_count = arg_extensions_count;
_ = &extensions_count;
{
var i: cgltf_size = 0;
_ = &i;
while (i < extensions_count) : (i +%= 1) {
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(extensions[i].name)));
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(extensions[i].data)));
}
}
data.*.memory.free_func.?(data.*.memory.user_data, @as(?*anyopaque, @ptrCast(extensions)));
}
pub fn cgltf_component_read_integer(arg_in: ?*const anyopaque, arg_component_type: cgltf_component_type) callconv(.C) cgltf_ssize {
var in = arg_in;
_ = &in;
var component_type = arg_component_type;
_ = &component_type;
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 3))) => return @as(cgltf_ssize, @bitCast(@as(c_longlong, @as([*c]const i16, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 4))) => return @as(cgltf_ssize, @bitCast(@as(c_ulonglong, @as([*c]const u16, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 5))) => return @as(cgltf_ssize, @bitCast(@as(c_ulonglong, @as([*c]const u32, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 1))) => return @as(cgltf_ssize, @bitCast(@as(c_longlong, @as([*c]const i8, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 2))) => return @as(cgltf_ssize, @bitCast(@as(c_ulonglong, @as([*c]const u8, @ptrCast(@alignCast(in))).*))),
else => return 0,
}
break;
}
return @import("std").mem.zeroes(cgltf_ssize);
}
pub fn cgltf_component_read_index(arg_in: ?*const anyopaque, arg_component_type: cgltf_component_type) callconv(.C) cgltf_size {
var in = arg_in;
_ = &in;
var component_type = arg_component_type;
_ = &component_type;
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 4))) => return @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]const u16, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 5))) => return @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]const u32, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 2))) => return @as(cgltf_size, @bitCast(@as(c_ulong, @as([*c]const u8, @ptrCast(@alignCast(in))).*))),
else => return 0,
}
break;
}
return @import("std").mem.zeroes(cgltf_size);
}
pub fn cgltf_component_read_float(arg_in: ?*const anyopaque, arg_component_type: cgltf_component_type, arg_normalized: cgltf_bool) callconv(.C) cgltf_float {
var in = arg_in;
_ = &in;
var component_type = arg_component_type;
_ = &component_type;
var normalized = arg_normalized;
_ = &normalized;
if (component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) {
return @as([*c]const f32, @ptrCast(@alignCast(in))).*;
}
if (normalized != 0) {
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 3))) => return @as(cgltf_float, @floatFromInt(@as(c_int, @bitCast(@as(c_int, @as([*c]const i16, @ptrCast(@alignCast(in))).*))))) / @as(cgltf_float, @floatFromInt(@as(c_int, 32767))),
@as(c_uint, @bitCast(@as(c_int, 4))) => return @as(cgltf_float, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, @as([*c]const u16, @ptrCast(@alignCast(in))).*))))) / @as(cgltf_float, @floatFromInt(@as(c_int, 65535))),
@as(c_uint, @bitCast(@as(c_int, 1))) => return @as(cgltf_float, @floatFromInt(@as(c_int, @bitCast(@as(c_int, @as([*c]const i8, @ptrCast(@alignCast(in))).*))))) / @as(cgltf_float, @floatFromInt(@as(c_int, 127))),
@as(c_uint, @bitCast(@as(c_int, 2))) => return @as(cgltf_float, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, @as([*c]const u8, @ptrCast(@alignCast(in))).*))))) / @as(cgltf_float, @floatFromInt(@as(c_int, 255))),
else => return 0,
}
break;
}
}
return @as(cgltf_float, @floatFromInt(cgltf_component_read_integer(in, component_type)));
}
pub fn cgltf_element_read_float(arg_element: [*c]const u8, arg_type: cgltf_type, arg_component_type: cgltf_component_type, arg_normalized: cgltf_bool, arg_out: [*c]cgltf_float, arg_element_size: cgltf_size) callconv(.C) cgltf_bool {
var element = arg_element;
_ = &element;
var @"type" = arg_type;
_ = &@"type";
var component_type = arg_component_type;
_ = &component_type;
var normalized = arg_normalized;
_ = &normalized;
var out = arg_out;
_ = &out;
var element_size = arg_element_size;
_ = &element_size;
var num_components: cgltf_size = cgltf_num_components(@"type");
_ = &num_components;
if (element_size < num_components) {
return 0;
}
var component_size: cgltf_size = cgltf_component_size(component_type);
_ = &component_size;
if ((@"type" == @as(c_uint, @bitCast(cgltf_type_mat2))) and (component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))))) {
out[@as(c_uint, @intCast(@as(c_int, 0)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element)), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 1)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 2)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 3)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 5))))))), component_type, normalized);
return 1;
}
if ((@"type" == @as(c_uint, @bitCast(cgltf_type_mat3))) and (component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))))) {
out[@as(c_uint, @intCast(@as(c_int, 0)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element)), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 1)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 2)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 3)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 4)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 5))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 5)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 6)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 8))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 7)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 9))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 8)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 10))))))), component_type, normalized);
return 1;
}
if ((@"type" == @as(c_uint, @bitCast(cgltf_type_mat3))) and (component_size == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2)))))) {
out[@as(c_uint, @intCast(@as(c_int, 0)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element)), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 1)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 2)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 3)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 8))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 4)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 10))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 5)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 12))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 6)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 16))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 7)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 18))))))), component_type, normalized);
out[@as(c_uint, @intCast(@as(c_int, 8)))] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 20))))))), component_type, normalized);
return 1;
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < num_components) : (i +%= 1) {
out[i] = cgltf_component_read_float(@as(?*const anyopaque, @ptrCast(element + (component_size *% i))), component_type, normalized);
}
}
return 1;
}
pub fn cgltf_component_read_uint(arg_in: ?*const anyopaque, arg_component_type: cgltf_component_type) callconv(.C) cgltf_uint {
var in = arg_in;
_ = &in;
var component_type = arg_component_type;
_ = &component_type;
while (true) {
switch (component_type) {
@as(c_uint, @bitCast(@as(c_int, 1))) => return @as(cgltf_uint, @bitCast(@as(c_int, @as([*c]const i8, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 2))) => return @as(cgltf_uint, @bitCast(@as(c_uint, @as([*c]const u8, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 3))) => return @as(cgltf_uint, @bitCast(@as(c_int, @as([*c]const i16, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 4))) => return @as(cgltf_uint, @bitCast(@as(c_uint, @as([*c]const u16, @ptrCast(@alignCast(in))).*))),
@as(c_uint, @bitCast(@as(c_int, 5))) => return @as([*c]const u32, @ptrCast(@alignCast(in))).*,
else => return 0,
}
break;
}
return @import("std").mem.zeroes(cgltf_uint);
}
pub fn cgltf_element_read_uint(arg_element: [*c]const u8, arg_type: cgltf_type, arg_component_type: cgltf_component_type, arg_out: [*c]cgltf_uint, arg_element_size: cgltf_size) callconv(.C) cgltf_bool {
var element = arg_element;
_ = &element;
var @"type" = arg_type;
_ = &@"type";
var component_type = arg_component_type;
_ = &component_type;
var out = arg_out;
_ = &out;
var element_size = arg_element_size;
_ = &element_size;
var num_components: cgltf_size = cgltf_num_components(@"type");
_ = &num_components;
if (element_size < num_components) {
return 0;
}
if (((@"type" == @as(c_uint, @bitCast(cgltf_type_mat2))) or (@"type" == @as(c_uint, @bitCast(cgltf_type_mat3)))) or (@"type" == @as(c_uint, @bitCast(cgltf_type_mat4)))) {
return 0;
}
var component_size: cgltf_size = cgltf_component_size(component_type);
_ = &component_size;
{
var i: cgltf_size = 0;
_ = &i;
while (i < num_components) : (i +%= 1) {
out[i] = cgltf_component_read_uint(@as(?*const anyopaque, @ptrCast(element + (component_size *% i))), component_type);
}
}
return 1;
}
pub fn cgltf_json_strcmp(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8, arg_str: [*c]const u8) callconv(.C) c_int {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var str = arg_str;
_ = &str;
if (tok.*.type != @as(c_uint, @bitCast(JSMN_STRING))) {
return -@as(c_int, 1);
}
const str_len: usize = strlen(str);
_ = &str_len;
const name_length: usize = @as(usize, @bitCast(tok.*.end - tok.*.start));
_ = &name_length;
return if (str_len == name_length) strncmp(@as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast(tok.*.start)))), str, str_len) else @as(c_int, 128);
}
pub fn cgltf_json_to_int(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) c_int {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
if (tok.*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
var tmp: [128]u8 = undefined;
_ = &tmp;
var size: c_int = if (@as(usize, @bitCast(tok.*.end - tok.*.start)) < @sizeOf([128]u8)) @as(c_int, @bitCast(@as(c_int, @truncate(tok.*.end - tok.*.start)))) else @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf([128]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &size;
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&tmp))), @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast(tok.*.start)))), @as(c_ulong, @bitCast(@as(c_long, size))));
tmp[@as(c_uint, @intCast(size))] = 0;
return atoi(@as([*c]u8, @ptrCast(@alignCast(&tmp))));
}
pub fn cgltf_json_to_size(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) cgltf_size {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
if (tok.*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return 0;
}
var tmp: [128]u8 = undefined;
_ = &tmp;
var size: c_int = if (@as(usize, @bitCast(tok.*.end - tok.*.start)) < @sizeOf([128]u8)) @as(c_int, @bitCast(@as(c_int, @truncate(tok.*.end - tok.*.start)))) else @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf([128]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &size;
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&tmp))), @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast(tok.*.start)))), @as(c_ulong, @bitCast(@as(c_long, size))));
tmp[@as(c_uint, @intCast(size))] = 0;
var res: c_longlong = atoll(@as([*c]u8, @ptrCast(@alignCast(&tmp))));
_ = &res;
return if (res < @as(c_longlong, @bitCast(@as(c_longlong, @as(c_int, 0))))) @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0)))) else @as(cgltf_size, @bitCast(@as(c_long, @truncate(res))));
}
pub fn cgltf_json_to_float(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) cgltf_float {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
if (tok.*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return @as(cgltf_float, @floatFromInt(-@as(c_int, 1)));
}
var tmp: [128]u8 = undefined;
_ = &tmp;
var size: c_int = if (@as(usize, @bitCast(tok.*.end - tok.*.start)) < @sizeOf([128]u8)) @as(c_int, @bitCast(@as(c_int, @truncate(tok.*.end - tok.*.start)))) else @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf([128]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &size;
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&tmp))), @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast(tok.*.start)))), @as(c_ulong, @bitCast(@as(c_long, size))));
tmp[@as(c_uint, @intCast(size))] = 0;
return @as(cgltf_float, @floatCast(atof(@as([*c]u8, @ptrCast(@alignCast(&tmp))))));
}
pub fn cgltf_json_to_bool(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) cgltf_bool {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var size: c_int = @as(c_int, @bitCast(@as(c_int, @truncate(tok.*.end - tok.*.start))));
_ = &size;
return @intFromBool((size == @as(c_int, 4)) and (memcmp(@as(?*const anyopaque, @ptrCast(json_chunk + @as(usize, @bitCast(@as(isize, @intCast(tok.*.start)))))), @as(?*const anyopaque, @ptrCast("true")), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4))))) == @as(c_int, 0)));
}
pub fn cgltf_skip_json(arg_tokens: [*c]const jsmntok_t, arg_i: c_int) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var end: c_int = i + @as(c_int, 1);
_ = &end;
while (i < end) {
while (true) {
switch ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type) {
@as(c_uint, @bitCast(@as(c_int, 1))) => {
end += (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size * @as(c_int, 2);
break;
},
@as(c_uint, @bitCast(@as(c_int, 2))) => {
end += (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
break;
},
@as(c_uint, @bitCast(@as(c_int, 4))), @as(c_uint, @bitCast(@as(c_int, 3))) => break,
else => return -@as(c_int, 1),
}
break;
}
i += 1;
}
return i;
}
pub fn cgltf_fill_float_array(arg_out_array: [*c]f32, arg_size: c_int, arg_value: f32) callconv(.C) void {
var out_array = arg_out_array;
_ = &out_array;
var size = arg_size;
_ = &size;
var value = arg_value;
_ = &value;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
(blk: {
const tmp = j;
if (tmp >= 0) break :blk out_array + @as(usize, @intCast(tmp)) else break :blk out_array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = value;
}
}
}
pub fn cgltf_parse_json_float_array(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_array: [*c]f32, arg_size: c_int) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_array = arg_out_array;
_ = &out_array;
var size = arg_size;
_ = &size;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY))) {
return -@as(c_int, 1);
}
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size != size) {
return -@as(c_int, 1);
}
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
(blk: {
const tmp = j;
if (tmp >= 0) break :blk out_array + @as(usize, @intCast(tmp)) else break :blk out_array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
}
}
return i;
}
pub fn cgltf_parse_json_string(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_string: [*c][*c]u8) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_string = arg_out_string;
_ = &out_string;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) {
return -@as(c_int, 1);
}
if (out_string.* != null) {
return -@as(c_int, 1);
}
var size: c_int = @as(c_int, @bitCast(@as(c_int, @truncate((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end - (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start))));
_ = &size;
var result: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, @as(cgltf_size, @bitCast(@as(c_long, size + @as(c_int, 1))))))));
_ = &result;
if (!(result != null)) {
return -@as(c_int, 2);
}
_ = strncpy(result, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start)))), @as(c_ulong, @bitCast(@as(c_long, size))));
(blk: {
const tmp = size;
if (tmp >= 0) break :blk result + @as(usize, @intCast(tmp)) else break :blk result - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
out_string.* = result;
return i + @as(c_int, 1);
}
pub fn cgltf_parse_json_array(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_element_size: usize, arg_out_array: [*c]?*anyopaque, arg_out_size: [*c]cgltf_size) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var element_size = arg_element_size;
_ = &element_size;
var out_array = arg_out_array;
_ = &out_array;
var out_size = arg_out_size;
_ = &out_size;
_ = &json_chunk;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY))) {
return if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type == @as(c_uint, @bitCast(JSMN_OBJECT))) -@as(c_int, 3) else -@as(c_int, 1);
}
if (out_array.* != null) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
var result: ?*anyopaque = cgltf_calloc(options, element_size, @as(cgltf_size, @bitCast(@as(c_long, size))));
_ = &result;
if (!(result != null)) {
return -@as(c_int, 2);
}
out_array.* = result;
out_size.* = @as(cgltf_size, @bitCast(@as(c_long, size)));
return i + @as(c_int, 1);
}
pub fn cgltf_parse_json_string_array(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_array: [*c][*c][*c]u8, arg_out_size: [*c]cgltf_size) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_array = arg_out_array;
_ = &out_array;
var out_size = arg_out_size;
_ = &out_size;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY))) {
return -@as(c_int, 1);
}
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf([*c]u8), @as([*c]?*anyopaque, @ptrCast(@alignCast(out_array))), out_size);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_size.*) : (j +%= 1) {
i = cgltf_parse_json_string(options, tokens, i, json_chunk, j + out_array.*);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_attribute_type(arg_name: [*c]const u8, arg_out_type: [*c]cgltf_attribute_type, arg_out_index: [*c]c_int) callconv(.C) void {
var name = arg_name;
_ = &name;
var out_type = arg_out_type;
_ = &out_type;
var out_index = arg_out_index;
_ = &out_index;
if (@as(c_int, @bitCast(@as(c_uint, name.*))) == @as(c_int, '_')) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_custom));
return;
}
var us: [*c]const u8 = strchr(name, @as(c_int, '_'));
_ = &us;
var len: usize = if (us != null) @as(usize, @bitCast(@divExact(@as(c_long, @bitCast(@intFromPtr(us) -% @intFromPtr(name))), @sizeOf(u8)))) else strlen(name);
_ = &len;
if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 8))))) and (strncmp(name, "POSITION", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 8))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_position));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 6))))) and (strncmp(name, "NORMAL", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_normal));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 7))))) and (strncmp(name, "TANGENT", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 7))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_tangent));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 8))))) and (strncmp(name, "TEXCOORD", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 8))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_texcoord));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 5))))) and (strncmp(name, "COLOR", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_color));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 6))))) and (strncmp(name, "JOINTS", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_joints));
} else if ((len == @as(usize, @bitCast(@as(c_long, @as(c_int, 7))))) and (strncmp(name, "WEIGHTS", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 7))))) == @as(c_int, 0))) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_weights));
} else {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_invalid));
}
if ((us != null) and (out_type.* != @as(c_uint, @bitCast(cgltf_attribute_type_invalid)))) {
out_index.* = atoi(us + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))));
if (out_index.* < @as(c_int, 0)) {
out_type.* = @as(c_uint, @bitCast(cgltf_attribute_type_invalid));
out_index.* = 0;
}
}
}
pub fn cgltf_parse_json_attribute_list(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_attributes: [*c][*c]cgltf_attribute, arg_out_attributes_count: [*c]cgltf_size) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_attributes = arg_out_attributes;
_ = &out_attributes;
var out_attributes_count = arg_out_attributes_count;
_ = &out_attributes_count;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_attributes.* != null) {
return -@as(c_int, 1);
}
out_attributes_count.* = @as(cgltf_size, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size)));
out_attributes.* = @as([*c]cgltf_attribute, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_attribute), out_attributes_count.*))));
i += 1;
if (!(out_attributes.* != null)) {
return -@as(c_int, 2);
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_attributes_count.*) : (j +%= 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
i = cgltf_parse_json_string(options, tokens, i, json_chunk, &out_attributes.*[j].name);
if (i < @as(c_int, 0)) {
return -@as(c_int, 1);
}
cgltf_parse_attribute_type(out_attributes.*[j].name, &out_attributes.*[j].type, &out_attributes.*[j].index);
out_attributes.*[j].data = @as([*c]cgltf_accessor, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
}
}
return i;
}
pub fn cgltf_parse_json_extras(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_extras: [*c]cgltf_extras) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_extras = arg_out_extras;
_ = &out_extras;
if (out_extras.*.data != null) {
return -@as(c_int, 1);
}
out_extras.*.start_offset = @as(cgltf_size, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start));
out_extras.*.end_offset = @as(cgltf_size, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end));
var start: usize = @as(usize, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start));
_ = &start;
var size: usize = @as(usize, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end)) -% start;
_ = &size;
out_extras.*.data = @as([*c]u8, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, size +% @as(usize, @bitCast(@as(c_long, @as(c_int, 1))))))));
if (!(out_extras.*.data != null)) {
return -@as(c_int, 2);
}
_ = strncpy(out_extras.*.data, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + start, size);
out_extras.*.data[size] = '\x00';
i = cgltf_skip_json(tokens, i);
return i;
}
pub fn cgltf_parse_json_unprocessed_extension(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_extension: [*c]cgltf_extension) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_extension = arg_out_extension;
_ = &out_extension;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) {
return -@as(c_int, 1);
}
if ((blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_extension.*.name != null) {
return -@as(c_int, 1);
}
var name_length: cgltf_size = @as(cgltf_size, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end - (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start));
_ = &name_length;
out_extension.*.name = @as([*c]u8, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, name_length +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))))));
if (!(out_extension.*.name != null)) {
return -@as(c_int, 2);
}
_ = strncpy(out_extension.*.name, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + @as(usize, @bitCast(@as(isize, @intCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start)))), name_length);
out_extension.*.name[name_length] = 0;
i += 1;
var start: usize = @as(usize, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start));
_ = &start;
var size: usize = @as(usize, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end)) -% start;
_ = &size;
out_extension.*.data = @as([*c]u8, @ptrCast(@alignCast(options.*.memory.alloc_func.?(options.*.memory.user_data, size +% @as(usize, @bitCast(@as(c_long, @as(c_int, 1))))))));
if (!(out_extension.*.data != null)) {
return -@as(c_int, 2);
}
_ = strncpy(out_extension.*.data, @as([*c]const u8, @ptrCast(@alignCast(json_chunk))) + start, size);
out_extension.*.data[size] = '\x00';
i = cgltf_skip_json(tokens, i);
return i;
}
pub fn cgltf_parse_json_unprocessed_extensions(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_extensions_count: [*c]cgltf_size, arg_out_extensions: [*c][*c]cgltf_extension) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_extensions_count = arg_out_extensions_count;
_ = &out_extensions_count;
var out_extensions = arg_out_extensions;
_ = &out_extensions;
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_extensions.* != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
out_extensions_count.* = 0;
out_extensions.* = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
if (!(out_extensions.* != null)) {
return -@as(c_int, 2);
}
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < extensions_size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
var extension_index: cgltf_size = blk: {
const ref = &out_extensions_count.*;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
};
_ = &extension_index;
var extension: [*c]cgltf_extension = &out_extensions.*[extension_index];
_ = &extension;
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, extension);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_draco_mesh_compression(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_draco_mesh_compression: [*c]cgltf_draco_mesh_compression) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_draco_mesh_compression = arg_out_draco_mesh_compression;
_ = &out_draco_mesh_compression;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "attributes") == @as(c_int, 0)) {
i = cgltf_parse_json_attribute_list(options, tokens, i + @as(c_int, 1), json_chunk, &out_draco_mesh_compression.*.attributes, &out_draco_mesh_compression.*.attributes_count);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferView") == @as(c_int, 0)) {
i += 1;
out_draco_mesh_compression.*.buffer_view = @as([*c]cgltf_buffer_view, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_mesh_gpu_instancing(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_mesh_gpu_instancing: [*c]cgltf_mesh_gpu_instancing) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_mesh_gpu_instancing = arg_out_mesh_gpu_instancing;
_ = &out_mesh_gpu_instancing;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "attributes") == @as(c_int, 0)) {
i = cgltf_parse_json_attribute_list(options, tokens, i + @as(c_int, 1), json_chunk, &out_mesh_gpu_instancing.*.attributes, &out_mesh_gpu_instancing.*.attributes_count);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_material_mapping_data(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_mappings: [*c]cgltf_material_mapping, arg_offset: [*c]cgltf_size) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_mappings = arg_out_mappings;
_ = &out_mappings;
var offset = arg_offset;
_ = &offset;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var obj_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &obj_size;
i += 1;
var material: c_int = -@as(c_int, 1);
_ = &material;
var variants_tok: c_int = -@as(c_int, 1);
_ = &variants_tok;
var extras_tok: c_int = -@as(c_int, 1);
_ = &extras_tok;
{
var k: c_int = 0;
_ = &k;
while (k < obj_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "material") == @as(c_int, 0)) {
i += 1;
material = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "variants") == @as(c_int, 0)) {
variants_tok = i + @as(c_int, 1);
if ((blk: {
const tmp = variants_tok;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_ARRAY))) {
return -@as(c_int, 1);
}
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
extras_tok = i + @as(c_int, 1);
i = cgltf_skip_json(tokens, extras_tok);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
if ((material < @as(c_int, 0)) or (variants_tok < @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (out_mappings != null) {
{
var k: c_int = 0;
_ = &k;
while (k < (blk: {
const tmp = variants_tok;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size) : (k += 1) {
var variant: c_int = cgltf_json_to_int(&(blk: {
const tmp = (variants_tok + @as(c_int, 1)) + k;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*, json_chunk);
_ = &variant;
if (variant < @as(c_int, 0)) return variant;
out_mappings[offset.*].material = @as([*c]cgltf_material, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, material))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
out_mappings[offset.*].variant = @as(cgltf_size, @bitCast(@as(c_long, variant)));
if (extras_tok >= @as(c_int, 0)) {
var e: c_int = cgltf_parse_json_extras(options, tokens, extras_tok, json_chunk, &out_mappings[offset.*].extras);
_ = &e;
if (e < @as(c_int, 0)) return e;
}
offset.* +%= 1;
}
}
} else {
offset.* +%= @as(cgltf_size, @bitCast(@as(c_long, (blk: {
const tmp = variants_tok;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size)));
}
}
}
return i;
}
pub fn cgltf_parse_json_material_mappings(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_prim: [*c]cgltf_primitive) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_prim = arg_out_prim;
_ = &out_prim;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "mappings") == @as(c_int, 0)) {
if (out_prim.*.mappings != null) {
return -@as(c_int, 1);
}
var mappings_offset: cgltf_size = 0;
_ = &mappings_offset;
var k: c_int = cgltf_parse_json_material_mapping_data(options, tokens, i + @as(c_int, 1), json_chunk, null, &mappings_offset);
_ = &k;
if (k < @as(c_int, 0)) {
return k;
}
out_prim.*.mappings_count = mappings_offset;
out_prim.*.mappings = @as([*c]cgltf_material_mapping, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_material_mapping), out_prim.*.mappings_count))));
mappings_offset = 0;
i = cgltf_parse_json_material_mapping_data(options, tokens, i + @as(c_int, 1), json_chunk, out_prim.*.mappings, &mappings_offset);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_json_to_primitive_type(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) cgltf_primitive_type {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var @"type": c_int = cgltf_json_to_int(tok, json_chunk);
_ = &@"type";
while (true) {
switch (@"type") {
@as(c_int, 0) => return @as(c_uint, @bitCast(cgltf_primitive_type_points)),
@as(c_int, 1) => return @as(c_uint, @bitCast(cgltf_primitive_type_lines)),
@as(c_int, 2) => return @as(c_uint, @bitCast(cgltf_primitive_type_line_loop)),
@as(c_int, 3) => return @as(c_uint, @bitCast(cgltf_primitive_type_line_strip)),
@as(c_int, 4) => return @as(c_uint, @bitCast(cgltf_primitive_type_triangles)),
@as(c_int, 5) => return @as(c_uint, @bitCast(cgltf_primitive_type_triangle_strip)),
@as(c_int, 6) => return @as(c_uint, @bitCast(cgltf_primitive_type_triangle_fan)),
else => return @as(c_uint, @bitCast(cgltf_primitive_type_invalid)),
}
break;
}
return @import("std").mem.zeroes(cgltf_primitive_type);
}
pub fn cgltf_parse_json_primitive(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_prim: [*c]cgltf_primitive) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_prim = arg_out_prim;
_ = &out_prim;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
out_prim.*.type = @as(c_uint, @bitCast(cgltf_primitive_type_triangles));
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "mode") == @as(c_int, 0)) {
i += 1;
out_prim.*.type = cgltf_json_to_primitive_type(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "indices") == @as(c_int, 0)) {
i += 1;
out_prim.*.indices = @as([*c]cgltf_accessor, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "material") == @as(c_int, 0)) {
i += 1;
out_prim.*.material = @as([*c]cgltf_material, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "attributes") == @as(c_int, 0)) {
i = cgltf_parse_json_attribute_list(options, tokens, i + @as(c_int, 1), json_chunk, &out_prim.*.attributes, &out_prim.*.attributes_count);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "targets") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_morph_target), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_prim.*.targets))), &out_prim.*.targets_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_prim.*.targets_count) : (k +%= 1) {
i = cgltf_parse_json_attribute_list(options, tokens, i, json_chunk, &out_prim.*.targets[k].attributes, &out_prim.*.targets[k].attributes_count);
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_prim.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_prim.*.extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
out_prim.*.extensions_count = 0;
out_prim.*.extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
if (!(out_prim.*.extensions != null)) {
return -@as(c_int, 2);
}
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_draco_mesh_compression") == @as(c_int, 0)) {
out_prim.*.has_draco_mesh_compression = 1;
i = cgltf_parse_json_draco_mesh_compression(options, tokens, i + @as(c_int, 1), json_chunk, &out_prim.*.draco_mesh_compression);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_variants") == @as(c_int, 0)) {
i = cgltf_parse_json_material_mappings(options, tokens, i + @as(c_int, 1), json_chunk, out_prim);
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_prim.*.extensions[blk: {
const ref = &out_prim.*.extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_mesh(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_mesh: [*c]cgltf_mesh) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_mesh = arg_out_mesh;
_ = &out_mesh;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_mesh.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "primitives") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_primitive), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_mesh.*.primitives))), &out_mesh.*.primitives_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var prim_index: cgltf_size = 0;
_ = &prim_index;
while (prim_index < out_mesh.*.primitives_count) : (prim_index +%= 1) {
i = cgltf_parse_json_primitive(options, tokens, i, json_chunk, &out_mesh.*.primitives[prim_index]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "weights") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_float), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_mesh.*.weights))), &out_mesh.*.weights_count);
if (i < @as(c_int, 0)) {
return i;
}
i = cgltf_parse_json_float_array(tokens, i - @as(c_int, 1), json_chunk, out_mesh.*.weights, @as(c_int, @bitCast(@as(c_uint, @truncate(out_mesh.*.weights_count)))));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i += 1;
out_mesh.*.extras.start_offset = @as(cgltf_size, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.start));
out_mesh.*.extras.end_offset = @as(cgltf_size, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.end));
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type == @as(c_uint, @bitCast(JSMN_OBJECT))) {
var extras_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extras_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extras_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if ((cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "targetNames") == @as(c_int, 0)) and ((blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type == @as(c_uint, @bitCast(JSMN_ARRAY)))) {
i = cgltf_parse_json_string_array(options, tokens, i + @as(c_int, 1), json_chunk, &out_mesh.*.target_names, &out_mesh.*.target_names_count);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i);
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_mesh.*.extensions_count, &out_mesh.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_meshes(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_mesh), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.meshes))), &out_data.*.meshes_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.meshes_count) : (j +%= 1) {
i = cgltf_parse_json_mesh(options, tokens, i, json_chunk, &out_data.*.meshes[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_json_to_component_type(arg_tok: [*c]const jsmntok_t, arg_json_chunk: [*c]const u8) callconv(.C) cgltf_component_type {
var tok = arg_tok;
_ = &tok;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var @"type": c_int = cgltf_json_to_int(tok, json_chunk);
_ = &@"type";
while (true) {
switch (@"type") {
@as(c_int, 5120) => return @as(c_uint, @bitCast(cgltf_component_type_r_8)),
@as(c_int, 5121) => return @as(c_uint, @bitCast(cgltf_component_type_r_8u)),
@as(c_int, 5122) => return @as(c_uint, @bitCast(cgltf_component_type_r_16)),
@as(c_int, 5123) => return @as(c_uint, @bitCast(cgltf_component_type_r_16u)),
@as(c_int, 5125) => return @as(c_uint, @bitCast(cgltf_component_type_r_32u)),
@as(c_int, 5126) => return @as(c_uint, @bitCast(cgltf_component_type_r_32f)),
else => return @as(c_uint, @bitCast(cgltf_component_type_invalid)),
}
break;
}
return @import("std").mem.zeroes(cgltf_component_type);
}
pub fn cgltf_parse_json_accessor_sparse(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_sparse: [*c]cgltf_accessor_sparse) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_sparse = arg_out_sparse;
_ = &out_sparse;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "count") == @as(c_int, 0)) {
i += 1;
out_sparse.*.count = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "indices") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var indices_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &indices_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < indices_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferView") == @as(c_int, 0)) {
i += 1;
out_sparse.*.indices_buffer_view = @as([*c]cgltf_buffer_view, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteOffset") == @as(c_int, 0)) {
i += 1;
out_sparse.*.indices_byte_offset = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "componentType") == @as(c_int, 0)) {
i += 1;
out_sparse.*.indices_component_type = cgltf_json_to_component_type(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "values") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var values_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &values_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < values_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferView") == @as(c_int, 0)) {
i += 1;
out_sparse.*.values_buffer_view = @as([*c]cgltf_buffer_view, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteOffset") == @as(c_int, 0)) {
i += 1;
out_sparse.*.values_byte_offset = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_accessor(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_accessor: [*c]cgltf_accessor) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_accessor = arg_out_accessor;
_ = &out_accessor;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_accessor.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferView") == @as(c_int, 0)) {
i += 1;
out_accessor.*.buffer_view = @as([*c]cgltf_buffer_view, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteOffset") == @as(c_int, 0)) {
i += 1;
out_accessor.*.offset = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "componentType") == @as(c_int, 0)) {
i += 1;
out_accessor.*.component_type = cgltf_json_to_component_type(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "normalized") == @as(c_int, 0)) {
i += 1;
out_accessor.*.normalized = cgltf_json_to_bool(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "count") == @as(c_int, 0)) {
i += 1;
out_accessor.*.count = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "type") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "SCALAR") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_scalar));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "VEC2") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_vec2));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "VEC3") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_vec3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "VEC4") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_vec4));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "MAT2") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_mat2));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "MAT3") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_mat3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "MAT4") == @as(c_int, 0)) {
out_accessor.*.type = @as(c_uint, @bitCast(cgltf_type_mat4));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "min") == @as(c_int, 0)) {
i += 1;
out_accessor.*.has_min = 1;
var min_size: c_int = if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size > @as(c_int, 16)) @as(c_int, 16) else (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &min_size;
i = cgltf_parse_json_float_array(tokens, i, json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_accessor.*.min))), min_size);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "max") == @as(c_int, 0)) {
i += 1;
out_accessor.*.has_max = 1;
var max_size: c_int = if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size > @as(c_int, 16)) @as(c_int, 16) else (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &max_size;
i = cgltf_parse_json_float_array(tokens, i, json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_accessor.*.max))), max_size);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sparse") == @as(c_int, 0)) {
out_accessor.*.is_sparse = 1;
i = cgltf_parse_json_accessor_sparse(tokens, i + @as(c_int, 1), json_chunk, &out_accessor.*.sparse);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_accessor.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_accessor.*.extensions_count, &out_accessor.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_texture_transform(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_texture_transform: [*c]cgltf_texture_transform) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_texture_transform = arg_out_texture_transform;
_ = &out_texture_transform;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "offset") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_texture_transform.*.offset))), @as(c_int, 2));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "rotation") == @as(c_int, 0)) {
i += 1;
out_texture_transform.*.rotation = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scale") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_texture_transform.*.scale))), @as(c_int, 2));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "texCoord") == @as(c_int, 0)) {
i += 1;
out_texture_transform.*.has_texcoord = 1;
out_texture_transform.*.texcoord = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_texture_view(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_texture_view: [*c]cgltf_texture_view) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_texture_view = arg_out_texture_view;
_ = &out_texture_view;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
out_texture_view.*.scale = 1.0;
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_texture_view.*.transform.scale))), @as(c_int, 2), 1.0);
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "index") == @as(c_int, 0)) {
i += 1;
out_texture_view.*.texture = @as([*c]cgltf_texture, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "texCoord") == @as(c_int, 0)) {
i += 1;
out_texture_view.*.texcoord = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scale") == @as(c_int, 0)) {
i += 1;
out_texture_view.*.scale = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "strength") == @as(c_int, 0)) {
i += 1;
out_texture_view.*.scale = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_texture_transform") == @as(c_int, 0)) {
out_texture_view.*.has_transform = 1;
i = cgltf_parse_json_texture_transform(tokens, i + @as(c_int, 1), json_chunk, &out_texture_view.*.transform);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_pbr_metallic_roughness(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_pbr: [*c]cgltf_pbr_metallic_roughness) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_pbr = arg_out_pbr;
_ = &out_pbr;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "metallicFactor") == @as(c_int, 0)) {
i += 1;
out_pbr.*.metallic_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "roughnessFactor") == @as(c_int, 0)) {
i += 1;
out_pbr.*.roughness_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "baseColorFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_pbr.*.base_color_factor))), @as(c_int, 4));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "baseColorTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_pbr.*.base_color_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "metallicRoughnessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_pbr.*.metallic_roughness_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_pbr_specular_glossiness(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_pbr: [*c]cgltf_pbr_specular_glossiness) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_pbr = arg_out_pbr;
_ = &out_pbr;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "diffuseFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_pbr.*.diffuse_factor))), @as(c_int, 4));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_pbr.*.specular_factor))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "glossinessFactor") == @as(c_int, 0)) {
i += 1;
out_pbr.*.glossiness_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "diffuseTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_pbr.*.diffuse_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularGlossinessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_pbr.*.specular_glossiness_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_clearcoat(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_clearcoat: [*c]cgltf_clearcoat) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_clearcoat = arg_out_clearcoat;
_ = &out_clearcoat;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "clearcoatFactor") == @as(c_int, 0)) {
i += 1;
out_clearcoat.*.clearcoat_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "clearcoatRoughnessFactor") == @as(c_int, 0)) {
i += 1;
out_clearcoat.*.clearcoat_roughness_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "clearcoatTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_clearcoat.*.clearcoat_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "clearcoatRoughnessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_clearcoat.*.clearcoat_roughness_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "clearcoatNormalTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_clearcoat.*.clearcoat_normal_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_ior(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_ior: [*c]cgltf_ior) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_ior = arg_out_ior;
_ = &out_ior;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
out_ior.*.ior = 1.5;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "ior") == @as(c_int, 0)) {
i += 1;
out_ior.*.ior = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_specular(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_specular: [*c]cgltf_specular) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_specular = arg_out_specular;
_ = &out_specular;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
out_specular.*.specular_factor = 1.0;
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_specular.*.specular_color_factor))), @as(c_int, 3), 1.0);
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularFactor") == @as(c_int, 0)) {
i += 1;
out_specular.*.specular_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularColorFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_specular.*.specular_color_factor))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_specular.*.specular_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "specularColorTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_specular.*.specular_color_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_transmission(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_transmission: [*c]cgltf_transmission) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_transmission = arg_out_transmission;
_ = &out_transmission;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "transmissionFactor") == @as(c_int, 0)) {
i += 1;
out_transmission.*.transmission_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "transmissionTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_transmission.*.transmission_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_volume(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_volume: [*c]cgltf_volume) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_volume = arg_out_volume;
_ = &out_volume;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "thicknessFactor") == @as(c_int, 0)) {
i += 1;
out_volume.*.thickness_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "thicknessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_volume.*.thickness_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "attenuationColor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_volume.*.attenuation_color))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "attenuationDistance") == @as(c_int, 0)) {
i += 1;
out_volume.*.attenuation_distance = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_sheen(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_sheen: [*c]cgltf_sheen) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_sheen = arg_out_sheen;
_ = &out_sheen;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sheenColorFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_sheen.*.sheen_color_factor))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sheenColorTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_sheen.*.sheen_color_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sheenRoughnessFactor") == @as(c_int, 0)) {
i += 1;
out_sheen.*.sheen_roughness_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sheenRoughnessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_sheen.*.sheen_roughness_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_emissive_strength(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_emissive_strength: [*c]cgltf_emissive_strength) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_emissive_strength = arg_out_emissive_strength;
_ = &out_emissive_strength;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
out_emissive_strength.*.emissive_strength = 1.0;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "emissiveStrength") == @as(c_int, 0)) {
i += 1;
out_emissive_strength.*.emissive_strength = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_iridescence(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_iridescence: [*c]cgltf_iridescence) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_iridescence = arg_out_iridescence;
_ = &out_iridescence;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
out_iridescence.*.iridescence_ior = 1.2999999523162842;
out_iridescence.*.iridescence_thickness_min = 100.0;
out_iridescence.*.iridescence_thickness_max = 400.0;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceFactor") == @as(c_int, 0)) {
i += 1;
out_iridescence.*.iridescence_factor = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_iridescence.*.iridescence_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceIor") == @as(c_int, 0)) {
i += 1;
out_iridescence.*.iridescence_ior = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceThicknessMinimum") == @as(c_int, 0)) {
i += 1;
out_iridescence.*.iridescence_thickness_min = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceThicknessMaximum") == @as(c_int, 0)) {
i += 1;
out_iridescence.*.iridescence_thickness_max = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "iridescenceThicknessTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_iridescence.*.iridescence_thickness_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_anisotropy(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_anisotropy: [*c]cgltf_anisotropy) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_anisotropy = arg_out_anisotropy;
_ = &out_anisotropy;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "anisotropyStrength") == @as(c_int, 0)) {
i += 1;
out_anisotropy.*.anisotropy_strength = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "anisotropyRotation") == @as(c_int, 0)) {
i += 1;
out_anisotropy.*.anisotropy_rotation = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "anisotropyTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_anisotropy.*.anisotropy_texture);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_dispersion(arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_dispersion: [*c]cgltf_dispersion) callconv(.C) c_int {
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_dispersion = arg_out_dispersion;
_ = &out_dispersion;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "dispersion") == @as(c_int, 0)) {
i += 1;
out_dispersion.*.dispersion = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_image(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_image: [*c]cgltf_image) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_image = arg_out_image;
_ = &out_image;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "uri") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_image.*.uri);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferView") == @as(c_int, 0)) {
i += 1;
out_image.*.buffer_view = @as([*c]cgltf_buffer_view, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "mimeType") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_image.*.mime_type);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_image.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_image.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_image.*.extensions_count, &out_image.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_sampler(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_sampler: [*c]cgltf_sampler) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_sampler = arg_out_sampler;
_ = &out_sampler;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
out_sampler.*.wrap_s = 10497;
out_sampler.*.wrap_t = 10497;
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_sampler.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "magFilter") == @as(c_int, 0)) {
i += 1;
out_sampler.*.mag_filter = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "minFilter") == @as(c_int, 0)) {
i += 1;
out_sampler.*.min_filter = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "wrapS") == @as(c_int, 0)) {
i += 1;
out_sampler.*.wrap_s = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "wrapT") == @as(c_int, 0)) {
i += 1;
out_sampler.*.wrap_t = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_sampler.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_sampler.*.extensions_count, &out_sampler.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_texture(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_texture: [*c]cgltf_texture) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_texture = arg_out_texture;
_ = &out_texture;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_texture.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sampler") == @as(c_int, 0)) {
i += 1;
out_texture.*.sampler = @as([*c]cgltf_sampler, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "source") == @as(c_int, 0)) {
i += 1;
out_texture.*.image = @as([*c]cgltf_image, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_texture.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_texture.*.extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
i += 1;
out_texture.*.extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
out_texture.*.extensions_count = 0;
if (!(out_texture.*.extensions != null)) {
return -@as(c_int, 2);
}
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_texture_basisu") == @as(c_int, 0)) {
out_texture.*.has_basisu = 1;
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var num_properties: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &num_properties;
i += 1;
{
var t: c_int = 0;
_ = &t;
while (t < num_properties) : (t += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "source") == @as(c_int, 0)) {
i += 1;
out_texture.*.basisu_image = @as([*c]cgltf_image, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_texture.*.extensions[blk: {
const ref = &out_texture.*.extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_material(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_material: [*c]cgltf_material) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_material = arg_out_material;
_ = &out_material;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_material.*.pbr_metallic_roughness.base_color_factor))), @as(c_int, 4), 1.0);
out_material.*.pbr_metallic_roughness.metallic_factor = 1.0;
out_material.*.pbr_metallic_roughness.roughness_factor = 1.0;
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_material.*.pbr_specular_glossiness.diffuse_factor))), @as(c_int, 4), 1.0);
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_material.*.pbr_specular_glossiness.specular_factor))), @as(c_int, 3), 1.0);
out_material.*.pbr_specular_glossiness.glossiness_factor = 1.0;
cgltf_fill_float_array(@as([*c]cgltf_float, @ptrCast(@alignCast(&out_material.*.volume.attenuation_color))), @as(c_int, 3), 1.0);
out_material.*.volume.attenuation_distance = 340282346638528860000000000000000000000.0;
out_material.*.alpha_cutoff = 0.5;
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "pbrMetallicRoughness") == @as(c_int, 0)) {
out_material.*.has_pbr_metallic_roughness = 1;
i = cgltf_parse_json_pbr_metallic_roughness(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.pbr_metallic_roughness);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "emissiveFactor") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_material.*.emissive_factor))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "normalTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.normal_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "occlusionTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.occlusion_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "emissiveTexture") == @as(c_int, 0)) {
i = cgltf_parse_json_texture_view(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.emissive_texture);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "alphaMode") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "OPAQUE") == @as(c_int, 0)) {
out_material.*.alpha_mode = @as(c_uint, @bitCast(cgltf_alpha_mode_opaque));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "MASK") == @as(c_int, 0)) {
out_material.*.alpha_mode = @as(c_uint, @bitCast(cgltf_alpha_mode_mask));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "BLEND") == @as(c_int, 0)) {
out_material.*.alpha_mode = @as(c_uint, @bitCast(cgltf_alpha_mode_blend));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "alphaCutoff") == @as(c_int, 0)) {
i += 1;
out_material.*.alpha_cutoff = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "doubleSided") == @as(c_int, 0)) {
i += 1;
out_material.*.double_sided = cgltf_json_to_bool(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_material.*.extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
i += 1;
out_material.*.extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
out_material.*.extensions_count = 0;
if (!(out_material.*.extensions != null)) {
return -@as(c_int, 2);
}
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_pbrSpecularGlossiness") == @as(c_int, 0)) {
out_material.*.has_pbr_specular_glossiness = 1;
i = cgltf_parse_json_pbr_specular_glossiness(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.pbr_specular_glossiness);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_unlit") == @as(c_int, 0)) {
out_material.*.unlit = 1;
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_clearcoat") == @as(c_int, 0)) {
out_material.*.has_clearcoat = 1;
i = cgltf_parse_json_clearcoat(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.clearcoat);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_ior") == @as(c_int, 0)) {
out_material.*.has_ior = 1;
i = cgltf_parse_json_ior(tokens, i + @as(c_int, 1), json_chunk, &out_material.*.ior);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_specular") == @as(c_int, 0)) {
out_material.*.has_specular = 1;
i = cgltf_parse_json_specular(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.specular);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_transmission") == @as(c_int, 0)) {
out_material.*.has_transmission = 1;
i = cgltf_parse_json_transmission(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.transmission);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_volume") == @as(c_int, 0)) {
out_material.*.has_volume = 1;
i = cgltf_parse_json_volume(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.volume);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_sheen") == @as(c_int, 0)) {
out_material.*.has_sheen = 1;
i = cgltf_parse_json_sheen(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.sheen);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_emissive_strength") == @as(c_int, 0)) {
out_material.*.has_emissive_strength = 1;
i = cgltf_parse_json_emissive_strength(tokens, i + @as(c_int, 1), json_chunk, &out_material.*.emissive_strength);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_iridescence") == @as(c_int, 0)) {
out_material.*.has_iridescence = 1;
i = cgltf_parse_json_iridescence(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.iridescence);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_anisotropy") == @as(c_int, 0)) {
out_material.*.has_anisotropy = 1;
i = cgltf_parse_json_anisotropy(options, tokens, i + @as(c_int, 1), json_chunk, &out_material.*.anisotropy);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_dispersion") == @as(c_int, 0)) {
out_material.*.has_dispersion = 1;
i = cgltf_parse_json_dispersion(tokens, i + @as(c_int, 1), json_chunk, &out_material.*.dispersion);
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_material.*.extensions[blk: {
const ref = &out_material.*.extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_accessors(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_accessor), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.accessors))), &out_data.*.accessors_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.accessors_count) : (j +%= 1) {
i = cgltf_parse_json_accessor(options, tokens, i, json_chunk, &out_data.*.accessors[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_materials(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_material), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.materials))), &out_data.*.materials_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.materials_count) : (j +%= 1) {
i = cgltf_parse_json_material(options, tokens, i, json_chunk, &out_data.*.materials[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_images(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_image), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.images))), &out_data.*.images_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.images_count) : (j +%= 1) {
i = cgltf_parse_json_image(options, tokens, i, json_chunk, &out_data.*.images[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_textures(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_texture), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.textures))), &out_data.*.textures_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.textures_count) : (j +%= 1) {
i = cgltf_parse_json_texture(options, tokens, i, json_chunk, &out_data.*.textures[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_samplers(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_sampler), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.samplers))), &out_data.*.samplers_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.samplers_count) : (j +%= 1) {
i = cgltf_parse_json_sampler(options, tokens, i, json_chunk, &out_data.*.samplers[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_meshopt_compression(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_meshopt_compression: [*c]cgltf_meshopt_compression) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_meshopt_compression = arg_out_meshopt_compression;
_ = &out_meshopt_compression;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "buffer") == @as(c_int, 0)) {
i += 1;
out_meshopt_compression.*.buffer = @as([*c]cgltf_buffer, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteOffset") == @as(c_int, 0)) {
i += 1;
out_meshopt_compression.*.offset = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteLength") == @as(c_int, 0)) {
i += 1;
out_meshopt_compression.*.size = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteStride") == @as(c_int, 0)) {
i += 1;
out_meshopt_compression.*.stride = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "count") == @as(c_int, 0)) {
i += 1;
out_meshopt_compression.*.count = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "mode") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "ATTRIBUTES") == @as(c_int, 0)) {
out_meshopt_compression.*.mode = @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_attributes));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "TRIANGLES") == @as(c_int, 0)) {
out_meshopt_compression.*.mode = @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_triangles));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "INDICES") == @as(c_int, 0)) {
out_meshopt_compression.*.mode = @as(c_uint, @bitCast(cgltf_meshopt_compression_mode_indices));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "filter") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "NONE") == @as(c_int, 0)) {
out_meshopt_compression.*.filter = @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_none));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "OCTAHEDRAL") == @as(c_int, 0)) {
out_meshopt_compression.*.filter = @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_octahedral));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "QUATERNION") == @as(c_int, 0)) {
out_meshopt_compression.*.filter = @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_quaternion));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "EXPONENTIAL") == @as(c_int, 0)) {
out_meshopt_compression.*.filter = @as(c_uint, @bitCast(cgltf_meshopt_compression_filter_exponential));
}
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_buffer_view(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_buffer_view: [*c]cgltf_buffer_view) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_buffer_view = arg_out_buffer_view;
_ = &out_buffer_view;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer_view.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "buffer") == @as(c_int, 0)) {
i += 1;
out_buffer_view.*.buffer = @as([*c]cgltf_buffer, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteOffset") == @as(c_int, 0)) {
i += 1;
out_buffer_view.*.offset = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteLength") == @as(c_int, 0)) {
i += 1;
out_buffer_view.*.size = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteStride") == @as(c_int, 0)) {
i += 1;
out_buffer_view.*.stride = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "target") == @as(c_int, 0)) {
i += 1;
var @"type": c_int = cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
_ = &@"type";
while (true) {
switch (@"type") {
@as(c_int, 34962) => {
@"type" = cgltf_buffer_view_type_vertices;
break;
},
@as(c_int, 34963) => {
@"type" = cgltf_buffer_view_type_indices;
break;
},
else => {
@"type" = cgltf_buffer_view_type_invalid;
break;
},
}
break;
}
out_buffer_view.*.type = @as(c_uint, @bitCast(@"type"));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer_view.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_buffer_view.*.extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
out_buffer_view.*.extensions_count = 0;
out_buffer_view.*.extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
if (!(out_buffer_view.*.extensions != null)) {
return -@as(c_int, 2);
}
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "EXT_meshopt_compression") == @as(c_int, 0)) {
out_buffer_view.*.has_meshopt_compression = 1;
i = cgltf_parse_json_meshopt_compression(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer_view.*.meshopt_compression);
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_buffer_view.*.extensions[blk: {
const ref = &out_buffer_view.*.extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_buffer_views(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_buffer_view), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.buffer_views))), &out_data.*.buffer_views_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.buffer_views_count) : (j +%= 1) {
i = cgltf_parse_json_buffer_view(options, tokens, i, json_chunk, &out_data.*.buffer_views[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_buffer(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_buffer: [*c]cgltf_buffer) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_buffer = arg_out_buffer;
_ = &out_buffer;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "byteLength") == @as(c_int, 0)) {
i += 1;
out_buffer.*.size = cgltf_json_to_size(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "uri") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer.*.uri);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_buffer.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_buffer.*.extensions_count, &out_buffer.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_buffers(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_buffer), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.buffers))), &out_data.*.buffers_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.buffers_count) : (j +%= 1) {
i = cgltf_parse_json_buffer(options, tokens, i, json_chunk, &out_data.*.buffers[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_skin(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_skin: [*c]cgltf_skin) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_skin = arg_out_skin;
_ = &out_skin;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_skin.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "joints") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf([*c]cgltf_node), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_skin.*.joints))), &out_skin.*.joints_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_skin.*.joints_count) : (k +%= 1) {
out_skin.*.joints[k] = @as([*c]cgltf_node, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "skeleton") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_skin.*.skeleton = @as([*c]cgltf_node, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "inverseBindMatrices") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_skin.*.inverse_bind_matrices = @as([*c]cgltf_accessor, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_skin.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_skin.*.extensions_count, &out_skin.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_skins(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_skin), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.skins))), &out_data.*.skins_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.skins_count) : (j +%= 1) {
i = cgltf_parse_json_skin(options, tokens, i, json_chunk, &out_data.*.skins[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_camera(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_camera: [*c]cgltf_camera) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_camera = arg_out_camera;
_ = &out_camera;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_camera.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "perspective") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
if (out_camera.*.type != @as(c_uint, @bitCast(cgltf_camera_type_invalid))) {
return -@as(c_int, 1);
}
out_camera.*.type = @as(c_uint, @bitCast(cgltf_camera_type_perspective));
{
var k: c_int = 0;
_ = &k;
while (k < data_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "aspectRatio") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.perspective.has_aspect_ratio = 1;
out_camera.*.data.perspective.aspect_ratio = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "yfov") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.perspective.yfov = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "zfar") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.perspective.has_zfar = 1;
out_camera.*.data.perspective.zfar = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "znear") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.perspective.znear = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_camera.*.data.perspective.extras);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "orthographic") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
if (out_camera.*.type != @as(c_uint, @bitCast(cgltf_camera_type_invalid))) {
return -@as(c_int, 1);
}
out_camera.*.type = @as(c_uint, @bitCast(cgltf_camera_type_orthographic));
{
var k: c_int = 0;
_ = &k;
while (k < data_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "xmag") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.orthographic.xmag = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "ymag") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.orthographic.ymag = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "zfar") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.orthographic.zfar = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "znear") == @as(c_int, 0)) {
i += 1;
out_camera.*.data.orthographic.znear = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_camera.*.data.orthographic.extras);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_camera.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_camera.*.extensions_count, &out_camera.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_cameras(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_camera), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.cameras))), &out_data.*.cameras_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.cameras_count) : (j +%= 1) {
i = cgltf_parse_json_camera(options, tokens, i, json_chunk, &out_data.*.cameras[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_light(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_light: [*c]cgltf_light) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_light = arg_out_light;
_ = &out_light;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
out_light.*.color[@as(c_uint, @intCast(@as(c_int, 0)))] = 1.0;
out_light.*.color[@as(c_uint, @intCast(@as(c_int, 1)))] = 1.0;
out_light.*.color[@as(c_uint, @intCast(@as(c_int, 2)))] = 1.0;
out_light.*.intensity = 1.0;
out_light.*.spot_inner_cone_angle = 0.0;
out_light.*.spot_outer_cone_angle = 3.1415927410125732 / 4.0;
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_light.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "color") == @as(c_int, 0)) {
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_light.*.color))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "intensity") == @as(c_int, 0)) {
i += 1;
out_light.*.intensity = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "type") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "directional") == @as(c_int, 0)) {
out_light.*.type = @as(c_uint, @bitCast(cgltf_light_type_directional));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "point") == @as(c_int, 0)) {
out_light.*.type = @as(c_uint, @bitCast(cgltf_light_type_point));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "spot") == @as(c_int, 0)) {
out_light.*.type = @as(c_uint, @bitCast(cgltf_light_type_spot));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "range") == @as(c_int, 0)) {
i += 1;
out_light.*.range = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "spot") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < data_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "innerConeAngle") == @as(c_int, 0)) {
i += 1;
out_light.*.spot_inner_cone_angle = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "outerConeAngle") == @as(c_int, 0)) {
i += 1;
out_light.*.spot_outer_cone_angle = cgltf_json_to_float(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk);
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_light.*.extras);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_lights(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_light), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.lights))), &out_data.*.lights_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.lights_count) : (j +%= 1) {
i = cgltf_parse_json_light(options, tokens, i, json_chunk, &out_data.*.lights[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_node(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_node: [*c]cgltf_node) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_node = arg_out_node;
_ = &out_node;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
out_node.*.rotation[@as(c_uint, @intCast(@as(c_int, 3)))] = 1.0;
out_node.*.scale[@as(c_uint, @intCast(@as(c_int, 0)))] = 1.0;
out_node.*.scale[@as(c_uint, @intCast(@as(c_int, 1)))] = 1.0;
out_node.*.scale[@as(c_uint, @intCast(@as(c_int, 2)))] = 1.0;
out_node.*.matrix[@as(c_uint, @intCast(@as(c_int, 0)))] = 1.0;
out_node.*.matrix[@as(c_uint, @intCast(@as(c_int, 5)))] = 1.0;
out_node.*.matrix[@as(c_uint, @intCast(@as(c_int, 10)))] = 1.0;
out_node.*.matrix[@as(c_uint, @intCast(@as(c_int, 15)))] = 1.0;
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_node.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "children") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf([*c]cgltf_node), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_node.*.children))), &out_node.*.children_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_node.*.children_count) : (k +%= 1) {
out_node.*.children[k] = @as([*c]cgltf_node, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "mesh") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_node.*.mesh = @as([*c]cgltf_mesh, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "skin") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_node.*.skin = @as([*c]cgltf_skin, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "camera") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_node.*.camera = @as([*c]cgltf_camera, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "translation") == @as(c_int, 0)) {
out_node.*.has_translation = 1;
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_node.*.translation))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "rotation") == @as(c_int, 0)) {
out_node.*.has_rotation = 1;
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_node.*.rotation))), @as(c_int, 4));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scale") == @as(c_int, 0)) {
out_node.*.has_scale = 1;
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_node.*.scale))), @as(c_int, 3));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "matrix") == @as(c_int, 0)) {
out_node.*.has_matrix = 1;
i = cgltf_parse_json_float_array(tokens, i + @as(c_int, 1), json_chunk, @as([*c]cgltf_float, @ptrCast(@alignCast(&out_node.*.matrix))), @as(c_int, 16));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "weights") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_float), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_node.*.weights))), &out_node.*.weights_count);
if (i < @as(c_int, 0)) {
return i;
}
i = cgltf_parse_json_float_array(tokens, i - @as(c_int, 1), json_chunk, out_node.*.weights, @as(c_int, @bitCast(@as(c_uint, @truncate(out_node.*.weights_count)))));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_node.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_node.*.extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
out_node.*.extensions_count = 0;
out_node.*.extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
if (!(out_node.*.extensions != null)) {
return -@as(c_int, 2);
}
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_lights_punctual") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
{
var m: c_int = 0;
_ = &m;
while (m < data_size) : (m += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "light") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_PRIMITIVE))) {
return -@as(c_int, 1);
}
out_node.*.light = @as([*c]cgltf_light, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "EXT_mesh_gpu_instancing") == @as(c_int, 0)) {
out_node.*.has_mesh_gpu_instancing = 1;
i = cgltf_parse_json_mesh_gpu_instancing(options, tokens, i + @as(c_int, 1), json_chunk, &out_node.*.mesh_gpu_instancing);
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_node.*.extensions[blk: {
const ref = &out_node.*.extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_nodes(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_node), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.nodes))), &out_data.*.nodes_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.nodes_count) : (j +%= 1) {
i = cgltf_parse_json_node(options, tokens, i, json_chunk, &out_data.*.nodes[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_scene(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_scene: [*c]cgltf_scene) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_scene = arg_out_scene;
_ = &out_scene;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_scene.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "nodes") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf([*c]cgltf_node), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_scene.*.nodes))), &out_scene.*.nodes_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_scene.*.nodes_count) : (k +%= 1) {
out_scene.*.nodes[k] = @as([*c]cgltf_node, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_scene.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_scene.*.extensions_count, &out_scene.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_scenes(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_scene), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.scenes))), &out_data.*.scenes_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.scenes_count) : (j +%= 1) {
i = cgltf_parse_json_scene(options, tokens, i, json_chunk, &out_data.*.scenes[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_animation_sampler(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_sampler: [*c]cgltf_animation_sampler) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_sampler = arg_out_sampler;
_ = &out_sampler;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "input") == @as(c_int, 0)) {
i += 1;
out_sampler.*.input = @as([*c]cgltf_accessor, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "output") == @as(c_int, 0)) {
i += 1;
out_sampler.*.output = @as([*c]cgltf_accessor, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "interpolation") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "LINEAR") == @as(c_int, 0)) {
out_sampler.*.interpolation = @as(c_uint, @bitCast(cgltf_interpolation_type_linear));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "STEP") == @as(c_int, 0)) {
out_sampler.*.interpolation = @as(c_uint, @bitCast(cgltf_interpolation_type_step));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "CUBICSPLINE") == @as(c_int, 0)) {
out_sampler.*.interpolation = @as(c_uint, @bitCast(cgltf_interpolation_type_cubic_spline));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_sampler.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_sampler.*.extensions_count, &out_sampler.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_animation_channel(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_channel: [*c]cgltf_animation_channel) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_channel = arg_out_channel;
_ = &out_channel;
_ = &options;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "sampler") == @as(c_int, 0)) {
i += 1;
out_channel.*.sampler = @as([*c]cgltf_animation_sampler, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "target") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var target_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &target_size;
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < target_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "node") == @as(c_int, 0)) {
i += 1;
out_channel.*.target_node = @as([*c]cgltf_node, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "path") == @as(c_int, 0)) {
i += 1;
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "translation") == @as(c_int, 0)) {
out_channel.*.target_path = @as(c_uint, @bitCast(cgltf_animation_path_type_translation));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "rotation") == @as(c_int, 0)) {
out_channel.*.target_path = @as(c_uint, @bitCast(cgltf_animation_path_type_rotation));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scale") == @as(c_int, 0)) {
out_channel.*.target_path = @as(c_uint, @bitCast(cgltf_animation_path_type_scale));
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "weights") == @as(c_int, 0)) {
out_channel.*.target_path = @as(c_uint, @bitCast(cgltf_animation_path_type_weights));
}
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_channel.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_channel.*.extensions_count, &out_channel.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_animation(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_animation: [*c]cgltf_animation) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_animation = arg_out_animation;
_ = &out_animation;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_animation.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "samplers") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_animation_sampler), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_animation.*.samplers))), &out_animation.*.samplers_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_animation.*.samplers_count) : (k +%= 1) {
i = cgltf_parse_json_animation_sampler(options, tokens, i, json_chunk, &out_animation.*.samplers[k]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "channels") == @as(c_int, 0)) {
i = cgltf_parse_json_array(options, tokens, i + @as(c_int, 1), json_chunk, @sizeOf(cgltf_animation_channel), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_animation.*.channels))), &out_animation.*.channels_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < out_animation.*.channels_count) : (k +%= 1) {
i = cgltf_parse_json_animation_channel(options, tokens, i, json_chunk, &out_animation.*.channels[k]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_animation.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_animation.*.extensions_count, &out_animation.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_animations(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_animation), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.animations))), &out_data.*.animations_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.animations_count) : (j +%= 1) {
i = cgltf_parse_json_animation(options, tokens, i, json_chunk, &out_data.*.animations[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_variant(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_variant: [*c]cgltf_material_variant) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_variant = arg_out_variant;
_ = &out_variant;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "name") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_variant.*.name);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_variant.*.extras);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_variants(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
i = cgltf_parse_json_array(options, tokens, i, json_chunk, @sizeOf(cgltf_material_variant), @as([*c]?*anyopaque, @ptrCast(@alignCast(&out_data.*.variants))), &out_data.*.variants_count);
if (i < @as(c_int, 0)) {
return i;
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < out_data.*.variants_count) : (j +%= 1) {
i = cgltf_parse_json_variant(options, tokens, i, json_chunk, &out_data.*.variants[j]);
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn cgltf_parse_json_asset(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_asset: [*c]cgltf_asset) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_asset = arg_out_asset;
_ = &out_asset;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "copyright") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_asset.*.copyright);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "generator") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_asset.*.generator);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "version") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_asset.*.version);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "minVersion") == @as(c_int, 0)) {
i = cgltf_parse_json_string(options, tokens, i + @as(c_int, 1), json_chunk, &out_asset.*.min_version);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_asset.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_asset.*.extensions_count, &out_asset.*.extensions);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
if ((out_asset.*.version != null) and (atof(out_asset.*.version) < @as(f64, @floatFromInt(@as(c_int, 2))))) {
return -@as(c_int, 3);
}
return i;
}
pub fn cgltf_fixup_pointers(arg_data: [*c]cgltf_data) callconv(.C) c_int {
var data = arg_data;
_ = &data;
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.meshes_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.meshes[i].primitives_count) : (j +%= 1) {
if (data.*.meshes[i].primitives[j].indices != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].indices))) > data.*.accessors_count) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].indices = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].indices))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.meshes[i].primitives[j].material != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].material))) > data.*.materials_count) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].material = &data.*.materials[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].material))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].attributes_count) : (k +%= 1) {
if (!(data.*.meshes[i].primitives[j].attributes[k].data != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].attributes[k].data))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].attributes[k].data = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].attributes[k].data))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].targets_count) : (k +%= 1) {
{
var m: cgltf_size = 0;
_ = &m;
while (m < data.*.meshes[i].primitives[j].targets[k].attributes_count) : (m +%= 1) {
if (!(data.*.meshes[i].primitives[j].targets[k].attributes[m].data != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].targets[k].attributes[m].data))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].targets[k].attributes[m].data = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].targets[k].attributes[m].data))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
}
if (data.*.meshes[i].primitives[j].has_draco_mesh_compression != 0) {
if (!(data.*.meshes[i].primitives[j].draco_mesh_compression.buffer_view != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].draco_mesh_compression.buffer_view))) > data.*.buffer_views_count)) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].draco_mesh_compression.buffer_view = &data.*.buffer_views[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].draco_mesh_compression.buffer_view))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
{
var m: cgltf_size = 0;
_ = &m;
while (m < data.*.meshes[i].primitives[j].draco_mesh_compression.attributes_count) : (m +%= 1) {
if (!(data.*.meshes[i].primitives[j].draco_mesh_compression.attributes[m].data != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].draco_mesh_compression.attributes[m].data))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].draco_mesh_compression.attributes[m].data = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].draco_mesh_compression.attributes[m].data))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var k: cgltf_size = 0;
_ = &k;
while (k < data.*.meshes[i].primitives[j].mappings_count) : (k +%= 1) {
if (!(data.*.meshes[i].primitives[j].mappings[k].material != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].mappings[k].material))) > data.*.materials_count)) {
return -@as(c_int, 1);
}
data.*.meshes[i].primitives[j].mappings[k].material = &data.*.materials[@as(cgltf_size, @intCast(@intFromPtr(data.*.meshes[i].primitives[j].mappings[k].material))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.accessors_count) : (i +%= 1) {
if (data.*.accessors[i].buffer_view != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].buffer_view))) > data.*.buffer_views_count) {
return -@as(c_int, 1);
}
data.*.accessors[i].buffer_view = &data.*.buffer_views[@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].buffer_view))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.accessors[i].is_sparse != 0) {
if (!(data.*.accessors[i].sparse.indices_buffer_view != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].sparse.indices_buffer_view))) > data.*.buffer_views_count)) {
return -@as(c_int, 1);
}
data.*.accessors[i].sparse.indices_buffer_view = &data.*.buffer_views[@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].sparse.indices_buffer_view))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (!(data.*.accessors[i].sparse.values_buffer_view != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].sparse.values_buffer_view))) > data.*.buffer_views_count)) {
return -@as(c_int, 1);
}
data.*.accessors[i].sparse.values_buffer_view = &data.*.buffer_views[@as(cgltf_size, @intCast(@intFromPtr(data.*.accessors[i].sparse.values_buffer_view))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.accessors[i].buffer_view != null) {
data.*.accessors[i].stride = data.*.accessors[i].buffer_view.*.stride;
}
if (data.*.accessors[i].stride == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 0))))) {
data.*.accessors[i].stride = cgltf_calc_size(data.*.accessors[i].type, data.*.accessors[i].component_type);
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.textures_count) : (i +%= 1) {
if (data.*.textures[i].image != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].image))) > data.*.images_count) {
return -@as(c_int, 1);
}
data.*.textures[i].image = &data.*.images[@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].image))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.textures[i].basisu_image != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].basisu_image))) > data.*.images_count) {
return -@as(c_int, 1);
}
data.*.textures[i].basisu_image = &data.*.images[@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].basisu_image))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.textures[i].sampler != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].sampler))) > data.*.samplers_count) {
return -@as(c_int, 1);
}
data.*.textures[i].sampler = &data.*.samplers[@as(cgltf_size, @intCast(@intFromPtr(data.*.textures[i].sampler))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.images_count) : (i +%= 1) {
if (data.*.images[i].buffer_view != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.images[i].buffer_view))) > data.*.buffer_views_count) {
return -@as(c_int, 1);
}
data.*.images[i].buffer_view = &data.*.buffer_views[@as(cgltf_size, @intCast(@intFromPtr(data.*.images[i].buffer_view))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.materials_count) : (i +%= 1) {
if (data.*.materials[i].normal_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].normal_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].normal_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].normal_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].emissive_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].emissive_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].emissive_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].emissive_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].occlusion_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].occlusion_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].occlusion_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].occlusion_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].pbr_specular_glossiness.diffuse_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_specular_glossiness.diffuse_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].pbr_specular_glossiness.diffuse_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_specular_glossiness.diffuse_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].pbr_specular_glossiness.specular_glossiness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_specular_glossiness.specular_glossiness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].pbr_specular_glossiness.specular_glossiness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].pbr_specular_glossiness.specular_glossiness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].clearcoat.clearcoat_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].clearcoat.clearcoat_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].clearcoat.clearcoat_roughness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_roughness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].clearcoat.clearcoat_roughness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_roughness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].clearcoat.clearcoat_normal_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_normal_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].clearcoat.clearcoat_normal_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].clearcoat.clearcoat_normal_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].specular.specular_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].specular.specular_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].specular.specular_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].specular.specular_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].specular.specular_color_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].specular.specular_color_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].specular.specular_color_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].specular.specular_color_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].transmission.transmission_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].transmission.transmission_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].transmission.transmission_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].transmission.transmission_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].volume.thickness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].volume.thickness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].volume.thickness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].volume.thickness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].sheen.sheen_color_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].sheen.sheen_color_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].sheen.sheen_color_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].sheen.sheen_color_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].sheen.sheen_roughness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].sheen.sheen_roughness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].sheen.sheen_roughness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].sheen.sheen_roughness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].iridescence.iridescence_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].iridescence.iridescence_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].iridescence.iridescence_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].iridescence.iridescence_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].iridescence.iridescence_thickness_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].iridescence.iridescence_thickness_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].iridescence.iridescence_thickness_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].iridescence.iridescence_thickness_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.materials[i].anisotropy.anisotropy_texture.texture != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].anisotropy.anisotropy_texture.texture))) > data.*.textures_count) {
return -@as(c_int, 1);
}
data.*.materials[i].anisotropy.anisotropy_texture.texture = &data.*.textures[@as(cgltf_size, @intCast(@intFromPtr(data.*.materials[i].anisotropy.anisotropy_texture.texture))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.buffer_views_count) : (i +%= 1) {
if (!(data.*.buffer_views[i].buffer != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.buffer_views[i].buffer))) > data.*.buffers_count)) {
return -@as(c_int, 1);
}
data.*.buffer_views[i].buffer = &data.*.buffers[@as(cgltf_size, @intCast(@intFromPtr(data.*.buffer_views[i].buffer))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (data.*.buffer_views[i].has_meshopt_compression != 0) {
if (!(data.*.buffer_views[i].meshopt_compression.buffer != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.buffer_views[i].meshopt_compression.buffer))) > data.*.buffers_count)) {
return -@as(c_int, 1);
}
data.*.buffer_views[i].meshopt_compression.buffer = &data.*.buffers[@as(cgltf_size, @intCast(@intFromPtr(data.*.buffer_views[i].meshopt_compression.buffer))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.skins_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.skins[i].joints_count) : (j +%= 1) {
if (!(data.*.skins[i].joints[j] != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].joints[j]))) > data.*.nodes_count)) {
return -@as(c_int, 1);
}
data.*.skins[i].joints[j] = &data.*.nodes[@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].joints[j]))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
if (data.*.skins[i].skeleton != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].skeleton))) > data.*.nodes_count) {
return -@as(c_int, 1);
}
data.*.skins[i].skeleton = &data.*.nodes[@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].skeleton))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.skins[i].inverse_bind_matrices != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].inverse_bind_matrices))) > data.*.accessors_count) {
return -@as(c_int, 1);
}
data.*.skins[i].inverse_bind_matrices = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.skins[i].inverse_bind_matrices))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.nodes_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.nodes[i].children_count) : (j +%= 1) {
if (!(data.*.nodes[i].children[j] != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].children[j]))) > data.*.nodes_count)) {
return -@as(c_int, 1);
}
data.*.nodes[i].children[j] = &data.*.nodes[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].children[j]))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (data.*.nodes[i].children[j].*.parent != null) {
return -@as(c_int, 1);
}
data.*.nodes[i].children[j].*.parent = &data.*.nodes[i];
}
}
if (data.*.nodes[i].mesh != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].mesh))) > data.*.meshes_count) {
return -@as(c_int, 1);
}
data.*.nodes[i].mesh = &data.*.meshes[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].mesh))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.nodes[i].skin != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].skin))) > data.*.skins_count) {
return -@as(c_int, 1);
}
data.*.nodes[i].skin = &data.*.skins[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].skin))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.nodes[i].camera != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].camera))) > data.*.cameras_count) {
return -@as(c_int, 1);
}
data.*.nodes[i].camera = &data.*.cameras[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].camera))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.nodes[i].light != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].light))) > data.*.lights_count) {
return -@as(c_int, 1);
}
data.*.nodes[i].light = &data.*.lights[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].light))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
if (data.*.nodes[i].has_mesh_gpu_instancing != 0) {
{
var m: cgltf_size = 0;
_ = &m;
while (m < data.*.nodes[i].mesh_gpu_instancing.attributes_count) : (m +%= 1) {
if (!(data.*.nodes[i].mesh_gpu_instancing.attributes[m].data != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].mesh_gpu_instancing.attributes[m].data))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.nodes[i].mesh_gpu_instancing.attributes[m].data = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.nodes[i].mesh_gpu_instancing.attributes[m].data))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
}
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.scenes_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.scenes[i].nodes_count) : (j +%= 1) {
if (!(data.*.scenes[i].nodes[j] != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.scenes[i].nodes[j]))) > data.*.nodes_count)) {
return -@as(c_int, 1);
}
data.*.scenes[i].nodes[j] = &data.*.nodes[@as(cgltf_size, @intCast(@intFromPtr(data.*.scenes[i].nodes[j]))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (data.*.scenes[i].nodes[j].*.parent != null) {
return -@as(c_int, 1);
}
}
}
}
}
if (data.*.scene != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.scene))) > data.*.scenes_count) {
return -@as(c_int, 1);
}
data.*.scene = &data.*.scenes[@as(cgltf_size, @intCast(@intFromPtr(data.*.scene))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
{
var i: cgltf_size = 0;
_ = &i;
while (i < data.*.animations_count) : (i +%= 1) {
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.animations[i].samplers_count) : (j +%= 1) {
if (!(data.*.animations[i].samplers[j].input != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].samplers[j].input))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.animations[i].samplers[j].input = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].samplers[j].input))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (!(data.*.animations[i].samplers[j].output != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].samplers[j].output))) > data.*.accessors_count)) {
return -@as(c_int, 1);
}
data.*.animations[i].samplers[j].output = &data.*.accessors[@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].samplers[j].output))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
{
var j: cgltf_size = 0;
_ = &j;
while (j < data.*.animations[i].channels_count) : (j +%= 1) {
if (!(data.*.animations[i].channels[j].sampler != null) or (@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].channels[j].sampler))) > data.*.animations[i].samplers_count)) {
return -@as(c_int, 1);
}
data.*.animations[i].channels[j].sampler = &data.*.animations[i].samplers[@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].channels[j].sampler))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
if (data.*.animations[i].channels[j].target_node != null) {
if (@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].channels[j].target_node))) > data.*.nodes_count) {
return -@as(c_int, 1);
}
data.*.animations[i].channels[j].target_node = &data.*.nodes[@as(cgltf_size, @intCast(@intFromPtr(data.*.animations[i].channels[j].target_node))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))];
}
}
}
}
}
return 0;
}
pub fn cgltf_parse_json_root(arg_options: [*c]cgltf_options, arg_tokens: [*c]const jsmntok_t, arg_i: c_int, arg_json_chunk: [*c]const u8, arg_out_data: [*c]cgltf_data) callconv(.C) c_int {
var options = arg_options;
_ = &options;
var tokens = arg_tokens;
_ = &tokens;
var i = arg_i;
_ = &i;
var json_chunk = arg_json_chunk;
_ = &json_chunk;
var out_data = arg_out_data;
_ = &out_data;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &size;
i += 1;
{
var j: c_int = 0;
_ = &j;
while (j < size) : (j += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "asset") == @as(c_int, 0)) {
i = cgltf_parse_json_asset(options, tokens, i + @as(c_int, 1), json_chunk, &out_data.*.asset);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "meshes") == @as(c_int, 0)) {
i = cgltf_parse_json_meshes(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "accessors") == @as(c_int, 0)) {
i = cgltf_parse_json_accessors(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "bufferViews") == @as(c_int, 0)) {
i = cgltf_parse_json_buffer_views(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "buffers") == @as(c_int, 0)) {
i = cgltf_parse_json_buffers(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "materials") == @as(c_int, 0)) {
i = cgltf_parse_json_materials(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "images") == @as(c_int, 0)) {
i = cgltf_parse_json_images(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "textures") == @as(c_int, 0)) {
i = cgltf_parse_json_textures(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "samplers") == @as(c_int, 0)) {
i = cgltf_parse_json_samplers(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "skins") == @as(c_int, 0)) {
i = cgltf_parse_json_skins(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "cameras") == @as(c_int, 0)) {
i = cgltf_parse_json_cameras(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "nodes") == @as(c_int, 0)) {
i = cgltf_parse_json_nodes(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scenes") == @as(c_int, 0)) {
i = cgltf_parse_json_scenes(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "scene") == @as(c_int, 0)) {
i += 1;
out_data.*.scene = @as([*c]cgltf_scene, @ptrFromInt(@as(cgltf_size, @bitCast(@as(c_long, cgltf_json_to_int(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk)))) +% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))));
i += 1;
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "animations") == @as(c_int, 0)) {
i = cgltf_parse_json_animations(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extras") == @as(c_int, 0)) {
i = cgltf_parse_json_extras(options, tokens, i + @as(c_int, 1), json_chunk, &out_data.*.extras);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensions") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
if (out_data.*.data_extensions != null) {
return -@as(c_int, 1);
}
var extensions_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &extensions_size;
out_data.*.data_extensions_count = 0;
out_data.*.data_extensions = @as([*c]cgltf_extension, @ptrCast(@alignCast(cgltf_calloc(options, @sizeOf(cgltf_extension), @as(cgltf_size, @bitCast(@as(c_long, extensions_size)))))));
if (!(out_data.*.data_extensions != null)) {
return -@as(c_int, 2);
}
i += 1;
{
var k: c_int = 0;
_ = &k;
while (k < extensions_size) : (k += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_lights_punctual") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
{
var m: c_int = 0;
_ = &m;
while (m < data_size) : (m += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "lights") == @as(c_int, 0)) {
i = cgltf_parse_json_lights(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "KHR_materials_variants") == @as(c_int, 0)) {
i += 1;
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_OBJECT))) {
return -@as(c_int, 1);
}
var data_size: c_int = (blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size;
_ = &data_size;
i += 1;
{
var m: c_int = 0;
_ = &m;
while (m < data_size) : (m += 1) {
if (((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.type != @as(c_uint, @bitCast(JSMN_STRING))) or ((blk: {
const tmp = i;
if (tmp >= 0) break :blk tokens + @as(usize, @intCast(tmp)) else break :blk tokens - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.size == @as(c_int, 0))) {
return -@as(c_int, 1);
}
if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "variants") == @as(c_int, 0)) {
i = cgltf_parse_json_variants(options, tokens, i + @as(c_int, 1), json_chunk, out_data);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else {
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &out_data.*.data_extensions[blk: {
const ref = &out_data.*.data_extensions_count;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}]);
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensionsUsed") == @as(c_int, 0)) {
i = cgltf_parse_json_string_array(options, tokens, i + @as(c_int, 1), json_chunk, &out_data.*.extensions_used, &out_data.*.extensions_used_count);
} else if (cgltf_json_strcmp(tokens + @as(usize, @bitCast(@as(isize, @intCast(i)))), json_chunk, "extensionsRequired") == @as(c_int, 0)) {
i = cgltf_parse_json_string_array(options, tokens, i + @as(c_int, 1), json_chunk, &out_data.*.extensions_required, &out_data.*.extensions_required_count);
} else {
i = cgltf_skip_json(tokens, i + @as(c_int, 1));
}
if (i < @as(c_int, 0)) {
return i;
}
}
}
return i;
}
pub fn jsmn_alloc_token(arg_parser: [*c]jsmn_parser, arg_tokens: [*c]jsmntok_t, arg_num_tokens: usize) callconv(.C) [*c]jsmntok_t {
var parser = arg_parser;
_ = &parser;
var tokens = arg_tokens;
_ = &tokens;
var num_tokens = arg_num_tokens;
_ = &num_tokens;
var tok: [*c]jsmntok_t = undefined;
_ = &tok;
if (@as(usize, @bitCast(@as(c_ulong, parser.*.toknext))) >= num_tokens) {
return null;
}
tok = &tokens[blk: {
const ref = &parser.*.toknext;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
}];
tok.*.start = blk: {
const tmp = @as(ptrdiff_t, @bitCast(@as(c_long, -@as(c_int, 1))));
tok.*.end = tmp;
break :blk tmp;
};
tok.*.size = 0;
tok.*.parent = -@as(c_int, 1);
return tok;
}
pub fn jsmn_fill_token(arg_token: [*c]jsmntok_t, arg_type: jsmntype_t, arg_start: ptrdiff_t, arg_end: ptrdiff_t) callconv(.C) void {
var token = arg_token;
_ = &token;
var @"type" = arg_type;
_ = &@"type";
var start = arg_start;
_ = &start;
var end = arg_end;
_ = &end;
token.*.type = @"type";
token.*.start = start;
token.*.end = end;
token.*.size = 0;
}
// ./external/cgltf.h:6746:4: warning: TODO implement translation of stmt class GotoStmtClass
// ./external/cgltf.h:6731:12: warning: unable to translate function, demoted to extern
pub extern fn jsmn_parse_primitive(arg_parser: [*c]jsmn_parser, arg_js: [*c]const u8, arg_len: usize, arg_tokens: [*c]jsmntok_t, arg_num_tokens: usize) callconv(.C) c_int;
pub fn jsmn_parse_string(arg_parser: [*c]jsmn_parser, arg_js: [*c]const u8, arg_len: usize, arg_tokens: [*c]jsmntok_t, arg_num_tokens: usize) callconv(.C) c_int {
var parser = arg_parser;
_ = &parser;
var js = arg_js;
_ = &js;
var len = arg_len;
_ = &len;
var tokens = arg_tokens;
_ = &tokens;
var num_tokens = arg_num_tokens;
_ = &num_tokens;
var token: [*c]jsmntok_t = undefined;
_ = &token;
var start: ptrdiff_t = @as(ptrdiff_t, @bitCast(parser.*.pos));
_ = &start;
parser.*.pos +%= 1;
while ((parser.*.pos < len) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) != @as(c_int, '\x00'))) : (parser.*.pos +%= 1) {
var c: u8 = js[parser.*.pos];
_ = &c;
if (@as(c_int, @bitCast(@as(c_uint, c))) == @as(c_int, '"')) {
if (tokens == @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
return 0;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == @as([*c]jsmntok_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
parser.*.pos = @as(usize, @bitCast(start));
return JSMN_ERROR_NOMEM;
}
jsmn_fill_token(token, @as(c_uint, @bitCast(JSMN_STRING)), start + @as(ptrdiff_t, @bitCast(@as(c_long, @as(c_int, 1)))), @as(ptrdiff_t, @bitCast(parser.*.pos)));
token.*.parent = parser.*.toksuper;
return 0;
}
if ((@as(c_int, @bitCast(@as(c_uint, c))) == @as(c_int, '\\')) and ((parser.*.pos +% @as(usize, @bitCast(@as(c_long, @as(c_int, 1))))) < len)) {
var i: c_int = undefined;
_ = &i;
parser.*.pos +%= 1;
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos])))) {
@as(c_int, 34), @as(c_int, 47), @as(c_int, 92), @as(c_int, 98), @as(c_int, 102), @as(c_int, 114), @as(c_int, 110), @as(c_int, 116) => break,
@as(c_int, 117) => {
parser.*.pos +%= 1;
{
i = 0;
while (((i < @as(c_int, 4)) and (parser.*.pos < len)) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) != @as(c_int, '\x00'))) : (i += 1) {
if (!((((@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) >= @as(c_int, 48)) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) <= @as(c_int, 57))) or ((@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) >= @as(c_int, 65)) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) <= @as(c_int, 70)))) or ((@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) >= @as(c_int, 97)) and (@as(c_int, @bitCast(@as(c_uint, js[parser.*.pos]))) <= @as(c_int, 102))))) {
parser.*.pos = @as(usize, @bitCast(start));
return JSMN_ERROR_INVAL;
}
parser.*.pos +%= 1;
}
}
parser.*.pos -%= 1;
break;
},
else => {
parser.*.pos = @as(usize, @bitCast(start));
return JSMN_ERROR_INVAL;
},
}
break;
}
}
}
parser.*.pos = @as(usize, @bitCast(start));
return JSMN_ERROR_PART;
}
pub const VoxColor = extern struct {
r: u8 = @import("std").mem.zeroes(u8),
g: u8 = @import("std").mem.zeroes(u8),
b: u8 = @import("std").mem.zeroes(u8),
a: u8 = @import("std").mem.zeroes(u8),
};
pub const VoxVector3 = extern struct {
x: f32 = @import("std").mem.zeroes(f32),
y: f32 = @import("std").mem.zeroes(f32),
z: f32 = @import("std").mem.zeroes(f32),
};
pub const ArrayVector3 = extern struct {
array: [*c]VoxVector3 = @import("std").mem.zeroes([*c]VoxVector3),
used: c_int = @import("std").mem.zeroes(c_int),
size: c_int = @import("std").mem.zeroes(c_int),
};
pub const ArrayColor = extern struct {
array: [*c]VoxColor = @import("std").mem.zeroes([*c]VoxColor),
used: c_int = @import("std").mem.zeroes(c_int),
size: c_int = @import("std").mem.zeroes(c_int),
};
pub const ArrayUShort = extern struct {
array: [*c]c_ushort = @import("std").mem.zeroes([*c]c_ushort),
used: c_int = @import("std").mem.zeroes(c_int),
size: c_int = @import("std").mem.zeroes(c_int),
};
pub const CubeChunk3D = extern struct {
m_array: [*c]u8 = @import("std").mem.zeroes([*c]u8),
arraySize: c_int = @import("std").mem.zeroes(c_int),
};
pub const VoxArray3D = extern struct {
sizeX: c_int = @import("std").mem.zeroes(c_int),
sizeY: c_int = @import("std").mem.zeroes(c_int),
sizeZ: c_int = @import("std").mem.zeroes(c_int),
chunksSizeX: c_int = @import("std").mem.zeroes(c_int),
chunksSizeY: c_int = @import("std").mem.zeroes(c_int),
chunksSizeZ: c_int = @import("std").mem.zeroes(c_int),
m_arrayChunks: [*c]CubeChunk3D = @import("std").mem.zeroes([*c]CubeChunk3D),
arrayChunksSize: c_int = @import("std").mem.zeroes(c_int),
ChunkFlattenOffset: c_int = @import("std").mem.zeroes(c_int),
chunksAllocated: c_int = @import("std").mem.zeroes(c_int),
chunksTotal: c_int = @import("std").mem.zeroes(c_int),
vertices: ArrayVector3 = @import("std").mem.zeroes(ArrayVector3),
normals: ArrayVector3 = @import("std").mem.zeroes(ArrayVector3),
indices: ArrayUShort = @import("std").mem.zeroes(ArrayUShort),
colors: ArrayColor = @import("std").mem.zeroes(ArrayColor),
palette: [256]VoxColor = @import("std").mem.zeroes([256]VoxColor),
};
pub export fn Vox_LoadFromMemory(arg_pvoxData: [*c]u8, arg_voxDataSize: c_uint, arg_pvoxarray: [*c]VoxArray3D) c_int {
var pvoxData = arg_pvoxData;
_ = &pvoxData;
var voxDataSize = arg_voxDataSize;
_ = &voxDataSize;
var pvoxarray = arg_pvoxarray;
_ = &pvoxarray;
var fileData: [*c]u8 = pvoxData;
_ = &fileData;
var fileDataPtr: [*c]u8 = fileData;
_ = &fileDataPtr;
var endfileDataPtr: [*c]u8 = fileData + voxDataSize;
_ = &endfileDataPtr;
if (strncmp(@as([*c]u8, @ptrCast(@alignCast(fileDataPtr))), "VOX ", @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4))))) != @as(c_int, 0)) {
return -@as(c_int, 2);
}
fileDataPtr += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
var version: c_uint = 0;
_ = &version;
version = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr)))[@as(c_uint, @intCast(@as(c_int, 0)))];
fileDataPtr += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
if ((version != @as(c_uint, @bitCast(@as(c_int, 150)))) and (version != @as(c_uint, @bitCast(@as(c_int, 200))))) {
return -@as(c_int, 3);
}
var sizeX: c_uint = undefined;
_ = &sizeX;
var sizeY: c_uint = undefined;
_ = &sizeY;
var sizeZ: c_uint = undefined;
_ = &sizeZ;
sizeX = blk: {
const tmp = blk_1: {
const tmp_2 = @as(c_uint, @bitCast(@as(c_int, 0)));
sizeZ = tmp_2;
break :blk_1 tmp_2;
};
sizeY = tmp;
break :blk tmp;
};
var numVoxels: c_uint = 0;
_ = &numVoxels;
while (fileDataPtr < endfileDataPtr) {
var szChunkName: [5]u8 = undefined;
_ = &szChunkName;
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&szChunkName))))), @as(?*const anyopaque, @ptrCast(fileDataPtr)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
szChunkName[@as(c_uint, @intCast(@as(c_int, 4)))] = 0;
fileDataPtr += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
var chunkSize: c_uint = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr))).*;
_ = &chunkSize;
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
if (strcmp(@as([*c]u8, @ptrCast(@alignCast(&szChunkName))), "SIZE") == @as(c_int, 0)) {
sizeX = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr))).*;
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
sizeY = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr))).*;
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
sizeZ = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr))).*;
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
Vox_AllocArray(pvoxarray, @as(c_int, @bitCast(sizeX)), @as(c_int, @bitCast(sizeZ)), @as(c_int, @bitCast(sizeY)));
} else if (strcmp(@as([*c]u8, @ptrCast(@alignCast(&szChunkName))), "XYZI") == @as(c_int, 0)) {
var vx: u8 = undefined;
_ = &vx;
var vy: u8 = undefined;
_ = &vy;
var vz: u8 = undefined;
_ = &vz;
var vi: u8 = undefined;
_ = &vi;
numVoxels = @as([*c]c_uint, @ptrCast(@alignCast(fileDataPtr))).*;
fileDataPtr += @as([*c]u8, @ptrFromInt(@sizeOf(c_uint)));
while (numVoxels > @as(c_uint, @bitCast(@as(c_int, 0)))) {
vx = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
vy = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
vz = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
vi = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
Vox_SetVoxel(pvoxarray, @as(c_int, @bitCast(@as(c_uint, vx))), @as(c_int, @bitCast(@as(c_uint, vz))), (pvoxarray.*.sizeZ - @as(c_int, @bitCast(@as(c_uint, vy)))) - @as(c_int, 1), vi);
numVoxels -%= 1;
}
} else if (strcmp(@as([*c]u8, @ptrCast(@alignCast(&szChunkName))), "RGBA") == @as(c_int, 0)) {
var col: VoxColor = undefined;
_ = &col;
{
var i: c_int = 0;
_ = &i;
while (i < (@as(c_int, 256) - @as(c_int, 1))) : (i += 1) {
col.r = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
col.g = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
col.b = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
col.a = (blk: {
const ref = &fileDataPtr;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
pvoxarray.*.palette[@as(c_uint, @intCast(i + @as(c_int, 1)))] = col;
}
}
} else {
fileDataPtr += @as([*c]u8, @ptrFromInt(chunkSize));
}
}
initArrayVector3(&pvoxarray.*.vertices, @as(c_int, 3) * @as(c_int, 1024));
initArrayVector3(&pvoxarray.*.normals, @as(c_int, 3) * @as(c_int, 1024));
initArrayUShort(&pvoxarray.*.indices, @as(c_int, 3) * @as(c_int, 1024));
initArrayColor(&pvoxarray.*.colors, @as(c_int, 3) * @as(c_int, 1024));
var x: c_int = undefined;
_ = &x;
var y: c_int = undefined;
_ = &y;
var z: c_int = undefined;
_ = &z;
{
x = 0;
while (x <= pvoxarray.*.sizeX) : (x += 1) {
{
z = 0;
while (z <= pvoxarray.*.sizeZ) : (z += 1) {
{
y = 0;
while (y <= pvoxarray.*.sizeY) : (y += 1) {
var matID: u8 = Vox_GetVoxel(pvoxarray, x, y, z);
_ = &matID;
if (@as(c_int, @bitCast(@as(c_uint, matID))) != @as(c_int, 0)) {
Vox_Build_Voxel(pvoxarray, x, y, z, @as(c_int, @bitCast(@as(c_uint, matID))));
}
}
}
}
}
}
}
return @as(c_int, 0);
}
pub export fn Vox_FreeArrays(arg_voxarray: [*c]VoxArray3D) void {
var voxarray = arg_voxarray;
_ = &voxarray;
if (voxarray.*.m_arrayChunks != null) {
{
var i: c_int = 0;
_ = &i;
while (i < voxarray.*.chunksTotal) : (i += 1) {
var chunk: [*c]CubeChunk3D = &(blk: {
const tmp = i;
if (tmp >= 0) break :blk voxarray.*.m_arrayChunks + @as(usize, @intCast(tmp)) else break :blk voxarray.*.m_arrayChunks - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &chunk;
if (chunk.*.m_array != null) {
chunk.*.arraySize = 0;
free(@as(?*anyopaque, @ptrCast(chunk.*.m_array)));
}
}
}
free(@as(?*anyopaque, @ptrCast(voxarray.*.m_arrayChunks)));
voxarray.*.m_arrayChunks = null;
voxarray.*.arrayChunksSize = 0;
voxarray.*.chunksSizeX = blk: {
const tmp = blk_1: {
const tmp_2 = @as(c_int, 0);
voxarray.*.chunksSizeZ = tmp_2;
break :blk_1 tmp_2;
};
voxarray.*.chunksSizeY = tmp;
break :blk tmp;
};
voxarray.*.chunksTotal = 0;
voxarray.*.chunksAllocated = 0;
voxarray.*.ChunkFlattenOffset = 0;
voxarray.*.sizeX = blk: {
const tmp = blk_1: {
const tmp_2 = @as(c_int, 0);
voxarray.*.sizeZ = tmp_2;
break :blk_1 tmp_2;
};
voxarray.*.sizeY = tmp;
break :blk tmp;
};
}
freeArrayVector3(&voxarray.*.vertices);
freeArrayUShort(&voxarray.*.indices);
freeArrayColor(&voxarray.*.colors);
}
pub fn initArrayUShort(arg_a: [*c]ArrayUShort, arg_initialSize: c_int) callconv(.C) void {
var a = arg_a;
_ = &a;
var initialSize = arg_initialSize;
_ = &initialSize;
a.*.array = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, initialSize))) *% @sizeOf(c_ushort)))));
a.*.used = 0;
a.*.size = initialSize;
}
pub fn insertArrayUShort(arg_a: [*c]ArrayUShort, arg_element: c_ushort) callconv(.C) void {
var a = arg_a;
_ = &a;
var element = arg_element;
_ = &element;
if (a.*.used == a.*.size) {
a.*.size *= @as(c_int, 2);
a.*.array = @as([*c]c_ushort, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(a.*.array)), @as(c_ulong, @bitCast(@as(c_long, a.*.size))) *% @sizeOf(c_ushort)))));
}
(blk: {
const tmp = blk_1: {
const ref = &a.*.used;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk a.*.array + @as(usize, @intCast(tmp)) else break :blk a.*.array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = element;
}
pub fn freeArrayUShort(arg_a: [*c]ArrayUShort) callconv(.C) void {
var a = arg_a;
_ = &a;
free(@as(?*anyopaque, @ptrCast(a.*.array)));
a.*.array = null;
a.*.used = blk: {
const tmp = @as(c_int, 0);
a.*.size = tmp;
break :blk tmp;
};
}
pub fn initArrayVector3(arg_a: [*c]ArrayVector3, arg_initialSize: c_int) callconv(.C) void {
var a = arg_a;
_ = &a;
var initialSize = arg_initialSize;
_ = &initialSize;
a.*.array = @as([*c]VoxVector3, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, initialSize))) *% @sizeOf(VoxVector3)))));
a.*.used = 0;
a.*.size = initialSize;
}
pub fn insertArrayVector3(arg_a: [*c]ArrayVector3, arg_element: VoxVector3) callconv(.C) void {
var a = arg_a;
_ = &a;
var element = arg_element;
_ = &element;
if (a.*.used == a.*.size) {
a.*.size *= @as(c_int, 2);
a.*.array = @as([*c]VoxVector3, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(a.*.array)), @as(c_ulong, @bitCast(@as(c_long, a.*.size))) *% @sizeOf(VoxVector3)))));
}
(blk: {
const tmp = blk_1: {
const ref = &a.*.used;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk a.*.array + @as(usize, @intCast(tmp)) else break :blk a.*.array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = element;
}
pub fn freeArrayVector3(arg_a: [*c]ArrayVector3) callconv(.C) void {
var a = arg_a;
_ = &a;
free(@as(?*anyopaque, @ptrCast(a.*.array)));
a.*.array = null;
a.*.used = blk: {
const tmp = @as(c_int, 0);
a.*.size = tmp;
break :blk tmp;
};
}
pub fn initArrayColor(arg_a: [*c]ArrayColor, arg_initialSize: c_int) callconv(.C) void {
var a = arg_a;
_ = &a;
var initialSize = arg_initialSize;
_ = &initialSize;
a.*.array = @as([*c]VoxColor, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, initialSize))) *% @sizeOf(VoxColor)))));
a.*.used = 0;
a.*.size = initialSize;
}
pub fn insertArrayColor(arg_a: [*c]ArrayColor, arg_element: VoxColor) callconv(.C) void {
var a = arg_a;
_ = &a;
var element = arg_element;
_ = &element;
if (a.*.used == a.*.size) {
a.*.size *= @as(c_int, 2);
a.*.array = @as([*c]VoxColor, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(a.*.array)), @as(c_ulong, @bitCast(@as(c_long, a.*.size))) *% @sizeOf(VoxColor)))));
}
(blk: {
const tmp = blk_1: {
const ref = &a.*.used;
const tmp_2 = ref.*;
ref.* += 1;
break :blk_1 tmp_2;
};
if (tmp >= 0) break :blk a.*.array + @as(usize, @intCast(tmp)) else break :blk a.*.array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = element;
}
pub fn freeArrayColor(arg_a: [*c]ArrayColor) callconv(.C) void {
var a = arg_a;
_ = &a;
free(@as(?*anyopaque, @ptrCast(a.*.array)));
a.*.array = null;
a.*.used = blk: {
const tmp = @as(c_int, 0);
a.*.size = tmp;
break :blk tmp;
};
}
pub export const fv: [6][4]c_int = [6][4]c_int{
[4]c_int{
0,
2,
6,
4,
},
[4]c_int{
5,
7,
3,
1,
},
[4]c_int{
0,
4,
5,
1,
},
[4]c_int{
6,
2,
3,
7,
},
[4]c_int{
1,
3,
2,
0,
},
[4]c_int{
4,
6,
7,
5,
},
};
pub export const SolidVertex: [8]VoxVector3 = [8]VoxVector3{
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 1))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 1))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 1))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 1))),
},
};
pub export const FacesPerSideNormal: [6]VoxVector3 = [6]VoxVector3{
VoxVector3{
.x = @as(f32, @floatFromInt(-@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 1))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(-@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 1))),
.z = @as(f32, @floatFromInt(@as(c_int, 0))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(-@as(c_int, 1))),
},
VoxVector3{
.x = @as(f32, @floatFromInt(@as(c_int, 0))),
.y = @as(f32, @floatFromInt(@as(c_int, 0))),
.z = @as(f32, @floatFromInt(@as(c_int, 1))),
},
};
pub fn Vox_AllocArray(arg_pvoxarray: [*c]VoxArray3D, arg__sx: c_int, arg__sy: c_int, arg__sz: c_int) callconv(.C) void {
var pvoxarray = arg_pvoxarray;
_ = &pvoxarray;
var _sx = arg__sx;
_ = &_sx;
var _sy = arg__sy;
_ = &_sy;
var _sz = arg__sz;
_ = &_sz;
var sx: c_int = _sx + @import("std").zig.c_translation.signedRemainder(@as(c_int, 16) - @import("std").zig.c_translation.signedRemainder(_sx, @as(c_int, 16)), @as(c_int, 16));
_ = &sx;
var sy: c_int = _sy + @import("std").zig.c_translation.signedRemainder(@as(c_int, 16) - @import("std").zig.c_translation.signedRemainder(_sy, @as(c_int, 16)), @as(c_int, 16));
_ = &sy;
var sz: c_int = _sz + @import("std").zig.c_translation.signedRemainder(@as(c_int, 16) - @import("std").zig.c_translation.signedRemainder(_sz, @as(c_int, 16)), @as(c_int, 16));
_ = &sz;
var chx: c_int = sx >> @intCast(4);
_ = &chx;
var chy: c_int = sy >> @intCast(4);
_ = &chy;
var chz: c_int = sz >> @intCast(4);
_ = &chz;
pvoxarray.*.sizeX = sx;
pvoxarray.*.sizeY = sy;
pvoxarray.*.sizeZ = sz;
pvoxarray.*.chunksSizeX = chx;
pvoxarray.*.chunksSizeY = chy;
pvoxarray.*.chunksSizeZ = chz;
pvoxarray.*.ChunkFlattenOffset = chy * chz;
var size: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate(((@sizeOf(CubeChunk3D) *% @as(c_ulong, @bitCast(@as(c_long, chx)))) *% @as(c_ulong, @bitCast(@as(c_long, chy)))) *% @as(c_ulong, @bitCast(@as(c_long, chz)))))));
_ = &size;
pvoxarray.*.m_arrayChunks = @as([*c]CubeChunk3D, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
pvoxarray.*.arrayChunksSize = size;
size = (chx * chy) * chz;
pvoxarray.*.chunksTotal = size;
pvoxarray.*.chunksAllocated = 0;
{
var i: c_int = 0;
_ = &i;
while (i < size) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk pvoxarray.*.m_arrayChunks + @as(usize, @intCast(tmp)) else break :blk pvoxarray.*.m_arrayChunks - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.m_array = null;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk pvoxarray.*.m_arrayChunks + @as(usize, @intCast(tmp)) else break :blk pvoxarray.*.m_arrayChunks - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.arraySize = 0;
}
}
}
pub fn Vox_SetVoxel(arg_pvoxarray: [*c]VoxArray3D, arg_x: c_int, arg_y: c_int, arg_z: c_int, arg_id: u8) callconv(.C) void {
var pvoxarray = arg_pvoxarray;
_ = &pvoxarray;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var id = arg_id;
_ = &id;
var chX: c_int = x >> @intCast(4);
_ = &chX;
var chY: c_int = y >> @intCast(4);
_ = &chY;
var chZ: c_int = z >> @intCast(4);
_ = &chZ;
var offset: c_int = ((chX * pvoxarray.*.ChunkFlattenOffset) + (chZ * pvoxarray.*.chunksSizeY)) + chY;
_ = &offset;
var chunk: [*c]CubeChunk3D = &(blk: {
const tmp = offset;
if (tmp >= 0) break :blk pvoxarray.*.m_arrayChunks + @as(usize, @intCast(tmp)) else break :blk pvoxarray.*.m_arrayChunks - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &chunk;
chX = x - (chX << @intCast(4));
chY = y - (chY << @intCast(4));
chZ = z - (chZ << @intCast(4));
if (chunk.*.m_array == null) {
var size: c_int = (@as(c_int, 16) * @as(c_int, 16)) * @as(c_int, 16);
_ = &size;
chunk.*.m_array = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
chunk.*.arraySize = size;
_ = memset(@as(?*anyopaque, @ptrCast(chunk.*.m_array)), @as(c_int, 0), @as(c_ulong, @bitCast(@as(c_long, size))));
pvoxarray.*.chunksAllocated += 1;
}
offset = ((chX << @intCast(8)) + (chZ << @intCast(4))) + chY;
(blk: {
const tmp = offset;
if (tmp >= 0) break :blk chunk.*.m_array + @as(usize, @intCast(tmp)) else break :blk chunk.*.m_array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = id;
}
pub fn Vox_GetVoxel(arg_pvoxarray: [*c]VoxArray3D, arg_x: c_int, arg_y: c_int, arg_z: c_int) callconv(.C) u8 {
var pvoxarray = arg_pvoxarray;
_ = &pvoxarray;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
if (((x < @as(c_int, 0)) or (y < @as(c_int, 0))) or (z < @as(c_int, 0))) return 0;
if (((x >= pvoxarray.*.sizeX) or (y >= pvoxarray.*.sizeY)) or (z >= pvoxarray.*.sizeZ)) return 0;
var chX: c_int = x >> @intCast(4);
_ = &chX;
var chY: c_int = y >> @intCast(4);
_ = &chY;
var chZ: c_int = z >> @intCast(4);
_ = &chZ;
var offset: c_int = ((chX * pvoxarray.*.ChunkFlattenOffset) + (chZ * pvoxarray.*.chunksSizeY)) + chY;
_ = &offset;
var chunk: [*c]CubeChunk3D = &(blk: {
const tmp = offset;
if (tmp >= 0) break :blk pvoxarray.*.m_arrayChunks + @as(usize, @intCast(tmp)) else break :blk pvoxarray.*.m_arrayChunks - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &chunk;
chX = x - (chX << @intCast(4));
chY = y - (chY << @intCast(4));
chZ = z - (chZ << @intCast(4));
if (chunk.*.m_array == null) {
return 0;
}
offset = ((chX << @intCast(8)) + (chZ << @intCast(4))) + chY;
return (blk: {
const tmp = offset;
if (tmp >= 0) break :blk chunk.*.m_array + @as(usize, @intCast(tmp)) else break :blk chunk.*.m_array - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
pub fn Vox_CalcFacesVisible(arg_pvoxArray: [*c]VoxArray3D, arg_cx: c_int, arg_cy: c_int, arg_cz: c_int) callconv(.C) u8 {
var pvoxArray = arg_pvoxArray;
_ = &pvoxArray;
var cx = arg_cx;
_ = &cx;
var cy = arg_cy;
_ = &cy;
var cz = arg_cz;
_ = &cz;
var idXm1: u8 = Vox_GetVoxel(pvoxArray, cx - @as(c_int, 1), cy, cz);
_ = &idXm1;
var idXp1: u8 = Vox_GetVoxel(pvoxArray, cx + @as(c_int, 1), cy, cz);
_ = &idXp1;
var idYm1: u8 = Vox_GetVoxel(pvoxArray, cx, cy - @as(c_int, 1), cz);
_ = &idYm1;
var idYp1: u8 = Vox_GetVoxel(pvoxArray, cx, cy + @as(c_int, 1), cz);
_ = &idYp1;
var idZm1: u8 = Vox_GetVoxel(pvoxArray, cx, cy, cz - @as(c_int, 1));
_ = &idZm1;
var idZp1: u8 = Vox_GetVoxel(pvoxArray, cx, cy, cz + @as(c_int, 1));
_ = &idZp1;
var byVFMask: u8 = 0;
_ = &byVFMask;
if (@as(c_int, @bitCast(@as(c_uint, idXm1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(0)))));
}
if (@as(c_int, @bitCast(@as(c_uint, idXp1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(1)))));
}
if (@as(c_int, @bitCast(@as(c_uint, idYm1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(2)))));
}
if (@as(c_int, @bitCast(@as(c_uint, idYp1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(3)))));
}
if (@as(c_int, @bitCast(@as(c_uint, idZm1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(4)))));
}
if (@as(c_int, @bitCast(@as(c_uint, idZp1))) == @as(c_int, 0)) {
byVFMask |= @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1) << @intCast(5)))));
}
return byVFMask;
}
pub fn Vox_GetVertexPosition(arg__wcx: c_int, arg__wcy: c_int, arg__wcz: c_int, arg__nNumVertex: c_int) callconv(.C) VoxVector3 {
var _wcx = arg__wcx;
_ = &_wcx;
var _wcy = arg__wcy;
_ = &_wcy;
var _wcz = arg__wcz;
_ = &_wcz;
var _nNumVertex = arg__nNumVertex;
_ = &_nNumVertex;
var scale: f32 = @as(f32, @floatCast(0.25));
_ = &scale;
var vtx: VoxVector3 = SolidVertex[@as(c_uint, @intCast(_nNumVertex))];
_ = &vtx;
vtx.x = (vtx.x + @as(f32, @floatFromInt(_wcx))) * scale;
vtx.y = (vtx.y + @as(f32, @floatFromInt(_wcy))) * scale;
vtx.z = (vtx.z + @as(f32, @floatFromInt(_wcz))) * scale;
return vtx;
}
pub fn Vox_Build_Voxel(arg_pvoxArray: [*c]VoxArray3D, arg_x: c_int, arg_y: c_int, arg_z: c_int, arg_matID: c_int) callconv(.C) void {
var pvoxArray = arg_pvoxArray;
_ = &pvoxArray;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var matID = arg_matID;
_ = &matID;
var byVFMask: u8 = Vox_CalcFacesVisible(pvoxArray, x, y, z);
_ = &byVFMask;
if (@as(c_int, @bitCast(@as(c_uint, byVFMask))) == @as(c_int, 0)) return;
var i: c_int = undefined;
_ = &i;
var j: c_int = undefined;
_ = &j;
var vertComputed: [8]VoxVector3 = undefined;
_ = &vertComputed;
var bVertexComputed: [8]c_int = undefined;
_ = &bVertexComputed;
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]VoxVector3, @ptrCast(@alignCast(&vertComputed))))), @as(c_int, 0), @sizeOf([8]VoxVector3));
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]c_int, @ptrCast(@alignCast(&bVertexComputed))))), @as(c_int, 0), @sizeOf([8]c_int));
{
i = 0;
while (i < @as(c_int, 6)) : (i += 1) {
if ((@as(c_int, @bitCast(@as(c_uint, byVFMask))) & (@as(c_int, 1) << @intCast(i))) != @as(c_int, 0)) {
{
j = 0;
while (j < @as(c_int, 4)) : (j += 1) {
var nNumVertex: c_int = fv[@as(c_uint, @intCast(i))][@as(c_uint, @intCast(j))];
_ = &nNumVertex;
if (bVertexComputed[@as(c_uint, @intCast(nNumVertex))] == @as(c_int, 0)) {
bVertexComputed[@as(c_uint, @intCast(nNumVertex))] = 1;
vertComputed[@as(c_uint, @intCast(nNumVertex))] = Vox_GetVertexPosition(x, y, z, nNumVertex);
}
}
}
}
}
}
{
i = 0;
while (i < @as(c_int, 6)) : (i += 1) {
if ((@as(c_int, @bitCast(@as(c_uint, byVFMask))) & (@as(c_int, 1) << @intCast(i))) == @as(c_int, 0)) continue;
var v0: c_int = fv[@as(c_uint, @intCast(i))][@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &v0;
var v1: c_int = fv[@as(c_uint, @intCast(i))][@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &v1;
var v2: c_int = fv[@as(c_uint, @intCast(i))][@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &v2;
var v3: c_int = fv[@as(c_uint, @intCast(i))][@as(c_uint, @intCast(@as(c_int, 3)))];
_ = &v3;
var idx: c_int = pvoxArray.*.vertices.used;
_ = &idx;
insertArrayVector3(&pvoxArray.*.vertices, vertComputed[@as(c_uint, @intCast(v0))]);
insertArrayVector3(&pvoxArray.*.vertices, vertComputed[@as(c_uint, @intCast(v1))]);
insertArrayVector3(&pvoxArray.*.vertices, vertComputed[@as(c_uint, @intCast(v2))]);
insertArrayVector3(&pvoxArray.*.vertices, vertComputed[@as(c_uint, @intCast(v3))]);
insertArrayVector3(&pvoxArray.*.normals, FacesPerSideNormal[@as(c_uint, @intCast(i))]);
insertArrayVector3(&pvoxArray.*.normals, FacesPerSideNormal[@as(c_uint, @intCast(i))]);
insertArrayVector3(&pvoxArray.*.normals, FacesPerSideNormal[@as(c_uint, @intCast(i))]);
insertArrayVector3(&pvoxArray.*.normals, FacesPerSideNormal[@as(c_uint, @intCast(i))]);
var col: VoxColor = pvoxArray.*.palette[@as(c_uint, @intCast(matID))];
_ = &col;
insertArrayColor(&pvoxArray.*.colors, col);
insertArrayColor(&pvoxArray.*.colors, col);
insertArrayColor(&pvoxArray.*.colors, col);
insertArrayColor(&pvoxArray.*.colors, col);
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 0))))));
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 2))))));
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 1))))));
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 0))))));
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 3))))));
insertArrayUShort(&pvoxArray.*.indices, @as(c_ushort, @bitCast(@as(c_short, @truncate(idx + @as(c_int, 2))))));
}
}
}
pub const M3D_FLOAT = f32;
pub const M3D_INDEX = u32;
pub const M3D_VOXEL = u16;
pub const m3dhdr_t = extern struct {
magic: [4]u8 align(1) = @import("std").mem.zeroes([4]u8),
length: u32 align(1) = @import("std").mem.zeroes(u32),
scale: f32 align(1) = @import("std").mem.zeroes(f32),
types: u32 align(1) = @import("std").mem.zeroes(u32),
};
pub const m3dchunk_t = extern struct {
magic: [4]u8 align(1) = @import("std").mem.zeroes([4]u8),
length: u32 align(1) = @import("std").mem.zeroes(u32),
};
pub const m3dti_t = extern struct {
u: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
v: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
};
pub const m3dtx_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
d: [*c]u8 = @import("std").mem.zeroes([*c]u8),
w: u16 = @import("std").mem.zeroes(u16),
h: u16 = @import("std").mem.zeroes(u16),
f: u8 = @import("std").mem.zeroes(u8),
};
pub const m3dw_t = extern struct {
vertexid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
weight: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
};
pub const m3db_t = extern struct {
parent: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
pos: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
ori: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
numweight: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
weight: [*c]m3dw_t = @import("std").mem.zeroes([*c]m3dw_t),
mat4: [16]M3D_FLOAT = @import("std").mem.zeroes([16]M3D_FLOAT),
};
pub const m3ds_t = extern struct {
boneid: [4]M3D_INDEX = @import("std").mem.zeroes([4]M3D_INDEX),
weight: [4]M3D_FLOAT = @import("std").mem.zeroes([4]M3D_FLOAT),
};
pub const m3dv_t = extern struct {
x: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
y: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
z: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
w: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
color: u32 = @import("std").mem.zeroes(u32),
skinid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
};
pub const m3dpf_color: c_int = 0;
pub const m3dpf_uint8: c_int = 1;
pub const m3dpf_uint16: c_int = 2;
pub const m3dpf_uint32: c_int = 3;
pub const m3dpf_float: c_int = 4;
pub const m3dpf_map: c_int = 5;
const enum_unnamed_7 = c_uint;
pub const m3dpd_t = extern struct {
format: u8 = @import("std").mem.zeroes(u8),
id: u8 = @import("std").mem.zeroes(u8),
};
pub const m3dp_Kd: c_int = 0;
pub const m3dp_Ka: c_int = 1;
pub const m3dp_Ks: c_int = 2;
pub const m3dp_Ns: c_int = 3;
pub const m3dp_Ke: c_int = 4;
pub const m3dp_Tf: c_int = 5;
pub const m3dp_Km: c_int = 6;
pub const m3dp_d: c_int = 7;
pub const m3dp_il: c_int = 8;
pub const m3dp_Pr: c_int = 64;
pub const m3dp_Pm: c_int = 65;
pub const m3dp_Ps: c_int = 66;
pub const m3dp_Ni: c_int = 67;
pub const m3dp_Nt: c_int = 68;
pub const m3dp_map_Kd: c_int = 128;
pub const m3dp_map_Ka: c_int = 129;
pub const m3dp_map_Ks: c_int = 130;
pub const m3dp_map_Ns: c_int = 131;
pub const m3dp_map_Ke: c_int = 132;
pub const m3dp_map_Tf: c_int = 133;
pub const m3dp_map_Km: c_int = 134;
pub const m3dp_map_D: c_int = 135;
pub const m3dp_map_N: c_int = 136;
pub const m3dp_map_Pr: c_int = 192;
pub const m3dp_map_Pm: c_int = 193;
pub const m3dp_map_Ps: c_int = 194;
pub const m3dp_map_Ni: c_int = 195;
pub const m3dp_map_Nt: c_int = 196;
const enum_unnamed_8 = c_uint;
pub const m3dp_bump: c_int = 134;
pub const m3dp_map_il: c_int = 136;
pub const m3dp_refl: c_int = 193;
const enum_unnamed_9 = c_uint;
const union_unnamed_10 = extern union {
color: u32,
num: u32,
fnum: f32,
textureid: M3D_INDEX,
};
pub const m3dp_t = extern struct {
type: u8 = @import("std").mem.zeroes(u8),
value: union_unnamed_10 = @import("std").mem.zeroes(union_unnamed_10),
};
pub const m3dm_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
numprop: u8 = @import("std").mem.zeroes(u8),
prop: [*c]m3dp_t = @import("std").mem.zeroes([*c]m3dp_t),
};
pub const m3df_t = extern struct {
materialid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
vertex: [3]M3D_INDEX = @import("std").mem.zeroes([3]M3D_INDEX),
normal: [3]M3D_INDEX = @import("std").mem.zeroes([3]M3D_INDEX),
texcoord: [3]M3D_INDEX = @import("std").mem.zeroes([3]M3D_INDEX),
};
pub const m3dvi_t = extern struct {
count: u16 = @import("std").mem.zeroes(u16),
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const m3dvt_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
rotation: u8 = @import("std").mem.zeroes(u8),
voxshape: u16 = @import("std").mem.zeroes(u16),
materialid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
color: u32 = @import("std").mem.zeroes(u32),
skinid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
numitem: u8 = @import("std").mem.zeroes(u8),
item: [*c]m3dvi_t = @import("std").mem.zeroes([*c]m3dvi_t),
};
pub const m3dvx_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
x: i32 = @import("std").mem.zeroes(i32),
y: i32 = @import("std").mem.zeroes(i32),
z: i32 = @import("std").mem.zeroes(i32),
w: u32 = @import("std").mem.zeroes(u32),
h: u32 = @import("std").mem.zeroes(u32),
d: u32 = @import("std").mem.zeroes(u32),
uncertain: u8 = @import("std").mem.zeroes(u8),
groupid: u8 = @import("std").mem.zeroes(u8),
data: [*c]M3D_VOXEL = @import("std").mem.zeroes([*c]M3D_VOXEL),
};
pub const m3dc_use: c_int = 0;
pub const m3dc_inc: c_int = 1;
pub const m3dc_mesh: c_int = 2;
pub const m3dc_div: c_int = 3;
pub const m3dc_sub: c_int = 4;
pub const m3dc_len: c_int = 5;
pub const m3dc_dist: c_int = 6;
pub const m3dc_degu: c_int = 7;
pub const m3dc_deg: c_int = 8;
pub const m3dc_rangeu: c_int = 9;
pub const m3dc_range: c_int = 10;
pub const m3dc_paru: c_int = 11;
pub const m3dc_parv: c_int = 12;
pub const m3dc_trim: c_int = 13;
pub const m3dc_hole: c_int = 14;
pub const m3dc_scrv: c_int = 15;
pub const m3dc_sp: c_int = 16;
pub const m3dc_bez1: c_int = 17;
pub const m3dc_bsp1: c_int = 18;
pub const m3dc_bez2: c_int = 19;
pub const m3dc_bsp2: c_int = 20;
pub const m3dc_bezun: c_int = 21;
pub const m3dc_bezu: c_int = 22;
pub const m3dc_bezn: c_int = 23;
pub const m3dc_bez: c_int = 24;
pub const m3dc_nurbsun: c_int = 25;
pub const m3dc_nurbsu: c_int = 26;
pub const m3dc_nurbsn: c_int = 27;
pub const m3dc_nurbs: c_int = 28;
pub const m3dc_conn: c_int = 29;
pub const m3dc_line: c_int = 30;
pub const m3dc_polygon: c_int = 31;
pub const m3dc_circle: c_int = 32;
pub const m3dc_cylinder: c_int = 33;
pub const m3dc_shpere: c_int = 34;
pub const m3dc_torus: c_int = 35;
pub const m3dc_cone: c_int = 36;
pub const m3dc_cube: c_int = 37;
const enum_unnamed_11 = c_uint;
pub const m3dcp_mi_t: c_int = 1;
pub const m3dcp_hi_t: c_int = 2;
pub const m3dcp_fi_t: c_int = 3;
pub const m3dcp_ti_t: c_int = 4;
pub const m3dcp_vi_t: c_int = 5;
pub const m3dcp_qi_t: c_int = 6;
pub const m3dcp_vc_t: c_int = 7;
pub const m3dcp_i1_t: c_int = 8;
pub const m3dcp_i2_t: c_int = 9;
pub const m3dcp_i4_t: c_int = 10;
pub const m3dcp_va_t: c_int = 11;
const enum_unnamed_12 = c_uint;
pub const m3dcd_t = extern struct {
p: u8 = @import("std").mem.zeroes(u8),
a: [8]u8 = @import("std").mem.zeroes([8]u8),
};
pub const m3dc_t = extern struct {
type: u16 = @import("std").mem.zeroes(u16),
arg: [*c]u32 = @import("std").mem.zeroes([*c]u32),
};
pub const m3dh_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
group: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
numcmd: u32 = @import("std").mem.zeroes(u32),
cmd: [*c]m3dc_t = @import("std").mem.zeroes([*c]m3dc_t),
};
pub const m3dl_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
lang: [*c]u8 = @import("std").mem.zeroes([*c]u8),
text: [*c]u8 = @import("std").mem.zeroes([*c]u8),
color: u32 = @import("std").mem.zeroes(u32),
vertexid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
};
pub const m3dtr_t = extern struct {
boneid: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
pos: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
ori: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
};
pub const m3dfr_t = extern struct {
msec: u32 = @import("std").mem.zeroes(u32),
numtransform: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
transform: [*c]m3dtr_t = @import("std").mem.zeroes([*c]m3dtr_t),
};
pub const m3da_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
durationmsec: u32 = @import("std").mem.zeroes(u32),
numframe: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
frame: [*c]m3dfr_t = @import("std").mem.zeroes([*c]m3dfr_t),
};
pub const m3di_t = extern struct {
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
data: [*c]u8 = @import("std").mem.zeroes([*c]u8),
length: u32 = @import("std").mem.zeroes(u32),
};
pub const m3d_t = extern struct {
raw: [*c]m3dhdr_t = @import("std").mem.zeroes([*c]m3dhdr_t),
flags: u8 = @import("std").mem.zeroes(u8),
errcode: i8 = @import("std").mem.zeroes(i8),
vc_s: u8 = @import("std").mem.zeroes(u8),
vi_s: u8 = @import("std").mem.zeroes(u8),
si_s: u8 = @import("std").mem.zeroes(u8),
ci_s: u8 = @import("std").mem.zeroes(u8),
ti_s: u8 = @import("std").mem.zeroes(u8),
bi_s: u8 = @import("std").mem.zeroes(u8),
nb_s: u8 = @import("std").mem.zeroes(u8),
sk_s: u8 = @import("std").mem.zeroes(u8),
fc_s: u8 = @import("std").mem.zeroes(u8),
hi_s: u8 = @import("std").mem.zeroes(u8),
fi_s: u8 = @import("std").mem.zeroes(u8),
vd_s: u8 = @import("std").mem.zeroes(u8),
vp_s: u8 = @import("std").mem.zeroes(u8),
name: [*c]u8 = @import("std").mem.zeroes([*c]u8),
license: [*c]u8 = @import("std").mem.zeroes([*c]u8),
author: [*c]u8 = @import("std").mem.zeroes([*c]u8),
desc: [*c]u8 = @import("std").mem.zeroes([*c]u8),
scale: M3D_FLOAT = @import("std").mem.zeroes(M3D_FLOAT),
numcmap: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
cmap: [*c]u32 = @import("std").mem.zeroes([*c]u32),
numtmap: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
tmap: [*c]m3dti_t = @import("std").mem.zeroes([*c]m3dti_t),
numtexture: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
texture: [*c]m3dtx_t = @import("std").mem.zeroes([*c]m3dtx_t),
numbone: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
bone: [*c]m3db_t = @import("std").mem.zeroes([*c]m3db_t),
numvertex: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
vertex: [*c]m3dv_t = @import("std").mem.zeroes([*c]m3dv_t),
numskin: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
skin: [*c]m3ds_t = @import("std").mem.zeroes([*c]m3ds_t),
nummaterial: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
material: [*c]m3dm_t = @import("std").mem.zeroes([*c]m3dm_t),
numface: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
face: [*c]m3df_t = @import("std").mem.zeroes([*c]m3df_t),
numvoxtype: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
voxtype: [*c]m3dvt_t = @import("std").mem.zeroes([*c]m3dvt_t),
numvoxel: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
voxel: [*c]m3dvx_t = @import("std").mem.zeroes([*c]m3dvx_t),
numshape: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
shape: [*c]m3dh_t = @import("std").mem.zeroes([*c]m3dh_t),
numlabel: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
label: [*c]m3dl_t = @import("std").mem.zeroes([*c]m3dl_t),
numaction: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
action: [*c]m3da_t = @import("std").mem.zeroes([*c]m3da_t),
numinlined: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
inlined: [*c]m3di_t = @import("std").mem.zeroes([*c]m3di_t),
numextra: M3D_INDEX = @import("std").mem.zeroes(M3D_INDEX),
extra: [*c][*c]m3dchunk_t = @import("std").mem.zeroes([*c][*c]m3dchunk_t),
preview: m3di_t = @import("std").mem.zeroes(m3di_t),
};
pub const m3dread_t = ?*const fn ([*c]u8, [*c]c_uint) callconv(.C) [*c]u8;
pub const m3dfree_t = ?*const fn (?*anyopaque) callconv(.C) void;
pub const m3dtxsc_t = ?*const fn ([*c]const u8, ?*const anyopaque, u32, [*c]m3dtx_t) callconv(.C) c_int;
pub const m3dprsc_t = ?*const fn ([*c]const u8, ?*const anyopaque, u32, [*c]m3d_t) callconv(.C) c_int;
// ./external/m3d.h:3306:1: warning: TODO implement translation of stmt class LabelStmtClass
// ./external/m3d.h:2382:8: warning: unable to translate function, demoted to extern
pub extern fn m3d_load(arg_data: [*c]u8, arg_readfilecb: m3dread_t, arg_freecb: m3dfree_t, arg_mtllib: [*c]m3d_t) [*c]m3d_t;
pub extern fn m3d_save(model: [*c]m3d_t, quality: c_int, flags: c_int, size: [*c]c_uint) [*c]u8;
pub export fn m3d_free(arg_model: [*c]m3d_t) void {
var model = arg_model;
_ = &model;
var i: c_uint = undefined;
_ = &i;
var j: c_uint = undefined;
_ = &j;
if (!(model != null)) return;
if ((@as(c_int, @bitCast(@as(c_uint, model.*.flags))) & (@as(c_int, 1) << @intCast(0))) != 0) {
free(@as(?*anyopaque, @ptrCast(model.*.raw)));
}
if (model.*.tmap != null) {
free(@as(?*anyopaque, @ptrCast(model.*.tmap)));
}
if (model.*.bone != null) {
{
i = 0;
while (i < model.*.numbone) : (i +%= 1) if (model.*.bone[i].weight != null) {
free(@as(?*anyopaque, @ptrCast(model.*.bone[i].weight)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.bone)));
}
if (model.*.skin != null) {
free(@as(?*anyopaque, @ptrCast(model.*.skin)));
}
if (model.*.vertex != null) {
free(@as(?*anyopaque, @ptrCast(model.*.vertex)));
}
if (model.*.face != null) {
free(@as(?*anyopaque, @ptrCast(model.*.face)));
}
if (model.*.voxtype != null) {
{
i = 0;
while (i < model.*.numvoxtype) : (i +%= 1) if (model.*.voxtype[i].item != null) {
free(@as(?*anyopaque, @ptrCast(model.*.voxtype[i].item)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.voxtype)));
}
if (model.*.voxel != null) {
{
i = 0;
while (i < model.*.numvoxel) : (i +%= 1) if (model.*.voxel[i].data != null) {
free(@as(?*anyopaque, @ptrCast(model.*.voxel[i].data)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.voxel)));
}
if (model.*.shape != null) {
{
i = 0;
while (i < model.*.numshape) : (i +%= 1) {
if (model.*.shape[i].cmd != null) {
{
j = 0;
while (j < model.*.shape[i].numcmd) : (j +%= 1) if (model.*.shape[i].cmd[j].arg != null) {
free(@as(?*anyopaque, @ptrCast(model.*.shape[i].cmd[j].arg)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.shape[i].cmd)));
}
}
}
free(@as(?*anyopaque, @ptrCast(model.*.shape)));
}
if ((model.*.material != null) and !((@as(c_int, @bitCast(@as(c_uint, model.*.flags))) & (@as(c_int, 1) << @intCast(2))) != 0)) {
{
i = 0;
while (i < model.*.nummaterial) : (i +%= 1) if (model.*.material[i].prop != null) {
free(@as(?*anyopaque, @ptrCast(model.*.material[i].prop)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.material)));
}
if (model.*.texture != null) {
{
i = 0;
while (i < model.*.numtexture) : (i +%= 1) if (model.*.texture[i].d != null) {
free(@as(?*anyopaque, @ptrCast(model.*.texture[i].d)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.texture)));
}
if (model.*.action != null) {
{
i = 0;
while (i < model.*.numaction) : (i +%= 1) {
if (model.*.action[i].frame != null) {
{
j = 0;
while (j < model.*.action[i].numframe) : (j +%= 1) if (model.*.action[i].frame[j].transform != null) {
free(@as(?*anyopaque, @ptrCast(model.*.action[i].frame[j].transform)));
};
}
free(@as(?*anyopaque, @ptrCast(model.*.action[i].frame)));
}
}
}
free(@as(?*anyopaque, @ptrCast(model.*.action)));
}
if (model.*.label != null) {
free(@as(?*anyopaque, @ptrCast(model.*.label)));
}
if (model.*.inlined != null) {
free(@as(?*anyopaque, @ptrCast(model.*.inlined)));
}
if (model.*.extra != null) {
free(@as(?*anyopaque, @ptrCast(model.*.extra)));
}
free(@as(?*anyopaque, @ptrCast(model)));
}
// ./external/m3d.h:4218:9: warning: TODO implement translation of stmt class GotoStmtClass
// ./external/m3d.h:4200:10: warning: unable to translate function, demoted to extern
pub extern fn m3d_frame(arg_model: [*c]m3d_t, arg_actionid: M3D_INDEX, arg_frameid: M3D_INDEX, arg_skeleton: [*c]m3dtr_t) [*c]m3dtr_t;
pub export fn m3d_pose(arg_model: [*c]m3d_t, arg_actionid: M3D_INDEX, arg_msec: u32) [*c]m3db_t {
var model = arg_model;
_ = &model;
var actionid = arg_actionid;
_ = &actionid;
var msec = arg_msec;
_ = &msec;
var i: c_uint = undefined;
_ = &i;
var j: c_uint = undefined;
_ = &j;
var l: c_uint = undefined;
_ = &l;
var r: [16]M3D_FLOAT = undefined;
_ = &r;
var t: M3D_FLOAT = undefined;
_ = &t;
var c: M3D_FLOAT = undefined;
_ = &c;
var d: M3D_FLOAT = undefined;
_ = &d;
var s: M3D_FLOAT = undefined;
_ = &s;
var ret: [*c]m3db_t = undefined;
_ = &ret;
var v: [*c]m3dv_t = undefined;
_ = &v;
var p: [*c]m3dv_t = undefined;
_ = &p;
var f: [*c]m3dv_t = undefined;
_ = &f;
var tmp: [*c]m3dtr_t = undefined;
_ = &tmp;
var fr: [*c]m3dfr_t = undefined;
_ = &fr;
if ((!(model != null) or !(model.*.numbone != 0)) or !(model.*.bone != null)) {
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 69)))));
return null;
}
ret = @as([*c]m3db_t, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, model.*.numbone))) *% @sizeOf(m3db_t)))));
if (!(ret != null)) {
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1)))));
return null;
}
_ = memcpy(@as(?*anyopaque, @ptrCast(ret)), @as(?*const anyopaque, @ptrCast(model.*.bone)), @as(c_ulong, @bitCast(@as(c_ulong, model.*.numbone))) *% @sizeOf(m3db_t));
{
i = 0;
while (i < model.*.numbone) : (i +%= 1) {
_m3d_inv(@as([*c]M3D_FLOAT, @ptrCast(@alignCast(&ret[i].mat4))));
}
}
if (!(model.*.action != null) or (actionid >= model.*.numaction)) {
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 69)))));
return ret;
}
msec %= model.*.action[actionid].durationmsec;
model.*.errcode = 0;
fr = &model.*.action[actionid].frame[@as(c_uint, @intCast(@as(c_int, 0)))];
{
j = blk: {
const tmp_1 = @as(c_uint, @bitCast(@as(c_int, 0)));
l = tmp_1;
break :blk tmp_1;
};
while ((j < model.*.action[actionid].numframe) and (model.*.action[actionid].frame[j].msec <= msec)) : (j +%= 1) {
fr = &model.*.action[actionid].frame[j];
l = fr.*.msec;
{
i = 0;
while (i < fr.*.numtransform) : (i +%= 1) {
ret[fr.*.transform[i].boneid].pos = fr.*.transform[i].pos;
ret[fr.*.transform[i].boneid].ori = fr.*.transform[i].ori;
}
}
}
}
if (l != msec) {
model.*.vertex = @as([*c]m3dv_t, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(model.*.vertex)), @as(c_ulong, @bitCast(@as(c_ulong, model.*.numvertex +% (@as(M3D_INDEX, @bitCast(@as(c_int, 2))) *% model.*.numbone)))) *% @sizeOf(m3dv_t)))));
if (!(model.*.vertex != null)) {
free(@as(?*anyopaque, @ptrCast(ret)));
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1)))));
return null;
}
tmp = @as([*c]m3dtr_t, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, model.*.numbone))) *% @sizeOf(m3dtr_t)))));
if (tmp != null) {
{
i = 0;
while (i < model.*.numbone) : (i +%= 1) {
tmp[i].pos = ret[i].pos;
tmp[i].ori = ret[i].ori;
}
}
fr = &model.*.action[actionid].frame[j % model.*.action[actionid].numframe];
t = if (l >= fr.*.msec) @as(M3D_FLOAT, @floatCast(1.0)) else @as(M3D_FLOAT, @floatFromInt(msec -% l)) / @as(M3D_FLOAT, @floatFromInt(fr.*.msec -% l));
{
i = 0;
while (i < fr.*.numtransform) : (i +%= 1) {
tmp[fr.*.transform[i].boneid].pos = fr.*.transform[i].pos;
tmp[fr.*.transform[i].boneid].ori = fr.*.transform[i].ori;
}
}
{
_ = blk: {
i = 0;
break :blk blk_1: {
const tmp_2 = model.*.numvertex;
j = tmp_2;
break :blk_1 tmp_2;
};
};
while (i < model.*.numbone) : (i +%= 1) {
if (ret[i].pos != tmp[i].pos) {
p = &model.*.vertex[ret[i].pos];
f = &model.*.vertex[tmp[i].pos];
v = &model.*.vertex[j];
v.*.x = p.*.x + (t * (f.*.x - p.*.x));
v.*.y = p.*.y + (t * (f.*.y - p.*.y));
v.*.z = p.*.z + (t * (f.*.z - p.*.z));
ret[i].pos = blk: {
const ref = &j;
const tmp_1 = ref.*;
ref.* +%= 1;
break :blk tmp_1;
};
}
if (ret[i].ori != tmp[i].ori) {
p = &model.*.vertex[ret[i].ori];
f = &model.*.vertex[tmp[i].ori];
v = &model.*.vertex[j];
d = (((p.*.w * f.*.w) + (p.*.x * f.*.x)) + (p.*.y * f.*.y)) + (p.*.z * f.*.z);
if (d < @as(M3D_FLOAT, @floatFromInt(@as(c_int, 0)))) {
d = -d;
s = @as(M3D_FLOAT, @floatCast(-1.0));
} else {
s = @as(M3D_FLOAT, @floatCast(1.0));
}
c = t - @as(M3D_FLOAT, @floatCast(0.5));
t += ((t * c) * (t - @as(M3D_FLOAT, @floatCast(1.0)))) * ((((@as(M3D_FLOAT, @floatCast(1.0904)) + (d * (@as(M3D_FLOAT, @floatCast(-3.2452)) + (d * (@as(M3D_FLOAT, @floatCast(3.55645)) - (d * @as(M3D_FLOAT, @floatCast(1.43519)))))))) * c) * c) + (@as(M3D_FLOAT, @floatCast(0.848013)) + (d * (@as(M3D_FLOAT, @floatCast(-1.06021)) + (d * @as(M3D_FLOAT, @floatCast(0.215638)))))));
v.*.x = p.*.x + (t * ((s * f.*.x) - p.*.x));
v.*.y = p.*.y + (t * ((s * f.*.y) - p.*.y));
v.*.z = p.*.z + (t * ((s * f.*.z) - p.*.z));
v.*.w = p.*.w + (t * ((s * f.*.w) - p.*.w));
d = _m3d_rsq((((v.*.w * v.*.w) + (v.*.x * v.*.x)) + (v.*.y * v.*.y)) + (v.*.z * v.*.z));
v.*.x *= d;
v.*.y *= d;
v.*.z *= d;
v.*.w *= d;
ret[i].ori = blk: {
const ref = &j;
const tmp_1 = ref.*;
ref.* +%= 1;
break :blk tmp_1;
};
}
}
}
free(@as(?*anyopaque, @ptrCast(tmp)));
}
}
{
i = 0;
while (i < model.*.numbone) : (i +%= 1) {
if (ret[i].parent == @as(c_uint, 4294967295)) {
_m3d_mat(@as([*c]M3D_FLOAT, @ptrCast(@alignCast(&ret[i].mat4))), &model.*.vertex[ret[i].pos], &model.*.vertex[ret[i].ori]);
} else {
_m3d_mat(@as([*c]M3D_FLOAT, @ptrCast(@alignCast(&r))), &model.*.vertex[ret[i].pos], &model.*.vertex[ret[i].ori]);
_m3d_mul(@as([*c]M3D_FLOAT, @ptrCast(@alignCast(&ret[i].mat4))), @as([*c]M3D_FLOAT, @ptrCast(@alignCast(&ret[ret[i].parent].mat4))), @as([*c]M3D_FLOAT, @ptrCast(@alignCast(&r))));
}
}
}
return ret;
}
pub export fn _m3d_safestr(arg_in: [*c]u8, arg_morelines: c_int) [*c]u8 {
var in = arg_in;
_ = &in;
var morelines = arg_morelines;
_ = &morelines;
var out: [*c]u8 = undefined;
_ = &out;
var o: [*c]u8 = undefined;
_ = &o;
var i: [*c]u8 = in;
_ = &i;
var l: c_int = undefined;
_ = &l;
if (!(in != null) or !(in.* != 0)) {
out = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
if (!(out != null)) return null;
out[@as(c_uint, @intCast(@as(c_int, 0)))] = 0;
} else {
{
_ = blk: {
o = in;
break :blk blk_1: {
const tmp = @as(c_int, 0);
l = tmp;
break :blk_1 tmp;
};
};
while (((@as(c_int, @bitCast(@as(c_uint, o.*))) != 0) and (((morelines & @as(c_int, 1)) != 0) or ((@as(c_int, @bitCast(@as(c_uint, o.*))) != @as(c_int, '\r')) and (@as(c_int, @bitCast(@as(c_uint, o.*))) != @as(c_int, '\n'))))) and (l < @as(c_int, 256))) : (_ = blk: {
o += 1;
break :blk blk_1: {
const ref = &l;
const tmp = ref.*;
ref.* += 1;
break :blk_1 tmp;
};
}) {}
}
out = blk: {
const tmp = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, l + @as(c_int, 1))))))));
o = tmp;
break :blk tmp;
};
if (!(out != null)) return null;
while ((((@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\t'))) or (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\r'))) or ((morelines != 0) and (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\n')))) {
i += 1;
}
while ((@as(c_int, @bitCast(@as(c_uint, i.*))) != 0) and ((morelines != 0) or ((@as(c_int, @bitCast(@as(c_uint, i.*))) != @as(c_int, '\r')) and (@as(c_int, @bitCast(@as(c_uint, i.*))) != @as(c_int, '\n'))))) : (i += 1) {
if (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\r')) continue;
if (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\n')) {
if (((morelines >= @as(c_int, 3)) and (o > out)) and (@as(c_int, @bitCast(@as(c_uint, (o - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, '\n'))) break;
if ((i > in) and (@as(c_int, @bitCast(@as(c_uint, (i - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, '\n'))) continue;
if ((morelines & @as(c_int, 1)) != 0) {
if (morelines == @as(c_int, 1)) {
(blk: {
const ref = &o;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\r';
}
(blk: {
const ref = &o;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = '\n';
} else break;
} else if ((@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\t'))) {
(blk: {
const ref = &o;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(if (morelines != 0) @as(c_int, ' ') else @as(c_int, '_')))));
} else {
(blk: {
const ref = &o;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(if (!(morelines != 0) and ((@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '/')) or (@as(c_int, @bitCast(@as(c_uint, i.*))) == @as(c_int, '\\')))) @as(c_int, '_') else @as(c_int, @bitCast(@as(c_uint, i.*)))))));
}
}
while ((o > out) and ((((@as(c_int, @bitCast(@as(c_uint, (o - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, ' ')) or (@as(c_int, @bitCast(@as(c_uint, (o - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, '\t'))) or (@as(c_int, @bitCast(@as(c_uint, (o - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, '\r'))) or (@as(c_int, @bitCast(@as(c_uint, (o - @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))))).*))) == @as(c_int, '\n')))) : (o -= 1) {}
o.* = 0;
out = @as([*c]u8, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(out)), (@as(usize, @intCast(@intFromPtr(o))) -% @as(usize, @intCast(@intFromPtr(out)))) +% @as(usize, @bitCast(@as(c_long, @as(c_int, 1))))))));
}
return out;
}
pub var m3d_propertytypes: [17]m3dpd_t = [17]m3dpd_t{
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_color)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Kd)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_color)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ka)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_color)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ks)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ns)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_color)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ke)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_color)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Tf)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Km)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_d)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_uint8)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_il)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Pr)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Pm)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ps)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Ni)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_float)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_Nt)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_map)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_map_Km)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_map)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_map_N)))),
},
m3dpd_t{
.format = @as(u8, @bitCast(@as(i8, @truncate(m3dpf_map)))),
.id = @as(u8, @bitCast(@as(i8, @truncate(m3dp_map_Pm)))),
},
};
pub var m3d_commandtypes: [38]m3dcd_t = [38]m3dcd_t{
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_mi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_hi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_fi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_fi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i1_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i1_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i1_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 1))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 4))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 4))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 6))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_ti_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_i2_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_va_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 6))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 2))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 4))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_qi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vc_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
m3dcd_t{
.p = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 3))))),
.a = [8]u8{
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(m3dcp_vi_t)))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
@as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 0))))),
},
},
};
pub var _m3dstbi__g_failure_reason: [*c]const u8 = @import("std").mem.zeroes([*c]const u8);
pub const STBI_default: c_int = 0;
pub const STBI_grey: c_int = 1;
pub const STBI_grey_alpha: c_int = 2;
pub const STBI_rgb: c_int = 3;
pub const STBI_rgb_alpha: c_int = 4;
const enum_unnamed_13 = c_uint;
pub const STBI__SCAN_load: c_int = 0;
pub const STBI__SCAN_type: c_int = 1;
pub const STBI__SCAN_header: c_int = 2;
const enum_unnamed_14 = c_uint;
pub const _m3dstbi_us = c_ushort;
pub const _m3dstbi__uint16 = u16;
pub const _m3dstbi__int16 = i16;
pub const _m3dstbi__uint32 = u32;
pub const _m3dstbi__int32 = i32;
pub const _m3dstbi__context = extern struct {
img_x: _m3dstbi__uint32 = @import("std").mem.zeroes(_m3dstbi__uint32),
img_y: _m3dstbi__uint32 = @import("std").mem.zeroes(_m3dstbi__uint32),
img_n: c_int = @import("std").mem.zeroes(c_int),
img_out_n: c_int = @import("std").mem.zeroes(c_int),
io_user_data: ?*anyopaque = @import("std").mem.zeroes(?*anyopaque),
read_from_callbacks: c_int = @import("std").mem.zeroes(c_int),
buflen: c_int = @import("std").mem.zeroes(c_int),
buffer_start: [128]u8 = @import("std").mem.zeroes([128]u8),
img_buffer: [*c]u8 = @import("std").mem.zeroes([*c]u8),
img_buffer_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
img_buffer_original: [*c]u8 = @import("std").mem.zeroes([*c]u8),
img_buffer_original_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const _m3dstbi__result_info = extern struct {
bits_per_channel: c_int = @import("std").mem.zeroes(c_int),
num_channels: c_int = @import("std").mem.zeroes(c_int),
channel_order: c_int = @import("std").mem.zeroes(c_int),
};
pub fn _m3dstbi__get8(arg_s: [*c]_m3dstbi__context) callconv(.C) u8 {
var s = arg_s;
_ = &s;
if (s.*.img_buffer < s.*.img_buffer_end) return (blk: {
const ref = &s.*.img_buffer;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
return 0;
}
pub fn _m3dstbi__at_eof(arg_s: [*c]_m3dstbi__context) callconv(.C) c_int {
var s = arg_s;
_ = &s;
return @intFromBool(s.*.img_buffer >= s.*.img_buffer_end);
}
pub fn _m3dstbi__skip(arg_s: [*c]_m3dstbi__context, arg_n: c_int) callconv(.C) void {
var s = arg_s;
_ = &s;
var n = arg_n;
_ = &n;
if (n < @as(c_int, 0)) {
s.*.img_buffer = s.*.img_buffer_end;
return;
}
s.*.img_buffer += @as(usize, @bitCast(@as(isize, @intCast(n))));
}
pub fn _m3dstbi__getn(arg_s: [*c]_m3dstbi__context, arg_buffer: [*c]u8, arg_n: c_int) callconv(.C) c_int {
var s = arg_s;
_ = &s;
var buffer = arg_buffer;
_ = &buffer;
var n = arg_n;
_ = &n;
if ((s.*.img_buffer + @as(usize, @bitCast(@as(isize, @intCast(n))))) <= s.*.img_buffer_end) {
_ = memcpy(@as(?*anyopaque, @ptrCast(buffer)), @as(?*const anyopaque, @ptrCast(s.*.img_buffer)), @as(c_ulong, @bitCast(@as(c_long, n))));
s.*.img_buffer += @as(usize, @bitCast(@as(isize, @intCast(n))));
return 1;
} else return 0;
return 0;
}
pub fn _m3dstbi__get16be(arg_s: [*c]_m3dstbi__context) callconv(.C) c_int {
var s = arg_s;
_ = &s;
var z: c_int = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
_ = &z;
return (z << @intCast(8)) + @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
}
pub fn _m3dstbi__get32be(arg_s: [*c]_m3dstbi__context) callconv(.C) _m3dstbi__uint32 {
var s = arg_s;
_ = &s;
var z: _m3dstbi__uint32 = @as(_m3dstbi__uint32, @bitCast(_m3dstbi__get16be(s)));
_ = &z;
return (z << @intCast(16)) +% @as(_m3dstbi__uint32, @bitCast(_m3dstbi__get16be(s)));
}
pub fn _m3dstbi__errstr(arg_str: [*c]const u8) callconv(.C) c_int {
var str = arg_str;
_ = &str;
_m3dstbi__g_failure_reason = str;
return 0;
}
pub fn _m3dstbi__malloc(arg_size: usize) callconv(.C) ?*anyopaque {
var size = arg_size;
_ = &size;
return malloc(size);
}
pub fn _m3dstbi__addsizes_valid(arg_a: c_int, arg_b: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
if (b < @as(c_int, 0)) return 0;
return @intFromBool(a <= (@as(c_int, 2147483647) - b));
}
pub fn _m3dstbi__mul2sizes_valid(arg_a: c_int, arg_b: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
if ((a < @as(c_int, 0)) or (b < @as(c_int, 0))) return 0;
if (b == @as(c_int, 0)) return 1;
return @intFromBool(a <= @divTrunc(@as(c_int, 2147483647), b));
}
pub fn _m3dstbi__mad2sizes_valid(arg_a: c_int, arg_b: c_int, arg_add: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var add = arg_add;
_ = &add;
return @intFromBool((_m3dstbi__mul2sizes_valid(a, b) != 0) and (_m3dstbi__addsizes_valid(a * b, add) != 0));
}
pub fn _m3dstbi__mad3sizes_valid(arg_a: c_int, arg_b: c_int, arg_c: c_int, arg_add: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var c = arg_c;
_ = &c;
var add = arg_add;
_ = &add;
return @intFromBool(((_m3dstbi__mul2sizes_valid(a, b) != 0) and (_m3dstbi__mul2sizes_valid(a * b, c) != 0)) and (_m3dstbi__addsizes_valid((a * b) * c, add) != 0));
}
pub fn _m3dstbi__malloc_mad2(arg_a: c_int, arg_b: c_int, arg_add: c_int) callconv(.C) ?*anyopaque {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var add = arg_add;
_ = &add;
if (!(_m3dstbi__mad2sizes_valid(a, b, add) != 0)) return @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
return _m3dstbi__malloc(@as(usize, @bitCast(@as(c_long, (a * b) + add))));
}
pub fn _m3dstbi__malloc_mad3(arg_a: c_int, arg_b: c_int, arg_c: c_int, arg_add: c_int) callconv(.C) ?*anyopaque {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var c = arg_c;
_ = &c;
var add = arg_add;
_ = &add;
if (!(_m3dstbi__mad3sizes_valid(a, b, c, add) != 0)) return @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
return _m3dstbi__malloc(@as(usize, @bitCast(@as(c_long, ((a * b) * c) + add))));
}
pub fn _m3dstbi__compute_y(arg_r: c_int, arg_g: c_int, arg_b: c_int) callconv(.C) u8 {
var r = arg_r;
_ = &r;
var g = arg_g;
_ = &g;
var b = arg_b;
_ = &b;
return @as(u8, @bitCast(@as(i8, @truncate((((r * @as(c_int, 77)) + (g * @as(c_int, 150))) + (@as(c_int, 29) * b)) >> @intCast(8)))));
}
pub fn _m3dstbi__convert_format(arg_data: [*c]u8, arg_img_n: c_int, arg_req_comp: c_int, arg_x: c_uint, arg_y: c_uint) callconv(.C) [*c]u8 {
var data = arg_data;
_ = &data;
var img_n = arg_img_n;
_ = &img_n;
var req_comp = arg_req_comp;
_ = &req_comp;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var i: c_int = undefined;
_ = &i;
var j: c_int = undefined;
_ = &j;
var good: [*c]u8 = undefined;
_ = &good;
if (req_comp == img_n) return data;
good = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__malloc_mad3(req_comp, @as(c_int, @bitCast(x)), @as(c_int, @bitCast(y)), @as(c_int, 0)))));
if (good == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
free(@as(?*anyopaque, @ptrCast(data)));
_ = _m3dstbi__errstr("Out of memory");
return null;
}
{
j = 0;
while (j < @as(c_int, @bitCast(y))) : (j += 1) {
var src: [*c]u8 = data + ((@as(c_uint, @bitCast(j)) *% x) *% @as(c_uint, @bitCast(img_n)));
_ = &src;
var dest: [*c]u8 = good + ((@as(c_uint, @bitCast(j)) *% x) *% @as(c_uint, @bitCast(req_comp)));
_ = &dest;
while (true) {
switch ((img_n * @as(c_int, 8)) + req_comp) {
@as(c_int, 10) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk blk_1: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 11) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = blk_1: {
const tmp_2 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_2;
break :blk_1 tmp_2;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk tmp;
};
}
}
break;
},
@as(c_int, 12) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk_1: {
const tmp = blk_2: {
const tmp_3 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_3;
break :blk_2 tmp_3;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
break :blk blk_1: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 17) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
}
}
break;
},
@as(c_int, 19) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = blk_1: {
const tmp_2 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_2;
break :blk_1 tmp_2;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk tmp;
};
}
}
break;
},
@as(c_int, 20) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk_1: {
const tmp = blk_2: {
const tmp_3 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_3;
break :blk_2 tmp_3;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 28) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
_ = blk_1: {
_ = blk_2: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk_2 blk_3: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_3 tmp;
};
};
break :blk_1 blk_2: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 2)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp;
break :blk_2 tmp;
};
};
break :blk blk_1: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 25) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
}
}
break;
},
@as(c_int, 26) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
break :blk blk_1: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 33) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
}
}
break;
},
@as(c_int, 34) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 3)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 35) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
_ = blk_1: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk_1 blk_2: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_2 tmp;
};
};
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 2)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
else => {
{}
},
}
break;
}
}
}
free(@as(?*anyopaque, @ptrCast(data)));
return good;
}
pub fn _m3dstbi__compute_y_16(arg_r: c_int, arg_g: c_int, arg_b: c_int) callconv(.C) _m3dstbi__uint16 {
var r = arg_r;
_ = &r;
var g = arg_g;
_ = &g;
var b = arg_b;
_ = &b;
return @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate((((r * @as(c_int, 77)) + (g * @as(c_int, 150))) + (@as(c_int, 29) * b)) >> @intCast(8)))));
}
pub fn _m3dstbi__convert_format16(arg_data: [*c]_m3dstbi__uint16, arg_img_n: c_int, arg_req_comp: c_int, arg_x: c_uint, arg_y: c_uint) callconv(.C) [*c]_m3dstbi__uint16 {
var data = arg_data;
_ = &data;
var img_n = arg_img_n;
_ = &img_n;
var req_comp = arg_req_comp;
_ = &req_comp;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var i: c_int = undefined;
_ = &i;
var j: c_int = undefined;
_ = &j;
var good: [*c]_m3dstbi__uint16 = undefined;
_ = &good;
if (req_comp == img_n) return data;
good = @as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(_m3dstbi__malloc(@as(usize, @bitCast(@as(c_ulong, ((@as(c_uint, @bitCast(req_comp)) *% x) *% y) *% @as(c_uint, @bitCast(@as(c_int, 2))))))))));
if (good == @as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
free(@as(?*anyopaque, @ptrCast(data)));
_ = _m3dstbi__errstr("Out of memory");
return null;
}
{
j = 0;
while (j < @as(c_int, @bitCast(y))) : (j += 1) {
var src: [*c]_m3dstbi__uint16 = data + ((@as(c_uint, @bitCast(j)) *% x) *% @as(c_uint, @bitCast(img_n)));
_ = &src;
var dest: [*c]_m3dstbi__uint16 = good + ((@as(c_uint, @bitCast(j)) *% x) *% @as(c_uint, @bitCast(req_comp)));
_ = &dest;
while (true) {
switch ((img_n * @as(c_int, 8)) + req_comp) {
@as(c_int, 10) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk blk_1: {
const tmp = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(@as(c_int, 65535)))));
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 11) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = blk_1: {
const tmp_2 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_2;
break :blk_1 tmp_2;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk tmp;
};
}
}
break;
},
@as(c_int, 12) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk_1: {
const tmp = blk_2: {
const tmp_3 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_3;
break :blk_2 tmp_3;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
break :blk blk_1: {
const tmp = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(@as(c_int, 65535)))));
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 17) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
}
}
break;
},
@as(c_int, 19) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = blk_1: {
const tmp_2 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_2;
break :blk_1 tmp_2;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk tmp;
};
}
}
break;
},
@as(c_int, 20) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = blk_1: {
const tmp = blk_2: {
const tmp_3 = src[@as(c_uint, @intCast(@as(c_int, 0)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp_3;
break :blk_2 tmp_3;
};
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 28) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
_ = blk_1: {
_ = blk_2: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk_2 blk_3: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_3 tmp;
};
};
break :blk_1 blk_2: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 2)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp;
break :blk_2 tmp;
};
};
break :blk blk_1: {
const tmp = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(@as(c_int, 65535)))));
dest[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 25) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y_16(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
}
}
break;
},
@as(c_int, 26) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y_16(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
break :blk blk_1: {
const tmp = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(@as(c_int, 65535)))));
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 33) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
break :blk_1 ref.*;
};
}) {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y_16(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
}
}
break;
},
@as(c_int, 34) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = _m3dstbi__compute_y_16(@as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))]))), @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))]))));
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 3)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
@as(c_int, 35) => {
{
i = @as(c_int, @bitCast(x -% @as(c_uint, @bitCast(@as(c_int, 1)))));
while (i >= @as(c_int, 0)) : (_ = blk: {
_ = blk_1: {
i -= 1;
break :blk_1 blk_2: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dest;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
_ = blk: {
_ = blk_1: {
dest[@as(c_uint, @intCast(@as(c_int, 0)))] = src[@as(c_uint, @intCast(@as(c_int, 0)))];
break :blk_1 blk_2: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 1)))];
dest[@as(c_uint, @intCast(@as(c_int, 1)))] = tmp;
break :blk_2 tmp;
};
};
break :blk blk_1: {
const tmp = src[@as(c_uint, @intCast(@as(c_int, 2)))];
dest[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp;
break :blk_1 tmp;
};
};
}
}
break;
},
else => {
{}
},
}
break;
}
}
}
free(@as(?*anyopaque, @ptrCast(data)));
return good;
}
pub const _m3dstbi__zhuffman = extern struct {
fast: [512]_m3dstbi__uint16 = @import("std").mem.zeroes([512]_m3dstbi__uint16),
firstcode: [16]_m3dstbi__uint16 = @import("std").mem.zeroes([16]_m3dstbi__uint16),
maxcode: [17]c_int = @import("std").mem.zeroes([17]c_int),
firstsymbol: [16]_m3dstbi__uint16 = @import("std").mem.zeroes([16]_m3dstbi__uint16),
size: [288]u8 = @import("std").mem.zeroes([288]u8),
value: [288]_m3dstbi__uint16 = @import("std").mem.zeroes([288]_m3dstbi__uint16),
};
pub fn _m3dstbi__bitreverse16(arg_n: c_int) callconv(.C) c_int {
var n = arg_n;
_ = &n;
n = ((n & @as(c_int, 43690)) >> @intCast(1)) | ((n & @as(c_int, 21845)) << @intCast(1));
n = ((n & @as(c_int, 52428)) >> @intCast(2)) | ((n & @as(c_int, 13107)) << @intCast(2));
n = ((n & @as(c_int, 61680)) >> @intCast(4)) | ((n & @as(c_int, 3855)) << @intCast(4));
n = ((n & @as(c_int, 65280)) >> @intCast(8)) | ((n & @as(c_int, 255)) << @intCast(8));
return n;
}
pub fn _m3dstbi__bit_reverse(arg_v: c_int, arg_bits: c_int) callconv(.C) c_int {
var v = arg_v;
_ = &v;
var bits = arg_bits;
_ = &bits;
return _m3dstbi__bitreverse16(v) >> @intCast(@as(c_int, 16) - bits);
}
pub fn _m3dstbi__zbuild_huffman(arg_z: [*c]_m3dstbi__zhuffman, arg_sizelist: [*c]u8, arg_num: c_int) callconv(.C) c_int {
var z = arg_z;
_ = &z;
var sizelist = arg_sizelist;
_ = &sizelist;
var num = arg_num;
_ = &num;
var i: c_int = undefined;
_ = &i;
var k: c_int = 0;
_ = &k;
var code: c_int = undefined;
_ = &code;
var next_code: [16]c_int = undefined;
_ = &next_code;
var sizes: [17]c_int = undefined;
_ = &sizes;
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]c_int, @ptrCast(@alignCast(&sizes))))), @as(c_int, 0), @sizeOf([17]c_int));
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(&z.*.fast))))), @as(c_int, 0), @sizeOf([512]_m3dstbi__uint16));
{
i = 0;
while (i < num) : (i += 1) {
sizes[(blk: {
const tmp = i;
if (tmp >= 0) break :blk sizelist + @as(usize, @intCast(tmp)) else break :blk sizelist - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*] += 1;
}
}
sizes[@as(c_uint, @intCast(@as(c_int, 0)))] = 0;
{
i = 1;
while (i < @as(c_int, 16)) : (i += 1) if (sizes[@as(c_uint, @intCast(i))] > (@as(c_int, 1) << @intCast(i))) return _m3dstbi__errstr("Corrupt PNG");
}
code = 0;
{
i = 1;
while (i < @as(c_int, 16)) : (i += 1) {
next_code[@as(c_uint, @intCast(i))] = code;
z.*.firstcode[@as(c_uint, @intCast(i))] = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(code))));
z.*.firstsymbol[@as(c_uint, @intCast(i))] = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(k))));
code = code + sizes[@as(c_uint, @intCast(i))];
if (sizes[@as(c_uint, @intCast(i))] != 0) if ((code - @as(c_int, 1)) >= (@as(c_int, 1) << @intCast(i))) return _m3dstbi__errstr("Corrupt PNG");
z.*.maxcode[@as(c_uint, @intCast(i))] = code << @intCast(@as(c_int, 16) - i);
code <<= @intCast(@as(c_int, 1));
k += sizes[@as(c_uint, @intCast(i))];
}
}
z.*.maxcode[@as(c_uint, @intCast(@as(c_int, 16)))] = 65536;
{
i = 0;
while (i < num) : (i += 1) {
var s: c_int = @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk sizelist + @as(usize, @intCast(tmp)) else break :blk sizelist - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
_ = &s;
if (s != 0) {
var c: c_int = (next_code[@as(c_uint, @intCast(s))] - @as(c_int, @bitCast(@as(c_uint, z.*.firstcode[@as(c_uint, @intCast(s))])))) + @as(c_int, @bitCast(@as(c_uint, z.*.firstsymbol[@as(c_uint, @intCast(s))])));
_ = &c;
var fastv: _m3dstbi__uint16 = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate((s << @intCast(9)) | i))));
_ = &fastv;
z.*.size[@as(c_uint, @intCast(c))] = @as(u8, @bitCast(@as(i8, @truncate(s))));
z.*.value[@as(c_uint, @intCast(c))] = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(i))));
if (s <= @as(c_int, 9)) {
var j: c_int = _m3dstbi__bit_reverse(next_code[@as(c_uint, @intCast(s))], s);
_ = &j;
while (j < (@as(c_int, 1) << @intCast(9))) {
z.*.fast[@as(c_uint, @intCast(j))] = fastv;
j += @as(c_int, 1) << @intCast(s);
}
}
next_code[@as(c_uint, @intCast(s))] += 1;
}
}
}
return 1;
}
pub const _m3dstbi__zbuf = extern struct {
zbuffer: [*c]u8 = @import("std").mem.zeroes([*c]u8),
zbuffer_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
num_bits: c_int = @import("std").mem.zeroes(c_int),
code_buffer: _m3dstbi__uint32 = @import("std").mem.zeroes(_m3dstbi__uint32),
zout: [*c]u8 = @import("std").mem.zeroes([*c]u8),
zout_start: [*c]u8 = @import("std").mem.zeroes([*c]u8),
zout_end: [*c]u8 = @import("std").mem.zeroes([*c]u8),
z_expandable: c_int = @import("std").mem.zeroes(c_int),
z_length: _m3dstbi__zhuffman = @import("std").mem.zeroes(_m3dstbi__zhuffman),
z_distance: _m3dstbi__zhuffman = @import("std").mem.zeroes(_m3dstbi__zhuffman),
};
pub fn _m3dstbi__zget8(arg_z: [*c]_m3dstbi__zbuf) callconv(.C) u8 {
var z = arg_z;
_ = &z;
if (z.*.zbuffer >= z.*.zbuffer_end) return 0;
return (blk: {
const ref = &z.*.zbuffer;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
}
pub fn _m3dstbi__fill_bits(arg_z: [*c]_m3dstbi__zbuf) callconv(.C) void {
var z = arg_z;
_ = &z;
while (true) {
z.*.code_buffer |= @as(_m3dstbi__uint32, @bitCast(@as(c_uint, @bitCast(@as(c_uint, _m3dstbi__zget8(z)))) << @intCast(z.*.num_bits)));
z.*.num_bits += @as(c_int, 8);
if (!(z.*.num_bits <= @as(c_int, 24))) break;
}
}
pub fn _m3dstbi__zreceive(arg_z: [*c]_m3dstbi__zbuf, arg_n: c_int) callconv(.C) c_uint {
var z = arg_z;
_ = &z;
var n = arg_n;
_ = &n;
var k: c_uint = undefined;
_ = &k;
if (z.*.num_bits < n) {
_m3dstbi__fill_bits(z);
}
k = z.*.code_buffer & @as(_m3dstbi__uint32, @bitCast((@as(c_int, 1) << @intCast(n)) - @as(c_int, 1)));
z.*.code_buffer >>= @intCast(n);
z.*.num_bits -= n;
return k;
}
pub fn _m3dstbi__zhuffman_decode_slowpath(arg_a: [*c]_m3dstbi__zbuf, arg_z: [*c]_m3dstbi__zhuffman) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var z = arg_z;
_ = &z;
var b: c_int = undefined;
_ = &b;
var s: c_int = undefined;
_ = &s;
var k: c_int = undefined;
_ = &k;
k = _m3dstbi__bit_reverse(@as(c_int, @bitCast(a.*.code_buffer)), @as(c_int, 16));
{
s = @as(c_int, 9) + @as(c_int, 1);
while (true) : (s += 1) if (k < z.*.maxcode[@as(c_uint, @intCast(s))]) break;
}
if (s == @as(c_int, 16)) return -@as(c_int, 1);
b = ((k >> @intCast(@as(c_int, 16) - s)) - @as(c_int, @bitCast(@as(c_uint, z.*.firstcode[@as(c_uint, @intCast(s))])))) + @as(c_int, @bitCast(@as(c_uint, z.*.firstsymbol[@as(c_uint, @intCast(s))])));
a.*.code_buffer >>= @intCast(s);
a.*.num_bits -= s;
return @as(c_int, @bitCast(@as(c_uint, z.*.value[@as(c_uint, @intCast(b))])));
}
pub fn _m3dstbi__zhuffman_decode(arg_a: [*c]_m3dstbi__zbuf, arg_z: [*c]_m3dstbi__zhuffman) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var z = arg_z;
_ = &z;
var b: c_int = undefined;
_ = &b;
var s: c_int = undefined;
_ = &s;
if (a.*.num_bits < @as(c_int, 16)) {
_m3dstbi__fill_bits(a);
}
b = @as(c_int, @bitCast(@as(c_uint, z.*.fast[a.*.code_buffer & @as(_m3dstbi__uint32, @bitCast((@as(c_int, 1) << @intCast(9)) - @as(c_int, 1)))])));
if (b != 0) {
s = b >> @intCast(9);
a.*.code_buffer >>= @intCast(s);
a.*.num_bits -= s;
return b & @as(c_int, 511);
}
return _m3dstbi__zhuffman_decode_slowpath(a, z);
}
pub fn _m3dstbi__zexpand(arg_z: [*c]_m3dstbi__zbuf, arg_zout: [*c]u8, arg_n: c_int) callconv(.C) c_int {
var z = arg_z;
_ = &z;
var zout = arg_zout;
_ = &zout;
var n = arg_n;
_ = &n;
var q: [*c]u8 = undefined;
_ = &q;
var cur: c_int = undefined;
_ = &cur;
var limit: c_int = undefined;
_ = &limit;
var old_limit: c_int = undefined;
_ = &old_limit;
z.*.zout = zout;
if (!(z.*.z_expandable != 0)) return _m3dstbi__errstr("Corrupt PNG");
cur = @as(c_int, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(z.*.zout) -% @intFromPtr(z.*.zout_start))), @sizeOf(u8))))));
limit = blk: {
const tmp = @as(c_int, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(z.*.zout_end) -% @intFromPtr(z.*.zout_start))), @sizeOf(u8))))));
old_limit = tmp;
break :blk tmp;
};
while ((cur + n) > limit) {
limit *= @as(c_int, 2);
}
q = @as([*c]u8, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(z.*.zout_start)), @as(c_ulong, @bitCast(@as(c_long, limit)))))));
_ = @sizeOf(c_int);
if (q == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return _m3dstbi__errstr("Out of memory");
z.*.zout_start = q;
z.*.zout = q + @as(usize, @bitCast(@as(isize, @intCast(cur))));
z.*.zout_end = q + @as(usize, @bitCast(@as(isize, @intCast(limit))));
return 1;
}
pub var _m3dstbi__zlength_base: [31]c_int = [31]c_int{
3,
4,
5,
6,
7,
8,
9,
10,
11,
13,
15,
17,
19,
23,
27,
31,
35,
43,
51,
59,
67,
83,
99,
115,
131,
163,
195,
227,
258,
0,
0,
};
pub var _m3dstbi__zlength_extra: [31]c_int = [31]c_int{
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
2,
2,
2,
2,
3,
3,
3,
3,
4,
4,
4,
4,
5,
5,
5,
5,
0,
0,
0,
};
pub var _m3dstbi__zdist_base: [32]c_int = [32]c_int{
1,
2,
3,
4,
5,
7,
9,
13,
17,
25,
33,
49,
65,
97,
129,
193,
257,
385,
513,
769,
1025,
1537,
2049,
3073,
4097,
6145,
8193,
12289,
16385,
24577,
0,
0,
};
pub var _m3dstbi__zdist_extra: [32]c_int = [30]c_int{
0,
0,
0,
0,
1,
1,
2,
2,
3,
3,
4,
4,
5,
5,
6,
6,
7,
7,
8,
8,
9,
9,
10,
10,
11,
11,
12,
12,
13,
13,
} ++ [1]c_int{0} ** 2;
pub fn _m3dstbi__parse_huffman_block(arg_a: [*c]_m3dstbi__zbuf) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var zout: [*c]u8 = a.*.zout;
_ = &zout;
while (true) {
var z: c_int = _m3dstbi__zhuffman_decode(a, &a.*.z_length);
_ = &z;
if (z < @as(c_int, 256)) {
if (z < @as(c_int, 0)) return _m3dstbi__errstr("Corrupt PNG");
if (zout >= a.*.zout_end) {
if (!(_m3dstbi__zexpand(a, zout, @as(c_int, 1)) != 0)) return 0;
zout = a.*.zout;
}
(blk: {
const ref = &zout;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(z))));
} else {
var p: [*c]u8 = undefined;
_ = &p;
var len: c_int = undefined;
_ = &len;
var dist: c_int = undefined;
_ = &dist;
if (z == @as(c_int, 256)) {
a.*.zout = zout;
return 1;
}
z -= @as(c_int, 257);
len = _m3dstbi__zlength_base[@as(c_uint, @intCast(z))];
if (_m3dstbi__zlength_extra[@as(c_uint, @intCast(z))] != 0) {
len += @as(c_int, @bitCast(_m3dstbi__zreceive(a, _m3dstbi__zlength_extra[@as(c_uint, @intCast(z))])));
}
z = _m3dstbi__zhuffman_decode(a, &a.*.z_distance);
if (z < @as(c_int, 0)) return _m3dstbi__errstr("Corrupt PNG");
dist = _m3dstbi__zdist_base[@as(c_uint, @intCast(z))];
if (_m3dstbi__zdist_extra[@as(c_uint, @intCast(z))] != 0) {
dist += @as(c_int, @bitCast(_m3dstbi__zreceive(a, _m3dstbi__zdist_extra[@as(c_uint, @intCast(z))])));
}
if (@divExact(@as(c_long, @bitCast(@intFromPtr(zout) -% @intFromPtr(a.*.zout_start))), @sizeOf(u8)) < @as(c_long, @bitCast(@as(c_long, dist)))) return _m3dstbi__errstr("Corrupt PNG");
if ((zout + @as(usize, @bitCast(@as(isize, @intCast(len))))) > a.*.zout_end) {
if (!(_m3dstbi__zexpand(a, zout, len) != 0)) return 0;
zout = a.*.zout;
}
p = @as([*c]u8, @ptrCast(@alignCast(zout - @as(usize, @bitCast(@as(isize, @intCast(dist)))))));
if (dist == @as(c_int, 1)) {
var v: u8 = p.*;
_ = &v;
if (len != 0) {
while (true) {
(blk: {
const ref = &zout;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(v));
if (!((blk: {
const ref = &len;
ref.* -= 1;
break :blk ref.*;
}) != 0)) break;
}
}
} else {
if (len != 0) {
while (true) {
(blk: {
const ref = &zout;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast((blk: {
const ref = &p;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*));
if (!((blk: {
const ref = &len;
ref.* -= 1;
break :blk ref.*;
}) != 0)) break;
}
}
}
}
}
return 0;
}
pub fn _m3dstbi__compute_huffman_codes(arg_a: [*c]_m3dstbi__zbuf) callconv(.C) c_int {
var a = arg_a;
_ = &a;
const length_dezigzag = struct {
var static: [19]u8 = [19]u8{
16,
17,
18,
0,
8,
7,
9,
6,
10,
5,
11,
4,
12,
3,
13,
2,
14,
1,
15,
};
};
_ = &length_dezigzag;
var z_codelength: _m3dstbi__zhuffman = undefined;
_ = &z_codelength;
var lencodes: [455]u8 = undefined;
_ = &lencodes;
var codelength_sizes: [19]u8 = undefined;
_ = &codelength_sizes;
var i: c_int = undefined;
_ = &i;
var n: c_int = undefined;
_ = &n;
var hlit: c_int = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 5)) +% @as(c_uint, @bitCast(@as(c_int, 257)))));
_ = &hlit;
var hdist: c_int = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 5)) +% @as(c_uint, @bitCast(@as(c_int, 1)))));
_ = &hdist;
var hclen: c_int = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 4)) +% @as(c_uint, @bitCast(@as(c_int, 4)))));
_ = &hclen;
var ntot: c_int = hlit + hdist;
_ = &ntot;
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&codelength_sizes))))), @as(c_int, 0), @sizeOf([19]u8));
{
i = 0;
while (i < hclen) : (i += 1) {
var s: c_int = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 3))));
_ = &s;
codelength_sizes[length_dezigzag.static[@as(c_uint, @intCast(i))]] = @as(u8, @bitCast(@as(i8, @truncate(s))));
}
}
if (!(_m3dstbi__zbuild_huffman(&z_codelength, @as([*c]u8, @ptrCast(@alignCast(&codelength_sizes))), @as(c_int, 19)) != 0)) return 0;
n = 0;
while (n < ntot) {
var c: c_int = _m3dstbi__zhuffman_decode(a, &z_codelength);
_ = &c;
if ((c < @as(c_int, 0)) or (c >= @as(c_int, 19))) return _m3dstbi__errstr("Corrupt PNG");
if (c < @as(c_int, 16)) {
lencodes[@as(c_uint, @intCast(blk: {
const ref = &n;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))] = @as(u8, @bitCast(@as(i8, @truncate(c))));
} else {
var fill: u8 = 0;
_ = &fill;
if (c == @as(c_int, 16)) {
c = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 2)) +% @as(c_uint, @bitCast(@as(c_int, 3)))));
if (n == @as(c_int, 0)) return _m3dstbi__errstr("Corrupt PNG");
fill = lencodes[@as(c_uint, @intCast(n - @as(c_int, 1)))];
} else if (c == @as(c_int, 17)) {
c = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 3)) +% @as(c_uint, @bitCast(@as(c_int, 3)))));
} else {
c = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 7)) +% @as(c_uint, @bitCast(@as(c_int, 11)))));
}
if ((ntot - n) < c) return _m3dstbi__errstr("Corrupt PNG");
_ = memset(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&lencodes))) + @as(usize, @bitCast(@as(isize, @intCast(n)))))), @as(c_int, @bitCast(@as(c_uint, fill))), @as(c_ulong, @bitCast(@as(c_long, c))));
n += c;
}
}
if (n != ntot) return _m3dstbi__errstr("Corrupt PNG");
if (!(_m3dstbi__zbuild_huffman(&a.*.z_length, @as([*c]u8, @ptrCast(@alignCast(&lencodes))), hlit) != 0)) return 0;
if (!(_m3dstbi__zbuild_huffman(&a.*.z_distance, @as([*c]u8, @ptrCast(@alignCast(&lencodes))) + @as(usize, @bitCast(@as(isize, @intCast(hlit)))), hdist) != 0)) return 0;
return 1;
}
pub fn _m3dstbi__parse_uncompressed_block(arg_a: [*c]_m3dstbi__zbuf) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var header: [4]u8 = undefined;
_ = &header;
var len: c_int = undefined;
_ = &len;
var nlen: c_int = undefined;
_ = &nlen;
var k: c_int = undefined;
_ = &k;
if ((a.*.num_bits & @as(c_int, 7)) != 0) {
_ = _m3dstbi__zreceive(a, a.*.num_bits & @as(c_int, 7));
}
k = 0;
while (a.*.num_bits > @as(c_int, 0)) {
header[@as(c_uint, @intCast(blk: {
const ref = &k;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))] = @as(u8, @bitCast(@as(u8, @truncate(a.*.code_buffer & @as(_m3dstbi__uint32, @bitCast(@as(c_int, 255)))))));
a.*.code_buffer >>= @intCast(@as(c_int, 8));
a.*.num_bits -= @as(c_int, 8);
}
while (k < @as(c_int, 4)) {
header[@as(c_uint, @intCast(blk: {
const ref = &k;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))] = _m3dstbi__zget8(a);
}
len = (@as(c_int, @bitCast(@as(c_uint, header[@as(c_uint, @intCast(@as(c_int, 1)))]))) * @as(c_int, 256)) + @as(c_int, @bitCast(@as(c_uint, header[@as(c_uint, @intCast(@as(c_int, 0)))])));
nlen = (@as(c_int, @bitCast(@as(c_uint, header[@as(c_uint, @intCast(@as(c_int, 3)))]))) * @as(c_int, 256)) + @as(c_int, @bitCast(@as(c_uint, header[@as(c_uint, @intCast(@as(c_int, 2)))])));
if (nlen != (len ^ @as(c_int, 65535))) return _m3dstbi__errstr("Corrupt PNG");
if ((a.*.zbuffer + @as(usize, @bitCast(@as(isize, @intCast(len))))) > a.*.zbuffer_end) return _m3dstbi__errstr("Corrupt PNG");
if ((a.*.zout + @as(usize, @bitCast(@as(isize, @intCast(len))))) > a.*.zout_end) if (!(_m3dstbi__zexpand(a, a.*.zout, len) != 0)) return 0;
_ = memcpy(@as(?*anyopaque, @ptrCast(a.*.zout)), @as(?*const anyopaque, @ptrCast(a.*.zbuffer)), @as(c_ulong, @bitCast(@as(c_long, len))));
a.*.zbuffer += @as(usize, @bitCast(@as(isize, @intCast(len))));
a.*.zout += @as(usize, @bitCast(@as(isize, @intCast(len))));
return 1;
}
pub fn _m3dstbi__parse_zlib_header(arg_a: [*c]_m3dstbi__zbuf) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var cmf: c_int = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__zget8(a))));
_ = &cmf;
var cm: c_int = cmf & @as(c_int, 15);
_ = &cm;
var flg: c_int = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__zget8(a))));
_ = &flg;
if (@import("std").zig.c_translation.signedRemainder((cmf * @as(c_int, 256)) + flg, @as(c_int, 31)) != @as(c_int, 0)) return _m3dstbi__errstr("Corrupt PNG");
if ((flg & @as(c_int, 32)) != 0) return _m3dstbi__errstr("Corrupt PNG");
if (cm != @as(c_int, 8)) return _m3dstbi__errstr("Corrupt PNG");
return 1;
}
pub var _m3dstbi__zdefault_length: [288]u8 = @import("std").mem.zeroes([288]u8);
pub var _m3dstbi__zdefault_distance: [32]u8 = @import("std").mem.zeroes([32]u8);
pub fn _m3dstbi__init_zdefaults() callconv(.C) void {
var i: c_int = undefined;
_ = &i;
{
i = 0;
while (i <= @as(c_int, 143)) : (i += 1) {
_m3dstbi__zdefault_length[@as(c_uint, @intCast(i))] = 8;
}
}
while (i <= @as(c_int, 255)) : (i += 1) {
_m3dstbi__zdefault_length[@as(c_uint, @intCast(i))] = 9;
}
while (i <= @as(c_int, 279)) : (i += 1) {
_m3dstbi__zdefault_length[@as(c_uint, @intCast(i))] = 7;
}
while (i <= @as(c_int, 287)) : (i += 1) {
_m3dstbi__zdefault_length[@as(c_uint, @intCast(i))] = 8;
}
{
i = 0;
while (i <= @as(c_int, 31)) : (i += 1) {
_m3dstbi__zdefault_distance[@as(c_uint, @intCast(i))] = 5;
}
}
}
pub fn _m3dstbi__parse_zlib(arg_a: [*c]_m3dstbi__zbuf, arg_parse_header: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var parse_header = arg_parse_header;
_ = &parse_header;
var final: c_int = undefined;
_ = &final;
var @"type": c_int = undefined;
_ = &@"type";
if (parse_header != 0) if (!(_m3dstbi__parse_zlib_header(a) != 0)) return 0;
a.*.num_bits = 0;
a.*.code_buffer = 0;
while (true) {
final = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 1))));
@"type" = @as(c_int, @bitCast(_m3dstbi__zreceive(a, @as(c_int, 2))));
if (@"type" == @as(c_int, 0)) {
if (!(_m3dstbi__parse_uncompressed_block(a) != 0)) return 0;
} else if (@"type" == @as(c_int, 3)) {
return 0;
} else {
if (@"type" == @as(c_int, 1)) {
if (!(_m3dstbi__zbuild_huffman(&a.*.z_length, @as([*c]u8, @ptrCast(@alignCast(&_m3dstbi__zdefault_length))), @as(c_int, 288)) != 0)) return 0;
if (!(_m3dstbi__zbuild_huffman(&a.*.z_distance, @as([*c]u8, @ptrCast(@alignCast(&_m3dstbi__zdefault_distance))), @as(c_int, 32)) != 0)) return 0;
} else {
if (!(_m3dstbi__compute_huffman_codes(a) != 0)) return 0;
}
if (!(_m3dstbi__parse_huffman_block(a) != 0)) return 0;
}
if (!!(final != 0)) break;
}
return 1;
}
pub fn _m3dstbi__do_zlib(arg_a: [*c]_m3dstbi__zbuf, arg_obuf: [*c]u8, arg_olen: c_int, arg_exp_1: c_int, arg_parse_header: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var obuf = arg_obuf;
_ = &obuf;
var olen = arg_olen;
_ = &olen;
var exp_1 = arg_exp_1;
_ = &exp_1;
var parse_header = arg_parse_header;
_ = &parse_header;
a.*.zout_start = obuf;
a.*.zout = obuf;
a.*.zout_end = obuf + @as(usize, @bitCast(@as(isize, @intCast(olen))));
a.*.z_expandable = exp_1;
_m3dstbi__init_zdefaults();
return _m3dstbi__parse_zlib(a, parse_header);
}
pub export fn _m3dstbi_zlib_decode_malloc_guesssize_headerflag(arg_buffer: [*c]const u8, arg_len: c_int, arg_initial_size: c_int, arg_outlen: [*c]c_int, arg_parse_header: c_int) [*c]u8 {
var buffer = arg_buffer;
_ = &buffer;
var len = arg_len;
_ = &len;
var initial_size = arg_initial_size;
_ = &initial_size;
var outlen = arg_outlen;
_ = &outlen;
var parse_header = arg_parse_header;
_ = &parse_header;
var a: _m3dstbi__zbuf = undefined;
_ = &a;
var p: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__malloc(@as(usize, @bitCast(@as(c_long, initial_size)))))));
_ = &p;
if (p == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return null;
a.zbuffer = @as([*c]u8, @ptrCast(@volatileCast(@constCast(buffer))));
a.zbuffer_end = @as([*c]u8, @ptrCast(@volatileCast(@constCast(buffer)))) + @as(usize, @bitCast(@as(isize, @intCast(len))));
if (_m3dstbi__do_zlib(&a, p, initial_size, @as(c_int, 1), parse_header) != 0) {
if (outlen != null) {
outlen.* = @as(c_int, @bitCast(@as(c_int, @truncate(@divExact(@as(c_long, @bitCast(@intFromPtr(a.zout) -% @intFromPtr(a.zout_start))), @sizeOf(u8))))));
}
return a.zout_start;
} else {
free(@as(?*anyopaque, @ptrCast(a.zout_start)));
return null;
}
return null;
}
pub const _m3dstbi__pngchunk = extern struct {
length: _m3dstbi__uint32 = @import("std").mem.zeroes(_m3dstbi__uint32),
type: _m3dstbi__uint32 = @import("std").mem.zeroes(_m3dstbi__uint32),
};
pub fn _m3dstbi__get_chunk_header(arg_s: [*c]_m3dstbi__context) callconv(.C) _m3dstbi__pngchunk {
var s = arg_s;
_ = &s;
var c: _m3dstbi__pngchunk = undefined;
_ = &c;
c.length = _m3dstbi__get32be(s);
c.type = _m3dstbi__get32be(s);
return c;
}
pub fn _m3dstbi__check_png_header(arg_s: [*c]_m3dstbi__context) callconv(.C) c_int {
var s = arg_s;
_ = &s;
const png_sig = struct {
var static: [8]u8 = [8]u8{
137,
80,
78,
71,
13,
10,
26,
10,
};
};
_ = &png_sig;
var i: c_int = undefined;
_ = &i;
{
i = 0;
while (i < @as(c_int, 8)) : (i += 1) if (@as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s)))) != @as(c_int, @bitCast(@as(c_uint, png_sig.static[@as(c_uint, @intCast(i))])))) return _m3dstbi__errstr("Not a PNG");
}
return 1;
}
pub const _m3dstbi__png = extern struct {
s: [*c]_m3dstbi__context = @import("std").mem.zeroes([*c]_m3dstbi__context),
idata: [*c]u8 = @import("std").mem.zeroes([*c]u8),
expanded: [*c]u8 = @import("std").mem.zeroes([*c]u8),
out: [*c]u8 = @import("std").mem.zeroes([*c]u8),
depth: c_int = @import("std").mem.zeroes(c_int),
};
pub const STBI__F_none: c_int = 0;
pub const STBI__F_sub: c_int = 1;
pub const STBI__F_up: c_int = 2;
pub const STBI__F_avg: c_int = 3;
pub const STBI__F_paeth: c_int = 4;
pub const STBI__F_avg_first: c_int = 5;
pub const STBI__F_paeth_first: c_int = 6;
const enum_unnamed_15 = c_uint;
pub var first_row_filter: [5]u8 = [5]u8{
@as(u8, @bitCast(@as(i8, @truncate(STBI__F_none)))),
@as(u8, @bitCast(@as(i8, @truncate(STBI__F_sub)))),
@as(u8, @bitCast(@as(i8, @truncate(STBI__F_none)))),
@as(u8, @bitCast(@as(i8, @truncate(STBI__F_avg_first)))),
@as(u8, @bitCast(@as(i8, @truncate(STBI__F_paeth_first)))),
};
pub fn _m3dstbi__paeth(arg_a: c_int, arg_b: c_int, arg_c: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var c = arg_c;
_ = &c;
var p: c_int = (a + b) - c;
_ = &p;
var pa: c_int = abs(p - a);
_ = &pa;
var pb: c_int = abs(p - b);
_ = &pb;
var pc: c_int = abs(p - c);
_ = &pc;
if ((pa <= pb) and (pa <= pc)) return a;
if (pb <= pc) return b;
return c;
}
pub var _m3dstbi__depth_scale_table: [9]u8 = [9]u8{
0,
255,
85,
0,
17,
0,
0,
0,
1,
};
pub fn _m3dstbi__create_png_image_raw(arg_a: [*c]_m3dstbi__png, arg_raw: [*c]u8, arg_raw_len: _m3dstbi__uint32, arg_out_n: c_int, arg_x: _m3dstbi__uint32, arg_y: _m3dstbi__uint32, arg_depth: c_int, arg_color: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var raw = arg_raw;
_ = &raw;
var raw_len = arg_raw_len;
_ = &raw_len;
var out_n = arg_out_n;
_ = &out_n;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var depth = arg_depth;
_ = &depth;
var color = arg_color;
_ = &color;
var bytes: c_int = if (depth == @as(c_int, 16)) @as(c_int, 2) else @as(c_int, 1);
_ = &bytes;
var s: [*c]_m3dstbi__context = a.*.s;
_ = &s;
var i: _m3dstbi__uint32 = undefined;
_ = &i;
var j: _m3dstbi__uint32 = undefined;
_ = &j;
var stride: _m3dstbi__uint32 = (x *% @as(_m3dstbi__uint32, @bitCast(out_n))) *% @as(_m3dstbi__uint32, @bitCast(bytes));
_ = &stride;
var img_len: _m3dstbi__uint32 = undefined;
_ = &img_len;
var img_width_bytes: _m3dstbi__uint32 = undefined;
_ = &img_width_bytes;
var k: c_int = undefined;
_ = &k;
var img_n: c_int = s.*.img_n;
_ = &img_n;
var output_bytes: c_int = out_n * bytes;
_ = &output_bytes;
var filter_bytes: c_int = img_n * bytes;
_ = &filter_bytes;
var width: c_int = @as(c_int, @bitCast(x));
_ = &width;
a.*.out = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__malloc_mad3(@as(c_int, @bitCast(x)), @as(c_int, @bitCast(y)), output_bytes, @as(c_int, 0)))));
if (!(a.*.out != null)) return _m3dstbi__errstr("Out of memory");
if (!(_m3dstbi__mad3sizes_valid(img_n, @as(c_int, @bitCast(x)), depth, @as(c_int, 7)) != 0)) return _m3dstbi__errstr("Corrupt PNG");
img_width_bytes = (((@as(_m3dstbi__uint32, @bitCast(img_n)) *% x) *% @as(_m3dstbi__uint32, @bitCast(depth))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 7)))) >> @intCast(3);
img_len = (img_width_bytes +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) *% y;
if ((s.*.img_x == x) and (s.*.img_y == y)) {
if (raw_len != img_len) return _m3dstbi__errstr("Corrupt PNG");
} else {
if (raw_len < img_len) return _m3dstbi__errstr("Corrupt PNG");
}
{
j = 0;
while (j < y) : (j +%= 1) {
var cur: [*c]u8 = a.*.out + (stride *% j);
_ = &cur;
var prior: [*c]u8 = cur - stride;
_ = &prior;
var filter: c_int = @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &raw;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &filter;
if (filter > @as(c_int, 4)) return _m3dstbi__errstr("Corrupt PNG");
if (depth < @as(c_int, 8)) {
cur += @as([*c]u8, @ptrFromInt((x *% @as(_m3dstbi__uint32, @bitCast(out_n))) -% img_width_bytes));
filter_bytes = 1;
width = @as(c_int, @bitCast(img_width_bytes));
}
prior = cur - stride;
if (j == @as(_m3dstbi__uint32, @bitCast(@as(c_int, 0)))) {
filter = @as(c_int, @bitCast(@as(c_uint, first_row_filter[@as(c_uint, @intCast(filter))])));
}
{
k = 0;
while (k < filter_bytes) : (k += 1) {
while (true) {
switch (filter) {
@as(c_int, 0) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
break;
},
@as(c_int, 1) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
break;
},
@as(c_int, 2) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) & @as(c_int, 255)))));
break;
},
@as(c_int, 3) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) >> @intCast(1))) & @as(c_int, 255)))));
break;
},
@as(c_int, 4) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + _m3dstbi__paeth(@as(c_int, 0), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, 0))) & @as(c_int, 255)))));
break;
},
@as(c_int, 5) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
break;
},
@as(c_int, 6) => {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
break;
},
else => {},
}
break;
}
}
}
if (depth == @as(c_int, 8)) {
if (img_n != out_n) {
(blk: {
const tmp = img_n;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
}
raw += @as(usize, @bitCast(@as(isize, @intCast(img_n))));
cur += @as(usize, @bitCast(@as(isize, @intCast(out_n))));
prior += @as(usize, @bitCast(@as(isize, @intCast(out_n))));
} else if (depth == @as(c_int, 16)) {
if (img_n != out_n) {
(blk: {
const tmp = filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
(blk: {
const tmp = filter_bytes + @as(c_int, 1);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
}
raw += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
cur += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
prior += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
} else {
raw += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
cur += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
prior += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1)))));
}
if ((depth < @as(c_int, 8)) or (img_n == out_n)) {
var nk: c_int = (width - @as(c_int, 1)) * filter_bytes;
_ = &nk;
while (true) {
switch (filter) {
@as(c_int, 0) => {
_ = memcpy(@as(?*anyopaque, @ptrCast(cur)), @as(?*const anyopaque, @ptrCast(raw)), @as(c_ulong, @bitCast(@as(c_long, nk))));
break;
},
@as(c_int, 1) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) & @as(c_int, 255)))));
}
}
break;
},
@as(c_int, 2) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) & @as(c_int, 255)))));
}
}
break;
},
@as(c_int, 3) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + ((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) >> @intCast(1))) & @as(c_int, 255)))));
}
}
break;
},
@as(c_int, 4) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + _m3dstbi__paeth(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) & @as(c_int, 255)))));
}
}
break;
},
@as(c_int, 5) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) >> @intCast(1))) & @as(c_int, 255)))));
}
}
break;
},
@as(c_int, 6) => {
{
k = 0;
while (k < nk) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + _m3dstbi__paeth(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - filter_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, 0), @as(c_int, 0))) & @as(c_int, 255)))));
}
}
break;
},
else => {},
}
break;
}
raw += @as(usize, @bitCast(@as(isize, @intCast(nk))));
} else {
while (true) {
switch (filter) {
@as(c_int, 0) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
}
break;
},
@as(c_int, 1) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) & @as(c_int, 255)))));
}
}
}
break;
},
@as(c_int, 2) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) & @as(c_int, 255)))));
}
}
}
break;
},
@as(c_int, 3) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + ((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))) >> @intCast(1))) & @as(c_int, 255)))));
}
}
}
break;
},
@as(c_int, 4) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + _m3dstbi__paeth(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk prior + @as(usize, @intCast(tmp)) else break :blk prior - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) & @as(c_int, 255)))));
}
}
}
break;
},
@as(c_int, 5) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) >> @intCast(1))) & @as(c_int, 255)))));
}
}
}
break;
},
@as(c_int, 6) => {
{
i = x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)));
while (i >= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) : (_ = blk: {
_ = blk_1: {
_ = blk_2: {
_ = blk_3: {
i -%= 1;
break :blk_3 blk_4: {
const tmp = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255)))));
(blk_5: {
const tmp_6 = filter_bytes;
if (tmp_6 >= 0) break :blk_5 cur + @as(usize, @intCast(tmp_6)) else break :blk_5 cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_6)) +% -1));
}).* = tmp;
break :blk_4 tmp;
};
};
break :blk_2 blk_3: {
const ref = &raw;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(filter_bytes))));
break :blk_3 ref.*;
};
};
break :blk_1 blk_2: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &prior;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
k = 0;
while (k < filter_bytes) : (k += 1) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(i8, @truncate((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k;
if (tmp >= 0) break :blk raw + @as(usize, @intCast(tmp)) else break :blk raw - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) + _m3dstbi__paeth(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = k - output_bytes;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))), @as(c_int, 0), @as(c_int, 0))) & @as(c_int, 255)))));
}
}
}
break;
},
else => {},
}
break;
}
if (depth == @as(c_int, 16)) {
cur = a.*.out + (stride *% j);
{
i = 0;
while (i < x) : (_ = blk: {
i +%= 1;
break :blk blk_1: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(output_bytes))));
break :blk_1 ref.*;
};
}) {
(blk: {
const tmp = filter_bytes + @as(c_int, 1);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
}
}
}
}
}
}
if (depth < @as(c_int, 8)) {
{
j = 0;
while (j < y) : (j +%= 1) {
var cur: [*c]u8 = a.*.out + (stride *% j);
_ = &cur;
var in: [*c]u8 = ((a.*.out + (stride *% j)) + (x *% @as(_m3dstbi__uint32, @bitCast(out_n)))) - img_width_bytes;
_ = &in;
var scale: u8 = @as(u8, @bitCast(@as(i8, @truncate(if (color == @as(c_int, 0)) @as(c_int, @bitCast(@as(c_uint, _m3dstbi__depth_scale_table[@as(c_uint, @intCast(depth))]))) else @as(c_int, 1)))));
_ = &scale;
if (depth == @as(c_int, 4)) {
{
k = @as(c_int, @bitCast(x *% @as(_m3dstbi__uint32, @bitCast(img_n))));
while (k >= @as(c_int, 2)) : (_ = blk: {
k -= @as(c_int, 2);
break :blk blk_1: {
const ref = &in;
ref.* += 1;
break :blk_1 ref.*;
};
}) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) & @as(c_int, 15))))));
}
}
if (k > @as(c_int, 0)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4))))));
}
} else if (depth == @as(c_int, 2)) {
{
k = @as(c_int, @bitCast(x *% @as(_m3dstbi__uint32, @bitCast(img_n))));
while (k >= @as(c_int, 4)) : (_ = blk: {
k -= @as(c_int, 4);
break :blk blk_1: {
const ref = &in;
ref.* += 1;
break :blk_1 ref.*;
};
}) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(6))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4)) & @as(c_int, 3))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(2)) & @as(c_int, 3))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) & @as(c_int, 3))))));
}
}
if (k > @as(c_int, 0)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(6))))));
}
if (k > @as(c_int, 1)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4)) & @as(c_int, 3))))));
}
if (k > @as(c_int, 2)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(2)) & @as(c_int, 3))))));
}
} else if (depth == @as(c_int, 1)) {
{
k = @as(c_int, @bitCast(x *% @as(_m3dstbi__uint32, @bitCast(img_n))));
while (k >= @as(c_int, 8)) : (_ = blk: {
k -= @as(c_int, 8);
break :blk blk_1: {
const ref = &in;
ref.* += 1;
break :blk_1 ref.*;
};
}) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(7))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(6)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(5)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(3)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(2)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(1)) & @as(c_int, 1))))));
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) & @as(c_int, 1))))));
}
}
if (k > @as(c_int, 0)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * (@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(7))))));
}
if (k > @as(c_int, 1)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(6)) & @as(c_int, 1))))));
}
if (k > @as(c_int, 2)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(5)) & @as(c_int, 1))))));
}
if (k > @as(c_int, 3)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(4)) & @as(c_int, 1))))));
}
if (k > @as(c_int, 4)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(3)) & @as(c_int, 1))))));
}
if (k > @as(c_int, 5)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(2)) & @as(c_int, 1))))));
}
if (k > @as(c_int, 6)) {
(blk: {
const ref = &cur;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, scale))) * ((@as(c_int, @bitCast(@as(c_uint, in.*))) >> @intCast(1)) & @as(c_int, 1))))));
}
}
if (img_n != out_n) {
var q: c_int = undefined;
_ = &q;
cur = a.*.out + (stride *% j);
if (img_n == @as(c_int, 1)) {
{
q = @as(c_int, @bitCast(x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))));
while (q >= @as(c_int, 0)) : (q -= 1) {
(blk: {
const tmp = (q * @as(c_int, 2)) + @as(c_int, 1);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
(blk: {
const tmp = (q * @as(c_int, 2)) + @as(c_int, 0);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = q;
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
} else {
{
q = @as(c_int, @bitCast(x -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))));
while (q >= @as(c_int, 0)) : (q -= 1) {
(blk: {
const tmp = (q * @as(c_int, 4)) + @as(c_int, 3);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
(blk: {
const tmp = (q * @as(c_int, 4)) + @as(c_int, 2);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (q * @as(c_int, 3)) + @as(c_int, 2);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (q * @as(c_int, 4)) + @as(c_int, 1);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (q * @as(c_int, 3)) + @as(c_int, 1);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
(blk: {
const tmp = (q * @as(c_int, 4)) + @as(c_int, 0);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = (q * @as(c_int, 3)) + @as(c_int, 0);
if (tmp >= 0) break :blk cur + @as(usize, @intCast(tmp)) else break :blk cur - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
}
}
}
}
} else if (depth == @as(c_int, 16)) {
var cur: [*c]u8 = a.*.out;
_ = &cur;
var cur16: [*c]_m3dstbi__uint16 = @as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(cur)));
_ = &cur16;
{
i = 0;
while (i < ((x *% y) *% @as(_m3dstbi__uint32, @bitCast(out_n)))) : (_ = blk: {
_ = blk_1: {
i +%= 1;
break :blk_1 blk_2: {
const ref = &cur16;
const tmp = ref.*;
ref.* += 1;
break :blk_2 tmp;
};
};
break :blk blk_1: {
const ref = &cur;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break :blk_1 ref.*;
};
}) {
cur16.* = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate((@as(c_int, @bitCast(@as(c_uint, cur[@as(c_uint, @intCast(@as(c_int, 0)))]))) << @intCast(8)) | @as(c_int, @bitCast(@as(c_uint, cur[@as(c_uint, @intCast(@as(c_int, 1)))])))))));
}
}
}
return 1;
}
pub fn _m3dstbi__create_png_image(arg_a: [*c]_m3dstbi__png, arg_image_data: [*c]u8, arg_image_data_len: _m3dstbi__uint32, arg_out_n: c_int, arg_depth: c_int, arg_color: c_int, arg_interlaced: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var image_data = arg_image_data;
_ = &image_data;
var image_data_len = arg_image_data_len;
_ = &image_data_len;
var out_n = arg_out_n;
_ = &out_n;
var depth = arg_depth;
_ = &depth;
var color = arg_color;
_ = &color;
var interlaced = arg_interlaced;
_ = &interlaced;
var bytes: c_int = if (depth == @as(c_int, 16)) @as(c_int, 2) else @as(c_int, 1);
_ = &bytes;
var out_bytes: c_int = out_n * bytes;
_ = &out_bytes;
var final: [*c]u8 = undefined;
_ = &final;
var p: c_int = undefined;
_ = &p;
if (!(interlaced != 0)) return _m3dstbi__create_png_image_raw(a, image_data, image_data_len, out_n, a.*.s.*.img_x, a.*.s.*.img_y, depth, color);
final = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__malloc_mad3(@as(c_int, @bitCast(a.*.s.*.img_x)), @as(c_int, @bitCast(a.*.s.*.img_y)), out_bytes, @as(c_int, 0)))));
{
p = 0;
while (p < @as(c_int, 7)) : (p += 1) {
var xorig: [7]c_int = [7]c_int{
0,
4,
0,
2,
0,
1,
0,
};
_ = &xorig;
var yorig: [7]c_int = [7]c_int{
0,
0,
4,
0,
2,
0,
1,
};
_ = &yorig;
var xspc: [7]c_int = [7]c_int{
8,
8,
4,
4,
2,
2,
1,
};
_ = &xspc;
var yspc: [7]c_int = [7]c_int{
8,
8,
8,
4,
4,
2,
2,
};
_ = &yspc;
var i: c_int = undefined;
_ = &i;
var j: c_int = undefined;
_ = &j;
var x: c_int = undefined;
_ = &x;
var y: c_int = undefined;
_ = &y;
x = @as(c_int, @bitCast((((a.*.s.*.img_x -% @as(_m3dstbi__uint32, @bitCast(xorig[@as(c_uint, @intCast(p))]))) +% @as(_m3dstbi__uint32, @bitCast(xspc[@as(c_uint, @intCast(p))]))) -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) / @as(_m3dstbi__uint32, @bitCast(xspc[@as(c_uint, @intCast(p))]))));
y = @as(c_int, @bitCast((((a.*.s.*.img_y -% @as(_m3dstbi__uint32, @bitCast(yorig[@as(c_uint, @intCast(p))]))) +% @as(_m3dstbi__uint32, @bitCast(yspc[@as(c_uint, @intCast(p))]))) -% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))) / @as(_m3dstbi__uint32, @bitCast(yspc[@as(c_uint, @intCast(p))]))));
if ((x != 0) and (y != 0)) {
var img_len: _m3dstbi__uint32 = @as(_m3dstbi__uint32, @bitCast((((((a.*.s.*.img_n * x) * depth) + @as(c_int, 7)) >> @intCast(3)) + @as(c_int, 1)) * y));
_ = &img_len;
if (!(_m3dstbi__create_png_image_raw(a, image_data, image_data_len, out_n, @as(_m3dstbi__uint32, @bitCast(x)), @as(_m3dstbi__uint32, @bitCast(y)), depth, color) != 0)) {
free(@as(?*anyopaque, @ptrCast(final)));
return 0;
}
{
j = 0;
while (j < y) : (j += 1) {
{
i = 0;
while (i < x) : (i += 1) {
var out_y: c_int = (j * yspc[@as(c_uint, @intCast(p))]) + yorig[@as(c_uint, @intCast(p))];
_ = &out_y;
var out_x: c_int = (i * xspc[@as(c_uint, @intCast(p))]) + xorig[@as(c_uint, @intCast(p))];
_ = &out_x;
_ = memcpy(@as(?*anyopaque, @ptrCast((final + ((@as(_m3dstbi__uint32, @bitCast(out_y)) *% a.*.s.*.img_x) *% @as(_m3dstbi__uint32, @bitCast(out_bytes)))) + @as(usize, @bitCast(@as(isize, @intCast(out_x * out_bytes)))))), @as(?*const anyopaque, @ptrCast(a.*.out + @as(usize, @bitCast(@as(isize, @intCast(((j * x) + i) * out_bytes)))))), @as(c_ulong, @bitCast(@as(c_long, out_bytes))));
}
}
}
}
free(@as(?*anyopaque, @ptrCast(a.*.out)));
image_data += @as([*c]u8, @ptrFromInt(img_len));
image_data_len -%= img_len;
}
}
}
a.*.out = final;
return 1;
}
pub fn _m3dstbi__compute_transparency(arg_z: [*c]_m3dstbi__png, arg_tc: [*c]u8, arg_out_n: c_int) callconv(.C) c_int {
var z = arg_z;
_ = &z;
var tc = arg_tc;
_ = &tc;
var out_n = arg_out_n;
_ = &out_n;
var s: [*c]_m3dstbi__context = z.*.s;
_ = &s;
var i: _m3dstbi__uint32 = undefined;
_ = &i;
var pixel_count: _m3dstbi__uint32 = s.*.img_x *% s.*.img_y;
_ = &pixel_count;
var p: [*c]u8 = z.*.out;
_ = &p;
if (out_n == @as(c_int, 2)) {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
p[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(u8, @bitCast(@as(i8, @truncate(if (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 0)))])))) @as(c_int, 0) else @as(c_int, 255)))));
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
}
}
} else {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
if (((@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 0)))])))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 1)))]))))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 2)))]))))) {
p[@as(c_uint, @intCast(@as(c_int, 3)))] = 0;
}
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
}
}
}
return 1;
}
pub fn _m3dstbi__compute_transparency16(arg_z: [*c]_m3dstbi__png, arg_tc: [*c]_m3dstbi__uint16, arg_out_n: c_int) callconv(.C) c_int {
var z = arg_z;
_ = &z;
var tc = arg_tc;
_ = &tc;
var out_n = arg_out_n;
_ = &out_n;
var s: [*c]_m3dstbi__context = z.*.s;
_ = &s;
var i: _m3dstbi__uint32 = undefined;
_ = &i;
var pixel_count: _m3dstbi__uint32 = s.*.img_x *% s.*.img_y;
_ = &pixel_count;
var p: [*c]_m3dstbi__uint16 = @as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(z.*.out)));
_ = &p;
if (out_n == @as(c_int, 2)) {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
p[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(if (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 0)))])))) @as(c_int, 0) else @as(c_int, 65535)))));
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
}
}
} else {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
if (((@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 0)))])))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 1)))]))))) and (@as(c_int, @bitCast(@as(c_uint, p[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, @bitCast(@as(c_uint, tc[@as(c_uint, @intCast(@as(c_int, 2)))]))))) {
p[@as(c_uint, @intCast(@as(c_int, 3)))] = 0;
}
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
}
}
}
return 1;
}
pub fn _m3dstbi__expand_png_palette(arg_a: [*c]_m3dstbi__png, arg_palette: [*c]u8, arg_len: c_int, arg_pal_img_n: c_int) callconv(.C) c_int {
var a = arg_a;
_ = &a;
var palette = arg_palette;
_ = &palette;
var len = arg_len;
_ = &len;
var pal_img_n = arg_pal_img_n;
_ = &pal_img_n;
var i: _m3dstbi__uint32 = undefined;
_ = &i;
var pixel_count: _m3dstbi__uint32 = a.*.s.*.img_x *% a.*.s.*.img_y;
_ = &pixel_count;
var p: [*c]u8 = undefined;
_ = &p;
var temp_out: [*c]u8 = undefined;
_ = &temp_out;
var orig: [*c]u8 = a.*.out;
_ = &orig;
p = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__malloc_mad2(@as(c_int, @bitCast(pixel_count)), pal_img_n, @as(c_int, 0)))));
if (p == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return _m3dstbi__errstr("Out of memory");
temp_out = p;
if (pal_img_n == @as(c_int, 3)) {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
var n: c_int = @as(c_int, @bitCast(@as(c_uint, orig[i]))) * @as(c_int, 4);
_ = &n;
p[@as(c_uint, @intCast(@as(c_int, 0)))] = (blk: {
const tmp = n;
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p[@as(c_uint, @intCast(@as(c_int, 1)))] = (blk: {
const tmp = n + @as(c_int, 1);
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p[@as(c_uint, @intCast(@as(c_int, 2)))] = (blk: {
const tmp = n + @as(c_int, 2);
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
}
}
} else {
{
i = 0;
while (i < pixel_count) : (i +%= 1) {
var n: c_int = @as(c_int, @bitCast(@as(c_uint, orig[i]))) * @as(c_int, 4);
_ = &n;
p[@as(c_uint, @intCast(@as(c_int, 0)))] = (blk: {
const tmp = n;
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p[@as(c_uint, @intCast(@as(c_int, 1)))] = (blk: {
const tmp = n + @as(c_int, 1);
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p[@as(c_uint, @intCast(@as(c_int, 2)))] = (blk: {
const tmp = n + @as(c_int, 2);
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p[@as(c_uint, @intCast(@as(c_int, 3)))] = (blk: {
const tmp = n + @as(c_int, 3);
if (tmp >= 0) break :blk palette + @as(usize, @intCast(tmp)) else break :blk palette - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
p += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
}
}
}
free(@as(?*anyopaque, @ptrCast(a.*.out)));
a.*.out = temp_out;
_ = @sizeOf(c_int);
return 1;
}
pub fn _m3dstbi__parse_png_file(arg_z: [*c]_m3dstbi__png, arg_scan: c_int, arg_req_comp: c_int) callconv(.C) c_int {
var z = arg_z;
_ = &z;
var scan = arg_scan;
_ = &scan;
var req_comp = arg_req_comp;
_ = &req_comp;
var palette: [1024]u8 = undefined;
_ = &palette;
var pal_img_n: u8 = 0;
_ = &pal_img_n;
var has_trans: u8 = 0;
_ = &has_trans;
var tc: [3]u8 = undefined;
_ = &tc;
var tc16: [3]_m3dstbi__uint16 = undefined;
_ = &tc16;
var ioff: _m3dstbi__uint32 = 0;
_ = &ioff;
var idata_limit: _m3dstbi__uint32 = 0;
_ = &idata_limit;
var i: _m3dstbi__uint32 = undefined;
_ = &i;
var pal_len: _m3dstbi__uint32 = 0;
_ = &pal_len;
var first: c_int = 1;
_ = &first;
var k: c_int = undefined;
_ = &k;
var interlace: c_int = 0;
_ = &interlace;
var color: c_int = 0;
_ = &color;
var s: [*c]_m3dstbi__context = z.*.s;
_ = &s;
z.*.expanded = null;
z.*.idata = null;
z.*.out = null;
if (!(_m3dstbi__check_png_header(s) != 0)) return 0;
if (scan == STBI__SCAN_type) return 1;
while (true) {
var c: _m3dstbi__pngchunk = _m3dstbi__get_chunk_header(s);
_ = &c;
while (true) {
switch (c.type) {
@as(c_uint, 1130840649) => {
_m3dstbi__skip(s, @as(c_int, @bitCast(c.length)));
break;
},
@as(c_uint, 1229472850) => {
{
var comp: c_int = undefined;
_ = &comp;
var filter: c_int = undefined;
_ = &filter;
if (!(first != 0)) return _m3dstbi__errstr("Corrupt PNG");
first = 0;
if (c.length != @as(_m3dstbi__uint32, @bitCast(@as(c_int, 13)))) return _m3dstbi__errstr("Corrupt PNG");
s.*.img_x = _m3dstbi__get32be(s);
if (s.*.img_x > @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1) << @intCast(24)))) return _m3dstbi__errstr("Very large image (corrupt?)");
s.*.img_y = _m3dstbi__get32be(s);
if (s.*.img_y > @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1) << @intCast(24)))) return _m3dstbi__errstr("Very large image (corrupt?)");
z.*.depth = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
if (((((z.*.depth != @as(c_int, 1)) and (z.*.depth != @as(c_int, 2))) and (z.*.depth != @as(c_int, 4))) and (z.*.depth != @as(c_int, 8))) and (z.*.depth != @as(c_int, 16))) return _m3dstbi__errstr("PNG not supported: 1/2/4/8/16-bit only");
color = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
if (color > @as(c_int, 6)) return _m3dstbi__errstr("Corrupt PNG");
if ((color == @as(c_int, 3)) and (z.*.depth == @as(c_int, 16))) return _m3dstbi__errstr("Corrupt PNG");
if (color == @as(c_int, 3)) {
pal_img_n = 3;
} else if ((color & @as(c_int, 1)) != 0) return _m3dstbi__errstr("Corrupt PNG");
comp = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
if (comp != 0) return _m3dstbi__errstr("Corrupt PNG");
filter = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
if (filter != 0) return _m3dstbi__errstr("Corrupt PNG");
interlace = @as(c_int, @bitCast(@as(c_uint, _m3dstbi__get8(s))));
if (interlace > @as(c_int, 1)) return _m3dstbi__errstr("Corrupt PNG");
if (!(s.*.img_x != 0) or !(s.*.img_y != 0)) return _m3dstbi__errstr("Corrupt PNG");
if (!(pal_img_n != 0)) {
s.*.img_n = (if ((color & @as(c_int, 2)) != 0) @as(c_int, 3) else @as(c_int, 1)) + (if ((color & @as(c_int, 4)) != 0) @as(c_int, 1) else @as(c_int, 0));
if (((@as(_m3dstbi__uint32, @bitCast(@as(c_int, 1) << @intCast(30))) / s.*.img_x) / @as(_m3dstbi__uint32, @bitCast(s.*.img_n))) < s.*.img_y) return _m3dstbi__errstr("Image too large to decode");
if (scan == STBI__SCAN_header) return 1;
} else {
s.*.img_n = 1;
if (((@as(_m3dstbi__uint32, @bitCast(@as(c_int, 1) << @intCast(30))) / s.*.img_x) / @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) < s.*.img_y) return _m3dstbi__errstr("Corrupt PNG");
}
break;
}
},
@as(c_uint, 1347179589) => {
{
if (first != 0) return _m3dstbi__errstr("Corrupt PNG");
if (c.length > @as(_m3dstbi__uint32, @bitCast(@as(c_int, 256) * @as(c_int, 3)))) return _m3dstbi__errstr("Corrupt PNG");
pal_len = c.length / @as(_m3dstbi__uint32, @bitCast(@as(c_int, 3)));
if ((pal_len *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 3)))) != c.length) return _m3dstbi__errstr("Corrupt PNG");
{
i = 0;
while (i < pal_len) : (i +%= 1) {
palette[(i *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 0)))] = _m3dstbi__get8(s);
palette[(i *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1)))] = _m3dstbi__get8(s);
palette[(i *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 2)))] = _m3dstbi__get8(s);
palette[(i *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 3)))] = 255;
}
}
break;
}
},
@as(c_uint, 1951551059) => {
{
if (first != 0) return _m3dstbi__errstr("Corrupt PNG");
if (z.*.idata != null) return _m3dstbi__errstr("Corrupt PNG");
if (pal_img_n != 0) {
if (scan == STBI__SCAN_header) {
s.*.img_n = 4;
return 1;
}
if (pal_len == @as(_m3dstbi__uint32, @bitCast(@as(c_int, 0)))) return _m3dstbi__errstr("Corrupt PNG");
if (c.length > pal_len) return _m3dstbi__errstr("Corrupt PNG");
pal_img_n = 4;
{
i = 0;
while (i < c.length) : (i +%= 1) {
palette[(i *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4)))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 3)))] = _m3dstbi__get8(s);
}
}
} else {
if (!((s.*.img_n & @as(c_int, 1)) != 0)) return _m3dstbi__errstr("Corrupt PNG");
if (c.length != (@as(_m3dstbi__uint32, @bitCast(s.*.img_n)) *% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 2))))) return _m3dstbi__errstr("Corrupt PNG");
has_trans = 1;
if (z.*.depth == @as(c_int, 16)) {
{
k = 0;
while (k < s.*.img_n) : (k += 1) {
tc16[@as(c_uint, @intCast(k))] = @as(_m3dstbi__uint16, @bitCast(@as(c_short, @truncate(_m3dstbi__get16be(s)))));
}
}
} else {
{
k = 0;
while (k < s.*.img_n) : (k += 1) {
tc[@as(c_uint, @intCast(k))] = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, @bitCast(@as(c_uint, @as(u8, @bitCast(@as(i8, @truncate(_m3dstbi__get16be(s) & @as(c_int, 255)))))))) * @as(c_int, @bitCast(@as(c_uint, _m3dstbi__depth_scale_table[@as(c_uint, @intCast(z.*.depth))])))))));
}
}
}
}
break;
}
},
@as(c_uint, 1229209940) => {
{
if (first != 0) return _m3dstbi__errstr("Corrupt PNG");
if ((@as(c_int, @bitCast(@as(c_uint, pal_img_n))) != 0) and !(pal_len != 0)) return _m3dstbi__errstr("Corrupt PNG");
if (scan == STBI__SCAN_header) {
s.*.img_n = @as(c_int, @bitCast(@as(c_uint, pal_img_n)));
return 1;
}
if (@as(c_int, @bitCast(ioff +% c.length)) < @as(c_int, @bitCast(ioff))) return 0;
if ((ioff +% c.length) > idata_limit) {
var idata_limit_old: _m3dstbi__uint32 = idata_limit;
_ = &idata_limit_old;
var p: [*c]u8 = undefined;
_ = &p;
if (idata_limit == @as(_m3dstbi__uint32, @bitCast(@as(c_int, 0)))) {
idata_limit = if (c.length > @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4096)))) c.length else @as(_m3dstbi__uint32, @bitCast(@as(c_int, 4096)));
}
while ((ioff +% c.length) > idata_limit) {
idata_limit *%= @as(_m3dstbi__uint32, @bitCast(@as(c_int, 2)));
}
_ = @sizeOf(_m3dstbi__uint32);
p = @as([*c]u8, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(z.*.idata)), @as(c_ulong, @bitCast(@as(c_ulong, idata_limit)))))));
if (p == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return _m3dstbi__errstr("Out of memory");
z.*.idata = p;
}
if (!(_m3dstbi__getn(s, z.*.idata + ioff, @as(c_int, @bitCast(c.length))) != 0)) return _m3dstbi__errstr("Corrupt PNG");
ioff +%= c.length;
break;
}
},
@as(c_uint, 1229278788) => {
{
var raw_len: _m3dstbi__uint32 = undefined;
_ = &raw_len;
var bpl: _m3dstbi__uint32 = undefined;
_ = &bpl;
if (first != 0) return _m3dstbi__errstr("Corrupt PNG");
if (scan != STBI__SCAN_load) return 1;
if (z.*.idata == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return _m3dstbi__errstr("Corrupt PNG");
bpl = ((s.*.img_x *% @as(_m3dstbi__uint32, @bitCast(z.*.depth))) +% @as(_m3dstbi__uint32, @bitCast(@as(c_int, 7)))) / @as(_m3dstbi__uint32, @bitCast(@as(c_int, 8)));
raw_len = ((bpl *% s.*.img_y) *% @as(_m3dstbi__uint32, @bitCast(s.*.img_n))) +% s.*.img_y;
z.*.expanded = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi_zlib_decode_malloc_guesssize_headerflag(@as([*c]u8, @ptrCast(@alignCast(z.*.idata))), @as(c_int, @bitCast(ioff)), @as(c_int, @bitCast(raw_len)), @as([*c]c_int, @ptrCast(@alignCast(&raw_len))), @as(c_int, 1)))));
if (z.*.expanded == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return 0;
free(@as(?*anyopaque, @ptrCast(z.*.idata)));
z.*.idata = null;
if ((((req_comp == (s.*.img_n + @as(c_int, 1))) and (req_comp != @as(c_int, 3))) and !(pal_img_n != 0)) or (@as(c_int, @bitCast(@as(c_uint, has_trans))) != 0)) {
s.*.img_out_n = s.*.img_n + @as(c_int, 1);
} else {
s.*.img_out_n = s.*.img_n;
}
if (!(_m3dstbi__create_png_image(z, z.*.expanded, raw_len, s.*.img_out_n, z.*.depth, color, interlace) != 0)) return 0;
if (has_trans != 0) {
if (z.*.depth == @as(c_int, 16)) {
if (!(_m3dstbi__compute_transparency16(z, @as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(&tc16))), s.*.img_out_n) != 0)) return 0;
} else {
if (!(_m3dstbi__compute_transparency(z, @as([*c]u8, @ptrCast(@alignCast(&tc))), s.*.img_out_n) != 0)) return 0;
}
}
if (pal_img_n != 0) {
s.*.img_n = @as(c_int, @bitCast(@as(c_uint, pal_img_n)));
s.*.img_out_n = @as(c_int, @bitCast(@as(c_uint, pal_img_n)));
if (req_comp >= @as(c_int, 3)) {
s.*.img_out_n = req_comp;
}
if (!(_m3dstbi__expand_png_palette(z, @as([*c]u8, @ptrCast(@alignCast(&palette))), @as(c_int, @bitCast(pal_len)), s.*.img_out_n) != 0)) return 0;
} else if (has_trans != 0) {
s.*.img_n += 1;
}
free(@as(?*anyopaque, @ptrCast(z.*.expanded)));
z.*.expanded = null;
return 1;
}
},
else => {
if (first != 0) return _m3dstbi__errstr("Corrupt PNG");
if ((c.type & @as(_m3dstbi__uint32, @bitCast(@as(c_int, 1) << @intCast(29)))) == @as(_m3dstbi__uint32, @bitCast(@as(c_int, 0)))) {
return _m3dstbi__errstr("PNG not supported: unknown PNG chunk type");
}
_m3dstbi__skip(s, @as(c_int, @bitCast(c.length)));
break;
},
}
break;
}
_ = _m3dstbi__get32be(s);
}
return 0;
}
pub fn _m3dstbi__do_png(arg_p: [*c]_m3dstbi__png, arg_x: [*c]c_int, arg_y: [*c]c_int, arg_n: [*c]c_int, arg_req_comp: c_int, arg_ri: [*c]_m3dstbi__result_info) callconv(.C) ?*anyopaque {
var p = arg_p;
_ = &p;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var n = arg_n;
_ = &n;
var req_comp = arg_req_comp;
_ = &req_comp;
var ri = arg_ri;
_ = &ri;
var result: ?*anyopaque = @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
_ = &result;
if ((req_comp < @as(c_int, 0)) or (req_comp > @as(c_int, 4))) {
_ = _m3dstbi__errstr("Internal error");
return @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
}
if (_m3dstbi__parse_png_file(p, STBI__SCAN_load, req_comp) != 0) {
if (p.*.depth < @as(c_int, 8)) {
ri.*.bits_per_channel = 8;
} else {
ri.*.bits_per_channel = p.*.depth;
}
result = @as(?*anyopaque, @ptrCast(p.*.out));
p.*.out = null;
if ((req_comp != 0) and (req_comp != p.*.s.*.img_out_n)) {
if (ri.*.bits_per_channel == @as(c_int, 8)) {
result = @as(?*anyopaque, @ptrCast(_m3dstbi__convert_format(@as([*c]u8, @ptrCast(@alignCast(result))), p.*.s.*.img_out_n, req_comp, p.*.s.*.img_x, p.*.s.*.img_y)));
} else {
result = @as(?*anyopaque, @ptrCast(_m3dstbi__convert_format16(@as([*c]_m3dstbi__uint16, @ptrCast(@alignCast(result))), p.*.s.*.img_out_n, req_comp, p.*.s.*.img_x, p.*.s.*.img_y)));
}
p.*.s.*.img_out_n = req_comp;
if (result == @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) return result;
}
x.* = @as(c_int, @bitCast(p.*.s.*.img_x));
y.* = @as(c_int, @bitCast(p.*.s.*.img_y));
if (n != null) {
n.* = p.*.s.*.img_n;
}
}
free(@as(?*anyopaque, @ptrCast(p.*.out)));
p.*.out = null;
free(@as(?*anyopaque, @ptrCast(p.*.expanded)));
p.*.expanded = null;
free(@as(?*anyopaque, @ptrCast(p.*.idata)));
p.*.idata = null;
return result;
}
pub fn _m3dstbi__png_load(arg_s: [*c]_m3dstbi__context, arg_x: [*c]c_int, arg_y: [*c]c_int, arg_comp: [*c]c_int, arg_req_comp: c_int, arg_ri: [*c]_m3dstbi__result_info) callconv(.C) ?*anyopaque {
var s = arg_s;
_ = &s;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var comp = arg_comp;
_ = &comp;
var req_comp = arg_req_comp;
_ = &req_comp;
var ri = arg_ri;
_ = &ri;
var p: _m3dstbi__png = undefined;
_ = &p;
p.s = s;
return _m3dstbi__do_png(&p, x, y, comp, req_comp, ri);
}
pub extern fn _m3dstbi_zlib_compress(data: [*c]u8, data_len: c_int, out_len: [*c]c_int, quality: c_int) [*c]u8;
pub export fn _m3d_gettx(arg_model: [*c]m3d_t, arg_readfilecb: m3dread_t, arg_freecb: m3dfree_t, arg_fn: [*c]u8) M3D_INDEX {
var model = arg_model;
_ = &model;
var readfilecb = arg_readfilecb;
_ = &readfilecb;
var freecb = arg_freecb;
_ = &freecb;
var @"fn" = arg_fn;
_ = &@"fn";
var i: c_uint = undefined;
_ = &i;
var len: c_uint = 0;
_ = &len;
var buff: [*c]u8 = null;
_ = &buff;
var fn2: [*c]u8 = undefined;
_ = &fn2;
var w: c_uint = undefined;
_ = &w;
var h: c_uint = undefined;
_ = &h;
var s: _m3dstbi__context = undefined;
_ = &s;
var ri: _m3dstbi__result_info = undefined;
_ = &ri;
if (!(@"fn" != null) or !(@"fn".* != 0)) return 4294967295;
{
i = 0;
while (i < model.*.numtexture) : (i +%= 1) if (!(strcmp(@"fn", model.*.texture[i].name) != 0)) return i;
}
if (model.*.inlined != null) {
{
i = 0;
while (i < model.*.numinlined) : (i +%= 1) if (!(strcmp(@"fn", model.*.inlined[i].name) != 0)) {
buff = model.*.inlined[i].data;
len = model.*.inlined[i].length;
freecb = null;
break;
};
}
}
if (!(buff != null) and (readfilecb != null)) {
i = @as(c_uint, @bitCast(@as(c_uint, @truncate(strlen(@"fn")))));
if ((i < @as(c_uint, @bitCast(@as(c_int, 5)))) or (@as(c_int, @bitCast(@as(c_uint, @"fn"[i -% @as(c_uint, @bitCast(@as(c_int, 4)))]))) != @as(c_int, '.'))) {
fn2 = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, i +% @as(c_uint, @bitCast(@as(c_int, 5))))))))));
if (!(fn2 != null)) {
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1)))));
return 4294967295;
}
_ = memcpy(@as(?*anyopaque, @ptrCast(fn2)), @as(?*const anyopaque, @ptrCast(@"fn")), @as(c_ulong, @bitCast(@as(c_ulong, i))));
_ = memcpy(@as(?*anyopaque, @ptrCast(fn2 + i)), @as(?*const anyopaque, @ptrCast(".png")), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5)))));
buff = readfilecb.?(fn2, &len);
free(@as(?*anyopaque, @ptrCast(fn2)));
}
if (!(buff != null)) {
buff = readfilecb.?(@"fn", &len);
if (!(buff != null)) return 4294967295;
}
}
i = blk: {
const ref = &model.*.numtexture;
const tmp = ref.*;
ref.* +%= 1;
break :blk tmp;
};
model.*.texture = @as([*c]m3dtx_t, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(model.*.texture)), @as(c_ulong, @bitCast(@as(c_ulong, model.*.numtexture))) *% @sizeOf(m3dtx_t)))));
if (!(model.*.texture != null)) {
if ((buff != null) and (freecb != null)) {
freecb.?(@as(?*anyopaque, @ptrCast(buff)));
}
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1)))));
return 4294967295;
}
model.*.texture[i].name = @"fn";
model.*.texture[i].w = blk: {
const tmp = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, 0)))));
model.*.texture[i].h = tmp;
break :blk tmp;
};
model.*.texture[i].d = null;
if (buff != null) {
if ((((@as(c_int, @bitCast(@as(c_uint, buff[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 137)) and (@as(c_int, @bitCast(@as(c_uint, buff[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'P'))) and (@as(c_int, @bitCast(@as(c_uint, buff[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, 'N'))) and (@as(c_int, @bitCast(@as(c_uint, buff[@as(c_uint, @intCast(@as(c_int, 3)))]))) == @as(c_int, 'G'))) {
s.read_from_callbacks = 0;
s.img_buffer = blk: {
const tmp = buff;
s.img_buffer_original = tmp;
break :blk tmp;
};
s.img_buffer_end = blk: {
const tmp = buff + len;
s.img_buffer_original_end = tmp;
break :blk tmp;
};
w = blk: {
const tmp = blk_1: {
const tmp_2 = @as(c_uint, @bitCast(@as(c_int, 0)));
len = tmp_2;
break :blk_1 tmp_2;
};
h = tmp;
break :blk tmp;
};
ri.bits_per_channel = 8;
model.*.texture[i].d = @as([*c]u8, @ptrCast(@alignCast(_m3dstbi__png_load(&s, @as([*c]c_int, @ptrCast(@alignCast(&w))), @as([*c]c_int, @ptrCast(@alignCast(&h))), @as([*c]c_int, @ptrCast(@alignCast(&len))), @as(c_int, 0), &ri))));
model.*.texture[i].w = @as(u16, @bitCast(@as(c_ushort, @truncate(w))));
model.*.texture[i].h = @as(u16, @bitCast(@as(c_ushort, @truncate(h))));
model.*.texture[i].f = @as(u8, @bitCast(@as(u8, @truncate(len))));
} else {}
if (freecb != null) {
freecb.?(@as(?*anyopaque, @ptrCast(buff)));
}
}
if (!(model.*.texture[i].d != null)) {
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 68)))));
}
return i;
}
pub export fn _m3d_getpr(arg_model: [*c]m3d_t, arg_readfilecb: m3dread_t, arg_freecb: m3dfree_t, arg_fn: [*c]u8) void {
var model = arg_model;
_ = &model;
var readfilecb = arg_readfilecb;
_ = &readfilecb;
var freecb = arg_freecb;
_ = &freecb;
var @"fn" = arg_fn;
_ = &@"fn";
_ = &readfilecb;
_ = &freecb;
_ = &@"fn";
model.*.errcode = @as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 65)))));
}
pub fn _m3d_getidx(arg_data: [*c]u8, arg_type: u8, arg_idx: [*c]M3D_INDEX) callconv(.C) [*c]u8 {
var data = arg_data;
_ = &data;
var @"type" = arg_type;
_ = &@"type";
var idx = arg_idx;
_ = &idx;
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, @"type")))) {
@as(c_int, 1) => {
idx.* = @as(M3D_INDEX, @bitCast(if (@as(c_int, @bitCast(@as(c_uint, data[@as(c_uint, @intCast(@as(c_int, 0)))]))) > @as(c_int, 253)) @as(c_int, @bitCast(@as(c_int, @as(i8, @bitCast(data[@as(c_uint, @intCast(@as(c_int, 0)))]))))) else @as(c_int, @bitCast(@as(c_uint, data[@as(c_uint, @intCast(@as(c_int, 0)))])))));
data += 1;
break;
},
@as(c_int, 2) => {
idx.* = @as(M3D_INDEX, @bitCast(if (@as(c_int, @bitCast(@as(c_uint, @as([*c]u16, @ptrCast(@alignCast(data))).*))) > @as(c_int, 65533)) @as(c_int, @bitCast(@as(c_int, @as([*c]i16, @ptrCast(@alignCast(data))).*))) else @as(c_int, @bitCast(@as(c_uint, @as([*c]u16, @ptrCast(@alignCast(data))).*)))));
data += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
break;
},
@as(c_int, 4) => {
idx.* = @as(M3D_INDEX, @bitCast(@as([*c]i32, @ptrCast(@alignCast(data))).*));
data += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break;
},
else => {},
}
break;
}
return data;
}
pub export fn _m3d_mul(arg_r: [*c]M3D_FLOAT, arg_a: [*c]M3D_FLOAT, arg_b: [*c]M3D_FLOAT) void {
var r = arg_r;
_ = &r;
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
r[@as(c_uint, @intCast(@as(c_int, 0)))] = (((b[@as(c_uint, @intCast(@as(c_int, 0)))] * a[@as(c_uint, @intCast(@as(c_int, 0)))]) + (b[@as(c_uint, @intCast(@as(c_int, 4)))] * a[@as(c_uint, @intCast(@as(c_int, 1)))])) + (b[@as(c_uint, @intCast(@as(c_int, 8)))] * a[@as(c_uint, @intCast(@as(c_int, 2)))])) + (b[@as(c_uint, @intCast(@as(c_int, 12)))] * a[@as(c_uint, @intCast(@as(c_int, 3)))]);
r[@as(c_uint, @intCast(@as(c_int, 1)))] = (((b[@as(c_uint, @intCast(@as(c_int, 1)))] * a[@as(c_uint, @intCast(@as(c_int, 0)))]) + (b[@as(c_uint, @intCast(@as(c_int, 5)))] * a[@as(c_uint, @intCast(@as(c_int, 1)))])) + (b[@as(c_uint, @intCast(@as(c_int, 9)))] * a[@as(c_uint, @intCast(@as(c_int, 2)))])) + (b[@as(c_uint, @intCast(@as(c_int, 13)))] * a[@as(c_uint, @intCast(@as(c_int, 3)))]);
r[@as(c_uint, @intCast(@as(c_int, 2)))] = (((b[@as(c_uint, @intCast(@as(c_int, 2)))] * a[@as(c_uint, @intCast(@as(c_int, 0)))]) + (b[@as(c_uint, @intCast(@as(c_int, 6)))] * a[@as(c_uint, @intCast(@as(c_int, 1)))])) + (b[@as(c_uint, @intCast(@as(c_int, 10)))] * a[@as(c_uint, @intCast(@as(c_int, 2)))])) + (b[@as(c_uint, @intCast(@as(c_int, 14)))] * a[@as(c_uint, @intCast(@as(c_int, 3)))]);
r[@as(c_uint, @intCast(@as(c_int, 3)))] = (((b[@as(c_uint, @intCast(@as(c_int, 3)))] * a[@as(c_uint, @intCast(@as(c_int, 0)))]) + (b[@as(c_uint, @intCast(@as(c_int, 7)))] * a[@as(c_uint, @intCast(@as(c_int, 1)))])) + (b[@as(c_uint, @intCast(@as(c_int, 11)))] * a[@as(c_uint, @intCast(@as(c_int, 2)))])) + (b[@as(c_uint, @intCast(@as(c_int, 15)))] * a[@as(c_uint, @intCast(@as(c_int, 3)))]);
r[@as(c_uint, @intCast(@as(c_int, 4)))] = (((b[@as(c_uint, @intCast(@as(c_int, 0)))] * a[@as(c_uint, @intCast(@as(c_int, 4)))]) + (b[@as(c_uint, @intCast(@as(c_int, 4)))] * a[@as(c_uint, @intCast(@as(c_int, 5)))])) + (b[@as(c_uint, @intCast(@as(c_int, 8)))] * a[@as(c_uint, @intCast(@as(c_int, 6)))])) + (b[@as(c_uint, @intCast(@as(c_int, 12)))] * a[@as(c_uint, @intCast(@as(c_int, 7)))]);
r[@as(c_uint, @intCast(@as(c_int, 5)))] = (((b[@as(c_uint, @intCast(@as(c_int, 1)))] * a[@as(c_uint, @intCast(@as(c_int, 4)))]) + (b[@as(c_uint, @intCast(@as(c_int, 5)))] * a[@as(c_uint, @intCast(@as(c_int, 5)))])) + (b[@as(c_uint, @intCast(@as(c_int, 9)))] * a[@as(c_uint, @intCast(@as(c_int, 6)))])) + (b[@as(c_uint, @intCast(@as(c_int, 13)))] * a[@as(c_uint, @intCast(@as(c_int, 7)))]);
r[@as(c_uint, @intCast(@as(c_int, 6)))] = (((b[@as(c_uint, @intCast(@as(c_int, 2)))] * a[@as(c_uint, @intCast(@as(c_int, 4)))]) + (b[@as(c_uint, @intCast(@as(c_int, 6)))] * a[@as(c_uint, @intCast(@as(c_int, 5)))])) + (b[@as(c_uint, @intCast(@as(c_int, 10)))] * a[@as(c_uint, @intCast(@as(c_int, 6)))])) + (b[@as(c_uint, @intCast(@as(c_int, 14)))] * a[@as(c_uint, @intCast(@as(c_int, 7)))]);
r[@as(c_uint, @intCast(@as(c_int, 7)))] = (((b[@as(c_uint, @intCast(@as(c_int, 3)))] * a[@as(c_uint, @intCast(@as(c_int, 4)))]) + (b[@as(c_uint, @intCast(@as(c_int, 7)))] * a[@as(c_uint, @intCast(@as(c_int, 5)))])) + (b[@as(c_uint, @intCast(@as(c_int, 11)))] * a[@as(c_uint, @intCast(@as(c_int, 6)))])) + (b[@as(c_uint, @intCast(@as(c_int, 15)))] * a[@as(c_uint, @intCast(@as(c_int, 7)))]);
r[@as(c_uint, @intCast(@as(c_int, 8)))] = (((b[@as(c_uint, @intCast(@as(c_int, 0)))] * a[@as(c_uint, @intCast(@as(c_int, 8)))]) + (b[@as(c_uint, @intCast(@as(c_int, 4)))] * a[@as(c_uint, @intCast(@as(c_int, 9)))])) + (b[@as(c_uint, @intCast(@as(c_int, 8)))] * a[@as(c_uint, @intCast(@as(c_int, 10)))])) + (b[@as(c_uint, @intCast(@as(c_int, 12)))] * a[@as(c_uint, @intCast(@as(c_int, 11)))]);
r[@as(c_uint, @intCast(@as(c_int, 9)))] = (((b[@as(c_uint, @intCast(@as(c_int, 1)))] * a[@as(c_uint, @intCast(@as(c_int, 8)))]) + (b[@as(c_uint, @intCast(@as(c_int, 5)))] * a[@as(c_uint, @intCast(@as(c_int, 9)))])) + (b[@as(c_uint, @intCast(@as(c_int, 9)))] * a[@as(c_uint, @intCast(@as(c_int, 10)))])) + (b[@as(c_uint, @intCast(@as(c_int, 13)))] * a[@as(c_uint, @intCast(@as(c_int, 11)))]);
r[@as(c_uint, @intCast(@as(c_int, 10)))] = (((b[@as(c_uint, @intCast(@as(c_int, 2)))] * a[@as(c_uint, @intCast(@as(c_int, 8)))]) + (b[@as(c_uint, @intCast(@as(c_int, 6)))] * a[@as(c_uint, @intCast(@as(c_int, 9)))])) + (b[@as(c_uint, @intCast(@as(c_int, 10)))] * a[@as(c_uint, @intCast(@as(c_int, 10)))])) + (b[@as(c_uint, @intCast(@as(c_int, 14)))] * a[@as(c_uint, @intCast(@as(c_int, 11)))]);
r[@as(c_uint, @intCast(@as(c_int, 11)))] = (((b[@as(c_uint, @intCast(@as(c_int, 3)))] * a[@as(c_uint, @intCast(@as(c_int, 8)))]) + (b[@as(c_uint, @intCast(@as(c_int, 7)))] * a[@as(c_uint, @intCast(@as(c_int, 9)))])) + (b[@as(c_uint, @intCast(@as(c_int, 11)))] * a[@as(c_uint, @intCast(@as(c_int, 10)))])) + (b[@as(c_uint, @intCast(@as(c_int, 15)))] * a[@as(c_uint, @intCast(@as(c_int, 11)))]);
r[@as(c_uint, @intCast(@as(c_int, 12)))] = (((b[@as(c_uint, @intCast(@as(c_int, 0)))] * a[@as(c_uint, @intCast(@as(c_int, 12)))]) + (b[@as(c_uint, @intCast(@as(c_int, 4)))] * a[@as(c_uint, @intCast(@as(c_int, 13)))])) + (b[@as(c_uint, @intCast(@as(c_int, 8)))] * a[@as(c_uint, @intCast(@as(c_int, 14)))])) + (b[@as(c_uint, @intCast(@as(c_int, 12)))] * a[@as(c_uint, @intCast(@as(c_int, 15)))]);
r[@as(c_uint, @intCast(@as(c_int, 13)))] = (((b[@as(c_uint, @intCast(@as(c_int, 1)))] * a[@as(c_uint, @intCast(@as(c_int, 12)))]) + (b[@as(c_uint, @intCast(@as(c_int, 5)))] * a[@as(c_uint, @intCast(@as(c_int, 13)))])) + (b[@as(c_uint, @intCast(@as(c_int, 9)))] * a[@as(c_uint, @intCast(@as(c_int, 14)))])) + (b[@as(c_uint, @intCast(@as(c_int, 13)))] * a[@as(c_uint, @intCast(@as(c_int, 15)))]);
r[@as(c_uint, @intCast(@as(c_int, 14)))] = (((b[@as(c_uint, @intCast(@as(c_int, 2)))] * a[@as(c_uint, @intCast(@as(c_int, 12)))]) + (b[@as(c_uint, @intCast(@as(c_int, 6)))] * a[@as(c_uint, @intCast(@as(c_int, 13)))])) + (b[@as(c_uint, @intCast(@as(c_int, 10)))] * a[@as(c_uint, @intCast(@as(c_int, 14)))])) + (b[@as(c_uint, @intCast(@as(c_int, 14)))] * a[@as(c_uint, @intCast(@as(c_int, 15)))]);
r[@as(c_uint, @intCast(@as(c_int, 15)))] = (((b[@as(c_uint, @intCast(@as(c_int, 3)))] * a[@as(c_uint, @intCast(@as(c_int, 12)))]) + (b[@as(c_uint, @intCast(@as(c_int, 7)))] * a[@as(c_uint, @intCast(@as(c_int, 13)))])) + (b[@as(c_uint, @intCast(@as(c_int, 11)))] * a[@as(c_uint, @intCast(@as(c_int, 14)))])) + (b[@as(c_uint, @intCast(@as(c_int, 15)))] * a[@as(c_uint, @intCast(@as(c_int, 15)))]);
}
pub export fn _m3d_inv(arg_m: [*c]M3D_FLOAT) void {
var m = arg_m;
_ = &m;
var r: [16]M3D_FLOAT = undefined;
_ = &r;
var det: M3D_FLOAT = (((((((((((((((((((((((((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 7)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 11)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 2)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 15)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 4)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 10)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 5)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 14)))])) - (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 8)))]) * m[@as(c_uint, @intCast(@as(c_int, 13)))])) + (((m[@as(c_uint, @intCast(@as(c_int, 3)))] * m[@as(c_uint, @intCast(@as(c_int, 6)))]) * m[@as(c_uint, @intCast(@as(c_int, 9)))]) * m[@as(c_uint, @intCast(@as(c_int, 12)))]);
_ = &det;
if ((det == @as(M3D_FLOAT, @floatCast(0.0))) or (det == @as(M3D_FLOAT, @floatCast(-0.0)))) {
det = @as(M3D_FLOAT, @floatCast(1.0));
} else {
det = @as(M3D_FLOAT, @floatCast(1.0)) / det;
}
r[@as(c_uint, @intCast(@as(c_int, 0)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 5)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 6)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 7)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))));
r[@as(c_uint, @intCast(@as(c_int, 1)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))));
r[@as(c_uint, @intCast(@as(c_int, 2)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))));
r[@as(c_uint, @intCast(@as(c_int, 3)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]))));
r[@as(c_uint, @intCast(@as(c_int, 4)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 4)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 6)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 7)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 5)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 6)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 7)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]))));
r[@as(c_uint, @intCast(@as(c_int, 8)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 4)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 5)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 7)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 9)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 11)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 10)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 15)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 11)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))]) - (m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 7)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 11)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 3)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]))));
r[@as(c_uint, @intCast(@as(c_int, 12)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 4)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 5)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 6)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 13)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 10)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 8)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 9)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 14)))] = -det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 14)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 13)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 12)))]))));
r[@as(c_uint, @intCast(@as(c_int, 15)))] = det * (((m[@as(c_uint, @intCast(@as(c_int, 0)))] * ((m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))]) - (m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]))) + (m[@as(c_uint, @intCast(@as(c_int, 1)))] * ((m[@as(c_uint, @intCast(@as(c_int, 6)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]) - (m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 10)))])))) + (m[@as(c_uint, @intCast(@as(c_int, 2)))] * ((m[@as(c_uint, @intCast(@as(c_int, 4)))] * m[@as(c_uint, @intCast(@as(c_int, 9)))]) - (m[@as(c_uint, @intCast(@as(c_int, 5)))] * m[@as(c_uint, @intCast(@as(c_int, 8)))]))));
_ = memcpy(@as(?*anyopaque, @ptrCast(m)), @as(?*const anyopaque, @ptrCast(&r)), @sizeOf([16]M3D_FLOAT));
}
pub export fn _m3d_mat(arg_r: [*c]M3D_FLOAT, arg_p: [*c]m3dv_t, arg_q: [*c]m3dv_t) void {
var r = arg_r;
_ = &r;
var p = arg_p;
_ = &p;
var q = arg_q;
_ = &q;
if (((((q.*.x == @as(M3D_FLOAT, @floatCast(0.0))) and (q.*.y == @as(M3D_FLOAT, @floatCast(0.0)))) and (q.*.z >= @as(M3D_FLOAT, @floatCast(0.7071065)))) and (q.*.z <= @as(M3D_FLOAT, @floatCast(0.7071075)))) and (q.*.w == @as(M3D_FLOAT, @floatCast(0.0)))) {
r[@as(c_uint, @intCast(@as(c_int, 1)))] = blk: {
const tmp = blk_1: {
const tmp_2 = blk_2: {
const tmp_3 = blk_3: {
const tmp_4 = blk_4: {
const tmp_5 = @as(M3D_FLOAT, @floatCast(0.0));
r[@as(c_uint, @intCast(@as(c_int, 9)))] = tmp_5;
break :blk_4 tmp_5;
};
r[@as(c_uint, @intCast(@as(c_int, 8)))] = tmp_4;
break :blk_3 tmp_4;
};
r[@as(c_uint, @intCast(@as(c_int, 6)))] = tmp_3;
break :blk_2 tmp_3;
};
r[@as(c_uint, @intCast(@as(c_int, 4)))] = tmp_2;
break :blk_1 tmp_2;
};
r[@as(c_uint, @intCast(@as(c_int, 2)))] = tmp;
break :blk tmp;
};
r[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = blk_1: {
const tmp_2 = @as(M3D_FLOAT, @floatCast(-1.0));
r[@as(c_uint, @intCast(@as(c_int, 10)))] = tmp_2;
break :blk_1 tmp_2;
};
r[@as(c_uint, @intCast(@as(c_int, 5)))] = tmp;
break :blk tmp;
};
} else {
r[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 1))) - (@as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.y * q.*.y) + (q.*.z * q.*.z)));
if ((r[@as(c_uint, @intCast(@as(c_int, 0)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 0)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.y) - (q.*.z * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 1)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 1)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 2)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.z) + (q.*.y * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 2)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 2)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 2)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 4)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.y) + (q.*.z * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 4)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 4)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 4)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 5)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 1))) - (@as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.x) + (q.*.z * q.*.z)));
if ((r[@as(c_uint, @intCast(@as(c_int, 5)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 5)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 5)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 6)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.y * q.*.z) - (q.*.x * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 6)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 6)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 6)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 8)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.z) - (q.*.y * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 8)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 8)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 8)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 9)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.y * q.*.z) + (q.*.x * q.*.w));
if ((r[@as(c_uint, @intCast(@as(c_int, 9)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 9)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 9)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
r[@as(c_uint, @intCast(@as(c_int, 10)))] = @as(M3D_FLOAT, @floatFromInt(@as(c_int, 1))) - (@as(M3D_FLOAT, @floatFromInt(@as(c_int, 2))) * ((q.*.x * q.*.x) + (q.*.y * q.*.y)));
if ((r[@as(c_uint, @intCast(@as(c_int, 10)))] > -@as(M3D_FLOAT, @floatCast(0.0000001))) and (r[@as(c_uint, @intCast(@as(c_int, 10)))] < @as(M3D_FLOAT, @floatCast(0.0000001)))) {
r[@as(c_uint, @intCast(@as(c_int, 10)))] = @as(M3D_FLOAT, @floatCast(0.0));
}
}
r[@as(c_uint, @intCast(@as(c_int, 3)))] = p.*.x;
r[@as(c_uint, @intCast(@as(c_int, 7)))] = p.*.y;
r[@as(c_uint, @intCast(@as(c_int, 11)))] = p.*.z;
r[@as(c_uint, @intCast(@as(c_int, 12)))] = 0;
r[@as(c_uint, @intCast(@as(c_int, 13)))] = 0;
r[@as(c_uint, @intCast(@as(c_int, 14)))] = 0;
r[@as(c_uint, @intCast(@as(c_int, 15)))] = 1;
}
pub fn _m3d_rsq(arg_x: M3D_FLOAT) callconv(.C) M3D_FLOAT {
var x = arg_x;
_ = &x;
var x2: f32 = x * 0.5;
_ = &x2;
var i: [*c]u32 = @as([*c]u32, @ptrCast(@alignCast(&x)));
_ = &i;
i.* = @as(u32, @bitCast(@as(c_int, 1597463007))) -% (i.* >> @intCast(1));
return x * (1.5 - ((x2 * x) * x));
}
pub export fn par_shapes_free_mesh(arg_mesh: [*c]par_shapes_mesh) void {
var mesh = arg_mesh;
_ = &mesh;
free(@as(?*anyopaque, @ptrCast(mesh.*.points)));
free(@as(?*anyopaque, @ptrCast(mesh.*.triangles)));
free(@as(?*anyopaque, @ptrCast(mesh.*.normals)));
free(@as(?*anyopaque, @ptrCast(mesh.*.tcoords)));
free(@as(?*anyopaque, @ptrCast(mesh)));
}
pub export fn par_shapes_create_cylinder(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 1))) {
return null;
}
return par_shapes_create_parametric(&par_shapes__cylinder, slices, stacks, null);
}
pub export fn par_shapes_create_cone(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 1))) {
return null;
}
return par_shapes_create_parametric(&par_shapes__cone, slices, stacks, null);
}
pub export fn par_shapes_create_parametric_disk(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
var m: [*c]par_shapes_mesh = par_shapes_create_cone(slices, stacks);
_ = &m;
if (m != null) {
par_shapes_scale(m, 1.0, 1.0, 0.0);
}
return m;
}
pub export fn par_shapes_create_torus(arg_slices: c_int, arg_stacks: c_int, arg_radius: f32) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
var radius = arg_radius;
_ = &radius;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 3))) {
return null;
}
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((@as(f64, @floatCast(radius)) <= 1.0) and (@intFromPtr("Use smaller radius to avoid self-intersection.") != 0)) {} else {
__assert_fail("radius <= 1.0 && \"Use smaller radius to avoid self-intersection.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 395))), "par_shapes_mesh *par_shapes_create_torus(int, int, float)");
};
};
};
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((@as(f64, @floatCast(radius)) >= 0.1) and (@intFromPtr("Use larger radius to avoid self-intersection.") != 0)) {} else {
__assert_fail("radius >= 0.1 && \"Use larger radius to avoid self-intersection.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 396))), "par_shapes_mesh *par_shapes_create_torus(int, int, float)");
};
};
};
var userdata: ?*anyopaque = @as(?*anyopaque, @ptrCast(&radius));
_ = &userdata;
return par_shapes_create_parametric(&par_shapes__torus, slices, stacks, userdata);
}
pub export fn par_shapes_create_parametric_sphere(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 3))) {
return null;
}
var m: [*c]par_shapes_mesh = par_shapes_create_parametric(&par_shapes__sphere, slices, stacks, null);
_ = &m;
par_shapes_remove_degenerate(m, par_shapes__epsilon_degenerate_sphere);
return m;
}
pub export fn par_shapes_create_subdivided_sphere(arg_nsubd: c_int) [*c]par_shapes_mesh {
var nsubd = arg_nsubd;
_ = &nsubd;
var mesh: [*c]par_shapes_mesh = par_shapes_create_icosahedron();
_ = &mesh;
par_shapes_unweld(mesh, @as(c_int, 0) != 0);
free(@as(?*anyopaque, @ptrCast(mesh.*.triangles)));
mesh.*.triangles = null;
while ((blk: {
const ref = &nsubd;
const tmp = ref.*;
ref.* -= 1;
break :blk tmp;
}) != 0) {
par_shapes__subdivide(mesh);
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
par_shapes__normalize3(mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(i * @as(c_int, 3))))));
}
}
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.ntriangles))) *% @sizeOf(u16)))));
{
var i: c_int = 0;
_ = &i;
while (i < (mesh.*.ntriangles * @as(c_int, 3))) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk mesh.*.triangles + @as(usize, @intCast(tmp)) else break :blk mesh.*.triangles - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u16, @bitCast(@as(c_short, @truncate(i))));
}
}
var tmp: [*c]par_shapes_mesh = mesh;
_ = &tmp;
mesh = par_shapes_weld(mesh, @as(f32, @floatCast(0.01)), null);
par_shapes_free_mesh(tmp);
par_shapes_compute_normals(mesh);
return mesh;
}
pub export fn par_shapes_create_klein_bottle(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 3))) {
return null;
}
var mesh: [*c]par_shapes_mesh = par_shapes_create_parametric(&par_shapes__klein, slices, stacks, null);
_ = &mesh;
var face: c_int = 0;
_ = &face;
{
var stack: c_int = 0;
_ = &stack;
while (stack < stacks) : (stack += 1) {
{
var slice: c_int = 0;
_ = &slice;
while (slice < slices) : (_ = blk: {
slice += 1;
break :blk blk_1: {
const ref = &face;
ref.* += @as(c_int, 2);
break :blk_1 ref.*;
};
}) {
if (stack < @divTrunc(@as(c_int, 27) * stacks, @as(c_int, 32))) {
par_shapes_invert(mesh, face, @as(c_int, 2));
}
}
}
}
}
par_shapes__compute_welded_normals(mesh);
return mesh;
}
pub export fn par_shapes_create_trefoil_knot(arg_slices: c_int, arg_stacks: c_int, arg_radius: f32) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
var radius = arg_radius;
_ = &radius;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 3))) {
return null;
}
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((@as(f64, @floatCast(radius)) <= 3.0) and (@intFromPtr("Use smaller radius to avoid self-intersection.") != 0)) {} else {
__assert_fail("radius <= 3.0 && \"Use smaller radius to avoid self-intersection.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 427))), "par_shapes_mesh *par_shapes_create_trefoil_knot(int, int, float)");
};
};
};
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((@as(f64, @floatCast(radius)) >= 0.5) and (@intFromPtr("Use larger radius to avoid self-intersection.") != 0)) {} else {
__assert_fail("radius >= 0.5 && \"Use larger radius to avoid self-intersection.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 428))), "par_shapes_mesh *par_shapes_create_trefoil_knot(int, int, float)");
};
};
};
var userdata: ?*anyopaque = @as(?*anyopaque, @ptrCast(&radius));
_ = &userdata;
return par_shapes_create_parametric(&par_shapes__trefoil, slices, stacks, userdata);
}
pub export fn par_shapes_create_hemisphere(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 3)) or (stacks < @as(c_int, 3))) {
return null;
}
var m: [*c]par_shapes_mesh = par_shapes_create_parametric(&par_shapes__hemisphere, slices, stacks, null);
_ = &m;
par_shapes_remove_degenerate(m, par_shapes__epsilon_degenerate_sphere);
return m;
}
pub export fn par_shapes_create_plane(arg_slices: c_int, arg_stacks: c_int) [*c]par_shapes_mesh {
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
if ((slices < @as(c_int, 1)) or (stacks < @as(c_int, 1))) {
return null;
}
return par_shapes_create_parametric(&par_shapes__plane, slices, stacks, null);
}
pub const par_shapes_fn = ?*const fn ([*c]const f32, [*c]f32, ?*anyopaque) callconv(.C) void;
pub export fn par_shapes_create_parametric(arg_fn: par_shapes_fn, arg_slices: c_int, arg_stacks: c_int, arg_userdata: ?*anyopaque) [*c]par_shapes_mesh {
var @"fn" = arg_fn;
_ = &@"fn";
var slices = arg_slices;
_ = &slices;
var stacks = arg_stacks;
_ = &stacks;
var userdata = arg_userdata;
_ = &userdata;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
mesh.*.npoints = (slices + @as(c_int, 1)) * (stacks + @as(c_int, 1));
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.npoints))) *% @sizeOf(f32), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
var uv: [2]f32 = undefined;
_ = &uv;
var xyz: [3]f32 = undefined;
_ = &xyz;
var points: [*c]f32 = mesh.*.points;
_ = &points;
{
var stack: c_int = 0;
_ = &stack;
while (stack < (stacks + @as(c_int, 1))) : (stack += 1) {
uv[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(f32, @floatFromInt(stack)) / @as(f32, @floatFromInt(stacks));
{
var slice: c_int = 0;
_ = &slice;
while (slice < (slices + @as(c_int, 1))) : (slice += 1) {
uv[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(f32, @floatFromInt(slice)) / @as(f32, @floatFromInt(slices));
@"fn".?(@as([*c]f32, @ptrCast(@alignCast(&uv))), @as([*c]f32, @ptrCast(@alignCast(&xyz))), userdata);
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = xyz[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = xyz[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = xyz[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
}
}
mesh.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * mesh.*.npoints))) *% @sizeOf(f32), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
var uvs: [*c]f32 = mesh.*.tcoords;
_ = &uvs;
{
var stack: c_int = 0;
_ = &stack;
while (stack < (stacks + @as(c_int, 1))) : (stack += 1) {
uv[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(f32, @floatFromInt(stack)) / @as(f32, @floatFromInt(stacks));
{
var slice: c_int = 0;
_ = &slice;
while (slice < (slices + @as(c_int, 1))) : (slice += 1) {
uv[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(f32, @floatFromInt(slice)) / @as(f32, @floatFromInt(slices));
(blk: {
const ref = &uvs;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = uv[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &uvs;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = uv[@as(c_uint, @intCast(@as(c_int, 1)))];
}
}
}
}
mesh.*.ntriangles = (@as(c_int, 2) * slices) * stacks;
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.ntriangles))) *% @sizeOf(u16), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
var v: c_int = 0;
_ = &v;
var face: [*c]u16 = mesh.*.triangles;
_ = &face;
{
var stack: c_int = 0;
_ = &stack;
while (stack < stacks) : (stack += 1) {
{
var slice: c_int = 0;
_ = &slice;
while (slice < slices) : (slice += 1) {
var next: c_int = slice + @as(c_int, 1);
_ = &next;
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + slice) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + next))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + slice))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + slice) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + next) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + next))));
}
}
v += slices + @as(c_int, 1);
}
}
par_shapes__compute_welded_normals(mesh);
return mesh;
}
pub export fn par_shapes_create_icosahedron() [*c]par_shapes_mesh {
const verts = struct {
var static: [36]f32 = [36]f32{
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(1.0)),
@as(f32, @floatCast(0.894)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.447)),
@as(f32, @floatCast(0.276)),
@as(f32, @floatCast(0.851)),
@as(f32, @floatCast(0.447)),
@as(f32, @floatCast(-0.724)),
@as(f32, @floatCast(0.526)),
@as(f32, @floatCast(0.447)),
@as(f32, @floatCast(-0.724)),
@as(f32, @floatCast(-0.526)),
@as(f32, @floatCast(0.447)),
@as(f32, @floatCast(0.276)),
@as(f32, @floatCast(-0.851)),
@as(f32, @floatCast(0.447)),
@as(f32, @floatCast(0.724)),
@as(f32, @floatCast(0.526)),
@as(f32, @floatCast(-0.447)),
@as(f32, @floatCast(-0.276)),
@as(f32, @floatCast(0.851)),
@as(f32, @floatCast(-0.447)),
@as(f32, @floatCast(-0.894)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-0.447)),
@as(f32, @floatCast(-0.276)),
@as(f32, @floatCast(-0.851)),
@as(f32, @floatCast(-0.447)),
@as(f32, @floatCast(0.724)),
@as(f32, @floatCast(-0.526)),
@as(f32, @floatCast(-0.447)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-1.0)),
};
};
_ = &verts;
const faces = struct {
var static: [60]u16 = [60]u16{
0,
1,
2,
0,
2,
3,
0,
3,
4,
0,
4,
5,
0,
5,
1,
7,
6,
11,
8,
7,
11,
9,
8,
11,
10,
9,
11,
6,
10,
11,
6,
2,
1,
7,
3,
2,
8,
4,
3,
9,
5,
4,
10,
1,
5,
6,
7,
2,
7,
8,
3,
8,
9,
4,
9,
10,
5,
10,
6,
1,
};
};
_ = &faces;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
mesh.*.npoints = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([36]f32) / @sizeOf(f32)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc((@sizeOf([36]f32) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.points)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&verts.static))))), @sizeOf([36]f32));
mesh.*.ntriangles = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([60]u16) / @sizeOf(u16)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc((@sizeOf([60]u16) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(u16)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.triangles)), @as(?*const anyopaque, @ptrCast(@as([*c]u16, @ptrCast(@alignCast(&faces.static))))), @sizeOf([60]u16));
return mesh;
}
pub export fn par_shapes_create_dodecahedron() [*c]par_shapes_mesh {
const verts = struct {
var static: [60]f32 = [60]f32{
@as(f32, @floatCast(0.607)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(0.577)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(-0.491)),
@as(f32, @floatCast(0.357)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(-0.491)),
@as(f32, @floatCast(-0.357)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(-0.577)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(0.982)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(0.304)),
@as(f32, @floatCast(0.934)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(0.577)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(-0.577)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(0.304)),
@as(f32, @floatCast(-0.934)),
@as(f32, @floatCast(0.188)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(0.577)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(-0.304)),
@as(f32, @floatCast(0.934)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(-0.982)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(-0.304)),
@as(f32, @floatCast(-0.934)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(0.795)),
@as(f32, @floatCast(-0.577)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(0.491)),
@as(f32, @floatCast(0.357)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(0.577)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(-0.607)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(-0.188)),
@as(f32, @floatCast(-0.577)),
@as(f32, @floatCast(-0.795)),
@as(f32, @floatCast(0.491)),
@as(f32, @floatCast(-0.357)),
@as(f32, @floatCast(-0.795)),
};
};
_ = &verts;
const pentagons = struct {
var static: [60]u16 = [60]u16{
0,
1,
2,
3,
4,
5,
10,
6,
1,
0,
6,
11,
7,
2,
1,
7,
12,
8,
3,
2,
8,
13,
9,
4,
3,
9,
14,
5,
0,
4,
15,
16,
11,
6,
10,
16,
17,
12,
7,
11,
17,
18,
13,
8,
12,
18,
19,
14,
9,
13,
19,
15,
10,
5,
14,
19,
18,
17,
16,
15,
};
};
_ = &pentagons;
var npentagons: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([60]u16) / @sizeOf(u16)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5))))))));
_ = &npentagons;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
var ncorners: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([60]f32) / @sizeOf(f32)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ncorners;
mesh.*.npoints = ncorners;
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.points)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&verts.static))))), @sizeOf([60]f32));
var pentagon: [*c]const u16 = @as([*c]u16, @ptrCast(@alignCast(&pentagons.static)));
_ = &pentagon;
mesh.*.ntriangles = npentagons * @as(c_int, 3);
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
var tris: [*c]u16 = mesh.*.triangles;
_ = &tris;
{
var p: c_int = 0;
_ = &p;
while (p < npentagons) : (_ = blk: {
p += 1;
break :blk blk_1: {
const ref = &pentagon;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 5)))));
break :blk_1 ref.*;
};
}) {
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 2)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 2)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 3)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 3)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = pentagon[@as(c_uint, @intCast(@as(c_int, 4)))];
}
}
return mesh;
}
pub export fn par_shapes_create_octahedron() [*c]par_shapes_mesh {
const verts = struct {
var static: [18]f32 = [18]f32{
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(1.0)),
@as(f32, @floatCast(1.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(1.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-1.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-1.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(-1.0)),
};
};
_ = &verts;
const triangles = struct {
var static: [24]u16 = [24]u16{
0,
1,
2,
0,
2,
3,
0,
3,
4,
0,
4,
1,
2,
1,
5,
3,
2,
5,
4,
3,
5,
1,
4,
5,
};
};
_ = &triangles;
var ntris: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([24]u16) / @sizeOf(u16)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ntris;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
var ncorners: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([18]f32) / @sizeOf(f32)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ncorners;
mesh.*.npoints = ncorners;
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.points)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&verts.static))))), @sizeOf([18]f32));
var triangle: [*c]const u16 = @as([*c]u16, @ptrCast(@alignCast(&triangles.static)));
_ = &triangle;
mesh.*.ntriangles = ntris;
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
var tris: [*c]u16 = mesh.*.triangles;
_ = &tris;
{
var p: c_int = 0;
_ = &p;
while (p < ntris) : (p += 1) {
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
}
}
return mesh;
}
pub export fn par_shapes_create_tetrahedron() [*c]par_shapes_mesh {
const verts = struct {
var static: [12]f32 = [12]f32{
@as(f32, @floatCast(0.0)),
@as(f32, @floatCast(1.333)),
0,
@as(f32, @floatCast(0.943)),
0,
0,
@as(f32, @floatCast(-0.471)),
0,
@as(f32, @floatCast(0.816)),
@as(f32, @floatCast(-0.471)),
0,
@as(f32, @floatCast(-0.816)),
};
};
_ = &verts;
const triangles = struct {
var static: [12]u16 = [12]u16{
2,
1,
0,
3,
2,
0,
1,
3,
0,
1,
2,
3,
};
};
_ = &triangles;
var ntris: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([12]u16) / @sizeOf(u16)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ntris;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
var ncorners: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([12]f32) / @sizeOf(f32)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ncorners;
mesh.*.npoints = ncorners;
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.points)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&verts.static))))), @sizeOf([12]f32));
var triangle: [*c]const u16 = @as([*c]u16, @ptrCast(@alignCast(&triangles.static)));
_ = &triangle;
mesh.*.ntriangles = ntris;
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
var tris: [*c]u16 = mesh.*.triangles;
_ = &tris;
{
var p: c_int = 0;
_ = &p;
while (p < ntris) : (p += 1) {
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &triangle;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
}
}
return mesh;
}
pub export fn par_shapes_create_cube() [*c]par_shapes_mesh {
const verts = struct {
var static: [24]f32 = [24]f32{
0,
0,
0,
0,
1,
0,
1,
1,
0,
1,
0,
0,
0,
0,
1,
0,
1,
1,
1,
1,
1,
1,
0,
1,
};
};
_ = &verts;
const quads = struct {
var static: [24]u16 = [24]u16{
7,
6,
5,
4,
0,
1,
2,
3,
6,
7,
3,
2,
5,
6,
2,
1,
4,
5,
1,
0,
7,
4,
0,
3,
};
};
_ = &quads;
var nquads: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([24]u16) / @sizeOf(u16)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4))))))));
_ = &nquads;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
var ncorners: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate((@sizeOf([24]f32) / @sizeOf(f32)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &ncorners;
mesh.*.npoints = ncorners;
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(mesh.*.points)), @as(?*const anyopaque, @ptrCast(@as([*c]f32, @ptrCast(@alignCast(&verts.static))))), @sizeOf([24]f32));
var quad: [*c]const u16 = @as([*c]u16, @ptrCast(@alignCast(&quads.static)));
_ = &quad;
mesh.*.ntriangles = nquads * @as(c_int, 2);
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
var tris: [*c]u16 = mesh.*.triangles;
_ = &tris;
{
var p: c_int = 0;
_ = &p;
while (p < nquads) : (_ = blk: {
p += 1;
break :blk blk_1: {
const ref = &quad;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 4)))));
break :blk_1 ref.*;
};
}) {
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 2)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 2)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 3)))];
(blk: {
const ref = &tris;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = quad[@as(c_uint, @intCast(@as(c_int, 0)))];
}
}
return mesh;
}
pub export fn par_shapes_create_disk(arg_radius: f32, arg_slices: c_int, arg_center: [*c]const f32, arg_normal: [*c]const f32) [*c]par_shapes_mesh {
var radius = arg_radius;
_ = &radius;
var slices = arg_slices;
_ = &slices;
var center = arg_center;
_ = &center;
var normal = arg_normal;
_ = &normal;
var mesh: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &mesh;
mesh.*.npoints = slices + @as(c_int, 1);
mesh.*.points = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.npoints))) *% @sizeOf(f32)))));
var points: [*c]f32 = mesh.*.points;
_ = &points;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = 0;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = 0;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = 0;
{
var i: c_int = 0;
_ = &i;
while (i < slices) : (i += 1) {
var theta: f32 = @as(f32, @floatCast(((@as(f64, @floatFromInt(i)) * 3.14159265359) * @as(f64, @floatFromInt(@as(c_int, 2)))) / @as(f64, @floatFromInt(slices))));
_ = &theta;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(f32, @floatCast(@as(f64, @floatCast(radius)) * cos(@as(f64, @floatCast(theta)))));
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(f32, @floatCast(@as(f64, @floatCast(radius)) * sin(@as(f64, @floatCast(theta)))));
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = 0;
}
}
var nnormal: [3]f32 = [3]f32{
normal[@as(c_uint, @intCast(@as(c_int, 0)))],
normal[@as(c_uint, @intCast(@as(c_int, 1)))],
normal[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &nnormal;
par_shapes__normalize3(@as([*c]f32, @ptrCast(@alignCast(&nnormal))));
mesh.*.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.npoints))) *% @sizeOf(f32)))));
var norms: [*c]f32 = mesh.*.normals;
_ = &norms;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
(blk: {
const ref = &norms;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = nnormal[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &norms;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = nnormal[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &norms;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = nnormal[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
mesh.*.ntriangles = slices;
mesh.*.triangles = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.ntriangles))) *% @sizeOf(u16)))));
var triangles: [*c]u16 = mesh.*.triangles;
_ = &triangles;
{
var i: c_int = 0;
_ = &i;
while (i < slices) : (i += 1) {
(blk: {
const ref = &triangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = 0;
(blk: {
const ref = &triangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, 1) + i))));
(blk: {
const ref = &triangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, 1) + @import("std").zig.c_translation.signedRemainder(i + @as(c_int, 1), slices)))));
}
}
var k: [3]f32 = [3]f32{
0,
0,
@as(f32, @floatFromInt(-@as(c_int, 1))),
};
_ = &k;
var axis: [3]f32 = undefined;
_ = &axis;
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&axis))), @as([*c]f32, @ptrCast(@alignCast(&nnormal))), @as([*c]f32, @ptrCast(@alignCast(&k))));
par_shapes__normalize3(@as([*c]f32, @ptrCast(@alignCast(&axis))));
par_shapes_rotate(mesh, @as(f32, @floatCast(acos(@as(f64, @floatCast(nnormal[@as(c_uint, @intCast(@as(c_int, 2)))]))))), @as([*c]f32, @ptrCast(@alignCast(&axis))));
par_shapes_translate(mesh, center[@as(c_uint, @intCast(@as(c_int, 0)))], center[@as(c_uint, @intCast(@as(c_int, 1)))], center[@as(c_uint, @intCast(@as(c_int, 2)))]);
return mesh;
}
pub export fn par_shapes_create_empty() [*c]par_shapes_mesh {
return @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
}
pub const struct_osn_context = extern struct {
perm: [*c]i16 = @import("std").mem.zeroes([*c]i16),
permGradIndex3D: [*c]i16 = @import("std").mem.zeroes([*c]i16),
};
pub export fn par_shapes_create_rock(arg_seed: c_int, arg_subd: c_int) [*c]par_shapes_mesh {
var seed = arg_seed;
_ = &seed;
var subd = arg_subd;
_ = &subd;
var mesh: [*c]par_shapes_mesh = par_shapes_create_subdivided_sphere(subd);
_ = &mesh;
var ctx: [*c]struct_osn_context = undefined;
_ = &ctx;
_ = par__simplex_noise(@as(i64, @bitCast(@as(c_long, seed))), &ctx);
{
var p: c_int = 0;
_ = &p;
while (p < mesh.*.npoints) : (p += 1) {
var pt: [*c]f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(p * @as(c_int, 3)))));
_ = &pt;
var a: f32 = @as(f32, @floatCast(0.25));
_ = &a;
var f: f32 = @as(f32, @floatCast(1.0));
_ = &f;
var n: f64 = @as(f64, @floatCast(a)) * par__simplex_noise2(ctx, @as(f64, @floatCast(f * pt[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(f * pt[@as(c_uint, @intCast(@as(c_int, 2)))])));
_ = &n;
a *= @as(f32, @floatCast(0.5));
f *= @as(f32, @floatFromInt(@as(c_int, 2)));
n += @as(f64, @floatCast(a)) * par__simplex_noise2(ctx, @as(f64, @floatCast(f * pt[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(f * pt[@as(c_uint, @intCast(@as(c_int, 2)))])));
pt[@as(c_uint, @intCast(@as(c_int, 0)))] *= @as(f32, @floatCast(@as(f64, @floatFromInt(@as(c_int, 1))) + (@as(f64, @floatFromInt(@as(c_int, 2))) * n)));
pt[@as(c_uint, @intCast(@as(c_int, 1)))] *= @as(f32, @floatCast(@as(f64, @floatFromInt(@as(c_int, 1))) + n));
pt[@as(c_uint, @intCast(@as(c_int, 2)))] *= @as(f32, @floatCast(@as(f64, @floatFromInt(@as(c_int, 1))) + (@as(f64, @floatFromInt(@as(c_int, 2))) * n)));
if (pt[@as(c_uint, @intCast(@as(c_int, 1)))] < @as(f32, @floatFromInt(@as(c_int, 0)))) {
pt[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(f32, @floatCast(-pow(@as(f64, @floatCast(-pt[@as(c_uint, @intCast(@as(c_int, 1)))])), 0.5) / @as(f64, @floatFromInt(@as(c_int, 2)))));
}
}
}
par__simplex_noise_free(ctx);
par_shapes_compute_normals(mesh);
return mesh;
}
pub export fn par_shapes_create_lsystem(arg_text: [*c]const u8, arg_slices: c_int, arg_maxdepth: c_int) [*c]par_shapes_mesh {
var text = arg_text;
_ = &text;
var slices = arg_slices;
_ = &slices;
var maxdepth = arg_maxdepth;
_ = &maxdepth;
var program: [*c]u8 = undefined;
_ = &program;
program = @as([*c]u8, @ptrCast(@alignCast(malloc(strlen(text) +% (@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(u8))))));
_ = strcpy(program, text);
var cmd: [*c]u8 = strtok(program, " ");
_ = &cmd;
var nrules: c_int = 1;
_ = &nrules;
var ncommands: c_int = 0;
_ = &ncommands;
while (cmd != null) {
var arg: [*c]u8 = strtok(null, " ");
_ = &arg;
if (!(arg != null)) {
_ = puts("lsystem error: unexpected end of program.");
break;
}
if (!(strcmp(cmd, "rule") != 0)) {
nrules += 1;
} else {
ncommands += 1;
}
cmd = strtok(null, " ");
}
var rules: [*c]par_shapes__rule = @as([*c]par_shapes__rule, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, nrules))) *% @sizeOf(par_shapes__rule)))));
_ = &rules;
var commands: [*c]par_shapes__command = @as([*c]par_shapes__command, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, ncommands))) *% @sizeOf(par_shapes__command)))));
_ = &commands;
var current_rule: [*c]par_shapes__rule = &rules[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &current_rule;
var current_command: [*c]par_shapes__command = &commands[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &current_command;
current_rule.*.name = "entry";
current_rule.*.weight = 1;
current_rule.*.ncommands = 0;
current_rule.*.commands = current_command;
_ = strcpy(program, text);
cmd = strtok(program, " ");
while (cmd != null) {
var arg: [*c]u8 = strtok(null, " ");
_ = &arg;
if (!(strcmp(cmd, "rule") != 0)) {
current_rule += 1;
var dot: [*c]u8 = strchr(arg, @as(c_int, '.'));
_ = &dot;
if (dot != null) {
current_rule.*.weight = atoi(dot + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))));
dot.* = 0;
} else {
current_rule.*.weight = 1;
}
current_rule.*.name = arg;
current_rule.*.ncommands = 0;
current_rule.*.commands = current_command;
} else {
current_rule.*.ncommands += 1;
current_command.*.cmd = cmd;
current_command.*.arg = arg;
current_command += 1;
}
cmd = strtok(null, " ");
}
var scene: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &scene;
var tube: [*c]par_shapes_mesh = par_shapes_create_cylinder(slices, @as(c_int, 1));
_ = &tube;
var turtle: [*c]par_shapes_mesh = par_shapes__create_turtle();
_ = &turtle;
free(@as(?*anyopaque, @ptrCast(tube.*.normals)));
free(@as(?*anyopaque, @ptrCast(tube.*.tcoords)));
tube.*.normals = null;
tube.*.tcoords = null;
const xaxis: [3]f32 = [3]f32{
1,
0,
0,
};
_ = &xaxis;
const yaxis: [3]f32 = [3]f32{
0,
1,
0,
};
_ = &yaxis;
const zaxis: [3]f32 = [3]f32{
0,
0,
1,
};
_ = &zaxis;
const units: [3]f32 = [3]f32{
1,
1,
1,
};
_ = &units;
var stack: [*c]par_shapes__stackframe = @as([*c]par_shapes__stackframe, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, maxdepth))) *% @sizeOf(par_shapes__stackframe), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &stack;
var stackptr: c_int = 0;
_ = &stackptr;
stack[@as(c_uint, @intCast(@as(c_int, 0)))].orientation = turtle;
stack[@as(c_uint, @intCast(@as(c_int, 0)))].rule = &rules[@as(c_uint, @intCast(@as(c_int, 0)))];
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&stack[@as(c_uint, @intCast(@as(c_int, 0)))].scale))), @as([*c]const f32, @ptrCast(@alignCast(&units))));
while (stackptr >= @as(c_int, 0)) {
var frame: [*c]par_shapes__stackframe = &(blk: {
const tmp = stackptr;
if (tmp >= 0) break :blk stack + @as(usize, @intCast(tmp)) else break :blk stack - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &frame;
var rule: [*c]par_shapes__rule = frame.*.rule;
_ = &rule;
var turtle_1: [*c]par_shapes_mesh = frame.*.orientation;
_ = &turtle_1;
var position: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(&frame.*.position)));
_ = &position;
var scale: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(&frame.*.scale)));
_ = &scale;
if (frame.*.pc >= rule.*.ncommands) {
par_shapes_free_mesh(turtle_1);
stackptr -= 1;
continue;
}
var cmd_2: [*c]par_shapes__command = rule.*.commands + @as(usize, @bitCast(@as(isize, @intCast(blk: {
const ref = &frame.*.pc;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))));
_ = &cmd_2;
var value: f32 = undefined;
_ = &value;
if (!(strcmp(cmd_2.*.cmd, "shape") != 0)) {
var m: [*c]par_shapes_mesh = par_shapes__apply_turtle(tube, turtle_1, position, scale);
_ = &m;
if (!(strcmp(cmd_2.*.arg, "connect") != 0)) {
par_shapes__connect(scene, m, slices);
} else {
par_shapes_merge(scene, m);
}
par_shapes_free_mesh(m);
} else if (!(strcmp(cmd_2.*.cmd, "call") != 0) and (stackptr < (maxdepth - @as(c_int, 1)))) {
rule = par_shapes__pick_rule(cmd_2.*.arg, rules, nrules);
frame = &(blk: {
const tmp = blk_1: {
const ref = &stackptr;
ref.* += 1;
break :blk_1 ref.*;
};
if (tmp >= 0) break :blk stack + @as(usize, @intCast(tmp)) else break :blk stack - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
frame.*.rule = rule;
frame.*.orientation = par_shapes_clone(turtle_1, null);
frame.*.pc = 0;
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&frame.*.scale))), scale);
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&frame.*.position))), position);
continue;
} else {
value = @as(f32, @floatCast(atof(cmd_2.*.arg)));
if (!(strcmp(cmd_2.*.cmd, "rx") != 0)) {
par_shapes_rotate(turtle_1, @as(f32, @floatCast((@as(f64, @floatCast(value)) * 3.14159265359) / 180.0)), @as([*c]const f32, @ptrCast(@alignCast(&xaxis))));
} else if (!(strcmp(cmd_2.*.cmd, "ry") != 0)) {
par_shapes_rotate(turtle_1, @as(f32, @floatCast((@as(f64, @floatCast(value)) * 3.14159265359) / 180.0)), @as([*c]const f32, @ptrCast(@alignCast(&yaxis))));
} else if (!(strcmp(cmd_2.*.cmd, "rz") != 0)) {
par_shapes_rotate(turtle_1, @as(f32, @floatCast((@as(f64, @floatCast(value)) * 3.14159265359) / 180.0)), @as([*c]const f32, @ptrCast(@alignCast(&zaxis))));
} else if (!(strcmp(cmd_2.*.cmd, "tx") != 0)) {
var vec: [3]f32 = [3]f32{
value,
0,
0,
};
_ = &vec;
var t: [3]f32 = [3]f32{
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 0))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
};
_ = &t;
par_shapes__add3(position, @as([*c]f32, @ptrCast(@alignCast(&t))));
} else if (!(strcmp(cmd_2.*.cmd, "ty") != 0)) {
var vec: [3]f32 = [3]f32{
0,
value,
0,
};
_ = &vec;
var t: [3]f32 = [3]f32{
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 0))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
};
_ = &t;
par_shapes__add3(position, @as([*c]f32, @ptrCast(@alignCast(&t))));
} else if (!(strcmp(cmd_2.*.cmd, "tz") != 0)) {
var vec: [3]f32 = [3]f32{
0,
0,
value,
};
_ = &vec;
var t: [3]f32 = [3]f32{
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 0))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
par_shapes__dot3(turtle_1.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))), @as([*c]f32, @ptrCast(@alignCast(&vec)))),
};
_ = &t;
par_shapes__add3(position, @as([*c]f32, @ptrCast(@alignCast(&t))));
} else if (!(strcmp(cmd_2.*.cmd, "sx") != 0)) {
scale[@as(c_uint, @intCast(@as(c_int, 0)))] *= value;
} else if (!(strcmp(cmd_2.*.cmd, "sy") != 0)) {
scale[@as(c_uint, @intCast(@as(c_int, 1)))] *= value;
} else if (!(strcmp(cmd_2.*.cmd, "sz") != 0)) {
scale[@as(c_uint, @intCast(@as(c_int, 2)))] *= value;
} else if (!(strcmp(cmd_2.*.cmd, "sa") != 0)) {
scale[@as(c_uint, @intCast(@as(c_int, 0)))] *= value;
scale[@as(c_uint, @intCast(@as(c_int, 1)))] *= value;
scale[@as(c_uint, @intCast(@as(c_int, 2)))] *= value;
}
}
}
free(@as(?*anyopaque, @ptrCast(stack)));
free(@as(?*anyopaque, @ptrCast(program)));
free(@as(?*anyopaque, @ptrCast(rules)));
free(@as(?*anyopaque, @ptrCast(commands)));
return scene;
}
pub export fn par_shapes_export(arg_mesh: [*c]const par_shapes_mesh, arg_filename: [*c]const u8) void {
var mesh = arg_mesh;
_ = &mesh;
var filename = arg_filename;
_ = &filename;
var objfile: [*c]FILE = fopen(filename, "wt");
_ = &objfile;
var points: [*c]const f32 = mesh.*.points;
_ = &points;
var tcoords: [*c]const f32 = mesh.*.tcoords;
_ = &tcoords;
var norms: [*c]const f32 = mesh.*.normals;
_ = &norms;
var indices: [*c]const u16 = mesh.*.triangles;
_ = &indices;
if ((tcoords != null) and (norms != null)) {
{
var nvert: c_int = 0;
_ = &nvert;
while (nvert < mesh.*.npoints) : (nvert += 1) {
_ = fprintf(objfile, "v %f %f %f\n", @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 2)))])));
_ = fprintf(objfile, "vt %f %f\n", @as(f64, @floatCast(tcoords[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(tcoords[@as(c_uint, @intCast(@as(c_int, 1)))])));
_ = fprintf(objfile, "vn %f %f %f\n", @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 2)))])));
points += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
norms += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
tcoords += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
}
}
{
var nface: c_int = 0;
_ = &nface;
while (nface < mesh.*.ntriangles) : (nface += 1) {
var a: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &a;
var b: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &b;
var c: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &c;
_ = fprintf(objfile, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", a, a, a, b, b, b, c, c, c);
}
}
} else if (norms != null) {
{
var nvert: c_int = 0;
_ = &nvert;
while (nvert < mesh.*.npoints) : (nvert += 1) {
_ = fprintf(objfile, "v %f %f %f\n", @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 2)))])));
_ = fprintf(objfile, "vn %f %f %f\n", @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(norms[@as(c_uint, @intCast(@as(c_int, 2)))])));
points += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
norms += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
}
}
{
var nface: c_int = 0;
_ = &nface;
while (nface < mesh.*.ntriangles) : (nface += 1) {
var a: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &a;
var b: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &b;
var c: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &c;
_ = fprintf(objfile, "f %d//%d %d//%d %d//%d\n", a, a, b, b, c, c);
}
}
} else if (tcoords != null) {
{
var nvert: c_int = 0;
_ = &nvert;
while (nvert < mesh.*.npoints) : (nvert += 1) {
_ = fprintf(objfile, "v %f %f %f\n", @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 2)))])));
_ = fprintf(objfile, "vt %f %f\n", @as(f64, @floatCast(tcoords[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(tcoords[@as(c_uint, @intCast(@as(c_int, 1)))])));
points += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
tcoords += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2)))));
}
}
{
var nface: c_int = 0;
_ = &nface;
while (nface < mesh.*.ntriangles) : (nface += 1) {
var a: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &a;
var b: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &b;
var c: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &c;
_ = fprintf(objfile, "f %d/%d %d/%d %d/%d\n", a, a, b, b, c, c);
}
}
} else {
{
var nvert: c_int = 0;
_ = &nvert;
while (nvert < mesh.*.npoints) : (nvert += 1) {
_ = fprintf(objfile, "v %f %f %f\n", @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 0)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 1)))])), @as(f64, @floatCast(points[@as(c_uint, @intCast(@as(c_int, 2)))])));
points += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
}
}
{
var nface: c_int = 0;
_ = &nface;
while (nface < mesh.*.ntriangles) : (nface += 1) {
var a: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &a;
var b: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &b;
var c: c_int = @as(c_int, 1) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &indices;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)));
_ = &c;
_ = fprintf(objfile, "f %d %d %d\n", a, b, c);
}
}
}
_ = fclose(objfile);
}
pub export fn par_shapes_compute_aabb(arg_m: [*c]const par_shapes_mesh, arg_aabb: [*c]f32) void {
var m = arg_m;
_ = &m;
var aabb = arg_aabb;
_ = &aabb;
var points: [*c]f32 = m.*.points;
_ = &points;
aabb[@as(c_uint, @intCast(@as(c_int, 0)))] = blk: {
const tmp = points[@as(c_uint, @intCast(@as(c_int, 0)))];
aabb[@as(c_uint, @intCast(@as(c_int, 3)))] = tmp;
break :blk tmp;
};
aabb[@as(c_uint, @intCast(@as(c_int, 1)))] = blk: {
const tmp = points[@as(c_uint, @intCast(@as(c_int, 1)))];
aabb[@as(c_uint, @intCast(@as(c_int, 4)))] = tmp;
break :blk tmp;
};
aabb[@as(c_uint, @intCast(@as(c_int, 2)))] = blk: {
const tmp = points[@as(c_uint, @intCast(@as(c_int, 2)))];
aabb[@as(c_uint, @intCast(@as(c_int, 5)))] = tmp;
break :blk tmp;
};
points += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
{
var i: c_int = 1;
_ = &i;
while (i < m.*.npoints) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &points;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
aabb[@as(c_uint, @intCast(@as(c_int, 0)))] = if (points[@as(c_uint, @intCast(@as(c_int, 0)))] > aabb[@as(c_uint, @intCast(@as(c_int, 0)))]) aabb[@as(c_uint, @intCast(@as(c_int, 0)))] else points[@as(c_uint, @intCast(@as(c_int, 0)))];
aabb[@as(c_uint, @intCast(@as(c_int, 1)))] = if (points[@as(c_uint, @intCast(@as(c_int, 1)))] > aabb[@as(c_uint, @intCast(@as(c_int, 1)))]) aabb[@as(c_uint, @intCast(@as(c_int, 1)))] else points[@as(c_uint, @intCast(@as(c_int, 1)))];
aabb[@as(c_uint, @intCast(@as(c_int, 2)))] = if (points[@as(c_uint, @intCast(@as(c_int, 2)))] > aabb[@as(c_uint, @intCast(@as(c_int, 2)))]) aabb[@as(c_uint, @intCast(@as(c_int, 2)))] else points[@as(c_uint, @intCast(@as(c_int, 2)))];
aabb[@as(c_uint, @intCast(@as(c_int, 3)))] = if (points[@as(c_uint, @intCast(@as(c_int, 0)))] > aabb[@as(c_uint, @intCast(@as(c_int, 3)))]) points[@as(c_uint, @intCast(@as(c_int, 0)))] else aabb[@as(c_uint, @intCast(@as(c_int, 3)))];
aabb[@as(c_uint, @intCast(@as(c_int, 4)))] = if (points[@as(c_uint, @intCast(@as(c_int, 1)))] > aabb[@as(c_uint, @intCast(@as(c_int, 4)))]) points[@as(c_uint, @intCast(@as(c_int, 1)))] else aabb[@as(c_uint, @intCast(@as(c_int, 4)))];
aabb[@as(c_uint, @intCast(@as(c_int, 5)))] = if (points[@as(c_uint, @intCast(@as(c_int, 2)))] > aabb[@as(c_uint, @intCast(@as(c_int, 5)))]) points[@as(c_uint, @intCast(@as(c_int, 2)))] else aabb[@as(c_uint, @intCast(@as(c_int, 5)))];
}
}
}
pub export fn par_shapes_clone(arg_mesh: [*c]const par_shapes_mesh, arg_clone: [*c]par_shapes_mesh) [*c]par_shapes_mesh {
var mesh = arg_mesh;
_ = &mesh;
var clone = arg_clone;
_ = &clone;
if (!(clone != null)) {
clone = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
}
clone.*.npoints = mesh.*.npoints;
clone.*.points = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(clone.*.points)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * clone.*.npoints)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(clone.*.points)), @as(?*const anyopaque, @ptrCast(mesh.*.points)), (@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))) *% @as(c_ulong, @bitCast(@as(c_long, clone.*.npoints))));
clone.*.ntriangles = mesh.*.ntriangles;
clone.*.triangles = @as([*c]u16, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(clone.*.triangles)), @sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * clone.*.ntriangles)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(clone.*.triangles)), @as(?*const anyopaque, @ptrCast(mesh.*.triangles)), (@sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))) *% @as(c_ulong, @bitCast(@as(c_long, clone.*.ntriangles))));
if (mesh.*.normals != null) {
clone.*.normals = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(clone.*.normals)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * clone.*.npoints)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(clone.*.normals)), @as(?*const anyopaque, @ptrCast(mesh.*.normals)), (@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))) *% @as(c_ulong, @bitCast(@as(c_long, clone.*.npoints))));
}
if (mesh.*.tcoords != null) {
clone.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(clone.*.tcoords)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * clone.*.npoints)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(clone.*.tcoords)), @as(?*const anyopaque, @ptrCast(mesh.*.tcoords)), (@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2))))) *% @as(c_ulong, @bitCast(@as(c_long, clone.*.npoints))));
}
return clone;
}
pub export fn par_shapes_merge(arg_dst: [*c]par_shapes_mesh, arg_src: [*c]const par_shapes_mesh) void {
var dst = arg_dst;
_ = &dst;
var src = arg_src;
_ = &src;
var offset: u16 = @as(u16, @bitCast(@as(c_short, @truncate(dst.*.npoints))));
_ = &offset;
var npoints: c_int = dst.*.npoints + src.*.npoints;
_ = &npoints;
var vecsize: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
_ = &vecsize;
dst.*.points = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(dst.*.points)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * npoints)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(dst.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * dst.*.npoints)))))), @as(?*const anyopaque, @ptrCast(src.*.points)), @as(c_ulong, @bitCast(@as(c_long, vecsize * src.*.npoints))));
dst.*.npoints = npoints;
if ((src.*.normals != null) or (dst.*.normals != null)) {
dst.*.normals = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(dst.*.normals)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * npoints)))))));
if (src.*.normals != null) {
_ = memcpy(@as(?*anyopaque, @ptrCast(dst.*.normals + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, offset))))))))), @as(?*const anyopaque, @ptrCast(src.*.normals)), @as(c_ulong, @bitCast(@as(c_long, vecsize * src.*.npoints))));
}
}
if ((src.*.tcoords != null) or (dst.*.tcoords != null)) {
var uvsize: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate(@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2))))))));
_ = &uvsize;
dst.*.tcoords = @as([*c]f32, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(dst.*.tcoords)), @sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2) * npoints)))))));
if (src.*.tcoords != null) {
_ = memcpy(@as(?*anyopaque, @ptrCast(dst.*.tcoords + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 2) * @as(c_int, @bitCast(@as(c_uint, offset))))))))), @as(?*const anyopaque, @ptrCast(src.*.tcoords)), @as(c_ulong, @bitCast(@as(c_long, uvsize * src.*.npoints))));
}
}
var ntriangles: c_int = dst.*.ntriangles + src.*.ntriangles;
_ = &ntriangles;
dst.*.triangles = @as([*c]u16, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(dst.*.triangles)), @sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * ntriangles)))))));
var ptriangles: [*c]u16 = dst.*.triangles + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * dst.*.ntriangles))));
_ = &ptriangles;
var striangles: [*c]const u16 = src.*.triangles;
_ = &striangles;
{
var i: c_int = 0;
_ = &i;
while (i < src.*.ntriangles) : (i += 1) {
(blk: {
const ref = &ptriangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, @bitCast(@as(c_uint, offset))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &striangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)))))));
(blk: {
const ref = &ptriangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, @bitCast(@as(c_uint, offset))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &striangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)))))));
(blk: {
const ref = &ptriangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, @bitCast(@as(c_uint, offset))) + @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &striangles;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)))))));
}
}
dst.*.ntriangles = ntriangles;
}
pub export fn par_shapes_translate(arg_m: [*c]par_shapes_mesh, arg_x: f32, arg_y: f32, arg_z: f32) void {
var m = arg_m;
_ = &m;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var points: [*c]f32 = m.*.points;
_ = &points;
{
var i: c_int = 0;
_ = &i;
while (i < m.*.npoints) : (i += 1) {
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* += x;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* += y;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* += z;
}
}
}
pub export fn par_shapes_rotate(arg_mesh: [*c]par_shapes_mesh, arg_radians: f32, arg_axis: [*c]const f32) void {
var mesh = arg_mesh;
_ = &mesh;
var radians = arg_radians;
_ = &radians;
var axis = arg_axis;
_ = &axis;
var s: f32 = sinf(radians);
_ = &s;
var c: f32 = cosf(radians);
_ = &c;
var x: f32 = axis[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &x;
var y: f32 = axis[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &y;
var z: f32 = axis[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &z;
var xy: f32 = x * y;
_ = &xy;
var yz: f32 = y * z;
_ = &yz;
var zx: f32 = z * x;
_ = &zx;
var oneMinusC: f32 = 1.0 - c;
_ = &oneMinusC;
var col0: [3]f32 = [3]f32{
((x * x) * oneMinusC) + c,
(xy * oneMinusC) + (z * s),
(zx * oneMinusC) - (y * s),
};
_ = &col0;
var col1: [3]f32 = [3]f32{
(xy * oneMinusC) - (z * s),
((y * y) * oneMinusC) + c,
(yz * oneMinusC) + (x * s),
};
_ = &col1;
var col2: [3]f32 = [3]f32{
(zx * oneMinusC) + (y * s),
(yz * oneMinusC) - (x * s),
((z * z) * oneMinusC) + c,
};
_ = &col2;
var p: [*c]f32 = mesh.*.points;
_ = &p;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &p;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var x_1: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 0)))] * p[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 0)))] * p[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 0)))] * p[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &x_1;
var y_2: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 1)))] * p[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 1)))] * p[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 1)))] * p[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &y_2;
var z_3: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 2)))] * p[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 2)))] * p[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 2)))] * p[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &z_3;
p[@as(c_uint, @intCast(@as(c_int, 0)))] = x_1;
p[@as(c_uint, @intCast(@as(c_int, 1)))] = y_2;
p[@as(c_uint, @intCast(@as(c_int, 2)))] = z_3;
}
}
var n: [*c]f32 = mesh.*.normals;
_ = &n;
if (n != null) {
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &n;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var x_1: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 0)))] * n[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 0)))] * n[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 0)))] * n[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &x_1;
var y_2: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 1)))] * n[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 1)))] * n[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 1)))] * n[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &y_2;
var z_3: f32 = ((col0[@as(c_uint, @intCast(@as(c_int, 2)))] * n[@as(c_uint, @intCast(@as(c_int, 0)))]) + (col1[@as(c_uint, @intCast(@as(c_int, 2)))] * n[@as(c_uint, @intCast(@as(c_int, 1)))])) + (col2[@as(c_uint, @intCast(@as(c_int, 2)))] * n[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &z_3;
n[@as(c_uint, @intCast(@as(c_int, 0)))] = x_1;
n[@as(c_uint, @intCast(@as(c_int, 1)))] = y_2;
n[@as(c_uint, @intCast(@as(c_int, 2)))] = z_3;
}
}
}
}
pub export fn par_shapes_scale(arg_m: [*c]par_shapes_mesh, arg_x: f32, arg_y: f32, arg_z: f32) void {
var m = arg_m;
_ = &m;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var points: [*c]f32 = m.*.points;
_ = &points;
{
var i: c_int = 0;
_ = &i;
while (i < m.*.npoints) : (i += 1) {
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* *= x;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* *= y;
(blk: {
const ref = &points;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* *= z;
}
}
var n: [*c]f32 = m.*.normals;
_ = &n;
if ((n != null) and !((x == y) and (y == z))) {
var x_zero: bool = x == @as(f32, @floatFromInt(@as(c_int, 0)));
_ = &x_zero;
var y_zero: bool = y == @as(f32, @floatFromInt(@as(c_int, 0)));
_ = &y_zero;
var z_zero: bool = z == @as(f32, @floatFromInt(@as(c_int, 0)));
_ = &z_zero;
if ((!x_zero and !y_zero) and !z_zero) {
x = 1.0 / x;
y = 1.0 / y;
z = 1.0 / z;
} else {
x = @as(f32, @floatFromInt(@intFromBool(((@as(c_int, @intFromBool(x_zero)) != 0) and !y_zero) and !z_zero)));
y = @as(f32, @floatFromInt(@intFromBool(((@as(c_int, @intFromBool(y_zero)) != 0) and !x_zero) and !z_zero)));
z = @as(f32, @floatFromInt(@intFromBool(((@as(c_int, @intFromBool(z_zero)) != 0) and !x_zero) and !y_zero)));
}
{
var i: c_int = 0;
_ = &i;
while (i < m.*.npoints) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &n;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
n[@as(c_uint, @intCast(@as(c_int, 0)))] *= x;
n[@as(c_uint, @intCast(@as(c_int, 1)))] *= y;
n[@as(c_uint, @intCast(@as(c_int, 2)))] *= z;
par_shapes__normalize3(n);
}
}
}
}
pub export fn par_shapes_merge_and_free(arg_dst: [*c]par_shapes_mesh, arg_src: [*c]par_shapes_mesh) void {
var dst = arg_dst;
_ = &dst;
var src = arg_src;
_ = &src;
par_shapes_merge(dst, src);
par_shapes_free_mesh(src);
}
pub export fn par_shapes_invert(arg_m: [*c]par_shapes_mesh, arg_face: c_int, arg_nfaces: c_int) void {
var m = arg_m;
_ = &m;
var face = arg_face;
_ = &face;
var nfaces = arg_nfaces;
_ = &nfaces;
nfaces = if (nfaces != 0) nfaces else m.*.ntriangles;
var tri: [*c]u16 = m.*.triangles + @as(usize, @bitCast(@as(isize, @intCast(face * @as(c_int, 3)))));
_ = &tri;
{
var i: c_int = 0;
_ = &i;
while (i < nfaces) : (i += 1) {
{
var tmp: u16 = tri[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &tmp;
tri[@as(c_uint, @intCast(@as(c_int, 2)))] = tri[@as(c_uint, @intCast(@as(c_int, 0)))];
tri[@as(c_uint, @intCast(@as(c_int, 0)))] = tmp;
}
tri += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
}
}
}
pub export fn par_shapes_remove_degenerate(arg_mesh: [*c]par_shapes_mesh, arg_mintriarea: f32) void {
var mesh = arg_mesh;
_ = &mesh;
var mintriarea = arg_mintriarea;
_ = &mintriarea;
var ntriangles: c_int = 0;
_ = &ntriangles;
var triangles: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
_ = &triangles;
var dst: [*c]u16 = triangles;
_ = &dst;
var src: [*c]const u16 = mesh.*.triangles;
_ = &src;
var next: [3]f32 = undefined;
_ = &next;
var prev: [3]f32 = undefined;
_ = &prev;
var cp: [3]f32 = undefined;
_ = &cp;
var mincplen2: f32 = (mintriarea * @as(f32, @floatFromInt(@as(c_int, 2)))) * (mintriarea * @as(f32, @floatFromInt(@as(c_int, 2))));
_ = &mincplen2;
{
var f: c_int = 0;
_ = &f;
while (f < mesh.*.ntriangles) : (_ = blk: {
f += 1;
break :blk blk_1: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var pa: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 0)))])))))));
_ = &pa;
var pb: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 1)))])))))));
_ = &pb;
var pc: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, src[@as(c_uint, @intCast(@as(c_int, 2)))])))))));
_ = &pc;
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&next))), pb);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&next))), pa);
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pc);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pa);
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&cp))), @as([*c]f32, @ptrCast(@alignCast(&next))), @as([*c]f32, @ptrCast(@alignCast(&prev))));
var cplen2: f32 = par_shapes__dot3(@as([*c]f32, @ptrCast(@alignCast(&cp))), @as([*c]f32, @ptrCast(@alignCast(&cp))));
_ = &cplen2;
if (cplen2 >= mincplen2) {
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 2)))];
ntriangles += 1;
}
}
}
mesh.*.ntriangles = ntriangles;
free(@as(?*anyopaque, @ptrCast(mesh.*.triangles)));
mesh.*.triangles = triangles;
}
pub export fn par_shapes_unweld(arg_mesh: [*c]par_shapes_mesh, arg_create_indices: bool) void {
var mesh = arg_mesh;
_ = &mesh;
var create_indices = arg_create_indices;
_ = &create_indices;
var npoints: c_int = mesh.*.ntriangles * @as(c_int, 3);
_ = &npoints;
var points: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * npoints))) *% @sizeOf(f32)))));
_ = &points;
var dst: [*c]f32 = points;
_ = &dst;
var index_1: [*c]const u16 = mesh.*.triangles;
_ = &index_1;
{
var i: c_int = 0;
_ = &i;
while (i < npoints) : (i += 1) {
var src: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, (blk: {
const ref = &index_1;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*)))))));
_ = &src;
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
free(@as(?*anyopaque, @ptrCast(mesh.*.points)));
mesh.*.points = points;
mesh.*.npoints = npoints;
if (create_indices) {
var tris: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * mesh.*.ntriangles))) *% @sizeOf(u16)))));
_ = &tris;
var index_2: [*c]u16 = tris;
_ = &index_2;
{
var i: c_int = 0;
_ = &i;
while (i < (mesh.*.ntriangles * @as(c_int, 3))) : (i += 1) {
(blk: {
const ref = &index_2;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(i))));
}
}
free(@as(?*anyopaque, @ptrCast(mesh.*.triangles)));
mesh.*.triangles = tris;
}
}
pub export fn par_shapes_weld(arg_mesh: [*c]const par_shapes_mesh, arg_epsilon: f32, arg_weldmap: [*c]u16) [*c]par_shapes_mesh {
var mesh = arg_mesh;
_ = &mesh;
var epsilon = arg_epsilon;
_ = &epsilon;
var weldmap = arg_weldmap;
_ = &weldmap;
var clone: [*c]par_shapes_mesh = par_shapes_clone(mesh, null);
_ = &clone;
var aabb: [6]f32 = undefined;
_ = &aabb;
var gridsize: c_int = 20;
_ = &gridsize;
var maxcell: f32 = @as(f32, @floatFromInt(gridsize - @as(c_int, 1)));
_ = &maxcell;
par_shapes_compute_aabb(clone, @as([*c]f32, @ptrCast(@alignCast(&aabb))));
var scale: [3]f32 = [3]f32{
if (aabb[@as(c_uint, @intCast(@as(c_int, 3)))] == aabb[@as(c_uint, @intCast(@as(c_int, 0)))]) 1.0 else maxcell / (aabb[@as(c_uint, @intCast(@as(c_int, 3)))] - aabb[@as(c_uint, @intCast(@as(c_int, 0)))]),
if (aabb[@as(c_uint, @intCast(@as(c_int, 4)))] == aabb[@as(c_uint, @intCast(@as(c_int, 1)))]) 1.0 else maxcell / (aabb[@as(c_uint, @intCast(@as(c_int, 4)))] - aabb[@as(c_uint, @intCast(@as(c_int, 1)))]),
if (aabb[@as(c_uint, @intCast(@as(c_int, 5)))] == aabb[@as(c_uint, @intCast(@as(c_int, 2)))]) 1.0 else maxcell / (aabb[@as(c_uint, @intCast(@as(c_int, 5)))] - aabb[@as(c_uint, @intCast(@as(c_int, 2)))]),
};
_ = &scale;
par_shapes_translate(clone, -aabb[@as(c_uint, @intCast(@as(c_int, 0)))], -aabb[@as(c_uint, @intCast(@as(c_int, 1)))], -aabb[@as(c_uint, @intCast(@as(c_int, 2)))]);
par_shapes_scale(clone, scale[@as(c_uint, @intCast(@as(c_int, 0)))], scale[@as(c_uint, @intCast(@as(c_int, 1)))], scale[@as(c_uint, @intCast(@as(c_int, 2)))]);
var sortmap: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16)))));
_ = &sortmap;
par_shapes__sort_points(clone, gridsize, sortmap);
var owner: bool = @as(c_int, 0) != 0;
_ = &owner;
if (!(weldmap != null)) {
owner = @as(c_int, 1) != 0;
weldmap = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16)))));
}
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk weldmap + @as(usize, @intCast(tmp)) else break :blk weldmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u16, @bitCast(@as(c_short, @truncate(i))));
}
}
par_shapes__weld_points(clone, gridsize, epsilon, weldmap);
if (owner) {
free(@as(?*anyopaque, @ptrCast(weldmap)));
} else {
var newmap: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16)))));
_ = &newmap;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk newmap + @as(usize, @intCast(tmp)) else break :blk newmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = weldmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk sortmap + @as(usize, @intCast(tmp)) else break :blk sortmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*];
}
}
_ = memcpy(@as(?*anyopaque, @ptrCast(weldmap)), @as(?*const anyopaque, @ptrCast(newmap)), @sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))));
free(@as(?*anyopaque, @ptrCast(newmap)));
}
free(@as(?*anyopaque, @ptrCast(sortmap)));
par_shapes_scale(clone, @as(f32, @floatCast(1.0 / @as(f64, @floatCast(scale[@as(c_uint, @intCast(@as(c_int, 0)))])))), @as(f32, @floatCast(1.0 / @as(f64, @floatCast(scale[@as(c_uint, @intCast(@as(c_int, 1)))])))), @as(f32, @floatCast(1.0 / @as(f64, @floatCast(scale[@as(c_uint, @intCast(@as(c_int, 2)))])))));
par_shapes_translate(clone, aabb[@as(c_uint, @intCast(@as(c_int, 0)))], aabb[@as(c_uint, @intCast(@as(c_int, 1)))], aabb[@as(c_uint, @intCast(@as(c_int, 2)))]);
return clone;
}
pub export fn par_shapes_compute_normals(arg_m: [*c]par_shapes_mesh) void {
var m = arg_m;
_ = &m;
free(@as(?*anyopaque, @ptrCast(m.*.normals)));
m.*.normals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, m.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
var triangle: [*c]const u16 = m.*.triangles;
_ = &triangle;
var next: [3]f32 = undefined;
_ = &next;
var prev: [3]f32 = undefined;
_ = &prev;
var cp: [3]f32 = undefined;
_ = &cp;
{
var f: c_int = 0;
_ = &f;
while (f < m.*.ntriangles) : (_ = blk: {
f += 1;
break :blk blk_1: {
const ref = &triangle;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var pa: [*c]const f32 = m.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 0)))])))))));
_ = &pa;
var pb: [*c]const f32 = m.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 1)))])))))));
_ = &pb;
var pc: [*c]const f32 = m.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 2)))])))))));
_ = &pc;
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&next))), pb);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&next))), pa);
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pc);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pa);
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&cp))), @as([*c]f32, @ptrCast(@alignCast(&next))), @as([*c]f32, @ptrCast(@alignCast(&prev))));
par_shapes__add3(m.*.normals + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 0)))]))))))), @as([*c]f32, @ptrCast(@alignCast(&cp))));
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&next))), pc);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&next))), pb);
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pa);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pb);
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&cp))), @as([*c]f32, @ptrCast(@alignCast(&next))), @as([*c]f32, @ptrCast(@alignCast(&prev))));
par_shapes__add3(m.*.normals + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 1)))]))))))), @as([*c]f32, @ptrCast(@alignCast(&cp))));
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&next))), pa);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&next))), pc);
par_shapes__copy3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pb);
par_shapes__subtract3(@as([*c]f32, @ptrCast(@alignCast(&prev))), pc);
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&cp))), @as([*c]f32, @ptrCast(@alignCast(&next))), @as([*c]f32, @ptrCast(@alignCast(&prev))));
par_shapes__add3(m.*.normals + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, triangle[@as(c_uint, @intCast(@as(c_int, 2)))]))))))), @as([*c]f32, @ptrCast(@alignCast(&cp))));
}
}
var normal: [*c]f32 = m.*.normals;
_ = &normal;
{
var p: c_int = 0;
_ = &p;
while (p < m.*.npoints) : (_ = blk: {
p += 1;
break :blk blk_1: {
const ref = &normal;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
par_shapes__normalize3(normal);
}
}
}
pub export fn par_shapes_set_epsilon_welded_normals(arg_epsilon: f32) void {
var epsilon = arg_epsilon;
_ = &epsilon;
par_shapes__epsilon_welded_normals = epsilon;
}
pub export fn par_shapes_set_epsilon_degenerate_sphere(arg_epsilon: f32) void {
var epsilon = arg_epsilon;
_ = &epsilon;
par_shapes__epsilon_degenerate_sphere = epsilon;
}
pub export fn par_shapes__compute_welded_normals(arg_m: [*c]par_shapes_mesh) void {
var m = arg_m;
_ = &m;
const epsilon: f32 = par_shapes__epsilon_welded_normals;
_ = &epsilon;
m.*.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, m.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
var weldmap: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, m.*.npoints))) *% @sizeOf(u16)))));
_ = &weldmap;
var welded: [*c]par_shapes_mesh = par_shapes_weld(m, epsilon, weldmap);
_ = &welded;
par_shapes_compute_normals(welded);
var pdst: [*c]f32 = m.*.normals;
_ = &pdst;
{
var i: c_int = 0;
_ = &i;
while (i < m.*.npoints) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &pdst;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var d: c_int = @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk weldmap + @as(usize, @intCast(tmp)) else break :blk weldmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)));
_ = &d;
var pnormal: [*c]const f32 = welded.*.normals + @as(usize, @bitCast(@as(isize, @intCast(d * @as(c_int, 3)))));
_ = &pnormal;
pdst[@as(c_uint, @intCast(@as(c_int, 0)))] = pnormal[@as(c_uint, @intCast(@as(c_int, 0)))];
pdst[@as(c_uint, @intCast(@as(c_int, 1)))] = pnormal[@as(c_uint, @intCast(@as(c_int, 1)))];
pdst[@as(c_uint, @intCast(@as(c_int, 2)))] = pnormal[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
free(@as(?*anyopaque, @ptrCast(weldmap)));
par_shapes_free_mesh(welded);
}
pub export fn par_shapes__connect(arg_scene: [*c]par_shapes_mesh, arg_cylinder: [*c]par_shapes_mesh, arg_slices: c_int) void {
var scene = arg_scene;
_ = &scene;
var cylinder = arg_cylinder;
_ = &cylinder;
var slices = arg_slices;
_ = &slices;
var stacks: c_int = 1;
_ = &stacks;
var npoints: c_int = (slices + @as(c_int, 1)) * (stacks + @as(c_int, 1));
_ = &npoints;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((scene.*.npoints >= npoints) and (@intFromPtr("Cannot connect to empty scene.") != 0)) {} else {
__assert_fail("scene->npoints >= npoints && \"Cannot connect to empty scene.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1184))), "void par_shapes__connect(par_shapes_mesh *, par_shapes_mesh *, int)");
};
};
};
npoints = scene.*.npoints + (slices + @as(c_int, 1));
var points: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = &points;
_ = memcpy(@as(?*anyopaque, @ptrCast(points)), @as(?*const anyopaque, @ptrCast(scene.*.points)), (@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, scene.*.npoints)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3)))));
var newpts: [*c]f32 = points + @as(usize, @bitCast(@as(isize, @intCast(scene.*.npoints * @as(c_int, 3)))));
_ = &newpts;
_ = memcpy(@as(?*anyopaque, @ptrCast(newpts)), @as(?*const anyopaque, @ptrCast(cylinder.*.points + @as(usize, @bitCast(@as(isize, @intCast((slices + @as(c_int, 1)) * @as(c_int, 3))))))), (@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_long, slices + @as(c_int, 1))))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3)))));
free(@as(?*anyopaque, @ptrCast(scene.*.points)));
scene.*.points = points;
var ntriangles: c_int = scene.*.ntriangles + ((@as(c_int, 2) * slices) * stacks);
_ = &ntriangles;
var triangles: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
_ = &triangles;
_ = memcpy(@as(?*anyopaque, @ptrCast(triangles)), @as(?*const anyopaque, @ptrCast(scene.*.triangles)), (@sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, scene.*.ntriangles)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3)))));
var v: c_int = scene.*.npoints - (slices + @as(c_int, 1));
_ = &v;
var face: [*c]u16 = triangles + @as(usize, @bitCast(@as(isize, @intCast(scene.*.ntriangles * @as(c_int, 3)))));
_ = &face;
{
var stack: c_int = 0;
_ = &stack;
while (stack < stacks) : (stack += 1) {
{
var slice: c_int = 0;
_ = &slice;
while (slice < slices) : (slice += 1) {
var next: c_int = slice + @as(c_int, 1);
_ = &next;
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + slice) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + next))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + slice))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + slice) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(((v + next) + slices) + @as(c_int, 1)))));
(blk: {
const ref = &face;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(v + next))));
}
}
v += slices + @as(c_int, 1);
}
}
free(@as(?*anyopaque, @ptrCast(scene.*.triangles)));
scene.*.triangles = triangles;
scene.*.npoints = npoints;
scene.*.ntriangles = ntriangles;
}
pub var par_shapes__epsilon_welded_normals: f32 = @as(f32, @floatCast(0.001));
pub var par_shapes__epsilon_degenerate_sphere: f32 = @as(f32, @floatCast(0.0001));
pub fn par_shapes__sphere(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var phi: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 0)))])) * 3.14159265359));
_ = &phi;
var theta: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &theta;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = cosf(theta) * sinf(phi);
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = sinf(theta) * sinf(phi);
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = cosf(phi);
}
pub fn par_shapes__hemisphere(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var phi: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 0)))])) * 3.14159265359));
_ = &phi;
var theta: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))])) * 3.14159265359));
_ = &theta;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = cosf(theta) * sinf(phi);
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = sinf(theta) * sinf(phi);
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = cosf(phi);
}
pub fn par_shapes__plane(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = uv[@as(c_uint, @intCast(@as(c_int, 0)))];
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = uv[@as(c_uint, @intCast(@as(c_int, 1)))];
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = 0;
}
pub fn par_shapes__klein(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var u: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 0)))])) * 3.14159265359));
_ = &u;
var v: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &v;
u = u * @as(f32, @floatFromInt(@as(c_int, 2)));
if (@as(f64, @floatCast(u)) < 3.14159265359) {
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = ((@as(f32, @floatFromInt(@as(c_int, 3))) * cosf(u)) * (@as(f32, @floatFromInt(@as(c_int, 1))) + sinf(u))) + (((@as(f32, @floatFromInt(@as(c_int, 2))) * (@as(f32, @floatFromInt(@as(c_int, 1))) - (cosf(u) / @as(f32, @floatFromInt(@as(c_int, 2)))))) * cosf(u)) * cosf(v));
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = (@as(f32, @floatFromInt(-@as(c_int, 8))) * sinf(u)) - (((@as(f32, @floatFromInt(@as(c_int, 2))) * (@as(f32, @floatFromInt(@as(c_int, 1))) - (cosf(u) / @as(f32, @floatFromInt(@as(c_int, 2)))))) * sinf(u)) * cosf(v));
} else {
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = ((@as(f32, @floatFromInt(@as(c_int, 3))) * cosf(u)) * (@as(f32, @floatFromInt(@as(c_int, 1))) + sinf(u))) + ((@as(f32, @floatFromInt(@as(c_int, 2))) * (@as(f32, @floatFromInt(@as(c_int, 1))) - (cosf(u) / @as(f32, @floatFromInt(@as(c_int, 2)))))) * cosf(@as(f32, @floatCast(@as(f64, @floatCast(v)) + 3.14159265359))));
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = @as(f32, @floatFromInt(-@as(c_int, 8))) * sinf(u);
}
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = (@as(f32, @floatFromInt(-@as(c_int, 2))) * (@as(f32, @floatFromInt(@as(c_int, 1))) - (cosf(u) / @as(f32, @floatFromInt(@as(c_int, 2)))))) * sinf(v);
}
pub fn par_shapes__cylinder(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var theta: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &theta;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = sinf(theta);
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = cosf(theta);
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = uv[@as(c_uint, @intCast(@as(c_int, 0)))];
}
pub fn par_shapes__cone(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var r: f32 = 1.0 - uv[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &r;
var theta: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &theta;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = r * sinf(theta);
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = r * cosf(theta);
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = uv[@as(c_uint, @intCast(@as(c_int, 0)))];
}
pub fn par_shapes__torus(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var major: f32 = 1;
_ = &major;
var minor: f32 = @as([*c]f32, @ptrCast(@alignCast(userdata))).*;
_ = &minor;
var theta: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 0)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &theta;
var phi: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &phi;
var beta: f32 = major + (minor * cosf(phi));
_ = &beta;
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = cosf(theta) * beta;
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = sinf(theta) * beta;
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = sinf(phi) * minor;
}
pub fn par_shapes__trefoil(arg_uv: [*c]const f32, arg_xyz: [*c]f32, arg_userdata: ?*anyopaque) callconv(.C) void {
var uv = arg_uv;
_ = &uv;
var xyz = arg_xyz;
_ = &xyz;
var userdata = arg_userdata;
_ = &userdata;
var minor: f32 = @as([*c]f32, @ptrCast(@alignCast(userdata))).*;
_ = &minor;
const a: f32 = 0.5;
_ = &a;
const b: f32 = 0.30000001192092896;
_ = &b;
const c: f32 = 0.5;
_ = &c;
const d: f32 = minor * 0.10000000149011612;
_ = &d;
const u: f32 = @as(f32, @floatCast(@as(f64, @floatCast((@as(f32, @floatFromInt(@as(c_int, 1))) - uv[@as(c_uint, @intCast(@as(c_int, 0)))]) * @as(f32, @floatFromInt(@as(c_int, 4))))) * 3.14159265359));
_ = &u;
const v: f32 = @as(f32, @floatCast(@as(f64, @floatCast(uv[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(f32, @floatFromInt(@as(c_int, 2))))) * 3.14159265359));
_ = &v;
const r: f32 = @as(f32, @floatCast(@as(f64, @floatCast(a)) + (@as(f64, @floatCast(b)) * cos(@as(f64, @floatCast(1.5 * u))))));
_ = &r;
const x: f32 = @as(f32, @floatCast(@as(f64, @floatCast(r)) * cos(@as(f64, @floatCast(u)))));
_ = &x;
const y: f32 = @as(f32, @floatCast(@as(f64, @floatCast(r)) * sin(@as(f64, @floatCast(u)))));
_ = &y;
const z: f32 = @as(f32, @floatCast(@as(f64, @floatCast(c)) * sin(@as(f64, @floatCast(1.5 * u)))));
_ = &z;
var q: [3]f32 = undefined;
_ = &q;
q[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(f32, @floatCast(((@as(f64, @floatCast(-1.5 * b)) * sin(@as(f64, @floatCast(1.5 * u)))) * cos(@as(f64, @floatCast(u)))) - ((@as(f64, @floatCast(a)) + (@as(f64, @floatCast(b)) * cos(@as(f64, @floatCast(1.5 * u))))) * sin(@as(f64, @floatCast(u))))));
q[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(f32, @floatCast(((@as(f64, @floatCast(-1.5 * b)) * sin(@as(f64, @floatCast(1.5 * u)))) * sin(@as(f64, @floatCast(u)))) + ((@as(f64, @floatCast(a)) + (@as(f64, @floatCast(b)) * cos(@as(f64, @floatCast(1.5 * u))))) * cos(@as(f64, @floatCast(u))))));
q[@as(c_uint, @intCast(@as(c_int, 2)))] = @as(f32, @floatCast(@as(f64, @floatCast(1.5 * c)) * cos(@as(f64, @floatCast(1.5 * u)))));
par_shapes__normalize3(@as([*c]f32, @ptrCast(@alignCast(&q))));
var qvn: [3]f32 = [3]f32{
q[@as(c_uint, @intCast(@as(c_int, 1)))],
-q[@as(c_uint, @intCast(@as(c_int, 0)))],
0,
};
_ = &qvn;
par_shapes__normalize3(@as([*c]f32, @ptrCast(@alignCast(&qvn))));
var ww: [3]f32 = undefined;
_ = &ww;
par_shapes__cross3(@as([*c]f32, @ptrCast(@alignCast(&ww))), @as([*c]f32, @ptrCast(@alignCast(&q))), @as([*c]f32, @ptrCast(@alignCast(&qvn))));
xyz[@as(c_uint, @intCast(@as(c_int, 0)))] = @as(f32, @floatCast(@as(f64, @floatCast(x)) + (@as(f64, @floatCast(d)) * ((@as(f64, @floatCast(qvn[@as(c_uint, @intCast(@as(c_int, 0)))])) * cos(@as(f64, @floatCast(v)))) + (@as(f64, @floatCast(ww[@as(c_uint, @intCast(@as(c_int, 0)))])) * sin(@as(f64, @floatCast(v))))))));
xyz[@as(c_uint, @intCast(@as(c_int, 1)))] = @as(f32, @floatCast(@as(f64, @floatCast(y)) + (@as(f64, @floatCast(d)) * ((@as(f64, @floatCast(qvn[@as(c_uint, @intCast(@as(c_int, 1)))])) * cos(@as(f64, @floatCast(v)))) + (@as(f64, @floatCast(ww[@as(c_uint, @intCast(@as(c_int, 1)))])) * sin(@as(f64, @floatCast(v))))))));
xyz[@as(c_uint, @intCast(@as(c_int, 2)))] = @as(f32, @floatCast(@as(f64, @floatCast(z)) + (@as(f64, @floatCast(d * ww[@as(c_uint, @intCast(@as(c_int, 2)))])) * sin(@as(f64, @floatCast(v))))));
}
pub fn par__simplex_noise(arg_seed: i64, arg_ctx: [*c][*c]struct_osn_context) callconv(.C) c_int {
var seed = arg_seed;
_ = &seed;
var ctx = arg_ctx;
_ = &ctx;
var rc: c_int = undefined;
_ = &rc;
var source: [256]i16 = undefined;
_ = &source;
var i: c_int = undefined;
_ = &i;
var perm: [*c]i16 = undefined;
_ = &perm;
var permGradIndex3D: [*c]i16 = undefined;
_ = &permGradIndex3D;
ctx.* = @as([*c]struct_osn_context, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(struct_osn_context)))));
if (!(ctx.* != null)) {
return -@as(c_int, 12);
}
ctx.*.*.perm = null;
ctx.*.*.permGradIndex3D = null;
rc = allocate_perm(ctx.*, @as(c_int, 256), @as(c_int, 256));
if (rc != 0) {
free(@as(?*anyopaque, @ptrCast(ctx.*)));
return rc;
}
perm = ctx.*.*.perm;
permGradIndex3D = ctx.*.*.permGradIndex3D;
{
i = 0;
while (i < @as(c_int, 256)) : (i += 1) {
source[@as(c_uint, @intCast(i))] = @as(i16, @bitCast(@as(c_short, @truncate(i))));
}
}
seed = @as(i64, @bitCast(@as(c_long, @truncate((@as(c_longlong, @bitCast(@as(c_longlong, seed))) * @as(c_longlong, 6364136223846793005)) + @as(c_longlong, 1442695040888963407)))));
seed = @as(i64, @bitCast(@as(c_long, @truncate((@as(c_longlong, @bitCast(@as(c_longlong, seed))) * @as(c_longlong, 6364136223846793005)) + @as(c_longlong, 1442695040888963407)))));
seed = @as(i64, @bitCast(@as(c_long, @truncate((@as(c_longlong, @bitCast(@as(c_longlong, seed))) * @as(c_longlong, 6364136223846793005)) + @as(c_longlong, 1442695040888963407)))));
{
i = 255;
while (i >= @as(c_int, 0)) : (i -= 1) {
seed = @as(i64, @bitCast(@as(c_long, @truncate((@as(c_longlong, @bitCast(@as(c_longlong, seed))) * @as(c_longlong, 6364136223846793005)) + @as(c_longlong, 1442695040888963407)))));
var r: c_int = @as(c_int, @bitCast(@as(c_int, @truncate(@import("std").zig.c_translation.signedRemainder(seed + @as(i64, @bitCast(@as(c_long, @as(c_int, 31)))), @as(i64, @bitCast(@as(c_long, i + @as(c_int, 1)))))))));
_ = &r;
if (r < @as(c_int, 0)) {
r += i + @as(c_int, 1);
}
(blk: {
const tmp = i;
if (tmp >= 0) break :blk perm + @as(usize, @intCast(tmp)) else break :blk perm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = source[@as(c_uint, @intCast(r))];
(blk: {
const tmp = i;
if (tmp >= 0) break :blk permGradIndex3D + @as(usize, @intCast(tmp)) else break :blk permGradIndex3D - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_short, @bitCast(@as(c_ushort, @truncate((@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk perm + @as(usize, @intCast(tmp)) else break :blk perm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) % ((@sizeOf([72]i8) / @sizeOf(i8)) / @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3)))))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
source[@as(c_uint, @intCast(r))] = source[@as(c_uint, @intCast(i))];
}
}
return 0;
}
pub fn par__simplex_noise_free(arg_ctx: [*c]struct_osn_context) callconv(.C) void {
var ctx = arg_ctx;
_ = &ctx;
if (!(ctx != null)) return;
if (ctx.*.perm != null) {
free(@as(?*anyopaque, @ptrCast(ctx.*.perm)));
ctx.*.perm = null;
}
if (ctx.*.permGradIndex3D != null) {
free(@as(?*anyopaque, @ptrCast(ctx.*.permGradIndex3D)));
ctx.*.permGradIndex3D = null;
}
free(@as(?*anyopaque, @ptrCast(ctx)));
}
pub fn par__simplex_noise2(arg_ctx: [*c]struct_osn_context, arg_x: f64, arg_y: f64) callconv(.C) f64 {
var ctx = arg_ctx;
_ = &ctx;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var stretchOffset: f64 = (x + y) * -0.211324865405187;
_ = &stretchOffset;
var xs: f64 = x + stretchOffset;
_ = &xs;
var ys: f64 = y + stretchOffset;
_ = &ys;
var xsb: c_int = fastFloor(xs);
_ = &xsb;
var ysb: c_int = fastFloor(ys);
_ = &ysb;
var squishOffset: f64 = @as(f64, @floatFromInt(xsb + ysb)) * 0.366025403784439;
_ = &squishOffset;
var xb: f64 = @as(f64, @floatFromInt(xsb)) + squishOffset;
_ = &xb;
var yb: f64 = @as(f64, @floatFromInt(ysb)) + squishOffset;
_ = &yb;
var xins: f64 = xs - @as(f64, @floatFromInt(xsb));
_ = &xins;
var yins: f64 = ys - @as(f64, @floatFromInt(ysb));
_ = &yins;
var inSum: f64 = xins + yins;
_ = &inSum;
var dx0: f64 = x - xb;
_ = &dx0;
var dy0: f64 = y - yb;
_ = &dy0;
var dx_ext: f64 = undefined;
_ = &dx_ext;
var dy_ext: f64 = undefined;
_ = &dy_ext;
var xsv_ext: c_int = undefined;
_ = &xsv_ext;
var ysv_ext: c_int = undefined;
_ = &ysv_ext;
var value: f64 = 0;
_ = &value;
var dx1: f64 = (dx0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - 0.366025403784439;
_ = &dx1;
var dy1: f64 = (dy0 - @as(f64, @floatFromInt(@as(c_int, 0)))) - 0.366025403784439;
_ = &dy1;
var attn1: f64 = (@as(f64, @floatFromInt(@as(c_int, 2))) - (dx1 * dx1)) - (dy1 * dy1);
_ = &attn1;
if (attn1 > @as(f64, @floatFromInt(@as(c_int, 0)))) {
attn1 *= attn1;
value += (attn1 * attn1) * extrapolate2(ctx, xsb + @as(c_int, 1), ysb + @as(c_int, 0), dx1, dy1);
}
var dx2: f64 = (dx0 - @as(f64, @floatFromInt(@as(c_int, 0)))) - 0.366025403784439;
_ = &dx2;
var dy2: f64 = (dy0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - 0.366025403784439;
_ = &dy2;
var attn2: f64 = (@as(f64, @floatFromInt(@as(c_int, 2))) - (dx2 * dx2)) - (dy2 * dy2);
_ = &attn2;
if (attn2 > @as(f64, @floatFromInt(@as(c_int, 0)))) {
attn2 *= attn2;
value += (attn2 * attn2) * extrapolate2(ctx, xsb + @as(c_int, 0), ysb + @as(c_int, 1), dx2, dy2);
}
if (inSum <= @as(f64, @floatFromInt(@as(c_int, 1)))) {
var zins: f64 = @as(f64, @floatFromInt(@as(c_int, 1))) - inSum;
_ = &zins;
if ((zins > xins) or (zins > yins)) {
if (xins > yins) {
xsv_ext = xsb + @as(c_int, 1);
ysv_ext = ysb - @as(c_int, 1);
dx_ext = dx0 - @as(f64, @floatFromInt(@as(c_int, 1)));
dy_ext = dy0 + @as(f64, @floatFromInt(@as(c_int, 1)));
} else {
xsv_ext = xsb - @as(c_int, 1);
ysv_ext = ysb + @as(c_int, 1);
dx_ext = dx0 + @as(f64, @floatFromInt(@as(c_int, 1)));
dy_ext = dy0 - @as(f64, @floatFromInt(@as(c_int, 1)));
}
} else {
xsv_ext = xsb + @as(c_int, 1);
ysv_ext = ysb + @as(c_int, 1);
dx_ext = (dx0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
dy_ext = (dy0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
}
} else {
var zins: f64 = @as(f64, @floatFromInt(@as(c_int, 2))) - inSum;
_ = &zins;
if ((zins < xins) or (zins < yins)) {
if (xins > yins) {
xsv_ext = xsb + @as(c_int, 2);
ysv_ext = ysb + @as(c_int, 0);
dx_ext = (dx0 - @as(f64, @floatFromInt(@as(c_int, 2)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
dy_ext = (dy0 + @as(f64, @floatFromInt(@as(c_int, 0)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
} else {
xsv_ext = xsb + @as(c_int, 0);
ysv_ext = ysb + @as(c_int, 2);
dx_ext = (dx0 + @as(f64, @floatFromInt(@as(c_int, 0)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
dy_ext = (dy0 - @as(f64, @floatFromInt(@as(c_int, 2)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
}
} else {
dx_ext = dx0;
dy_ext = dy0;
xsv_ext = xsb;
ysv_ext = ysb;
}
xsb += @as(c_int, 1);
ysb += @as(c_int, 1);
dx0 = (dx0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
dy0 = (dy0 - @as(f64, @floatFromInt(@as(c_int, 1)))) - (@as(f64, @floatFromInt(@as(c_int, 2))) * 0.366025403784439);
}
var attn0: f64 = (@as(f64, @floatFromInt(@as(c_int, 2))) - (dx0 * dx0)) - (dy0 * dy0);
_ = &attn0;
if (attn0 > @as(f64, @floatFromInt(@as(c_int, 0)))) {
attn0 *= attn0;
value += (attn0 * attn0) * extrapolate2(ctx, xsb, ysb, dx0, dy0);
}
var attn_ext: f64 = (@as(f64, @floatFromInt(@as(c_int, 2))) - (dx_ext * dx_ext)) - (dy_ext * dy_ext);
_ = &attn_ext;
if (attn_ext > @as(f64, @floatFromInt(@as(c_int, 0)))) {
attn_ext *= attn_ext;
value += (attn_ext * attn_ext) * extrapolate2(ctx, xsv_ext, ysv_ext, dx_ext, dy_ext);
}
return value / 47.0;
}
pub fn par_shapes__copy3(arg_result: [*c]f32, arg_a: [*c]const f32) callconv(.C) void {
var result = arg_result;
_ = &result;
var a = arg_a;
_ = &a;
result[@as(c_uint, @intCast(@as(c_int, 0)))] = a[@as(c_uint, @intCast(@as(c_int, 0)))];
result[@as(c_uint, @intCast(@as(c_int, 1)))] = a[@as(c_uint, @intCast(@as(c_int, 1)))];
result[@as(c_uint, @intCast(@as(c_int, 2)))] = a[@as(c_uint, @intCast(@as(c_int, 2)))];
}
pub fn par_shapes__dot3(arg_a: [*c]const f32, arg_b: [*c]const f32) callconv(.C) f32 {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
return ((b[@as(c_uint, @intCast(@as(c_int, 0)))] * a[@as(c_uint, @intCast(@as(c_int, 0)))]) + (b[@as(c_uint, @intCast(@as(c_int, 1)))] * a[@as(c_uint, @intCast(@as(c_int, 1)))])) + (b[@as(c_uint, @intCast(@as(c_int, 2)))] * a[@as(c_uint, @intCast(@as(c_int, 2)))]);
}
pub fn par_shapes__transform3(arg_p: [*c]f32, arg_x: [*c]const f32, arg_y: [*c]const f32, arg_z: [*c]const f32) callconv(.C) void {
var p = arg_p;
_ = &p;
var x = arg_x;
_ = &x;
var y = arg_y;
_ = &y;
var z = arg_z;
_ = &z;
var px: f32 = par_shapes__dot3(p, x);
_ = &px;
var py: f32 = par_shapes__dot3(p, y);
_ = &py;
var pz: f32 = par_shapes__dot3(p, z);
_ = &pz;
p[@as(c_uint, @intCast(@as(c_int, 0)))] = px;
p[@as(c_uint, @intCast(@as(c_int, 1)))] = py;
p[@as(c_uint, @intCast(@as(c_int, 2)))] = pz;
}
pub fn par_shapes__cross3(arg_result: [*c]f32, arg_a: [*c]const f32, arg_b: [*c]const f32) callconv(.C) void {
var result = arg_result;
_ = &result;
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var x: f32 = (a[@as(c_uint, @intCast(@as(c_int, 1)))] * b[@as(c_uint, @intCast(@as(c_int, 2)))]) - (a[@as(c_uint, @intCast(@as(c_int, 2)))] * b[@as(c_uint, @intCast(@as(c_int, 1)))]);
_ = &x;
var y: f32 = (a[@as(c_uint, @intCast(@as(c_int, 2)))] * b[@as(c_uint, @intCast(@as(c_int, 0)))]) - (a[@as(c_uint, @intCast(@as(c_int, 0)))] * b[@as(c_uint, @intCast(@as(c_int, 2)))]);
_ = &y;
var z: f32 = (a[@as(c_uint, @intCast(@as(c_int, 0)))] * b[@as(c_uint, @intCast(@as(c_int, 1)))]) - (a[@as(c_uint, @intCast(@as(c_int, 1)))] * b[@as(c_uint, @intCast(@as(c_int, 0)))]);
_ = &z;
result[@as(c_uint, @intCast(@as(c_int, 0)))] = x;
result[@as(c_uint, @intCast(@as(c_int, 1)))] = y;
result[@as(c_uint, @intCast(@as(c_int, 2)))] = z;
}
pub fn par_shapes__mix3(arg_d: [*c]f32, arg_a: [*c]const f32, arg_b: [*c]const f32, arg_t: f32) callconv(.C) void {
var d = arg_d;
_ = &d;
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var t = arg_t;
_ = &t;
var x: f32 = (b[@as(c_uint, @intCast(@as(c_int, 0)))] * t) + (a[@as(c_uint, @intCast(@as(c_int, 0)))] * (@as(f32, @floatFromInt(@as(c_int, 1))) - t));
_ = &x;
var y: f32 = (b[@as(c_uint, @intCast(@as(c_int, 1)))] * t) + (a[@as(c_uint, @intCast(@as(c_int, 1)))] * (@as(f32, @floatFromInt(@as(c_int, 1))) - t));
_ = &y;
var z: f32 = (b[@as(c_uint, @intCast(@as(c_int, 2)))] * t) + (a[@as(c_uint, @intCast(@as(c_int, 2)))] * (@as(f32, @floatFromInt(@as(c_int, 1))) - t));
_ = &z;
d[@as(c_uint, @intCast(@as(c_int, 0)))] = x;
d[@as(c_uint, @intCast(@as(c_int, 1)))] = y;
d[@as(c_uint, @intCast(@as(c_int, 2)))] = z;
}
pub fn par_shapes__scale3(arg_result: [*c]f32, arg_a: f32) callconv(.C) void {
var result = arg_result;
_ = &result;
var a = arg_a;
_ = &a;
result[@as(c_uint, @intCast(@as(c_int, 0)))] *= a;
result[@as(c_uint, @intCast(@as(c_int, 1)))] *= a;
result[@as(c_uint, @intCast(@as(c_int, 2)))] *= a;
}
pub fn par_shapes__normalize3(arg_v: [*c]f32) callconv(.C) void {
var v = arg_v;
_ = &v;
var lsqr: f32 = @as(f32, @floatCast(sqrt(@as(f64, @floatCast(((v[@as(c_uint, @intCast(@as(c_int, 0)))] * v[@as(c_uint, @intCast(@as(c_int, 0)))]) + (v[@as(c_uint, @intCast(@as(c_int, 1)))] * v[@as(c_uint, @intCast(@as(c_int, 1)))])) + (v[@as(c_uint, @intCast(@as(c_int, 2)))] * v[@as(c_uint, @intCast(@as(c_int, 2)))]))))));
_ = &lsqr;
if (lsqr > @as(f32, @floatFromInt(@as(c_int, 0)))) {
par_shapes__scale3(v, 1.0 / lsqr);
}
}
pub fn par_shapes__subtract3(arg_result: [*c]f32, arg_a: [*c]const f32) callconv(.C) void {
var result = arg_result;
_ = &result;
var a = arg_a;
_ = &a;
result[@as(c_uint, @intCast(@as(c_int, 0)))] -= a[@as(c_uint, @intCast(@as(c_int, 0)))];
result[@as(c_uint, @intCast(@as(c_int, 1)))] -= a[@as(c_uint, @intCast(@as(c_int, 1)))];
result[@as(c_uint, @intCast(@as(c_int, 2)))] -= a[@as(c_uint, @intCast(@as(c_int, 2)))];
}
pub fn par_shapes__add3(arg_result: [*c]f32, arg_a: [*c]const f32) callconv(.C) void {
var result = arg_result;
_ = &result;
var a = arg_a;
_ = &a;
result[@as(c_uint, @intCast(@as(c_int, 0)))] += a[@as(c_uint, @intCast(@as(c_int, 0)))];
result[@as(c_uint, @intCast(@as(c_int, 1)))] += a[@as(c_uint, @intCast(@as(c_int, 1)))];
result[@as(c_uint, @intCast(@as(c_int, 2)))] += a[@as(c_uint, @intCast(@as(c_int, 2)))];
}
pub fn par_shapes__sqrdist3(arg_a: [*c]const f32, arg_b: [*c]const f32) callconv(.C) f32 {
var a = arg_a;
_ = &a;
var b = arg_b;
_ = &b;
var dx: f32 = a[@as(c_uint, @intCast(@as(c_int, 0)))] - b[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &dx;
var dy: f32 = a[@as(c_uint, @intCast(@as(c_int, 1)))] - b[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &dy;
var dz: f32 = a[@as(c_uint, @intCast(@as(c_int, 2)))] - b[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &dz;
return ((dx * dx) + (dy * dy)) + (dz * dz);
}
pub const par_shapes__command = extern struct {
cmd: [*c]u8 = @import("std").mem.zeroes([*c]u8),
arg: [*c]u8 = @import("std").mem.zeroes([*c]u8),
};
pub const par_shapes__rule = extern struct {
name: [*c]const u8 = @import("std").mem.zeroes([*c]const u8),
weight: c_int = @import("std").mem.zeroes(c_int),
ncommands: c_int = @import("std").mem.zeroes(c_int),
commands: [*c]par_shapes__command = @import("std").mem.zeroes([*c]par_shapes__command),
};
pub const par_shapes__stackframe = extern struct {
pc: c_int = @import("std").mem.zeroes(c_int),
position: [3]f32 = @import("std").mem.zeroes([3]f32),
scale: [3]f32 = @import("std").mem.zeroes([3]f32),
orientation: [*c]par_shapes_mesh = @import("std").mem.zeroes([*c]par_shapes_mesh),
rule: [*c]par_shapes__rule = @import("std").mem.zeroes([*c]par_shapes__rule),
};
pub fn par_shapes__pick_rule(arg_name: [*c]const u8, arg_rules: [*c]par_shapes__rule, arg_nrules: c_int) callconv(.C) [*c]par_shapes__rule {
var name = arg_name;
_ = &name;
var rules = arg_rules;
_ = &rules;
var nrules = arg_nrules;
_ = &nrules;
var rule: [*c]par_shapes__rule = null;
_ = &rule;
var total: c_int = 0;
_ = &total;
{
var i: c_int = 0;
_ = &i;
while (i < nrules) : (i += 1) {
rule = rules + @as(usize, @bitCast(@as(isize, @intCast(i))));
if (!(strcmp(rule.*.name, name) != 0)) {
total += rule.*.weight;
}
}
}
var r: f32 = @as(f32, @floatFromInt(rand())) / @as(f32, @floatFromInt(@as(c_int, 2147483647)));
_ = &r;
var t: f32 = 0;
_ = &t;
{
var i: c_int = 0;
_ = &i;
while (i < nrules) : (i += 1) {
rule = rules + @as(usize, @bitCast(@as(isize, @intCast(i))));
if (!(strcmp(rule.*.name, name) != 0)) {
t += @as(f32, @floatFromInt(rule.*.weight)) / @as(f32, @floatFromInt(total));
if (t >= r) {
return rule;
}
}
}
}
return rule;
}
pub fn par_shapes__create_turtle() callconv(.C) [*c]par_shapes_mesh {
const xaxis: [3]f32 = [3]f32{
1,
0,
0,
};
_ = &xaxis;
const yaxis: [3]f32 = [3]f32{
0,
1,
0,
};
_ = &yaxis;
const zaxis: [3]f32 = [3]f32{
0,
0,
1,
};
_ = &zaxis;
var turtle: [*c]par_shapes_mesh = @as([*c]par_shapes_mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1)))) *% @sizeOf(par_shapes_mesh), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &turtle;
turtle.*.npoints = 3;
turtle.*.points = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, turtle.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
par_shapes__copy3(turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 0))))), @as([*c]const f32, @ptrCast(@alignCast(&xaxis))));
par_shapes__copy3(turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3))))), @as([*c]const f32, @ptrCast(@alignCast(&yaxis))));
par_shapes__copy3(turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))), @as([*c]const f32, @ptrCast(@alignCast(&zaxis))));
return turtle;
}
pub fn par_shapes__apply_turtle(arg_mesh: [*c]par_shapes_mesh, arg_turtle: [*c]par_shapes_mesh, arg_pos: [*c]const f32, arg_scale: [*c]const f32) callconv(.C) [*c]par_shapes_mesh {
var mesh = arg_mesh;
_ = &mesh;
var turtle = arg_turtle;
_ = &turtle;
var pos = arg_pos;
_ = &pos;
var scale = arg_scale;
_ = &scale;
var m: [*c]par_shapes_mesh = par_shapes_clone(mesh, null);
_ = &m;
{
var p: c_int = 0;
_ = &p;
while (p < m.*.npoints) : (p += 1) {
var pt: [*c]f32 = m.*.points + @as(usize, @bitCast(@as(isize, @intCast(p * @as(c_int, 3)))));
_ = &pt;
pt[@as(c_uint, @intCast(@as(c_int, 0)))] *= scale[@as(c_uint, @intCast(@as(c_int, 0)))];
pt[@as(c_uint, @intCast(@as(c_int, 1)))] *= scale[@as(c_uint, @intCast(@as(c_int, 1)))];
pt[@as(c_uint, @intCast(@as(c_int, 2)))] *= scale[@as(c_uint, @intCast(@as(c_int, 2)))];
par_shapes__transform3(pt, turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 0))))), turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3))))), turtle.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6))))));
pt[@as(c_uint, @intCast(@as(c_int, 0)))] += pos[@as(c_uint, @intCast(@as(c_int, 0)))];
pt[@as(c_uint, @intCast(@as(c_int, 1)))] += pos[@as(c_uint, @intCast(@as(c_int, 1)))];
pt[@as(c_uint, @intCast(@as(c_int, 2)))] += pos[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
return m;
}
pub fn par_shapes__subdivide(arg_mesh: [*c]par_shapes_mesh) callconv(.C) void {
var mesh = arg_mesh;
_ = &mesh;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if ((mesh.*.npoints == (mesh.*.ntriangles * @as(c_int, 3))) and (@intFromPtr("Must be unwelded.") != 0)) {} else {
__assert_fail("mesh->npoints == mesh->ntriangles * 3 && \"Must be unwelded.\"", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1476))), "void par_shapes__subdivide(par_shapes_mesh *)");
};
};
};
var ntriangles: c_int = mesh.*.ntriangles * @as(c_int, 4);
_ = &ntriangles;
var npoints: c_int = ntriangles * @as(c_int, 3);
_ = &npoints;
var points: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, npoints * @as(c_int, 3)))) *% @sizeOf(f32), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &points;
var dpoint: [*c]f32 = points;
_ = &dpoint;
var spoint: [*c]const f32 = mesh.*.points;
_ = &spoint;
{
var t: c_int = 0;
_ = &t;
while (t < mesh.*.ntriangles) : (_ = blk: {
_ = blk_1: {
t += 1;
break :blk_1 blk_2: {
const ref = &spoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 9)))));
break :blk_2 ref.*;
};
};
break :blk blk_1: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var a: [*c]const f32 = spoint;
_ = &a;
var b: [*c]const f32 = spoint + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
_ = &b;
var c: [*c]const f32 = spoint + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6)))));
_ = &c;
var p0: [*c]const f32 = dpoint;
_ = &p0;
var p1: [*c]const f32 = dpoint + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
_ = &p1;
var p2: [*c]const f32 = dpoint + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 6)))));
_ = &p2;
par_shapes__mix3(dpoint, a, b, @as(f32, @floatCast(0.5)));
par_shapes__mix3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, b, c, @as(f32, @floatCast(0.5)));
par_shapes__mix3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, a, c, @as(f32, @floatCast(0.5)));
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, a);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p0);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p2);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p0);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, b);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p1);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p2);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, p1);
par_shapes__add3(blk: {
const ref = &dpoint;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk ref.*;
}, c);
}
}
free(@as(?*anyopaque, @ptrCast(mesh.*.points)));
mesh.*.points = points;
mesh.*.npoints = npoints;
mesh.*.ntriangles = ntriangles;
}
const struct_unnamed_16 = extern struct {
points: [*c]const f32 = @import("std").mem.zeroes([*c]const f32),
gridsize: c_int = @import("std").mem.zeroes(c_int),
};
pub var par_shapes__sort_context: struct_unnamed_16 = @import("std").mem.zeroes(struct_unnamed_16);
pub fn par_shapes__cmp1(arg_arg0: ?*const anyopaque, arg_arg1: ?*const anyopaque) callconv(.C) c_int {
var arg0 = arg_arg0;
_ = &arg0;
var arg1 = arg_arg1;
_ = &arg1;
const g: c_int = par_shapes__sort_context.gridsize;
_ = &g;
var d0: u16 = @as([*c]const u16, @ptrCast(@alignCast(arg0))).*;
_ = &d0;
var p0: [*c]const f32 = par_shapes__sort_context.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, @bitCast(@as(c_uint, d0))) * @as(c_int, 3)))));
_ = &p0;
var @"i0": c_int = @as(c_int, @intFromFloat(p0[@as(c_uint, @intCast(@as(c_int, 0)))]));
_ = &@"i0";
var j0_1: c_int = @as(c_int, @intFromFloat(p0[@as(c_uint, @intCast(@as(c_int, 1)))]));
_ = &j0_1;
var k0: c_int = @as(c_int, @intFromFloat(p0[@as(c_uint, @intCast(@as(c_int, 2)))]));
_ = &k0;
var index0: c_int = (@"i0" + (g * j0_1)) + ((g * g) * k0);
_ = &index0;
var d1: u16 = @as([*c]const u16, @ptrCast(@alignCast(arg1))).*;
_ = &d1;
var p1: [*c]const f32 = par_shapes__sort_context.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, @bitCast(@as(c_uint, d1))) * @as(c_int, 3)))));
_ = &p1;
var @"i1": c_int = @as(c_int, @intFromFloat(p1[@as(c_uint, @intCast(@as(c_int, 0)))]));
_ = &@"i1";
var j1_2: c_int = @as(c_int, @intFromFloat(p1[@as(c_uint, @intCast(@as(c_int, 1)))]));
_ = &j1_2;
var k1: c_int = @as(c_int, @intFromFloat(p1[@as(c_uint, @intCast(@as(c_int, 2)))]));
_ = &k1;
var index1: c_int = (@"i1" + (g * j1_2)) + ((g * g) * k1);
_ = &index1;
if (index0 < index1) return -@as(c_int, 1);
if (index0 > index1) return 1;
return 0;
}
pub fn par_shapes__sort_points(arg_mesh: [*c]par_shapes_mesh, arg_gridsize: c_int, arg_sortmap: [*c]u16) callconv(.C) void {
var mesh = arg_mesh;
_ = &mesh;
var gridsize = arg_gridsize;
_ = &gridsize;
var sortmap = arg_sortmap;
_ = &sortmap;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk sortmap + @as(usize, @intCast(tmp)) else break :blk sortmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u16, @bitCast(@as(c_short, @truncate(i))));
}
}
par_shapes__sort_context.gridsize = gridsize;
par_shapes__sort_context.points = mesh.*.points;
qsort(@as(?*anyopaque, @ptrCast(sortmap)), @as(usize, @bitCast(@as(c_long, mesh.*.npoints))), @sizeOf(u16), &par_shapes__cmp1);
var newpts: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints * @as(c_int, 3)))) *% @sizeOf(f32)))));
_ = &newpts;
var invmap: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16)))));
_ = &invmap;
var dstpt: [*c]f32 = newpts;
_ = &dstpt;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.npoints) : (i += 1) {
invmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk sortmap + @as(usize, @intCast(tmp)) else break :blk sortmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*] = @as(u16, @bitCast(@as(c_short, @truncate(i))));
var srcpt: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3) * @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk sortmap + @as(usize, @intCast(tmp)) else break :blk sortmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)))))));
_ = &srcpt;
(blk: {
const ref = &dstpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &srcpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &dstpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &srcpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
(blk: {
const ref = &dstpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = (blk: {
const ref = &srcpt;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*;
}
}
free(@as(?*anyopaque, @ptrCast(mesh.*.points)));
mesh.*.points = newpts;
var newinds: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.ntriangles * @as(c_int, 3)))) *% @sizeOf(u16)))));
_ = &newinds;
var dstind: [*c]u16 = newinds;
_ = &dstind;
var srcind: [*c]const u16 = mesh.*.triangles;
_ = &srcind;
{
var i: c_int = 0;
_ = &i;
while (i < (mesh.*.ntriangles * @as(c_int, 3))) : (i += 1) {
(blk: {
const ref = &dstind;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = invmap[(blk: {
const ref = &srcind;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).*];
}
}
free(@as(?*anyopaque, @ptrCast(mesh.*.triangles)));
mesh.*.triangles = newinds;
_ = memcpy(@as(?*anyopaque, @ptrCast(sortmap)), @as(?*const anyopaque, @ptrCast(invmap)), @sizeOf(u16) *% @as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))));
free(@as(?*anyopaque, @ptrCast(invmap)));
}
pub fn par_shapes__weld_points(arg_mesh: [*c]par_shapes_mesh, arg_gridsize: c_int, arg_epsilon: f32, arg_weldmap: [*c]u16) callconv(.C) void {
var mesh = arg_mesh;
_ = &mesh;
var gridsize = arg_gridsize;
_ = &gridsize;
var epsilon = arg_epsilon;
_ = &epsilon;
var weldmap = arg_weldmap;
_ = &weldmap;
var bins: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (gridsize * gridsize) * gridsize))) *% @sizeOf(u16), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))));
_ = &bins;
var prev_binindex: c_int = -@as(c_int, 1);
_ = &prev_binindex;
{
var p: c_int = 0;
_ = &p;
while (p < mesh.*.npoints) : (p += 1) {
var pt: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(p * @as(c_int, 3)))));
_ = &pt;
var i: c_int = @as(c_int, @intFromFloat(pt[@as(c_uint, @intCast(@as(c_int, 0)))]));
_ = &i;
var j: c_int = @as(c_int, @intFromFloat(pt[@as(c_uint, @intCast(@as(c_int, 1)))]));
_ = &j;
var k: c_int = @as(c_int, @intFromFloat(pt[@as(c_uint, @intCast(@as(c_int, 2)))]));
_ = &k;
var this_binindex: c_int = (i + (gridsize * j)) + ((gridsize * gridsize) * k);
_ = &this_binindex;
if (this_binindex != prev_binindex) {
(blk: {
const tmp = this_binindex;
if (tmp >= 0) break :blk bins + @as(usize, @intCast(tmp)) else break :blk bins - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, 1) + p))));
}
prev_binindex = this_binindex;
}
}
var pt: [*c]const f32 = mesh.*.points;
_ = &pt;
var nremoved: c_int = 0;
_ = &nremoved;
{
var p: c_int = 0;
_ = &p;
while (p < mesh.*.npoints) : (_ = blk: {
p += 1;
break :blk blk_1: {
const ref = &pt;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
if (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = p;
if (tmp >= 0) break :blk weldmap + @as(usize, @intCast(tmp)) else break :blk weldmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) != p) {
continue;
}
var nearby: [8]c_int = undefined;
_ = &nearby;
var nbins: c_int = 0;
_ = &nbins;
var minp: [3]c_int = undefined;
_ = &minp;
var maxp: [3]c_int = undefined;
_ = &maxp;
{
var c: c_int = 0;
_ = &c;
while (c < @as(c_int, 3)) : (c += 1) {
minp[@as(c_uint, @intCast(c))] = @as(c_int, @intFromFloat((blk: {
const tmp = c;
if (tmp >= 0) break :blk pt + @as(usize, @intCast(tmp)) else break :blk pt - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* - epsilon));
maxp[@as(c_uint, @intCast(c))] = @as(c_int, @intFromFloat((blk: {
const tmp = c;
if (tmp >= 0) break :blk pt + @as(usize, @intCast(tmp)) else break :blk pt - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* + epsilon));
}
}
{
var i: c_int = minp[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &i;
while (i <= maxp[@as(c_uint, @intCast(@as(c_int, 0)))]) : (i += 1) {
{
var j: c_int = minp[@as(c_uint, @intCast(@as(c_int, 1)))];
_ = &j;
while (j <= maxp[@as(c_uint, @intCast(@as(c_int, 1)))]) : (j += 1) {
{
var k: c_int = minp[@as(c_uint, @intCast(@as(c_int, 2)))];
_ = &k;
while (k <= maxp[@as(c_uint, @intCast(@as(c_int, 2)))]) : (k += 1) {
var binindex: c_int = (i + (gridsize * j)) + ((gridsize * gridsize) * k);
_ = &binindex;
var binvalue: u16 = (bins + @as(usize, @bitCast(@as(isize, @intCast(binindex))))).*;
_ = &binvalue;
if (@as(c_int, @bitCast(@as(c_uint, binvalue))) > @as(c_int, 0)) {
if (nbins == @as(c_int, 8)) {
_ = printf("Epsilon value is too large.\n");
break;
}
nearby[@as(c_uint, @intCast(blk: {
const ref = &nbins;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))] = binindex;
}
}
}
}
}
}
}
{
var b: c_int = 0;
_ = &b;
while (b < nbins) : (b += 1) {
var binindex: c_int = nearby[@as(c_uint, @intCast(b))];
_ = &binindex;
var binvalue: u16 = (blk: {
const tmp = binindex;
if (tmp >= 0) break :blk bins + @as(usize, @intCast(tmp)) else break :blk bins - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &binvalue;
var nindex: u16 = @as(u16, @bitCast(@as(c_short, @truncate(@as(c_int, @bitCast(@as(c_uint, binvalue))) - @as(c_int, 1)))));
_ = &nindex;
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (@as(c_int, @bitCast(@as(c_uint, nindex))) < mesh.*.npoints) {} else {
__assert_fail("nindex < mesh->npoints", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1715))), "void par_shapes__weld_points(par_shapes_mesh *, int, float, uint16_t *)");
};
};
};
while (true) {
if ((@as(c_int, @bitCast(@as(c_uint, nindex))) != p) and (@as(c_int, @bitCast(@as(c_uint, weldmap[nindex]))) == @as(c_int, @bitCast(@as(c_uint, nindex))))) {
var thatpt: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, @bitCast(@as(c_uint, nindex))) * @as(c_int, 3)))));
_ = &thatpt;
var dist2: f32 = par_shapes__sqrdist3(thatpt, pt);
_ = &dist2;
if (dist2 < epsilon) {
weldmap[nindex] = @as(u16, @bitCast(@as(c_short, @truncate(p))));
nremoved += 1;
}
}
if (@as(c_int, @bitCast(@as(c_uint, blk: {
const ref = &nindex;
ref.* +%= 1;
break :blk ref.*;
}))) >= mesh.*.npoints) {
break;
}
var nextpt: [*c]const f32 = mesh.*.points + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, @bitCast(@as(c_uint, nindex))) * @as(c_int, 3)))));
_ = &nextpt;
var i: c_int = @as(c_int, @intFromFloat(nextpt[@as(c_uint, @intCast(@as(c_int, 0)))]));
_ = &i;
var j: c_int = @as(c_int, @intFromFloat(nextpt[@as(c_uint, @intCast(@as(c_int, 1)))]));
_ = &j;
var k: c_int = @as(c_int, @intFromFloat(nextpt[@as(c_uint, @intCast(@as(c_int, 2)))]));
_ = &k;
var nextbinindex: c_int = (i + (gridsize * j)) + ((gridsize * gridsize) * k);
_ = &nextbinindex;
if (nextbinindex != binindex) {
break;
}
}
}
}
}
}
free(@as(?*anyopaque, @ptrCast(bins)));
var npoints: c_int = mesh.*.npoints - nremoved;
_ = &npoints;
var newpts: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3) * npoints))) *% @sizeOf(f32)))));
_ = &newpts;
var dst: [*c]f32 = newpts;
_ = &dst;
var condensed_map: [*c]u16 = @as([*c]u16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16)))));
_ = &condensed_map;
var cmap: [*c]u16 = condensed_map;
_ = &cmap;
var src: [*c]const f32 = mesh.*.points;
_ = &src;
var ci: c_int = 0;
_ = &ci;
{
var p: c_int = 0;
_ = &p;
while (p < mesh.*.npoints) : (_ = blk: {
p += 1;
break :blk blk_1: {
const ref = &src;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
if (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = p;
if (tmp >= 0) break :blk weldmap + @as(usize, @intCast(tmp)) else break :blk weldmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) == p) {
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 0)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 1)))];
(blk: {
const ref = &dst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = src[@as(c_uint, @intCast(@as(c_int, 2)))];
(blk: {
const ref = &cmap;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = @as(u16, @bitCast(@as(c_short, @truncate(blk: {
const ref = &ci;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}))));
} else {
(blk: {
const ref = &cmap;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = condensed_map[(blk: {
const tmp = p;
if (tmp >= 0) break :blk weldmap + @as(usize, @intCast(tmp)) else break :blk weldmap - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*];
}
}
}
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (ci == npoints) {} else {
__assert_fail("ci == npoints", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1765))), "void par_shapes__weld_points(par_shapes_mesh *, int, float, uint16_t *)");
};
};
};
free(@as(?*anyopaque, @ptrCast(mesh.*.points)));
_ = memcpy(@as(?*anyopaque, @ptrCast(weldmap)), @as(?*const anyopaque, @ptrCast(condensed_map)), @as(c_ulong, @bitCast(@as(c_long, mesh.*.npoints))) *% @sizeOf(u16));
free(@as(?*anyopaque, @ptrCast(condensed_map)));
mesh.*.points = newpts;
mesh.*.npoints = npoints;
var tsrc: [*c]const u16 = mesh.*.triangles;
_ = &tsrc;
var tdst: [*c]u16 = mesh.*.triangles;
_ = &tdst;
var ntriangles: c_int = 0;
_ = &ntriangles;
{
var i: c_int = 0;
_ = &i;
while (i < mesh.*.ntriangles) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &tsrc;
ref.* += @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 3)))));
break :blk_1 ref.*;
};
}) {
var a: u16 = weldmap[tsrc[@as(c_uint, @intCast(@as(c_int, 0)))]];
_ = &a;
var b: u16 = weldmap[tsrc[@as(c_uint, @intCast(@as(c_int, 1)))]];
_ = &b;
var c: u16 = weldmap[tsrc[@as(c_uint, @intCast(@as(c_int, 2)))]];
_ = &c;
if (((@as(c_int, @bitCast(@as(c_uint, a))) != @as(c_int, @bitCast(@as(c_uint, b)))) and (@as(c_int, @bitCast(@as(c_uint, a))) != @as(c_int, @bitCast(@as(c_uint, c))))) and (@as(c_int, @bitCast(@as(c_uint, b))) != @as(c_int, @bitCast(@as(c_uint, c))))) {
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (@as(c_int, @bitCast(@as(c_uint, a))) < mesh.*.npoints) {} else {
__assert_fail("a < mesh->npoints", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1781))), "void par_shapes__weld_points(par_shapes_mesh *, int, float, uint16_t *)");
};
};
};
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (@as(c_int, @bitCast(@as(c_uint, b))) < mesh.*.npoints) {} else {
__assert_fail("b < mesh->npoints", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1782))), "void par_shapes__weld_points(par_shapes_mesh *, int, float, uint16_t *)");
};
};
};
_ = blk: {
_ = @sizeOf(c_int);
break :blk blk_1: {
break :blk_1 if (@as(c_int, @bitCast(@as(c_uint, c))) < mesh.*.npoints) {} else {
__assert_fail("c < mesh->npoints", "./external/par_shapes.h", @as(c_uint, @bitCast(@as(c_int, 1783))), "void par_shapes__weld_points(par_shapes_mesh *, int, float, uint16_t *)");
};
};
};
(blk: {
const ref = &tdst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = a;
(blk: {
const ref = &tdst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = b;
(blk: {
const ref = &tdst;
const tmp = ref.*;
ref.* += 1;
break :blk tmp;
}).* = c;
ntriangles += 1;
}
}
}
mesh.*.ntriangles = ntriangles;
}
pub const gradients2D: [16]i8 = [16]i8{
5,
2,
2,
5,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 5))))),
2,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 2))))),
5,
5,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 2))))),
2,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 5))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 5))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 2))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 2))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 5))))),
};
pub const gradients3D: [72]i8 = [72]i8{
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
4,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
11,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
11,
11,
4,
4,
4,
11,
4,
4,
4,
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
11,
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
4,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
11,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
11,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
4,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 4))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 11))))),
};
pub const gradients4D: [256]i8 = [256]i8{
3,
1,
1,
1,
1,
3,
1,
1,
1,
1,
3,
1,
1,
1,
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
3,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
3,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
3,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
3,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
1,
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 1))))),
@as(i8, @bitCast(@as(i8, @truncate(-@as(c_int, 3))))),
};
pub fn extrapolate2(arg_ctx: [*c]struct_osn_context, arg_xsb: c_int, arg_ysb: c_int, arg_dx: f64, arg_dy: f64) callconv(.C) f64 {
var ctx = arg_ctx;
_ = &ctx;
var xsb = arg_xsb;
_ = &xsb;
var ysb = arg_ysb;
_ = &ysb;
var dx = arg_dx;
_ = &dx;
var dy = arg_dy;
_ = &dy;
var perm: [*c]i16 = ctx.*.perm;
_ = &perm;
var index_1: c_int = @as(c_int, @bitCast(@as(c_int, (blk: {
const tmp = (@as(c_int, @bitCast(@as(c_int, (blk_1: {
const tmp_2 = xsb & @as(c_int, 255);
if (tmp_2 >= 0) break :blk_1 perm + @as(usize, @intCast(tmp_2)) else break :blk_1 perm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*))) + ysb) & @as(c_int, 255);
if (tmp >= 0) break :blk perm + @as(usize, @intCast(tmp)) else break :blk perm - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) & @as(c_int, 14);
_ = &index_1;
return (@as(f64, @floatFromInt(@as(c_int, @bitCast(@as(c_int, gradients2D[@as(c_uint, @intCast(index_1))]))))) * dx) + (@as(f64, @floatFromInt(@as(c_int, @bitCast(@as(c_int, gradients2D[@as(c_uint, @intCast(index_1 + @as(c_int, 1)))]))))) * dy);
}
pub fn fastFloor(arg_x: f64) callconv(.C) c_int {
var x = arg_x;
_ = &x;
var xi: c_int = @as(c_int, @intFromFloat(x));
_ = &xi;
return if (x < @as(f64, @floatFromInt(xi))) xi - @as(c_int, 1) else xi;
}
pub fn allocate_perm(arg_ctx: [*c]struct_osn_context, arg_nperm: c_int, arg_ngrad: c_int) callconv(.C) c_int {
var ctx = arg_ctx;
_ = &ctx;
var nperm = arg_nperm;
_ = &nperm;
var ngrad = arg_ngrad;
_ = &ngrad;
free(@as(?*anyopaque, @ptrCast(ctx.*.perm)));
free(@as(?*anyopaque, @ptrCast(ctx.*.permGradIndex3D)));
ctx.*.perm = @as([*c]i16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, nperm))) *% @sizeOf(i16)))));
if (!(ctx.*.perm != null)) {
return -@as(c_int, 12);
}
ctx.*.permGradIndex3D = @as([*c]i16, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, ngrad))) *% @sizeOf(i16)))));
if (!(ctx.*.permGradIndex3D != null)) {
free(@as(?*anyopaque, @ptrCast(ctx.*.perm)));
return -@as(c_int, 12);
}
return 0;
}
pub const useconds_t = __useconds_t;
pub const socklen_t = __socklen_t;
pub extern fn access(__name: [*c]const u8, __type: c_int) c_int;
pub extern fn faccessat(__fd: c_int, __file: [*c]const u8, __type: c_int, __flag: c_int) c_int;
pub extern fn lseek(__fd: c_int, __offset: __off_t, __whence: c_int) __off_t;
pub extern fn close(__fd: c_int) c_int;
pub extern fn closefrom(__lowfd: c_int) void;
pub extern fn read(__fd: c_int, __buf: ?*anyopaque, __nbytes: usize) isize;
pub extern fn write(__fd: c_int, __buf: ?*const anyopaque, __n: usize) isize;
pub extern fn pread(__fd: c_int, __buf: ?*anyopaque, __nbytes: usize, __offset: __off_t) isize;
pub extern fn pwrite(__fd: c_int, __buf: ?*const anyopaque, __n: usize, __offset: __off_t) isize;
pub extern fn pipe(__pipedes: [*c]c_int) c_int;
pub extern fn alarm(__seconds: c_uint) c_uint;
pub extern fn sleep(__seconds: c_uint) c_uint;
pub extern fn ualarm(__value: __useconds_t, __interval: __useconds_t) __useconds_t;
pub extern fn usleep(__useconds: __useconds_t) c_int;
pub extern fn pause() c_int;
pub extern fn chown(__file: [*c]const u8, __owner: __uid_t, __group: __gid_t) c_int;
pub extern fn fchown(__fd: c_int, __owner: __uid_t, __group: __gid_t) c_int;
pub extern fn lchown(__file: [*c]const u8, __owner: __uid_t, __group: __gid_t) c_int;
pub extern fn fchownat(__fd: c_int, __file: [*c]const u8, __owner: __uid_t, __group: __gid_t, __flag: c_int) c_int;
pub extern fn chdir(__path: [*c]const u8) c_int;
pub extern fn fchdir(__fd: c_int) c_int;
pub extern fn getcwd(__buf: [*c]u8, __size: usize) [*c]u8;
pub extern fn getwd(__buf: [*c]u8) [*c]u8;
pub extern fn dup(__fd: c_int) c_int;
pub extern fn dup2(__fd: c_int, __fd2: c_int) c_int;
pub extern var __environ: [*c][*c]u8;
pub extern fn execve(__path: [*c]const u8, __argv: [*c]const [*c]u8, __envp: [*c]const [*c]u8) c_int;
pub extern fn fexecve(__fd: c_int, __argv: [*c]const [*c]u8, __envp: [*c]const [*c]u8) c_int;
pub extern fn execv(__path: [*c]const u8, __argv: [*c]const [*c]u8) c_int;
pub extern fn execle(__path: [*c]const u8, __arg: [*c]const u8, ...) c_int;
pub extern fn execl(__path: [*c]const u8, __arg: [*c]const u8, ...) c_int;
pub extern fn execvp(__file: [*c]const u8, __argv: [*c]const [*c]u8) c_int;
pub extern fn execlp(__file: [*c]const u8, __arg: [*c]const u8, ...) c_int;
pub extern fn nice(__inc: c_int) c_int;
pub extern fn _exit(__status: c_int) noreturn;
pub const _PC_LINK_MAX: c_int = 0;
pub const _PC_MAX_CANON: c_int = 1;
pub const _PC_MAX_INPUT: c_int = 2;
pub const _PC_NAME_MAX: c_int = 3;
pub const _PC_PATH_MAX: c_int = 4;
pub const _PC_PIPE_BUF: c_int = 5;
pub const _PC_CHOWN_RESTRICTED: c_int = 6;
pub const _PC_NO_TRUNC: c_int = 7;
pub const _PC_VDISABLE: c_int = 8;
pub const _PC_SYNC_IO: c_int = 9;
pub const _PC_ASYNC_IO: c_int = 10;
pub const _PC_PRIO_IO: c_int = 11;
pub const _PC_SOCK_MAXBUF: c_int = 12;
pub const _PC_FILESIZEBITS: c_int = 13;
pub const _PC_REC_INCR_XFER_SIZE: c_int = 14;
pub const _PC_REC_MAX_XFER_SIZE: c_int = 15;
pub const _PC_REC_MIN_XFER_SIZE: c_int = 16;
pub const _PC_REC_XFER_ALIGN: c_int = 17;
pub const _PC_ALLOC_SIZE_MIN: c_int = 18;
pub const _PC_SYMLINK_MAX: c_int = 19;
pub const _PC_2_SYMLINKS: c_int = 20;
const enum_unnamed_17 = c_uint;
pub const _SC_ARG_MAX: c_int = 0;
pub const _SC_CHILD_MAX: c_int = 1;
pub const _SC_CLK_TCK: c_int = 2;
pub const _SC_NGROUPS_MAX: c_int = 3;
pub const _SC_OPEN_MAX: c_int = 4;
pub const _SC_STREAM_MAX: c_int = 5;
pub const _SC_TZNAME_MAX: c_int = 6;
pub const _SC_JOB_CONTROL: c_int = 7;
pub const _SC_SAVED_IDS: c_int = 8;
pub const _SC_REALTIME_SIGNALS: c_int = 9;
pub const _SC_PRIORITY_SCHEDULING: c_int = 10;
pub const _SC_TIMERS: c_int = 11;
pub const _SC_ASYNCHRONOUS_IO: c_int = 12;
pub const _SC_PRIORITIZED_IO: c_int = 13;
pub const _SC_SYNCHRONIZED_IO: c_int = 14;
pub const _SC_FSYNC: c_int = 15;
pub const _SC_MAPPED_FILES: c_int = 16;
pub const _SC_MEMLOCK: c_int = 17;
pub const _SC_MEMLOCK_RANGE: c_int = 18;
pub const _SC_MEMORY_PROTECTION: c_int = 19;
pub const _SC_MESSAGE_PASSING: c_int = 20;
pub const _SC_SEMAPHORES: c_int = 21;
pub const _SC_SHARED_MEMORY_OBJECTS: c_int = 22;
pub const _SC_AIO_LISTIO_MAX: c_int = 23;
pub const _SC_AIO_MAX: c_int = 24;
pub const _SC_AIO_PRIO_DELTA_MAX: c_int = 25;
pub const _SC_DELAYTIMER_MAX: c_int = 26;
pub const _SC_MQ_OPEN_MAX: c_int = 27;
pub const _SC_MQ_PRIO_MAX: c_int = 28;
pub const _SC_VERSION: c_int = 29;
pub const _SC_PAGESIZE: c_int = 30;
pub const _SC_RTSIG_MAX: c_int = 31;
pub const _SC_SEM_NSEMS_MAX: c_int = 32;
pub const _SC_SEM_VALUE_MAX: c_int = 33;
pub const _SC_SIGQUEUE_MAX: c_int = 34;
pub const _SC_TIMER_MAX: c_int = 35;
pub const _SC_BC_BASE_MAX: c_int = 36;
pub const _SC_BC_DIM_MAX: c_int = 37;
pub const _SC_BC_SCALE_MAX: c_int = 38;
pub const _SC_BC_STRING_MAX: c_int = 39;
pub const _SC_COLL_WEIGHTS_MAX: c_int = 40;
pub const _SC_EQUIV_CLASS_MAX: c_int = 41;
pub const _SC_EXPR_NEST_MAX: c_int = 42;
pub const _SC_LINE_MAX: c_int = 43;
pub const _SC_RE_DUP_MAX: c_int = 44;
pub const _SC_CHARCLASS_NAME_MAX: c_int = 45;
pub const _SC_2_VERSION: c_int = 46;
pub const _SC_2_C_BIND: c_int = 47;
pub const _SC_2_C_DEV: c_int = 48;
pub const _SC_2_FORT_DEV: c_int = 49;
pub const _SC_2_FORT_RUN: c_int = 50;
pub const _SC_2_SW_DEV: c_int = 51;
pub const _SC_2_LOCALEDEF: c_int = 52;
pub const _SC_PII: c_int = 53;
pub const _SC_PII_XTI: c_int = 54;
pub const _SC_PII_SOCKET: c_int = 55;
pub const _SC_PII_INTERNET: c_int = 56;
pub const _SC_PII_OSI: c_int = 57;
pub const _SC_POLL: c_int = 58;
pub const _SC_SELECT: c_int = 59;
pub const _SC_UIO_MAXIOV: c_int = 60;
pub const _SC_IOV_MAX: c_int = 60;
pub const _SC_PII_INTERNET_STREAM: c_int = 61;
pub const _SC_PII_INTERNET_DGRAM: c_int = 62;
pub const _SC_PII_OSI_COTS: c_int = 63;
pub const _SC_PII_OSI_CLTS: c_int = 64;
pub const _SC_PII_OSI_M: c_int = 65;
pub const _SC_T_IOV_MAX: c_int = 66;
pub const _SC_THREADS: c_int = 67;
pub const _SC_THREAD_SAFE_FUNCTIONS: c_int = 68;
pub const _SC_GETGR_R_SIZE_MAX: c_int = 69;
pub const _SC_GETPW_R_SIZE_MAX: c_int = 70;
pub const _SC_LOGIN_NAME_MAX: c_int = 71;
pub const _SC_TTY_NAME_MAX: c_int = 72;
pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: c_int = 73;
pub const _SC_THREAD_KEYS_MAX: c_int = 74;
pub const _SC_THREAD_STACK_MIN: c_int = 75;
pub const _SC_THREAD_THREADS_MAX: c_int = 76;
pub const _SC_THREAD_ATTR_STACKADDR: c_int = 77;
pub const _SC_THREAD_ATTR_STACKSIZE: c_int = 78;
pub const _SC_THREAD_PRIORITY_SCHEDULING: c_int = 79;
pub const _SC_THREAD_PRIO_INHERIT: c_int = 80;
pub const _SC_THREAD_PRIO_PROTECT: c_int = 81;
pub const _SC_THREAD_PROCESS_SHARED: c_int = 82;
pub const _SC_NPROCESSORS_CONF: c_int = 83;
pub const _SC_NPROCESSORS_ONLN: c_int = 84;
pub const _SC_PHYS_PAGES: c_int = 85;
pub const _SC_AVPHYS_PAGES: c_int = 86;
pub const _SC_ATEXIT_MAX: c_int = 87;
pub const _SC_PASS_MAX: c_int = 88;
pub const _SC_XOPEN_VERSION: c_int = 89;
pub const _SC_XOPEN_XCU_VERSION: c_int = 90;
pub const _SC_XOPEN_UNIX: c_int = 91;
pub const _SC_XOPEN_CRYPT: c_int = 92;
pub const _SC_XOPEN_ENH_I18N: c_int = 93;
pub const _SC_XOPEN_SHM: c_int = 94;
pub const _SC_2_CHAR_TERM: c_int = 95;
pub const _SC_2_C_VERSION: c_int = 96;
pub const _SC_2_UPE: c_int = 97;
pub const _SC_XOPEN_XPG2: c_int = 98;
pub const _SC_XOPEN_XPG3: c_int = 99;
pub const _SC_XOPEN_XPG4: c_int = 100;
pub const _SC_CHAR_BIT: c_int = 101;
pub const _SC_CHAR_MAX: c_int = 102;
pub const _SC_CHAR_MIN: c_int = 103;
pub const _SC_INT_MAX: c_int = 104;
pub const _SC_INT_MIN: c_int = 105;
pub const _SC_LONG_BIT: c_int = 106;
pub const _SC_WORD_BIT: c_int = 107;
pub const _SC_MB_LEN_MAX: c_int = 108;
pub const _SC_NZERO: c_int = 109;
pub const _SC_SSIZE_MAX: c_int = 110;
pub const _SC_SCHAR_MAX: c_int = 111;
pub const _SC_SCHAR_MIN: c_int = 112;
pub const _SC_SHRT_MAX: c_int = 113;
pub const _SC_SHRT_MIN: c_int = 114;
pub const _SC_UCHAR_MAX: c_int = 115;
pub const _SC_UINT_MAX: c_int = 116;
pub const _SC_ULONG_MAX: c_int = 117;
pub const _SC_USHRT_MAX: c_int = 118;
pub const _SC_NL_ARGMAX: c_int = 119;
pub const _SC_NL_LANGMAX: c_int = 120;
pub const _SC_NL_MSGMAX: c_int = 121;
pub const _SC_NL_NMAX: c_int = 122;
pub const _SC_NL_SETMAX: c_int = 123;
pub const _SC_NL_TEXTMAX: c_int = 124;
pub const _SC_XBS5_ILP32_OFF32: c_int = 125;
pub const _SC_XBS5_ILP32_OFFBIG: c_int = 126;
pub const _SC_XBS5_LP64_OFF64: c_int = 127;
pub const _SC_XBS5_LPBIG_OFFBIG: c_int = 128;
pub const _SC_XOPEN_LEGACY: c_int = 129;
pub const _SC_XOPEN_REALTIME: c_int = 130;
pub const _SC_XOPEN_REALTIME_THREADS: c_int = 131;
pub const _SC_ADVISORY_INFO: c_int = 132;
pub const _SC_BARRIERS: c_int = 133;
pub const _SC_BASE: c_int = 134;
pub const _SC_C_LANG_SUPPORT: c_int = 135;
pub const _SC_C_LANG_SUPPORT_R: c_int = 136;
pub const _SC_CLOCK_SELECTION: c_int = 137;
pub const _SC_CPUTIME: c_int = 138;
pub const _SC_THREAD_CPUTIME: c_int = 139;
pub const _SC_DEVICE_IO: c_int = 140;
pub const _SC_DEVICE_SPECIFIC: c_int = 141;
pub const _SC_DEVICE_SPECIFIC_R: c_int = 142;
pub const _SC_FD_MGMT: c_int = 143;
pub const _SC_FIFO: c_int = 144;
pub const _SC_PIPE: c_int = 145;
pub const _SC_FILE_ATTRIBUTES: c_int = 146;
pub const _SC_FILE_LOCKING: c_int = 147;
pub const _SC_FILE_SYSTEM: c_int = 148;
pub const _SC_MONOTONIC_CLOCK: c_int = 149;
pub const _SC_MULTI_PROCESS: c_int = 150;
pub const _SC_SINGLE_PROCESS: c_int = 151;
pub const _SC_NETWORKING: c_int = 152;
pub const _SC_READER_WRITER_LOCKS: c_int = 153;
pub const _SC_SPIN_LOCKS: c_int = 154;
pub const _SC_REGEXP: c_int = 155;
pub const _SC_REGEX_VERSION: c_int = 156;
pub const _SC_SHELL: c_int = 157;
pub const _SC_SIGNALS: c_int = 158;
pub const _SC_SPAWN: c_int = 159;
pub const _SC_SPORADIC_SERVER: c_int = 160;
pub const _SC_THREAD_SPORADIC_SERVER: c_int = 161;
pub const _SC_SYSTEM_DATABASE: c_int = 162;
pub const _SC_SYSTEM_DATABASE_R: c_int = 163;
pub const _SC_TIMEOUTS: c_int = 164;
pub const _SC_TYPED_MEMORY_OBJECTS: c_int = 165;
pub const _SC_USER_GROUPS: c_int = 166;
pub const _SC_USER_GROUPS_R: c_int = 167;
pub const _SC_2_PBS: c_int = 168;
pub const _SC_2_PBS_ACCOUNTING: c_int = 169;
pub const _SC_2_PBS_LOCATE: c_int = 170;
pub const _SC_2_PBS_MESSAGE: c_int = 171;
pub const _SC_2_PBS_TRACK: c_int = 172;
pub const _SC_SYMLOOP_MAX: c_int = 173;
pub const _SC_STREAMS: c_int = 174;
pub const _SC_2_PBS_CHECKPOINT: c_int = 175;
pub const _SC_V6_ILP32_OFF32: c_int = 176;
pub const _SC_V6_ILP32_OFFBIG: c_int = 177;
pub const _SC_V6_LP64_OFF64: c_int = 178;
pub const _SC_V6_LPBIG_OFFBIG: c_int = 179;
pub const _SC_HOST_NAME_MAX: c_int = 180;
pub const _SC_TRACE: c_int = 181;
pub const _SC_TRACE_EVENT_FILTER: c_int = 182;
pub const _SC_TRACE_INHERIT: c_int = 183;
pub const _SC_TRACE_LOG: c_int = 184;
pub const _SC_LEVEL1_ICACHE_SIZE: c_int = 185;
pub const _SC_LEVEL1_ICACHE_ASSOC: c_int = 186;
pub const _SC_LEVEL1_ICACHE_LINESIZE: c_int = 187;
pub const _SC_LEVEL1_DCACHE_SIZE: c_int = 188;
pub const _SC_LEVEL1_DCACHE_ASSOC: c_int = 189;
pub const _SC_LEVEL1_DCACHE_LINESIZE: c_int = 190;
pub const _SC_LEVEL2_CACHE_SIZE: c_int = 191;
pub const _SC_LEVEL2_CACHE_ASSOC: c_int = 192;
pub const _SC_LEVEL2_CACHE_LINESIZE: c_int = 193;
pub const _SC_LEVEL3_CACHE_SIZE: c_int = 194;
pub const _SC_LEVEL3_CACHE_ASSOC: c_int = 195;
pub const _SC_LEVEL3_CACHE_LINESIZE: c_int = 196;
pub const _SC_LEVEL4_CACHE_SIZE: c_int = 197;
pub const _SC_LEVEL4_CACHE_ASSOC: c_int = 198;
pub const _SC_LEVEL4_CACHE_LINESIZE: c_int = 199;
pub const _SC_IPV6: c_int = 235;
pub const _SC_RAW_SOCKETS: c_int = 236;
pub const _SC_V7_ILP32_OFF32: c_int = 237;
pub const _SC_V7_ILP32_OFFBIG: c_int = 238;
pub const _SC_V7_LP64_OFF64: c_int = 239;
pub const _SC_V7_LPBIG_OFFBIG: c_int = 240;
pub const _SC_SS_REPL_MAX: c_int = 241;
pub const _SC_TRACE_EVENT_NAME_MAX: c_int = 242;
pub const _SC_TRACE_NAME_MAX: c_int = 243;
pub const _SC_TRACE_SYS_MAX: c_int = 244;
pub const _SC_TRACE_USER_EVENT_MAX: c_int = 245;
pub const _SC_XOPEN_STREAMS: c_int = 246;
pub const _SC_THREAD_ROBUST_PRIO_INHERIT: c_int = 247;
pub const _SC_THREAD_ROBUST_PRIO_PROTECT: c_int = 248;
pub const _SC_MINSIGSTKSZ: c_int = 249;
pub const _SC_SIGSTKSZ: c_int = 250;
const enum_unnamed_18 = c_uint;
pub const _CS_PATH: c_int = 0;
pub const _CS_V6_WIDTH_RESTRICTED_ENVS: c_int = 1;
pub const _CS_GNU_LIBC_VERSION: c_int = 2;
pub const _CS_GNU_LIBPTHREAD_VERSION: c_int = 3;
pub const _CS_V5_WIDTH_RESTRICTED_ENVS: c_int = 4;
pub const _CS_V7_WIDTH_RESTRICTED_ENVS: c_int = 5;
pub const _CS_LFS_CFLAGS: c_int = 1000;
pub const _CS_LFS_LDFLAGS: c_int = 1001;
pub const _CS_LFS_LIBS: c_int = 1002;
pub const _CS_LFS_LINTFLAGS: c_int = 1003;
pub const _CS_LFS64_CFLAGS: c_int = 1004;
pub const _CS_LFS64_LDFLAGS: c_int = 1005;
pub const _CS_LFS64_LIBS: c_int = 1006;
pub const _CS_LFS64_LINTFLAGS: c_int = 1007;
pub const _CS_XBS5_ILP32_OFF32_CFLAGS: c_int = 1100;
pub const _CS_XBS5_ILP32_OFF32_LDFLAGS: c_int = 1101;
pub const _CS_XBS5_ILP32_OFF32_LIBS: c_int = 1102;
pub const _CS_XBS5_ILP32_OFF32_LINTFLAGS: c_int = 1103;
pub const _CS_XBS5_ILP32_OFFBIG_CFLAGS: c_int = 1104;
pub const _CS_XBS5_ILP32_OFFBIG_LDFLAGS: c_int = 1105;
pub const _CS_XBS5_ILP32_OFFBIG_LIBS: c_int = 1106;
pub const _CS_XBS5_ILP32_OFFBIG_LINTFLAGS: c_int = 1107;
pub const _CS_XBS5_LP64_OFF64_CFLAGS: c_int = 1108;
pub const _CS_XBS5_LP64_OFF64_LDFLAGS: c_int = 1109;
pub const _CS_XBS5_LP64_OFF64_LIBS: c_int = 1110;
pub const _CS_XBS5_LP64_OFF64_LINTFLAGS: c_int = 1111;
pub const _CS_XBS5_LPBIG_OFFBIG_CFLAGS: c_int = 1112;
pub const _CS_XBS5_LPBIG_OFFBIG_LDFLAGS: c_int = 1113;
pub const _CS_XBS5_LPBIG_OFFBIG_LIBS: c_int = 1114;
pub const _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS: c_int = 1115;
pub const _CS_POSIX_V6_ILP32_OFF32_CFLAGS: c_int = 1116;
pub const _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: c_int = 1117;
pub const _CS_POSIX_V6_ILP32_OFF32_LIBS: c_int = 1118;
pub const _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS: c_int = 1119;
pub const _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: c_int = 1120;
pub const _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: c_int = 1121;
pub const _CS_POSIX_V6_ILP32_OFFBIG_LIBS: c_int = 1122;
pub const _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS: c_int = 1123;
pub const _CS_POSIX_V6_LP64_OFF64_CFLAGS: c_int = 1124;
pub const _CS_POSIX_V6_LP64_OFF64_LDFLAGS: c_int = 1125;
pub const _CS_POSIX_V6_LP64_OFF64_LIBS: c_int = 1126;
pub const _CS_POSIX_V6_LP64_OFF64_LINTFLAGS: c_int = 1127;
pub const _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS: c_int = 1128;
pub const _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS: c_int = 1129;
pub const _CS_POSIX_V6_LPBIG_OFFBIG_LIBS: c_int = 1130;
pub const _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS: c_int = 1131;
pub const _CS_POSIX_V7_ILP32_OFF32_CFLAGS: c_int = 1132;
pub const _CS_POSIX_V7_ILP32_OFF32_LDFLAGS: c_int = 1133;
pub const _CS_POSIX_V7_ILP32_OFF32_LIBS: c_int = 1134;
pub const _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS: c_int = 1135;
pub const _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS: c_int = 1136;
pub const _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS: c_int = 1137;
pub const _CS_POSIX_V7_ILP32_OFFBIG_LIBS: c_int = 1138;
pub const _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS: c_int = 1139;
pub const _CS_POSIX_V7_LP64_OFF64_CFLAGS: c_int = 1140;
pub const _CS_POSIX_V7_LP64_OFF64_LDFLAGS: c_int = 1141;
pub const _CS_POSIX_V7_LP64_OFF64_LIBS: c_int = 1142;
pub const _CS_POSIX_V7_LP64_OFF64_LINTFLAGS: c_int = 1143;
pub const _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS: c_int = 1144;
pub const _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS: c_int = 1145;
pub const _CS_POSIX_V7_LPBIG_OFFBIG_LIBS: c_int = 1146;
pub const _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS: c_int = 1147;
pub const _CS_V6_ENV: c_int = 1148;
pub const _CS_V7_ENV: c_int = 1149;
const enum_unnamed_19 = c_uint;
pub extern fn pathconf(__path: [*c]const u8, __name: c_int) c_long;
pub extern fn fpathconf(__fd: c_int, __name: c_int) c_long;
pub extern fn sysconf(__name: c_int) c_long;
pub extern fn confstr(__name: c_int, __buf: [*c]u8, __len: usize) usize;
pub extern fn getpid() __pid_t;
pub extern fn getppid() __pid_t;
pub extern fn getpgrp() __pid_t;
pub extern fn __getpgid(__pid: __pid_t) __pid_t;
pub extern fn getpgid(__pid: __pid_t) __pid_t;
pub extern fn setpgid(__pid: __pid_t, __pgid: __pid_t) c_int;
pub extern fn setpgrp() c_int;
pub extern fn setsid() __pid_t;
pub extern fn getsid(__pid: __pid_t) __pid_t;
pub extern fn getuid() __uid_t;
pub extern fn geteuid() __uid_t;
pub extern fn getgid() __gid_t;
pub extern fn getegid() __gid_t;
pub extern fn getgroups(__size: c_int, __list: [*c]__gid_t) c_int;
pub extern fn setuid(__uid: __uid_t) c_int;
pub extern fn setreuid(__ruid: __uid_t, __euid: __uid_t) c_int;
pub extern fn seteuid(__uid: __uid_t) c_int;
pub extern fn setgid(__gid: __gid_t) c_int;
pub extern fn setregid(__rgid: __gid_t, __egid: __gid_t) c_int;
pub extern fn setegid(__gid: __gid_t) c_int;
pub extern fn fork() __pid_t;
pub extern fn vfork() c_int;
pub extern fn ttyname(__fd: c_int) [*c]u8;
pub extern fn ttyname_r(__fd: c_int, __buf: [*c]u8, __buflen: usize) c_int;
pub extern fn isatty(__fd: c_int) c_int;
pub extern fn ttyslot() c_int;
pub extern fn link(__from: [*c]const u8, __to: [*c]const u8) c_int;
pub extern fn linkat(__fromfd: c_int, __from: [*c]const u8, __tofd: c_int, __to: [*c]const u8, __flags: c_int) c_int;
pub extern fn symlink(__from: [*c]const u8, __to: [*c]const u8) c_int;
pub extern fn readlink(noalias __path: [*c]const u8, noalias __buf: [*c]u8, __len: usize) isize;
pub extern fn symlinkat(__from: [*c]const u8, __tofd: c_int, __to: [*c]const u8) c_int;
pub extern fn readlinkat(__fd: c_int, noalias __path: [*c]const u8, noalias __buf: [*c]u8, __len: usize) isize;
pub extern fn unlink(__name: [*c]const u8) c_int;
pub extern fn unlinkat(__fd: c_int, __name: [*c]const u8, __flag: c_int) c_int;
pub extern fn rmdir(__path: [*c]const u8) c_int;
pub extern fn tcgetpgrp(__fd: c_int) __pid_t;
pub extern fn tcsetpgrp(__fd: c_int, __pgrp_id: __pid_t) c_int;
pub extern fn getlogin() [*c]u8;
pub extern fn getlogin_r(__name: [*c]u8, __name_len: usize) c_int;
pub extern fn setlogin(__name: [*c]const u8) c_int;
pub extern var optarg: [*c]u8;
pub extern var optind: c_int;
pub extern var opterr: c_int;
pub extern var optopt: c_int;
pub extern fn getopt(___argc: c_int, ___argv: [*c]const [*c]u8, __shortopts: [*c]const u8) c_int;
pub extern fn gethostname(__name: [*c]u8, __len: usize) c_int;
pub extern fn sethostname(__name: [*c]const u8, __len: usize) c_int;
pub extern fn sethostid(__id: c_long) c_int;
pub extern fn getdomainname(__name: [*c]u8, __len: usize) c_int;
pub extern fn setdomainname(__name: [*c]const u8, __len: usize) c_int;
pub extern fn vhangup() c_int;
pub extern fn revoke(__file: [*c]const u8) c_int;
pub extern fn profil(__sample_buffer: [*c]c_ushort, __size: usize, __offset: usize, __scale: c_uint) c_int;
pub extern fn acct(__name: [*c]const u8) c_int;
pub extern fn getusershell() [*c]u8;
pub extern fn endusershell() void;
pub extern fn setusershell() void;
pub extern fn daemon(__nochdir: c_int, __noclose: c_int) c_int;
pub extern fn chroot(__path: [*c]const u8) c_int;
pub extern fn getpass(__prompt: [*c]const u8) [*c]u8;
pub extern fn fsync(__fd: c_int) c_int;
pub extern fn gethostid() c_long;
pub extern fn sync() void;
pub extern fn getpagesize() c_int;
pub extern fn getdtablesize() c_int;
pub extern fn truncate(__file: [*c]const u8, __length: __off_t) c_int;
pub extern fn ftruncate(__fd: c_int, __length: __off_t) c_int;
pub extern fn brk(__addr: ?*anyopaque) c_int;
pub extern fn sbrk(__delta: isize) ?*anyopaque;
pub extern fn syscall(__sysno: c_long, ...) c_long;
pub extern fn lockf(__fd: c_int, __cmd: c_int, __len: __off_t) c_int;
pub extern fn fdatasync(__fildes: c_int) c_int;
pub extern fn crypt(__key: [*c]const u8, __salt: [*c]const u8) [*c]u8;
pub extern fn getentropy(__buffer: ?*anyopaque, __length: usize) c_int;
pub fn LoadOBJ(arg_fileName: [*c]const u8) callconv(.C) Model {
var fileName = arg_fileName;
_ = &fileName;
var objAttributes: tinyobj_attrib_t = tinyobj_attrib_t{
.num_vertices = @as(c_uint, @bitCast(@as(c_int, 0))),
.num_normals = 0,
.num_texcoords = 0,
.num_faces = 0,
.num_face_num_verts = 0,
.pad0 = 0,
.vertices = null,
.normals = null,
.texcoords = null,
.faces = null,
.face_num_verts = null,
.material_ids = null,
};
_ = &objAttributes;
var objShapes: [*c]tinyobj_shape_t = null;
_ = &objShapes;
var objShapeCount: c_uint = 0;
_ = &objShapeCount;
var objMaterials: [*c]tinyobj_material_t = null;
_ = &objMaterials;
var objMaterialCount: c_uint = 0;
_ = &objMaterialCount;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
model.transform = MatrixIdentity();
var fileText: [*c]u8 = LoadFileText(fileName);
_ = &fileText;
if (fileText == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
TraceLog(LOG_ERROR, "MODEL Unable to read obj file %s", fileName);
return model;
}
var currentDir: [1024]u8 = [1]u8{
0,
} ++ [1]u8{0} ** 1023;
_ = &currentDir;
_ = strcpy(@as([*c]u8, @ptrCast(@alignCast(&currentDir))), GetWorkingDirectory());
var workingDir: [*c]const u8 = GetDirectoryPath(fileName);
_ = &workingDir;
if (chdir(workingDir) != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to change working directory", workingDir);
}
var dataSize: c_uint = @as(c_uint, @bitCast(@as(c_uint, @truncate(strlen(fileText)))));
_ = &dataSize;
var flags: c_uint = @as(c_uint, @bitCast(@as(c_int, 1) << @intCast(0)));
_ = &flags;
var ret: c_int = tinyobj_parse_obj(&objAttributes, &objShapes, &objShapeCount, &objMaterials, &objMaterialCount, fileText, dataSize, flags);
_ = &ret;
if (ret != @as(c_int, 0)) {
TraceLog(LOG_ERROR, "MODEL Unable to read obj data %s", fileName);
return model;
}
UnloadFileText(fileText);
var faceVertIndex: c_uint = 0;
_ = &faceVertIndex;
var nextShape: c_uint = 1;
_ = &nextShape;
var lastMaterial: c_int = -@as(c_int, 1);
_ = &lastMaterial;
var meshIndex: c_uint = 0;
_ = &meshIndex;
var nextShapeEnd: c_uint = objAttributes.num_face_num_verts;
_ = &nextShapeEnd;
if (objShapeCount > @as(c_uint, @bitCast(@as(c_int, 1)))) {
nextShapeEnd = objShapes[nextShape].face_offset;
}
{
var faceId: c_uint = 0;
_ = &faceId;
while (faceId < objAttributes.num_faces) : (faceId +%= 1) {
if (faceVertIndex >= nextShapeEnd) {
nextShape +%= 1;
if (nextShape < objShapeCount) {
nextShapeEnd = objShapes[nextShape].face_offset;
} else {
nextShapeEnd = objAttributes.num_face_num_verts;
}
meshIndex +%= 1;
} else if ((lastMaterial != -@as(c_int, 1)) and (objAttributes.material_ids[faceId] != lastMaterial)) {
meshIndex +%= 1;
}
lastMaterial = objAttributes.material_ids[faceId];
faceVertIndex +%= @as(c_uint, @bitCast(objAttributes.face_num_verts[faceId]));
}
}
model.meshCount = @as(c_int, @bitCast(meshIndex +% @as(c_uint, @bitCast(@as(c_int, 1)))));
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate(@sizeOf(Mesh) *% @as(c_ulong, @bitCast(@as(c_long, model.meshCount)))))))))));
if (objMaterialCount > @as(c_uint, @bitCast(@as(c_int, 0)))) {
model.materialCount = @as(c_int, @bitCast(objMaterialCount));
model.materials = @as([*c]Material, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate(@sizeOf(Material) *% @as(c_ulong, @bitCast(@as(c_ulong, objMaterialCount)))))))))));
} else {
model.materialCount = 1;
model.materials = @as([*c]Material, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate(@sizeOf(Material) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))))))))));
}
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate(@sizeOf(c_int) *% @as(c_ulong, @bitCast(@as(c_long, model.meshCount)))))))))));
var localMeshVertexCounts: [*c]c_uint = @as([*c]c_uint, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate(@sizeOf(c_uint) *% @as(c_ulong, @bitCast(@as(c_long, model.meshCount)))))))))));
_ = &localMeshVertexCounts;
faceVertIndex = 0;
nextShapeEnd = objAttributes.num_face_num_verts;
lastMaterial = -@as(c_int, 1);
meshIndex = 0;
var localMeshVertexCount: c_uint = 0;
_ = &localMeshVertexCount;
nextShape = 1;
if (objShapeCount > @as(c_uint, @bitCast(@as(c_int, 1)))) {
nextShapeEnd = objShapes[nextShape].face_offset;
}
{
var faceId: c_uint = 0;
_ = &faceId;
while (faceId < objAttributes.num_faces) : (faceId +%= 1) {
var newMesh: bool = @as(c_int, 0) != 0;
_ = &newMesh;
if (faceVertIndex >= nextShapeEnd) {
nextShape +%= 1;
if (nextShape < objShapeCount) {
nextShapeEnd = objShapes[nextShape].face_offset;
} else {
nextShapeEnd = objAttributes.num_face_num_verts;
}
newMesh = @as(c_int, 1) != 0;
} else if ((lastMaterial != -@as(c_int, 1)) and (objAttributes.material_ids[faceId] != lastMaterial)) {
newMesh = @as(c_int, 1) != 0;
}
lastMaterial = objAttributes.material_ids[faceId];
if (newMesh) {
localMeshVertexCounts[meshIndex] = localMeshVertexCount;
localMeshVertexCount = 0;
meshIndex +%= 1;
}
faceVertIndex +%= @as(c_uint, @bitCast(objAttributes.face_num_verts[faceId]));
localMeshVertexCount +%= @as(c_uint, @bitCast(objAttributes.face_num_verts[faceId]));
}
}
localMeshVertexCounts[meshIndex] = localMeshVertexCount;
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
var vertexCount: c_uint = (blk: {
const tmp = i;
if (tmp >= 0) break :blk localMeshVertexCounts + @as(usize, @intCast(tmp)) else break :blk localMeshVertexCounts - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &vertexCount;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount = @as(c_int, @bitCast(vertexCount));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount = @as(c_int, @bitCast(vertexCount / @as(c_uint, @bitCast(@as(c_int, 3)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices = @as([*c]f32, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, vertexCount)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))))))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals = @as([*c]f32, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, vertexCount)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))))))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoords = @as([*c]f32, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate((@sizeOf(f32) *% @as(c_ulong, @bitCast(@as(c_ulong, vertexCount)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 2))))))))))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(MemAlloc(@as(c_uint, @bitCast(@as(c_uint, @truncate((@sizeOf(u8) *% @as(c_ulong, @bitCast(@as(c_ulong, vertexCount)))) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4))))))))))));
}
}
MemFree(@as(?*anyopaque, @ptrCast(localMeshVertexCounts)));
localMeshVertexCounts = null;
faceVertIndex = 0;
nextShapeEnd = objAttributes.num_face_num_verts;
nextShape = 1;
if (objShapeCount > @as(c_uint, @bitCast(@as(c_int, 1)))) {
nextShapeEnd = objShapes[nextShape].face_offset;
}
lastMaterial = -@as(c_int, 1);
meshIndex = 0;
localMeshVertexCount = 0;
{
var faceId: c_uint = 0;
_ = &faceId;
while (faceId < objAttributes.num_faces) : (faceId +%= 1) {
var newMesh: bool = @as(c_int, 0) != 0;
_ = &newMesh;
if (faceVertIndex >= nextShapeEnd) {
nextShape +%= 1;
if (nextShape < objShapeCount) {
nextShapeEnd = objShapes[nextShape].face_offset;
} else {
nextShapeEnd = objAttributes.num_face_num_verts;
}
newMesh = @as(c_int, 1) != 0;
}
if ((lastMaterial != -@as(c_int, 1)) and (objAttributes.material_ids[faceId] != lastMaterial)) {
newMesh = @as(c_int, 1) != 0;
}
lastMaterial = objAttributes.material_ids[faceId];
if (newMesh) {
localMeshVertexCount = 0;
meshIndex +%= 1;
}
var matId: c_int = 0;
_ = &matId;
if ((lastMaterial >= @as(c_int, 0)) and (lastMaterial < @as(c_int, @bitCast(objMaterialCount)))) {
matId = lastMaterial;
}
model.meshMaterial[meshIndex] = matId;
{
var f: c_int = 0;
_ = &f;
while (f < objAttributes.face_num_verts[faceId]) : (f += 1) {
var vertIndex: c_int = objAttributes.faces[faceVertIndex].v_idx;
_ = &vertIndex;
var normalIndex: c_int = objAttributes.faces[faceVertIndex].vn_idx;
_ = &normalIndex;
var texcordIndex: c_int = objAttributes.faces[faceVertIndex].vt_idx;
_ = &texcordIndex;
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 3)) : (i += 1) {
model.meshes[meshIndex].vertices[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 3)))) +% @as(c_uint, @bitCast(i))] = (blk: {
const tmp = (vertIndex * @as(c_int, 3)) + i;
if (tmp >= 0) break :blk objAttributes.vertices + @as(usize, @intCast(tmp)) else break :blk objAttributes.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 3)) : (i += 1) {
model.meshes[meshIndex].normals[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 3)))) +% @as(c_uint, @bitCast(i))] = (blk: {
const tmp = (normalIndex * @as(c_int, 3)) + i;
if (tmp >= 0) break :blk objAttributes.normals + @as(usize, @intCast(tmp)) else break :blk objAttributes.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 2)) : (i += 1) {
model.meshes[meshIndex].texcoords[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 2)))) +% @as(c_uint, @bitCast(i))] = (blk: {
const tmp = (texcordIndex * @as(c_int, 2)) + i;
if (tmp >= 0) break :blk objAttributes.texcoords + @as(usize, @intCast(tmp)) else break :blk objAttributes.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
model.meshes[meshIndex].texcoords[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 2)))) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = 1.0 - model.meshes[meshIndex].texcoords[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 2)))) +% @as(c_uint, @bitCast(@as(c_int, 1)))];
{
var i: c_int = 0;
_ = &i;
while (i < @as(c_int, 4)) : (i += 1) {
model.meshes[meshIndex].colors[(localMeshVertexCount *% @as(c_uint, @bitCast(@as(c_int, 4)))) +% @as(c_uint, @bitCast(i))] = 255;
}
}
faceVertIndex +%= 1;
localMeshVertexCount +%= 1;
}
}
}
}
if (objMaterialCount > @as(c_uint, @bitCast(@as(c_int, 0)))) {
ProcessMaterialsOBJ(model.materials, objMaterials, @as(c_int, @bitCast(objMaterialCount)));
} else {
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
}
tinyobj_attrib_free(&objAttributes);
tinyobj_shapes_free(objShapes, objShapeCount);
tinyobj_materials_free(objMaterials, objMaterialCount);
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
UploadMesh(model.meshes + @as(usize, @bitCast(@as(isize, @intCast(i)))), @as(c_int, 1) != 0);
}
}
if (chdir(@as([*c]u8, @ptrCast(@alignCast(&currentDir)))) != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to change working directory", @as([*c]u8, @ptrCast(@alignCast(&currentDir))));
}
return model;
}
pub fn LoadIQM(arg_fileName: [*c]const u8) callconv(.C) Model {
var fileName = arg_fileName;
_ = &fileName;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
var fileDataPtr: [*c]u8 = fileData;
_ = &fileDataPtr;
const struct_IQMHeader = extern struct {
magic: [16]u8 = @import("std").mem.zeroes([16]u8),
version: c_uint = @import("std").mem.zeroes(c_uint),
dataSize: c_uint = @import("std").mem.zeroes(c_uint),
flags: c_uint = @import("std").mem.zeroes(c_uint),
num_text: c_uint = @import("std").mem.zeroes(c_uint),
ofs_text: c_uint = @import("std").mem.zeroes(c_uint),
num_meshes: c_uint = @import("std").mem.zeroes(c_uint),
ofs_meshes: c_uint = @import("std").mem.zeroes(c_uint),
num_vertexarrays: c_uint = @import("std").mem.zeroes(c_uint),
num_vertexes: c_uint = @import("std").mem.zeroes(c_uint),
ofs_vertexarrays: c_uint = @import("std").mem.zeroes(c_uint),
num_triangles: c_uint = @import("std").mem.zeroes(c_uint),
ofs_triangles: c_uint = @import("std").mem.zeroes(c_uint),
ofs_adjacency: c_uint = @import("std").mem.zeroes(c_uint),
num_joints: c_uint = @import("std").mem.zeroes(c_uint),
ofs_joints: c_uint = @import("std").mem.zeroes(c_uint),
num_poses: c_uint = @import("std").mem.zeroes(c_uint),
ofs_poses: c_uint = @import("std").mem.zeroes(c_uint),
num_anims: c_uint = @import("std").mem.zeroes(c_uint),
ofs_anims: c_uint = @import("std").mem.zeroes(c_uint),
num_frames: c_uint = @import("std").mem.zeroes(c_uint),
num_framechannels: c_uint = @import("std").mem.zeroes(c_uint),
ofs_frames: c_uint = @import("std").mem.zeroes(c_uint),
ofs_bounds: c_uint = @import("std").mem.zeroes(c_uint),
num_comment: c_uint = @import("std").mem.zeroes(c_uint),
ofs_comment: c_uint = @import("std").mem.zeroes(c_uint),
num_extensions: c_uint = @import("std").mem.zeroes(c_uint),
ofs_extensions: c_uint = @import("std").mem.zeroes(c_uint),
};
_ = &struct_IQMHeader;
const IQMHeader = struct_IQMHeader;
_ = &IQMHeader;
const struct_IQMMesh = extern struct {
name: c_uint = @import("std").mem.zeroes(c_uint),
material: c_uint = @import("std").mem.zeroes(c_uint),
first_vertex: c_uint = @import("std").mem.zeroes(c_uint),
num_vertexes: c_uint = @import("std").mem.zeroes(c_uint),
first_triangle: c_uint = @import("std").mem.zeroes(c_uint),
num_triangles: c_uint = @import("std").mem.zeroes(c_uint),
};
_ = &struct_IQMMesh;
const IQMMesh = struct_IQMMesh;
_ = &IQMMesh;
const struct_IQMTriangle = extern struct {
vertex: [3]c_uint = @import("std").mem.zeroes([3]c_uint),
};
_ = &struct_IQMTriangle;
const IQMTriangle = struct_IQMTriangle;
_ = &IQMTriangle;
const struct_IQMJoint = extern struct {
name: c_uint = @import("std").mem.zeroes(c_uint),
parent: c_int = @import("std").mem.zeroes(c_int),
translate: [3]f32 = @import("std").mem.zeroes([3]f32),
rotate: [4]f32 = @import("std").mem.zeroes([4]f32),
scale: [3]f32 = @import("std").mem.zeroes([3]f32),
};
_ = &struct_IQMJoint;
const IQMJoint = struct_IQMJoint;
_ = &IQMJoint;
const struct_IQMVertexArray = extern struct {
type: c_uint = @import("std").mem.zeroes(c_uint),
flags: c_uint = @import("std").mem.zeroes(c_uint),
format: c_uint = @import("std").mem.zeroes(c_uint),
size: c_uint = @import("std").mem.zeroes(c_uint),
offset: c_uint = @import("std").mem.zeroes(c_uint),
};
_ = &struct_IQMVertexArray;
const IQMVertexArray = struct_IQMVertexArray;
_ = &IQMVertexArray;
const IQM_POSITION: c_int = 0;
_ = &IQM_POSITION;
const IQM_TEXCOORD: c_int = 1;
_ = &IQM_TEXCOORD;
const IQM_NORMAL: c_int = 2;
_ = &IQM_NORMAL;
const IQM_TANGENT: c_int = 3;
_ = &IQM_TANGENT;
const IQM_BLENDINDEXES: c_int = 4;
_ = &IQM_BLENDINDEXES;
const IQM_BLENDWEIGHTS: c_int = 5;
_ = &IQM_BLENDWEIGHTS;
const IQM_COLOR: c_int = 6;
_ = &IQM_COLOR;
const IQM_CUSTOM: c_int = 16;
_ = &IQM_CUSTOM;
const enum_unnamed_20 = c_uint;
_ = &enum_unnamed_20;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
var imesh: [*c]IQMMesh = null;
_ = &imesh;
var tri: [*c]IQMTriangle = null;
_ = &tri;
var va: [*c]IQMVertexArray = null;
_ = &va;
var ijoint: [*c]IQMJoint = null;
_ = &ijoint;
var vertex: [*c]f32 = null;
_ = &vertex;
var normal: [*c]f32 = null;
_ = &normal;
var text: [*c]f32 = null;
_ = &text;
var blendi: [*c]u8 = null;
_ = &blendi;
var blendw: [*c]u8 = null;
_ = &blendw;
var color: [*c]u8 = null;
_ = &color;
if (fileDataPtr == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return model;
var basePath: [*c]const u8 = GetDirectoryPath(fileName);
_ = &basePath;
var iqmHeader: [*c]IQMHeader = @as([*c]IQMHeader, @ptrCast(@alignCast(fileDataPtr)));
_ = &iqmHeader;
if (memcmp(@as(?*const anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&iqmHeader.*.magic))))), @as(?*const anyopaque, @ptrCast("INTERQUAKEMODEL")), @sizeOf([16]u8)) != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MODEL: [%s] IQM file is not a valid model", fileName);
return model;
}
if (iqmHeader.*.version != @as(c_uint, @bitCast(@as(c_int, 2)))) {
TraceLog(LOG_WARNING, "MODEL: [%s] IQM file version not supported (%i)", fileName, iqmHeader.*.version);
return model;
}
imesh = @as([*c]IQMMesh, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_meshes))) *% @sizeOf(IQMMesh)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(imesh)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_meshes)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_meshes))) *% @sizeOf(IQMMesh));
model.meshCount = @as(c_int, @bitCast(iqmHeader.*.num_meshes));
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(Mesh)))));
model.materialCount = model.meshCount;
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount))), @sizeOf(Material)))));
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
var name: [32]u8 = [1]u8{
0,
} ++ [1]u8{0} ** 31;
_ = &name;
var material: [32]u8 = [1]u8{
0,
} ++ [1]u8{0} ** 31;
_ = &material;
{
var i: c_int = 0;
_ = &i;
while (i < model.meshCount) : (i += 1) {
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&name))))), @as(?*const anyopaque, @ptrCast((fileDataPtr + iqmHeader.*.ofs_text) + (blk: {
const tmp = i;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 32)))) *% @sizeOf(u8));
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&material))))), @as(?*const anyopaque, @ptrCast((fileDataPtr + iqmHeader.*.ofs_text) + (blk: {
const tmp = i;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.material)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 32)))) *% @sizeOf(u8));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.materials + @as(usize, @intCast(tmp)) else break :blk model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = LoadMaterialDefault();
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTexture(TextFormat("%s/%s", basePath, @as([*c]u8, @ptrCast(@alignCast(&material)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshMaterial + @as(usize, @intCast(tmp)) else break :blk model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = i;
TraceLog(LOG_DEBUG, "MODEL: [%s] mesh name (%s), material (%s)", fileName, @as([*c]u8, @ptrCast(@alignCast(&name))), @as([*c]u8, @ptrCast(@alignCast(&material))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount = @as(c_int, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.num_vertexes));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoords = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 2)))), @sizeOf(f32)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneIds = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(f32)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount = @as(c_int, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.num_triangles));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.indices = @as([*c]c_ushort, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount * @as(c_int, 3)))), @sizeOf(c_ushort)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animVertices = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animNormals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
}
}
tri = @as([*c]IQMTriangle, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_triangles))) *% @sizeOf(IQMTriangle)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(tri)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_triangles)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_triangles))) *% @sizeOf(IQMTriangle));
{
var m: c_int = 0;
_ = &m;
while (m < model.meshCount) : (m += 1) {
var tcounter: c_int = 0;
_ = &tcounter;
{
var i: c_uint = (blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.first_triangle;
_ = &i;
while (i < ((blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.first_triangle +% (blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.num_triangles)) : (i +%= 1) {
(blk: {
const tmp = tcounter + @as(c_int, 2);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_ushort, @truncate(tri[i].vertex[@as(c_uint, @intCast(@as(c_int, 0)))] -% (blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.first_vertex))));
(blk: {
const tmp = tcounter + @as(c_int, 1);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_ushort, @truncate(tri[i].vertex[@as(c_uint, @intCast(@as(c_int, 1)))] -% (blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.first_vertex))));
(blk: {
const tmp = tcounter;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.indices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_ushort, @bitCast(@as(c_ushort, @truncate(tri[i].vertex[@as(c_uint, @intCast(@as(c_int, 2)))] -% (blk: {
const tmp = m;
if (tmp >= 0) break :blk imesh + @as(usize, @intCast(tmp)) else break :blk imesh - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.first_vertex))));
tcounter += @as(c_int, 3);
}
}
}
}
va = @as([*c]IQMVertexArray, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexarrays))) *% @sizeOf(IQMVertexArray)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(va)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_vertexarrays)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexarrays))) *% @sizeOf(IQMVertexArray));
{
var i: c_uint = 0;
_ = &i;
while (i < iqmHeader.*.num_vertexarrays) : (i +%= 1) {
while (true) {
switch (va[i].type) {
@as(c_uint, @bitCast(@as(c_int, 0))) => {
{
vertex = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 3)))))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(vertex)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 3)))))) *% @sizeOf(f32));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
var vCounter: c_int = 0;
_ = &vCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 3)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 3))))) : (i_1 +%= 1) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].vertices + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vertex[i_1];
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].animVertices + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].animVertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = vertex[i_1];
vCounter += 1;
}
}
}
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 2))) => {
{
normal = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 3)))))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(normal)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 3)))))) *% @sizeOf(f32));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
var vCounter: c_int = 0;
_ = &vCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 3)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 3))))) : (i_1 +%= 1) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].normals + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = normal[i_1];
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].animNormals + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].animNormals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = normal[i_1];
vCounter += 1;
}
}
}
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 1))) => {
{
text = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 2)))))) *% @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(text)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 2)))))) *% @sizeOf(f32));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
var vCounter: c_int = 0;
_ = &vCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 2)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 2))))) : (i_1 +%= 1) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].texcoords + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = text[i_1];
vCounter += 1;
}
}
}
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 4))) => {
{
blendi = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(blendi)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
var boneCounter: c_int = 0;
_ = &boneCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 4)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 4))))) : (i_1 +%= 1) {
(blk: {
const tmp = boneCounter;
if (tmp >= 0) break :blk model.meshes[m].boneIds + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].boneIds - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(blendi[i_1]));
boneCounter += 1;
}
}
}
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 5))) => {
{
blendw = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(blendw)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
var boneCounter: c_int = 0;
_ = &boneCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 4)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 4))))) : (i_1 +%= 1) {
(blk: {
const tmp = boneCounter;
if (tmp >= 0) break :blk model.meshes[m].boneWeights + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].boneWeights - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, blendw[i_1]))))) / 255.0;
boneCounter += 1;
}
}
}
}
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 6))) => {
{
color = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(color)), @as(?*const anyopaque, @ptrCast(fileDataPtr + va[i].offset)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_vertexes *% @as(c_uint, @bitCast(@as(c_int, 4)))))) *% @sizeOf(u8));
{
var m: c_uint = 0;
_ = &m;
while (m < iqmHeader.*.num_meshes) : (m +%= 1) {
model.meshes[m].colors = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshes[m].vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
var vCounter: c_int = 0;
_ = &vCounter;
{
var i_1: c_uint = imesh[m].first_vertex *% @as(c_uint, @bitCast(@as(c_int, 4)));
_ = &i_1;
while (i_1 < ((imesh[m].first_vertex +% imesh[m].num_vertexes) *% @as(c_uint, @bitCast(@as(c_int, 4))))) : (i_1 +%= 1) {
(blk: {
const tmp = vCounter;
if (tmp >= 0) break :blk model.meshes[m].colors + @as(usize, @intCast(tmp)) else break :blk model.meshes[m].colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = color[i_1];
vCounter += 1;
}
}
}
}
}
break;
},
else => {},
}
break;
}
}
}
ijoint = @as([*c]IQMJoint, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(IQMJoint)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(ijoint)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_joints)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(IQMJoint));
model.boneCount = @as(c_int, @bitCast(iqmHeader.*.num_joints));
model.bones = @as([*c]BoneInfo, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(BoneInfo)))));
model.bindPose = @as([*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(Transform)))));
{
var i: c_uint = 0;
_ = &i;
while (i < iqmHeader.*.num_joints) : (i +%= 1) {
model.bones[i].parent = ijoint[i].parent;
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&model.bones[i].name))))), @as(?*const anyopaque, @ptrCast((fileDataPtr + iqmHeader.*.ofs_text) + ijoint[i].name)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 32)))) *% @sizeOf(u8));
model.bindPose[i].translation.x = ijoint[i].translate[@as(c_uint, @intCast(@as(c_int, 0)))];
model.bindPose[i].translation.y = ijoint[i].translate[@as(c_uint, @intCast(@as(c_int, 1)))];
model.bindPose[i].translation.z = ijoint[i].translate[@as(c_uint, @intCast(@as(c_int, 2)))];
model.bindPose[i].rotation.x = ijoint[i].rotate[@as(c_uint, @intCast(@as(c_int, 0)))];
model.bindPose[i].rotation.y = ijoint[i].rotate[@as(c_uint, @intCast(@as(c_int, 1)))];
model.bindPose[i].rotation.z = ijoint[i].rotate[@as(c_uint, @intCast(@as(c_int, 2)))];
model.bindPose[i].rotation.w = ijoint[i].rotate[@as(c_uint, @intCast(@as(c_int, 3)))];
model.bindPose[i].scale.x = ijoint[i].scale[@as(c_uint, @intCast(@as(c_int, 0)))];
model.bindPose[i].scale.y = ijoint[i].scale[@as(c_uint, @intCast(@as(c_int, 1)))];
model.bindPose[i].scale.z = ijoint[i].scale[@as(c_uint, @intCast(@as(c_int, 2)))];
}
}
BuildPoseFromParentJoints(model.bones, model.boneCount, model.bindPose);
UnloadFileData(fileData);
free(@as(?*anyopaque, @ptrCast(imesh)));
free(@as(?*anyopaque, @ptrCast(tri)));
free(@as(?*anyopaque, @ptrCast(va)));
free(@as(?*anyopaque, @ptrCast(vertex)));
free(@as(?*anyopaque, @ptrCast(normal)));
free(@as(?*anyopaque, @ptrCast(text)));
free(@as(?*anyopaque, @ptrCast(blendi)));
free(@as(?*anyopaque, @ptrCast(blendw)));
free(@as(?*anyopaque, @ptrCast(ijoint)));
free(@as(?*anyopaque, @ptrCast(color)));
return model;
}
pub fn LoadModelAnimationsIQM(arg_fileName: [*c]const u8, arg_animCount: [*c]c_int) callconv(.C) [*c]ModelAnimation {
var fileName = arg_fileName;
_ = &fileName;
var animCount = arg_animCount;
_ = &animCount;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
var fileDataPtr: [*c]u8 = fileData;
_ = &fileDataPtr;
const struct_IQMHeader = extern struct {
magic: [16]u8 = @import("std").mem.zeroes([16]u8),
version: c_uint = @import("std").mem.zeroes(c_uint),
dataSize: c_uint = @import("std").mem.zeroes(c_uint),
flags: c_uint = @import("std").mem.zeroes(c_uint),
num_text: c_uint = @import("std").mem.zeroes(c_uint),
ofs_text: c_uint = @import("std").mem.zeroes(c_uint),
num_meshes: c_uint = @import("std").mem.zeroes(c_uint),
ofs_meshes: c_uint = @import("std").mem.zeroes(c_uint),
num_vertexarrays: c_uint = @import("std").mem.zeroes(c_uint),
num_vertexes: c_uint = @import("std").mem.zeroes(c_uint),
ofs_vertexarrays: c_uint = @import("std").mem.zeroes(c_uint),
num_triangles: c_uint = @import("std").mem.zeroes(c_uint),
ofs_triangles: c_uint = @import("std").mem.zeroes(c_uint),
ofs_adjacency: c_uint = @import("std").mem.zeroes(c_uint),
num_joints: c_uint = @import("std").mem.zeroes(c_uint),
ofs_joints: c_uint = @import("std").mem.zeroes(c_uint),
num_poses: c_uint = @import("std").mem.zeroes(c_uint),
ofs_poses: c_uint = @import("std").mem.zeroes(c_uint),
num_anims: c_uint = @import("std").mem.zeroes(c_uint),
ofs_anims: c_uint = @import("std").mem.zeroes(c_uint),
num_frames: c_uint = @import("std").mem.zeroes(c_uint),
num_framechannels: c_uint = @import("std").mem.zeroes(c_uint),
ofs_frames: c_uint = @import("std").mem.zeroes(c_uint),
ofs_bounds: c_uint = @import("std").mem.zeroes(c_uint),
num_comment: c_uint = @import("std").mem.zeroes(c_uint),
ofs_comment: c_uint = @import("std").mem.zeroes(c_uint),
num_extensions: c_uint = @import("std").mem.zeroes(c_uint),
ofs_extensions: c_uint = @import("std").mem.zeroes(c_uint),
};
_ = &struct_IQMHeader;
const IQMHeader = struct_IQMHeader;
_ = &IQMHeader;
const struct_IQMJoint = extern struct {
name: c_uint = @import("std").mem.zeroes(c_uint),
parent: c_int = @import("std").mem.zeroes(c_int),
translate: [3]f32 = @import("std").mem.zeroes([3]f32),
rotate: [4]f32 = @import("std").mem.zeroes([4]f32),
scale: [3]f32 = @import("std").mem.zeroes([3]f32),
};
_ = &struct_IQMJoint;
const IQMJoint = struct_IQMJoint;
_ = &IQMJoint;
const struct_IQMPose = extern struct {
parent: c_int = @import("std").mem.zeroes(c_int),
mask: c_uint = @import("std").mem.zeroes(c_uint),
channeloffset: [10]f32 = @import("std").mem.zeroes([10]f32),
channelscale: [10]f32 = @import("std").mem.zeroes([10]f32),
};
_ = &struct_IQMPose;
const IQMPose = struct_IQMPose;
_ = &IQMPose;
const struct_IQMAnim = extern struct {
name: c_uint = @import("std").mem.zeroes(c_uint),
first_frame: c_uint = @import("std").mem.zeroes(c_uint),
num_frames: c_uint = @import("std").mem.zeroes(c_uint),
framerate: f32 = @import("std").mem.zeroes(f32),
flags: c_uint = @import("std").mem.zeroes(c_uint),
};
_ = &struct_IQMAnim;
const IQMAnim = struct_IQMAnim;
_ = &IQMAnim;
if (fileDataPtr == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return null;
var iqmHeader: [*c]IQMHeader = @as([*c]IQMHeader, @ptrCast(@alignCast(fileDataPtr)));
_ = &iqmHeader;
if (memcmp(@as(?*const anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&iqmHeader.*.magic))))), @as(?*const anyopaque, @ptrCast("INTERQUAKEMODEL")), @sizeOf([16]u8)) != @as(c_int, 0)) {
TraceLog(LOG_WARNING, "MODEL: [%s] IQM file is not a valid model", fileName);
return null;
}
if (iqmHeader.*.version != @as(c_uint, @bitCast(@as(c_int, 2)))) {
TraceLog(LOG_WARNING, "MODEL: [%s] IQM file version not supported (%i)", fileName, iqmHeader.*.version);
return null;
}
var poses: [*c]IQMPose = @as([*c]IQMPose, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_poses))) *% @sizeOf(IQMPose)))));
_ = &poses;
_ = memcpy(@as(?*anyopaque, @ptrCast(poses)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_poses)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_poses))) *% @sizeOf(IQMPose));
animCount.* = @as(c_int, @bitCast(iqmHeader.*.num_anims));
var anim: [*c]IQMAnim = @as([*c]IQMAnim, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_anims))) *% @sizeOf(IQMAnim)))));
_ = &anim;
_ = memcpy(@as(?*anyopaque, @ptrCast(anim)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_anims)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_anims))) *% @sizeOf(IQMAnim));
var animations: [*c]ModelAnimation = @as([*c]ModelAnimation, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_anims))) *% @sizeOf(ModelAnimation)))));
_ = &animations;
var framedata: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_frames *% iqmHeader.*.num_framechannels))) *% @sizeOf(c_ushort)))));
_ = &framedata;
_ = memcpy(@as(?*anyopaque, @ptrCast(framedata)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_frames)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_frames *% iqmHeader.*.num_framechannels))) *% @sizeOf(c_ushort));
var joints: [*c]IQMJoint = @as([*c]IQMJoint, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(IQMJoint)))));
_ = &joints;
_ = memcpy(@as(?*anyopaque, @ptrCast(joints)), @as(?*const anyopaque, @ptrCast(fileDataPtr + iqmHeader.*.ofs_joints)), @as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_joints))) *% @sizeOf(IQMJoint));
{
var a: c_uint = 0;
_ = &a;
while (a < iqmHeader.*.num_anims) : (a +%= 1) {
animations[a].frameCount = @as(c_int, @bitCast(anim[a].num_frames));
animations[a].boneCount = @as(c_int, @bitCast(iqmHeader.*.num_poses));
animations[a].bones = @as([*c]BoneInfo, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_poses))) *% @sizeOf(BoneInfo)))));
animations[a].framePoses = @as([*c][*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, anim[a].num_frames))) *% @sizeOf([*c]Transform)))));
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&animations[a].name))))), @as(?*const anyopaque, @ptrCast((fileDataPtr + iqmHeader.*.ofs_text) + anim[a].name)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 32)))));
TraceLog(LOG_INFO, "IQM Anim %s", @as([*c]u8, @ptrCast(@alignCast(&animations[a].name))));
{
var j: c_uint = 0;
_ = &j;
while (j < iqmHeader.*.num_poses) : (j +%= 1) {
if (iqmHeader.*.num_joints > @as(c_uint, @bitCast(@as(c_int, 0)))) {
_ = memcpy(@as(?*anyopaque, @ptrCast(@as([*c]u8, @ptrCast(@alignCast(&animations[a].bones[j].name))))), @as(?*const anyopaque, @ptrCast((fileDataPtr + iqmHeader.*.ofs_text) + joints[j].name)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 32)))) *% @sizeOf(u8));
} else {
_ = strcpy(@as([*c]u8, @ptrCast(@alignCast(&animations[a].bones[j].name))), "ANIMJOINTNAME");
}
animations[a].bones[j].parent = poses[j].parent;
}
}
{
var j: c_uint = 0;
_ = &j;
while (j < anim[a].num_frames) : (j +%= 1) {
animations[a].framePoses[j] = @as([*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, iqmHeader.*.num_poses))) *% @sizeOf(Transform)))));
}
}
var dcounter: c_int = @as(c_int, @bitCast(anim[a].first_frame *% iqmHeader.*.num_framechannels));
_ = &dcounter;
{
var frame: c_uint = 0;
_ = &frame;
while (frame < anim[a].num_frames) : (frame +%= 1) {
{
var i: c_uint = 0;
_ = &i;
while (i < iqmHeader.*.num_poses) : (i +%= 1) {
animations[a].framePoses[frame][i].translation.x = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 0)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 1)))) != 0) {
animations[a].framePoses[frame][i].translation.x += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 0)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].translation.y = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 1)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 2)))) != 0) {
animations[a].framePoses[frame][i].translation.y += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 1)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].translation.z = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 2)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 4)))) != 0) {
animations[a].framePoses[frame][i].translation.z += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 2)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].rotation.x = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 3)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 8)))) != 0) {
animations[a].framePoses[frame][i].rotation.x += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 3)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].rotation.y = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 4)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 16)))) != 0) {
animations[a].framePoses[frame][i].rotation.y += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 4)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].rotation.z = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 5)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 32)))) != 0) {
animations[a].framePoses[frame][i].rotation.z += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 5)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].rotation.w = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 6)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 64)))) != 0) {
animations[a].framePoses[frame][i].rotation.w += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 6)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].scale.x = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 7)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 128)))) != 0) {
animations[a].framePoses[frame][i].scale.x += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 7)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].scale.y = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 8)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 256)))) != 0) {
animations[a].framePoses[frame][i].scale.y += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 8)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].scale.z = poses[i].channeloffset[@as(c_uint, @intCast(@as(c_int, 9)))];
if ((poses[i].mask & @as(c_uint, @bitCast(@as(c_int, 512)))) != 0) {
animations[a].framePoses[frame][i].scale.z += @as(f32, @floatFromInt(@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = dcounter;
if (tmp >= 0) break :blk framedata + @as(usize, @intCast(tmp)) else break :blk framedata - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))))) * poses[i].channelscale[@as(c_uint, @intCast(@as(c_int, 9)))];
dcounter += 1;
}
animations[a].framePoses[frame][i].rotation = QuaternionNormalize(animations[a].framePoses[frame][i].rotation);
}
}
}
}
{
var frame: c_uint = 0;
_ = &frame;
while (frame < anim[a].num_frames) : (frame +%= 1) {
{
var i: c_int = 0;
_ = &i;
while (i < animations[a].boneCount) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent >= @as(c_int, 0)) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionMultiply((blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation, (blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3RotateByQuaternion((blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3Add((blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale = Vector3Multiply((blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk animations[a].framePoses[frame] + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses[frame] - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale);
}
}
}
}
}
}
}
UnloadFileData(fileData);
free(@as(?*anyopaque, @ptrCast(joints)));
free(@as(?*anyopaque, @ptrCast(framedata)));
free(@as(?*anyopaque, @ptrCast(poses)));
free(@as(?*anyopaque, @ptrCast(anim)));
return animations;
}
pub fn LoadGLTF(arg_fileName: [*c]const u8) callconv(.C) Model {
var fileName = arg_fileName;
_ = &fileName;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
if (fileData == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return model;
var options: cgltf_options = cgltf_options{
.type = @as(c_uint, @bitCast(@as(c_int, 0))),
.json_token_count = @import("std").mem.zeroes(cgltf_size),
.memory = @import("std").mem.zeroes(cgltf_memory_options),
.file = @import("std").mem.zeroes(cgltf_file_options),
};
_ = &options;
options.file.read = &LoadFileGLTFCallback;
options.file.release = &ReleaseFileGLTFCallback;
var data: [*c]cgltf_data = null;
_ = &data;
var result: cgltf_result = cgltf_parse(&options, @as(?*const anyopaque, @ptrCast(fileData)), @as(cgltf_size, @bitCast(@as(c_long, dataSize))), &data);
_ = &result;
if (result == @as(c_uint, @bitCast(cgltf_result_success))) {
if (data.*.file_type == @as(c_uint, @bitCast(cgltf_file_type_glb))) {
TraceLog(LOG_INFO, "MODEL: [%s] Model basic data (glb) loaded successfully", fileName);
} else if (data.*.file_type == @as(c_uint, @bitCast(cgltf_file_type_gltf))) {
TraceLog(LOG_INFO, "MODEL: [%s] Model basic data (glTF) loaded successfully", fileName);
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Model format not recognized", fileName);
}
TraceLog(LOG_INFO, " > Meshes count: %i", data.*.meshes_count);
TraceLog(LOG_INFO, " > Materials count: %i (+1 default)", data.*.materials_count);
TraceLog(LOG_DEBUG, " > Buffers count: %i", data.*.buffers_count);
TraceLog(LOG_DEBUG, " > Images count: %i", data.*.images_count);
TraceLog(LOG_DEBUG, " > Textures count: %i", data.*.textures_count);
result = cgltf_load_buffers(&options, data, fileName);
if (result != @as(c_uint, @bitCast(cgltf_result_success))) {
TraceLog(LOG_INFO, "MODEL: [%s] Failed to load mesh/material buffers", fileName);
}
var primitivesCount: c_int = 0;
_ = &primitivesCount;
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < data.*.nodes_count) : (i +%= 1) {
var node: [*c]cgltf_node = &data.*.nodes[i];
_ = &node;
var mesh: [*c]cgltf_mesh = node.*.mesh;
_ = &mesh;
if (!(mesh != null)) continue;
{
var p: c_uint = 0;
_ = &p;
while (@as(cgltf_size, @bitCast(@as(c_ulong, p))) < mesh.*.primitives_count) : (p +%= 1) {
if (mesh.*.primitives[p].type == @as(c_uint, @bitCast(cgltf_primitive_type_triangles))) {
primitivesCount += 1;
}
}
}
}
}
TraceLog(LOG_DEBUG, " > Primitives (triangles only) count based on hierarchy : %i", primitivesCount);
model.meshCount = primitivesCount;
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(Mesh)))));
model.materialCount = @as(c_int, @bitCast(@as(c_uint, @truncate(data.*.materials_count)))) + @as(c_int, 1);
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount))), @sizeOf(Material)))));
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
{
var i: c_uint = 0;
_ = &i;
var j: c_uint = 1;
_ = &j;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < data.*.materials_count) : (_ = blk: {
i +%= 1;
break :blk blk_1: {
const ref = &j;
const tmp = ref.*;
ref.* +%= 1;
break :blk_1 tmp;
};
}) {
model.materials[j] = LoadMaterialDefault();
var texPath: [*c]const u8 = GetDirectoryPath(fileName);
_ = &texPath;
if (data.*.materials[i].has_pbr_metallic_roughness != 0) {
if (data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture != null) {
var imAlbedo: Image = LoadImageFromCgltfImage(data.*.materials[i].pbr_metallic_roughness.base_color_texture.texture.*.image, texPath);
_ = &imAlbedo;
if (imAlbedo.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(imAlbedo);
UnloadImage(imAlbedo);
}
}
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r = @as(u8, @intFromFloat(data.*.materials[i].pbr_metallic_roughness.base_color_factor[@as(c_uint, @intCast(@as(c_int, 0)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g = @as(u8, @intFromFloat(data.*.materials[i].pbr_metallic_roughness.base_color_factor[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b = @as(u8, @intFromFloat(data.*.materials[i].pbr_metallic_roughness.base_color_factor[@as(c_uint, @intCast(@as(c_int, 2)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a = @as(u8, @intFromFloat(data.*.materials[i].pbr_metallic_roughness.base_color_factor[@as(c_uint, @intCast(@as(c_int, 3)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
if (data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture != null) {
var imMetallicRoughness: Image = LoadImageFromCgltfImage(data.*.materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture.*.image, texPath);
_ = &imMetallicRoughness;
if (imMetallicRoughness.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
(blk: {
const tmp = MATERIAL_MAP_ROUGHNESS;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(imMetallicRoughness);
UnloadImage(imMetallicRoughness);
}
var roughness: f32 = data.*.materials[i].pbr_metallic_roughness.roughness_factor;
_ = &roughness;
(blk: {
const tmp = MATERIAL_MAP_ROUGHNESS;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = roughness;
var metallic: f32 = data.*.materials[i].pbr_metallic_roughness.metallic_factor;
_ = &metallic;
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = metallic;
}
if (data.*.materials[i].normal_texture.texture != null) {
var imNormal: Image = LoadImageFromCgltfImage(data.*.materials[i].normal_texture.texture.*.image, texPath);
_ = &imNormal;
if (imNormal.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(imNormal);
UnloadImage(imNormal);
}
}
if (data.*.materials[i].occlusion_texture.texture != null) {
var imOcclusion: Image = LoadImageFromCgltfImage(data.*.materials[i].occlusion_texture.texture.*.image, texPath);
_ = &imOcclusion;
if (imOcclusion.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
(blk: {
const tmp = MATERIAL_MAP_OCCLUSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(imOcclusion);
UnloadImage(imOcclusion);
}
}
if (data.*.materials[i].emissive_texture.texture != null) {
var imEmissive: Image = LoadImageFromCgltfImage(data.*.materials[i].emissive_texture.texture.*.image, texPath);
_ = &imEmissive;
if (imEmissive.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(imEmissive);
UnloadImage(imEmissive);
}
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.r = @as(u8, @intFromFloat(data.*.materials[i].emissive_factor[@as(c_uint, @intCast(@as(c_int, 0)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.g = @as(u8, @intFromFloat(data.*.materials[i].emissive_factor[@as(c_uint, @intCast(@as(c_int, 1)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.b = @as(u8, @intFromFloat(data.*.materials[i].emissive_factor[@as(c_uint, @intCast(@as(c_int, 2)))] * @as(cgltf_float, @floatFromInt(@as(c_int, 255)))));
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk model.materials[j].maps + @as(usize, @intCast(tmp)) else break :blk model.materials[j].maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color.a = 255;
}
}
}
}
var meshIndex: c_int = 0;
_ = &meshIndex;
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < data.*.nodes_count) : (i +%= 1) {
var node: [*c]cgltf_node = &data.*.nodes[i];
_ = &node;
var mesh: [*c]cgltf_mesh = node.*.mesh;
_ = &mesh;
if (!(mesh != null)) continue;
var worldTransform: [16]cgltf_float = undefined;
_ = &worldTransform;
cgltf_node_transform_world(node, @as([*c]cgltf_float, @ptrCast(@alignCast(&worldTransform))));
var worldMatrix: Matrix = Matrix{
.m0 = worldTransform[@as(c_uint, @intCast(@as(c_int, 0)))],
.m4 = worldTransform[@as(c_uint, @intCast(@as(c_int, 4)))],
.m8 = worldTransform[@as(c_uint, @intCast(@as(c_int, 8)))],
.m12 = worldTransform[@as(c_uint, @intCast(@as(c_int, 12)))],
.m1 = worldTransform[@as(c_uint, @intCast(@as(c_int, 1)))],
.m5 = worldTransform[@as(c_uint, @intCast(@as(c_int, 5)))],
.m9 = worldTransform[@as(c_uint, @intCast(@as(c_int, 9)))],
.m13 = worldTransform[@as(c_uint, @intCast(@as(c_int, 13)))],
.m2 = worldTransform[@as(c_uint, @intCast(@as(c_int, 2)))],
.m6 = worldTransform[@as(c_uint, @intCast(@as(c_int, 6)))],
.m10 = worldTransform[@as(c_uint, @intCast(@as(c_int, 10)))],
.m14 = worldTransform[@as(c_uint, @intCast(@as(c_int, 14)))],
.m3 = worldTransform[@as(c_uint, @intCast(@as(c_int, 3)))],
.m7 = worldTransform[@as(c_uint, @intCast(@as(c_int, 7)))],
.m11 = worldTransform[@as(c_uint, @intCast(@as(c_int, 11)))],
.m15 = worldTransform[@as(c_uint, @intCast(@as(c_int, 15)))],
};
_ = &worldMatrix;
var worldMatrixNormals: Matrix = MatrixTranspose(MatrixInvert(worldMatrix));
_ = &worldMatrixNormals;
{
var p: c_uint = 0;
_ = &p;
while (@as(cgltf_size, @bitCast(@as(c_ulong, p))) < mesh.*.primitives_count) : (p +%= 1) {
if (mesh.*.primitives[p].type != @as(c_uint, @bitCast(cgltf_primitive_type_triangles))) continue;
{
var j: c_uint = 0;
_ = &j;
while (@as(cgltf_size, @bitCast(@as(c_ulong, j))) < mesh.*.primitives[p].attributes_count) : (j +%= 1) {
if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_position))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if ((attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec3))) and (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f)))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount = @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.count))));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) *% @sizeOf(f32)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 3)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
var vertices: [*c]f32 = (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices;
_ = &vertices;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
var vt: Vector3 = Vector3Transform(Vector3{
.x = vertices[@as(c_uint, @bitCast(@as(c_int, 3))) *% k],
.y = vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))],
.z = vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))],
}, worldMatrix);
_ = &vt;
vertices[@as(c_uint, @bitCast(@as(c_int, 3))) *% k] = vt.x;
vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = vt.y;
vertices[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = vt.z;
}
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Vertices attribute data format not supported, use vec3 float", fileName);
}
} else if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_normal))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if ((attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec3))) and (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f)))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) *% @sizeOf(f32)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 3)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
var normals: [*c]f32 = (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals;
_ = &normals;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
var nt: Vector3 = Vector3Transform(Vector3{
.x = normals[@as(c_uint, @bitCast(@as(c_int, 3))) *% k],
.y = normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))],
.z = normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))],
}, worldMatrixNormals);
_ = &nt;
normals[@as(c_uint, @bitCast(@as(c_int, 3))) *% k] = nt.x;
normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = nt.y;
normals[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = nt.z;
}
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Normal attribute data format not supported, use vec3 float", fileName);
}
} else if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_tangent))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if ((attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec4))) and (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f)))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.tangents = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(f32)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.tangents[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
var tangents: [*c]f32 = (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.tangents;
_ = &tangents;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
var tt: Vector3 = Vector3Transform(Vector3{
.x = tangents[@as(c_uint, @bitCast(@as(c_int, 3))) *% k],
.y = tangents[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))],
.z = tangents[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))],
}, worldMatrix);
_ = &tt;
tangents[@as(c_uint, @bitCast(@as(c_int, 3))) *% k] = tt.x;
tangents[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 1)))] = tt.y;
tangents[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(@as(c_int, 2)))] = tt.z;
}
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Tangent attribute data format not supported, use vec4 float", fileName);
}
} else if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_texcoord))) {
var texcoordPtr: [*c]f32 = null;
_ = &texcoordPtr;
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if (attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec2))) {
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) {
texcoordPtr = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(f32)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 2)) : (l += 1) {
texcoordPtr[(@as(c_uint, @bitCast(@as(c_int, 2))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_8u))) {
texcoordPtr = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(f32)))));
var temp: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(u8)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(u8))) + (attribute.*.offset / @sizeOf(u8));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 2)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 2))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(u8)))));
}
}
}
{
var t: c_uint = 0;
_ = &t;
while (@as(cgltf_size, @bitCast(@as(c_ulong, t))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2)))))) : (t +%= 1) {
texcoordPtr[t] = @as(f32, @floatFromInt(temp[t])) / 255.0;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
texcoordPtr = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(f32)))));
var temp: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2))))) *% @sizeOf(c_ushort)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 2)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 2))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
{
var t: c_uint = 0;
_ = &t;
while (@as(cgltf_size, @bitCast(@as(c_ulong, t))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 2)))))) : (t +%= 1) {
texcoordPtr[t] = @as(f32, @floatFromInt(temp[t])) / 65535.0;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Texcoords attribute data format not supported", fileName);
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Texcoords attribute data format not supported, use vec2 float", fileName);
}
var index_1: c_int = mesh.*.primitives[p].attributes[j].index;
_ = &index_1;
if (index_1 == @as(c_int, 0)) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoords = texcoordPtr;
} else if (index_1 == @as(c_int, 1)) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoords2 = texcoordPtr;
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] No more than 2 texture coordinates attributes supported", fileName);
if (texcoordPtr != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
free(@as(?*anyopaque, @ptrCast(texcoordPtr)));
}
}
} else if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_color))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if (attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec3))) {
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_8u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
var temp: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) *% @sizeOf(u8)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(u8))) + (attribute.*.offset / @sizeOf(u8));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 3)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(u8)))));
}
}
}
{
var c: c_uint = 0;
_ = &c;
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, c))) < ((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))))) : (_ = blk: {
c +%= @as(c_uint, @bitCast(@as(c_int, 4)));
break :blk blk_1: {
const ref = &k;
ref.* +%= @as(c_uint, @bitCast(@as(c_int, 3)));
break :blk_1 ref.*;
};
}) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c] = temp[k];
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 1)))] = temp[k +% @as(c_uint, @bitCast(@as(c_int, 1)))];
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 2)))] = temp[k +% @as(c_uint, @bitCast(@as(c_int, 2)))];
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 3)))] = 255;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
var temp: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) *% @sizeOf(c_ushort)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 3)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
{
var c: c_uint = 0;
_ = &c;
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, c))) < ((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))))) : (_ = blk: {
c +%= @as(c_uint, @bitCast(@as(c_int, 4)));
break :blk blk_1: {
const ref = &k;
ref.* +%= @as(c_uint, @bitCast(@as(c_int, 3)));
break :blk_1 ref.*;
};
}) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c] = @as(u8, @intFromFloat((@as(f32, @floatFromInt(temp[k])) / 65535.0) * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 1)))] = @as(u8, @intFromFloat((@as(f32, @floatFromInt(temp[k +% @as(c_uint, @bitCast(@as(c_int, 1)))])) / 65535.0) * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 2)))] = @as(u8, @intFromFloat((@as(f32, @floatFromInt(temp[k +% @as(c_uint, @bitCast(@as(c_int, 2)))])) / 65535.0) * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 3)))] = 255;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
var temp: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3))))) *% @sizeOf(f32)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 3)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 3))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
{
var c: c_uint = 0;
_ = &c;
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, c))) < ((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))))) : (_ = blk: {
c +%= @as(c_uint, @bitCast(@as(c_int, 4)));
break :blk blk_1: {
const ref = &k;
ref.* +%= @as(c_uint, @bitCast(@as(c_int, 3)));
break :blk_1 ref.*;
};
}) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c] = @as(u8, @intFromFloat(temp[k] * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 1)))] = @as(u8, @intFromFloat(temp[k +% @as(c_uint, @bitCast(@as(c_int, 1)))] * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 2)))] = @as(u8, @intFromFloat(temp[k +% @as(c_uint, @bitCast(@as(c_int, 2)))] * 255.0));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c +% @as(c_uint, @bitCast(@as(c_int, 3)))] = 255;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Color attribute data format not supported", fileName);
}
} else if (attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec4))) {
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_8u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(u8))) + (attribute.*.offset / @sizeOf(u8));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(u8)))));
}
}
}
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
var temp: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(c_ushort)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
{
var c: c_uint = 0;
_ = &c;
while (@as(cgltf_size, @bitCast(@as(c_ulong, c))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) : (c +%= 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c] = @as(u8, @intFromFloat((@as(f32, @floatFromInt(temp[c])) / 65535.0) * 255.0));
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
var temp: [*c]f32 = @as([*c]f32, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(f32)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
{
var c: c_uint = 0;
_ = &c;
while (@as(cgltf_size, @bitCast(@as(c_ulong, c))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) : (c +%= 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors[c] = @as(u8, @intFromFloat(temp[c] * 255.0));
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Color attribute data format not supported", fileName);
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Color attribute data format not supported", fileName);
}
}
}
}
if (mesh.*.primitives[p].indices != @as([*c]cgltf_accessor, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].indices;
_ = &attribute;
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount = @divTrunc(@as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.count)))), @as(c_int, 3));
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.indices = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(attribute.*.count *% @sizeOf(c_ushort)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 1)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.indices[(@as(c_uint, @bitCast(@as(c_int, 1))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.indices = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(attribute.*.count *% @sizeOf(c_ushort)))));
var temp: [*c]c_uint = @as([*c]c_uint, @ptrCast(@alignCast(malloc(attribute.*.count *% @sizeOf(c_uint)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_uint = (@as([*c]c_uint, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_uint))) + (attribute.*.offset / @sizeOf(c_uint));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 1)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 1))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_uint)))));
}
}
}
{
var d: c_uint = 0;
_ = &d;
while (@as(cgltf_size, @bitCast(@as(c_ulong, d))) < attribute.*.count) : (d +%= 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.indices[d] = @as(c_ushort, @bitCast(@as(c_ushort, @truncate(temp[d]))));
}
}
TraceLog(LOG_WARNING, "MODEL: [%s] Indices data converted from u32 to u16, possible loss of data", fileName);
free(@as(?*anyopaque, @ptrCast(temp)));
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Indices data format not supported, use u16", fileName);
}
} else {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount = @divTrunc((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount, @as(c_int, 3));
}
{
var m: c_uint = 0;
_ = &m;
while (@as(cgltf_size, @bitCast(@as(c_ulong, m))) < data.*.materials_count) : (m +%= 1) {
if ((&data.*.materials[m]) == mesh.*.primitives[p].material) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshMaterial + @as(usize, @intCast(tmp)) else break :blk model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(c_int, @bitCast(m +% @as(c_uint, @bitCast(@as(c_int, 1)))));
break;
}
}
}
meshIndex += 1;
}
}
}
}
if (data.*.skins_count == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))) {
var skin: cgltf_skin = data.*.skins[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &skin;
model.bones = LoadBoneInfoGLTF(skin, &model.boneCount);
model.bindPose = @as([*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, model.boneCount))) *% @sizeOf(Transform)))));
{
var i: c_int = 0;
_ = &i;
while (i < model.boneCount) : (i += 1) {
var node: [*c]cgltf_node = (blk: {
const tmp = i;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &node;
var worldTransform: [16]cgltf_float = undefined;
_ = &worldTransform;
cgltf_node_transform_world(node, @as([*c]cgltf_float, @ptrCast(@alignCast(&worldTransform))));
var worldMatrix: Matrix = Matrix{
.m0 = worldTransform[@as(c_uint, @intCast(@as(c_int, 0)))],
.m4 = worldTransform[@as(c_uint, @intCast(@as(c_int, 4)))],
.m8 = worldTransform[@as(c_uint, @intCast(@as(c_int, 8)))],
.m12 = worldTransform[@as(c_uint, @intCast(@as(c_int, 12)))],
.m1 = worldTransform[@as(c_uint, @intCast(@as(c_int, 1)))],
.m5 = worldTransform[@as(c_uint, @intCast(@as(c_int, 5)))],
.m9 = worldTransform[@as(c_uint, @intCast(@as(c_int, 9)))],
.m13 = worldTransform[@as(c_uint, @intCast(@as(c_int, 13)))],
.m2 = worldTransform[@as(c_uint, @intCast(@as(c_int, 2)))],
.m6 = worldTransform[@as(c_uint, @intCast(@as(c_int, 6)))],
.m10 = worldTransform[@as(c_uint, @intCast(@as(c_int, 10)))],
.m14 = worldTransform[@as(c_uint, @intCast(@as(c_int, 14)))],
.m3 = worldTransform[@as(c_uint, @intCast(@as(c_int, 3)))],
.m7 = worldTransform[@as(c_uint, @intCast(@as(c_int, 7)))],
.m11 = worldTransform[@as(c_uint, @intCast(@as(c_int, 11)))],
.m15 = worldTransform[@as(c_uint, @intCast(@as(c_int, 15)))],
};
_ = &worldMatrix;
MatrixDecompose(worldMatrix, &(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, &(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation, &(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale);
}
}
} else if (data.*.skins_count > @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))) {
TraceLog(LOG_ERROR, "MODEL: [%s] can only load one skin (armature) per model, but gltf skins_count == %i", fileName, data.*.skins_count);
}
meshIndex = 0;
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < data.*.nodes_count) : (i +%= 1) {
var node: [*c]cgltf_node = &data.*.nodes[i];
_ = &node;
var mesh: [*c]cgltf_mesh = node.*.mesh;
_ = &mesh;
if (!(mesh != null)) continue;
{
var p: c_uint = 0;
_ = &p;
while (@as(cgltf_size, @bitCast(@as(c_ulong, p))) < mesh.*.primitives_count) : (p +%= 1) {
if (mesh.*.primitives[p].type != @as(c_uint, @bitCast(cgltf_primitive_type_triangles))) continue;
{
var j: c_uint = 0;
_ = &j;
while (@as(cgltf_size, @bitCast(@as(c_ulong, j))) < mesh.*.primitives[p].attributes_count) : (j +%= 1) {
if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_joints))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if (attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec4))) {
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_8u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneIds = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(u8))) + (attribute.*.offset / @sizeOf(u8));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneIds[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(u8)))));
}
}
}
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneIds = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
var temp: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(c_ushort)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
var boneIdOverflowWarning: bool = @as(c_int, 0) != 0;
_ = &boneIdOverflowWarning;
{
var b: c_int = 0;
_ = &b;
while (b < ((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4))) : (b += 1) {
if ((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = b;
if (tmp >= 0) break :blk temp + @as(usize, @intCast(tmp)) else break :blk temp - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) > @as(c_int, 255)) and !boneIdOverflowWarning) {
TraceLog(LOG_WARNING, "MODEL: [%s] Joint attribute data format (u16) overflow", fileName);
boneIdOverflowWarning = @as(c_int, 1) != 0;
}
(blk: {
const tmp = b;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = meshIndex;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = meshIndex;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(u8, @truncate((blk: {
const tmp = b;
if (tmp >= 0) break :blk temp + @as(usize, @intCast(tmp)) else break :blk temp - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))));
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Joint attribute data format not supported", fileName);
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Joint attribute data format not supported", fileName);
}
} else if (mesh.*.primitives[p].attributes[j].type == @as(c_uint, @bitCast(cgltf_attribute_type_weights))) {
var attribute: [*c]cgltf_accessor = mesh.*.primitives[p].attributes[j].data;
_ = &attribute;
if (attribute.*.type == @as(c_uint, @bitCast(cgltf_type_vec4))) {
if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_8u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(f32)))));
var temp: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(u8)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]u8 = (@as([*c]u8, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(u8))) + (attribute.*.offset / @sizeOf(u8));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(u8)))));
}
}
}
{
var b: c_uint = 0;
_ = &b;
while (@as(cgltf_size, @bitCast(@as(c_ulong, b))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) : (b +%= 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights[b] = @as(f32, @floatFromInt(temp[b])) / 255.0;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_16u))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(f32)))));
var temp: [*c]c_ushort = @as([*c]c_ushort, @ptrCast(@alignCast(malloc((attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4))))) *% @sizeOf(c_ushort)))));
_ = &temp;
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]c_ushort = (@as([*c]c_ushort, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(c_ushort))) + (attribute.*.offset / @sizeOf(c_ushort));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
temp[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(c_ushort)))));
}
}
}
{
var b: c_uint = 0;
_ = &b;
while (@as(cgltf_size, @bitCast(@as(c_ulong, b))) < (attribute.*.count *% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))))) : (b +%= 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights[b] = @as(f32, @floatFromInt(temp[b])) / 65535.0;
}
}
free(@as(?*anyopaque, @ptrCast(temp)));
} else if (attribute.*.component_type == @as(c_uint, @bitCast(cgltf_component_type_r_32f))) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(f32)))));
{
var n: c_int = 0;
_ = &n;
var buffer: [*c]f32 = (@as([*c]f32, @ptrCast(@alignCast(attribute.*.buffer_view.*.buffer.*.data))) + (attribute.*.buffer_view.*.offset / @sizeOf(f32))) + (attribute.*.offset / @sizeOf(f32));
_ = &buffer;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < attribute.*.count) : (k +%= 1) {
{
var l: c_int = 0;
_ = &l;
while (l < @as(c_int, 4)) : (l += 1) {
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights[(@as(c_uint, @bitCast(@as(c_int, 4))) *% k) +% @as(c_uint, @bitCast(l))] = (blk: {
const tmp = n + l;
if (tmp >= 0) break :blk buffer + @as(usize, @intCast(tmp)) else break :blk buffer - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
}
}
n += @as(c_int, @bitCast(@as(c_uint, @truncate(attribute.*.stride / @sizeOf(f32)))));
}
}
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Joint weight attribute data format not supported, use vec4 float", fileName);
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Joint weight attribute data format not supported, use vec4 float", fileName);
}
}
}
}
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animVertices = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
_ = memcpy(@as(?*anyopaque, @ptrCast((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animVertices)), @as(?*const anyopaque, @ptrCast((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices)), @as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32));
(blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animNormals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
if ((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals != @as([*c]f32, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = memcpy(@as(?*anyopaque, @ptrCast((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animNormals)), @as(?*const anyopaque, @ptrCast((blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals)), @as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = meshIndex;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32));
}
meshIndex += 1;
}
}
}
}
cgltf_free(data);
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load glTF data", fileName);
}
UnloadFileData(fileData);
return model;
}
pub fn LoadModelAnimationsGLTF(arg_fileName: [*c]const u8, arg_animCount: [*c]c_int) callconv(.C) [*c]ModelAnimation {
var fileName = arg_fileName;
_ = &fileName;
var animCount = arg_animCount;
_ = &animCount;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
var animations: [*c]ModelAnimation = null;
_ = &animations;
var options: cgltf_options = cgltf_options{
.type = @as(c_uint, @bitCast(@as(c_int, 0))),
.json_token_count = @import("std").mem.zeroes(cgltf_size),
.memory = @import("std").mem.zeroes(cgltf_memory_options),
.file = @import("std").mem.zeroes(cgltf_file_options),
};
_ = &options;
options.file.read = &LoadFileGLTFCallback;
options.file.release = &ReleaseFileGLTFCallback;
var data: [*c]cgltf_data = null;
_ = &data;
var result: cgltf_result = cgltf_parse(&options, @as(?*const anyopaque, @ptrCast(fileData)), @as(cgltf_size, @bitCast(@as(c_long, dataSize))), &data);
_ = &result;
if (result != @as(c_uint, @bitCast(cgltf_result_success))) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load glTF data", fileName);
animCount.* = 0;
return null;
}
result = cgltf_load_buffers(&options, data, fileName);
if (result != @as(c_uint, @bitCast(cgltf_result_success))) {
TraceLog(LOG_INFO, "MODEL: [%s] Failed to load animation buffers", fileName);
}
if (result == @as(c_uint, @bitCast(cgltf_result_success))) {
if (data.*.skins_count == @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1))))) {
var skin: cgltf_skin = data.*.skins[@as(c_uint, @intCast(@as(c_int, 0)))];
_ = &skin;
animCount.* = @as(c_int, @bitCast(@as(c_uint, @truncate(data.*.animations_count))));
animations = @as([*c]ModelAnimation, @ptrCast(@alignCast(malloc(data.*.animations_count *% @sizeOf(ModelAnimation)))));
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < data.*.animations_count) : (i +%= 1) {
animations[i].bones = LoadBoneInfoGLTF(skin, &animations[i].boneCount);
var animData: cgltf_animation = data.*.animations[i];
_ = &animData;
const struct_Channels = extern struct {
translate: [*c]cgltf_animation_channel = @import("std").mem.zeroes([*c]cgltf_animation_channel),
rotate: [*c]cgltf_animation_channel = @import("std").mem.zeroes([*c]cgltf_animation_channel),
scale: [*c]cgltf_animation_channel = @import("std").mem.zeroes([*c]cgltf_animation_channel),
interpolationType: cgltf_interpolation_type = @import("std").mem.zeroes(cgltf_interpolation_type),
};
_ = &struct_Channels;
var boneChannels: [*c]struct_Channels = @as([*c]struct_Channels, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, animations[i].boneCount))), @sizeOf(struct_Channels)))));
_ = &boneChannels;
var animDuration: f32 = 0.0;
_ = &animDuration;
{
var j: c_uint = 0;
_ = &j;
while (@as(cgltf_size, @bitCast(@as(c_ulong, j))) < animData.channels_count) : (j +%= 1) {
var channel: cgltf_animation_channel = animData.channels[j];
_ = &channel;
var boneIndex: c_int = -@as(c_int, 1);
_ = &boneIndex;
{
var k: c_uint = 0;
_ = &k;
while (@as(cgltf_size, @bitCast(@as(c_ulong, k))) < skin.joints_count) : (k +%= 1) {
if (animData.channels[j].target_node == skin.joints[k]) {
boneIndex = @as(c_int, @bitCast(k));
break;
}
}
}
if (boneIndex == -@as(c_int, 1)) {
continue;
}
(blk: {
const tmp = boneIndex;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.interpolationType = animData.channels[j].sampler.*.interpolation;
if (animData.channels[j].sampler.*.interpolation != @as(c_uint, @bitCast(cgltf_interpolation_type_max_enum))) {
if (channel.target_path == @as(c_uint, @bitCast(cgltf_animation_path_type_translation))) {
(blk: {
const tmp = boneIndex;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translate = &animData.channels[j];
} else if (channel.target_path == @as(c_uint, @bitCast(cgltf_animation_path_type_rotation))) {
(blk: {
const tmp = boneIndex;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotate = &animData.channels[j];
} else if (channel.target_path == @as(c_uint, @bitCast(cgltf_animation_path_type_scale))) {
(blk: {
const tmp = boneIndex;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale = &animData.channels[j];
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Unsupported target_path on channel %d's sampler for animation %d. Skipping.", fileName, j, i);
}
} else {
TraceLog(LOG_WARNING, "MODEL: [%s] Invalid interpolation curve encountered for GLTF animation.", fileName);
}
var t: f32 = 0.0;
_ = &t;
var r: cgltf_bool = cgltf_accessor_read_float(channel.sampler.*.input, channel.sampler.*.input.*.count -% @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))), &t, @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))));
_ = &r;
if (!(r != 0)) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load input time", fileName);
continue;
}
animDuration = if (t > animDuration) t else animDuration;
}
}
if (animData.name != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&animations[i].name))), animData.name, @sizeOf([32]u8));
animations[i].name[@sizeOf([32]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))] = '\x00';
}
animations[i].frameCount = @as(c_int, @intFromFloat((animDuration * 1000.0) / @as(f32, @floatFromInt(@as(c_int, 17))))) + @as(c_int, 1);
animations[i].framePoses = @as([*c][*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, animations[i].frameCount))) *% @sizeOf([*c]Transform)))));
{
var j: c_int = 0;
_ = &j;
while (j < animations[i].frameCount) : (j += 1) {
(blk: {
const tmp = j;
if (tmp >= 0) break :blk animations[i].framePoses + @as(usize, @intCast(tmp)) else break :blk animations[i].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as([*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, animations[i].boneCount))) *% @sizeOf(Transform)))));
var time: f32 = (@as(f32, @floatFromInt(j)) * @as(f32, @floatFromInt(@as(c_int, 17)))) / 1000.0;
_ = &time;
{
var k: c_int = 0;
_ = &k;
while (k < animations[i].boneCount) : (k += 1) {
var translation: Vector3 = Vector3{
.x = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.translation[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.translation[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.translation[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &translation;
var rotation: Quaternion = Quaternion{
.x = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.rotation[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.rotation[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.rotation[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.rotation[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &rotation;
var scale: Vector3 = Vector3{
.x = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.scale[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.scale[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = (blk: {
const tmp = k;
if (tmp >= 0) break :blk skin.joints + @as(usize, @intCast(tmp)) else break :blk skin.joints - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.*.scale[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &scale;
if ((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translate != null) {
if (!GetPoseAtTimeGLTF((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.interpolationType, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translate.*.sampler.*.input, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translate.*.sampler.*.output, time, @as(?*anyopaque, @ptrCast(&translation)))) {
TraceLog(LOG_INFO, "MODEL: [%s] Failed to load translate pose data for bone %s", fileName, @as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = k;
if (tmp >= 0) break :blk animations[i].bones + @as(usize, @intCast(tmp)) else break :blk animations[i].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))));
}
}
if ((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotate != null) {
if (!GetPoseAtTimeGLTF((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.interpolationType, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotate.*.sampler.*.input, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotate.*.sampler.*.output, time, @as(?*anyopaque, @ptrCast(&rotation)))) {
TraceLog(LOG_INFO, "MODEL: [%s] Failed to load rotate pose data for bone %s", fileName, @as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = k;
if (tmp >= 0) break :blk animations[i].bones + @as(usize, @intCast(tmp)) else break :blk animations[i].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))));
}
}
if ((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale != null) {
if (!GetPoseAtTimeGLTF((blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.interpolationType, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.*.sampler.*.input, (blk: {
const tmp = k;
if (tmp >= 0) break :blk boneChannels + @as(usize, @intCast(tmp)) else break :blk boneChannels - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.*.sampler.*.output, time, @as(?*anyopaque, @ptrCast(&scale)))) {
TraceLog(LOG_INFO, "MODEL: [%s] Failed to load scale pose data for bone %s", fileName, @as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = k;
if (tmp >= 0) break :blk animations[i].bones + @as(usize, @intCast(tmp)) else break :blk animations[i].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))));
}
}
(blk: {
const tmp = k;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[i].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[i].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[i].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[i].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = Transform{
.translation = translation,
.rotation = rotation,
.scale = scale,
};
}
}
BuildPoseFromParentJoints(animations[i].bones, animations[i].boneCount, (blk: {
const tmp = j;
if (tmp >= 0) break :blk animations[i].framePoses + @as(usize, @intCast(tmp)) else break :blk animations[i].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*);
}
}
TraceLog(LOG_INFO, "MODEL: [%s] Loaded animation: %s (%d frames, %fs)", fileName, if (animData.name != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) animData.name else "NULL", animations[i].frameCount, @as(f64, @floatCast(animDuration)));
free(@as(?*anyopaque, @ptrCast(boneChannels)));
}
}
} else {
TraceLog(LOG_ERROR, "MODEL: [%s] expected exactly one skin to load animation data from, but found %i", fileName, data.*.skins_count);
}
cgltf_free(data);
}
UnloadFileData(fileData);
return animations;
}
pub fn LoadVOX(arg_fileName: [*c]const u8) callconv(.C) Model {
var fileName = arg_fileName;
_ = &fileName;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
var nbvertices: c_int = 0;
_ = &nbvertices;
var meshescount: c_int = 0;
_ = &meshescount;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
if (fileData == null) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load VOX file", fileName);
return model;
}
var voxarray: VoxArray3D = VoxArray3D{
.sizeX = @as(c_int, 0),
.sizeY = 0,
.sizeZ = 0,
.chunksSizeX = 0,
.chunksSizeY = 0,
.chunksSizeZ = 0,
.m_arrayChunks = null,
.arrayChunksSize = 0,
.ChunkFlattenOffset = 0,
.chunksAllocated = 0,
.chunksTotal = 0,
.vertices = @import("std").mem.zeroes(ArrayVector3),
.normals = @import("std").mem.zeroes(ArrayVector3),
.indices = @import("std").mem.zeroes(ArrayUShort),
.colors = @import("std").mem.zeroes(ArrayColor),
.palette = @import("std").mem.zeroes([256]VoxColor),
};
_ = &voxarray;
var ret: c_int = Vox_LoadFromMemory(fileData, @as(c_uint, @bitCast(dataSize)), &voxarray);
_ = &ret;
if (ret != @as(c_int, 0)) {
UnloadFileData(fileData);
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load VOX data", fileName);
return model;
} else {
nbvertices = voxarray.vertices.used;
meshescount = @as(c_int, 1) + @divTrunc(nbvertices, @as(c_int, 65536));
TraceLog(LOG_INFO, "MODEL: [%s] VOX data loaded successfully : %i vertices/%i meshes", fileName, nbvertices, meshescount);
}
model.transform = MatrixIdentity();
model.meshCount = meshescount;
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(Mesh)))));
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
model.materialCount = 1;
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount))), @sizeOf(Material)))));
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
var verticesRemain: c_int = voxarray.vertices.used;
_ = &verticesRemain;
var verticesMax: c_int = 65532;
_ = &verticesMax;
var pvertices: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(voxarray.vertices.array)));
_ = &pvertices;
var pnormals: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(voxarray.normals.array)));
_ = &pnormals;
var pcolors: [*c]Color = @as([*c]Color, @ptrCast(@alignCast(voxarray.colors.array)));
_ = &pcolors;
var pindices: [*c]c_ushort = voxarray.indices.array;
_ = &pindices;
var size: c_int = 0;
_ = &size;
{
var i: c_int = 0;
_ = &i;
while (i < meshescount) : (i += 1) {
var pmesh: [*c]Mesh = &(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
_ = &pmesh;
_ = memset(@as(?*anyopaque, @ptrCast(pmesh)), @as(c_int, 0), @sizeOf(Mesh));
pmesh.*.vertexCount = @as(c_int, @intFromFloat(fmin(@as(f64, @floatFromInt(verticesMax)), @as(f64, @floatFromInt(verticesRemain)))));
size = @as(c_int, @bitCast(@as(c_uint, @truncate((@as(c_ulong, @bitCast(@as(c_long, pmesh.*.vertexCount))) *% @sizeOf(f32)) *% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 3))))))));
pmesh.*.vertices = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(pmesh.*.vertices)), @as(?*const anyopaque, @ptrCast(pvertices)), @as(c_ulong, @bitCast(@as(c_long, size))));
pmesh.*.normals = @as([*c]f32, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(pmesh.*.normals)), @as(?*const anyopaque, @ptrCast(pnormals)), @as(c_ulong, @bitCast(@as(c_long, size))));
size = @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, voxarray.indices.used))) *% @sizeOf(c_ushort)))));
pmesh.*.indices = @as([*c]c_ushort, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(pmesh.*.indices)), @as(?*const anyopaque, @ptrCast(pindices)), @as(c_ulong, @bitCast(@as(c_long, size))));
pmesh.*.triangleCount = @divTrunc(pmesh.*.vertexCount, @as(c_int, 4)) * @as(c_int, 2);
size = @as(c_int, @bitCast(@as(c_uint, @truncate(@as(c_ulong, @bitCast(@as(c_long, pmesh.*.vertexCount))) *% @sizeOf(Color)))));
pmesh.*.colors = @as([*c]u8, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, size)))))));
_ = memcpy(@as(?*anyopaque, @ptrCast(pmesh.*.colors)), @as(?*const anyopaque, @ptrCast(pcolors)), @as(c_ulong, @bitCast(@as(c_long, size))));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshMaterial + @as(usize, @intCast(tmp)) else break :blk model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 0;
verticesRemain -= verticesMax;
pvertices += @as(usize, @bitCast(@as(isize, @intCast(verticesMax))));
pnormals += @as(usize, @bitCast(@as(isize, @intCast(verticesMax))));
pcolors += @as(usize, @bitCast(@as(isize, @intCast(verticesMax))));
}
}
Vox_FreeArrays(&voxarray);
UnloadFileData(fileData);
return model;
}
pub fn LoadM3D(arg_fileName: [*c]const u8) callconv(.C) Model {
var fileName = arg_fileName;
_ = &fileName;
var model: Model = Model{
.transform = Matrix{
.m0 = @as(f32, @floatFromInt(@as(c_int, 0))),
.m4 = 0,
.m8 = 0,
.m12 = 0,
.m1 = 0,
.m5 = 0,
.m9 = 0,
.m13 = 0,
.m2 = 0,
.m6 = 0,
.m10 = 0,
.m14 = 0,
.m3 = 0,
.m7 = 0,
.m11 = 0,
.m15 = 0,
},
.meshCount = 0,
.materialCount = 0,
.meshes = null,
.materials = null,
.meshMaterial = null,
.boneCount = 0,
.bones = null,
.bindPose = null,
};
_ = &model;
var m3d: [*c]m3d_t = null;
_ = &m3d;
var prop: [*c]m3dp_t = null;
_ = &prop;
var i: c_int = undefined;
_ = &i;
var j: c_int = undefined;
_ = &j;
var k: c_int = undefined;
_ = &k;
var l: c_int = undefined;
_ = &l;
var n: c_int = undefined;
_ = &n;
var mi: c_int = -@as(c_int, 2);
_ = &mi;
var vcolor: c_int = 0;
_ = &vcolor;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
if (fileData != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
m3d = m3d_load(fileData, &m3d_loaderhook, &m3d_freehook, null);
if (!(m3d != null) or ((@as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) < @as(c_int, 0)) and (@as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) > -@as(c_int, 65)))) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load M3D data, error code %d", fileName, if (m3d != null) @as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) else -@as(c_int, 2));
if (m3d != null) {
m3d_free(m3d);
}
UnloadFileData(fileData);
return model;
} else {
TraceLog(LOG_INFO, "MODEL: [%s] M3D data loaded successfully: %i faces/%i materials", fileName, m3d.*.numface, m3d.*.nummaterial);
}
if (!(m3d.*.numface != 0)) {
m3d_free(m3d);
UnloadFileData(fileData);
return model;
}
if (m3d.*.nummaterial > @as(M3D_INDEX, @bitCast(@as(c_int, 0)))) {
model.meshCount = blk: {
const tmp = @as(c_int, @bitCast(m3d.*.nummaterial));
model.materialCount = tmp;
break :blk tmp;
};
TraceLog(LOG_INFO, "MODEL: model has %i material meshes", model.materialCount);
} else {
model.meshCount = 1;
model.materialCount = 0;
TraceLog(LOG_INFO, "MODEL: No materials, putting all meshes in a default material");
}
model.materialCount += 1;
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(Mesh)))));
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.meshCount))), @sizeOf(c_int)))));
model.materials = @as([*c]Material, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.materialCount + @as(c_int, 1)))), @sizeOf(Material)))));
model.materials[@as(c_uint, @intCast(@as(c_int, 0)))] = LoadMaterialDefault();
{
_ = blk: {
i = blk_1: {
const tmp = @as(c_int, 0);
l = tmp;
break :blk_1 tmp;
};
break :blk blk_1: {
const tmp = -@as(c_int, 1);
k = tmp;
break :blk_1 tmp;
};
};
while (i < @as(c_int, @bitCast(m3d.*.numface))) : (_ = blk: {
i += 1;
break :blk blk_1: {
const ref = &l;
const tmp = ref.*;
ref.* += 1;
break :blk_1 tmp;
};
}) {
if (@as(M3D_INDEX, @bitCast(mi)) != (blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.materialid) {
if ((k + @as(c_int, 1)) >= model.meshCount) {
model.meshCount += 1;
model.meshes = @as([*c]Mesh, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(model.meshes)), @as(c_ulong, @bitCast(@as(c_long, model.meshCount))) *% @sizeOf(Mesh)))));
_ = memset(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = model.meshCount - @as(c_int, 1);
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(c_int, 0), @sizeOf(Mesh));
model.meshMaterial = @as([*c]c_int, @ptrCast(@alignCast(realloc(@as(?*anyopaque, @ptrCast(model.meshMaterial)), @as(c_ulong, @bitCast(@as(c_long, model.meshCount))) *% @sizeOf(c_int)))));
}
k += 1;
mi = @as(c_int, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.materialid));
{
_ = blk: {
j = i;
break :blk blk_1: {
const tmp = blk_2: {
const tmp_3 = @as(c_int, 0);
vcolor = tmp_3;
break :blk_2 tmp_3;
};
l = tmp;
break :blk_1 tmp;
};
};
while ((j < @as(c_int, @bitCast(m3d.*.numface))) and (@as(M3D_INDEX, @bitCast(mi)) == (blk: {
const tmp = j;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.materialid)) : (_ = blk: {
j += 1;
break :blk blk_1: {
const ref = &l;
const tmp = ref.*;
ref.* += 1;
break :blk_1 tmp;
};
}) {
if ((!(m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].color != 0) or !(m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].color != 0)) or !(m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].color != 0))
{
vcolor = 1;
}
}
}
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount = l * @as(c_int, 3);
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.triangleCount = l;
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoords = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 2)))), @sizeOf(f32)))));
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
if ((@as(c_uint, @bitCast(mi)) == @as(c_uint, 4294967295)) or (vcolor != 0)) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
}
if ((@as(c_uint, @bitCast(mi)) == @as(c_uint, 4294967295)) and ((blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))))))) {
{
var c: c_int = 0;
_ = &c;
while (c < ((blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4))) : (c += 1) {
(blk: {
const tmp = c;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 255;
}
}
}
if ((m3d.*.numbone != 0) and (m3d.*.numskin != 0)) {
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneIds = @as([*c]u8, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(u8)))));
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneWeights = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 4)))), @sizeOf(f32)))));
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animVertices = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animNormals = @as([*c]f32, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))), @sizeOf(f32)))));
}
(blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshMaterial + @as(usize, @intCast(tmp)) else break :blk model.meshMaterial - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = mi + @as(c_int, 1);
l = 0;
}
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 0);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].x * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 1);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].y * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 2);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].z * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 3);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].x * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 4);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].y * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 5);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].z * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 6);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].x * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 7);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].y * m3d.*.scale;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 8);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.vertices - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].z * m3d.*.scale;
if ((blk: {
const tmp = k;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.colors != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
if ((m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].color & @as(c_uint, 4278190080)) != 0)
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = (l * @as(c_int, 12)) + @as(c_int, 0);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(?*const anyopaque, @ptrCast(&m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 0)))]].color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
}
if ((m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].color & @as(c_uint, 4278190080)) != 0)
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = (l * @as(c_int, 12)) + @as(c_int, 4);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(?*const anyopaque, @ptrCast(&m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 1)))]].color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
}
if ((m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].color & @as(c_uint, 4278190080)) != 0)
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = (l * @as(c_int, 12)) + @as(c_int, 8);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.colors - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*)), @as(?*const anyopaque, @ptrCast(&m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(@as(c_int, 2)))]].color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
}
}
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 0)))] != @as(c_uint, 4294967295)) {
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 0);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 0)))]].u;
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 1);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 1.0 - m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 0)))]].v;
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 2);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 1)))]].u;
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 3);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 1.0 - m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 1)))]].v;
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 4);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 2)))]].u;
(blk: {
const tmp = (l * @as(c_int, 6)) + @as(c_int, 5);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.texcoords - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 1.0 - m3d.*.tmap[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texcoord[@as(c_uint, @intCast(@as(c_int, 2)))]].v;
}
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 0)))] != @as(c_uint, 4294967295)) {
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 0);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 0)))]].x;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 1);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 0)))]].y;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 2);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 0)))]].z;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 3);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 1)))]].x;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 4);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 1)))]].y;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 5);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 1)))]].z;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 6);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 2)))]].x;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 7);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 2)))]].y;
(blk: {
const tmp = (l * @as(c_int, 9)) + @as(c_int, 8);
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.normals - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normal[@as(c_uint, @intCast(@as(c_int, 2)))]].z;
}
if ((m3d.*.numbone != 0) and (m3d.*.numskin != 0)) {
{
n = 0;
while (n < @as(c_int, 3)) : (n += 1) {
var skinid: c_int = @as(c_int, @bitCast(m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.face + @as(usize, @intCast(tmp)) else break :blk m3d.*.face - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertex[@as(c_uint, @intCast(n))]].skinid));
_ = &skinid;
if ((@as(c_uint, @bitCast(skinid)) != @as(c_uint, 4294967295)) and (skinid < @as(c_int, @bitCast(m3d.*.numskin)))) {
{
j = 0;
while (j < @as(c_int, 4)) : (j += 1) {
(blk: {
const tmp = ((l * @as(c_int, 12)) + (n * @as(c_int, 4))) + j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(u8, @truncate((blk: {
const tmp = skinid;
if (tmp >= 0) break :blk m3d.*.skin + @as(usize, @intCast(tmp)) else break :blk m3d.*.skin - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.boneid[@as(c_uint, @intCast(j))]))));
(blk: {
const tmp = ((l * @as(c_int, 12)) + (n * @as(c_int, 4))) + j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneWeights + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneWeights - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = (blk: {
const tmp = skinid;
if (tmp >= 0) break :blk m3d.*.skin + @as(usize, @intCast(tmp)) else break :blk m3d.*.skin - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.weight[@as(c_uint, @intCast(j))];
}
}
} else {
(blk: {
const tmp = (l * @as(c_int, 12)) + (n * @as(c_int, 4));
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneIds - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as(u8, @bitCast(@as(u8, @truncate(m3d.*.numbone))));
(blk: {
const tmp = (l * @as(c_int, 12)) + (n * @as(c_int, 4));
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneWeights + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = k;
if (tmp_2 >= 0) break :blk_1 model.meshes + @as(usize, @intCast(tmp_2)) else break :blk_1 model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.boneWeights - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = 1.0;
}
}
}
}
}
}
{
i = 0;
while (i < @as(c_int, @bitCast(m3d.*.nummaterial))) : (i += 1) {
(blk: {
const tmp = i + @as(c_int, 1);
if (tmp >= 0) break :blk model.materials + @as(usize, @intCast(tmp)) else break :blk model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = LoadMaterialDefault();
{
j = 0;
while (j < @as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.material + @as(usize, @intCast(tmp)) else break :blk m3d.*.material - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.numprop)))) : (j += 1) {
prop = &(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 m3d.*.material + @as(usize, @intCast(tmp_2)) else break :blk_1 m3d.*.material - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.prop + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 m3d.*.material + @as(usize, @intCast(tmp_2)) else break :blk_1 m3d.*.material - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.prop - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, prop.*.type)))) {
@as(c_int, 0) => {
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color)), @as(?*const anyopaque, @ptrCast(&prop.*.value.color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = 0.0;
}
break;
},
@as(c_int, 2) => {
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color)), @as(?*const anyopaque, @ptrCast(&prop.*.value.color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
}
break;
},
@as(c_int, 3) => {
{
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = prop.*.value.fnum;
}
break;
},
@as(c_int, 4) => {
{
_ = memcpy(@as(?*anyopaque, @ptrCast(&(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color)), @as(?*const anyopaque, @ptrCast(&prop.*.value.color)), @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 4)))));
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = 0.0;
}
break;
},
@as(c_int, 65) => {
{
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = prop.*.value.fnum;
}
break;
},
@as(c_int, 64) => {
{
(blk: {
const tmp = MATERIAL_MAP_ROUGHNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = prop.*.value.fnum;
}
break;
},
@as(c_int, 66) => {
{
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = prop.*.value.fnum;
}
break;
},
else => {
{
if (@as(c_int, @bitCast(@as(c_uint, prop.*.type))) >= @as(c_int, 128)) {
var image: Image = Image{
.data = null,
.width = 0,
.height = 0,
.mipmaps = 0,
.format = 0,
};
_ = &image;
image.data = @as(?*anyopaque, @ptrCast(m3d.*.texture[prop.*.value.textureid].d));
image.width = @as(c_int, @bitCast(@as(c_uint, m3d.*.texture[prop.*.value.textureid].w)));
image.height = @as(c_int, @bitCast(@as(c_uint, m3d.*.texture[prop.*.value.textureid].h)));
image.mipmaps = 1;
image.format = if (@as(c_int, @bitCast(@as(c_uint, m3d.*.texture[prop.*.value.textureid].f))) == @as(c_int, 4)) PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 else if (@as(c_int, @bitCast(@as(c_uint, m3d.*.texture[prop.*.value.textureid].f))) == @as(c_int, 3)) PIXELFORMAT_UNCOMPRESSED_R8G8B8 else if (@as(c_int, @bitCast(@as(c_uint, m3d.*.texture[prop.*.value.textureid].f))) == @as(c_int, 2)) PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA else PIXELFORMAT_UNCOMPRESSED_GRAYSCALE;
while (true) {
switch (@as(c_int, @bitCast(@as(c_uint, prop.*.type)))) {
@as(c_int, 128) => {
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
@as(c_int, 130) => {
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
@as(c_int, 132) => {
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
@as(c_int, 134) => {
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
@as(c_int, 129) => {
(blk: {
const tmp = MATERIAL_MAP_OCCLUSION;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
@as(c_int, 193) => {
(blk: {
const tmp = MATERIAL_MAP_ROUGHNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i + @as(c_int, 1);
if (tmp_2 >= 0) break :blk_1 model.materials + @as(usize, @intCast(tmp_2)) else break :blk_1 model.materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTextureFromImage(image);
break;
},
else => break,
}
break;
}
}
}
break;
},
}
break;
}
}
}
}
}
if (m3d.*.numbone != 0) {
model.boneCount = @as(c_int, @bitCast(m3d.*.numbone +% @as(M3D_INDEX, @bitCast(@as(c_int, 1)))));
model.bones = @as([*c]BoneInfo, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.boneCount))), @sizeOf(BoneInfo)))));
model.bindPose = @as([*c]Transform, @ptrCast(@alignCast(calloc(@as(c_ulong, @bitCast(@as(c_long, model.boneCount))), @sizeOf(Transform)))));
{
i = 0;
while (i < @as(c_int, @bitCast(m3d.*.numbone))) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent = @as(c_int, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent));
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))), (blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name, @sizeOf([32]u8));
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.x = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].x * m3d.*.scale;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.y = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].y * m3d.*.scale;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.z = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].z * m3d.*.scale;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.x = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].x;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.y = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].y;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.z = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].z;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.w = m3d.*.vertex[(blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].w;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionNormalize((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.x = blk: {
const tmp = blk_1: {
const tmp_2 = 1.0;
(blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.bindPose + @as(usize, @intCast(tmp_3)) else break :blk_2 model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*.scale.z = tmp_2;
break :blk_1 tmp_2;
};
(blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bindPose + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.scale.y = tmp;
break :blk tmp;
};
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent >= @as(c_int, 0)) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionMultiply((blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bones + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3RotateByQuaternion((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bones + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3Add((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bones + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale = Vector3Multiply((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bones + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale);
}
}
}
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent = -@as(c_int, 1);
_ = strcpy(@as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bones + @as(usize, @intCast(tmp)) else break :blk model.bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))), "NO BONE");
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.x = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.y = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.z = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.x = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.y = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.z = 0.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.w = 1.0;
(blk: {
const tmp = i;
if (tmp >= 0) break :blk model.bindPose + @as(usize, @intCast(tmp)) else break :blk model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.x = blk: {
const tmp = blk_1: {
const tmp_2 = 1.0;
(blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 model.bindPose + @as(usize, @intCast(tmp_3)) else break :blk_2 model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*.scale.z = tmp_2;
break :blk_1 tmp_2;
};
(blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 model.bindPose + @as(usize, @intCast(tmp_2)) else break :blk_1 model.bindPose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.scale.y = tmp;
break :blk tmp;
};
}
if ((m3d.*.numbone != 0) and (m3d.*.numskin != 0)) {
{
i = 0;
while (i < model.meshCount) : (i += 1) {
_ = memcpy(@as(?*anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animVertices)), @as(?*const anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertices)), @as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32));
_ = memcpy(@as(?*anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.animNormals)), @as(?*const anyopaque, @ptrCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.normals)), @as(c_ulong, @bitCast(@as(c_long, (blk: {
const tmp = i;
if (tmp >= 0) break :blk model.meshes + @as(usize, @intCast(tmp)) else break :blk model.meshes - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.vertexCount * @as(c_int, 3)))) *% @sizeOf(f32));
}
}
}
m3d_free(m3d);
UnloadFileData(fileData);
}
return model;
}
pub fn LoadModelAnimationsM3D(arg_fileName: [*c]const u8, arg_animCount: [*c]c_int) callconv(.C) [*c]ModelAnimation {
var fileName = arg_fileName;
_ = &fileName;
var animCount = arg_animCount;
_ = &animCount;
var animations: [*c]ModelAnimation = null;
_ = &animations;
var m3d: [*c]m3d_t = null;
_ = &m3d;
var i: c_int = 0;
_ = &i;
var j: c_int = 0;
_ = &j;
animCount.* = 0;
var dataSize: c_int = 0;
_ = &dataSize;
var fileData: [*c]u8 = LoadFileData(fileName, &dataSize);
_ = &fileData;
if (fileData != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
m3d = m3d_load(fileData, &m3d_loaderhook, &m3d_freehook, null);
if (!(m3d != null) or ((@as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) < @as(c_int, 0)) and (@as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) > -@as(c_int, 65)))) {
TraceLog(LOG_WARNING, "MODEL: [%s] Failed to load M3D data, error code %d", fileName, if (m3d != null) @as(c_int, @bitCast(@as(c_int, m3d.*.errcode))) else -@as(c_int, 2));
UnloadFileData(fileData);
return null;
} else {
TraceLog(LOG_INFO, "MODEL: [%s] M3D data loaded successfully: %i animations, %i bones, %i skins", fileName, m3d.*.numaction, m3d.*.numbone, m3d.*.numskin);
}
if ((!(m3d.*.numaction != 0) or !(m3d.*.numbone != 0)) or !(m3d.*.numskin != 0)) {
m3d_free(m3d);
UnloadFileData(fileData);
return null;
}
animations = @as([*c]ModelAnimation, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, m3d.*.numaction))) *% @sizeOf(ModelAnimation)))));
animCount.* = @as(c_int, @bitCast(m3d.*.numaction));
{
var a: c_uint = 0;
_ = &a;
while (a < m3d.*.numaction) : (a +%= 1) {
animations[a].frameCount = @as(c_int, @bitCast(m3d.*.action[a].durationmsec / @as(u32, @bitCast(@as(c_int, 17)))));
animations[a].boneCount = @as(c_int, @bitCast(m3d.*.numbone +% @as(M3D_INDEX, @bitCast(@as(c_int, 1)))));
animations[a].bones = @as([*c]BoneInfo, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, m3d.*.numbone +% @as(M3D_INDEX, @bitCast(@as(c_int, 1)))))) *% @sizeOf(BoneInfo)))));
animations[a].framePoses = @as([*c][*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_long, animations[a].frameCount))) *% @sizeOf([*c]Transform)))));
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&animations[a].name))), m3d.*.action[a].name, @sizeOf([32]u8));
animations[a].name[@sizeOf([32]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))] = '\x00';
TraceLog(LOG_INFO, "MODEL: [%s] animation #%i: %i msec, %i frames", fileName, a, m3d.*.action[a].durationmsec, animations[a].frameCount);
{
i = 0;
while (i < @as(c_int, @bitCast(m3d.*.numbone))) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent = @as(c_int, @bitCast((blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent));
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))), (blk: {
const tmp = i;
if (tmp >= 0) break :blk m3d.*.bone + @as(usize, @intCast(tmp)) else break :blk m3d.*.bone - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name, @sizeOf([32]u8));
}
}
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent = -@as(c_int, 1);
_ = strcpy(@as([*c]u8, @ptrCast(@alignCast(&(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.name))), "NO BONE");
{
i = 0;
while (i < animations[a].frameCount) : (i += 1) {
(blk: {
const tmp = i;
if (tmp >= 0) break :blk animations[a].framePoses + @as(usize, @intCast(tmp)) else break :blk animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = @as([*c]Transform, @ptrCast(@alignCast(malloc(@as(c_ulong, @bitCast(@as(c_ulong, m3d.*.numbone +% @as(M3D_INDEX, @bitCast(@as(c_int, 1)))))) *% @sizeOf(Transform)))));
var pose: [*c]m3db_t = m3d_pose(m3d, a, @as(u32, @bitCast(i * @as(c_int, 17))));
_ = &pose;
if (pose != @as([*c]m3db_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
{
j = 0;
while (j < @as(c_int, @bitCast(m3d.*.numbone))) : (j += 1) {
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.x = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].x * m3d.*.scale;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.y = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].y * m3d.*.scale;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.z = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.pos].z * m3d.*.scale;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.x = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].x;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.y = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].y;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.z = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].z;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.w = m3d.*.vertex[(blk: {
const tmp = j;
if (tmp >= 0) break :blk pose + @as(usize, @intCast(tmp)) else break :blk pose - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.ori].w;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionNormalize((blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.x = blk: {
const tmp = blk_1: {
const tmp_2 = 1.0;
(blk_2: {
const tmp_3 = j;
if (tmp_3 >= 0) break :blk_2 (blk_3: {
const tmp_4 = i;
if (tmp_4 >= 0) break :blk_3 animations[a].framePoses + @as(usize, @intCast(tmp_4)) else break :blk_3 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_4)) +% -1));
}).* + @as(usize, @intCast(tmp_3)) else break :blk_2 (blk_3: {
const tmp_4 = i;
if (tmp_4 >= 0) break :blk_3 animations[a].framePoses + @as(usize, @intCast(tmp_4)) else break :blk_3 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_4)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*.scale.z = tmp_2;
break :blk_1 tmp_2;
};
(blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 animations[a].framePoses + @as(usize, @intCast(tmp_3)) else break :blk_2 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).* + @as(usize, @intCast(tmp_2)) else break :blk_1 (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 animations[a].framePoses + @as(usize, @intCast(tmp_3)) else break :blk_2 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.scale.y = tmp;
break :blk tmp;
};
if ((blk: {
const tmp = j;
if (tmp >= 0) break :blk animations[a].bones + @as(usize, @intCast(tmp)) else break :blk animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent >= @as(c_int, 0)) {
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionMultiply((blk: {
const tmp = (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation, (blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3RotateByQuaternion((blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3Add((blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation);
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale = Vector3Multiply((blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale, (blk: {
const tmp = (blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 animations[a].bones + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale);
}
}
}
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.x = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.y = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation.z = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.x = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.y = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.z = 0.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation.w = 1.0;
(blk: {
const tmp = j;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 animations[a].framePoses + @as(usize, @intCast(tmp_2)) else break :blk_1 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale.x = blk: {
const tmp = blk_1: {
const tmp_2 = 1.0;
(blk_2: {
const tmp_3 = j;
if (tmp_3 >= 0) break :blk_2 (blk_3: {
const tmp_4 = i;
if (tmp_4 >= 0) break :blk_3 animations[a].framePoses + @as(usize, @intCast(tmp_4)) else break :blk_3 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_4)) +% -1));
}).* + @as(usize, @intCast(tmp_3)) else break :blk_2 (blk_3: {
const tmp_4 = i;
if (tmp_4 >= 0) break :blk_3 animations[a].framePoses + @as(usize, @intCast(tmp_4)) else break :blk_3 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_4)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).*.scale.z = tmp_2;
break :blk_1 tmp_2;
};
(blk_1: {
const tmp_2 = j;
if (tmp_2 >= 0) break :blk_1 (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 animations[a].framePoses + @as(usize, @intCast(tmp_3)) else break :blk_2 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).* + @as(usize, @intCast(tmp_2)) else break :blk_1 (blk_2: {
const tmp_3 = i;
if (tmp_3 >= 0) break :blk_2 animations[a].framePoses + @as(usize, @intCast(tmp_3)) else break :blk_2 animations[a].framePoses - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_3)) +% -1));
}).* - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.scale.y = tmp;
break :blk tmp;
};
free(@as(?*anyopaque, @ptrCast(pose)));
}
}
}
}
}
m3d_free(m3d);
UnloadFileData(fileData);
}
return animations;
}
pub fn ProcessMaterialsOBJ(arg_materials: [*c]Material, arg_mats: [*c]tinyobj_material_t, arg_materialCount: c_int) callconv(.C) void {
var materials = arg_materials;
_ = &materials;
var mats = arg_mats;
_ = &mats;
var materialCount = arg_materialCount;
_ = &materialCount;
{
var m: c_int = 0;
_ = &m;
while (m < materialCount) : (m += 1) {
(blk: {
const tmp = m;
if (tmp >= 0) break :blk materials + @as(usize, @intCast(tmp)) else break :blk materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).* = LoadMaterialDefault();
if (mats == @as([*c]tinyobj_material_t, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) continue;
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = Texture2D{
.id = rlGetTextureIdDefault(),
.width = @as(c_int, 1),
.height = @as(c_int, 1),
.mipmaps = @as(c_int, 1),
.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8,
};
if ((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.diffuse_texname != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTexture((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.diffuse_texname);
} else {
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.diffuse[@as(c_uint, @intCast(@as(c_int, 0)))] * 255.0)),
.g = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.diffuse[@as(c_uint, @intCast(@as(c_int, 1)))] * 255.0)),
.b = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.diffuse[@as(c_uint, @intCast(@as(c_int, 2)))] * 255.0)),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
}
(blk: {
const tmp = MATERIAL_MAP_ALBEDO;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = 0.0;
if ((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.specular_texname != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTexture((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.specular_texname);
}
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.specular[@as(c_uint, @intCast(@as(c_int, 0)))] * 255.0)),
.g = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.specular[@as(c_uint, @intCast(@as(c_int, 1)))] * 255.0)),
.b = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.specular[@as(c_uint, @intCast(@as(c_int, 2)))] * 255.0)),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
(blk: {
const tmp = MATERIAL_MAP_METALNESS;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = 0.0;
if ((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.bump_texname != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTexture((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.bump_texname);
}
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.g = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.b = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
(blk: {
const tmp = MATERIAL_MAP_NORMAL;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.value = (blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.shininess;
(blk: {
const tmp = MATERIAL_MAP_EMISSION;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.color = Color{
.r = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.emission[@as(c_uint, @intCast(@as(c_int, 0)))] * 255.0)),
.g = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.emission[@as(c_uint, @intCast(@as(c_int, 1)))] * 255.0)),
.b = @as(u8, @intFromFloat((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.emission[@as(c_uint, @intCast(@as(c_int, 2)))] * 255.0)),
.a = @as(u8, @bitCast(@as(i8, @truncate(@as(c_int, 255))))),
};
if ((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.displacement_texname != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
(blk: {
const tmp = MATERIAL_MAP_HEIGHT;
if (tmp >= 0) break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps + @as(usize, @intCast(tmp)) else break :blk (blk_1: {
const tmp_2 = m;
if (tmp_2 >= 0) break :blk_1 materials + @as(usize, @intCast(tmp_2)) else break :blk_1 materials - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.maps - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.texture = LoadTexture((blk: {
const tmp = m;
if (tmp >= 0) break :blk mats + @as(usize, @intCast(tmp)) else break :blk mats - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.displacement_texname);
}
}
}
}
pub fn BuildPoseFromParentJoints(arg_bones: [*c]BoneInfo, arg_boneCount: c_int, arg_transforms: [*c]Transform) callconv(.C) void {
var bones = arg_bones;
_ = &bones;
var boneCount = arg_boneCount;
_ = &boneCount;
var transforms = arg_transforms;
_ = &transforms;
{
var i: c_int = 0;
_ = &i;
while (i < boneCount) : (i += 1) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk bones + @as(usize, @intCast(tmp)) else break :blk bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent >= @as(c_int, 0)) {
if ((blk: {
const tmp = i;
if (tmp >= 0) break :blk bones + @as(usize, @intCast(tmp)) else break :blk bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent > i) {
TraceLog(LOG_WARNING, "Assumes bones are toplogically sorted, but bone %d has parent %d. Skipping.", i, (blk: {
const tmp = i;
if (tmp >= 0) break :blk bones + @as(usize, @intCast(tmp)) else break :blk bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.parent);
continue;
}
(blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation = QuaternionMultiply((blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 bones + @as(usize, @intCast(tmp_2)) else break :blk_1 bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation, (blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3RotateByQuaternion((blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 bones + @as(usize, @intCast(tmp_2)) else break :blk_1 bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.rotation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation = Vector3Add((blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 bones + @as(usize, @intCast(tmp_2)) else break :blk_1 bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.translation);
(blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale = Vector3Multiply((blk: {
const tmp = i;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale, (blk: {
const tmp = (blk_1: {
const tmp_2 = i;
if (tmp_2 >= 0) break :blk_1 bones + @as(usize, @intCast(tmp_2)) else break :blk_1 bones - ~@as(usize, @bitCast(@as(isize, @intCast(tmp_2)) +% -1));
}).*.parent;
if (tmp >= 0) break :blk transforms + @as(usize, @intCast(tmp)) else break :blk transforms - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*.scale);
}
}
}
}
pub fn LoadFileGLTFCallback(arg_memoryOptions: [*c]const struct_cgltf_memory_options, arg_fileOptions: [*c]const struct_cgltf_file_options, arg_path: [*c]const u8, arg_size: [*c]cgltf_size, arg_data: [*c]?*anyopaque) callconv(.C) cgltf_result {
var memoryOptions = arg_memoryOptions;
_ = &memoryOptions;
var fileOptions = arg_fileOptions;
_ = &fileOptions;
var path = arg_path;
_ = &path;
var size = arg_size;
_ = &size;
var data = arg_data;
_ = &data;
var filesize: c_int = undefined;
_ = &filesize;
var filedata: [*c]u8 = LoadFileData(path, &filesize);
_ = &filedata;
if (filedata == @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) return @as(c_uint, @bitCast(cgltf_result_io_error));
size.* = @as(cgltf_size, @bitCast(@as(c_long, filesize)));
data.* = @as(?*anyopaque, @ptrCast(filedata));
return @as(c_uint, @bitCast(cgltf_result_success));
}
pub fn ReleaseFileGLTFCallback(arg_memoryOptions: [*c]const struct_cgltf_memory_options, arg_fileOptions: [*c]const struct_cgltf_file_options, arg_data: ?*anyopaque) callconv(.C) void {
var memoryOptions = arg_memoryOptions;
_ = &memoryOptions;
var fileOptions = arg_fileOptions;
_ = &fileOptions;
var data = arg_data;
_ = &data;
UnloadFileData(@as([*c]u8, @ptrCast(@alignCast(data))));
}
pub fn LoadImageFromCgltfImage(arg_cgltfImage: [*c]cgltf_image, arg_texPath: [*c]const u8) callconv(.C) Image {
var cgltfImage = arg_cgltfImage;
_ = &cgltfImage;
var texPath = arg_texPath;
_ = &texPath;
var image: Image = Image{
.data = null,
.width = 0,
.height = 0,
.mipmaps = 0,
.format = 0,
};
_ = &image;
if (cgltfImage.*.uri != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
if ((((((strlen(cgltfImage.*.uri) > @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 5))))) and (@as(c_int, @bitCast(@as(c_uint, cgltfImage.*.uri[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, 'd'))) and (@as(c_int, @bitCast(@as(c_uint, cgltfImage.*.uri[@as(c_uint, @intCast(@as(c_int, 1)))]))) == @as(c_int, 'a'))) and (@as(c_int, @bitCast(@as(c_uint, cgltfImage.*.uri[@as(c_uint, @intCast(@as(c_int, 2)))]))) == @as(c_int, 't'))) and (@as(c_int, @bitCast(@as(c_uint, cgltfImage.*.uri[@as(c_uint, @intCast(@as(c_int, 3)))]))) == @as(c_int, 'a'))) and (@as(c_int, @bitCast(@as(c_uint, cgltfImage.*.uri[@as(c_uint, @intCast(@as(c_int, 4)))]))) == @as(c_int, ':'))) {
var i: c_int = 0;
_ = &i;
while ((@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk cgltfImage.*.uri + @as(usize, @intCast(tmp)) else break :blk cgltfImage.*.uri - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) != @as(c_int, ',')) and (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk cgltfImage.*.uri + @as(usize, @intCast(tmp)) else break :blk cgltfImage.*.uri - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) != @as(c_int, 0))) {
i += 1;
}
if (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i;
if (tmp >= 0) break :blk cgltfImage.*.uri + @as(usize, @intCast(tmp)) else break :blk cgltfImage.*.uri - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) == @as(c_int, 0)) {
TraceLog(LOG_WARNING, "IMAGE: glTF data URI is not a valid image");
} else {
var base64Size: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate(strlen((cgltfImage.*.uri + @as(usize, @bitCast(@as(isize, @intCast(i))))) + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))))))));
_ = &base64Size;
while (@as(c_int, @bitCast(@as(c_uint, (blk: {
const tmp = i + base64Size;
if (tmp >= 0) break :blk cgltfImage.*.uri + @as(usize, @intCast(tmp)) else break :blk cgltfImage.*.uri - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*))) == @as(c_int, '=')) {
base64Size -= 1;
}
var numberOfEncodedBits: c_int = (base64Size * @as(c_int, 6)) - @import("std").zig.c_translation.signedRemainder(base64Size * @as(c_int, 6), @as(c_int, 8));
_ = &numberOfEncodedBits;
var outSize: c_int = @divTrunc(numberOfEncodedBits, @as(c_int, 8));
_ = &outSize;
var data: ?*anyopaque = @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)));
_ = &data;
var options: cgltf_options = cgltf_options{
.type = @as(c_uint, @bitCast(@as(c_int, 0))),
.json_token_count = @import("std").mem.zeroes(cgltf_size),
.memory = @import("std").mem.zeroes(cgltf_memory_options),
.file = @import("std").mem.zeroes(cgltf_file_options),
};
_ = &options;
options.file.read = &LoadFileGLTFCallback;
options.file.release = &ReleaseFileGLTFCallback;
var result: cgltf_result = cgltf_load_buffer_base64(&options, @as(cgltf_size, @bitCast(@as(c_long, outSize))), (cgltfImage.*.uri + @as(usize, @bitCast(@as(isize, @intCast(i))))) + @as(usize, @bitCast(@as(isize, @intCast(@as(c_int, 1))))), &data);
_ = &result;
if (result == @as(c_uint, @bitCast(cgltf_result_success))) {
image = LoadImageFromMemory(".png", @as([*c]u8, @ptrCast(@alignCast(data))), outSize);
free(data);
}
}
} else {
image = LoadImage(TextFormat("%s/%s", texPath, cgltfImage.*.uri));
}
} else if (cgltfImage.*.buffer_view.*.buffer.*.data != @as(?*anyopaque, @ptrFromInt(@as(c_int, 0)))) {
var data: [*c]u8 = @as([*c]u8, @ptrCast(@alignCast(malloc(cgltfImage.*.buffer_view.*.size))));
_ = &data;
var offset: c_int = @as(c_int, @bitCast(@as(c_uint, @truncate(cgltfImage.*.buffer_view.*.offset))));
_ = &offset;
var stride: c_int = if (@as(c_int, @bitCast(@as(c_uint, @truncate(cgltfImage.*.buffer_view.*.stride)))) != 0) @as(c_int, @bitCast(@as(c_uint, @truncate(cgltfImage.*.buffer_view.*.stride)))) else @as(c_int, 1);
_ = &stride;
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < cgltfImage.*.buffer_view.*.size) : (i +%= 1) {
data[i] = (blk: {
const tmp = offset;
if (tmp >= 0) break :blk @as([*c]u8, @ptrCast(@alignCast(cgltfImage.*.buffer_view.*.buffer.*.data))) + @as(usize, @intCast(tmp)) else break :blk @as([*c]u8, @ptrCast(@alignCast(cgltfImage.*.buffer_view.*.buffer.*.data))) - ~@as(usize, @bitCast(@as(isize, @intCast(tmp)) +% -1));
}).*;
offset += stride;
}
}
if ((strcmp(cgltfImage.*.mime_type, "image\\/png") == @as(c_int, 0)) or (strcmp(cgltfImage.*.mime_type, "image/png") == @as(c_int, 0))) {
image = LoadImageFromMemory(".png", data, @as(c_int, @bitCast(@as(c_uint, @truncate(cgltfImage.*.buffer_view.*.size)))));
} else if ((strcmp(cgltfImage.*.mime_type, "image\\/jpeg") == @as(c_int, 0)) or (strcmp(cgltfImage.*.mime_type, "image/jpeg") == @as(c_int, 0))) {
image = LoadImageFromMemory(".jpg", data, @as(c_int, @bitCast(@as(c_uint, @truncate(cgltfImage.*.buffer_view.*.size)))));
} else {
TraceLog(LOG_WARNING, "MODEL: glTF image data MIME type not recognized", TextFormat("%s/%s", texPath, cgltfImage.*.uri));
}
free(@as(?*anyopaque, @ptrCast(data)));
}
return image;
}
pub fn LoadBoneInfoGLTF(arg_skin: cgltf_skin, arg_boneCount: [*c]c_int) callconv(.C) [*c]BoneInfo {
var skin = arg_skin;
_ = &skin;
var boneCount = arg_boneCount;
_ = &boneCount;
boneCount.* = @as(c_int, @bitCast(@as(c_uint, @truncate(skin.joints_count))));
var bones: [*c]BoneInfo = @as([*c]BoneInfo, @ptrCast(@alignCast(malloc(skin.joints_count *% @sizeOf(BoneInfo)))));
_ = &bones;
{
var i: c_uint = 0;
_ = &i;
while (@as(cgltf_size, @bitCast(@as(c_ulong, i))) < skin.joints_count) : (i +%= 1) {
var node: cgltf_node = skin.joints[i].*;
_ = &node;
if (node.name != @as([*c]u8, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(@as(c_int, 0))))))) {
_ = strncpy(@as([*c]u8, @ptrCast(@alignCast(&bones[i].name))), node.name, @sizeOf([32]u8));
bones[i].name[@sizeOf([32]u8) -% @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))] = '\x00';
}
var parentIndex: c_int = -@as(c_int, 1);
_ = &parentIndex;
{
var j: c_uint = 0;
_ = &j;
while (@as(cgltf_size, @bitCast(@as(c_ulong, j))) < skin.joints_count) : (j +%= 1) {
if (skin.joints[j] == node.parent) {
parentIndex = @as(c_int, @bitCast(j));
break;
}
}
}
bones[i].parent = parentIndex;
}
}
return bones;
}
pub fn GetPoseAtTimeGLTF(arg_interpolationType: cgltf_interpolation_type, arg_input: [*c]cgltf_accessor, arg_output: [*c]cgltf_accessor, arg_time: f32, arg_data: ?*anyopaque) callconv(.C) bool {
var interpolationType = arg_interpolationType;
_ = &interpolationType;
var input = arg_input;
_ = &input;
var output = arg_output;
_ = &output;
var time = arg_time;
_ = &time;
var data = arg_data;
_ = &data;
if (interpolationType >= @as(c_uint, @bitCast(cgltf_interpolation_type_max_enum))) return @as(c_int, 0) != 0;
var tstart: f32 = 0.0;
_ = &tstart;
var tend: f32 = 0.0;
_ = &tend;
var keyframe: c_int = 0;
_ = &keyframe;
{
var i: c_int = 0;
_ = &i;
while (i < (@as(c_int, @bitCast(@as(c_uint, @truncate(input.*.count)))) - @as(c_int, 1))) : (i += 1) {
var r1: cgltf_bool = cgltf_accessor_read_float(input, @as(cgltf_size, @bitCast(@as(c_long, i))), &tstart, @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))));
_ = &r1;
if (!(r1 != 0)) return @as(c_int, 0) != 0;
var r2: cgltf_bool = cgltf_accessor_read_float(input, @as(cgltf_size, @bitCast(@as(c_long, i + @as(c_int, 1)))), &tend, @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 1)))));
_ = &r2;
if (!(r2 != 0)) return @as(c_int, 0) != 0;
if ((tstart <= time) and (time < tend)) {
keyframe = i;
break;
}
}
}
if (FloatEquals(tend, tstart) != 0) return @as(c_int, 1) != 0;
var duration: f32 = fmaxf(tend - tstart, 0.0000009999999974752427);
_ = &duration;
var t: f32 = (time - tstart) / duration;
_ = &t;
t = if (t < 0.0) 0.0 else t;
t = if (t > 1.0) 1.0 else t;
if (output.*.component_type != @as(c_uint, @bitCast(cgltf_component_type_r_32f))) return @as(c_int, 0) != 0;
if (output.*.type == @as(c_uint, @bitCast(cgltf_type_vec3))) {
while (true) {
switch (interpolationType) {
@as(c_uint, @bitCast(@as(c_int, 1))) => {
{
var tmp: [3]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 2;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var v1: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &v1;
var r: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(data)));
_ = &r;
r.* = v1;
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 0))) => {
{
var tmp: [3]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 2;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var v1: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &v1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var v2: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &v2;
var r: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(data)));
_ = &r;
r.* = Vector3Lerp(v1, v2, t);
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 2))) => {
{
var tmp: [3]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 2;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * keyframe) + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var v1: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &v1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * keyframe) + @as(c_int, 2)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var tangent1: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &tangent1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * (keyframe + @as(c_int, 1))) + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var v2: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &v2;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3) * (keyframe + @as(c_int, 1))))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3)))));
var tangent2: Vector3 = Vector3{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
};
_ = &tangent2;
var r: [*c]Vector3 = @as([*c]Vector3, @ptrCast(@alignCast(data)));
_ = &r;
r.* = Vector3CubicHermite(v1, tangent1, v2, tangent2, t);
}
break;
},
else => break,
}
break;
}
} else if (output.*.type == @as(c_uint, @bitCast(cgltf_type_vec4))) {
while (true) {
switch (interpolationType) {
@as(c_uint, @bitCast(@as(c_int, 1))) => {
{
var tmp: [4]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 3;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var v1: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = tmp[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &v1;
var r: [*c]Vector4 = @as([*c]Vector4, @ptrCast(@alignCast(data)));
_ = &r;
r.* = v1;
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 0))) => {
{
var tmp: [4]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 3;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var v1: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = tmp[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &v1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, keyframe + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var v2: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = tmp[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &v2;
var r: [*c]Vector4 = @as([*c]Vector4, @ptrCast(@alignCast(data)));
_ = &r;
r.* = QuaternionSlerp(v1, v2, t);
}
break;
},
@as(c_uint, @bitCast(@as(c_int, 2))) => {
{
var tmp: [4]f32 = [1]f32{
0.0,
} ++ [1]f32{0} ** 3;
_ = &tmp;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * keyframe) + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var v1: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = tmp[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &v1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * keyframe) + @as(c_int, 2)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var outTangent1: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = 0.0,
};
_ = &outTangent1;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, (@as(c_int, 3) * (keyframe + @as(c_int, 1))) + @as(c_int, 1)))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var v2: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = tmp[@as(c_uint, @intCast(@as(c_int, 3)))],
};
_ = &v2;
_ = cgltf_accessor_read_float(output, @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 3) * (keyframe + @as(c_int, 1))))), @as([*c]f32, @ptrCast(@alignCast(&tmp))), @as(cgltf_size, @bitCast(@as(c_long, @as(c_int, 4)))));
var inTangent2: Vector4 = Vector4{
.x = tmp[@as(c_uint, @intCast(@as(c_int, 0)))],
.y = tmp[@as(c_uint, @intCast(@as(c_int, 1)))],
.z = tmp[@as(c_uint, @intCast(@as(c_int, 2)))],
.w = 0.0,
};
_ = &inTangent2;
var r: [*c]Vector4 = @as([*c]Vector4, @ptrCast(@alignCast(data)));
_ = &r;
v1 = QuaternionNormalize(v1);
v2 = QuaternionNormalize(v2);
if (Vector4DotProduct(v1, v2) < 0.0) {
v2 = Vector4Negate(v2);
}
outTangent1 = Vector4Scale(outTangent1, duration);
inTangent2 = Vector4Scale(inTangent2, duration);
r.* = QuaternionCubicHermiteSpline(v1, outTangent1, v2, inTangent2, t);
}
break;
},
else => break,
}
break;
}
}
return @as(c_int, 1) != 0;
}
pub export fn m3d_loaderhook(arg_fn: [*c]u8, arg_len: [*c]c_uint) [*c]u8 {
var @"fn" = arg_fn;
_ = &@"fn";
var len = arg_len;
_ = &len;
return LoadFileData(@as([*c]const u8, @ptrCast(@alignCast(@"fn"))), @as([*c]c_int, @ptrCast(@alignCast(len))));
}
pub export fn m3d_freehook(arg_data: ?*anyopaque) void {
var data = arg_data;
_ = &data;
UnloadFileData(@as([*c]u8, @ptrCast(@alignCast(data))));
}
pub const __llvm__ = @as(c_int, 1);
pub const __clang__ = @as(c_int, 1);
pub const __clang_major__ = @as(c_int, 18);
pub const __clang_minor__ = @as(c_int, 1);
pub const __clang_patchlevel__ = @as(c_int, 6);
pub const __clang_version__ = "18.1.6 (https://github.com/ziglang/zig-bootstrap 98bc6bf4fc4009888d33941daf6b600d20a42a56)";
pub const __GNUC__ = @as(c_int, 4);
pub const __GNUC_MINOR__ = @as(c_int, 2);
pub const __GNUC_PATCHLEVEL__ = @as(c_int, 1);
pub const __GXX_ABI_VERSION = @as(c_int, 1002);
pub const __ATOMIC_RELAXED = @as(c_int, 0);
pub const __ATOMIC_CONSUME = @as(c_int, 1);
pub const __ATOMIC_ACQUIRE = @as(c_int, 2);
pub const __ATOMIC_RELEASE = @as(c_int, 3);
pub const __ATOMIC_ACQ_REL = @as(c_int, 4);
pub const __ATOMIC_SEQ_CST = @as(c_int, 5);
pub const __MEMORY_SCOPE_SYSTEM = @as(c_int, 0);
pub const __MEMORY_SCOPE_DEVICE = @as(c_int, 1);
pub const __MEMORY_SCOPE_WRKGRP = @as(c_int, 2);
pub const __MEMORY_SCOPE_WVFRNT = @as(c_int, 3);
pub const __MEMORY_SCOPE_SINGLE = @as(c_int, 4);
pub const __OPENCL_MEMORY_SCOPE_WORK_ITEM = @as(c_int, 0);
pub const __OPENCL_MEMORY_SCOPE_WORK_GROUP = @as(c_int, 1);
pub const __OPENCL_MEMORY_SCOPE_DEVICE = @as(c_int, 2);
pub const __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES = @as(c_int, 3);
pub const __OPENCL_MEMORY_SCOPE_SUB_GROUP = @as(c_int, 4);
pub const __FPCLASS_SNAN = @as(c_int, 0x0001);
pub const __FPCLASS_QNAN = @as(c_int, 0x0002);
pub const __FPCLASS_NEGINF = @as(c_int, 0x0004);
pub const __FPCLASS_NEGNORMAL = @as(c_int, 0x0008);
pub const __FPCLASS_NEGSUBNORMAL = @as(c_int, 0x0010);
pub const __FPCLASS_NEGZERO = @as(c_int, 0x0020);
pub const __FPCLASS_POSZERO = @as(c_int, 0x0040);
pub const __FPCLASS_POSSUBNORMAL = @as(c_int, 0x0080);
pub const __FPCLASS_POSNORMAL = @as(c_int, 0x0100);
pub const __FPCLASS_POSINF = @as(c_int, 0x0200);
pub const __PRAGMA_REDEFINE_EXTNAME = @as(c_int, 1);
pub const __VERSION__ = "Clang 18.1.6 (https://github.com/ziglang/zig-bootstrap 98bc6bf4fc4009888d33941daf6b600d20a42a56)";
pub const __OBJC_BOOL_IS_BOOL = @as(c_int, 0);
pub const __CONSTANT_CFSTRINGS__ = @as(c_int, 1);
pub const __clang_literal_encoding__ = "UTF-8";
pub const __clang_wide_literal_encoding__ = "UTF-32";
pub const __ORDER_LITTLE_ENDIAN__ = @as(c_int, 1234);
pub const __ORDER_BIG_ENDIAN__ = @as(c_int, 4321);
pub const __ORDER_PDP_ENDIAN__ = @as(c_int, 3412);
pub const __BYTE_ORDER__ = __ORDER_LITTLE_ENDIAN__;
pub const __LITTLE_ENDIAN__ = @as(c_int, 1);
pub const _LP64 = @as(c_int, 1);
pub const __LP64__ = @as(c_int, 1);
pub const __CHAR_BIT__ = @as(c_int, 8);
pub const __BOOL_WIDTH__ = @as(c_int, 8);
pub const __SHRT_WIDTH__ = @as(c_int, 16);
pub const __INT_WIDTH__ = @as(c_int, 32);
pub const __LONG_WIDTH__ = @as(c_int, 64);
pub const __LLONG_WIDTH__ = @as(c_int, 64);
pub const __BITINT_MAXWIDTH__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 8388608, .decimal);
pub const __SCHAR_MAX__ = @as(c_int, 127);
pub const __SHRT_MAX__ = @as(c_int, 32767);
pub const __INT_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __LONG_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __LONG_LONG_MAX__ = @as(c_longlong, 9223372036854775807);
pub const __WCHAR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __WCHAR_WIDTH__ = @as(c_int, 32);
pub const __WINT_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const __WINT_WIDTH__ = @as(c_int, 32);
pub const __INTMAX_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __INTMAX_WIDTH__ = @as(c_int, 64);
pub const __SIZE_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __SIZE_WIDTH__ = @as(c_int, 64);
pub const __UINTMAX_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __UINTMAX_WIDTH__ = @as(c_int, 64);
pub const __PTRDIFF_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __PTRDIFF_WIDTH__ = @as(c_int, 64);
pub const __INTPTR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __INTPTR_WIDTH__ = @as(c_int, 64);
pub const __UINTPTR_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __UINTPTR_WIDTH__ = @as(c_int, 64);
pub const __SIZEOF_DOUBLE__ = @as(c_int, 8);
pub const __SIZEOF_FLOAT__ = @as(c_int, 4);
pub const __SIZEOF_INT__ = @as(c_int, 4);
pub const __SIZEOF_LONG__ = @as(c_int, 8);
pub const __SIZEOF_LONG_DOUBLE__ = @as(c_int, 16);
pub const __SIZEOF_LONG_LONG__ = @as(c_int, 8);
pub const __SIZEOF_POINTER__ = @as(c_int, 8);
pub const __SIZEOF_SHORT__ = @as(c_int, 2);
pub const __SIZEOF_PTRDIFF_T__ = @as(c_int, 8);
pub const __SIZEOF_SIZE_T__ = @as(c_int, 8);
pub const __SIZEOF_WCHAR_T__ = @as(c_int, 4);
pub const __SIZEOF_WINT_T__ = @as(c_int, 4);
pub const __SIZEOF_INT128__ = @as(c_int, 16);
pub const __INTMAX_TYPE__ = c_long;
pub const __INTMAX_FMTd__ = "ld";
pub const __INTMAX_FMTi__ = "li";
pub const __INTMAX_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `L`");
// (no file):95:9
pub const __UINTMAX_TYPE__ = c_ulong;
pub const __UINTMAX_FMTo__ = "lo";
pub const __UINTMAX_FMTu__ = "lu";
pub const __UINTMAX_FMTx__ = "lx";
pub const __UINTMAX_FMTX__ = "lX";
pub const __UINTMAX_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `UL`");
// (no file):101:9
pub const __PTRDIFF_TYPE__ = c_long;
pub const __PTRDIFF_FMTd__ = "ld";
pub const __PTRDIFF_FMTi__ = "li";
pub const __INTPTR_TYPE__ = c_long;
pub const __INTPTR_FMTd__ = "ld";
pub const __INTPTR_FMTi__ = "li";
pub const __SIZE_TYPE__ = c_ulong;
pub const __SIZE_FMTo__ = "lo";
pub const __SIZE_FMTu__ = "lu";
pub const __SIZE_FMTx__ = "lx";
pub const __SIZE_FMTX__ = "lX";
pub const __WCHAR_TYPE__ = c_int;
pub const __WINT_TYPE__ = c_uint;
pub const __SIG_ATOMIC_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __SIG_ATOMIC_WIDTH__ = @as(c_int, 32);
pub const __CHAR16_TYPE__ = c_ushort;
pub const __CHAR32_TYPE__ = c_uint;
pub const __UINTPTR_TYPE__ = c_ulong;
pub const __UINTPTR_FMTo__ = "lo";
pub const __UINTPTR_FMTu__ = "lu";
pub const __UINTPTR_FMTx__ = "lx";
pub const __UINTPTR_FMTX__ = "lX";
pub const __FLT16_DENORM_MIN__ = @as(f16, 5.9604644775390625e-8);
pub const __FLT16_HAS_DENORM__ = @as(c_int, 1);
pub const __FLT16_DIG__ = @as(c_int, 3);
pub const __FLT16_DECIMAL_DIG__ = @as(c_int, 5);
pub const __FLT16_EPSILON__ = @as(f16, 9.765625e-4);
pub const __FLT16_HAS_INFINITY__ = @as(c_int, 1);
pub const __FLT16_HAS_QUIET_NAN__ = @as(c_int, 1);
pub const __FLT16_MANT_DIG__ = @as(c_int, 11);
pub const __FLT16_MAX_10_EXP__ = @as(c_int, 4);
pub const __FLT16_MAX_EXP__ = @as(c_int, 16);
pub const __FLT16_MAX__ = @as(f16, 6.5504e+4);
pub const __FLT16_MIN_10_EXP__ = -@as(c_int, 4);
pub const __FLT16_MIN_EXP__ = -@as(c_int, 13);
pub const __FLT16_MIN__ = @as(f16, 6.103515625e-5);
pub const __FLT_DENORM_MIN__ = @as(f32, 1.40129846e-45);
pub const __FLT_HAS_DENORM__ = @as(c_int, 1);
pub const __FLT_DIG__ = @as(c_int, 6);
pub const __FLT_DECIMAL_DIG__ = @as(c_int, 9);
pub const __FLT_EPSILON__ = @as(f32, 1.19209290e-7);
pub const __FLT_HAS_INFINITY__ = @as(c_int, 1);
pub const __FLT_HAS_QUIET_NAN__ = @as(c_int, 1);
pub const __FLT_MANT_DIG__ = @as(c_int, 24);
pub const __FLT_MAX_10_EXP__ = @as(c_int, 38);
pub const __FLT_MAX_EXP__ = @as(c_int, 128);
pub const __FLT_MAX__ = @as(f32, 3.40282347e+38);
pub const __FLT_MIN_10_EXP__ = -@as(c_int, 37);
pub const __FLT_MIN_EXP__ = -@as(c_int, 125);
pub const __FLT_MIN__ = @as(f32, 1.17549435e-38);
pub const __DBL_DENORM_MIN__ = @as(f64, 4.9406564584124654e-324);
pub const __DBL_HAS_DENORM__ = @as(c_int, 1);
pub const __DBL_DIG__ = @as(c_int, 15);
pub const __DBL_DECIMAL_DIG__ = @as(c_int, 17);
pub const __DBL_EPSILON__ = @as(f64, 2.2204460492503131e-16);
pub const __DBL_HAS_INFINITY__ = @as(c_int, 1);
pub const __DBL_HAS_QUIET_NAN__ = @as(c_int, 1);
pub const __DBL_MANT_DIG__ = @as(c_int, 53);
pub const __DBL_MAX_10_EXP__ = @as(c_int, 308);
pub const __DBL_MAX_EXP__ = @as(c_int, 1024);
pub const __DBL_MAX__ = @as(f64, 1.7976931348623157e+308);
pub const __DBL_MIN_10_EXP__ = -@as(c_int, 307);
pub const __DBL_MIN_EXP__ = -@as(c_int, 1021);
pub const __DBL_MIN__ = @as(f64, 2.2250738585072014e-308);
pub const __LDBL_DENORM_MIN__ = @as(c_longdouble, 3.64519953188247460253e-4951);
pub const __LDBL_HAS_DENORM__ = @as(c_int, 1);
pub const __LDBL_DIG__ = @as(c_int, 18);
pub const __LDBL_DECIMAL_DIG__ = @as(c_int, 21);
pub const __LDBL_EPSILON__ = @as(c_longdouble, 1.08420217248550443401e-19);
pub const __LDBL_HAS_INFINITY__ = @as(c_int, 1);
pub const __LDBL_HAS_QUIET_NAN__ = @as(c_int, 1);
pub const __LDBL_MANT_DIG__ = @as(c_int, 64);
pub const __LDBL_MAX_10_EXP__ = @as(c_int, 4932);
pub const __LDBL_MAX_EXP__ = @as(c_int, 16384);
pub const __LDBL_MAX__ = @as(c_longdouble, 1.18973149535723176502e+4932);
pub const __LDBL_MIN_10_EXP__ = -@as(c_int, 4931);
pub const __LDBL_MIN_EXP__ = -@as(c_int, 16381);
pub const __LDBL_MIN__ = @as(c_longdouble, 3.36210314311209350626e-4932);
pub const __POINTER_WIDTH__ = @as(c_int, 64);
pub const __BIGGEST_ALIGNMENT__ = @as(c_int, 16);
pub const __WINT_UNSIGNED__ = @as(c_int, 1);
pub const __INT8_TYPE__ = i8;
pub const __INT8_FMTd__ = "hhd";
pub const __INT8_FMTi__ = "hhi";
pub const __INT8_C_SUFFIX__ = "";
pub const __INT16_TYPE__ = c_short;
pub const __INT16_FMTd__ = "hd";
pub const __INT16_FMTi__ = "hi";
pub const __INT16_C_SUFFIX__ = "";
pub const __INT32_TYPE__ = c_int;
pub const __INT32_FMTd__ = "d";
pub const __INT32_FMTi__ = "i";
pub const __INT32_C_SUFFIX__ = "";
pub const __INT64_TYPE__ = c_long;
pub const __INT64_FMTd__ = "ld";
pub const __INT64_FMTi__ = "li";
pub const __INT64_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `L`");
// (no file):198:9
pub const __UINT8_TYPE__ = u8;
pub const __UINT8_FMTo__ = "hho";
pub const __UINT8_FMTu__ = "hhu";
pub const __UINT8_FMTx__ = "hhx";
pub const __UINT8_FMTX__ = "hhX";
pub const __UINT8_C_SUFFIX__ = "";
pub const __UINT8_MAX__ = @as(c_int, 255);
pub const __INT8_MAX__ = @as(c_int, 127);
pub const __UINT16_TYPE__ = c_ushort;
pub const __UINT16_FMTo__ = "ho";
pub const __UINT16_FMTu__ = "hu";
pub const __UINT16_FMTx__ = "hx";
pub const __UINT16_FMTX__ = "hX";
pub const __UINT16_C_SUFFIX__ = "";
pub const __UINT16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
pub const __INT16_MAX__ = @as(c_int, 32767);
pub const __UINT32_TYPE__ = c_uint;
pub const __UINT32_FMTo__ = "o";
pub const __UINT32_FMTu__ = "u";
pub const __UINT32_FMTx__ = "x";
pub const __UINT32_FMTX__ = "X";
pub const __UINT32_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `U`");
// (no file):220:9
pub const __UINT32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const __INT32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __UINT64_TYPE__ = c_ulong;
pub const __UINT64_FMTo__ = "lo";
pub const __UINT64_FMTu__ = "lu";
pub const __UINT64_FMTx__ = "lx";
pub const __UINT64_FMTX__ = "lX";
pub const __UINT64_C_SUFFIX__ = @compileError("unable to translate macro: undefined identifier `UL`");
// (no file):228:9
pub const __UINT64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __INT64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __INT_LEAST8_TYPE__ = i8;
pub const __INT_LEAST8_MAX__ = @as(c_int, 127);
pub const __INT_LEAST8_WIDTH__ = @as(c_int, 8);
pub const __INT_LEAST8_FMTd__ = "hhd";
pub const __INT_LEAST8_FMTi__ = "hhi";
pub const __UINT_LEAST8_TYPE__ = u8;
pub const __UINT_LEAST8_MAX__ = @as(c_int, 255);
pub const __UINT_LEAST8_FMTo__ = "hho";
pub const __UINT_LEAST8_FMTu__ = "hhu";
pub const __UINT_LEAST8_FMTx__ = "hhx";
pub const __UINT_LEAST8_FMTX__ = "hhX";
pub const __INT_LEAST16_TYPE__ = c_short;
pub const __INT_LEAST16_MAX__ = @as(c_int, 32767);
pub const __INT_LEAST16_WIDTH__ = @as(c_int, 16);
pub const __INT_LEAST16_FMTd__ = "hd";
pub const __INT_LEAST16_FMTi__ = "hi";
pub const __UINT_LEAST16_TYPE__ = c_ushort;
pub const __UINT_LEAST16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
pub const __UINT_LEAST16_FMTo__ = "ho";
pub const __UINT_LEAST16_FMTu__ = "hu";
pub const __UINT_LEAST16_FMTx__ = "hx";
pub const __UINT_LEAST16_FMTX__ = "hX";
pub const __INT_LEAST32_TYPE__ = c_int;
pub const __INT_LEAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __INT_LEAST32_WIDTH__ = @as(c_int, 32);
pub const __INT_LEAST32_FMTd__ = "d";
pub const __INT_LEAST32_FMTi__ = "i";
pub const __UINT_LEAST32_TYPE__ = c_uint;
pub const __UINT_LEAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const __UINT_LEAST32_FMTo__ = "o";
pub const __UINT_LEAST32_FMTu__ = "u";
pub const __UINT_LEAST32_FMTx__ = "x";
pub const __UINT_LEAST32_FMTX__ = "X";
pub const __INT_LEAST64_TYPE__ = c_long;
pub const __INT_LEAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __INT_LEAST64_WIDTH__ = @as(c_int, 64);
pub const __INT_LEAST64_FMTd__ = "ld";
pub const __INT_LEAST64_FMTi__ = "li";
pub const __UINT_LEAST64_TYPE__ = c_ulong;
pub const __UINT_LEAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __UINT_LEAST64_FMTo__ = "lo";
pub const __UINT_LEAST64_FMTu__ = "lu";
pub const __UINT_LEAST64_FMTx__ = "lx";
pub const __UINT_LEAST64_FMTX__ = "lX";
pub const __INT_FAST8_TYPE__ = i8;
pub const __INT_FAST8_MAX__ = @as(c_int, 127);
pub const __INT_FAST8_WIDTH__ = @as(c_int, 8);
pub const __INT_FAST8_FMTd__ = "hhd";
pub const __INT_FAST8_FMTi__ = "hhi";
pub const __UINT_FAST8_TYPE__ = u8;
pub const __UINT_FAST8_MAX__ = @as(c_int, 255);
pub const __UINT_FAST8_FMTo__ = "hho";
pub const __UINT_FAST8_FMTu__ = "hhu";
pub const __UINT_FAST8_FMTx__ = "hhx";
pub const __UINT_FAST8_FMTX__ = "hhX";
pub const __INT_FAST16_TYPE__ = c_short;
pub const __INT_FAST16_MAX__ = @as(c_int, 32767);
pub const __INT_FAST16_WIDTH__ = @as(c_int, 16);
pub const __INT_FAST16_FMTd__ = "hd";
pub const __INT_FAST16_FMTi__ = "hi";
pub const __UINT_FAST16_TYPE__ = c_ushort;
pub const __UINT_FAST16_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
pub const __UINT_FAST16_FMTo__ = "ho";
pub const __UINT_FAST16_FMTu__ = "hu";
pub const __UINT_FAST16_FMTx__ = "hx";
pub const __UINT_FAST16_FMTX__ = "hX";
pub const __INT_FAST32_TYPE__ = c_int;
pub const __INT_FAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const __INT_FAST32_WIDTH__ = @as(c_int, 32);
pub const __INT_FAST32_FMTd__ = "d";
pub const __INT_FAST32_FMTi__ = "i";
pub const __UINT_FAST32_TYPE__ = c_uint;
pub const __UINT_FAST32_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const __UINT_FAST32_FMTo__ = "o";
pub const __UINT_FAST32_FMTu__ = "u";
pub const __UINT_FAST32_FMTx__ = "x";
pub const __UINT_FAST32_FMTX__ = "X";
pub const __INT_FAST64_TYPE__ = c_long;
pub const __INT_FAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const __INT_FAST64_WIDTH__ = @as(c_int, 64);
pub const __INT_FAST64_FMTd__ = "ld";
pub const __INT_FAST64_FMTi__ = "li";
pub const __UINT_FAST64_TYPE__ = c_ulong;
pub const __UINT_FAST64_MAX__ = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const __UINT_FAST64_FMTo__ = "lo";
pub const __UINT_FAST64_FMTu__ = "lu";
pub const __UINT_FAST64_FMTx__ = "lx";
pub const __UINT_FAST64_FMTX__ = "lX";
pub const __USER_LABEL_PREFIX__ = "";
pub const __FINITE_MATH_ONLY__ = @as(c_int, 0);
pub const __GNUC_STDC_INLINE__ = @as(c_int, 1);
pub const __GCC_ATOMIC_TEST_AND_SET_TRUEVAL = @as(c_int, 1);
pub const __CLANG_ATOMIC_BOOL_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_CHAR_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_CHAR16_T_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_CHAR32_T_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_WCHAR_T_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_SHORT_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_INT_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_LONG_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_LLONG_LOCK_FREE = @as(c_int, 2);
pub const __CLANG_ATOMIC_POINTER_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_BOOL_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_CHAR_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_CHAR16_T_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_CHAR32_T_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_WCHAR_T_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_SHORT_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_INT_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_LONG_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_LLONG_LOCK_FREE = @as(c_int, 2);
pub const __GCC_ATOMIC_POINTER_LOCK_FREE = @as(c_int, 2);
pub const __NO_INLINE__ = @as(c_int, 1);
pub const __PIC__ = @as(c_int, 2);
pub const __pic__ = @as(c_int, 2);
pub const __FLT_RADIX__ = @as(c_int, 2);
pub const __DECIMAL_DIG__ = __LDBL_DECIMAL_DIG__;
pub const __SSP_STRONG__ = @as(c_int, 2);
pub const __ELF__ = @as(c_int, 1);
pub const __GCC_ASM_FLAG_OUTPUTS__ = @as(c_int, 1);
pub const __code_model_small__ = @as(c_int, 1);
pub const __amd64__ = @as(c_int, 1);
pub const __amd64 = @as(c_int, 1);
pub const __x86_64 = @as(c_int, 1);
pub const __x86_64__ = @as(c_int, 1);
pub const __SEG_GS = @as(c_int, 1);
pub const __SEG_FS = @as(c_int, 1);
pub const __seg_gs = @compileError("unable to translate macro: undefined identifier `address_space`");
// (no file):358:9
pub const __seg_fs = @compileError("unable to translate macro: undefined identifier `address_space`");
// (no file):359:9
pub const __znver3 = @as(c_int, 1);
pub const __znver3__ = @as(c_int, 1);
pub const __tune_znver3__ = @as(c_int, 1);
pub const __REGISTER_PREFIX__ = "";
pub const __NO_MATH_INLINES = @as(c_int, 1);
pub const __AES__ = @as(c_int, 1);
pub const __VAES__ = @as(c_int, 1);
pub const __PCLMUL__ = @as(c_int, 1);
pub const __VPCLMULQDQ__ = @as(c_int, 1);
pub const __LAHF_SAHF__ = @as(c_int, 1);
pub const __LZCNT__ = @as(c_int, 1);
pub const __RDRND__ = @as(c_int, 1);
pub const __FSGSBASE__ = @as(c_int, 1);
pub const __BMI__ = @as(c_int, 1);
pub const __BMI2__ = @as(c_int, 1);
pub const __POPCNT__ = @as(c_int, 1);
pub const __PRFCHW__ = @as(c_int, 1);
pub const __RDSEED__ = @as(c_int, 1);
pub const __ADX__ = @as(c_int, 1);
pub const __MWAITX__ = @as(c_int, 1);
pub const __MOVBE__ = @as(c_int, 1);
pub const __SSE4A__ = @as(c_int, 1);
pub const __FMA__ = @as(c_int, 1);
pub const __F16C__ = @as(c_int, 1);
pub const __SHA__ = @as(c_int, 1);
pub const __FXSR__ = @as(c_int, 1);
pub const __XSAVE__ = @as(c_int, 1);
pub const __XSAVEOPT__ = @as(c_int, 1);
pub const __XSAVEC__ = @as(c_int, 1);
pub const __XSAVES__ = @as(c_int, 1);
pub const __PKU__ = @as(c_int, 1);
pub const __CLFLUSHOPT__ = @as(c_int, 1);
pub const __CLWB__ = @as(c_int, 1);
pub const __WBNOINVD__ = @as(c_int, 1);
pub const __SHSTK__ = @as(c_int, 1);
pub const __CLZERO__ = @as(c_int, 1);
pub const __RDPID__ = @as(c_int, 1);
pub const __RDPRU__ = @as(c_int, 1);
pub const __INVPCID__ = @as(c_int, 1);
pub const __CRC32__ = @as(c_int, 1);
pub const __AVX2__ = @as(c_int, 1);
pub const __AVX__ = @as(c_int, 1);
pub const __SSE4_2__ = @as(c_int, 1);
pub const __SSE4_1__ = @as(c_int, 1);
pub const __SSSE3__ = @as(c_int, 1);
pub const __SSE3__ = @as(c_int, 1);
pub const __SSE2__ = @as(c_int, 1);
pub const __SSE2_MATH__ = @as(c_int, 1);
pub const __SSE__ = @as(c_int, 1);
pub const __SSE_MATH__ = @as(c_int, 1);
pub const __MMX__ = @as(c_int, 1);
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 = @as(c_int, 1);
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 = @as(c_int, 1);
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 = @as(c_int, 1);
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 = @as(c_int, 1);
pub const __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 = @as(c_int, 1);
pub const __SIZEOF_FLOAT128__ = @as(c_int, 16);
pub const unix = @as(c_int, 1);
pub const __unix = @as(c_int, 1);
pub const __unix__ = @as(c_int, 1);
pub const linux = @as(c_int, 1);
pub const __linux = @as(c_int, 1);
pub const __linux__ = @as(c_int, 1);
pub const __gnu_linux__ = @as(c_int, 1);
pub const __FLOAT128__ = @as(c_int, 1);
pub const __STDC__ = @as(c_int, 1);
pub const __STDC_HOSTED__ = @as(c_int, 1);
pub const __STDC_VERSION__ = @as(c_long, 201710);
pub const __STDC_UTF_16__ = @as(c_int, 1);
pub const __STDC_UTF_32__ = @as(c_int, 1);
pub const __GLIBC_MINOR__ = @as(c_int, 39);
pub const _DEBUG = @as(c_int, 1);
pub const __GCC_HAVE_DWARF2_CFI_ASM = @as(c_int, 1);
pub const RAYLIB_H = "";
pub const __STDARG_H = "";
pub const __need___va_list = "";
pub const __need_va_list = "";
pub const __need_va_arg = "";
pub const __need___va_copy = "";
pub const __need_va_copy = "";
pub const __GNUC_VA_LIST = "";
pub const _VA_LIST = "";
pub const va_start = @compileError("unable to translate macro: undefined identifier `__builtin_va_start`");
// /opt/zig-bin-0.13.0/lib/include/__stdarg_va_arg.h:17:9
pub const va_end = @compileError("unable to translate macro: undefined identifier `__builtin_va_end`");
// /opt/zig-bin-0.13.0/lib/include/__stdarg_va_arg.h:19:9
pub const va_arg = @compileError("unable to translate C expr: unexpected token 'an identifier'");
// /opt/zig-bin-0.13.0/lib/include/__stdarg_va_arg.h:20:9
pub const __va_copy = @compileError("unable to translate macro: undefined identifier `__builtin_va_copy`");
// /opt/zig-bin-0.13.0/lib/include/__stdarg___va_copy.h:11:9
pub const va_copy = @compileError("unable to translate macro: undefined identifier `__builtin_va_copy`");
// /opt/zig-bin-0.13.0/lib/include/__stdarg_va_copy.h:11:9
pub const RAYLIB_VERSION_MAJOR = @as(c_int, 5);
pub const RAYLIB_VERSION_MINOR = @as(c_int, 5);
pub const RAYLIB_VERSION_PATCH = @as(c_int, 0);
pub const RAYLIB_VERSION = "5.5-dev";
pub const RLAPI = "";
pub const PI = @as(f32, 3.14159265358979323846);
pub const DEG2RAD = @import("std").zig.c_translation.MacroArithmetic.div(PI, @as(f32, 180.0));
pub const RAD2DEG = @import("std").zig.c_translation.MacroArithmetic.div(@as(f32, 180.0), PI);
pub inline fn RL_MALLOC(sz: anytype) @TypeOf(malloc(sz)) {
_ = &sz;
return malloc(sz);
}
pub inline fn RL_CALLOC(n: anytype, sz: anytype) @TypeOf(calloc(n, sz)) {
_ = &n;
_ = &sz;
return calloc(n, sz);
}
pub inline fn RL_REALLOC(ptr: anytype, sz: anytype) @TypeOf(realloc(ptr, sz)) {
_ = &ptr;
_ = &sz;
return realloc(ptr, sz);
}
pub inline fn RL_FREE(ptr: anytype) @TypeOf(free(ptr)) {
_ = &ptr;
return free(ptr);
}
pub inline fn CLITERAL(@"type": anytype) @TypeOf(@"type") {
_ = &@"type";
return @"type";
}
pub const RL_COLOR_TYPE = "";
pub const RL_RECTANGLE_TYPE = "";
pub const RL_VECTOR2_TYPE = "";
pub const RL_VECTOR3_TYPE = "";
pub const RL_VECTOR4_TYPE = "";
pub const RL_QUATERNION_TYPE = "";
pub const RL_MATRIX_TYPE = "";
pub const LIGHTGRAY = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 200), @as(c_int, 200), @as(c_int, 200), @as(c_int, 255) });
pub const GRAY = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 130), @as(c_int, 130), @as(c_int, 130), @as(c_int, 255) });
pub const DARKGRAY = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 80), @as(c_int, 80), @as(c_int, 80), @as(c_int, 255) });
pub const YELLOW = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 253), @as(c_int, 249), @as(c_int, 0), @as(c_int, 255) });
pub const GOLD = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 255), @as(c_int, 203), @as(c_int, 0), @as(c_int, 255) });
pub const ORANGE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 255), @as(c_int, 161), @as(c_int, 0), @as(c_int, 255) });
pub const PINK = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 255), @as(c_int, 109), @as(c_int, 194), @as(c_int, 255) });
pub const RED = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 230), @as(c_int, 41), @as(c_int, 55), @as(c_int, 255) });
pub const MAROON = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 190), @as(c_int, 33), @as(c_int, 55), @as(c_int, 255) });
pub const GREEN = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 228), @as(c_int, 48), @as(c_int, 255) });
pub const LIME = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 158), @as(c_int, 47), @as(c_int, 255) });
pub const DARKGREEN = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 117), @as(c_int, 44), @as(c_int, 255) });
pub const SKYBLUE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 102), @as(c_int, 191), @as(c_int, 255), @as(c_int, 255) });
pub const BLUE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 121), @as(c_int, 241), @as(c_int, 255) });
pub const DARKBLUE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 82), @as(c_int, 172), @as(c_int, 255) });
pub const PURPLE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 200), @as(c_int, 122), @as(c_int, 255), @as(c_int, 255) });
pub const VIOLET = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 135), @as(c_int, 60), @as(c_int, 190), @as(c_int, 255) });
pub const DARKPURPLE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 112), @as(c_int, 31), @as(c_int, 126), @as(c_int, 255) });
pub const BEIGE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 211), @as(c_int, 176), @as(c_int, 131), @as(c_int, 255) });
pub const BROWN = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 127), @as(c_int, 106), @as(c_int, 79), @as(c_int, 255) });
pub const DARKBROWN = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 76), @as(c_int, 63), @as(c_int, 47), @as(c_int, 255) });
pub const WHITE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 255), @as(c_int, 255), @as(c_int, 255), @as(c_int, 255) });
pub const BLACK = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 0), @as(c_int, 0), @as(c_int, 255) });
pub const BLANK = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 0), @as(c_int, 0), @as(c_int, 0), @as(c_int, 0) });
pub const MAGENTA = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 255), @as(c_int, 0), @as(c_int, 255), @as(c_int, 255) });
pub const RAYWHITE = @import("std").mem.zeroInit(CLITERAL(Color), .{ @as(c_int, 245), @as(c_int, 245), @as(c_int, 245), @as(c_int, 255) });
pub const __STDBOOL_H = "";
pub const __bool_true_false_are_defined = @as(c_int, 1);
pub const @"bool" = bool;
pub const @"true" = @as(c_int, 1);
pub const @"false" = @as(c_int, 0);
pub const MOUSE_LEFT_BUTTON = MOUSE_BUTTON_LEFT;
pub const MOUSE_RIGHT_BUTTON = MOUSE_BUTTON_RIGHT;
pub const MOUSE_MIDDLE_BUTTON = MOUSE_BUTTON_MIDDLE;
pub const MATERIAL_MAP_DIFFUSE = MATERIAL_MAP_ALBEDO;
pub const MATERIAL_MAP_SPECULAR = MATERIAL_MAP_METALNESS;
pub const SHADER_LOC_MAP_DIFFUSE = SHADER_LOC_MAP_ALBEDO;
pub const SHADER_LOC_MAP_SPECULAR = SHADER_LOC_MAP_METALNESS;
pub const GetMouseRay = GetScreenToWorldRay;
pub const CONFIG_H = "";
pub const SUPPORT_MODULE_RSHAPES = @as(c_int, 1);
pub const SUPPORT_MODULE_RTEXTURES = @as(c_int, 1);
pub const SUPPORT_MODULE_RTEXT = @as(c_int, 1);
pub const SUPPORT_MODULE_RMODELS = @as(c_int, 1);
pub const SUPPORT_MODULE_RAUDIO = @as(c_int, 1);
pub const SUPPORT_CAMERA_SYSTEM = @as(c_int, 1);
pub const SUPPORT_GESTURES_SYSTEM = @as(c_int, 1);
pub const SUPPORT_RPRAND_GENERATOR = @as(c_int, 1);
pub const SUPPORT_MOUSE_GESTURES = @as(c_int, 1);
pub const SUPPORT_SSH_KEYBOARD_RPI = @as(c_int, 1);
pub const SUPPORT_WINMM_HIGHRES_TIMER = @as(c_int, 1);
pub const SUPPORT_PARTIALBUSY_WAIT_LOOP = @as(c_int, 1);
pub const SUPPORT_SCREEN_CAPTURE = @as(c_int, 1);
pub const SUPPORT_GIF_RECORDING = @as(c_int, 1);
pub const SUPPORT_COMPRESSION_API = @as(c_int, 1);
pub const SUPPORT_AUTOMATION_EVENTS = @as(c_int, 1);
pub const MAX_FILEPATH_CAPACITY = @as(c_int, 8192);
pub const MAX_FILEPATH_LENGTH = @as(c_int, 4096);
pub const MAX_KEYBOARD_KEYS = @as(c_int, 512);
pub const MAX_MOUSE_BUTTONS = @as(c_int, 8);
pub const MAX_GAMEPADS = @as(c_int, 4);
pub const MAX_GAMEPAD_AXIS = @as(c_int, 8);
pub const MAX_GAMEPAD_BUTTONS = @as(c_int, 32);
pub const MAX_GAMEPAD_VIBRATION_TIME = @as(f32, 2.0);
pub const MAX_TOUCH_POINTS = @as(c_int, 8);
pub const MAX_KEY_PRESSED_QUEUE = @as(c_int, 16);
pub const MAX_CHAR_PRESSED_QUEUE = @as(c_int, 16);
pub const MAX_DECOMPRESSION_SIZE = @as(c_int, 64);
pub const MAX_AUTOMATION_EVENTS = @as(c_int, 16384);
pub const RL_DEFAULT_BATCH_BUFFERS = @as(c_int, 1);
pub const RL_DEFAULT_BATCH_DRAWCALLS = @as(c_int, 256);
pub const RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS = @as(c_int, 4);
pub const RL_MAX_MATRIX_STACK_SIZE = @as(c_int, 32);
pub const RL_MAX_SHADER_LOCATIONS = @as(c_int, 32);
pub const RL_CULL_DISTANCE_NEAR = @as(f64, 0.01);
pub const RL_CULL_DISTANCE_FAR = @as(f64, 1000.0);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION = @as(c_int, 0);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD = @as(c_int, 1);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL = @as(c_int, 2);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR = @as(c_int, 3);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT = @as(c_int, 4);
pub const RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 = @as(c_int, 5);
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION = "vertexPosition";
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD = "vertexTexCoord";
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL = "vertexNormal";
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR = "vertexColor";
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT = "vertexTangent";
pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 = "vertexTexCoord2";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_MVP = "mvp";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW = "matView";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION = "matProjection";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL = "matModel";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL = "matNormal";
pub const RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR = "colDiffuse";
pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 = "texture0";
pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 = "texture1";
pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 = "texture2";
pub const SUPPORT_QUADS_DRAW_MODE = @as(c_int, 1);
pub const SPLINE_SEGMENT_DIVISIONS = @as(c_int, 24);
pub const SUPPORT_FILEFORMAT_PNG = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_GIF = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_QOI = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_DDS = @as(c_int, 1);
pub const SUPPORT_IMAGE_EXPORT = @as(c_int, 1);
pub const SUPPORT_IMAGE_GENERATION = @as(c_int, 1);
pub const SUPPORT_IMAGE_MANIPULATION = @as(c_int, 1);
pub const SUPPORT_DEFAULT_FONT = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_TTF = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_FNT = @as(c_int, 1);
pub const SUPPORT_TEXT_MANIPULATION = @as(c_int, 1);
pub const SUPPORT_FONT_ATLAS_WHITE_REC = @as(c_int, 1);
pub const MAX_TEXT_BUFFER_LENGTH = @as(c_int, 1024);
pub const MAX_TEXTSPLIT_COUNT = @as(c_int, 128);
pub const SUPPORT_FILEFORMAT_OBJ = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_MTL = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_IQM = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_GLTF = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_VOX = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_M3D = @as(c_int, 1);
pub const SUPPORT_MESH_GENERATION = @as(c_int, 1);
pub const MAX_MATERIAL_MAPS = @as(c_int, 12);
pub const MAX_MESH_VERTEX_BUFFERS = @as(c_int, 7);
pub const SUPPORT_FILEFORMAT_WAV = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_OGG = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_MP3 = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_QOA = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_XM = @as(c_int, 1);
pub const SUPPORT_FILEFORMAT_MOD = @as(c_int, 1);
pub const AUDIO_DEVICE_FORMAT = @compileError("unable to translate macro: undefined identifier `ma_format_f32`");
// ./config.h:244:9
pub const AUDIO_DEVICE_CHANNELS = @as(c_int, 2);
pub const AUDIO_DEVICE_SAMPLE_RATE = @as(c_int, 0);
pub const MAX_AUDIO_BUFFER_POOL_CHANNELS = @as(c_int, 16);
pub const SUPPORT_STANDARD_FILEIO = @as(c_int, 1);
pub const SUPPORT_TRACELOG = @as(c_int, 1);
pub const MAX_TRACELOG_MSG_LENGTH = @as(c_int, 256);
pub const UTILS_H = "";
pub const TRACELOG = @compileError("unable to translate C expr: expected ')' instead got '...'");
// ./utils.h:36:13
pub const TRACELOGD = @compileError("unable to translate C expr: expected ')' instead got '...'");
// ./utils.h:41:17
pub const RLGL_H = "";
pub const RLGL_VERSION = "5.0";
pub const GRAPHICS_API_OPENGL_33 = "";
pub const RLGL_RENDER_TEXTURES_HINT = "";
pub const RL_DEFAULT_BATCH_BUFFER_ELEMENTS = @as(c_int, 8192);
pub const RL_TEXTURE_WRAP_S = @as(c_int, 0x2802);
pub const RL_TEXTURE_WRAP_T = @as(c_int, 0x2803);
pub const RL_TEXTURE_MAG_FILTER = @as(c_int, 0x2800);
pub const RL_TEXTURE_MIN_FILTER = @as(c_int, 0x2801);
pub const RL_TEXTURE_FILTER_NEAREST = @as(c_int, 0x2600);
pub const RL_TEXTURE_FILTER_LINEAR = @as(c_int, 0x2601);
pub const RL_TEXTURE_FILTER_MIP_NEAREST = @as(c_int, 0x2700);
pub const RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR = @as(c_int, 0x2702);
pub const RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST = @as(c_int, 0x2701);
pub const RL_TEXTURE_FILTER_MIP_LINEAR = @as(c_int, 0x2703);
pub const RL_TEXTURE_FILTER_ANISOTROPIC = @as(c_int, 0x3000);
pub const RL_TEXTURE_MIPMAP_BIAS_RATIO = @as(c_int, 0x4000);
pub const RL_TEXTURE_WRAP_REPEAT = @as(c_int, 0x2901);
pub const RL_TEXTURE_WRAP_CLAMP = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x812F, .hex);
pub const RL_TEXTURE_WRAP_MIRROR_REPEAT = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8370, .hex);
pub const RL_TEXTURE_WRAP_MIRROR_CLAMP = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8742, .hex);
pub const RL_MODELVIEW = @as(c_int, 0x1700);
pub const RL_PROJECTION = @as(c_int, 0x1701);
pub const RL_TEXTURE = @as(c_int, 0x1702);
pub const RL_LINES = @as(c_int, 0x0001);
pub const RL_TRIANGLES = @as(c_int, 0x0004);
pub const RL_QUADS = @as(c_int, 0x0007);
pub const RL_UNSIGNED_BYTE = @as(c_int, 0x1401);
pub const RL_FLOAT = @as(c_int, 0x1406);
pub const RL_STREAM_DRAW = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E0, .hex);
pub const RL_STREAM_READ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E1, .hex);
pub const RL_STREAM_COPY = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E2, .hex);
pub const RL_STATIC_DRAW = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E4, .hex);
pub const RL_STATIC_READ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E5, .hex);
pub const RL_STATIC_COPY = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E6, .hex);
pub const RL_DYNAMIC_DRAW = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E8, .hex);
pub const RL_DYNAMIC_READ = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88E9, .hex);
pub const RL_DYNAMIC_COPY = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x88EA, .hex);
pub const RL_FRAGMENT_SHADER = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8B30, .hex);
pub const RL_VERTEX_SHADER = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8B31, .hex);
pub const RL_COMPUTE_SHADER = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x91B9, .hex);
pub const RL_ZERO = @as(c_int, 0);
pub const RL_ONE = @as(c_int, 1);
pub const RL_SRC_COLOR = @as(c_int, 0x0300);
pub const RL_ONE_MINUS_SRC_COLOR = @as(c_int, 0x0301);
pub const RL_SRC_ALPHA = @as(c_int, 0x0302);
pub const RL_ONE_MINUS_SRC_ALPHA = @as(c_int, 0x0303);
pub const RL_DST_ALPHA = @as(c_int, 0x0304);
pub const RL_ONE_MINUS_DST_ALPHA = @as(c_int, 0x0305);
pub const RL_DST_COLOR = @as(c_int, 0x0306);
pub const RL_ONE_MINUS_DST_COLOR = @as(c_int, 0x0307);
pub const RL_SRC_ALPHA_SATURATE = @as(c_int, 0x0308);
pub const RL_CONSTANT_COLOR = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8001, .hex);
pub const RL_ONE_MINUS_CONSTANT_COLOR = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8002, .hex);
pub const RL_CONSTANT_ALPHA = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8003, .hex);
pub const RL_ONE_MINUS_CONSTANT_ALPHA = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8004, .hex);
pub const RL_FUNC_ADD = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8006, .hex);
pub const RL_MIN = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8007, .hex);
pub const RL_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8008, .hex);
pub const RL_FUNC_SUBTRACT = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x800A, .hex);
pub const RL_FUNC_REVERSE_SUBTRACT = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x800B, .hex);
pub const RL_BLEND_EQUATION = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8009, .hex);
pub const RL_BLEND_EQUATION_RGB = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8009, .hex);
pub const RL_BLEND_EQUATION_ALPHA = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x883D, .hex);
pub const RL_BLEND_DST_RGB = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80C8, .hex);
pub const RL_BLEND_SRC_RGB = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80C9, .hex);
pub const RL_BLEND_DST_ALPHA = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80CA, .hex);
pub const RL_BLEND_SRC_ALPHA = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80CB, .hex);
pub const RL_BLEND_COLOR = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8005, .hex);
pub const RL_READ_FRAMEBUFFER = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8CA8, .hex);
pub const RL_DRAW_FRAMEBUFFER = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8CA9, .hex);
pub const RL_SHADER_LOC_MAP_DIFFUSE = RL_SHADER_LOC_MAP_ALBEDO;
pub const RL_SHADER_LOC_MAP_SPECULAR = RL_SHADER_LOC_MAP_METALNESS;
pub const RAYMATH_H = "";
pub const RMAPI = @compileError("unable to translate C expr: unexpected token 'inline'");
// ./raymath.h:76:17
pub const EPSILON = @as(f32, 0.000001);
pub inline fn MatrixToFloat(mat: anytype) @TypeOf(MatrixToFloatV(mat).v) {
_ = &mat;
return MatrixToFloatV(mat).v;
}
pub inline fn Vector3ToFloat(vec: anytype) @TypeOf(Vector3ToFloatV(vec).v) {
_ = &vec;
return Vector3ToFloatV(vec).v;
}
pub const _MATH_H = @as(c_int, 1);
pub const __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION = "";
pub const _FEATURES_H = @as(c_int, 1);
pub const __KERNEL_STRICT_NAMES = "";
pub inline fn __GNUC_PREREQ(maj: anytype, min: anytype) @TypeOf(((__GNUC__ << @as(c_int, 16)) + __GNUC_MINOR__) >= ((maj << @as(c_int, 16)) + min)) {
_ = &maj;
_ = &min;
return ((__GNUC__ << @as(c_int, 16)) + __GNUC_MINOR__) >= ((maj << @as(c_int, 16)) + min);
}
pub inline fn __glibc_clang_prereq(maj: anytype, min: anytype) @TypeOf(((__clang_major__ << @as(c_int, 16)) + __clang_minor__) >= ((maj << @as(c_int, 16)) + min)) {
_ = &maj;
_ = &min;
return ((__clang_major__ << @as(c_int, 16)) + __clang_minor__) >= ((maj << @as(c_int, 16)) + min);
}
pub const __GLIBC_USE = @compileError("unable to translate macro: undefined identifier `__GLIBC_USE_`");
// /usr/include/features.h:189:9
pub const _DEFAULT_SOURCE = @as(c_int, 1);
pub const __GLIBC_USE_ISOC23 = @as(c_int, 0);
pub const __USE_ISOC11 = @as(c_int, 1);
pub const __USE_ISOC99 = @as(c_int, 1);
pub const __USE_ISOC95 = @as(c_int, 1);
pub const __USE_POSIX_IMPLICITLY = @as(c_int, 1);
pub const _POSIX_SOURCE = @as(c_int, 1);
pub const _POSIX_C_SOURCE = @as(c_long, 200809);
pub const __USE_POSIX = @as(c_int, 1);
pub const __USE_POSIX2 = @as(c_int, 1);
pub const __USE_POSIX199309 = @as(c_int, 1);
pub const __USE_POSIX199506 = @as(c_int, 1);
pub const __USE_XOPEN2K = @as(c_int, 1);
pub const __USE_XOPEN2K8 = @as(c_int, 1);
pub const _ATFILE_SOURCE = @as(c_int, 1);
pub const __WORDSIZE = @as(c_int, 64);
pub const __WORDSIZE_TIME64_COMPAT32 = @as(c_int, 1);
pub const __SYSCALL_WORDSIZE = @as(c_int, 64);
pub const __TIMESIZE = __WORDSIZE;
pub const __USE_TIME_BITS64 = @as(c_int, 1);
pub const __USE_MISC = @as(c_int, 1);
pub const __USE_ATFILE = @as(c_int, 1);
pub const __USE_FORTIFY_LEVEL = @as(c_int, 0);
pub const __GLIBC_USE_DEPRECATED_GETS = @as(c_int, 0);
pub const __GLIBC_USE_DEPRECATED_SCANF = @as(c_int, 0);
pub const __GLIBC_USE_C23_STRTOL = @as(c_int, 0);
pub const _STDC_PREDEF_H = @as(c_int, 1);
pub const __STDC_IEC_559__ = @as(c_int, 1);
pub const __STDC_IEC_60559_BFP__ = @as(c_long, 201404);
pub const __STDC_IEC_559_COMPLEX__ = @as(c_int, 1);
pub const __STDC_IEC_60559_COMPLEX__ = @as(c_long, 201404);
pub const __STDC_ISO_10646__ = @as(c_long, 201706);
pub const __GNU_LIBRARY__ = @as(c_int, 6);
pub const __GLIBC__ = @as(c_int, 2);
pub inline fn __GLIBC_PREREQ(maj: anytype, min: anytype) @TypeOf(((__GLIBC__ << @as(c_int, 16)) + __GLIBC_MINOR__) >= ((maj << @as(c_int, 16)) + min)) {
_ = &maj;
_ = &min;
return ((__GLIBC__ << @as(c_int, 16)) + __GLIBC_MINOR__) >= ((maj << @as(c_int, 16)) + min);
}
pub const _SYS_CDEFS_H = @as(c_int, 1);
pub const __glibc_has_attribute = @compileError("unable to translate macro: undefined identifier `__has_attribute`");
// /usr/include/sys/cdefs.h:45:10
pub inline fn __glibc_has_builtin(name: anytype) @TypeOf(__has_builtin(name)) {
_ = &name;
return __has_builtin(name);
}
pub const __glibc_has_extension = @compileError("unable to translate macro: undefined identifier `__has_extension`");
// /usr/include/sys/cdefs.h:55:10
pub const __LEAF = "";
pub const __LEAF_ATTR = "";
pub const __THROW = @compileError("unable to translate macro: undefined identifier `__nothrow__`");
// /usr/include/sys/cdefs.h:79:11
pub const __THROWNL = @compileError("unable to translate macro: undefined identifier `__nothrow__`");
// /usr/include/sys/cdefs.h:80:11
pub const __NTH = @compileError("unable to translate macro: undefined identifier `__nothrow__`");
// /usr/include/sys/cdefs.h:81:11
pub const __NTHNL = @compileError("unable to translate macro: undefined identifier `__nothrow__`");
// /usr/include/sys/cdefs.h:82:11
pub const __COLD = @compileError("unable to translate macro: undefined identifier `__cold__`");
// /usr/include/sys/cdefs.h:102:11
pub inline fn __P(args: anytype) @TypeOf(args) {
_ = &args;
return args;
}
pub inline fn __PMT(args: anytype) @TypeOf(args) {
_ = &args;
return args;
}
pub const __CONCAT = @compileError("unable to translate C expr: unexpected token '##'");
// /usr/include/sys/cdefs.h:131:9
pub const __STRING = @compileError("unable to translate C expr: unexpected token '#'");
// /usr/include/sys/cdefs.h:132:9
pub const __ptr_t = ?*anyopaque;
pub const __BEGIN_DECLS = "";
pub const __END_DECLS = "";
pub const __attribute_overloadable__ = @compileError("unable to translate macro: undefined identifier `__overloadable__`");
// /usr/include/sys/cdefs.h:151:10
pub inline fn __bos(ptr: anytype) @TypeOf(__builtin_object_size(ptr, __USE_FORTIFY_LEVEL > @as(c_int, 1))) {
_ = &ptr;
return __builtin_object_size(ptr, __USE_FORTIFY_LEVEL > @as(c_int, 1));
}
pub inline fn __bos0(ptr: anytype) @TypeOf(__builtin_object_size(ptr, @as(c_int, 0))) {
_ = &ptr;
return __builtin_object_size(ptr, @as(c_int, 0));
}
pub inline fn __glibc_objsize0(__o: anytype) @TypeOf(__bos0(__o)) {
_ = &__o;
return __bos0(__o);
}
pub inline fn __glibc_objsize(__o: anytype) @TypeOf(__bos(__o)) {
_ = &__o;
return __bos(__o);
}
pub const __warnattr = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:370:10
pub const __errordecl = @compileError("unable to translate C expr: unexpected token 'extern'");
// /usr/include/sys/cdefs.h:371:10
pub const __flexarr = @compileError("unable to translate C expr: unexpected token '['");
// /usr/include/sys/cdefs.h:379:10
pub const __glibc_c99_flexarr_available = @as(c_int, 1);
pub const __REDIRECT = @compileError("unable to translate C expr: unexpected token '__asm__'");
// /usr/include/sys/cdefs.h:410:10
pub const __REDIRECT_NTH = @compileError("unable to translate C expr: unexpected token '__asm__'");
// /usr/include/sys/cdefs.h:417:11
pub const __REDIRECT_NTHNL = @compileError("unable to translate C expr: unexpected token '__asm__'");
// /usr/include/sys/cdefs.h:419:11
pub const __ASMNAME = @compileError("unable to translate C expr: unexpected token ','");
// /usr/include/sys/cdefs.h:422:10
pub inline fn __ASMNAME2(prefix: anytype, cname: anytype) @TypeOf(__STRING(prefix) ++ cname) {
_ = &prefix;
_ = &cname;
return __STRING(prefix) ++ cname;
}
pub const __REDIRECT_FORTIFY = __REDIRECT;
pub const __REDIRECT_FORTIFY_NTH = __REDIRECT_NTH;
pub const __attribute_malloc__ = @compileError("unable to translate macro: undefined identifier `__malloc__`");
// /usr/include/sys/cdefs.h:452:10
pub const __attribute_alloc_size__ = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:463:10
pub const __attribute_alloc_align__ = @compileError("unable to translate macro: undefined identifier `__alloc_align__`");
// /usr/include/sys/cdefs.h:469:10
pub const __attribute_pure__ = @compileError("unable to translate macro: undefined identifier `__pure__`");
// /usr/include/sys/cdefs.h:479:10
pub const __attribute_const__ = @compileError("unable to translate C expr: unexpected token '__attribute__'");
// /usr/include/sys/cdefs.h:486:10
pub const __attribute_maybe_unused__ = @compileError("unable to translate macro: undefined identifier `__unused__`");
// /usr/include/sys/cdefs.h:492:10
pub const __attribute_used__ = @compileError("unable to translate macro: undefined identifier `__used__`");
// /usr/include/sys/cdefs.h:501:10
pub const __attribute_noinline__ = @compileError("unable to translate macro: undefined identifier `__noinline__`");
// /usr/include/sys/cdefs.h:502:10
pub const __attribute_deprecated__ = @compileError("unable to translate macro: undefined identifier `__deprecated__`");
// /usr/include/sys/cdefs.h:510:10
pub const __attribute_deprecated_msg__ = @compileError("unable to translate macro: undefined identifier `__deprecated__`");
// /usr/include/sys/cdefs.h:520:10
pub const __attribute_format_arg__ = @compileError("unable to translate macro: undefined identifier `__format_arg__`");
// /usr/include/sys/cdefs.h:533:10
pub const __attribute_format_strfmon__ = @compileError("unable to translate macro: undefined identifier `__format__`");
// /usr/include/sys/cdefs.h:543:10
pub const __attribute_nonnull__ = @compileError("unable to translate macro: undefined identifier `__nonnull__`");
// /usr/include/sys/cdefs.h:555:11
pub inline fn __nonnull(params: anytype) @TypeOf(__attribute_nonnull__(params)) {
_ = &params;
return __attribute_nonnull__(params);
}
pub const __returns_nonnull = @compileError("unable to translate macro: undefined identifier `__returns_nonnull__`");
// /usr/include/sys/cdefs.h:568:10
pub const __attribute_warn_unused_result__ = @compileError("unable to translate macro: undefined identifier `__warn_unused_result__`");
// /usr/include/sys/cdefs.h:577:10
pub const __wur = "";
pub const __always_inline = @compileError("unable to translate macro: undefined identifier `__always_inline__`");
// /usr/include/sys/cdefs.h:595:10
pub const __attribute_artificial__ = @compileError("unable to translate macro: undefined identifier `__artificial__`");
// /usr/include/sys/cdefs.h:604:10
pub const __extern_inline = @compileError("unable to translate macro: undefined identifier `__gnu_inline__`");
// /usr/include/sys/cdefs.h:622:11
pub const __extern_always_inline = @compileError("unable to translate macro: undefined identifier `__gnu_inline__`");
// /usr/include/sys/cdefs.h:623:11
pub const __fortify_function = __extern_always_inline ++ __attribute_artificial__;
pub const __restrict_arr = @compileError("unable to translate C expr: unexpected token '__restrict'");
// /usr/include/sys/cdefs.h:666:10
pub inline fn __glibc_unlikely(cond: anytype) @TypeOf(__builtin_expect(cond, @as(c_int, 0))) {
_ = &cond;
return __builtin_expect(cond, @as(c_int, 0));
}
pub inline fn __glibc_likely(cond: anytype) @TypeOf(__builtin_expect(cond, @as(c_int, 1))) {
_ = &cond;
return __builtin_expect(cond, @as(c_int, 1));
}
pub const __attribute_nonstring__ = "";
pub const __attribute_copy__ = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:715:10
pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI = @as(c_int, 0);
pub inline fn __LDBL_REDIR1(name: anytype, proto: anytype, alias: anytype) @TypeOf(name ++ proto) {
_ = &name;
_ = &proto;
_ = &alias;
return name ++ proto;
}
pub inline fn __LDBL_REDIR(name: anytype, proto: anytype) @TypeOf(name ++ proto) {
_ = &name;
_ = &proto;
return name ++ proto;
}
pub inline fn __LDBL_REDIR1_NTH(name: anytype, proto: anytype, alias: anytype) @TypeOf(name ++ proto ++ __THROW) {
_ = &name;
_ = &proto;
_ = &alias;
return name ++ proto ++ __THROW;
}
pub inline fn __LDBL_REDIR_NTH(name: anytype, proto: anytype) @TypeOf(name ++ proto ++ __THROW) {
_ = &name;
_ = &proto;
return name ++ proto ++ __THROW;
}
pub const __LDBL_REDIR2_DECL = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:792:10
pub const __LDBL_REDIR_DECL = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:793:10
pub inline fn __REDIRECT_LDBL(name: anytype, proto: anytype, alias: anytype) @TypeOf(__REDIRECT(name, proto, alias)) {
_ = &name;
_ = &proto;
_ = &alias;
return __REDIRECT(name, proto, alias);
}
pub inline fn __REDIRECT_NTH_LDBL(name: anytype, proto: anytype, alias: anytype) @TypeOf(__REDIRECT_NTH(name, proto, alias)) {
_ = &name;
_ = &proto;
_ = &alias;
return __REDIRECT_NTH(name, proto, alias);
}
pub const __glibc_macro_warning1 = @compileError("unable to translate macro: undefined identifier `_Pragma`");
// /usr/include/sys/cdefs.h:807:10
pub const __glibc_macro_warning = @compileError("unable to translate macro: undefined identifier `GCC`");
// /usr/include/sys/cdefs.h:808:10
pub const __HAVE_GENERIC_SELECTION = @as(c_int, 1);
pub const __fortified_attr_access = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:853:11
pub const __attr_access = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:854:11
pub const __attr_access_none = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:855:11
pub const __attr_dealloc = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/sys/cdefs.h:865:10
pub const __attr_dealloc_free = "";
pub const __attribute_returns_twice__ = @compileError("unable to translate macro: undefined identifier `__returns_twice__`");
// /usr/include/sys/cdefs.h:872:10
pub const __attribute_struct_may_alias__ = @compileError("unable to translate macro: undefined identifier `__may_alias__`");
// /usr/include/sys/cdefs.h:881:10
pub const __stub___compat_bdflush = "";
pub const __stub_chflags = "";
pub const __stub_fchflags = "";
pub const __stub_gtty = "";
pub const __stub_revoke = "";
pub const __stub_setlogin = "";
pub const __stub_sigreturn = "";
pub const __stub_stty = "";
pub const __GLIBC_USE_LIB_EXT2 = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_BFP_EXT = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23 = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_EXT = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23 = @as(c_int, 0);
pub const __GLIBC_USE_IEC_60559_TYPES_EXT = @as(c_int, 0);
pub const _BITS_TYPES_H = @as(c_int, 1);
pub const __S16_TYPE = c_short;
pub const __U16_TYPE = c_ushort;
pub const __S32_TYPE = c_int;
pub const __U32_TYPE = c_uint;
pub const __SLONGWORD_TYPE = c_long;
pub const __ULONGWORD_TYPE = c_ulong;
pub const __SQUAD_TYPE = c_long;
pub const __UQUAD_TYPE = c_ulong;
pub const __SWORD_TYPE = c_long;
pub const __UWORD_TYPE = c_ulong;
pub const __SLONG32_TYPE = c_int;
pub const __ULONG32_TYPE = c_uint;
pub const __S64_TYPE = c_long;
pub const __U64_TYPE = c_ulong;
pub const __STD_TYPE = @compileError("unable to translate C expr: unexpected token 'typedef'");
// /usr/include/bits/types.h:137:10
pub const _BITS_TYPESIZES_H = @as(c_int, 1);
pub const __SYSCALL_SLONG_TYPE = __SLONGWORD_TYPE;
pub const __SYSCALL_ULONG_TYPE = __ULONGWORD_TYPE;
pub const __DEV_T_TYPE = __UQUAD_TYPE;
pub const __UID_T_TYPE = __U32_TYPE;
pub const __GID_T_TYPE = __U32_TYPE;
pub const __INO_T_TYPE = __SYSCALL_ULONG_TYPE;
pub const __INO64_T_TYPE = __UQUAD_TYPE;
pub const __MODE_T_TYPE = __U32_TYPE;
pub const __NLINK_T_TYPE = __SYSCALL_ULONG_TYPE;
pub const __FSWORD_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __OFF_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __OFF64_T_TYPE = __SQUAD_TYPE;
pub const __PID_T_TYPE = __S32_TYPE;
pub const __RLIM_T_TYPE = __SYSCALL_ULONG_TYPE;
pub const __RLIM64_T_TYPE = __UQUAD_TYPE;
pub const __BLKCNT_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __BLKCNT64_T_TYPE = __SQUAD_TYPE;
pub const __FSBLKCNT_T_TYPE = __SYSCALL_ULONG_TYPE;
pub const __FSBLKCNT64_T_TYPE = __UQUAD_TYPE;
pub const __FSFILCNT_T_TYPE = __SYSCALL_ULONG_TYPE;
pub const __FSFILCNT64_T_TYPE = __UQUAD_TYPE;
pub const __ID_T_TYPE = __U32_TYPE;
pub const __CLOCK_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __TIME_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __USECONDS_T_TYPE = __U32_TYPE;
pub const __SUSECONDS_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __SUSECONDS64_T_TYPE = __SQUAD_TYPE;
pub const __DADDR_T_TYPE = __S32_TYPE;
pub const __KEY_T_TYPE = __S32_TYPE;
pub const __CLOCKID_T_TYPE = __S32_TYPE;
pub const __TIMER_T_TYPE = ?*anyopaque;
pub const __BLKSIZE_T_TYPE = __SYSCALL_SLONG_TYPE;
pub const __FSID_T_TYPE = @compileError("unable to translate macro: undefined identifier `__val`");
// /usr/include/bits/typesizes.h:73:9
pub const __SSIZE_T_TYPE = __SWORD_TYPE;
pub const __CPU_MASK_TYPE = __SYSCALL_ULONG_TYPE;
pub const __OFF_T_MATCHES_OFF64_T = @as(c_int, 1);
pub const __INO_T_MATCHES_INO64_T = @as(c_int, 1);
pub const __RLIM_T_MATCHES_RLIM64_T = @as(c_int, 1);
pub const __STATFS_MATCHES_STATFS64 = @as(c_int, 1);
pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 = @as(c_int, 1);
pub const __FD_SETSIZE = @as(c_int, 1024);
pub const _BITS_TIME64_H = @as(c_int, 1);
pub const __TIME64_T_TYPE = __TIME_T_TYPE;
pub const _BITS_LIBM_SIMD_DECL_STUBS_H = @as(c_int, 1);
pub const __DECL_SIMD_cos = "";
pub const __DECL_SIMD_cosf = "";
pub const __DECL_SIMD_cosl = "";
pub const __DECL_SIMD_cosf16 = "";
pub const __DECL_SIMD_cosf32 = "";
pub const __DECL_SIMD_cosf64 = "";
pub const __DECL_SIMD_cosf128 = "";
pub const __DECL_SIMD_cosf32x = "";
pub const __DECL_SIMD_cosf64x = "";
pub const __DECL_SIMD_cosf128x = "";
pub const __DECL_SIMD_sin = "";
pub const __DECL_SIMD_sinf = "";
pub const __DECL_SIMD_sinl = "";
pub const __DECL_SIMD_sinf16 = "";
pub const __DECL_SIMD_sinf32 = "";
pub const __DECL_SIMD_sinf64 = "";
pub const __DECL_SIMD_sinf128 = "";
pub const __DECL_SIMD_sinf32x = "";
pub const __DECL_SIMD_sinf64x = "";
pub const __DECL_SIMD_sinf128x = "";
pub const __DECL_SIMD_sincos = "";
pub const __DECL_SIMD_sincosf = "";
pub const __DECL_SIMD_sincosl = "";
pub const __DECL_SIMD_sincosf16 = "";
pub const __DECL_SIMD_sincosf32 = "";
pub const __DECL_SIMD_sincosf64 = "";
pub const __DECL_SIMD_sincosf128 = "";
pub const __DECL_SIMD_sincosf32x = "";
pub const __DECL_SIMD_sincosf64x = "";
pub const __DECL_SIMD_sincosf128x = "";
pub const __DECL_SIMD_log = "";
pub const __DECL_SIMD_logf = "";
pub const __DECL_SIMD_logl = "";
pub const __DECL_SIMD_logf16 = "";
pub const __DECL_SIMD_logf32 = "";
pub const __DECL_SIMD_logf64 = "";
pub const __DECL_SIMD_logf128 = "";
pub const __DECL_SIMD_logf32x = "";
pub const __DECL_SIMD_logf64x = "";
pub const __DECL_SIMD_logf128x = "";
pub const __DECL_SIMD_exp = "";
pub const __DECL_SIMD_expf = "";
pub const __DECL_SIMD_expl = "";
pub const __DECL_SIMD_expf16 = "";
pub const __DECL_SIMD_expf32 = "";
pub const __DECL_SIMD_expf64 = "";
pub const __DECL_SIMD_expf128 = "";
pub const __DECL_SIMD_expf32x = "";
pub const __DECL_SIMD_expf64x = "";
pub const __DECL_SIMD_expf128x = "";
pub const __DECL_SIMD_pow = "";
pub const __DECL_SIMD_powf = "";
pub const __DECL_SIMD_powl = "";
pub const __DECL_SIMD_powf16 = "";
pub const __DECL_SIMD_powf32 = "";
pub const __DECL_SIMD_powf64 = "";
pub const __DECL_SIMD_powf128 = "";
pub const __DECL_SIMD_powf32x = "";
pub const __DECL_SIMD_powf64x = "";
pub const __DECL_SIMD_powf128x = "";
pub const __DECL_SIMD_acos = "";
pub const __DECL_SIMD_acosf = "";
pub const __DECL_SIMD_acosl = "";
pub const __DECL_SIMD_acosf16 = "";
pub const __DECL_SIMD_acosf32 = "";
pub const __DECL_SIMD_acosf64 = "";
pub const __DECL_SIMD_acosf128 = "";
pub const __DECL_SIMD_acosf32x = "";
pub const __DECL_SIMD_acosf64x = "";
pub const __DECL_SIMD_acosf128x = "";
pub const __DECL_SIMD_atan = "";
pub const __DECL_SIMD_atanf = "";
pub const __DECL_SIMD_atanl = "";
pub const __DECL_SIMD_atanf16 = "";
pub const __DECL_SIMD_atanf32 = "";
pub const __DECL_SIMD_atanf64 = "";
pub const __DECL_SIMD_atanf128 = "";
pub const __DECL_SIMD_atanf32x = "";
pub const __DECL_SIMD_atanf64x = "";
pub const __DECL_SIMD_atanf128x = "";
pub const __DECL_SIMD_asin = "";
pub const __DECL_SIMD_asinf = "";
pub const __DECL_SIMD_asinl = "";
pub const __DECL_SIMD_asinf16 = "";
pub const __DECL_SIMD_asinf32 = "";
pub const __DECL_SIMD_asinf64 = "";
pub const __DECL_SIMD_asinf128 = "";
pub const __DECL_SIMD_asinf32x = "";
pub const __DECL_SIMD_asinf64x = "";
pub const __DECL_SIMD_asinf128x = "";
pub const __DECL_SIMD_hypot = "";
pub const __DECL_SIMD_hypotf = "";
pub const __DECL_SIMD_hypotl = "";
pub const __DECL_SIMD_hypotf16 = "";
pub const __DECL_SIMD_hypotf32 = "";
pub const __DECL_SIMD_hypotf64 = "";
pub const __DECL_SIMD_hypotf128 = "";
pub const __DECL_SIMD_hypotf32x = "";
pub const __DECL_SIMD_hypotf64x = "";
pub const __DECL_SIMD_hypotf128x = "";
pub const __DECL_SIMD_exp2 = "";
pub const __DECL_SIMD_exp2f = "";
pub const __DECL_SIMD_exp2l = "";
pub const __DECL_SIMD_exp2f16 = "";
pub const __DECL_SIMD_exp2f32 = "";
pub const __DECL_SIMD_exp2f64 = "";
pub const __DECL_SIMD_exp2f128 = "";
pub const __DECL_SIMD_exp2f32x = "";
pub const __DECL_SIMD_exp2f64x = "";
pub const __DECL_SIMD_exp2f128x = "";
pub const __DECL_SIMD_exp10 = "";
pub const __DECL_SIMD_exp10f = "";
pub const __DECL_SIMD_exp10l = "";
pub const __DECL_SIMD_exp10f16 = "";
pub const __DECL_SIMD_exp10f32 = "";
pub const __DECL_SIMD_exp10f64 = "";
pub const __DECL_SIMD_exp10f128 = "";
pub const __DECL_SIMD_exp10f32x = "";
pub const __DECL_SIMD_exp10f64x = "";
pub const __DECL_SIMD_exp10f128x = "";
pub const __DECL_SIMD_cosh = "";
pub const __DECL_SIMD_coshf = "";
pub const __DECL_SIMD_coshl = "";
pub const __DECL_SIMD_coshf16 = "";
pub const __DECL_SIMD_coshf32 = "";
pub const __DECL_SIMD_coshf64 = "";
pub const __DECL_SIMD_coshf128 = "";
pub const __DECL_SIMD_coshf32x = "";
pub const __DECL_SIMD_coshf64x = "";
pub const __DECL_SIMD_coshf128x = "";
pub const __DECL_SIMD_expm1 = "";
pub const __DECL_SIMD_expm1f = "";
pub const __DECL_SIMD_expm1l = "";
pub const __DECL_SIMD_expm1f16 = "";
pub const __DECL_SIMD_expm1f32 = "";
pub const __DECL_SIMD_expm1f64 = "";
pub const __DECL_SIMD_expm1f128 = "";
pub const __DECL_SIMD_expm1f32x = "";
pub const __DECL_SIMD_expm1f64x = "";
pub const __DECL_SIMD_expm1f128x = "";
pub const __DECL_SIMD_sinh = "";
pub const __DECL_SIMD_sinhf = "";
pub const __DECL_SIMD_sinhl = "";
pub const __DECL_SIMD_sinhf16 = "";
pub const __DECL_SIMD_sinhf32 = "";
pub const __DECL_SIMD_sinhf64 = "";
pub const __DECL_SIMD_sinhf128 = "";
pub const __DECL_SIMD_sinhf32x = "";
pub const __DECL_SIMD_sinhf64x = "";
pub const __DECL_SIMD_sinhf128x = "";
pub const __DECL_SIMD_cbrt = "";
pub const __DECL_SIMD_cbrtf = "";
pub const __DECL_SIMD_cbrtl = "";
pub const __DECL_SIMD_cbrtf16 = "";
pub const __DECL_SIMD_cbrtf32 = "";
pub const __DECL_SIMD_cbrtf64 = "";
pub const __DECL_SIMD_cbrtf128 = "";
pub const __DECL_SIMD_cbrtf32x = "";
pub const __DECL_SIMD_cbrtf64x = "";
pub const __DECL_SIMD_cbrtf128x = "";
pub const __DECL_SIMD_atan2 = "";
pub const __DECL_SIMD_atan2f = "";
pub const __DECL_SIMD_atan2l = "";
pub const __DECL_SIMD_atan2f16 = "";
pub const __DECL_SIMD_atan2f32 = "";
pub const __DECL_SIMD_atan2f64 = "";
pub const __DECL_SIMD_atan2f128 = "";
pub const __DECL_SIMD_atan2f32x = "";
pub const __DECL_SIMD_atan2f64x = "";
pub const __DECL_SIMD_atan2f128x = "";
pub const __DECL_SIMD_log10 = "";
pub const __DECL_SIMD_log10f = "";
pub const __DECL_SIMD_log10l = "";
pub const __DECL_SIMD_log10f16 = "";
pub const __DECL_SIMD_log10f32 = "";
pub const __DECL_SIMD_log10f64 = "";
pub const __DECL_SIMD_log10f128 = "";
pub const __DECL_SIMD_log10f32x = "";
pub const __DECL_SIMD_log10f64x = "";
pub const __DECL_SIMD_log10f128x = "";
pub const __DECL_SIMD_log2 = "";
pub const __DECL_SIMD_log2f = "";
pub const __DECL_SIMD_log2l = "";
pub const __DECL_SIMD_log2f16 = "";
pub const __DECL_SIMD_log2f32 = "";
pub const __DECL_SIMD_log2f64 = "";
pub const __DECL_SIMD_log2f128 = "";
pub const __DECL_SIMD_log2f32x = "";
pub const __DECL_SIMD_log2f64x = "";
pub const __DECL_SIMD_log2f128x = "";
pub const __DECL_SIMD_log1p = "";
pub const __DECL_SIMD_log1pf = "";
pub const __DECL_SIMD_log1pl = "";
pub const __DECL_SIMD_log1pf16 = "";
pub const __DECL_SIMD_log1pf32 = "";
pub const __DECL_SIMD_log1pf64 = "";
pub const __DECL_SIMD_log1pf128 = "";
pub const __DECL_SIMD_log1pf32x = "";
pub const __DECL_SIMD_log1pf64x = "";
pub const __DECL_SIMD_log1pf128x = "";
pub const __DECL_SIMD_atanh = "";
pub const __DECL_SIMD_atanhf = "";
pub const __DECL_SIMD_atanhl = "";
pub const __DECL_SIMD_atanhf16 = "";
pub const __DECL_SIMD_atanhf32 = "";
pub const __DECL_SIMD_atanhf64 = "";
pub const __DECL_SIMD_atanhf128 = "";
pub const __DECL_SIMD_atanhf32x = "";
pub const __DECL_SIMD_atanhf64x = "";
pub const __DECL_SIMD_atanhf128x = "";
pub const __DECL_SIMD_acosh = "";
pub const __DECL_SIMD_acoshf = "";
pub const __DECL_SIMD_acoshl = "";
pub const __DECL_SIMD_acoshf16 = "";
pub const __DECL_SIMD_acoshf32 = "";
pub const __DECL_SIMD_acoshf64 = "";
pub const __DECL_SIMD_acoshf128 = "";
pub const __DECL_SIMD_acoshf32x = "";
pub const __DECL_SIMD_acoshf64x = "";
pub const __DECL_SIMD_acoshf128x = "";
pub const __DECL_SIMD_erf = "";
pub const __DECL_SIMD_erff = "";
pub const __DECL_SIMD_erfl = "";
pub const __DECL_SIMD_erff16 = "";
pub const __DECL_SIMD_erff32 = "";
pub const __DECL_SIMD_erff64 = "";
pub const __DECL_SIMD_erff128 = "";
pub const __DECL_SIMD_erff32x = "";
pub const __DECL_SIMD_erff64x = "";
pub const __DECL_SIMD_erff128x = "";
pub const __DECL_SIMD_tanh = "";
pub const __DECL_SIMD_tanhf = "";
pub const __DECL_SIMD_tanhl = "";
pub const __DECL_SIMD_tanhf16 = "";
pub const __DECL_SIMD_tanhf32 = "";
pub const __DECL_SIMD_tanhf64 = "";
pub const __DECL_SIMD_tanhf128 = "";
pub const __DECL_SIMD_tanhf32x = "";
pub const __DECL_SIMD_tanhf64x = "";
pub const __DECL_SIMD_tanhf128x = "";
pub const __DECL_SIMD_asinh = "";
pub const __DECL_SIMD_asinhf = "";
pub const __DECL_SIMD_asinhl = "";
pub const __DECL_SIMD_asinhf16 = "";
pub const __DECL_SIMD_asinhf32 = "";
pub const __DECL_SIMD_asinhf64 = "";
pub const __DECL_SIMD_asinhf128 = "";
pub const __DECL_SIMD_asinhf32x = "";
pub const __DECL_SIMD_asinhf64x = "";
pub const __DECL_SIMD_asinhf128x = "";
pub const __DECL_SIMD_erfc = "";
pub const __DECL_SIMD_erfcf = "";
pub const __DECL_SIMD_erfcl = "";
pub const __DECL_SIMD_erfcf16 = "";
pub const __DECL_SIMD_erfcf32 = "";
pub const __DECL_SIMD_erfcf64 = "";
pub const __DECL_SIMD_erfcf128 = "";
pub const __DECL_SIMD_erfcf32x = "";
pub const __DECL_SIMD_erfcf64x = "";
pub const __DECL_SIMD_erfcf128x = "";
pub const __DECL_SIMD_tan = "";
pub const __DECL_SIMD_tanf = "";
pub const __DECL_SIMD_tanl = "";
pub const __DECL_SIMD_tanf16 = "";
pub const __DECL_SIMD_tanf32 = "";
pub const __DECL_SIMD_tanf64 = "";
pub const __DECL_SIMD_tanf128 = "";
pub const __DECL_SIMD_tanf32x = "";
pub const __DECL_SIMD_tanf64x = "";
pub const __DECL_SIMD_tanf128x = "";
pub const _BITS_FLOATN_H = "";
pub const __HAVE_FLOAT128 = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT128 = @as(c_int, 0);
pub const __HAVE_FLOAT64X = @as(c_int, 1);
pub const __HAVE_FLOAT64X_LONG_DOUBLE = @as(c_int, 1);
pub const _BITS_FLOATN_COMMON_H = "";
pub const __HAVE_FLOAT16 = @as(c_int, 0);
pub const __HAVE_FLOAT32 = @as(c_int, 1);
pub const __HAVE_FLOAT64 = @as(c_int, 1);
pub const __HAVE_FLOAT32X = @as(c_int, 1);
pub const __HAVE_FLOAT128X = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT16 = __HAVE_FLOAT16;
pub const __HAVE_DISTINCT_FLOAT32 = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT64 = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT32X = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT64X = @as(c_int, 0);
pub const __HAVE_DISTINCT_FLOAT128X = __HAVE_FLOAT128X;
pub const __HAVE_FLOAT128_UNLIKE_LDBL = (__HAVE_DISTINCT_FLOAT128 != 0) and (__LDBL_MANT_DIG__ != @as(c_int, 113));
pub const __HAVE_FLOATN_NOT_TYPEDEF = @as(c_int, 0);
pub const __f32 = @import("std").zig.c_translation.Macros.F_SUFFIX;
pub inline fn __f64(x: anytype) @TypeOf(x) {
_ = &x;
return x;
}
pub inline fn __f32x(x: anytype) @TypeOf(x) {
_ = &x;
return x;
}
pub const __f64x = @import("std").zig.c_translation.Macros.L_SUFFIX;
pub const __CFLOAT32 = @compileError("unable to translate: TODO _Complex");
// /usr/include/bits/floatn-common.h:149:12
pub const __CFLOAT64 = @compileError("unable to translate: TODO _Complex");
// /usr/include/bits/floatn-common.h:160:13
pub const __CFLOAT32X = @compileError("unable to translate: TODO _Complex");
// /usr/include/bits/floatn-common.h:169:12
pub const __CFLOAT64X = @compileError("unable to translate: TODO _Complex");
// /usr/include/bits/floatn-common.h:178:13
pub inline fn __builtin_huge_valf32() @TypeOf(__builtin_huge_valf()) {
return __builtin_huge_valf();
}
pub inline fn __builtin_inff32() @TypeOf(__builtin_inff()) {
return __builtin_inff();
}
pub inline fn __builtin_nanf32(x: anytype) @TypeOf(__builtin_nanf(x)) {
_ = &x;
return __builtin_nanf(x);
}
pub const __builtin_nansf32 = @compileError("unable to translate macro: undefined identifier `__builtin_nansf`");
// /usr/include/bits/floatn-common.h:221:12
pub const __builtin_huge_valf64 = @compileError("unable to translate macro: undefined identifier `__builtin_huge_val`");
// /usr/include/bits/floatn-common.h:255:13
pub const __builtin_inff64 = @compileError("unable to translate macro: undefined identifier `__builtin_inf`");
// /usr/include/bits/floatn-common.h:256:13
pub const __builtin_nanf64 = @compileError("unable to translate macro: undefined identifier `__builtin_nan`");
// /usr/include/bits/floatn-common.h:257:13
pub const __builtin_nansf64 = @compileError("unable to translate macro: undefined identifier `__builtin_nans`");
// /usr/include/bits/floatn-common.h:258:13
pub const __builtin_huge_valf32x = @compileError("unable to translate macro: undefined identifier `__builtin_huge_val`");
// /usr/include/bits/floatn-common.h:272:12
pub const __builtin_inff32x = @compileError("unable to translate macro: undefined identifier `__builtin_inf`");
// /usr/include/bits/floatn-common.h:273:12
pub const __builtin_nanf32x = @compileError("unable to translate macro: undefined identifier `__builtin_nan`");
// /usr/include/bits/floatn-common.h:274:12
pub const __builtin_nansf32x = @compileError("unable to translate macro: undefined identifier `__builtin_nans`");
// /usr/include/bits/floatn-common.h:275:12
pub const __builtin_huge_valf64x = @compileError("unable to translate macro: undefined identifier `__builtin_huge_vall`");
// /usr/include/bits/floatn-common.h:289:13
pub const __builtin_inff64x = @compileError("unable to translate macro: undefined identifier `__builtin_infl`");
// /usr/include/bits/floatn-common.h:290:13
pub const __builtin_nanf64x = @compileError("unable to translate macro: undefined identifier `__builtin_nanl`");
// /usr/include/bits/floatn-common.h:291:13
pub const __builtin_nansf64x = @compileError("unable to translate macro: undefined identifier `__builtin_nansl`");
// /usr/include/bits/floatn-common.h:292:13
pub const HUGE_VAL = @compileError("unable to translate macro: undefined identifier `__builtin_huge_val`");
// /usr/include/math.h:48:10
pub const HUGE_VALF = __builtin_huge_valf();
pub const HUGE_VALL = @compileError("unable to translate macro: undefined identifier `__builtin_huge_vall`");
// /usr/include/math.h:60:11
pub const INFINITY = __builtin_inff();
pub const NAN = __builtin_nanf("");
pub const __GLIBC_FLT_EVAL_METHOD = @compileError("unable to translate macro: undefined identifier `__FLT_EVAL_METHOD__`");
// /usr/include/bits/flt-eval-method.h:27:11
pub const __FP_LOGB0_IS_MIN = @as(c_int, 1);
pub const __FP_LOGBNAN_IS_MIN = @as(c_int, 1);
pub const FP_ILOGB0 = -@import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal) - @as(c_int, 1);
pub const FP_ILOGBNAN = -@import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal) - @as(c_int, 1);
pub const __SIMD_DECL = @compileError("unable to translate macro: undefined identifier `__DECL_SIMD_`");
// /usr/include/math.h:276:9
pub inline fn __MATHCALL_VEC(function: anytype, suffix: anytype, args: anytype) @TypeOf(__SIMD_DECL(__MATH_PRECNAME(function, suffix)) ++ __MATHCALL(function, suffix, args)) {
_ = &function;
_ = &suffix;
_ = &args;
return __SIMD_DECL(__MATH_PRECNAME(function, suffix)) ++ __MATHCALL(function, suffix, args);
}
pub inline fn __MATHDECL_VEC(@"type": anytype, function: anytype, suffix: anytype, args: anytype) @TypeOf(__SIMD_DECL(__MATH_PRECNAME(function, suffix)) ++ __MATHDECL(@"type", function, suffix, args)) {
_ = &@"type";
_ = &function;
_ = &suffix;
_ = &args;
return __SIMD_DECL(__MATH_PRECNAME(function, suffix)) ++ __MATHDECL(@"type", function, suffix, args);
}
pub inline fn __MATHCALL(function: anytype, suffix: anytype, args: anytype) @TypeOf(__MATHDECL(_Mdouble_, function, suffix, args)) {
_ = &function;
_ = &suffix;
_ = &args;
return __MATHDECL(_Mdouble_, function, suffix, args);
}
pub const __MATHDECL = @compileError("unable to translate macro: undefined identifier `__`");
// /usr/include/math.h:288:9
pub inline fn __MATHCALLX(function: anytype, suffix: anytype, args: anytype, attrib: anytype) @TypeOf(__MATHDECLX(_Mdouble_, function, suffix, args, attrib)) {
_ = &function;
_ = &suffix;
_ = &args;
_ = &attrib;
return __MATHDECLX(_Mdouble_, function, suffix, args, attrib);
}
pub const __MATHDECLX = @compileError("unable to translate macro: undefined identifier `__`");
// /usr/include/math.h:293:9
pub const __MATHDECL_1_IMPL = @compileError("unable to translate C expr: unexpected token 'extern'");
// /usr/include/math.h:296:9
pub inline fn __MATHDECL_1(@"type": anytype, function: anytype, suffix: anytype, args: anytype) @TypeOf(__MATHDECL_1_IMPL(@"type", function, suffix, args)) {
_ = &@"type";
_ = &function;
_ = &suffix;
_ = &args;
return __MATHDECL_1_IMPL(@"type", function, suffix, args);
}
pub inline fn __MATHDECL_ALIAS(@"type": anytype, function: anytype, suffix: anytype, args: anytype, alias: anytype) @TypeOf(__MATHDECL_1(@"type", function, suffix, args)) {
_ = &@"type";
_ = &function;
_ = &suffix;
_ = &args;
_ = &alias;
return __MATHDECL_1(@"type", function, suffix, args);
}
pub const __MATHREDIR = @compileError("unable to translate C expr: unexpected token 'extern'");
// /usr/include/math.h:305:9
pub const _Mdouble_ = f64;
pub inline fn __MATH_PRECNAME(name: anytype, r: anytype) @TypeOf(__CONCAT(name, r)) {
_ = &name;
_ = &r;
return __CONCAT(name, r);
}
pub const __MATH_DECLARING_DOUBLE = @as(c_int, 1);
pub const __MATH_DECLARING_FLOATN = @as(c_int, 0);
pub const __MATH_DECLARE_LDOUBLE = @as(c_int, 1);
pub const __MATHCALL_NARROW_ARGS_1 = @compileError("unable to translate macro: undefined identifier `_Marg_`");
// /usr/include/math.h:550:9
pub const __MATHCALL_NARROW_ARGS_2 = @compileError("unable to translate macro: undefined identifier `_Marg_`");
// /usr/include/math.h:551:9
pub const __MATHCALL_NARROW_ARGS_3 = @compileError("unable to translate macro: undefined identifier `_Marg_`");
// /usr/include/math.h:552:9
pub const __MATHCALL_NARROW_NORMAL = @compileError("unable to translate macro: undefined identifier `_Mret_`");
// /usr/include/math.h:553:9
pub const __MATHCALL_NARROW_REDIR = @compileError("unable to translate macro: undefined identifier `_Mret_`");
// /usr/include/math.h:555:9
pub inline fn __MATHCALL_NARROW(func: anytype, redir: anytype, nargs: anytype) @TypeOf(__MATHCALL_NARROW_NORMAL(func, nargs)) {
_ = &func;
_ = &redir;
_ = &nargs;
return __MATHCALL_NARROW_NORMAL(func, nargs);
}
pub const __MATH_TG = @compileError("unable to translate macro: undefined identifier `f`");
// /usr/include/math.h:922:10
pub const fpclassify = @compileError("unable to translate macro: undefined identifier `__builtin_fpclassify`");
// /usr/include/math.h:967:11
pub inline fn signbit(x: anytype) @TypeOf(__builtin_signbit(x)) {
_ = &x;
return __builtin_signbit(x);
}
pub const isfinite = @compileError("unable to translate macro: undefined identifier `__builtin_isfinite`");
// /usr/include/math.h:994:11
pub const isnormal = @compileError("unable to translate macro: undefined identifier `__builtin_isnormal`");
// /usr/include/math.h:1002:11
pub const MATH_ERRNO = @as(c_int, 1);
pub const MATH_ERREXCEPT = @as(c_int, 2);
pub const math_errhandling = MATH_ERRNO | MATH_ERREXCEPT;
pub const M_E = @as(f64, 2.7182818284590452354);
pub const M_LOG2E = @as(f64, 1.4426950408889634074);
pub const M_LOG10E = @as(f64, 0.43429448190325182765);
pub const M_LN2 = @as(f64, 0.69314718055994530942);
pub const M_LN10 = @as(f64, 2.30258509299404568402);
pub const M_PI = @as(f64, 3.14159265358979323846);
pub const M_PI_2 = @as(f64, 1.57079632679489661923);
pub const M_PI_4 = @as(f64, 0.78539816339744830962);
pub const M_1_PI = @as(f64, 0.31830988618379067154);
pub const M_2_PI = @as(f64, 0.63661977236758134308);
pub const M_2_SQRTPI = @as(f64, 1.12837916709551257390);
pub const M_SQRT2 = @as(f64, 1.41421356237309504880);
pub const M_SQRT1_2 = @as(f64, 0.70710678118654752440);
pub const isgreater = @compileError("unable to translate macro: undefined identifier `__builtin_isgreater`");
// /usr/include/math.h:1306:11
pub const isgreaterequal = @compileError("unable to translate macro: undefined identifier `__builtin_isgreaterequal`");
// /usr/include/math.h:1307:11
pub const isless = @compileError("unable to translate macro: undefined identifier `__builtin_isless`");
// /usr/include/math.h:1308:11
pub const islessequal = @compileError("unable to translate macro: undefined identifier `__builtin_islessequal`");
// /usr/include/math.h:1309:11
pub const islessgreater = @compileError("unable to translate macro: undefined identifier `__builtin_islessgreater`");
// /usr/include/math.h:1310:11
pub const isunordered = @compileError("unable to translate macro: undefined identifier `__builtin_isunordered`");
// /usr/include/math.h:1311:11
pub const _STDIO_H = @as(c_int, 1);
pub const __need_size_t = "";
pub const __need_NULL = "";
pub const _SIZE_T = "";
pub const NULL = @import("std").zig.c_translation.cast(?*anyopaque, @as(c_int, 0));
pub const _____fpos_t_defined = @as(c_int, 1);
pub const ____mbstate_t_defined = @as(c_int, 1);
pub const _____fpos64_t_defined = @as(c_int, 1);
pub const ____FILE_defined = @as(c_int, 1);
pub const __FILE_defined = @as(c_int, 1);
pub const __struct_FILE_defined = @as(c_int, 1);
pub const __getc_unlocked_body = @compileError("TODO postfix inc/dec expr");
// /usr/include/bits/types/struct_FILE.h:102:9
pub const __putc_unlocked_body = @compileError("TODO postfix inc/dec expr");
// /usr/include/bits/types/struct_FILE.h:106:9
pub const _IO_EOF_SEEN = @as(c_int, 0x0010);
pub inline fn __feof_unlocked_body(_fp: anytype) @TypeOf((_fp.*._flags & _IO_EOF_SEEN) != @as(c_int, 0)) {
_ = &_fp;
return (_fp.*._flags & _IO_EOF_SEEN) != @as(c_int, 0);
}
pub const _IO_ERR_SEEN = @as(c_int, 0x0020);
pub inline fn __ferror_unlocked_body(_fp: anytype) @TypeOf((_fp.*._flags & _IO_ERR_SEEN) != @as(c_int, 0)) {
_ = &_fp;
return (_fp.*._flags & _IO_ERR_SEEN) != @as(c_int, 0);
}
pub const _IO_USER_LOCK = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x8000, .hex);
pub const __cookie_io_functions_t_defined = @as(c_int, 1);
pub const _VA_LIST_DEFINED = "";
pub const __off_t_defined = "";
pub const __ssize_t_defined = "";
pub const _IOFBF = @as(c_int, 0);
pub const _IOLBF = @as(c_int, 1);
pub const _IONBF = @as(c_int, 2);
pub const BUFSIZ = @as(c_int, 8192);
pub const EOF = -@as(c_int, 1);
pub const SEEK_SET = @as(c_int, 0);
pub const SEEK_CUR = @as(c_int, 1);
pub const SEEK_END = @as(c_int, 2);
pub const P_tmpdir = "/tmp";
pub const L_tmpnam = @as(c_int, 20);
pub const TMP_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 238328, .decimal);
pub const _BITS_STDIO_LIM_H = @as(c_int, 1);
pub const FILENAME_MAX = @as(c_int, 4096);
pub const L_ctermid = @as(c_int, 9);
pub const FOPEN_MAX = @as(c_int, 16);
pub const __attr_dealloc_fclose = __attr_dealloc(fclose, @as(c_int, 1));
pub const __need_wchar_t = "";
pub const _WCHAR_T = "";
pub const _STDLIB_H = @as(c_int, 1);
pub const WNOHANG = @as(c_int, 1);
pub const WUNTRACED = @as(c_int, 2);
pub const WSTOPPED = @as(c_int, 2);
pub const WEXITED = @as(c_int, 4);
pub const WCONTINUED = @as(c_int, 8);
pub const WNOWAIT = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x01000000, .hex);
pub const __WNOTHREAD = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x20000000, .hex);
pub const __WALL = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x40000000, .hex);
pub const __WCLONE = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80000000, .hex);
pub inline fn __WEXITSTATUS(status: anytype) @TypeOf((status & @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xff00, .hex)) >> @as(c_int, 8)) {
_ = &status;
return (status & @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xff00, .hex)) >> @as(c_int, 8);
}
pub inline fn __WTERMSIG(status: anytype) @TypeOf(status & @as(c_int, 0x7f)) {
_ = &status;
return status & @as(c_int, 0x7f);
}
pub inline fn __WSTOPSIG(status: anytype) @TypeOf(__WEXITSTATUS(status)) {
_ = &status;
return __WEXITSTATUS(status);
}
pub inline fn __WIFEXITED(status: anytype) @TypeOf(__WTERMSIG(status) == @as(c_int, 0)) {
_ = &status;
return __WTERMSIG(status) == @as(c_int, 0);
}
pub inline fn __WIFSIGNALED(status: anytype) @TypeOf((@import("std").zig.c_translation.cast(i8, (status & @as(c_int, 0x7f)) + @as(c_int, 1)) >> @as(c_int, 1)) > @as(c_int, 0)) {
_ = &status;
return (@import("std").zig.c_translation.cast(i8, (status & @as(c_int, 0x7f)) + @as(c_int, 1)) >> @as(c_int, 1)) > @as(c_int, 0);
}
pub inline fn __WIFSTOPPED(status: anytype) @TypeOf((status & @as(c_int, 0xff)) == @as(c_int, 0x7f)) {
_ = &status;
return (status & @as(c_int, 0xff)) == @as(c_int, 0x7f);
}
pub inline fn __WIFCONTINUED(status: anytype) @TypeOf(status == __W_CONTINUED) {
_ = &status;
return status == __W_CONTINUED;
}
pub inline fn __WCOREDUMP(status: anytype) @TypeOf(status & __WCOREFLAG) {
_ = &status;
return status & __WCOREFLAG;
}
pub inline fn __W_EXITCODE(ret: anytype, sig: anytype) @TypeOf((ret << @as(c_int, 8)) | sig) {
_ = &ret;
_ = &sig;
return (ret << @as(c_int, 8)) | sig;
}
pub inline fn __W_STOPCODE(sig: anytype) @TypeOf((sig << @as(c_int, 8)) | @as(c_int, 0x7f)) {
_ = &sig;
return (sig << @as(c_int, 8)) | @as(c_int, 0x7f);
}
pub const __W_CONTINUED = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xffff, .hex);
pub const __WCOREFLAG = @as(c_int, 0x80);
pub inline fn WEXITSTATUS(status: anytype) @TypeOf(__WEXITSTATUS(status)) {
_ = &status;
return __WEXITSTATUS(status);
}
pub inline fn WTERMSIG(status: anytype) @TypeOf(__WTERMSIG(status)) {
_ = &status;
return __WTERMSIG(status);
}
pub inline fn WSTOPSIG(status: anytype) @TypeOf(__WSTOPSIG(status)) {
_ = &status;
return __WSTOPSIG(status);
}
pub inline fn WIFEXITED(status: anytype) @TypeOf(__WIFEXITED(status)) {
_ = &status;
return __WIFEXITED(status);
}
pub inline fn WIFSIGNALED(status: anytype) @TypeOf(__WIFSIGNALED(status)) {
_ = &status;
return __WIFSIGNALED(status);
}
pub inline fn WIFSTOPPED(status: anytype) @TypeOf(__WIFSTOPPED(status)) {
_ = &status;
return __WIFSTOPPED(status);
}
pub inline fn WIFCONTINUED(status: anytype) @TypeOf(__WIFCONTINUED(status)) {
_ = &status;
return __WIFCONTINUED(status);
}
pub const __ldiv_t_defined = @as(c_int, 1);
pub const __lldiv_t_defined = @as(c_int, 1);
pub const RAND_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const EXIT_FAILURE = @as(c_int, 1);
pub const EXIT_SUCCESS = @as(c_int, 0);
pub const MB_CUR_MAX = __ctype_get_mb_cur_max();
pub const _SYS_TYPES_H = @as(c_int, 1);
pub const __u_char_defined = "";
pub const __ino_t_defined = "";
pub const __dev_t_defined = "";
pub const __gid_t_defined = "";
pub const __mode_t_defined = "";
pub const __nlink_t_defined = "";
pub const __uid_t_defined = "";
pub const __pid_t_defined = "";
pub const __id_t_defined = "";
pub const __daddr_t_defined = "";
pub const __key_t_defined = "";
pub const __clock_t_defined = @as(c_int, 1);
pub const __clockid_t_defined = @as(c_int, 1);
pub const __time_t_defined = @as(c_int, 1);
pub const __timer_t_defined = @as(c_int, 1);
pub const _BITS_STDINT_INTN_H = @as(c_int, 1);
pub const __BIT_TYPES_DEFINED__ = @as(c_int, 1);
pub const _ENDIAN_H = @as(c_int, 1);
pub const _BITS_ENDIAN_H = @as(c_int, 1);
pub const __LITTLE_ENDIAN = @as(c_int, 1234);
pub const __BIG_ENDIAN = @as(c_int, 4321);
pub const __PDP_ENDIAN = @as(c_int, 3412);
pub const _BITS_ENDIANNESS_H = @as(c_int, 1);
pub const __BYTE_ORDER = __LITTLE_ENDIAN;
pub const __FLOAT_WORD_ORDER = __BYTE_ORDER;
pub inline fn __LONG_LONG_PAIR(HI: anytype, LO: anytype) @TypeOf(HI) {
_ = &HI;
_ = &LO;
return blk: {
_ = &LO;
break :blk HI;
};
}
pub const LITTLE_ENDIAN = __LITTLE_ENDIAN;
pub const BIG_ENDIAN = __BIG_ENDIAN;
pub const PDP_ENDIAN = __PDP_ENDIAN;
pub const BYTE_ORDER = __BYTE_ORDER;
pub const _BITS_BYTESWAP_H = @as(c_int, 1);
pub inline fn __bswap_constant_16(x: anytype) __uint16_t {
_ = &x;
return @import("std").zig.c_translation.cast(__uint16_t, ((x >> @as(c_int, 8)) & @as(c_int, 0xff)) | ((x & @as(c_int, 0xff)) << @as(c_int, 8)));
}
pub inline fn __bswap_constant_32(x: anytype) @TypeOf(((((x & @import("std").zig.c_translation.promoteIntLiteral(c_uint, 0xff000000, .hex)) >> @as(c_int, 24)) | ((x & @import("std").zig.c_translation.promoteIntLiteral(c_uint, 0x00ff0000, .hex)) >> @as(c_int, 8))) | ((x & @as(c_uint, 0x0000ff00)) << @as(c_int, 8))) | ((x & @as(c_uint, 0x000000ff)) << @as(c_int, 24))) {
_ = &x;
return ((((x & @import("std").zig.c_translation.promoteIntLiteral(c_uint, 0xff000000, .hex)) >> @as(c_int, 24)) | ((x & @import("std").zig.c_translation.promoteIntLiteral(c_uint, 0x00ff0000, .hex)) >> @as(c_int, 8))) | ((x & @as(c_uint, 0x0000ff00)) << @as(c_int, 8))) | ((x & @as(c_uint, 0x000000ff)) << @as(c_int, 24));
}
pub inline fn __bswap_constant_64(x: anytype) @TypeOf(((((((((x & @as(c_ulonglong, 0xff00000000000000)) >> @as(c_int, 56)) | ((x & @as(c_ulonglong, 0x00ff000000000000)) >> @as(c_int, 40))) | ((x & @as(c_ulonglong, 0x0000ff0000000000)) >> @as(c_int, 24))) | ((x & @as(c_ulonglong, 0x000000ff00000000)) >> @as(c_int, 8))) | ((x & @as(c_ulonglong, 0x00000000ff000000)) << @as(c_int, 8))) | ((x & @as(c_ulonglong, 0x0000000000ff0000)) << @as(c_int, 24))) | ((x & @as(c_ulonglong, 0x000000000000ff00)) << @as(c_int, 40))) | ((x & @as(c_ulonglong, 0x00000000000000ff)) << @as(c_int, 56))) {
_ = &x;
return ((((((((x & @as(c_ulonglong, 0xff00000000000000)) >> @as(c_int, 56)) | ((x & @as(c_ulonglong, 0x00ff000000000000)) >> @as(c_int, 40))) | ((x & @as(c_ulonglong, 0x0000ff0000000000)) >> @as(c_int, 24))) | ((x & @as(c_ulonglong, 0x000000ff00000000)) >> @as(c_int, 8))) | ((x & @as(c_ulonglong, 0x00000000ff000000)) << @as(c_int, 8))) | ((x & @as(c_ulonglong, 0x0000000000ff0000)) << @as(c_int, 24))) | ((x & @as(c_ulonglong, 0x000000000000ff00)) << @as(c_int, 40))) | ((x & @as(c_ulonglong, 0x00000000000000ff)) << @as(c_int, 56));
}
pub const _BITS_UINTN_IDENTITY_H = @as(c_int, 1);
pub inline fn htobe16(x: anytype) @TypeOf(__bswap_16(x)) {
_ = &x;
return __bswap_16(x);
}
pub inline fn htole16(x: anytype) @TypeOf(__uint16_identity(x)) {
_ = &x;
return __uint16_identity(x);
}
pub inline fn be16toh(x: anytype) @TypeOf(__bswap_16(x)) {
_ = &x;
return __bswap_16(x);
}
pub inline fn le16toh(x: anytype) @TypeOf(__uint16_identity(x)) {
_ = &x;
return __uint16_identity(x);
}
pub inline fn htobe32(x: anytype) @TypeOf(__bswap_32(x)) {
_ = &x;
return __bswap_32(x);
}
pub inline fn htole32(x: anytype) @TypeOf(__uint32_identity(x)) {
_ = &x;
return __uint32_identity(x);
}
pub inline fn be32toh(x: anytype) @TypeOf(__bswap_32(x)) {
_ = &x;
return __bswap_32(x);
}
pub inline fn le32toh(x: anytype) @TypeOf(__uint32_identity(x)) {
_ = &x;
return __uint32_identity(x);
}
pub inline fn htobe64(x: anytype) @TypeOf(__bswap_64(x)) {
_ = &x;
return __bswap_64(x);
}
pub inline fn htole64(x: anytype) @TypeOf(__uint64_identity(x)) {
_ = &x;
return __uint64_identity(x);
}
pub inline fn be64toh(x: anytype) @TypeOf(__bswap_64(x)) {
_ = &x;
return __bswap_64(x);
}
pub inline fn le64toh(x: anytype) @TypeOf(__uint64_identity(x)) {
_ = &x;
return __uint64_identity(x);
}
pub const _SYS_SELECT_H = @as(c_int, 1);
pub const __FD_ZERO = @compileError("unable to translate macro: undefined identifier `__i`");
// /usr/include/bits/select.h:25:9
pub const __FD_SET = @compileError("unable to translate C expr: expected ')' instead got '|='");
// /usr/include/bits/select.h:32:9
pub const __FD_CLR = @compileError("unable to translate C expr: expected ')' instead got '&='");
// /usr/include/bits/select.h:34:9
pub inline fn __FD_ISSET(d: anytype, s: anytype) @TypeOf((__FDS_BITS(s)[@as(usize, @intCast(__FD_ELT(d)))] & __FD_MASK(d)) != @as(c_int, 0)) {
_ = &d;
_ = &s;
return (__FDS_BITS(s)[@as(usize, @intCast(__FD_ELT(d)))] & __FD_MASK(d)) != @as(c_int, 0);
}
pub const __sigset_t_defined = @as(c_int, 1);
pub const ____sigset_t_defined = "";
pub const _SIGSET_NWORDS = @import("std").zig.c_translation.MacroArithmetic.div(@as(c_int, 1024), @as(c_int, 8) * @import("std").zig.c_translation.sizeof(c_ulong));
pub const __timeval_defined = @as(c_int, 1);
pub const _STRUCT_TIMESPEC = @as(c_int, 1);
pub const __suseconds_t_defined = "";
pub const __NFDBITS = @as(c_int, 8) * @import("std").zig.c_translation.cast(c_int, @import("std").zig.c_translation.sizeof(__fd_mask));
pub inline fn __FD_ELT(d: anytype) @TypeOf(@import("std").zig.c_translation.MacroArithmetic.div(d, __NFDBITS)) {
_ = &d;
return @import("std").zig.c_translation.MacroArithmetic.div(d, __NFDBITS);
}
pub inline fn __FD_MASK(d: anytype) __fd_mask {
_ = &d;
return @import("std").zig.c_translation.cast(__fd_mask, @as(c_ulong, 1) << @import("std").zig.c_translation.MacroArithmetic.rem(d, __NFDBITS));
}
pub inline fn __FDS_BITS(set: anytype) @TypeOf(set.*.__fds_bits) {
_ = &set;
return set.*.__fds_bits;
}
pub const FD_SETSIZE = __FD_SETSIZE;
pub const NFDBITS = __NFDBITS;
pub inline fn FD_SET(fd: anytype, fdsetp: anytype) @TypeOf(__FD_SET(fd, fdsetp)) {
_ = &fd;
_ = &fdsetp;
return __FD_SET(fd, fdsetp);
}
pub inline fn FD_CLR(fd: anytype, fdsetp: anytype) @TypeOf(__FD_CLR(fd, fdsetp)) {
_ = &fd;
_ = &fdsetp;
return __FD_CLR(fd, fdsetp);
}
pub inline fn FD_ISSET(fd: anytype, fdsetp: anytype) @TypeOf(__FD_ISSET(fd, fdsetp)) {
_ = &fd;
_ = &fdsetp;
return __FD_ISSET(fd, fdsetp);
}
pub inline fn FD_ZERO(fdsetp: anytype) @TypeOf(__FD_ZERO(fdsetp)) {
_ = &fdsetp;
return __FD_ZERO(fdsetp);
}
pub const __blksize_t_defined = "";
pub const __blkcnt_t_defined = "";
pub const __fsblkcnt_t_defined = "";
pub const __fsfilcnt_t_defined = "";
pub const _BITS_PTHREADTYPES_COMMON_H = @as(c_int, 1);
pub const _THREAD_SHARED_TYPES_H = @as(c_int, 1);
pub const _BITS_PTHREADTYPES_ARCH_H = @as(c_int, 1);
pub const __SIZEOF_PTHREAD_MUTEX_T = @as(c_int, 40);
pub const __SIZEOF_PTHREAD_ATTR_T = @as(c_int, 56);
pub const __SIZEOF_PTHREAD_RWLOCK_T = @as(c_int, 56);
pub const __SIZEOF_PTHREAD_BARRIER_T = @as(c_int, 32);
pub const __SIZEOF_PTHREAD_MUTEXATTR_T = @as(c_int, 4);
pub const __SIZEOF_PTHREAD_COND_T = @as(c_int, 48);
pub const __SIZEOF_PTHREAD_CONDATTR_T = @as(c_int, 4);
pub const __SIZEOF_PTHREAD_RWLOCKATTR_T = @as(c_int, 8);
pub const __SIZEOF_PTHREAD_BARRIERATTR_T = @as(c_int, 4);
pub const __LOCK_ALIGNMENT = "";
pub const __ONCE_ALIGNMENT = "";
pub const _BITS_ATOMIC_WIDE_COUNTER_H = "";
pub const _THREAD_MUTEX_INTERNAL_H = @as(c_int, 1);
pub const __PTHREAD_MUTEX_HAVE_PREV = @as(c_int, 1);
pub const __PTHREAD_MUTEX_INITIALIZER = @compileError("unable to translate C expr: unexpected token '{'");
// /usr/include/bits/struct_mutex.h:56:10
pub const _RWLOCK_INTERNAL_H = "";
pub const __PTHREAD_RWLOCK_ELISION_EXTRA = @compileError("unable to translate C expr: unexpected token '{'");
// /usr/include/bits/struct_rwlock.h:40:11
pub inline fn __PTHREAD_RWLOCK_INITIALIZER(__flags: anytype) @TypeOf(__flags) {
_ = &__flags;
return blk: {
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = @as(c_int, 0);
_ = &__PTHREAD_RWLOCK_ELISION_EXTRA;
_ = @as(c_int, 0);
break :blk __flags;
};
}
pub const __ONCE_FLAG_INIT = @compileError("unable to translate C expr: unexpected token '{'");
// /usr/include/bits/thread-shared-types.h:113:9
pub const __have_pthread_attr_t = @as(c_int, 1);
pub const _ALLOCA_H = @as(c_int, 1);
pub const __COMPAR_FN_T = "";
pub const _STRING_H = @as(c_int, 1);
pub const _BITS_TYPES_LOCALE_T_H = @as(c_int, 1);
pub const _BITS_TYPES___LOCALE_T_H = @as(c_int, 1);
pub const _STRINGS_H = @as(c_int, 1);
pub const TINYOBJ_MALLOC = RL_MALLOC;
pub const TINYOBJ_CALLOC = RL_CALLOC;
pub const TINYOBJ_REALLOC = RL_REALLOC;
pub const TINYOBJ_FREE = RL_FREE;
pub const TINYOBJ_LOADER_C_IMPLEMENTATION = "";
pub const TINOBJ_LOADER_C_H_ = "";
pub const TINYOBJ_FLAG_TRIANGULATE = @as(c_int, 1) << @as(c_int, 0);
pub const TINYOBJ_INVALID_INDEX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0x80000000, .hex);
pub const TINYOBJ_SUCCESS = @as(c_int, 0);
pub const TINYOBJ_ERROR_EMPTY = -@as(c_int, 1);
pub const TINYOBJ_ERROR_INVALID_PARAMETER = -@as(c_int, 2);
pub const TINYOBJ_ERROR_FILE_OPERATION = -@as(c_int, 3);
pub const _ASSERT_H = @as(c_int, 1);
pub const __ASSERT_VOID_CAST = @compileError("unable to translate C expr: unexpected token ''");
// /usr/include/assert.h:40:10
pub const assert = @compileError("unable to translate macro: undefined identifier `__FILE__`");
// /usr/include/assert.h:115:11
pub const __ASSERT_FUNCTION = @compileError("unable to translate C expr: unexpected token '__extension__'");
// /usr/include/assert.h:137:12
pub const static_assert = @compileError("unable to translate C expr: unexpected token '_Static_assert'");
// /usr/include/assert.h:155:10
pub const _ERRNO_H = @as(c_int, 1);
pub const _BITS_ERRNO_H = @as(c_int, 1);
pub const _ASM_GENERIC_ERRNO_H = "";
pub const _ASM_GENERIC_ERRNO_BASE_H = "";
pub const EPERM = @as(c_int, 1);
pub const ENOENT = @as(c_int, 2);
pub const ESRCH = @as(c_int, 3);
pub const EINTR = @as(c_int, 4);
pub const EIO = @as(c_int, 5);
pub const ENXIO = @as(c_int, 6);
pub const E2BIG = @as(c_int, 7);
pub const ENOEXEC = @as(c_int, 8);
pub const EBADF = @as(c_int, 9);
pub const ECHILD = @as(c_int, 10);
pub const EAGAIN = @as(c_int, 11);
pub const ENOMEM = @as(c_int, 12);
pub const EACCES = @as(c_int, 13);
pub const EFAULT = @as(c_int, 14);
pub const ENOTBLK = @as(c_int, 15);
pub const EBUSY = @as(c_int, 16);
pub const EEXIST = @as(c_int, 17);
pub const EXDEV = @as(c_int, 18);
pub const ENODEV = @as(c_int, 19);
pub const ENOTDIR = @as(c_int, 20);
pub const EISDIR = @as(c_int, 21);
pub const EINVAL = @as(c_int, 22);
pub const ENFILE = @as(c_int, 23);
pub const EMFILE = @as(c_int, 24);
pub const ENOTTY = @as(c_int, 25);
pub const ETXTBSY = @as(c_int, 26);
pub const EFBIG = @as(c_int, 27);
pub const ENOSPC = @as(c_int, 28);
pub const ESPIPE = @as(c_int, 29);
pub const EROFS = @as(c_int, 30);
pub const EMLINK = @as(c_int, 31);
pub const EPIPE = @as(c_int, 32);
pub const EDOM = @as(c_int, 33);
pub const ERANGE = @as(c_int, 34);
pub const EDEADLK = @as(c_int, 35);
pub const ENAMETOOLONG = @as(c_int, 36);
pub const ENOLCK = @as(c_int, 37);
pub const ENOSYS = @as(c_int, 38);
pub const ENOTEMPTY = @as(c_int, 39);
pub const ELOOP = @as(c_int, 40);
pub const EWOULDBLOCK = EAGAIN;
pub const ENOMSG = @as(c_int, 42);
pub const EIDRM = @as(c_int, 43);
pub const ECHRNG = @as(c_int, 44);
pub const EL2NSYNC = @as(c_int, 45);
pub const EL3HLT = @as(c_int, 46);
pub const EL3RST = @as(c_int, 47);
pub const ELNRNG = @as(c_int, 48);
pub const EUNATCH = @as(c_int, 49);
pub const ENOCSI = @as(c_int, 50);
pub const EL2HLT = @as(c_int, 51);
pub const EBADE = @as(c_int, 52);
pub const EBADR = @as(c_int, 53);
pub const EXFULL = @as(c_int, 54);
pub const ENOANO = @as(c_int, 55);
pub const EBADRQC = @as(c_int, 56);
pub const EBADSLT = @as(c_int, 57);
pub const EDEADLOCK = EDEADLK;
pub const EBFONT = @as(c_int, 59);
pub const ENOSTR = @as(c_int, 60);
pub const ENODATA = @as(c_int, 61);
pub const ETIME = @as(c_int, 62);
pub const ENOSR = @as(c_int, 63);
pub const ENONET = @as(c_int, 64);
pub const ENOPKG = @as(c_int, 65);
pub const EREMOTE = @as(c_int, 66);
pub const ENOLINK = @as(c_int, 67);
pub const EADV = @as(c_int, 68);
pub const ESRMNT = @as(c_int, 69);
pub const ECOMM = @as(c_int, 70);
pub const EPROTO = @as(c_int, 71);
pub const EMULTIHOP = @as(c_int, 72);
pub const EDOTDOT = @as(c_int, 73);
pub const EBADMSG = @as(c_int, 74);
pub const EOVERFLOW = @as(c_int, 75);
pub const ENOTUNIQ = @as(c_int, 76);
pub const EBADFD = @as(c_int, 77);
pub const EREMCHG = @as(c_int, 78);
pub const ELIBACC = @as(c_int, 79);
pub const ELIBBAD = @as(c_int, 80);
pub const ELIBSCN = @as(c_int, 81);
pub const ELIBMAX = @as(c_int, 82);
pub const ELIBEXEC = @as(c_int, 83);
pub const EILSEQ = @as(c_int, 84);
pub const ERESTART = @as(c_int, 85);
pub const ESTRPIPE = @as(c_int, 86);
pub const EUSERS = @as(c_int, 87);
pub const ENOTSOCK = @as(c_int, 88);
pub const EDESTADDRREQ = @as(c_int, 89);
pub const EMSGSIZE = @as(c_int, 90);
pub const EPROTOTYPE = @as(c_int, 91);
pub const ENOPROTOOPT = @as(c_int, 92);
pub const EPROTONOSUPPORT = @as(c_int, 93);
pub const ESOCKTNOSUPPORT = @as(c_int, 94);
pub const EOPNOTSUPP = @as(c_int, 95);
pub const EPFNOSUPPORT = @as(c_int, 96);
pub const EAFNOSUPPORT = @as(c_int, 97);
pub const EADDRINUSE = @as(c_int, 98);
pub const EADDRNOTAVAIL = @as(c_int, 99);
pub const ENETDOWN = @as(c_int, 100);
pub const ENETUNREACH = @as(c_int, 101);
pub const ENETRESET = @as(c_int, 102);
pub const ECONNABORTED = @as(c_int, 103);
pub const ECONNRESET = @as(c_int, 104);
pub const ENOBUFS = @as(c_int, 105);
pub const EISCONN = @as(c_int, 106);
pub const ENOTCONN = @as(c_int, 107);
pub const ESHUTDOWN = @as(c_int, 108);
pub const ETOOMANYREFS = @as(c_int, 109);
pub const ETIMEDOUT = @as(c_int, 110);
pub const ECONNREFUSED = @as(c_int, 111);
pub const EHOSTDOWN = @as(c_int, 112);
pub const EHOSTUNREACH = @as(c_int, 113);
pub const EALREADY = @as(c_int, 114);
pub const EINPROGRESS = @as(c_int, 115);
pub const ESTALE = @as(c_int, 116);
pub const EUCLEAN = @as(c_int, 117);
pub const ENOTNAM = @as(c_int, 118);
pub const ENAVAIL = @as(c_int, 119);
pub const EISNAM = @as(c_int, 120);
pub const EREMOTEIO = @as(c_int, 121);
pub const EDQUOT = @as(c_int, 122);
pub const ENOMEDIUM = @as(c_int, 123);
pub const EMEDIUMTYPE = @as(c_int, 124);
pub const ECANCELED = @as(c_int, 125);
pub const ENOKEY = @as(c_int, 126);
pub const EKEYEXPIRED = @as(c_int, 127);
pub const EKEYREVOKED = @as(c_int, 128);
pub const EKEYREJECTED = @as(c_int, 129);
pub const EOWNERDEAD = @as(c_int, 130);
pub const ENOTRECOVERABLE = @as(c_int, 131);
pub const ERFKILL = @as(c_int, 132);
pub const EHWPOISON = @as(c_int, 133);
pub const ENOTSUP = EOPNOTSUPP;
pub const errno = __errno_location().*;
pub const TINYOBJ_MAX_FACES_PER_F_LINE = @as(c_int, 16);
pub inline fn IS_SPACE(x: anytype) @TypeOf((x == ' ') or (x == '\t')) {
_ = &x;
return (x == ' ') or (x == '\t');
}
pub inline fn IS_DIGIT(x: anytype) @TypeOf(@import("std").zig.c_translation.cast(c_uint, x - '0') < @import("std").zig.c_translation.cast(c_uint, @as(c_int, 10))) {
_ = &x;
return @import("std").zig.c_translation.cast(c_uint, x - '0') < @import("std").zig.c_translation.cast(c_uint, @as(c_int, 10));
}
pub inline fn IS_NEW_LINE(x: anytype) @TypeOf(((x == '\r') or (x == '\n')) or (x == '\x00')) {
_ = &x;
return ((x == '\r') or (x == '\n')) or (x == '\x00');
}
pub const HASH_TABLE_ERROR = @as(c_int, 1);
pub const HASH_TABLE_SUCCESS = @as(c_int, 0);
pub const HASH_TABLE_DEFAULT_SIZE = @as(c_int, 10);
pub const CGLTF_MALLOC = RL_MALLOC;
pub const CGLTF_FREE = RL_FREE;
pub const CGLTF_IMPLEMENTATION = "";
pub const CGLTF_H_INCLUDED__ = "";
pub const __STDDEF_H = "";
pub const __need_ptrdiff_t = "";
pub const __need_max_align_t = "";
pub const __need_offsetof = "";
pub const _PTRDIFF_T = "";
pub const __CLANG_MAX_ALIGN_T_DEFINED = "";
pub const offsetof = @compileError("unable to translate C expr: unexpected token 'an identifier'");
// /opt/zig-bin-0.13.0/lib/include/__stddef_offsetof.h:16:9
pub const __CLANG_STDINT_H = "";
pub const _STDINT_H = @as(c_int, 1);
pub const _BITS_WCHAR_H = @as(c_int, 1);
pub const __WCHAR_MAX = __WCHAR_MAX__;
pub const __WCHAR_MIN = -__WCHAR_MAX - @as(c_int, 1);
pub const _BITS_STDINT_UINTN_H = @as(c_int, 1);
pub const _BITS_STDINT_LEAST_H = @as(c_int, 1);
pub const __intptr_t_defined = "";
pub const __INT64_C = @import("std").zig.c_translation.Macros.L_SUFFIX;
pub const __UINT64_C = @import("std").zig.c_translation.Macros.UL_SUFFIX;
pub const INT8_MIN = -@as(c_int, 128);
pub const INT16_MIN = -@as(c_int, 32767) - @as(c_int, 1);
pub const INT32_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal) - @as(c_int, 1);
pub const INT64_MIN = -__INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal)) - @as(c_int, 1);
pub const INT8_MAX = @as(c_int, 127);
pub const INT16_MAX = @as(c_int, 32767);
pub const INT32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const INT64_MAX = __INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal));
pub const UINT8_MAX = @as(c_int, 255);
pub const UINT16_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
pub const UINT32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const UINT64_MAX = __UINT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 18446744073709551615, .decimal));
pub const INT_LEAST8_MIN = -@as(c_int, 128);
pub const INT_LEAST16_MIN = -@as(c_int, 32767) - @as(c_int, 1);
pub const INT_LEAST32_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal) - @as(c_int, 1);
pub const INT_LEAST64_MIN = -__INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal)) - @as(c_int, 1);
pub const INT_LEAST8_MAX = @as(c_int, 127);
pub const INT_LEAST16_MAX = @as(c_int, 32767);
pub const INT_LEAST32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const INT_LEAST64_MAX = __INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal));
pub const UINT_LEAST8_MAX = @as(c_int, 255);
pub const UINT_LEAST16_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65535, .decimal);
pub const UINT_LEAST32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub const UINT_LEAST64_MAX = __UINT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 18446744073709551615, .decimal));
pub const INT_FAST8_MIN = -@as(c_int, 128);
pub const INT_FAST16_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal) - @as(c_int, 1);
pub const INT_FAST32_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal) - @as(c_int, 1);
pub const INT_FAST64_MIN = -__INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal)) - @as(c_int, 1);
pub const INT_FAST8_MAX = @as(c_int, 127);
pub const INT_FAST16_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const INT_FAST32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const INT_FAST64_MAX = __INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal));
pub const UINT_FAST8_MAX = @as(c_int, 255);
pub const UINT_FAST16_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const UINT_FAST32_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const UINT_FAST64_MAX = __UINT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 18446744073709551615, .decimal));
pub const INTPTR_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal) - @as(c_int, 1);
pub const INTPTR_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const UINTPTR_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const INTMAX_MIN = -__INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal)) - @as(c_int, 1);
pub const INTMAX_MAX = __INT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 9223372036854775807, .decimal));
pub const UINTMAX_MAX = __UINT64_C(@import("std").zig.c_translation.promoteIntLiteral(c_int, 18446744073709551615, .decimal));
pub const PTRDIFF_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal) - @as(c_int, 1);
pub const PTRDIFF_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_long, 9223372036854775807, .decimal);
pub const SIG_ATOMIC_MIN = -@import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal) - @as(c_int, 1);
pub const SIG_ATOMIC_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const SIZE_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_ulong, 18446744073709551615, .decimal);
pub const WCHAR_MIN = __WCHAR_MIN;
pub const WCHAR_MAX = __WCHAR_MAX;
pub const WINT_MIN = @as(c_uint, 0);
pub const WINT_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_uint, 4294967295, .decimal);
pub inline fn INT8_C(c: anytype) @TypeOf(c) {
_ = &c;
return c;
}
pub inline fn INT16_C(c: anytype) @TypeOf(c) {
_ = &c;
return c;
}
pub inline fn INT32_C(c: anytype) @TypeOf(c) {
_ = &c;
return c;
}
pub const INT64_C = @import("std").zig.c_translation.Macros.L_SUFFIX;
pub inline fn UINT8_C(c: anytype) @TypeOf(c) {
_ = &c;
return c;
}
pub inline fn UINT16_C(c: anytype) @TypeOf(c) {
_ = &c;
return c;
}
pub const UINT32_C = @import("std").zig.c_translation.Macros.U_SUFFIX;
pub const UINT64_C = @import("std").zig.c_translation.Macros.UL_SUFFIX;
pub const INTMAX_C = @import("std").zig.c_translation.Macros.L_SUFFIX;
pub const UINTMAX_C = @import("std").zig.c_translation.Macros.UL_SUFFIX;
pub const __CLANG_LIMITS_H = "";
pub const _GCC_LIMITS_H_ = "";
pub const _LIBC_LIMITS_H_ = @as(c_int, 1);
pub const MB_LEN_MAX = @as(c_int, 16);
pub const LLONG_MIN = -LLONG_MAX - @as(c_int, 1);
pub const LLONG_MAX = __LONG_LONG_MAX__;
pub const ULLONG_MAX = (LLONG_MAX * @as(c_ulonglong, 2)) + @as(c_int, 1);
pub const _BITS_POSIX1_LIM_H = @as(c_int, 1);
pub const _POSIX_AIO_LISTIO_MAX = @as(c_int, 2);
pub const _POSIX_AIO_MAX = @as(c_int, 1);
pub const _POSIX_ARG_MAX = @as(c_int, 4096);
pub const _POSIX_CHILD_MAX = @as(c_int, 25);
pub const _POSIX_DELAYTIMER_MAX = @as(c_int, 32);
pub const _POSIX_HOST_NAME_MAX = @as(c_int, 255);
pub const _POSIX_LINK_MAX = @as(c_int, 8);
pub const _POSIX_LOGIN_NAME_MAX = @as(c_int, 9);
pub const _POSIX_MAX_CANON = @as(c_int, 255);
pub const _POSIX_MAX_INPUT = @as(c_int, 255);
pub const _POSIX_MQ_OPEN_MAX = @as(c_int, 8);
pub const _POSIX_MQ_PRIO_MAX = @as(c_int, 32);
pub const _POSIX_NAME_MAX = @as(c_int, 14);
pub const _POSIX_NGROUPS_MAX = @as(c_int, 8);
pub const _POSIX_OPEN_MAX = @as(c_int, 20);
pub const _POSIX_PATH_MAX = @as(c_int, 256);
pub const _POSIX_PIPE_BUF = @as(c_int, 512);
pub const _POSIX_RE_DUP_MAX = @as(c_int, 255);
pub const _POSIX_RTSIG_MAX = @as(c_int, 8);
pub const _POSIX_SEM_NSEMS_MAX = @as(c_int, 256);
pub const _POSIX_SEM_VALUE_MAX = @as(c_int, 32767);
pub const _POSIX_SIGQUEUE_MAX = @as(c_int, 32);
pub const _POSIX_SSIZE_MAX = @as(c_int, 32767);
pub const _POSIX_STREAM_MAX = @as(c_int, 8);
pub const _POSIX_SYMLINK_MAX = @as(c_int, 255);
pub const _POSIX_SYMLOOP_MAX = @as(c_int, 8);
pub const _POSIX_TIMER_MAX = @as(c_int, 32);
pub const _POSIX_TTY_NAME_MAX = @as(c_int, 9);
pub const _POSIX_TZNAME_MAX = @as(c_int, 6);
pub const _POSIX_CLOCKRES_MIN = @import("std").zig.c_translation.promoteIntLiteral(c_int, 20000000, .decimal);
pub const __undef_NR_OPEN = "";
pub const __undef_LINK_MAX = "";
pub const __undef_OPEN_MAX = "";
pub const __undef_ARG_MAX = "";
pub const _LINUX_LIMITS_H = "";
pub const NR_OPEN = @as(c_int, 1024);
pub const NGROUPS_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65536, .decimal);
pub const ARG_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 131072, .decimal);
pub const LINK_MAX = @as(c_int, 127);
pub const MAX_CANON = @as(c_int, 255);
pub const MAX_INPUT = @as(c_int, 255);
pub const NAME_MAX = @as(c_int, 255);
pub const PATH_MAX = @as(c_int, 4096);
pub const PIPE_BUF = @as(c_int, 4096);
pub const XATTR_NAME_MAX = @as(c_int, 255);
pub const XATTR_SIZE_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65536, .decimal);
pub const XATTR_LIST_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 65536, .decimal);
pub const RTSIG_MAX = @as(c_int, 32);
pub const _POSIX_THREAD_KEYS_MAX = @as(c_int, 128);
pub const PTHREAD_KEYS_MAX = @as(c_int, 1024);
pub const _POSIX_THREAD_DESTRUCTOR_ITERATIONS = @as(c_int, 4);
pub const PTHREAD_DESTRUCTOR_ITERATIONS = _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
pub const _POSIX_THREAD_THREADS_MAX = @as(c_int, 64);
pub const AIO_PRIO_DELTA_MAX = @as(c_int, 20);
pub const PTHREAD_STACK_MIN = @as(c_int, 16384);
pub const DELAYTIMER_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const TTY_NAME_MAX = @as(c_int, 32);
pub const LOGIN_NAME_MAX = @as(c_int, 256);
pub const HOST_NAME_MAX = @as(c_int, 64);
pub const MQ_PRIO_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 32768, .decimal);
pub const SEM_VALUE_MAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 2147483647, .decimal);
pub const SSIZE_MAX = LONG_MAX;
pub const _BITS_POSIX2_LIM_H = @as(c_int, 1);
pub const _POSIX2_BC_BASE_MAX = @as(c_int, 99);
pub const _POSIX2_BC_DIM_MAX = @as(c_int, 2048);
pub const _POSIX2_BC_SCALE_MAX = @as(c_int, 99);
pub const _POSIX2_BC_STRING_MAX = @as(c_int, 1000);
pub const _POSIX2_COLL_WEIGHTS_MAX = @as(c_int, 2);
pub const _POSIX2_EXPR_NEST_MAX = @as(c_int, 32);
pub const _POSIX2_LINE_MAX = @as(c_int, 2048);
pub const _POSIX2_RE_DUP_MAX = @as(c_int, 255);
pub const _POSIX2_CHARCLASS_NAME_MAX = @as(c_int, 14);
pub const BC_BASE_MAX = _POSIX2_BC_BASE_MAX;
pub const BC_DIM_MAX = _POSIX2_BC_DIM_MAX;
pub const BC_SCALE_MAX = _POSIX2_BC_SCALE_MAX;
pub const BC_STRING_MAX = _POSIX2_BC_STRING_MAX;
pub const COLL_WEIGHTS_MAX = @as(c_int, 255);
pub const EXPR_NEST_MAX = _POSIX2_EXPR_NEST_MAX;
pub const LINE_MAX = _POSIX2_LINE_MAX;
pub const CHARCLASS_NAME_MAX = @as(c_int, 2048);
pub const RE_DUP_MAX = @as(c_int, 0x7fff);
pub const SCHAR_MAX = __SCHAR_MAX__;
pub const SHRT_MAX = __SHRT_MAX__;
pub const INT_MAX = __INT_MAX__;
pub const LONG_MAX = __LONG_MAX__;
pub const SCHAR_MIN = -__SCHAR_MAX__ - @as(c_int, 1);
pub const SHRT_MIN = -__SHRT_MAX__ - @as(c_int, 1);
pub const INT_MIN = -__INT_MAX__ - @as(c_int, 1);
pub const LONG_MIN = -__LONG_MAX__ - @as(c_long, 1);
pub const UCHAR_MAX = (__SCHAR_MAX__ * @as(c_int, 2)) + @as(c_int, 1);
pub const USHRT_MAX = (__SHRT_MAX__ * @as(c_int, 2)) + @as(c_int, 1);
pub const UINT_MAX = (__INT_MAX__ * @as(c_uint, 2)) + @as(c_uint, 1);
pub const ULONG_MAX = (__LONG_MAX__ * @as(c_ulong, 2)) + @as(c_ulong, 1);
pub const CHAR_BIT = __CHAR_BIT__;
pub const CHAR_MIN = SCHAR_MIN;
pub const CHAR_MAX = __SCHAR_MAX__;
pub const __CLANG_FLOAT_H = "";
pub const FLT_EVAL_METHOD = @compileError("unable to translate macro: undefined identifier `__FLT_EVAL_METHOD__`");
// /opt/zig-bin-0.13.0/lib/include/float.h:91:9
pub const FLT_ROUNDS = @compileError("unable to translate macro: undefined identifier `__builtin_flt_rounds`");
// /opt/zig-bin-0.13.0/lib/include/float.h:93:9
pub const FLT_RADIX = __FLT_RADIX__;
pub const FLT_MANT_DIG = __FLT_MANT_DIG__;
pub const DBL_MANT_DIG = __DBL_MANT_DIG__;
pub const LDBL_MANT_DIG = __LDBL_MANT_DIG__;
pub const DECIMAL_DIG = __DECIMAL_DIG__;
pub const FLT_DIG = __FLT_DIG__;
pub const DBL_DIG = __DBL_DIG__;
pub const LDBL_DIG = __LDBL_DIG__;
pub const FLT_MIN_EXP = __FLT_MIN_EXP__;
pub const DBL_MIN_EXP = __DBL_MIN_EXP__;
pub const LDBL_MIN_EXP = __LDBL_MIN_EXP__;
pub const FLT_MIN_10_EXP = __FLT_MIN_10_EXP__;
pub const DBL_MIN_10_EXP = __DBL_MIN_10_EXP__;
pub const LDBL_MIN_10_EXP = __LDBL_MIN_10_EXP__;
pub const FLT_MAX_EXP = __FLT_MAX_EXP__;
pub const DBL_MAX_EXP = __DBL_MAX_EXP__;
pub const LDBL_MAX_EXP = __LDBL_MAX_EXP__;
pub const FLT_MAX_10_EXP = __FLT_MAX_10_EXP__;
pub const DBL_MAX_10_EXP = __DBL_MAX_10_EXP__;
pub const LDBL_MAX_10_EXP = __LDBL_MAX_10_EXP__;
pub const FLT_MAX = __FLT_MAX__;
pub const DBL_MAX = __DBL_MAX__;
pub const LDBL_MAX = __LDBL_MAX__;
pub const FLT_EPSILON = __FLT_EPSILON__;
pub const DBL_EPSILON = __DBL_EPSILON__;
pub const LDBL_EPSILON = __LDBL_EPSILON__;
pub const FLT_MIN = __FLT_MIN__;
pub const DBL_MIN = __DBL_MIN__;
pub const LDBL_MIN = __LDBL_MIN__;
pub const FLT_TRUE_MIN = __FLT_DENORM_MIN__;
pub const DBL_TRUE_MIN = __DBL_DENORM_MIN__;
pub const LDBL_TRUE_MIN = __LDBL_DENORM_MIN__;
pub const FLT_DECIMAL_DIG = __FLT_DECIMAL_DIG__;
pub const DBL_DECIMAL_DIG = __DBL_DECIMAL_DIG__;
pub const LDBL_DECIMAL_DIG = __LDBL_DECIMAL_DIG__;
pub const FLT_HAS_SUBNORM = __FLT_HAS_DENORM__;
pub const DBL_HAS_SUBNORM = __DBL_HAS_DENORM__;
pub const LDBL_HAS_SUBNORM = __LDBL_HAS_DENORM__;
pub const JSMN_PARENT_LINKS = "";
pub const JSMN_STRICT = "";
pub const GlbHeaderSize = @as(c_int, 12);
pub const GlbChunkHeaderSize = @as(c_int, 8);
pub const CGLTF_CONSTS = "";
pub inline fn CGLTF_ATOI(str: anytype) @TypeOf(atoi(str)) {
_ = &str;
return atoi(str);
}
pub inline fn CGLTF_ATOF(str: anytype) @TypeOf(atof(str)) {
_ = &str;
return atof(str);
}
pub inline fn CGLTF_ATOLL(str: anytype) @TypeOf(atoll(str)) {
_ = &str;
return atoll(str);
}
pub const CGLTF_VALIDATE_ENABLE_ASSERTS = @as(c_int, 0);
pub const CGLTF_ASSERT_IF = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:1559:9
pub const CGLTF_ERROR_JSON = -@as(c_int, 1);
pub const CGLTF_ERROR_NOMEM = -@as(c_int, 2);
pub const CGLTF_ERROR_LEGACY = -@as(c_int, 3);
pub const CGLTF_CHECK_TOKTYPE = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:2640:9
pub const CGLTF_CHECK_TOKTYPE_RET = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:2641:9
pub const CGLTF_CHECK_KEY = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:2642:9
pub const CGLTF_PTRINDEX = @compileError("unable to translate C expr: unexpected token ')'");
// ./external/cgltf.h:2644:9
pub const CGLTF_PTRFIXUP = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:2645:9
pub const CGLTF_PTRFIXUP_REQ = @compileError("unable to translate C expr: unexpected token 'if'");
// ./external/cgltf.h:2646:9
pub const VOX_MALLOC = RL_MALLOC;
pub const VOX_CALLOC = RL_CALLOC;
pub const VOX_REALLOC = RL_REALLOC;
pub const VOX_FREE = RL_FREE;
pub const VOX_LOADER_IMPLEMENTATION = "";
pub const VOX_LOADER_H = "";
pub const VOX_SUCCESS = @as(c_int, 0);
pub const VOX_ERROR_FILE_NOT_FOUND = -@as(c_int, 1);
pub const VOX_ERROR_INVALID_FORMAT = -@as(c_int, 2);
pub const VOX_ERROR_FILE_VERSION_NOT_MATCH = -@as(c_int, 3);
pub const CHUNKSIZE = @as(c_int, 16);
pub const CHUNKSIZE_OPSHIFT = @as(c_int, 4);
pub const CHUNK_FLATTENOFFSET_OPSHIFT = @as(c_int, 8);
pub const M3D_MALLOC = RL_MALLOC;
pub const M3D_REALLOC = RL_REALLOC;
pub const M3D_FREE = RL_FREE;
pub const M3D_IMPLEMENTATION = "";
pub const _M3D_H_ = "";
pub const M3D_LOG = @compileError("unable to translate C expr: unexpected token ''");
// ./external/m3d.h:56:10
pub const M3D_APIVERSION = @as(c_int, 0x0100);
pub const M3D_EPSILON = @import("std").zig.c_translation.cast(M3D_FLOAT, @as(f64, 1e-7));
pub const M3D_UNDEF = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xffffffff, .hex);
pub const M3D_INDEXMAX = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xfffffffe, .hex);
pub const M3D_VOXUNDEF = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xffff, .hex);
pub const M3D_VOXCLEAR = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xfffe, .hex);
pub const M3D_NOTDEFINED = @import("std").zig.c_translation.promoteIntLiteral(c_int, 0xffffffff, .hex);
pub const M3D_NUMBONE = @as(c_int, 4);
pub const M3D_BONEMAXLEVEL = @as(c_int, 64);
pub const _inline = @compileError("unable to translate C expr: unexpected token '__inline__'");
// ./external/m3d.h:96:9
pub const _pack = @compileError("unable to translate macro: undefined identifier `packed`");
// ./external/m3d.h:98:9
pub const _unused = @compileError("unable to translate macro: undefined identifier `unused`");
// ./external/m3d.h:99:9
pub const _register = @compileError("unable to translate C expr: unexpected token 'register'");
// ./external/m3d.h:106:9
pub const m3d_textureindex_t = m3dti_t;
pub const m3d_texturedata_t = m3dtx_t;
pub const m3d_weight_t = m3dw_t;
pub const m3d_bone_t = m3db_t;
pub const m3d_skin_t = m3ds_t;
pub const m3d_vertex_t = m3dv_t;
pub const M3D_PROPERTYDEF = @compileError("unable to translate C expr: unexpected token '{'");
// ./external/m3d.h:240:9
pub const m3d_property_t = m3dp_t;
pub const m3d_material_t = m3dm_t;
pub const m3d_face_t = m3df_t;
pub const m3d_voxelitem_t = m3dvi_t;
pub const m3d_parameter_t = m3dvi_t;
pub const m3d_voxeltype_t = m3dvt_t;
pub const m3d_voxel_t = m3dvx_t;
pub const M3D_CMDMAXARG = @as(c_int, 8);
pub const M3D_CMDDEF = @compileError("unable to translate C expr: unexpected token '{'");
// ./external/m3d.h:418:9
pub const m3d_shapecommand_t = m3dc_t;
pub const m3d_shape_t = m3dh_t;
pub const m3d_label_t = m3dl_t;
pub const m3d_transform_t = m3dtr_t;
pub const m3d_frame_t = m3dfr_t;
pub const m3d_action_t = m3da_t;
pub const m3d_inlinedasset_t = m3di_t;
pub const M3D_FLG_FREERAW = @as(c_int, 1) << @as(c_int, 0);
pub const M3D_FLG_FREESTR = @as(c_int, 1) << @as(c_int, 1);
pub const M3D_FLG_MTLLIB = @as(c_int, 1) << @as(c_int, 2);
pub const M3D_FLG_GENNORM = @as(c_int, 1) << @as(c_int, 3);
pub const M3D_EXP_INT8 = @as(c_int, 0);
pub const M3D_EXP_INT16 = @as(c_int, 1);
pub const M3D_EXP_FLOAT = @as(c_int, 2);
pub const M3D_EXP_DOUBLE = @as(c_int, 3);
pub const M3D_EXP_NOCMAP = @as(c_int, 1) << @as(c_int, 0);
pub const M3D_EXP_NOMATERIAL = @as(c_int, 1) << @as(c_int, 1);
pub const M3D_EXP_NOFACE = @as(c_int, 1) << @as(c_int, 2);
pub const M3D_EXP_NONORMAL = @as(c_int, 1) << @as(c_int, 3);
pub const M3D_EXP_NOTXTCRD = @as(c_int, 1) << @as(c_int, 4);
pub const M3D_EXP_FLIPTXTCRD = @as(c_int, 1) << @as(c_int, 5);
pub const M3D_EXP_NORECALC = @as(c_int, 1) << @as(c_int, 6);
pub const M3D_EXP_IDOSUCK = @as(c_int, 1) << @as(c_int, 7);
pub const M3D_EXP_NOBONE = @as(c_int, 1) << @as(c_int, 8);
pub const M3D_EXP_NOACTION = @as(c_int, 1) << @as(c_int, 9);
pub const M3D_EXP_INLINE = @as(c_int, 1) << @as(c_int, 10);
pub const M3D_EXP_EXTRA = @as(c_int, 1) << @as(c_int, 11);
pub const M3D_EXP_NOZLIB = @as(c_int, 1) << @as(c_int, 14);
pub const M3D_EXP_ASCII = @as(c_int, 1) << @as(c_int, 15);
pub const M3D_EXP_NOVRTMAX = @as(c_int, 1) << @as(c_int, 16);
pub const M3D_SUCCESS = @as(c_int, 0);
pub const M3D_ERR_ALLOC = -@as(c_int, 1);
pub const M3D_ERR_BADFILE = -@as(c_int, 2);
pub const M3D_ERR_UNIMPL = -@as(c_int, 65);
pub const M3D_ERR_UNKPROP = -@as(c_int, 66);
pub const M3D_ERR_UNKMESH = -@as(c_int, 67);
pub const M3D_ERR_UNKIMG = -@as(c_int, 68);
pub const M3D_ERR_UNKFRAME = -@as(c_int, 69);
pub const M3D_ERR_UNKCMD = -@as(c_int, 70);
pub const M3D_ERR_UNKVOX = -@as(c_int, 71);
pub const M3D_ERR_TRUNC = -@as(c_int, 72);
pub const M3D_ERR_CMAP = -@as(c_int, 73);
pub const M3D_ERR_TMAP = -@as(c_int, 74);
pub const M3D_ERR_VRTS = -@as(c_int, 75);
pub const M3D_ERR_BONE = -@as(c_int, 76);
pub const M3D_ERR_MTRL = -@as(c_int, 77);
pub const M3D_ERR_SHPE = -@as(c_int, 78);
pub const M3D_ERR_VOXT = -@as(c_int, 79);
pub inline fn M3D_ERR_ISFATAL(x: anytype) @TypeOf((x < @as(c_int, 0)) and (x > -@as(c_int, 65))) {
_ = &x;
return (x < @as(c_int, 0)) and (x > -@as(c_int, 65));
}
pub const STBI_ASSERT = @compileError("unable to translate C expr: unexpected token ''");
// ./external/m3d.h:730:9
pub inline fn STBI_NOTUSED(v: anytype) anyopaque {
_ = &v;
return @import("std").zig.c_translation.cast(anyopaque, @import("std").zig.c_translation.sizeof(v));
}
pub inline fn STBI__BYTECAST(x: anytype) u8 {
_ = &x;
return @import("std").zig.c_translation.cast(u8, x & @as(c_int, 255));
}
pub inline fn STBI_MALLOC(sz: anytype) @TypeOf(M3D_MALLOC(sz)) {
_ = &sz;
return M3D_MALLOC(sz);
}
pub inline fn STBI_REALLOC(p: anytype, newsz: anytype) @TypeOf(M3D_REALLOC(p, newsz)) {
_ = &p;
_ = &newsz;
return M3D_REALLOC(p, newsz);
}
pub inline fn STBI_FREE(p: anytype) @TypeOf(M3D_FREE(p)) {
_ = &p;
return M3D_FREE(p);
}
pub inline fn STBI_REALLOC_SIZED(p: anytype, oldsz: anytype, newsz: anytype) @TypeOf(STBI_REALLOC(p, newsz)) {
_ = &p;
_ = &oldsz;
_ = &newsz;
return STBI_REALLOC(p, newsz);
}
pub inline fn _m3dstbi__err(x: anytype, y: anytype) @TypeOf(_m3dstbi__errstr(y)) {
_ = &x;
_ = &y;
return _m3dstbi__errstr(y);
}
pub inline fn STBI__COMBO(a: anytype, b: anytype) @TypeOf((a * @as(c_int, 8)) + b) {
_ = &a;
_ = &b;
return (a * @as(c_int, 8)) + b;
}
pub const STBI__CASE = @compileError("unable to translate macro: undefined identifier `i`");
// ./external/m3d.h:854:15
pub const STBI__ZFAST_BITS = @as(c_int, 9);
pub const STBI__ZFAST_MASK = (@as(c_int, 1) << STBI__ZFAST_BITS) - @as(c_int, 1);
pub inline fn STBI__PNG_TYPE(a: anytype, b: anytype, c: anytype, d: anytype) @TypeOf((((@import("std").zig.c_translation.cast(c_uint, a) << @as(c_int, 24)) + (@import("std").zig.c_translation.cast(c_uint, b) << @as(c_int, 16))) + (@import("std").zig.c_translation.cast(c_uint, c) << @as(c_int, 8))) + @import("std").zig.c_translation.cast(c_uint, d)) {
_ = &a;
_ = &b;
_ = &c;
_ = &d;
return (((@import("std").zig.c_translation.cast(c_uint, a) << @as(c_int, 24)) + (@import("std").zig.c_translation.cast(c_uint, b) << @as(c_int, 16))) + (@import("std").zig.c_translation.cast(c_uint, c) << @as(c_int, 8))) + @import("std").zig.c_translation.cast(c_uint, d);
}
pub const stbi__context = _m3dstbi__context;
pub const stbi__result_info = _m3dstbi__result_info;
pub const stbi__png_load = _m3dstbi__png_load;
pub const stbi_zlib_decode_malloc_guesssize_headerflag = _m3dstbi_zlib_decode_malloc_guesssize_headerflag;
pub inline fn M3D_CHUNKMAGIC(m: anytype, a: anytype, b: anytype, c: anytype, d: anytype) @TypeOf((((m[@as(usize, @intCast(@as(c_int, 0)))] == a) and (m[@as(usize, @intCast(@as(c_int, 1)))] == b)) and (m[@as(usize, @intCast(@as(c_int, 2)))] == c)) and (m[@as(usize, @intCast(@as(c_int, 3)))] == d)) {
_ = &m;
_ = &a;
_ = &b;
_ = &c;
_ = &d;
return (((m[@as(usize, @intCast(@as(c_int, 0)))] == a) and (m[@as(usize, @intCast(@as(c_int, 1)))] == b)) and (m[@as(usize, @intCast(@as(c_int, 2)))] == c)) and (m[@as(usize, @intCast(@as(c_int, 3)))] == d);
}
pub const M3D_GETSTR = @compileError("unable to translate macro: undefined identifier `offs`");
// ./external/m3d.h:2278:9
pub const PAR_MALLOC = @compileError("unable to translate C expr: unexpected token ')'");
// rmodels.c:99:13
pub const PAR_CALLOC = @compileError("unable to translate C expr: unexpected token ')'");
// rmodels.c:100:13
pub const PAR_REALLOC = @compileError("unable to translate C expr: unexpected token ')'");
// rmodels.c:101:13
pub const PAR_FREE = RL_FREE;
pub const PAR_SHAPES_IMPLEMENTATION = "";
pub const PAR_SHAPES_H = "";
pub const PAR_SHAPES_T = u16;
pub const PAR_PI = @as(f64, 3.14159265359);
pub inline fn PAR_MIN(a: anytype, b: anytype) @TypeOf(if (a > b) b else a) {
_ = &a;
_ = &b;
return if (a > b) b else a;
}
pub inline fn PAR_MAX(a: anytype, b: anytype) @TypeOf(if (a > b) a else b) {
_ = &a;
_ = &b;
return if (a > b) a else b;
}
pub inline fn PAR_CLAMP(v: anytype, lo: anytype, hi: anytype) @TypeOf(PAR_MAX(lo, PAR_MIN(hi, v))) {
_ = &v;
_ = &lo;
_ = &hi;
return PAR_MAX(lo, PAR_MIN(hi, v));
}
pub const PAR_SWAP = @compileError("unable to translate macro: undefined identifier `tmp`");
// ./external/par_shapes.h:197:9
pub inline fn PAR_SQR(a: anytype) @TypeOf(a * a) {
_ = &a;
return a * a;
}
pub const STRETCH_CONSTANT_2D = -@as(f64, 0.211324865405187);
pub const SQUISH_CONSTANT_2D = @as(f64, 0.366025403784439);
pub const STRETCH_CONSTANT_3D = @import("std").zig.c_translation.MacroArithmetic.div(-@as(f64, 1.0), @as(f64, 6.0));
pub const SQUISH_CONSTANT_3D = @import("std").zig.c_translation.MacroArithmetic.div(@as(f64, 1.0), @as(f64, 3.0));
pub const STRETCH_CONSTANT_4D = -@as(f64, 0.138196601125011);
pub const SQUISH_CONSTANT_4D = @as(f64, 0.309016994374947);
pub const NORM_CONSTANT_2D = @as(f64, 47.0);
pub const NORM_CONSTANT_3D = @as(f64, 103.0);
pub const NORM_CONSTANT_4D = @as(f64, 30.0);
pub const DEFAULT_SEED = @as(c_longlong, 0);
pub const ARRAYSIZE = @compileError("unable to translate C expr: unexpected token '('");
// ./external/par_shapes.h:1857:9
pub const _UNISTD_H = @as(c_int, 1);
pub const _POSIX_VERSION = @as(c_long, 200809);
pub const __POSIX2_THIS_VERSION = @as(c_long, 200809);
pub const _POSIX2_VERSION = __POSIX2_THIS_VERSION;
pub const _POSIX2_C_VERSION = __POSIX2_THIS_VERSION;
pub const _POSIX2_C_BIND = __POSIX2_THIS_VERSION;
pub const _POSIX2_C_DEV = __POSIX2_THIS_VERSION;
pub const _POSIX2_SW_DEV = __POSIX2_THIS_VERSION;
pub const _POSIX2_LOCALEDEF = __POSIX2_THIS_VERSION;
pub const _XOPEN_VERSION = @as(c_int, 700);
pub const _XOPEN_XCU_VERSION = @as(c_int, 4);
pub const _XOPEN_XPG2 = @as(c_int, 1);
pub const _XOPEN_XPG3 = @as(c_int, 1);
pub const _XOPEN_XPG4 = @as(c_int, 1);
pub const _XOPEN_UNIX = @as(c_int, 1);
pub const _XOPEN_ENH_I18N = @as(c_int, 1);
pub const _XOPEN_LEGACY = @as(c_int, 1);
pub const _BITS_POSIX_OPT_H = @as(c_int, 1);
pub const _POSIX_JOB_CONTROL = @as(c_int, 1);
pub const _POSIX_SAVED_IDS = @as(c_int, 1);
pub const _POSIX_PRIORITY_SCHEDULING = @as(c_long, 200809);
pub const _POSIX_SYNCHRONIZED_IO = @as(c_long, 200809);
pub const _POSIX_FSYNC = @as(c_long, 200809);
pub const _POSIX_MAPPED_FILES = @as(c_long, 200809);
pub const _POSIX_MEMLOCK = @as(c_long, 200809);
pub const _POSIX_MEMLOCK_RANGE = @as(c_long, 200809);
pub const _POSIX_MEMORY_PROTECTION = @as(c_long, 200809);
pub const _POSIX_CHOWN_RESTRICTED = @as(c_int, 0);
pub const _POSIX_VDISABLE = '\x00';
pub const _POSIX_NO_TRUNC = @as(c_int, 1);
pub const _XOPEN_REALTIME = @as(c_int, 1);
pub const _XOPEN_REALTIME_THREADS = @as(c_int, 1);
pub const _XOPEN_SHM = @as(c_int, 1);
pub const _POSIX_THREADS = @as(c_long, 200809);
pub const _POSIX_REENTRANT_FUNCTIONS = @as(c_int, 1);
pub const _POSIX_THREAD_SAFE_FUNCTIONS = @as(c_long, 200809);
pub const _POSIX_THREAD_PRIORITY_SCHEDULING = @as(c_long, 200809);
pub const _POSIX_THREAD_ATTR_STACKSIZE = @as(c_long, 200809);
pub const _POSIX_THREAD_ATTR_STACKADDR = @as(c_long, 200809);
pub const _POSIX_THREAD_PRIO_INHERIT = @as(c_long, 200809);
pub const _POSIX_THREAD_PRIO_PROTECT = @as(c_long, 200809);
pub const _POSIX_THREAD_ROBUST_PRIO_INHERIT = @as(c_long, 200809);
pub const _POSIX_THREAD_ROBUST_PRIO_PROTECT = -@as(c_int, 1);
pub const _POSIX_SEMAPHORES = @as(c_long, 200809);
pub const _POSIX_REALTIME_SIGNALS = @as(c_long, 200809);
pub const _POSIX_ASYNCHRONOUS_IO = @as(c_long, 200809);
pub const _POSIX_ASYNC_IO = @as(c_int, 1);
pub const _LFS_ASYNCHRONOUS_IO = @as(c_int, 1);
pub const _POSIX_PRIORITIZED_IO = @as(c_long, 200809);
pub const _LFS64_ASYNCHRONOUS_IO = @as(c_int, 1);
pub const _LFS_LARGEFILE = @as(c_int, 1);
pub const _LFS64_LARGEFILE = @as(c_int, 1);
pub const _LFS64_STDIO = @as(c_int, 1);
pub const _POSIX_SHARED_MEMORY_OBJECTS = @as(c_long, 200809);
pub const _POSIX_CPUTIME = @as(c_int, 0);
pub const _POSIX_THREAD_CPUTIME = @as(c_int, 0);
pub const _POSIX_REGEXP = @as(c_int, 1);
pub const _POSIX_READER_WRITER_LOCKS = @as(c_long, 200809);
pub const _POSIX_SHELL = @as(c_int, 1);
pub const _POSIX_TIMEOUTS = @as(c_long, 200809);
pub const _POSIX_SPIN_LOCKS = @as(c_long, 200809);
pub const _POSIX_SPAWN = @as(c_long, 200809);
pub const _POSIX_TIMERS = @as(c_long, 200809);
pub const _POSIX_BARRIERS = @as(c_long, 200809);
pub const _POSIX_MESSAGE_PASSING = @as(c_long, 200809);
pub const _POSIX_THREAD_PROCESS_SHARED = @as(c_long, 200809);
pub const _POSIX_MONOTONIC_CLOCK = @as(c_int, 0);
pub const _POSIX_CLOCK_SELECTION = @as(c_long, 200809);
pub const _POSIX_ADVISORY_INFO = @as(c_long, 200809);
pub const _POSIX_IPV6 = @as(c_long, 200809);
pub const _POSIX_RAW_SOCKETS = @as(c_long, 200809);
pub const _POSIX2_CHAR_TERM = @as(c_long, 200809);
pub const _POSIX_SPORADIC_SERVER = -@as(c_int, 1);
pub const _POSIX_THREAD_SPORADIC_SERVER = -@as(c_int, 1);
pub const _POSIX_TRACE = -@as(c_int, 1);
pub const _POSIX_TRACE_EVENT_FILTER = -@as(c_int, 1);
pub const _POSIX_TRACE_INHERIT = -@as(c_int, 1);
pub const _POSIX_TRACE_LOG = -@as(c_int, 1);
pub const _POSIX_TYPED_MEMORY_OBJECTS = -@as(c_int, 1);
pub const _POSIX_V7_LPBIG_OFFBIG = -@as(c_int, 1);
pub const _POSIX_V6_LPBIG_OFFBIG = -@as(c_int, 1);
pub const _XBS5_LPBIG_OFFBIG = -@as(c_int, 1);
pub const _POSIX_V7_LP64_OFF64 = @as(c_int, 1);
pub const _POSIX_V6_LP64_OFF64 = @as(c_int, 1);
pub const _XBS5_LP64_OFF64 = @as(c_int, 1);
pub const __ILP32_OFF32_CFLAGS = "-m32";
pub const __ILP32_OFF32_LDFLAGS = "-m32";
pub const __ILP32_OFFBIG_CFLAGS = "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64";
pub const __ILP32_OFFBIG_LDFLAGS = "-m32";
pub const __LP64_OFF64_CFLAGS = "-m64";
pub const __LP64_OFF64_LDFLAGS = "-m64";
pub const STDIN_FILENO = @as(c_int, 0);
pub const STDOUT_FILENO = @as(c_int, 1);
pub const STDERR_FILENO = @as(c_int, 2);
pub const __useconds_t_defined = "";
pub const __socklen_t_defined = "";
pub const R_OK = @as(c_int, 4);
pub const W_OK = @as(c_int, 2);
pub const X_OK = @as(c_int, 1);
pub const F_OK = @as(c_int, 0);
pub const L_SET = SEEK_SET;
pub const L_INCR = SEEK_CUR;
pub const L_XTND = SEEK_END;
pub const _SC_PAGE_SIZE = _SC_PAGESIZE;
pub const _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = _CS_V6_WIDTH_RESTRICTED_ENVS;
pub const _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS = _CS_V5_WIDTH_RESTRICTED_ENVS;
pub const _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS = _CS_V7_WIDTH_RESTRICTED_ENVS;
pub const _GETOPT_POSIX_H = @as(c_int, 1);
pub const _GETOPT_CORE_H = @as(c_int, 1);
pub const F_ULOCK = @as(c_int, 0);
pub const F_LOCK = @as(c_int, 1);
pub const F_TLOCK = @as(c_int, 2);
pub const F_TEST = @as(c_int, 3);
pub const CHDIR = chdir;
pub const TEXT_BYTES_PER_LINE = @as(c_int, 20);
pub const CUSTOM_MESH_GEN_PLANE = "";
pub const CUSTOM_MESH_GEN_CUBE = "";
pub inline fn GRAY_VALUE(c: anytype) @TypeOf(@import("std").zig.c_translation.MacroArithmetic.div(@import("std").zig.c_translation.cast(f32, (c.r + c.g) + c.b), @as(f32, 3.0))) {
_ = &c;
return @import("std").zig.c_translation.MacroArithmetic.div(@import("std").zig.c_translation.cast(f32, (c.r + c.g) + c.b), @as(f32, 3.0));
}
pub inline fn COLOR_EQUAL(col1: anytype, col2: anytype) @TypeOf((((col1.r == col2.r) and (col1.g == col2.g)) and (col1.b == col2.b)) and (col1.a == col2.a)) {
_ = &col1;
_ = &col2;
return (((col1.r == col2.r) and (col1.g == col2.g)) and (col1.b == col2.b)) and (col1.a == col2.a);
}
pub const IQM_MAGIC = "INTERQUAKEMODEL";
pub const IQM_VERSION = @as(c_int, 2);
pub const BONE_NAME_LENGTH = @as(c_int, 32);
pub const MESH_NAME_LENGTH = @as(c_int, 32);
pub const MATERIAL_NAME_LENGTH = @as(c_int, 32);
pub const LOAD_ATTRIBUTE = @compileError("unable to translate macro: undefined identifier `n`");
// rmodels.c:5083:13
pub const GLTF_ANIMDELAY = @as(c_int, 17);
pub const M3D_ANIMDELAY = @as(c_int, 17);
pub const par_shapes_mesh_s = struct_par_shapes_mesh_s;
pub const _G_fpos_t = struct__G_fpos_t;
pub const _G_fpos64_t = struct__G_fpos64_t;
pub const _IO_marker = struct__IO_marker;
pub const _IO_codecvt = struct__IO_codecvt;
pub const _IO_wide_data = struct__IO_wide_data;
pub const _IO_FILE = struct__IO_FILE;
pub const _IO_cookie_io_functions_t = struct__IO_cookie_io_functions_t;
pub const timeval = struct_timeval;
pub const timespec = struct_timespec;
pub const __pthread_internal_list = struct___pthread_internal_list;
pub const __pthread_internal_slist = struct___pthread_internal_slist;
pub const __pthread_mutex_s = struct___pthread_mutex_s;
pub const __pthread_rwlock_arch_t = struct___pthread_rwlock_arch_t;
pub const __pthread_cond_s = struct___pthread_cond_s;
pub const random_data = struct_random_data;
pub const drand48_data = struct_drand48_data;
pub const __locale_struct = struct___locale_struct;
pub const jsmnerr = enum_jsmnerr;
pub const osn_context = struct_osn_context;