add stage parameter for texture load, so ogl can bind to the correct sampler

This commit is contained in:
degasus 2013-01-19 00:47:48 +01:00
parent 074f73c641
commit e7d5b274c0
9 changed files with 12 additions and 11 deletions

View file

@ -446,7 +446,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage,
else entry->type = TCET_NORMAL;
// load texture
entry->Load(width, height, expandedWidth, 0, (texLevels == 0));
entry->Load(stage, width, height, expandedWidth, 0, (texLevels == 0));
if (g_ActiveConfig.bDumpTextures && !using_custom_texture)
DumpTexture(entry, 0);
@ -481,7 +481,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage,
expandedHeight = (currentHeight + bsh) & (~bsh);
TexDecoder_Decode(temp, *ptr, expandedWidth, expandedHeight, texformat, tlutaddr, tlutfmt, g_ActiveConfig.backend_info.bUseRGBATextures);
entry->Load(currentWidth, currentHeight, expandedWidth, level, false);
entry->Load(stage, currentWidth, currentHeight, expandedWidth, level, false);
if (g_ActiveConfig.bDumpTextures)
DumpTexture(entry, level);
@ -504,7 +504,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage,
unsigned int currentHeight = (mipHeight > 0) ? mipHeight : 1;
LoadCustomTexture(tex_hash, texformat, level, currentWidth, currentHeight);
entry->Load(currentWidth, currentHeight, currentWidth, level, false);
entry->Load(stage, currentWidth, currentHeight, currentWidth, level, false);
mipWidth >>= 1;
mipHeight >>= 1;

View file

@ -88,7 +88,7 @@ public:
virtual void Bind(unsigned int stage) = 0;
virtual bool Save(const char filename[], unsigned int level) = 0;
virtual void Load(unsigned int width, unsigned int height,
virtual void Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level, bool autogen_mips) = 0;
virtual void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,
unsigned int srcFormat, const EFBRectangle& srcRect,

View file

@ -58,7 +58,7 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level)
return SUCCEEDED(PD3DX11SaveTextureToFileA(D3D::context, texture->GetTex(), D3DX11_IFF_PNG, filename));
}
void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,
void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level, bool autogen_mips)
{
D3D::ReplaceRGBATexture2D(texture->GetTex(), TextureCache::temp, width, height, expanded_width, level, usage);

View file

@ -40,7 +40,7 @@ private:
TCacheEntry(D3DTexture2D *_tex) : texture(_tex) {}
~TCacheEntry();
void Load(unsigned int width, unsigned int height,
void Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int levels, bool autogen_mips = false);
void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,

View file

@ -71,7 +71,7 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level)
return SUCCEEDED(hr);
}
void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,
void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level, bool autogen_mips)
{
D3D::ReplaceTexture2D(texture, temp, width, height, expanded_width, d3d_fmt, swap_r_b, level);

View file

@ -43,7 +43,7 @@ private:
TCacheEntry(LPDIRECT3DTEXTURE9 _tex) : texture(_tex) {}
~TCacheEntry();
void Load(unsigned int width, unsigned int height,
void Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int levels, bool autogen_mips = false);
void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,

View file

@ -132,6 +132,7 @@ TextureCache::TCacheEntry::TCacheEntry()
void TextureCache::TCacheEntry::Bind(unsigned int stage)
{
glActiveTexture(GL_TEXTURE0 + stage);
glBindTexture(GL_TEXTURE_2D, texture);
GL_REPORT_ERRORD();
@ -222,9 +223,10 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
return &entry;
}
void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,
void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level, bool autogen_mips)
{
glActiveTexture(GL_TEXTURE0 + stage);
glBindTexture(GL_TEXTURE_2D, texture);
//GL_REPORT_ERRORD();

View file

@ -55,7 +55,7 @@ private:
TCacheEntry();
~TCacheEntry();
void Load(unsigned int width, unsigned int height,
void Load(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level, bool autogen_mips = false);
void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,

View file

@ -276,7 +276,6 @@ void VertexManager::vFlush()
{
if (usedtextures & (1 << i))
{
glActiveTexture(GL_TEXTURE0 + i);
FourTexUnits &tex = bpmem.tex[i >> 2];
TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i,
(tex.texImage3[i&3].image_base/* & 0x1FFFFF*/) << 5,