Jump to content

  • Log In with Google      Sign In   
  • Create Account

Unable to draw triangle...


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Wrath87   Members   -  Reputation: 110

Like
0Likes
Like

Posted 03 June 2012 - 03:43 PM

Hey everyone.

I've been stuck at this nonsense error for a week now and I can't seem to find the problem. Okay I simplyfied it, because I can't draw even a triangle. Must be some initialization problem but I can't find it even with compare tools. In my other project I could succesfully render my scenes.
Here're the correspoding code snipets:
bool DXManager::Initialize(const HINSTANCE hInstance, const HWND hWnd)
{
m_hInstance = hInstance;
m_hWnd = hWnd;
assert(DriverTypes);
assert(DriverTypes_COUNT);
assert(FeatureLevels);
assert(FeatureLevels_COUNT);
RECT ClientRect;
ZeroMemory(&ClientRect, sizeof(RECT));
GetClientRect(m_hWnd, &ClientRect);
UINT ClientWidth  = ClientRect.right - ClientRect.left;
UINT ClientHeight = ClientRect.bottom - ClientRect.top;
DXGI_SWAP_CHAIN_DESC SwapChain_DESCRIPTOR;
ZeroMemory(&SwapChain_DESCRIPTOR, sizeof(DXGI_SWAP_CHAIN_DESC));
SwapChain_DESCRIPTOR.BufferCount	  = 1;
SwapChain_DESCRIPTOR.BufferUsage	  = DXGI_USAGE_RENDER_TARGET_OUTPUT;
SwapChain_DESCRIPTOR.BufferDesc.Format	 = DXGI_FORMAT_R8G8B8A8_UNORM;
SwapChain_DESCRIPTOR.BufferDesc.Width	 = ClientWidth;
SwapChain_DESCRIPTOR.BufferDesc.Height	 = ClientHeight;
SwapChain_DESCRIPTOR.BufferDesc.RefreshRate.Numerator = 60;
SwapChain_DESCRIPTOR.BufferDesc.RefreshRate.Denominator = 1;
SwapChain_DESCRIPTOR.BufferDesc.Scaling	 = DXGI_MODE_SCALING_UNSPECIFIED;
SwapChain_DESCRIPTOR.BufferDesc.ScanlineOrdering  = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
SwapChain_DESCRIPTOR.Flags	    = 0;
SwapChain_DESCRIPTOR.OutputWindow	  = m_hWnd;
SwapChain_DESCRIPTOR.SampleDesc.Count	 = 1;
SwapChain_DESCRIPTOR.SampleDesc.Quality	 = 0;
SwapChain_DESCRIPTOR.SwapEffect	   = DXGI_SWAP_EFFECT_DISCARD;
SwapChain_DESCRIPTOR.Windowed	   = true;
HRESULT result = E_FAIL;
for (UINT Driver_INDEX = 0; Driver_INDEX < DriverTypes_COUNT; ++Driver_INDEX)
{
  result = D3D11CreateDeviceAndSwapChain( 0,
		    DriverTypes[Driver_INDEX],
		    0,
		    D3D11_CREATE_DEVICE_DEBUG,
		    FeatureLevels,
		    FeatureLevels_COUNT,
		    D3D11_SDK_VERSION,
		    &SwapChain_DESCRIPTOR,
		    &m_SwapChain,
		    &m_Device,
		    &m_FeatureLevel,
		    &m_Context);
  if (SUCCEEDED(result))
  {
   m_DriverType = DriverTypes[Driver_INDEX];
   break;
  }
}
if (FAILED(result))
{
  const WCHAR* ErrorString  = DXGetErrorStringW(result);
  const WCHAR* ErrorDescription = DXGetErrorDescriptionW(result);
  MessageBox(m_hWnd, ErrorDescription, ErrorString, MB_ICONERROR | MB_OK);
  return false;
}
result = E_FAIL;
ID3D11Texture2D* BackBufferPTR;
result = m_SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&BackBufferPTR));
if (FAILED(result))
{
  if (BackBufferPTR != 0)
   BackBufferPTR->Release();
  DXTRACE_MSG(L"Failed to retrieve backbuffer!");
  return false;
}

result = E_FAIL;
result = m_Device->CreateRenderTargetView(BackBufferPTR, 0, &m_RenderTargetView);
if (BackBufferPTR)
  BackBufferPTR->Release();
if (FAILED(result))
{
  DXTRACE_MSG(L"Failed to create RenderTargetView!");
  return false;
}
D3D11_VIEWPORT Viewport;
ZeroMemory(&Viewport, sizeof(D3D11_VIEWPORT));
Viewport.Width  = static_cast<float>(ClientWidth);
Viewport.Height  = static_cast<float>(ClientHeight);
Viewport.TopLeftX = 0.0f;
Viewport.TopLeftY = 0.0f;
Viewport.MinDepth = 0.0f;
Viewport.MaxDepth = 1.0f;
m_Context->RSSetViewports(1, &Viewport);
return true;
}

