Fix the case where not having created a GlResource prior to calling Shader::isAvailable() would break context management. (#211)
This commit is contained in:
parent
749cbb2ff8
commit
1fe22e24d0
@ -29,6 +29,7 @@
|
|||||||
#include <SFML/Graphics/Shader.hpp>
|
#include <SFML/Graphics/Shader.hpp>
|
||||||
#include <SFML/Graphics/Texture.hpp>
|
#include <SFML/Graphics/Texture.hpp>
|
||||||
#include <SFML/Graphics/GLCheck.hpp>
|
#include <SFML/Graphics/GLCheck.hpp>
|
||||||
|
#include <SFML/Window/Context.hpp>
|
||||||
#include <SFML/System/InputStream.hpp>
|
#include <SFML/System/InputStream.hpp>
|
||||||
#include <SFML/System/Err.hpp>
|
#include <SFML/System/Err.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -437,15 +438,29 @@ void Shader::bind(const Shader* shader)
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
bool Shader::isAvailable()
|
bool Shader::isAvailable()
|
||||||
{
|
{
|
||||||
ensureGlContext();
|
static bool available = false;
|
||||||
|
static bool checked = false;
|
||||||
|
|
||||||
|
// Make sure we only have to check once
|
||||||
|
if (!checked)
|
||||||
|
{
|
||||||
|
// Create a temporary context in case the user checks
|
||||||
|
// before a GlResource is created, thus initializing
|
||||||
|
// the shared context
|
||||||
|
Context context;
|
||||||
|
|
||||||
// Make sure that extensions are initialized
|
// Make sure that extensions are initialized
|
||||||
priv::ensureExtensionsInit();
|
priv::ensureExtensionsInit();
|
||||||
|
|
||||||
return GLEW_ARB_shading_language_100 &&
|
available = GLEW_ARB_shading_language_100 &&
|
||||||
GLEW_ARB_shader_objects &&
|
GLEW_ARB_shader_objects &&
|
||||||
GLEW_ARB_vertex_shader &&
|
GLEW_ARB_vertex_shader &&
|
||||||
GLEW_ARB_fragment_shader;
|
GLEW_ARB_fragment_shader;
|
||||||
|
|
||||||
|
checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return available;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user