Jump to content

  • Log In with Google      Sign In   
  • Create Account


Font and 2D Rectangle Vertex Buffer Combination?


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 BearInATie   Members   -  Reputation: 103

Like
0Likes
Like

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

 



Sponsor:

#2 menohack   Members   -  Reputation: 216

Like
0Likes
Like

Posted 13 July 2013 - 09:20 PM

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.



#3 BearInATie   Members   -  Reputation: 103

Like
0Likes
Like

Posted 14 July 2013 - 08:21 AM

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 :(






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