Răsfoiți Sursa

Got topleft 2D scenes working with the new renderer, updated IDE to compile with new renderer, still not 100% working

Ivan Safrin 10 ani în urmă
părinte
comite
b51f324a3d
32 a modificat fișierele cu 450 adăugiri și 282 ștergeri
  1. 2 0
      Core/Contents/Include/PolyCore.h
  2. 7 0
      Core/Contents/Include/PolyMaterialManager.h
  3. 18 0
      Core/Contents/Include/PolyMatrix4.h
  4. 2 1
      Core/Contents/Include/PolyOpenGLGraphicsInterface.h
  5. 4 15
      Core/Contents/Include/PolyRenderer.h
  6. 0 7
      Core/Contents/Include/PolySceneMesh.h
  7. 9 2
      Core/Contents/Include/PolyShader.h
  8. 6 3
      Core/Contents/Include/PolyTexture.h
  9. 1 2
      Core/Contents/Source/PolyCamera.cpp
  10. 3 2
      Core/Contents/Source/PolyCocoaCore.mm
  11. 6 0
      Core/Contents/Source/PolyCore.cpp
  12. 2 0
      Core/Contents/Source/PolyEntity.cpp
  13. 9 1
      Core/Contents/Source/PolyMaterialManager.cpp
  14. 36 21
      Core/Contents/Source/PolyOpenGLGraphicsInterface.cpp
  15. 6 7
      Core/Contents/Source/PolyRenderer.cpp
  16. 1 1
      Core/Contents/Source/PolyScene.cpp
  17. 5 2
      Core/Contents/Source/PolySceneImage.cpp
  18. 8 10
      Core/Contents/Source/PolySceneLabel.cpp
  19. 3 8
      Core/Contents/Source/PolySceneMesh.cpp
  20. 3 4
      Core/Contents/Source/PolySceneSprite.cpp
  21. 43 0
      Core/Contents/Source/PolyShader.cpp
  22. 1 6
      Core/Contents/Source/PolyTexture.cpp
  23. 115 79
      IDE/Build/Mac OS X/English.lproj/MainMenu.xib
  24. 2 1
      IDE/Contents/Source/EditorGrid.cpp
  25. 9 12
      IDE/Contents/Source/PolycodeEntityEditor.cpp
  26. 9 8
      IDE/Contents/Source/PolycodeIDEApp.cpp
  27. 19 11
      IDE/Contents/Source/PolycodeMaterialEditor.cpp
  28. 3 1
      IDE/Contents/Source/PolycodeMeshEditor.cpp
  29. 54 54
      IDE/Contents/Source/PolycodeProps.cpp
  30. 10 10
      IDE/Contents/Source/PolycodeSpriteEditor.cpp
  31. 4 1
      Modules/Contents/UI/Include/PolyUIElement.h
  32. 50 13
      Modules/Contents/UI/Source/PolyUIElement.cpp

+ 2 - 0
Core/Contents/Include/PolyCore.h

