3DRenderer instancing
This commit is contained in:
parent
9ab9e476b9
commit
b200c38ca1
@ -20,7 +20,6 @@ public:
|
|||||||
void Draw(sf::RenderTexture& context);
|
void Draw(sf::RenderTexture& context);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
sf::RenderTexture mWorldRender; // This is used to create the scene
|
|
||||||
std::unique_ptr<Camera> mMainCamera; // Default player view
|
std::unique_ptr<Camera> mMainCamera; // Default player view
|
||||||
|
|
||||||
std::vector<std::shared_ptr<WorldObject>> mRenderList; // List of elements to be rendered next frame
|
std::vector<std::shared_ptr<WorldObject>> mRenderList; // List of elements to be rendered next frame
|
||||||
|
@ -16,7 +16,7 @@ void Camera::UpdateCamView() {
|
|||||||
M3D_VECTOR L = M3D_V4LoadF3(&mLook);
|
M3D_VECTOR L = M3D_V4LoadF3(&mLook);
|
||||||
M3D_VECTOR U = M3D_V4LoadF3(&mUp);
|
M3D_VECTOR U = M3D_V4LoadF3(&mUp);
|
||||||
|
|
||||||
M3D_V4StoreF4x4(&mViewMat, M3D_TransformMatrixCamLookAtLH(P, L, U));
|
M3D_V4StoreF4x4(&mViewMat, M3D_TransformMatrixCamLookToLH(P, L, U));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::LookAt(M3D_VECTOR pos, M3D_VECTOR target, M3D_VECTOR worldUp) {
|
void Camera::LookAt(M3D_VECTOR pos, M3D_VECTOR target, M3D_VECTOR worldUp) {
|
||||||
|
@ -69,7 +69,7 @@ void CockpitUI::Draw(std::shared_ptr<sf::RenderWindow> context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WorldUI::WorldUI() : UI() {
|
WorldUI::WorldUI(std::shared_ptr<Graphic3DRenderer> engineInstance) : UI(), mWorld3D(engineInstance) {
|
||||||
sf::ContextSettings sViewSettings;
|
sf::ContextSettings sViewSettings;
|
||||||
sViewSettings.depthBits = 0;
|
sViewSettings.depthBits = 0;
|
||||||
sViewSettings.stencilBits = 0;
|
sViewSettings.stencilBits = 0;
|
||||||
@ -98,7 +98,7 @@ void WorldUI::Draw(std::shared_ptr<sf::RenderWindow> context) {
|
|||||||
mUIRender.clear(sf::Color::Transparent);
|
mUIRender.clear(sf::Color::Transparent);
|
||||||
|
|
||||||
// Draw the 3D view
|
// Draw the 3D view
|
||||||
m3DEngine.Draw(mUIRender);
|
mWorld3D->Draw(mUIRender);
|
||||||
|
|
||||||
// Do the final texture render
|
// Do the final texture render
|
||||||
mUIRender.display();
|
mUIRender.display();
|
||||||
|
@ -42,7 +42,7 @@ private:
|
|||||||
|
|
||||||
class WorldUI final : public UI {
|
class WorldUI final : public UI {
|
||||||
public:
|
public:
|
||||||
WorldUI();
|
WorldUI(std::shared_ptr<Graphic3DRenderer> engineInstance);
|
||||||
~WorldUI() {}
|
~WorldUI() {}
|
||||||
|
|
||||||
WorldUI(WorldUI&&) = default;
|
WorldUI(WorldUI&&) = default;
|
||||||
@ -54,6 +54,6 @@ public:
|
|||||||
void Draw(std::shared_ptr<sf::RenderWindow>) override;
|
void Draw(std::shared_ptr<sf::RenderWindow>) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Graphic3DRenderer m3DEngine;
|
std::shared_ptr<Graphic3DRenderer> mWorld3D;
|
||||||
|
|
||||||
};
|
};
|
9
Game.cpp
9
Game.cpp
@ -1,7 +1,6 @@
|
|||||||
#include "Game.hpp"
|
#include "Game.hpp"
|
||||||
|
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
|
||||||
#include <SFML/System.hpp>
|
#include <SFML/System.hpp>
|
||||||
#include <SFML/Window/Event.hpp>
|
#include <SFML/Window/Event.hpp>
|
||||||
|
|
||||||
@ -13,12 +12,12 @@ using std::make_unique;
|
|||||||
#define TARGET_FPS (60)
|
#define TARGET_FPS (60)
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<SysTimer> mPerfsTimer = nullptr;
|
|
||||||
Game* Game::smInstance = nullptr;
|
Game* Game::smInstance = nullptr;
|
||||||
|
|
||||||
Game::Game(std::shared_ptr<sf::RenderWindow> mainWnd, bool dbgFlag) : mbDbgModeEnabled(dbgFlag), mMainWindow(mainWnd) {
|
Game::Game(std::shared_ptr<sf::RenderWindow> mainWnd, bool dbgFlag) : mbDbgModeEnabled(dbgFlag), mMainWindow(mainWnd) {
|
||||||
|
mWorld3D = make_shared<Graphic3DRenderer>();
|
||||||
mCockpitUI = make_unique<CockpitUI>();
|
mCockpitUI = make_unique<CockpitUI>();
|
||||||
mWorldUI = make_unique<WorldUI>();
|
mWorldUI = make_unique<WorldUI>(mWorld3D);
|
||||||
|
|
||||||
if (mbDbgModeEnabled) {
|
if (mbDbgModeEnabled) {
|
||||||
mDbgUI = make_unique<DebugUI>();
|
mDbgUI = make_unique<DebugUI>();
|
||||||
@ -61,8 +60,8 @@ GAME_STATUS Game::Tick() {
|
|||||||
// Ugly way to wait for next frame... Maybe create a separate thread for rendering?
|
// Ugly way to wait for next frame... Maybe create a separate thread for rendering?
|
||||||
//while(time.GetDeltaTime() < (1000/TARGET_FPS)) {}
|
//while(time.GetDeltaTime() < (1000/TARGET_FPS)) {}
|
||||||
|
|
||||||
// Process to the final rendering
|
// Process to the final rendering if the window have the focus
|
||||||
if (mSysTimer.GetDeltaTime() >= (1000/TARGET_FPS)) {
|
if (mSysTimer.GetDeltaTime() >= (1000/TARGET_FPS) && mMainWindow->hasFocus()) {
|
||||||
Render();
|
Render();
|
||||||
mFrameCnt++;
|
mFrameCnt++;
|
||||||
mSysTimer.Reset();
|
mSysTimer.Reset();
|
||||||
|
7
Game.hpp
7
Game.hpp
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "Engine/Graphics/UI.hpp"
|
#include "Engine/Graphics/UI.hpp"
|
||||||
#include "Engine/Graphics/DebugUI.hpp"
|
#include "Engine/Graphics/DebugUI.hpp"
|
||||||
|
#include "Engine/Graphics/3DRenderer.hpp"
|
||||||
#include "Engine/Utils/Timers.hpp"
|
#include "Engine/Utils/Timers.hpp"
|
||||||
|
|
||||||
|
|
||||||
@ -41,9 +42,11 @@ private:
|
|||||||
std::unique_ptr<DebugUI> mDbgUI = nullptr;
|
std::unique_ptr<DebugUI> mDbgUI = nullptr;
|
||||||
|
|
||||||
SysTimer mSysTimer;
|
SysTimer mSysTimer;
|
||||||
|
std::unique_ptr<SysTimer> mPerfsTimer = nullptr;
|
||||||
|
|
||||||
std::shared_ptr<sf::RenderWindow> mMainWindow;
|
std::shared_ptr<sf::RenderWindow> mMainWindow;
|
||||||
std::unique_ptr<CockpitUI> mCockpitUI = nullptr;
|
std::shared_ptr<Graphic3DRenderer> mWorld3D;
|
||||||
std::unique_ptr<WorldUI> mWorldUI = nullptr;
|
std::unique_ptr<CockpitUI> mCockpitUI;
|
||||||
|
std::unique_ptr<WorldUI> mWorldUI;
|
||||||
|
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user