diff options
Diffstat (limited to 'src/textures.c')
| -rw-r--r-- | src/textures.c | 1806 |
1 files changed, 408 insertions, 1398 deletions
diff --git a/src/textures.c b/src/textures.c index b5677ee..28cb1cb 100644 --- a/src/textures.c +++ b/src/textures.c @@ -4,105 +4,6 @@ #include "text.h" #include "lua_core.h" -static void checkImageRealloc( int i ) { - if ( i == state->imageCount ) { - state->imageCount++; - } - - if ( state->imageCount == state->imageAlloc ) { - state->imageAlloc += ALLOC_PAGE_SIZE; - state->images = realloc( state->images, state->imageAlloc * sizeof( Image* ) ); - - for ( i = state->imageCount; i < state->imageAlloc; i++ ) { - state->images[i] = NULL; - } - } -} - -static void checkTextureRealloc( int i ) { - if ( i == state->textureCount ) { - state->textureCount++; - } - - if ( state->textureCount == state->textureAlloc ) { - state->textureAlloc += ALLOC_PAGE_SIZE; - state->textures = realloc( state->textures, state->textureAlloc * sizeof( ReiTexture* ) ); - - for ( i = state->textureCount; i < state->textureAlloc; i++ ) { - state->textures[i] = NULL; - } - } -} - -bool validImage( size_t id ) { - if ( id < 0 || state->imageCount < id || state->images[ id ] == NULL ) { - TraceLog( state->logLevelInvalid, "%s %d", "Invalid image", id ); - return false; - } - else { - return true; - } -} - -static int newImage() { - int i = 0; - - for ( i = 0; i < state->imageCount; i++ ) { - if ( state->images[i] == NULL ) { - break; - } - } - state->images[i] = malloc( sizeof( Image ) ); - checkImageRealloc( i ); - - return i; -} - -static int newTexture( int type ) { - int i = 0; - - for ( i = 0; i < state->textureCount; i++ ) { - if ( state->textures[i] == NULL ) { - break; - } - } - state->textures[i] = malloc( sizeof( ReiTexture ) ); - state->textures[i]->type = type; - - checkTextureRealloc( i ); - - return i; -} - -Texture2D* texturesGetSourceTexture( size_t id ) { - if ( state->textures[id] != NULL ) { - switch ( state->textures[id]->type ) { - case TEXTURE_TYPE_TEXTURE: - return &state->textures[id]->texture; - break; - case TEXTURE_TYPE_RENDER_TEXTURE: - return &state->textures[id]->renderTexture.texture; - break; - } - } - - return &state->textures[id]->texture; -} - -void texturesFreeTexture( size_t id ) { - if ( state->textures[id] != NULL ) { - switch ( state->textures[id]->type ) { - case TEXTURE_TYPE_TEXTURE: - UnloadTexture( state->textures[id]->texture ); - break; - case TEXTURE_TYPE_RENDER_TEXTURE: - UnloadRenderTexture( state->textures[id]->renderTexture ); - break; - } - state->textures[id] = NULL; - } -} - /* ## Textures - Image Loading */ @@ -110,28 +11,20 @@ void texturesFreeTexture( size_t id ) { /* > image = RL.LoadImage( string fileName ) -Load image from file into CPU memory ( RAM ) +Load image from file into CPU memory (RAM) -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesLoadImage( lua_State *L ) { - if ( !lua_isstring( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadImage( string fileName )" ); - lua_pushinteger( L, -1 ); - return 1; - } + if ( FileExists( luaL_checkstring( L, 1 ) ) ) { + uluaPushImage( L, LoadImage( luaL_checkstring( L, 1 ) ) ); - if ( FileExists( lua_tostring( L, 1 ) ) ) { - int i = newImage(); - *state->images[i] = LoadImage( lua_tostring( L, 1 ) ); - lua_pushinteger( L, i ); - return 1; - } - else { - lua_pushinteger( L, -1 ); return 1; } + TraceLog( state->logLevelInvalid, "Invalid file path '%s'", lua_tostring( L, 1 ) ); + lua_pushnil( L ); + + return 1; } /* @@ -139,20 +32,11 @@ int ltexturesLoadImage( lua_State *L ) { Load image from GPU texture data -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesLoadImageFromTexture( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadImageFromTexture( Texture2D texture )" ); - lua_pushinteger( L, -1 ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - - int i = newImage(); - *state->images[i] = LoadImageFromTexture( texture ); - lua_pushinteger( L, i ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + uluaPushImage( L, LoadImageFromTexture( *texture ) ); return 1; } @@ -160,41 +44,12 @@ int ltexturesLoadImageFromTexture( lua_State *L ) { /* > image = RL.LoadImageFromScreen() -Load image from screen buffer and ( screenshot ) +Load image from screen buffer and (screenshot) -- Success return int +- Success return Image */ int ltexturesLoadImageFromScreen( lua_State *L ) { - int i = newImage(); - *state->images[i] = LoadImageFromScreen(); - lua_pushinteger( L, i ); - - return 1; -} - -/* -> success = RL.UnloadImage( Image image ) - -Unload image from CPU memory ( RAM ) - -- Failure return false -- Success return true -*/ -int ltexturesUnloadImage( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.UnloadImage( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t id = lua_tointeger( L, 1 ); - - if ( !validImage( id ) ) { - lua_pushboolean( L, false ); - return 1; - } - UnloadImage( *state->images[ id ] ); - state->images[ id ] = NULL; - lua_pushboolean( L, true ); + uluaPushImage( L, LoadImageFromScreen() ); return 1; } @@ -204,22 +59,11 @@ int ltexturesUnloadImage( lua_State *L ) { Export image data to file, returns true on success -- Failure return nil - Success return bool */ int ltexturesExportImage( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isstring( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ExportImage( Image image, string fileName )" ); - lua_pushnil( L ); - return 1; - } - size_t id = lua_tointeger( L, 1 ); - - if ( !validImage( id ) ) { - lua_pushnil( L ); - return 1; - } - lua_pushboolean( L, ExportImage( *state->images[ id ], lua_tostring( L, 2 ) ) ); + Image *image = luaL_checkudata( L, 1, "Image" ); + lua_pushboolean( L, ExportImage( *image, luaL_checkstring( L, 2 ) ) ); return 1; } @@ -229,22 +73,11 @@ int ltexturesExportImage( lua_State *L ) { Export image as code file defining an array of bytes, returns true on success -- Failure return nil - Success return bool */ int ltexturesExportImageAsCode( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isstring( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ExportImageAsCode( Image image, string fileName )" ); - lua_pushnil( L ); - return 1; - } - size_t id = lua_tointeger( L, 1 ); - - if ( !validImage( id ) ) { - lua_pushnil( L ); - return 1; - } - lua_pushboolean( L, ExportImageAsCode( *state->images[ id ], lua_tostring( L, 2 ) ) ); + Image *image = luaL_checkudata( L, 1, "Image" ); + lua_pushboolean( L, ExportImageAsCode( *image, luaL_checkstring( L, 2 ) ) ); return 1; } @@ -254,26 +87,17 @@ int ltexturesExportImageAsCode( lua_State *L ) { */ /* -> image = RL.GenImageColor( int width, int height, Color color ) +> image = RL.GenImageColor( Vector2 size, Color color ) Generate image: plain color -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageColor( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageColor( int width, int height, Color color )" ); - lua_pushinteger( L, -1 ); - return 1; - } - int width = lua_tointeger( L, 1 ); - int height = lua_tointeger( L, 2 ); - Color color = uluaGetColorIndex( L, 3 ); + Vector2 size = uluaGetVector2Index( L, 1 ); + Color color = uluaGetColorIndex( L, 1 ); - int i = newImage(); - *state->images[i] = GenImageColor( width, height, color ); - lua_pushinteger( L, i ); + uluaPushImage( L, GenImageColor( size.x, size.y, color ) ); return 1; } @@ -283,22 +107,14 @@ int ltexturesGenImageColor( lua_State *L ) { Generate image: vertical gradient -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageGradientV( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageGradientV( Vector2 size, Color top, Color bottom )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); Color top = uluaGetColorIndex( L, 2 ); Color bottom = uluaGetColorIndex( L, 3 ); - - int i = newImage(); - *state->images[i] = GenImageGradientV( (int)size.x, (int)size.y, top, bottom ); - lua_pushinteger( L, i ); + + uluaPushImage( L, GenImageGradientV( (int)size.x, (int)size.y, top, bottom ) ); return 1; } @@ -308,22 +124,14 @@ int ltexturesGenImageGradientV( lua_State *L ) { Generate image: horizontal gradient -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageGradientH( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageGradientH( Vector2 size, Color left, Color right )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); Color left = uluaGetColorIndex( L, 2 ); Color right = uluaGetColorIndex( L, 3 ); - - int i = newImage(); - *state->images[i] = GenImageGradientH( (int)size.x, (int)size.y, left, right ); - lua_pushinteger( L, i ); + + uluaPushImage( L, GenImageGradientH( (int)size.x, (int)size.y, left, right ) ); return 1; } @@ -333,23 +141,15 @@ int ltexturesGenImageGradientH( lua_State *L ) { Generate image: radial gradient -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageGradientRadial( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_istable( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageGradientRadial( Vector2 size, float density, Color inner, Color outer )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); - float density = lua_tonumber( L, 2 ); + float density = luaL_checknumber( L, 2 ); Color inner = uluaGetColorIndex( L, 3 ); Color outer = uluaGetColorIndex( L, 4 ); - - int i = newImage(); - *state->images[i] = GenImageGradientRadial( (int)size.x, (int)size.y, density, inner, outer ); - lua_pushinteger( L, i ); + + uluaPushImage( L, GenImageGradientRadial( (int)size.x, (int)size.y, density, inner, outer ) ); return 1; } @@ -359,23 +159,15 @@ int ltexturesGenImageGradientRadial( lua_State *L ) { Generate image: checked -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageChecked( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageChecked( Vector2 size, Vector2 checks, Color col1, Color col2 )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); Vector2 checks = uluaGetVector2Index( L, 2 ); Color col1 = uluaGetColorIndex( L, 3 ); Color col2 = uluaGetColorIndex( L, 4 ); - - int i = newImage(); - *state->images[i] = GenImageChecked( (int)size.x, (int)size.y, (int)checks.x, (int)checks.y, col1, col2 ); - lua_pushinteger( L, i ); + + uluaPushImage( L, GenImageChecked( (int)size.x, (int)size.y, (int)checks.x, (int)checks.y, col1, col2 ) ); return 1; } @@ -385,21 +177,13 @@ int ltexturesGenImageChecked( lua_State *L ) { Generate image: white noise -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageWhiteNoise( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageWhiteNoise( Vector2 size, float factor )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); - float factor = lua_tonumber( L, 2 ); - - int i = newImage(); - *state->images[i] = GenImageWhiteNoise( (int)size.x, (int)size.y, factor ); - lua_pushinteger( L, i ); + float factor = luaL_checknumber( L, 2 ); + + uluaPushImage( L, GenImageWhiteNoise( (int)size.x, (int)size.y, factor ) ); return 1; } @@ -409,21 +193,14 @@ int ltexturesGenImageWhiteNoise( lua_State *L ) { Generate image: perlin noise -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImagePerlinNoise( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_istable( L, 2 ) || !lua_isnumber( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImagePerlinNoise( Vector2 size, Vector2 offset, float factor )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); Vector2 offset = uluaGetVector2Index( L, 2 ); - - int i = newImage(); - *state->images[i] = GenImagePerlinNoise( (int)size.x, (int)size.y, (int)offset.x, (int)offset.y, lua_tonumber( L, 3 ) ); - lua_pushinteger( L, i ); + float factor = luaL_checknumber( L, 3 ); + + uluaPushImage( L, GenImagePerlinNoise( (int)size.x, (int)size.y, (int)offset.x, (int)offset.y, factor ) ); return 1; } @@ -433,21 +210,13 @@ int ltexturesGenImagePerlinNoise( lua_State *L ) { Generate image: cellular algorithm. Bigger tileSize means bigger cells -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageCellular( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageCellular( Vector2 size, int tileSize )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); - int tileSize = lua_tointeger( L, 2 ); - - int i = newImage(); - *state->images[i] = GenImageCellular( (int)size.x, (int)size.y, tileSize ); - lua_pushinteger( L, i ); + int tileSize = luaL_checkinteger( L, 2 ); + + uluaPushImage( L, GenImageCellular( (int)size.x, (int)size.y, tileSize ) ); return 1; } @@ -457,20 +226,12 @@ int ltexturesGenImageCellular( lua_State *L ) { Generate image: grayscale image from text data -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesGenImageText( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isstring( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenImageText( Vector2 size, string text )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); - int i = newImage(); - *state->images[i] = GenImageText( (int)size.x, (int)size.y, lua_tostring( L, 2 ) ); - lua_pushinteger( L, i ); + uluaPushImage( L, GenImageText( (int)size.x, (int)size.y, luaL_checkstring( L, 2 ) ) ); return 1; } @@ -482,26 +243,14 @@ int ltexturesGenImageText( lua_State *L ) { /* > image = RL.ImageCopy( Image image ) -Create an image duplicate ( useful for transformations ) +Create an image duplicate (useful for transformations) -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesImageCopy( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageCopy( Image image )" ); - lua_pushinteger( L, -1 ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushinteger( L, -1 ); - return 1; - } - int i = newImage(); - *state->images[i] = ImageCopy( *state->images[ imageId ] ); - lua_pushinteger( L, i ); + uluaPushImage( L, ImageCopy( *image ) ); return 1; } @@ -511,25 +260,13 @@ int ltexturesImageCopy( lua_State *L ) { Create an image from another image piece -- Failure return -1 -- Success return int +- Success return Image */ int ltexturesImageFromImage( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageFromImage( Image image, Rectangle rec )" ); - lua_pushinteger( L, -1 ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Rectangle rec = uluaGetRectangleIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushinteger( L, -1 ); - return 1; - } - int i = newImage(); - *state->images[i] = ImageFromImage( *state->images[ imageId ], rec ); - lua_pushinteger( L, i ); + uluaPushImage( L, ImageFromImage( *image, rec ) ); return 1; } @@ -537,674 +274,364 @@ int ltexturesImageFromImage( lua_State *L ) { /* > image = RL.ImageText( Font font, string text, float fontSize, float spacing, Color tint ) -Create an image from text ( custom sprite font ) +Create an image from text (custom sprite font) - Failure return -1 - Success return int */ int ltexturesImageText( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isstring( L, 2 ) || !lua_isnumber( L, 3 ) - || !lua_isnumber( L, 4 ) || !lua_istable( L, 5 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageText( Font font, string text, float fontSize, float spacing, Color tint )" ); - lua_pushinteger( L, -1 ); - return 1; - } - size_t fontId = lua_tointeger( L, 1 ); - float fontSize = lua_tonumber( L, 3 ); - float spacing = lua_tonumber( L, 4 ); - Color tint = uluaGetColorIndex( L, 5 ); + // if ( !lua_isnumber( L, 1 ) || !lua_isstring( L, 2 ) || !lua_isnumber( L, 3 ) + // || !lua_isnumber( L, 4 ) || !lua_istable( L, 5 ) ) { + // TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageText( Font font, string text, float fontSize, float spacing, Color tint )" ); + // lua_pushinteger( L, -1 ); + // return 1; + // } + // size_t fontId = lua_tointeger( L, 1 ); + // float fontSize = lua_tonumber( L, 3 ); + // float spacing = lua_tonumber( L, 4 ); + // Color tint = uluaGetColorIndex( L, 5 ); - if ( !validFont( fontId ) ) { - lua_pushinteger( L, -1 ); - return 1; - } - int i = newImage(); - *state->images[i] = ImageTextEx( *state->fonts[ fontId ], lua_tostring( L, 2 ), fontSize, spacing, tint ); - lua_pushinteger( L, i ); + // if ( !validFont( fontId ) ) { + // lua_pushinteger( L, -1 ); + // return 1; + // } + // int i = newImage(); + // *state->images[i] = ImageTextEx( *state->fonts[ fontId ], lua_tostring( L, 2 ), fontSize, spacing, tint ); + // lua_pushinteger( L, i ); - return 1; + return 0; } /* -> success = RL.ImageFormat( Image image, int newFormat ) +> RL.ImageFormat( Image image, int newFormat ) Convert image data to desired format - -- Failure return false -- Success return true */ int ltexturesImageFormat( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageFormat( Image image, int newFormat )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - int newFormat = lua_tointeger( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + int newFormat = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageFormat( state->images[ imageId ], newFormat ); - lua_pushboolean( L, true ); + ImageFormat( image, newFormat ); - return 1; + return 0; } /* -> success = RL.ImageToPOT( Image image, Color fill ) +> RL.ImageToPOT( Image image, Color fill ) -Convert image to POT ( power-of-two ) - -- Failure return false -- Success return true +Convert image to POT (power-of-two) */ int ltexturesImageToPOT( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageToPOT( Image image, Color fill )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color fill = uluaGetColorIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageToPOT( state->images[ imageId ], fill ); - lua_pushboolean( L, true ); + ImageToPOT( image, fill ); - return 1; + return 0; } /* -> success = RL.ImageCrop( Image image, Rectangle crop ) +> RL.ImageCrop( Image image, Rectangle crop ) Crop an image to a defined rectangle - -- Failure return false -- Success return true */ int ltexturesImageCrop( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageCrop( Image image, Rectangle crop )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Rectangle crop = uluaGetRectangleIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageCrop( state->images[ imageId ], crop ); - lua_pushboolean( L, true ); + ImageCrop( image, crop ); - return 1; + return 0; } /* -> success = RL.ImageAlphaCrop( Image image, float threshold ) +> RL.ImageAlphaCrop( Image image, float threshold ) Crop image depending on alpha value - -- Failure return false -- Success return true */ int ltexturesImageAlphaCrop( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageAlphaCrop( Image image, float threshold )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); float threshold = lua_tonumber( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageAlphaCrop( state->images[ imageId ], threshold ); - lua_pushboolean( L, true ); + ImageAlphaCrop( image, threshold ); - return 1; + return 0; } /* -> success = RL.ImageAlphaClear( Image image, Color color, float threshold ) +> RL.ImageAlphaClear( Image image, Color color, float threshold ) Clear alpha channel to desired color - -- Failure return false -- Success return true */ int ltexturesImageAlphaClear( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_isnumber( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageAlphaClear( Image image, Color color, float threshold )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color color = uluaGetColorIndex( L, 2 ); float threshold = lua_tonumber( L, 3 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageAlphaClear( state->images[ imageId ], color, threshold ); - lua_pushboolean( L, true ); + ImageAlphaClear( image, color, threshold ); - return 1; + return 0; } /* -> success = RL.ImageAlphaMask( Image image, Image alphaMask ) +> RL.ImageAlphaMask( Image image, Image alphaMask ) Apply alpha mask to image - -- Failure return false -- Success return true */ int ltexturesImageAlphaMask( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageAlphaMask( Image image, Image alphaMask )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - size_t alphaMaskId = lua_tonumber( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + Image *alphaMask = luaL_checkudata( L, 2, "Image" ); - if ( !validImage( imageId ) || !validImage( alphaMaskId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageAlphaMask( state->images[ imageId ], *state->images[ alphaMaskId ] ); - lua_pushboolean( L, true ); + ImageAlphaMask( image, *alphaMask ); - return 1; + return 0; } /* -> success = RL.ImageAlphaPremultiply( Image image ) +> RL.ImageAlphaPremultiply( Image image ) Premultiply alpha channel - -- Failure return false -- Success return true */ int ltexturesImageAlphaPremultiply( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageAlphaPremultiply( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageAlphaPremultiply( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageAlphaPremultiply( image ); - return 1; + return 0; } /* -> success = RL.ImageBlurGaussian( Image image, int blurSize ) +> RL.ImageBlurGaussian( Image image, int blurSize ) Apply Gaussian blur using a box blur approximation - -- Failure return false -- Success return true */ int ltexturesImageBlurGaussian( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageBlurGaussian( Image image, int blurSize )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - int blurSize = lua_tointeger( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + int blurSize = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageBlurGaussian( state->images[ imageId ], blurSize ); - lua_pushboolean( L, true ); + ImageBlurGaussian( image, blurSize ); - return 1; + return 0; } /* -> success = RL.ImageResize( Image image, Vector2 size ) +> RL.ImageResize( Image image, Vector2 size ) -Resize image ( Bicubic scaling algorithm ) - -- Failure return false -- Success return true +Resize image (Bicubic scaling algorithm) */ int ltexturesImageResize( lua_State *L ) { - if ( !lua_isnumber( L, 1) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageResize( Image image, Vector2 size )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 size = uluaGetVector2Index( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageResize( state->images[ imageId ], size.x, size.y ); - lua_pushboolean( L, true ); + ImageResize( image, (int)size.x, (int)size.y ); - return 1; + return 0; } /* -> success = RL.ImageResizeNN( Image image, Vector2 size ) - -Resize image ( Nearest-Neighbor scaling algorithm ) +> RL.ImageResizeNN( Image image, Vector2 size ) -- Failure return false -- Success return true +Resize image (Nearest-Neighbor scaling algorithm) */ int ltexturesImageResizeNN( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageResizeNN( Image image, Vector2 size )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 size = uluaGetVector2Index( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageResizeNN( state->images[ imageId ], size.x, size.y ); - lua_pushboolean( L, true ); + ImageResizeNN( image, (int)size.x, (int)size.y ); - return 1; + return 0; } /* -> success = RL.ImageResizeCanvas( Image image, Vector2 size, Vector2 offset, Color fill ) +> RL.ImageResizeCanvas( Image image, Vector2 size, Vector2 offset, Color fill ) Resize canvas and fill with color - -- Failure return false -- Success return true */ int ltexturesImageResizeCanvas( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageResizeCanvas( Image image, Vector2 size, Vector2 offset, Color fill )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 size = uluaGetVector2Index( L, 2 ); Vector2 offset = uluaGetVector2Index( L, 3 ); Color fill = uluaGetColorIndex( L, 4 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageResizeCanvas( state->images[ imageId ], size.x, size.y, offset.x, offset.y, fill ); - lua_pushboolean( L, true ); + ImageResizeCanvas( image, (int)size.x, (int)size.y, (int)offset.x, (int)offset.y, fill ); - return 1; + return 0; } /* -> success = RL.ImageMipmaps( Image image ) +> RL.ImageMipmaps( Image image ) Generate all mipmap levels for a provided image - -- Failure return false -- Success return true */ int ltexturesImageMipmaps( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageMipmaps( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageMipmaps( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageMipmaps( image ); - return 1; + return 0; } /* -> success = RL.ImageDither( Image image, Color bpp ) +> RL.ImageDither( Image image, Color bpp ) -Dither image data to 16bpp or lower ( Floyd-Steinberg dithering ) - -- Failure return false -- Success return true +Dither image data to 16bpp or lower (Floyd-Steinberg dithering) */ int ltexturesImageDither( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDither( Image image, Color bpp )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color bpp = uluaGetColorIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDither( state->images[ imageId ], bpp.r, bpp.g, bpp.b, bpp.a ); - lua_pushboolean( L, true ); + ImageDither( image, bpp.r, bpp.g, bpp.b, bpp.a ); - return 1; + return 0; } /* -> success = RL.ImageFlipVertical( Image image ) +> RL.ImageFlipVertical( Image image ) Flip image vertically - -- Failure return false -- Success return true */ int ltexturesImageFlipVertical( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageFlipVertical( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageFlipVertical( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageFlipVertical( image ); - return 1; + return 0; } /* -> success = RL.ImageFlipHorizontal( Image image ) +> RL.ImageFlipHorizontal( Image image ) Flip image horizontally - -- Failure return false -- Success return true */ int ltexturesImageFlipHorizontal( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageFlipHorizontal( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageFlipHorizontal( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageFlipHorizontal( image ); - return 1; + return 0; } /* -> success = RL.ImageRotateCW( Image image ) +> RL.ImageRotateCW( Image image ) Rotate image clockwise 90deg - -- Failure return false -- Success return true */ int ltexturesImageRotateCW( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageRotateCW( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageRotateCW( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageRotateCW( image ); - return 1; + return 0; } /* -> success = RL.ImageRotateCCW( Image image ) +> RL.ImageRotateCCW( Image image ) Rotate image counter-clockwise 90deg - -- Failure return false -- Success return true */ int ltexturesImageRotateCCW( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageRotateCCW( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageRotateCCW( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageRotateCCW( image ); - return 1; + return 0; } /* -> success = RL.ImageColorTint( Image image, Color color ) +> RL.ImageColorTint( Image image, Color color ) Modify image color: tint - -- Failure return false -- Success return true */ int ltexturesImageColorTint( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorTint( Image image, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color color = uluaGetColorIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorTint( state->images[ imageId ], color ); - lua_pushboolean( L, true ); + ImageColorTint( image, color ); - return 1; + return 0; } /* -> success = RL.ImageColorInvert( Image image ) +> RL.ImageColorInvert( Image image ) Modify image color: invert - -- Failure return false -- Success return true */ int ltexturesImageColorInvert( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorInvert( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorInvert( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageColorInvert( image ); - return 1; + return 0; } /* -> success = RL.ImageColorGrayscale( Image image ) +> RL.ImageColorGrayscale( Image image ) Modify image color: grayscale - -- Failure return false -- Success return true */ int ltexturesImageColorGrayscale( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorGrayscale( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorGrayscale( state->images[ imageId ] ); - lua_pushboolean( L, true ); + ImageColorGrayscale( image ); - return 1; + return 0; } /* -> success = RL.ImageColorContrast( Image image, float contrast ) - -Modify image color: contrast ( -100 to 100 ) +> RL.ImageColorContrast( Image image, float contrast ) -- Failure return false -- Success return true +Modify image color: contrast (-100 to 100) */ int ltexturesImageColorContrast( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorContrast( Image image, float contrast )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - float contrast = lua_tonumber( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + float contrast = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorContrast( state->images[ imageId ], contrast ); - lua_pushboolean( L, true ); + ImageColorContrast( image, contrast ); - return 1; + return 0; } /* -> success = RL.ImageColorBrightness( Image image, int brightness ) - -Modify image color: brightness ( -255 to 255 ) +> RL.ImageColorBrightness( Image image, int brightness ) -- Failure return false -- Success return true +Modify image color: brightness (-255 to 255) */ int ltexturesImageColorBrightness( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorBrightness( Image image, int brightness )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - int brightness = lua_tointeger( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + int brightness = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorBrightness( state->images[ imageId ], brightness ); - lua_pushboolean( L, true ); + ImageColorBrightness( image, brightness ); - return 1; + return 0; } /* -> success = RL.ImageColorReplace( Image image, Color color, Color replace ) +> RL.ImageColorReplace( Image image, Color color, Color replace ) Modify image color: replace color - -- Failure return false -- Success return true */ int ltexturesImageColorReplace( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageColorReplace( Image image, Color color, Color replace )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color color = uluaGetColorIndex( L, 2 ); Color replace = uluaGetColorIndex( L, 3 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageColorReplace( state->images[ imageId ], color, replace ); - lua_pushboolean( L, true ); + ImageColorReplace( image, color, replace ); - return 1; + return 0; } /* > colors = RL.LoadImageColors( Image image ) -Load color data from image as a Color array ( RGBA - 32bit ) +Load color data from image as a Color array (RGBA - 32bit) -- Failure return false - Success return Color{} */ int ltexturesLoadImageColors( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadImageColors( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - int colorCount = state->images[ imageId ]->width * state->images[ imageId ]->height; + Image *image = luaL_checkudata( L, 1, "Image" ); - Color *colors = LoadImageColors( *state->images[ imageId ] ); + int colorCount = image->width * image->height; + Color *colors = LoadImageColors( *image ); lua_createtable( L, colorCount, 0 ); @@ -1220,27 +647,16 @@ int ltexturesLoadImageColors( lua_State *L ) { /* > colors = RL.LoadImagePalette( Image image, int maxPaletteSize ) -Load colors palette from image as a Color array ( RGBA - 32bit ) +Load colors palette from image as a Color array (RGBA - 32bit) -- Failure return false - Success return Color{} */ int ltexturesLoadImagePalette( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadImagePalette( Image image, int maxPaletteSize )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - int maxPaletteSize = lua_tointeger( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + int maxPaletteSize = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } int colorCount = 0; - - Color *colors = LoadImagePalette( *state->images[ imageId ], maxPaletteSize, &colorCount ); + Color *colors = LoadImagePalette( *image, maxPaletteSize, &colorCount ); lua_createtable( L, colorCount, 0 ); @@ -1258,23 +674,13 @@ int ltexturesLoadImagePalette( lua_State *L ) { Get image alpha border rectangle -- Failure return false - Success return Rectangle */ int ltexturesGetImageAlphaBorder( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetImageAlphaBorder( Image image, float threshold )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - float threshold = lua_tonumber( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + float threshold = luaL_checknumber( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - uluaPushRectangle( L, GetImageAlphaBorder( *state->images[ imageId ], threshold ) ); + uluaPushRectangle( L, GetImageAlphaBorder( *image, threshold ) ); return 1; } @@ -1282,25 +688,15 @@ int ltexturesGetImageAlphaBorder( lua_State *L ) { /* > color = RL.GetImageColor( Image image, Vector2 pixelPos ) -Get image pixel color at ( x, y ) position +Get image pixel color at (x, y) position -- Failure return false - Success return Color */ int ltexturesGetImageColor( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetImageColor( Image image, Vector2 pixelPos )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 pixelPos = uluaGetVector2Index( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - uluaPushColor( L, GetImageColor( *state->images[ imageId ], pixelPos.x, pixelPos.y ) ); + uluaPushColor( L, GetImageColor( *image, pixelPos.x, pixelPos.y ) ); return 1; } @@ -1310,233 +706,128 @@ int ltexturesGetImageColor( lua_State *L ) { */ /* -> success = RL.ImageClearBackground( Image dst, Color color ) +> RL.ImageClearBackground( Image dst, Color color ) Clear image background with given color - -- Failure return false -- Success return true */ int ltexturesImageClearBackground( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageClearBackground( Image dst, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Color color = uluaGetColorIndex( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageClearBackground( state->images[ imageId ], color ); - lua_pushboolean( L, true ); + ImageClearBackground( image, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawPixel( Image dst, Vector2 position, Color color ) +> RL.ImageDrawPixel( Image dst, Vector2 position, Color color ) Draw pixel within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawPixel( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawPixel( Image dst, Vector2 position, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 position = uluaGetVector2Index( L, 2 ); Color color = uluaGetColorIndex( L, 3 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawPixelV( state->images[ imageId ], position, color ); - lua_pushboolean( L, true ); + ImageDrawPixelV( image, position, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawLine( Image dst, Vector2 a, Vector2 b, Color color ) +> RL.ImageDrawLine( Image dst, Vector2 a, Vector2 b, Color color ) Draw line within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawLine( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawLine( Image dst, Vector2 a, Vector2 b, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 start = uluaGetVector2Index( L, 2 ); Vector2 end = uluaGetVector2Index( L, 3 ); Color color = uluaGetColorIndex( L, 4 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawLineV( state->images[ imageId ], start, end, color ); - lua_pushboolean( L, true ); + ImageDrawLineV( image, start, end, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawCircle( Image dst, Vector2 center, int radius, Color color ) +> RL.ImageDrawCircle( Image dst, Vector2 center, int radius, Color color ) Draw circle within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawCircle( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_isnumber( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawCircle( Image dst, Vector2 center, int radius, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 center = uluaGetVector2Index( L, 2 ); - int radius = lua_tointeger( L, 3 ); + int radius = luaL_checkinteger( L, 3 ); Color color = uluaGetColorIndex( L, 4 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawCircleV( state->images[ imageId ], center, radius, color ); - lua_pushboolean( L, true ); + ImageDrawCircleV( image, center, radius, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawCircleLines( Image dst, Vector2 center, int radius, Color color ) +> RL.ImageDrawCircleLines( Image dst, Vector2 center, int radius, Color color ) Draw circle outline within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawCircleLines( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_isnumber( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawCircleLines( Image dst, Vector2 center, int radius, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Vector2 center = uluaGetVector2Index( L, 2 ); - int radius = lua_tointeger( L, 3 ); + int radius = luaL_checkinteger( L, 3 ); Color color = uluaGetColorIndex( L, 4 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawCircleLinesV( state->images[ imageId ], center, radius, color ); - lua_pushboolean( L, true ); + ImageDrawCircleLinesV( image, center, radius, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawRectangle( Image dst, Rectangle rec, Color color ) +> RL.ImageDrawRectangle( Image dst, Rectangle rec, Color color ) Draw rectangle within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawRectangle( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawRectangle( Image dst, Rectangle rec, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Rectangle rec = uluaGetRectangleIndex( L, 2 ); Color color = uluaGetColorIndex( L, 3 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawRectangleRec( state->images[ imageId ], rec, color ); - lua_pushboolean( L, true ); + ImageDrawRectangleRec( image, rec, color ); - return 1; + return 0; } /* -> success = RL.ImageDrawRectangleLines( Image dst, Rectangle rec, int thick, Color color ) +> RL.ImageDrawRectangleLines( Image dst, Rectangle rec, int thick, Color color ) Draw rectangle lines within an image - -- Failure return false -- Success return true */ int ltexturesImageDrawRectangleLines( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_istable( L, 2 ) || !lua_isnumber( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawRectangleLines( Image dst, Rectangle rec, int thick, Color color )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); Rectangle rec = uluaGetRectangleIndex( L, 2 ); - int thick = lua_tointeger( L, 3 ); + int thick = luaL_checkinteger( L, 3 ); Color color = uluaGetColorIndex( L, 4 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawRectangleLines( state->images[ imageId ], rec, thick, color ); - lua_pushboolean( L, true ); + ImageDrawRectangleLines( image, rec, thick, color ); - return 1; + return 0; } /* -> success = RL.ImageDraw( Image dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint ) - -Draw a source image within a destination image ( Tint applied to source ) +> RL.ImageDraw( Image dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint ) -- Failure return false -- Success return true +Draw a source image within a destination image (Tint applied to source) */ int ltexturesImageDraw( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_istable( L, 3 ) - || !lua_istable( L, 4 ) || !lua_istable( L, 5 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDraw( Image dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageDstId = lua_tointeger( L, 1 ); - size_t imageSrcId = lua_tointeger( L, 2 ); + Image *imageDstId = luaL_checkudata( L, 1, "Image" ); + Image *imageSrcId = luaL_checkudata( L, 2, "Image" ); Rectangle srcRec = uluaGetRectangleIndex( L, 3 ); Rectangle dstRec = uluaGetRectangleIndex( L, 4 ); Color tint = uluaGetColorIndex( L, 5 ); - if ( !validImage( imageDstId ) || !validImage( imageSrcId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDraw( state->images[ imageDstId ], *state->images[ imageSrcId ], srcRec, dstRec, tint ); - lua_pushboolean( L, true ); + ImageDraw( imageDstId, *imageSrcId, srcRec, dstRec, tint ); - return 1; + return 0; } /* @@ -1548,25 +839,25 @@ Draw text ( Custom sprite font ) within an image ( Destination ) - Success return true */ int ltexturesImageDrawTextEx( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_isstring( L, 3 ) || !lua_istable( L, 4 ) - || !lua_isnumber( L, 5 ) || !lua_isnumber( L, 6 ) || !lua_istable( L, 7 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawTextEx( Image dst, Font font, string text, Vector2 position, float fontSize, float spacing, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - size_t fontId = lua_tointeger( L, 2 ); - Vector2 position = uluaGetVector2Index( L, 4 ); - float fontSize = lua_tonumber( L, 5 ); - float spacing = lua_tonumber( L, 6 ); - Color tint = uluaGetColorIndex( L, 7 ); - - if ( !validImage( imageId ) || !validFont( fontId ) ) { - lua_pushboolean( L, false ); - return 1; - } - ImageDrawTextEx( state->images[ imageId ], *state->fonts[ fontId ], lua_tostring( L, 3 ), position, fontSize, spacing, tint ); - lua_pushboolean( L, true ); + // if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_isstring( L, 3 ) || !lua_istable( L, 4 ) + // || !lua_isnumber( L, 5 ) || !lua_isnumber( L, 6 ) || !lua_istable( L, 7 ) ) { + // TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ImageDrawTextEx( Image dst, Font font, string text, Vector2 position, float fontSize, float spacing, Color tint )" ); + // lua_pushboolean( L, false ); + // return 1; + // } + // size_t imageId = lua_tointeger( L, 1 ); + // size_t fontId = lua_tointeger( L, 2 ); + // Vector2 position = uluaGetVector2Index( L, 4 ); + // float fontSize = lua_tonumber( L, 5 ); + // float spacing = lua_tonumber( L, 6 ); + // Color tint = uluaGetColorIndex( L, 7 ); + + // if ( !validImage( imageId ) || !validFont( fontId ) ) { + // lua_pushboolean( L, false ); + // return 1; + // } + // ImageDrawTextEx( state->images[ imageId ], *state->fonts[ fontId ], lua_tostring( L, 3 ), position, fontSize, spacing, tint ); + // lua_pushboolean( L, true ); return 1; } @@ -1580,22 +871,11 @@ int ltexturesImageDrawTextEx( lua_State *L ) { Get image size -- Failure return nil - Success return Vector2 */ int ltexturesGetImageSize( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetImageSize( Image image )" ); - lua_pushnil( L ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushnil( L ); - return 1; - } - Image *image = state->images[ imageId ]; uluaPushVector2( L, (Vector2){ image->width, image->height } ); return 1; @@ -1606,22 +886,12 @@ int ltexturesGetImageSize( lua_State *L ) { Get image mipmaps. Mipmap levels, 1 by default -- Failure return false - Success return int */ int ltexturesGetImageMipmaps( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetImageMipmaps( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - lua_pushinteger( L, state->images[ imageId ]->mipmaps ); + lua_pushinteger( L, image->mipmaps ); return 1; } @@ -1629,24 +899,14 @@ int ltexturesGetImageMipmaps( lua_State *L ) { /* > format = RL.GetImageFormat( Image image ) -Get image data format ( PixelFormat type ) +Get image data format (PixelFormat type) -- Failure return false - Success return int */ int ltexturesGetImageFormat( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetImageFormat( Image image )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - lua_pushinteger( L, state->images[ imageId ]->format ); + lua_pushinteger( L, image->format ); return 1; } @@ -1660,31 +920,19 @@ int ltexturesGetImageFormat( lua_State *L ) { Load texture from file into GPU memory ( VRAM ) -- Failure return -1 -- Success return int +- Failure return nil +- Success return Texture */ int ltexturesLoadTexture( lua_State *L ) { - if ( !lua_isstring( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadTexture( string fileName )" ); - lua_pushinteger( L, -1 ); - return 1; - } if ( FileExists( lua_tostring( L, 1 ) ) ) { - int i = newTexture( TEXTURE_TYPE_TEXTURE ); - state->textures[i]->texture = LoadTexture( lua_tostring( L, 1 ) ); - lua_pushinteger( L, i ); - - // Texture loadedTex = LoadTexture( lua_tostring( L, 1 ) ); - // Texture *texture = lua_newuserdata( L, sizeof( Texture ) ); - // *texture = loadedTex; - // luaL_setmetatable( L, "Texture" ); + uluaPushTexture( L, LoadTexture( lua_tostring( L, 1 ) ) ); return 1; } - else { - lua_pushinteger( L, -1 ); - return 1; - } + TraceLog( state->logLevelInvalid, "Invalid file path '%s'", lua_tostring( L, 1 ) ); + lua_pushnil( L ); + + return 1; } /* @@ -1692,24 +940,12 @@ int ltexturesLoadTexture( lua_State *L ) { Load texture from image data -- Failure return -1 -- Success return int +- Success return Texture */ int ltexturesLoadTextureFromImage( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadTextureFromImage( Image image )" ); - lua_pushinteger( L, -1 ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); + Image *image = luaL_checkudata( L, 1, "Image" ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - int i = newTexture( TEXTURE_TYPE_TEXTURE ); - state->textures[i]->texture = LoadTextureFromImage( *state->images[ imageId ] ); - lua_pushinteger( L, i ); + uluaPushTexture( L, LoadTextureFromImage( *image ) ); return 1; } @@ -1719,25 +955,13 @@ int ltexturesLoadTextureFromImage( lua_State *L ) { Load cubemap from image, multiple image cubemap layouts supported -- Failure return -1 -- Success return int +- Success return Texture */ int ltexturesLoadTextureCubemap( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadTextureCubemap( Image image, int layout )" ); - lua_pushinteger( L, -1 ); - return 1; - } - size_t imageId = lua_tointeger( L, 1 ); - int layout = lua_tointeger( L, 2 ); + Image *image = luaL_checkudata( L, 1, "Image" ); + int layout = luaL_checkinteger( L, 2 ); - if ( !validImage( imageId ) ) { - lua_pushboolean( L, false ); - return 1; - } - int i = newTexture( TEXTURE_TYPE_TEXTURE ); - state->textures[i]->texture = LoadTextureCubemap( *state->images[ imageId ], layout ); - lua_pushinteger( L, i ); + uluaPushTexture( L, LoadTextureCubemap( *image, layout ) ); return 1; } @@ -1745,87 +969,43 @@ int ltexturesLoadTextureCubemap( lua_State *L ) { /* > renderTexture = RL.LoadRenderTexture( Vector2 size ) -Load texture for rendering ( framebuffer ) +Load texture for rendering (framebuffer) -- Failure return -1 -- Success return int +- Success return RenderTexture */ int ltexturesLoadRenderTexture( lua_State *L ) { - if ( !lua_istable( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.LoadRenderTexture( Vector2 size )" ); - lua_pushinteger( L, -1 ); - return 1; - } Vector2 size = uluaGetVector2Index( L, 1 ); - int i = newTexture( TEXTURE_TYPE_RENDER_TEXTURE ); - state->textures[i]->renderTexture = LoadRenderTexture( (int)size.x, (int)size.y ); - lua_pushinteger( L, i ); + uluaPushRenderTexture( L, LoadRenderTexture( (int)size.x, (int)size.y ) ); return 1; } /* -> success = RL.UnloadTexture( Texture2D texture ) - -Unload texture from GPU memory ( VRAM ). NOTE! Must be texture id. - -- Failure return false -- Success return true -*/ -int ltexturesUnloadTexture( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.UnloadTexture( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t texId = lua_tointeger( L, 1 ); - - texturesFreeTexture( texId ); - lua_pushboolean( L, true ); - - return 1; -} - -/* -> isReady = RL.IsTextureReady( Texture2D texture ) +> isReady = RL.IsTextureReady( Texture texture ) Check if a texture is ready -- Failure return nil -- Success return true +- Success return bool */ int ltexturesIsTextureReady( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.IsTextureReady( Texture2D texture )" ); - lua_pushnil( L ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); - lua_pushboolean( L, IsTextureReady( texture ) ); + lua_pushboolean( L, IsTextureReady( *texture ) ); return 1; } /* -> success = RL.UpdateTexture( Texture2D texture, int{} pixels ) +> RL.UpdateTexture( Texture texture, int{} pixels ) Update GPU texture with new data NOTE! Should be TEXTURE_TYPE_TEXTURE. Pixel should be in format { { 255, 255, 255, 255 }... } depending on the pixel format - -- Failure return false -- Success return true */ int ltexturesUpdateTexture( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.UpdateTexture( Texture2D texture, int{} pixels )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - + Texture *texture = luaL_checkudata( L, 1, "Texture" ); size_t len = uluaGetTableLenIndex( L, 2 ); + unsigned char *pixels = malloc( len * 4 * sizeof( unsigned char ) ); int t = lua_gettop( L ); @@ -1848,32 +1028,23 @@ int ltexturesUpdateTexture( lua_State *L ) { i++; lua_pop( L, 1 ); } - UpdateTexture( texture, pixels ); - lua_pushboolean( L, true ); - + UpdateTexture( *texture, pixels ); free( pixels ); - return 1; + return 0; } /* -> success = RL.UpdateTextureRec( Texture2D texture, Rectangle rec, int{} pixels ) +> RL.UpdateTextureRec( Texture texture, Rectangle rec, int{} pixels ) Update GPU texture rectangle with new data NOTE! Should be TEXTURE_TYPE_TEXTURE. Pixel should be in format { { 255, 255, 255, 255 }... } depending on the pixel format - -- Failure return false -- Success return true */ int ltexturesUpdateTextureRec( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.UpdateTextureRec( Texture2D texture, Rectangle rec, int{} pixels )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + Rectangle rec = uluaGetRectangleIndex( L, 2 ); size_t len = uluaGetTableLenIndex( L, 3 ); + unsigned char *pixels = malloc( len * 4 * sizeof( unsigned char ) ); int t = lua_gettop( L ); @@ -1898,14 +1069,10 @@ int ltexturesUpdateTextureRec( lua_State *L ) { } lua_pop( L, 1 ); /* Pixels arg. */ - Rectangle rec = uluaGetRectangleIndex( L, 2 ); - - UpdateTextureRec( texture, rec, pixels ); - lua_pushboolean( L, true ); - + UpdateTextureRec( *texture, rec, pixels ); free( pixels ); - return 1; + return 0; } /* @@ -1913,132 +1080,81 @@ int ltexturesUpdateTextureRec( lua_State *L ) { */ /* -> success = RL.DrawTexture( Texture2D texture, Vector2 position, Color tint ) +> RL.DrawTexture( Texture texture, Vector2 position, Color tint ) Draw a Texture2D - -- Failure return false -- Success return true */ int ltexturesDrawTexture( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.DrawTexture( Texture2D texture, Vector2 position, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - // Texture *texture = luaL_checkudata( L, 1, "Texture" ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); Vector2 pos = uluaGetVector2Index( L, 2 ); Color color = uluaGetColorIndex( L, 3 ); - DrawTexture( texture, pos.x, pos.y, color ); - // DrawTexture( *texture, pos.x, pos.y, color ); - lua_pushboolean( L, true ); - - return 1; + DrawTexture( *texture, pos.x, pos.y, color ); + return 0; } /* -> success = RL.DrawTextureRec( Texture2D texture, Rectangle source, Vector2 position, Color tint ) +> RL.DrawTextureRec( Texture texture, Rectangle source, Vector2 position, Color tint ) Draw a part of a texture defined by a rectangle - -- Failure return false -- Success return true */ int ltexturesDrawTextureRec( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) || !lua_istable( L, 4 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.DrawTextureRec( Texture2D texture, Rectangle source, Vector2 position, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); Rectangle srcRect = uluaGetRectangleIndex( L, 2 ); Vector2 pos = uluaGetVector2Index( L, 3 ); Color tint = uluaGetColorIndex( L, 4 ); - DrawTextureRec( texture, srcRect, pos, tint ); - lua_pushboolean( L, true ); - - return 1; + DrawTextureRec( *texture, srcRect, pos, tint ); + return 0; } /* -> success = RL.DrawTexturePro( Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint ) +> RL.DrawTexturePro( Texture texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint ) Draw a part of a texture defined by a rectangle with "pro" parameters - -- Failure return false -- Success return true */ int ltexturesDrawTexturePro( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) - || !lua_istable( L, 4 ) || !lua_isnumber( L, 5 ) || !lua_istable( L, 6 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.DrawTexturePro( Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); Rectangle srcRect = uluaGetRectangleIndex( L, 2 ); Rectangle dstRect = uluaGetRectangleIndex( L, 3 ); Vector2 origin = uluaGetVector2Index( L, 4 ); - float rot = lua_tonumber( L, 5 ); + float rot = luaL_checknumber( L, 5 ); Color color = uluaGetColorIndex( L, 6 ); - DrawTexturePro( texture, srcRect, dstRect, origin, rot, color ); - lua_pushboolean( L, true ); + DrawTexturePro( *texture, srcRect, dstRect, origin, rot, color ); - return 1; + return 0; } /* -> success = RL.DrawTextureNPatch( Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint ) - -Draws a texture ( or part of it ) that stretches or shrinks nicely +> RL.DrawTextureNPatch( Texture texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint ) -- Failure return false -- Success return true +Draws a texture (or part of it) that stretches or shrinks nicely */ int ltexturesDrawTextureNPatch( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) || !lua_istable( L, 3 ) - || !lua_istable( L, 4 ) || !lua_isnumber( L, 5 ) || !lua_istable( L, 6 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.DrawTextureNPatch( Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); NPatchInfo nPatchInfo = uluaGetNPatchInfoIndex( L, 2 ); Rectangle dest = uluaGetRectangleIndex( L, 3 ); Vector2 origin = uluaGetVector2Index( L, 4 ); - float rotation = lua_tonumber( L, 5 ); + float rotation = luaL_checknumber( L, 5 ); Color tint = uluaGetColorIndex( L, 6 ); - DrawTextureNPatch( texture, nPatchInfo, dest, origin, rotation, tint ); - lua_pushboolean( L, true ); + DrawTextureNPatch( *texture, nPatchInfo, dest, origin, rotation, tint ); - return 1; + return 0; } /* -> success = RL.BeginTextureMode( RenderTexture2D target ) +> RL.BeginTextureMode( RenderTexture target ) Begin drawing to render texture - -- Failure return false -- Success return true */ int ltexturesBeginTextureMode( lua_State *L ) { - if ( !isValidRenderTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.BeginTextureMode( RenderTexture2D target )" ); - lua_pushboolean( L, false ); - return 1; - } - RenderTexture renderTexture = uluaGetRenderTexture( L, 1 ); + RenderTexture *renderTexture = luaL_checkudata( L, 1, "RenderTexture" ); - BeginTextureMode( renderTexture ); - lua_pushboolean( L, true ); + BeginTextureMode( *renderTexture ); - return 1; + return 0; } /* @@ -2049,28 +1165,7 @@ Ends drawing to render texture int ltexturesEndTextureMode( lua_State *L ) { EndTextureMode(); - return 1; -} - -/* -> type = RL.GetTextureType( Texture2D texture ) - -Get texture type ( TEXTURE_TYPE_TEXTURE or TEXTURE_TYPE_RENDER_TEXTURE ) - -- Failure return false -- Success return int -*/ -int ltexturesGetTextureType( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetTextureType( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - size_t texId = lua_tointeger( L, 1 ); - - lua_pushinteger( L, state->textures[ texId ]->type ); - - return 1; + return 0; } /* @@ -2078,152 +1173,151 @@ int ltexturesGetTextureType( lua_State *L ) { */ /* -> success = RL.GenTextureMipmaps( Texture2D texture ) +> RL.GenTextureMipmaps( Texture texture ) Generate GPU mipmaps for a texture - -- Failure return false -- Success return true */ int ltexturesGenTextureMipmaps( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GenTextureMipmaps( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); - GenTextureMipmaps( &texture ); - lua_pushboolean( L, true ); + GenTextureMipmaps( texture ); - return 1; + return 0; } /* -> success = RL.SetTextureFilter( Texture2D texture, int filter ) - -Set texture scaling filter mode ( TEXTURE_FILTER_POINT, TEXTURE_FILTER_BILINEAR... ) +> RL.SetTextureFilter( Texture texture, int filter ) -- Failure return false -- Success return true +Set texture scaling filter mode (TEXTURE_FILTER_POINT, TEXTURE_FILTER_BILINEAR...) */ int ltexturesSetTextureFilter( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.SetTextureFilter( Texture2D texture, int filter )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - int filter = lua_tointeger( L, 2 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + int filter = luaL_checkinteger( L, 2 ); - SetTextureFilter( texture, filter ); - lua_pushboolean( L, true ); + SetTextureFilter( *texture, filter ); - return 1; + return 0; } /* -> success = RL.SetTextureWrap( Texture2D texture, int wrap ) +> RL.SetTextureWrap( Texture texture, int wrap ) -Set texture wrapping mode ( TEXTURE_WRAP_REPEAT, TEXTURE_WRAP_CLAMP... ) - -- Failure return false -- Success return true +Set texture wrapping mode (TEXTURE_WRAP_REPEAT, TEXTURE_WRAP_CLAMP...) */ int ltexturesSetTextureWrap( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.SetTextureWrap( Texture2D texture, int wrap )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - int wrap = lua_tointeger( L, 2 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + int wrap = luaL_checkinteger( L, 2 ); - SetTextureWrap( texture, wrap ); - lua_pushboolean( L, true ); + SetTextureWrap( *texture, wrap ); - return 1; + return 0; } /* -> id = RL.GetTextureId( Texture2D texture ) +> id = RL.GetTextureId( Texture texture ) -Get texture OpenGL id +Get OpenGL texture id -- Failure return false - Success return int */ int ltexturesGetTextureId( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetTextureId( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - lua_pushinteger( L, texture.id ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + + lua_pushinteger( L, texture->id ); return 1; } /* -> size = RL.GetTextureSize( Texture2D texture ) +> size = RL.GetTextureSize( Texture texture ) Get texture size -- Failure return false - Success return Vector2 */ int ltexturesGetTextureSize( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetTextureSize( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - uluaPushVector2( L, (Vector2){ texture.width, texture.height } ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); - // Texture *texture = luaL_checkudata( L, 1, "Texture" ); - // uluaPushVector2( L, (Vector2){ texture->width, texture->height } ); + uluaPushVector2( L, (Vector2){ texture->width, texture->height } ); return 1; } /* -> mipmaps = RL.GetTextureMipmaps( Texture2D texture ) +> mipmaps = RL.GetTextureMipmaps( Texture texture ) Get texture mipmaps. Mipmap levels, 1 by default -- Failure return false - Success return int */ int ltexturesGetTextureMipmaps( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetTextureMipmaps( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - lua_pushinteger( L, texture.mipmaps ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + + lua_pushinteger( L, texture->mipmaps ); return 1; } /* -> format = RL.GetTextureFormat( Texture2D texture ) +> format = RL.GetTextureFormat( Texture texture ) -Get texture data format ( PixelFormat type ) +Get texture data format (PixelFormat type) -- Failure return false - Success return int */ int ltexturesGetTextureFormat( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetTextureFormat( Texture2D texture )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); - lua_pushinteger( L, texture.format ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); + + lua_pushinteger( L, texture->format ); + + return 1; +} + +/* +## Textures - RenderTexture Configuration +*/ + +/* +> id = RL.GetRenderTextureId( RenderTexture renderTexture ) + +Get OpenGL framebuffer object id + +- Success return int +*/ +int ltexturesGetRenderTextureId( lua_State *L ) { + RenderTexture *renderTexture = luaL_checkudata( L, 1, "RenderTexture" ); + + lua_pushinteger( L, renderTexture->id ); + + return 1; +} + +/* +> texture = RL.GetRenderTextureTexture( RenderTexture renderTexture ) + +Get color buffer attachment texture + +- Success return Texture +*/ +int ltexturesGetRenderTextureTexture( lua_State *L ) { + RenderTexture *renderTexture = luaL_checkudata( L, 1, "RenderTexture" ); + + uluaPushTexture( L, renderTexture->texture ); + + return 1; +} + +/* +> texture = RL.GetRenderTextureDepthTexture( RenderTexture renderTexture ) + +Get depth buffer attachment texture + +- Success return Texture +*/ +int ltexturesGetRenderTextureDepthTexture( lua_State *L ) { + RenderTexture *renderTexture = luaL_checkudata( L, 1, "RenderTexture" ); + + uluaPushTexture( L, renderTexture->depth ); return 1; } @@ -2237,17 +1331,11 @@ int ltexturesGetTextureFormat( lua_State *L ) { Returns color with alpha applied, alpha goes from 0.0f to 1.0f -- Failure return false - Success return Color */ int ltexturesFade( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.Fade( Color color, float alpha )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); - float alpha = lua_tonumber( L, 2 ); + float alpha = luaL_checknumber( L, 2 ); uluaPushColor( L, Fade( color, alpha ) ); @@ -2259,15 +1347,9 @@ int ltexturesFade( lua_State *L ) { Returns hexadecimal value for a Color -- Failure return false - Success return int */ int ltexturesColorToInt( lua_State *L ) { - if ( !lua_istable( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorToInt( Color color )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); lua_pushinteger( L, ColorToInt( color ) ); @@ -2280,15 +1362,9 @@ int ltexturesColorToInt( lua_State *L ) { Returns Color normalized as float [0..1] -- Failure return false - Success return Vector4 */ int ltexturesColorNormalize( lua_State *L ) { - if ( !lua_istable( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorNormalize( Color color )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); uluaPushVector4( L, ColorNormalize( color ) ); @@ -2301,15 +1377,9 @@ int ltexturesColorNormalize( lua_State *L ) { Color from normalized values [0..1] -- Failure return false - Success return Color */ int ltexturesColorFromNormalized( lua_State *L ) { - if ( !lua_istable( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorFromNormalized( Vector4 normalized )" ); - lua_pushboolean( L, false ); - return 1; - } Vector4 normalized = uluaGetVector4Index( L, 1 ); uluaPushColor( L, ColorFromNormalized( normalized ) ); @@ -2322,15 +1392,9 @@ int ltexturesColorFromNormalized( lua_State *L ) { Returns HSV values for a Color, hue [0..360], saturation/value [0..1] -- Failure return false - Success return Vector3 */ int ltexturesColorToHSV( lua_State *L ) { - if ( !lua_istable( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorToHSV( Color color )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); uluaPushVector3( L, ColorToHSV( color ) ); @@ -2343,18 +1407,12 @@ int ltexturesColorToHSV( lua_State *L ) { Returns a Color from HSV values, hue [0..360], saturation/value [0..1] -- Failure return false - Success return Color */ int ltexturesColorFromHSV( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_isnumber( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorFromHSV( float hue, float saturation, float value )" ); - lua_pushboolean( L, false ); - return 1; - } - float hue = lua_tonumber( L, 1 ); - float saturation = lua_tonumber( L, 2 ); - float value = lua_tonumber( L, 3 ); + float hue = luaL_checknumber( L, 1 ); + float saturation = luaL_checknumber( L, 2 ); + float value = luaL_checknumber( L, 3 ); uluaPushColor( L, ColorFromHSV( hue, saturation, value ) ); @@ -2366,15 +1424,9 @@ int ltexturesColorFromHSV( lua_State *L ) { Get color multiplied with another color -- Failure return false - Success return Color */ int ltexturesColorTint( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorTint( Color color, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); Color tint = uluaGetColorIndex( L, 2 ); @@ -2388,17 +1440,11 @@ int ltexturesColorTint( lua_State *L ) { Get color with brightness correction, brightness factor goes from -1.0f to 1.0f -- Failure return false - Success return Color */ int ltexturesColorBrightness( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorBrightness( Color color, float factor )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); - float factor = lua_tonumber( L, 2 ); + float factor = luaL_checknumber( L, 2 ); uluaPushColor( L, ColorBrightness( color, factor ) ); @@ -2410,17 +1456,11 @@ int ltexturesColorBrightness( lua_State *L ) { Get color with contrast correction, contrast values between -1.0f and 1.0f -- Failure return false - Success return Color */ int ltexturesColorContrast( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorContrast( Color color, float contrast )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); - float contrast = lua_tonumber( L, 2 ); + float contrast = luaL_checknumber( L, 2 ); uluaPushColor( L, ColorContrast( color, contrast ) ); @@ -2432,17 +1472,11 @@ int ltexturesColorContrast( lua_State *L ) { Returns color with alpha applied, alpha goes from 0.0f to 1.0f -- Failure return false - Success return Color */ int ltexturesColorAlpha( lua_State *L ) { - if ( !lua_istable( L, 1 ) || !lua_isnumber( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorAlpha( Color color, float alpha )" ); - lua_pushboolean( L, false ); - return 1; - } Color color = uluaGetColorIndex( L, 1 ); - float alpha = lua_tonumber( L, 2 ); + float alpha = luaL_checknumber( L, 2 ); uluaPushColor( L, ColorAlpha( color, alpha ) ); @@ -2454,15 +1488,9 @@ int ltexturesColorAlpha( lua_State *L ) { Returns src alpha-blended into dst color with tint -- Failure return false - Success return Color */ int ltexturesColorAlphaBlend( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) || !lua_isnumber( L, 2 ) || !lua_isnumber( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.ColorAlphaBlend( Color dst, Color src, Color tint )" ); - lua_pushboolean( L, false ); - return 1; - } Color dst = uluaGetColorIndex( L, 1 ); Color src = uluaGetColorIndex( L, 2 ); Color tint = uluaGetColorIndex( L, 3 ); @@ -2473,20 +1501,14 @@ int ltexturesColorAlphaBlend( lua_State *L ) { } /* -> color = RL.GetColor( unsigned int hexValue ) +> color = RL.GetColor( int hexValue ) Get Color structure from hexadecimal value -- Failure return false - Success return Color */ int ltexturesGetColor( lua_State *L ) { - if ( !lua_isnumber( L, 1 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetColor( unsigned int hexValue )" ); - lua_pushboolean( L, false ); - return 1; - } - unsigned int hexValue = (unsigned int)lua_tointeger( L, 1 ); + unsigned int hexValue = (unsigned int)luaL_checkinteger( L, 1 ); uluaPushColor( L, GetColor( hexValue ) ); @@ -2494,22 +1516,16 @@ int ltexturesGetColor( lua_State *L ) { } /* -> color = RL.GetPixelColor( Texture2D texture, Vector2 position ) +> color = RL.GetPixelColor( Texture texture, Vector2 position ) Get pixel color from source texture -- Failure return false - Success return Color */ int ltexturesGetPixelColor( lua_State *L ) { - if ( !isValidTexture( L, 1, true ) || !lua_istable( L, 2 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetPixelColor( Texture2D texture, Vector2 position )" ); - lua_pushboolean( L, false ); - return 1; - } - Texture texture = uluaGetTexture( L, 1 ); + Texture *texture = luaL_checkudata( L, 1, "Texture" ); Vector2 pos = uluaGetVector2Index( L, 2 ); - Image srcImage = LoadImageFromTexture( texture ); + Image srcImage = LoadImageFromTexture( *texture ); uluaPushColor( L, GetImageColor( srcImage, pos.x, pos.y ) ); UnloadImage( srcImage ); @@ -2522,18 +1538,12 @@ int ltexturesGetPixelColor( lua_State *L ) { Get pixel data size in bytes for certain format -- Failure return false - Success return int */ int ltexturesGetPixelDataSize( lua_State *L ) { - if ( !lua_isnumber( L, 1) || !lua_isnumber( L, 2 ) || !lua_isnumber( L, 3 ) ) { - TraceLog( state->logLevelInvalid, "%s", "Bad call of function. RL.GetPixelDataSize( int width, int height, int format )" ); - lua_pushboolean( L, false ); - return 1; - } - int width = lua_tointeger( L, 1 ); - int height = lua_tointeger( L, 2 ); - int format = lua_tointeger( L, 3 ); + int width = luaL_checkinteger( L, 1 ); + int height = luaL_checkinteger( L, 2 ); + int format = luaL_checkinteger( L, 3 ); lua_pushinteger( L, GetPixelDataSize( width, height, format ) ); |
