summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/TextureCache.cpp
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2014-01-21 10:34:48 +0100
committerdegasus <wickmarkus@web.de>2014-01-21 10:34:48 +0100
commit60632fda6f7509e1d126fee62c08205c87f19296 (patch)
tree13679f2b4372ab407b6b44ec548387b22a9a0312 /Source/Core/VideoBackends/OGL/TextureCache.cpp
parentfe02833f1376bee079b16f7e093d548e1666bddf (diff)
OpenGL: remove small optimization
This one was introduced to reduce the glBindTexture and glActiveTexture calls. But it was quite a bit of logic and only an improvment on uploading/creating a texture, which is done rarely.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/TextureCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/TextureCache.cpp37
1 files changed, 9 insertions, 28 deletions
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp
index e2b5e0dde4..c4a89b004f 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp
@@ -52,7 +52,6 @@ static u32 s_DepthCbufid;
static u32 s_Textures[8];
static u32 s_ActiveTexture;
-static u32 s_NextStage;
bool SaveTexture(const std::string filename, u32 textarget, u32 tex, int virtual_width, int virtual_height, unsigned int level)
{
@@ -188,36 +187,26 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
entry.gl_type = gl_type;
entry.pcfmt = pcfmt;
- entry.m_tex_levels = tex_levels;
+ glActiveTexture(GL_TEXTURE0+9);
+ glBindTexture(GL_TEXTURE_2D, entry.texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, tex_levels - 1);
entry.Load(width, height, expanded_width, 0);
+ // This isn't needed as Load() also reset the stage in the end
+ //TextureCache::SetStage();
+
return &entry;
}
void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level)
{
- if (s_ActiveTexture != s_NextStage)
- {
- glActiveTexture(GL_TEXTURE0 + s_NextStage);
- s_ActiveTexture = s_NextStage;
- }
-
- if (s_Textures[s_NextStage] != texture)
+ if (pcfmt != PC_TEX_FMT_DXT1)
{
+ glActiveTexture(GL_TEXTURE0+9);
glBindTexture(GL_TEXTURE_2D, texture);
- s_Textures[s_NextStage] = texture;
- }
- // TODO: sloppy, just do this on creation?
- if (level == 0)
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, m_tex_levels - 1);
- }
-
- if (pcfmt != PC_TEX_FMT_DXT1)
- {
if (expanded_width != width)
glPixelStorei(GL_UNPACK_ROW_LENGTH, expanded_width);
@@ -232,6 +221,7 @@ void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,
//glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
//width, height, 0, expanded_width * expanded_height/2, temp);
}
+ TextureCache::SetStage();
GL_REPORT_ERRORD();
}
@@ -249,7 +239,6 @@ TextureCache::TCacheEntryBase* TextureCache::CreateRenderTargetTexture(
gl_type = GL_UNSIGNED_BYTE;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
- entry->m_tex_levels = 1;
glTexImage2D(GL_TEXTURE_2D, 0, gl_iformat, scaled_tex_w, scaled_tex_h, 0, gl_format, gl_type, NULL);
glBindTexture(GL_TEXTURE_2D, 0);
@@ -400,7 +389,6 @@ TextureCache::TextureCache()
s_DepthCopyPositionUniform = glGetUniformLocation(s_DepthMatrixProgram.glprogid, "copy_position");
s_ActiveTexture = -1;
- s_NextStage = -1;
for(auto& gtex : s_Textures)
gtex = -1;
}
@@ -423,11 +411,4 @@ void TextureCache::SetStage ()
glActiveTexture(GL_TEXTURE0 + s_ActiveTexture);
}
-void TextureCache::SetNextStage ( unsigned int stage )
-{
- s_NextStage = stage;
-}
-
-
-
}