Jump to content

  • Log In with Google      Sign In   
  • Create Account

#ActualXuchilbara

Posted 05 November 2012 - 11:43 AM

Hey there,

I've just setup my Constant Buffer in DirectX11, everything seems to be going fine, but the "IASetVertexBuffers" seems to be breaking while I debug, I havn't any idea why, could an experienced programmer please take a look and tell me if I have made a mistake in Syntax or something?

here is a screenshot of where it breaks: http://img194.imageshack.us/img194/6109/herrrx.jpg

Thanks

Object.cpp
#include "Object.h"
Object::Object()
{
}
Object::~Object()
{
}
void Object::Render(ID3D11DeviceContext * pImmediateContext)
{
OFFSET Offset;
Offset.X = 0.5f;
Offset.Y = 0.2f;
Offset.Z = 0.7f;
pImmediateContext->UpdateSubresource(pCBuffer, 0, 0, &Offset, 0, 0);
    // Render a triangle
VertexShader(pImmediateContext);
PixelShader(pImmediateContext);
    pImmediateContext->Draw( 3, 0 );
}

void Object::VertexShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
}

void Object::PixelShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
}

HRESULT Object::CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;
    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
    // Set the D3DCOMPILE_DEBUG flag to embed debug information in the shaders.
    // Setting this flag improves the shader debugging experience, but still allows
    // the shaders to be optimized and to run exactly the way they will run in
    // the release configuration of this program.
    dwShaderFlags |= D3DCOMPILE_DEBUG;
#endif
    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName,
  NULL,
  NULL,
  szEntryPoint,
  szShaderModel,
	    dwShaderFlags,
  0,
  NULL,
  ppBlobOut,
  &pErrorBlob,
  NULL );
    if( FAILED(hr) )
    {
	    if( pErrorBlob != NULL )
		    OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
	    if( pErrorBlob ) pErrorBlob->Release();
	    return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();
    return S_OK;
}

HRESULT Object::InitObject(ID3D11Device * device, ID3D11DeviceContext * pImmediateContext)
{
HRESULT hr = S_OK;

    // Compile the vertex shader
    ID3DBlob* pVSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "VShader",
	    "vs_4_0",
	    &pVSBlob );

    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }

// Create the vertex shader
hr = device->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );
if( FAILED( hr ) )
{
  pVSBlob->Release();
	    return hr;
}

    // Define the input layout
    D3D11_INPUT_ELEMENT_DESC layout[] =
    {
	    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
  {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
    };
UINT numElements = ARRAYSIZE( layout );
    // Create the input layout
hr = device->CreateInputLayout( layout, numElements, pVSBlob->GetBufferPointer(),
										  pVSBlob->GetBufferSize(), &g_pVertexLayout );
pVSBlob->Release();
if( FAILED( hr ) )
	    return hr;
    // Set the input layout
    pImmediateContext->IASetInputLayout( g_pVertexLayout );
// Compile the pixel shader
ID3DBlob* pPSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "PShader",
	    "ps_4_0",
	    &pPSBlob );
    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }
// Create the pixel shader
hr = device->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &g_pPixelShader );
pPSBlob->Release();
    if( FAILED( hr ) )
	    return hr;
    // Create vertex buffer
    D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = 16;
    bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
/*
    D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory( &InitData, sizeof(InitData) );
    InitData.pSysMem = vertices;
*/
    hr = device->CreateBuffer( &bd, NULL, &pCBuffer );
pImmediateContext->VSSetConstantBuffers(0, 1, &pCBuffer);
    if( FAILED( hr ) )
	    return hr;
return hr;
}
void Object::SetupVertex(ID3D11DeviceContext * pImmediateContext)
{
    // Set vertex buffer
    UINT stride = sizeof( SimpleVertex );
    UINT offset = 0;
    pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset);
    // Set primitive topology
    pImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
}

void Object::CleanupObject()
{
    if( g_pVertexBuffer ) g_pVertexBuffer->Release();
    if( g_pVertexLayout ) g_pVertexLayout->Release();
    if( g_pVertexShader ) g_pVertexShader->Release();
    if( g_pPixelShader ) g_pPixelShader->Release();
}

Shader.fx
//Created by Tim Lawton 2012
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
//Constant Buffer
cbuffer ConstantBuffer
{
float3 Offset;
}

//Struct to return two values
struct VOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
    // create a VOut struct
    VOut output;
    // set the output values
    output.position = position;
output.position.x += Offset.x;
    output.position.y += Offset.y;
    output.position.xy *= Offset.z;
    output.color = color;
    // return the output values
    return output;
}
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
    return color;
}

#2Xuchilbara

Posted 05 November 2012 - 11:42 AM

