Implemented mipmap generation for 3D textures.

TRAC #22926 Signed-off-by: Jamie Madill Signed-off-by: Nicolas Capens Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2283 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 7b61d5ce
...@@ -1665,7 +1665,32 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL ...@@ -1665,7 +1665,32 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
void Texture3D::generateMipmaps() void Texture3D::generateMipmaps()
{ {
UNIMPLEMENTED(); // Purge array levels 1 through q and reset them to represent the generated mipmap levels.
unsigned int q = log2(std::max(mImageArray[0]->getWidth(), mImageArray[0]->getHeight()));
for (unsigned int i = 1; i <= q; i++)
{
redefineImage(i, mImageArray[0]->getInternalFormat(),
std::max(mImageArray[0]->getWidth() >> i, 1),
std::max(mImageArray[0]->getHeight() >> i, 1),
std::max(mImageArray[0]->getDepth() >> i, 1));
}
if (mTexStorage && mTexStorage->isRenderTarget())
{
for (unsigned int i = 1; i <= q; i++)
{
mTexStorage->generateMipmap(i);
mImageArray[i]->markClean();
}
}
else
{
for (unsigned int i = 1; i <= q; i++)
{
mRenderer->generateMipmap(mImageArray[i], mImageArray[i - 1]);
}
}
} }
void Texture3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) void Texture3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
......
...@@ -940,7 +940,10 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) ...@@ -940,7 +940,10 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
void TextureStorage11_3D::generateMipmap(int level) void TextureStorage11_3D::generateMipmap(int level)
{ {
UNIMPLEMENTED(); RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(level - 1));
RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(level));
generateMipmapLayer(source, dest);
} }
TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
......
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