Fix custom materials
This commit is contained in:
parent
cea4d720be
commit
f6fd11d662
@ -27,6 +27,8 @@ namespace materials
|
|||||||
std::unordered_map<std::string, std::string> images;
|
std::unordered_map<std::string, std::string> images;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
char constant_table[0x20] = {};
|
||||||
|
|
||||||
utils::concurrency::container<material_data_t> material_data;
|
utils::concurrency::container<material_data_t> material_data;
|
||||||
|
|
||||||
game::GfxImage* setup_image(game::GfxImage* image, const utils::image& raw_image)
|
game::GfxImage* setup_image(game::GfxImage* image, const utils::image& raw_image)
|
||||||
@ -57,6 +59,7 @@ namespace materials
|
|||||||
std::memcpy(texture_table, white->textureTable, sizeof(game::MaterialTextureDef));
|
std::memcpy(texture_table, white->textureTable, sizeof(game::MaterialTextureDef));
|
||||||
std::memcpy(image, white->textureTable->u.image, sizeof(game::GfxImage));
|
std::memcpy(image, white->textureTable->u.image, sizeof(game::GfxImage));
|
||||||
|
|
||||||
|
material->constantTable = &constant_table;
|
||||||
material->name = utils::memory::get_allocator()->duplicate_string(name);
|
material->name = utils::memory::get_allocator()->duplicate_string(name);
|
||||||
image->name = material->name;
|
image->name = material->name;
|
||||||
|
|
||||||
@ -85,6 +88,7 @@ namespace materials
|
|||||||
&& !utils::io::read_file(utils::string::va("h1-mod/materials/%s.png", name.data()), &data)
|
&& !utils::io::read_file(utils::string::va("h1-mod/materials/%s.png", name.data()), &data)
|
||||||
&& !utils::io::read_file(utils::string::va("data/materials/%s.png", name.data()), &data))
|
&& !utils::io::read_file(utils::string::va("data/materials/%s.png", name.data()), &data))
|
||||||
{
|
{
|
||||||
|
data_.materials[name] = nullptr;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,24 +128,14 @@ namespace materials
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool db_material_streaming_fail_stub(game::Material* material)
|
int db_material_streaming_fail_stub(game::Material* material)
|
||||||
{
|
{
|
||||||
const auto found = material_data.access<bool>([material](material_data_t& data_)
|
if (material->constantTable == &constant_table)
|
||||||
{
|
{
|
||||||
if (data_.materials.find(material->name) != data_.materials.end())
|
return 0;
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (found)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return db_material_streaming_fail_hook.invoke<bool>(material);
|
return db_material_streaming_fail_hook.invoke<int>(material);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1175,7 +1175,12 @@ namespace game
|
|||||||
const char* name;
|
const char* name;
|
||||||
char __pad0[0x118];
|
char __pad0[0x118];
|
||||||
char textureCount;
|
char textureCount;
|
||||||
char __pad1[7];
|
char constantCount;
|
||||||
|
char stateBitsCount;
|
||||||
|
char stateFlags;
|
||||||
|
char cameraRegion;
|
||||||
|
char materialType;
|
||||||
|
char assetFlags;
|
||||||
MaterialTechniqueSet* techniqueSet;
|
MaterialTechniqueSet* techniqueSet;
|
||||||
MaterialTextureDef* textureTable;
|
MaterialTextureDef* textureTable;
|
||||||
void* constantTable;
|
void* constantTable;
|
||||||
|
Loading…
Reference in New Issue
Block a user