Пример #1
0
    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));
    }
Пример #2
0
    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));
    }
Пример #3
0
 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);
     }
 }
Пример #4
0
    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));
    }
Пример #5
0
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();
	
}
Пример #7
0
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));
}