Browse Source

improving TexturesInspector and PostProcess

[email protected] 8 years ago
parent
commit
d9ba6a270e

+ 2 - 1
oxygine/src/oxygine/MaterialCache.cpp

@@ -51,7 +51,8 @@ namespace oxygine
         //std::pair<materials::iterator, materials::iterator> it = _materials.begin();
         //std::pair<materials::iterator, materials::iterator> it = _materials.begin();
 
 
         materials fresh;
         materials fresh;
-        for (auto it = _materials.begin(); it != _materials.end(); it++) {
+        for (auto it = _materials.begin(); it != _materials.end(); it++)
+        {
             if (it->second->_ref_counter > 1)
             if (it->second->_ref_counter > 1)
             {
             {
                 fresh.insert(std::make_pair(it->second->_hash, it->second));
                 fresh.insert(std::make_pair(it->second->_hash, it->second));

+ 16 - 3
oxygine/src/oxygine/PostProcess.cpp

@@ -375,14 +375,27 @@ namespace oxygine
         if (_options._flags & PostProcessOptions::flag_screen)
         if (_options._flags & PostProcessOptions::flag_screen)
             return _screen;
             return _screen;
 
 
-        Rect screen;
-
         Rect display(Point(0, 0), core::getDisplaySize());
         Rect display(Point(0, 0), core::getDisplaySize());
 
 
         if (_options._flags & PostProcessOptions::flag_fullscreen)
         if (_options._flags & PostProcessOptions::flag_fullscreen)
             return display;
             return display;
 
 
-        screen = actor.computeBounds(actor.computeGlobalTransform()).cast<Rect>();
+        RectF bounds = RectF::invalidated();
+        AffineTransform transform = actor.computeGlobalTransform();
+        if (_options._flags & PostProcessOptions::flag_fixedBounds)
+        {
+            const RectF& fb = _options._fixedBounds;
+            bounds.unite(transform.transform(fb.getLeftTop()));
+            bounds.unite(transform.transform(fb.getRightTop()));
+            bounds.unite(transform.transform(fb.getRightBottom()));
+            bounds.unite(transform.transform(fb.getLeftBottom()));
+        }
+        else
+            bounds = actor.computeBounds(transform);
+
+        Rect screen;
+        screen = bounds.cast<Rect>();
+
         screen.size += Point(1, 1);
         screen.size += Point(1, 1);
         screen.expand(_extend, _extend);
         screen.expand(_extend, _extend);
 
 

+ 3 - 0
oxygine/src/oxygine/PostProcess.h

@@ -16,6 +16,7 @@ namespace oxygine
             flag_singleR2T = 1,
             flag_singleR2T = 1,
             flag_fullscreen = 1 << 1,
             flag_fullscreen = 1 << 1,
             flag_screen = 1 << 2,
             flag_screen = 1 << 2,
+            flag_fixedBounds = 1 << 3,
         };
         };
 
 
         PostProcessOptions(int flags = 0) : _flags(flags), _downscale(1), _clearColor(0, 0, 0, 0) {}
         PostProcessOptions(int flags = 0) : _flags(flags), _downscale(1), _clearColor(0, 0, 0, 0) {}
@@ -24,9 +25,11 @@ namespace oxygine
         //loops -(2, 3, 4, ...),  final size: 2^loops
         //loops -(2, 3, 4, ...),  final size: 2^loops
         PostProcessOptions& downscale(int loops = 2) { _downscale = loops; return *this; }
         PostProcessOptions& downscale(int loops = 2) { _downscale = loops; return *this; }
         PostProcessOptions& clear(const Color& c) { _clearColor = c; return *this; }
         PostProcessOptions& clear(const Color& c) { _clearColor = c; return *this; }
+        PostProcessOptions& fixedBounds(const RectF& b) { _fixedBounds = b; _flags |= flag_fixedBounds; return *this; }
 
 
         int _flags;
         int _flags;
         int _downscale;
         int _downscale;
+        RectF _fixedBounds;
         Color _clearColor;
         Color _clearColor;
     };
     };
 
 

+ 9 - 5
oxygine/src/oxygine/STDMaterial.cpp

@@ -56,15 +56,15 @@ namespace oxygine
 
 
             return;
             return;
         }
         }
