void Effect::SetParam(const string& name, I32 data) { auto it = scalarVars.find(name); _ASSERT(it != scalarVars.end()); ID3DX11EffectScalarVariable* scalarVar = it->second; DXCall(scalarVar->SetInt(data)); }
void Effect::SetParam(const string& name, const I32* data, U32 offset, U32 count) { auto it = scalarVars.find(name); _ASSERT(it != scalarVars.end()); ID3DX11EffectScalarVariable* scalarVar = it->second; DXCall(scalarVar->SetIntArray(data, offset, count)); }
void Effect::SetParam(const string& name, const bool* data, U32 offset, U32 count) { auto it = scalarVars.find(name); _ASSERT(it != scalarVars.end()); ID3DX11EffectScalarVariable* pScalarVar = it->second; DXCall(pScalarVar->SetBoolArray((BOOL*)data, offset, count)); }
void Effect::SetParam(const string& name, bool data) { auto it = scalarVars.find(name); _ASSERT(it != scalarVars.end()); ID3DX11EffectScalarVariable* scalarVar = it->second; DXCall(scalarVar->SetBool(static_cast<BOOL>(data))); }
void Effect::AddVariable(ID3DX11EffectVariable* var, const D3DX11_EFFECT_VARIABLE_DESC* varDesc, const D3DX11_EFFECT_TYPE_DESC* typeDesc) { _ASSERT(var && varDesc && typeDesc); switch (typeDesc->Class) { case D3D_SVC_SCALAR : { ID3DX11EffectScalarVariable* scalarVar = var->AsScalar(); _ASSERT(scalarVar->IsValid()); scalarVars[varDesc->Name] = scalarVar; break; } case D3D_SVC_VECTOR : { ID3DX11EffectVectorVariable* vectorVar = var->AsVector(); _ASSERT(vectorVar->IsValid()); vectorVars[varDesc->Name] = vectorVar; break; } case D3D_SVC_MATRIX_COLUMNS: case D3D_SVC_MATRIX_ROWS: { ID3DX11EffectMatrixVariable* matrixVar = var->AsMatrix(); _ASSERT(matrixVar->IsValid()); matrixVars[varDesc->Name] = matrixVar; break; } case D3D_SVC_STRUCT: structVars[varDesc->Name] = var; break; case D3D_SVC_OBJECT: { ID3DX11EffectShaderResourceVariable* resourceVar = var->AsShaderResource(); if (resourceVar->IsValid()) { resourceVars[varDesc->Name] = resourceVar; } break; } default: _ASSERT(false); } }
bool CD3DEffect::SetScalar(LPCSTR handle, float value) { if (m_effect) { ID3DX11EffectScalarVariable* scalar = m_effect->GetVariableByName(handle)->AsScalar(); if (scalar->IsValid()) return (S_OK == scalar->SetFloat(value)); } return false; }
void EffectSystemD3D11::UpdateInt(int effectID, const char *name, int data) { ID3DX11EffectScalarVariable *integerVariable = mEffects[effectID]->GetVariableByName(name)->AsScalar(); if (integerVariable->IsValid()) { integerVariable->SetInt(data); } else { LogSystem::GetInstance().Log("effect integer「%s」非法", name); return; } }
void BoxApp::UpdateScene(float dt) { // Convert Spherical to Cartesian coordinates. float x = mRadius*sinf(mPhi)*cosf(mTheta); float z = mRadius*sinf(mPhi)*sinf(mTheta); float y = mRadius*cosf(mPhi); // Build the view matrix. XMVECTOR pos = XMVectorSet(x, y, z, 1.0f); XMVECTOR target = XMVectorZero(); XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); XMMATRIX V = XMMatrixLookAtLH(pos, target, up); XMStoreFloat4x4(&mView, V); mfxTimeVar->SetFloat(mTimer.TotalTime()); }