1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-10-14 18:40:43 +00:00

Improvements to shader API; use handles instead of raw pointers.

This commit is contained in:
fgenesis 2013-06-15 04:11:11 +02:00
commit 6962a3e3ab
5 changed files with 145 additions and 67 deletions

View file

@ -378,7 +378,6 @@ static void compile_time_assertions()
compile_assert(oo(Path) == oo(Avatar));
compile_assert(oo(Path) == oo(BaseText));
compile_assert(oo(Path) == oo(PauseQuad));
compile_assert(oo(Path) == oo(Shader));
#undef oo
}
#endif
@ -7750,6 +7749,7 @@ luaFunc(text_setWidth)
luaFunc(loadShader)
{
int handle = 0;
const char *vertRaw = getCString(L, 1);
const char *fragRaw = getCString(L, 2);
std::string vert, frag;
@ -7757,62 +7757,68 @@ luaFunc(loadShader)
findFile_helper(vertRaw, vert);
if(fragRaw)
findFile_helper(fragRaw, frag);
Shader *sh = new Shader();
sh->load(vert, frag);
if(!sh->isLoaded())
{
delete sh;
sh = NULL;
}
luaReturnPtr(sh);
if(core->afterEffectManager)
handle = core->afterEffectManager->loadShaderFile(vert.c_str(), frag.c_str());
luaReturnInt(handle);
}
luaFunc(createShader)
{
Shader *sh = new Shader();
sh->loadSrc(getCString(L, 1), getCString(L, 2));
if(!sh->isLoaded())
{
delete sh;
sh = NULL;
}
luaReturnPtr(sh);
int handle = 0;
if(core->afterEffectManager)
handle = core->afterEffectManager->loadShaderSrc(getCString(L, 1), getCString(L, 2));
luaReturnInt(handle);
}
luaFunc(shader_setAsAfterEffect)
{
int idx = lua_tointeger(L, 2);
if(idx < core->afterEffectManager->scriptShader.size())
core->afterEffectManager->scriptShader[idx] = lua_isuserdata(L, 1) ? getShader(L, 1) : NULL;
int handle = lua_tointeger(L, 1);
int pos = lua_tointeger(L, 2);
bool done = false;
if(core->afterEffectManager)
done = core->afterEffectManager->setShaderPipelinePos(handle, pos);
luaReturnBool(done);
}
luaFunc(shader_setNumAfterEffects)
{
if(core->afterEffectManager)
core->afterEffectManager->setShaderPipelineSize(lua_tointeger(L, 1));
luaReturnNil();
}
luaFunc(shader_setInt)
{
Shader *sh = getShader(L, 1);
const char *name = getCString(L, 2);
if(sh && name)
sh->setInt(name, lua_tointeger(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5), lua_tointeger(L, 6));
if(core->afterEffectManager)
{
Shader *sh = core->afterEffectManager->getShaderPtr(lua_tointeger(L, 1));
const char *name = getCString(L, 2);
if(sh && name)
sh->setInt(name, lua_tointeger(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5), lua_tointeger(L, 6));
}
luaReturnNil();
}
luaFunc(shader_setFloat)
{
Shader *sh = getShader(L, 1);
const char *name = getCString(L, 2);
if(sh && name)
sh->setFloat(name, lua_tonumber(L, 3), lua_tonumber(L, 4), lua_tonumber(L, 5), lua_tonumber(L, 6));
if(core->afterEffectManager)
{
Shader *sh = core->afterEffectManager->getShaderPtr(lua_tointeger(L, 1));
const char *name = getCString(L, 2);
if(sh && name)
sh->setFloat(name, lua_tonumber(L, 3), lua_tonumber(L, 4), lua_tonumber(L, 5), lua_tonumber(L, 6));
}
luaReturnNil();
}
luaFunc(shader_delete)
{
Shader *sh = getShader(L);
delete sh;
size_t sz = core->afterEffectManager->scriptShader.size();
for(size_t i = 0; i < sz; ++i)
if(core->afterEffectManager->scriptShader[i] == sh)
core->afterEffectManager->scriptShader[i] = NULL;
if(core->afterEffectManager)
core->afterEffectManager->unloadShader(lua_tointeger(L, 1));
luaReturnNil();
}
@ -8693,6 +8699,7 @@ static const struct {
luaRegister(loadShader),
luaRegister(createShader),
luaRegister(shader_setAsAfterEffect),
luaRegister(shader_setNumAfterEffects),
luaRegister(shader_setFloat),
luaRegister(shader_setInt),
luaRegister(shader_delete),