1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-15 06:52:34 +02:00

Fixed crash due to flag determination

This commit is contained in:
Daniel Evans 2013-07-01 20:02:01 +01:00
parent 754dede0ee
commit 6ff93c6687
3 changed files with 24 additions and 12 deletions

View File

@ -1,4 +1,4 @@
add_executable(datadump main.cpp ../framework/gtadata.cpp ../framework/LoaderIMG.cpp ../framework/LoaderIPL.cpp)
add_executable(datadump main.cpp ../framework/gtadata.cpp ../framework/LoaderIMG.cpp ../framework/LoaderIPL.cpp ../framework/LoaderCOL.cpp)
target_link_libraries( datadump sfml-graphics sfml-window sfml-system GL GLEW )

View File

@ -33,8 +33,8 @@ std::unique_ptr<Model> LoaderDFF::loadFromMemory(char *data)
if (item.header.versionid < 0x1003FFFF)
auto colors = readStructure<RW::BSGeometryColor>(data, dataI);
if (geometry.flags & RW::BSGeometry::VertexColors) {
if ((geometry.flags & RW::BSGeometry::VertexColors) == RW::BSGeometry::VertexColors) {
for (size_t v = 0; v < geometry.numverts; ++v) {
readStructure<RW::BSColor>(data, dataI);
}
@ -61,7 +61,7 @@ std::unique_ptr<Model> LoaderDFF::loadFromMemory(char *data)
}
/** NORMALS **/
if (geometry.flags & RW::BSGeometry::StoreNormals) {
if ((geometry.flags & RW::BSGeometry::StoreNormals) == RW::BSGeometry::StoreNormals) {
for (int n = 0; n < geometry.numverts; ++n) {
geometryStruct.normals.push_back(readStructure<RW::BSTVector3>(data, dataI));
}

View File

@ -118,18 +118,30 @@ void init(std::string gtapath)
auto &asset = imgLoader.getAssetInfoByIndex(i);
std::string filename = asset.name;
if(asset.size == 0)
{
std::cerr << "Asset: " << filename << " has no size" << std::endl;
continue;
}
auto filetype = filename.substr(filename.size() - 3);
std::transform(filetype.begin(), filetype.end(), filetype.begin(), ::tolower);
if (filetype == "dff") {
std::string modelname = filename.substr(0, filename.size() - 4);
char *file = imgLoader.loadToMemory(filename);
models[modelname] = std::move(dffLoader.loadFromMemory(file));
if(file)
{
models[modelname] = std::move(dffLoader.loadFromMemory(file));
delete[] file;
}
} else if (filetype == "txd") {
char *file = imgLoader.loadToMemory(filename);
textureLoader.loadFromMemory(file);
if(file)
{
textureLoader.loadFromMemory(file);
delete[] file;
}
}
}
}
@ -151,7 +163,7 @@ void init(std::string gtapath)
exit(1);
}
textureLoader.loadFromFile("MISC.TXD");
//textureLoader.loadFromFile("MISC.TXD");
selectedModel = models["Jetty"].get();
}
@ -195,10 +207,10 @@ void render()
}
glm::mat4 matrixModel;
glm::quat rot{obj.rotX, obj.rotY, obj.rotZ, obj.rotW};
matrixModel = glm::translate(matrixModel, glm::vec3(obj.posX, obj.posY, obj.posZ));
matrixModel = glm::rotate(matrixModel, glm::angle(rot), glm::axis(rot));
glm::quat rot{obj.rotW, obj.rotX, obj.rotY, obj.rotZ};
matrixModel = glm::translate(matrixModel, glm::vec3(obj.posX, obj.posY, obj.posZ)); //glm::rotate(matrixModel, rot);//glm::angle(rot), glm::axis(rot));
matrixModel = glm::scale(matrixModel, glm::vec3(obj.scaleX, obj.scaleY, obj.scaleZ));
matrixModel = matrixModel * glm::mat4_cast(rot);
glUniformMatrix4fv(uniModel, 1, GL_FALSE, glm::value_ptr(matrixModel));
glBindBuffer(GL_ARRAY_BUFFER, model->geometries[g].VBO);