Browse Source

refactoring

dmuratshin 9 years ago
parent
commit
3cf6008bbd

+ 2 - 5
oxygine/src/STDMaterial.cpp

@@ -118,7 +118,7 @@ namespace oxygine
             MaskedRenderer mr(msk, maskSrc, maskDest, t, rchannel, original->getDriver());
             original->swapVerticesData(mr);
 
-            mr.setViewProjTransform(original->getViewProjection());
+            mr.setViewProj(original->getViewProjection());
             mr.begin();
 
             RenderState rs = parentRS;
@@ -227,15 +227,12 @@ namespace oxygine
     void STDMaterial::apply(Material* prev)
     {
         STDRenderer* cur = STDRenderer::getCurrent();
-        if (!cur)
-            cur = STDRenderer::instance;
         cur->begin();
         cur->setUberShaderProgram(&STDRenderer::uberShader);
     }
 
     void STDMaterial::finish()
     {
-        if (STDRenderer::getCurrent())
-            STDRenderer::getCurrent()->end();
+        STDRenderer::getCurrent()->end();
     }
 }

+ 5 - 5
oxygine/src/STDMaterial.h

@@ -16,12 +16,12 @@ namespace oxygine
         void apply(Material* prev) override;
         void finish() override;
 
-        void render(ClipRectActor*, const RenderState& rs) override;
-        void render(MaskedSprite*, const RenderState& rs) override;
-        void doRender(Sprite*, const RenderState& rs) override;
-        void doRender(TextField*, const RenderState& rs) override;
+        void render(ClipRectActor*,     const RenderState& rs) override;
+        void render(MaskedSprite*,      const RenderState& rs) override;
+        void doRender(Sprite*,          const RenderState& rs) override;
+        void doRender(TextField*,       const RenderState& rs) override;
         void doRender(ColorRectSprite*, const RenderState& rs) override;
-        void doRender(ProgressBar*, const RenderState& rs) override;
+        void doRender(ProgressBar*,     const RenderState& rs) override;
 
 
     protected:

+ 56 - 77
oxygine/src/STDRenderer.cpp

@@ -199,10 +199,9 @@ namespace oxygine
         drawBatch();
     }
 
-    void STDRenderer::cleanup()
+    const oxygine::Matrix& STDRenderer::getViewProjection() const
     {
-        _cleanup();
-        _vertices.clear();
+        return _vp;
     }
 
     void STDRenderer::setShader(ShaderProgram* prog)
@@ -243,7 +242,7 @@ namespace oxygine
         Matrix::orthoLH(proj, (float)width, (float)height, 0, 1);
 
         Matrix vp = view * proj;
-        setViewProjTransform(vp);
+        setViewProj(vp);
     }
 
     IVideoDriver* STDRenderer::getDriver()
@@ -251,27 +250,30 @@ namespace oxygine
         return _driver;
     }
 
-    void STDRenderer::setDriver(IVideoDriver* driver)
+    unsigned int STDRenderer::getShaderFlags() const
     {
-        _driver = driver;
+        return _shaderFlags;
     }
 
     void STDRenderer::setViewProj(const Matrix& viewProj)
     {
         _vp = viewProj;
         if (_drawing)
-        {
             drawBatch();
-        }
-
 
         _driver->setUniform("mat", _vp);
     }
 
+    void STDRenderer::setViewProjTransform(const Matrix& viewProj)
+    {
+        setViewProj(viewProj);
+    }
+
     void STDRenderer::resetSettings()
     {
         _resetSettings();
         _driver->setState(IVideoDriver::STATE_BLEND, 0);
+        _blend = blend_disabled;
         _program = 0;
     }
 
