LineRenderer::LineRenderer(ID3D11Device* device)
{
    // create vertex buffer.
    uint32_t vertCount = 1000;
    m_vbPC = CreateVertexBuffer(device, VertexFormat::VF_PC, NULL, vertCount, D3D11_USAGE_DYNAMIC);
    assert(m_vbPC);

    // compile shaders
    ID3DBlob* vsBlob = CompileShaderFromResource(L"LineShader.hlsl", "VS","vs_4_0", NULL);    
    ID3DBlob* psBlob = CompileShaderFromResource(L"LineShader.hlsl", "PS","ps_4_0", NULL);
    assert(vsBlob);
    assert(psBlob);
    m_vsShader = CreateVertexShader(device, vsBlob);
    m_psShader = CreatePixelShader(device, psBlob);
    assert(m_vsShader);
    assert(m_psShader);

    m_vertexLayoutPC = CreateInputLayout(device, vsBlob, VertexFormat::VF_PC);

    // create constant buffer.
    m_perframeCB = CreateConstantBuffer(device,sizeof(Matrix));

    vsBlob->Release();
    psBlob->Release();

}
Exemple #2
0
LineRenderer::LineRenderer(ID3D11Device* device)
{
    // create vertex buffer.
    uint32_t vertCount = 1000;

  
    m_vbPC = GpuResourceFactory::CreateVertexBuffer(NULL,VertexFormat::VF_PC,vertCount,BufferUsage::DYNAMIC);    
    assert(m_vbPC);

    // compile shaders
    ID3DBlob* vsBlob = CompileShaderFromResource(L"LineShader.hlsl", "VS","vs_4_0", NULL);    
    ID3DBlob* psBlob = CompileShaderFromResource(L"LineShader.hlsl", "PS","ps_4_0", NULL);
    assert(vsBlob);
    assert(psBlob);

    
    m_vsShader = GpuResourceFactory::CreateVertexShader(vsBlob);
    m_psShader = GpuResourceFactory::CreatePixelShader(psBlob);
    assert(m_vsShader);
    assert(m_psShader);

    m_vertexLayoutPC = GpuResourceFactory::CreateInputLayout(vsBlob, VertexFormat::VF_PC);
        
    m_perframeCB.Construct(device);

    vsBlob->Release();
    psBlob->Release();

}
void BasicRenderer::CreateBuffers()
{	
	HRESULT hr = S_OK;
    	
    D3D11_BUFFER_DESC bufDcr;
    
	// Create the constant buffer
	SecureZeroMemory( &bufDcr, sizeof(bufDcr));
	bufDcr.Usage =  D3D11_USAGE_DEFAULT; //D3D11_USAGE_DYNAMIC;	
	bufDcr.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
	bufDcr.CPUAccessFlags = 0;  //D3D11_CPU_ACCESS_WRITE;
    
    bufDcr.ByteWidth = sizeof(ConstantBufferPerFrame);
    hr = m_pd3dDevice->CreateBuffer( &bufDcr, NULL, &m_pConstantBufferPerFrame );
    if (Logger::IsFailureLog(hr))
	{
		return;			 
	}
    	
    bufDcr.ByteWidth = sizeof(ConstantBufferPerDraw);
    hr = m_pd3dDevice->CreateBuffer( &bufDcr, NULL, &m_pConstantBufferPerDraw );
    if (Logger::IsFailureLog(hr))
	{
		return;			 
	}
    
	// Compile the vertex shader
    ID3DBlob* pVSBlob = CompileShaderFromResource(L"BasicShader.hlsl", "VS", "vs_4_0", NULL);
    
    // Create the vertex shader
    hr = m_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &m_pVertexShaderP );
    if( FAILED( hr ) )
    {    
        pVSBlob->Release();
        return;
    }

    // Define the input layout
    D3D11_INPUT_ELEMENT_DESC layoutP[] =
    {
        { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },        
    };
    UINT numElements = ARRAYSIZE( layoutP );

    // Create the input layout
    hr = m_pd3dDevice->CreateInputLayout( layoutP, numElements, pVSBlob->GetBufferPointer(),
                                          pVSBlob->GetBufferSize(), &m_pVertexLayout );
    pVSBlob->Release();
    pVSBlob = NULL;

    if( FAILED( hr ) )
        return;

    
    // Compile the pixel shader
    ID3DBlob* pPSBlob = CompileShaderFromResource(L"BasicShader.hlsl", "PS", "ps_4_0", NULL);
    // Create the pixel shader
    hr = m_pd3dDevice->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &m_pPixelShaderP );
    pPSBlob->Release();
    pPSBlob = NULL;
  
    // create raster states.
	D3D11_RASTERIZER_DESC rsDcr;
	SecureZeroMemory( &rsDcr, sizeof(rsDcr));		
    rsDcr.DepthClipEnable = true;
	rsDcr.CullMode =  D3D11_CULL_BACK;
	rsDcr.FillMode =  D3D11_FILL_WIREFRAME;
	rsDcr.FrontCounterClockwise = UseRightHand; // front face is CCW for right hand	
	rsDcr.AntialiasedLineEnable = false;
	rsDcr.MultisampleEnable = true;
		
	m_pd3dDevice->CreateRasterizerState(&rsDcr,  &m_pWireFrameRS);
    
    rsDcr.FillMode =  D3D11_FILL_SOLID;
    m_pd3dDevice->CreateRasterizerState(&rsDcr,  &m_pSolidRS);
      
    D3D11_DEPTH_STENCIL_DESC dsDcr;
    SecureZeroMemory( &dsDcr, sizeof(dsDcr));		    
    dsDcr.DepthEnable = TRUE;
    dsDcr.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
    dsDcr.DepthFunc = D3D11_COMPARISON_LESS;
    dsDcr.StencilEnable = FALSE;
    dsDcr.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;
    dsDcr.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;

    dsDcr.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
    dsDcr.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
    
    dsDcr.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; 
    dsDcr.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;

    dsDcr.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
    dsDcr.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;

    dsDcr.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; 
    dsDcr.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;

    m_pd3dDevice->CreateDepthStencilState(&dsDcr,&m_dsTestWrite);

    dsDcr.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;
    m_pd3dDevice->CreateDepthStencilState(&dsDcr,&m_dsTestNoWrite);
        
    dsDcr.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
    dsDcr.DepthFunc = D3D11_COMPARISON_ALWAYS;
    m_pd3dDevice->CreateDepthStencilState(&dsDcr,&m_dsNoTestWrite);

    dsDcr.DepthEnable = FALSE;
    dsDcr.DepthFunc = D3D11_COMPARISON_NEVER;
    dsDcr.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;
    m_pd3dDevice->CreateDepthStencilState(&dsDcr,&m_dsNoTestNoWrite);
}