dmuratshin 8 years ago
parent
commit
4bc0d39d62

+ 2 - 0
oxygine/src/oxygine-include.h

@@ -0,0 +1,2 @@
+#pragma once
+#include "oxygine/oxygine-include.h"

+ 3 - 5
oxygine/src/oxygine/Box9Sprite.cpp

@@ -288,17 +288,15 @@ namespace oxygine
         if (!_prepared)
         if (!_prepared)
             prepare();
             prepare();
 
 
-        //_vstyle._apply(rs);
-        const Diffuse& df = _frame.getDiffuse();
+
+        _mat->apply();
 
 
         STDRenderer* renderer = STDRenderer::getCurrent();
         STDRenderer* renderer = STDRenderer::getCurrent();
 
 
-        if (df.base)
+        if (_mat->_base)
         {
         {
             if (_guidesX.size() >= 2 || _guidesY.size() >= 2)
             if (_guidesX.size() >= 2 || _guidesY.size() >= 2)
             {
             {
-                //renderer->setTexture(df.base, df.alpha, df.premultiplied);
-                rc().setBlendMode(getBlendMode());
                 renderer->setTransform(rs.transform);
                 renderer->setTransform(rs.transform);
 
 
                 Color color = rs.getFinalColor(getColor());
                 Color color = rs.getFinalColor(getColor());

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

@@ -43,15 +43,37 @@ namespace oxygine
         return r;
         return r;
     }
     }
 
 
-    RenderStateCache::RenderStateCache(IVideoDriver* d) : _driver(d), _program(0)
+    RenderStateCache::RenderStateCache(IVideoDriver* d) : _driver(d)
     {
     {
-        _blend = blend_disabled;
+        reset();
     }
     }
 
 
+    void RenderStateCache::reset()
+    {
+        for (int i = 0; i < MAX_TEXTURES; ++i)
+        {
+            _textures[i] = 0;
+        }
+        _blend = blend_disabled;
+        _driver->setState(IVideoDriver::STATE_BLEND, 0);
+        _program = 0;
+    }
 
 
     void RenderStateCache::setTexture(int sampler, const spNativeTexture& t)
     void RenderStateCache::setTexture(int sampler, const spNativeTexture& t)
     {
     {
         OX_ASSERT(sampler < MAX_TEXTURES);
         OX_ASSERT(sampler < MAX_TEXTURES);
+#ifdef OX_DEBUG
+
+        if (_textures[sampler])
+        {
+            GLint whichID;
+            oxglActiveTexture(GL_TEXTURE0 + sampler);
+            glGetIntegerv(GL_TEXTURE_BINDING_2D, &whichID);
+
+            OX_ASSERT(_textures[sampler]->getHandle() == (nativeTextureHandle)whichID);
+        }
+
+#endif
         if (_textures[sampler] == t)
         if (_textures[sampler] == t)
             return;
             return;
         _textures[sampler] = t;
         _textures[sampler] = t;
@@ -64,7 +86,6 @@ namespace oxygine
         if (_blend == blend)
         if (_blend == blend)
             return;
             return;
 
 
-        //drawBatch();
 
 
         if (blend == 0)
         if (blend == 0)
             _driver->setState(IVideoDriver::STATE_BLEND, 0);
             _driver->setState(IVideoDriver::STATE_BLEND, 0);

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

@@ -15,6 +15,7 @@ namespace oxygine
         void setTexture(int sampler, const spNativeTexture& t);
         void setTexture(int sampler, const spNativeTexture& t);
         void setBlendMode(blend_mode blend);
         void setBlendMode(blend_mode blend);
         bool setShader(ShaderProgram* prog);
         bool setShader(ShaderProgram* prog);
+        void reset();
 
 
     protected:
     protected:
         enum { MAX_TEXTURES = 8 };
         enum { MAX_TEXTURES = 8 };
@@ -117,6 +118,8 @@ namespace oxygine
         void pushShaderSetHook(ShaderProgramChangedHook* hook);
         void pushShaderSetHook(ShaderProgramChangedHook* hook);
         void popShaderSetHook();
         void popShaderSetHook();
 
 
+        bool isEmpty() const { return _verticesData.empty(); }
+
     protected:
     protected:
         virtual void shaderProgramChanged() {}
         virtual void shaderProgramChanged() {}
 
 

+ 5 - 0
oxygine/src/oxygine/core/gl/NativeTextureGLES.cpp

@@ -89,6 +89,7 @@ namespace oxygine
     {
     {
         GLuint id = 0;
         GLuint id = 0;
         glGenTextures(1, &id);
         glGenTextures(1, &id);
+        oxglActiveTexture(GL_TEXTURE7);
         glBindTexture(GL_TEXTURE_2D, id);
         glBindTexture(GL_TEXTURE_2D, id);
 
 
         unsigned int f = GL_LINEAR;
         unsigned int f = GL_LINEAR;
@@ -199,6 +200,7 @@ namespace oxygine
 
 
     void NativeTextureGLES::setLinearFilter(bool enable)
     void NativeTextureGLES::setLinearFilter(bool enable)
     {
     {
+        oxglActiveTexture(GL_TEXTURE7);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
 
 
         unsigned int f = enable ? GL_LINEAR : GL_NEAREST;
         unsigned int f = enable ? GL_LINEAR : GL_NEAREST;
@@ -209,6 +211,7 @@ namespace oxygine
 
 
     void NativeTextureGLES::setClamp2Edge(bool clamp2edge)
     void NativeTextureGLES::setClamp2Edge(bool clamp2edge)
     {
     {
+        oxglActiveTexture(GL_TEXTURE7);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
 
 
         unsigned int f = clamp2edge ? GL_CLAMP_TO_EDGE : GL_REPEAT;
         unsigned int f = clamp2edge ? GL_CLAMP_TO_EDGE : GL_REPEAT;
@@ -315,6 +318,7 @@ namespace oxygine
 
 
         if (_lockFlags & lock_write)
         if (_lockFlags & lock_write)
         {
         {
+            oxglActiveTexture(GL_TEXTURE7);
             glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
             glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
             GLenum er = glGetError();
             GLenum er = glGetError();
 
 
@@ -354,6 +358,7 @@ namespace oxygine
         ImageData data = data_;
         ImageData data = data_;
         assert(_width >= data.w - x);
         assert(_width >= data.w - x);
         assert(_height >= data.h - y);
         assert(_height >= data.h - y);
+        oxglActiveTexture(GL_TEXTURE7);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
         glBindTexture(GL_TEXTURE_2D, (GLuint) _id);
 
 
         glPixel glp = SurfaceFormat2GL(_format);
         glPixel glp = SurfaceFormat2GL(_format);

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

@@ -601,8 +601,10 @@ namespace oxygine
             bool ready = STDRenderer::isReady();
             bool ready = STDRenderer::isReady();
             if (ready)
             if (ready)
             {
             {
+                rc().reset();
                 IVideoDriver::_stats.start = getTimeMS();
                 IVideoDriver::_stats.start = getTimeMS();
                 updatePortProcessItems();
                 updatePortProcessItems();
+                rc().reset();
             }
             }
             else
             else
             {
             {

+ 1 - 0
oxygine/src/oxygine/text_utils/Node.cpp

@@ -168,6 +168,7 @@ namespace oxygine
                 const Symbol& s = _data[i];
                 const Symbol& s = _data[i];
                 if (!s.mat)
                 if (!s.mat)
                     continue;
                     continue;
+
                 s.mat->apply();
                 s.mat->apply();
                 s.mat->render(dc.color, s.gl.src, s.destRect);
                 s.mat->render(dc.color, s.gl.src, s.destRect);
             }
             }