diff options
Diffstat (limited to 'src/objects')
| -rw-r--r-- | src/objects/effect.cc | 7 | ||||
| -rw-r--r-- | src/objects/effect.h | 2 | ||||
| -rw-r--r-- | src/objects/material.h | 1 | ||||
| -rw-r--r-- | src/objects/object.c | 1 | ||||
| -rw-r--r-- | src/objects/object.cc | 51 | ||||
| -rw-r--r-- | src/objects/pass.cc | 22 | ||||
| -rw-r--r-- | src/objects/pass.h | 4 | ||||
| -rw-r--r-- | src/objects/scene.cc | 2 |
8 files changed, 42 insertions, 48 deletions
diff --git a/src/objects/effect.cc b/src/objects/effect.cc index a56bd75..cbe0b7f 100644 --- a/src/objects/effect.cc +++ b/src/objects/effect.cc @@ -49,17 +49,14 @@ Effect::Effect(Json::Value root) void Effect::load(Engine *engine, Object *object, bool last_effect) { - if (!visible) - return; - buffer_id = fmt::format("{}_{}", id, object->id); for (auto &fbo : fbos) { - engine->new_framebuffer(fbo.name + buffer_id, object->size[0], object->size[1], fbo.scale); + engine->create_framebuffer(fbo.name + buffer_id, object->size[0], object->size[1], fbo.scale); } - for (int i = 0; i < passes0.size(); i++) + for (u32 i = 0; i < passes0.size(); i++) { Pass *pass = new Pass(); diff --git a/src/objects/effect.h b/src/objects/effect.h index c3eddba..010634c 100644 --- a/src/objects/effect.h +++ b/src/objects/effect.h @@ -14,7 +14,7 @@ class RenderPass; struct EffectBuffer { std::string name; - float scale; + f32 scale; }; class Effect diff --git a/src/objects/material.h b/src/objects/material.h index 23aa06b..24c2ea0 100644 --- a/src/objects/material.h +++ b/src/objects/material.h @@ -24,6 +24,7 @@ class Material void load(Engine *engine, Object *object, MaterialType type, Pass *pass, bool no_effects); + private: std::vector<Pass *> passes0; }; diff --git a/src/objects/object.c b/src/objects/object.c deleted file mode 100644 index 69c5411..0000000 --- a/src/objects/object.c +++ /dev/null @@ -1 +0,0 @@ -//#include "../engine.h" diff --git a/src/objects/object.cc b/src/objects/object.cc index 71a8b28..0a57adf 100644 --- a/src/objects/object.cc +++ b/src/objects/object.cc @@ -29,7 +29,7 @@ Object::Object(Json::Value root) sscanf_vec3(json_user_value(root.get("angles", "")).asCString(), angles); sscanf_vec3(json_user_value(root.get("colors", "")).asCString(), color); - sscanf_vec2(json_user_value(root.get("size", "")).asCString(), size); + sscanf_vec2(json_user_value(root.get("size", "0 0")).asCString(), size); sscanf_vec3(json_user_value(root.get("scale", "")).asCString(), scale); sscanf_vec3(json_user_value(root.get("origin", "")).asCString(), origin); @@ -58,14 +58,15 @@ void Object::get_model(f32 width, f32 height, bool flip) model = mat4x4(1.f); model = glm::translate(model, (vec3){-width, -height, 0.f}); + model = glm::translate(model, origin * 2.f); + model = glm::scale(model, scale); + model = glm::rotate(model, angles[0], (vec3){1.f, 0.f, 0.f}); model = glm::rotate(model, angles[1], (vec3){0.f, 1.f, 0.f}); model = glm::rotate(model, angles[2], (vec3){0.f, 0.f, 1.f}); - model = glm::scale(model, scale); - mat4x4 _ortho = glm::ortho(-width, width, height, -height, 0.f, 1.f); if (flip) @@ -78,17 +79,35 @@ void Object::get_model(f32 width, f32 height, bool flip) void Object::load(Engine *engine) { - if (loaded || !visible) + if (loaded) return; - f32 width = size[0]; - f32 height = size[1]; + if (image != nullptr) + { + if (image->passthrough) + passthrough = true; + + if (image->fullscreen || passthrough) + { + if (size[0] == 0 && size[1] == 0) + { + size[0] = engine->view.width; + size[1] = engine->view.height; + origin[0] = size[0] / 2.f; + origin[1] = size[1] / 2.f; + } + fullscreen = true; + } + } + + auto width = size[0]; + auto height = size[1]; abuffer = fmt::format("_rt_imageLayerComposite_{}_a", this->id); bbuffer = fmt::format("_rt_imageLayerComposite_{}_b", this->id); - engine->new_framebuffer(abuffer, width, height, 1.f); - engine->new_framebuffer(bbuffer, width, height, 1.f); + engine->create_framebuffer(abuffer, width, height, 1.f); + engine->create_framebuffer(bbuffer, width, height, 1.f); get_model(engine->view.width, engine->view.height, effects.size() == 0); @@ -98,23 +117,9 @@ void Object::load(Engine *engine) gl_uv_object = new RenderObject(UV_SCALE, width, height); if (image != nullptr) - { image->load(engine, this, effects.size() == 0); - if (image->fullscreen) - { - fullscreen = true; - size[0] = engine->view.width; - size[1] = engine->view.height; - origin[0] = size[0] / 2.f; - origin[1] = size[1] / 2.f; - } - - if (image->passthrough) - passthrough = true; - } - - for (int i = 0; i < effects.size(); i++) + for (u32 i = 0; i < effects.size(); i++) { effects[i]->load(engine, this, i == (effects.size() - 1)); } diff --git a/src/objects/pass.cc b/src/objects/pass.cc index 6334641..f4c237a 100644 --- a/src/objects/pass.cc +++ b/src/objects/pass.cc @@ -2,6 +2,7 @@ #include <glm/fwd.hpp> #include <glm/gtc/type_ptr.hpp> #include <thread> +#include <type_traits> #include "assets.h" #include "engine.h" @@ -32,8 +33,8 @@ Pass::Pass(Json::Value root, PassStage stage) uniform.name = name; - json_number(json_user_value(_uniforms[name]), - glm::value_ptr(uniform.value)); + auto value = json_user_value(_uniforms[name]); + json_number(value, glm::value_ptr(uniform.value)); uniforms.push_back(uniform); } @@ -185,7 +186,7 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) auto asset = asset_manager()->get_file(pass->textures[i], TEXTURE); if (asset->type != ASSET_VOID) - textures[i] = new Texture(asset); + textures[i] = engine->create_texture(asset); else textures[i] = engine->get_framebuffer_texture(pass->textures[i]); } @@ -268,7 +269,7 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) else { robject = engine->default_object; - model = &engine->identity; + model = &engine->default_model; } } } @@ -305,15 +306,12 @@ void RenderPass::draw(Engine *engine) break; } - if (combine) - engine->view.center_scale(engine->context->width, engine->context->height); - else - engine->view.default_viewport(target->buffer->width, target->buffer->height); + engine->view.default_viewport(target->buffer->width, target->buffer->height); glDrawArrays(GL_TRIANGLES, 0, 6); #if 0 - engine->combine_buffer->buffer->blit(context->width, context->height); + target->buffer->blit(0, engine->context->width, engine->context->height); engine->context->swap_buffers(); std::this_thread::sleep_for(std::chrono::seconds(1)); #endif @@ -323,11 +321,5 @@ RenderPass::~RenderPass() { if (shader != nullptr) delete shader; - - for (int i = 0; i < 8; i++) - { - if (textures[i] != nullptr && !textures[i]->wrapped) - delete textures[i]; - } } diff --git a/src/objects/pass.h b/src/objects/pass.h index 563900f..92aa3e5 100644 --- a/src/objects/pass.h +++ b/src/objects/pass.h @@ -56,13 +56,13 @@ class Pass class RenderPass { -public: + public: RenderPass(Engine *engine, Pass *pass); ~RenderPass(); void draw(Engine *engine); -private: + private: Shader *shader; Framebuffer *target; diff --git a/src/objects/scene.cc b/src/objects/scene.cc index 83b7be6..3cab05c 100644 --- a/src/objects/scene.cc +++ b/src/objects/scene.cc @@ -68,7 +68,7 @@ void Scene::load(Engine *engine) for (auto &dep : object->deps) { auto dep_object = get_object_by_id(dep); - if (dep_object) + if (dep_object != nullptr) dep_object->load(engine); } |