Added notes to documentation and adjusted OpenGL example as a workaround for the side effects of making static functions that require a context work. If the user wants to make use of both sfml-graphics and OpenGL, they should make sure sf::Texture::getMaximumSize() and/or sf::Shader::isAvailable() are called at least once before setting their final context active as those functions will cause a context switch the first time they are called.

This commit is contained in:
binary1248 2014-08-15 13:39:06 +02:00
parent 7defb17e8c
commit 6959c1a826
3 changed files with 13 additions and 3 deletions

View File

@ -22,9 +22,6 @@ int main()
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML graphics with OpenGL", sf::Style::Default, contextSettings); sf::RenderWindow window(sf::VideoMode(800, 600), "SFML graphics with OpenGL", sf::Style::Default, contextSettings);
window.setVerticalSyncEnabled(true); window.setVerticalSyncEnabled(true);
// Make it the active window for OpenGL calls
window.setActive();
// Create a sprite for the background // Create a sprite for the background
sf::Texture backgroundTexture; sf::Texture backgroundTexture;
if (!backgroundTexture.loadFromFile("resources/background.jpg")) if (!backgroundTexture.loadFromFile("resources/background.jpg"))
@ -39,6 +36,13 @@ int main()
text.setColor(sf::Color(255, 255, 255, 170)); text.setColor(sf::Color(255, 255, 255, 170));
text.setPosition(250.f, 450.f); text.setPosition(250.f, 450.f);
// Make the window the active target for OpenGL calls
// Note: If using sf::Texture or sf::Shader with OpenGL,
// be sure to call sf::Texture::getMaximumSize() and/or
// sf::Shader::isAvailable() at least once before calling
// setActive(), as those functions will cause a context switch
window.setActive();
// Load an OpenGL texture. // Load an OpenGL texture.
// We could directly use a sf::Texture as an OpenGL texture (with its Bind() member function), // We could directly use a sf::Texture as an OpenGL texture (with its Bind() member function),
// but here we want more control on it (generate mipmaps, ...) so we create a new one from an image // but here we want more control on it (generate mipmaps, ...) so we create a new one from an image

View File

@ -486,6 +486,9 @@ public :
/// the shader features. If it returns false, then /// the shader features. If it returns false, then
/// any attempt to use sf::Shader will fail. /// any attempt to use sf::Shader will fail.
/// ///
/// Note: The first call to this function, whether by your
/// code or SFML will result in a context switch.
///
/// \return True if shaders are supported, false otherwise /// \return True if shaders are supported, false otherwise
/// ///
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////

View File

@ -460,6 +460,9 @@ public :
/// You can expect a value of 512 pixels for low-end graphics /// You can expect a value of 512 pixels for low-end graphics
/// card, and up to 8192 pixels or more for newer hardware. /// card, and up to 8192 pixels or more for newer hardware.
/// ///
/// Note: The first call to this function, whether by your
/// code or SFML will result in a context switch.
///
/// \return Maximum size allowed for textures, in pixels /// \return Maximum size allowed for textures, in pixels
/// ///
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////