Program Listing for File OpenGLDevice.cpp

Return to documentation for file (src/Graphics/RHI/OpenGL/OpenGLDevice.cpp)

#pragma once

#include "Ramus/Graphics/RHI/OpenGL/OpenGLDevice.hpp"
#include "Ramus/Core/Services/Logger.hpp"

#include <glm/glm.hpp>
#include <glad/gl.h>

namespace ramus
{

    OpenGLDevice::OpenGLDevice(void* nativeWindow)
    {
        m_context = std::make_unique<OpenGLContext>(nativeWindow);
        m_context->Init();

        // 3. Set Initial State (Using the settings from EngineConfig)
        //ConfigureInitialState(settings);

        Init();

        // 4. Log hardware info (Great for debugging those Coursera assets)
        const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
        const char* renderer = reinterpret_cast<const char*>(glGetString(GL_RENDERER));
        Logger::GetRendererLogger()->info("GPU: {} ({})", renderer, vendor);
    }

    void OpenGLDevice::Init()
    {
        // Enable modern OpenGL 4.6 features by default
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);

        glEnable(GL_CULL_FACE);
        glCullFace(GL_BACK);

        // Enable MSAA if requested in the config
        //if (settings.msaaSamples > 1)
        //{
        //    glEnable(GL_MULTISAMPLE);
        //}

        // Set VSync through the context
        //m_context->SetVSync(settings.vSyncEnabled);
    }

    void OpenGLDevice::SetClearColor(const glm::vec4& clearColor)
    {
        glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);
    }

    void OpenGLDevice::Clear()
    {
        glClear(GL_COLOR_BUFFER_BIT);
    }

    void OpenGLDevice::Present()
    {
        m_context->SwapBuffers();
    }

}