Архитектура игрового движкаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Архитектура игрового движка

Сообщение Anonymous »

Я работаю над графическим движком и не совсем уверен в связи между моим базовым API и движком. У меня есть две папки, которые инкапсулируют сторону движка и сторону API. Одна папка называется BEngine и содержит абстрактный класс Renderer. Этот класс предназначен для средств визуализации, специфичных для API (таких как VkRenderer, GlRenderer и т. д.), для наследования и реализации его виртуальных функций.
У меня также есть класс Engine, который управляет оконной системой (настраивает GLFWwindow и отправляет расширения GLFW для уровня проверки Vulkan) и обрабатывает средство визуализации. Классы выглядят примерно так:

Код: Выделить всё

#pragma once
#include "Window.hpp"
#include 
#include "Renderer.hpp"

class Engine
{
public:
static void Init(const WND_SPECS &);

static Window* GetWindow();

static std::vectorGetRequiredVulkanExtensions();

static Renderer*& GetRenderer() { return renderer; }

static double GetElapsedTime();

static void Exit();

private:
static Window* window;
public:
static Renderer* renderer;

};

Код: Выделить всё

#pragma once

#include "vulkan/vulkan.h"
#include "Renderer.hpp"

#include 

class VkRenderer : public Renderer
{
public:
void Initialize(std::vector) override;
void RenderFrame() override;
void Shutdown() override;

private:
//VulkanDevice device;
//VulkanSwapchain swapchain;
//VulkanPipeline pipeline;
//VulkanCommands commands;
//VulkanSync sync;
};
А это точка входа:

Код: Выделить всё

int main()
{
WND_SPECS specs;
specs.wnd_width = 1280;
specs.wnd_height = 720;
specs.wnd_name = "WORLD_1";

(void)Engine::Init(specs);

static VkRenderer vkR;
Engine::GetRenderer() = &vkR;
Engine::GetRenderer()->Initialize(Engine::GetRequiredVulkanExtensions());

Scene* scene = new Scene();
scene -> Run();
scene -> Update();
scene -> Exit();

return 0;
}
Эта реализация позволяет избежать циклических зависимостей, но меня интересуют возможные будущие проблемы и лучшие практики.

Подробнее здесь: https://stackoverflow.com/questions/798 ... chitecture
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»