And the triangle file:
bool Triangle::LoadContent(void)
{
bool CompilationResult = false;
HRESULT Result = E_FAIL;

// Vertex Shader
ID3DBlob* vsBuffer = 0;
CompilationResult = CompileShaderFromFile(L"./Shaders/BasicHLSL.fx", "VS_Main", "vs_4_0", &vsBuffer);
if (!CompilationResult)
  return false;
Result = m_Device->CreateVertexShader( vsBuffer->GetBufferPointer(),
		   vsBuffer->GetBufferSize(),
		   0,
		   &m_VertexShader);
if (FAILED(Result))
{
  DXTRACE_ERR_MSGBOX(L"Error loading vertex shader", Result);
  if (vsBuffer != 0)
   vsBuffer->Release();
 
  return false;
}
// Vertex Shader END
Result = m_Device->CreateInputLayout( SimpleVertex_InputLayout,
		   1,
		   vsBuffer->GetBufferPointer(),
		   vsBuffer->GetBufferSize(),
		   &m_InputLayout);
if (FAILED(Result))
{
  DXTRACE_ERR_MSGBOX(L"Error while creating input layout", Result);
  vsBuffer->Release();
  return false;
}
if (vsBuffer != 0)
  vsBuffer->Release();
vsBuffer = 0;
// PIXEL SHADER
ID3DBlob* psBuffer = 0;
CompilationResult = CompileShaderFromFile(L"./Shaders/BasicHLSL.fx", "PS_Main", "ps_4_0", &psBuffer);
if (!CompilationResult)
  return false;
Result = E_FAIL;
Result = m_Device->CreatePixelShader( psBuffer->GetBufferPointer(),
		   psBuffer->GetBufferSize(),
		   0,
		   &m_PixelShader);
if (FAILED(Result))
{
  DXTRACE_ERR_MSGBOX(L"Error loading pixel shader", Result);
  psBuffer->Release();
  return false;
}
if (psBuffer != 0)
  psBuffer->Release();
psBuffer = 0;
// PIXEL SHADER END
// Load Vertices to array
SimpleVertex Vertices[] =
{
  XMFLOAT3( 0.0f, 0.5f, -0.25f),
  XMFLOAT3( 0.5f,-0.5f, -0.25f),
  XMFLOAT3(-0.5f,-0.5f, -0.25f)
};
D3D11_BUFFER_DESC VertexBuffer_DESCRIPTOR;
ZeroMemory(&VertexBuffer_DESCRIPTOR, sizeof(D3D11_BUFFER_DESC));
VertexBuffer_DESCRIPTOR.Usage   = D3D11_USAGE_DEFAULT;
VertexBuffer_DESCRIPTOR.BindFlags  = D3D11_BIND_VERTEX_BUFFER;
VertexBuffer_DESCRIPTOR.ByteWidth  = sizeof(SimpleVertex) * 3;

// setup vertex data
D3D11_SUBRESOURCE_DATA InitialData;
ZeroMemory(&InitialData, sizeof(D3D11_SUBRESOURCE_DATA));
InitialData.pSysMem = Vertices;
Result = m_Device->CreateBuffer(&VertexBuffer_DESCRIPTOR, &InitialData, &m_VertexBuffer);
if (FAILED(Result))
  return false;
// TODO
// FIX: - causes assertion!
// delete/[]/ Vertices;
return true;
}
void Triangle::Render(void)
{
assert(m_Context);
float BgColor[4] = { 0.0f, 0.0f, 0.15f, 1.0f };
m_Context->ClearRenderTargetView(m_RenderTargetView, BgColor);
UINT Stride = sizeof(SimpleVertex);
UINT Offset = 0;
assert(m_InputLayout);
assert(m_VertexBuffer);
m_Context->IASetInputLayout(m_InputLayout);
m_Context->IASetVertexBuffers(0, 1, &m_VertexBuffer, &Stride, &Offset);
m_Context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
assert(m_VertexShader);
assert(m_PixelShader);
m_Context->VSSetShader(m_VertexShader, 0, 0);
m_Context->PSSetShader(m_PixelShader, 0, 0);
m_Context->Draw(3, 0);
assert(m_SwapChain);
m_SwapChain->Present(0, 0);
}

Could someone tell me what am I missing? HLSL in this simple case:
float4 VS_Main(float4 Position : POSITION) : SV_POSITION
{
    return Position;
}
float4 PS_Main(float4 Position : SV_POSITION) : SV_TARGET
{
    return float4( 1.0f, 1.0f, 1.0f, 1.0f);
}

Only the blank d3d client area is visible but no triangle. Vertex buffers are loaded and the fx file is compiled so I have no idea where is that error.

Sponsor:

#2 MJP   Moderators   -  Reputation: 11824

Like
0Likes
Like

Posted 03 June 2012 - 04:16 PM

Your vertex positions have a negative z value, which will cause the triangle to get clipped. The visible range is [-1, 1] for X and Y and [0, 1] for Z.

Edited by MJP, 03 June 2012 - 04:19 PM.


#3 Wrath87   Members   -  Reputation: 110

Like
0Likes
Like

Posted 03 June 2012 - 04:39 PM

Ah thanks, but changing those to positive 0.25 doesn't change anything. Only the blue d3d client area is visible but the triangle is nowhere.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS