diff --git a/source/graphics/ShaderProgram.cpp b/source/graphics/ShaderProgram.cpp index 4030ae3cb1..b9185912a5 100644 --- a/source/graphics/ShaderProgram.cpp +++ b/source/graphics/ShaderProgram.cpp @@ -165,35 +165,25 @@ public: return Binding((int)fPair.second, index); } - void BindTexture(texture_id_t id, Handle tex) override - { - frag_index_pair_t fPair = GetUniformFragmentIndex(id); - int index = fPair.first; - if (index != -1) - { - GLuint h; - ogl_tex_get_texture_id(tex, &h); - glActiveTextureARB(GL_TEXTURE0+index); - glBindTexture(fPair.second, h); - } - } - void BindTexture(texture_id_t id, GLuint tex) override { frag_index_pair_t fPair = GetUniformFragmentIndex(id); int index = fPair.first; if (index != -1) { - glActiveTextureARB(GL_TEXTURE0+index); + glActiveTextureARB(GL_TEXTURE0 + index); glBindTexture(fPair.second, tex); } } - void BindTexture(Binding id, Handle tex) override + void BindTexture(Binding id, GLuint tex) override { int index = id.second; if (index != -1) - ogl_tex_bind(tex, index); + { + glActiveTextureARB(GL_TEXTURE0 + index); + glBindTexture(id.first, tex); + } } Binding GetUniformBinding(uniform_id_t id) override @@ -537,18 +527,6 @@ public: return Binding((int)it->second.first, it->second.second); } - void BindTexture(texture_id_t id, Handle tex) override - { - std::map >::iterator it = m_Samplers.find(CStrIntern(id)); - if (it == m_Samplers.end()) - return; - - GLuint h; - ogl_tex_get_texture_id(tex, &h); - glActiveTextureARB(GL_TEXTURE0 + it->second.second); - glBindTexture(it->second.first, h); - } - void BindTexture(texture_id_t id, GLuint tex) override { std::map >::iterator it = m_Samplers.find(CStrIntern(id)); @@ -559,15 +537,13 @@ public: glBindTexture(it->second.first, tex); } - void BindTexture(Binding id, Handle tex) override + void BindTexture(Binding id, GLuint tex) override { if (id.second == -1) return; - GLuint h; - ogl_tex_get_texture_id(tex, &h); glActiveTextureARB(GL_TEXTURE0 + id.second); - glBindTexture(id.first, h); + glBindTexture(id.first, tex); } Binding GetUniformBinding(uniform_id_t id) override @@ -743,9 +719,18 @@ int CShaderProgram::GetStreamFlags() const return m_StreamFlags; } -void CShaderProgram::BindTexture(texture_id_t id, CTexturePtr tex) +void CShaderProgram::BindTexture(texture_id_t id, const CTexturePtr& tex) { - BindTexture(id, tex->GetHandle()); + GLuint h; + ogl_tex_get_texture_id(tex->GetHandle(), &h); + BindTexture(id, h); +} + +void CShaderProgram::BindTexture(Binding id, const CTexturePtr& tex) +{ + GLuint h; + ogl_tex_get_texture_id(tex->GetHandle(), &h); + BindTexture(id, h); } void CShaderProgram::Uniform(Binding id, int v) diff --git a/source/graphics/ShaderProgram.h b/source/graphics/ShaderProgram.h index 411f07f85a..d279a58d63 100644 --- a/source/graphics/ShaderProgram.h +++ b/source/graphics/ShaderProgram.h @@ -22,7 +22,6 @@ #include "graphics/Texture.h" #include "lib/ogl.h" #include "lib/file/vfs/vfs_path.h" -#include "lib/res/handle.h" #include #include @@ -143,10 +142,10 @@ public: virtual Binding GetTextureBinding(texture_id_t id) = 0; // Variants of texture binding: - void BindTexture(texture_id_t id, CTexturePtr tex); - virtual void BindTexture(texture_id_t id, Handle tex) = 0; + void BindTexture(texture_id_t id, const CTexturePtr& tex); + void BindTexture(Binding id, const CTexturePtr& tex); virtual void BindTexture(texture_id_t id, GLuint tex) = 0; - virtual void BindTexture(Binding id, Handle tex) = 0; + virtual void BindTexture(Binding id, GLuint tex) = 0; virtual Binding GetUniformBinding(uniform_id_t id) = 0; diff --git a/source/graphics/TerrainTextureEntry.cpp b/source/graphics/TerrainTextureEntry.cpp index 7802217405..c88d05ae16 100644 --- a/source/graphics/TerrainTextureEntry.cpp +++ b/source/graphics/TerrainTextureEntry.cpp @@ -216,7 +216,7 @@ void CTerrainTextureEntry::LoadAlphaMaps(const VfsPath& alphaMapType) // // load all textures and store Handle in array // - Tex textures[NUM_ALPHA_MAPS] = {0}; + Tex textures[NUM_ALPHA_MAPS] = {}; const VfsPath path = VfsPath("art/textures/terrain/alphamaps") / alphaMapType; const wchar_t* fnames[NUM_ALPHA_MAPS] = diff --git a/source/renderer/ModelRenderer.cpp b/source/renderer/ModelRenderer.cpp index 7c28d655e3..b625f6e810 100644 --- a/source/renderer/ModelRenderer.cpp +++ b/source/renderer/ModelRenderer.cpp @@ -688,7 +688,7 @@ void ShaderModelRenderer::Render(const RenderModifierPtr& modifier, const CShade CTexture* newTex = samp.Sampler.get(); if (texBindings[s].Active() && newTex != currentTexs[s]) { - shader->BindTexture(texBindings[s], newTex->GetHandle()); + shader->BindTexture(texBindings[s], samp.Sampler); currentTexs[s] = newTex; } } diff --git a/source/renderer/OverlayRenderer.cpp b/source/renderer/OverlayRenderer.cpp index 977254d769..be885cb4d8 100644 --- a/source/renderer/OverlayRenderer.cpp +++ b/source/renderer/OverlayRenderer.cpp @@ -551,8 +551,8 @@ void OverlayRenderer::RenderQuadOverlays() const QuadBatchKey& maskPair = it->first; - shader->BindTexture(str_baseTex, maskPair.m_Texture->GetHandle()); - shader->BindTexture(str_maskTex, maskPair.m_TextureMask->GetHandle()); + shader->BindTexture(str_baseTex, maskPair.m_Texture); + shader->BindTexture(str_maskTex, maskPair.m_TextureMask); int streamflags = shader->GetStreamFlags(); diff --git a/source/renderer/TexturedLineRData.cpp b/source/renderer/TexturedLineRData.cpp index 49ee26c54a..143840b29f 100644 --- a/source/renderer/TexturedLineRData.cpp +++ b/source/renderer/TexturedLineRData.cpp @@ -44,8 +44,8 @@ void CTexturedLineRData::Render(const SOverlayTexturedLine& line, const CShaderP const int streamFlags = shader->GetStreamFlags(); - shader->BindTexture(str_baseTex, line.m_TextureBase->GetHandle()); - shader->BindTexture(str_maskTex, line.m_TextureMask->GetHandle()); + shader->BindTexture(str_baseTex, line.m_TextureBase); + shader->BindTexture(str_maskTex, line.m_TextureMask); shader->Uniform(str_objectColor, line.m_Color); GLsizei stride = sizeof(CTexturedLineRData::SVertex);