Localizing rendering
Shading is a powerful concept. The only problem with injecting a stream of extra-graphical-fanciness to our game at this point is the fact that it is simply not architected to deal with using shaders efficiently. Most, if not all of our classes that do any kind of drawing do so by having direct access to the sf::RenderWindow
class, which means they would have to pass in their own shader instances as arguments. This is not efficient, re-usable, or flexible at all. A better approach, such as a separate class dedicated to rendering, is a necessity.
In order to be able to switch from shader to shader with relative ease, we must work on storing them properly within the class:
using ShaderList = std::unordered_map<std::string, std::unique_ptr<sf::Shader>>;
Because the sf::Shader
class is a non-copyable object (inherits from sf::NonCopyable
), it is stored as a unique pointer, resulting in avoidance of any and all move semantics. This list of shaders...