Denis Muratshin 12 سال پیش
والد
کامیت
0f3efc0d3c

+ 3 - 3
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 7147c3f28257b9170ee6c230f55f8d8b3e4effa5
+node: 94bbf38496f29d1b9202455df28b1dc3a2d02df9
 branch: default
-latesttag: null
-latesttagdistance: 287
+latesttag: oldrender
+latesttagdistance: 15

BIN
doc.zip


+ 4 - 0
oxygine/SDL/win32/oxygine_vs2010.vcxproj

@@ -105,6 +105,7 @@
     <ClCompile Include="..\..\src\core\FileSystem.cpp" />
     <ClCompile Include="..\..\src\core\gl\NativeTextureGLES.cpp" />
     <ClCompile Include="..\..\src\core\gl\oxgl.cpp" />
+    <ClCompile Include="..\..\src\core\gl\ShaderProgramGL.cpp" />
     <ClCompile Include="..\..\src\core\gl\VertexDeclarationGL.cpp" />
     <ClCompile Include="..\..\src\core\gl\VideoDriverGL.cpp" />
     <ClCompile Include="..\..\src\core\gl\VideoDriverGLES11.cpp" />
@@ -123,6 +124,7 @@
     <ClCompile Include="..\..\src\core\STDFileSystem.cpp" />
     <ClCompile Include="..\..\src\core\system_data.cpp" />
     <ClCompile Include="..\..\src\core\Texture.cpp" />
+    <ClCompile Include="..\..\src\core\UberShaderProgram.cpp" />
     <ClCompile Include="..\..\src\core\VideoDriver.cpp" />
     <ClCompile Include="..\..\src\core\ZipFileSystem.cpp" />
     <ClCompile Include="..\..\src\DebugActor.cpp" />
@@ -186,6 +188,7 @@
     <ClInclude Include="..\..\src\core\files_io.h" />
     <ClInclude Include="..\..\src\core\gl\NativeTextureGLES.h" />
     <ClInclude Include="..\..\src\core\gl\oxgl.h" />
+    <ClInclude Include="..\..\src\core\gl\ShaderProgramGL.h" />
     <ClInclude Include="..\..\src\core\gl\VertexDeclarationGL.h" />
     <ClInclude Include="..\..\src\core\gl\VideoDriverGL.h" />
     <ClInclude Include="..\..\src\core\gl\VideoDriverGLES11.h" />
@@ -210,6 +213,7 @@
     <ClInclude Include="..\..\src\core\STDFileSystem.h" />
     <ClInclude Include="..\..\src\core\system_data.h" />
     <ClInclude Include="..\..\src\core\Texture.h" />
+    <ClInclude Include="..\..\src\core\UberShaderProgram.h" />
     <ClInclude Include="..\..\src\core\vertex.h" />
     <ClInclude Include="..\..\src\core\VertexDeclaration.h" />
     <ClInclude Include="..\..\src\core\VideoDriver.h" />

+ 12 - 0
oxygine/SDL/win32/oxygine_vs2010.vcxproj.filters

@@ -279,6 +279,12 @@
     <ClCompile Include="..\..\src\res\CreateResourceContext.cpp">
       <Filter>src\res</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\UberShaderProgram.cpp">
+      <Filter>src\core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\core\gl\ShaderProgramGL.cpp">
+      <Filter>src\gl</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\closure\closure.h">
@@ -599,6 +605,12 @@
     <ClInclude Include="..\..\src\core\Restorable.h">
       <Filter>src\core</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\UberShaderProgram.h">
+      <Filter>src\core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\core\gl\ShaderProgramGL.h">
+      <Filter>src\gl</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="ReadMe.txt" />

+ 1 - 0
oxygine/src/ColorRectSprite.cpp

