Make render a cpp

This commit is contained in:
2024-01-04 07:33:39 -05:00
parent c83d364493
commit 9eb314cb73
4 changed files with 77 additions and 71 deletions

View File

@@ -22,8 +22,6 @@ file(GLOB_RECURSE HEADERS "include/*")
file(GLOB_RECURSE SOURCES "src/*")
file(GLOB_RECURSE ASSETS "assets/*")
include_directories("include")
#Move all libraries to lib after building.
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
@@ -35,7 +33,6 @@ file(COPY "cfg" DESTINATION "${PROJECT_BINARY_DIR}")
CPMAddPackage(
NAME ReWindow
URL https://git.redacted.cc/Redacted/ReWindow/archive/vA0.2.2.zip
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/external/ReWindow
)
CPMAddPackage(

View File

@@ -21,7 +21,7 @@ class glDemoGameApp : public GameApp
public:
void Run() override
{
render_loop();
Render::render_loop();
}
};

View File

@@ -1,73 +1,11 @@
#pragma once
#include <chrono>
#include <thread>
#include <engine/engine.h>
#include <types/camera.h>
#include <types/skybox.h>
#include <types/entityList.h>
void pre_render() {
// NO
if(engine->frameCount == 0) {
engine->window = new(RWindow);
engine->window->init(RenderingAPI::OPENGL,"Re: 3D", 1152,864);
engine->window->setFlag(RWindowFlags::RESIZABLE, false);
engine->initGL();
engine->loadConfig();
auto* camera = new Camera();
storeEntity(camera);
// TODO:
getCamera()->position = {0.0f,-2.0f,-5.0f};
getCamera()->angle.y = 0.0f;
getCamera()->scriptedMove.load("assets/scriptedMove/default.smov");
auto* skybox = new Skybox();
skybox->draw = true;
storeEntity(skybox);
auto* player = new Player();
player->angle = {0,0,0};
storeEntity(player);
}
//std::cout << engine->frameCount << std::endl;
engine->window->pollEvents();
engine->frameCount++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
getCamera()->pre_render();
getPlayer()->pre_render();
getSkybox()->pre_render();
}
namespace Render {
void pre_render();
void render() {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//*Always* render the camera first.
getCamera()->render();
getSkybox()->render();
getPlayer()->render();
}
void render();
void post_render() {
getCamera()->post_render();
//Resets all of the transformations for the next frame.
glPopMatrix();
glPushMatrix();
RWindow::glSwapBuffers();
}
void post_render();
[[noreturn]] void render_loop() {
while (true) {
auto start = std::chrono::high_resolution_clock::now();
pre_render();
render();
post_render();
auto stop = std::chrono::high_resolution_clock::now();
float dT = (std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count());
//If we have more than 1000 fps.
if (dT < 1000) {
int remaining = 1000 - dT;
std::this_thread::sleep_for(std::chrono::microseconds(remaining));
dT = 1000;
}
engine->frameDelta = (dT / 1000000);
}
[[noreturn]] void render_loop();
}

71
src/engine/render.cpp Normal file
View File

@@ -0,0 +1,71 @@
#include <chrono>
#include <thread>
#include <engine/render.h>
#include <engine/engine.h>
#include <types/camera.h>
#include <types/skybox.h>
void Render::pre_render() {
// NO
if (engine->frameCount == 0) {
engine->window = new(RWindow);
engine->window->init(RenderingAPI::OPENGL, "Re: 3D", 1152, 864);
engine->window->setFlag(RWindowFlags::RESIZABLE, false);
engine->initGL();
engine->loadConfig();
auto *camera = new Camera();
storeEntity(camera);
// TODO:
getCamera()->position = {0.0f, -2.0f, -5.0f};
getCamera()->angle.y = 0.0f;
getCamera()->scriptedMove.load("assets/scriptedMove/default.smov");
auto *skybox = new Skybox();
skybox->draw = true;
storeEntity(skybox);
auto *player = new Player();
player->angle = {0, 0, 0};
storeEntity(player);
}
//std::cout << engine->frameCount << std::endl;
engine->window->pollEvents();
engine->frameCount++;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
getCamera()->pre_render();
getPlayer()->pre_render();
getSkybox()->pre_render();
}
void Render::render() {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//*Always* render the camera first.
getCamera()->render();
getSkybox()->render();
getPlayer()->render();
}
void Render::post_render() {
getCamera()->post_render();
//Resets all of the transformations for the next frame.
glPopMatrix();
glPushMatrix();
RWindow::glSwapBuffers();
}
void Render::render_loop() {
while (true) {
auto start = std::chrono::high_resolution_clock::now();
pre_render();
render();
post_render();
auto stop = std::chrono::high_resolution_clock::now();
float dT = (std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count());
//If we have more than 1000 fps.
if (dT < 1000) {
int remaining = 1000 - dT;
std::this_thread::sleep_for(std::chrono::microseconds(remaining));
dT = 1000;
}
engine->frameDelta = (dT / 1000000);
}
}