|
|
@@ -121,8 +121,6 @@ bool TextureCube::BeginLoad(Deserializer& source)
|
|
|
if (GetPath(name).Empty())
|
|
|
name = texPath + name;
|
|
|
|
|
|
- CubeMapLayout layout =
|
|
|
- (CubeMapLayout)GetStringListIndex(imageElem.GetAttribute("layout").CString(), cubeMapLayoutNames, CML_HORIZONTAL);
|
|
|
SharedPtr<Image> image = cache->GetTempResource<Image>(name);
|
|
|
if (!image)
|
|
|
return false;
|
|
|
@@ -130,63 +128,76 @@ bool TextureCube::BeginLoad(Deserializer& source)
|
|
|
int faceWidth, faceHeight;
|
|
|
loadImages_.Resize(MAX_CUBEMAP_FACES);
|
|
|
|
|
|
- switch (layout)
|
|
|
+ if (image->IsCubemap())
|
|
|
{
|
|
|
- case CML_HORIZONTAL:
|
|
|
- faceWidth = image->GetWidth() / MAX_CUBEMAP_FACES;
|
|
|
- faceHeight = image->GetHeight();
|
|
|
- loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 0, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 2, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 3, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 4, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 5, 0, faceWidth, faceHeight);
|
|
|
- break;
|
|
|
-
|
|
|
- case CML_HORIZONTALNVIDIA:
|
|
|
- faceWidth = image->GetWidth() / MAX_CUBEMAP_FACES;
|
|
|
- faceHeight = image->GetHeight();
|
|
|
- for (unsigned i = 0; i < MAX_CUBEMAP_FACES; ++i)
|
|
|
- loadImages_[i] = GetTileImage(image, i, 0, faceWidth, faceHeight);
|
|
|
- break;
|
|
|
-
|
|
|
- case CML_HORIZONTALCROSS:
|
|
|
- faceWidth = image->GetWidth() / 4;
|
|
|
- faceHeight = image->GetHeight() / 3;
|
|
|
- loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 3, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 1, 2, faceWidth, faceHeight);
|
|
|
- break;
|
|
|
-
|
|
|
- case CML_VERTICALCROSS:
|
|
|
- faceWidth = image->GetWidth() / 3;
|
|
|
- faceHeight = image->GetHeight() / 4;
|
|
|
- loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 1, 2, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 1, 3, faceWidth, faceHeight);
|
|
|
- if (loadImages_[FACE_NEGATIVE_Z])
|
|
|
+ loadImages_[FACE_POSITIVE_X] = image;
|
|
|
+ loadImages_[FACE_NEGATIVE_X] = loadImages_[FACE_POSITIVE_X]->GetNextSibling();
|
|
|
+ loadImages_[FACE_POSITIVE_Y] = loadImages_[FACE_NEGATIVE_X]->GetNextSibling();
|
|
|
+ loadImages_[FACE_NEGATIVE_Y] = loadImages_[FACE_POSITIVE_Y]->GetNextSibling();
|
|
|
+ loadImages_[FACE_POSITIVE_Z] = loadImages_[FACE_NEGATIVE_Y]->GetNextSibling();
|
|
|
+ loadImages_[FACE_NEGATIVE_Z] = loadImages_[FACE_POSITIVE_Z]->GetNextSibling();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ CubeMapLayout layout = (CubeMapLayout)GetStringListIndex(imageElem.GetAttribute("layout").CString(), cubeMapLayoutNames, CML_HORIZONTAL);
|
|
|
+ switch (layout)
|
|
|
{
|
|
|
- loadImages_[FACE_NEGATIVE_Z]->FlipVertical();
|
|
|
- loadImages_[FACE_NEGATIVE_Z]->FlipHorizontal();
|
|
|
+ case CML_HORIZONTAL:
|
|
|
+ faceWidth = image->GetWidth() / MAX_CUBEMAP_FACES;
|
|
|
+ faceHeight = image->GetHeight();
|
|
|
+ loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 0, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 2, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 3, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 4, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 5, 0, faceWidth, faceHeight);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case CML_HORIZONTALNVIDIA:
|
|
|
+ faceWidth = image->GetWidth() / MAX_CUBEMAP_FACES;
|
|
|
+ faceHeight = image->GetHeight();
|
|
|
+ for (unsigned i = 0; i < MAX_CUBEMAP_FACES; ++i)
|
|
|
+ loadImages_[i] = GetTileImage(image, i, 0, faceWidth, faceHeight);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case CML_HORIZONTALCROSS:
|
|
|
+ faceWidth = image->GetWidth() / 4;
|
|
|
+ faceHeight = image->GetHeight() / 3;
|
|
|
+ loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 3, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 1, 2, faceWidth, faceHeight);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case CML_VERTICALCROSS:
|
|
|
+ faceWidth = image->GetWidth() / 3;
|
|
|
+ faceHeight = image->GetHeight() / 4;
|
|
|
+ loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 1, 2, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 1, 3, faceWidth, faceHeight);
|
|
|
+ if (loadImages_[FACE_NEGATIVE_Z])
|
|
|
+ {
|
|
|
+ loadImages_[FACE_NEGATIVE_Z]->FlipVertical();
|
|
|
+ loadImages_[FACE_NEGATIVE_Z]->FlipHorizontal();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case CML_BLENDER:
|
|
|
+ faceWidth = image->GetWidth() / 3;
|
|
|
+ faceHeight = image->GetHeight() / 2;
|
|
|
+ loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 0, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
+ loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
-
|
|
|
- case CML_BLENDER:
|
|
|
- faceWidth = image->GetWidth() / 3;
|
|
|
- faceHeight = image->GetHeight() / 2;
|
|
|
- loadImages_[FACE_NEGATIVE_X] = GetTileImage(image, 0, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Z] = GetTileImage(image, 1, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_X] = GetTileImage(image, 2, 0, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_NEGATIVE_Y] = GetTileImage(image, 0, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_Y] = GetTileImage(image, 1, 1, faceWidth, faceHeight);
|
|
|
- loadImages_[FACE_POSITIVE_Z] = GetTileImage(image, 2, 1, faceWidth, faceHeight);
|
|
|
- break;
|
|
|
}
|
|
|
}
|
|
|
// Face per image
|