SharedState: Don't reallocate global tex on every bind

This commit is contained in:
Jonas Kulla 2014-12-23 19:24:29 +01:00
parent ee17bb2137
commit b963c67339
1 changed files with 14 additions and 1 deletions

View File

@ -88,6 +88,7 @@ struct SharedStatePrivate
TEX::ID globalTex; TEX::ID globalTex;
int globalTexW, globalTexH; int globalTexW, globalTexH;
bool globalTexDirty;
TEXFBO gpTexFBO; TEXFBO gpTexFBO;
@ -144,6 +145,7 @@ struct SharedStatePrivate
TEX::setRepeat(false); TEX::setRepeat(false);
TEX::setSmooth(false); TEX::setSmooth(false);
TEX::allocEmpty(globalTexW, globalTexH); TEX::allocEmpty(globalTexW, globalTexH);
globalTexDirty = false;
TEXFBO::init(gpTexFBO); TEXFBO::init(gpTexFBO);
/* Reuse starting values */ /* Reuse starting values */
@ -251,16 +253,27 @@ GlobalIBO &SharedState::globalIBO()
void SharedState::bindTex() void SharedState::bindTex()
{ {
TEX::bind(p->globalTex); TEX::bind(p->globalTex);
TEX::allocEmpty(p->globalTexW, p->globalTexH);
if (p->globalTexDirty)
{
TEX::allocEmpty(p->globalTexW, p->globalTexH);
p->globalTexDirty = false;
}
} }
void SharedState::ensureTexSize(int minW, int minH, Vec2i &currentSizeOut) void SharedState::ensureTexSize(int minW, int minH, Vec2i &currentSizeOut)
{ {
if (minW > p->globalTexW) if (minW > p->globalTexW)
{
p->globalTexDirty = true;
p->globalTexW = findNextPow2(minW); p->globalTexW = findNextPow2(minW);
}
if (minH > p->globalTexH) if (minH > p->globalTexH)
{
p->globalTexDirty = true;
p->globalTexH = findNextPow2(minH); p->globalTexH = findNextPow2(minH);
}
currentSizeOut = Vec2i(p->globalTexW, p->globalTexH); currentSizeOut = Vec2i(p->globalTexW, p->globalTexH);
} }