Skip to content

Commit

Permalink
Fix geometry shader example
Browse files Browse the repository at this point in the history
This example is optional since it may be skipped on hardware where
geometry shaders are not supported. The way I rewrote it in 7234fc1
resulted in the shader still being attempted to be loaded even when
geometry shaders were not supported leading to the whole program
crashing.

My bad.
  • Loading branch information
ChrisThrasher committed May 23, 2024
1 parent fdcd899 commit eb41707
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions examples/shader/Shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,16 @@ class Geometry : public Effect
if (!m_logoTexture.loadFromFile("resources/logo.png"))
return false;

m_shader.setUniform("texture", sf::Shader::CurrentTexture);
// Load the shader
m_shader = sf::Shader::loadFromFile("resources/billboard.vert",
"resources/billboard.geom",
"resources/billboard.frag");
if (!m_shader)
return false;
m_shader->setUniform("texture", sf::Shader::CurrentTexture);

// Set the render resolution (used for proper scaling)
m_shader.setUniform("resolution", sf::Vector2f(800, 600));
m_shader->setUniform("resolution", sf::Vector2f(800, 600));

return true;
}
Expand All @@ -298,13 +304,13 @@ class Geometry : public Effect
const float size = 25 + std::abs(y) * 50;

// Update the shader parameter
m_shader.setUniform("size", sf::Vector2f(size, size));
m_shader->setUniform("size", sf::Vector2f(size, size));
}

void onDraw(sf::RenderTarget& target, sf::RenderStates states) const override
{
// Prepare the render state
states.shader = &m_shader;
states.shader = &*m_shader;
states.texture = &m_logoTexture;
states.transform = m_transform;

Expand All @@ -313,11 +319,10 @@ class Geometry : public Effect
}

private:
sf::Texture m_logoTexture;
sf::Transform m_transform;
sf::Shader m_shader{
sf::Shader::loadFromFile("resources/billboard.vert", "resources/billboard.geom", "resources/billboard.frag").value()};
sf::VertexArray m_pointCloud;
sf::Texture m_logoTexture;
sf::Transform m_transform;
std::optional<sf::Shader> m_shader;
sf::VertexArray m_pointCloud;
};


Expand Down

0 comments on commit eb41707

Please sign in to comment.