2
0
dmuratshin 8 жил өмнө
parent
commit
41774769de

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

@@ -86,8 +86,7 @@ namespace oxygine
     {
         if (current != this)
         {
-            if (current)
-                current->flush();
+            current->flush();
             xapply();
             current = this;
         }

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

@@ -403,7 +403,7 @@ namespace oxygine
         _transform = actor->computeGlobalTransform().inverted();
 
 
-        MaterialX::current = 0;
+        MaterialX::null->apply();
 
 
         IVideoDriver* driver = IVideoDriver::instance;
@@ -446,7 +446,7 @@ namespace oxygine
 
         actor->setMaterial(rd);
 
-        MaterialX::current = 0;
+        MaterialX::null->apply();
     }
 
 

+ 18 - 29
oxygine/src/oxygine/STDRenderer.cpp

@@ -297,9 +297,7 @@ namespace oxygine
     void STDRenderer::setViewProj(const Matrix& viewProj)
     {
         _vp = viewProj;
-        if (_drawing)
-            flush();
-
+        flush();
         _driver->setUniform("mat", _vp);
     }
 
@@ -316,27 +314,20 @@ namespace oxygine
 
     void STDRenderer::begin()
     {
-        //OX_ASSERT(!_drawing);
         OX_ASSERT(_verticesData.empty() == true);
         _verticesData.clear();
         _transform.identity();
 
-        MaterialX::current = 0;
+        MaterialX::null->apply();
         resetSettings();
 
         xbegin();
 
-        _drawing = true;
-
         current = this;
     }
 
     void STDRenderer::end()
     {
-        if (!_drawing)
-            return;
-
-        OX_ASSERT(_drawing);
         flush();
 
         if (_prevRT)
@@ -345,9 +336,6 @@ namespace oxygine
             _prevRT = 0;
         }
 
-        //current = 0;
-
-        _drawing = false;
     }
 
     void STDRenderer::setVertexDeclaration(const VertexDeclaration* decl)
@@ -449,7 +437,6 @@ namespace oxygine
 
         _uberShader = &uberShader;
         _transform.identity();
-        _drawing = false;
         _baseShaderFlags = 0;
     }
 
@@ -492,7 +479,6 @@ namespace oxygine
 
     void STDRenderer::begin(spNativeTexture nt, const Rect* viewport)
     {
-        OX_ASSERT(!_drawing);
         OX_ASSERT(_prevRT == 0);
         _prevRT = _driver->getRenderTarget();
         _driver->setRenderTarget(nt);
@@ -521,23 +507,26 @@ namespace oxygine
         vertexPCT2 v[4];
         fillQuadT(v, srcRect, destRect, _transform, color.rgba());
 
-        /*
-        #ifdef OXYGINE_DEBUG_T2P
-        if (_base != white && _showTexel2PixelErrors)
-        {
-            Rect viewport;
-            _driver->getViewport(viewport);
 
-            bool t = checkT2P(viewport, _vp, &v[0], &v[3], _base->getWidth(), _base->getHeight());
-            if (!t)
+#ifdef OXYGINE_DEBUG_T2P
+        if (_showTexel2PixelErrors)
+        {
+            spNativeTexture base = rc().getTexture(UberShaderProgram::SAMPLER_BASE);
+            if (base != white)
             {
-                float c = (sinf((float)getTimeMS() / 200 + v[0].x * v[0].y) + 1) / 2.0f;
-                Color b = lerp(Color(rand() % 255, rand() % 255, rand() % 255, 255), color, c);
-                fillQuadT(v, srcRect, destRect, _transform, b.rgba());
+                Rect viewport;
+                _driver->getViewport(viewport);
+
+                bool t = checkT2P(viewport, _vp, &v[0], &v[3], base->getWidth(), base->getHeight());
+                if (!t)
+                {
+                    float c = (sinf((float)getTimeMS() / 200 + v[0].x * v[0].y) + 1) / 2.0f;
+                    Color b = lerp(Color(rand() % 255, rand() % 255, rand() % 255, 255), color, c);
+                    fillQuadT(v, srcRect, destRect, _transform, b.rgba());
+                }
             }
         }
-        #endif
-        */
+#endif
 
         addVertices(v, sizeof(v));
     }

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

@@ -10,6 +10,8 @@ namespace oxygine
     public:
         RenderStateCache(IVideoDriver* d);
 
+        const spNativeTexture& getTexture(int sampler) { return _textures[sampler]; }
+
         void setTexture(int sampler, const spNativeTexture& t);
         void setBlendMode(blend_mode blend);
         bool setShader(ShaderProgram* prog);
@@ -127,8 +129,6 @@ namespace oxygine
 
         unsigned int _baseShaderFlags;
 
-        bool _drawing;
-
         spNativeTexture _prevRT;
     };
 

+ 1 - 5
oxygine/src/oxygine/Stage.cpp

@@ -161,13 +161,9 @@ namespace oxygine
         }
 
         Actor::render(rs);
-
-
         STDRenderer::getCurrent()->flush();
 
-        MaterialX::current->flush();
-
-        MaterialX::current = 0;
+        MaterialX::null->apply();
     }
 
     void Stage::render(const Color& clearColor, const Rect& viewport)

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

@@ -500,6 +500,7 @@ namespace oxygine
             STDRenderer::instance = new STDRenderer;
             STDMaterial::instance = new STDMaterial;
             MaterialX::null       = new NullMaterialX;
+            MaterialX::current = MaterialX::null;
 
             STDRenderer::current = STDRenderer::instance;