Implement ResourceManager and TextureLoader
This commit is contained in:
parent
e37eb0b03f
commit
b8bd56392c
8 changed files with 290 additions and 93 deletions
81
src/core/render_server.cppm
Normal file
81
src/core/render_server.cppm
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
module;
|
||||
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
export module core.render_server;
|
||||
|
||||
import core.resource_manager;
|
||||
import core.texture_loader;
|
||||
import wrappers.sdl;
|
||||
|
||||
export namespace core
|
||||
{
|
||||
using TextureID = unsigned int;
|
||||
using TextureManager = ResourceManager<TextureID, sdl::Texture, TextureLoader>;
|
||||
|
||||
class RenderServer
|
||||
{
|
||||
sdl::Renderer renderer_;
|
||||
TextureLoader texture_loader_;
|
||||
TextureManager texture_manager_;
|
||||
|
||||
public:
|
||||
RenderServer() = delete;
|
||||
|
||||
explicit RenderServer(sdl::Renderer&& renderer)
|
||||
: renderer_{std::move(renderer)},
|
||||
texture_loader_{renderer_},
|
||||
texture_manager_{texture_loader_}
|
||||
{}
|
||||
|
||||
// No copy or move operations
|
||||
RenderServer(const RenderServer&) = delete;
|
||||
RenderServer& operator=(const RenderServer&) = delete;
|
||||
RenderServer(RenderServer&&) = delete;
|
||||
RenderServer& operator=(RenderServer&&) = delete;
|
||||
|
||||
~RenderServer() = default;
|
||||
|
||||
constexpr sdl::Renderer& get_renderer()
|
||||
{
|
||||
return renderer_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a texture from a file (if not loaded yet) and returns its texture ID.
|
||||
*/
|
||||
constexpr TextureID load_texture(const std::string& filename)
|
||||
{
|
||||
return texture_manager_.load_resource_by_name(filename);
|
||||
}
|
||||
|
||||
void start_frame() const
|
||||
{
|
||||
renderer_.clear();
|
||||
}
|
||||
|
||||
void finish_frame() const
|
||||
{
|
||||
renderer_.present();
|
||||
}
|
||||
|
||||
constexpr void render_texture(
|
||||
const TextureID texture_id,
|
||||
const sdl::FRect* src_rect,
|
||||
const sdl::FRect* dest_rect
|
||||
) const
|
||||
{
|
||||
render_texture(texture_manager_.get_resource(texture_id), src_rect, dest_rect);
|
||||
}
|
||||
|
||||
void render_texture(
|
||||
const sdl::Texture& texture,
|
||||
const sdl::FRect* src_rect,
|
||||
const sdl::FRect* dest_rect
|
||||
) const
|
||||
{
|
||||
renderer_.render_texture(texture, src_rect, dest_rect);
|
||||
}
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue