summaryrefslogtreecommitdiff
path: root/src/objects
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2022-02-12 16:52:03 -0500
committerAndrew Opalach <andrew@akon.city> 2022-02-12 16:52:03 -0500
commit61794ae259000f1d0e463577d750f9d5ea45ac71 (patch)
tree968faf4d5d6df008ed50bd35ea23dc6320f6aff9 /src/objects
parent96d9a4f8b0b252a185e7e685fbb7efb446699778 (diff)
downloadmauri-61794ae259000f1d0e463577d750f9d5ea45ac71.tar.gz
mauri-61794ae259000f1d0e463577d750f9d5ea45ac71.tar.bz2
mauri-61794ae259000f1d0e463577d750f9d5ea45ac71.zip
Some uncommitted stuff
Diffstat (limited to 'src/objects')
-rw-r--r--src/objects/effect.cc2
-rw-r--r--src/objects/material.cc2
-rw-r--r--src/objects/object.c1
-rw-r--r--src/objects/object.cc4
-rw-r--r--src/objects/object.h3
-rw-r--r--src/objects/pass.cc31
-rw-r--r--src/objects/pass.h3
7 files changed, 29 insertions, 17 deletions
diff --git a/src/objects/effect.cc b/src/objects/effect.cc
index 283d764..8e61964 100644
--- a/src/objects/effect.cc
+++ b/src/objects/effect.cc
@@ -59,6 +59,8 @@ void Effect::load(Engine *engine, Object *object, bool last)
{
Pass pass;
+ pass.intermidiate = false;
+
pass.object = object;
pass.effect = this;
diff --git a/src/objects/material.cc b/src/objects/material.cc
index 8b6f493..aae5940 100644
--- a/src/objects/material.cc
+++ b/src/objects/material.cc
@@ -39,6 +39,8 @@ void Material::load(Engine *engine, Object *object, MaterialType type, Pass *pas
case MATERIAL_MODEL:
Pass _pass;
+ _pass.intermidiate = false;
+
_pass.object = object;
_pass.effect = nullptr;
diff --git a/src/objects/object.c b/src/objects/object.c
deleted file mode 100644
index b498fd4..0000000
--- a/src/objects/object.c
+++ /dev/null
@@ -1 +0,0 @@
-/
diff --git a/src/objects/object.cc b/src/objects/object.cc
index d7d7aaa..bc744d1 100644
--- a/src/objects/object.cc
+++ b/src/objects/object.cc
@@ -253,9 +253,11 @@ Object::~Object()
if (image != nullptr)
delete image;
- delete gl_object;
delete gl_uv_object;
+ delete gl_object;
+ delete gl_object_flipped;
+
for (auto &pass : passes)
{
delete pass;
diff --git a/src/objects/object.h b/src/objects/object.h
index 3250b31..eb8ad5a 100644
--- a/src/objects/object.h
+++ b/src/objects/object.h
@@ -76,9 +76,10 @@ class Object
void update(Engine *engine);
void draw(Engine *engine);
+ vec3 origin;
+
private:
vec3 angles;
- vec3 origin;
vec3 scale;
std::string buffer_a;
diff --git a/src/objects/pass.cc b/src/objects/pass.cc
index f3a3509..e938823 100644
--- a/src/objects/pass.cc
+++ b/src/objects/pass.cc
@@ -30,9 +30,7 @@ Pass::Pass(Parser &p, json &root, PassStage stage)
for (auto &value : _uniforms.items())
{
- uniforms.emplace_back(
- new UniformOverride({vec4(0.f), value.key()})
- );
+ uniforms.emplace_back(new UniformOverride({vec4(0.f), value.key()}));
p.get_value<vec4>(_uniforms, value.key(), &uniforms.back()->value, vec4(0.f));
}
@@ -42,25 +40,30 @@ Pass::Pass(Parser &p, json &root, PassStage stage)
auto _material = root["material"];
if (_material.is_string())
+ {
material = new Material(p, _material);
+ }
auto _command = root["command"];
- if (_command.is_string())
+ if (_command.is_string() && _command == "copy")
{
- if (_command == "copy")
- command = COPY;
+ command = COPY;
}
auto _target = root["target"];
if (_target.is_string())
+ {
target = _target;
+ }
auto _source = root["source"];
if (_source.is_string())
+ {
source = _source;
+ }
binds[0] = "previous";
@@ -97,6 +100,8 @@ Pass::Pass(Parser &p, json &root, PassStage stage)
void Pass::load(Engine *engine, PassStage stage, Pass *pass)
{
+ intermidiate = true;
+
for (int i = 0; i < MAX_TEXTURES; i++)
{
if (textures[i].empty())
@@ -156,11 +161,13 @@ Pass::~Pass()
if (material != nullptr)
delete material;
- // TODO: refcounted?
- //for (auto &uniform : uniforms)
- //{
- // delete uniform;
- //}
+ if (intermidiate)
+ {
+ for (auto &uniform : uniforms)
+ {
+ delete uniform;
+ }
+ }
}
RenderPass::RenderPass(Engine *engine, Pass *pass)
@@ -208,8 +215,6 @@ RenderPass::RenderPass(Engine *engine, Pass *pass)
continue;
}
- texture_types[i] = STATIC;
-
// Check if texture is referencing a framebuffer.
textures[i] = engine->get_framebuffer_texture(pass->textures[i]);
diff --git a/src/objects/pass.h b/src/objects/pass.h
index cf31ca8..c8d8d0e 100644
--- a/src/objects/pass.h
+++ b/src/objects/pass.h
@@ -67,6 +67,7 @@ class Pass
std::array<std::string, MAX_TEXTURES> binds = {""};
bool combine;
+ bool intermidiate;
std::vector<UniformOverride *> uniforms;
std::vector<Combo> combos;
@@ -88,7 +89,7 @@ class RenderPass
Shader *shader = nullptr;
std::array<Texture *, MAX_TEXTURES> textures = {0};
- std::array<TextureType, MAX_TEXTURES> texture_types;
+ std::array<TextureType, MAX_TEXTURES> texture_types = {STATIC};
void draw(Engine *engine);