@@ -454,6 +454,8 @@ namespace Polycode {
 		int yRes;
 		int yRes;
         bool vSync;
         bool vSync;
         
         
+        bool coreResized;
+        
 		int monitorIndex;
 		int monitorIndex;
 		
 		
 		int frames;
 		int frames;

+ 7 - 0
Core/Contents/Include/PolyMaterialManager.h

@@ -81,6 +81,9 @@ namespace Polycode {
 			std::vector<Material*> loadMaterialsFromFile(ResourcePool *resourcePool, const String &fileName);
 			std::vector<Material*> loadMaterialsFromFile(ResourcePool *resourcePool, const String &fileName);
 			std::vector<Shader*> loadShadersFromFile(ResourcePool *resourcePool, String fileName);
 			std::vector<Shader*> loadShadersFromFile(ResourcePool *resourcePool, String fileName);
 			std::vector<Cubemap*> loadCubemapsFromFile(String fileName);
 			std::vector<Cubemap*> loadCubemapsFromFile(String fileName);
+        
+            void setAnisotropyAmount(unsigned int anisotropy);
+            void setTextureFilteringMode(unsigned int textureFilteringMode);
 						
 						
 			void addMaterial(Material *material);
 			void addMaterial(Material *material);
 			void addShader(Shader *shader);
 			void addShader(Shader *shader);
@@ -94,6 +97,10 @@ namespace Polycode {
 			bool keepTextureData;
 			bool keepTextureData;
 			
 			
 		private:
 		private:
+        
+            unsigned int textureFilteringMode;
+            unsigned int anisotropyAmount;
+        
 			std::vector<Texture*> textures;
 			std::vector<Texture*> textures;
 			std::vector<Material*> materials;
 			std::vector<Material*> materials;
 			std::vector<Shader*> shaders;
 			std::vector<Shader*> shaders;

+ 18 - 0
Core/Contents/Include/PolyMatrix4.h

@@ -226,6 +226,20 @@ namespace Polycode {
 			//@}
 			//@}
 			// ----------------------------------------------------------------------------------------------------------------
 			// ----------------------------------------------------------------------------------------------------------------
 
 
+        
+            /**
+             * Translates the position in the matrix.
+             * @param x X coordinate.
+             * @param y Y coordinate.
+             * @param z Z coordinate.
+             */
+            inline void Translate(Number x, Number y, Number z) {
+                m[3][0] += x;
+                m[3][1] += y;
+                m[3][2] += z;
+            }
+        
+        
 			/**
 			/**
 			* Sets the position in the matrix.
 			* Sets the position in the matrix.
 			* @param x X coordinate.
 			* @param x X coordinate.
@@ -326,6 +340,10 @@ namespace Polycode {
                 m[0][0] = 2.0/(right-left);
                 m[0][0] = 2.0/(right-left);
                 m[1][1] = 2.0/(top-bottom);
                 m[1][1] = 2.0/(top-bottom);
                 m[2][2] = -2.0/(zFar-zNear);
                 m[2][2] = -2.0/(zFar-zNear);
+                
+                m[3][0] = -((right+left)/(right-left));
+                m[3][1] = -((top+bottom)/(top-bottom));
+                m[3][2] = -((zFar+zNear)/(zFar-zNear));
             }
             }
 
 
             inline void setProjection(Number fov, Number aspect, Number zNear, Number zFar) {
             inline void setProjection(Number fov, Number aspect, Number zNear, Number zFar) {

+ 2 - 1
Core/Contents/Include/PolyOpenGLGraphicsInterface.h

@@ -56,7 +56,7 @@ namespace Polycode {
 
 
 		// implementation
 		// implementation
         
         
-        void createTexture(Texture *texture, int filteringMode, int anisotropy, bool createMipmaps);
+        void createTexture(Texture *texture);
         void setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height);
         void setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height);
         void clearBuffers(const Color &clearColor, bool colorBuffer, bool depthBuffer, bool stencilBuffer);
         void clearBuffers(const Color &clearColor, bool colorBuffer, bool depthBuffer, bool stencilBuffer);
         void setParamInShader(Shader *shader, ProgramParam *param, LocalShaderParam *localParam);
         void setParamInShader(Shader *shader, ProgramParam *param, LocalShaderParam *localParam);
@@ -76,6 +76,7 @@ namespace Polycode {
         
         
         void enableDepthTest(bool val);
         void enableDepthTest(bool val);
         void enableDepthWrite(bool val);
         void enableDepthWrite(bool val);
+        void enableBackfaceCulling(bool val);
         
         
 	protected:
 	protected:
 		
 		

+ 4 - 15
Core/Contents/Include/PolyRenderer.h

@@ -43,13 +43,12 @@ namespace Polycode {
             virtual void setParamInShader(Shader *shader, ProgramParam *param, LocalShaderParam *localParam) = 0;
             virtual void setParamInShader(Shader *shader, ProgramParam *param, LocalShaderParam *localParam) = 0;
             virtual void setAttributeInShader(Shader *shader, ProgramAttribute *attribute, AttributeBinding *attributeBinding) = 0;
             virtual void setAttributeInShader(Shader *shader, ProgramAttribute *attribute, AttributeBinding *attributeBinding) = 0;
             virtual void disableAttribute(Shader *shader, const ProgramAttribute &attribute) = 0;
             virtual void disableAttribute(Shader *shader, const ProgramAttribute &attribute) = 0;
-            virtual void createTexture(Texture *texture, int filteringMode, int anisotropy, bool createMipmaps) = 0;
+            virtual void createTexture(Texture *texture) = 0;
             virtual void setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height) = 0;
             virtual void setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height) = 0;
             virtual void clearBuffers(const Color &clearColor, bool colorBuffer, bool depthBuffer, bool stencilBuffer) = 0;
             virtual void clearBuffers(const Color &clearColor, bool colorBuffer, bool depthBuffer, bool stencilBuffer) = 0;
             virtual void createProgram(ShaderProgram *program) = 0;
             virtual void createProgram(ShaderProgram *program) = 0;
             virtual void createShader(Shader *shader) = 0;
             virtual void createShader(Shader *shader) = 0;
             virtual void useShader(Shader *shader) = 0;
             virtual void useShader(Shader *shader) = 0;
-            virtual void setBlendingMode(unsigned int blendingMode) = 0;
         
         
             virtual void createVertexBuffer(VertexDataArray *dataArray) = 0;
             virtual void createVertexBuffer(VertexDataArray *dataArray) = 0;
             virtual void createIndexBuffer(IndexDataArray *dataArray) = 0;
             virtual void createIndexBuffer(IndexDataArray *dataArray) = 0;
@@ -60,6 +59,8 @@ namespace Polycode {
         
         
             virtual void enableDepthTest(bool val) = 0;
             virtual void enableDepthTest(bool val) = 0;
             virtual void enableDepthWrite(bool val) = 0;
             virtual void enableDepthWrite(bool val) = 0;
+            virtual void setBlendingMode(unsigned int blendingMode) = 0;
+            virtual void enableBackfaceCulling(bool val) = 0;
         
         
             virtual void beginDrawCall() = 0;
             virtual void beginDrawCall() = 0;
         
         
@@ -71,14 +72,6 @@ namespace Polycode {
             void *data;
             void *data;
     };
     };
     
     
-    class _PolyExport RendererOptions {
-        public:
-        
-        int filteringMode;
-        int anisotropy;
-        bool createMipmaps;
-    };
-    
     class RenderThreadDebugInfo {
     class RenderThreadDebugInfo {
         public:
         public:
             unsigned int buffersProcessed;
             unsigned int buffersProcessed;
@@ -116,7 +109,6 @@ namespace Polycode {
             RenderThreadDebugInfo currentDebugFrameInfo;
             RenderThreadDebugInfo currentDebugFrameInfo;
         
         
             Core *core;
             Core *core;
-            RendererOptions options;
             CoreMutex *jobQueueMutex;
             CoreMutex *jobQueueMutex;
             std::queue<RendererThreadJob> jobQueue;
             std::queue<RendererThreadJob> jobQueue;
             GraphicsInterface *interface;
             GraphicsInterface *interface;
@@ -137,7 +129,7 @@ namespace Polycode {
         RenderThread *getRenderThread();
         RenderThread *getRenderThread();
 
 
         Cubemap *createCubemap(Texture *t0, Texture *t1, Texture *t2, Texture *t3, Texture *t4, Texture *t5);
         Cubemap *createCubemap(Texture *t0, Texture *t1, Texture *t2, Texture *t3, Texture *t4, Texture *t5);
-        Texture *createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type=Image::IMAGE_RGBA);
+        Texture *createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type, unsigned int filteringMode, unsigned int anisotropy);
         void destroyTexture(Texture *texture);
         void destroyTexture(Texture *texture);
         void createRenderTextures(Texture **colorBuffer, Texture **depthBuffer, int width, int height, bool floatingPointBuffer);
         void createRenderTextures(Texture **colorBuffer, Texture **depthBuffer, int width, int height, bool floatingPointBuffer);
         
         
@@ -166,9 +158,6 @@ namespace Polycode {
         static const int DEPTH_FUNCTION_GREATER = 0;
         static const int DEPTH_FUNCTION_GREATER = 0;
         static const int DEPTH_FUNCTION_LEQUAL = 1;
         static const int DEPTH_FUNCTION_LEQUAL = 1;
         
         
-        static const int TEX_FILTERING_NEAREST = 0;
-        static const int TEX_FILTERING_LINEAR = 1;
-        
         
         
 	protected:
 	protected:
         
         

+ 0 - 7
Core/Contents/Include/PolySceneMesh.h

@@ -94,12 +94,6 @@ namespace Polycode {
 			* @param fileName Filename to load the skeleton from.
 			* @param fileName Filename to load the skeleton from.
 			*/
 			*/
 			Skeleton *loadSkeleton(const String& fileName);
 			Skeleton *loadSkeleton(const String& fileName);
-			
-			/**
-			* Sets the texture from an existing Texture instance.
-			* @param texture Texture to set.
-			*/			
-			void setTexture(Texture *texture);
 
 
 			/**
 			/**
 			* Clears the currently applied material
 			* Clears the currently applied material
@@ -230,7 +224,6 @@ namespace Polycode {
 		
 		
 			bool useVertexBuffer;
 			bool useVertexBuffer;
 			Mesh *mesh;
 			Mesh *mesh;
-			Texture *texture;
 			Material *material;
 			Material *material;
 			Skeleton *skeleton;
 			Skeleton *skeleton;
 			ShaderBinding *localShaderOptions;
 			ShaderBinding *localShaderOptions;

+ 9 - 2
Core/Contents/Include/PolyShader.h

@@ -170,6 +170,9 @@ namespace Polycode {
             void setTexture(Texture *texture);
             void setTexture(Texture *texture);
             Texture *getTexture();
             Texture *getTexture();
         
         
+            void setCubemap(Cubemap *cubemap);
+            Cubemap *getCubemap();
+        
             void setParamValueFromString(int type, String pvalue);
             void setParamValueFromString(int type, String pvalue);
 	};
 	};
     
     
@@ -206,11 +209,15 @@ namespace Polycode {
 			unsigned int getNumLocalParams();
 			unsigned int getNumLocalParams();
 			LocalShaderParam *getLocalParam(unsigned int index);
 			LocalShaderParam *getLocalParam(unsigned int index);
 			LocalShaderParam *getLocalParamByName(const String& name);
 			LocalShaderParam *getLocalParamByName(const String& name);
-
+        
+            void removeParam(const String &name);
+        
+            Texture *loadTextureForParam(const String &paramName, const String &fileName);
+            void setTextureForParam(const String &paramName, Texture *texture);
+            void setCubemapForParam(const String &paramName, Cubemap *cubemap);
         
         
             unsigned int getNumAttributeBindings();
             unsigned int getNumAttributeBindings();
             AttributeBinding *getAttributeBinding(unsigned int index);
             AttributeBinding *getAttributeBinding(unsigned int index);
-
         
         
             AttributeBinding *addAttributeBinding(const String &name, VertexDataArray *dataArray);
             AttributeBinding *addAttributeBinding(const String &name, VertexDataArray *dataArray);
             AttributeBinding *getAttributeBindingByName(const String &name);
             AttributeBinding *getAttributeBindingByName(const String &name);

+ 6 - 3
Core/Contents/Include/PolyTexture.h

@@ -48,13 +48,16 @@ namespace Polycode {
 			bool clamp;
 			bool clamp;
 			char *textureData;
 			char *textureData;
             int type;
             int type;
+            int filteringMode;
+            bool createMipmaps;
+            unsigned int anisotropy;
+        
+            static const int FILTERING_NEAREST = 0;
+            static const int FILTERING_LINEAR = 1;
         
         
 		protected:
 		protected:
 
 
 			int pixelSize;
 			int pixelSize;
-			int filteringMode;
-		
-			bool createMipmaps;
 			int width;
 			int width;
 			int height;
 			int height;
 	};
 	};

+ 1 - 2
Core/Contents/Source/PolyCamera.cpp

@@ -501,11 +501,10 @@ void Camera::setProjectionMatrix(Matrix4 matrix) {
 }
 }
 
 
 void Camera::setOrthoMatrix(Matrix4 &matrix, Number xSize, Number ySize, Number _near, Number _far, bool centered) {
 void Camera::setOrthoMatrix(Matrix4 &matrix, Number xSize, Number ySize, Number _near, Number _far, bool centered) {
-
     if(centered) {
     if(centered) {
         matrix.setOrthoProjection(-xSize*0.5, xSize*0.5, -ySize*0.5, ySize*0.5, _near, _far);
         matrix.setOrthoProjection(-xSize*0.5, xSize*0.5, -ySize*0.5, ySize*0.5, _near, _far);
     } else {
     } else {
-        matrix.setOrthoProjection(0.0f, xSize, 0, ySize, _near, _far);
+        matrix.setOrthoProjection(0.0f, xSize, 0.0, ySize, _near, _far);
     }
     }
 }
 }
 
 

+ 3 - 2
Core/Contents/Source/PolyCocoaCore.mm

@@ -209,7 +209,6 @@ void CocoaCore::handleVideoModeChange(VideoModeChangeInfo *modeInfo) {
 	[context setView: (NSView*)glView];					
 	[context setView: (NSView*)glView];					
 		
 		
 	renderer->setAnisotropyAmount(anisotropyLevel);
 	renderer->setAnisotropyAmount(anisotropyLevel);
-	dispatchEvent(new Event(), EVENT_CORE_RESIZE);	
 
 
 	[[glView window] setContentSize: NSMakeSize(xRes, yRes)];
 	[[glView window] setContentSize: NSMakeSize(xRes, yRes)];
 		
 		
@@ -258,6 +257,8 @@ void CocoaCore::handleVideoModeChange(VideoModeChangeInfo *modeInfo) {
 	} else {
 	} else {
 		glDisable( GL_MULTISAMPLE_ARB );			
 		glDisable( GL_MULTISAMPLE_ARB );			
 	}
 	}
+    
+    coreResized = true;
 }
 }
 
 
 void CocoaCore::openFileWithApplication(String file, String application) {
 void CocoaCore::openFileWithApplication(String file, String application) {
@@ -308,7 +309,7 @@ void CocoaCore::resizeTo(int xRes, int yRes) {
 	this->yRes = yRes;
 	this->yRes = yRes;
     // RENDERER_TODO
     // RENDERER_TODO
 //	renderer->Resize(xRes, yRes);
 //	renderer->Resize(xRes, yRes);
-	dispatchEvent(new Event(), EVENT_CORE_RESIZE);	
+    coreResized = true;
 }
 }
 
 
 CocoaCore::~CocoaCore() {
 CocoaCore::~CocoaCore() {

+ 6 - 0
Core/Contents/Source/PolyCore.cpp

@@ -57,6 +57,7 @@ namespace Polycode {
 		int _hz;
 		int _hz;
 		getScreenInfo(&defaultScreenWidth, &defaultScreenHeight, &_hz);
 		getScreenInfo(&defaultScreenWidth, &defaultScreenHeight, &_hz);
 	
 	
+        coreResized = false;
         
         
         this->aaLevel = aaLevel;
         this->aaLevel = aaLevel;
         this->anisotropyLevel = anisotropyLevel;
         this->anisotropyLevel = anisotropyLevel;
@@ -262,6 +263,11 @@ namespace Polycode {
             fixedElapsed = maxFixedElapsed;
             fixedElapsed = maxFixedElapsed;
         }
         }
         
         
+        if(coreResized) {
+            coreResized = false;
+            dispatchEvent(new Event(), EVENT_CORE_RESIZE);
+        }
+        
 		services->Update(elapsed);
 		services->Update(elapsed);
 		
 		
 		if(frameTicks-lastFPSTicks >= 1000) {
 		if(frameTicks-lastFPSTicks >= 1000) {

+ 2 - 0
Core/Contents/Source/PolyEntity.cpp

@@ -519,6 +519,8 @@ void Entity::transformAndRender(GPUDrawBuffer *buffer) {
         drawCall.modelMatrix = getConcatenatedMatrix();
         drawCall.modelMatrix = getConcatenatedMatrix();
     }
     }
 
 
+    drawCall.modelMatrix.Translate(-anchorPoint.x * bBox.x * 0.5, -anchorPoint.y * bBox.y * 0.5 * yAdjust, -anchorPoint.z * bBox.z * 0.5);
+    
     /*
     /*
 	if(billboardMode) {
 	if(billboardMode) {
 		if(billboardIgnoreScale) {
 		if(billboardIgnoreScale) {

+ 9 - 1
Core/Contents/Source/PolyMaterialManager.cpp

@@ -148,7 +148,7 @@ Texture *MaterialManager::createNewTexture(int width, int height, bool clamp, bo
 }
 }
 
 
 Texture *MaterialManager::createTexture(int width, int height, char *imageData, bool clamp, bool createMipmaps, int type) {
 Texture *MaterialManager::createTexture(int width, int height, char *imageData, bool clamp, bool createMipmaps, int type) {
-	Texture *newTexture = CoreServices::getInstance()->getRenderer()->createTexture(width, height, imageData,clamp, createMipmaps, type);
+	Texture *newTexture = CoreServices::getInstance()->getRenderer()->createTexture(width, height, imageData,clamp, createMipmaps, type, textureFilteringMode, anisotropyAmount);
 	textures.push_back(newTexture);
 	textures.push_back(newTexture);
     if(!keepTextureData) {
     if(!keepTextureData) {
         free(newTexture->textureData);
         free(newTexture->textureData);
@@ -157,6 +157,14 @@ Texture *MaterialManager::createTexture(int width, int height, char *imageData,
 	return newTexture;
 	return newTexture;
 }
 }
 
 
+void MaterialManager::setAnisotropyAmount(unsigned int anisotropy) {
+    this->anisotropyAmount = anisotropy;
+}
+
+void MaterialManager::setTextureFilteringMode(unsigned int textureFilteringMode) {
+    this->textureFilteringMode = textureFilteringMode;
+}
+
 Texture *MaterialManager::createTextureFromImage(Image *image, bool clamp, bool createMipmaps) {
 Texture *MaterialManager::createTextureFromImage(Image *image, bool clamp, bool createMipmaps) {
 	Texture *newTexture;
 	Texture *newTexture;
 	newTexture = createTexture(image->getWidth(), image->getHeight(), image->getPixels(),clamp, createMipmaps, image->getType());
 	newTexture = createTexture(image->getWidth(), image->getHeight(), image->getPixels(),clamp, createMipmaps, image->getType());

+ 36 - 21
Core/Contents/Source/PolyOpenGLGraphicsInterface.cpp

@@ -108,9 +108,8 @@ void OpenGLGraphicsInterface::setParamInShader(Shader *shader, ProgramParam *par
         break;
         break;
         case ProgramParam::PARAM_TEXTURE:
         case ProgramParam::PARAM_TEXTURE:
             glEnable(GL_TEXTURE_2D);
             glEnable(GL_TEXTURE_2D);
-            glUniform1i(paramLocation, textureIndex);
             glActiveTexture(GL_TEXTURE0 + textureIndex);
             glActiveTexture(GL_TEXTURE0 + textureIndex);
-            
+            glUniform1i(paramLocation, textureIndex);
             if(localParam) {
             if(localParam) {
                 Texture* texture = localParam->getTexture();
                 Texture* texture = localParam->getTexture();
                 glBindTexture(GL_TEXTURE_2D, *((GLuint*) texture->platformData));
                 glBindTexture(GL_TEXTURE_2D, *((GLuint*) texture->platformData));
@@ -229,7 +228,7 @@ void OpenGLGraphicsInterface::drawArrays(int type, unsigned int vertexCount) {
     glDrawArrays(getGLDrawMode(type), 0, vertexCount);
     glDrawArrays(getGLDrawMode(type), 0, vertexCount);
 }
 }
 
 
-void OpenGLGraphicsInterface::createTexture(Texture *texture, int filteringMode, int anisotropy, bool createMipmaps) {
+void OpenGLGraphicsInterface::createTexture(Texture *texture) {
     if(!texture->platformData) {
     if(!texture->platformData) {
         texture->platformData = (void*) new GLuint;
         texture->platformData = (void*) new GLuint;
         glGenTextures(1, (GLuint*)texture->platformData);
         glGenTextures(1, (GLuint*)texture->platformData);
@@ -270,35 +269,43 @@ void OpenGLGraphicsInterface::createTexture(Texture *texture, int filteringMode,
     }
     }
     
     
     
     
-    switch(filteringMode) {
-        case Renderer::TEX_FILTERING_LINEAR:
+    switch(texture->filteringMode) {
+        case Texture::FILTERING_LINEAR:
             
             
-            if(anisotropy > 0) {
-                glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy);
+            if(texture->anisotropy > 0) {
+                glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, texture->anisotropy);
             }
             }
             
             
-            if(createMipmaps) {
-                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+            
+            if(texture->createMipmaps) {
                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-                if(texture->getTextureData()) {
-                    gluBuild2DMipmaps(GL_TEXTURE_2D, glTextureFormat, texture->getWidth(), texture->getHeight(), glTextureType, pixelType, texture->getTextureData());
-                }
             } else {
             } else {
-                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-                if(texture->getTextureData()) {
-                    glTexImage2D(GL_TEXTURE_2D, 0, glTextureFormat, texture->getWidth(), texture->getHeight(), 0, glTextureType, pixelType, texture->getTextureData());
-                }
             }
             }
+            
             break;
             break;
-        case Renderer::TEX_FILTERING_NEAREST:
+        case Texture::FILTERING_NEAREST:
             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);		
-            if(texture->getTextureData()) {
-                glTexImage2D(GL_TEXTURE_2D, 0, glTextureFormat, texture->getWidth(), texture->getHeight(), 0, glTextureType, pixelType, texture->getTextureData());
-            }			
+            
+            if(texture->createMipmaps) {
+                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
+            } else {
+                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            }
             break;
             break;
     }
     }
+    
+    if(texture->getTextureData()) {
+        glTexImage2D(GL_TEXTURE_2D, 0, glTextureFormat, texture->getWidth(), texture->getHeight(), 0, glTextureType, pixelType, texture->getTextureData());
+    }
+    
+    
+    if(texture->createMipmaps) {
+        glGenerateMipmap(GL_TEXTURE_2D);
+    }
+    
+    glBindTexture(GL_TEXTURE_2D, 0);
 }
 }
 
 
 void OpenGLGraphicsInterface::setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height) {
 void OpenGLGraphicsInterface::setViewport(unsigned int x,unsigned  int y,unsigned  int width, unsigned height) {
@@ -471,6 +478,14 @@ void OpenGLGraphicsInterface::createShader(Shader *shader) {
     
     
 }
 }
 
 
+void OpenGLGraphicsInterface::enableBackfaceCulling(bool val) {
+    if(val) {
+        glEnable(GL_CULL_FACE);
+    } else {
+        glDisable(GL_CULL_FACE);
+    }
+}
+
 void OpenGLGraphicsInterface::enableDepthTest(bool val) {
 void OpenGLGraphicsInterface::enableDepthTest(bool val) {
     if(val) {
     if(val) {
         glEnable(GL_DEPTH_TEST);
         glEnable(GL_DEPTH_TEST);

+ 6 - 7
Core/Contents/Source/PolyRenderer.cpp

@@ -41,10 +41,6 @@ GraphicsInterface::GraphicsInterface() {
 
 
 RenderThread::RenderThread() : interface(NULL) {
 RenderThread::RenderThread() : interface(NULL) {
     
     
-    options.filteringMode = Renderer::TEX_FILTERING_LINEAR;
-    options.anisotropy = 0;
-    options.createMipmaps = true;
-    
     rendererShaderBinding = new ShaderBinding();
     rendererShaderBinding = new ShaderBinding();
     
     
     projectionMatrixParam = rendererShaderBinding->addParam(ProgramParam::PARAM_MATRIX, "projectionMatrix");
     projectionMatrixParam = rendererShaderBinding->addParam(ProgramParam::PARAM_MATRIX, "projectionMatrix");
@@ -87,6 +83,7 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
         interface->setBlendingMode(buffer->drawCalls[i].options.blendingMode);
         interface->setBlendingMode(buffer->drawCalls[i].options.blendingMode);
         interface->enableDepthTest(buffer->drawCalls[i].options.depthTest);
         interface->enableDepthTest(buffer->drawCalls[i].options.depthTest);
         interface->enableDepthWrite(buffer->drawCalls[i].options.depthWrite);
         interface->enableDepthWrite(buffer->drawCalls[i].options.depthWrite);
+        interface->enableBackfaceCulling(buffer->drawCalls[i].options.backfaceCull);
         
         
         modelMatrixParam->setMatrix4(buffer->drawCalls[i].modelMatrix);
         modelMatrixParam->setMatrix4(buffer->drawCalls[i].modelMatrix);
         
         
@@ -198,7 +195,7 @@ void RenderThread::processJob(const RendererThreadJob &job) {
         case JOB_CREATE_TEXTURE:
         case JOB_CREATE_TEXTURE:
         {
         {
             Texture *texture = (Texture*) job.data;
             Texture *texture = (Texture*) job.data;
-            interface->createTexture(texture, options.filteringMode, options.anisotropy, options.createMipmaps);
+            interface->createTexture(texture);
         }
         }
         break;
         break;
         case JOB_PROCESS_DRAW_BUFFER:
         case JOB_PROCESS_DRAW_BUFFER:
@@ -328,8 +325,10 @@ void Renderer::endFrame() {
     renderThread->enqueueJob(RenderThread::JOB_END_FRAME, NULL);
     renderThread->enqueueJob(RenderThread::JOB_END_FRAME, NULL);
 }
 }
 
 
-Texture *Renderer::createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type) {
+Texture *Renderer::createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type, unsigned int filteringMode, unsigned int anisotropy) {
     Texture *texture = new Texture(width, height, textureData, clamp, createMipmaps, type);
     Texture *texture = new Texture(width, height, textureData, clamp, createMipmaps, type);
+    texture->filteringMode = filteringMode;
+    texture->anisotropy = anisotropy;
     renderThread->enqueueJob(RenderThread::JOB_CREATE_TEXTURE, (void*)texture);
     renderThread->enqueueJob(RenderThread::JOB_CREATE_TEXTURE, (void*)texture);
     return texture;
     return texture;
 }
 }
@@ -364,7 +363,7 @@ void Renderer::createVertexBuffers(Mesh *mesh) {
 void Renderer::destroyTexture(Texture *texture) {
 void Renderer::destroyTexture(Texture *texture) {
     
     
 }
 }
-void createRenderTextures(Texture **colorBuffer, Texture **depthBuffer, int width, int height, bool floatingPointBuffer) {
+void Renderer::createRenderTextures(Texture **colorBuffer, Texture **depthBuffer, int width, int height, bool floatingPointBuffer) {
     
     
 }
 }
 
 

+ 1 - 1
Core/Contents/Source/PolyScene.cpp

@@ -98,7 +98,7 @@ void Scene::setSceneType(int newType) {
             defaultCamera->setOrthoSizeMode(Camera::ORTHO_SIZE_VIEWPORT);
             defaultCamera->setOrthoSizeMode(Camera::ORTHO_SIZE_VIEWPORT);
 			defaultCamera->topLeftOrtho = true;
 			defaultCamera->topLeftOrtho = true;
 			rootEntity.setInverseY(true);
 			rootEntity.setInverseY(true);
-            rootEntity.setPositionY(-CoreServices::getInstance()->getCore()->getYRes());            
+            rootEntity.setPositionY(-CoreServices::getInstance()->getCore()->getYRes());
             break;
             break;
 		case SCENE_3D:
 		case SCENE_3D:
 			defaultCamera->setClippingPlanes(1.0, 1000.0);
 			defaultCamera->setClippingPlanes(1.0, 1000.0);

+ 5 - 2
Core/Contents/Source/PolySceneImage.cpp

@@ -23,6 +23,7 @@
 #include "PolySceneImage.h"
 #include "PolySceneImage.h"
 #include "PolyMesh.h"
 #include "PolyMesh.h"
 #include "PolyTexture.h"
 #include "PolyTexture.h"
+#include "PolyCoreServices.h"
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
@@ -37,7 +38,7 @@ SceneImage* SceneImage::SceneImageWithTexture(Texture *texture) {
 SceneImage::SceneImage(const String& fileName) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
 SceneImage::SceneImage(const String& fileName) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
     
     
     // RENDERER_TODO
     // RENDERER_TODO
-	//loadTexture(fileName);
+    Texture *texture = localShaderOptions->loadTextureForParam("diffuse", fileName);
 
 
 	imageWidth = texture->getWidth();
 	imageWidth = texture->getWidth();
 	imageHeight = texture->getHeight();
 	imageHeight = texture->getHeight();
@@ -50,6 +51,8 @@ SceneImage::SceneImage(const String& fileName) : ScenePrimitive(ScenePrimitive::
 SceneImage::SceneImage(Image *image) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
 SceneImage::SceneImage(Image *image) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
     // RENDERER_TODO
     // RENDERER_TODO
 	//loadTextureFromImage(image);
 	//loadTextureFromImage(image);
+    Texture *texture = Services()->getMaterialManager()->createTextureFromImage(image);
+    localShaderOptions->setTextureForParam("diffuse", texture);
 
 
 	imageWidth = texture->getWidth();
 	imageWidth = texture->getWidth();
 	imageHeight = texture->getHeight();
 	imageHeight = texture->getHeight();
@@ -60,7 +63,7 @@ SceneImage::SceneImage(Image *image) : ScenePrimitive(ScenePrimitive::TYPE_VPLAN
 }
 }
 
 
 SceneImage::SceneImage(Texture *texture) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1)  {
 SceneImage::SceneImage(Texture *texture) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1)  {
-	setTexture(texture);
+    localShaderOptions->setTextureForParam("diffuse", texture);
 
 
 	imageWidth = texture->getWidth();
 	imageWidth = texture->getWidth();
 	imageHeight = texture->getHeight();
 	imageHeight = texture->getHeight();

+ 8 - 10
Core/Contents/Source/PolySceneLabel.cpp

@@ -101,9 +101,14 @@ Number SceneLabel::getLabelActualHeight() {
 void SceneLabel::updateFromLabel() {
 void SceneLabel::updateFromLabel() {
 
 
 	MaterialManager *materialManager = CoreServices::getInstance()->getMaterialManager();
 	MaterialManager *materialManager = CoreServices::getInstance()->getMaterialManager();
-	if(texture)
+    
+    // RENDERER_TODO:
+    /*
+    if(texture) {
 		materialManager->deleteTexture(texture);
 		materialManager->deleteTexture(texture);
-
+    }
+    */
+    Texture *texture;
 	if(SceneLabel::createMipmapsForLabels) {
 	if(SceneLabel::createMipmapsForLabels) {
 		texture = materialManager->createTextureFromImage(label, materialManager->clampDefault, materialManager->mipmapsDefault);	
 		texture = materialManager->createTextureFromImage(label, materialManager->clampDefault, materialManager->mipmapsDefault);	
 	} else {
 	} else {
@@ -114,14 +119,7 @@ void SceneLabel::updateFromLabel() {
 	
 	
     setLocalBoundingBox(label->getWidth()*labelScale / CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX(), label->getHeight()*labelScale/ CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX(), 0.001);
     setLocalBoundingBox(label->getWidth()*labelScale / CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX(), label->getHeight()*labelScale/ CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX(), 0.001);
     
     
-    
-    if(localShaderOptions) {
-        LocalShaderParam *diffuseParam = localShaderOptions->getLocalParamByName("diffuse");
-        if(!diffuseParam) {
-            diffuseParam = localShaderOptions->addParam(ProgramParam::PARAM_TEXTURE, "diffuse");
-        }
-        diffuseParam->setTexture(texture);
-    }
+    localShaderOptions->setTextureForParam("diffuse", texture);
     
     
         // RENDERER_TODO
         // RENDERER_TODO
     /*
     /*

+ 3 - 8
Core/Contents/Source/PolySceneMesh.cpp

@@ -43,7 +43,7 @@ SceneMesh *SceneMesh::SceneMeshWithType(int meshType) {
 	return new SceneMesh(meshType);
 	return new SceneMesh(meshType);
 }
 }
 
 
-SceneMesh::SceneMesh(const String& fileName) : Entity(), texture(NULL), material(NULL), skeleton(NULL), localShaderOptions(NULL), mesh(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
+SceneMesh::SceneMesh(const String& fileName) : Entity(), material(NULL), skeleton(NULL), localShaderOptions(NULL), mesh(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
     loadFromFile(fileName);
     loadFromFile(fileName);
 	useVertexBuffer = false;
 	useVertexBuffer = false;
 	lineSmooth = false;
 	lineSmooth = false;
@@ -61,7 +61,7 @@ SceneMesh::SceneMesh(const String& fileName) : Entity(), texture(NULL), material
     setMaterialByName("Unlit");
     setMaterialByName("Unlit");
 }
 }
 
 
-SceneMesh::SceneMesh(Mesh *mesh) : Entity(), texture(NULL), material(NULL), skeleton(NULL), localShaderOptions(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
+SceneMesh::SceneMesh(Mesh *mesh) : Entity(), material(NULL), skeleton(NULL), localShaderOptions(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
 	this->mesh = mesh;
 	this->mesh = mesh;
 	setLocalBoundingBox(mesh->calculateBBox());
 	setLocalBoundingBox(mesh->calculateBBox());
 	useVertexBuffer = false;
 	useVertexBuffer = false;
@@ -80,7 +80,7 @@ SceneMesh::SceneMesh(Mesh *mesh) : Entity(), texture(NULL), material(NULL), skel
     setMaterialByName("Unlit");
     setMaterialByName("Unlit");
 }
 }
 
 
-SceneMesh::SceneMesh(int meshType) : texture(NULL), material(NULL), skeleton(NULL), localShaderOptions(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
+SceneMesh::SceneMesh(int meshType) : material(NULL), skeleton(NULL), localShaderOptions(NULL), skeletalVertexPositions(3, RenderDataArray::VERTEX_DATA_ARRAY), skeletalVertexNormals(3, RenderDataArray::NORMAL_DATA_ARRAY) {
 	mesh = new Mesh(meshType);
 	mesh = new Mesh(meshType);
 	setLocalBoundingBox(mesh->calculateBBox());
 	setLocalBoundingBox(mesh->calculateBBox());
 	useVertexBuffer = false;	
 	useVertexBuffer = false;	
@@ -165,10 +165,6 @@ Mesh *SceneMesh::getMesh() {
 	return mesh;
 	return mesh;
 }
 }
 
 
-void SceneMesh::setTexture(Texture *texture) {
-	this->texture = texture;
-}
-
 void SceneMesh::clearMaterial() {
 void SceneMesh::clearMaterial() {
 	if(localShaderOptions)
 	if(localShaderOptions)
 		delete localShaderOptions;
 		delete localShaderOptions;
@@ -197,7 +193,6 @@ void SceneMesh::setMaterial(Material *material) {
 }
 }
 
 
 void SceneMesh::setMaterialByName(const String& materialName, ResourcePool *resourcePool) {
 void SceneMesh::setMaterialByName(const String& materialName, ResourcePool *resourcePool) {
-    
     Material *material;
     Material *material;
     if(resourcePool) {
     if(resourcePool) {
         material =  (Material*)resourcePool->getResource(Resource::RESOURCE_MATERIAL, materialName);        
         material =  (Material*)resourcePool->getResource(Resource::RESOURCE_MATERIAL, materialName);        

+ 3 - 4
Core/Contents/Source/PolySceneSprite.cpp

@@ -130,7 +130,7 @@ void SceneSprite::setSpriteSet(SpriteSet *spriteSet) {
     this->spriteSet = spriteSet;
     this->spriteSet = spriteSet;
     spriteSet->addEventListener(this, Event::CHANGE_EVENT);
     spriteSet->addEventListener(this, Event::CHANGE_EVENT);
     
     
-    setTexture(spriteSet->getTexture());
+    localShaderOptions->setTextureForParam("diffuse", spriteSet->getTexture());
     
     
     // RENDERER_TODO
     // RENDERER_TODO
     /*
     /*
@@ -224,9 +224,8 @@ void SceneSprite::Update() {
     Vector2 bBox = currentSpriteState->getBoundingBox();
     Vector2 bBox = currentSpriteState->getBoundingBox();
     setLocalBoundingBox(bBox.x / currentSpriteState->getPixelsPerUnit(), bBox.y / currentSpriteState->getPixelsPerUnit(), 0.001);
     setLocalBoundingBox(bBox.x / currentSpriteState->getPixelsPerUnit(), bBox.y / currentSpriteState->getPixelsPerUnit(), 0.001);
     
     
-    spriteBoundingBox = currentSpriteState->getLargestFrameBoundingBox();
-    
-    setTexture(spriteSet->getTexture());
+    spriteBoundingBox = currentSpriteState->getLargestFrameBoundingBox();    
+    localShaderOptions->setTextureForParam("diffuse", spriteSet->getTexture());
     
     
     if(paused) {
     if(paused) {
         return;
         return;

+ 43 - 0
Core/Contents/Source/PolyShader.cpp

@@ -22,6 +22,7 @@
 
 
 #include "PolyShader.h"
 #include "PolyShader.h"
 #include "PolyMatrix4.h"
 #include "PolyMatrix4.h"
+#include "PolyCoreServices.h"
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
@@ -258,6 +259,40 @@ RenderTargetBinding *ShaderBinding::getDepthTargetBinding(unsigned int index) {
 	return depthTargetBindings[index];
 	return depthTargetBindings[index];
 }
 }
 
 
+Texture *ShaderBinding::loadTextureForParam(const String &paramName, const String &fileName) {
+    Texture *texture = Services()->getMaterialManager()->createTextureFromFile(fileName);
+    setTextureForParam(paramName, texture);
+    return texture;
+}
+
+void ShaderBinding::setTextureForParam(const String &paramName, Texture *texture) {
+    if(!texture) {
+        removeParam(paramName);
+        return;
+    }
+    LocalShaderParam *textureParam = getLocalParamByName(paramName);
+    if(!textureParam) {
+        textureParam = addParam(ProgramParam::PARAM_TEXTURE, paramName);
+    }
+    textureParam->setTexture(texture);
+}
+
+void ShaderBinding::setCubemapForParam(const String &paramName, Cubemap *cubemap) {
+    LocalShaderParam *textureParam = getLocalParamByName(paramName);
+    if(!textureParam) {
+        textureParam = addParam(ProgramParam::PARAM_CUBEMAP, paramName);
+    }
+    textureParam->setCubemap(cubemap);
+}
+
+void ShaderBinding::removeParam(const String &name) {
+    for(int i=0; i < localParams.size(); i++) {
+        if(localParams[i]->name == name) {
+            delete localParams[i];
+            localParams.erase(localParams.begin()+i);
+        }
+    }
+}
 
 
 Shader::Shader() : Resource(Resource::RESOURCE_SHADER) {
 Shader::Shader() : Resource(Resource::RESOURCE_SHADER) {
 	numSpotLights = 0;
 	numSpotLights = 0;
@@ -394,6 +429,14 @@ Texture *LocalShaderParam::getTexture() {
     return (Texture*) data;
     return (Texture*) data;
 }
 }
 
 
+void LocalShaderParam::setCubemap(Cubemap *cubemap) {
+    data = (void*) cubemap;
+}
+
+Cubemap *LocalShaderParam::getCubemap() {
+    return (Cubemap*) data;
+}
+
 LocalShaderParam::~LocalShaderParam() {
 LocalShaderParam::~LocalShaderParam() {
     if(ownsPointer) {
     if(ownsPointer) {
         switch(type) {
         switch(type) {

+ 1 - 6
Core/Contents/Source/PolyTexture.cpp

@@ -26,12 +26,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-Texture::Texture(unsigned int width, unsigned int height, char *textureData,bool clamp, bool createMipmaps, int type) : Resource(Resource::RESOURCE_TEXTURE) {
-	this->width = width;
-	this->height = height;
-	this->clamp = clamp;
-	this->createMipmaps = createMipmaps;
-    this->type = type;
+Texture::Texture(unsigned int width, unsigned int height, char *textureData,bool clamp, bool createMipmaps, int type) : Resource(Resource::RESOURCE_TEXTURE), width(width), height(height), clamp(clamp), type(type), createMipmaps(createMipmaps), filteringMode(FILTERING_NEAREST), anisotropy(0) {
     
     
 	switch(type) {
 	switch(type) {
 		case Image::IMAGE_RGB:
 		case Image::IMAGE_RGB:

+ 115 - 79
IDE/Build/Mac OS X/English.lproj/MainMenu.xib

@@ -2,13 +2,13 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 	<data>
 		<int key="IBDocument.SystemTarget">1070</int>
 		<int key="IBDocument.SystemTarget">1070</int>
-		<string key="IBDocument.SystemVersion">13C64</string>
-		<string key="IBDocument.InterfaceBuilderVersion">4514</string>
-		<string key="IBDocument.AppKitVersion">1265.19</string>
-		<string key="IBDocument.HIToolboxVersion">697.40</string>
+		<string key="IBDocument.SystemVersion">14D136</string>
+		<string key="IBDocument.InterfaceBuilderVersion">7706</string>
+		<string key="IBDocument.AppKitVersion">1347.57</string>
+		<string key="IBDocument.HIToolboxVersion">758.70</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">4514</string>
+			<string key="NS.object.0">7706</string>
 		</object>
 		</object>
 		<array key="IBDocument.IntegratedClassDependencies">
 		<array key="IBDocument.IntegratedClassDependencies">
 			<string>NSCustomObject</string>
 			<string>NSCustomObject</string>
@@ -752,7 +752,7 @@
 					<reference key="NSWindow"/>
 					<reference key="NSWindow"/>
 					<reference key="NSNextKeyView" ref="333428493"/>
 					<reference key="NSNextKeyView" ref="333428493"/>
 				</object>
 				</object>
-				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+				<string key="NSScreenRect">{{0, 0}, {2560, 1417}}</string>
 				<string key="NSMinSize">{400, 222}</string>
 				<string key="NSMinSize">{400, 222}</string>
 				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
 				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
 				<int key="NSWindowCollectionBehavior">128</int>
 				<int key="NSWindowCollectionBehavior">128</int>
@@ -840,7 +840,7 @@
 		</array>
 		</array>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
 		<object class="IBObjectContainer" key="IBDocument.Objects">
 			<bool key="usesAutoincrementingIDs">NO</bool>
 			<bool key="usesAutoincrementingIDs">NO</bool>
-			<array class="NSMutableArray" key="connectionRecords">
+			<array key="connectionRecords">
 				<object class="IBConnectionRecord">
 				<object class="IBConnectionRecord">
 					<object class="IBActionConnection" key="connection">
 					<object class="IBActionConnection" key="connection">
 						<string key="label">terminate:</string>
 						<string key="label">terminate:</string>
@@ -2057,89 +2057,148 @@
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
 			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
 				<object class="IBPartialClassDescription">
 				<object class="IBPartialClassDescription">
-					<string key="className">NSDocument</string>
+					<string key="className">PolycodeAppDelegate</string>
+					<string key="superclassName">NSObject</string>
 					<dictionary class="NSMutableDictionary" key="actions">
 					<dictionary class="NSMutableDictionary" key="actions">
-						<string key="browseDocumentVersions:">id</string>
-						<string key="duplicateDocument:">id</string>
-						<string key="lockDocument:">id</string>
-						<string key="moveDocument:">id</string>
-						<string key="moveDocumentToUbiquityContainer:">id</string>
-						<string key="printDocument:">id</string>
-						<string key="renameDocument:">id</string>
-						<string key="revertDocumentToSaved:">id</string>
-						<string key="runPageLayout:">id</string>
-						<string key="saveDocument:">id</string>
-						<string key="saveDocumentAs:">id</string>
-						<string key="saveDocumentTo:">id</string>
-						<string key="saveDocumentToPDF:">id</string>
-						<string key="unlockDocument:">id</string>
+						<string key="browseExamples:">id</string>
+						<string key="closeFile:">id</string>
+						<string key="closeProject:">id</string>
+						<string key="closeTab:">id</string>
+						<string key="createNewTab:">id</string>
+						<string key="exportProject:">id</string>
+						<string key="findText:">id</string>
+						<string key="newFile:">id</string>
+						<string key="newGroup:">id</string>
+						<string key="newProject:">id</string>
+						<string key="openDocs:">id</string>
+						<string key="openProject:">id</string>
+						<string key="refreshProject:">id</string>
+						<string key="removeFile:">id</string>
+						<string key="renameFile:">id</string>
+						<string key="runProject:">id</string>
+						<string key="saveFile:">id</string>
+						<string key="showAbout:">id</string>
+						<string key="showNextTab:">id</string>
+						<string key="showPreviousTab:">id</string>
+						<string key="showSettings:">id</string>
+						<string key="toggleConsole:">id</string>
 					</dictionary>
 					</dictionary>
 					<dictionary class="NSMutableDictionary" key="actionInfosByName">
 					<dictionary class="NSMutableDictionary" key="actionInfosByName">
-						<object class="IBActionInfo" key="browseDocumentVersions:">
-							<string key="name">browseDocumentVersions:</string>
+						<object class="IBActionInfo" key="browseExamples:">
+							<string key="name">browseExamples:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="closeFile:">
+							<string key="name">closeFile:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="closeProject:">
+							<string key="name">closeProject:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="closeTab:">
+							<string key="name">closeTab:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="createNewTab:">
+							<string key="name">createNewTab:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="duplicateDocument:">
-							<string key="name">duplicateDocument:</string>
+						<object class="IBActionInfo" key="exportProject:">
+							<string key="name">exportProject:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="lockDocument:">
-							<string key="name">lockDocument:</string>
+						<object class="IBActionInfo" key="findText:">
+							<string key="name">findText:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="newFile:">
+							<string key="name">newFile:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="newGroup:">
+							<string key="name">newGroup:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="newProject:">
+							<string key="name">newProject:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="openDocs:">
+							<string key="name">openDocs:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="moveDocument:">
-							<string key="name">moveDocument:</string>
+						<object class="IBActionInfo" key="openProject:">
+							<string key="name">openProject:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="moveDocumentToUbiquityContainer:">
-							<string key="name">moveDocumentToUbiquityContainer:</string>
+						<object class="IBActionInfo" key="refreshProject:">
+							<string key="name">refreshProject:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="printDocument:">
-							<string key="name">printDocument:</string>
+						<object class="IBActionInfo" key="removeFile:">
+							<string key="name">removeFile:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="renameDocument:">
-							<string key="name">renameDocument:</string>
+						<object class="IBActionInfo" key="renameFile:">
+							<string key="name">renameFile:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="revertDocumentToSaved:">
-							<string key="name">revertDocumentToSaved:</string>
+						<object class="IBActionInfo" key="runProject:">
+							<string key="name">runProject:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="runPageLayout:">
-							<string key="name">runPageLayout:</string>
+						<object class="IBActionInfo" key="saveFile:">
+							<string key="name">saveFile:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="saveDocument:">
-							<string key="name">saveDocument:</string>
+						<object class="IBActionInfo" key="showAbout:">
+							<string key="name">showAbout:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="saveDocumentAs:">
-							<string key="name">saveDocumentAs:</string>
+						<object class="IBActionInfo" key="showNextTab:">
+							<string key="name">showNextTab:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="saveDocumentTo:">
-							<string key="name">saveDocumentTo:</string>
+						<object class="IBActionInfo" key="showPreviousTab:">
+							<string key="name">showPreviousTab:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="saveDocumentToPDF:">
-							<string key="name">saveDocumentToPDF:</string>
+						<object class="IBActionInfo" key="showSettings:">
+							<string key="name">showSettings:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
-						<object class="IBActionInfo" key="unlockDocument:">
-							<string key="name">unlockDocument:</string>
+						<object class="IBActionInfo" key="toggleConsole:">
+							<string key="name">toggleConsole:</string>
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
 					</dictionary>
 					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="polycodeView">PolycodeView</string>
+						<string key="projectMenu">NSMenu</string>
+						<string key="window">NSWindow</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="polycodeView">
+							<string key="name">polycodeView</string>
+							<string key="candidateClassName">PolycodeView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="projectMenu">
+							<string key="name">projectMenu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="window">
+							<string key="name">window</string>
+							<string key="candidateClassName">NSWindow</string>
+						</object>
+					</dictionary>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/NSDocument.h</string>
+						<string key="minorKey">../PolycodeAppDelegate.h</string>
 					</object>
 					</object>
 				</object>
 				</object>
 				<object class="IBPartialClassDescription">
 				<object class="IBPartialClassDescription">
 					<string key="className">PolycodeAppDelegate</string>
 					<string key="className">PolycodeAppDelegate</string>
-					<string key="superclassName">NSObject</string>
 					<dictionary class="NSMutableDictionary" key="actions">
 					<dictionary class="NSMutableDictionary" key="actions">
 						<string key="browseExamples:">id</string>
 						<string key="browseExamples:">id</string>
 						<string key="closeFile:">id</string>
 						<string key="closeFile:">id</string>
@@ -2254,28 +2313,9 @@
 							<string key="candidateClassName">id</string>
 							<string key="candidateClassName">id</string>
 						</object>
 						</object>
 					</dictionary>
 					</dictionary>
-					<dictionary class="NSMutableDictionary" key="outlets">
-						<string key="polycodeView">PolycodeView</string>
-						<string key="projectMenu">NSMenu</string>
-						<string key="window">NSWindow</string>
-					</dictionary>
-					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<object class="IBToOneOutletInfo" key="polycodeView">
-							<string key="name">polycodeView</string>
-							<string key="candidateClassName">PolycodeView</string>
-						</object>
-						<object class="IBToOneOutletInfo" key="projectMenu">
-							<string key="name">projectMenu</string>
-							<string key="candidateClassName">NSMenu</string>
-						</object>
-						<object class="IBToOneOutletInfo" key="window">
-							<string key="name">window</string>
-							<string key="candidateClassName">NSWindow</string>
-						</object>
-					</dictionary>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/PolycodeAppDelegate.h</string>
+						<string key="minorKey">../PolycodeAppDelegate.m</string>
 					</object>
 					</object>
 				</object>
 				</object>
 				<object class="IBPartialClassDescription">
 				<object class="IBPartialClassDescription">
@@ -2283,7 +2323,7 @@
 					<string key="superclassName">NSOpenGLView</string>
 					<string key="superclassName">NSOpenGLView</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/PolycodeView.h</string>
+						<string key="minorKey">../../../../Release/Darwin/Framework/Core/PolycodeView/PolycodeView.h</string>
 					</object>
 					</object>
 				</object>
 				</object>
 			</array>
 			</array>
@@ -2291,10 +2331,6 @@
 		<int key="IBDocument.localizationMode">0</int>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
 		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">YES</bool>
 		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">YES</bool>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
-			<real value="1070" key="NS.object.0"/>
-		</object>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
 			<integer value="4600" key="NS.object.0"/>
 			<integer value="4600" key="NS.object.0"/>
@@ -2302,8 +2338,8 @@
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
 		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<string key="NSMenuCheckmark">{11, 11}</string>
-			<string key="NSMenuMixedState">{10, 3}</string>
+			<string key="NSMenuCheckmark">{12, 12}</string>
+			<string key="NSMenuMixedState">{10, 2}</string>
 		</dictionary>
 		</dictionary>
 	</data>
 	</data>
 </archive>
 </archive>

+ 2 - 1
IDE/Contents/Source/EditorGrid.cpp

@@ -202,7 +202,8 @@ void EditorGrid::rebuildGrid() {
     
     
     grid->setLocalBoundingBox(grid->getMesh()->calculateBBox());
     grid->setLocalBoundingBox(grid->getMesh()->calculateBBox());
     
     
-    grid->cacheToVertexBuffer(true);
+    // RENDERER_TODO
+//    grid->cacheToVertexBuffer(true);
 }
 }
 
 
 void EditorGrid::setGridMode(int mode) {
 void EditorGrid::setGridMode(int mode) {

+ 9 - 12
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -1011,7 +1011,7 @@ void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
     iconPrimitive->setMaterialByName("Unlit");
     iconPrimitive->setMaterialByName("Unlit");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("entityEditor/"+iconFile);
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("entityEditor/"+iconFile);
 	if(iconPrimitive->getLocalShaderOptions()) {
 	if(iconPrimitive->getLocalShaderOptions()) {
-        iconPrimitive->getLocalShaderOptions()->addTexture("diffuse", tex);
+        iconPrimitive->getLocalShaderOptions()->setTextureForParam("diffuse", tex);
 	}
 	}
     
     
     iconBase->addChild(iconPrimitive);
     iconBase->addChild(iconPrimitive);
@@ -1458,7 +1458,10 @@ void EntityEditorMainView::handleEvent(Event *event) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {
             if(assetSelectType == "mesh") {
             if(assetSelectType == "mesh") {
                 SceneMesh *newMesh = new SceneMesh(globalFrame->assetBrowser->getSelectedAssetPath());
                 SceneMesh *newMesh = new SceneMesh(globalFrame->assetBrowser->getSelectedAssetPath());
-                newMesh->cacheToVertexBuffer(true);
+                
+                // RENDERER_TODO
+                //newMesh->cacheToVertexBuffer(true);
+                
                 sceneObjectRoot->addChild(newMesh);
                 sceneObjectRoot->addChild(newMesh);
                 setEditorProps(newMesh);
                 setEditorProps(newMesh);
                 newMesh->setMaterialByName("Default");
                 newMesh->setMaterialByName("Default");
@@ -1467,10 +1470,6 @@ void EntityEditorMainView::handleEvent(Event *event) {
                 selectEntity(newMesh, false, false);
                 selectEntity(newMesh, false, false);
             } else if(assetSelectType == "image") {
             } else if(assetSelectType == "image") {
                 SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getSelectedAssetPath());
                 SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getSelectedAssetPath());
-                newImage->setMaterialByName("Unlit");
-                if(newImage->getLocalShaderOptions()) {
-                    newImage->getLocalShaderOptions()->addTexture("diffuse", newImage->getTexture());
-                }
                 sceneObjectRoot->addChild(newImage);
                 sceneObjectRoot->addChild(newImage);
                 setEditorProps(newImage);
                 setEditorProps(newImage);
                 newImage->setPosition(cursorPosition);
                 newImage->setPosition(cursorPosition);
@@ -1489,10 +1488,6 @@ void EntityEditorMainView::handleEvent(Event *event) {
                         newSprite->setSpriteState(sprite->getState(0), 0, false);
                         newSprite->setSpriteState(sprite->getState(0), 0, false);
                     }
                     }
                     
                     
-                    newSprite->setMaterialByName("Unlit");
-                    if(newSprite->getLocalShaderOptions()) {
-                        newSprite->getLocalShaderOptions()->addTexture("diffuse", newSprite->getTexture());
-                    }
                     sceneObjectRoot->addChild(newSprite);
                     sceneObjectRoot->addChild(newSprite);
                     setEditorProps(newSprite);
                     setEditorProps(newSprite);
                     newSprite->setPosition(cursorPosition);
                     newSprite->setPosition(cursorPosition);
@@ -2395,7 +2390,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
     entry->addChild("cG", entity->color.g);
     entry->addChild("cG", entity->color.g);
     entry->addChild("cB", entity->color.b);
     entry->addChild("cB", entity->color.b);
     entry->addChild("cA", entity->color.a);
     entry->addChild("cA", entity->color.a);
-    entry->addChild("blendMode", entity->blendingMode);
+    entry->addChild("blendMode", (int)entity->getBlendingMode());
     
     
     entry->addChild("sX", entity->getScale().x);
     entry->addChild("sX", entity->getScale().x);
     entry->addChild("sY", entity->getScale().y);
     entry->addChild("sY", entity->getScale().y);
@@ -2436,6 +2431,8 @@ void PolycodeEntityEditor::saveShaderOptionsToEntry(ObjectEntry *entry, Material
             ObjectEntry *shaderEntry = entry->addChild("shader");
             ObjectEntry *shaderEntry = entry->addChild("shader");
             ObjectEntry *texturesEntry = shaderEntry->addChild("textures");
             ObjectEntry *texturesEntry = shaderEntry->addChild("textures");
             
             
+            // RENDERER_TODO
+            /*
             for(int j=0; j < shader->expectedTextures.size(); j++) {
             for(int j=0; j < shader->expectedTextures.size(); j++) {
                 Texture *texture = binding->getTexture(shader->expectedTextures[j]);
                 Texture *texture = binding->getTexture(shader->expectedTextures[j]);
                 if(texture) {
                 if(texture) {
@@ -2454,7 +2451,7 @@ void PolycodeEntityEditor::saveShaderOptionsToEntry(ObjectEntry *entry, Material
                     cubemapEntry->addChild("name", shader->expectedCubemaps[j]);
                     cubemapEntry->addChild("name", shader->expectedCubemaps[j]);
                 }
                 }
             }
             }
-            
+            */
             
             
             if(shader->expectedParams.size() > 0 || shader->expectedParams.size() > 0) {
             if(shader->expectedParams.size() > 0 || shader->expectedParams.size() > 0) {
                 ObjectEntry *paramsEntry = shaderEntry->addChild("params");
                 ObjectEntry *paramsEntry = shaderEntry->addChild("params");

+ 9 - 8
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -60,10 +60,12 @@ core = new POLYCODE_CORE((PolycodeView*)view, 1100, 700,false,false, 0, 0,60, -1
 			
 			
 	globalClipboard = new PolycodeClipboard();
 	globalClipboard = new PolycodeClipboard();
 	
 	
-	CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_NEAREST);
+	CoreServices::getInstance()->getMaterialManager()->setTextureFilteringMode(Texture::FILTERING_NEAREST);
 				
 				
 	CoreServices::getInstance()->getResourceManager()->addArchive("default.pak");
 	CoreServices::getInstance()->getResourceManager()->addArchive("default.pak");
-	CoreServices::getInstance()->getResourceManager()->addDirResource("default");	
+	CoreServices::getInstance()->getResourceManager()->addDirResource("default");
+    
+    
 
 
 	CoreServices::getInstance()->getResourceManager()->addArchive("hdr.pak");
 	CoreServices::getInstance()->getResourceManager()->addArchive("hdr.pak");
 	CoreServices::getInstance()->getResourceManager()->addDirResource("hdr");
 	CoreServices::getInstance()->getResourceManager()->addDirResource("hdr");
@@ -79,8 +81,7 @@ core = new POLYCODE_CORE((PolycodeView*)view, 1100, 700,false,false, 0, 0,60, -1
 	CoreServices::getInstance()->getFontManager()->registerFont("section", "Fonts/RobotoCondensed-Bold.ttf");
 	CoreServices::getInstance()->getFontManager()->registerFont("section", "Fonts/RobotoCondensed-Bold.ttf");
 
 
 
 
-	CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_LINEAR);
-//	CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_NEAREST);
+	CoreServices::getInstance()->getMaterialManager()->setTextureFilteringMode(Texture::FILTERING_LINEAR);
 	
 	
 	loadConfigFile();	
 	loadConfigFile();	
 
 
@@ -1206,7 +1207,7 @@ void PolycodeIDEApp::loadConfigFile() {
 	
 	
 	String uiThemeName = "dark";
 	String uiThemeName = "dark";
 	
 	
-	CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_LINEAR);
+	CoreServices::getInstance()->getMaterialManager()->setTextureFilteringMode(Texture::FILTERING_LINEAR);
 	
 	
 	ObjectEntry *texture_filtering_mode = configFile.root["texture_filtering_mode"];
 	ObjectEntry *texture_filtering_mode = configFile.root["texture_filtering_mode"];
 	config->setStringValue("Polycode", "textureFilteringMode", "linear");	
 	config->setStringValue("Polycode", "textureFilteringMode", "linear");	
@@ -1214,7 +1215,7 @@ void PolycodeIDEApp::loadConfigFile() {
 	if(texture_filtering_mode) {
 	if(texture_filtering_mode) {
 		if(texture_filtering_mode->stringVal == "nearest") {
 		if(texture_filtering_mode->stringVal == "nearest") {
 		config->setStringValue("Polycode", "textureFilteringMode", "nearest");		
 		config->setStringValue("Polycode", "textureFilteringMode", "nearest");		
-			CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_NEAREST);
+			CoreServices::getInstance()->getMaterialManager()->setTextureFilteringMode(Texture::FILTERING_NEAREST);
 		}
 		}
 	}
 	}
 	
 	
@@ -1273,13 +1274,13 @@ void PolycodeIDEApp::applyFinalConfig() {
 		int newYRes = appHeight->intVal;		
 		int newYRes = appHeight->intVal;		
 		if(newXRes > 100 && newYRes > 100) {
 		if(newXRes > 100 && newYRes > 100) {
 			setResFromConfig = true;
 			setResFromConfig = true;
-			core->setVideoMode(newXRes, newYRes, false, true, 0, 0);
+//			core->setVideoMode(newXRes, newYRes, false, true, 0, 0);
 			frame->Resize(newXRes, newYRes);
 			frame->Resize(newXRes, newYRes);
 		}
 		}
 	}
 	}
 	
 	
 	if(!setResFromConfig) {
 	if(!setResFromConfig) {
-		core->setVideoMode(1100, 700, false, true, 0, 0);
+	//	core->setVideoMode(1100, 700, false, true, 0, 0);
 		frame->Resize(1100, 700);			
 		frame->Resize(1100, 700);			
 	}
 	}
 
 

+ 19 - 11
IDE/Contents/Source/PolycodeMaterialEditor.cpp

@@ -275,9 +275,10 @@ void CubemapEditorPane::setCubemap(Cubemap *cubemap) {
 	currentCubemap = cubemap;
 	currentCubemap = cubemap;
 	
 	
 	nameProp->set(cubemap->getResourceName());
 	nameProp->set(cubemap->getResourceName());
-	
-	cubemapPreview->previewPrimitive->getLocalShaderOptions()->clearCubemap("lightCube");
-	cubemapPreview->previewPrimitive->getLocalShaderOptions()->addCubemap("lightCube", cubemap);	
+
+    // RENDERER_TODO
+//	cubemapPreview->previewPrimitive->getLocalShaderOptions()->clearCubemap("lightCube");
+//	cubemapPreview->previewPrimitive->getLocalShaderOptions()->addCubemap("lightCube", cubemap);
 	
 	
 	yPosTexture->set(cubemap->getTexture(Cubemap::CUBEMAP_YPOS));
 	yPosTexture->set(cubemap->getTexture(Cubemap::CUBEMAP_YPOS));
 	yNegTexture->set(cubemap->getTexture(Cubemap::CUBEMAP_YNEG));
 	yNegTexture->set(cubemap->getTexture(Cubemap::CUBEMAP_YNEG));
@@ -486,6 +487,8 @@ void ShaderEditorPane::reloadPrograms() {
 		
 		
 	std::vector<Resource*> programs = CoreServices::getInstance()->getResourceManager()->getResources(Resource::RESOURCE_PROGRAM);
 	std::vector<Resource*> programs = CoreServices::getInstance()->getResourceManager()->getResources(Resource::RESOURCE_PROGRAM);
 	
 	
+    // RENDERER_TODO
+    /*
 	for(int i=0; i < programs.size(); i++) {
 	for(int i=0; i < programs.size(); i++) {
 		ShaderProgram* program = (ShaderProgram*) programs[i];
 		ShaderProgram* program = (ShaderProgram*) programs[i];
 		if(program->type == ShaderProgram::TYPE_VERT) {
 		if(program->type == ShaderProgram::TYPE_VERT) {
@@ -500,6 +503,7 @@ void ShaderEditorPane::reloadPrograms() {
 			}			
 			}			
 		}
 		}
 	}	
 	}	
+     */
 }
 }
 
 
 void ShaderEditorPane::setShader(Shader *shader) {
 void ShaderEditorPane::setShader(Shader *shader) {
@@ -511,6 +515,8 @@ void ShaderEditorPane::setShader(Shader *shader) {
 		
 		
 	nameProp->set(shader->getName());
 	nameProp->set(shader->getName());
 	
 	
+    // RENDERER_TODO
+    /*
 	for(int i=0; i < vertexProgramProp->comboEntry->getNumItems(); i++) {
 	for(int i=0; i < vertexProgramProp->comboEntry->getNumItems(); i++) {
 		ShaderProgram* program = (ShaderProgram*) vertexProgramProp->comboEntry->getItemAtIndex(i)->data;
 		ShaderProgram* program = (ShaderProgram*) vertexProgramProp->comboEntry->getItemAtIndex(i)->data;
 		if(program == shader->vp) {
 		if(program == shader->vp) {
@@ -524,7 +530,7 @@ void ShaderEditorPane::setShader(Shader *shader) {
 			fragmentProgramProp->comboEntry->setSelectedIndex(i);
 			fragmentProgramProp->comboEntry->setSelectedIndex(i);
 		}
 		}
 	}
 	}
-	
+	*/
 	screenShaderProp->set(shader->screenShader);
 	screenShaderProp->set(shader->screenShader);
 	
 	
 	pointLightsProp->set(shader->numPointLights);
 	pointLightsProp->set(shader->numPointLights);
@@ -714,7 +720,7 @@ MaterialPreviewBox::MaterialPreviewBox() : UIElement() {
 	previewBg->setMaterialByName("Unlit");
 	previewBg->setMaterialByName("Unlit");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("materialEditor/material_grid.png");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("materialEditor/material_grid.png");
 	if(previewBg->getLocalShaderOptions()) {
 	if(previewBg->getLocalShaderOptions()) {
-	previewBg->getLocalShaderOptions()->addTexture("diffuse", tex);
+        previewBg->getLocalShaderOptions()->setTextureForParam("diffuse", tex);
 	}
 	}
 	previewScene->addChild(previewBg);
 	previewScene->addChild(previewBg);
 	
 	
@@ -949,7 +955,7 @@ void MaterialEditorPane::handleEvent(Event *event) {
 				currentMaterial->clearShaders();
 				currentMaterial->clearShaders();
 				materialPreview->clearMaterial();
 				materialPreview->clearMaterial();
 				
 				
-				ShaderBinding *newShaderBinding = selectedShader->createBinding();				
+                ShaderBinding *newShaderBinding = new ShaderBinding();
 				currentMaterial->addShader(selectedShader, newShaderBinding);
 				currentMaterial->addShader(selectedShader, newShaderBinding);
 				materialPreview->setMaterial(currentMaterial);					
 				materialPreview->setMaterial(currentMaterial);					
 			}
 			}
@@ -1206,8 +1212,8 @@ bool PolycodeMaterialEditor::openFile(OSFileEntry filePath) {
     for(int i=0; i < res.size(); i++) {
     for(int i=0; i < res.size(); i++) {
         Shader *shader = (Shader*)res[i];
         Shader *shader = (Shader*)res[i];
 		materialBrowser->addShader(shader);
 		materialBrowser->addShader(shader);
-		shader->vp->reloadOnFileModify = true;
-		shader->fp->reloadOnFileModify = true;
+		shader->vertexProgram->reloadOnFileModify = true;
+		shader->fragmentProgram->reloadOnFileModify = true;
         shaders.push_back(shader);
         shaders.push_back(shader);
     }
     }
     
     
@@ -1362,6 +1368,8 @@ void PolycodeMaterialEditor::saveMaterials(ObjectEntry *materialsEntry, std::vec
 					}
 					}
 				}
 				}
 				
 				
+                // RENDERER_TODO
+                /*
 				for(int j=0; j < shader->expectedTextures.size(); j++) {
 				for(int j=0; j < shader->expectedTextures.size(); j++) {
 					Texture *texture = shaderBinding->getTexture(shader->expectedTextures[j]);
 					Texture *texture = shaderBinding->getTexture(shader->expectedTextures[j]);
 					
 					
@@ -1390,7 +1398,7 @@ void PolycodeMaterialEditor::saveMaterials(ObjectEntry *materialsEntry, std::vec
 						cubemapEntry->addChild("name", shader->expectedCubemaps[j]);
 						cubemapEntry->addChild("name", shader->expectedCubemaps[j]);
 					}
 					}
 				}
 				}
-				
+				*/
 				
 				
 				if(shader->expectedParams.size() > 0 || shader->expectedParams.size() > 0) {
 				if(shader->expectedParams.size() > 0 || shader->expectedParams.size() > 0) {
 					ObjectEntry *paramsEntry = shaderEntry->addChild("params");
 					ObjectEntry *paramsEntry = shaderEntry->addChild("params");
@@ -1423,12 +1431,12 @@ void PolycodeMaterialEditor::saveFile() {
 		shaderEntry->addChild("screen", shaders[i]->screenShader);
 		shaderEntry->addChild("screen", shaders[i]->screenShader);
 
 
 		ObjectEntry *vpEntry = shaderEntry->addChild("vp");
 		ObjectEntry *vpEntry = shaderEntry->addChild("vp");
-		String sourcePath = shaders[i]->vp->getResourcePath();
+		String sourcePath = shaders[i]->vertexProgram->getResourcePath();
 		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");
 		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");
 		vpEntry->addChild("source", sourcePath);
 		vpEntry->addChild("source", sourcePath);
 				
 				
 		ObjectEntry *fpEntry = shaderEntry->addChild("fp");
 		ObjectEntry *fpEntry = shaderEntry->addChild("fp");
-		sourcePath = shaders[i]->fp->getResourcePath();
+		sourcePath = shaders[i]->fragmentProgram->getResourcePath();
 		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");		
 		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");		
 		fpEntry->addChild("source", sourcePath);
 		fpEntry->addChild("source", sourcePath);
 	}
 	}

+ 3 - 1
IDE/Contents/Source/PolycodeMeshEditor.cpp

@@ -138,7 +138,9 @@ bool PolycodeMeshEditor::openFile(OSFileEntry filePath) {
 	PolycodeEditor::openFile(filePath);
 	PolycodeEditor::openFile(filePath);
 
 
 	previewMesh->alphaTest = true;
 	previewMesh->alphaTest = true;
-	CoreServices::getInstance()->getRenderer()->alphaTestValue = 0.9;
+    
+    // RENDERER_TODO
+	//CoreServices::getInstance()->getRenderer()->alphaTestValue = 0.9;
 				
 				
 	trackballCamera->setCameraDistance(previewMesh->getLocalBoundingBox().x);
 	trackballCamera->setCameraDistance(previewMesh->getLocalBoundingBox().x);
 	return true;
 	return true;

+ 54 - 54
IDE/Contents/Source/PolycodeProps.cpp

@@ -1244,7 +1244,7 @@ MaterialProp::MaterialProp(const String &caption) : PropProp(caption, "Material"
 	previewBg->setMaterialByName("Unlit");
 	previewBg->setMaterialByName("Unlit");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("materialEditor/material_grid.png");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("materialEditor/material_grid.png");
 	if(previewBg->getLocalShaderOptions()) {
 	if(previewBg->getLocalShaderOptions()) {
-        previewBg->getLocalShaderOptions()->addTexture("diffuse", tex);
+        previewBg->getLocalShaderOptions()->setTextureForParam("diffuse", tex);
 	}
 	}
 	previewScene->addChild(previewBg);
 	previewScene->addChild(previewBg);
 	
 	
@@ -1635,7 +1635,7 @@ void ShaderPassProp::handleEvent(Event *event) {
 		if(selectedShader) {
 		if(selectedShader) {
 			if(material->getShader(shaderIndex) != selectedShader) {
 			if(material->getShader(shaderIndex) != selectedShader) {
 				material->removeShader(shaderIndex);				
 				material->removeShader(shaderIndex);				
-				ShaderBinding *newShaderBinding = selectedShader->createBinding();				
+                ShaderBinding *newShaderBinding = new ShaderBinding();
 				material->addShaderAtIndex(selectedShader, newShaderBinding, shaderIndex);
 				material->addShaderAtIndex(selectedShader, newShaderBinding, shaderIndex);
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 			}
 			}
@@ -1722,7 +1722,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 	if(event->getDispatcher() == removeButton && event->getEventCode() == UIEvent::CLICK_EVENT) {
 	if(event->getDispatcher() == removeButton && event->getEventCode() == UIEvent::CLICK_EVENT) {
 		dispatchEvent(new Event(), Event::REMOVE_EVENT);
 		dispatchEvent(new Event(), Event::REMOVE_EVENT);
 	} else if(event->getDispatcher() == typeComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == typeComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
-		binding->clearTexture(targetBinding->name);	
+		binding->removeParam(targetBinding->name);
 		
 		
 		if(typeComboBox->getSelectedIndex() == 1) {
 		if(typeComboBox->getSelectedIndex() == 1) {
 			textureComboBox->enabled = false;
 			textureComboBox->enabled = false;
@@ -1730,7 +1730,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 		} else {
 		} else {
 			textureComboBox->enabled = true;
 			textureComboBox->enabled = true;
 			textureComboBox->visible = true;
 			textureComboBox->visible = true;
-			binding->addTexture(targetBinding->name, targetBinding->texture);	
+			binding->setTextureForParam(targetBinding->name, targetBinding->texture);
 		}		
 		}		
 		
 		
 		if(typeComboBox->getSelectedIndex() == 2 || typeComboBox->getSelectedIndex() == 3) {
 		if(typeComboBox->getSelectedIndex() == 2 || typeComboBox->getSelectedIndex() == 3) {
@@ -1755,9 +1755,9 @@ void TargetBindingProp::handleEvent(Event *event) {
 		binding->removeRenderTargetBinding(targetBinding);		
 		binding->removeRenderTargetBinding(targetBinding);		
 		binding->addRenderTargetBinding(targetBinding);		
 		binding->addRenderTargetBinding(targetBinding);		
 
 
-		binding->clearTexture(targetBinding->name);
+		binding->removeParam(targetBinding->name);
 		if(targetBinding->mode == RenderTargetBinding::MODE_IN) {
 		if(targetBinding->mode == RenderTargetBinding::MODE_IN) {
-			binding->addTexture(targetBinding->name, targetBinding->texture);		
+			binding->setTextureForParam(targetBinding->name, targetBinding->texture);
 		}
 		}
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);		
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);		
 	} else if(event->getDispatcher() == textureComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == textureComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
@@ -1766,8 +1766,8 @@ void TargetBindingProp::handleEvent(Event *event) {
 		binding->removeRenderTargetBinding(targetBinding);		
 		binding->removeRenderTargetBinding(targetBinding);		
 		binding->addRenderTargetBinding(targetBinding);		
 		binding->addRenderTargetBinding(targetBinding);		
 
 
-		binding->clearTexture(targetBinding->name);
-		binding->addTexture(targetBinding->name, targetBinding->texture);
+		binding->removeParam(targetBinding->name);
+		binding->setTextureForParam(targetBinding->name, targetBinding->texture);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	}
 	}
 }
 }
@@ -1952,7 +1952,7 @@ void ShaderPassesSheet::handleEvent(Event *event) {
 	
 	
 		Shader *defaultShader = (Shader*)resourcePool->getResource(Resource::RESOURCE_SHADER, "PassThrough");
 		Shader *defaultShader = (Shader*)resourcePool->getResource(Resource::RESOURCE_SHADER, "PassThrough");
 		if(defaultShader) {	
 		if(defaultShader) {	
-			ShaderBinding *newShaderBinding = defaultShader->createBinding();		
+            ShaderBinding *newShaderBinding = new ShaderBinding();
 			material->addShader(defaultShader, newShaderBinding);
 			material->addShader(defaultShader, newShaderBinding);
 		}
 		}
 		refreshPasses();
 		refreshPasses();
@@ -2334,45 +2334,42 @@ void ShaderOptionsSheet::clearShader() {
 void ShaderOptionsSheet::setOptionsFromParams(std::vector<ProgramParam> &params) {
 void ShaderOptionsSheet::setOptionsFromParams(std::vector<ProgramParam> &params) {
 
 
 	for(int i=0; i < params.size(); i++) {
 	for(int i=0; i < params.size(); i++) {
-		if(!CoreServices::getInstance()->getRenderer()->getDataPointerForName(params[i].name)) {			
-				switch (params[i].type) {
-				
-					case ProgramParam::PARAM_NUMBER:
-					{
-						String paramName = params[i].name;
-						NumberProp *numberProp = new NumberProp(paramName, this);
-						addProp(numberProp);
-												
-                        LocalShaderParam *param = binding->getLocalParamByName(params[i].name);
-                        Number numberValue = 0.0;
-                        if(param) {
-                            numberValue = (*(Number*)param->data);
-                        }
-						numberProp->set(numberValue);
-						propHeight += 30;
-					}
-					break;					
-					case ProgramParam::PARAM_COLOR:
-					{
-						String paramName = params[i].name;
-
-                        LocalShaderParam *param = binding->getLocalParamByName(params[i].name);
-
-						ColorProp *colorProp = new ColorProp(paramName);
-						addProp(colorProp);
-						
-						Color colorValue;
-                        if(param) {
-                            colorValue = (*(Color*)param->data);
-                        }
-						colorProp->set(colorValue);
-						
-						propHeight += 40;				
-					}
-					break;
-				}	
-			}
-		}	
+        switch (params[i].type) {
+            case ProgramParam::PARAM_NUMBER:
+            {
+                String paramName = params[i].name;
+                NumberProp *numberProp = new NumberProp(paramName, this);
+                addProp(numberProp);
+                                        
+                LocalShaderParam *param = binding->getLocalParamByName(params[i].name);
+                Number numberValue = 0.0;
+                if(param) {
+                    numberValue = (*(Number*)param->data);
+                }
+                numberProp->set(numberValue);
+                propHeight += 30;
+            }
+            break;					
+            case ProgramParam::PARAM_COLOR:
+            {
+                String paramName = params[i].name;
+
+                LocalShaderParam *param = binding->getLocalParamByName(params[i].name);
+
+                ColorProp *colorProp = new ColorProp(paramName);
+                addProp(colorProp);
+                
+                Color colorValue;
+                if(param) {
+                    colorValue = (*(Color*)param->data);
+                }
+                colorProp->set(colorValue);
+                
+                propHeight += 40;				
+            }
+            break;
+        }
+    }
 }
 }
 
 
 void ShaderOptionsSheet::setShader(Shader *shader, Material *material, ShaderBinding *binding) {
 void ShaderOptionsSheet::setShader(Shader *shader, Material *material, ShaderBinding *binding) {
@@ -2409,17 +2406,17 @@ void ShaderTexturesSheet::handleEvent(Event *event) {
 	if(event->getEventCode() == Event::CHANGE_EVENT) {
 	if(event->getEventCode() == Event::CHANGE_EVENT) {
 		for(int i=0; i < textureProps.size(); i++) {
 		for(int i=0; i < textureProps.size(); i++) {
 			if(event->getDispatcher() == textureProps[i]) {
 			if(event->getDispatcher() == textureProps[i]) {
-				binding->clearTexture(textureProps[i]->label->getText());
-				binding->addTexture(textureProps[i]->label->getText(), textureProps[i]->get());
+				binding->removeParam(textureProps[i]->label->getText());
+				binding->setTextureForParam(textureProps[i]->label->getText(), textureProps[i]->get());
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 			}
 			}
 		}	
 		}	
 		
 		
 		for(int i=0; i < cubemapProps.size(); i++) {
 		for(int i=0; i < cubemapProps.size(); i++) {
 			if(event->getDispatcher() == cubemapProps[i]) {
 			if(event->getDispatcher() == cubemapProps[i]) {
-				binding->clearCubemap(cubemapProps[i]->label->getText());
+				binding->removeParam(cubemapProps[i]->label->getText());
 				Cubemap *cubemap = (Cubemap*)cubemapProps[i]->comboEntry->getSelectedItem()->data;
 				Cubemap *cubemap = (Cubemap*)cubemapProps[i]->comboEntry->getSelectedItem()->data;
-				binding->addCubemap(cubemapProps[i]->label->getText(), cubemap);
+				binding->setCubemapForParam(cubemapProps[i]->label->getText(), cubemap);
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 				dispatchEvent(new Event(), Event::CHANGE_EVENT);
 			}
 			}
 		}	
 		}	
@@ -2458,6 +2455,8 @@ void ShaderTexturesSheet::setShader(Shader *shader, Material *material, ShaderBi
 		
 		
 	this->binding = binding;
 	this->binding = binding;
 
 
+    // RENDERER_TODO
+    /*
 	for(int i=0; i < shader->expectedCubemaps.size(); i++) {
 	for(int i=0; i < shader->expectedCubemaps.size(); i++) {
 		ComboProp *comboProp = new ComboProp(shader->expectedCubemaps[i]);
 		ComboProp *comboProp = new ComboProp(shader->expectedCubemaps[i]);
 		
 		
@@ -2498,6 +2497,7 @@ void ShaderTexturesSheet::setShader(Shader *shader, Material *material, ShaderBi
 		textureProps.push_back(textureProp);
 		textureProps.push_back(textureProp);
 		propHeight += 65;
 		propHeight += 65;
 	}
 	}
+     */
 
 
 	dispatchEvent(new Event(), Event::COMPLETE_EVENT);	
 	dispatchEvent(new Event(), Event::COMPLETE_EVENT);	
 	Resize(getWidth(), getHeight());
 	Resize(getWidth(), getHeight());
@@ -3283,7 +3283,7 @@ void EntitySheet::handleEvent(Event *event) {
 		return;
 		return;
 
 
 	if(event->getDispatcher() == blendingProp  && event->getEventCode() == Event::CHANGE_EVENT) {
 	if(event->getDispatcher() == blendingProp  && event->getEventCode() == Event::CHANGE_EVENT) {
-		entity->blendingMode = blendingProp->get();
+		entity->setBlendingMode(blendingProp->get());
 	} else if(event->getDispatcher() == colorProp  && event->getEventCode() == Event::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == colorProp  && event->getEventCode() == Event::CHANGE_EVENT) {
 		entity->color = colorProp->get();
 		entity->color = colorProp->get();
 	}else if(event->getDispatcher() == idProp  && event->getEventCode() == Event::CHANGE_EVENT) {
 	}else if(event->getDispatcher() == idProp  && event->getEventCode() == Event::CHANGE_EVENT) {
@@ -3341,7 +3341,7 @@ void EntitySheet::setEntity(Entity *entity) {
         tagProp->set(tagString);
         tagProp->set(tagString);
         
         
         colorProp->set(entity->color);
         colorProp->set(entity->color);
-        blendingProp->set(entity->blendingMode);
+        blendingProp->set(entity->getBlendingMode());
         
         
         bBoxProp->set(entity->getLocalBoundingBox());
         bBoxProp->set(entity->getLocalBoundingBox());
         refreshLayers();
         refreshLayers();

+ 10 - 10
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -56,14 +56,14 @@ SpriteSheetEditor::SpriteSheetEditor(SpriteSet *sprite) : UIElement() {
     frameVisualizerMesh->setColor(1.0, 1.0, 1.0, 1.0);
     frameVisualizerMesh->setColor(1.0, 1.0, 1.0, 1.0);
     addChild(frameVisualizerMesh);
     addChild(frameVisualizerMesh);
     frameVisualizerMesh->setAnchorPoint(-1.0, -1.0, 0.0);
     frameVisualizerMesh->setAnchorPoint(-1.0, -1.0, 0.0);
-    frameVisualizerMesh->loadTexture("main/stipple.png");
+    frameVisualizerMesh->getLocalShaderOptions()->loadTextureForParam("diffuse", "main/stipple.png");
     frameVisualizerMesh->lineWidth = 1; //CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX();
     frameVisualizerMesh->lineWidth = 1; //CoreServices::getInstance()->getRenderer()->getBackingResolutionScaleX();
 
 
     frameVisualizerMeshSelected = new SceneMesh(Mesh::LINE_MESH);
     frameVisualizerMeshSelected = new SceneMesh(Mesh::LINE_MESH);
     frameVisualizerMeshSelected->setColor(1.0, 1.0, 0.0, 1.0);
     frameVisualizerMeshSelected->setColor(1.0, 1.0, 0.0, 1.0);
     addChild(frameVisualizerMeshSelected);
     addChild(frameVisualizerMeshSelected);
     frameVisualizerMeshSelected->setAnchorPoint(-1.0, -1.0, 0.0);
     frameVisualizerMeshSelected->setAnchorPoint(-1.0, -1.0, 0.0);
-    frameVisualizerMeshSelected->loadTexture("main/stipple.png");
+    frameVisualizerMeshSelected->getLocalShaderOptions()->loadTextureForParam("diffuse", "main/stipple.png");
     frameVisualizerMeshSelected->lineWidth = 2;
     frameVisualizerMeshSelected->lineWidth = 2;
     
     
     previewImage->setTexture(sprite->getTexture());
     previewImage->setTexture(sprite->getTexture());
@@ -1131,7 +1131,7 @@ void SpriteStateEditBar::refreshBar() {
         return;
         return;
     }
     }
     
     
-    barMesh->setTexture(spriteSet->getTexture());
+    barMesh->getLocalShaderOptions()->setTextureForParam("diffuse", spriteSet->getTexture());
     
     
     Mesh *mesh = barMesh->getMesh();
     Mesh *mesh = barMesh->getMesh();
     mesh->clearMesh();
     mesh->clearMesh();
@@ -1337,22 +1337,22 @@ SpriteStateEditBar::SpriteStateEditBar(SpriteSet *spriteSet) : UIElement() {
     
     
     barBase = new UIElement();
     barBase = new UIElement();
     
     
-    barMeshBg = new SceneMesh(Mesh::QUAD_MESH);
+    barMeshBg = new SceneMesh(Mesh::TRI_MESH);
     barBase->addChild(barMeshBg);
     barBase->addChild(barMeshBg);
-    barMeshBg->loadTexture("spriteEditor/sprite_frame_bg.png");
+    barMeshBg->getLocalShaderOptions()->loadTextureForParam("diffuse", "spriteEditor/sprite_frame_bg.png");
     barMeshBg->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     barMeshBg->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     
     
-    barMesh = new SceneMesh(Mesh::QUAD_MESH);
+    barMesh = new SceneMesh(Mesh::TRI_MESH);
     barBase->addChild(barMesh);
     barBase->addChild(barMesh);
     barMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     barMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     
     
-    frameTicksMesh = new SceneMesh(Mesh::QUAD_MESH);
+    frameTicksMesh = new SceneMesh(Mesh::TRI_MESH);
     barBase->addChild(frameTicksMesh);
     barBase->addChild(frameTicksMesh);
     
     
-    frameGripsMesh = new SceneMesh(Mesh::QUAD_MESH);
+    frameGripsMesh = new SceneMesh(Mesh::TRI_MESH);
     barBase->addChild(frameGripsMesh);
     barBase->addChild(frameGripsMesh);
     frameGripsMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
     frameGripsMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
-    frameGripsMesh->loadTexture("spriteEditor/frame_grip.png");
+    frameGripsMesh->getLocalShaderOptions()->loadTextureForParam("diffuse", "spriteEditor/frame_grip.png");
     
     
     this->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_UP);
     this->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_UP);
     this->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_DOWN);
     this->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_DOWN);
@@ -1936,7 +1936,7 @@ SpritePreview::SpritePreview(SpriteSet *spriteSet) : UIElement() {
     
     
     boundingBoxPreview = new SceneMesh(Mesh::LINE_MESH);
     boundingBoxPreview = new SceneMesh(Mesh::LINE_MESH);
     addChild(boundingBoxPreview);
     addChild(boundingBoxPreview);
-    boundingBoxPreview->loadTexture("main/stipple_small.png");
+    boundingBoxPreview->getLocalShaderOptions()->loadTextureForParam("diffuse", "main/stipple_small.png");
     boundingBoxPreview->lineWidth = 1;
     boundingBoxPreview->lineWidth = 1;
     
     
     
     

+ 4 - 1
Modules/Contents/UI/Include/PolyUIElement.h

@@ -92,7 +92,7 @@ namespace Polycode {
 			void initRect(Number width, Number height);
 			void initRect(Number width, Number height);
 			~UIRect();
 			~UIRect();
 			void Resize(Number width, Number height);
 			void Resize(Number width, Number height);
-			void Render();
+			void Render(GPUDrawBuffer *buffer);
 			void loadTexture(String fileName);
 			void loadTexture(String fileName);
 			void setTexture(Texture *texture);
 			void setTexture(Texture *texture);
 			void setImageCoordinates(Number x, Number y, Number width, Number height, Number imageScale = 1.0);
 			void setImageCoordinates(Number x, Number y, Number width, Number height, Number imageScale = 1.0);
@@ -104,6 +104,9 @@ namespace Polycode {
 		
 		
 			Number imageWidth;
 			Number imageWidth;
 			Number imageHeight;
 			Number imageHeight;
+        
+            Material *material;
+            ShaderBinding *localShaderOptions;
 			
 			
 			Mesh *rectMesh;
 			Mesh *rectMesh;
 			Texture *texture;
 			Texture *texture;

+ 50 - 13
Modules/Contents/UI/Source/PolyUIElement.cpp

@@ -23,6 +23,7 @@
 #include "PolyUIElement.h"
 #include "PolyUIElement.h"
 #include "PolyRenderer.h"
 #include "PolyRenderer.h"
 #include "PolyCoreServices.h"
 #include "PolyCoreServices.h"
+#include "PolyResourceManager.h"
 #include "PolyTexture.h"
 #include "PolyTexture.h"
 #include "PolyConfig.h"
 #include "PolyConfig.h"
 #include "PolyCoreInput.h"
 #include "PolyCoreInput.h"
@@ -159,6 +160,7 @@ Label *UILabel::getLabel() {
 
 
 UIRect::UIRect(String fileName, Number width, Number height) : UIElement() {
 UIRect::UIRect(String fileName, Number width, Number height) : UIElement() {
 	texture = NULL;
 	texture = NULL;
+    localShaderOptions = NULL;
 	loadTexture(fileName);
 	loadTexture(fileName);
     initRect(width, height);
     initRect(width, height);
     imageWidth = width;
     imageWidth = width;
@@ -167,6 +169,7 @@ UIRect::UIRect(String fileName, Number width, Number height) : UIElement() {
 
 
 UIRect::UIRect(String fileName) : UIElement() {
 UIRect::UIRect(String fileName) : UIElement() {
 	texture = NULL;
 	texture = NULL;
+    localShaderOptions = NULL;
 	loadTexture(fileName);
 	loadTexture(fileName);
 	if(texture) {	
 	if(texture) {	
 		initRect(texture->getWidth(), texture->getHeight());
 		initRect(texture->getWidth(), texture->getHeight());
@@ -183,6 +186,7 @@ UIRect::UIRect(String fileName) : UIElement() {
 
 
 UIRect::UIRect(Number width, Number height) : UIElement() {
 UIRect::UIRect(Number width, Number height) : UIElement() {
 	texture = NULL;
 	texture = NULL;
+    localShaderOptions = NULL;
 	initRect(width, height);
 	initRect(width, height);
 	imageWidth = 0;
 	imageWidth = 0;
 	imageHeight = 0;
 	imageHeight = 0;
@@ -204,8 +208,8 @@ void UIRect::setImageCoordinates(Number x, Number y, Number width, Number height
 	Number wFloat = width * pixelSizeX * imageScale;
 	Number wFloat = width * pixelSizeX * imageScale;
 	Number hFloat = height * pixelSizeY * imageScale;
 	Number hFloat = height * pixelSizeY * imageScale;
 
 
-    rectMesh->vertexPositionArray.data.clear();
-    rectMesh->vertexTexCoordArray.data.clear();
+    rectMesh->clearMesh();
+    rectMesh->indexedMesh = true;
     
     
 	rectMesh->addVertex(-whalf,-hhalf,0);
 	rectMesh->addVertex(-whalf,-hhalf,0);
 	rectMesh->addTexCoord(xFloat, (1.0-yFloat) - hFloat);
 	rectMesh->addTexCoord(xFloat, (1.0-yFloat) - hFloat);
@@ -219,6 +223,10 @@ void UIRect::setImageCoordinates(Number x, Number y, Number width, Number height
 	rectMesh->addVertex(-whalf,-hhalf+height,0);
 	rectMesh->addVertex(-whalf,-hhalf+height,0);
 	rectMesh->addTexCoord(xFloat, 1.0-yFloat);
 	rectMesh->addTexCoord(xFloat, 1.0-yFloat);
 
 
+    rectMesh->addIndexedFace(0, 1, 2);
+    rectMesh->addIndexedFace(0, 2, 3);
+    
+    
 	rebuildTransformMatrix();
 	rebuildTransformMatrix();
 	matrixDirty = true;
 	matrixDirty = true;
 }
 }
@@ -250,37 +258,62 @@ void UIRect::initRect(Number width, Number height) {
     rectMesh->indexedMesh = true;
     rectMesh->indexedMesh = true;
     rectMesh->addIndexedFace(0, 1, 2);
     rectMesh->addIndexedFace(0, 1, 2);
     rectMesh->addIndexedFace(0, 2, 3);
     rectMesh->addIndexedFace(0, 2, 3);
+    
+    material =  (Material*)CoreServices::getInstance()->getResourceManager()->getGlobalPool()->getResource(Resource::RESOURCE_MATERIAL, "Unlit");
+    localShaderOptions = new ShaderBinding();
+    
+    localShaderOptions->addAttributeBinding("texCoord", &rectMesh->vertexTexCoordArray);
+    localShaderOptions->addAttributeBinding("position", &rectMesh->vertexPositionArray);
+
+    if(texture) {
+        localShaderOptions->setTextureForParam("diffuse", texture);
+    }
 }
 }
 
 
 UIRect::~UIRect() {
 UIRect::~UIRect() {
 	delete rectMesh;
 	delete rectMesh;
+    delete localShaderOptions;
 }
 }
 
 
 void UIRect::loadTexture(String fileName) {
 void UIRect::loadTexture(String fileName) {
+
 	MaterialManager *materialManager = CoreServices::getInstance()->getMaterialManager();
 	MaterialManager *materialManager = CoreServices::getInstance()->getMaterialManager();
 	texture = materialManager->createTextureFromFile(fileName, materialManager->clampDefault, false);
 	texture = materialManager->createTextureFromFile(fileName, materialManager->clampDefault, false);
+    if(localShaderOptions) {
+        localShaderOptions->setTextureForParam("diffuse", texture);
+    }
 }
 }
 
 
 void UIRect::setTexture(Texture *texture) {
 void UIRect::setTexture(Texture *texture) {
 	this->texture = texture;
 	this->texture = texture;
+    if(localShaderOptions) {
+        localShaderOptions->setTextureForParam("diffuse", texture);
+    }
 }	
 }	
 
 
 Texture *UIRect::getTexture() {
 Texture *UIRect::getTexture() {
 	return texture;
 	return texture;
 }
 }
 
 
-void UIRect::Render() {
+void UIRect::Render(GPUDrawBuffer *buffer) {
     
     
-    // RENDERER_TODO
-    /*
-	renderer->clearShader();
-	renderer->setTexture(texture);
+    drawCall.options.depthTest = depthTest;
+    drawCall.options.depthWrite = depthWrite;
     
     
-    renderer->pushRenderDataArray(&rectMesh->vertexPositionArray);
-    renderer->pushRenderDataArray(&rectMesh->vertexTexCoordArray);
-
-	renderer->drawArrays(Mesh::QUAD_MESH, NULL);
-     */
+    drawCall.mode = rectMesh->getMeshType();
+    drawCall.numVertices = rectMesh->getVertexCount();
+    
+    if(rectMesh->indexedMesh) {
+        drawCall.indexed = true;
+        drawCall.indexArray = &rectMesh->indexArray;
+    } else {
+        drawCall.indexed = false;
+    }
+    
+    drawCall.material = material;
+    drawCall.shaderBinding = localShaderOptions;
+    
+    buffer->drawCalls.push_back(drawCall);
 }
 }
 
 
 void UIRect::Resize(Number width, Number height) {
 void UIRect::Resize(Number width, Number height) {
@@ -291,12 +324,16 @@ void UIRect::Resize(Number width, Number height) {
 	Number whalf = width/2.0f;
 	Number whalf = width/2.0f;
 	Number hhalf = height/2.0f;
 	Number hhalf = height/2.0f;
 
 
-    rectMesh->vertexPositionArray.data.clear();
+    rectMesh->clearMesh();
+    rectMesh->indexedMesh = true;
 
 
     rectMesh->addVertex(-whalf,-hhalf,0);
     rectMesh->addVertex(-whalf,-hhalf,0);
     rectMesh->addVertex(-whalf+width,-hhalf,0);
     rectMesh->addVertex(-whalf+width,-hhalf,0);
     rectMesh->addVertex(-whalf+width,-hhalf+height,0);
     rectMesh->addVertex(-whalf+width,-hhalf+height,0);
     rectMesh->addVertex(-whalf,-hhalf+height,0);
     rectMesh->addVertex(-whalf,-hhalf+height,0);
+    
+    rectMesh->addIndexedFace(0, 1, 2);
+    rectMesh->addIndexedFace(0, 2, 3);
 }
 }
 
 
 UIImage::UIImage(String imagePath, int width, int height) : UIRect(imagePath, width, height) {
 UIImage::UIImage(String imagePath, int width, int height) : UIRect(imagePath, width, height) {