Просмотр исходного кода

Shader programs are now referenced by paths not names, will be loaded if not a current resource when loading shader, changed the default material files to reflect the new changes

Ivan Safrin 12 лет назад
Родитель
Сommit
1caf52677f

BIN
Assets/Default asset pack/default.pak


+ 20 - 122
Assets/Default asset pack/default/default.mat

@@ -2,142 +2,40 @@
 <polycode>	
 <polycode>	
 	<shaders>		
 	<shaders>		
 		<shader type="glsl" name="DefaultShader" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="DefaultShader" numAreaLights="4" numSpotLights="2">		
-			<vp source="DefaultShader.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="DefaultShader.frag">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>			
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-				</textures>
-			</fp>
+			<vp source="default/DefaultShader.vert"/>
+			<fp source="default/DefaultShader.frag"/>
 		</shader>	
 		</shader>	
 		<shader type="glsl" name="DefaultShaderNoTexture" numAreaLights="4" numSpotLights="2">	
 		<shader type="glsl" name="DefaultShaderNoTexture" numAreaLights="4" numSpotLights="2">	
-			<vp source="DefaultShader.vert">
-				<params>
-				</params>				
-			</vp>
-			<fp source="DefaultShaderNoTexture.frag">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>								
-				</params>				
-			</fp>
+			<vp source="default/DefaultShader.vert"/>
+			<fp source="default/DefaultShaderNoTexture.frag"/>
 		</shader>
 		</shader>
 		<shader type="glsl" name="DefaultShaderShadows" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="DefaultShaderShadows" numAreaLights="4" numSpotLights="2">		
-			<vp source="DefaultShaderShadows.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="DefaultShaderShadows.frag">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>							
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-				</textures>				
-			</fp>
-		</shader>
-		
+			<vp source="default/DefaultShaderShadows.vert"/>
+			<fp source="default/DefaultShaderShadows.frag"/>
+		</shader>		
 		<shader type="glsl" name="DefaultShaderVertex" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="DefaultShaderVertex" numAreaLights="4" numSpotLights="2">		
-			<vp source="DefaultShaderVertex.vert">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>				
-				</params>				
-			</vp>
-			<fp source="DefaultShaderVertex.frag">
-				<params>
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-				</textures>
-			</fp>
+			<vp source="default/DefaultShaderVertex.vert"/>
+			<fp source="default/DefaultShaderVertex.frag"/>
 		</shader>			
 		</shader>			
 		<shader type="glsl" name="DefaultShaderVertexNoTexture" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="DefaultShaderVertexNoTexture" numAreaLights="4" numSpotLights="2">		
-			<vp source="DefaultShaderVertex.vert">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>											
-				</params>				
-			</vp>
-			<fp source="DefaultShaderVertexNoTexture.frag">
-				<params>
-				</params>
-			</fp>
-		</shader>			
-		
+			<vp source="default/DefaultShaderVertex.vert"/>
+			<fp source="default/DefaultShaderVertexNoTexture.frag"/>
+		</shader>
 		<shader type="glsl" name="DefaultParticleShader" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="DefaultParticleShader" numAreaLights="4" numSpotLights="2">		
-			<vp source="DefaultShader.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="DefaultParticleShader.frag">
-				<params>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>			
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-				</textures>
-			</fp>
+			<vp source="default/DefaultShader.vert"/>
+			<fp source="default/DefaultParticleShader.frag"/>
 		</shader>															
 		</shader>															
 		<shader type="glsl" name="Unlit" numAreaLights="0" numSpotLights="0">		
 		<shader type="glsl" name="Unlit" numAreaLights="0" numSpotLights="0">		
-			<vp source="Unlit.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="Unlit.frag">
-				<params>			
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-				</textures>
-			</fp>
+			<vp source="default/Unlit.vert"/>
+			<fp source="default/Unlit.frag"/>
 		</shader>
 		</shader>
 		<shader type="glsl" name="LightCube" numAreaLights="0" numSpotLights="0">		
 		<shader type="glsl" name="LightCube" numAreaLights="0" numSpotLights="0">		
-			<vp source="DefaultShader.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="LightCube.frag">
-				<params>			
-				</params>
-			</fp>
+			<vp source="default/DefaultShader.vert"/>
+			<fp source="default/LightCube.frag"/>
 		</shader>		
 		</shader>		
 		<shader type="glsl" name="NorColSpec" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="NorColSpec" numAreaLights="4" numSpotLights="2">		
