love.graphics.newVolumeImage can now automatically convert a 1xN or Nx1 sheet of square images into layers.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2017-02-26 20:18:06 -04:00
parent a3454aa205
commit b44e6b2156
3 changed files with 45 additions and 6 deletions
+20 -5
View File
@@ -583,13 +583,19 @@ int w_newCubeImage(lua_State *L)
if (!lua_istable(L, 1))
{
auto imagedata = getImageData(L, 1, false, &settings.pixeldensity);
auto data = getImageData(L, 1, true, &settings.pixeldensity);
std::vector<StrongRef<love::image::ImageData>> faces;
luax_catchexcept(L, [&](){ faces = imagemodule->newCubeFaces(imagedata.first); });
for (int i = 0; i < (int) faces.size(); i++)
slices.set(i, 0, faces[i]);
if (data.first.get())
{
luax_catchexcept(L, [&](){ faces = imagemodule->newCubeFaces(data.first); });
for (int i = 0; i < (int) faces.size(); i++)
slices.set(i, 0, faces[i]);
}
else
slices.add(data.second, 0, 0, true, true);
}
else
{
@@ -724,6 +730,8 @@ int w_newVolumeImage(lua_State *L)
{
luax_checkgraphicscreated(L);
auto imagemodule = Module::getInstance<love::image::Image>(Module::M_IMAGE);
Image::Slices slices(TEXTURE_VOLUME);
Image::Settings settings;
@@ -772,8 +780,15 @@ int w_newVolumeImage(lua_State *L)
else
{
auto data = getImageData(L, 1, true, &settings.pixeldensity);
if (data.first.get())
slices.set(0, 0, data.first);
{
std::vector<StrongRef<love::image::ImageData>> layers;
luax_catchexcept(L, [&](){ layers = imagemodule->newVolumeLayers(data.first); });
for (int i = 0; i < (int) layers.size(); i++)
slices.set(i, 0, layers[i]);
}
else
slices.add(data.second, 0, 0, true, true);
}