const Ogre::GpuProgramPtr& MaterialGenerator::GetFragmentShader(Perm permutation) { ProgramMap::iterator i = mFsMap.find(permutation); if (i != mFsMap.end()) { return i->second; } else { // Create it mFsMap[permutation] = GenerateFragmentShader(permutation); return mFsMap[permutation]; } }
Framework::OpenGl::ProgramPtr CGSH_OpenGL::GenerateShader(const SHADERCAPS& caps) { auto vertexShader = GenerateVertexShader(caps); auto fragmentShader = GenerateFragmentShader(caps); auto result = std::make_shared<Framework::OpenGl::CProgram>(); result->AttachShader(vertexShader); result->AttachShader(fragmentShader); bool linkResult = result->Link(); assert(linkResult); assert(glGetError() == GL_NO_ERROR); return result; }