summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjussi2022-05-18 18:10:45 +0300
committerjussi2022-05-18 18:10:45 +0300
commitf293e25dd821494b24e46a3bc0a612a5e03089a5 (patch)
tree27ba9780e2a5be013a2ec9e2e81c6b6b5d8e4b56
parent59ea29d8ff9dad751659a0a42d76a5534f7b4b97 (diff)
downloadreilua-enhanced-f293e25dd821494b24e46a3bc0a612a5e03089a5.tar.gz
reilua-enhanced-f293e25dd821494b24e46a3bc0a612a5e03089a5.tar.bz2
reilua-enhanced-f293e25dd821494b24e46a3bc0a612a5e03089a5.zip
Shader load functions argument fix. File drop and change directory.
-rw-r--r--API.md34
-rw-r--r--README.md1
-rw-r--r--devnotes5
-rw-r--r--examples/image_draw/main.lua6
-rw-r--r--include/core.h3
-rw-r--r--src/core.c136
-rw-r--r--src/lua_core.c3
7 files changed, 142 insertions, 46 deletions
diff --git a/API.md b/API.md
index 486e1cf..8861466 100644
--- a/API.md
+++ b/API.md
@@ -1120,7 +1120,8 @@ End scissor mode
> shader = RL_LoadShader( string vsFileName, string fsFileName )
-Load shader from files and bind default locations
+Load shader from files and bind default locations.
+NOTE: Set nil if no shader
- Failure return -1
- Success return int
@@ -1130,6 +1131,7 @@ Load shader from files and bind default locations
> shader = RL_LoadShaderFromMemory( string vsCode, string fsCode )
Load shader from code strings and bind default locations
+NOTE: Set nil if no shader
- Failure return -1
- Success return int
@@ -1577,7 +1579,7 @@ Get full path for a given fileName with path ( Uses static string )
---
-> filePath = RL_GetPrevDirectoryPath( string dirPath )
+> directory = RL_GetPrevDirectoryPath( string dirPath )
Get previous directory path for a given path ( Uses static string )
@@ -1586,11 +1588,10 @@ Get previous directory path for a given path ( Uses static string )
---
-> filePath = RL_GetWorkingDirectory()
+> directory = RL_GetWorkingDirectory()
Get current working directory ( Uses static string )
-- Failure return false
- Success return string
---
@@ -1604,6 +1605,31 @@ Get filenames in a directory path
---
+> success = RL_ChangeDirectory( string directory )
+
+Change working directory, return true on success
+
+- Failure return false
+- Success return true
+
+---
+
+> fileDropped = RL_IsFileDropped()
+
+Check if a file has been dropped into window
+
+- Success return bool
+
+---
+
+> files = RL_GetDroppedFiles()
+
+Get dropped files names
+
+- Success return string{}
+
+---
+
> time = RL_GetFileModTime( string fileName )
Get file modification time ( Last write time )
diff --git a/README.md b/README.md
index b36f80d..a4b2788 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,6 @@ ReiLua is currently in arbitrary version 0.1 and some planned raylib functionali
List of some MISSING features that are planned to be included. For specific function, check API.
* Core
- * Files drop
* VR stereo config functions for VR simulator
* Textures
* Texture update functions
diff --git a/devnotes b/devnotes
index e305c54..8109151 100644
--- a/devnotes
+++ b/devnotes
@@ -2,11 +2,8 @@ Current {
}
Backlog {
- * Set reguirement for two arguments in Shader load functions.
- * More and better examples
+ * More and better examples.
- * Core
- * Files drop
* Text
* More Font loading/unloading functions
* Codepoints
diff --git a/examples/image_draw/main.lua b/examples/image_draw/main.lua
index 5490c94..ee9757c 100644
--- a/examples/image_draw/main.lua
+++ b/examples/image_draw/main.lua
@@ -13,7 +13,9 @@ function init()
RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
RL_SetWindowPosition( { mPos[1] + mSize[1] / 2 - winSize[1] / 2, mPos[2] + mSize[2] / 2 - winSize[2] / 2 } )
image = RL_GenImageColor( winSize[1], winSize[2], WHITE )
- catImage = RL_LoadImage( RL_GetBasePath().."../resources/images/cat.png" )
+ -- Test changing working directory.
+ RL_ChangeDirectory( RL_GetBasePath().."../resources" )
+ catImage = RL_LoadImage( RL_GetWorkingDirectory().."/images/cat.png" )
RL_ImageClearBackground( image, { 150, 60, 100 } )
RL_ImageDrawPixel( image, { 32, 32 }, WHITE )
RL_ImageDrawLine( image, { 32, 45 }, { 100, 60 }, GREEN )
@@ -23,12 +25,10 @@ function init()
RL_ImageDraw( image, catImage, { 143, 25, 230, 250 }, { 200, 200, 230, 250 }, WHITE )
RL_ImageDrawTextEx( image, 0, "Hello", { 300, 32 }, 48.0, 1.0, WHITE )
- -- catCopy = RL_ImageCopy( catImage )
local src = { 80, 70, 96, 96 }
catCopy = RL_ImageFromImage( catImage, src )
RL_ImageDraw( image, catCopy, src, { 600, 200, src[3], src[4] }, WHITE )
- -- RL_ImageDraw( image, catCopy, src, src, WHITE )
textImage = RL_ImageText( 0, "Cat", 10, 4, WHITE )
local imageSize = RL_GetImageSize( textImage )
diff --git a/include/core.h b/include/core.h
index 0b03de8..f115921 100644
--- a/include/core.h
+++ b/include/core.h
@@ -81,6 +81,9 @@ int lcoreGetDirectoryPath( lua_State *L );
int lcoreGetPrevDirectoryPath( lua_State *L );
int lcoreGetWorkingDirectory( lua_State *L );
int lcoreGetDirectoryFiles( lua_State *L );
+int lcoreChangeDirectory( lua_State *L );
+int lcoreIsFileDropped( lua_State *L );
+int lcoreGetDroppedFiles( lua_State *L );
int lcoreGetFileModTime( lua_State *L );
/* Camera2D. */
int lcoreCreateCamera2D( lua_State *L );
diff --git a/src/core.c b/src/core.c
index 75923bc..34f50ff 100644
--- a/src/core.c
+++ b/src/core.c
@@ -849,31 +849,34 @@ int lcoreEndScissorMode( lua_State *L ) {
/*
> shader = RL_LoadShader( string vsFileName, string fsFileName )
-Load shader from files and bind default locations
+Load shader from files and bind default locations.
+NOTE: Set nil if no shader
- Failure return -1
- Success return int
*/
int lcoreLoadShader( lua_State *L ) {
- // if ( !lua_isstring( L, -2 ) || !lua_isstring( L, -1 ) ) {
- // TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_LoadShader( string vsFileName, string fsFileName )" );
- // lua_pushinteger( L, -1 );
- // return 1;
- // }
+ if ( !( lua_isstring( L, -2 ) || lua_isnil( L, -2 ) ) || !( lua_isstring( L, -1 ) || lua_isnil( L, -1 ) ) ) {
+ TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_LoadShader( string vsFileName, string fsFileName )" );
+ lua_pushinteger( L, -1 );
+ return 1;
+ }
- char fsFileName[ STRING_LEN ] = { '\0' };
- char vsFileName[ STRING_LEN ] = { '\0' };
+ char *vsFileName = NULL;
+ char *fsFileName = NULL;
- if ( lua_isstring( L, -1 ) ) {
- if ( FileExists( lua_tostring( L, -1 ) ) ) {
- strcpy( fsFileName, lua_tostring( L, -1 ) );
- }
- }
if ( lua_isstring( L, -2 ) ) {
if ( FileExists( lua_tostring( L, -2 ) ) ) {
+ vsFileName = malloc( STRING_LEN * sizeof( char ) );
strcpy( vsFileName, lua_tostring( L, -2 ) );
}
}
+ if ( lua_isstring( L, -1 ) ) {
+ if ( FileExists( lua_tostring( L, -1 ) ) ) {
+ fsFileName = malloc( STRING_LEN * sizeof( char ) );
+ strcpy( fsFileName, lua_tostring( L, -1 ) );
+ }
+ }
int i = 0;
@@ -883,12 +886,17 @@ int lcoreLoadShader( lua_State *L ) {
}
}
state->shaders[i] = malloc( sizeof( Shader ) );
- // *state->shaders[i] = LoadShader( lua_tostring( L, -2 ), lua_tostring( L, -1 ) );
*state->shaders[i] = LoadShader( vsFileName, fsFileName );
- // *state->shaders[i] = LoadShader( 0, fsFileName );
lua_pushinteger( L, i );
checkShaderRealloc( i );
+ if ( vsFileName != NULL ) {
+ free( vsFileName );
+ }
+ if ( fsFileName != NULL ) {
+ free( fsFileName );
+ }
+
return 1;
}
@@ -896,27 +904,34 @@ int lcoreLoadShader( lua_State *L ) {
> shader = RL_LoadShaderFromMemory( string vsCode, string fsCode )
Load shader from code strings and bind default locations
+NOTE: Set nil if no shader
- Failure return -1
- Success return int
*/
int lcoreLoadShaderFromMemory( lua_State *L ) {
- // if ( !lua_isstring( L, -2 ) || !lua_isstring( L, -1 ) ) {
- // TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_LoadShaderFromMemory( string vsCode, string fsCode )" );
- // lua_pushinteger( L, -1 );
- // return 1;
- // }
+ if ( !( lua_isstring( L, -2 ) || lua_isnil( L, -2 ) ) || !( lua_isstring( L, -1 ) || lua_isnil( L, -1 ) ) ) {
+ TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_LoadShaderFromMemory( string vsCode, string fsCode )" );
+ lua_pushinteger( L, -1 );
+ return 1;
+ }
- char fs[ STRING_LEN ] = { '\0' };
- char vs[ STRING_LEN ] = { '\0' };
+ char *vs = NULL;
+ char *fs = NULL;
- if ( lua_isstring( L, -1 ) ) {
- strcpy( fs, lua_tostring( L, -1 ) );
- }
if ( lua_isstring( L, -2 ) ) {
+ size_t vsLen = lua_rawlen( L, -2 );
+
+ vs = malloc( vsLen * sizeof( char ) );
strcpy( vs, lua_tostring( L, -2 ) );
}
+ if ( lua_isstring( L, -1 ) ) {
+ size_t fsLen = lua_rawlen( L, -1 );
+
+ fs = malloc( fsLen * sizeof( char ) );
+ strcpy( fs, lua_tostring( L, -1 ) );
+ }
int i = 0;
@@ -926,11 +941,17 @@ int lcoreLoadShaderFromMemory( lua_State *L ) {
}
}
state->shaders[i] = malloc( sizeof( Shader ) );
- // *state->shaders[i] = LoadShaderFromMemory( lua_tostring( L, -2 ), lua_tostring( L, -1 ) );
*state->shaders[i] = LoadShaderFromMemory( vs, fs );
lua_pushinteger( L, i );
checkShaderRealloc( i );
+ if ( vs != NULL ) {
+ free( vs );
+ }
+ if ( fs != NULL ) {
+ free( fs );
+ }
+
return 1;
}
@@ -1932,7 +1953,7 @@ int lcoreGetDirectoryPath( lua_State *L ) {
}
/*
-> filePath = RL_GetPrevDirectoryPath( string dirPath )
+> directory = RL_GetPrevDirectoryPath( string dirPath )
Get previous directory path for a given path ( Uses static string )
@@ -1950,19 +1971,13 @@ int lcoreGetPrevDirectoryPath( lua_State *L ) {
}
/*
-> filePath = RL_GetWorkingDirectory()
+> directory = RL_GetWorkingDirectory()
Get current working directory ( Uses static string )
-- Failure return false
- Success return string
*/
int lcoreGetWorkingDirectory( lua_State *L ) {
- if ( !lua_isstring( L, -1 ) ) {
- TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_GetWorkingDirectory()" );
- lua_pushboolean( L, false );
- return 1;
- }
lua_pushstring( L, GetWorkingDirectory() );
return 1;
}
@@ -1996,6 +2011,59 @@ int lcoreGetDirectoryFiles( lua_State *L ) {
}
/*
+> success = RL_ChangeDirectory( string directory )
+
+Change working directory, return true on success
+
+- Failure return false
+- Success return true
+*/
+int lcoreChangeDirectory( lua_State *L ) {
+ if ( !lua_isstring( L, -1 ) ) {
+ TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_ChangeDirectory( string directory )" );
+ lua_pushboolean( L, false );
+ return 1;
+ }
+ lua_pushboolean( L, ChangeDirectory( lua_tostring( L, -1 ) ) );
+ return 1;
+}
+
+/*
+> fileDropped = RL_IsFileDropped()
+
+Check if a file has been dropped into window
+
+- Success return bool
+*/
+int lcoreIsFileDropped( lua_State *L ) {
+ lua_pushboolean( L, IsFileDropped() );
+ return 1;
+}
+
+/*
+> files = RL_GetDroppedFiles()
+
+Get dropped files names
+
+- Success return string{}
+*/
+int lcoreGetDroppedFiles( lua_State *L ) {
+ int count = 0;
+ char **files = GetDroppedFiles( &count );
+
+ lua_createtable( L, count, 0 );
+
+ for ( int i = 0; i < count; ++i ) {
+ lua_pushstring( L, files[i] );
+ lua_rawseti( L, -2, i+1 );
+ }
+
+ ClearDroppedFiles();
+
+ return 1;
+}
+
+/*
> time = RL_GetFileModTime( string fileName )
Get file modification time ( Last write time )
diff --git a/src/lua_core.c b/src/lua_core.c
index 21788ba..60b07f9 100644
--- a/src/lua_core.c
+++ b/src/lua_core.c
@@ -552,6 +552,9 @@ void luaRegister() {
lua_register( L, "RL_GetPrevDirectoryPath", lcoreGetPrevDirectoryPath );
lua_register( L, "RL_GetWorkingDirectory", lcoreGetWorkingDirectory );
lua_register( L, "RL_GetDirectoryFiles", lcoreGetDirectoryFiles );
+ lua_register( L, "RL_ChangeDirectory", lcoreChangeDirectory );
+ lua_register( L, "RL_IsFileDropped", lcoreIsFileDropped );
+ lua_register( L, "RL_GetDroppedFiles", lcoreGetDroppedFiles );
lua_register( L, "RL_GetFileModTime", lcoreGetFileModTime );
/* Camera3D. */
lua_register( L, "RL_CreateCamera2D", lcoreCreateCamera2D );