dmuratshin 8 years ago
parent
commit
9decbf3749

+ 1 - 1
examples/Demo/src/TestRender2Texture.h

@@ -98,7 +98,7 @@ public:
             oxglBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
             oxglBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
         }
         }
 
 
-        renderer.draw(color, frame.getSrcRect(), destRect);
+        renderer.addQuad(color, frame.getSrcRect(), destRect);
         renderer.end();
         renderer.end();
         if (!paint)
         if (!paint)
             oxglBlendEquation(GL_FUNC_ADD);//restore to default value
             oxglBlendEquation(GL_FUNC_ADD);//restore to default value

+ 1 - 1
examples/Demo/src/TestTiled.h

@@ -199,7 +199,7 @@ public:
 
 
                 Rect dest(x * tileWidth, y * tileHeight, tileWidth, tileHeight);
                 Rect dest(x * tileWidth, y * tileHeight, tileWidth, tileHeight);
                 RectF destF = dest.cast<RectF>();
                 RectF destF = dest.cast<RectF>();
-                renderer->draw(color, srcUV, destF);
+                renderer->addQuad(color, srcUV, destF);
             }
             }
         }
         }
     }
     }

+ 1 - 1
examples/Demo/src/main.cpp

@@ -30,7 +30,7 @@ int mainloop()
 
 
     if (core::beginRendering())
     if (core::beginRendering())
     {
     {
-        Color clearColor(233, 32, 32, 255);
+        Color clearColor(32, 32, 32, 255);
         Rect viewport(Point(0, 0), core::getDisplaySize());
         Rect viewport(Point(0, 0), core::getDisplaySize());
         // Render all actors inside the stage. Actor::render will also be called for all its children
         // Render all actors inside the stage. Actor::render will also be called for all its children
         getStage()->render(clearColor, viewport);
         getStage()->render(clearColor, viewport);

+ 1 - 1
oxygine/src/oxygine/Box9Sprite.cpp

@@ -331,7 +331,7 @@ namespace oxygine
                         RectF srcRect(_guidesX[xgi], _guidesY[ygi], _guidesX[xgi + 1] - _guidesX[xgi], _guidesY[ygi + 1] - _guidesY[ygi]);
                         RectF srcRect(_guidesX[xgi], _guidesY[ygi], _guidesX[xgi + 1] - _guidesX[xgi], _guidesY[ygi + 1] - _guidesY[ygi]);
                         RectF destRect(_pointsX[xc], _pointsY[yc], _pointsX[xc + 1] - _pointsX[xc], _pointsY[yc + 1] - _pointsY[yc]);
                         RectF destRect(_pointsX[xc], _pointsY[yc], _pointsX[xc + 1] - _pointsX[xc], _pointsY[yc + 1] - _pointsY[yc]);
 
 
-                        renderer->draw(color, srcRect, destRect);
+                        renderer->addQuad(color, srcRect, destRect);
 
 
                     }
                     }
                 }
                 }

+ 1 - 0
oxygine/src/oxygine/DebugActor.cpp

@@ -348,6 +348,7 @@ namespace oxygine
         s << "update=" << aligned(getStage()->_statUpdate, 2) << "ms ";
         s << "update=" << aligned(getStage()->_statUpdate, 2) << "ms ";
         s << "render=" << aligned(vstats.duration, 2) << "ms ";
         s << "render=" << aligned(vstats.duration, 2) << "ms ";
         s << "textures=" << aligned(NativeTexture::created, 2) << " ";
         s << "textures=" << aligned(NativeTexture::created, 2) << " ";
+        s << "mats=" << aligned(mc()._materials.size(), 2) << " ";
 
 
 #ifdef __APPLE__
 #ifdef __APPLE__
         size_t mem;
         size_t mem;

+ 1 - 1
oxygine/src/oxygine/MaskedRenderer.cpp

@@ -28,7 +28,7 @@ namespace oxygine
         clipUV.get(_msk);
         clipUV.get(_msk);
         _clipMask = Vector4(clipMask.getLeft(), clipMask.getTop(), clipMask.getRight(), clipMask.getBottom());
         _clipMask = Vector4(clipMask.getLeft(), clipMask.getTop(), clipMask.getRight(), clipMask.getBottom());
 
 
-        _driver->setTexture(UberShaderProgram::SAMPLER_MASK, mask);
+        rc().setTexture(UberShaderProgram::SAMPLER_MASK, mask);
     }
     }
 
 
     void MaskedRenderer::shaderProgramChanged()
     void MaskedRenderer::shaderProgramChanged()

+ 2 - 2
oxygine/src/oxygine/MaterialX.cpp

