• Advertisement
Sign in to follow this  

Font and 2D Rectangle Vertex Buffer Combination?

This topic is 1654 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

Hey Everyone! (Long time lurker, first time posting :D )

 

So I've been programming in C++ for awhile, and recently decided to dive deeper into graphics, beginning with DirectX 11.  I've gotten pretty far, and have written some shaders and the like. (Nothing too fancy, but something I can be proud of for the moment)

 

However, I've run into a snag, I'm trying to render a grid of 2D rectangles with text on top. Both work, independently, but when combining I'm a little stuck. 

 

I've narrowed it down to the actual setting of the buffers; the grid has-a text object, and the text is rendered after the grid square is drawn. Draw the grid square first and its fine, draw it with the text and its 1/10th the size (like so: http://imgur.com/G1NyGf6)

 

I'm fairly certain this is because of the grid's buffer data being overwritten by the text data. So my questions are (after the long-winded wind up):

 

1- Am I right in assuming the grid's buffer data is being overwritten with the text's? (the deviceContext used in both code snippets refers to the SAME deviceContext object)

 

2- Is there some elegant way to combine these different buffers? (see the code below)

 

Thanks!

 

The text code bit:

bool Text::RenderSentence(ID3D11DeviceContext* deviceContext, int sentenceIndex, D3DXMATRIX worldMatrix, 
      D3DXMATRIX orthoMatrix){
unsigned int stride, offset;
D3DXVECTOR4 pixelColor;
bool result;


stride = sizeof(VertexType); 
offset = 0;


deviceContext->IASetVertexBuffers(0, 1, &m_sentences[sentenceIndex]->vertexBuffer, &stride, &offset);


deviceContext->IASetIndexBuffer(m_sentences[sentenceIndex]->indexBuffer, DXGI_FORMAT_R32_UINT, 0);


deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);


pixelColor = D3DXVECTOR4(m_sentences[sentenceIndex]->red, m_sentences[sentenceIndex]->green, m_sentences[sentenceIndex]->blue, 1.0f);


result = m_FontShader->Render(deviceContext, m_sentences[sentenceIndex]->indexCount, worldMatrix, m_baseViewMatrix, orthoMatrix, m_Font->GetTexture(), 
     pixelColor);
if(!result){
return false;
}


return true;
}

And the Grid Square:

void GridSquare::RenderBuffers(ID3D11DeviceContext* deviceContext){
unsigned int stride = sizeof(VertexType);
unsigned int offset = 0;


//set vertex buffer to active in IA for rendering
deviceContext->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset);


//set index buffer to active in IA for rendering
deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);


//set primitive to be used
deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
}

 

Share this post


Link to post
Share on other sites
Advertisement

It sounds like your are forgetting to set your world matrix properly in between draw calls for your grid and your text. If you don't update the constant buffers on the cpu or the gpu with VSSetConstantBuffers then they will remain the way they were set for the previous draw call.

Share this post


Link to post
Share on other sites

That' didn't seem to be it :( I have a separate Font and Texture classes that are called, each updates calls VSSetConstantBuffers and then draws :(

Share this post


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

  • Advertisement