I know i'm still mixed up with how I'm creating different objects.
Here is a snippet from an instancing example, I initially thought this was where I was headed to create seperate objects ready for drawing. But this just points to different instances of the same object.
// Set the buffer strides.
strides[0] = sizeof(VertexType);
strides[1] = sizeof(InstanceType); </pre>
// Set the buffer offsets.
offsets[0] = 0;
offsets[1] = 0;
// Set the array of pointers to the vertex and instance buffers.
bufferPointers[0] = m_vertexBuffer;
bufferPointers[1] = m_instanceBuffer;
// Set the vertex buffer to active in the input assembler so it can be rendered.
deviceContext->IASetVertexBuffers(0, 2, bufferPointers, strides, offsets);
How do I create and pass
Vertex v[] =
{
// Front Face
Vertex(-1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 0.0f),
Vertex( 1.0f, 1.0f, -1.0f, 1.0f, 0.0f),
Vertex( 1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
// Back Face
Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 1.0f),
Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 1.0f),
Vertex( 1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
Vertex(-1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
// Top Face
Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 1.0f),
Vertex(-1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
Vertex( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
Vertex( 1.0f, 1.0f, -1.0f, 1.0f, 1.0f),
// Bottom Face
Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 0.0f),
Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 0.0f),
// Left Face
Vertex(-1.0f, -1.0f, 1.0f, 0.0f, 1.0f),
Vertex(-1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
Vertex(-1.0f, 1.0f, -1.0f, 1.0f, 0.0f),
Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
// Right Face
Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
Vertex( 1.0f, 1.0f, -1.0f, 0.0f, 0.0f),
Vertex( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
Vertex( 1.0f, -1.0f, 1.0f, 1.0f, 1.0f),
};
D3D11_BUFFER_DESC vertexBufferDesc;
ZeroMemory( &vertexBufferDesc, sizeof(vertexBufferDesc) );
vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
vertexBufferDesc.ByteWidth = sizeof( Vertex ) * 24;
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = 0;
vertexBufferDesc.MiscFlags = 0;
D3D11_SUBRESOURCE_DATA vertexBufferData2;
ZeroMemory( &vertexBufferData2, sizeof(vertexBufferData2) );
vertexBufferData2.pSysMem = v;
hr = d3d11Device->CreateBuffer( &vertexBufferDesc, &vertexBufferData2, &cube1VertBuffer);
UINT stride = sizeof( Vertex );
UINT offset = 0;
//d3d11DevCon->IASetVertexBuffers( 0, 1, &cube1VertBuffer, &stride, &offset );
d3d11DevCon->IASetVertexBuffers( 0, 1, &pVertexBuffers, &stride, &offset );
//Create the Input Layout
hr = d3d11Device->CreateInputLayout( layout, numElements, VS_Buffer->GetBufferPointer(),
VS_Buffer->GetBufferSize(), &vertLayout );
//Set the Input Layout
d3d11DevCon->IASetInputLayout( vertLayout );
//Set Primitive Topology
d3d11DevCon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
And the next one:
VertexSquare v2[] =
{
VertexSquare(-1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
VertexSquare(-1.0f, 1.0f, -1.0f, 0.0f, 0.0f),
VertexSquare( 1.0f, 1.0f, -1.0f, 1.0f, 0.0f),
VertexSquare( 1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
};
D3D11_BUFFER_DESC vertexBufferDescSquare;
ZeroMemory( &vertexBufferDescSquare, sizeof(vertexBufferDescSquare) );
vertexBufferDescSquare.Usage = D3D11_USAGE_DYNAMIC;
vertexBufferDescSquare.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
vertexBufferDescSquare.BindFlags = D3D11_BIND_VERTEX_BUFFER;
const int sizeOfSprite = sizeof( VertexSquare ) * 6;
vertexBufferDescSquare.ByteWidth = sizeOfSprite * ciMaxLetters;
//vertexBufferDesc.MiscFlags = ciMaxLetters;
D3D11_SUBRESOURCE_DATA vertexBufferDataSquare;
ZeroMemory( &vertexBufferDataSquare, sizeof(vertexBufferDataSquare) );
vertexBufferDataSquare.pSysMem = v2;
hr = d3d11Device->CreateBuffer( &vertexBufferDescSquare, &vertexBufferDataSquare, &pVertexBuffers);
if( FAILED( hr ) ) { MessageBox( 0, L"In LoadSquares, failed to create vertex buffer!", L"Error", MB_OK ); return 0; }
//Create the Input Layout
hr = d3d11Device->CreateInputLayout( layoutSquare, numElementsSquare, VS_Buffer->GetBufferPointer(),
VS_Buffer->GetBufferSize(), &vertLayoutSquare );
UINT stride = sizeof( VertexSquare );
UINT offset = 0;
d3d11DevCon->IASetInputLayout( vertLayoutSquare );
d3d11DevCon->IASetVertexBuffers( 0, 2, &pVertexBuffers, &stride, &offset );
d3d11DevCon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
And pass them both to the d3dDeviceContext for drawing, it's really confusing and it never seems to be outlined if I'm doing this call seperately for each object, or where I need to be looking to implement seperate object calls.
Your help would br greatly appreciated as I am running out of hair!