82 lines
2.2 KiB
C++
82 lines
2.2 KiB
C++
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);
|
|
}
|
|
};
|
|
}
|