diff --git a/CMakeLists.txt b/CMakeLists.txt index ec0f042..72b10d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,8 @@ add_library(${PROJECT_NAME} STATIC "src/resource_manager.cpp" "src/gfx_device_vulkan.cpp" + "src/gfx_device_null.cpp" + "src/gfx_device_opengl45.cpp" # PUBLIC API diff --git a/src/gfx_device_null.cpp b/src/gfx_device_null.cpp new file mode 100644 index 0000000..61110a3 --- /dev/null +++ b/src/gfx_device_null.cpp @@ -0,0 +1,48 @@ +// The implementation of the graphics layer using Vulkan 1.3. +// This uses SDL specific code + +#ifdef ENGINE_BUILD_NULLGFX + +#include "gfx_device.hpp" +#include "util.hpp" +#include "config.h" +#include "log.hpp" + +namespace engine { + + // class definitions + + struct GFXDevice::Impl { + + }; + + GFXDevice::GFXDevice(const char* appName, const char* appVersion, SDL_Window* window) + { + pimpl = std::make_unique(); + } + + GFXDevice::~GFXDevice() + { + TRACE("Destroying GFXDevice..."); + } + + void GFXDevice::draw() + { + } + + void GFXDevice::createPipeline(const char* vertShaderPath, const char* fragShaderPath) + { + } + + bool GFXDevice::createBuffer(const gfx::BufferDesc& desc, const void* data, gfx::BufferHandle* out) + { + return true; + } + + void GFXDevice::waitIdle() + { + } + +} + +#endif diff --git a/src/gfx_device_opengl45.cpp b/src/gfx_device_opengl45.cpp new file mode 100644 index 0000000..9b42ec9 --- /dev/null +++ b/src/gfx_device_opengl45.cpp @@ -0,0 +1,82 @@ +// The implementation of the graphics layer using Vulkan 1.3. +// This uses SDL specific code + +#ifdef ENGINE_BUILD_OPENGL + +#include "gfx_device.hpp" +#include "util.hpp" +#include "config.h" +#include "log.hpp" + +#include + +#include + +#include +#include +#include +#include +#include +#include + +namespace engine { + + // structures and enums + + static std::vector readFile(const std::string& filename) + { + std::ifstream file(filename, std::ios::ate | std::ios::binary); + if (file.is_open() == false) { + throw std::runtime_error("Unable to open file " + filename); + } + std::vector buffer(file.tellg()); + file.seekg(0); + file.read(buffer.data(), buffer.size()); + file.close(); + return buffer; + } + + + + // class definitions + + struct GFXDevice::Impl { + + SDL_GLContext context = nullptr; + + }; + + GFXDevice::GFXDevice(const char* appName, const char* appVersion, SDL_Window* window) + { + pimpl = std::make_unique(); + + pimpl->context = SDL_GL_CreateContext(window); + + } + + GFXDevice::~GFXDevice() + { + TRACE("Destroying GFXDevice..."); + } + + void GFXDevice::draw() + { + } + + void GFXDevice::createPipeline(const char* vertShaderPath, const char* fragShaderPath) + { + } + + bool GFXDevice::createBuffer(const gfx::BufferDesc& desc, const void* data, gfx::BufferHandle* out) + { + return false; + } + + void GFXDevice::waitIdle() + { + glFinish(); + } + +} + +#endif diff --git a/src/gfx_device_vulkan.cpp b/src/gfx_device_vulkan.cpp index 0e6338b..7571d1d 100644 --- a/src/gfx_device_vulkan.cpp +++ b/src/gfx_device_vulkan.cpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace engine {