-        
+
 
 
         const RectF* parentClippedRect = parentRS.clip;
         const RectF* parentClippedRect = parentRS.clip;
         RectF clippedRect = *parentClippedRect;
         RectF clippedRect = *parentClippedRect;
         rs.clip = &clippedRect;
         rs.clip = &clippedRect;
 
 
         Rect scissorRect(0, 0, 0, 0);
         Rect scissorRect(0, 0, 0, 0);
-        
-        
+
+
         bool scissorEnabled = driver->getScissorRect(scissorRect);
         bool scissorEnabled = driver->getScissorRect(scissorRect);
 
 
         bool vis = true;
         bool vis = true;
@@ -111,10 +111,14 @@ namespace oxygine
     void STDMaterial::render(MaskedSprite* sprite, const RenderState& parentRS)
     void STDMaterial::render(MaskedSprite* sprite, const RenderState& parentRS)
     {
     {
         spSprite maskSprite = sprite->getMask();
         spSprite maskSprite = sprite->getMask();
+        if (!maskSprite)
+        {
+            sprite->Sprite::render(parentRS);
+            return;
+        }
 
 
         const Diffuse& df = maskSprite->getAnimFrame().getDiffuse();
         const Diffuse& df = maskSprite->getAnimFrame().getDiffuse();
-
-        if (!maskSprite || !df.base)
+        if (!df.base)
         {
         {
             sprite->Sprite::render(parentRS);
             sprite->Sprite::render(parentRS);
             return;
             return;

+ 3 - 3
oxygine/src/oxygine/STDRenderer.cpp

@@ -103,7 +103,7 @@ namespace oxygine
 
 
     }
     }
 
 
-    void RenderStateCache::changeDriver(IVideoDriver *d)        
+    void RenderStateCache::changeDriver(IVideoDriver* d)
     {
     {
         _driver = d;
         _driver = d;
     }
     }
@@ -592,8 +592,8 @@ namespace oxygine
             return;
             return;
 
 
         _driver->draw(IVideoDriver::PT_TRIANGLES, _vdecl,
         _driver->draw(IVideoDriver::PT_TRIANGLES, _vdecl,
-                                     &_verticesData.front(), (unsigned int)_verticesData.size(),
-                                     &STDRenderer::indices16.front(), (unsigned int)indices);
+                      &_verticesData.front(), (unsigned int)_verticesData.size(),
+                      &STDRenderer::indices16.front(), (unsigned int)indices);
 
 
         _verticesData.clear();
         _verticesData.clear();
     }
     }

+ 2 - 2
oxygine/src/oxygine/STDRenderer.h