@@ -57,12 +57,12 @@ namespace oxygine
     void STDMaterialX::render(const AffineTransform& tr, const Color& c, const RectF& src, const RectF& dest)
     void STDMaterialX::render(const AffineTransform& tr, const Color& c, const RectF& src, const RectF& dest)
     {
     {
         STDRenderer::getCurrent()->setTransform(tr);
         STDRenderer::getCurrent()->setTransform(tr);
-        STDRenderer::getCurrent()->draw(c, src, dest);
+        STDRenderer::getCurrent()->addQuad(c, src, dest);
     }
     }
 
 
     void STDMaterialX::render(const Color& c, const RectF& src, const RectF& dest)
     void STDMaterialX::render(const Color& c, const RectF& src, const RectF& dest)
     {
     {
-        STDRenderer::getCurrent()->draw(c, src, dest);
+        STDRenderer::getCurrent()->addQuad(c, src, dest);
     }
     }
 
 
 
 

+ 1 - 1
oxygine/src/oxygine/MaterialX.h

@@ -140,7 +140,7 @@ namespace oxygine
                 MaterialX* mat = m_.get();
                 MaterialX* mat = m_.get();
                 if (mat->_compare != cm)
                 if (mat->_compare != cm)
                     continue;
                     continue;
-                if (mat->_ref_counter == 2)
+                if (mat->_ref_counter == 1)
                     fre = (T*)mat;
                     fre = (T*)mat;
                 if (mat->_hash != hash)
                 if (mat->_hash != hash)
                     continue;
                     continue;

+ 1 - 157
oxygine/src/oxygine/STDRenderer.cpp

@@ -514,7 +514,7 @@ namespace oxygine
     {
     {
     }
     }
 
 
-    void STDRenderer::draw(const Color& clr, const RectF& srcRect, const RectF& destRect)
+    void STDRenderer::addQuad(const Color& clr, const RectF& srcRect, const RectF& destRect)
     {
     {
         Color color = clr.premultiplied();
         Color color = clr.premultiplied();
 
 
@@ -548,119 +548,9 @@ namespace oxygine
         ShaderProgram* sp = _uberShader->getShaderProgram(_baseShaderFlags | flags);
         ShaderProgram* sp = _uberShader->getShaderProgram(_baseShaderFlags | flags);
         setShader(sp);
         setShader(sp);
     }
     }
-    /*
 
 
-
-    void STDRenderer::draw(MaterialX* mat, const Color& color, const RectF& srcRect, const RectF& destRect)
-    {
-    draw(mat, _transform, color, srcRect, destRect);
-    }
-
-    void STDRenderer::draw(MaterialX* mat, const AffineTransform& tr, const Color& color_, const RectF& srcRect, const RectF& destRect)
-    {
-    Color color = color_.premultiplied();
-
-    vertexPCT2 v[4];
-    fillQuadT(v, srcRect, destRect, tr, color.rgba());
-    draw(mat, v);
-    }
-
-
-    void STDRenderer::draw(MaterialX* mat, vertexPCT2 vert[4])
-    {
-    #ifdef EXP_SORT
-        batch& b = draw(mat);
-
-        b.vertices.insert(b.vertices.end(), vert, vert + 4);
-        for (int i = 0; i < 4; ++i)
-        {
-            b.bbox.unite(Vector2(vert[i].x, vert[i].y));
-        }
-    #else
-        _vertices.insert(_vertices.end(), (unsigned char*)vert, (unsigned char*)(vert + 4));
-
-    #endif
-    }
-
-    #ifdef EXP_SORT
-
-    STDRenderer::batch& STDRenderer::draw(spMaterialX mat)
-    {
-        if (_batches.empty() || _batches.back().mat != mat)
-        {
-            batch b;
-            b.mat = mat;
-            b.bbox = RectF::invalidated();
-            _batches.push_back(b);
-            return _batches.back();
-        }
-        return _batches.back();
-    }
-
-    void STDRenderer::process()
-    {
-        for (int i = 0; i < (int)_batches.size() - 1; ++i)
-            process(i);
-    }
-
-    void STDRenderer::process(int j)
-    {
-        batch& my = _batches[j];
-        for (int i = j + 1; i < (int)_batches.size(); ++i)
-        {
-            batch& c = _batches[i];
-            if (c.mat == my.mat)
-            {
-                bool fail = false;
-                for (int n = j + 1; n < i; ++n)
-                    //for (int n = i - 1; n > j; --n)
-                {
-                    batch& c2 = _batches[n];
-                    if (c2.bbox.isIntersecting(c.bbox))
-                    {
-                        fail = true;
-                        break;
-                    }
-                }
-
-                if (!fail)
-                {
-                    my.vertices.insert(my.vertices.end(), c.vertices.begin(), c.vertices.end());
-                    _batches.erase(_batches.begin() + i);
-
-                    //continue search
-                    --i;
-                }
-            }
-        }
-    }
-    #endif
-    */
     void STDRenderer::flush()
     void STDRenderer::flush()
     {
     {
-#ifdef EXP_SORT
-
-        process();
-
-        size_t num = _batches.size();
-        for (size_t i = 0; i < num; ++i)
-        {
-            batch& c = _batches[i];
-
-            size_t indices = (c.vertices.size() * 3) / 2;
-            if (!indices)
-                continue;
-
-            c.mat->apply();
-
-            IVideoDriver::instance->draw(IVideoDriver::PT_TRIANGLES, STDRenderer::getCurrent()->getVertexDeclaration(),
-                                         &c.vertices.front(), (unsigned int)c.vertices.size(),
-                                         &STDRenderer::indices16.front(), (unsigned int)indices);
-        }
-
-        //log::messageln("batches %d", _batches.size());
-        _batches.clear();
-#else
         size_t indices = (_verticesData.size() / sizeof(vertexPCT2) * 3) / 2;
         size_t indices = (_verticesData.size() / sizeof(vertexPCT2) * 3) / 2;
         if (!indices)
         if (!indices)
             return;
             return;
@@ -670,7 +560,6 @@ namespace oxygine
                                      &STDRenderer::indices16.front(), (unsigned int)indices);
                                      &STDRenderer::indices16.front(), (unsigned int)indices);
 
 
         _verticesData.clear();
         _verticesData.clear();
