Commit 82bf0c5a by Jamie Madill

Use gl::Rectangle as a param to Image::copy.

BUG=angle:729 Change-Id: I13194760df35cb18db6ac43d567e6b393e838d56 Reviewed-on: https://chromium-review.googlesource.com/221268Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 00e5452a
...@@ -27,7 +27,7 @@ Image::Image() ...@@ -27,7 +27,7 @@ Image::Image()
mDirty = false; mDirty = false;
} }
void Image::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) void Image::copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &area, gl::Framebuffer *source)
{ {
gl::FramebufferAttachment *colorbuffer = source->getReadColorbuffer(); gl::FramebufferAttachment *colorbuffer = source->getReadColorbuffer();
...@@ -38,7 +38,7 @@ void Image::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -38,7 +38,7 @@ void Image::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
RenderTarget *renderTarget = GetAttachmentRenderTarget(colorbuffer); RenderTarget *renderTarget = GetAttachmentRenderTarget(colorbuffer);
ASSERT(renderTarget); ASSERT(renderTarget);
copy(xoffset, yoffset, zoffset, x, y, width, height, renderTarget); copy(xoffset, yoffset, zoffset, area, renderTarget);
} }
} }
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
namespace gl namespace gl
{ {
class Framebuffer; class Framebuffer;
struct Rectangle;
} }
namespace rx namespace rx
...@@ -51,8 +52,8 @@ class Image ...@@ -51,8 +52,8 @@ class Image
virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
const void *input) = 0; const void *input) = 0;
void copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source); void copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, gl::Framebuffer *source);
virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, RenderTarget *renderTarget) = 0; virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, RenderTarget *source) = 0;
protected: protected:
GLsizei mWidth; GLsizei mWidth;
......
...@@ -549,9 +549,11 @@ void TextureD3D_2D::copyImage(GLenum target, GLint level, GLenum format, GLint x ...@@ -549,9 +549,11 @@ void TextureD3D_2D::copyImage(GLenum target, GLint level, GLenum format, GLint x
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(format, GL_UNSIGNED_BYTE); GLenum sizedInternalFormat = gl::GetSizedInternalFormat(format, GL_UNSIGNED_BYTE);
redefineImage(level, sizedInternalFormat, width, height); redefineImage(level, sizedInternalFormat, width, height);
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[level]->isRenderableFormat()) if (!mImageArray[level]->isRenderableFormat())
{ {
mImageArray[level]->copy(0, 0, 0, x, y, width, height, source); mImageArray[level]->copy(0, 0, 0, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -561,12 +563,6 @@ void TextureD3D_2D::copyImage(GLenum target, GLint level, GLenum format, GLint x ...@@ -561,12 +563,6 @@ void TextureD3D_2D::copyImage(GLenum target, GLint level, GLenum format, GLint x
if (width != 0 && height != 0 && isValidLevel(level)) if (width != 0 && height != 0 && isValidLevel(level))
{ {
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImage2D(source, sourceRect, format, 0, 0, mTexStorage, level); mRenderer->copyImage2D(source, sourceRect, format, 0, 0, mTexStorage, level);
} }
} }
...@@ -580,9 +576,11 @@ void TextureD3D_2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin ...@@ -580,9 +576,11 @@ void TextureD3D_2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin
// the current level we're copying to is defined (with appropriate format, width & height) // the current level we're copying to is defined (with appropriate format, width & height)
bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0); bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0);
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget)) if (!mImageArray[level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget))
{ {
mImageArray[level]->copy(xoffset, yoffset, 0, x, y, width, height, source); mImageArray[level]->copy(xoffset, yoffset, 0, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -593,12 +591,6 @@ void TextureD3D_2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin ...@@ -593,12 +591,6 @@ void TextureD3D_2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin
{ {
updateStorageLevel(level); updateStorageLevel(level);
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImage2D(source, sourceRect, mRenderer->copyImage2D(source, sourceRect,
gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
xoffset, yoffset, mTexStorage, level); xoffset, yoffset, mTexStorage, level);
...@@ -1002,9 +994,11 @@ void TextureD3D_Cube::copyImage(GLenum target, GLint level, GLenum format, GLint ...@@ -1002,9 +994,11 @@ void TextureD3D_Cube::copyImage(GLenum target, GLint level, GLenum format, GLint
redefineImage(faceIndex, level, sizedInternalFormat, width, height); redefineImage(faceIndex, level, sizedInternalFormat, width, height);
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[faceIndex][level]->isRenderableFormat()) if (!mImageArray[faceIndex][level]->isRenderableFormat())
{ {
mImageArray[faceIndex][level]->copy(0, 0, 0, x, y, width, height, source); mImageArray[faceIndex][level]->copy(0, 0, 0, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -1016,12 +1010,6 @@ void TextureD3D_Cube::copyImage(GLenum target, GLint level, GLenum format, GLint ...@@ -1016,12 +1010,6 @@ void TextureD3D_Cube::copyImage(GLenum target, GLint level, GLenum format, GLint
if (width > 0 && isValidFaceLevel(faceIndex, level)) if (width > 0 && isValidFaceLevel(faceIndex, level))
{ {
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImageCube(source, sourceRect, format, 0, 0, mTexStorage, target, level); mRenderer->copyImageCube(source, sourceRect, format, 0, 0, mTexStorage, target, level);
} }
} }
...@@ -1036,9 +1024,11 @@ void TextureD3D_Cube::copySubImage(GLenum target, GLint level, GLint xoffset, GL ...@@ -1036,9 +1024,11 @@ void TextureD3D_Cube::copySubImage(GLenum target, GLint level, GLint xoffset, GL
// rely on the "getBaseLevel*" methods reliably otherwise. // rely on the "getBaseLevel*" methods reliably otherwise.
bool canCreateRenderTarget = isFaceLevelComplete(faceIndex, level) && isCubeComplete(); bool canCreateRenderTarget = isFaceLevelComplete(faceIndex, level) && isCubeComplete();
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[faceIndex][level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget)) if (!mImageArray[faceIndex][level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget))
{ {
mImageArray[faceIndex][level]->copy(0, 0, 0, x, y, width, height, source); mImageArray[faceIndex][level]->copy(0, 0, 0, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -1049,12 +1039,6 @@ void TextureD3D_Cube::copySubImage(GLenum target, GLint level, GLint xoffset, GL ...@@ -1049,12 +1039,6 @@ void TextureD3D_Cube::copySubImage(GLenum target, GLint level, GLint xoffset, GL
{ {
updateStorageFaceLevel(faceIndex, level); updateStorageFaceLevel(faceIndex, level);
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImageCube(source, sourceRect, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format, mRenderer->copyImageCube(source, sourceRect, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
xoffset, yoffset, mTexStorage, target, level); xoffset, yoffset, mTexStorage, target, level);
} }
...@@ -1565,9 +1549,11 @@ void TextureD3D_3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin ...@@ -1565,9 +1549,11 @@ void TextureD3D_3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin
// the current level we're copying to is defined (with appropriate format, width & height) // the current level we're copying to is defined (with appropriate format, width & height)
bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0); bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0);
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget)) if (!mImageArray[level]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget))
{ {
mImageArray[level]->copy(xoffset, yoffset, zoffset, x, y, width, height, source); mImageArray[level]->copy(xoffset, yoffset, zoffset, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -1578,12 +1564,6 @@ void TextureD3D_3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin ...@@ -1578,12 +1564,6 @@ void TextureD3D_3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLin
{ {
updateStorageLevel(level); updateStorageLevel(level);
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImage3D(source, sourceRect, mRenderer->copyImage3D(source, sourceRect,
gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
xoffset, yoffset, zoffset, mTexStorage, level); xoffset, yoffset, zoffset, mTexStorage, level);
...@@ -2036,9 +2016,11 @@ void TextureD3D_2DArray::copySubImage(GLenum target, GLint level, GLint xoffset, ...@@ -2036,9 +2016,11 @@ void TextureD3D_2DArray::copySubImage(GLenum target, GLint level, GLint xoffset,
// the current level we're copying to is defined (with appropriate format, width & height) // the current level we're copying to is defined (with appropriate format, width & height)
bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0); bool canCreateRenderTarget = isLevelComplete(level) && isLevelComplete(0);
gl::Rectangle sourceRect(x, y, width, height);
if (!mImageArray[level][0]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget)) if (!mImageArray[level][0]->isRenderableFormat() || (!mTexStorage && !canCreateRenderTarget))
{ {
mImageArray[level][zoffset]->copy(xoffset, yoffset, 0, x, y, width, height, source); mImageArray[level][zoffset]->copy(xoffset, yoffset, 0, sourceRect, source);
mDirtyImages = true; mDirtyImages = true;
} }
else else
...@@ -2049,12 +2031,6 @@ void TextureD3D_2DArray::copySubImage(GLenum target, GLint level, GLint xoffset, ...@@ -2049,12 +2031,6 @@ void TextureD3D_2DArray::copySubImage(GLenum target, GLint level, GLint xoffset,
{ {
updateStorageLevel(level); updateStorageLevel(level);
gl::Rectangle sourceRect;
sourceRect.x = x;
sourceRect.width = width;
sourceRect.y = y;
sourceRect.height = height;
mRenderer->copyImage2DArray(source, sourceRect, gl::GetInternalFormatInfo(getInternalFormat(0)).format, mRenderer->copyImage2DArray(source, sourceRect, gl::GetInternalFormatInfo(getInternalFormat(0)).format,
xoffset, yoffset, zoffset, mTexStorage, level); xoffset, yoffset, zoffset, mTexStorage, level);
} }
......
...@@ -321,7 +321,7 @@ gl::Error Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffse ...@@ -321,7 +321,7 @@ gl::Error Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffse
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, RenderTarget *source) void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, RenderTarget *source)
{ {
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(source); RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(source);
...@@ -376,10 +376,10 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y ...@@ -376,10 +376,10 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y
} }
D3D11_BOX srcBox; D3D11_BOX srcBox;
srcBox.left = x; srcBox.left = sourceArea.x;
srcBox.right = x + width; srcBox.right = sourceArea.x + sourceArea.width;
srcBox.top = y; srcBox.top = sourceArea.y;
srcBox.bottom = y + height; srcBox.bottom = sourceArea.y + sourceArea.height;
srcBox.front = 0; srcBox.front = 0;
srcBox.back = 1; srcBox.back = 1;
...@@ -405,8 +405,7 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y ...@@ -405,8 +405,7 @@ void Image11::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat); const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat);
gl::Rectangle area(x, y, width, height); mRenderer->readTextureData(colorBufferTexture, subresourceIndex, sourceArea, formatInfo.format, formatInfo.type, mappedImage.RowPitch, gl::PixelPackState(), dataOffset);
mRenderer->readTextureData(colorBufferTexture, subresourceIndex, area, formatInfo.format, formatInfo.type, mappedImage.RowPitch, gl::PixelPackState(), dataOffset);
unmap(); unmap();
} }
......
...@@ -51,7 +51,7 @@ class Image11 : public ImageD3D ...@@ -51,7 +51,7 @@ class Image11 : public ImageD3D
virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
const void *input); const void *input);
virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, RenderTarget *source); virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, RenderTarget *source);
bool recoverFromAssociatedStorage(); bool recoverFromAssociatedStorage();
bool isAssociatedStorageValid(TextureStorage11* textureStorage) const; bool isAssociatedStorageValid(TextureStorage11* textureStorage) const;
......
...@@ -466,7 +466,7 @@ gl::Error Image9::loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset ...@@ -466,7 +466,7 @@ gl::Error Image9::loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset
} }
// This implements glCopyTex[Sub]Image2D for non-renderable internal texture formats and incomplete textures // This implements glCopyTex[Sub]Image2D for non-renderable internal texture formats and incomplete textures
void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, RenderTarget *source) void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, RenderTarget *source)
{ {
ASSERT(source); ASSERT(source);
...@@ -512,8 +512,11 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -512,8 +512,11 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
return gl::error(GL_OUT_OF_MEMORY); return gl::error(GL_OUT_OF_MEMORY);
} }
RECT sourceRect = {x, y, x + width, y + height}; int width = sourceArea.width;
RECT destRect = {xoffset, yoffset, xoffset + width, yoffset + height}; int height = sourceArea.height;
RECT sourceRect = { sourceArea.x, sourceArea.y, sourceArea.x + width, sourceArea.y + height };
RECT destRect = { xoffset, yoffset, xoffset + width, yoffset + height };
D3DLOCKED_RECT sourceLock = {0}; D3DLOCKED_RECT sourceLock = {0};
result = renderTargetData->LockRect(&sourceLock, &sourceRect, 0); result = renderTargetData->LockRect(&sourceLock, &sourceRect, 0);
...@@ -551,7 +554,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -551,7 +554,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
{ {
case D3DFMT_X8R8G8B8: case D3DFMT_X8R8G8B8:
case D3DFMT_A8R8G8B8: case D3DFMT_A8R8G8B8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
memcpy(dest, source, 4 * width); memcpy(dest, source, 4 * width);
...@@ -560,9 +563,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -560,9 +563,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_L8: case D3DFMT_L8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
dest[x] = source[x * 4 + 2]; dest[x] = source[x * 4 + 2];
} }
...@@ -572,9 +575,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -572,9 +575,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_A8L8: case D3DFMT_A8L8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
dest[x * 2 + 0] = source[x * 4 + 2]; dest[x * 2 + 0] = source[x * 4 + 2];
dest[x * 2 + 1] = source[x * 4 + 3]; dest[x * 2 + 1] = source[x * 4 + 3];
...@@ -592,9 +595,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -592,9 +595,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
switch(getD3DFormat()) switch(getD3DFormat())
{ {
case D3DFMT_X8R8G8B8: case D3DFMT_X8R8G8B8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned short rgb = ((unsigned short*)source)[x]; unsigned short rgb = ((unsigned short*)source)[x];
unsigned char red = (rgb & 0xF800) >> 8; unsigned char red = (rgb & 0xF800) >> 8;
...@@ -611,9 +614,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -611,9 +614,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_L8: case D3DFMT_L8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned char red = source[x * 2 + 1] & 0xF8; unsigned char red = source[x * 2 + 1] & 0xF8;
dest[x] = red | (red >> 5); dest[x] = red | (red >> 5);
...@@ -628,12 +631,12 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -628,12 +631,12 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_A1R5G5B5: case D3DFMT_A1R5G5B5:
switch(getD3DFormat()) switch (getD3DFormat())
{ {
case D3DFMT_X8R8G8B8: case D3DFMT_X8R8G8B8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned short argb = ((unsigned short*)source)[x]; unsigned short argb = ((unsigned short*)source)[x];
unsigned char red = (argb & 0x7C00) >> 7; unsigned char red = (argb & 0x7C00) >> 7;
...@@ -650,9 +653,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -650,9 +653,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_A8R8G8B8: case D3DFMT_A8R8G8B8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned short argb = ((unsigned short*)source)[x]; unsigned short argb = ((unsigned short*)source)[x];
unsigned char red = (argb & 0x7C00) >> 7; unsigned char red = (argb & 0x7C00) >> 7;
...@@ -670,9 +673,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -670,9 +673,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_L8: case D3DFMT_L8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned char red = source[x * 2 + 1] & 0x7C; unsigned char red = source[x * 2 + 1] & 0x7C;
dest[x] = (red << 1) | (red >> 4); dest[x] = (red << 1) | (red >> 4);
...@@ -683,9 +686,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, ...@@ -683,9 +686,9 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y,
} }
break; break;
case D3DFMT_A8L8: case D3DFMT_A8L8:
for(int y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for(int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
unsigned char red = source[x * 2 + 1] & 0x7C; unsigned char red = source[x * 2 + 1] & 0x7C;
dest[x * 2 + 0] = (red << 1) | (red >> 4); dest[x * 2 + 0] = (red << 1) | (red >> 4);
......
...@@ -54,7 +54,7 @@ class Image9 : public ImageD3D ...@@ -54,7 +54,7 @@ class Image9 : public ImageD3D
virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, virtual gl::Error loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
const void *input); const void *input);
virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset,GLint x, GLint y, GLsizei width, GLsizei height, RenderTarget *source); virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, const gl::Rectangle &sourceArea, RenderTarget *source);
private: private:
DISALLOW_COPY_AND_ASSIGN(Image9); DISALLOW_COPY_AND_ASSIGN(Image9);
......
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