Fixed texture cache not properly updated when a same sf::Image instance allocated a new OpenGL texture internally

git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1631 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
LaurentGom 2010-11-09 21:55:24 +00:00
parent 0e2297af28
commit 230f5e58ca
2 changed files with 3 additions and 13 deletions

View File

@ -70,12 +70,6 @@ public :
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
Renderer(RenderTarget& target); Renderer(RenderTarget& target);
////////////////////////////////////////////////////////////
/// \brief Destructor
///
////////////////////////////////////////////////////////////
~Renderer();
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
/// \brief Initialize the renderer (set the default states, etc.) /// \brief Initialize the renderer (set the default states, etc.)
/// ///
@ -355,6 +349,7 @@ private :
States myStatesStack[64]; ///< Stack of render states States myStatesStack[64]; ///< Stack of render states
States* myStates; ///< Current set of render states States* myStates; ///< Current set of render states
const Image* myTexture; ///< Current texture const Image* myTexture; ///< Current texture
unsigned int myTextureId; ///< Current texture identifier (the sf::Image instance may be the same, but not the internal OpenGL texture)
const Shader* myShader; ///< Current pixel shader const Shader* myShader; ///< Current pixel shader
Blend::Mode myBlendMode; ///< Current blending mode Blend::Mode myBlendMode; ///< Current blending mode
IntRect myViewport; ///< Current target viewport IntRect myViewport; ///< Current target viewport

View File

@ -46,12 +46,6 @@ myViewportIsValid (false)
} }
////////////////////////////////////////////////////////////
Renderer::~Renderer()
{
}
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
void Renderer::Initialize() void Renderer::Initialize()
{ {
@ -239,7 +233,7 @@ void Renderer::SetBlendMode(Blend::Mode mode)
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
void Renderer::SetTexture(const Image* texture) void Renderer::SetTexture(const Image* texture)
{ {
if ((texture != myTexture) || !myTextureIsValid) if ((texture != myTexture) || (texture && (texture->myTexture != myTextureId)) || !myTextureIsValid)
{ {
// Apply the new texture // Apply the new texture
if (texture) if (texture)
@ -249,6 +243,7 @@ void Renderer::SetTexture(const Image* texture)
// Store it // Store it
myTexture = texture; myTexture = texture;
myTextureId = texture ? texture->myTexture : 0;
myTextureIsValid = true; myTextureIsValid = true;
} }
else if (texture) else if (texture)