ADD: Introduce GameLayer

This commit is contained in:
sebastian 2026-07-30 06:49:17 +02:00
parent 484fe4aa3e
commit c1732e01fa
7 changed files with 118 additions and 35 deletions

View File

@ -136,6 +136,10 @@ add_executable(ColorRace
engine/src/renderer/MeshRenderSystem.h
engine/src/renderer/MeshRenderer.cpp
engine/src/renderer/MeshRenderer.h
engine/src/layer/Layer.cpp
engine/src/layer/Layer.h
game/src/GameLayer.cpp
game/src/GameLayer.h
)

View File

@ -0,0 +1,5 @@
//
// Created by sebastian on 29.07.26.
//
#include "Layer.h"

24
engine/src/layer/Layer.h Normal file
View File

@ -0,0 +1,24 @@
//
// Created by sebastian on 29.07.26.
//
#ifndef COLORRACE_LAYER_H
#define COLORRACE_LAYER_H
#include "ecs/EntityRegistry.h"
namespace engine {
class Layer {
public:
Layer() = default;
virtual ~Layer() = default;
virtual void onAttach() {}
virtual void onDetach() {}
virtual void onUpdate() {}
virtual void onRender() {}
};
}
#endif //COLORRACE_LAYER_H

View File

@ -12,17 +12,9 @@
void ColorRaceApp::onUpdate(float deltaTime) {
gameLayer->onUpdate();
}
void ColorRaceApp::onRender() {
m_renderState.apply();
engine::MeshRenderSystem meshRenderSystem;
engine::RenderQueue queue;
meshRenderSystem.update(*entityRegistry, queue);
m_renderer->render(queue, *m_camera);
gameLayer->onRender();
}

View File

@ -4,6 +4,7 @@
#ifndef COLORRACE_COLORRACEAPP_H
#define COLORRACE_COLORRACEAPP_H
#include "GameLayer.h"
#include "core/Application.h"
#include "ecs/EntityRegistry.h"
#include "ecs/standardComponents/MeshComponent.h"
@ -31,34 +32,12 @@ public:
return config;
}
ColorRaceApp() : Application(makeConfig()) {
m_renderState.depthTesting = false;
m_renderState.backfaceCulling = false;
m_shader = std::make_unique<engine::StaticShader>();
m_camera = std::make_unique<engine::Camera>();
m_camera->setPosition({0.0f, 0.0f, 5.0f});
m_camera->setYaw(0.0f);
m_camera->setPitch(0.0f);
auto cubeModel = engine::CubeFactory::createCube();
entityRegistry = std::make_unique<engine::EntityRegistry>();
const auto transformComponent = engine::TransformComponent({0,0,0}, {0,0,0}, {1,1,1});
const auto meshComponent = engine::MeshComponent(std::move(cubeModel));
const auto entity = entityRegistry->createEntity();
entityRegistry->addComponent<>(entity, transformComponent);
entityRegistry->addComponent(entity, meshComponent);
m_renderer = std::make_unique<engine::MeshRenderer>();
gameLayer = std::make_unique<GameLayer>();
gameLayer->onAttach();
}
private:
engine::GLRenderState m_renderState;
std::unique_ptr<engine::EntityRegistry> entityRegistry;
std::unique_ptr<engine::StaticShader> m_shader;
std::unique_ptr<engine::MeshRenderer> m_renderer;
std::unique_ptr<engine::Camera> m_camera;
std::unique_ptr<GameLayer> gameLayer;
protected:
void onUpdate(float deltaTime) override;
void onRender() override;

51
game/src/GameLayer.cpp Normal file
View File

@ -0,0 +1,51 @@
//
// Created by sebastian on 29.07.26.
//
#include "GameLayer.h"
#include "ecs/standardComponents/MeshComponent.h"
#include "ecs/standardComponents/TransformComponent.h"
#include "renderer/MeshRenderer.h"
#include "renderer/MeshRenderSystem.h"
#include "renderer/primitives/CubeFactory.h"
using namespace engine;
void GameLayer::onAttach() {
m_renderState.depthTesting = false;
m_renderState.backfaceCulling = false;
m_camera = std::make_unique<engine::Camera>();
m_camera->setPosition({0.0f, 0.0f, 5.0f});
m_camera->setYaw(0.0f);
m_camera->setPitch(0.0f);
m_renderer = std::make_unique<engine::MeshRenderer>();
Entity entity = m_entityRegistry.createEntity();
const auto cubeModel = CubeFactory::createCube();
const auto transform = TransformComponent({0,0,0}, {0,0,0}, {1,1,1});
const auto mesh = MeshComponent(cubeModel);
m_entityRegistry.addComponent<TransformComponent>(entity, transform);
m_entityRegistry.addComponent<MeshComponent>(entity, mesh);
}
void GameLayer::onDetach() {
}
void GameLayer::onUpdate() {
Layer::onUpdate();
}
void GameLayer::onRender() {
m_renderQueue.clear();
MeshRenderSystem meshRenderSystem;
meshRenderSystem.update(m_entityRegistry, m_renderQueue);
MeshRenderer renderer;
renderer.render(m_renderQueue, *m_camera);
}

28
game/src/GameLayer.h Normal file
View File

@ -0,0 +1,28 @@
//
// Created by sebastian on 29.07.26.
//
#ifndef COLORRACE_GAMELAYER_H
#define COLORRACE_GAMELAYER_H
#include "ecs/EntityRegistry.h"
#include "layer/Layer.h"
#include "renderer/MeshRenderer.h"
#include "renderer/RenderQueue.h"
#include "utils/openglWrapper/GLRenderState.h"
class GameLayer: public engine::Layer {
public:
void onAttach() override;
void onDetach() override;
void onUpdate() override;
void onRender() override;
private:
engine::GLRenderState m_renderState;
engine::RenderQueue m_renderQueue;
engine::EntityRegistry m_entityRegistry;
std::unique_ptr<engine::MeshRenderer> m_renderer;
std::unique_ptr<engine::Camera> m_camera;
};
#endif //COLORRACE_GAMELAYER_H