1
0
mirror of https://github.com/borgesdan/xn65 synced 2024-12-29 21:54:47 +01:00
xn65/framework/platform/indexbuffer-dx.cpp
2024-04-12 15:21:00 -03:00

47 lines
1.0 KiB
C++

#include "indexbuffer-dx.hpp"
#include "device-dx.hpp"
namespace xna {
bool IndexBuffer::Initialize(GraphicsDevice& device, xna_error_ptr_arg)
{
if (!device._device) {
xna_error_apply(err, XnaErrorCode::ARGUMENT_IS_NULL);
return false;
}
if (_buffer) {
_buffer->Release();
_buffer = nullptr;
}
//TODO: refatorar isso aqui
int IndicesPerSprite = 4;
int MaxBatchSize = 4096;
int VerticesPerSprite = 4;
std::vector<short> indices;
indices.reserve(MaxBatchSize * IndicesPerSprite);
for (short i = 0; i < (MaxBatchSize * VerticesPerSprite); i += VerticesPerSprite)
{
indices.push_back(i);
indices.push_back(i + 1);
indices.push_back(i + 2);
indices.push_back(i + 1);
indices.push_back(i + 3);
indices.push_back(i + 2);
}
_subResource.pSysMem = &indices.front();
const auto hr = device._device->CreateBuffer(&_description, &_subResource, &_buffer);
if (FAILED(hr)) {
xna_error_apply(err, XnaErrorCode::FAILED_OPERATION);
return false;
}
return true;
}
}