Minor - Vsync toggle

New Method :

+ Set Vsync
+ Set Screen Width
+ Set Screen Height
+ Get Hwnd
+ Set Hwnd
+ IsWindowed
+ SetWindowed

New UI For Engine Settings :

+ Add Vsync Toggle to UI
This commit is contained in:
CatChow0 2025-01-10 20:43:36 +01:00
parent 79f266b479
commit bce659e55d
8 changed files with 111 additions and 5 deletions

View File

@ -257,6 +257,8 @@ LRESULT CALLBACK SystemClass::MessageHandler(HWND hwnd, UINT umsg, WPARAM wparam
// If Direct3D is initialized, update the swap chain. Otherwise, store the window dimensions
if (m_isDirect3DInitialized && m_Application && m_Application->GetDirect3D())
{
m_Application->SetScreenWidth(newWidth);
m_Application->SetScreenHeight(newHeight);
m_Application->GetDirect3D()->ResizeSwapChain(newWidth, newHeight);
}
else

View File

@ -56,6 +56,11 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd)
m_screenWidth = screenWidth;
m_screenHeight = screenHeight;
SetHwnd(hwnd);
SetWindowed(FULL_SCREEN);
SetScreenHeight(screenHeight);
SetScreenWidth(screenWidth);
// Create the Direct3D object.
m_Direct3D = new D3DClass;
if (!m_Direct3D)
@ -1974,4 +1979,51 @@ void ApplicationClass::SetLightPosition(int index, XMVECTOR position)
//set the position
m_Lights[index]->SetPosition(lightPosition.x, lightPosition.y, lightPosition.z);
}
void ApplicationClass::SetVsync(bool vsync)
{
VSYNC_ENABLED = vsync;
if (m_Direct3D)
{
Logger::Get().Log("Setting Vsync to " + std::to_string(vsync) + " with a screen width : " + std::to_string(GetScreenWidth()) + "and a screen height : " + std::to_string(GetScreenHeight()), __FILE__, __LINE__);
m_Direct3D->SetVsync(vsync);
}
}
HWND ApplicationClass::GetHwnd() const
{
return m_hwnd;
}
void ApplicationClass::SetHwnd(HWND hwnd)
{
m_hwnd = hwnd;
}
bool ApplicationClass::IsWindowed() const
{
return m_windowed;
}
void ApplicationClass::SetWindowed(bool windowed)
{
// log the new windowed mode
Logger::Get().Log("Setting windowed mode to " + std::to_string(windowed), __FILE__, __LINE__);
m_windowed = windowed;
}
void ApplicationClass::SetScreenHeight(int height)
{
// log the new screen height
Logger::Get().Log("Setting screen height to " + std::to_string(height), __FILE__, __LINE__);
m_screenHeight = height;
}
void ApplicationClass::SetScreenWidth(int width)
{
// log the new screen width
Logger::Get().Log("Setting screen width to " + std::to_string(width), __FILE__, __LINE__);
m_screenWidth = width;
}

View File

@ -38,7 +38,6 @@
// GLOBALS //
/////////////
const bool FULL_SCREEN = false;
const bool VSYNC_ENABLED = false;
const float SCREEN_DEPTH = 1000.0f;
const float SCREEN_NEAR = 0.3f;
@ -59,7 +58,9 @@ public:
bool Frame(InputClass*);
int GetScreenWidth() const;
void SetScreenWidth(int screenWidth);
int GetScreenHeight() const;
void SetScreenHeight(int screenHeight);
float GetSpeed() const { return m_speed; };
void SetSpeed(float speed) { this->m_speed = speed; };
@ -92,6 +93,15 @@ public:
std::vector<ID3D11ShaderResourceView*> textures;
void SetVsync(bool vsync);
bool GetVsync() const { return VSYNC_ENABLED; };
HWND GetHwnd() const;
void SetHwnd(HWND hwnd);
bool IsWindowed() const;
void SetWindowed(bool windowed);
private:
bool Render(float, float, float, float, float);
bool UpdateMouseStrings(int, int, bool);
@ -111,6 +121,10 @@ private :
IDXGISwapChain* m_swapChain;
ModelClass* m_Model,* m_GroundModel, * m_WallModel, * m_BathModel, * m_WaterModel;
ModelListClass* m_ModelList;
bool VSYNC_ENABLED = true;
HWND m_hwnd;
bool m_windowed;
// ------------------------------------- //
// ------------- RENDERING ------------- //

View File

@ -695,7 +695,8 @@ IDXGISwapChain* D3DClass::GetSwapChain()
void D3DClass::ResizeSwapChain(int newWidth, int newHeight)
{
Logger::Get().Log("Resizing swap chain", __FILE__, __LINE__);
// log the new width and height
Logger::Get().Log("Resizing swap chain to " + std::to_string(newWidth) + "x" + std::to_string(newHeight), __FILE__, __LINE__);
HRESULT result;
@ -766,3 +767,8 @@ void D3DClass::DisableAlphaBlending()
return;
}
void D3DClass::SetVsync(bool vsync)
{
m_vsync_enabled = vsync;
}

View File

@ -46,6 +46,8 @@ public:
IDXGISwapChain* m_swapChain;
IDXGISwapChain* GetSwapChain();
void ResizeSwapChain(int, int);
void SetVsync(bool vsync);
XMMATRIX GetProjectionMatrix() const { return m_projectionMatrix; };
XMMATRIX GetWorldMatrix() const { return m_worldMatrix;};

View File

@ -3,7 +3,7 @@ Pos=60,60
Size=400,400
[Window][Khaotic Engine]
Pos=1113,54
Pos=1143,44
Size=392,273
[Window][Objects]
@ -20,6 +20,10 @@ Pos=1548,17
Size=358,535
[Window][Shader Manager]
Pos=28,261
Size=172,284
Pos=471,90
Size=180,79
[Window][Engine Settings]
Pos=561,352
Size=168,77

View File

@ -318,6 +318,11 @@ bool imguiManager::ImGuiWidgetRenderer(ApplicationClass* app)
showShaderWindow = true;
}
if (ImGui::Button("Open Engine Settings Window"))
{
showEngineSettingsWindow = true;
}
ImGui::End();
// Show windows if their corresponding variables are true
@ -341,6 +346,11 @@ bool imguiManager::ImGuiWidgetRenderer(ApplicationClass* app)
WidgetShaderWindow(app);
}
if (showEngineSettingsWindow)
{
WidgetEngineSettingsWindow(app);
}
//render imgui
Render();
@ -379,5 +389,19 @@ void imguiManager::WidgetLightWindow(ApplicationClass* app)
index++;
};
ImGui::End();
}
void imguiManager::WidgetEngineSettingsWindow(ApplicationClass* app)
{
ImGui::Begin("Engine Settings", &showEngineSettingsWindow);
// Checkbox for toggling vsync globally in the application class by calling the SetVsync function in the application class when the checkbox state changes
bool vsync = app->GetVsync();
if (ImGui::Checkbox("Vsync", &vsync))
{
app->SetVsync(vsync);
}
ImGui::End();
}

View File

@ -32,6 +32,7 @@ public:
void WidgetTerrainWindow(ApplicationClass* app);
void WidgetLightWindow(ApplicationClass* app);
void WidgetShaderWindow(ApplicationClass* app);
void WidgetEngineSettingsWindow(ApplicationClass* app);
bool ImGuiWidgetRenderer(ApplicationClass* app);
@ -44,6 +45,7 @@ private :
bool showTerrainWindow = false;
bool showLightWindow = false;
bool showShaderWindow = false;
bool showEngineSettingsWindow = false;
private:
ImGuiIO* io;