我已经创建了管线、几何和一个绘制函数来绘制几何体。我的主要问题是,有谁能帮我理解为什么三角形没有在窗口中绘制出来?
void cSystem::Draw(UINT count)
{
// draw stuff...
UINT stride = sizeof(Vertex);
UINT offset = 0;
p_D3D11DeviceContext->IASetVertexBuffers(0, 1, &p_VertextBuffer, &stride, &offset);
p_D3D11DeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
p_D3D11DeviceContext->Draw(3, 0);
if (count == 0)
{
INFO(L"Draw() Complete");
}
}
void cSystem::InitGeometry() // initialise the geometry for the scene
{
Vertex vertices[] =
{
{ D3DXVECTOR3(0.0f, 0.5f, 0.5f), D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f) },
{ D3DXVECTOR3(0.5f, -0.5f, 0.5f), D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f) },
{ D3DXVECTOR3(-0.5f, -0.5f, 0.5f), D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f) }
};
D3D11_BUFFER_DESC bdsc;
ZeroMemory(&bdsc, sizeof(D3D11_BUFFER_DESC));
bdsc.Usage = D3D11_USAGE_IMMUTABLE;
bdsc.ByteWidth = sizeof(Vertex) * 3;
bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bdsc.CPUAccessFlags = 0;
bdsc.MiscFlags = 0;
D3D11_SUBRESOURCE_DATA vinitdata;
ZeroMemory(&vinitdata, sizeof(D3D11_SUBRESOURCE_DATA));
vinitdata.pSysMem = vertices;
p_D3D11Device->CreateBuffer(&bdsc, &vinitdata, &p_VertextBuffer);
/*D3D11_MAPPED_SUBRESOURCE ms;
p_D3D11DeviceContext->Map(p_VertextBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms);
memcpy(ms.pData, vertices, sizeof(Vertex));
p_D3D11DeviceContext->Unmap(p_VertextBuffer, NULL);*/
INFO(L"InitGeometry() Complete");
}
void cSystem::InitPipeline(void)
{
#if defined(DEBUG) || (_DEBUG)
DWORD shaderflags = 0;
#endif
//p_D3D11Device->GetFeatureLevel() == D3D_FEATURE_LEVEL_11_0;
ID3D10Blob *VS_, *PS_ = NULL;
D3DX11CompileFromFile(L"Shader.shader", 0, 0, "VS", "vs_5_0", 0, 0, 0, &VS_, 0, 0);
D3DX11CompileFromFile(L"Shader.shader", 0, 0, "PS", "ps_5_0", 0, 0, 0, &PS_, 0, 0);
p_D3D11Device->CreateVertexShader(VS_->GetBufferPointer(), VS_->GetBufferSize(), NULL, &p_VS);
p_D3D11Device->CreatePixelShader(PS_->GetBufferPointer(), PS_->GetBufferSize(), NULL, &p_PS);
p_D3D11DeviceContext->VSSetShader(p_VS, 0, 0);
p_D3D11DeviceContext->PSSetShader(p_PS, 0, 0);
D3D11_INPUT_ELEMENT_DESC layout[] =
{
{ "POSITION", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
UINT NumElements = ARRAYSIZE(layout);
p_D3D11Device->CreateInputLayout(layout, NumElements, VS_->GetBufferPointer(),
VS_->GetBufferSize(), &p_InputLayout);
p_D3D11DeviceContext->IASetInputLayout(p_InputLayout);
VS_->Release();
PS_->Release();
INFO(L"InitPipeline() Complete");
}
void cSystem::D3D11RenderFrame_(void)
{
// clear the back buffer
p_D3D11DeviceContext->ClearRenderTargetView(p_D3D11RenderTargetView, m_BackBufferColour[0]);
// clear the depth buffer
p_D3D11DeviceContext->ClearDepthStencilView(p_D3D11DepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0.0f);
// draw
Draw(count++);
// switch the back buffer and the front buffer
p_D3D11SwapChain->Present(0, 0);
}
着色器(或.fx文件)是一个用于渲染图形的程序。
struct VOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
VOut VS(float4 position : POSITION, float4 color : COLOR)
{
VOut output;
output.position = position;
output.color = color;
return output;
}
float4 PS(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
return color;
}
这里有程序截图的链接:http://i.imgur.com/JyNkPqQ.png 程序执行时调用了正确的函数,但没有显示出三角形。 如果我的问题被遗忘了,请问为什么三角形没有显示出来? 希望有人能够帮忙解决 :)