Commit 42c98f6b by Geoff Lang

Handle compressed texture formats in the emulated TextureStorage for TextureGL.

BUG=angleproject:884 Change-Id: Id54d9ff2845af52807161e0b589d8b76cfba412d Reviewed-on: https://chromium-review.googlesource.com/272424Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 8509d86e
...@@ -267,15 +267,33 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor ...@@ -267,15 +267,33 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
if (mTextureType == GL_TEXTURE_2D) if (mTextureType == GL_TEXTURE_2D)
{ {
mFunctions->texImage2D(target, level, internalFormat, levelSize.width, levelSize.height, if (internalFormatInfo.compressed)
0, internalFormatInfo.format, internalFormatInfo.type, nullptr); {
size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height);
mFunctions->compressedTexImage2D(target, level, internalFormat, levelSize.width, levelSize.height,
0, dataSize, nullptr);
}
else
{
mFunctions->texImage2D(target, level, internalFormat, levelSize.width, levelSize.height,
0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
}
} }
else if (mTextureType == GL_TEXTURE_CUBE_MAP) else if (mTextureType == GL_TEXTURE_CUBE_MAP)
{ {
for (GLenum face = gl::FirstCubeMapTextureTarget; face <= gl::LastCubeMapTextureTarget; face++) for (GLenum face = gl::FirstCubeMapTextureTarget; face <= gl::LastCubeMapTextureTarget; face++)
{ {
mFunctions->texImage2D(face, level, internalFormat, levelSize.width, levelSize.height, if (internalFormatInfo.compressed)
0, internalFormatInfo.format, internalFormatInfo.type, nullptr); {
size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height);
mFunctions->compressedTexImage2D(face, level, internalFormat, levelSize.width, levelSize.height,
0, dataSize, nullptr);
}
else
{
mFunctions->texImage2D(face, level, internalFormat, levelSize.width, levelSize.height,
0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
}
} }
} }
else else
...@@ -307,8 +325,17 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor ...@@ -307,8 +325,17 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
std::max(size.height >> i, 1), std::max(size.height >> i, 1),
mTextureType == GL_TEXTURE_3D ? std::max(size.depth >> i, 1) : size.depth); mTextureType == GL_TEXTURE_3D ? std::max(size.depth >> i, 1) : size.depth);
mFunctions->texImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth, if (internalFormatInfo.compressed)
0, internalFormatInfo.format, internalFormatInfo.type, nullptr); {
size_t dataSize = internalFormatInfo.computeBlockSize(GL_UNSIGNED_BYTE, levelSize.width, levelSize.height) * levelSize.depth;
mFunctions->compressedTexImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth,
0, dataSize, nullptr);
}
else
{
mFunctions->texImage3D(target, i, internalFormat, levelSize.width, levelSize.height, levelSize.depth,
0, internalFormatInfo.format, internalFormatInfo.type, nullptr);
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment