• Advertisement
Sign in to follow this  

Using a struct + <vector> and input layouts

This topic is 1931 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

So Let's suppose I have this:

[source lang="cpp"]struct Ball
{
XMFLOAT2 position;
XMFLOAT2 velocity;
std::vector<XMFLOAT2> vertices;
AABB box;
XMFLOAT4 color;
};[/source]

As you can see the Ball struct has a vector<XMFLOAT2> in it called vertices.In "vertices" I'm gonna store the vertexes that compose the whole ball.

Also,notice that AABB is just another struct,there's no point in putting the implementation here.

The problem is (pseudocode):

Ball x;
I fill the "vertices" array with 10 vertexes.

But how do I create a vertex buffer? I mean:

[source lang="cpp"]D3D11_BUFFER_DESC ballBuffer;
ballBuffer.Usage = D3D11_USAGE_IMMUTABLE;
ballBuffer.ByteWidth = sizeof(SIZEOF WHAT?);
ballBuffer.BindFlags = D3D11_BIND_VERTEX_BUFFER;
ballBuffer.CPUAccessFlags = 0;
ballBuffer.MiscFlags = 0;
ballBuffer.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA vinitDataBall;
vinitDataBall.pSysMem = ADRESS OF WHAT?;
HR(md3dDevice->CreateBuffer(&ballBuffer, &vinitDataBall, &mBallVB));[/source]

Should vinitDataBall.pSysMem = POINT TO WHAT?

And also,what should the ByteWidth be?


And another big problem,how should I implement the input layout? Edited by noatom

Share this post


Link to post
Share on other sites
Advertisement
[url="http://msdn.microsoft.com/en-us/library/windows/desktop/ff476092(v=vs.85).aspx"]This[/url] article describes how to setup your description, [url="http://msdn.microsoft.com/en-us/library/windows/desktop/ff476220(v=vs.85).aspx"]this[/url] one for how to setup your subresource data.

Basically:
ballBuffer.ByteWidth = sizeof( YOUR_VERTEX ) * vertices.size();
vinitDataBall.pSysMem = &vertices[0];

Share this post


Link to post
Share on other sites
[quote name='Seabolt' timestamp='1349291841' post='4986499']
vinitDataBall.pSysMem = &vertices[0];
[/quote]

You can also do vertices.data() to get a raw pointer to the array (f you're using a recent version of Visual Studio). Edited by MJP

Share this post


Link to post
Share on other sites
Just to point out this example is a bit far from real world usage. In the real world there wouldn't be a [font=courier new,courier,monospace]Ball [/font]structure to start with, there would be a [font=courier new,courier,monospace]ModelInstance [/font]structure using resource [i]ball.mdl[/i] or something, and we would pull out the vertices from there.
It's worth noticing that there's no such thing as [font=courier new,courier,monospace]std::vector vertices[/font]. What you really want to have is a [font=courier new,courier,monospace]std::vector<ConfigurableVertex>[/font] [font=courier new,courier,monospace]vertices[/font]. Personally I strongly suggest to use [font=courier new,courier,monospace]std::vector<unsigned byte>[/font].

In the latter case [font=courier new,courier,monospace]ballBuffer.ByteWidth = FunctionOf(VertexMaterial, AnimationContext) * [/font]10.

Just to help your gears turning.

[size=1]edit: set fonts[/size] Edited by Krohm

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement