void Evolution::buildFX() { ID3DXBuffer* errors = 0; if ( D3DXCreateEffectFromFile(gd3dDevice, "EvolutionShader.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors) ) if ( !errors ) { MessageBox(0, "EvolutionShader.fx not found! D:", 0, 0); PostQuitMessage(0); } if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); mhEFTech = mFX->GetTechniqueByName("EFEvolutionShader"); mhLTech = mFX->GetTechniqueByName("LEvolutionShader"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhTex = mFX->GetParameterByName(0, "gTex"); mhTex2 = mFX->GetParameterByName(0, "gTex2"); mhTex3 = mFX->GetParameterByName(0, "gTex3"); HR(mFX->SetTexture(mhTex, mFoodTex)); HR(mFX->SetTexture(mhTex2, mEggTex)); HR(mFX->SetTexture(mhTex3, mLifeformTex)); }
//////////////////////////////////////////////////////////////// // // CEffectTemplateImpl::ValidateDepthBufferUsage // // Check if technique passes our rules // Returns false if should fail validation // //////////////////////////////////////////////////////////////// bool CEffectTemplateImpl::ValidateDepthBufferUsage ( D3DXHANDLE hTechnique, SString& strOutErrorExtra ) { m_bUsesDepthBuffer = false; // Check depthbuffer handle D3DXHANDLE hDepthBuffer = m_pD3DEffect->GetParameterByName ( NULL, "DEPTHBUFFER" ); if ( !hDepthBuffer ) hDepthBuffer = m_pD3DEffect->GetParameterBySemantic ( NULL, "DEPTHBUFFER" ); if ( hDepthBuffer ) { D3DXPARAMETER_DESC ParameterDesc; m_pD3DEffect->GetParameterDesc ( hDepthBuffer, &ParameterDesc ); if ( ParameterDesc.Type >= D3DXPT_TEXTURE && ParameterDesc.Type <= D3DXPT_TEXTURECUBE ) { if ( m_pD3DEffect->IsParameterUsed ( hDepthBuffer, hTechnique ) ) { ERenderFormat depthBufferFormat = m_pManager->GetDepthBufferFormat (); if ( depthBufferFormat == RFORMAT_UNKNOWN ) { strOutErrorExtra += " DEPTHBUFFER used, but readable depth buffer is not available"; return false; } m_bUsesDepthBuffer = true; } } } return true; }
void DiffuseCubeDemo::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "diffuse.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("DiffuseTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInverseTranspose = mFX->GetParameterByName(0, "gWorldInverseTranspose"); mhLightVecW = mFX->GetParameterByName(0, "gLightVecW"); mhDiffuseMtrl = mFX->GetParameterByName(0, "gDiffuseMtrl"); mhDiffuseLight = mFX->GetParameterByName(0, "gDiffuseLight"); }
void WaterDemo::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "NormalMap.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("NormalMapTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInv = mFX->GetParameterByName(0, "gWorldInv"); mhMtrl = mFX->GetParameterByName(0, "gMtrl"); mhLight = mFX->GetParameterByName(0, "gLight"); mhEyePosW = mFX->GetParameterByName(0, "gEyePosW"); mhTex = mFX->GetParameterByName(0, "gTex"); mhNormalMap = mFX->GetParameterByName(0, "gNormalMap"); // Set parameters that do not vary: // World is the identity, so inverse is also identity. HR(mFX->SetMatrix(mhWorldInv, &mSceneWorldInv)); HR(mFX->SetTechnique(mhTech)); }
void TriGridDemo::buildFX() { ID3DXBuffer *errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, L"../src/chap08/TriGridDemo/transform.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if (errors) MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); mhTech = mFX->GetTechniqueByName("TransformTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); }
void Game::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "color.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("ColorTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); }
void ProjTexDemo::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "ProjTex.fx", 0, 0, D3DXSHADER_DEBUG|D3DXSHADER_SKIPOPTIMIZATION, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("ProjTexTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhLightWVP = mFX->GetParameterByName(0, "gLightWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhMtrl = mFX->GetParameterByName(0, "gMtrl"); mhLight = mFX->GetParameterByName(0, "gLight"); mhEyePosW = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhTex = mFX->GetParameterByName(0, "gTex"); }
void XFileDemo::buildFX() { ID3DXBuffer *errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, L"../src/chap14/XFileDemo/PhongDirLtTex.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if (errors) MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); mhTech = mFX->GetTechniqueByName("PhongDirLtTexTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhMtrl = mFX->GetParameterByName(0, "gMtrl"); mhLight = mFX->GetParameterByName(0, "gLight"); mhEyePos = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhTex = mFX->GetParameterByName(0, "gTex"); }
void AmbientDiffuseDemo::buildFX() { ID3DXBuffer *errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, L"../src/chap10/AmbientDiffuseDemo/ambientdiffuse.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if (errors) MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); mhTech = mFX->GetTechniqueByName("DiffuseTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInverseTranspose = mFX->GetParameterByName(0, "gWorldInverseTranspose"); mhLightVecW = mFX->GetParameterByName(0, "gLightVecW"); mhDiffuseMtrl = mFX->GetParameterByName(0, "gDiffuseMtrl"); mhDiffuseLight = mFX->GetParameterByName(0, "gDiffuseLight"); mhAmbientMtrl = mFX->GetParameterByName(0, "gAmbientMtrl"); mhAmbientLight = mFX->GetParameterByName(0, "gAmbientLight"); }
void MultiTexDemo::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "TerrainMultiTex.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("TerrainMultiTexTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhLightVecW = mFX->GetParameterByName(0, "gLightVecW"); mhDiffuseMtrl = mFX->GetParameterByName(0, "gDiffuseMtrl"); mhDiffuseLight = mFX->GetParameterByName(0, "gDiffuseLight"); mhAmbientMtrl = mFX->GetParameterByName(0, "gAmbientMtrl"); mhAmbientLight = mFX->GetParameterByName(0, "gAmbientLight"); mhSpecularMtrl = mFX->GetParameterByName(0, "gSpecularMtrl"); mhSpecularLight = mFX->GetParameterByName(0, "gSpecularLight"); mhSpecularPower = mFX->GetParameterByName(0, "gSpecularPower"); mhEyePos = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhTex0 = mFX->GetParameterByName(0, "gTex0"); mhTex1 = mFX->GetParameterByName(0, "gTex1"); mhTex2 = mFX->GetParameterByName(0, "gTex2"); mhBlendMap = mFX->GetParameterByName(0, "gBlendMap"); }
// NOTE: The texture list needs to change to be device independent... void CD3DRigidMesh::Render(D3DMATRIX& WorldTransform,CD3DRenderStyle* pRenderStyle,vector<LPDXTexture>& TextureList) { if (pRenderStyle == NULL) return; g_RenderStateMgr.SetTransform(D3DTS_WORLDMATRIX(0), &WorldTransform); PD3DDEVICE->SetRenderState(D3DRS_VERTEXBLEND,D3DVBF_DISABLE); PD3DDEVICE->SetRenderState(D3DRS_LIGHTING,TRUE); PD3DDEVICE->SetRenderState(D3DRS_NORMALIZENORMALS,FALSE); //m_VBController.SetStreamSources(); if( (g_EffectMgr.GetEnabled()) && (g_EffectMgr.GetEffect() != NULL) ) { ID3DXEffect *pEffect = g_EffectMgr.GetEffect(); g_EffectMgr.UploadVertexDecl(); m_VBController.SetStreamSources(); // This is a temp HACK //g_RenderStateMgr.SetRenderStyleStates(pRenderStyle,0,TextureList); pEffect->SetTechnique(g_EffectMgr.GetTechnique()); D3DXMATRIX matD3DX( *g_RenderStateMgr.GetTransform(D3DTS_WORLD)); D3DXMATRIX MatWorld; D3DXMatrixTranspose(&MatWorld, &matD3DX); pEffect->SetMatrix("worldMatrix", &MatWorld); //view proj D3DXMATRIX MatView; PD3DDEVICE->GetTransform(D3DTS_VIEW, &MatView); pEffect->SetMatrix("viewMatrix", &MatView); D3DXMATRIX MatProj; PD3DDEVICE->GetTransform(D3DTS_PROJECTION, &MatProj); pEffect->SetMatrix("projMatrix", &MatProj); D3DXMATRIX MatViewProj; D3DXMatrixMultiply(&MatViewProj, &MatView, &MatProj); D3DXMatrixTranspose(&MatViewProj, &MatViewProj); D3DXMATRIX matD3DX2( MatViewProj); pEffect->SetMatrix("viewProjMatrix", &matD3DX2); float fTemp[4]; fTemp[0] = g_EffectMgr.GetPosition()->x; fTemp[1] = g_EffectMgr.GetPosition()->y; fTemp[2] = g_EffectMgr.GetPosition()->z; fTemp[3] = 0.0f; pEffect->SetFloatArray("CameraPosition", fTemp, 4); char szBuf[32]; ZeroMemory(szBuf, 32); for (uint32 iTexStage = 0; iTexStage < 4; ++iTexStage) { if(TextureList[iTexStage]) { PD3DDEVICE->SetTexture(iTexStage, TextureList[iTexStage]->GetTexture()); sprintf(szBuf, "texture%d", iTexStage); D3DXHANDLE hHandle = pEffect->GetParameterByName(NULL, szBuf); HRESULT hrTex = pEffect->SetTexture(hHandle, TextureList[iTexStage]->GetTexture()); if(FAILED(hrTex)) { OutputDebugString("Error sending texture to Effect!"); } } } UINT nPasses; pEffect->Begin(&nPasses, 0); for(int n = 0; n < (int)nPasses; ++n) { pEffect->BeginPass(n); m_VBController.Render(0,0,m_iVertCount,m_iPolyCount); pEffect->EndPass(); } pEffect->End(); PD3DDEVICE->SetTexture(0, NULL); PD3DDEVICE->SetTexture(1, NULL); PD3DDEVICE->SetTexture(2, NULL); PD3DDEVICE->SetTexture(3, NULL); } else { g_EffectMgr.UploadVertexDecl(); m_VBController.SetStreamSources(); for (uint32 iRenderPass = 0; iRenderPass < pRenderStyle->GetRenderPassCount(); ++iRenderPass) { LPDIRECT3DVERTEXSHADER9 VertexShader = pRenderStyle->GetVertexShader(iRenderPass,0); RSD3DRenderPass D3DRenderPass; if (VertexShader) { // Using a custom vertex shader... if (FAILED(g_RenderStateMgr.SetVertexShader(VertexShader))) { assert(0); return; } if (!pRenderStyle->GetRenderPass_D3DOptions(iRenderPass,&D3DRenderPass)) { assert(0); return; } // if (!g_RenderStateMgr.SetVertexShaderConstants(pRenderStyle, &D3DRenderPass,0)) { assert(0); return; } } else { // Using the standand pipe... /* if (!m_VBController.getVertexFormat(0)) return; // This is a non fixed function pipe VB - bail out... if (FAILED(g_RenderStateMgr.SetFVF(m_VBController.getVertexFormat(0)))) { assert(0); return; } */ } g_RenderStateMgr.SetRenderStyleStates(pRenderStyle,iRenderPass,TextureList); // Set your render states with the render state mgr... //g_EffectMgr.UploadVertexDecl(); m_VBController.Render(0,0,m_iVertCount,m_iPolyCount); } } D3DXMATRIX mIdentity; D3DXMatrixIdentity(&mIdentity); // Reset our World Matrix... g_RenderStateMgr.SetTransform(D3DTS_WORLDMATRIX(0),&mIdentity); PD3DDEVICE->SetRenderState(D3DRS_LIGHTING,FALSE); PD3DDEVICE->SetRenderState(D3DRS_ALPHABLENDENABLE, false); PD3DDEVICE->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); PD3DDEVICE->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); PD3DDEVICE->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); PD3DDEVICE->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); }
void MGEhud::draw() { std::map<std::string, MGEhud::hud_id>::const_iterator i; IDirect3DStateBlock9 *stateSaved; device->CreateStateBlock(D3DSBT_ALL, &stateSaved); D3DXVECTOR4 *vbase; HRESULT hr = vbHUD->Lock(0, 0, (void**)&vbase, D3DLOCK_DISCARD); if(hr != D3D_OK || vbase == 0) return; for(i = element_names.begin(); i != element_names.end(); ++i) { const Element *e = &elements[i->second]; if(e->enabled) { float x0 = e->x, x1 = e->x + e->xscale * e->w; float y0 = e->y, y1 = e->y + e->yscale * e->h; // Correct for D3D9 pixel offset x0 -= 0.5; y0 -= 0.5; x1 -= 0.5; y1 -= 0.5; D3DXVECTOR4 *v = vbase + 8 * i->second; v[0] = D3DXVECTOR4(x0, y1, 0, 1); v[1] = D3DXVECTOR4(0, 1, 0, 0); v[2] = D3DXVECTOR4(x0, y0, 0, 1); v[3] = D3DXVECTOR4(0, 0, 0, 0); v[4] = D3DXVECTOR4(x1, y1, 0, 1); v[5] = D3DXVECTOR4(1, 1, 0, 0); v[6] = D3DXVECTOR4(x1, y0, 0, 1); v[7] = D3DXVECTOR4(1, 0, 0, 0); } } vbHUD->Unlock(); device->SetFVF(fvfHUD); device->SetStreamSource(0, vbHUD, 0, 32); device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); for(i = element_names.begin(); i != element_names.end(); ++i) { const Element *e = &elements[i->second]; if(e->enabled) { ID3DXEffect *effect = e->effect ? e->effect : effectStandard; D3DXHANDLE ehTex = effect->GetParameterByName(0, "tex"); UINT passes; effect->SetTexture(ehTex, e->texture); effect->Begin(&passes, D3DXFX_DONOTSAVESTATE); effect->BeginPass(0); device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 4 * i->second, 2); effect->EndPass(); effect->End(); } } stateSaved->Apply(); stateSaved->Release(); }
void SpotlightDemo::buildFX() { // Create the FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "spotlight.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("SpotlightTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhEyePos = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhAmbientLight = mFX->GetParameterByName(0, "gAmbientLight"); mhDiffuseLight = mFX->GetParameterByName(0, "gDiffuseLight"); mhSpecLight = mFX->GetParameterByName(0, "gSpecLight"); mhLightPosW = mFX->GetParameterByName(0, "gLightPosW"); mhLightDirW = mFX->GetParameterByName(0, "gLightDirW"); mhAttenuation012 = mFX->GetParameterByName(0, "gAttenuation012"); mhAmbientMtrl = mFX->GetParameterByName(0, "gAmbientMtrl"); mhDiffuseMtrl = mFX->GetParameterByName(0, "gDiffuseMtrl"); mhSpecMtrl = mFX->GetParameterByName(0, "gSpecMtrl"); mhSpecPower = mFX->GetParameterByName(0, "gSpecPower"); mhSpotPower = mFX->GetParameterByName(0, "gSpotPower"); }
/** * This method loads a model's dyes, if it has them. If multipleMaterials is * true, then it calls the derived model to search for searches for material * names in its bulk. Otherwise the dyes are read as if for a billboard model, * which can have only one material (and thus dyes must each be composited). */ int Model::readDyes( DataSectionPtr pFile, bool multipleMaterials ) { int dyeProduct = 1; // read our own dyes std::vector<DataSectionPtr> vDyeSects; pFile->openSections( "dye", vDyeSects ); for (uint i = 0; i < vDyeSects.size(); i++) { DataSectionPtr pDyeSect = vDyeSects[i]; std::string matterName = pDyeSect->readString( "matter", "" ); std::string replaces = pDyeSect->readString( "replaces", "" ); //Ignore any empty "dye" sections if ((matterName == "") && (replaces == "")) continue; // see if we already have a matter of that name Matters::iterator miter = matters_.begin(); for (; miter != matters_.end(); ++miter) { if ((*miter)->name_ == matterName) break; } if (miter == matters_.end()) { matters_.push_back( new Matter( matterName, replaces ) ); miter = matters_.end() - 1; } // set it up Matter * m = *miter; m->replaces_ = replaces; // get all instances of replaces from the visual, // and set the default tint from the original material if (multipleMaterials) // not for billboards { if (this->initMatter( *m ) == 0) { //ERROR_MSG( "Model::readDyes: " // "In model \"%s\", for dye matter \"%s\", " // "the material id \"%s\" isn't in the visual\n", // resourceID_.c_str(), matterName.c_str(), replaces.c_str() ); continue; } } else // for billboards { //miter->second.tints_["Default"]->oldMaterial_->textureFactor( 0 ); } // add the other tints std::vector<DataSectionPtr> vTintSects; pDyeSect->openSections( "tint", vTintSects ); for (uint j = 0; j < vTintSects.size(); j++) { DataSectionPtr pTintSect = vTintSects[j]; std::string tintName = pTintSect->readString( "name", "" ); if (tintName.empty()) { //ERROR_MSG( "Model::readDyes: " // "In model %s, for dye matter %s, " // "tint section index %d has no name.\n", // resourceID_.c_str(), matterName.c_str(), j ); continue; } // if it's already there then use that one Matter::Tints::iterator titer = m->tints_.begin(); for (; titer != m->tints_.end(); ++titer) { if ((*titer)->name_ == tintName) break; } // Create if missing if (titer == m->tints_.end()) { m->tints_.push_back( new Tint( tintName ) ); titer = m->tints_.end() - 1; } TintPtr t = *titer; // if it's not a billboard... if (multipleMaterials) { // clear source dyes that we don't use t->sourceDyes_.clear(); // read the material DataSectionPtr matSect = pTintSect->openSection( "material" ); if (!this->initTint( *t, matSect )) { WARNING_MSG( "Model::readDyes: " "In model %s, for dye matter %s tint %s, " "there %s <material> section.\n", resourceID_.c_str(), matterName.c_str(), tintName.c_str(), (!!matSect) ? "was a problem loading the" : "is no" ); } // read the properties std::vector<DataSectionPtr> vPropSects; pTintSect->openSections( "property", vPropSects ); for (uint k = 0; k < vPropSects.size(); k++) { DataSectionPtr pPropSect = vPropSects[k]; std::string propName = pPropSect->readString( "name", "" ); if (propName.empty()) { //ERROR_MSG( "Model::readDyes: " // "In model %s, for dye matter %s tint %s, " // "property section index %d has no name.\n", // resourceID_.c_str(), matterName.c_str(), // tintName.c_str(), k ); continue; } s_propCatalogueLock_.grab(); std::stringstream catalogueName; catalogueName << matterName << "." << tintName << "." << propName; PropCatalogue::iterator pit = s_propCatalogue_.find( catalogueName.str().c_str() ); if (pit == s_propCatalogue_.end()) { { memoryCounterSub( modelGlobl ); memoryClaim( s_propCatalogue_ ); } pit = s_propCatalogue_.insert( std::make_pair( catalogueName.str().c_str(), Vector4() ) ); { memoryCounterAdd( modelGlobl ); memoryClaim( s_propCatalogue_ ); } } DyeProperty dp; dp.index_ = pit - s_propCatalogue_.begin(); s_propCatalogueLock_.give(); dp.controls_ = pPropSect->readInt( "controls", 0 ); dp.mask_ = pPropSect->readInt( "mask", 0 ); dp.future_ = pPropSect->readInt( "future", 0 ); dp.default_ = pPropSect->readVector4( "default", Vector4(0,0,0,0) ); if (dp.mask_ == -1) dp.mask_ = 0; // look for a corresponding D3DXHANDLE // (if newMaterial is NULL, won't have any props anyway) if ( t->effectMaterial_->pEffect() ) { ID3DXEffect * effect = t->effectMaterial_->pEffect()->pEffect(); D3DXHANDLE propH = effect->GetParameterByName( NULL, propName.c_str() ); if (propH != NULL) { Moo::EffectPropertyFunctorPtr factory = Moo::g_effectPropertyProcessors.find( "Vector4" )->second; Moo::EffectPropertyPtr modifiableProperty = factory->create( propH, effect ); modifiableProperty->be( dp.default_ ); t->effectMaterial_->replaceProperty( propName, modifiableProperty ); dp.controls_ = (int)propH; dp.mask_ = -1; } } uint l; for (l = 0; l < t->properties_.size(); l++) { if (t->properties_[l].index_ == dp.index_) break; } if (l < t->properties_.size()) t->properties_[l] = dp; else t->properties_.push_back( dp ); // end of properties } } // if it's a billboard... else { t->properties_.clear(); t->sourceDyes_.clear(); // read the source dye selections std::vector<DataSectionPtr> vSourceDyes; pTintSect->openSections( "dye", vSourceDyes ); for (uint k = 0; k < vSourceDyes.size(); k++) { DataSectionPtr pSourceDye = vSourceDyes[k]; DyeSelection dsel; if (!this->readSourceDye( pSourceDye, dsel )) { //ERROR_MSG( "Model::readDyes: " // "In model %s, for dye matter %s tint %s, " // "source dye selection section index %d is missing " // "either a matter ('%s') or tint ('%s') name.\n", // resourceID_.c_str(), matterName.c_str(), // tintName.c_str(), k, // dsel.matterName_.c_str(), dsel.tintName_.c_str() ); } t->sourceDyes_.push_back( dsel ); } } // end of tints } // keep a running total of the dye product dyeProduct *= m->tints_.size(); MF_ASSERT( dyeProduct ); // end of matters (dyes) } // end of method return dyeProduct; }
void StencilMirrorDemo::buildFX() { ID3DXBuffer *errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, L"../src/chap13/StencilMirror/DirLightTex.fx", 0, 0, D3DXSHADER_DEBUG, 0, &mFX, &errors)); if (errors) MessageBoxA(0, (char*)errors->GetBufferPointer(), 0, 0); mhTech = mFX->GetTechniqueByName("DirLightTexTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhLightVecW = mFX->GetParameterByName(0, "gLightVecW"); mhDiffuseMtrl = mFX->GetParameterByName(0, "gDiffuseMtrl"); mhDiffuseLight = mFX->GetParameterByName(0, "gDiffuseLight"); mhAmbientMtrl = mFX->GetParameterByName(0, "gAmbientMtrl"); mhAmbientLight = mFX->GetParameterByName(0, "gAmbientLight"); mhSpecularMtrl = mFX->GetParameterByName(0, "gSpecularMtrl"); mhSpecularLight = mFX->GetParameterByName(0, "gSpecularLight"); mhSpecularPower = mFX->GetParameterByName(0, "gSpecularPower"); mhEyePos = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhTex = mFX->GetParameterByName(0, "gTex"); }
void PropsDemo::buildFX() { // Create the generic Light & Tex FX from a .fx file. ID3DXBuffer* errors = 0; HR(D3DXCreateEffectFromFile(gd3dDevice, "DirLightTex.fx", 0, 0, 0, 0, &mFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhTech = mFX->GetTechniqueByName("DirLightTexTech"); mhWVP = mFX->GetParameterByName(0, "gWVP"); mhWorldInvTrans = mFX->GetParameterByName(0, "gWorldInvTrans"); mhMtrl = mFX->GetParameterByName(0, "gMtrl"); mhLight = mFX->GetParameterByName(0, "gLight"); mhEyePosW = mFX->GetParameterByName(0, "gEyePosW"); mhWorld = mFX->GetParameterByName(0, "gWorld"); mhTex = mFX->GetParameterByName(0, "gTex"); // Create the grass FX from a .fx file. HR(D3DXCreateEffectFromFile(gd3dDevice, "grass.fx", 0, 0, 0, 0, &mGrassFX, &errors)); if( errors ) MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0); // Obtain handles. mhGrassTech = mGrassFX->GetTechniqueByName("GrassTech"); mhGrassViewProj = mGrassFX->GetParameterByName(0, "gViewProj"); mhGrassTex = mGrassFX->GetParameterByName(0, "gTex"); mhGrassTime = mGrassFX->GetParameterByName(0, "gTime"); mhGrassEyePosW = mGrassFX->GetParameterByName(0, "gEyePosW"); mhGrassDirToSunW= mGrassFX->GetParameterByName(0, "gDirToSunW"); HR(mGrassFX->SetTechnique(mhGrassTech)); HR(mGrassFX->SetTexture(mhGrassTex, mGrassTex)); }