fix cubemap uploading
There was a wrong assert in Texture::setImage() as well as a typo when calling setImage() itself in the sample code.
This commit is contained in:
committed by
Mathias Agopian
parent
9cc7fe97c5
commit
2d1d6ffb2c
@@ -1877,9 +1877,7 @@ void OpenGLDriver::setTextureData(GLTexture* t, uint32_t level,
|
||||
assert_invariant(width == height);
|
||||
const size_t faceSize = PixelBufferDescriptor::computeDataSize(
|
||||
p.format, p.type, p.stride ? p.stride : width, height, p.alignment);
|
||||
|
||||
assert_invariant(zoffset + depth <= 6);
|
||||
|
||||
UTILS_NOUNROLL
|
||||
for (size_t face = 0; face < depth; face++) {
|
||||
GLenum target = getCubemapTarget(zoffset + face);
|
||||
|
||||
@@ -245,11 +245,28 @@ void FTexture::setImage(FEngine& engine, size_t level,
|
||||
return;
|
||||
}
|
||||
|
||||
// effective level is just how we compute the index/depth based on whether we're an array or a 3D texture
|
||||
const uint8_t effectiveLevel = mTarget == SamplerType::SAMPLER_3D ? level : 0;
|
||||
if (!ASSERT_POSTCONDITION_NON_FATAL(zoffset + depth <= valueForLevel(effectiveLevel, mDepth),
|
||||
uint32_t textureDepthOrLayers;
|
||||
switch (mTarget) {
|
||||
case SamplerType::SAMPLER_EXTERNAL:
|
||||
// can't happen by construction, fallthrough...
|
||||
case SamplerType::SAMPLER_2D:
|
||||
assert_invariant(mDepth == 1);
|
||||
textureDepthOrLayers = mDepth;
|
||||
break;
|
||||
case SamplerType::SAMPLER_3D:
|
||||
textureDepthOrLayers = valueForLevel(level, mDepth);
|
||||
break;
|
||||
case SamplerType::SAMPLER_2D_ARRAY:
|
||||
textureDepthOrLayers = mDepth;
|
||||
break;
|
||||
case SamplerType::SAMPLER_CUBEMAP:
|
||||
textureDepthOrLayers = 6;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ASSERT_POSTCONDITION_NON_FATAL(zoffset + depth <= textureDepthOrLayers,
|
||||
"zoffset (%u) + depth (%u) > texture depth (%u) at level (%u)",
|
||||
unsigned(zoffset), unsigned(depth), unsigned(valueForLevel(effectiveLevel, mDepth)), unsigned(level))) {
|
||||
unsigned(zoffset), unsigned(depth), textureDepthOrLayers, unsigned(level))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ bool IBL::loadCubemapLevel(filament::Texture** texture, const utils::Path& path,
|
||||
uint32_t dim;
|
||||
Texture::PixelBufferDescriptor buffer;
|
||||
if (loadCubemapLevel(texture, &buffer, &dim, path, level, levelPrefix)) {
|
||||
(*texture)->setImage(mEngine, level, 0, 0, dim, dim, std::move(buffer));
|
||||
(*texture)->setImage(mEngine, level, 0, 0, 0, dim, dim, 6, std::move(buffer));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -78,7 +78,7 @@ Texture* createTexture(Engine* engine, const Ktx1Bundle& ktx, bool srgb,
|
||||
for (uint32_t level = 0; level < nmips; ++level) {
|
||||
ktx.getBlob({ level, 0, 0 }, &data, &size);
|
||||
const uint32_t dim = texture->getWidth(level);
|
||||
texture->setImage(*engine, level, 0, 0, dim, dim, {
|
||||
texture->setImage(*engine, level, 0, 0, 0, dim, dim, 6, {
|
||||
data, size * 6, cdatatype, size, cb, cbuser
|
||||
});
|
||||
}
|
||||
@@ -97,7 +97,7 @@ Texture* createTexture(Engine* engine, const Ktx1Bundle& ktx, bool srgb,
|
||||
for (uint32_t level = 0; level < nmips; ++level) {
|
||||
ktx.getBlob({ level, 0, 0 }, &data, &size);
|
||||
const uint32_t dim = texture->getWidth(level);
|
||||
texture->setImage(*engine, level, 0, 0, dim, dim, {
|
||||
texture->setImage(*engine, level, 0, 0, 0, dim, dim, 6, {
|
||||
data, size * 6, dataformat, datatype, cb, cbuser
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user