Shader *MaterialManager::createShaderFromXMLNode(TiXmlNode *node) { Shader *retShader = NULL; if(node->ToElement()->Attribute("type")) { String shaderType = node->ToElement()->Attribute("type"); // Logger::log("Attempting to create %s shader\n", shaderType.c_str()); for(int m=0; m < shaderModules.size(); m++) { PolycodeShaderModule *shaderModule = shaderModules[m]; if(shaderModule->getShaderType() == shaderType) { retShader = shaderModule->createShader(node); } } } int numAreaLights = 0; int numSpotLights = 0; if(node->ToElement()->Attribute("numAreaLights")) { numAreaLights = atoi(node->ToElement()->Attribute("numAreaLights")); } if(node->ToElement()->Attribute("numSpotLights")) { numSpotLights = atoi(node->ToElement()->Attribute("numSpotLights")); } if(retShader) { retShader->numAreaLights = numAreaLights; retShader->numSpotLights = numSpotLights; } return retShader; }
Shader *MaterialManager::createShaderFromXMLNode(TiXmlNode *node) { TiXmlElement *nodeElement = node->ToElement(); if (!nodeElement) return NULL; // Skip comment nodes Shader *retShader = NULL; if(nodeElement->Attribute("type")) { String shaderType = nodeElement->Attribute("type"); // Logger::log("Attempting to create %s shader\n", shaderType.c_str()); for(int m=0; m < shaderModules.size(); m++) { PolycodeShaderModule *shaderModule = shaderModules[m]; if(shaderModule->getShaderType() == shaderType) { retShader = shaderModule->createShader(node); } } } if (!retShader) return NULL; int numAreaLights = 0; int numSpotLights = 0; if(nodeElement->Attribute("numAreaLights")) { numAreaLights = atoi(nodeElement->Attribute("numAreaLights")); } if(nodeElement->Attribute("numSpotLights")) { numSpotLights = atoi(nodeElement->Attribute("numSpotLights")); } retShader->screenShader = false; if(nodeElement->Attribute("screen")) { if(String(nodeElement->Attribute("screen")) == "true") { retShader->screenShader = true; } } if(retShader) { retShader->numAreaLights = numAreaLights; retShader->numSpotLights = numSpotLights; } return retShader; }
Shader *MaterialManager::createShader(String shaderType, String name, String vpName, String fpName, bool screenShader) { Shader *retShader = NULL; for(int m=0; m < shaderModules.size(); m++) { PolycodeShaderModule *shaderModule = shaderModules[m]; if(shaderModule->getShaderType() == shaderType) { retShader = shaderModule->createShader(name, vpName, fpName); } } if(retShader) { retShader->screenShader = screenShader; retShader->numAreaLights = 0; retShader->numSpotLights = 0; } return retShader; }