From 43d168fb2bea3b45da275f34d9d59c62bfdb89ae Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Fri, 11 Sep 2020 17:08:36 -0400 Subject: wip --- src/objects/c | 1 + src/objects/effect.c | 1 + src/objects/material.c | 3 ++- src/objects/object.c | 8 +++----- src/objects/pass.c | 39 +++++++++++++++++++++++++++++++-------- src/objects/scene.c | 7 ++----- 6 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 src/objects/c (limited to 'src/objects') 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 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 #include +#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); -- cgit v1.2.3-101-g0448