@@ -23,6 +23,7 @@ namespace oxygine
 	{
 		_vstyle._apply(rs);
 		Diffuse df;
+		df.base = Renderer::white;
 		rs.renderer->setDiffuse(df);
 		RectF srcRect = getSrcRect();		
 		RectF destRect = getDestRect();

+ 1 - 1
oxygine/src/Multithreading.h

@@ -44,7 +44,7 @@ namespace oxygine
 
 	private:
 		static void* _staticThreadFunc(void* t);
-		void _threadFunc(LoadResourcesContextMT *ctx);
+		virtual void _threadFunc(LoadResourcesContextMT *ctx);
 		void doUpdate(const UpdateState &us);
 
 		Mem2Native _m2n;

+ 5 - 3
oxygine/src/core/Mem2Native.cpp

@@ -88,8 +88,7 @@ namespace oxygine
 
 				Rect srcRect(_prev.x, _prev.y, min(SIZE, textureRect.getWidth()), min(SIZE, textureRect.getHeight()));
 				srcRect.clip(textureRect);
-
-				_buffer.resize(srcRect.getWidth() * srcRect.getHeight() * 4);
+								
 
 				ImageData src = current.src->lock(&srcRect);
 		
@@ -97,9 +96,11 @@ namespace oxygine
 				ImageData dest;
 				if (srcRect != textureRect)
 				{
+					int pitch = srcRect.getWidth() * getBytesPerPixel(current.dest->getFormat());
+					_buffer.resize(srcRect.getHeight() * pitch);
 					dest = ImageData(
 						srcRect.getWidth(), srcRect.getHeight(),
-						srcRect.getWidth() * getBytesPerPixel(current.dest->getFormat()), 
+						pitch, 
 						current.dest->getFormat(), 
 						&_buffer[0]
 					);
@@ -112,6 +113,7 @@ namespace oxygine
 				}
 
 				current.dest->updateRegion(srcRect.pos.x, srcRect.pos.y, dest);
+				_buffer.clear();
 
 				_prev.x += SIZE;
 				if (_prev.x >= textureRect.getWidth())

+ 8 - 1
oxygine/src/core/Restorable.cpp

@@ -1,10 +1,12 @@
 #include "Restorable.h"
+#include "Mutex.h"
 #include <algorithm>
 
 namespace oxygine
 {
 	Restorable::restorable _restorable;
 	bool _restoring = false;
+	Mutex _mutex;
 
 	Restorable::restorable::iterator  findRestorable(Restorable *r)
 	{
@@ -57,13 +59,16 @@ namespace oxygine
 		if (_registered)
 			return;
 
+		MutexAutoLock al(_mutex);
+
 		OX_ASSERT(_restoring == false);
 		_cb = cb;
 		_userData = user;
 
 		_registered = true;
+		
 		restorable::iterator i = findRestorable(this);
-		OX_ASSERT(i == _restorable.end());
+		OX_ASSERT(i == _restorable.end());		
 		_restorable.push_back(this);
 	}
 
@@ -71,6 +76,8 @@ namespace oxygine
 	{
 		if (!_registered)
 			return;
+
+		MutexAutoLock al(_mutex);
 		OX_ASSERT(_restoring == false);
 		restorable::iterator i = findRestorable(this);
 		if (i != _restorable.end())

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

@@ -141,6 +141,11 @@ namespace oxygine
 			drawChildren(dc);
 		}
 
+		int _defMissing = '?';
+		void TextNode::setDefaultMissingSymbol(int v)
+		{
+			_defMissing = v;
+		}
 
 		void TextNode::_resize(Aligner &rd)
 		{
@@ -162,7 +167,7 @@ namespace oxygine
 							rd.nextLine();
 						else
 						{
-							s.gl = font->getGlyph('?');
+							s.gl = font->getGlyph(_defMissing);
 							i += rd.putSymbol(s);
 						}
 					}

+ 2 - 0
oxygine/src/text_utils/Node.h

@@ -59,6 +59,8 @@ namespace oxygine
 		class TextNode: public Node
 		{
 		public:
+			static void setDefaultMissingSymbol(int);
+
 			TextNode(const char *v);
 
 			text_data _data;