Skip to content

Commit

Permalink
Refactor DepthStencilFormat OpenGL mappings into traits object
Browse files Browse the repository at this point in the history
  • Loading branch information
adamkewley committed Aug 26, 2024
1 parent 9e255f3 commit 858f7f7
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 9 deletions.
2 changes: 2 additions & 0 deletions src/oscar/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ add_library(oscar STATIC

Graphics/OpenGL/CPUDataTypeOpenGLTraits.h
Graphics/OpenGL/CPUImageFormatOpenGLTraits.h
Graphics/OpenGL/DepthStencilFormatOpenGLTraits.h
Graphics/OpenGL/DepthStencilFormatOpenGLHelpers.h
Graphics/OpenGL/Gl.cpp
Graphics/OpenGL/Gl.h
Graphics/OpenGL/TextureFormatOpenGLTraits.h
Expand Down
11 changes: 2 additions & 9 deletions src/oscar/Graphics/GraphicsImplementation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include <oscar/Graphics/MeshTopology.h>
#include <oscar/Graphics/OpenGL/CPUDataTypeOpenGLTraits.h>
#include <oscar/Graphics/OpenGL/CPUImageFormatOpenGLTraits.h>
#include <oscar/Graphics/OpenGL/DepthStencilFormatOpenGLHelpers.h>
#include <oscar/Graphics/OpenGL/Gl.h>
#include <oscar/Graphics/OpenGL/TextureFormatOpenGLTraits.h>
#include <oscar/Graphics/RenderBufferLoadAction.h>
Expand Down Expand Up @@ -2051,8 +2052,6 @@ std::ostream& osc::operator<<(std::ostream& o, const Texture2D&)

namespace
{
enum class RenderBufferType { Color, Depth, NUM_OPTIONS };

constexpr auto c_render_texture_format_strings = std::to_array<CStringView>({
"Red8",
"ARGB32",
Expand Down Expand Up @@ -2083,13 +2082,7 @@ namespace

constexpr GLenum to_opengl_internal_color_format_enum(const DepthRenderBufferParams& params)
{
static_assert(num_options<DepthStencilFormat>() == 2);

switch (params.format) {
case DepthStencilFormat::D24_UNorm_S8_UInt: return GL_DEPTH24_STENCIL8;
case DepthStencilFormat::D32_SFloat: return GL_DEPTH_COMPONENT32F;
default: return GL_DEPTH24_STENCIL8;
}
return detail::to_opengl_internal_color_format_enum(params.format);
}

constexpr CPUImageFormat equivalent_cpu_image_format_of(const RenderTextureFormat& format)
Expand Down
20 changes: 20 additions & 0 deletions src/oscar/Graphics/OpenGL/DepthStencilFormatOpenGLHelpers.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once

#include <oscar/Graphics/Detail/DepthStencilFormatList.h>
#include <oscar/Graphics/OpenGL/DepthStencilFormatOpenGLTraits.h>
#include <oscar/Graphics/OpenGL/Gl.h>
#include <oscar/Utils/EnumHelpers.h>

#include <array>

namespace osc::detail
{
constexpr GLenum to_opengl_internal_color_format_enum(const DepthStencilFormat& format)
{
constexpr auto lut = []<DepthStencilFormat... Formats>(OptionList<DepthStencilFormat, Formats...>) {
return std::to_array({ DepthStencilFormatOpenGLTraits<Formats>::internal_color_format... });
}(DepthStencilFormatList{});

return lut.at(to_index(format));
}
}
20 changes: 20 additions & 0 deletions src/oscar/Graphics/OpenGL/DepthStencilFormatOpenGLTraits.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once

#include <oscar/Graphics/OpenGL/Gl.h>
#include <oscar/Graphics/DepthStencilFormat.h>

namespace osc::detail
{
template<DepthStencilFormat>
struct DepthStencilFormatOpenGLTraits;

template<>
struct DepthStencilFormatOpenGLTraits<DepthStencilFormat::D24_UNorm_S8_UInt> final {
static inline constexpr GLenum internal_color_format = GL_DEPTH24_STENCIL8;
};

template<>
struct DepthStencilFormatOpenGLTraits<DepthStencilFormat::D32_SFloat> final {
static inline constexpr GLenum internal_color_format = GL_DEPTH_COMPONENT32F;
};
}

0 comments on commit 858f7f7

Please sign in to comment.