diff --git a/rwengine/include/render/Model.hpp b/rwengine/include/render/Model.hpp index 96598542..d0b19b98 100644 --- a/rwengine/include/render/Model.hpp +++ b/rwengine/include/render/Model.hpp @@ -93,10 +93,10 @@ public: float ambientIntensity; }; - struct SubGeometry { + struct SubGeometry { GLuint start = 0; - size_t material; - uint32_t* indices; + size_t material; + std::vector indices; size_t numIndices; }; diff --git a/rwengine/src/engine/GameData.cpp b/rwengine/src/engine/GameData.cpp index 8f92f635..2d0bed86 100644 --- a/rwengine/src/engine/GameData.cpp +++ b/rwengine/src/engine/GameData.cpp @@ -699,8 +699,8 @@ FileHandle GameData::openFile2(const std::string &name) auto i = _knownFiles.find(name); if(i != _knownFiles.end()) { - char* data; - size_t length; + char* data = nullptr; + size_t length = 0; if(i->second.archived) { diff --git a/rwengine/src/loaders/LoaderDFF.cpp b/rwengine/src/loaders/LoaderDFF.cpp index 355068c6..80ec7d8d 100644 --- a/rwengine/src/loaders/LoaderDFF.cpp +++ b/rwengine/src/loaders/LoaderDFF.cpp @@ -243,7 +243,7 @@ void LoaderDFF::readGeometry(Model *model, const RWBStream &stream) glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, sg.start * sizeof(uint32_t), sizeof(uint32_t) * sg.numIndices, - sg.indices); + sg.indices.data()); } } @@ -384,12 +384,10 @@ void LoaderDFF::readBinMeshPLG(Model *model, const RWBStream &stream) sg.start = start; start += sg.numIndices; - sg.indices = new std::uint32_t[sg.numIndices]; + sg.indices.resize(sg.numIndices); + std::memcpy(sg.indices.data(), data, sizeof(std::uint32_t) * sg.numIndices); + data += sizeof(std::uint32_t) * sg.numIndices; - for(size_t i = 0; i < sg.numIndices; ++i) { - sg.indices[i] = *(std::uint32_t*)data; - data += sizeof(std::uint32_t); - } model->geometries.back()->subgeom.push_back(sg); } } diff --git a/rwengine/src/render/Model.cpp b/rwengine/src/render/Model.cpp index ef235591..7a3d38fe 100644 --- a/rwengine/src/render/Model.cpp +++ b/rwengine/src/render/Model.cpp @@ -13,11 +13,7 @@ Model::Geometry::Geometry() Model::Geometry::~Geometry() { - for(auto& sg : subgeom) { - if( sg.indices ) { - delete[] sg.indices; - } - } + } ModelFrame::ModelFrame(ModelFrame* parent, glm::mat3 dR, glm::vec3 dT)