mirror of
https://github.com/raylib-zig/raylib-zig.git
synced 2026-02-20 08:14:33 +00:00
Error check using IsValid functions and return error unions (#191)
* Verify shaders are valid * Verify images are valid * Verify models are valid * Verify materials are valid * Verify textures are valid * Verify render textures are valid * Verify waves are valid * Verify sounds are valid * Verify music is valid * Verify audio streams are valid * Verify fonts are valid * Update examples to handle error unions
This commit is contained in:
parent
30ce68004f
commit
41022159ad
@ -41,7 +41,7 @@ pub fn main() anyerror!void {
|
|||||||
rl.setAudioStreamBufferSizeDefault(MAX_SAMPLES_PER_UPDATE);
|
rl.setAudioStreamBufferSizeDefault(MAX_SAMPLES_PER_UPDATE);
|
||||||
|
|
||||||
// Init raw audio stream (sample rate: 44100, sample size: 16bit-short, channels: 1-mono)
|
// Init raw audio stream (sample rate: 44100, sample size: 16bit-short, channels: 1-mono)
|
||||||
const stream = rl.loadAudioStream(44100, 16, 1);
|
const stream = try rl.loadAudioStream(44100, 16, 1);
|
||||||
defer rl.unloadAudioStream(stream); // Close raw audio stream and delete buffers from RAM
|
defer rl.unloadAudioStream(stream); // Close raw audio stream and delete buffers from RAM
|
||||||
|
|
||||||
rl.setAudioStreamCallback(stream, &audioInputCallback);
|
rl.setAudioStreamCallback(stream, &audioInputCallback);
|
||||||
|
|||||||
@ -15,10 +15,10 @@ pub fn main() anyerror!void {
|
|||||||
rl.initWindow(screenWidth, screenHeight, "raylib [shaders] example - Apply an outline to a texture");
|
rl.initWindow(screenWidth, screenHeight, "raylib [shaders] example - Apply an outline to a texture");
|
||||||
defer rl.closeWindow(); // Close window and OpenGL context
|
defer rl.closeWindow(); // Close window and OpenGL context
|
||||||
|
|
||||||
const texture: rl.Texture = rl.Texture.init("resources/textures/fudesumi.png");
|
const texture: rl.Texture = try rl.Texture.init("resources/textures/fudesumi.png");
|
||||||
defer rl.unloadTexture(texture);
|
defer rl.unloadTexture(texture);
|
||||||
|
|
||||||
const shdrOutline: rl.Shader = rl.loadShader(null, "resources/shaders/glsl330/outline.fs");
|
const shdrOutline: rl.Shader = try rl.loadShader(null, "resources/shaders/glsl330/outline.fs");
|
||||||
defer rl.unloadShader(shdrOutline);
|
defer rl.unloadShader(shdrOutline);
|
||||||
|
|
||||||
var outlineSize: f32 = 2.0;
|
var outlineSize: f32 = 2.0;
|
||||||
|
|||||||
@ -17,7 +17,7 @@ pub fn main() anyerror!void {
|
|||||||
defer rl.closeWindow(); // Close window and OpenGL context
|
defer rl.closeWindow(); // Close window and OpenGL context
|
||||||
|
|
||||||
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
||||||
const scarfy: rl.Texture = rl.Texture.init("resources/textures/scarfy.png"); // Texture loading
|
const scarfy: rl.Texture = try rl.Texture.init("resources/textures/scarfy.png"); // Texture loading
|
||||||
defer rl.unloadTexture(scarfy); // Texture unloading
|
defer rl.unloadTexture(scarfy); // Texture unloading
|
||||||
|
|
||||||
const position = rl.Vector2.init(350.0, 280.0);
|
const position = rl.Vector2.init(350.0, 280.0);
|
||||||
|
|||||||
@ -20,9 +20,9 @@ pub fn main() anyerror!void {
|
|||||||
|
|
||||||
// NOTE: Be careful, background width must be equal or bigger than screen width
|
// NOTE: Be careful, background width must be equal or bigger than screen width
|
||||||
// if not, texture should be draw more than two times for scrolling effect
|
// if not, texture should be draw more than two times for scrolling effect
|
||||||
const background = rl.loadTexture("resources/textures/cyberpunk_street_background.png");
|
const background = try rl.loadTexture("resources/textures/cyberpunk_street_background.png");
|
||||||
const midground = rl.loadTexture("resources/textures/cyberpunk_street_midground.png");
|
const midground = try rl.loadTexture("resources/textures/cyberpunk_street_midground.png");
|
||||||
const foreground = rl.loadTexture("resources/textures/cyberpunk_street_foreground.png");
|
const foreground = try rl.loadTexture("resources/textures/cyberpunk_street_foreground.png");
|
||||||
defer rl.unloadTexture(background); // Unload background texture
|
defer rl.unloadTexture(background); // Unload background texture
|
||||||
defer rl.unloadTexture(midground); // Unload midground texture
|
defer rl.unloadTexture(midground); // Unload midground texture
|
||||||
defer rl.unloadTexture(foreground); // Unload foreground texture
|
defer rl.unloadTexture(foreground); // Unload foreground texture
|
||||||
|
|||||||
@ -25,8 +25,8 @@ pub fn main() anyerror!void {
|
|||||||
|
|
||||||
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
||||||
|
|
||||||
const image = rl.loadImage("logo/logo.png"); // Loaded in CPU memory (RAM)
|
const image = try rl.loadImage("logo/logo.png"); // Loaded in CPU memory (RAM)
|
||||||
const texture = rl.loadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM)
|
const texture = try rl.loadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM)
|
||||||
// Once image has been converted to texture and uploaded to VRAM,
|
// Once image has been converted to texture and uploaded to VRAM,
|
||||||
// it can be unloaded from RAM
|
// it can be unloaded from RAM
|
||||||
rl.unloadImage(image);
|
rl.unloadImage(image);
|
||||||
|
|||||||
@ -337,7 +337,24 @@ def parse_header(header_name: str, output_file: str, ext_file: str, prefix: str,
|
|||||||
"ExportDataAsCode",
|
"ExportDataAsCode",
|
||||||
"LoadFileData",
|
"LoadFileData",
|
||||||
"SaveFileData",
|
"SaveFileData",
|
||||||
|
"LoadImage",
|
||||||
|
"LoadImageRaw",
|
||||||
|
"LoadImageAnim",
|
||||||
|
"LoadImageFromTexture",
|
||||||
|
"LoadImageFromScreen",
|
||||||
"LoadImageFromMemory",
|
"LoadImageFromMemory",
|
||||||
|
"LoadMaterialDefault",
|
||||||
|
"LoadMaterials",
|
||||||
|
"LoadModel",
|
||||||
|
"LoadModelFromMesh",
|
||||||
|
"LoadTexture",
|
||||||
|
"LoadTextureFromImage",
|
||||||
|
"LoadTextureCubemap",
|
||||||
|
"LoadRenderTexture",
|
||||||
|
"LoadWave",
|
||||||
|
"LoadSound",
|
||||||
|
"LoadMusicStream",
|
||||||
|
"LoadAudioStream",
|
||||||
"DrawMeshInstanced",
|
"DrawMeshInstanced",
|
||||||
"UnloadModelAnimations",
|
"UnloadModelAnimations",
|
||||||
"CompressData",
|
"CompressData",
|
||||||
@ -349,7 +366,12 @@ def parse_header(header_name: str, output_file: str, ext_file: str, prefix: str,
|
|||||||
"ComputeSHA1",
|
"ComputeSHA1",
|
||||||
"SetWindowIcons",
|
"SetWindowIcons",
|
||||||
"CheckCollisionPointPoly",
|
"CheckCollisionPointPoly",
|
||||||
|
"GetFontDefault",
|
||||||
|
"LoadFont",
|
||||||
"LoadFontEx",
|
"LoadFontEx",
|
||||||
|
"LoadFontFromImage",
|
||||||
|
"ImageText",
|
||||||
|
"ImageTextEx",
|
||||||
"GenImageFontAtlas",
|
"GenImageFontAtlas",
|
||||||
"UnloadFontData",
|
"UnloadFontData",
|
||||||
"DrawTextCodepoints",
|
"DrawTextCodepoints",
|
||||||
|
|||||||
@ -16,10 +16,21 @@ pub const RaylibError = error{
|
|||||||
LoadFileData,
|
LoadFileData,
|
||||||
LoadImageColors,
|
LoadImageColors,
|
||||||
LoadImagePalette,
|
LoadImagePalette,
|
||||||
|
LoadFont,
|
||||||
LoadFontData,
|
LoadFontData,
|
||||||
LoadCodepoints,
|
LoadCodepoints,
|
||||||
|
LoadMaterial,
|
||||||
LoadMaterials,
|
LoadMaterials,
|
||||||
LoadModelAnimations,
|
LoadModelAnimations,
|
||||||
|
LoadShader,
|
||||||
|
LoadImage,
|
||||||
|
LoadModel,
|
||||||
|
LoadTexture,
|
||||||
|
LoadRenderTexture,
|
||||||
|
LoadWave,
|
||||||
|
LoadSound,
|
||||||
|
LoadMusic,
|
||||||
|
LoadAudioStream,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Vector2 = extern struct {
|
pub const Vector2 = extern struct {
|
||||||
@ -839,27 +850,27 @@ pub const Image = extern struct {
|
|||||||
format: PixelFormat,
|
format: PixelFormat,
|
||||||
|
|
||||||
/// Load image from file into CPU memory (RAM)
|
/// Load image from file into CPU memory (RAM)
|
||||||
pub fn init(fileName: [*:0]const u8) Image {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Image {
|
||||||
return rl.loadImage(fileName);
|
return rl.loadImage(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from RAW file data
|
/// Load image from RAW file data
|
||||||
pub fn initRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) Image {
|
pub fn initRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) RaylibError!Image {
|
||||||
return rl.loadImageRaw(fileName, width, height, format, headerSize);
|
return rl.loadImageRaw(fileName, width, height, format, headerSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image sequence from file (frames appended to image.data)
|
/// Load image sequence from file (frames appended to image.data)
|
||||||
pub fn initAnim(fileName: [*:0]const u8, frames: *i32) Image {
|
pub fn initAnim(fileName: [*:0]const u8, frames: *i32) RaylibError!Image {
|
||||||
return rl.loadImageAnim(fileName, frames);
|
return rl.loadImageAnim(fileName, frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from GPU texture data
|
/// Load image from GPU texture data
|
||||||
pub fn fromTexture(texture: Texture) Image {
|
pub fn fromTexture(texture: Texture) RaylibError!Image {
|
||||||
return rl.loadImageFromTexture(texture);
|
return rl.loadImageFromTexture(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from screen buffer and (screenshot)
|
/// Load image from screen buffer and (screenshot)
|
||||||
pub fn fromScreen() Image {
|
pub fn fromScreen() RaylibError!Image {
|
||||||
return rl.loadImageFromScreen();
|
return rl.loadImageFromScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -869,12 +880,12 @@ pub const Image = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create an image from text (default font)
|
/// Create an image from text (default font)
|
||||||
pub fn initText(text: [*:0]const u8, fontSize: i32, color: Color) Image {
|
pub fn initText(text: [*:0]const u8, fontSize: i32, color: Color) RaylibError!Image {
|
||||||
return rl.imageText(text, fontSize, color);
|
return rl.imageText(text, fontSize, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create an image from text (custom sprite font)
|
/// Create an image from text (custom sprite font)
|
||||||
pub fn initTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, t: Color) Image {
|
pub fn initTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, t: Color) RaylibError!Image {
|
||||||
return rl.imageTextEx(font, text, fontSize, spacing, t);
|
return rl.imageTextEx(font, text, fontSize, spacing, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1159,11 +1170,11 @@ pub const Image = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Load texture from image data
|
/// Load texture from image data
|
||||||
pub fn toTexture(self: Image) Texture {
|
pub fn toTexture(self: Image) RaylibError!Texture {
|
||||||
return Texture.fromImage(self);
|
return Texture.fromImage(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn asCubemap(self: Image, layout: CubemapLayout) Texture {
|
pub fn asCubemap(self: Image, layout: CubemapLayout) RaylibError!Texture {
|
||||||
return Texture.fromCubemap(self, layout);
|
return Texture.fromCubemap(self, layout);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1175,17 +1186,17 @@ pub const Texture = extern struct {
|
|||||||
mipmaps: c_int,
|
mipmaps: c_int,
|
||||||
format: PixelFormat,
|
format: PixelFormat,
|
||||||
|
|
||||||
pub fn init(fileName: [*:0]const u8) Texture {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Texture {
|
||||||
return rl.loadTexture(fileName);
|
return rl.loadTexture(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load texture from image data
|
/// Load texture from image data
|
||||||
pub fn fromImage(image: Image) Texture {
|
pub fn fromImage(image: Image) RaylibError!Texture {
|
||||||
return rl.loadTextureFromImage(image);
|
return rl.loadTextureFromImage(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load cubemap from image, multiple image cubemap layouts supported
|
/// Load cubemap from image, multiple image cubemap layouts supported
|
||||||
pub fn fromCubemap(image: Image, layout: CubemapLayout) Texture {
|
pub fn fromCubemap(image: Image, layout: CubemapLayout) RaylibError!Texture {
|
||||||
return rl.loadTextureCubemap(image, layout);
|
return rl.loadTextureCubemap(image, layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1232,7 +1243,7 @@ pub const RenderTexture = extern struct {
|
|||||||
texture: Texture,
|
texture: Texture,
|
||||||
depth: Texture,
|
depth: Texture,
|
||||||
|
|
||||||
pub fn init(width: i32, height: i32) RenderTexture {
|
pub fn init(width: i32, height: i32) RaylibError!RenderTexture {
|
||||||
return rl.loadRenderTexture(width, height);
|
return rl.loadRenderTexture(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1279,22 +1290,22 @@ pub const Font = extern struct {
|
|||||||
glyphs: [*c]GlyphInfo,
|
glyphs: [*c]GlyphInfo,
|
||||||
|
|
||||||
/// Load font from file into GPU memory (VRAM)
|
/// Load font from file into GPU memory (VRAM)
|
||||||
pub fn init(fileName: [*:0]const u8) Font {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Font {
|
||||||
return rl.loadFont(fileName);
|
return rl.loadFont(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
||||||
pub fn initEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn initEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
return rl.loadFontEx(fileName, fontSize, fontChars);
|
return rl.loadFontEx(fileName, fontSize, fontChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from Image (XNA style)
|
/// Load font from Image (XNA style)
|
||||||
pub fn fromImage(image: Image, key: Color, firstChar: i32) Font {
|
pub fn fromImage(image: Image, key: Color, firstChar: i32) RaylibError!Font {
|
||||||
return rl.loadFontFromImage(image, key, firstChar);
|
return rl.loadFontFromImage(image, key, firstChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
||||||
pub fn fromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn fromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
return rl.loadFontFromMemory(fileType, fileData, fontSize, fontChars);
|
return rl.loadFontFromMemory(fileType, fileData, fontSize, fontChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1445,12 +1456,12 @@ pub const Model = extern struct {
|
|||||||
bindPose: [*c]Transform,
|
bindPose: [*c]Transform,
|
||||||
|
|
||||||
/// Load model from file (meshes and materials)
|
/// Load model from file (meshes and materials)
|
||||||
pub fn init(fileName: [*:0]const u8) Model {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Model {
|
||||||
return rl.loadModel(fileName);
|
return rl.loadModel(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load model from generated mesh (default material)
|
/// Load model from generated mesh (default material)
|
||||||
pub fn fromMesh(mesh: Mesh) Model {
|
pub fn fromMesh(mesh: Mesh) RaylibError!Model {
|
||||||
return rl.loadModelFromMesh(mesh);
|
return rl.loadModelFromMesh(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1981,7 +1992,7 @@ pub fn setWindowIcons(images: []Image) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Load shader from files and bind default locations
|
/// Load shader from files and bind default locations
|
||||||
pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) Shader {
|
pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) RaylibError!Shader {
|
||||||
var vsFileNameFinal = @as([*c]const u8, 0);
|
var vsFileNameFinal = @as([*c]const u8, 0);
|
||||||
var fsFileNameFinal = @as([*c]const u8, 0);
|
var fsFileNameFinal = @as([*c]const u8, 0);
|
||||||
if (vsFileName) |vsFileNameSure| {
|
if (vsFileName) |vsFileNameSure| {
|
||||||
@ -1990,11 +2001,13 @@ pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) Shader
|
|||||||
if (fsFileName) |fsFileNameSure| {
|
if (fsFileName) |fsFileNameSure| {
|
||||||
fsFileNameFinal = @as([*c]const u8, @ptrCast(fsFileNameSure));
|
fsFileNameFinal = @as([*c]const u8, @ptrCast(fsFileNameSure));
|
||||||
}
|
}
|
||||||
return cdef.LoadShader(vsFileNameFinal, fsFileNameFinal);
|
const shader = cdef.LoadShader(vsFileNameFinal, fsFileNameFinal);
|
||||||
|
const isValid = cdef.IsShaderValid(shader);
|
||||||
|
return if (isValid) shader else RaylibError.LoadShader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load shader from code strings and bind default locations
|
/// Load shader from code strings and bind default locations
|
||||||
pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) Shader {
|
pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) RaylibError!Shader {
|
||||||
var vsCodeFinal = @as([*c]const u8, 0);
|
var vsCodeFinal = @as([*c]const u8, 0);
|
||||||
var fsCodeFinal = @as([*c]const u8, 0);
|
var fsCodeFinal = @as([*c]const u8, 0);
|
||||||
if (vsCode) |vsCodeSure| {
|
if (vsCode) |vsCodeSure| {
|
||||||
@ -2003,7 +2016,9 @@ pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) Shad
|
|||||||
if (fsCode) |fsCodeSure| {
|
if (fsCode) |fsCodeSure| {
|
||||||
fsCodeFinal = @as([*c]const u8, @ptrCast(fsCodeSure));
|
fsCodeFinal = @as([*c]const u8, @ptrCast(fsCodeSure));
|
||||||
}
|
}
|
||||||
return cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal);
|
const shader = cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal);
|
||||||
|
const isValid = cdef.IsShaderValid(shader);
|
||||||
|
return if (isValid) shader else RaylibError.LoadShader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load file data as byte array (read)
|
/// Load file data as byte array (read)
|
||||||
@ -2079,13 +2094,68 @@ pub fn computeSHA1(data: []u8) [5]u32 {
|
|||||||
return res[0..5].*;
|
return res[0..5].*;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn loadImageAnimFromMemory(fileType: [*:0]const u8, fileData: []const u8, frames: *i32) Image {
|
/// Load image from file into CPU memory (RAM)
|
||||||
return cdef.LoadImageAnimFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)), @as([*c]c_int, @ptrCast(frames)));
|
pub fn loadImage(fileName: [*:0]const u8) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImage(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from RAW file data
|
||||||
|
pub fn loadImageRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageRaw(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, width), @as(c_int, height), format, @as(c_int, headerSize));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image sequence from file (frames appended to image.data)
|
||||||
|
pub fn loadImageAnim(fileName: [*:0]const u8, frames: *i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageAnim(@as([*c]const u8, @ptrCast(fileName)), @as([*c]c_int, @ptrCast(frames)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from GPU texture data
|
||||||
|
pub fn loadImageFromTexture(texture: Texture2D) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageFromTexture(texture);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from screen buffer and (screenshot)
|
||||||
|
pub fn loadImageFromScreen() RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageFromScreen();
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn loadImageAnimFromMemory(fileType: [*:0]const u8, fileData: []const u8, frames: *i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageAnimFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)), @as([*c]c_int, @ptrCast(frames)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
/// Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
||||||
pub fn loadImageFromMemory(fileType: [*:0]const u8, fileData: []const u8) Image {
|
pub fn loadImageFromMemory(fileType: [*:0]const u8, fileData: []const u8) RaylibError!Image {
|
||||||
return cdef.LoadImageFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
const image = cdef.LoadImageFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create an image from text (default font)
|
||||||
|
pub fn imageText(text: [*:0]const u8, fontSize: i32, color: Color) RaylibError!Image {
|
||||||
|
// TODO: ImageText requires SUPPORT_MODULE_RTEXT. Error out if not loaded.
|
||||||
|
const image = cdef.ImageText(@as([*c]const u8, @ptrCast(text)), @as(c_int, fontSize), color);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create an image from text (custom sprite font)
|
||||||
|
pub fn imageTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, tint: Color) RaylibError!Image {
|
||||||
|
// TODO: ImageTextEx requires SUPPORT_MODULE_RTEXT. Error out if not loaded.
|
||||||
|
const image = cdef.ImageTextEx(font, @as([*c]const u8, @ptrCast(text)), fontSize, spacing, tint);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load color data from image as a Color array (RGBA - 32bit)
|
/// Load color data from image as a Color array (RGBA - 32bit)
|
||||||
@ -2113,19 +2183,64 @@ pub fn loadImagePalette(image: Image, maxPaletteSize: i32) RaylibError![]Color {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load texture from file into GPU memory (VRAM)
|
||||||
|
pub fn loadTexture(fileName: [*:0]const u8) RaylibError!Texture2D {
|
||||||
|
const texture = cdef.LoadTexture(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load texture from image data
|
||||||
|
pub fn loadTextureFromImage(image: Image) RaylibError!Texture2D {
|
||||||
|
const texture = cdef.LoadTextureFromImage(image);
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load cubemap from image, multiple image cubemap layouts supported
|
||||||
|
pub fn loadTextureCubemap(image: Image, layout: CubemapLayout) RaylibError!TextureCubemap {
|
||||||
|
const texture = cdef.LoadTextureCubemap(image, layout);
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load texture for rendering (framebuffer)
|
||||||
|
pub fn loadRenderTexture(width: i32, height: i32) RaylibError!RenderTexture2D {
|
||||||
|
const render_texture = cdef.LoadRenderTexture(@as(c_int, width), @as(c_int, height));
|
||||||
|
const isValid = cdef.IsRenderTextureValid(render_texture);
|
||||||
|
return if (isValid) render_texture else RaylibError.LoadRenderTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the default Font
|
||||||
|
pub fn getFontDefault() RaylibError!Font {
|
||||||
|
// TODO: GetFontDefault requires SUPPORT_DEFAULT_FONT. Error out if unset.
|
||||||
|
const font = cdef.GetFontDefault();
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load font from file into GPU memory (VRAM)
|
||||||
|
pub fn loadFont(fileName: [*:0]const u8) RaylibError!Font {
|
||||||
|
const font = cdef.LoadFont(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
||||||
pub fn loadFontEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn loadFontEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
var fontCharsFinal = @as([*c]c_int, 0);
|
var fontCharsFinal = @as([*c]c_int, 0);
|
||||||
var fontCharsLen: c_int = @as(c_int, 0);
|
var fontCharsLen: c_int = @as(c_int, 0);
|
||||||
if (fontChars) |fontCharsSure| {
|
if (fontChars) |fontCharsSure| {
|
||||||
fontCharsFinal = @as([*c]c_int, @ptrCast(fontCharsSure));
|
fontCharsFinal = @as([*c]c_int, @ptrCast(fontCharsSure));
|
||||||
fontCharsLen = @as(i32, @intCast(fontCharsSure.len));
|
fontCharsLen = @as(i32, @intCast(fontCharsSure.len));
|
||||||
}
|
}
|
||||||
return cdef.LoadFontEx(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, fontSize), fontCharsFinal, fontCharsLen);
|
const font = cdef.LoadFontEx(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, fontSize), fontCharsFinal, fontCharsLen);
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
||||||
pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
var fileDataFinal = @as([*c]const u8, 0);
|
var fileDataFinal = @as([*c]const u8, 0);
|
||||||
var fileDataLen: i32 = 0;
|
var fileDataLen: i32 = 0;
|
||||||
if (fileData) |fileDataSure| {
|
if (fileData) |fileDataSure| {
|
||||||
@ -2133,7 +2248,16 @@ pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSi
|
|||||||
fileDataLen = @as(i32, @intCast(fileDataSure.len));
|
fileDataLen = @as(i32, @intCast(fileDataSure.len));
|
||||||
}
|
}
|
||||||
const codepointCount: c_int = if (fontChars) |fontCharsSure| @intCast(fontCharsSure.len) else 0;
|
const codepointCount: c_int = if (fontChars) |fontCharsSure| @intCast(fontCharsSure.len) else 0;
|
||||||
return cdef.LoadFontFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileDataFinal)), @as(c_int, @intCast(fileDataLen)), @as(c_int, fontSize), @as([*c]c_int, @ptrCast(fontChars)), codepointCount);
|
const font = cdef.LoadFontFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileDataFinal)), @as(c_int, @intCast(fileDataLen)), @as(c_int, fontSize), @as([*c]c_int, @ptrCast(fontChars)), codepointCount);
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load font from Image (XNA style)
|
||||||
|
pub fn loadFontFromImage(image: Image, key: Color, firstChar: i32) RaylibError!Font {
|
||||||
|
const font = cdef.LoadFontFromImage(image, key, @as(c_int, firstChar));
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font data for further use
|
/// Load font data for further use
|
||||||
@ -2214,6 +2338,13 @@ pub fn drawMeshInstanced(mesh: Mesh, material: Material, transforms: []const Mat
|
|||||||
cdef.DrawMeshInstanced(mesh, material, @as([*c]const Matrix, @ptrCast(transforms)), @as(c_int, @intCast(transforms.len)));
|
cdef.DrawMeshInstanced(mesh, material, @as([*c]const Matrix, @ptrCast(transforms)), @as(c_int, @intCast(transforms.len)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
|
||||||
|
pub fn loadMaterialDefault() RaylibError!Material {
|
||||||
|
const material = cdef.LoadMaterialDefault();
|
||||||
|
const isValid = cdef.IsMaterialValid(material);
|
||||||
|
return if (isValid) material else RaylibError.LoadMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load materials from model file
|
/// Load materials from model file
|
||||||
pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
||||||
var materialCount: i32 = 0;
|
var materialCount: i32 = 0;
|
||||||
@ -2224,9 +2355,29 @@ pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
|||||||
|
|
||||||
res.ptr = @as([*]Material, @ptrCast(ptr));
|
res.ptr = @as([*]Material, @ptrCast(ptr));
|
||||||
res.len = @as(usize, @intCast(materialCount));
|
res.len = @as(usize, @intCast(materialCount));
|
||||||
|
|
||||||
|
for (res) |r| {
|
||||||
|
if (!cdef.IsMaterialValid(r))
|
||||||
|
return RaylibError.LoadMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load model from files (meshes and materials)
|
||||||
|
pub fn loadModel(fileName: [*:0]const u8) RaylibError!Model {
|
||||||
|
const model = cdef.LoadModel(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsModelValid(model);
|
||||||
|
return if (isValid) model else RaylibError.LoadModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load model from generated mesh (default material)
|
||||||
|
pub fn loadModelFromMesh(mesh: Mesh) RaylibError!Model {
|
||||||
|
const model = cdef.LoadModelFromMesh(mesh);
|
||||||
|
const isValid = cdef.IsModelValid(model);
|
||||||
|
return if (isValid) model else RaylibError.LoadModel;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load model animations from file
|
/// Load model animations from file
|
||||||
pub fn loadModelAnimations(fileName: [*:0]const u8) RaylibError![]ModelAnimation {
|
pub fn loadModelAnimations(fileName: [*:0]const u8) RaylibError![]ModelAnimation {
|
||||||
var animCount: i32 = 0;
|
var animCount: i32 = 0;
|
||||||
@ -2245,9 +2396,25 @@ pub fn unloadModelAnimations(animations: []ModelAnimation) void {
|
|||||||
cdef.UnloadModelAnimations(@as([*c]ModelAnimation, @ptrCast(animations)), @as(c_int, @intCast(animations.len)));
|
cdef.UnloadModelAnimations(@as([*c]ModelAnimation, @ptrCast(animations)), @as(c_int, @intCast(animations.len)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load sound from file
|
||||||
|
pub fn loadSound(fileName: [*:0]const u8) RaylibError!Sound {
|
||||||
|
const sound = cdef.LoadSound(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsSoundValid(sound);
|
||||||
|
return if (isValid) sound else RaylibError.LoadSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load wave data from file
|
||||||
|
pub fn loadWave(fileName: [*:0]const u8) RaylibError!Wave {
|
||||||
|
const wave = cdef.LoadWave(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsWaveValid(wave);
|
||||||
|
return if (isValid) wave else RaylibError.LoadWave;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
|
/// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
|
||||||
pub fn loadWaveFromMemory(fileType: [*:0]const u8, fileData: []const u8) Wave {
|
pub fn loadWaveFromMemory(fileType: [*:0]const u8, fileData: []const u8) RaylibError!Wave {
|
||||||
return cdef.LoadWaveFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
const wave = cdef.LoadWaveFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
||||||
|
const isValid = cdef.IsWaveValid(wave);
|
||||||
|
return if (isValid) wave else RaylibError.LoadWave;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load samples data from wave as a 32bit float data array
|
/// Load samples data from wave as a 32bit float data array
|
||||||
@ -2258,9 +2425,25 @@ pub fn loadWaveSamples(wave: Wave) []f32 {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load music stream from file
|
||||||
|
pub fn loadMusicStream(fileName: [*:0]const u8) RaylibError!Music {
|
||||||
|
const music = cdef.LoadMusicStream(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsMusicValid(music);
|
||||||
|
return if (isValid) music else RaylibError.LoadMusic;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load music stream from data
|
/// Load music stream from data
|
||||||
pub fn loadMusicStreamFromMemory(fileType: [*:0]const u8, data: []const u8) Music {
|
pub fn loadMusicStreamFromMemory(fileType: [*:0]const u8, data: []const u8) RaylibError!Music {
|
||||||
return cdef.LoadMusicStreamFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(data)), @as(c_int, @intCast(data.len)));
|
const music = cdef.LoadMusicStreamFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(data)), @as(c_int, @intCast(data.len)));
|
||||||
|
const isValid = cdef.IsMusicValid(music);
|
||||||
|
return if (isValid) music else RaylibError.LoadMusic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load audio stream (to stream raw audio pcm data)
|
||||||
|
pub fn loadAudioStream(sampleRate: u32, sampleSize: u32, channels: u32) RaylibError!AudioStream {
|
||||||
|
const audio_stream = cdef.LoadAudioStream(@as(c_uint, sampleRate), @as(c_uint, sampleSize), @as(c_uint, channels));
|
||||||
|
const isValid = cdef.IsAudioStreamValid(audio_stream);
|
||||||
|
return if (isValid) audio_stream else RaylibError.LoadAudioStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw lines sequence (using gl lines)
|
/// Draw lines sequence (using gl lines)
|
||||||
@ -2313,8 +2496,10 @@ pub fn imageKernelConvolution(image: *Image, kernel: []const f32) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Generate image font atlas using chars info
|
/// Generate image font atlas using chars info
|
||||||
pub fn genImageFontAtlas(chars: []const GlyphInfo, recs: [][]Rectangle, fontSize: i32, padding: i32, packMethod: i32) Image {
|
pub fn genImageFontAtlas(chars: []const GlyphInfo, recs: [][]Rectangle, fontSize: i32, padding: i32, packMethod: i32) RaylibError!Image {
|
||||||
return cdef.GenImageFontAtlas(@as([*c]const GlyphInfo, @ptrCast(chars)), @as([*c][*c]Rectangle, @ptrCast(recs)), @as(c_int, @intCast(recs.len)), @as(c_int, fontSize), @as(c_int, padding), @as(c_int, packMethod));
|
const image = cdef.GenImageFontAtlas(@as([*c]const GlyphInfo, @ptrCast(chars)), @as([*c][*c]Rectangle, @ptrCast(recs)), @as(c_int, @intCast(recs.len)), @as(c_int, fontSize), @as(c_int, padding), @as(c_int, packMethod));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unload font chars info data (RAM)
|
/// Unload font chars info data (RAM)
|
||||||
|
|||||||
364
lib/raylib.zig
364
lib/raylib.zig
@ -16,10 +16,21 @@ pub const RaylibError = error{
|
|||||||
LoadFileData,
|
LoadFileData,
|
||||||
LoadImageColors,
|
LoadImageColors,
|
||||||
LoadImagePalette,
|
LoadImagePalette,
|
||||||
|
LoadFont,
|
||||||
LoadFontData,
|
LoadFontData,
|
||||||
LoadCodepoints,
|
LoadCodepoints,
|
||||||
|
LoadMaterial,
|
||||||
LoadMaterials,
|
LoadMaterials,
|
||||||
LoadModelAnimations,
|
LoadModelAnimations,
|
||||||
|
LoadShader,
|
||||||
|
LoadImage,
|
||||||
|
LoadModel,
|
||||||
|
LoadTexture,
|
||||||
|
LoadRenderTexture,
|
||||||
|
LoadWave,
|
||||||
|
LoadSound,
|
||||||
|
LoadMusic,
|
||||||
|
LoadAudioStream,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Vector2 = extern struct {
|
pub const Vector2 = extern struct {
|
||||||
@ -839,27 +850,27 @@ pub const Image = extern struct {
|
|||||||
format: PixelFormat,
|
format: PixelFormat,
|
||||||
|
|
||||||
/// Load image from file into CPU memory (RAM)
|
/// Load image from file into CPU memory (RAM)
|
||||||
pub fn init(fileName: [*:0]const u8) Image {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Image {
|
||||||
return rl.loadImage(fileName);
|
return rl.loadImage(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from RAW file data
|
/// Load image from RAW file data
|
||||||
pub fn initRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) Image {
|
pub fn initRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) RaylibError!Image {
|
||||||
return rl.loadImageRaw(fileName, width, height, format, headerSize);
|
return rl.loadImageRaw(fileName, width, height, format, headerSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image sequence from file (frames appended to image.data)
|
/// Load image sequence from file (frames appended to image.data)
|
||||||
pub fn initAnim(fileName: [*:0]const u8, frames: *i32) Image {
|
pub fn initAnim(fileName: [*:0]const u8, frames: *i32) RaylibError!Image {
|
||||||
return rl.loadImageAnim(fileName, frames);
|
return rl.loadImageAnim(fileName, frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from GPU texture data
|
/// Load image from GPU texture data
|
||||||
pub fn fromTexture(texture: Texture) Image {
|
pub fn fromTexture(texture: Texture) RaylibError!Image {
|
||||||
return rl.loadImageFromTexture(texture);
|
return rl.loadImageFromTexture(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from screen buffer and (screenshot)
|
/// Load image from screen buffer and (screenshot)
|
||||||
pub fn fromScreen() Image {
|
pub fn fromScreen() RaylibError!Image {
|
||||||
return rl.loadImageFromScreen();
|
return rl.loadImageFromScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -869,12 +880,12 @@ pub const Image = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create an image from text (default font)
|
/// Create an image from text (default font)
|
||||||
pub fn initText(text: [*:0]const u8, fontSize: i32, color: Color) Image {
|
pub fn initText(text: [*:0]const u8, fontSize: i32, color: Color) RaylibError!Image {
|
||||||
return rl.imageText(text, fontSize, color);
|
return rl.imageText(text, fontSize, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create an image from text (custom sprite font)
|
/// Create an image from text (custom sprite font)
|
||||||
pub fn initTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, t: Color) Image {
|
pub fn initTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, t: Color) RaylibError!Image {
|
||||||
return rl.imageTextEx(font, text, fontSize, spacing, t);
|
return rl.imageTextEx(font, text, fontSize, spacing, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1159,11 +1170,11 @@ pub const Image = extern struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Load texture from image data
|
/// Load texture from image data
|
||||||
pub fn toTexture(self: Image) Texture {
|
pub fn toTexture(self: Image) RaylibError!Texture {
|
||||||
return Texture.fromImage(self);
|
return Texture.fromImage(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn asCubemap(self: Image, layout: CubemapLayout) Texture {
|
pub fn asCubemap(self: Image, layout: CubemapLayout) RaylibError!Texture {
|
||||||
return Texture.fromCubemap(self, layout);
|
return Texture.fromCubemap(self, layout);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1175,17 +1186,17 @@ pub const Texture = extern struct {
|
|||||||
mipmaps: c_int,
|
mipmaps: c_int,
|
||||||
format: PixelFormat,
|
format: PixelFormat,
|
||||||
|
|
||||||
pub fn init(fileName: [*:0]const u8) Texture {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Texture {
|
||||||
return rl.loadTexture(fileName);
|
return rl.loadTexture(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load texture from image data
|
/// Load texture from image data
|
||||||
pub fn fromImage(image: Image) Texture {
|
pub fn fromImage(image: Image) RaylibError!Texture {
|
||||||
return rl.loadTextureFromImage(image);
|
return rl.loadTextureFromImage(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load cubemap from image, multiple image cubemap layouts supported
|
/// Load cubemap from image, multiple image cubemap layouts supported
|
||||||
pub fn fromCubemap(image: Image, layout: CubemapLayout) Texture {
|
pub fn fromCubemap(image: Image, layout: CubemapLayout) RaylibError!Texture {
|
||||||
return rl.loadTextureCubemap(image, layout);
|
return rl.loadTextureCubemap(image, layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1232,7 +1243,7 @@ pub const RenderTexture = extern struct {
|
|||||||
texture: Texture,
|
texture: Texture,
|
||||||
depth: Texture,
|
depth: Texture,
|
||||||
|
|
||||||
pub fn init(width: i32, height: i32) RenderTexture {
|
pub fn init(width: i32, height: i32) RaylibError!RenderTexture {
|
||||||
return rl.loadRenderTexture(width, height);
|
return rl.loadRenderTexture(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1279,22 +1290,22 @@ pub const Font = extern struct {
|
|||||||
glyphs: [*c]GlyphInfo,
|
glyphs: [*c]GlyphInfo,
|
||||||
|
|
||||||
/// Load font from file into GPU memory (VRAM)
|
/// Load font from file into GPU memory (VRAM)
|
||||||
pub fn init(fileName: [*:0]const u8) Font {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Font {
|
||||||
return rl.loadFont(fileName);
|
return rl.loadFont(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
||||||
pub fn initEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn initEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
return rl.loadFontEx(fileName, fontSize, fontChars);
|
return rl.loadFontEx(fileName, fontSize, fontChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from Image (XNA style)
|
/// Load font from Image (XNA style)
|
||||||
pub fn fromImage(image: Image, key: Color, firstChar: i32) Font {
|
pub fn fromImage(image: Image, key: Color, firstChar: i32) RaylibError!Font {
|
||||||
return rl.loadFontFromImage(image, key, firstChar);
|
return rl.loadFontFromImage(image, key, firstChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
||||||
pub fn fromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn fromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
return rl.loadFontFromMemory(fileType, fileData, fontSize, fontChars);
|
return rl.loadFontFromMemory(fileType, fileData, fontSize, fontChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1445,12 +1456,12 @@ pub const Model = extern struct {
|
|||||||
bindPose: [*c]Transform,
|
bindPose: [*c]Transform,
|
||||||
|
|
||||||
/// Load model from file (meshes and materials)
|
/// Load model from file (meshes and materials)
|
||||||
pub fn init(fileName: [*:0]const u8) Model {
|
pub fn init(fileName: [*:0]const u8) RaylibError!Model {
|
||||||
return rl.loadModel(fileName);
|
return rl.loadModel(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load model from generated mesh (default material)
|
/// Load model from generated mesh (default material)
|
||||||
pub fn fromMesh(mesh: Mesh) Model {
|
pub fn fromMesh(mesh: Mesh) RaylibError!Model {
|
||||||
return rl.loadModelFromMesh(mesh);
|
return rl.loadModelFromMesh(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1981,7 +1992,7 @@ pub fn setWindowIcons(images: []Image) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Load shader from files and bind default locations
|
/// Load shader from files and bind default locations
|
||||||
pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) Shader {
|
pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) RaylibError!Shader {
|
||||||
var vsFileNameFinal = @as([*c]const u8, 0);
|
var vsFileNameFinal = @as([*c]const u8, 0);
|
||||||
var fsFileNameFinal = @as([*c]const u8, 0);
|
var fsFileNameFinal = @as([*c]const u8, 0);
|
||||||
if (vsFileName) |vsFileNameSure| {
|
if (vsFileName) |vsFileNameSure| {
|
||||||
@ -1990,11 +2001,13 @@ pub fn loadShader(vsFileName: ?[*:0]const u8, fsFileName: ?[*:0]const u8) Shader
|
|||||||
if (fsFileName) |fsFileNameSure| {
|
if (fsFileName) |fsFileNameSure| {
|
||||||
fsFileNameFinal = @as([*c]const u8, @ptrCast(fsFileNameSure));
|
fsFileNameFinal = @as([*c]const u8, @ptrCast(fsFileNameSure));
|
||||||
}
|
}
|
||||||
return cdef.LoadShader(vsFileNameFinal, fsFileNameFinal);
|
const shader = cdef.LoadShader(vsFileNameFinal, fsFileNameFinal);
|
||||||
|
const isValid = cdef.IsShaderValid(shader);
|
||||||
|
return if (isValid) shader else RaylibError.LoadShader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load shader from code strings and bind default locations
|
/// Load shader from code strings and bind default locations
|
||||||
pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) Shader {
|
pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) RaylibError!Shader {
|
||||||
var vsCodeFinal = @as([*c]const u8, 0);
|
var vsCodeFinal = @as([*c]const u8, 0);
|
||||||
var fsCodeFinal = @as([*c]const u8, 0);
|
var fsCodeFinal = @as([*c]const u8, 0);
|
||||||
if (vsCode) |vsCodeSure| {
|
if (vsCode) |vsCodeSure| {
|
||||||
@ -2003,7 +2016,9 @@ pub fn loadShaderFromMemory(vsCode: ?[*:0]const u8, fsCode: ?[*:0]const u8) Shad
|
|||||||
if (fsCode) |fsCodeSure| {
|
if (fsCode) |fsCodeSure| {
|
||||||
fsCodeFinal = @as([*c]const u8, @ptrCast(fsCodeSure));
|
fsCodeFinal = @as([*c]const u8, @ptrCast(fsCodeSure));
|
||||||
}
|
}
|
||||||
return cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal);
|
const shader = cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal);
|
||||||
|
const isValid = cdef.IsShaderValid(shader);
|
||||||
|
return if (isValid) shader else RaylibError.LoadShader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load file data as byte array (read)
|
/// Load file data as byte array (read)
|
||||||
@ -2079,13 +2094,68 @@ pub fn computeSHA1(data: []u8) [5]u32 {
|
|||||||
return res[0..5].*;
|
return res[0..5].*;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn loadImageAnimFromMemory(fileType: [*:0]const u8, fileData: []const u8, frames: *i32) Image {
|
/// Load image from file into CPU memory (RAM)
|
||||||
return cdef.LoadImageAnimFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)), @as([*c]c_int, @ptrCast(frames)));
|
pub fn loadImage(fileName: [*:0]const u8) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImage(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from RAW file data
|
||||||
|
pub fn loadImageRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageRaw(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, width), @as(c_int, height), format, @as(c_int, headerSize));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image sequence from file (frames appended to image.data)
|
||||||
|
pub fn loadImageAnim(fileName: [*:0]const u8, frames: *i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageAnim(@as([*c]const u8, @ptrCast(fileName)), @as([*c]c_int, @ptrCast(frames)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from GPU texture data
|
||||||
|
pub fn loadImageFromTexture(texture: Texture2D) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageFromTexture(texture);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load image from screen buffer and (screenshot)
|
||||||
|
pub fn loadImageFromScreen() RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageFromScreen();
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn loadImageAnimFromMemory(fileType: [*:0]const u8, fileData: []const u8, frames: *i32) RaylibError!Image {
|
||||||
|
const image = cdef.LoadImageAnimFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)), @as([*c]c_int, @ptrCast(frames)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
/// Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
||||||
pub fn loadImageFromMemory(fileType: [*:0]const u8, fileData: []const u8) Image {
|
pub fn loadImageFromMemory(fileType: [*:0]const u8, fileData: []const u8) RaylibError!Image {
|
||||||
return cdef.LoadImageFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
const image = cdef.LoadImageFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create an image from text (default font)
|
||||||
|
pub fn imageText(text: [*:0]const u8, fontSize: i32, color: Color) RaylibError!Image {
|
||||||
|
// TODO: ImageText requires SUPPORT_MODULE_RTEXT. Error out if not loaded.
|
||||||
|
const image = cdef.ImageText(@as([*c]const u8, @ptrCast(text)), @as(c_int, fontSize), color);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create an image from text (custom sprite font)
|
||||||
|
pub fn imageTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, tint: Color) RaylibError!Image {
|
||||||
|
// TODO: ImageTextEx requires SUPPORT_MODULE_RTEXT. Error out if not loaded.
|
||||||
|
const image = cdef.ImageTextEx(font, @as([*c]const u8, @ptrCast(text)), fontSize, spacing, tint);
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load color data from image as a Color array (RGBA - 32bit)
|
/// Load color data from image as a Color array (RGBA - 32bit)
|
||||||
@ -2113,19 +2183,64 @@ pub fn loadImagePalette(image: Image, maxPaletteSize: i32) RaylibError![]Color {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load texture from file into GPU memory (VRAM)
|
||||||
|
pub fn loadTexture(fileName: [*:0]const u8) RaylibError!Texture2D {
|
||||||
|
const texture = cdef.LoadTexture(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load texture from image data
|
||||||
|
pub fn loadTextureFromImage(image: Image) RaylibError!Texture2D {
|
||||||
|
const texture = cdef.LoadTextureFromImage(image);
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load cubemap from image, multiple image cubemap layouts supported
|
||||||
|
pub fn loadTextureCubemap(image: Image, layout: CubemapLayout) RaylibError!TextureCubemap {
|
||||||
|
const texture = cdef.LoadTextureCubemap(image, layout);
|
||||||
|
const isValid = cdef.IsTextureValid(texture);
|
||||||
|
return if (isValid) texture else RaylibError.LoadTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load texture for rendering (framebuffer)
|
||||||
|
pub fn loadRenderTexture(width: i32, height: i32) RaylibError!RenderTexture2D {
|
||||||
|
const render_texture = cdef.LoadRenderTexture(@as(c_int, width), @as(c_int, height));
|
||||||
|
const isValid = cdef.IsRenderTextureValid(render_texture);
|
||||||
|
return if (isValid) render_texture else RaylibError.LoadRenderTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the default Font
|
||||||
|
pub fn getFontDefault() RaylibError!Font {
|
||||||
|
// TODO: GetFontDefault requires SUPPORT_DEFAULT_FONT. Error out if unset.
|
||||||
|
const font = cdef.GetFontDefault();
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load font from file into GPU memory (VRAM)
|
||||||
|
pub fn loadFont(fileName: [*:0]const u8) RaylibError!Font {
|
||||||
|
const font = cdef.LoadFont(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
/// Load font from file with extended parameters, use null for fontChars to load the default character set
|
||||||
pub fn loadFontEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn loadFontEx(fileName: [*:0]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
var fontCharsFinal = @as([*c]c_int, 0);
|
var fontCharsFinal = @as([*c]c_int, 0);
|
||||||
var fontCharsLen: c_int = @as(c_int, 0);
|
var fontCharsLen: c_int = @as(c_int, 0);
|
||||||
if (fontChars) |fontCharsSure| {
|
if (fontChars) |fontCharsSure| {
|
||||||
fontCharsFinal = @as([*c]c_int, @ptrCast(fontCharsSure));
|
fontCharsFinal = @as([*c]c_int, @ptrCast(fontCharsSure));
|
||||||
fontCharsLen = @as(i32, @intCast(fontCharsSure.len));
|
fontCharsLen = @as(i32, @intCast(fontCharsSure.len));
|
||||||
}
|
}
|
||||||
return cdef.LoadFontEx(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, fontSize), fontCharsFinal, fontCharsLen);
|
const font = cdef.LoadFontEx(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, fontSize), fontCharsFinal, fontCharsLen);
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
||||||
pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) Font {
|
pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSize: i32, fontChars: ?[]i32) RaylibError!Font {
|
||||||
var fileDataFinal = @as([*c]const u8, 0);
|
var fileDataFinal = @as([*c]const u8, 0);
|
||||||
var fileDataLen: i32 = 0;
|
var fileDataLen: i32 = 0;
|
||||||
if (fileData) |fileDataSure| {
|
if (fileData) |fileDataSure| {
|
||||||
@ -2133,7 +2248,16 @@ pub fn loadFontFromMemory(fileType: [*:0]const u8, fileData: ?[]const u8, fontSi
|
|||||||
fileDataLen = @as(i32, @intCast(fileDataSure.len));
|
fileDataLen = @as(i32, @intCast(fileDataSure.len));
|
||||||
}
|
}
|
||||||
const codepointCount: c_int = if (fontChars) |fontCharsSure| @intCast(fontCharsSure.len) else 0;
|
const codepointCount: c_int = if (fontChars) |fontCharsSure| @intCast(fontCharsSure.len) else 0;
|
||||||
return cdef.LoadFontFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileDataFinal)), @as(c_int, @intCast(fileDataLen)), @as(c_int, fontSize), @as([*c]c_int, @ptrCast(fontChars)), codepointCount);
|
const font = cdef.LoadFontFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileDataFinal)), @as(c_int, @intCast(fileDataLen)), @as(c_int, fontSize), @as([*c]c_int, @ptrCast(fontChars)), codepointCount);
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load font from Image (XNA style)
|
||||||
|
pub fn loadFontFromImage(image: Image, key: Color, firstChar: i32) RaylibError!Font {
|
||||||
|
const font = cdef.LoadFontFromImage(image, key, @as(c_int, firstChar));
|
||||||
|
const isValid = cdef.IsFontValid(font);
|
||||||
|
return if (isValid) font else RaylibError.LoadFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load font data for further use
|
/// Load font data for further use
|
||||||
@ -2214,6 +2338,13 @@ pub fn drawMeshInstanced(mesh: Mesh, material: Material, transforms: []const Mat
|
|||||||
cdef.DrawMeshInstanced(mesh, material, @as([*c]const Matrix, @ptrCast(transforms)), @as(c_int, @intCast(transforms.len)));
|
cdef.DrawMeshInstanced(mesh, material, @as([*c]const Matrix, @ptrCast(transforms)), @as(c_int, @intCast(transforms.len)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
|
||||||
|
pub fn loadMaterialDefault() RaylibError!Material {
|
||||||
|
const material = cdef.LoadMaterialDefault();
|
||||||
|
const isValid = cdef.IsMaterialValid(material);
|
||||||
|
return if (isValid) material else RaylibError.LoadMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load materials from model file
|
/// Load materials from model file
|
||||||
pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
||||||
var materialCount: i32 = 0;
|
var materialCount: i32 = 0;
|
||||||
@ -2224,9 +2355,29 @@ pub fn loadMaterials(fileName: [*:0]const u8) RaylibError![]Material {
|
|||||||
|
|
||||||
res.ptr = @as([*]Material, @ptrCast(ptr));
|
res.ptr = @as([*]Material, @ptrCast(ptr));
|
||||||
res.len = @as(usize, @intCast(materialCount));
|
res.len = @as(usize, @intCast(materialCount));
|
||||||
|
|
||||||
|
for (res) |r| {
|
||||||
|
if (!cdef.IsMaterialValid(r))
|
||||||
|
return RaylibError.LoadMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load model from files (meshes and materials)
|
||||||
|
pub fn loadModel(fileName: [*:0]const u8) RaylibError!Model {
|
||||||
|
const model = cdef.LoadModel(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsModelValid(model);
|
||||||
|
return if (isValid) model else RaylibError.LoadModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load model from generated mesh (default material)
|
||||||
|
pub fn loadModelFromMesh(mesh: Mesh) RaylibError!Model {
|
||||||
|
const model = cdef.LoadModelFromMesh(mesh);
|
||||||
|
const isValid = cdef.IsModelValid(model);
|
||||||
|
return if (isValid) model else RaylibError.LoadModel;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load model animations from file
|
/// Load model animations from file
|
||||||
pub fn loadModelAnimations(fileName: [*:0]const u8) RaylibError![]ModelAnimation {
|
pub fn loadModelAnimations(fileName: [*:0]const u8) RaylibError![]ModelAnimation {
|
||||||
var animCount: i32 = 0;
|
var animCount: i32 = 0;
|
||||||
@ -2245,9 +2396,25 @@ pub fn unloadModelAnimations(animations: []ModelAnimation) void {
|
|||||||
cdef.UnloadModelAnimations(@as([*c]ModelAnimation, @ptrCast(animations)), @as(c_int, @intCast(animations.len)));
|
cdef.UnloadModelAnimations(@as([*c]ModelAnimation, @ptrCast(animations)), @as(c_int, @intCast(animations.len)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load sound from file
|
||||||
|
pub fn loadSound(fileName: [*:0]const u8) RaylibError!Sound {
|
||||||
|
const sound = cdef.LoadSound(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsSoundValid(sound);
|
||||||
|
return if (isValid) sound else RaylibError.LoadSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load wave data from file
|
||||||
|
pub fn loadWave(fileName: [*:0]const u8) RaylibError!Wave {
|
||||||
|
const wave = cdef.LoadWave(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsWaveValid(wave);
|
||||||
|
return if (isValid) wave else RaylibError.LoadWave;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
|
/// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
|
||||||
pub fn loadWaveFromMemory(fileType: [*:0]const u8, fileData: []const u8) Wave {
|
pub fn loadWaveFromMemory(fileType: [*:0]const u8, fileData: []const u8) RaylibError!Wave {
|
||||||
return cdef.LoadWaveFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
const wave = cdef.LoadWaveFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(fileData)), @as(c_int, @intCast(fileData.len)));
|
||||||
|
const isValid = cdef.IsWaveValid(wave);
|
||||||
|
return if (isValid) wave else RaylibError.LoadWave;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load samples data from wave as a 32bit float data array
|
/// Load samples data from wave as a 32bit float data array
|
||||||
@ -2258,9 +2425,25 @@ pub fn loadWaveSamples(wave: Wave) []f32 {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Load music stream from file
|
||||||
|
pub fn loadMusicStream(fileName: [*:0]const u8) RaylibError!Music {
|
||||||
|
const music = cdef.LoadMusicStream(@as([*c]const u8, @ptrCast(fileName)));
|
||||||
|
const isValid = cdef.IsMusicValid(music);
|
||||||
|
return if (isValid) music else RaylibError.LoadMusic;
|
||||||
|
}
|
||||||
|
|
||||||
/// Load music stream from data
|
/// Load music stream from data
|
||||||
pub fn loadMusicStreamFromMemory(fileType: [*:0]const u8, data: []const u8) Music {
|
pub fn loadMusicStreamFromMemory(fileType: [*:0]const u8, data: []const u8) RaylibError!Music {
|
||||||
return cdef.LoadMusicStreamFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(data)), @as(c_int, @intCast(data.len)));
|
const music = cdef.LoadMusicStreamFromMemory(@as([*c]const u8, @ptrCast(fileType)), @as([*c]const u8, @ptrCast(data)), @as(c_int, @intCast(data.len)));
|
||||||
|
const isValid = cdef.IsMusicValid(music);
|
||||||
|
return if (isValid) music else RaylibError.LoadMusic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load audio stream (to stream raw audio pcm data)
|
||||||
|
pub fn loadAudioStream(sampleRate: u32, sampleSize: u32, channels: u32) RaylibError!AudioStream {
|
||||||
|
const audio_stream = cdef.LoadAudioStream(@as(c_uint, sampleRate), @as(c_uint, sampleSize), @as(c_uint, channels));
|
||||||
|
const isValid = cdef.IsAudioStreamValid(audio_stream);
|
||||||
|
return if (isValid) audio_stream else RaylibError.LoadAudioStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw lines sequence (using gl lines)
|
/// Draw lines sequence (using gl lines)
|
||||||
@ -2313,8 +2496,10 @@ pub fn imageKernelConvolution(image: *Image, kernel: []const f32) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Generate image font atlas using chars info
|
/// Generate image font atlas using chars info
|
||||||
pub fn genImageFontAtlas(chars: []const GlyphInfo, recs: [][]Rectangle, fontSize: i32, padding: i32, packMethod: i32) Image {
|
pub fn genImageFontAtlas(chars: []const GlyphInfo, recs: [][]Rectangle, fontSize: i32, padding: i32, packMethod: i32) RaylibError!Image {
|
||||||
return cdef.GenImageFontAtlas(@as([*c]const GlyphInfo, @ptrCast(chars)), @as([*c][*c]Rectangle, @ptrCast(recs)), @as(c_int, @intCast(recs.len)), @as(c_int, fontSize), @as(c_int, padding), @as(c_int, packMethod));
|
const image = cdef.GenImageFontAtlas(@as([*c]const GlyphInfo, @ptrCast(chars)), @as([*c][*c]Rectangle, @ptrCast(recs)), @as(c_int, @intCast(recs.len)), @as(c_int, fontSize), @as(c_int, padding), @as(c_int, packMethod));
|
||||||
|
const isValid = cdef.IsImageValid(image);
|
||||||
|
return if (isValid) image else RaylibError.LoadImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unload font chars info data (RAM)
|
/// Unload font chars info data (RAM)
|
||||||
@ -3613,31 +3798,6 @@ pub fn getCollisionRec(rec1: Rectangle, rec2: Rectangle) Rectangle {
|
|||||||
return cdef.GetCollisionRec(rec1, rec2);
|
return cdef.GetCollisionRec(rec1, rec2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load image from file into CPU memory (RAM)
|
|
||||||
pub fn loadImage(fileName: [*:0]const u8) Image {
|
|
||||||
return cdef.LoadImage(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load image from RAW file data
|
|
||||||
pub fn loadImageRaw(fileName: [*:0]const u8, width: i32, height: i32, format: PixelFormat, headerSize: i32) Image {
|
|
||||||
return cdef.LoadImageRaw(@as([*c]const u8, @ptrCast(fileName)), @as(c_int, width), @as(c_int, height), format, @as(c_int, headerSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load image sequence from file (frames appended to image.data)
|
|
||||||
pub fn loadImageAnim(fileName: [*:0]const u8, frames: *i32) Image {
|
|
||||||
return cdef.LoadImageAnim(@as([*c]const u8, @ptrCast(fileName)), @as([*c]c_int, @ptrCast(frames)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load image from GPU texture data
|
|
||||||
pub fn loadImageFromTexture(texture: Texture2D) Image {
|
|
||||||
return cdef.LoadImageFromTexture(texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load image from screen buffer and (screenshot)
|
|
||||||
pub fn loadImageFromScreen() Image {
|
|
||||||
return cdef.LoadImageFromScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if an image is valid (data and parameters)
|
/// Check if an image is valid (data and parameters)
|
||||||
pub fn isImageValid(image: Image) bool {
|
pub fn isImageValid(image: Image) bool {
|
||||||
return cdef.IsImageValid(image);
|
return cdef.IsImageValid(image);
|
||||||
@ -3723,16 +3883,6 @@ pub fn imageFromChannel(image: Image, selectedChannel: i32) Image {
|
|||||||
return cdef.ImageFromChannel(image, @as(c_int, selectedChannel));
|
return cdef.ImageFromChannel(image, @as(c_int, selectedChannel));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create an image from text (default font)
|
|
||||||
pub fn imageText(text: [*:0]const u8, fontSize: i32, color: Color) Image {
|
|
||||||
return cdef.ImageText(@as([*c]const u8, @ptrCast(text)), @as(c_int, fontSize), color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Create an image from text (custom sprite font)
|
|
||||||
pub fn imageTextEx(font: Font, text: [*:0]const u8, fontSize: f32, spacing: f32, tint: Color) Image {
|
|
||||||
return cdef.ImageTextEx(font, @as([*c]const u8, @ptrCast(text)), fontSize, spacing, tint);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert image data to desired format
|
/// Convert image data to desired format
|
||||||
pub fn imageFormat(image: *Image, newFormat: PixelFormat) void {
|
pub fn imageFormat(image: *Image, newFormat: PixelFormat) void {
|
||||||
cdef.ImageFormat(@as([*c]Image, @ptrCast(image)), newFormat);
|
cdef.ImageFormat(@as([*c]Image, @ptrCast(image)), newFormat);
|
||||||
@ -3983,26 +4133,6 @@ pub fn imageDrawTextEx(dst: *Image, font: Font, text: [*:0]const u8, position: V
|
|||||||
cdef.ImageDrawTextEx(@as([*c]Image, @ptrCast(dst)), font, @as([*c]const u8, @ptrCast(text)), position, fontSize, spacing, tint);
|
cdef.ImageDrawTextEx(@as([*c]Image, @ptrCast(dst)), font, @as([*c]const u8, @ptrCast(text)), position, fontSize, spacing, tint);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load texture from file into GPU memory (VRAM)
|
|
||||||
pub fn loadTexture(fileName: [*:0]const u8) Texture2D {
|
|
||||||
return cdef.LoadTexture(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load texture from image data
|
|
||||||
pub fn loadTextureFromImage(image: Image) Texture2D {
|
|
||||||
return cdef.LoadTextureFromImage(image);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load cubemap from image, multiple image cubemap layouts supported
|
|
||||||
pub fn loadTextureCubemap(image: Image, layout: CubemapLayout) TextureCubemap {
|
|
||||||
return cdef.LoadTextureCubemap(image, layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load texture for rendering (framebuffer)
|
|
||||||
pub fn loadRenderTexture(width: i32, height: i32) RenderTexture2D {
|
|
||||||
return cdef.LoadRenderTexture(@as(c_int, width), @as(c_int, height));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if a texture is valid (loaded in GPU)
|
/// Check if a texture is valid (loaded in GPU)
|
||||||
pub fn isTextureValid(texture: Texture2D) bool {
|
pub fn isTextureValid(texture: Texture2D) bool {
|
||||||
return cdef.IsTextureValid(texture);
|
return cdef.IsTextureValid(texture);
|
||||||
@ -4163,21 +4293,6 @@ pub fn getPixelDataSize(width: i32, height: i32, format: PixelFormat) i32 {
|
|||||||
return @as(i32, cdef.GetPixelDataSize(@as(c_int, width), @as(c_int, height), format));
|
return @as(i32, cdef.GetPixelDataSize(@as(c_int, width), @as(c_int, height), format));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the default Font
|
|
||||||
pub fn getFontDefault() Font {
|
|
||||||
return cdef.GetFontDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load font from file into GPU memory (VRAM)
|
|
||||||
pub fn loadFont(fileName: [*:0]const u8) Font {
|
|
||||||
return cdef.LoadFont(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load font from Image (XNA style)
|
|
||||||
pub fn loadFontFromImage(image: Image, key: Color, firstChar: i32) Font {
|
|
||||||
return cdef.LoadFontFromImage(image, key, @as(c_int, firstChar));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if a font is valid (font data loaded, WARNING: GPU texture not checked)
|
/// Check if a font is valid (font data loaded, WARNING: GPU texture not checked)
|
||||||
pub fn isFontValid(font: Font) bool {
|
pub fn isFontValid(font: Font) bool {
|
||||||
return cdef.IsFontValid(font);
|
return cdef.IsFontValid(font);
|
||||||
@ -4458,16 +4573,6 @@ pub fn drawGrid(slices: i32, spacing: f32) void {
|
|||||||
cdef.DrawGrid(@as(c_int, slices), spacing);
|
cdef.DrawGrid(@as(c_int, slices), spacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load model from files (meshes and materials)
|
|
||||||
pub fn loadModel(fileName: [*:0]const u8) Model {
|
|
||||||
return cdef.LoadModel(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load model from generated mesh (default material)
|
|
||||||
pub fn loadModelFromMesh(mesh: Mesh) Model {
|
|
||||||
return cdef.LoadModelFromMesh(mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if a model is valid (loaded in GPU, VAO/VBOs)
|
/// Check if a model is valid (loaded in GPU, VAO/VBOs)
|
||||||
pub fn isModelValid(model: Model) bool {
|
pub fn isModelValid(model: Model) bool {
|
||||||
return cdef.IsModelValid(model);
|
return cdef.IsModelValid(model);
|
||||||
@ -4628,11 +4733,6 @@ pub fn genMeshCubicmap(cubicmap: Image, cubeSize: Vector3) Mesh {
|
|||||||
return cdef.GenMeshCubicmap(cubicmap, cubeSize);
|
return cdef.GenMeshCubicmap(cubicmap, cubeSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
|
|
||||||
pub fn loadMaterialDefault() Material {
|
|
||||||
return cdef.LoadMaterialDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if a material is valid (shader assigned, map textures loaded in GPU)
|
/// Check if a material is valid (shader assigned, map textures loaded in GPU)
|
||||||
pub fn isMaterialValid(material: Material) bool {
|
pub fn isMaterialValid(material: Material) bool {
|
||||||
return cdef.IsMaterialValid(material);
|
return cdef.IsMaterialValid(material);
|
||||||
@ -4738,21 +4838,11 @@ pub fn getMasterVolume() f32 {
|
|||||||
return cdef.GetMasterVolume();
|
return cdef.GetMasterVolume();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load wave data from file
|
|
||||||
pub fn loadWave(fileName: [*:0]const u8) Wave {
|
|
||||||
return cdef.LoadWave(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Checks if wave data is valid (data loaded and parameters)
|
/// Checks if wave data is valid (data loaded and parameters)
|
||||||
pub fn isWaveValid(wave: Wave) bool {
|
pub fn isWaveValid(wave: Wave) bool {
|
||||||
return cdef.IsWaveValid(wave);
|
return cdef.IsWaveValid(wave);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load sound from file
|
|
||||||
pub fn loadSound(fileName: [*:0]const u8) Sound {
|
|
||||||
return cdef.LoadSound(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Load sound from wave data
|
/// Load sound from wave data
|
||||||
pub fn loadSoundFromWave(wave: Wave) Sound {
|
pub fn loadSoundFromWave(wave: Wave) Sound {
|
||||||
return cdef.LoadSoundFromWave(wave);
|
return cdef.LoadSoundFromWave(wave);
|
||||||
@ -4858,11 +4948,6 @@ pub fn unloadWaveSamples(samples: []f32) void {
|
|||||||
cdef.UnloadWaveSamples(@as([*c]f32, @ptrCast(samples)));
|
cdef.UnloadWaveSamples(@as([*c]f32, @ptrCast(samples)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load music stream from file
|
|
||||||
pub fn loadMusicStream(fileName: [*:0]const u8) Music {
|
|
||||||
return cdef.LoadMusicStream(@as([*c]const u8, @ptrCast(fileName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Checks if a music stream is valid (context and buffers initialized)
|
/// Checks if a music stream is valid (context and buffers initialized)
|
||||||
pub fn isMusicValid(music: Music) bool {
|
pub fn isMusicValid(music: Music) bool {
|
||||||
return cdef.IsMusicValid(music);
|
return cdef.IsMusicValid(music);
|
||||||
@ -4933,11 +5018,6 @@ pub fn getMusicTimePlayed(music: Music) f32 {
|
|||||||
return cdef.GetMusicTimePlayed(music);
|
return cdef.GetMusicTimePlayed(music);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load audio stream (to stream raw audio pcm data)
|
|
||||||
pub fn loadAudioStream(sampleRate: u32, sampleSize: u32, channels: u32) AudioStream {
|
|
||||||
return cdef.LoadAudioStream(@as(c_uint, sampleRate), @as(c_uint, sampleSize), @as(c_uint, channels));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Checks if an audio stream is valid (buffers initialized)
|
/// Checks if an audio stream is valid (buffers initialized)
|
||||||
pub fn isAudioStreamValid(stream: AudioStream) bool {
|
pub fn isAudioStreamValid(stream: AudioStream) bool {
|
||||||
return cdef.IsAudioStreamValid(stream);
|
return cdef.IsAudioStreamValid(stream);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user