Skip to content

Commit

Permalink
add util function to check all uniforms
Browse files Browse the repository at this point in the history
  • Loading branch information
ZzzhHe committed Nov 30, 2024
1 parent e4b5123 commit 9ccbca7
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 36 deletions.
12 changes: 6 additions & 6 deletions libopenage/renderer/demo/demo_0.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "renderer/resources/mesh_data.h"
#include "renderer/resources/shader_source.h"
#include "renderer/shader_program.h"
#include "renderer/util.h"


namespace openage::renderer::tests {
Expand Down Expand Up @@ -43,18 +44,17 @@ void renderer_demo_0(const util::Path &path) {
auto display_shader = renderer->add_shader({display_vshader_src, display_fshader_src});

auto quad = renderer->add_mesh_geometry(resources::MeshData::make_quad());
auto display_unif = display_shader->create_empty_input();
/* Check if all uniform values for uniform inputs have been set */
if (!display_unif->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
}
Renderable display_stuff{
display_unif,
display_shader->create_empty_input(),
quad,
false,
false,
};

if (!util::check_uniform_completeness({display_stuff})) {
log::log(WARN << "Uniforms not complete.");
}

auto pass = renderer->add_render_pass({display_stuff}, renderer->get_display_target());

while (not window.should_close()) {
Expand Down
7 changes: 3 additions & 4 deletions libopenage/renderer/demo/demo_1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "renderer/shader_program.h"
#include "renderer/texture.h"
#include "util/math_constants.h"
#include "renderer/util.h"


namespace openage::renderer::tests {
Expand Down Expand Up @@ -172,10 +173,8 @@ void renderer_demo_1(const util::Path &path) {

auto pass2 = renderer->add_render_pass({display_obj}, renderer->get_display_target());

/* Check if all uniform values for uniform inputs have been set */
if (!obj1_unifs->is_complete() || !obj2_unifs->is_complete() || !obj3_unifs->is_complete()
|| !proj_unif->is_complete() || !color_texture_unif->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
if (!util::check_uniform_completeness({obj1_unifs, obj2_unifs, obj3_unifs, proj_unif, color_texture_unif})) {
log::log(WARN << "Uniforms not complete.");
}

/* Data retrieved from the object index texture. */
Expand Down
6 changes: 3 additions & 3 deletions libopenage/renderer/demo/demo_2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "renderer/resources/texture_data.h"
#include "renderer/shader_program.h"
#include "renderer/texture.h"
#include "renderer/util.h"


namespace openage::renderer::tests {
Expand Down Expand Up @@ -224,9 +225,8 @@ void renderer_demo_2(const util::Path &path) {

auto pass2 = renderer->add_render_pass({display_obj}, renderer->get_display_target());

/* Check if all uniform values for uniform inputs have been set */
if (!obj1_unifs->is_complete() || !proj_unif->is_complete() || !color_texture_unif->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
if (!util::check_uniform_completeness({proj_update, obj1, display_obj})) {
log::log(WARN << "Uniforms not complete.");
}

/* Data retrieved from the object index texture. */
Expand Down
6 changes: 3 additions & 3 deletions libopenage/renderer/demo/demo_4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "renderer/resources/shader_source.h"
#include "renderer/resources/texture_data.h"
#include "renderer/shader_program.h"
#include "renderer/util.h"
#include "time/clock.h"


Expand Down Expand Up @@ -165,9 +166,8 @@ void renderer_demo_4(const util::Path &path) {

auto pass2 = renderer->add_render_pass({display_obj}, renderer->get_display_target());

/* Check if all uniform values for uniform inputs have been set */
if (!obj1_unifs->is_complete() || !proj_unif->is_complete() || !color_texture_unif->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
if (!renderer::util::check_uniform_completeness({proj_update, obj1, display_obj})) {
log::log(WARN << "Uniforms not complete.");
}

window.add_resize_callback([&](size_t w, size_t h, double /*scale*/) {
Expand Down
6 changes: 3 additions & 3 deletions libopenage/renderer/demo/demo_5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "renderer/shader_program.h"
#include "renderer/uniform_buffer.h"
#include "renderer/uniform_input.h"
#include "renderer/util.h"


namespace openage::renderer::tests {
Expand Down Expand Up @@ -134,9 +135,8 @@ void renderer_demo_5(const util::Path &path) {
"tex",
gltex);

/* Check if all uniform values for uniform inputs have been set */
if (!transform_unifs->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
if (!renderer::util::check_uniform_completeness({terrain_obj})) {
log::log(WARN << "Uniforms not complete.");
}

// Move around the scene with WASD
Expand Down
16 changes: 5 additions & 11 deletions libopenage/renderer/demo/demo_6.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "renderer/shader_program.h"
#include "renderer/texture.h"
#include "renderer/uniform_buffer.h"
#include "renderer/util.h"
#include "time/clock.h"
#include "util/path.h"
#include "util/vector.h"
Expand Down Expand Up @@ -179,10 +180,6 @@ const std::vector<renderer::Renderable> RenderManagerDemo6::create_2d_obj() {
this->obj_2d_texture,
"tile_params",
tile_params);
/* Check if all uniform values for uniform inputs have been set */
if (!animation_2d_unifs->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
}
auto quad = this->renderer->add_mesh_geometry(resources::MeshData::make_quad());
Renderable animation_2d_obj{
animation_2d_unifs,
Expand All @@ -202,10 +199,6 @@ const renderer::Renderable RenderManagerDemo6::create_3d_obj() {
auto terrain_unifs = this->obj_3d_shader->new_uniform_input(
"tex",
this->obj_3d_texture);
/* Check if all uniform values for uniform inputs have been set */
if (!terrain_unifs->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
}

std::vector<coord::scene3> terrain_pos{};
terrain_pos.push_back({-25, -25, 0});
Expand Down Expand Up @@ -269,9 +262,6 @@ const std::vector<renderer::Renderable> RenderManagerDemo6::create_frame_obj() {
frame_size,
"incol",
Eigen::Vector4f{0.0f, 0.0f, 1.0f, 1.0f});
if (!frame_unifs->is_complete()) {
log::log(WARN << "Some Uniform values have not been set.");
}
Renderable frame_obj{
frame_unifs,
frame_geometry,
Expand Down Expand Up @@ -499,6 +489,10 @@ void RenderManagerDemo6::create_render_passes() {
this->display_pass = renderer->add_render_pass(
{display_obj_3d, display_obj_2d, display_obj_frame},
renderer->get_display_target());

if (!renderer::util::check_uniform_completeness({display_obj_3d, display_obj_2d, display_obj_frame})) {
log::log(WARN << "Uniforms not complete.");
}
}

} // namespace openage::renderer::tests
12 changes: 6 additions & 6 deletions libopenage/renderer/opengl/uniform_input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ GlUniformBufferInput::GlUniformBufferInput(const std::shared_ptr<UniformBuffer>
}

bool GlUniformInput::is_complete() const {
for (const auto& uniform : this->update_offs) {
if (!uniform.used) {
return false;
}
}
return true;
for (const auto& uniform : this->update_offs) {
if (!uniform.used) {
return false;
}
}
return true;
}

} // namespace openage::renderer::opengl
17 changes: 17 additions & 0 deletions libopenage/renderer/util.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
// Copyright 2018-2023 the openage authors. See copying.md for legal info.

#include "util.h"
#include "renderable.h"
#include "uniform_input.h"

#include <log/log.h>
#include <log/message.h>
#include <utility>


Expand All @@ -16,4 +20,17 @@ Eigen::Matrix4f ortho_matrix_f(float left, float right, float bottom, float top,
return ortho_matrix<Eigen::Matrix4f, float>(left, right, bottom, top, near, far);
}

bool check_uniform_completeness(const std::vector<Renderable> &renderables) {
bool all_complete = true;

// Iterate over each renderable object
for (const auto &renderable : renderables) {
if (renderable.uniform && !renderable.uniform->is_complete()) {
all_complete = false;
}
}

return all_complete;
}

} // namespace openage::renderer::util
11 changes: 11 additions & 0 deletions libopenage/renderer/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

#include <eigen3/Eigen/Dense>

namespace openage::renderer {
class Renderable;
} // namespace openage::renderer

namespace openage::renderer::util {

Expand Down Expand Up @@ -45,4 +48,12 @@ Eigen::Matrix4d ortho_matrix_d(double left, double right, double bottom, double
*/
Eigen::Matrix4f ortho_matrix_f(float left, float right, float bottom, float top, float near, float far);

/**
* Check if all uniform values for the given renderables have been set.
*
* @param renderables The list of renderable objects to check.
* @return true if all uniforms have been set, false otherwise.
*/
bool check_uniform_completeness(const std::vector<Renderable> &renderables);

} // namespace openage::renderer::util

0 comments on commit 9ccbca7

Please sign in to comment.