-			<vp source="NormalShader.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="NorColSpec.frag">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>							
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-					<texture name="normal_map"/>
-					<texture name="specular_map"/>										
-				</textures>
-			</fp>
+			<vp source="default/NormalShader.vert"/>
+			<fp source="default/NorColSpec.frag"/>
 		</shader>											
 		</shader>											
 	</shaders>	
 	</shaders>	
 	<materials>
 	<materials>

BIN
Assets/Default asset pack/hdr.pak


+ 14 - 42
Assets/Default asset pack/hdr/hdr.mat

@@ -2,60 +2,32 @@
 <polycode>	
 <polycode>	
 	<shaders>
 	<shaders>
 		<shader type="glsl" name="NorColSpecHDR" numAreaLights="4" numSpotLights="2">		
 		<shader type="glsl" name="NorColSpecHDR" numAreaLights="4" numSpotLights="2">		
-			<vp source="NormalShader.vert">
-				<params>			
-				</params>				
-			</vp>
-			<fp source="NorColSpecHDR.frag">
-				<params>
-					<param type="Number" name="shininess" default="50.0" min="2.0" max="100.0"/>
-					<param type="Color" name="diffuse_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="specular_color" default="1.0 1.0 1.0 1.0"/>
-					<param type="Color" name="ambient_color" auto="true"/>							
-				</params>
-				<textures>
-					<texture name="diffuse"/>
-					<texture name="normal_map"/>
-					<texture name="specular_map"/>										
-				</textures>								
-			</fp>
+			<vp source="default/NormalShader.vert"/>
+			<fp source="hdr/NorColSpecHDR.frag"/>
 		</shader>	
 		</shader>	
 		<shader type="glsl" name="HDRProcessShader" screen="true">
 		<shader type="glsl" name="HDRProcessShader" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="HDRProcess.frag">
-				<params>
-					<param name="exposure" type="Number" default="1.0"/>
-				</params>								
-			</fp>
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="hdr/HDRProcess.frag"/>
 		</shader>		
 		</shader>		
 		<shader type="glsl" name="HDRProcessShaderBloom" screen="true">
 		<shader type="glsl" name="HDRProcessShaderBloom" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="HDRProcessBloom.frag">
-				<params>
-					<param name="exposure" type="Number" default="1.0"/>
-					<param name="bloomFactor" type="Number" default="0.5"/>					
-				</params>								
-			</fp>			
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="hdr/HDRProcessBloom.frag"/>
 		</shader>		
 		</shader>		
 		<shader type="glsl" name="HDRBloomH" screen="true">
 		<shader type="glsl" name="HDRBloomH" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="HDRBloomH.frag"/>
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="hdr/HDRBloomH.frag"/>
 		</shader>
 		</shader>
 		<shader type="glsl" name="HDRBloomV" screen="true">
 		<shader type="glsl" name="HDRBloomV" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="HDRBloomV.frag"/>
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="hdr/HDRBloomV.frag"/>
 		</shader>	
 		</shader>	
 		<shader type="glsl" name="PassThrough" screen="true">
 		<shader type="glsl" name="PassThrough" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="PassThrough.frag"/>
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="default/PassThrough.frag"/>
 		</shader>	
 		</shader>	
 		<shader type="glsl" name="ExtractBloom" screen="true">
 		<shader type="glsl" name="ExtractBloom" screen="true">
-			<vp source="ScreenShader.vert"/>
-			<fp source="ExtractBloom.frag">
-				<params>
-					<param name="brightThreshold" type="Number" default="2.0"/>
-				</params>								
-			</fp>			
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="hdr/ExtractBloom.frag"/>
 		</shader>							
 		</shader>							
 	</shaders>
 	</shaders>
 	<materials>
 	<materials>

+ 3 - 0
Core/Contents/Include/PolyResourceManager.h

