Skip to content

Commit

Permalink
Skip glTexCoordPointer() call if not needed
Browse files Browse the repository at this point in the history
  • Loading branch information
hobby8 committed Dec 4, 2015
1 parent 7ff9478 commit 4c68bf1
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/SFML/Graphics/RenderTarget.hpp
Expand Up @@ -406,6 +406,7 @@ class SFML_GRAPHICS_API RenderTarget : NonCopyable
bool viewChanged; ///< Has the current view changed since last draw?
BlendMode lastBlendMode; ///< Cached blending mode
Uint64 lastTextureId; ///< Cached texture
bool texCoordsArrayEnabled; ///< Is GL_TEXTURE_COORD_ARRAY client state enabled?
bool useVertexCache; ///< Did we previously use the vertex cache?
Vertex vertexCache[VertexCacheSize]; ///< Pre-transformed vertices cache
};
Expand Down
16 changes: 15 additions & 1 deletion src/SFML/Graphics/RenderTarget.cpp
Expand Up @@ -269,13 +269,25 @@ void RenderTarget::draw(const Vertex* vertices, std::size_t vertexCount,
vertices = NULL;
}

// Check if texture coordinates array is needed, and update client state accordingly
bool enableTexCoordsArray = (states.texture || states.shader);
if (enableTexCoordsArray != m_cache.texCoordsArrayEnabled)
{
if (enableTexCoordsArray)
glCheck(glEnableClientState(GL_TEXTURE_COORD_ARRAY));
else
glCheck(glDisableClientState(GL_TEXTURE_COORD_ARRAY));
m_cache.texCoordsArrayEnabled = enableTexCoordsArray;
}

// Setup the pointers to the vertices' components
if (vertices)
{
const char* data = reinterpret_cast<const char*>(vertices);
glCheck(glVertexPointer(2, GL_FLOAT, sizeof(Vertex), data + 0));
glCheck(glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Vertex), data + 8));
glCheck(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), data + 12));
if (enableTexCoordsArray)
glCheck(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), data + 12));
}

// Find the OpenGL primitive type
Expand Down Expand Up @@ -390,6 +402,8 @@ void RenderTarget::resetGLStates()
if (shaderAvailable)
applyShader(NULL);

m_cache.texCoordsArrayEnabled = true;

m_cache.useVertexCache = false;

// Set the default view
Expand Down

0 comments on commit 4c68bf1

Please sign in to comment.