-#endif
     }
     }
 
 
 
 
@@ -679,51 +568,6 @@ namespace oxygine
         if (_uberShader == pr)
         if (_uberShader == pr)
             return;
             return;
 
 
-        //drawBatch();
         _uberShader = pr;
         _uberShader = pr;
     }
     }
-
-
-    void STDRenderer::applySimpleMode(bool basePremultiplied)
-    {
-        /*
-        if (_alpha)
-        {
-            flush();
-            _shaderFlags &= ~UberShaderProgram::SEPARATE_ALPHA;
-            _alpha = 0;
-        }
-
-        unsigned int shaderFlags = _shaderFlags;
-
-        if (basePremultiplied)
-            shaderFlags &= ~UberShaderProgram::ALPHA_PREMULTIPLY;
-        else
-            shaderFlags |= UberShaderProgram::ALPHA_PREMULTIPLY;
-
-        if (_shaderFlags != shaderFlags)
-        {
-            flush();
-        }
-        */
-        OX_ASSERT(0);
-    }
-
-    void STDRenderer::draw(const spNativeTexture& texture, unsigned int color, const RectF& src, const RectF& dest)
-    {
-        /*
-        if (_base != texture)
-        {
-            flush();
-            _base = texture;
-        }
-
-        vertexPCT2 v[4];
-        fillQuadT(v, src, dest, _transform, color);
-        addVertices(v, sizeof(v));
-        */
-        OX_ASSERT(0);
-    }
-
-
 }
 }

+ 5 - 23
oxygine/src/oxygine/STDRenderer.h

@@ -59,11 +59,10 @@ namespace oxygine
         STDRenderer(IVideoDriver* driver = 0);
         STDRenderer(IVideoDriver* driver = 0);
         virtual ~STDRenderer();
         virtual ~STDRenderer();
 
 
-        const Matrix&   getViewProjection() const;
-        IVideoDriver*   getDriver();
-        unsigned int    getShaderFlags() const;
-        const AffineTransform&  getTransform() const { return _transform; }
-        const VertexDeclaration* getVertexDeclaration() const { return _vdecl; }
+        const Matrix&               getViewProjection() const;
+        IVideoDriver*               getDriver();
+        const AffineTransform&      getTransform() const { return _transform; }
+        const VertexDeclaration*    getVertexDeclaration() const { return _vdecl; }
 
 
         void setShaderFlags(unsigned int);
         void setShaderFlags(unsigned int);
         void setViewProj(const Matrix& viewProj);
         void setViewProj(const Matrix& viewProj);
@@ -72,11 +71,7 @@ namespace oxygine
 
 
         /**Sets World transformation.*/
         /**Sets World transformation.*/
         void setTransform(const Transform& world);
         void setTransform(const Transform& world);
-        void draw(const Color&, const RectF& srcRect, const RectF& destRect);
-
-        void applySimpleMode(bool basePremultiplied);
-        /**used in pair with applySimpleMode/applySDF, fast, don't have excess checks*/
-        void draw(const spNativeTexture& texture, unsigned int color, const RectF& src, const RectF& dest) override;
+        void addQuad(const Color&, const RectF& srcRect, const RectF& destRect);
 
 
         /**Begins rendering into RenderTexture or into primary framebuffer if rt is null*/
         /**Begins rendering into RenderTexture or into primary framebuffer if rt is null*/
         void begin();
         void begin();
