Turned Image into a class to improve encapsulation.
TRAC #18714
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@826 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 0aeac59..8d63a9e 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -30,18 +30,83 @@
unsigned int Texture::mCurrentSerial = 1;
Image::Image()
- : width(0), height(0), dirty(false), surface(NULL), format(GL_NONE), type(GL_UNSIGNED_BYTE)
+ : mWidth(0), mHeight(0), mDirty(false), mSurface(NULL), mFormat(GL_NONE), mType(GL_UNSIGNED_BYTE)
{
}
Image::~Image()
{
- if (surface)
+ if (mSurface)
{
- surface->Release();
+ mSurface->Release();
}
}
+void Image::redefine(GLenum format, GLsizei width, GLsizei height, GLenum type)
+{
+ mWidth = width;
+ mHeight = height;
+ mFormat = format;
+ mType = type;
+
+ if (mSurface)
+ {
+ mSurface->Release();
+ mSurface = NULL;
+ mDirty = true;
+ }
+
+ createSurface();
+}
+
+void Image::createSurface()
+{
+ if(mSurface)
+ {
+ return;
+ }
+
+ IDirect3DTexture9 *newTexture = NULL;
+ IDirect3DSurface9 *newSurface = NULL;
+
+ if (mWidth != 0 && mHeight != 0)
+ {
+ int levelToFetch = 0;
+ GLsizei requestWidth = mWidth;
+ GLsizei requestHeight = mHeight;
+ if (IsCompressed(mFormat) && (mWidth % 4 != 0 || mHeight % 4 != 0))
+ {
+ bool isMult4 = false;
+ int upsampleCount = 0;
+ while (!isMult4)
+ {
+ requestWidth <<= 1;
+ requestHeight <<= 1;
+ upsampleCount++;
+ if (requestWidth % 4 == 0 && requestHeight % 4 == 0)
+ {
+ isMult4 = true;
+ }
+ }
+ levelToFetch = upsampleCount;
+ }
+
+ HRESULT result = getDevice()->CreateTexture(requestWidth, requestHeight, levelToFetch + 1, NULL, getD3DFormat(),
+ D3DPOOL_SYSTEMMEM, &newTexture, NULL);
+
+ if (FAILED(result))
+ {
+ ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
+ return error(GL_OUT_OF_MEMORY);
+ }
+
+ newTexture->GetSurfaceLevel(levelToFetch, &newSurface);
+ newTexture->Release();
+ }
+
+ mSurface = newSurface;
+}
+
bool Image::isRenderable() const
{
switch(getD3DFormat())
@@ -66,38 +131,38 @@
D3DFORMAT Image::getD3DFormat() const
{
- if (format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||
- format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)
+ if (mFormat == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||
+ mFormat == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)
{
return D3DFMT_DXT1;
}
- else if (format == GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE)
+ else if (mFormat == GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE)
{
return D3DFMT_DXT3;
}
- else if (format == GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE)
+ else if (mFormat == GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE)
{
return D3DFMT_DXT5;
}
- else if (type == GL_FLOAT)
+ else if (mType == GL_FLOAT)
{
return D3DFMT_A32B32G32R32F;
}
- else if (type == GL_HALF_FLOAT_OES)
+ else if (mType == GL_HALF_FLOAT_OES)
{
return D3DFMT_A16B16G16R16F;
}
- else if (type == GL_UNSIGNED_BYTE)
+ else if (mType == GL_UNSIGNED_BYTE)
{
- if (format == GL_LUMINANCE && getContext()->supportsLuminanceTextures())
+ if (mFormat == GL_LUMINANCE && getContext()->supportsLuminanceTextures())
{
return D3DFMT_L8;
}
- else if (format == GL_LUMINANCE_ALPHA && getContext()->supportsLuminanceAlphaTextures())
+ else if (mFormat == GL_LUMINANCE_ALPHA && getContext()->supportsLuminanceAlphaTextures())
{
return D3DFMT_A8L8;
}
- else if (format == GL_RGB)
+ else if (mFormat == GL_RGB)
{
return D3DFMT_X8R8G8B8;
}
@@ -1050,75 +1115,27 @@
}
}
-void Image::createSurface()
-{
- if(surface)
- {
- return;
- }
-
- IDirect3DTexture9 *newTexture = NULL;
- IDirect3DSurface9 *newSurface = NULL;
-
- if (width != 0 && height != 0)
- {
- int levelToFetch = 0;
- GLsizei requestWidth = width;
- GLsizei requestHeight = height;
- if (IsCompressed(format) && (width % 4 != 0 || height % 4 != 0))
- {
- bool isMult4 = false;
- int upsampleCount = 0;
- while (!isMult4)
- {
- requestWidth <<= 1;
- requestHeight <<= 1;
- upsampleCount++;
- if (requestWidth % 4 == 0 && requestHeight % 4 == 0)
- {
- isMult4 = true;
- }
- }
- levelToFetch = upsampleCount;
- }
-
- HRESULT result = getDevice()->CreateTexture(requestWidth, requestHeight, levelToFetch + 1, NULL, getD3DFormat(),
- D3DPOOL_SYSTEMMEM, &newTexture, NULL);
-
- if (FAILED(result))
- {
- ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
- return error(GL_OUT_OF_MEMORY);
- }
-
- newTexture->GetSurfaceLevel(levelToFetch, &newSurface);
- newTexture->Release();
- }
-
- surface = newSurface;
-}
-
void Texture::setImage(GLint unpackAlignment, const void *pixels, Image *image)
{
image->createSurface();
- if (pixels != NULL && image->surface != NULL)
+ if (pixels != NULL && image->getSurface() != NULL)
{
D3DSURFACE_DESC description;
- image->surface->GetDesc(&description);
+ image->getSurface()->GetDesc(&description);
D3DLOCKED_RECT locked;
- HRESULT result = image->surface->LockRect(&locked, NULL, 0);
+ HRESULT result = image->getSurface()->LockRect(&locked, NULL, 0);
ASSERT(SUCCEEDED(result));
if (SUCCEEDED(result))
{
- loadImageData(0, 0, image->width, image->height, image->format, image->type, unpackAlignment, pixels, locked.Pitch, locked.pBits, &description);
- image->surface->UnlockRect();
+ loadImageData(0, 0, image->getWidth(), image->getHeight(), image->getFormat(), image->getType(), unpackAlignment, pixels, locked.Pitch, locked.pBits, &description);
+ image->getSurface()->UnlockRect();
}
- image->dirty = true;
+ image->markDirty();
mDirtyImages = true;
}
}
@@ -1127,41 +1144,41 @@
{
image->createSurface();
- if (pixels != NULL && image->surface != NULL)
+ if (pixels != NULL && image->getSurface() != NULL)
{
D3DLOCKED_RECT locked;
- HRESULT result = image->surface->LockRect(&locked, NULL, 0);
+ HRESULT result = image->getSurface()->LockRect(&locked, NULL, 0);
ASSERT(SUCCEEDED(result));
if (SUCCEEDED(result))
{
- int inputPitch = ComputeCompressedPitch(image->width, image->format);
- int inputSize = ComputeCompressedSize(image->width, image->height, image->format);
- loadCompressedImageData(0, 0, image->width, image->height, -inputPitch, static_cast<const char*>(pixels) + inputSize - inputPitch, locked.Pitch, locked.pBits);
- image->surface->UnlockRect();
+ int inputPitch = ComputeCompressedPitch(image->getWidth(), image->getFormat());
+ int inputSize = ComputeCompressedSize(image->getWidth(), image->getHeight(), image->getFormat());
+ loadCompressedImageData(0, 0, image->getWidth(), image->getHeight(), -inputPitch, static_cast<const char*>(pixels) + inputSize - inputPitch, locked.Pitch, locked.pBits);
+ image->getSurface()->UnlockRect();
}
- image->dirty = true;
+ image->markDirty();
mDirtyImages = true;
}
}
bool Texture::subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image)
{
- if (width + xoffset > image->width || height + yoffset > image->height)
+ if (width + xoffset > image->getWidth() || height + yoffset > image->getHeight())
{
error(GL_INVALID_VALUE);
return false;
}
- if (IsCompressed(image->format))
+ if (IsCompressed(image->getFormat()))
{
error(GL_INVALID_OPERATION);
return false;
}
- if (format != image->format)
+ if (format != image->getFormat())
{
error(GL_INVALID_OPERATION);
return false;
@@ -1169,23 +1186,23 @@
image->createSurface();
- if (pixels != NULL && image->surface != NULL)
+ if (pixels != NULL && image->getSurface() != NULL)
{
D3DSURFACE_DESC description;
- image->surface->GetDesc(&description);
+ image->getSurface()->GetDesc(&description);
D3DLOCKED_RECT locked;
- HRESULT result = image->surface->LockRect(&locked, NULL, 0);
+ HRESULT result = image->getSurface()->LockRect(&locked, NULL, 0);
ASSERT(SUCCEEDED(result));
if (SUCCEEDED(result))
{
- loadImageData(xoffset, transformPixelYOffset(yoffset, height, image->height), width, height, format, type, unpackAlignment, pixels, locked.Pitch, locked.pBits, &description);
- image->surface->UnlockRect();
+ loadImageData(xoffset, transformPixelYOffset(yoffset, height, image->getHeight()), width, height, format, type, unpackAlignment, pixels, locked.Pitch, locked.pBits, &description);
+ image->getSurface()->UnlockRect();
}
- image->dirty = true;
+ image->markDirty();
mDirtyImages = true;
}
@@ -1194,7 +1211,7 @@
bool Texture::subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image)
{
- if (width + xoffset > image->width || height + yoffset > image->height)
+ if (width + xoffset > image->getWidth() || height + yoffset > image->getHeight())
{
error(GL_INVALID_VALUE);
return false;
@@ -1208,7 +1225,7 @@
image->createSurface();
- if (pixels != NULL && image->surface != NULL)
+ if (pixels != NULL && image->getSurface() != NULL)
{
RECT updateRegion;
updateRegion.left = xoffset;
@@ -1217,7 +1234,7 @@
updateRegion.top = yoffset;
D3DLOCKED_RECT locked;
- HRESULT result = image->surface->LockRect(&locked, &updateRegion, 0);
+ HRESULT result = image->getSurface()->LockRect(&locked, &updateRegion, 0);
ASSERT(SUCCEEDED(result));
@@ -1225,11 +1242,11 @@
{
int inputPitch = ComputeCompressedPitch(width, format);
int inputSize = ComputeCompressedSize(width, height, format);
- loadCompressedImageData(xoffset, transformPixelYOffset(yoffset, height, image->height), width, height, -inputPitch, static_cast<const char*>(pixels) + inputSize - inputPitch, locked.Pitch, locked.pBits);
- image->surface->UnlockRect();
+ loadCompressedImageData(xoffset, transformPixelYOffset(yoffset, height, image->getHeight()), width, height, -inputPitch, static_cast<const char*>(pixels) + inputSize - inputPitch, locked.Pitch, locked.pBits);
+ image->getSurface()->UnlockRect();
}
- image->dirty = true;
+ image->markDirty();
mDirtyImages = true;
}
@@ -1241,7 +1258,7 @@
{
image->createSurface();
- if (!image->surface)
+ if (!image->getSurface())
{
ERR("Failed to create an image surface.");
return error(GL_OUT_OF_MEMORY);
@@ -1270,12 +1287,12 @@
}
RECT sourceRect = transformPixelRect(x, y, width, height, description.Height);
- int destYOffset = transformPixelYOffset(yoffset, height, image->height);
+ int destYOffset = transformPixelYOffset(yoffset, height, image->getHeight());
RECT destRect = {xoffset, destYOffset, xoffset + width, destYOffset + height};
if (image->isRenderable())
{
- result = D3DXLoadSurfaceFromSurface(image->surface, NULL, &destRect, renderTargetData, NULL, &sourceRect, D3DX_FILTER_BOX, 0);
+ result = D3DXLoadSurfaceFromSurface(image->getSurface(), NULL, &destRect, renderTargetData, NULL, &sourceRect, D3DX_FILTER_BOX, 0);
if (FAILED(result))
{
@@ -1297,7 +1314,7 @@
}
D3DLOCKED_RECT destLock = {0};
- result = image->surface->LockRect(&destLock, &destRect, 0);
+ result = image->getSurface()->LockRect(&destLock, &destRect, 0);
if (FAILED(result))
{
@@ -1406,13 +1423,13 @@
}
}
- image->surface->UnlockRect();
+ image->getSurface()->UnlockRect();
renderTargetData->UnlockRect();
}
renderTargetData->Release();
- image->dirty = true;
+ image->markDirty();
mDirtyImages = true;
}
@@ -1512,22 +1529,22 @@
GLsizei Texture2D::getWidth() const
{
- return mImageArray[0].width;
+ return mImageArray[0].getWidth();
}
GLsizei Texture2D::getHeight() const
{
- return mImageArray[0].height;
+ return mImageArray[0].getHeight();
}
GLenum Texture2D::getInternalFormat() const
{
- return mImageArray[0].format;
+ return mImageArray[0].getFormat();
}
GLenum Texture2D::getType() const
{
- return mImageArray[0].type;
+ return mImageArray[0].getType();
}
D3DFORMAT Texture2D::getD3DFormat() const
@@ -1535,29 +1552,12 @@
return mImageArray[0].getD3DFormat();
}
-void Image::redefine(GLenum format, GLsizei width, GLsizei height, GLenum type)
-{
- this->width = width;
- this->height = height;
- this->format = format;
- this->type = type;
-
- if (surface)
- {
- surface->Release();
- surface = NULL;
- dirty = true;
- }
-
- createSurface();
-}
-
void Texture2D::redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type, bool forceRedefine)
{
- GLsizei textureWidth = mImageArray[0].width;
- GLsizei textureHeight = mImageArray[0].height;
- GLenum textureFormat = mImageArray[0].format;
- GLenum textureType = mImageArray[0].type;
+ GLsizei textureWidth = mImageArray[0].getWidth();
+ GLsizei textureHeight = mImageArray[0].getHeight();
+ GLenum textureFormat = mImageArray[0].getFormat();
+ GLenum textureType = mImageArray[0].getType();
mImageArray[level].redefine(format, width, height, type);
@@ -1574,7 +1574,7 @@
{
for (int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{
- mImageArray[i].dirty = true;
+ mImageArray[i].markDirty();
}
mTexture->Release();
@@ -1641,7 +1641,7 @@
void Texture2D::commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{
- ASSERT(mImageArray[level].surface != NULL);
+ ASSERT(mImageArray[level].getSurface() != NULL);
if (level < levelCount())
{
@@ -1654,15 +1654,15 @@
{
Image *image = &mImageArray[level];
- RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
+ RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->getHeight());;
POINT destPoint = {sourceRect.left, sourceRect.top};
- result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
+ result = getDevice()->UpdateSurface(image->getSurface(), &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result));
destLevel->Release();
- image->dirty = false;
+ image->markClean();
}
}
}
@@ -1706,7 +1706,7 @@
convertToRenderTarget();
}
- mImageArray[level].dirty = false;
+ mImageArray[level].markClean();
if (width != 0 && height != 0 && level < levelCount())
{
@@ -1716,7 +1716,7 @@
sourceRect.right = clamp(sourceRect.right, 0, source->getColorbuffer()->getWidth());
sourceRect.bottom = clamp(sourceRect.bottom, 0, source->getColorbuffer()->getHeight());
- GLint destYOffset = transformPixelYOffset(0, height, mImageArray[level].height);
+ GLint destYOffset = transformPixelYOffset(0, height, mImageArray[level].getHeight());
IDirect3DSurface9 *dest;
HRESULT hr = mTexture->GetSurfaceLevel(level, &dest);
@@ -1729,7 +1729,7 @@
void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
- if (xoffset + width > mImageArray[level].width || yoffset + height > mImageArray[level].height)
+ if (xoffset + width > mImageArray[level].getWidth() || yoffset + height > mImageArray[level].getHeight())
{
return error(GL_INVALID_VALUE);
}
@@ -1763,12 +1763,12 @@
sourceRect.right = clamp(sourceRect.right, 0, source->getColorbuffer()->getWidth());
sourceRect.bottom = clamp(sourceRect.bottom, 0, source->getColorbuffer()->getHeight());
- GLint destYOffset = transformPixelYOffset(yoffset, height, mImageArray[level].height);
+ GLint destYOffset = transformPixelYOffset(yoffset, height, mImageArray[level].getHeight());
IDirect3DSurface9 *dest;
HRESULT hr = mTexture->GetSurfaceLevel(level, &dest);
- getBlitter()->copy(source->getRenderTarget(), sourceRect, mImageArray[0].format, xoffset, destYOffset, dest);
+ getBlitter()->copy(source->getRenderTarget(), sourceRect, mImageArray[0].getFormat(), xoffset, destYOffset, dest);
dest->Release();
}
}
@@ -1777,8 +1777,8 @@
// Tests for GL texture object completeness. [OpenGL ES 2.0.24] section 3.7.10 page 81.
bool Texture2D::isComplete() const
{
- GLsizei width = mImageArray[0].width;
- GLsizei height = mImageArray[0].height;
+ GLsizei width = mImageArray[0].getWidth();
+ GLsizei height = mImageArray[0].getHeight();
if (width <= 0 || height <= 0)
{
@@ -1836,22 +1836,22 @@
for (int level = 1; level <= q; level++)
{
- if (mImageArray[level].format != mImageArray[0].format)
+ if (mImageArray[level].getFormat() != mImageArray[0].getFormat())
{
return false;
}
- if (mImageArray[level].type != mImageArray[0].type)
+ if (mImageArray[level].getType() != mImageArray[0].getType())
{
return false;
}
- if (mImageArray[level].width != std::max(1, width >> level))
+ if (mImageArray[level].getWidth() != std::max(1, width >> level))
{
return false;
}
- if (mImageArray[level].height != std::max(1, height >> level))
+ if (mImageArray[level].getHeight() != std::max(1, height >> level))
{
return false;
}
@@ -1876,10 +1876,10 @@
{
IDirect3DDevice9 *device = getDevice();
D3DFORMAT format = mImageArray[0].getD3DFormat();
- GLint levels = creationLevels(mImageArray[0].width, mImageArray[0].height, 0);
+ GLint levels = creationLevels(mImageArray[0].getWidth(), mImageArray[0].getHeight(), 0);
IDirect3DTexture9 *texture = NULL;
- HRESULT result = device->CreateTexture(mImageArray[0].width, mImageArray[0].height, levels, 0, format, D3DPOOL_DEFAULT, &texture, NULL);
+ HRESULT result = device->CreateTexture(mImageArray[0].getWidth(), mImageArray[0].getHeight(), levels, 0, format, D3DPOOL_DEFAULT, &texture, NULL);
if (FAILED(result))
{
@@ -1905,9 +1905,9 @@
{
Image *image = &mImageArray[level];
- if (image->surface && image->dirty)
+ if (image->getSurface() && image->isDirty())
{
- commitRect(level, 0, 0, mImageArray[level].width, mImageArray[level].height);
+ commitRect(level, 0, 0, mImageArray[level].getWidth(), mImageArray[level].getHeight());
}
}
}
@@ -1916,14 +1916,14 @@
{
IDirect3DTexture9 *texture = NULL;
- if (mImageArray[0].width != 0 && mImageArray[0].height != 0)
+ if (mImageArray[0].getWidth() != 0 && mImageArray[0].getHeight() != 0)
{
egl::Display *display = getDisplay();
IDirect3DDevice9 *device = getDevice();
D3DFORMAT format = mImageArray[0].getD3DFormat();
- GLint levels = creationLevels(mImageArray[0].width, mImageArray[0].height, 0);
+ GLint levels = creationLevels(mImageArray[0].getWidth(), mImageArray[0].getHeight(), 0);
- HRESULT result = device->CreateTexture(mImageArray[0].width, mImageArray[0].height, levels, D3DUSAGE_RENDERTARGET, format, D3DPOOL_DEFAULT, &texture, NULL);
+ HRESULT result = device->CreateTexture(mImageArray[0].getWidth(), mImageArray[0].getHeight(), levels, D3DUSAGE_RENDERTARGET, format, D3DPOOL_DEFAULT, &texture, NULL);
if (FAILED(result))
{
@@ -1995,26 +1995,20 @@
{
if (!getContext()->supportsNonPower2Texture())
{
- if (!isPow2(mImageArray[0].width) || !isPow2(mImageArray[0].height))
+ if (!isPow2(mImageArray[0].getWidth()) || !isPow2(mImageArray[0].getHeight()))
{
return error(GL_INVALID_OPERATION);
}
}
// Purge array levels 1 through q and reset them to represent the generated mipmap levels.
- unsigned int q = log2(std::max(mImageArray[0].width, mImageArray[0].height));
+ unsigned int q = log2(std::max(mImageArray[0].getWidth(), mImageArray[0].getHeight()));
for (unsigned int i = 1; i <= q; i++)
{
- if (mImageArray[i].surface != NULL)
- {
- mImageArray[i].surface->Release();
- mImageArray[i].surface = NULL;
- }
-
- mImageArray[i].width = std::max(mImageArray[0].width >> i, 1);
- mImageArray[i].height = std::max(mImageArray[0].height >> i, 1);
- mImageArray[i].format = mImageArray[0].format;
- mImageArray[i].type = mImageArray[0].type;
+ mImageArray[i].redefine(mImageArray[0].getFormat(),
+ std::max(mImageArray[0].getWidth() >> i, 1),
+ std::max(mImageArray[0].getHeight() >> i, 1),
+ mImageArray[0].getType());
}
if (mIsRenderable)
@@ -2041,7 +2035,7 @@
if (upper != NULL) upper->Release();
if (lower != NULL) lower->Release();
- mImageArray[i].dirty = false;
+ mImageArray[i].markClean();
}
}
else
@@ -2050,17 +2044,17 @@
{
mImageArray[i].createSurface();
- if (mImageArray[i].surface == NULL)
+ if (mImageArray[i].getSurface() == NULL)
{
return error(GL_OUT_OF_MEMORY);
}
- if (FAILED(D3DXLoadSurfaceFromSurface(mImageArray[i].surface, NULL, NULL, mImageArray[i - 1].surface, NULL, NULL, D3DX_FILTER_BOX, 0)))
+ if (FAILED(D3DXLoadSurfaceFromSurface(mImageArray[i].getSurface(), NULL, NULL, mImageArray[i - 1].getSurface(), NULL, NULL, D3DX_FILTER_BOX, 0)))
{
ERR(" failed to load filter %d to %d.", i - 1, i);
}
- mImageArray[i].dirty = true;
+ mImageArray[i].markDirty();
}
}
}
@@ -2128,22 +2122,22 @@
GLsizei TextureCubeMap::getWidth() const
{
- return mImageArray[0][0].width;
+ return mImageArray[0][0].getWidth();
}
GLsizei TextureCubeMap::getHeight() const
{
- return mImageArray[0][0].height;
+ return mImageArray[0][0].getHeight();
}
GLenum TextureCubeMap::getInternalFormat() const
{
- return mImageArray[0][0].format;
+ return mImageArray[0][0].getFormat();
}
GLenum TextureCubeMap::getType() const
{
- return mImageArray[0][0].type;
+ return mImageArray[0][0].getType();
}
D3DFORMAT TextureCubeMap::getD3DFormat() const
@@ -2190,7 +2184,7 @@
void TextureCubeMap::commitRect(int face, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{
- ASSERT(mImageArray[face][level].surface != NULL);
+ ASSERT(mImageArray[face][level].getSurface() != NULL);
if (level < levelCount())
{
@@ -2201,15 +2195,15 @@
{
Image *image = &mImageArray[face][level];
- RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->height);;
+ RECT sourceRect = transformPixelRect(xoffset, yoffset, width, height, image->getHeight());;
POINT destPoint = {sourceRect.left, sourceRect.top};
- HRESULT result = getDevice()->UpdateSurface(image->surface, &sourceRect, destLevel, &destPoint);
+ HRESULT result = getDevice()->UpdateSurface(image->getSurface(), &sourceRect, destLevel, &destPoint);
ASSERT(SUCCEEDED(result));
destLevel->Release();
- image->dirty = false;
+ image->markClean();
}
}
}
@@ -2233,7 +2227,7 @@
// Tests for GL texture object completeness. [OpenGL ES 2.0.24] section 3.7.10 page 81.
bool TextureCubeMap::isComplete() const
{
- int size = mImageArray[0][0].width;
+ int size = mImageArray[0][0].getWidth();
if (size <= 0)
{
@@ -2259,7 +2253,7 @@
for (int face = 0; face < 6; face++)
{
- if (mImageArray[face][0].width != size || mImageArray[face][0].height != size)
+ if (mImageArray[face][0].getWidth() != size || mImageArray[face][0].getHeight() != size)
{
return false;
}
@@ -2300,22 +2294,22 @@
{
for (int level = 1; level <= q; level++)
{
- if (mImageArray[face][level].format != mImageArray[0][0].format)
+ if (mImageArray[face][level].getFormat() != mImageArray[0][0].getFormat())
{
return false;
}
- if (mImageArray[face][level].type != mImageArray[0][0].type)
+ if (mImageArray[face][level].getType() != mImageArray[0][0].getType())
{
return false;
}
- if (mImageArray[face][level].width != std::max(1, size >> level))
+ if (mImageArray[face][level].getWidth() != std::max(1, size >> level))
{
return false;
}
- ASSERT(mImageArray[face][level].height == mImageArray[face][level].width);
+ ASSERT(mImageArray[face][level].getHeight() == mImageArray[face][level].getWidth());
}
}
}
@@ -2338,10 +2332,10 @@
{
IDirect3DDevice9 *device = getDevice();
D3DFORMAT format = mImageArray[0][0].getD3DFormat();
- GLint levels = creationLevels(mImageArray[0][0].width, 0);
+ GLint levels = creationLevels(mImageArray[0][0].getWidth(), 0);
IDirect3DCubeTexture9 *texture = NULL;
- HRESULT result = device->CreateCubeTexture(mImageArray[0][0].width, levels, 0, format, D3DPOOL_DEFAULT, &texture, NULL);
+ HRESULT result = device->CreateCubeTexture(mImageArray[0][0].getWidth(), levels, 0, format, D3DPOOL_DEFAULT, &texture, NULL);
if (FAILED(result))
{
@@ -2368,9 +2362,9 @@
{
Image *image = &mImageArray[face][level];
- if (image->surface && image->dirty)
+ if (image->getSurface() && image->isDirty())
{
- commitRect(face, level, 0, 0, image->width, image->height);
+ commitRect(face, level, 0, 0, image->getWidth(), image->getHeight());
}
}
}
@@ -2380,14 +2374,14 @@
{
IDirect3DCubeTexture9 *texture = NULL;
- if (mImageArray[0][0].width != 0)
+ if (mImageArray[0][0].getWidth() != 0)
{
egl::Display *display = getDisplay();
IDirect3DDevice9 *device = getDevice();
D3DFORMAT format = mImageArray[0][0].getD3DFormat();
- GLint levels = creationLevels(mImageArray[0][0].width, 0);
+ GLint levels = creationLevels(mImageArray[0][0].getWidth(), 0);
- HRESULT result = device->CreateCubeTexture(mImageArray[0][0].width, levels, D3DUSAGE_RENDERTARGET, format, D3DPOOL_DEFAULT, &texture, NULL);
+ HRESULT result = device->CreateCubeTexture(mImageArray[0][0].getWidth(), levels, D3DUSAGE_RENDERTARGET, format, D3DPOOL_DEFAULT, &texture, NULL);
if (FAILED(result))
{
@@ -2478,10 +2472,10 @@
void TextureCubeMap::redefineImage(int face, GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type)
{
- GLsizei textureWidth = mImageArray[0][0].width;
- GLsizei textureHeight = mImageArray[0][0].height;
- GLenum textureFormat = mImageArray[0][0].format;
- GLenum textureType = mImageArray[0][0].type;
+ GLsizei textureWidth = mImageArray[0][0].getWidth();
+ GLsizei textureHeight = mImageArray[0][0].getHeight();
+ GLenum textureFormat = mImageArray[0][0].getFormat();
+ GLenum textureType = mImageArray[0][0].getType();
mImageArray[face][level].redefine(format, width, height, type);
@@ -2499,7 +2493,7 @@
{
for (int f = 0; f < 6; f++)
{
- mImageArray[f][i].dirty = true;
+ mImageArray[f][i].markDirty();
}
}
@@ -2534,7 +2528,7 @@
convertToRenderTarget();
}
- mImageArray[faceindex][level].dirty = false;
+ mImageArray[faceindex][level].markClean();
ASSERT(width == height);
@@ -2546,7 +2540,7 @@
sourceRect.right = clamp(sourceRect.right, 0, source->getColorbuffer()->getWidth());
sourceRect.bottom = clamp(sourceRect.bottom, 0, source->getColorbuffer()->getHeight());
- GLint destYOffset = transformPixelYOffset(0, height, mImageArray[faceindex][level].width);
+ GLint destYOffset = transformPixelYOffset(0, height, mImageArray[faceindex][level].getWidth());
IDirect3DSurface9 *dest = getCubeMapSurface(target, level);
@@ -2573,7 +2567,7 @@
void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
- GLsizei size = mImageArray[faceIndex(target)][level].width;
+ GLsizei size = mImageArray[faceIndex(target)][level].getWidth();
if (xoffset + width > size || yoffset + height > size)
{
@@ -2611,11 +2605,11 @@
sourceRect.right = clamp(sourceRect.right, 0, source->getColorbuffer()->getWidth());
sourceRect.bottom = clamp(sourceRect.bottom, 0, source->getColorbuffer()->getHeight());
- GLint destYOffset = transformPixelYOffset(yoffset, height, mImageArray[faceindex][level].width);
+ GLint destYOffset = transformPixelYOffset(yoffset, height, mImageArray[faceindex][level].getWidth());
IDirect3DSurface9 *dest = getCubeMapSurface(target, level);
- getBlitter()->copy(source->getRenderTarget(), sourceRect, mImageArray[0][0].format, xoffset, destYOffset, dest);
+ getBlitter()->copy(source->getRenderTarget(), sourceRect, mImageArray[0][0].getFormat(), xoffset, destYOffset, dest);
dest->Release();
}
}
@@ -2623,15 +2617,15 @@
bool TextureCubeMap::isCubeComplete() const
{
- if (mImageArray[0][0].width == 0)
+ if (mImageArray[0][0].getWidth() == 0)
{
return false;
}
for (unsigned int f = 1; f < 6; f++)
{
- if (mImageArray[f][0].width != mImageArray[0][0].width
- || mImageArray[f][0].format != mImageArray[0][0].format)
+ if (mImageArray[f][0].getWidth() != mImageArray[0][0].getWidth()
+ || mImageArray[f][0].getFormat() != mImageArray[0][0].getFormat())
{
return false;
}
@@ -2649,28 +2643,22 @@
if (!getContext()->supportsNonPower2Texture())
{
- if (!isPow2(mImageArray[0][0].width))
+ if (!isPow2(mImageArray[0][0].getWidth()))
{
return error(GL_INVALID_OPERATION);
}
}
// Purge array levels 1 through q and reset them to represent the generated mipmap levels.
- unsigned int q = log2(mImageArray[0][0].width);
+ unsigned int q = log2(mImageArray[0][0].getWidth());
for (unsigned int f = 0; f < 6; f++)
{
for (unsigned int i = 1; i <= q; i++)
{
- if (mImageArray[f][i].surface != NULL)
- {
- mImageArray[f][i].surface->Release();
- mImageArray[f][i].surface = NULL;
- }
-
- mImageArray[f][i].width = std::max(mImageArray[f][0].width >> i, 1);
- mImageArray[f][i].height = mImageArray[f][i].width;
- mImageArray[f][i].format = mImageArray[f][0].format;
- mImageArray[f][i].type = mImageArray[f][0].type;
+ mImageArray[f][i].redefine(mImageArray[f][0].getFormat(),
+ std::max(mImageArray[f][0].getWidth() >> i, 1),
+ std::max(mImageArray[f][0].getWidth() >> i, 1),
+ mImageArray[f][0].getType());
}
}
@@ -2696,7 +2684,7 @@
if (upper != NULL) upper->Release();
if (lower != NULL) lower->Release();
- mImageArray[f][i].dirty = false;
+ mImageArray[f][i].markClean();
}
}
}
@@ -2707,17 +2695,17 @@
for (unsigned int i = 1; i <= q; i++)
{
mImageArray[f][i].createSurface();
- if (mImageArray[f][i].surface == NULL)
+ if (mImageArray[f][i].getSurface() == NULL)
{
return error(GL_OUT_OF_MEMORY);
}
- if (FAILED(D3DXLoadSurfaceFromSurface(mImageArray[f][i].surface, NULL, NULL, mImageArray[f][i - 1].surface, NULL, NULL, D3DX_FILTER_BOX, 0)))
+ if (FAILED(D3DXLoadSurfaceFromSurface(mImageArray[f][i].getSurface(), NULL, NULL, mImageArray[f][i - 1].getSurface(), NULL, NULL, D3DX_FILTER_BOX, 0)))
{
ERR(" failed to load filter %d to %d.", i - 1, i);
}
- mImageArray[f][i].dirty = true;
+ mImageArray[f][i].markDirty();
}
}
}