Преглед изворни кода

UWP project update to work with latest code, fixed crashes due to errant pointers in SceneMesh color uniforms, added ability to create Image from memory block, added way to save Image to PNG memory block, fixed FP16 texture crash, added ability for Object to save to XML string

Ivan Safrin пре 9 година
родитељ
комит
919c980fe3

+ 9 - 10
build/windows/universal/PolycodeCore/PolycodeCore.vcxproj

@@ -28,6 +28,8 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\..\..\include\Polycode.h" />
     <ClInclude Include="..\..\..\..\include\Polycode.h" />
+    <ClInclude Include="..\..\..\..\include\polycode\bindings\javascript\PolycodeJS.h" />
+    <ClInclude Include="..\..\..\..\include\polycode\bindings\javascript\PolycodeJSWrappers.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBasicFileProvider.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBasicFileProvider.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBezierCurve.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBezierCurve.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBone.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyBone.h" />
@@ -46,8 +48,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyEventDispatcher.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyEventDispatcher.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyEventHandler.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyEventHandler.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyFont.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyFont.h" />
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyFontGlyphSheet.h" />
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyFontManager.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGlobals.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGlobals.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGPUDrawBuffer.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGPUDrawBuffer.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyImage.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyImage.h" />
@@ -56,7 +56,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyLabel.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyLabel.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyLogger.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyLogger.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterial.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterial.h" />
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterialManager.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMatrix4.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMatrix4.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMesh.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMesh.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyObject.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyObject.h" />
@@ -74,7 +73,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyResourceManager.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyResourceManager.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyScene.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyScene.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneEntityInstance.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneEntityInstance.h" />
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneImage.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLabel.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLabel.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLight.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLight.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLine.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLine.h" />
@@ -84,6 +82,7 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneRenderTexture.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneRenderTexture.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneSound.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneSound.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneSprite.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneSprite.h" />
+    <ClInclude Include="..\..\..\..\include\polycode\core\PolyScript.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyServer.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyServer.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyServerWorld.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyServerWorld.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyShader.h" />
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyShader.h" />
@@ -110,6 +109,7 @@
     <ClInclude Include="resource.h" />
     <ClInclude Include="resource.h" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
+    <ClCompile Include="..\..\..\..\src\bindings\javascript\PolycodeJS.cpp" />
     <ClCompile Include="..\..\..\..\src\core\lodepng.cpp" />
     <ClCompile Include="..\..\..\..\src\core\lodepng.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyBasicFileProvider.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyBasicFileProvider.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyBezierCurve.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyBezierCurve.cpp" />
@@ -129,15 +129,12 @@
     <ClCompile Include="..\..\..\..\src\core\PolyEventDispatcher.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyEventDispatcher.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyEventHandler.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyEventHandler.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyFont.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyFont.cpp" />
-    <ClCompile Include="..\..\..\..\src\core\PolyFontGlyphSheet.cpp" />
-    <ClCompile Include="..\..\..\..\src\core\PolyFontManager.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyGPUDrawBuffer.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyGPUDrawBuffer.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyImage.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyImage.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyInputEvent.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyInputEvent.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyLabel.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyLabel.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyLogger.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyLogger.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMaterial.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMaterial.cpp" />
-    <ClCompile Include="..\..\..\..\src\core\PolyMaterialManager.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMatrix4.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMatrix4.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMesh.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyMesh.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyObject.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyObject.cpp" />
@@ -155,7 +152,6 @@
     <ClCompile Include="..\..\..\..\src\core\PolyResourceManager.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyResourceManager.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyScene.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyScene.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneEntityInstance.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneEntityInstance.cpp" />
-    <ClCompile Include="..\..\..\..\src\core\PolySceneImage.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLabel.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLabel.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLight.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLight.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLine.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneLine.cpp" />
@@ -165,6 +161,7 @@
     <ClCompile Include="..\..\..\..\src\core\PolySceneRenderTexture.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneRenderTexture.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneSound.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneSound.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneSprite.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySceneSprite.cpp" />
