summaryrefslogtreecommitdiff
path: root/src/objects
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2020-10-02 04:20:40 -0400
committerAndrew Opalach <andrew@akon.city> 2020-10-02 04:20:40 -0400
commit1aebe9d027ccd5cffa2282a2cf0caf466ccd82e8 (patch)
tree7b3ce7358ed3501ec60cd26d654eb1f4f5bff191 /src/objects
parent420e3acf230fe57a3c9722bad45553214f9ff7ed (diff)
downloadmauri-1aebe9d027ccd5cffa2282a2cf0caf466ccd82e8.tar.gz
mauri-1aebe9d027ccd5cffa2282a2cf0caf466ccd82e8.tar.bz2
mauri-1aebe9d027ccd5cffa2282a2cf0caf466ccd82e8.zip
add cursor position support and fix various issues that came with it
Diffstat (limited to 'src/objects')
-rw-r--r--src/objects/effect.cc7
-rw-r--r--src/objects/effect.h2
-rw-r--r--src/objects/material.h1
-rw-r--r--src/objects/object.c1
-rw-r--r--src/objects/object.cc51
-rw-r--r--src/objects/pass.cc22
-rw-r--r--src/objects/pass.h4
-rw-r--r--src/objects/scene.cc2
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);
}