@@ -107,19 +102,6 @@ namespace oxygine
     protected:
     protected:
         virtual void shaderProgramChanged() {}
         virtual void shaderProgramChanged() {}
 
 
-        struct batch
-        {
-            spMaterialX mat;
-            std::vector<vertexPCT2> vertices;
-            RectF bbox;
-        };
-
-        typedef std::vector<batch> batches;
-        batches _batches;
-
-
-        batch& draw(spMaterialX mat);
-
         Transform _transform;
         Transform _transform;
 
 
         void setShader(ShaderProgram* prog);
         void setShader(ShaderProgram* prog);

+ 1 - 1
oxygine/src/oxygine/TweenAlphaFade.cpp

@@ -35,7 +35,7 @@ namespace oxygine
 
 
 
 
             Color color = Color(Color::White).withAlpha(_a).premultiplied();
             Color color = Color(Color::White).withAlpha(_a).premultiplied();
-            renderer->draw(rt, color.rgba(), src, dest);
+            renderer->addQuad(color.rgba(), src, dest);
         }
         }
 
 
         bool _fadeIn;
         bool _fadeIn;

+ 2 - 2
oxygine/src/oxygine/TweenGlow.cpp

@@ -43,11 +43,11 @@ namespace oxygine
 
 
             AffineTransform tr = _pp._transform * _actor->computeGlobalTransform();
             AffineTransform tr = _pp._transform * _actor->computeGlobalTransform();
             renderer->setTransform(tr);
             renderer->setTransform(tr);
-            renderer->applySimpleMode(true);
+            //renderer->applySimpleMode(true);
             Color color = Color(Color::White).withAlpha(255).premultiplied();
             Color color = Color(Color::White).withAlpha(255).premultiplied();
             color = Color::White;
             color = Color::White;
             rc().setBlendMode(blend_add);
             rc().setBlendMode(blend_add);
-            renderer->draw(_pp._rt, color.rgba(), src, dest);
+            //renderer->draw(_pp._rt, color.rgba(), src, dest);
             renderer->flush();
             renderer->flush();
         }
         }
 
 

+ 1 - 1
oxygine/src/oxygine/TweenOutline.cpp

@@ -43,7 +43,7 @@ namespace oxygine
 
 
 
 
             Color color = Color(Color::White).withAlpha(255).premultiplied();
             Color color = Color(Color::White).withAlpha(255).premultiplied();
-            renderer->draw(rt, color.rgba(), src, dest);
+            renderer->addQuad(color.rgba(), src, dest);
 
 
 
 
             RenderState r = rs;
             RenderState r = rs;

+ 4 - 1
oxygine/src/oxygine/VisualStyle.cpp

@@ -7,7 +7,7 @@
 
 
 namespace oxygine
 namespace oxygine
 {
 {
-    VisualStyle::VisualStyle(): _color(255, 255, 255, 255), _blend(blend_premultiplied_alpha)
+    VisualStyle::VisualStyle(): _color(Color::White), _blend(blend_premultiplied_alpha)
     {
     {
 
 
     }
     }
@@ -16,6 +16,7 @@ namespace oxygine
     {
     {
         STDMaterialX mat;
         STDMaterialX mat;
         mat._blend = blend_premultiplied_alpha;
         mat._blend = blend_premultiplied_alpha;
+        mat._base = STDRenderer::white;
 
 
         _mat = mc().cache(mat);
         _mat = mc().cache(mat);
     }
     }
@@ -102,6 +103,8 @@ namespace oxygine
 
 
     void VStyleActor::setMat(spSTDMaterialX mat)
     void VStyleActor::setMat(spSTDMaterialX mat)
     {
     {
+        if (_mat == mat)
+            return;
         _mat = mat;
         _mat = mat;
         matChanged();
         matChanged();
     }
     }

+ 0 - 2
oxygine/src/oxygine/core/Renderer.h

@@ -221,8 +221,6 @@ namespace oxygine
     {
     {
     public:
     public:
         virtual ~IElementRenderer() {}
         virtual ~IElementRenderer() {}
-        virtual void draw(const spNativeTexture& texture, unsigned int color, const RectF& src, const RectF& dest) = 0;
-        //virtual void draw(MaterialX* mat, const Color& color, const RectF& src, const RectF& dest) = 0;
     };
     };
 
 
     /**Returns View matrix where Left Top corner is (0,0), and right bottom is (w,h)*/
     /**Returns View matrix where Left Top corner is (0,0), and right bottom is (w,h)*/