Extract OpenGL shader attribute bindings
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
#include "renderer_gl/opengl_capabilities.h"
|
||||
#include "renderer_gl/shader_bindings.h"
|
||||
#include "test_harness.h"
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <string_view>
|
||||
|
||||
namespace {
|
||||
@@ -156,6 +158,49 @@ void maps_shape_index_and_primitive_modes(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, pp::renderer::gl::primitive_mode_for_stroke_count(99U) == gl_lines);
|
||||
}
|
||||
|
||||
void exposes_shader_attribute_binding_catalog(pp::tests::Harness& h)
|
||||
{
|
||||
const auto bindings = pp::renderer::gl::panopainter_shader_attribute_bindings();
|
||||
|
||||
PP_EXPECT(h, bindings.size() == 5U);
|
||||
PP_EXPECT(h, pp::renderer::gl::validate_shader_attribute_bindings(bindings).ok());
|
||||
PP_EXPECT(h, std::strcmp(bindings[0].name, "pos") == 0);
|
||||
PP_EXPECT(h, bindings[0].location == 0U);
|
||||
PP_EXPECT(h, std::strcmp(bindings[1].name, "uvs") == 0);
|
||||
PP_EXPECT(h, bindings[1].location == 1U);
|
||||
PP_EXPECT(h, std::strcmp(bindings[2].name, "uvs2") == 0);
|
||||
PP_EXPECT(h, bindings[2].location == 2U);
|
||||
PP_EXPECT(h, std::strcmp(bindings[3].name, "col") == 0);
|
||||
PP_EXPECT(h, bindings[3].location == 3U);
|
||||
PP_EXPECT(h, std::strcmp(bindings[4].name, "nor") == 0);
|
||||
PP_EXPECT(h, bindings[4].location == 3U);
|
||||
}
|
||||
|
||||
void rejects_invalid_shader_attribute_binding_catalogs(pp::tests::Harness& h)
|
||||
{
|
||||
const std::array<pp::renderer::gl::OpenGlAttributeBinding, 0> empty {};
|
||||
const std::array unnamed {
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = "", .location = 0 },
|
||||
};
|
||||
const std::array null_named {
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = nullptr, .location = 0 },
|
||||
};
|
||||
const std::array duplicate_name {
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = "pos", .location = 0 },
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = "pos", .location = 1 },
|
||||
};
|
||||
const std::array duplicate_location {
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = "col", .location = 3 },
|
||||
pp::renderer::gl::OpenGlAttributeBinding { .name = "nor", .location = 3 },
|
||||
};
|
||||
|
||||
PP_EXPECT(h, !pp::renderer::gl::validate_shader_attribute_bindings(empty).ok());
|
||||
PP_EXPECT(h, !pp::renderer::gl::validate_shader_attribute_bindings(unnamed).ok());
|
||||
PP_EXPECT(h, !pp::renderer::gl::validate_shader_attribute_bindings(null_named).ok());
|
||||
PP_EXPECT(h, !pp::renderer::gl::validate_shader_attribute_bindings(duplicate_name).ok());
|
||||
PP_EXPECT(h, pp::renderer::gl::validate_shader_attribute_bindings(duplicate_location).ok());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -169,5 +214,7 @@ int main()
|
||||
harness.run("maps_image_channel_count_to_texture_format", maps_image_channel_count_to_texture_format);
|
||||
harness.run("names_framebuffer_status_codes", names_framebuffer_status_codes);
|
||||
harness.run("maps_shape_index_and_primitive_modes", maps_shape_index_and_primitive_modes);
|
||||
harness.run("exposes_shader_attribute_binding_catalog", exposes_shader_attribute_binding_catalog);
|
||||
harness.run("rejects_invalid_shader_attribute_binding_catalogs", rejects_invalid_shader_attribute_binding_catalogs);
|
||||
return harness.finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user