4text_class::text_class()
16text_class::~text_class()
20bool text_class::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
int screenWidth,
int screenHeight,
int maxLength,
font_class* Font,
char* text,
21 int positionX,
int positionY,
float red,
float green,
float blue)
27 m_screenWidth = screenWidth;
28 m_screenHeight = screenHeight;
31 m_maxLength = maxLength;
34 result = InitializeBuffers(device, deviceContext, Font, text, positionX, positionY, red, green, blue);
43void text_class::Shutdown()
51void text_class::Render(ID3D11DeviceContext* deviceContext)
54 RenderBuffers(deviceContext);
59int text_class::GetIndexCount()
64bool text_class::InitializeBuffers(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
font_class* Font,
char* text,
int positionX,
int positionY,
float red,
float green,
float blue)
67 unsigned long* indices;
68 D3D11_BUFFER_DESC vertexBufferDesc, indexBufferDesc;
69 D3D11_SUBRESOURCE_DATA vertexData, indexData;
74 m_vertexCount = 6 * m_maxLength;
75 m_indexCount = m_vertexCount;
78 vertices =
new VertexType[m_vertexCount];
81 indices =
new unsigned long[m_indexCount];
84 memset(vertices, 0, (
sizeof(VertexType) * m_vertexCount));
87 for (i = 0; i < m_indexCount; i++)
93 vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
94 vertexBufferDesc.ByteWidth =
sizeof(VertexType) * m_vertexCount;
95 vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
96 vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
97 vertexBufferDesc.MiscFlags = 0;
98 vertexBufferDesc.StructureByteStride = 0;
101 vertexData.pSysMem = vertices;
102 vertexData.SysMemPitch = 0;
103 vertexData.SysMemSlicePitch = 0;
106 result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer);
113 indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
114 indexBufferDesc.ByteWidth =
sizeof(
unsigned long) * m_indexCount;
115 indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
116 indexBufferDesc.CPUAccessFlags = 0;
117 indexBufferDesc.MiscFlags = 0;
118 indexBufferDesc.StructureByteStride = 0;
121 indexData.pSysMem = indices;
122 indexData.SysMemPitch = 0;
123 indexData.SysMemSlicePitch = 0;
126 result = device->CreateBuffer(&indexBufferDesc, &indexData, &m_indexBuffer);
141 result = UpdateText(deviceContext, Font, text, positionX, positionY, red, green, blue);
150void text_class::ShutdownBuffers()
155 m_indexBuffer->Release();
162 m_vertexBuffer->Release();
169bool text_class::UpdateText(ID3D11DeviceContext* deviceContext,
font_class* Font,
char* text,
int positionX,
int positionY,
float red,
float green,
float blue)
172 VertexType* vertices;
175 D3D11_MAPPED_SUBRESOURCE mappedResource;
176 VertexType* verticesPtr;
179 m_pixelColor = XMFLOAT4(red, green, blue, 1.0f);
182 numLetters = (int)strlen(text);
185 if (numLetters > m_maxLength)
191 vertices =
new VertexType[m_vertexCount];
194 memset(vertices, 0, (
sizeof(VertexType) * m_vertexCount));
197 drawX = (float)(((m_screenWidth / 2) * -1) + positionX);
198 drawY = (float)((m_screenHeight / 2) - positionY);
201 Font->BuildVertexArray((
void*)vertices, text, drawX, drawY);
204 result = deviceContext->Map(m_vertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
211 verticesPtr = (VertexType*)mappedResource.pData;
214 memcpy(verticesPtr, (
void*)vertices, (
sizeof(VertexType) * m_vertexCount));
217 deviceContext->Unmap(m_vertexBuffer, 0);
226void text_class::RenderBuffers(ID3D11DeviceContext* deviceContext)
228 unsigned int stride, offset;
232 stride =
sizeof(VertexType);
236 deviceContext->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset);
239 deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);
242 deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
247XMFLOAT4 text_class::GetPixelColor()