@@ -92,6 +92,9 @@ namespace Polycode {
 			* @param resourceName Name of the resource to request.
 			* @param resourceName Name of the resource to request.
 			*/
 			*/
 			Resource *getResource(int resourceType, const String& resourceName) const;
 			Resource *getResource(int resourceType, const String& resourceName) const;
+
+			Resource *getResourceByPath(const String& resourcePath) const;
+
 		
 		
 			/**
 			/**
 			 * Request a full set of loaded resources. You need to manually cast them to their subclasses based on their type.
 			 * Request a full set of loaded resources. You need to manually cast them to their subclasses based on their type.

+ 24 - 4
Core/Contents/Source/PolyGLSLShaderModule.cpp

@@ -119,8 +119,8 @@ Shader *GLSLShaderModule::createShader(String name, String vpName, String fpName
 	GLSLProgram *vp = NULL;
 	GLSLProgram *vp = NULL;
 	GLSLProgram *fp = NULL;
 	GLSLProgram *fp = NULL;
 
 
-	vp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_PROGRAM, vpName);
-	fp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_PROGRAM, fpName);
+	vp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResourceByPath(vpName);
+	fp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResourceByPath(fpName);
 		
 		
 	if(vp != NULL && fp != NULL) {
 	if(vp != NULL && fp != NULL) {
 		GLSLShader *shader = new GLSLShader(vp,fp);
 		GLSLShader *shader = new GLSLShader(vp,fp);
@@ -145,10 +145,30 @@ Shader *GLSLShaderModule::createShader(TiXmlNode *node) {
 		if (!pChildElement) continue; // Skip comment nodes
 		if (!pChildElement) continue; // Skip comment nodes
 		
 		
 		if(strcmp(pChild->Value(), "vp") == 0) {
 		if(strcmp(pChild->Value(), "vp") == 0) {
-			vp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_PROGRAM, String(pChildElement->Attribute("source")));
+			String vpFileName = String(pChildElement->Attribute("source"));
+			vp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResourceByPath(vpFileName);
+			if(!vp) {
+				vp = (GLSLProgram*)CoreServices::getInstance()->getMaterialManager()->createProgramFromFile(vpFileName);
+				if(vp) {
+					vp->setResourcePath(vpFileName);
+					OSFileEntry entry = OSFileEntry(vpFileName, OSFileEntry::TYPE_FILE);
+					vp->setResourceName(entry.name);
+					CoreServices::getInstance()->getResourceManager()->addResource(vp);
+				}
+			}
 		}
 		}
 		if(strcmp(pChild->Value(), "fp") == 0) {
 		if(strcmp(pChild->Value(), "fp") == 0) {
-			fp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResource(Resource::RESOURCE_PROGRAM, String(pChildElement->Attribute("source")));
+			String fpFileName = String(pChildElement->Attribute("source"));		
+			fp = (GLSLProgram*)CoreServices::getInstance()->getResourceManager()->getResourceByPath(fpFileName);
+			if(!fp) {
+				fp = (GLSLProgram*)CoreServices::getInstance()->getMaterialManager()->createProgramFromFile(fpFileName);
+				if(fp) {
+					fp->setResourcePath(fpFileName);
+					OSFileEntry entry = OSFileEntry(fpFileName, OSFileEntry::TYPE_FILE);					
+					fp->setResourceName(entry.name);
+					CoreServices::getInstance()->getResourceManager()->addResource(fp);				
+				}
+			}			
 		}
 		}
 		
 		
 	}
 	}

+ 4 - 0
Core/Contents/Source/PolyMaterialManager.cpp

@@ -87,6 +87,9 @@ ShaderProgram *MaterialManager::createProgramFromFile(String programPath) {
 		PolycodeShaderModule *shaderModule = shaderModules[m];
 		PolycodeShaderModule *shaderModule = shaderModules[m];
 		if(shaderModule->acceptsExtension(entry.extension)) {
 		if(shaderModule->acceptsExtension(entry.extension)) {
 			ShaderProgram *newProgram = shaderModule->createProgramFromFile(entry.extension, entry.fullPath);
 			ShaderProgram *newProgram = shaderModule->createProgramFromFile(entry.extension, entry.fullPath);
+			if(newProgram) {
+				newProgram->setResourcePath(programPath);
+			}
 			return newProgram;
 			return newProgram;
 		}
 		}
 	}
 	}
@@ -314,6 +317,7 @@ std::vector<Shader*> MaterialManager::loadShadersFromFile(String fileName) {
 				Shader *newShader = createShaderFromXMLNode(pChild);
 				Shader *newShader = createShaderFromXMLNode(pChild);
 				if(newShader != NULL) {
 				if(newShader != NULL) {
 					Logger::log("Adding shader %s\n", newShader->getName().c_str());
 					Logger::log("Adding shader %s\n", newShader->getName().c_str());
+					newShader->setResourceName(newShader->getName());
 					retVector.push_back(newShader);
 					retVector.push_back(newShader);
 				}
 				}
 			}
 			}

+ 11 - 2
Core/Contents/Source/PolyResourceManager.cpp

@@ -80,7 +80,6 @@ void ResourceManager::parseShaders(const String& dirPath, bool recursive) {
 				std::vector<Shader*> shaders = materialManager->loadShadersFromFile(resourceDir[i].fullPath);
 				std::vector<Shader*> shaders = materialManager->loadShadersFromFile(resourceDir[i].fullPath);
 				
 				
 				for(int s=0; s < shaders.size(); s++) {
 				for(int s=0; s < shaders.size(); s++) {
-					shaders[s]->setResourceName(shaders[s]->getName());
 					addResource(shaders[s]);
 					addResource(shaders[s]);
 					materialManager->addShader(shaders[s]);
 					materialManager->addShader(shaders[s]);
 				}
 				}
@@ -255,10 +254,20 @@ void ResourceManager::addDirResource(const String& dirPath, bool recursive) {
 	parseOthers(dirPath, recursive);	
 	parseOthers(dirPath, recursive);	
 }
 }
 
 
+Resource *ResourceManager::getResourceByPath(const String& resourcePath) const {
+	Logger::log("requested %s\n", resourcePath.c_str());
+	for(int i =0; i < resources.size(); i++) {
+		if(resources[i]->getResourcePath() == resourcePath) {
+			return resources[i];
+		}
+	}
+	Logger::log("return NULL\n");	
+	return NULL;
+}
+
 Resource *ResourceManager::getResource(int resourceType, const String& resourceName) const {
 Resource *ResourceManager::getResource(int resourceType, const String& resourceName) const {
 	Logger::log("requested %s\n", resourceName.c_str());
 	Logger::log("requested %s\n", resourceName.c_str());
 	for(int i =0; i < resources.size(); i++) {
 	for(int i =0; i < resources.size(); i++) {
-//		Logger::log("is it %s?\n", resources[i]->getResourceName().c_str());		
 		if(resources[i]->getResourceName() == resourceName && resources[i]->getResourceType() == resourceType) {
 		if(resources[i]->getResourceName() == resourceName && resources[i]->getResourceType() == resourceType) {
 			return resources[i];
 			return resources[i];
 		}
 		}

+ 36 - 10
IDE/Contents/Source/PolycodeMaterialEditor.cpp

@@ -203,13 +203,6 @@ ShaderEditorPane::ShaderEditorPane() : UIElement() {
 
 
 	baseProps->propHeight = 220;
 	baseProps->propHeight = 220;
 	
 	
-	PropSheet *vertexProps = new PropSheet("VERTEX PROGRAM OPTIONS", "");
-	propList->addPropSheet(vertexProps);
-
-	PropSheet *fragmentProps = new PropSheet("FRAGMENT PROGRAM OPTIONS", "");
-	propList->addPropSheet(fragmentProps);
-
-
 	propList->updateProps();
 	propList->updateProps();
 	
 	
 	enabled = false;
 	enabled = false;
@@ -376,7 +369,9 @@ MaterialPreviewBox::MaterialPreviewBox() : UIElement() {
 	
 	
 	previewBg->setMaterial(bgMaterial);
 	previewBg->setMaterial(bgMaterial);
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("Images/material_grid.png");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("Images/material_grid.png");
+	if(previewBg->getLocalShaderOptions()) {
 	previewBg->getLocalShaderOptions()->addTexture("diffuse", tex);
 	previewBg->getLocalShaderOptions()->addTexture("diffuse", tex);
+	}
 	previewScene->addChild(previewBg);
 	previewScene->addChild(previewBg);
 	
 	
 	previewScene->clearColor.setColor(0.1, 0.1, 0.1, 0.0);	
 	previewScene->clearColor.setColor(0.1, 0.1, 0.1, 0.0);	
@@ -777,8 +772,9 @@ bool PolycodeMaterialEditor::openFile(OSFileEntry filePath) {
 	
 	
 	shaders = CoreServices::getInstance()->getMaterialManager()->loadShadersFromFile(filePath.fullPath);
 	shaders = CoreServices::getInstance()->getMaterialManager()->loadShadersFromFile(filePath.fullPath);
 	for(int i=0; i < shaders.size(); i++) {
 	for(int i=0; i < shaders.size(); i++) {
-		materialBrowser->addShader(shaders[i]);
+		materialBrowser->addShader(shaders[i]);		
 		CoreServices::getInstance()->getMaterialManager()->addShader(shaders[i]);
 		CoreServices::getInstance()->getMaterialManager()->addShader(shaders[i]);
+		CoreServices::getInstance()->getResourceManager()->addResource(shaders[i]);
 	}	
 	}	
 
 
 	cubemaps = CoreServices::getInstance()->getMaterialManager()->loadCubemapsFromFile(filePath.fullPath);
 	cubemaps = CoreServices::getInstance()->getMaterialManager()->loadCubemapsFromFile(filePath.fullPath);
@@ -847,6 +843,26 @@ void PolycodeMaterialEditor::saveFile() {
 	Object fileData;
 	Object fileData;
 	fileData.root.name = "polycode_material_library";
 	fileData.root.name = "polycode_material_library";
 
 
+	ObjectEntry *shadersEntry = fileData.root.addChild("shaders");
+	for(int i=0; i < shaders.size(); i++) {
+		ObjectEntry *shaderEntry = shadersEntry->addChild("shader");
+		shaderEntry->addChild("type", String("glsl"));
+		shaderEntry->addChild("name", shaders[i]->getName());
+		shaderEntry->addChild("numAreaLights", shaders[i]->numAreaLights);
+		shaderEntry->addChild("numSpotLights", shaders[i]->numSpotLights);
+		shaderEntry->addChild("screen", shaders[i]->screenShader);
+
+		ObjectEntry *vpEntry = shaderEntry->addChild("vp");
+		String sourcePath = shaders[i]->vp->getResourcePath();
+		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");
+		vpEntry->addChild("source", sourcePath);
+				
+		ObjectEntry *fpEntry = shaderEntry->addChild("fp");
+		sourcePath = shaders[i]->fp->getResourcePath();
+		sourcePath = sourcePath.replace(parentProject->getRootFolder()+"/", "");		
+		fpEntry->addChild("source", sourcePath);
+	}
+
 	ObjectEntry *cubemapsEntry = fileData.root.addChild("cubemaps");
 	ObjectEntry *cubemapsEntry = fileData.root.addChild("cubemaps");
 	
 	
 	for(int i=0; i < cubemaps.size(); i++) {
 	for(int i=0; i < cubemaps.size(); i++) {
@@ -879,17 +895,27 @@ void PolycodeMaterialEditor::saveFile() {
 		ObjectEntry *texturesEntry = shaderEntry->addChild("textures");
 		ObjectEntry *texturesEntry = shaderEntry->addChild("textures");
 		
 		
 		ShaderBinding *shaderBinding = material->getShaderBinding(0);
 		ShaderBinding *shaderBinding = material->getShaderBinding(0);
+		
 		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]);
 			if(texture) {
 			if(texture) {
 				String texturePath = texture->getResourcePath();
 				String texturePath = texture->getResourcePath();
-				texturePath = texturePath.replace(parentProject->getRootFolder()+"/", "");
-				
+				texturePath = texturePath.replace(parentProject->getRootFolder()+"/", "");				
 				ObjectEntry *textureEntry = texturesEntry->addChild("texture", texturePath);
 				ObjectEntry *textureEntry = texturesEntry->addChild("texture", texturePath);
 				textureEntry->addChild("name", shader->expectedTextures[j]);
 				textureEntry->addChild("name", shader->expectedTextures[j]);
 			}
 			}
 		}
 		}
 
 
+		for(int j=0; j < shader->expectedCubemaps.size(); j++) {
+			Cubemap *cubemap = shaderBinding->getCubemap(shader->expectedCubemaps[j]);
+			if(cubemap) {
+				String cubemapName = cubemap->getResourceName();
+				ObjectEntry *cubemapEntry = texturesEntry->addChild("cubemap", cubemapName);
+				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");