Jump to content

  • Log In with Google      Sign In   
  • Create Account


How to Bind Multiple Shapes/Models to One Vertex Buffer?


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 e.s.   Members   -  Reputation: 110

Like
0Likes
Like

Posted 28 January 2013 - 04:00 PM

If I have two Vertex Arrays, one for Square, and one for Triangle; what is the best way to bind them to the VertexBuffer?

  1. Is this possible with objects that have different numbers of Vertices?
  2. Is this possible with objects that have different buffer element descriptions, (one with float4 position data, and another with float3 and texcoords, etc).

I have about 100 static model templates that I would like to bind to the vertex buffer, and a few thousand instances associated with those models in an instance buffer.

 

I can DrawInstanced/Indexed and point to the appropriate pointer in the vertex buffer for reading, (I think), so I am just trying to figure out the best way to get the vertices into the vertex buffer in the first place.

 

Thanks!

 

Currently, I am binding one Shape, (a triangle), to the subresource like this:

 

ModelRenderer::StaticBufferDescription.ByteWidth = bufferSize;
ModelRenderer::StaticBufferDescription.BindFlags = D3D11_BIND_VERTEX_BUFFER;


ModelRenderer::StaticSubResourceData.SysMemPitch = 0;
ModelRenderer::StaticSubResourceData.SysMemSlicePitch = 0;
ModelRenderer::StaticSubResourceData.pSysMem = model->GetVertices();

DeviceManager::Device->CreateBuffer(
& ModelRenderer::StaticBufferDescription,
& ModelRenderer::StaticSubResourceData,
& ModelRenderer::StaticBuffer);


Edited by e.s., 28 January 2013 - 04:04 PM.


Sponsor:

#2 eppo   Crossbones+   -  Reputation: 2337

Like
0Likes
Like

Posted 29 January 2013 - 02:54 AM

1. Yes. You can combine multiple meshes into a single vertex buffer. Use the BaseVertexLocation argument to Draw...() to offset into the buffer.
2. Yes. As long as all vertex-elements have the same byte size (the pStrides argument you pass to IASetVertexBuffers()).

(float3)POSITION + (float2)UV1 + (float2)UV2 = (3 * 4 bytes) + (2 * 4 bytes) + (2 * 4 bytes)
(float3)POSITION + (float4)TANGENT = (3 * 4 bytes) + (4 * 4 bytes)

If vertices in two combined streams have a different size, it's possible to pad the first stream so the second's stride lines up with its first vertex correctly.

You bind an input layout to describe the data layout (the 'type') of a vertex.

Edited by eppo, 29 January 2013 - 03:03 AM.


#3 e.s.   Members   -  Reputation: 110

Like
0Likes
Like

Posted 29 January 2013 - 12:34 PM

Thanks!

 

What is the best way of appending to:

ModelRenderer::StaticSubResourceData.pSysMem = model->GetVertices(); ?

 

Is it better to make a single array of ALL vertices and make this assignment?  Or better to use streams?

 

Knowing that a VertexBuffer can only be associated with 1 stride size is very helpful.

 

Thanks again!


Edited by e.s., 29 January 2013 - 12:36 PM.





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