dmuratshin 8 years ago
parent
commit
c75ab4e58a

+ 10 - 0
oxygine/src/oxygine/MaterialX.cpp

@@ -62,6 +62,16 @@ namespace oxygine
 
 
     }
     }
 
 
+    void MaterialX::render(const AffineTransform &tr, const Color& c, const RectF& src, const RectF& dest)
+    {
+        STDRenderer::getCurrent()->draw(this, tr, c, src, dest);
+    }
+
+    void MaterialX::render(const Color& c, const RectF& src, const RectF& dest)
+    {
+        STDRenderer::getCurrent()->draw(this, c, src, dest);
+    }
+
     oxygine::MaterialX& MaterialX::operator=(const MaterialX& r)
     oxygine::MaterialX& MaterialX::operator=(const MaterialX& r)
     {
     {
         _compare = r._compare;
         _compare = r._compare;

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

@@ -44,6 +44,9 @@ namespace oxygine
         virtual void copyFrom(const MaterialX& r) = 0;
         virtual void copyFrom(const MaterialX& r) = 0;
         virtual void update(size_t& hash, compare&) const = 0;
         virtual void update(size_t& hash, compare&) const = 0;
         virtual void rehash(size_t& hash) const = 0;
         virtual void rehash(size_t& hash) const = 0;
+
+        void render(const AffineTransform &tr, const Color& c, const RectF& src, const RectF& dest);
+        void render(const Color& c, const RectF& src, const RectF& dest);
     };
     };
 
 
     typedef intrusive_ptr<MaterialX> spMaterialX;
     typedef intrusive_ptr<MaterialX> spMaterialX;

+ 2 - 6
oxygine/src/oxygine/STDMaterial.cpp

@@ -140,10 +140,8 @@ namespace oxygine
             return;
             return;
 
 
         Color color = rs.getFinalColor(sprite->getColor());
         Color color = rs.getFinalColor(sprite->getColor());
-        if (sprite->getBlendMode() == blend_premultiplied_alpha)
-            color = color.premultiplied();
 
 
-        STDRenderer::getCurrent()->draw(sprite->_mat, rs.transform, color.rgba(), sprite->getAnimFrame().getSrcRect(), sprite->getDestRect());
+        sprite->_mat->render(rs.transform, color, sprite->getAnimFrame().getSrcRect(), sprite->getDestRect());
     }
     }
 
 
     void STDMaterial::doRender(TextField* tf, const RenderState& rs)
     void STDMaterial::doRender(TextField* tf, const RenderState& rs)
@@ -190,10 +188,8 @@ namespace oxygine
     void STDMaterial::doRender(ColorRectSprite* sprite, const RenderState& rs)
     void STDMaterial::doRender(ColorRectSprite* sprite, const RenderState& rs)
     {
     {
         Color color = rs.getFinalColor(sprite->getColor());
         Color color = rs.getFinalColor(sprite->getColor());
-        if (sprite->getBlendMode() == blend_premultiplied_alpha)
-            color = color.premultiplied();
 
 
-        STDRenderer::getCurrent()->draw(sprite->_mat, rs.transform, color.rgba(), sprite->getAnimFrame().getSrcRect(), sprite->getDestRect());
+        sprite->_mat->render(rs.transform, color, sprite->getAnimFrame().getSrcRect(), sprite->getDestRect());
     }
     }
 
 
     void STDMaterial::doRender(ProgressBar*, const RenderState& rs)
     void STDMaterial::doRender(ProgressBar*, const RenderState& rs)

+ 12 - 10
oxygine/src/oxygine/STDRenderer.cpp

@@ -577,18 +577,20 @@ namespace oxygine
         addVertices(v, sizeof(v));
         addVertices(v, sizeof(v));
     }
     }
 
 
-    void STDRenderer::draw(const spMaterialX& mat, unsigned int color, const RectF& srcRect, const RectF& destRect)
+    void STDRenderer::draw(MaterialX* mat, const Color& color, const RectF& srcRect, const RectF& destRect)
     {
     {
-        vertexPCT2 v[4];
-        fillQuadT(v, srcRect, destRect, _transform, color);
-        add(mat, v);
+        draw(mat, _transform, color, srcRect, destRect);
     }
     }
 
 
-    void STDRenderer::draw(const spMaterialX& mat, const AffineTransform& tr, unsigned int color, const RectF& srcRect, const RectF& destRect)
+    void STDRenderer::draw(MaterialX* mat, const AffineTransform& tr, const Color& color_, const RectF& srcRect, const RectF& destRect)
     {
     {
+        Color color = color_;
+        //if (_blend == blend_premultiplied_alpha)
+            color = color.premultiplied();
+
         vertexPCT2 v[4];
         vertexPCT2 v[4];
-        fillQuadT(v, srcRect, destRect, tr, color);
-        add(mat, v);
+        fillQuadT(v, srcRect, destRect, tr, color.rgba());
+        draw(mat, v);
     }
     }
 
 
 
 