+    <ClCompile Include="..\..\..\..\src\core\PolyScript.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyServer.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyServer.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyShader.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolyShader.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySkeleton.cpp" />
     <ClCompile Include="..\..\..\..\src\core\PolySkeleton.cpp" />
@@ -188,6 +185,7 @@
     <ClCompile Include="..\..\..\..\src\core\tinyxml.cpp" />
     <ClCompile Include="..\..\..\..\src\core\tinyxml.cpp" />
     <ClCompile Include="..\..\..\..\src\core\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\..\..\src\core\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\..\..\src\core\tinyxmlparser.cpp" />
     <ClCompile Include="..\..\..\..\src\core\tinyxmlparser.cpp" />
+    <ClCompile Include="..\..\..\..\src\duktape\duktape.cpp" />
   </ItemGroup>
   </ItemGroup>
   <PropertyGroup Label="Globals">
   <PropertyGroup Label="Globals">
     <ProjectGuid>{ee7ae05c-9ae5-47fa-8a08-28e8d8d89b94}</ProjectGuid>
     <ProjectGuid>{ee7ae05c-9ae5-47fa-8a08-28e8d8d89b94}</ProjectGuid>
@@ -269,7 +267,7 @@
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <GenerateManifest>false</GenerateManifest>
     <GenerateManifest>false</GenerateManifest>
-    <IncludePath>../../../../include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\include;$(IncludePath)</IncludePath>
     <OutDir>..\..\..\..\lib\windows\x86</OutDir>
     <OutDir>..\..\..\..\lib\windows\x86</OutDir>
     <TargetName>Polycore</TargetName>
     <TargetName>Polycore</TargetName>
   </PropertyGroup>
   </PropertyGroup>
@@ -311,7 +309,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <CompileAsWinRT>false</CompileAsWinRT>
       <CompileAsWinRT>false</CompileAsWinRT>
       <SDLCheck>true</SDLCheck>
       <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINDOWS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NO_OGG;NO_LUA;_CRT_SECURE_NO_WARNINGS;_WINDOWS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <Optimization>Full</Optimization>
       <Optimization>Full</Optimization>
     </ClCompile>
     </ClCompile>
     <Link>
     <Link>
@@ -366,6 +364,7 @@
       <CompileAsWinRT>false</CompileAsWinRT>
       <CompileAsWinRT>false</CompileAsWinRT>
       <SDLCheck>true</SDLCheck>
       <SDLCheck>true</SDLCheck>
       <PreprocessorDefinitions>NO_OGG;_CRT_SECURE_NO_WARNINGS;_WINDOWS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>NO_OGG;_CRT_SECURE_NO_WARNINGS;_WINDOWS;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ShowIncludes>false</ShowIncludes>
     </ClCompile>
     </ClCompile>
     <Link>
     <Link>
       <SubSystem>Console</SubSystem>
       <SubSystem>Console</SubSystem>

+ 18 - 24
build/windows/universal/PolycodeCore/PolycodeCore.vcxproj.filters

@@ -66,12 +66,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyFont.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyFont.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyFontGlyphSheet.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyFontManager.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGlobals.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyGlobals.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
@@ -96,9 +90,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterial.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterial.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolyMaterialManager.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMatrix4.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyMatrix4.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
@@ -147,9 +138,6 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneEntityInstance.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneEntityInstance.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneImage.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLabel.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolySceneLabel.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
@@ -252,6 +240,15 @@
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyXAudio2AudioInterface.h">
     <ClInclude Include="..\..\..\..\include\polycode\core\PolyXAudio2AudioInterface.h">
       <Filter>Include</Filter>
       <Filter>Include</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\..\..\include\polycode\core\PolyScript.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\include\polycode\bindings\javascript\PolycodeJS.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\include\polycode\bindings\javascript\PolycodeJSWrappers.h">
+      <Filter>Include</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\..\..\src\core\PolyBasicFileProvider.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyBasicFileProvider.cpp">
@@ -308,12 +305,6 @@
     <ClCompile Include="..\..\..\..\src\core\PolyFont.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyFont.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\..\..\src\core\PolyFontGlyphSheet.cpp">
