void Effect::SetParam(const string& name, const Vector4f* data, U32 offset, U32 count) { auto it = vectorVars.find(name); _ASSERT(it != vectorVars.end()); ID3DX11EffectVectorVariable* vectorVar = it->second; DXCall(vectorVar->SetFloatVectorArray((const F32*) data, offset, count)); }
void Effect::SetParam(const string& name, const Vector4f& data) { auto it = vectorVars.find(name); _ASSERT(it != vectorVars.end()); ID3DX11EffectVectorVariable* vectorVar = it->second; DXCall(vectorVar->SetFloatVector((const F32*) &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); } }
void Effect::SetParam(const string& name, const Vector3f& data) { auto it = vectorVars.find(name); _ASSERT(it != vectorVars.end()); ID3DX11EffectVectorVariable* vectorVar = it->second; Vector4f vec4(data.x, data.y, data.z, 0.0f); DXCall(vectorVar->SetFloatVector((F32*) &vec4)); }
void DX11Shader::setVectorArray(const char* strName, float* pFloat, UINT offset, UINT count) { ID3DX11EffectVectorVariable* pVector; pVector = m_pEffect->pEffect->GetVariableByName(strName)->AsVector(); if (pVector->IsValid()) pVector->SetFloatVectorArray(pFloat, offset, count); else EventManager::Instance().postMessage("Unknown variable: %s in shader: %s", strName, m_pEffect->strName); }
void App::OnSizeTerrain() { if (!device) return; if (!g_pTerrainEffect) return; HRESULT hr; ID3D11Texture2D* pBackBuffer; hr = swapChain->GetBuffer( 0, __uuidof( *pBackBuffer ), ( LPVOID* )&pBackBuffer ); DXGI_SURFACE_DESC pBBufferSurfaceDesc; ZeroMemory( &pBBufferSurfaceDesc, sizeof( DXGI_SURFACE_DESC ) ); if( SUCCEEDED( hr ) ) { D3D11_TEXTURE2D_DESC TexDesc; pBackBuffer->GetDesc( &TexDesc ); pBBufferSurfaceDesc.Width = ( UINT )TexDesc.Width; pBBufferSurfaceDesc.Height = ( UINT )TexDesc.Height; pBBufferSurfaceDesc.Format = TexDesc.Format; pBBufferSurfaceDesc.SampleDesc = TexDesc.SampleDesc; SAFE_RELEASE( pBackBuffer ); } ID3DX11EffectVectorVariable* pScreenSize = g_pTerrainEffect->GetVariableByName("g_screenSize")->AsVector(); if (pScreenSize) { D3DXVECTOR2 v((float) pBBufferSurfaceDesc.Width, (float) pBBufferSurfaceDesc.Height); pScreenSize->SetFloatVector(v); } g_Skybox.OnD3D11ResizedSwapChain(&pBBufferSurfaceDesc); unsigned int n = 1; context->RSGetViewports(&n, &g_BackBufferVP); g_ScreenSize = D3DXVECTOR2((float) pBBufferSurfaceDesc.Width, (float) pBBufferSurfaceDesc.Height); float aspectRatio = g_ScreenSize.x / g_ScreenSize.y; ActiveCam_->setFOV(RAD2DEG(noMath::PI / 3)); ActiveCam_->setNear(CLIP_NEAR); ActiveCam_->setFar(CLIP_FAR); ActiveCam_->SetAspect(aspectRatio); ActiveCam_->ComputeProjection(); }
void LightDemo::DrawScene() { m_dxImmediateContext->ClearRenderTargetView(m_renderTargetView.Get(), reinterpret_cast<const float*>(&oc::Colors::LightSteelBlue)); m_dxImmediateContext->ClearDepthStencilView(m_depthStencilView.Get(), D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0); m_dxImmediateContext->IASetInputLayout(m_inputLayout.Get()); m_dxImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); uint32 stride = sizeof(Vertex); uint32 offset = 0; // Set constants XMMATRIX view = XMLoadFloat4x4(&m_view); XMMATRIX proj = XMLoadFloat4x4(&m_proj); XMMATRIX viewProj = view*proj; // Set per frame constants. m_fxDirLight->SetRawValue(&m_dirLight, 0, sizeof(m_dirLight)); m_fxPointLight->SetRawValue(&m_pointLight, 0, sizeof(m_pointLight)); m_fxSpotLight->SetRawValue(&m_spotLight, 0, sizeof(m_spotLight)); m_fxEyePosW->SetRawValue(&m_camPosition, 0, sizeof(m_camPosition)); D3DX11_TECHNIQUE_DESC techDesc; m_tech->GetDesc(&techDesc); for(uint32 p = 0; p < techDesc.Passes; ++p) { //Draw the land m_dxImmediateContext->IASetVertexBuffers(0, 1, m_landVB.GetAddressOf(), &stride, &offset); m_dxImmediateContext->IASetIndexBuffer(m_landIB.Get(), DXGI_FORMAT_R32_UINT, 0); //Set per object constants XMMATRIX world = XMLoadFloat4x4(&m_landWorld); XMMATRIX worldInvTranspose = MathHelper::InverseTranspose(world); XMMATRIX worldViewProj = world*viewProj; m_fxWorld->SetMatrix(reinterpret_cast<float*>(&world)); m_fxWorldInvTranspose->SetMatrix(reinterpret_cast<float*>(&worldInvTranspose)); m_fxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&worldViewProj)); m_fxMaterial->SetRawValue(&m_landMat, 0, sizeof(m_landMat)); m_tech->GetPassByIndex(p)->Apply(0, m_dxImmediateContext.Get()); m_dxImmediateContext->DrawIndexed(m_landIndexCount, 0, 0); //Draw the wave m_dxImmediateContext->IASetVertexBuffers(0, 1, m_wavesVB.GetAddressOf(), &stride, &offset); m_dxImmediateContext->IASetIndexBuffer(m_wavesIB.Get(), DXGI_FORMAT_R32_UINT, 0); world = XMLoadFloat4x4(&m_wavesWorld); worldInvTranspose = MathHelper::InverseTranspose(world); worldViewProj = world*viewProj; m_fxWorld->SetMatrix(reinterpret_cast<float*>(&world)); m_fxWorldInvTranspose->SetMatrix(reinterpret_cast<float*>(&worldInvTranspose)); m_fxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&worldViewProj)); m_fxMaterial->SetRawValue(&m_wavesMat, 0, sizeof(m_wavesMat)); m_tech->GetPassByIndex(p)->Apply(0, m_dxImmediateContext.Get()); m_dxImmediateContext->DrawIndexed(3*m_waves.TriangleCount(), 0, 0); } HR(m_swapChain->Present(0, 0)); }