void PhongMaterial::prepareLocalChunks(void) { if(_materialChunk != NullFC) return; _materialChunk = MaterialChunk::create(); addRefCP(_materialChunk); _blendChunk = BlendChunk::create(); addRefCP(_blendChunk); beginEditCP(_blendChunk); _blendChunk->setSrcFactor (GL_SRC_ALPHA); _blendChunk->setDestFactor(GL_ONE_MINUS_SRC_ALPHA); endEditCP (_blendChunk); // phong shading without a fragment shader looks quite black ;-) // all cards with a fragment shader should also have a vertex shader. // calling hasCommonExtension() here is not a good idea as this works // only for a initialized window, I added a check to hasCommonExtension() // so this won't crash anymore. if(Window::hasCommonExtension(_arbFragmentProgram)) { _vpChunk = VertexProgramChunk::create(); addRefCP(_vpChunk); beginEditCP(_vpChunk); _vpChunk->setProgram(_phong_vp_prg); endEditCP(_vpChunk); _fpChunk = FragmentProgramChunk::create(); addRefCP(_fpChunk); createFragmentProgram(); } }
void RenderMethod_Grass_CG::setupShader(CGcontext &cg, CGprofile &_cgVertexProfile, CGprofile &_cgFragmentProfile) { RenderMethod::setupShader(cg, _cgVertexProfile, _cgFragmentProfile); createVertexProgram(cg, FileName("data/shaders/cg/grass.vp.cg")); createFragmentProgram(cg, FileName("data/shaders/cg/grass.fp.cg")); // Vertex program parameters cgMVP = getVertexProgramParameter (cg, "MVP"); cgView = getVertexProgramParameter (cg, "View"); cgViewI = getVertexProgramParameter (cg, "ViewI"); cgLightPos = getVertexProgramParameter (cg, "LightPos"); cgCameraPos = getVertexProgramParameter (cg, "CameraPos"); cgCameraRight = getVertexProgramParameter (cg, "CameraRight"); cgCameraUp = getVertexProgramParameter (cg, "CameraUp"); cgTime = getVertexProgramParameter (cg, "time"); // Fragment program parameters cgTexture = getFragmentProgramParameter(cg, "tex0"); cgKa = getFragmentProgramParameter(cg, "Ka"); cgKd = getFragmentProgramParameter(cg, "Kd"); cgkC = getFragmentProgramParameter(cg, "kC"); cgkL = getFragmentProgramParameter(cg, "kL"); cgkQ = getFragmentProgramParameter(cg, "kQ"); }
StatePtr PhongMaterial::makeState(void) { StatePtr state = State::create(); prepareLocalChunks(); Color3f v3; Color4f v4; float alpha = 1.f - getTransparency(); prepareLocalChunks(); beginEditCP(_materialChunk); v3 = getAmbient(); v4.setValuesRGBA(v3[0], v3[1], v3[2], alpha); _materialChunk->setAmbient(v4); v3 = getDiffuse(); v4.setValuesRGBA(v3[0], v3[1], v3[2], alpha); _materialChunk->setDiffuse(v4); v3 = getSpecular(); v4.setValuesRGBA(v3[0], v3[1], v3[2], alpha); _materialChunk->setSpecular(v4); _materialChunk->setShininess(getShininess()); v3 = getEmission(); v4.setValuesRGBA(v3[0], v3[1], v3[2], alpha); _materialChunk->setEmission(v4); _materialChunk->setLit(getLit()); _materialChunk->setColorMaterial(getColorMaterial()); endEditCP (_materialChunk); state->addChunk(_materialChunk); if(isTransparent()) state->addChunk(_blendChunk); if(_vpChunk != NullFC) state->addChunk(_vpChunk); createFragmentProgram(); if(_fpChunk != NullFC) state->addChunk(_fpChunk); for(MFStateChunkPtr::iterator i = _mfChunks.begin(); i != _mfChunks.end(); ++i) { state->addChunk(*i); } return state; }
void RenderMethod_CGTest::setupShader(CGcontext &cg, CGprofile &_cgVertexProfile, CGprofile &_cgFragmentProfile) { RenderMethod::setupShader(cg, _cgVertexProfile, _cgFragmentProfile); createVertexProgram(cg, FileName("data/shaders/cg/test.vp.cg")); createFragmentProgram(cg, FileName("data/shaders/cg/test.fp.cg")); // get handles shader program parameters cgProj = getVertexProgramParameter (cg, "Proj"); cgView = getVertexProgramParameter (cg, "View"); cgTexture = getFragmentProgramParameter(cg, "tex0"); // setup shader constants cgGLSetStateMatrixParameter(cgProj, CG_GL_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); cgSetParameterVariability(cgProj, CG_LITERAL); // make it a constant }
void RenderMethod_TerrainPhong_CG::setupShader(CGcontext &cg, CGprofile &_cgVertexProfile, CGprofile &_cgFragmentProfile) { RenderMethod::setupShader(cg, _cgVertexProfile, _cgFragmentProfile); createVertexProgram(cg, FileName("data/shaders/cg/terrain.vp.cg")); createFragmentProgram(cg, FileName("data/shaders/cg/terrain.fp.cg")); // Vertex program parameters cgMVP = getVertexProgramParameter (cg, "MVP"); cgView = getVertexProgramParameter (cg, "View"); cgCameraPos = getVertexProgramParameter (cg, "CameraPos"); cgLightDir = getFragmentProgramParameter(cg, "LightDir"); cgTexture = getFragmentProgramParameter(cg, "tex0"); cgKa = getFragmentProgramParameter(cg, "Ka"); cgKd = getFragmentProgramParameter(cg, "Kd"); }
//--------------------------------------------------------------------- HighLevelGpuProgramPtr TerrainMaterialGeneratorC::SM2Profile::ShaderHelper::generateFragmentProgram( const SM2Profile* prof, const Terrain* terrain, TechniqueType tt) { HighLevelGpuProgramPtr ret = createFragmentProgram(prof, terrain, tt); StringUtil::StrStreamType sourceStr; generateFragmentProgramSource(prof, terrain, tt, sourceStr); ret->setSource(sourceStr.str()); ret->load(); defaultFpParams(prof, terrain, tt, ret); #if 1 LogManager::getSingleton().stream(LML_TRIVIAL) << "*** Terrain Fragment Program: " << ret->getName() << " ***\n" << ret->getSource() << "\n*** ***"; #endif return ret; }
void RenderMethod_PhongPoint_CG::setupShader(CGcontext &cg, CGprofile &_cgVertexProfile, CGprofile &_cgFragmentProfile) { RenderMethod::setupShader(cg, _cgVertexProfile, _cgFragmentProfile); createVertexProgram(cg, FileName("data/shaders/cg/phong_point.vp.cg")); createFragmentProgram(cg, FileName("data/shaders/cg/phong_point.fp.cg")); // Vertex program parameters cgMVP = getVertexProgramParameter (cg, "MVP"); cgView = getVertexProgramParameter (cg, "View"); cgLightPos = getVertexProgramParameter (cg, "LightPos"); cgCameraPos = getVertexProgramParameter (cg, "CameraPos"); cgTexture = getFragmentProgramParameter(cg, "tex0"); cgKa = getFragmentProgramParameter(cg, "Ka"); cgKd = getFragmentProgramParameter(cg, "Kd"); cgKs = getFragmentProgramParameter(cg, "Ks"); cgShininess = getFragmentProgramParameter(cg, "shininess"); cgkC = getFragmentProgramParameter(cg, "kC"); cgkL = getFragmentProgramParameter(cg, "kL"); cgkQ = getFragmentProgramParameter(cg, "kQ"); }