Make render a cpp
This commit is contained in:
@@ -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(
|
||||
|
@@ -21,7 +21,7 @@ class glDemoGameApp : public GameApp
|
||||
public:
|
||||
void Run() override
|
||||
{
|
||||
render_loop();
|
||||
Render::render_loop();
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -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
71
src/engine/render.cpp
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user