From 4303cc2c975dbb62e8c44905e4bdc42fd3990349 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 20 Aug 2022 21:44:00 +0200 Subject: [PATCH] add tutorial 2 comments --- ROADMAP.txt | 2 - engine/inc/renderer/renderer.hpp | 2 + tutorials/02-sprite/src/tutorial_02.cpp | 57 ++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index c7af531..c732438 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,7 +1,5 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ -- [Tutorials] 2. 2D - explain beginFrame(), endFrame() - - [Tutorials] 3. Minecraft cube - explain this pipeline, and explain that there are many 3D pipelines - [Tutorials] 4. Mesh rendering - explain staticPipeline, render .obj file via Mesh class, explain that this is high-level diff --git a/engine/inc/renderer/renderer.hpp b/engine/inc/renderer/renderer.hpp index 32eff8a..e152e20 100644 --- a/engine/inc/renderer/renderer.hpp +++ b/engine/inc/renderer/renderer.hpp @@ -35,6 +35,8 @@ class Renderer { core.setClearScreenColor(color); } + TextureRepository& getTextureRepository() { return core.texture.repository; } + void setFrameLimit(const bool& onoff) { core.setFrameLimit(onoff); } /** Update view frustum for frustum culling. 3D support - off */ diff --git a/tutorials/02-sprite/src/tutorial_02.cpp b/tutorials/02-sprite/src/tutorial_02.cpp index 6267ede..023d4d5 100644 --- a/tutorials/02-sprite/src/tutorial_02.cpp +++ b/tutorials/02-sprite/src/tutorial_02.cpp @@ -14,11 +14,17 @@ namespace Tyra { Tutorial02::Tutorial02(Engine* t_engine) : engine(t_engine) { + /** Lets set default value, to prevent nullptr bugs */ texture = nullptr; } Tutorial02::~Tutorial02() { if (texture != nullptr) { + /** + * free() function in texture repository is + * removing texture from repository and calling + * texture destructor + */ engine->renderer.core.texture.repository.free(texture); } } @@ -33,8 +39,13 @@ void Tutorial02::init() { void Tutorial02::loop() { auto& renderer = engine->renderer; + /** Begin frame will clear our screen. */ renderer.beginFrame(); + + /** Render sprite. */ renderer.renderer2D.render(sprite); + + /** End frame will perform vsync. */ renderer.endFrame(); } @@ -42,7 +53,11 @@ void Tutorial02::loadSprite() { const auto& screenSettings = engine->renderer.core.getSettings(); sprite.mode = SpriteMode::MODE_STRETCH; + + /** Let's scale it down */ sprite.size = Vec2(256.0F, 128.0F); + + /** Set it in screen center */ sprite.position = Vec2(screenSettings.getWidth() / 2.0F - sprite.size.x / 2.0F, screenSettings.getHeight() / 2.0F - sprite.size.y / 2.0F); @@ -51,13 +66,51 @@ void Tutorial02::loadSprite() { } void Tutorial02::loadTexture() { + /** + * Renderer has high layer functions, + * which allows to render: + * - Sprite (2D) + * - Mesh (3D) + * + * It uses ONLY low layer functions which are in renderer.core + */ auto& renderer = engine->renderer; - auto& rendererCore = renderer.core; - auto& textureRepository = rendererCore.texture.repository; + /** + * TextureRepository is a repository of textures. + * It is a singleton class, with all game textures. + * We are linking these textures with sprite's (2D) and mesh (3D) materials. + */ + auto& textureRepository = renderer.getTextureRepository(); + + /** + * Texture is stored in "res" directory. + * Content of "res" directory is automatically copied into + * "bin" directory, which contains our final game. + * + * File utils automatically add's device prefix to the path, + * based on current working directory. + * + * In PS2 world: + * - USB has a "mass:" prefix + * - Our PC in PS2Link has a "host:" prefix + * - Our PC in PCSX2 has a "host:" prefix + */ auto filepath = FileUtils::fromCwd("tyra.png"); + + /** + * Tyra supports following PNG formats: + * 32bpp (RGBA) + * 24bpp (RGB) + * 8bpp, palletized (RGBA) + * 4bpp, palletized (RGBA) + * + * 8bpp and 4bpp are the fastest. + * All of these formats can be easily exported via GIMP. + */ texture = textureRepository.add(filepath); + /** Let's assign this texture to sprite. */ texture->addLink(sprite.id); TYRA_LOG("Texture loaded!");