@@ -611,10 +613,10 @@ namespace oxygine
         }
         }
     }
     }
 
 
-    void STDRenderer::add(const spMaterialX& mat, vertexPCT2 vert[4])
+    void STDRenderer::draw(MaterialX* mat, vertexPCT2 vert[4])
     {
     {
 #ifdef EXP_SORT
 #ifdef EXP_SORT
-        batch& b = add(mat);
+        batch& b = draw(mat);
 
 
         b.vertices.insert(b.vertices.end(), vert, vert + 4);
         b.vertices.insert(b.vertices.end(), vert, vert + 4);
         for (int i = 0; i < 4; ++i)
         for (int i = 0; i < 4; ++i)
@@ -635,7 +637,7 @@ namespace oxygine
 
 
 #ifdef EXP_SORT
 #ifdef EXP_SORT
 
 
-    STDRenderer::batch& STDRenderer::add(spMaterialX mat)
+    STDRenderer::batch& STDRenderer::draw(spMaterialX mat)
     {
     {
         if (_batches.empty() || _batches.back().mat != mat)
         if (_batches.empty() || _batches.back().mat != mat)
         {
         {

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

@@ -67,9 +67,9 @@ namespace oxygine
         void applySimpleMode(bool basePremultiplied);
         void applySimpleMode(bool basePremultiplied);
         /**used in pair with applySimpleMode/applySDF, fast, don't have excess checks*/
         /**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 draw(const spNativeTexture& texture, unsigned int color, const RectF& src, const RectF& dest) override;
-        void draw(const spMaterialX& mat, unsigned int color, const RectF& src, const RectF& dest) override;
-        void draw(const spMaterialX& mat, const AffineTransform& transform, unsigned int color, const RectF& src, const RectF& dest);
-        void add(const spMaterialX& mat, vertexPCT2 vert[4]);
+        void draw(MaterialX* mat, const Color& color, const RectF& src, const RectF& dest) override;
+        void draw(MaterialX* mat, const AffineTransform& transform, const Color& color, const RectF& src, const RectF& dest);
+        void draw(MaterialX* mat, vertexPCT2 vert[4]);
 
 
         /**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();
@@ -112,7 +112,7 @@ namespace oxygine
         enum { MAX_TEXTURES = 4 };
         enum { MAX_TEXTURES = 4 };
         spNativeTexture _textures[MAX_TEXTURES];
         spNativeTexture _textures[MAX_TEXTURES];
 
 
-        batch& add(spMaterialX mat);
+        batch& draw(spMaterialX mat);
 
 
         int _baseShaderFlags;
         int _baseShaderFlags;
         Transform _transform;
         Transform _transform;

+ 1 - 1
oxygine/src/oxygine/core/Renderer.h

@@ -222,7 +222,7 @@ 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(const spNativeTexture& texture, unsigned int color, const RectF& src, const RectF& dest) = 0;
-        virtual void draw(const spMaterialX& mat, 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)*/

+ 1 - 1
oxygine/src/oxygine/text_utils/Aligner.h

@@ -24,7 +24,7 @@ namespace oxygine
             int code;
             int code;
             glyph gl;
             glyph gl;
             RectF destRect;
             RectF destRect;
-            spMaterialX materialX;
+            spMaterialX mat;
         };
         };
 
 
         class Aligner
         class Aligner

+ 3 - 3
oxygine/src/oxygine/text_utils/Node.cpp

@@ -154,9 +154,9 @@ namespace oxygine
             for (size_t i = 0; i < _data.size(); ++i)
             for (size_t i = 0; i < _data.size(); ++i)
             {
             {
                 const Symbol& s = _data[i];
                 const Symbol& s = _data[i];
-                if (!s.materialX)
+                if (!s.mat)
                     continue;
                     continue;
-                dc.renderer->draw(s.materialX, dc.color.rgba(), s.gl.src, s.destRect);
+                s.mat->render(dc.color, s.gl.src, s.destRect);
             }
             }
 
 
             drawChildren(dc);
             drawChildren(dc);
@@ -205,7 +205,7 @@ namespace oxygine
                         mat->data._base = gl->texture;
                         mat->data._base = gl->texture;
 
 
 
 
-                        s.materialX = mc().cache(*mat.get());
+                        s.mat = mc().cache(*mat.get());
                     }
                     }
                     ++i;
                     ++i;
                     if (i < 0)
                     if (i < 0)