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(); }
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); }