mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Eliminate redundant glActiveTexture calls when shaders are used.
The redundant calls were introduced with the previous commit.
This commit is contained in:
@@ -977,7 +977,7 @@ void OpenGL::setTextureUnit(int textureunit)
|
||||
state.curTextureUnit = textureunit;
|
||||
}
|
||||
|
||||
void OpenGL::bindTextureToUnit(TextureType target, GLuint texture, int textureunit, bool restoreprev)
|
||||
void OpenGL::bindTextureToUnit(TextureType target, GLuint texture, int textureunit, bool restoreprev, bool bindforedit)
|
||||
{
|
||||
if (texture != state.boundTextures[target][textureunit])
|
||||
{
|
||||
@@ -993,14 +993,14 @@ void OpenGL::bindTextureToUnit(TextureType target, GLuint texture, int textureun
|
||||
else
|
||||
state.curTextureUnit = textureunit;
|
||||
}
|
||||
else if (!restoreprev && textureunit != state.curTextureUnit)
|
||||
else if (bindforedit && !restoreprev && textureunit != state.curTextureUnit)
|
||||
{
|
||||
glActiveTexture(GL_TEXTURE0 + textureunit);
|
||||
state.curTextureUnit = textureunit;
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGL::bindTextureToUnit(Texture *texture, int textureunit, bool restoreprev)
|
||||
void OpenGL::bindTextureToUnit(Texture *texture, int textureunit, bool restoreprev, bool bindforedit)
|
||||
{
|
||||
TextureType textype = TEXTURE_2D;
|
||||
GLuint handle = 0;
|
||||
@@ -1022,7 +1022,7 @@ void OpenGL::bindTextureToUnit(Texture *texture, int textureunit, bool restorepr
|
||||
handle = getDefaultTexture(textype);
|
||||
}
|
||||
|
||||
bindTextureToUnit(textype, handle, textureunit, restoreprev);
|
||||
bindTextureToUnit(textype, handle, textureunit, restoreprev, bindforedit);
|
||||
}
|
||||
|
||||
void OpenGL::deleteTexture(GLuint texture)
|
||||
|
||||
@@ -324,9 +324,10 @@ public:
|
||||
*
|
||||
* @param textureunit Index in the range of [0, maxtextureunits-1]
|
||||
* @param restoreprev Restore previously bound texture unit when done.
|
||||
* @param bindforedit If false, the active texture unit may be left alone.
|
||||
**/
|
||||
void bindTextureToUnit(TextureType target, GLuint texture, int textureunit, bool restoreprev);
|
||||
void bindTextureToUnit(Texture *texture, int textureunit, bool restoreprev);
|
||||
void bindTextureToUnit(TextureType target, GLuint texture, int textureunit, bool restoreprev, bool bindforedit = true);
|
||||
void bindTextureToUnit(Texture *texture, int textureunit, bool restoreprev, bool bindforedit = true);
|
||||
|
||||
/**
|
||||
* Helper for deleting an OpenGL texture.
|
||||
|
||||
@@ -451,7 +451,7 @@ void Shader::attach()
|
||||
{
|
||||
const TextureUnit &unit = textureUnits[i];
|
||||
if (unit.active)
|
||||
gl.bindTextureToUnit(unit.type, unit.texture, i, false);
|
||||
gl.bindTextureToUnit(unit.type, unit.texture, i, false, false);
|
||||
}
|
||||
|
||||
// send any pending uniforms to the shader program.
|
||||
@@ -647,7 +647,7 @@ void Shader::sendTextures(const UniformInfo *info, Texture **textures, int count
|
||||
int texunit = info->ints[i];
|
||||
|
||||
if (shaderactive)
|
||||
gl.bindTextureToUnit(info->textureType, gltex, texunit, false);
|
||||
gl.bindTextureToUnit(info->textureType, gltex, texunit, false, false);
|
||||
|
||||
// Store texture id so it can be re-bound to the texture unit later.
|
||||
textureUnits[texunit].texture = gltex;
|
||||
|
||||
Reference in New Issue
Block a user