@@ -293,6 +295,7 @@ namespace oxygine
 
     void STDRenderer::end()
     {
+        OX_ASSERT(_drawing);
         drawBatch();
 
         if (_prevRT)
@@ -398,9 +401,7 @@ namespace oxygine
         if (!driver)
             driver = IVideoDriver::instance;
 
-        if (driver)
-            setDriver(driver);
-
+        _driver = driver;
         _vp.identity();
 
         _vdecl = _driver->getVertexDeclaration(vertexPCT2::FORMAT);
@@ -412,23 +413,24 @@ namespace oxygine
 
     void STDRenderer::setBlendMode(blend_mode blend)
     {
-        if (_blend != blend)
-        {
-            drawBatch();
+        if (_blend == blend)
+            return;
 
-            if (blend == 0)
-            {
-                _driver->setState(IVideoDriver::STATE_BLEND, 0);
-            }
-            else
-            {
-                IVideoDriver::BLEND_TYPE src  = static_cast<IVideoDriver::BLEND_TYPE>(blend >> 16);
-                IVideoDriver::BLEND_TYPE dest = static_cast<IVideoDriver::BLEND_TYPE>(blend & 0xFFFF);
-                _driver->setBlendFunc(src, dest);
-                _driver->setState(IVideoDriver::STATE_BLEND, 1);
-            }
-            _blend = blend;
+        drawBatch();
+
+        if (blend == 0)
+        {
+            _driver->setState(IVideoDriver::STATE_BLEND, 0);
         }
+        else
+        {
+            IVideoDriver::BLEND_TYPE src  = static_cast<IVideoDriver::BLEND_TYPE>(blend >> 16);
+            IVideoDriver::BLEND_TYPE dest = static_cast<IVideoDriver::BLEND_TYPE>(blend & 0xFFFF);
+            _driver->setBlendFunc(src, dest);
+            _driver->setState(IVideoDriver::STATE_BLEND, 1);
+        }
+        _blend = blend;
+
     }
 
     template <class T>
@@ -445,11 +447,26 @@ namespace oxygine
     {
         _showTexel2PixelErrors = show;
     }
+
+    void STDRenderer::swapVerticesData(STDRenderer& r)
+    {
+        std::swap(_vertices, r._vertices);
+    }
+
+    void STDRenderer::swapVerticesData(std::vector<unsigned char>& data)
+    {
+        std::swap(data, _vertices);
+    }
 #endif
 
 
     void STDRenderer::setTexture(const spNativeTexture& base_, const spNativeTexture& alpha, bool basePremultiplied)
     {
+        if (base_ == _base && _alpha == alpha)
+            return;
+
+        drawBatch();
+
         _renderTextureHook(base_);
         _renderTextureHook(alpha);
 
@@ -457,31 +474,15 @@ namespace oxygine
         if (base == 0 || base->getHandle() == 0)
             base = white;
 
-        unsigned int shaderFlags = _shaderFlags;
-
         if (basePremultiplied)
-            shaderFlags &= ~UberShaderProgram::ALPHA_PREMULTIPLY;
+            _shaderFlags &= ~UberShaderProgram::ALPHA_PREMULTIPLY;
         else
-            shaderFlags |= UberShaderProgram::ALPHA_PREMULTIPLY;
+            _shaderFlags |= UberShaderProgram::ALPHA_PREMULTIPLY;
 
         if (alpha)
-            shaderFlags |= UberShaderProgram::SEPARATE_ALPHA;
+            _shaderFlags |= UberShaderProgram::SEPARATE_ALPHA;
         else
-            shaderFlags &= ~UberShaderProgram::SEPARATE_ALPHA;
-
-        //##ifdef OX_DEBUG
-#if 0
-        if (_base != base) { OX_ASSERT(_alpha != alpha); }
-        else { OX_ASSERT(_alpha == alpha); }
-#endif //OX_DEBUG
-
-        //no reason to check changed alpha because it is in pair with base
-        if (_base != base || /*_alpha != alpha || */_shaderFlags != shaderFlags)
-        {
-            drawBatch();
-        }
-
-        _shaderFlags = shaderFlags;
+            _shaderFlags &= ~UberShaderProgram::SEPARATE_ALPHA;
 
         _base = base;
         _alpha = alpha;
@@ -489,26 +490,12 @@ namespace oxygine
 
     void STDRenderer::setTexture(const spNativeTexture& base_, bool basePremultiplied)
     {
-        spNativeTexture base = base_;
-        if (base == 0 || base->getHandle() == 0)
-            base = white;
-
-        unsigned int shaderFlags = _shaderFlags;
-
-        if (basePremultiplied)
-            shaderFlags &= ~UberShaderProgram::ALPHA_PREMULTIPLY;
-        else
-            shaderFlags |= UberShaderProgram::ALPHA_PREMULTIPLY;
-
-        shaderFlags &= ~UberShaderProgram::SEPARATE_ALPHA;
-
-        if (_base != base || _shaderFlags != shaderFlags)
-            drawBatch();
-
-        _shaderFlags = shaderFlags;
+        setTexture(base_, 0, basePremultiplied);
+    }
 
-        _base = base;
-        _alpha = 0;
+    void STDRenderer::setTransform(const Transform& tr)
+    {
+        _transform = tr;
     }
 
     void STDRenderer::_begin()
@@ -540,13 +527,6 @@ namespace oxygine
 
     void STDRenderer::_resetSettings()
     {
-        _blend = blend_disabled;
-    }
-
-    void STDRenderer::_cleanup()
-    {
-        _base = 0;
-        _alpha = 0;
     }
 
     void STDRenderer::preDrawBatch()
@@ -595,11 +575,10 @@ namespace oxygine
 
     void STDRenderer::setUberShaderProgram(UberShaderProgram* pr)
     {
-        if (_uberShader != pr)
-        {
-            drawBatch();
-        }
+        if (_uberShader == pr)
+            return;
 
+        drawBatch();
         _uberShader = pr;
     }
 

+ 6 - 12
oxygine/src/STDRenderer.h

@@ -40,15 +40,12 @@ namespace oxygine
         STDRenderer(IVideoDriver* driver = 0);
         virtual ~STDRenderer();
 
-        const Matrix&   getViewProjection() const { return _vp; }
+        const Matrix&   getViewProjection() const;
         IVideoDriver*   getDriver();
-        unsigned int    getShaderFlags() const { return _shaderFlags; }
-
-
-        void setDriver(IVideoDriver*);
+        unsigned int    getShaderFlags() const;
 
         void setViewProj(const Matrix& viewProj);
-        void setViewProjTransform(const Matrix& viewProj) { setViewProj(viewProj); }
+        void setViewProjTransform(const Matrix& viewProj);
         void setVertexDeclaration(const VertexDeclaration* decl);
         void setUberShaderProgram(UberShaderProgram* pr);
         /**Sets blend mode. Default value is blend_premultiplied_alpha*/
@@ -57,7 +54,7 @@ namespace oxygine
         void setTexture(const spNativeTexture& base, const spNativeTexture& alpha, bool basePremultiplied = true);
         void setTexture(const spNativeTexture& base, bool basePremultiplied = true);
         /**Sets World transformation.*/
-        void setTransform(const Transform& tr) { _transform = tr; }
+        void setTransform(const Transform& tr);
 
         void beginElementRendering(bool basePremultiplied);// OVERRIDE;
         void beginSDFont(float contrast, float offset, const Color& outlineColor, float outlineOffset);
@@ -75,8 +72,6 @@ namespace oxygine
         /**initializes View + Projection matrices where TopLeft is (0,0) and RightBottom is (width, height). use flipU = true for render to texture*/
         void initCoordinateSystem(int width, int height, bool flipU = false);
         void resetSettings();
-        /**Cleans existing accumulated batch.*/
-        void cleanup();
 
         virtual void addVertices(const void* data, unsigned int size);
 
@@ -86,8 +81,8 @@ namespace oxygine
         static void showTexel2PixelErrors(bool show);
 #endif
 
-        void swapVerticesData(std::vector<unsigned char>& data) { std::swap(data, _vertices); }
-        void swapVerticesData(STDRenderer& r) { std::swap(_vertices, r._vertices); }
+        void swapVerticesData(std::vector<unsigned char>& data);
+        void swapVerticesData(STDRenderer& r);
 
     protected:
         Transform _transform;
@@ -110,7 +105,6 @@ namespace oxygine
         Matrix _vp;
 
         virtual void preDrawBatch();
-        virtual void _cleanup();
         virtual void _begin();
         virtual void _resetSettings();
         //virtual

+ 1 - 1
oxygine/src/Stage.cpp

@@ -148,7 +148,7 @@ namespace oxygine
             driver->clear(*clearColor);
 
         Matrix vp = view * proj;
-        STDRenderer::instance->setViewProjTransform(vp);
+        STDRenderer::instance->setViewProj(vp);
 
         RenderState rs;
         rs.material = _material;

+ 0 - 6
oxygine/src/TweenOutline.cpp

@@ -2,16 +2,10 @@
 #include "STDMaterial.h"
 #include "Actor.h"
 #include "RenderState.h"
-
 #include "core/gl/VertexDeclarationGL.h"
 
-
-
 namespace oxygine
 {
-
-
-
     class TweenOutlineImpl : public TweenPostProcess
     {
     public:

+ 2 - 0
oxygine/src/core/oxygine.cpp

@@ -491,6 +491,8 @@ namespace oxygine
             STDRenderer::instance = new STDRenderer;
             STDMaterial::instance = new STDMaterial;
 
+            STDRenderer::current = STDRenderer::instance;
+
             CHECKGL();
 
 #ifdef OX_DEBUG