diff options
Diffstat (limited to 'src/objects')
| -rw-r--r-- | src/objects/effect.cc | 2 | ||||
| -rw-r--r-- | src/objects/object.cc | 2 | ||||
| -rw-r--r-- | src/objects/pass.cc | 18 | ||||
| -rw-r--r-- | src/objects/pass.h | 4 |
4 files changed, 25 insertions, 1 deletions
diff --git a/src/objects/effect.cc b/src/objects/effect.cc index 2a6960f..75b7187 100644 --- a/src/objects/effect.cc +++ b/src/objects/effect.cc @@ -1,3 +1,5 @@ +#include "../log.h" + #include "effect.h" #include "pass.h" diff --git a/src/objects/object.cc b/src/objects/object.cc index 6240c30..4e710ee 100644 --- a/src/objects/object.cc +++ b/src/objects/object.cc @@ -51,7 +51,7 @@ auto Object::parse(Parser &pr, const json &root) -> Object * warn("non 0 origin[2]"); object->origin[2] = 0.f; } - pr.map_value<vec3>(root, "color", &object->color, vec3(0.f)); + pr.map_value<vec3>(root, "color", &object->color, vec3(1.f)); pr.map_value<f32>(root, "alpha", &object->alpha, 1.f); pr.map_value<s32>(root, "colorBlendMode", &object->color_blend_mode, 0); diff --git a/src/objects/pass.cc b/src/objects/pass.cc index e2dc02d..b07e98f 100644 --- a/src/objects/pass.cc +++ b/src/objects/pass.cc @@ -1,6 +1,7 @@ #include "../gl.h" //#define AL_LOG_ENABLE_TRACE #include "../log.h" +#include "../context.h" #include "pass.h" @@ -45,6 +46,8 @@ auto Pass::parse(Parser &pr, const json &root, PassStage stage) -> Pass * if (pass->shader == "genericimage4") { pass->shader = "genericimage2"; } + pass->depthtest = root["depthtest"] != "disabled"; + pass->depthwrite = root["depthwrite"] != "disabled"; break; } @@ -130,6 +133,8 @@ auto Pass::load(Engine *engine, PassStage stage, Pass *pass) -> void case MATERIAL_ONLY_PASS: case MATERIAL_PASS: pass->shader = this->shader; + pass->depthtest = this->depthtest; + pass->depthwrite = this->depthwrite; break; } } @@ -163,6 +168,11 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) this->model = pass->model; this->combine = pass->combine; + this->depth = pass->depthtest; + if (pass->depthtest || pass->depthwrite) + { + warn("depth test support incomplete"); + } this->shader = get_shader(pass->shader); @@ -213,6 +223,10 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) for (Uniform *uniform : this->shader->uniforms) { + if (uniform->uname == "g_Color4") + { + uniform->value = &this->object->color4; + } for (UniformOverride *uniform_override : pass->uniforms) { if (uniform->name.empty()) continue; @@ -334,6 +348,8 @@ auto RenderPass::draw(Engine *engine) -> void if (!this->target) this->object->swap_buffers(); + if (this->depth) Render::depth_test(true); + if (this->combine) Render::blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); else Render::blend_func(GL_ONE, GL_ZERO); @@ -344,6 +360,8 @@ auto RenderPass::draw(Engine *engine) -> void this->render_object->draw(); + if (this->depth) Render::depth_test(false); + #ifdef FRAME_STEP adjusted_target->buffer->blit(0, context()->width(), context()->height()); context()->swap_buffers(); diff --git a/src/objects/pass.h b/src/objects/pass.h index fdec680..6d91a03 100644 --- a/src/objects/pass.h +++ b/src/objects/pass.h @@ -50,6 +50,9 @@ class Pass Object *object; Effect *effect; + bool depthtest; + bool depthwrite; + std::string shader; std::array<std::string, MAX_TEXTURES> binds = {}; @@ -77,6 +80,7 @@ class RenderPass bool model; bool combine; + bool depth; Shader *shader = nullptr; |