1#include "bitmap_class.h"
3bitmap_class::bitmap_class()
16bitmap_class::~bitmap_class()
21bool bitmap_class::initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
int screenWidth,
int screenHeight,
char* textureFilename,
int renderX,
int renderY)
23 Logger::Get().
Log(
"Initializing bitmap class", __FILE__, __LINE__, Logger::LogLevel::Initialize);
28 screen_width_ = screenWidth;
29 screen_height_ = screenHeight;
36 result = initialize_buffers(device);
39 Logger::Get().
Log(
"Failed to initialize buffers", __FILE__, __LINE__, Logger::LogLevel::Error);
44 result = load_texture(device, deviceContext, textureFilename);
47 Logger::Get().
Log(
"Failed to load texture", __FILE__, __LINE__, Logger::LogLevel::Error);
51 Logger::Get().
Log(
"Bitmap class initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
56void bitmap_class::shutdown()
67bool bitmap_class::render(ID3D11DeviceContext* deviceContext)
73 result = update_buffers(deviceContext);
76 Logger::Get().
Log(
"Failed to update buffers", __FILE__, __LINE__, Logger::LogLevel::Error);
81 render_buffers(deviceContext);
86int bitmap_class::get_index_count()
91ID3D11ShaderResourceView* bitmap_class::get_texture()
93 return texture_->GetTexture();
96bool bitmap_class::initialize_buffers(ID3D11Device* device)
98 Logger::Get().
Log(
"Initializing buffers", __FILE__, __LINE__, Logger::LogLevel::Initialize);
100 vertex_type* vertices;
101 unsigned long* indices;
102 D3D11_BUFFER_DESC vertexBufferDesc, indexBufferDesc;
103 D3D11_SUBRESOURCE_DATA vertexData, indexData;
115 index_count_ = vertex_count_;
118 vertices =
new vertex_type[vertex_count_];
121 indices =
new unsigned long[index_count_];
124 memset(vertices, 0, (
sizeof(vertex_type) * vertex_count_));
127 for (i = 0; i < index_count_; i++)
133 vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
134 vertexBufferDesc.ByteWidth =
sizeof(vertex_type) * vertex_count_;
135 vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
136 vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
137 vertexBufferDesc.MiscFlags = 0;
138 vertexBufferDesc.StructureByteStride = 0;
141 vertexData.pSysMem = vertices;
142 vertexData.SysMemPitch = 0;
143 vertexData.SysMemSlicePitch = 0;
146 result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &vertex_buffer_);
149 Logger::Get().
Log(
"Failed to create vertex buffer", __FILE__, __LINE__, Logger::LogLevel::Error);
154 indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
155 indexBufferDesc.ByteWidth =
sizeof(
unsigned long) * index_count_;
156 indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
157 indexBufferDesc.CPUAccessFlags = 0;
158 indexBufferDesc.MiscFlags = 0;
159 indexBufferDesc.StructureByteStride = 0;
162 indexData.pSysMem = indices;
163 indexData.SysMemPitch = 0;
164 indexData.SysMemSlicePitch = 0;
167 result = device->CreateBuffer(&indexBufferDesc, &indexData, &index_buffer_);
170 Logger::Get().
Log(
"Failed to create index buffer", __FILE__, __LINE__, Logger::LogLevel::Error);
181 Logger::Get().
Log(
"Buffers initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
186void bitmap_class::shutdown_buffers()
188 Logger::Get().
Log(
"Shutting down buffers", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
193 Logger::Get().
Log(
"Releasing index buffer", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
194 index_buffer_->Release();
196 Logger::Get().
Log(
"Index buffer released", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
202 Logger::Get().
Log(
"Releasing vertex buffer", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
203 vertex_buffer_->Release();
205 Logger::Get().
Log(
"Vertex buffer released", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
208 Logger::Get().
Log(
"Buffers shut down", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
213bool bitmap_class::update_buffers(ID3D11DeviceContext* deviceContent)
215 float left, right, top, bottom;
216 vertex_type* vertices;
217 D3D11_MAPPED_SUBRESOURCE mappedResource;
218 vertex_type* dataPtr;
222 if ((prev_pos_x_ == render_x_) && (prev_pos_y_ == render_y_))
228 prev_pos_x_ = render_x_;
229 prev_pos_y_ = render_y_;
232 vertices =
new vertex_type[vertex_count_];
235 left = (float)((screen_width_ / 2) * -1) + (float)render_x_;
238 right = left + (float)bitmap_width_;
241 top = (float)(screen_height_ / 2) - (float)render_y_;
244 bottom = top - (float)bitmap_height_;
248 vertices[0].position = XMFLOAT3(left, top, 0.0f);
249 vertices[0].texture = XMFLOAT2(0.0f, 0.0f);
251 vertices[1].position = XMFLOAT3(right, bottom, 0.0f);
252 vertices[1].texture = XMFLOAT2(1.0f, 1.0f);
254 vertices[2].position = XMFLOAT3(left, bottom, 0.0f);
255 vertices[2].texture = XMFLOAT2(0.0f, 1.0f);
258 vertices[3].position = XMFLOAT3(left, top, 0.0f);
259 vertices[3].texture = XMFLOAT2(0.0f, 0.0f);
261 vertices[4].position = XMFLOAT3(right, top, 0.0f);
262 vertices[4].texture = XMFLOAT2(1.0f, 0.0f);
264 vertices[5].position = XMFLOAT3(right, bottom, 0.0f);
265 vertices[5].texture = XMFLOAT2(1.0f, 1.0f);
268 result = deviceContent->Map(vertex_buffer_, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
271 Logger::Get().
Log(
"Failed to map vertex buffer", __FILE__, __LINE__, Logger::LogLevel::Error);
276 dataPtr = (vertex_type*)mappedResource.pData;
279 memcpy(dataPtr, (
void*)vertices, (
sizeof(vertex_type) * vertex_count_));
282 deviceContent->Unmap(vertex_buffer_, 0);
294void bitmap_class::render_buffers(ID3D11DeviceContext* deviceContext)
301 stride =
sizeof(vertex_type);
305 deviceContext->IASetVertexBuffers(0, 1, &vertex_buffer_, &stride, &offset);
308 deviceContext->IASetIndexBuffer(index_buffer_, DXGI_FORMAT_R32_UINT, 0);
311 deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
316bool bitmap_class::load_texture(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
char* filename)
324 result = texture_->Initialize(device, deviceContext, filename);
327 Logger::Get().
Log(
"Failed to initialize texture object", __FILE__, __LINE__, Logger::LogLevel::Error);
332 bitmap_width_ = texture_->GetWidth();
333 bitmap_height_ = texture_->GetHeight();
338void bitmap_class::release_texture()
340 Logger::Get().
Log(
"Releasing texture", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
344 Logger::Get().
Log(
"Releasing texture object", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
345 texture_->Shutdown();
348 Logger::Get().
Log(
"Texture object released", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
351 Logger::Get().
Log(
"Texture released", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
356void bitmap_class::set_render_location(
int x,
int y)
void Log(const std::string &message, const std::string &fileName, int lineNumber, LogLevel level=LogLevel::Info)