Implements fixes for problems discovered running San Angeles demo on Chrome
TRAC #13077
- clamp scissor to rendertarget size
- ensure textures are renderable when required
Signed-off-by: Daniel Koch
Author: Shannon Woods
git-svn-id: http://angleproject.googlecode.com/svn/trunk@369 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 50e610f..2eb592e 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1409,6 +1409,7 @@
{
device->SetRenderTarget(0, renderTarget);
mAppliedRenderTargetSerial = renderTargetSerial;
+ mScissorStateDirty = true; // Scissor area must be clamped to render target's size-- this is different for different render targets.
}
unsigned int depthbufferSerial = 0;
@@ -1470,7 +1471,8 @@
mState.scissorY,
mState.scissorX + mState.scissorWidth,
mState.scissorY + mState.scissorHeight};
-
+ rect.right = std::min(static_cast<UINT>(rect.right), desc.Width);
+ rect.bottom = std::min(static_cast<UINT>(rect.bottom), desc.Height);
device->SetScissorRect(&rect);
device->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE);
}
@@ -1478,7 +1480,7 @@
{
device->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE);
}
-
+
mScissorStateDirty = false;
}
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index c478cd4..d671592 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -581,6 +581,10 @@
convertToRenderTarget();
pushTexture(mTexture, true);
}
+ else
+ {
+ needRenderTarget();
+ }
if (width != 0 && height != 0 && level < levelCount())
{
@@ -1301,6 +1305,10 @@
convertToRenderTarget();
pushTexture(mTexture, true);
}
+ else
+ {
+ needRenderTarget();
+ }
ASSERT(width == height);
@@ -1370,7 +1378,7 @@
}
else
{
- getRenderTarget(face);
+ needRenderTarget();
}
if (level < levelCount())