1
0
forked from 0ad/0ad

Removes Handle from ShaderProgram to use more high-level objects.

Tested By: Stan
Differential Revision: https://code.wildfiregames.com/D4403
This was SVN commit r26138.
This commit is contained in:
Vladislav Belov 2021-12-29 07:07:08 +00:00
parent b9e4c14083
commit 92cf0c784c
6 changed files with 28 additions and 44 deletions

View File

@ -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<CStrIntern, std::pair<GLenum, int> >::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<CStrIntern, std::pair<GLenum, int> >::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)

View File

@ -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 <map>
#include <vector>
@ -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;

View File

@ -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] =

View File

@ -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;
}
}

View File

@ -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();

View File

@ -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);