//----------------------------------------------------------------------- void CGProgramWriter::writeSourceCode(std::ostream& os, Program* program) { const ShaderFunctionList& functionList = program->getFunctions(); ShaderFunctionConstIterator itFunction; const UniformParameterList& parameterList = program->getParameters(); UniformParameterConstIterator itUniformParam = parameterList.begin(); // Generate source code header. writeProgramTitle(os, program); os << std::endl; // Generate dependencies. writeProgramDependencies(os, program); os << std::endl; // Generate global variable code. writeUniformParametersTitle(os, program); os << std::endl; for (itUniformParam=parameterList.begin(); itUniformParam != parameterList.end(); ++itUniformParam) { writeUniformParameter(os, *itUniformParam); os << ";" << std::endl; } os << std::endl; // Write program function(s). for (itFunction=functionList.begin(); itFunction != functionList.end(); ++itFunction) { Function* curFunction = *itFunction; writeFunctionTitle(os, curFunction); writeFunctionDeclaration(os, curFunction); os << "{" << std::endl; // Write local parameters. const ShaderParameterList& localParams = curFunction->getLocalParameters(); ShaderParameterConstIterator itParam; for (itParam=localParams.begin(); itParam != localParams.end(); ++itParam) { os << "\t"; writeLocalParameter(os, *itParam); os << ";" << std::endl; } // Sort and write function atoms. curFunction->sortAtomInstances(); const FunctionAtomInstanceList& atomInstances = curFunction->getAtomInstances(); FunctionAtomInstanceConstIterator itAtom; for (itAtom=atomInstances.begin(); itAtom != atomInstances.end(); ++itAtom) { writeAtomInstance(os, *itAtom); } os << "}" << std::endl; } os << std::endl; }
//----------------------------------------------------------------------- void HLSLProgramWriter::writeSourceCode(std::ostream& os, Program* program) { const ShaderFunctionList& functionList = program->getFunctions(); ShaderFunctionConstIterator itFunction; const UniformParameterList& parameterList = program->getParameters(); UniformParameterConstIterator itUniformParam = parameterList.begin(); // Generate source code header. writeProgramTitle(os, program); os << std::endl; // Generate dependencies. writeProgramDependencies(os, program); os << std::endl; // Generate global variable code. writeUniformParametersTitle(os, program); os << std::endl; for (itUniformParam=parameterList.begin(); itUniformParam != parameterList.end(); ++itUniformParam) { writeUniformParameter(os, *itUniformParam); os << ";" << std::endl; } os << std::endl; // Write program function(s). for (itFunction=functionList.begin(); itFunction != functionList.end(); ++itFunction) { Function* curFunction = *itFunction; bool needToTranslateHlsl4Color = false; ParameterPtr colorParameter; writeFunctionTitle(os, curFunction); writeFunctionDeclaration(os, curFunction, needToTranslateHlsl4Color, colorParameter); os << "{" << std::endl; // Write local parameters. const ShaderParameterList& localParams = curFunction->getLocalParameters(); ShaderParameterConstIterator itParam = localParams.begin(); for (; itParam != localParams.end(); ++itParam) { os << "\t"; writeLocalParameter(os, *itParam); os << ";" << std::endl; } // translate hlsl 4 color parameter if needed if(needToTranslateHlsl4Color) { os << "\t"; writeLocalParameter(os, colorParameter); os << ";" << std::endl; os << std::endl <<"\tFFP_Assign(iHlsl4Color_0, " << colorParameter->getName() << ");" << std::endl; } // Sort and write function atoms. curFunction->sortAtomInstances(); const FunctionAtomInstanceList& atomInstances = curFunction->getAtomInstances(); FunctionAtomInstanceConstIterator itAtom; for (itAtom=atomInstances.begin(); itAtom != atomInstances.end(); ++itAtom) { writeAtomInstance(os, *itAtom); } os << "}" << std::endl; } os << std::endl; }