Hey there,

I've just setup my Constant Buffer in DirectX11, everything seems to be going fine, but the "IASetVertexBuffers" seems to be breaking while I debug, I havn't any idea why, could an experienced programmer please take a look and tell me if I have made a mistake in Syntax or something?

here is a screenshot of where it breaks: http://img194.imageshack.us/img194/6109/herrrx.jpg

Thanks

Object.cpp
#include "Object.h"
Object::Object()
{
}
Object::~Object()
{
}
void Object::Render(ID3D11DeviceContext * pImmediateContext)
{
OFFSET Offset;
Offset.X = 0.5f;
Offset.Y = 0.2f;
Offset.Z = 0.7f;
pImmediateContext->UpdateSubresource(pCBuffer, 0, 0, &Offset, 0, 0);
    // Render a triangle
VertexShader(pImmediateContext);
PixelShader(pImmediateContext);
    pImmediateContext->Draw( 3, 0 );
}

void Object::VertexShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
}

void Object::PixelShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
}

HRESULT Object::CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;
    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
    // Set the D3DCOMPILE_DEBUG flag to embed debug information in the shaders.
    // Setting this flag improves the shader debugging experience, but still allows
    // the shaders to be optimized and to run exactly the way they will run in
    // the release configuration of this program.
    dwShaderFlags |= D3DCOMPILE_DEBUG;
#endif
    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName,
  NULL,
  NULL,
  szEntryPoint,
  szShaderModel,
	    dwShaderFlags,
  0,
  NULL,
  ppBlobOut,
  &pErrorBlob,
  NULL );
    if( FAILED(hr) )
    {
	    if( pErrorBlob != NULL )
		    OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
	    if( pErrorBlob ) pErrorBlob->Release();
	    return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();
    return S_OK;
}

HRESULT Object::InitObject(ID3D11Device * device, ID3D11DeviceContext * pImmediateContext)
{
HRESULT hr = S_OK;

    // Compile the vertex shader
    ID3DBlob* pVSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "VShader",
	    "vs_4_0",
	    &pVSBlob );

    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }

// Create the vertex shader
hr = device->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );
if( FAILED( hr ) )
{
  pVSBlob->Release();
	    return hr;
}

    // Define the input layout
    D3D11_INPUT_ELEMENT_DESC layout[] =
    {
	    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
  {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
    };
UINT numElements = ARRAYSIZE( layout );
    // Create the input layout
hr = device->CreateInputLayout( layout, numElements, pVSBlob->GetBufferPointer(),
										  pVSBlob->GetBufferSize(), &g_pVertexLayout );
pVSBlob->Release();
if( FAILED( hr ) )
	    return hr;
    // Set the input layout
    pImmediateContext->IASetInputLayout( g_pVertexLayout );
// Compile the pixel shader
ID3DBlob* pPSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "PShader",
	    "ps_4_0",
	    &pPSBlob );
    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }
// Create the pixel shader
hr = device->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &g_pPixelShader );
pPSBlob->Release();
    if( FAILED( hr ) )
	    return hr;
    // Create vertex buffer
    D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = 16;
    bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
/*
    D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory( &InitData, sizeof(InitData) );
    InitData.pSysMem = vertices;
*/
    hr = device->CreateBuffer( &bd, NULL, &pCBuffer );
pImmediateContext->VSSetConstantBuffers(0, 1, &pCBuffer);
    if( FAILED( hr ) )
	    return hr;
return hr;
}
void Object::SetupVertex(ID3D11DeviceContext * pImmediateContext)
{
    // Set vertex buffer
    UINT stride = sizeof( SimpleVertex );
    UINT offset = 0;
    pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset);
    // Set primitive topology
    pImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
}

void Object::CleanupObject()
{
    if( g_pVertexBuffer ) g_pVertexBuffer->Release();
    if( g_pVertexLayout ) g_pVertexLayout->Release();
    if( g_pVertexShader ) g_pVertexShader->Release();
    if( g_pPixelShader ) g_pPixelShader->Release();
}

Shader.fx
//Created by Tim Lawton 2012
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
//Constant Buffer
cbuffer ConstantBuffer
{
float3 Offset;
}

//Struct to return two values
struct VOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
    // create a VOut struct
    VOut output;
    // set the output values
    output.position = position;
output.position.x += Offset.x;
    output.position.y += Offset.y;
    output.position.xy *= Offset.z;
    output.color = color;
    // return the output values
    return output;
}
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
    return color;
}

#1Xuchilbara

Posted 05 November 2012 - 11:41 AM

Hey there,