-      <Filter>Source</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\..\src\core\PolyFontManager.cpp">
-      <Filter>Source</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\..\src\core\PolyGPUDrawBuffer.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyGPUDrawBuffer.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
@@ -332,9 +323,6 @@
     <ClCompile Include="..\..\..\..\src\core\PolyMaterial.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyMaterial.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\..\..\src\core\PolyMaterialManager.cpp">
-      <Filter>Source</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\..\src\core\PolyMatrix4.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyMatrix4.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
@@ -383,9 +371,6 @@
     <ClCompile Include="..\..\..\..\src\core\PolySceneEntityInstance.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolySceneEntityInstance.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\..\..\src\core\PolySceneImage.cpp">
-      <Filter>Source</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\..\src\core\PolySceneLabel.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolySceneLabel.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
@@ -488,5 +473,14 @@
     <ClCompile Include="..\..\..\..\src\core\PolyXAudio2AudioInterface.cpp">
     <ClCompile Include="..\..\..\..\src\core\PolyXAudio2AudioInterface.cpp">
       <Filter>Source</Filter>
       <Filter>Source</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\..\..\src\duktape\duktape.cpp">
+      <Filter>Source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\src\core\PolyScript.cpp">
+      <Filter>Source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\src\bindings\javascript\PolycodeJS.cpp">
+      <Filter>Source</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 6 - 2
include/Polycode.h

@@ -94,8 +94,12 @@
  	#endif
  	#endif
 #else
 #else
     #if defined(_WINDOWS) && !defined(_MINGW)
     #if defined(_WINDOWS) && !defined(_MINGW)
-        #include "polycode/core/PolyWinCore.h"
-    #else
+		#if defined(WINAPI_FAMILY)
+			#include "polycode/core/PolyUWPCore.h"
+		#else
+			#include "polycode/core/PolyWinCore.h"
+		#endif
+	#else
 		#if defined(WINAPI_FAMILY)
 		#if defined(WINAPI_FAMILY)
 			#include "polycode/core/PolyUWPCore.h"
 			#include "polycode/core/PolyUWPCore.h"
 		#else
 		#else

+ 4 - 0
include/polycode/core/PolyImage.h

