KBOOL Kylin::EffectFade::Initialize() { Ogre::CompositorPtr spCompositor = Ogre::CompositorManager::getSingleton().create( m_sName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); Ogre::CompositionTechnique *t; Ogre::CompositionTechnique::TextureDefinition *td; Ogre::CompositionTargetPass *tp; Ogre::CompositionPass *pass; t = spCompositor->createTechnique(); td = t->createTextureDefinition("scene"); td->width = 1; td->height = 1; td->formatList.push_back(Ogre::PF_X8R8G8B8); tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("PostFilters/Fade"); pass->setInput(0, "scene"); pass->setIdentifier(0xDEADBADE); // receive default parameters from material script m_fColourAmount = 0; m_fGrayAmount = 1; if (!pass->getMaterial().isNull()) { Ogre::GpuProgramParametersSharedPtr parameters = pass->getMaterial()->getTechnique(0)->getPass(0)->getFragmentProgramParameters(); /*#if OGRE_VERSION >= 0x010300*/ const Ogre::GpuConstantDefinition* def; def = parameters->_findNamedConstantDefinition("colour_amount"); if (def) parameters->_readRawConstants(def->physicalIndex, 1, &m_fColourAmount); def = parameters->_findNamedConstantDefinition("gray_amount"); if (def) parameters->_readRawConstants(def->physicalIndex, 1, &m_fGrayAmount); // #else // GpuProgramParameters::RealConstantEntry* entry; // // entry = parameters->getNamedRealConstantEntry("colour_amount"); // if (entry && entry->isSet) // m_fColourAmount = entry->val[0]; // // entry = parameters->getNamedRealConstantEntry("gray_amount"); // if (entry && entry->isSet) // m_fGrayAmount = entry->val[0]; // #endif } KBOOL bRet = EffectCompositor::Initialize(); if (bRet) m_pCompositor->addListener(this); return bRet; }
bool gkOgreCompositorHelper::createHeatVisionCompositor() { #if GK_USE_COMPOSITOR_HEAT_VISION using namespace Ogre; /// Heat vision effect try { Ogre::CompositorPtr comp4 = Ogre::CompositorManager::getSingleton().create( GK_COMPOSITOR_HEAT_VISION, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); Ogre::CompositionTechnique *t = comp4->createTechnique(); t->setCompositorLogicName(GK_COMPOSITOR_HEAT_VISION); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } /// Render scene { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } /// Light to heat pass { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setIdentifier(0xDEADBABE); /// Identify pass for use in listener pass->setMaterialName("Fury/HeatVision/LightToHeat"); pass->setInput(0, "scene"); } } /// Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Fury/HeatVision/Blur"); pass->setInput(0, "temp"); } } } catch (Exception &e) { gkPrintf("[CMP] FAILED %s", e.getFullDescription().c_str()); return false; } return true; #else return false; #endif }
//----------------------------------------------------------------------------------- /// Create the hard coded postfilter effects void CompositorDemo::createEffects(void) { // Bloom compositor is loaded from script but here is the hard coded equivalent // CompositorPtr comp = CompositorManager::getSingleton().create( // "Bloom", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME // ); // { // CompositionTechnique *t = comp->createTechnique(); // { // CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("rt0"); // def->width = 128; // def->height = 128; // def->format = PF_A8R8G8B8; // } // { // CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("rt1"); // def->width = 128; // def->height = 128; // def->format = PF_A8R8G8B8; // } // { // CompositionTargetPass *tp = t->createTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_PREVIOUS); // tp->setOutputName("rt1"); // } // { // CompositionTargetPass *tp = t->createTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_NONE); // tp->setOutputName("rt0"); // CompositionPass *pass = tp->createPass(); // pass->setType(CompositionPass::PT_RENDERQUAD); // pass->setMaterialName("Ogre/Compositor/Blur0"); // pass->setInput(0, "rt1"); // } // { // CompositionTargetPass *tp = t->createTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_NONE); // tp->setOutputName("rt1"); // CompositionPass *pass = tp->createPass(); // pass->setType(CompositionPass::PT_RENDERQUAD); // pass->setMaterialName("Ogre/Compositor/Blur1"); // pass->setInput(0, "rt0"); // } // { // CompositionTargetPass *tp = t->getOutputTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_PREVIOUS); // { CompositionPass *pass = tp->createPass(); // pass->setType(CompositionPass::PT_RENDERQUAD); // pass->setMaterialName("Ogre/Compositor/BloomBlend"); // pass->setInput(0, "rt1"); // } // } // } // Glass compositor is loaded from script but here is the hard coded equivalent /// Glass effect // CompositorPtr comp2 = CompositorManager::getSingleton().create( // "Glass", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME // ); // { // CompositionTechnique *t = comp2->createTechnique(); // { // CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("rt0"); // def->width = 0; // def->height = 0; // def->format = PF_R8G8B8; // } // { // CompositionTargetPass *tp = t->createTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_PREVIOUS); // tp->setOutputName("rt0"); // } // { // CompositionTargetPass *tp = t->getOutputTargetPass(); // tp->setInputMode(CompositionTargetPass::IM_NONE); // { CompositionPass *pass = tp->createPass(); // pass->setType(CompositionPass::PT_RENDERQUAD); // pass->setMaterialName("Ogre/Compositor/GlassPass"); // pass->setInput(0, "rt0"); // } // } // } /// Motion blur effect Ogre::CompositorPtr comp3 = Ogre::CompositorManager::getSingleton().create( "Motion Blur", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); { Ogre::CompositionTechnique *t = comp3->createTechnique(); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("sum"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } /// Render scene { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } /// Initialisation pass for sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("sum"); tp->setOnlyInitial(true); } /// Do the motion blur { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Combine"); pass->setInput(0, "scene"); pass->setInput(1, "sum"); } } /// Copy back sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("sum"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Copyback"); pass->setInput(0, "temp"); } } /// Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/MotionBlur"); pass->setInput(0, "sum"); } } } /// Heat vision effect Ogre::CompositorPtr comp4 = Ogre::CompositorManager::getSingleton().create( "Heat Vision", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); { Ogre::CompositionTechnique *t = comp4->createTechnique(); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } /// Render scene { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } /// Light to heat pass { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setIdentifier(0xDEADBABE); /// Identify pass for use in listener pass->setMaterialName("Fury/HeatVision/LightToHeat"); pass->setInput(0, "scene"); } } /// Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Fury/HeatVision/Blur"); pass->setInput(0, "temp"); } } } }
void SceneSetup::createMotionBlurCompositor (void) { // Motion blur effect Ogre::CompositorPtr comp3 = Ogre::CompositorManager::getSingleton().create( "MotionBlur", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); { Ogre::CompositionTechnique *t = comp3->createTechnique(); t->setCompositorLogicName("MotionBlur"); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("sum"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } // Render scene texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } // Initialisation pass for sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("sum"); tp->setOnlyInitial(true); } // Do the motion blur, accepting listener injection { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Combine"); pass->setInput(0, "scene"); pass->setInput(1, "sum"); pass->setIdentifier(700); } } // Copy back sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("sum"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Copyback"); pass->setInput(0, "temp"); } } // Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/MotionBlur"); pass->setInput(0, "sum"); } } } }
void CompositorChapter::CreateEffects() { /// Motion blur effect Ogre::CompositorPtr comp3 = Ogre::CompositorManager::getSingleton().create( "Motion Blur", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); { Ogre::CompositionTechnique *t = comp3->createTechnique(); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("sum"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 0; def->height = 0; def->formatList.push_back(Ogre::PF_R8G8B8); } /// Render scene { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } /// Initialisation pass for sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("sum"); tp->setOnlyInitial(true); } /// Do the motion blur { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Combine"); pass->setInput(0, "scene"); pass->setInput(1, "sum"); } } /// Copy back sum texture { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("sum"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/Copyback"); pass->setInput(0, "temp"); } } /// Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Ogre/Compositor/MotionBlur"); pass->setInput(0, "sum"); } } } /// Heat vision effect Ogre::CompositorPtr comp4 = Ogre::CompositorManager::getSingleton().create( "Heat Vision", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); { Ogre::CompositionTechnique *t = comp4->createTechnique(); t->setCompositorLogicName("HeatVision"); { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("scene"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } { Ogre::CompositionTechnique::TextureDefinition *def = t->createTextureDefinition("temp"); def->width = 256; def->height = 256; def->formatList.push_back(Ogre::PF_R8G8B8); } /// Render scene { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_PREVIOUS); tp->setOutputName("scene"); } /// Light to heat pass { Ogre::CompositionTargetPass *tp = t->createTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); tp->setOutputName("temp"); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setIdentifier(0xDEADBABE); /// Identify pass for use in listener pass->setMaterialName("Fury/HeatVision/LightToHeat"); pass->setInput(0, "scene"); } } /// Display result { Ogre::CompositionTargetPass *tp = t->getOutputTargetPass(); tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE); { Ogre::CompositionPass *pass = tp->createPass(); pass->setType(Ogre::CompositionPass::PT_RENDERQUAD); pass->setMaterialName("Fury/HeatVision/Blur"); pass->setInput(0, "temp"); } } } }