[IGfxImage] Fix image loading
This commit is contained in:
parent
33a8baa9b5
commit
ceebe4dfd0
@ -45,27 +45,31 @@ namespace Assets
|
|||||||
image->cardMemory.platform[0] = reader.read<int>();
|
image->cardMemory.platform[0] = reader.read<int>();
|
||||||
image->cardMemory.platform[1] = image->cardMemory.platform[0];
|
image->cardMemory.platform[1] = image->cardMemory.platform[0];
|
||||||
|
|
||||||
image->texture.loadDef = reinterpret_cast<Game::GfxImageLoadDef*>(reader.readArray<char>(image->cardMemory.platform[0] + 16));
|
Game::GfxImageLoadDefIW3* loadDef = reinterpret_cast<Game::GfxImageLoadDefIW3*>(reader.readArray<char>(image->cardMemory.platform[0] + 16));
|
||||||
|
image->texture.loadDef = reinterpret_cast<Game::GfxImageLoadDef*>(builder->getAllocator()->allocateArray<char>(image->cardMemory.platform[0] + 16));
|
||||||
|
|
||||||
// TODO: Fix that, this is clearly wrong
|
image->texture.loadDef->levelCount = loadDef->levelCount;
|
||||||
auto dimensions = reinterpret_cast<unsigned short*>(&image->texture.loadDef->pad[2]);
|
image->texture.loadDef->flags = loadDef->flags;
|
||||||
image->height = dimensions[0];
|
image->texture.loadDef->format = loadDef->format;
|
||||||
image->width = dimensions[1];
|
image->texture.loadDef->resourceSize = loadDef->resourceSize;
|
||||||
image->depth = dimensions[2];
|
|
||||||
|
|
||||||
image->delayLoadPixels = true;
|
|
||||||
image->texture.loadDef->flags = 0;
|
|
||||||
|
|
||||||
if (image->texture.loadDef->resourceSize != image->cardMemory.platform[0])
|
if (image->texture.loadDef->resourceSize != image->cardMemory.platform[0])
|
||||||
{
|
{
|
||||||
Components::Logger::Error("Resource size doesn't match the data length (%s)!\n", name.data());
|
Components::Logger::Error("Resource size doesn't match the data length (%s)!\n", name.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::memcpy(image->texture.loadDef->data, loadDef->data, image->texture.loadDef->resourceSize);
|
||||||
|
|
||||||
|
image->height = loadDef->dimensions[0];
|
||||||
|
image->width = loadDef->dimensions[1];
|
||||||
|
image->depth = loadDef->dimensions[2];
|
||||||
|
|
||||||
|
image->delayLoadPixels = true;
|
||||||
|
//image->texture.loadDef->flags = 0;
|
||||||
|
|
||||||
if (Utils::String::StartsWith(name, "*lightmap"))
|
if (Utils::String::StartsWith(name, "*lightmap"))
|
||||||
{
|
{
|
||||||
dimensions[0] = 0;
|
image->texture.loadDef->flags = 2;
|
||||||
dimensions[1] = 2;
|
|
||||||
dimensions[2] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header->image = image;
|
header->image = image;
|
||||||
|
@ -595,6 +595,16 @@ namespace Game
|
|||||||
MaterialTechnique *techniques[48];
|
MaterialTechnique *techniques[48];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GfxImageLoadDefIW3
|
||||||
|
{
|
||||||
|
char levelCount;
|
||||||
|
char flags;
|
||||||
|
__int16 dimensions[3];
|
||||||
|
int format;
|
||||||
|
int resourceSize;
|
||||||
|
char data[1];
|
||||||
|
};
|
||||||
|
|
||||||
struct __declspec(align(4)) GfxImageLoadDef
|
struct __declspec(align(4)) GfxImageLoadDef
|
||||||
{
|
{
|
||||||
char levelCount;
|
char levelCount;
|
||||||
|
Loading…
Reference in New Issue
Block a user