@@ -93,6 +93,10 @@ namespace Polycode {
 			* @return True if successfully loaded, false otherwise.
 			* @return True if successfully loaded, false otherwise.
 			*/			
 			*/			
 			bool loadImage(const String& fileName);
 			bool loadImage(const String& fileName);
+
+			bool loadFromMemory(const unsigned char *buffer, unsigned int length);
+
+			bool encodeToPNGData(unsigned char **data, unsigned int *size);
 		
 		
 			static POLYIGNORE TokenArray readTokens(char *line, const char *tokens);
 			static POLYIGNORE TokenArray readTokens(char *line, const char *tokens);
 			static POLYIGNORE void freeTokens(TokenArray tokens);
 			static POLYIGNORE void freeTokens(TokenArray tokens);

+ 2 - 0
include/polycode/core/PolyObject.h

@@ -331,6 +331,8 @@ namespace Polycode {
 		*/				
 		*/				
 		void saveToXML(const String& fileName);
 		void saveToXML(const String& fileName);
 
 
+		String saveToXMLString();
+
 		/**
 		/**
 		* Saves the object to an optimized binary file
 		* Saves the object to an optimized binary file
 		* @param fileName Path to the file to save to.
 		* @param fileName Path to the file to save to.

+ 2 - 0
include/polycode/core/PolySceneMesh.h

@@ -191,6 +191,8 @@ namespace Polycode {
 			std::shared_ptr<Material> material;
 			std::shared_ptr<Material> material;
 			std::shared_ptr<Skeleton> skeleton;
 			std::shared_ptr<Skeleton> skeleton;
 		
 		
+			std::vector<std::shared_ptr<LocalShaderParam> > colorParams;
+
 			std::vector<ShaderPass> shaderPasses;
 			std::vector<ShaderPass> shaderPasses;
 		
 		
 			String fileName;
 			String fileName;

+ 1 - 7
include/polycode/core/PolyUWPCore.h

@@ -33,13 +33,7 @@ THE SOFTWARE.
 #include <wrl\client.h>
 #include <wrl\client.h>
 #include <wrl.h>
 #include <wrl.h>
 
 
-#include <angle/GLES2/gl2.h>
-#include <angle/GLES2/gl2ext.h>
-#include <angle/EGL/egl.h>
-#include <angle/EGL/eglext.h>
-#include <angle/EGL/eglplatform.h>
-#include <angle/angle_windowsstore.h>
-
+#include "polycode/core/PolyOpenGLGraphicsInterface.h"
 #include "polycode/core/PolyXAudio2AudioInterface.h"
 #include "polycode/core/PolyXAudio2AudioInterface.h"
 
 
 using namespace concurrency;
 using namespace concurrency;

+ 23 - 0
src/core/PolyImage.cpp

@@ -562,6 +562,29 @@ void Image::freeTokens(TokenArray tokens) {
 	free(tokens.tokens);
 	free(tokens.tokens);
 }
 }
 
 
+bool Image::encodeToPNGData(unsigned char **data, unsigned int *size) {
+	unsigned int error = lodepng_encode32(data, size, (const unsigned char*)imageData, width, height);
+	if(error) {
+		return false;
+	}
+	return true;
+}
+
+bool Image::loadFromMemory(const unsigned char *buffer, unsigned int length) {
+	int x, y, n;
+	stbi_uc *data = stbi_load_from_memory((const stbi_uc*)buffer, length, &x, &y, &n, 4);
+
+	if (!data) {
+		return false;
+	}
+
+	imageType = Image::IMAGE_RGBA;
+	width = x;
+	height = y;
+	imageData = (char*)data;
+	return true;
+}
+
 bool Image::loadSTB(const String &fileName) {
 bool Image::loadSTB(const String &fileName) {
 	
 	
 	CoreFile *infile = Services()->getCore()->openFile(fileName.c_str(), "rb");
 	CoreFile *infile = Services()->getCore()->openFile(fileName.c_str(), "rb");

+ 13 - 0
src/core/PolyObject.cpp

@@ -95,6 +95,19 @@ Object::~Object() {
 	
 	
 }
 }
 
 
+String Object::saveToXMLString() {
+	TiXmlPrinter printer;
+	TiXmlDocument doc;
+	TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "", "");
+	doc.LinkEndChild(decl);
+
+	TiXmlElement * rootElement = createElementFromObjectEntry(&root);
+	doc.LinkEndChild(rootElement);
+	printer.SetIndent("    ");
+	doc.Accept(&printer);
+	return String(printer.CStr());
+}
+
 void Object::saveToXML(const String& fileName) {
 void Object::saveToXML(const String& fileName) {
 	TiXmlDocument doc;		
 	TiXmlDocument doc;		
 	TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );	 
 	TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );	 

+ 7 - 7
src/core/PolyRenderer.cpp

@@ -273,14 +273,14 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
 
 
 				shaderPass = buffer->drawCalls[i].shaderPasses[s];
 				shaderPass = buffer->drawCalls[i].shaderPasses[s];
 				
 				
-				ShaderBinding *localShaderBinding = &*buffer->drawCalls[i].shaderPasses[s].shaderBinding;
-				ShaderBinding *materialShaderBinding = &*shaderPass.materialShaderBinding;
+				std::shared_ptr<ShaderBinding> localShaderBinding = buffer->drawCalls[i].shaderPasses[s].shaderBinding;
+				std::shared_ptr<ShaderBinding> materialShaderBinding = shaderPass.materialShaderBinding;
 				
 				
 				
 				
 				if(buffer->globalMaterial && !buffer->drawCalls[i].options.forceMaterial) {
 				if(buffer->globalMaterial && !buffer->drawCalls[i].options.forceMaterial) {
 					if(s < buffer->globalMaterial->getNumShaderPasses()) {
 					if(s < buffer->globalMaterial->getNumShaderPasses()) {
 						shaderPass = buffer->globalMaterial->getShaderPass(s);
 						shaderPass = buffer->globalMaterial->getShaderPass(s);
-						localShaderBinding = &*shaderPass.shaderBinding;
+						localShaderBinding = shaderPass.shaderBinding;
 					}
 					}
 				}
 				}
 				
 				
@@ -322,13 +322,13 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
 				}
 				}
 				if(materialShaderBinding) {
 				if(materialShaderBinding) {
 					for(int p=0; p < materialShaderBinding->getNumLocalParams(); p++) {						   
 					for(int p=0; p < materialShaderBinding->getNumLocalParams(); p++) {						   
-						LocalShaderParam *localParam = &*materialShaderBinding->getLocalParam(p);
+						std::shared_ptr<LocalShaderParam> localParam = materialShaderBinding->getLocalParam(p);
 						if(localParam) {
 						if(localParam) {
 							if(!localParam->param) {
 							if(!localParam->param) {
 								localParam->param = shaderPass.shader->getParamPointer(localParam->name);
 								localParam->param = shaderPass.shader->getParamPointer(localParam->name);
 							}
 							}
 							if(localParam->param) {
 							if(localParam->param) {
-								graphicsInterface->setParamInShader(&*shaderPass.shader, localParam->param, localParam);
+								graphicsInterface->setParamInShader(&*shaderPass.shader, localParam->param, &*localParam);
 								Color c = localParam->getColor();
 								Color c = localParam->getColor();
 								
 								
 							}
 							}
@@ -341,13 +341,13 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
 				
 				
 				localShaderBinding->accessMutex->lock();
 				localShaderBinding->accessMutex->lock();
 				for(int p=0; p < localShaderBinding->getNumLocalParams(); p++) {
 				for(int p=0; p < localShaderBinding->getNumLocalParams(); p++) {
-					LocalShaderParam *localParam = &*localShaderBinding->getLocalParam(p);
+					std::shared_ptr<LocalShaderParam> localParam = localShaderBinding->getLocalParam(p);
 					if(localParam) {
 					if(localParam) {
 						if(!localParam->param) {
 						if(!localParam->param) {
 							localParam->param = shaderPass.shader->getParamPointer(localParam->name);
 							localParam->param = shaderPass.shader->getParamPointer(localParam->name);
 						}
 						}
 						if(localParam->param) {
 						if(localParam->param) {
-							graphicsInterface->setParamInShader(&*shaderPass.shader, localParam->param, localParam);
+							graphicsInterface->setParamInShader(&*shaderPass.shader, localParam->param, &*localParam);
 						}
 						}
 					}
 					}
 				}
 				}

+ 7 - 1
src/core/PolySceneMesh.cpp

@@ -145,6 +145,7 @@ std::shared_ptr<Mesh> SceneMesh::getMesh() {
 
 
 void SceneMesh::clearMaterial() {
 void SceneMesh::clearMaterial() {
 	shaderPasses.clear();
 	shaderPasses.clear();
+	colorParams.clear();
 	this->material = nullptr;
 	this->material = nullptr;
 }
 }
 
 
@@ -166,7 +167,8 @@ void SceneMesh::setMaterial(std::shared_ptr<Material> material) {
 		shaderPass.materialShaderBinding = shaderPass.shaderBinding;
 		shaderPass.materialShaderBinding = shaderPass.shaderBinding;
 		shaderPass.shaderBinding = std::make_shared<ShaderBinding>();
 		shaderPass.shaderBinding = std::make_shared<ShaderBinding>();
 		shaderPass.shaderBinding->targetShader = shaderPass.shader;
 		shaderPass.shaderBinding->targetShader = shaderPass.shader;
-		shaderPass.shaderBinding->addParamPointer(ProgramParam::PARAM_COLOR, "entityColor", &color);
+		std::shared_ptr<LocalShaderParam> colorParam = shaderPass.shaderBinding->addParam(ProgramParam::PARAM_COLOR, "entityColor");
+		colorParams.push_back(colorParam);
 		if(skeleton) {
 		if(skeleton) {
 		 //	  shaderPass.attributeArrays.push_back(&skeletalVertexPositions);
 		 //	  shaderPass.attributeArrays.push_back(&skeletalVertexPositions);
 		 //	  shaderPass.attributeArrays.push_back(&skeletalVertexNormals);
 		 //	  shaderPass.attributeArrays.push_back(&skeletalVertexNormals);
@@ -316,6 +318,10 @@ void SceneMesh::Render(GPUDrawBuffer *buffer) {
 		return;
 		return;
 	}
 	}
 	
 	
+	for (auto param : colorParams) {
+		param->setColor(color);
+	}
+
 	for(int i=0; i < mesh->getNumSubmeshes(); i++) {
 	for(int i=0; i < mesh->getNumSubmeshes(); i++) {
 		drawCall.options.alphaTest = alphaTest;
 		drawCall.options.alphaTest = alphaTest;
 		drawCall.options.linePointSize = lineWidth;
 		drawCall.options.linePointSize = lineWidth;

+ 4 - 4
src/core/PolyTexture.cpp

@@ -49,7 +49,7 @@ Texture::Texture(unsigned int width, unsigned int height, char *textureData,bool
 			pixelSize = 4;						
 			pixelSize = 4;						
 		break;
 		break;
 		case Image::IMAGE_FP16:		
 		case Image::IMAGE_FP16:		
-			pixelSize = 12;
+			pixelSize = 6;
 		break;
 		break;
 		default:
 		default:
 			pixelSize = 4;								
 			pixelSize = 4;								
@@ -100,7 +100,7 @@ void Texture::setImageData(Image *data) {
 			pixelSize = 4;						
 			pixelSize = 4;						
 		break;
 		break;
 		case Image::IMAGE_FP16:		
 		case Image::IMAGE_FP16:		
-			pixelSize = 12;
+			pixelSize = 6;
 		break;
 		break;
 		default:
 		default:
 			pixelSize = 4;								
 			pixelSize = 4;								
@@ -130,7 +130,7 @@ Texture::Texture(Image *image, bool clamp, bool createMipmaps) : Resource(Resour
 			pixelSize = 4;
 			pixelSize = 4;
 			break;
 			break;
 		case Image::IMAGE_FP16:
 		case Image::IMAGE_FP16:
-			pixelSize = 12;
+			pixelSize = 6;
 			break;
 			break;
 		default:
 		default:
 			pixelSize = 4;
 			pixelSize = 4;
@@ -148,7 +148,7 @@ Texture::Texture(Image *image, bool clamp, bool createMipmaps) : Resource(Resour
 
 
 	type = targetImage->getType();
 	type = targetImage->getType();
 	this->textureData = (char*)malloc(targetImage->getWidth()*targetImage->getHeight()*pixelSize);
 	this->textureData = (char*)malloc(targetImage->getWidth()*targetImage->getHeight()*pixelSize);
-	memcpy(this->textureData, targetImage->getPixels(), targetImage->getWidth()*targetImage->getHeight()*pixelSize);
+	memcpy(this->textureD ata, targetImage->getPixels(), targetImage->getWidth()*targetImage->getHeight()*pixelSize);
 
 
 	if (premultiplyAlphaOnLoad) {
 	if (premultiplyAlphaOnLoad) {
 		delete targetImage;
 		delete targetImage;

+ 1 - 1
src/core/PolyUWPCore.cpp

@@ -24,7 +24,6 @@ THE SOFTWARE.
 #include "polycode/core/PolyUWPCore.h"
 #include "polycode/core/PolyUWPCore.h"
 #include "polycode/core/PolyBasicFileProvider.h"
 #include "polycode/core/PolyBasicFileProvider.h"
 #include <ppltasks.h>
 #include <ppltasks.h>
-#include "polycode/core/PolyOpenGLGraphicsInterface.h"
 
 
 using namespace concurrency;
 using namespace concurrency;
 using namespace Polycode;
 using namespace Polycode;
@@ -84,6 +83,7 @@ void UWPCore::Render() {
 	renderer->beginFrame();
 	renderer->beginFrame();
 	services->Render(Polycode::Rectangle(0, 0, xRes, yRes));
 	services->Render(Polycode::Rectangle(0, 0, xRes, yRes));
 	renderer->endFrame();
 	renderer->endFrame();
+	//eglSwapBuffers(mEglDisplay, mEglSurface);
 }
 }