Extract OpenGL shader uniform catalog

This commit is contained in:
2026-06-01 18:06:14 +02:00
parent bdcd44b340
commit 4212387b70
6 changed files with 172 additions and 59 deletions

View File

@@ -201,6 +201,52 @@ void rejects_invalid_shader_attribute_binding_catalogs(pp::tests::Harness& h)
PP_EXPECT(h, pp::renderer::gl::validate_shader_attribute_bindings(duplicate_location).ok());
}
void exposes_shader_uniform_catalog(pp::tests::Harness& h)
{
const auto uniforms = pp::renderer::gl::panopainter_shader_uniform_names();
PP_EXPECT(h, uniforms.size() == 43U);
PP_EXPECT(h, pp::renderer::gl::validate_shader_uniform_names(uniforms).ok());
PP_EXPECT(h, std::strcmp(uniforms[0].name, "mvp") == 0);
PP_EXPECT(h, uniforms[0].id == pp::renderer::gl::shader_uniform_id("mvp"));
PP_EXPECT(h, uniforms[0].id == 40696U);
PP_EXPECT(h, std::strcmp(uniforms[1].name, "tex") == 0);
PP_EXPECT(h, uniforms[1].id == pp::renderer::gl::shader_uniform_id("tex"));
PP_EXPECT(h, uniforms[1].id == 48854U);
PP_EXPECT(h, pp::renderer::gl::shader_uniform_id("pattern_contr") == 54920U);
PP_EXPECT(h, pp::renderer::gl::shader_uniform_id("draw_outline") == 36178U);
}
void rejects_invalid_shader_uniform_catalogs(pp::tests::Harness& h)
{
const std::array<pp::renderer::gl::OpenGlUniformName, 0> empty {};
const std::array unnamed {
pp::renderer::gl::OpenGlUniformName { .name = "", .id = 0 },
};
const std::array null_named {
pp::renderer::gl::OpenGlUniformName { .name = nullptr, .id = 0 },
};
const std::array mismatched_hash {
pp::renderer::gl::OpenGlUniformName { .name = "mvp", .id = 1 },
};
const std::array duplicate_name {
pp::renderer::gl::OpenGlUniformName {
.name = "mvp",
.id = pp::renderer::gl::shader_uniform_id("mvp"),
},
pp::renderer::gl::OpenGlUniformName {
.name = "mvp",
.id = pp::renderer::gl::shader_uniform_id("mvp"),
},
};
PP_EXPECT(h, !pp::renderer::gl::validate_shader_uniform_names(empty).ok());
PP_EXPECT(h, !pp::renderer::gl::validate_shader_uniform_names(unnamed).ok());
PP_EXPECT(h, !pp::renderer::gl::validate_shader_uniform_names(null_named).ok());
PP_EXPECT(h, !pp::renderer::gl::validate_shader_uniform_names(mismatched_hash).ok());
PP_EXPECT(h, !pp::renderer::gl::validate_shader_uniform_names(duplicate_name).ok());
}
}
int main()
@@ -216,5 +262,7 @@ int main()
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);
harness.run("exposes_shader_uniform_catalog", exposes_shader_uniform_catalog);
harness.run("rejects_invalid_shader_uniform_catalogs", rejects_invalid_shader_uniform_catalogs);
return harness.finish();
}