27 #include "../threads/shared_mutex.h"
28 #include "../macros.h"
29 #include "../texture.h"
31 #include "batching/renderable.h"
32 #include "batching/render_queue.h"
43 typedef std::shared_ptr<Renderer> ptr;
48 virtual std::shared_ptr<batcher::RenderQueueVisitor> get_render_queue_visitor(
CameraPtr camera) = 0;
52 virtual void init_context() = 0;
55 virtual GPUProgramPtr new_or_existing_gpu_program(
const std::string& vertex_shader,
const std::string& fragment_shader) {
56 _S_UNUSED(vertex_shader);
57 _S_UNUSED(fragment_shader);
58 return GPUProgramPtr();
61 virtual GPUProgramPtr current_gpu_program()
const {
return GPUProgramPtr(); }
62 virtual GPUProgramPtr gpu_program(
const GPUProgramID&)
const {
return GPUProgramPtr(); }
63 virtual GPUProgramPtr default_gpu_program()
const {
return GPUProgramPtr(); }
65 virtual std::string name()
const = 0;
69 virtual void prepare_to_render(
const Renderable* renderable) = 0;
94 virtual void clear(
const RenderTarget& target,
const Color& color,
95 uint32_t clear_flags) {
98 _S_UNUSED(clear_flags);
101 virtual void do_swap_buffers() {}
103 virtual std::size_t max_texture_size()
const {
118 virtual bool supports_gpu_programs()
const {
return false; }
123 bool is_texture_registered(AssetID texture_id)
const;
127 void prepare_texture(Texture *texture);
128 void prepare_material(
Material* material);
131 friend class Texture;
133 void register_texture(AssetID tex_id, Texture *texture);
134 void unregister_texture(AssetID texture_id, Texture* texture);
136 bool convert_if_necessary(Texture* tex);
138 Window* window_ =
nullptr;
150 virtual void on_texture_register(AssetID tex_id, Texture* texture) {
162 virtual void on_texture_unregister(AssetID tex_id, Texture* texture) {
176 virtual void on_texture_prepare(Texture* texture) {
183 virtual void on_material_prepare(
Material* material) {
188 virtual void on_pre_render() {}
189 virtual void on_post_render() {}
191 mutable thread::Mutex texture_registry_mutex_;
192 std::unordered_map<AssetID, Texture*> texture_registry_;