@@ -9,7 +9,7 @@ namespace oxygine
     {
     {
     public:
     public:
         RenderStateCache(IVideoDriver* d);
         RenderStateCache(IVideoDriver* d);
-        
+
 
 
 
 
         const spNativeTexture& getTexture(int sampler) { return _textures[sampler]; }
         const spNativeTexture& getTexture(int sampler) { return _textures[sampler]; }
@@ -21,7 +21,7 @@ namespace oxygine
         void reset();
         void reset();
         void resetTextures();
         void resetTextures();
 
 
-        void changeDriver(IVideoDriver *d);//used for DebugActor
+        void changeDriver(IVideoDriver* d);//used for DebugActor
 
 
     protected:
     protected:
         enum { MAX_TEXTURES = 8 };
         enum { MAX_TEXTURES = 8 };

+ 1 - 5
oxygine/src/oxygine/actor/Actor.cpp

@@ -168,11 +168,7 @@ namespace oxygine
 
 
     RectF Actor::computeBounds(const Transform& transform) const
     RectF Actor::computeBounds(const Transform& transform) const
     {
     {
-        RectF bounds(
-            std::numeric_limits<float>::max() / 2,
-            std::numeric_limits<float>::max() / 2,
-            -std::numeric_limits<float>::max(),
-            -std::numeric_limits<float>::max());
+        RectF bounds = RectF::invalidated();
 
 
         calcBounds2(bounds, transform);
         calcBounds2(bounds, transform);
 
 

File diff suppressed because it is too large
+ 0 - 0
oxygine/src/oxygine/core/system_data.cpp


+ 28 - 6
oxygine/src/oxygine/dev_tools/TexturesInspector.cpp

@@ -15,26 +15,48 @@ namespace oxygine
     Vector2 fitSize(const Vector2& destSize, const Vector2& src);
     Vector2 fitSize(const Vector2& destSize, const Vector2& src);
     const Vector2 itemSize(256.0f, 256.0f);
     const Vector2 itemSize(256.0f, 256.0f);
 
 
-    class TextureLine: public Box9Sprite
+    class TextureLine: public Sprite
     {
     {
     public:
     public:
         TextureLine(spNativeTexture t)
         TextureLine(spNativeTexture t)
         {
         {
-            setVerticalMode(Box9Sprite::TILING_FULL);
-            setHorizontalMode(Box9Sprite::TILING_FULL);
-            Sprite::setResAnim(DebugActor::resSystem->getResAnim("checker"));
+            //setVerticalMode(Box9Sprite::TILING_FULL);
+            //setHorizontalMode(Box9Sprite::TILING_FULL);
+            //setResAnim(DebugActor::resSystem->getResAnim("checker"));
 
 
             AnimationFrame f;
             AnimationFrame f;
             Vector2 s = fitSize(itemSize, Vector2((float)t->getWidth(), (float)t->getHeight()));
             Vector2 s = fitSize(itemSize, Vector2((float)t->getWidth(), (float)t->getHeight()));
+            //setSize(s);
+
+
+            AnimationFrame fr = DebugActor::resSystem->getResAnim("checker")->getFrame(0);
+            Vector2 uv = s;
+            RectF srcRect = fr.getSrcRect();
+            uv.x = std::min(uv.x, fr.getDestRect().getWidth());
+            uv.y = std::min(uv.y, fr.getDestRect().getHeight());
+
+            const Diffuse& dfx = fr.getDiffuse();
+            srcRect.size.x = uv.x / (float)dfx.base->getWidth();
+            srcRect.size.y = uv.y / (float)dfx.base->getHeight();
+
+            RectF destRect = fr.getDestRect();
+            destRect.size = s;
+
+            AnimationFrame cfr;
+            cfr.init(0, dfx, srcRect, destRect, s);
+
+            setAnimFrame(cfr);
+
 
 
-            setSize(s);
 
 
             Diffuse df;
             Diffuse df;
             df.base = t;
             df.base = t;
+            df.flags = 1;
+
 
 
             f.init(0, df, RectF(0, 0, 1.0f, 1.0f), RectF(0, 0, s.x, s.y), s);
             f.init(0, df, RectF(0, 0, 1.0f, 1.0f), RectF(0, 0, s.x, s.y), s);
             spSprite image = initActor(new Sprite,
             spSprite image = initActor(new Sprite,
-                                       arg_blend = blend_disabled,
+                                       arg_blend = blend_premultiplied_alpha,
                                        arg_resAnim = f);
                                        arg_resAnim = f);
             addChild(image);
             addChild(image);
 
 

+ 4 - 4
oxygine/src/oxygine/dev_tools/TreeInspectorPreview.cpp

@@ -67,8 +67,8 @@ namespace oxygine
         MaterialX::null->apply();
         MaterialX::null->apply();
         rsCache().reset();
         rsCache().reset();
         rsCache().changeDriver(&cache);
         rsCache().changeDriver(&cache);
-        
-        
+
+
 
 
 
 
         STDRenderer* original = STDRenderer::getCurrent();
         STDRenderer* original = STDRenderer::getCurrent();
@@ -156,7 +156,7 @@ namespace oxygine
     void TreeInspectorPreview::doRender(RenderState const& parentRenderState)
     void TreeInspectorPreview::doRender(RenderState const& parentRenderState)
     {
     {
         MaterialX::null->apply();
         MaterialX::null->apply();
-        rsCache().reset();        
+        rsCache().reset();
         Sprite::doRender(parentRenderState);
         Sprite::doRender(parentRenderState);
         MaterialX::null->apply();
         MaterialX::null->apply();
         _videoCache.render(parentRenderState.transform);
         _videoCache.render(parentRenderState.transform);
@@ -344,7 +344,7 @@ namespace oxygine
     {
     {
         current().vdecl = decl;
         current().vdecl = decl;
         current().pt = pt;
         current().pt = pt;
-        current().numVertices = verticesDataSize/decl->size;
+        current().numVertices = verticesDataSize / decl->size;
         current().vertices.assign((const char*)verticesData, (const char*)verticesData + verticesDataSize);
         current().vertices.assign((const char*)verticesData, (const char*)verticesData + verticesDataSize);
         nextBatch();
         nextBatch();
     }
     }

Some files were not shown because too many files changed in this diff