summaryrefslogtreecommitdiff
path: root/src/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/objects')
-rw-r--r--src/objects/effect.cc2
-rw-r--r--src/objects/object.cc2
-rw-r--r--src/objects/pass.cc18
-rw-r--r--src/objects/pass.h4
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;