mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-02-04 10:34:01 +00:00
Merge branch 'experimental' of file:///Users/User/code/coding/Aquaria_fg_clean into experimental
This commit is contained in:
commit
0cb36b9830
12 changed files with 123 additions and 34 deletions
|
@ -4470,7 +4470,7 @@ void Avatar::action(int id, int state)
|
||||||
|
|
||||||
if (id == ACTION_PRIMARY && state)// !state
|
if (id == ACTION_PRIMARY && state)// !state
|
||||||
{
|
{
|
||||||
if (isMiniMapCursorOkay())
|
if (dsq->isMiniMapCursorOkay())
|
||||||
{
|
{
|
||||||
if (this->state.lockedToWall)
|
if (this->state.lockedToWall)
|
||||||
{
|
{
|
||||||
|
@ -5607,11 +5607,6 @@ Vector Avatar::getHeadPosition()
|
||||||
|
|
||||||
bool lastCursorKeyboard = false;
|
bool lastCursorKeyboard = false;
|
||||||
|
|
||||||
bool Avatar::isMiniMapCursorOkay()
|
|
||||||
{
|
|
||||||
return ((dsq->inputMode != INPUT_MOUSE) || (!dsq->game->miniMapRender || !dsq->game->miniMapRender->isCursorIn()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Avatar::onUpdate(float dt)
|
void Avatar::onUpdate(float dt)
|
||||||
{
|
{
|
||||||
BBGE_PROF(Avatar_onUpdate);
|
BBGE_PROF(Avatar_onUpdate);
|
||||||
|
@ -6427,7 +6422,7 @@ void Avatar::onUpdate(float dt)
|
||||||
|
|
||||||
float len = 0;
|
float len = 0;
|
||||||
|
|
||||||
if (isMiniMapCursorOkay() && !isActing(ACTION_ROLL) &&
|
if (dsq->isMiniMapCursorOkay() && !isActing(ACTION_ROLL) &&
|
||||||
_isUnderWater && !riding && !boneLock.on &&
|
_isUnderWater && !riding && !boneLock.on &&
|
||||||
(movingOn || ((dsq->inputMode == INPUT_JOYSTICK || dsq->inputMode== INPUT_KEYBOARD) || (core->mouse.buttons.left || bursting))))
|
(movingOn || ((dsq->inputMode == INPUT_JOYSTICK || dsq->inputMode== INPUT_KEYBOARD) || (core->mouse.buttons.left || bursting))))
|
||||||
{
|
{
|
||||||
|
|
|
@ -159,8 +159,6 @@ public:
|
||||||
bool zoomOverriden;
|
bool zoomOverriden;
|
||||||
void clampPosition();
|
void clampPosition();
|
||||||
|
|
||||||
bool isMiniMapCursorOkay();
|
|
||||||
|
|
||||||
void splash(bool down);
|
void splash(bool down);
|
||||||
InterpolatedVector myZoom;
|
InterpolatedVector myZoom;
|
||||||
|
|
||||||
|
|
|
@ -5099,3 +5099,9 @@ void DSQ::resetLayerPasses()
|
||||||
renderObjectLayers[LR_ENTITIES].startPass = -2;
|
renderObjectLayers[LR_ENTITIES].startPass = -2;
|
||||||
renderObjectLayers[LR_ENTITIES].endPass = 5;
|
renderObjectLayers[LR_ENTITIES].endPass = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DSQ::isMiniMapCursorOkay()
|
||||||
|
{
|
||||||
|
return ((inputMode != INPUT_MOUSE) || (!game->miniMapRender || !game->miniMapRender->isCursorIn()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1572,6 +1572,7 @@ public:
|
||||||
virtual void onBackgroundUpdate();
|
virtual void onBackgroundUpdate();
|
||||||
|
|
||||||
void resetLayerPasses();
|
void resetLayerPasses();
|
||||||
|
bool isMiniMapCursorOkay();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
|
@ -371,6 +371,7 @@ static void compile_time_assertions()
|
||||||
compile_assert(oo(Path) == oo(Avatar));
|
compile_assert(oo(Path) == oo(Avatar));
|
||||||
compile_assert(oo(Path) == oo(BaseText));
|
compile_assert(oo(Path) == oo(BaseText));
|
||||||
compile_assert(oo(Path) == oo(PauseQuad));
|
compile_assert(oo(Path) == oo(PauseQuad));
|
||||||
|
compile_assert(oo(Path) == oo(ParticleEffect));
|
||||||
#undef oo
|
#undef oo
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -593,6 +594,16 @@ static SkeletalSprite *getSkeletalSprite(Entity *e)
|
||||||
return e ? &e->skeletalSprite : NULL;
|
return e ? &e->skeletalSprite : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
ParticleEffect *getParticle(lua_State *L, int slot = 1)
|
||||||
|
{
|
||||||
|
ParticleEffect *q = (ParticleEffect*)lua_touserdata(L, slot);
|
||||||
|
ENSURE_TYPE(q, SCO_PARTICLE_EFFECT);
|
||||||
|
if (!q)
|
||||||
|
scriptDebug(L, "Invalid Particle Effect");
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
static bool looksLikeGlobal(const char *s)
|
static bool looksLikeGlobal(const char *s)
|
||||||
{
|
{
|
||||||
for( ; *s; ++s)
|
for( ; *s; ++s)
|
||||||
|
@ -838,6 +849,8 @@ MakeTypeCheckFunc(isWeb, SCO_WEB)
|
||||||
MakeTypeCheckFunc(isIng, SCO_INGREDIENT)
|
MakeTypeCheckFunc(isIng, SCO_INGREDIENT)
|
||||||
MakeTypeCheckFunc(isBeam, SCO_BEAM)
|
MakeTypeCheckFunc(isBeam, SCO_BEAM)
|
||||||
MakeTypeCheckFunc(isText, SCO_TEXT)
|
MakeTypeCheckFunc(isText, SCO_TEXT)
|
||||||
|
MakeTypeCheckFunc(isShader, SCO_SHADER)
|
||||||
|
MakeTypeCheckFunc(isParticleEffect, SCO_PARTICLE_EFFECT)
|
||||||
|
|
||||||
#undef MakeTypeCheckFunc
|
#undef MakeTypeCheckFunc
|
||||||
|
|
||||||
|
@ -1794,7 +1807,8 @@ luaFunc(quad_getBorderAlpha)
|
||||||
MAKE_QUAD_FUNCS(beam, beam ) \
|
MAKE_QUAD_FUNCS(beam, beam ) \
|
||||||
MAKE_ROBJ_FUNCS(getQuad, quad ) \
|
MAKE_ROBJ_FUNCS(getQuad, quad ) \
|
||||||
MAKE_ROBJ_FUNCS(getWeb, web ) \
|
MAKE_ROBJ_FUNCS(getWeb, web ) \
|
||||||
MAKE_ROBJ_FUNCS(getText, text )
|
MAKE_ROBJ_FUNCS(getText, text ) \
|
||||||
|
MAKE_ROBJ_FUNCS(getParticle, pe )
|
||||||
|
|
||||||
// first time, create them. (There is a second use of this further down, with different MK_* macros)
|
// first time, create them. (There is a second use of this further down, with different MK_* macros)
|
||||||
EXPAND_FUNC_PROTOTYPES
|
EXPAND_FUNC_PROTOTYPES
|
||||||
|
@ -7979,8 +7993,9 @@ luaFunc(setGemPosition)
|
||||||
if(mapname.empty())
|
if(mapname.empty())
|
||||||
mapname = dsq->game->sceneName;
|
mapname = dsq->game->sceneName;
|
||||||
Vector pos(lua_tonumber(L, 2), lua_tonumber(L, 3));
|
Vector pos(lua_tonumber(L, 2), lua_tonumber(L, 3));
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
WorldMapTile *tile = dsq->continuity.worldMap.getWorldMapTile(getString(L, 1));
|
WorldMapTile *tile = dsq->continuity.worldMap.getWorldMapTile(mapname);
|
||||||
if(tile)
|
if(tile)
|
||||||
{
|
{
|
||||||
pos = dsq->game->worldMapRender->getWorldToTile(tile, pos, true, true);
|
pos = dsq->game->worldMapRender->getWorldToTile(tile, pos, true, true);
|
||||||
|
@ -7991,6 +8006,7 @@ luaFunc(setGemPosition)
|
||||||
GemData& gem = *it;
|
GemData& gem = *it;
|
||||||
gem.pos = pos;
|
gem.pos = pos;
|
||||||
gem.mapName = mapname;
|
gem.mapName = mapname;
|
||||||
|
result = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -8001,7 +8017,7 @@ luaFunc(setGemPosition)
|
||||||
{
|
{
|
||||||
debugLog("setGemPosition: Map tile does not exist: " + mapname);
|
debugLog("setGemPosition: Map tile does not exist: " + mapname);
|
||||||
}
|
}
|
||||||
luaReturnNil();
|
luaReturnBool(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
luaFunc(removeGem)
|
luaFunc(removeGem)
|
||||||
|
@ -8336,6 +8352,11 @@ luaFunc(getScreenVirtualSize)
|
||||||
luaReturnVec2(core->getVirtualWidth(), core->getVirtualHeight());
|
luaReturnVec2(core->getVirtualWidth(), core->getVirtualHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
luaFunc(isMiniMapCursorOkay)
|
||||||
|
{
|
||||||
|
luaReturnBool(dsq->isMiniMapCursorOkay());
|
||||||
|
}
|
||||||
|
|
||||||
luaFunc(inv_isFull)
|
luaFunc(inv_isFull)
|
||||||
{
|
{
|
||||||
IngredientData *data = dsq->continuity.getIngredientDataByName(getString(L, 1));
|
IngredientData *data = dsq->continuity.getIngredientDataByName(getString(L, 1));
|
||||||
|
@ -8557,10 +8578,31 @@ luaFunc(shader_setFloat)
|
||||||
luaFunc(shader_delete)
|
luaFunc(shader_delete)
|
||||||
{
|
{
|
||||||
if(core->afterEffectManager)
|
if(core->afterEffectManager)
|
||||||
core->afterEffectManager->unloadShader(lua_tointeger(L, 1));
|
core->afterEffectManager->deleteShader(lua_tointeger(L, 1));
|
||||||
luaReturnNil();
|
luaReturnNil();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
luaFunc(pe_start)
|
||||||
|
{
|
||||||
|
ParticleEffect *pe = getParticle(L);
|
||||||
|
if (pe)
|
||||||
|
pe->start();
|
||||||
|
luaReturnNil();
|
||||||
|
}
|
||||||
|
|
||||||
|
luaFunc(pe_stop)
|
||||||
|
{
|
||||||
|
ParticleEffect *pe = getParticle(L);
|
||||||
|
if (pe)
|
||||||
|
pe->stop();
|
||||||
|
luaReturnNil();
|
||||||
|
}
|
||||||
|
|
||||||
|
luaFunc(pe_isRunning)
|
||||||
|
{
|
||||||
|
ParticleEffect *pe = getParticle(L);
|
||||||
|
luaReturnBool(pe && pe->isRunning());
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -9483,6 +9525,7 @@ static const struct {
|
||||||
luaRegister(getScreenVirtualOff),
|
luaRegister(getScreenVirtualOff),
|
||||||
luaRegister(getScreenSize),
|
luaRegister(getScreenSize),
|
||||||
luaRegister(getScreenVirtualSize),
|
luaRegister(getScreenVirtualSize),
|
||||||
|
luaRegister(isMiniMapCursorOkay),
|
||||||
|
|
||||||
luaRegister(inv_isFull),
|
luaRegister(inv_isFull),
|
||||||
luaRegister(inv_getMaxAmount),
|
luaRegister(inv_getMaxAmount),
|
||||||
|
@ -9514,6 +9557,10 @@ static const struct {
|
||||||
luaRegister(shader_setInt),
|
luaRegister(shader_setInt),
|
||||||
luaRegister(shader_delete),
|
luaRegister(shader_delete),
|
||||||
|
|
||||||
|
luaRegister(pe_start),
|
||||||
|
luaRegister(pe_stop),
|
||||||
|
luaRegister(pe_isRunning),
|
||||||
|
|
||||||
luaRegister(isQuad),
|
luaRegister(isQuad),
|
||||||
luaRegister(isNode),
|
luaRegister(isNode),
|
||||||
luaRegister(isObject),
|
luaRegister(isObject),
|
||||||
|
@ -9523,6 +9570,8 @@ static const struct {
|
||||||
luaRegister(isIng),
|
luaRegister(isIng),
|
||||||
luaRegister(isBeam),
|
luaRegister(isBeam),
|
||||||
luaRegister(isText),
|
luaRegister(isText),
|
||||||
|
luaRegister(isShader),
|
||||||
|
luaRegister(isParticleEffect),
|
||||||
|
|
||||||
|
|
||||||
#undef MK_FUNC
|
#undef MK_FUNC
|
||||||
|
|
|
@ -113,6 +113,13 @@ void AfterEffectManager::deleteShaders()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AfterEffectManager::unloadShaders()
|
||||||
|
{
|
||||||
|
for(size_t i = 0; i < loadedShaders.size(); ++i)
|
||||||
|
if(loadedShaders[i])
|
||||||
|
loadedShaders[i]->unload();
|
||||||
|
}
|
||||||
|
|
||||||
void AfterEffectManager::clear()
|
void AfterEffectManager::clear()
|
||||||
{
|
{
|
||||||
deleteEffects();
|
deleteEffects();
|
||||||
|
@ -196,7 +203,7 @@ void AfterEffectManager::renderGrid()
|
||||||
Shader *activeShader = 0;
|
Shader *activeShader = 0;
|
||||||
for (size_t i = 0; i < shaderPipeline.size(); ++i)
|
for (size_t i = 0; i < shaderPipeline.size(); ++i)
|
||||||
{
|
{
|
||||||
if(shaderPipeline[i])
|
if(shaderPipeline[i] && shaderPipeline[i]->isLoaded())
|
||||||
{
|
{
|
||||||
if(firstShader < 0)
|
if(firstShader < 0)
|
||||||
{
|
{
|
||||||
|
@ -275,7 +282,7 @@ void AfterEffectManager::renderGrid()
|
||||||
for(int i = firstShader + 1; i <= lastShader; ++i)
|
for(int i = firstShader + 1; i <= lastShader; ++i)
|
||||||
{
|
{
|
||||||
activeShader = shaderPipeline[i];
|
activeShader = shaderPipeline[i];
|
||||||
if(!activeShader)
|
if(!(activeShader && activeShader->isLoaded()))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Swap and exchange framebuffers. The old output buffer serves as texture input for the other one
|
// Swap and exchange framebuffers. The old output buffer serves as texture input for the other one
|
||||||
|
@ -373,7 +380,7 @@ void AfterEffectManager::renderGridPoints()
|
||||||
void AfterEffectManager::unloadDevice()
|
void AfterEffectManager::unloadDevice()
|
||||||
{
|
{
|
||||||
backupBuffer.unloadDevice();
|
backupBuffer.unloadDevice();
|
||||||
deleteShaders();
|
unloadShaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AfterEffectManager::reloadDevice()
|
void AfterEffectManager::reloadDevice()
|
||||||
|
@ -399,7 +406,22 @@ void AfterEffectManager::reloadDevice()
|
||||||
else
|
else
|
||||||
backupBuffer.init(-1, -1, true);
|
backupBuffer.init(-1, -1, true);
|
||||||
|
|
||||||
loadShaders();
|
for (size_t i = 0; i < loadedShaders.size(); ++i)
|
||||||
|
{
|
||||||
|
if (Shader *sh = loadedShaders[i])
|
||||||
|
{
|
||||||
|
sh->reload();
|
||||||
|
if (!sh->isLoaded())
|
||||||
|
{
|
||||||
|
debugLog("AfterEffect::reloadDevice(): Failed to reload shader");
|
||||||
|
delete sh;
|
||||||
|
loadedShaders[i] = 0;
|
||||||
|
for(size_t j = 0; j < shaderPipeline.size(); ++j)
|
||||||
|
if(sh == shaderPipeline[j])
|
||||||
|
shaderPipeline[j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AfterEffectManager::addEffect(Effect *e)
|
void AfterEffectManager::addEffect(Effect *e)
|
||||||
|
@ -612,7 +634,7 @@ int AfterEffectManager::_insertShader(Shader *sh)
|
||||||
return loadedShaders.size();
|
return loadedShaders.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AfterEffectManager::unloadShader(int handle)
|
void AfterEffectManager::deleteShader(int handle)
|
||||||
{
|
{
|
||||||
Shader *sh = getShaderPtr(handle);
|
Shader *sh = getShaderPtr(handle);
|
||||||
if(!sh)
|
if(!sh)
|
||||||
|
|
|
@ -91,6 +91,7 @@ public:
|
||||||
void renderGridPoints();
|
void renderGridPoints();
|
||||||
|
|
||||||
void loadShaders();
|
void loadShaders();
|
||||||
|
void unloadShaders(); // unloads shaders but keeps code and data intact, so that they can be reloaded.
|
||||||
void deleteShaders();
|
void deleteShaders();
|
||||||
|
|
||||||
void unloadDevice();
|
void unloadDevice();
|
||||||
|
@ -116,7 +117,7 @@ public:
|
||||||
Shader *getShaderPtr(int handle);
|
Shader *getShaderPtr(int handle);
|
||||||
void setShaderPipelineSize(size_t size);
|
void setShaderPipelineSize(size_t size);
|
||||||
bool setShaderPipelinePos(int handle, size_t pos);
|
bool setShaderPipelinePos(int handle, size_t pos);
|
||||||
void unloadShader(int handle);
|
void deleteShader(int handle);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int _insertShader(Shader *sh);
|
int _insertShader(Shader *sh);
|
||||||
|
|
|
@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
ParticleEffect::ParticleEffect() : RenderObject()
|
ParticleEffect::ParticleEffect() : RenderObject()
|
||||||
{
|
{
|
||||||
|
addType(SCO_PARTICLE_EFFECT);
|
||||||
running = false;
|
running = false;
|
||||||
waitForParticles = true;
|
waitForParticles = true;
|
||||||
effectLife = -1;
|
effectLife = -1;
|
||||||
|
|
|
@ -39,6 +39,7 @@ static const char *scriptObjTypeNames[] =
|
||||||
/* (1 <<11) */ "Text",
|
/* (1 <<11) */ "Text",
|
||||||
/* (1 <<12) */ "PauseQuad",
|
/* (1 <<12) */ "PauseQuad",
|
||||||
/* (1 <<13) */ "Shader",
|
/* (1 <<13) */ "Shader",
|
||||||
|
/* (1 <<14) */ "ParticleEffect",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ enum ScriptObjectType
|
||||||
SCO_TEXT = 0x0800,
|
SCO_TEXT = 0x0800,
|
||||||
SCO_PAUSEQUAD = 0x1000,
|
SCO_PAUSEQUAD = 0x1000,
|
||||||
SCO_SHADER = 0x2000,
|
SCO_SHADER = 0x2000,
|
||||||
|
SCO_PARTICLE_EFFECT = 0x4000,
|
||||||
|
|
||||||
SCO_FORCE_32BIT = 0xFFFFFFFF
|
SCO_FORCE_32BIT = 0xFFFFFFFF
|
||||||
};
|
};
|
||||||
|
|
|
@ -164,7 +164,10 @@ bool Shader::isLoaded() const
|
||||||
|
|
||||||
void Shader::reload()
|
void Shader::reload()
|
||||||
{
|
{
|
||||||
load(vertFile, fragFile);
|
if (vertFile.size() || fragFile.size())
|
||||||
|
load(vertFile, fragFile);
|
||||||
|
else
|
||||||
|
loadSrc(vertSrc.c_str(), fragSrc.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader::bind()
|
void Shader::bind()
|
||||||
|
@ -321,6 +324,9 @@ void Shader::loadSrc(const char *vertCode, const char *fragCode)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vertSrc = vertCode ? vertCode : "";
|
||||||
|
fragSrc = fragCode ? fragCode : "";
|
||||||
|
|
||||||
_queryUniforms();
|
_queryUniforms();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -328,15 +334,6 @@ void Shader::loadSrc(const char *vertCode, const char *fragCode)
|
||||||
|
|
||||||
void Shader::_setUniform(Uniform *u)
|
void Shader::_setUniform(Uniform *u)
|
||||||
{
|
{
|
||||||
/*if(u->location == -1)
|
|
||||||
{
|
|
||||||
u->location = glGetUniformLocationARB(g_programObj, u->name);
|
|
||||||
if(u->location == -1)
|
|
||||||
{
|
|
||||||
u->dirty = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
switch(u->type)
|
switch(u->type)
|
||||||
{
|
{
|
||||||
case GL_FLOAT: glUniform1fvARB(u->location, 1, u->data.f); break;
|
case GL_FLOAT: glUniform1fvARB(u->location, 1, u->data.f); break;
|
||||||
|
@ -381,9 +378,13 @@ void Shader::_queryUniforms()
|
||||||
glGetObjectParameterivARB(g_programObj, GL_OBJECT_ACTIVE_UNIFORMS_ARB , &numUniforms);
|
glGetObjectParameterivARB(g_programObj, GL_OBJECT_ACTIVE_UNIFORMS_ARB , &numUniforms);
|
||||||
|
|
||||||
if (numUniforms <= 0)
|
if (numUniforms <= 0)
|
||||||
|
{
|
||||||
|
uniforms.clear();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uniforms.reserve(numUniforms);
|
uniforms.reserve(numUniforms);
|
||||||
|
size_t total = 0;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < numUniforms; ++i)
|
for (unsigned int i = 0; i < numUniforms; ++i)
|
||||||
{
|
{
|
||||||
|
@ -396,15 +397,27 @@ void Shader::_queryUniforms()
|
||||||
u.location = glGetUniformLocationARB(g_programObj, u.name);
|
u.location = glGetUniformLocationARB(g_programObj, u.name);
|
||||||
if(u.location == -1)
|
if(u.location == -1)
|
||||||
continue;
|
continue;
|
||||||
u.dirty = false;
|
|
||||||
u.type = type;
|
|
||||||
memset(&u.data, 0, sizeof(u.data));
|
|
||||||
|
|
||||||
uniforms.push_back(u);
|
bool add = total >= uniforms.size();
|
||||||
|
if(add || type != u.type) // keep data intact on reload
|
||||||
|
memset(&u.data, 0, sizeof(u.data));
|
||||||
|
u.dirty = true;
|
||||||
|
u.type = type;
|
||||||
|
|
||||||
|
if(add)
|
||||||
|
uniforms.push_back(u);
|
||||||
|
else
|
||||||
|
uniforms[total] = u;
|
||||||
|
|
||||||
|
++total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uniforms.resize(total);
|
||||||
|
|
||||||
// sort to be able to do binary search later
|
// sort to be able to do binary search later
|
||||||
std::sort(uniforms.begin(), uniforms.end());
|
std::sort(uniforms.begin(), uniforms.end());
|
||||||
|
|
||||||
|
uniformsDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Shader::_getUniformIndex(const char *name)
|
int Shader::_getUniformIndex(const char *name)
|
||||||
|
|
|
@ -44,6 +44,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string vertFile, fragFile;
|
std::string vertFile, fragFile;
|
||||||
|
std::string vertSrc, fragSrc;
|
||||||
#ifdef BBGE_BUILD_OPENGL
|
#ifdef BBGE_BUILD_OPENGL
|
||||||
GLuint g_programObj;
|
GLuint g_programObj;
|
||||||
int numUniforms;
|
int numUniforms;
|
||||||
|
@ -72,7 +73,7 @@ private:
|
||||||
float f[4];
|
float f[4];
|
||||||
};
|
};
|
||||||
} data;
|
} data;
|
||||||
char name[32];
|
char name[64];
|
||||||
|
|
||||||
bool operator< (const Uniform&) const;
|
bool operator< (const Uniform&) const;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue