Files
panopainter/tests/renderer_gl/capabilities_tests.cpp

82 lines
2.6 KiB
C++

#include "renderer_gl/opengl_capabilities.h"
#include "test_harness.h"
#include <array>
#include <string_view>
namespace {
void detects_common_extension_capabilities(pp::tests::Harness& h)
{
constexpr std::array<std::string_view, 2> extensions {
"GL_EXT_shader_framebuffer_fetch",
"GL_ARB_map_buffer_alignment",
};
const auto capabilities = pp::renderer::gl::detect_opengl_capabilities(
extensions,
pp::renderer::gl::OpenGlRuntime {});
PP_EXPECT(h, capabilities.framebuffer_fetch);
PP_EXPECT(h, capabilities.map_buffer_alignment);
PP_EXPECT(h, !capabilities.float32_textures);
PP_EXPECT(h, !capabilities.float16_textures);
}
void treats_desktop_gl_float_rendering_as_core(pp::tests::Harness& h)
{
const auto capabilities = pp::renderer::gl::detect_opengl_capabilities(
{},
pp::renderer::gl::OpenGlRuntime { .desktop_gl = true });
PP_EXPECT(h, capabilities.float32_textures);
PP_EXPECT(h, capabilities.float32_linear);
PP_EXPECT(h, capabilities.float16_textures);
}
void detects_gles_texture_float_extensions(pp::tests::Harness& h)
{
constexpr std::array<std::string_view, 3> extensions {
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_EXT_color_buffer_half_float",
};
const auto capabilities = pp::renderer::gl::detect_opengl_capabilities(
extensions,
pp::renderer::gl::OpenGlRuntime { .gles = true });
PP_EXPECT(h, capabilities.float32_textures);
PP_EXPECT(h, capabilities.float32_linear);
PP_EXPECT(h, capabilities.float16_textures);
}
void ignores_gles_texture_extensions_for_webgl_runtime(pp::tests::Harness& h)
{
constexpr std::array<std::string_view, 3> extensions {
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_EXT_color_buffer_half_float",
};
const auto capabilities = pp::renderer::gl::detect_opengl_capabilities(
extensions,
pp::renderer::gl::OpenGlRuntime { .gles = true, .web = true });
PP_EXPECT(h, !capabilities.float32_textures);
PP_EXPECT(h, !capabilities.float32_linear);
PP_EXPECT(h, !capabilities.float16_textures);
}
}
int main()
{
pp::tests::Harness harness;
harness.run("detects_common_extension_capabilities", detects_common_extension_capabilities);
harness.run("treats_desktop_gl_float_rendering_as_core", treats_desktop_gl_float_rendering_as_core);
harness.run("detects_gles_texture_float_extensions", detects_gles_texture_float_extensions);
harness.run("ignores_gles_texture_extensions_for_webgl_runtime", ignores_gles_texture_extensions_for_webgl_runtime);
return harness.finish();
}