Merge branch 'master' into cmake_fix_native_path

pull/3034/head
Kim Kulling 2020-03-10 22:16:38 +01:00 committed by GitHub
commit 0a5419828a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 20 deletions

View File

@ -20,8 +20,8 @@ struct VERTEX {
}; };
struct Texture { struct Texture {
string type; std::string type;
string path; std::string path;
ID3D11ShaderResourceView *texture; ID3D11ShaderResourceView *texture;
void Release() { void Release() {
@ -36,7 +36,7 @@ public:
std::vector<Texture> textures; std::vector<Texture> textures;
ID3D11Device *dev; ID3D11Device *dev;
Mesh(ID3D11Device *dev, const vector<VERTEX>& vertices, const vector<UINT>& indices, const vector<Texture>& textures) : Mesh(ID3D11Device *dev, const std::vector<VERTEX>& vertices, const std::vector<UINT>& indices, const std::vector<Texture>& textures) :
vertices(vertices), vertices(vertices),
indices(indices), indices(indices),
textures(textures), textures(textures),

View File

@ -42,13 +42,13 @@ void ModelLoader::Draw(ID3D11DeviceContext * devcon) {
} }
} }
string textype; std::string textype;
Mesh ModelLoader::processMesh(aiMesh * mesh, const aiScene * scene) { Mesh ModelLoader::processMesh(aiMesh * mesh, const aiScene * scene) {
// Data to fill // Data to fill
vector<VERTEX> vertices; std::vector<VERTEX> vertices;
vector<UINT> indices; std::vector<UINT> indices;
vector<Texture> textures; std::vector<Texture> textures;
if (mesh->mMaterialIndex >= 0) { if (mesh->mMaterialIndex >= 0) {
aiMaterial* mat = scene->mMaterials[mesh->mMaterialIndex]; aiMaterial* mat = scene->mMaterials[mesh->mMaterialIndex];
@ -84,15 +84,15 @@ Mesh ModelLoader::processMesh(aiMesh * mesh, const aiScene * scene) {
if (mesh->mMaterialIndex >= 0) { if (mesh->mMaterialIndex >= 0) {
aiMaterial* material = scene->mMaterials[mesh->mMaterialIndex]; aiMaterial* material = scene->mMaterials[mesh->mMaterialIndex];
vector<Texture> diffuseMaps = this->loadMaterialTextures(material, aiTextureType_DIFFUSE, "texture_diffuse", scene); std::vector<Texture> diffuseMaps = this->loadMaterialTextures(material, aiTextureType_DIFFUSE, "texture_diffuse", scene);
textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end()); textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end());
} }
return Mesh(dev, vertices, indices, textures); return Mesh(dev, vertices, indices, textures);
} }
vector<Texture> ModelLoader::loadMaterialTextures(aiMaterial * mat, aiTextureType type, string typeName, const aiScene * scene) { std::vector<Texture> ModelLoader::loadMaterialTextures(aiMaterial * mat, aiTextureType type, std::string typeName, const aiScene * scene) {
vector<Texture> textures; std::vector<Texture> textures;
for (UINT i = 0; i < mat->GetTextureCount(type); i++) { for (UINT i = 0; i < mat->GetTextureCount(type); i++) {
aiString str; aiString str;
mat->GetTexture(type, i, &str); mat->GetTexture(type, i, &str);
@ -112,9 +112,9 @@ vector<Texture> ModelLoader::loadMaterialTextures(aiMaterial * mat, aiTextureTyp
int textureindex = getTextureIndex(&str); int textureindex = getTextureIndex(&str);
texture.texture = getTextureFromModel(scene, textureindex); texture.texture = getTextureFromModel(scene, textureindex);
} else { } else {
string filename = string(str.C_Str()); std::string filename = std::string(str.C_Str());
filename = directory + '/' + filename; filename = directory + '/' + filename;
wstring filenamews = wstring(filename.begin(), filename.end()); std::wstring filenamews = std::wstring(filename.begin(), filename.end());
hr = CreateWICTextureFromFile(dev, devcon, filenamews.c_str(), nullptr, &texture.texture); hr = CreateWICTextureFromFile(dev, devcon, filenamews.c_str(), nullptr, &texture.texture);
if (FAILED(hr)) if (FAILED(hr))
MessageBox(hwnd, "Texture couldn't be loaded", "Error!", MB_ICONERROR | MB_OK); MessageBox(hwnd, "Texture couldn't be loaded", "Error!", MB_ICONERROR | MB_OK);
@ -148,10 +148,10 @@ void ModelLoader::processNode(aiNode * node, const aiScene * scene) {
} }
} }
string ModelLoader::determineTextureType(const aiScene * scene, aiMaterial * mat) { std::string ModelLoader::determineTextureType(const aiScene * scene, aiMaterial * mat) {
aiString textypeStr; aiString textypeStr;
mat->GetTexture(aiTextureType_DIFFUSE, 0, &textypeStr); mat->GetTexture(aiTextureType_DIFFUSE, 0, &textypeStr);
string textypeteststr = textypeStr.C_Str(); std::string textypeteststr = textypeStr.C_Str();
if (textypeteststr == "*0" || textypeteststr == "*1" || textypeteststr == "*2" || textypeteststr == "*3" || textypeteststr == "*4" || textypeteststr == "*5") { if (textypeteststr == "*0" || textypeteststr == "*1" || textypeteststr == "*2" || textypeteststr == "*3" || textypeteststr == "*4" || textypeteststr == "*5") {
if (scene->mTextures[0]->mHeight == 0) { if (scene->mTextures[0]->mHeight == 0) {
return "embedded compressed texture"; return "embedded compressed texture";
@ -159,7 +159,7 @@ string ModelLoader::determineTextureType(const aiScene * scene, aiMaterial * mat
return "embedded non-compressed texture"; return "embedded non-compressed texture";
} }
} }
if (textypeteststr.find('.') != string::npos) { if (textypeteststr.find('.') != std::string::npos) {
return "textures are on disk"; return "textures are on disk";
} }
@ -167,7 +167,7 @@ string ModelLoader::determineTextureType(const aiScene * scene, aiMaterial * mat
} }
int ModelLoader::getTextureIndex(aiString * str) { int ModelLoader::getTextureIndex(aiString * str) {
string tistr; std::string tistr;
tistr = str->C_Str(); tistr = str->C_Str();
tistr = tistr.substr(1); tistr = tistr.substr(1);
return stoi(tistr); return stoi(tistr);

View File

@ -28,14 +28,14 @@ private:
ID3D11Device *dev; ID3D11Device *dev;
ID3D11DeviceContext *devcon; ID3D11DeviceContext *devcon;
std::vector<Mesh> meshes; std::vector<Mesh> meshes;
string directory; std::string directory;
vector<Texture> textures_loaded; std::vector<Texture> textures_loaded;
HWND hwnd; HWND hwnd;
void processNode(aiNode* node, const aiScene* scene); void processNode(aiNode* node, const aiScene* scene);
Mesh processMesh(aiMesh* mesh, const aiScene* scene); Mesh processMesh(aiMesh* mesh, const aiScene* scene);
vector<Texture> loadMaterialTextures(aiMaterial* mat, aiTextureType type, string typeName, const aiScene* scene); std::vector<Texture> loadMaterialTextures(aiMaterial* mat, aiTextureType type, std::string typeName, const aiScene* scene);
string determineTextureType(const aiScene* scene, aiMaterial* mat); std::string determineTextureType(const aiScene* scene, aiMaterial* mat);
int getTextureIndex(aiString* str); int getTextureIndex(aiString* str);
ID3D11ShaderResourceView* getTextureFromModel(const aiScene* scene, int textureindex); ID3D11ShaderResourceView* getTextureFromModel(const aiScene* scene, int textureindex);
}; };