summaryrefslogtreecommitdiff
path: root/src/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/objects')
-rw-r--r--src/objects/c1
-rw-r--r--src/objects/effect.c1
-rw-r--r--src/objects/material.c3
-rw-r--r--src/objects/object.c8
-rw-r--r--src/objects/pass.c39
-rw-r--r--src/objects/scene.c7
6 files changed, 40 insertions, 19 deletions
diff --git a/src/objects/c b/src/objects/c
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/objects/c
@@ -0,0 +1 @@
+
diff --git a/src/objects/effect.c b/src/objects/effect.c
index f90fad8..1bc0726 100644
--- a/src/objects/effect.c
+++ b/src/objects/effect.c
@@ -10,6 +10,7 @@
#include <jansson.h>
void mri_effect_parse(mri_effect *effect, json_t *root) {
+ mvec_init(effect->passes);
mvec_init(effect->passes0);
mvec_init(effect->passes1);
diff --git a/src/objects/material.c b/src/objects/material.c
index d49b0ea..c340463 100644
--- a/src/objects/material.c
+++ b/src/objects/material.c
@@ -11,6 +11,7 @@
void mri_material_parse(mri_material *material, json_t *value) {
mvec_init(material->passes);
+ mvec_init(material->passes0);
if (json_is_string(value)) {
mri_asset *material_asset = mri_asset_manager_get(mstr_c(json_string_value(value)), NONE);
@@ -67,7 +68,7 @@ void mri_material_load(mri_engine *engine, mri_material *material, mri_material_
void mri_material_draw(mri_engine *engine, mri_material *material) {
mri_render_pass *pass;
mvec_loop_ptr(material->passes, pass, i) {
- log_debug("background (%.*s): %i", pass->object->name->len, pass->object->name->ptr, i);
+ //log_debug("background (%.*s): %i", pass->object->name->len, pass->object->name->ptr, i);
mri_render_pass_draw(engine, pass);
}
}
diff --git a/src/objects/object.c b/src/objects/object.c
index b3b57c2..d525d3a 100644
--- a/src/objects/object.c
+++ b/src/objects/object.c
@@ -54,10 +54,7 @@ void mri_object_parse(mri_object *object, json_t *root) {
json_t *effect;
json_t *effects = json_object_get(root, "effects");
json_array(effect, effects) {
- bool visible;
- json_get_bool(&visible, effect, "visible");
- if (visible)
- mri_effect_parse(mvec_next(object->effects), effect);
+ mri_effect_parse(mvec_next(object->effects), effect);
}
}
@@ -177,7 +174,8 @@ void mri_object_draw(mri_engine *engine, mri_object *object) {
glDrawArrays(GL_TRIANGLES, 0, 6);
- log_debug("combine (%.*s)", object->name->len, object->name->ptr);
+
+ //log_debug("combine (%.*s)", object->name->len, object->name->ptr);
}
void mri_object_unload(mri_object *object) {
diff --git a/src/objects/pass.c b/src/objects/pass.c
index f0cac99..e5604e6 100644
--- a/src/objects/pass.c
+++ b/src/objects/pass.c
@@ -1,9 +1,12 @@
+#include <jansson.h>
#include <unistd.h>
+#include "moro_str.h"
#include "pass.h"
#include "material.h"
#include "model.h"
#include "object.h"
+#include "scene.h"
#include "../json.h"
#include "../texture.h"
@@ -138,7 +141,7 @@ void mri_pass_load(mri_engine *engine, mri_pass *pass, mri_pass_stage stage, mri
if (pass->target) {
rpass->target = mri_engine_get_or_new_framebuffer(engine,
pass->target, engine->width, engine->height, 2.f,
- (vec4){0.f, 0.f, 0.f, 0.2f});
+ (vec4){0.f, 0.f, 0.f, 0.4f});
} else {
// If no target was specified pick the next buffer in the
// alternating AB buffers.
@@ -213,7 +216,7 @@ void mri_pass_load(mri_engine *engine, mri_pass *pass, mri_pass_stage stage, mri
int index = shader_uniform->uname->ptr[9] - '0';
if (rpass->textures[index]) {
memcpy(shader_uniform->value,
- &rpass->textures[index]->texture_resolution, sizeof(vec4));
+ rpass->textures[index]->texture_resolution, sizeof(vec4));
}
}
}
@@ -224,15 +227,30 @@ void mri_pass_load(mri_engine *engine, mri_pass *pass, mri_pass_stage stage, mri
if (!shader_uniform->name) continue;
if (mstr_eq(pass_uniform->name, shader_uniform->name)) {
memcpy(shader_uniform->value, pass_uniform->value, sizeof(vec4));
+ break;
}
}
- // Handle combo value overrides.
mri_combo *pass_combo, *shader_combo;
- mvec_loop_ptr(rpass->combos, pass_combo, i)
mvec_loop_ptr(rpass->shader.combos, shader_combo, s) {
- if (mstr_eq(pass_combo->name, shader_combo->name)) {
- shader_combo->value = pass_combo->value;
+ if (mstr_eq(shader_combo->name, mstr_c("AUDIOPROCESSING"))) {
+ shader_combo->value = 0;
+ break;
+ }
+ }
+
+ // Handle combo value overrides.
+ mvec_loop_ptr(rpass->combos, pass_combo, i) {
+ bool override = false;
+ mvec_loop_ptr(rpass->shader.combos, shader_combo, s) {
+ if (mstr_eq(pass_combo->name, shader_combo->name)) {
+ shader_combo->value = pass_combo->value;
+ override = true;
+ break;
+ }
+ }
+ if (!override) {
+ mvec_push(rpass->shader.combos, *pass_combo);
}
}
@@ -245,7 +263,7 @@ void mri_pass_load(mri_engine *engine, mri_pass *pass, mri_pass_stage stage, mri
}
void mri_render_pass_draw(mri_engine *engine, mri_render_pass *pass) {
- mri_framebuffer_bind(pass->target, pass->combine);
+ mri_framebuffer_bind(pass->target, false);
mri_shader_bind(engine, &pass->shader, pass->model);
bind_gl_object(pass->gl_object);
@@ -257,6 +275,11 @@ void mri_render_pass_draw(mri_engine *engine, mri_render_pass *pass) {
glViewport(0, 0, pass->target->width, pass->target->height);
glDrawArrays(GL_TRIANGLES, 0, 6);
+ for (int i = 0; i < pass->shader.texture_count; i++) {
+ glActiveTexture(GL_TEXTURE0 + i);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ }
+
if (0) {
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBindFramebuffer(GL_READ_FRAMEBUFFER, pass->target->buffer.id);
@@ -268,7 +291,7 @@ void mri_render_pass_draw(mri_engine *engine, mri_render_pass *pass) {
engine->context->swap_buffers(engine->context);
- usleep(1000000);
+ usleep(5000000);
}
}
diff --git a/src/objects/scene.c b/src/objects/scene.c
index db6656f..e320acf 100644
--- a/src/objects/scene.c
+++ b/src/objects/scene.c
@@ -30,7 +30,7 @@ void mri_scene_parse(mri_scene *scene) {
json_get_bool(&scene->clear_enabled, general, "clearenabled");
json_get_vec3((vec3 *)&scene->clear_color, general, "clearcolor");
- scene->clear_color[3] = 0.f;
+ scene->clear_color[3] = 1.f;
json_get_vec3(&scene->ambient_color, general, "ambientcolor");
json_get_vec3(&scene->skylight_color, general, "skylightcolor");
@@ -43,10 +43,7 @@ void mri_scene_parse(mri_scene *scene) {
json_t *object;
json_t *objects = json_object_get(root, "objects");
json_array(object, objects) {
- bool visible;
- json_get_bool(&visible, object, "visible");
- if (visible && !(json_is_null(json_object_get(object, "image"))))
- mri_object_parse(mvec_next(scene->objects), object);
+ mri_object_parse(mvec_next(scene->objects), object);
}
json_decref(root);