Rendering Engine 0.2.9
Modular Graphics Rendering Engine | v0.2.9
spawn_drawables.hpp
Go to the documentation of this file.
1// This file is part of the Rendering Engine project.
2// Author: Alexander Obzherin <alexanderobzherin@gmail.com>
3// Copyright (c) 2026 Alexander Obzherin
4// Distributed under the terms of the zlib License. See LICENSE.md for details.
5
6/**
7 * @file spawn_drawables.hpp
8 * @brief Scene::Spawn<T> specializations for built-in drawable types.
9 *
10 * This file provides explicit template specializations of Scene::Spawn<T>()
11 * for engine-supported drawable classes (e.g. StaticMesh, Sprite2D, TextBlock2D).
12 *
13 * Including this file enables spawning of the corresponding drawable types.
14 * Scene itself remains generic and unaware of concrete drawable implementations.
15 */
16
17#pragma once
18
19#include "scene.hpp"
20#include "scene_manager.hpp"
21
22#include "static_mesh.hpp"
23#include "sprite_2d.hpp"
24#include "text_block_2d.hpp"
25#include "rectangle_2d.hpp"
26
27namespace rendering_engine
28{
29
30template <>
31StaticMesh* Scene::Spawn<StaticMesh, StaticMeshParams>(StaticMeshParams param);
32
33template <>
34Sprite2D* Scene::Spawn<Sprite2D, std::string>(std::string textureName);
35
36template <>
37TextBlock2D* Scene::Spawn<TextBlock2D, TextBlock2D::Properties>(TextBlock2D::Properties prop);
38
39
40template <>
41StaticMesh* Scene::Spawn<StaticMesh, StaticMeshParams>(StaticMeshParams param)
42{
43 mDrawables3D.push_back(new StaticMesh(mSceneManager.GetRenderResourceContext(), *this, param));
44 StaticMesh* staticMesh = static_cast<StaticMesh*>(mDrawables3D.back());
45 staticMesh->Initialize();
46 return staticMesh;
47}
48
49template <>
50Sprite2D* Scene::Spawn<Sprite2D, std::string>(std::string textureName)
51{
52 mDrawables2D.push_back(new Sprite2D(mSceneManager.GetRenderResourceContext(), *this, textureName));
53 Sprite2D* sprite2D = static_cast<Sprite2D*>(mDrawables2D.back());
54 sprite2D->Initialize();
55 return sprite2D;
56}
57template <>
58TextBlock2D* Scene::Spawn<TextBlock2D, TextBlock2D::Properties>(TextBlock2D::Properties prop)
59{
60 mDrawables2D.push_back(new TextBlock2D(*this, mSceneManager.GetTextRenderer(), prop));
61 TextBlock2D* textBlock = static_cast<TextBlock2D*>(mDrawables2D.back());
62 return textBlock;
63}
64
65template <>
66Rectangle2D* Scene::Spawn<Rectangle2D, Rectangle2D::Properties>(Rectangle2D::Properties prop)
67{
68 mDrawables2D.push_back(new Rectangle2D(mSceneManager.GetRenderResourceContext(), *this, prop));
69 Rectangle2D* rectangle2D = static_cast<Rectangle2D*>(mDrawables2D.back());
70 rectangle2D->Initialize();
71 return rectangle2D;
72}
73
74} // namespace rendering_engine
2D drawable component for rendering rectangle.
void Initialize() override
Initializes render resource pointers (material, mesh, etc.). Must be called after setting material an...
RenderResourceContext GetRenderResourceContext() const
Retrieves the current RenderResourceContext.
2D drawable component for rendering textured quad.
Definition: sprite_2d.hpp:22
void Initialize() override
Initializes render resource pointers (material, mesh, etc.). Must be called after setting material an...
Definition: sprite_2d.cpp:21
3D drawable component for rendering static (non-animated) meshes.
Definition: static_mesh.hpp:37
void Initialize() override
Initializes render resource pointers (material, mesh, etc.). Must be called after setting material an...
Definition: static_mesh.cpp:20
2D drawable representing a block of rendered text.