From f8b4b709e62c0fe25e4483925bac4abea5d8cafe Mon Sep 17 00:00:00 2001 From: jussi Date: Tue, 31 Oct 2023 11:52:36 +0200 Subject: Compute shader management and Buffer management. --- API.md | 28 ++++++++++++++++++++++++++++ ReiLua_API.lua | 25 +++++++++++++++++++++++++ changelog | 1 + devnotes | 4 ++-- include/lrlgl.h | 5 +++++ src/lua_core.c | 5 +++++ src/rlgl.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 120 insertions(+), 2 deletions(-) diff --git a/API.md b/API.md index 43b20fc..b23c9eb 100644 --- a/API.md +++ b/API.md @@ -6924,6 +6924,34 @@ Set shader currently active (id and locations) --- +## RLGL - Compute shader management + +--- + +> programId = RL.rlLoadComputeShaderProgram( int shaderId ) + +Load compute shader program + +- Success return int + +--- + +> RL.rlComputeShaderDispatch( int groupX, int groupY, int groupZ ) + +Dispatch compute shader (equivalent to *draw* for graphics pipeline) + +--- + +## RLGL - Buffer management + +--- + +> RL.rlBindImageTexture( int id, int index, int format, bool readonly ) + +Bind image texture + +--- + ## RLGL - Matrix state management --- diff --git a/ReiLua_API.lua b/ReiLua_API.lua index b792a6d..bcb2095 100644 --- a/ReiLua_API.lua +++ b/ReiLua_API.lua @@ -5561,6 +5561,31 @@ function RL.rlSetUniformSampler( locIndex, textureId ) end ---@return any RL.rlSetShader function RL.rlSetShader( id, locs ) end +-- RLGL - Compute shader management + +---Load compute shader program +---- Success return int +---@param shaderId integer +---@return any programId +function RL.rlLoadComputeShaderProgram( shaderId ) end + +---Dispatch compute shader (equivalent to *draw* for graphics pipeline) +---@param groupX integer +---@param groupY integer +---@param groupZ integer +---@return any RL.rlComputeShaderDispatch +function RL.rlComputeShaderDispatch( groupX, groupY, groupZ ) end + +-- RLGL - Buffer management + +---Bind image texture +---@param id integer +---@param index integer +---@param format integer +---@param readonly boolean +---@return any RL.rlBindImageTexture +function RL.rlBindImageTexture( id, index, format, readonly ) end + -- RLGL - Matrix state management ---Get internal modelview matrix diff --git a/changelog b/changelog index 24a63cb..ccecb9a 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,7 @@ KEY CHANGES: - ADDED: GC_UNLOAD build time define for enabling/disabling Lua garbage collection for objects. Can be checked with IsGCUnloadEnabled - ADDED: Shaders management functions. + - ADDED: Compute shader management and Buffer management. DETAILED CHANGES: - CHANGED: GenImageColor now takes Vector2 as size. diff --git a/devnotes b/devnotes index 3eb51a8..e4a99cd 100644 --- a/devnotes +++ b/devnotes @@ -2,8 +2,6 @@ Current { } Backlog { - * rlgl - * Compute shader management * Text * Codepoints? * Audio @@ -14,6 +12,8 @@ Backlog { * Models * LoadMaterials (Load materials from model file). * LoadMaterialsFromModel (Could then for example edit and set back to model). + * rlgl + * Shader buffer storage object management (ssbo) * Extend color lib functionality. * Global variable descriptions for API. diff --git a/include/lrlgl.h b/include/lrlgl.h index 672aadc..dfe97e3 100644 --- a/include/lrlgl.h +++ b/include/lrlgl.h @@ -115,6 +115,11 @@ int lrlglSetUniform( lua_State *L ); int lrlglSetUniformMatrix( lua_State *L ); int lrlglSetUniformSampler( lua_State *L ); int lrlglSetShader( lua_State *L ); +/* Compute shader management */ +int lrlglLoadComputeShaderProgram( lua_State *L ); +int lrlglComputeShaderDispatch( lua_State *L ); +/* Buffer management */ +int lrlglBindImageTexture( lua_State *L ); /* Matrix state management */ int lrlglGetMatrixModelview( lua_State *L ); int lrlglGetMatrixProjection( lua_State *L ); diff --git a/src/lua_core.c b/src/lua_core.c index 7c447f6..cd53c83 100644 --- a/src/lua_core.c +++ b/src/lua_core.c @@ -2296,6 +2296,11 @@ void luaRegister() { assingGlobalFunction( "rlSetUniformMatrix", lrlglSetUniformMatrix ); assingGlobalFunction( "rlSetUniformSampler", lrlglSetUniformSampler ); assingGlobalFunction( "rlSetShader", lrlglSetShader ); + /* Compute shader management */ + assingGlobalFunction( "rlLoadComputeShaderProgram", lrlglLoadComputeShaderProgram ); + assingGlobalFunction( "rlComputeShaderDispatch", lrlglComputeShaderDispatch ); + /* Buffer management */ + assingGlobalFunction( "rlBindImageTexture", lrlglBindImageTexture ); /* Matrix state management. */ assingGlobalFunction( "rlGetMatrixModelview", lrlglGetMatrixModelview ); assingGlobalFunction( "rlGetMatrixProjection", lrlglGetMatrixProjection ); diff --git a/src/rlgl.c b/src/rlgl.c index 4a13c81..5855f60 100644 --- a/src/rlgl.c +++ b/src/rlgl.c @@ -1393,6 +1393,60 @@ int lrlglSetShader( lua_State *L ) { return 0; } +/* +## RLGL - Compute shader management +*/ + +/* +> programId = RL.rlLoadComputeShaderProgram( int shaderId ) + +Load compute shader program + +- Success return int +*/ +int lrlglLoadComputeShaderProgram( lua_State *L ) { + unsigned int shaderId = (unsigned int)luaL_checkinteger( L, 1 ); + + lua_pushinteger( L, rlLoadComputeShaderProgram( shaderId ) ); + + return 1; +} + +/* +> RL.rlComputeShaderDispatch( int groupX, int groupY, int groupZ ) + +Dispatch compute shader (equivalent to *draw* for graphics pipeline) +*/ +int lrlglComputeShaderDispatch( lua_State *L ) { + unsigned int groupX = (unsigned int)luaL_checkinteger( L, 1 ); + unsigned int groupY = (unsigned int)luaL_checkinteger( L, 2 ); + unsigned int groupZ = (unsigned int)luaL_checkinteger( L, 3 ); + + rlComputeShaderDispatch( groupX, groupY, groupZ ); + + return 0; +} + +/* +## RLGL - Buffer management +*/ + +/* +> RL.rlBindImageTexture( int id, int index, int format, bool readonly ) + +Bind image texture +*/ +int lrlglBindImageTexture( lua_State *L ) { + unsigned int id = (unsigned int)luaL_checkinteger( L, 1 ); + unsigned int index = (unsigned int)luaL_checkinteger( L, 2 ); + int format = luaL_checkinteger( L, 3 ); + bool readonly = uluaGetBoolean( L, 4 ); + + rlBindImageTexture( id, index, format, readonly ); + + return 0; +} + /* ## RLGL - Matrix state management */ -- cgit v1.2.3