From 619c07853f759d21df629722967035903db50eb9 Mon Sep 17 00:00:00 2001 From: themancalledjakob Date: Sun, 18 Jun 2023 17:34:34 +0200 Subject: [PATCH] profiler & misc cleanup --- src/MsdfAtlasLayerCombo.cpp | 2 + src/MsdfLayer.cpp | 96 ++++++++++++++++++++----------------- src/Utils.h | 6 +-- 3 files changed, 55 insertions(+), 49 deletions(-) diff --git a/src/MsdfAtlasLayerCombo.cpp b/src/MsdfAtlasLayerCombo.cpp index c7619b5..4c9da49 100644 --- a/src/MsdfAtlasLayerCombo.cpp +++ b/src/MsdfAtlasLayerCombo.cpp @@ -5,6 +5,7 @@ #include "of3dGraphics.h" #include "ofFileUtils.h" #include "ofGraphics.h" +#include "ofxProfiler.h" #include #include @@ -139,6 +140,7 @@ bool MsdfAtlasLayerCombo::hasChildren(){ // unique void MsdfAtlasLayerCombo::draw(){ + OFX_PROFILER_FUNCTION() int elements = 0; for(const auto & layer : layers){ elements += layer->nElements; diff --git a/src/MsdfLayer.cpp b/src/MsdfLayer.cpp index 7a67dc5..b034d3e 100644 --- a/src/MsdfLayer.cpp +++ b/src/MsdfLayer.cpp @@ -5,6 +5,7 @@ #include "ofGraphics.h" #include "ofGraphicsConstants.h" #include "ofUtils.h" +#include "ofxProfiler.h" namespace ofxVariableLab { @@ -318,6 +319,7 @@ void MsdfLayer::collectCharacter(const char character, glm::vec4 color, ofxVariableLab::FontVariation fontVariation){ + OFX_PROFILER_FUNCTION() const ofImage & atlasImage = atlas->getAtlasImage(); ofNode n = node; n.setScale(n.getScale() * scaleFactor); @@ -349,15 +351,15 @@ void MsdfLayer::collectCharacter(const char character, // FIXME: make sure this does not happen ofLogError("MsdfLayer::draw") << "y smaller 0, this is not good" << endl; } - double pl_a, pb_a, pr_a, pt_a; - double pl_b, pb_b, pr_b, pt_b; - gg_a.getQuadPlaneBounds(pl_a, pb_a, pr_a, pt_a); - gg_b.getQuadPlaneBounds(pl_b, pb_b, pr_b, pt_b); + //double pl_a, pb_a, pr_a, pt_a; + //double pl_b, pb_b, pr_b, pt_b; + //gg_a.getQuadPlaneBounds(pl_a, pb_a, pr_a, pt_a); + //gg_b.getQuadPlaneBounds(pl_b, pb_b, pr_b, pt_b); float w = glm::mix(float(w_a), float(w_b), mix); float h = glm::mix(float(h_a), float(h_b), mix); - float pl = glm::mix(float(pl_a), float(pl_b), mix); - float pt = glm::mix(float(pt_a), float(pt_b), mix); + //float pl = glm::mix(float(pl_a), float(pl_b), mix); + //float pt = glm::mix(float(pt_a), float(pt_b), mix); //float magic = atlas->settings.scale; //getVFlip(settings.vFlipBehaviour, @@ -369,15 +371,6 @@ void MsdfLayer::collectCharacter(const char character, //n.move(pl * magic, -1 * pt * magic, 0); //} - glm::vec2 translation_a = glm::vec2(float(x_a) / float(atlas_w), - float(y_a) / float(atlas_h)); - glm::vec2 scale_a = glm::vec2(float(w_a) / float(atlas_w), - float(h_a) / float(atlas_h)); - glm::vec2 translation_b = glm::vec2(float(x_b) / float(atlas_w), - float(y_b) / float(atlas_h)); - glm::vec2 scale_b = glm::vec2(float(w_b) / float(atlas_w), - float(h_b) / float(atlas_h)); - glm::vec4 p0 = n.getGlobalTransformMatrix() * glm::vec4(0, 0, 0, 1); glm::vec4 p1 = n.getGlobalTransformMatrix() * glm::vec4(0, h, 0, 1); glm::vec4 p2 = n.getGlobalTransformMatrix() * glm::vec4(w, h, 0, 1); @@ -387,6 +380,16 @@ void MsdfLayer::collectCharacter(const char character, || isInside(camera, p1) || isInside(camera, p2) || isInside(camera, p3)){ + OFX_PROFILER_SCOPE("prepare vertices / indices"); + + glm::vec2 translation_a = glm::vec2(float(x_a) / float(atlas_w), + float(y_a) / float(atlas_h)); + glm::vec2 scale_a = glm::vec2(float(w_a) / float(atlas_w), + float(h_a) / float(atlas_h)); + glm::vec2 translation_b = glm::vec2(float(x_b) / float(atlas_w), + float(y_b) / float(atlas_h)); + glm::vec2 scale_b = glm::vec2(float(w_b) / float(atlas_w), + float(h_b) / float(atlas_h)); glm::vec2 uv0_a = translation_a; glm::vec2 uv0_b = translation_b; @@ -396,36 +399,39 @@ void MsdfLayer::collectCharacter(const char character, glm::vec2 uv2_b = scale_b + translation_b; glm::vec2 uv3_a = glm::vec2(scale_a.x, 0) + translation_a; glm::vec2 uv3_b = glm::vec2(scale_b.x, 0) + translation_b; - int32_t base = static_cast (vertices.size()); - vertices.push_back(BufferVertex{ - {p0.x, p0.y, p0.z, p0.w}, - {uv0_a.x, uv0_a.y}, - {uv0_b.x, uv0_b.y}, - {color.r, color.g, color.b, color.a}, - mix - }); - vertices.push_back(BufferVertex{ - {p1.x, p1.y, p1.z, p1.w}, - {uv1_a.x, uv1_a.y}, - {uv1_b.x, uv1_b.y}, - {color.r, color.g, color.b, color.a}, - mix - }); - vertices.push_back(BufferVertex{ - {p2.x, p2.y, p2.z, p2.w}, - {uv2_a.x, uv2_a.y}, - {uv2_b.x, uv2_b.y}, - {color.r, color.g, color.b, color.a}, - mix - }); - vertices.push_back(BufferVertex{ - {p3.x, p3.y, p3.z, p3.w}, - {uv3_a.x, uv3_a.y}, - {uv3_b.x, uv3_b.y}, - {color.r, color.g, color.b, color.a}, - mix - }); - indices.insert(indices.end(), {base, base + 1, base + 2, base + 2, base + 3, base}); + for(int i = 0; i < 1; i++){ + float distance = 200; + int32_t base = static_cast (vertices.size()); + vertices.push_back(BufferVertex{ + {p0.x, p0.y + i * distance, p0.z, p0.w}, + {uv0_a.x, uv0_a.y}, + {uv0_b.x, uv0_b.y}, + {color.r, color.g, color.b, color.a}, + mix + }); + vertices.push_back(BufferVertex{ + {p1.x, p1.y + i * distance, p1.z, p1.w}, + {uv1_a.x, uv1_a.y}, + {uv1_b.x, uv1_b.y}, + {color.r, color.g, color.b, color.a}, + mix + }); + vertices.push_back(BufferVertex{ + {p2.x, p2.y + i * distance, p2.z, p2.w}, + {uv2_a.x, uv2_a.y}, + {uv2_b.x, uv2_b.y}, + {color.r, color.g, color.b, color.a}, + mix + }); + vertices.push_back(BufferVertex{ + {p3.x, p3.y + i * distance, p3.z, p3.w}, + {uv3_a.x, uv3_a.y}, + {uv3_b.x, uv3_b.y}, + {color.r, color.g, color.b, color.a}, + mix + }); + indices.insert(indices.end(), {base, base + 1, base + 2, base + 2, base + 3, base}); + } nElements++; } } diff --git a/src/Utils.h b/src/Utils.h index 3ee01ad..432089c 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -8,6 +8,7 @@ #include "json.hpp" #include "ofAppRunner.h" #include "of3dGraphics.h" +#include "ofxProfiler.h" #include "ofCamera.h" #include "ofUtils.h" #include @@ -168,12 +169,9 @@ static bool isInside(float px, float py, float x, float y, float w, float h){ } static bool isInside(const ofCamera & camera, const glm::vec4 & position){ + OFX_PROFILER_FUNCTION() const auto & viewport = ofGetCurrentRenderer()->getCurrentViewport(); glm::vec3 screenPosition = camera.worldToScreen(position); - glm::vec3 cameraPosition = camera.worldToCamera(position); - //glm::mat4 clipSpaceToWorld = camera.getGlobalTransformMatrix() * glm::inverse(camera.getProjectionMatrix(viewport)); - //glm::mat4 worldToClipSpace = camera.getProjectionMatrix(viewport); - //glm::vec4 worldSpacePosition = position * worldToClipSpace; if(screenPosition.x >= 0.0f && screenPosition.x <= ofGetWidth() && screenPosition.y >= 0.0f && screenPosition.y <= ofGetHeight() && screenPosition.z <= 1.0f){