I've just setup my Constant Buffer in DirectX11, everything seems to be going fine, but the "IASetVertexBuffers" seems to be breaking while I debug, I havn't any idea why, could an experienced programmer please take a look and tell me if I have made a mistake in Syntax or something?

Thanks

Object.cpp
#include "Object.h"
Object::Object()
{
}
Object::~Object()
{
}
void Object::Render(ID3D11DeviceContext * pImmediateContext)
{
OFFSET Offset;
Offset.X = 0.5f;
Offset.Y = 0.2f;
Offset.Z = 0.7f;
pImmediateContext->UpdateSubresource(pCBuffer, 0, 0, &Offset, 0, 0);
    // Render a triangle
VertexShader(pImmediateContext);
PixelShader(pImmediateContext);
    pImmediateContext->Draw( 3, 0 );
}

void Object::VertexShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
}

void Object::PixelShader(ID3D11DeviceContext * pImmediateContext)
{
pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
}

HRESULT Object::CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;
    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
    // Set the D3DCOMPILE_DEBUG flag to embed debug information in the shaders.
    // Setting this flag improves the shader debugging experience, but still allows
    // the shaders to be optimized and to run exactly the way they will run in
    // the release configuration of this program.
    dwShaderFlags |= D3DCOMPILE_DEBUG;
#endif
    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName,
  NULL,
  NULL,
  szEntryPoint,
  szShaderModel,
	    dwShaderFlags,
  0,
  NULL,
  ppBlobOut,
  &pErrorBlob,
  NULL );
    if( FAILED(hr) )
    {
	    if( pErrorBlob != NULL )
		    OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
	    if( pErrorBlob ) pErrorBlob->Release();
	    return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();
    return S_OK;
}

HRESULT Object::InitObject(ID3D11Device * device, ID3D11DeviceContext * pImmediateContext)
{
HRESULT hr = S_OK;

    // Compile the vertex shader
    ID3DBlob* pVSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "VShader",
	    "vs_4_0",
	    &pVSBlob );

    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }

// Create the vertex shader
hr = device->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );
if( FAILED( hr ) )
{
  pVSBlob->Release();
	    return hr;
}

    // Define the input layout
    D3D11_INPUT_ELEMENT_DESC layout[] =
    {
	    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
  {"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
    };
UINT numElements = ARRAYSIZE( layout );
    // Create the input layout
hr = device->CreateInputLayout( layout, numElements, pVSBlob->GetBufferPointer(),
										  pVSBlob->GetBufferSize(), &g_pVertexLayout );
pVSBlob->Release();
if( FAILED( hr ) )
	    return hr;
    // Set the input layout
    pImmediateContext->IASetInputLayout( g_pVertexLayout );
// Compile the pixel shader
ID3DBlob* pPSBlob = NULL;
    hr = CompileShaderFromFile( L"Shader.fx",
	    "PShader",
	    "ps_4_0",
	    &pPSBlob );
    if( FAILED( hr ) )
    {
	    MessageBox( NULL,
				    L"The FX file cannot be compiled.  Please run this executable from the directory that contains the FX file.", L"Error", MB_OK );
	    return hr;
    }
// Create the pixel shader
hr = device->CreatePixelShader( pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), NULL, &g_pPixelShader );
pPSBlob->Release();
    if( FAILED( hr ) )
	    return hr;
    // Create vertex buffer
    D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = 16;
    bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
/*
    D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory( &InitData, sizeof(InitData) );
    InitData.pSysMem = vertices;
*/
    hr = device->CreateBuffer( &bd, NULL, &pCBuffer );
pImmediateContext->VSSetConstantBuffers(0, 1, &pCBuffer);
    if( FAILED( hr ) )
	    return hr;
return hr;
}
void Object::SetupVertex(ID3D11DeviceContext * pImmediateContext)
{
    // Set vertex buffer
    UINT stride = sizeof( SimpleVertex );
    UINT offset = 0;
    pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset);
    // Set primitive topology
    pImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
}

void Object::CleanupObject()
{
    if( g_pVertexBuffer ) g_pVertexBuffer->Release();
    if( g_pVertexLayout ) g_pVertexLayout->Release();
    if( g_pVertexShader ) g_pVertexShader->Release();
    if( g_pPixelShader ) g_pPixelShader->Release();
}

Shader.fx
//Created by Tim Lawton 2012
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
//Constant Buffer
cbuffer ConstantBuffer
{
float3 Offset;
}

//Struct to return two values
struct VOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
    // create a VOut struct
    VOut output;
    // set the output values
    output.position = position;
output.position.x += Offset.x;
    output.position.y += Offset.y;
    output.position.xy *= Offset.z;
    output.color = color;
    // return the output values
    return output;
}
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
    return color;
}

PARTNERS