Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


BearInATie

Member Since 13 Jul 2013
Offline Last Active Jul 18 2013 04:26 PM

Topics I've Started

Font and 2D Rectangle Vertex Buffer Combination?

13 July 2013 - 07:49 PM

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);
}

 


PARTNERS