Commit 400a4418 by Jamie Madill

Move logic of InvalidateFramebuffer to Framebuffer.cpp.

This method will translate to an implementation call. BUG=angle:732 Change-Id: Ida1e3c9cccd94f7d166cc9a785708c12bfc52da5 Reviewed-on: https://chromium-review.googlesource.com/213853Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 8e7d7a30
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include "libGLESv2/Texture.h" #include "libGLESv2/Texture.h"
#include "libGLESv2/ResourceManager.h" #include "libGLESv2/ResourceManager.h"
#include "libGLESv2/renderer/d3d/IndexDataManager.h" #include "libGLESv2/renderer/d3d/IndexDataManager.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/Renderer.h" #include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/VertexArray.h" #include "libGLESv2/VertexArray.h"
#include "libGLESv2/Sampler.h" #include "libGLESv2/Sampler.h"
...@@ -2283,73 +2282,23 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1 ...@@ -2283,73 +2282,23 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
void Context::invalidateFrameBuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, void Context::invalidateFrameBuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments,
GLint x, GLint y, GLsizei width, GLsizei height) GLint x, GLint y, GLsizei width, GLsizei height)
{ {
Framebuffer *frameBuffer = NULL; Framebuffer *framebuffer = NULL;
switch (target) switch (target)
{ {
case GL_FRAMEBUFFER: case GL_FRAMEBUFFER:
case GL_DRAW_FRAMEBUFFER: case GL_DRAW_FRAMEBUFFER:
frameBuffer = mState.getDrawFramebuffer(); framebuffer = mState.getDrawFramebuffer();
break; break;
case GL_READ_FRAMEBUFFER: case GL_READ_FRAMEBUFFER:
frameBuffer = mState.getReadFramebuffer(); framebuffer = mState.getReadFramebuffer();
break; break;
default: default:
UNREACHABLE(); UNREACHABLE();
} }
if (frameBuffer && frameBuffer->completeness() == GL_FRAMEBUFFER_COMPLETE) if (framebuffer && framebuffer->completeness() == GL_FRAMEBUFFER_COMPLETE)
{ {
for (int i = 0; i < numAttachments; ++i) framebuffer->invalidate(numAttachments, attachments, x, y, width, height);
{
rx::RenderTarget *renderTarget = NULL;
if (attachments[i] >= GL_COLOR_ATTACHMENT0 && attachments[i] <= GL_COLOR_ATTACHMENT15)
{
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(attachments[i] - GL_COLOR_ATTACHMENT0);
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
else if (attachments[i] == GL_COLOR)
{
gl::FramebufferAttachment *attachment = frameBuffer->getColorbuffer(0);
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
else
{
gl::FramebufferAttachment *attachment = NULL;
switch (attachments[i])
{
case GL_DEPTH_ATTACHMENT:
case GL_DEPTH:
attachment = frameBuffer->getDepthbuffer();
break;
case GL_STENCIL_ATTACHMENT:
case GL_STENCIL:
attachment = frameBuffer->getStencilbuffer();
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
attachment = frameBuffer->getDepthOrStencilbuffer();
break;
default:
UNREACHABLE();
}
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
if (renderTarget)
{
renderTarget->invalidate(x, y, width, height);
}
}
} }
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "libGLESv2/Renderbuffer.h" #include "libGLESv2/Renderbuffer.h"
#include "libGLESv2/FramebufferAttachment.h" #include "libGLESv2/FramebufferAttachment.h"
#include "libGLESv2/renderer/Renderer.h" #include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "common/utilities.h" #include "common/utilities.h"
...@@ -560,6 +561,65 @@ GLenum Framebuffer::completeness() const ...@@ -560,6 +561,65 @@ GLenum Framebuffer::completeness() const
return GL_FRAMEBUFFER_COMPLETE; return GL_FRAMEBUFFER_COMPLETE;
} }
void Framebuffer::invalidate(GLsizei numAttachments, const GLenum* attachments,
GLint x, GLint y, GLsizei width, GLsizei height)
{
ASSERT(completeness() == GL_FRAMEBUFFER_COMPLETE);
for (int i = 0; i < numAttachments; ++i)
{
rx::RenderTarget *renderTarget = NULL;
if (attachments[i] >= GL_COLOR_ATTACHMENT0 && attachments[i] <= GL_COLOR_ATTACHMENT15)
{
gl::FramebufferAttachment *attachment = getColorbuffer(attachments[i] - GL_COLOR_ATTACHMENT0);
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
else if (attachments[i] == GL_COLOR)
{
gl::FramebufferAttachment *attachment = getColorbuffer(0);
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
else
{
gl::FramebufferAttachment *attachment = NULL;
switch (attachments[i])
{
case GL_DEPTH_ATTACHMENT:
case GL_DEPTH:
attachment = mDepthbuffer;
break;
case GL_STENCIL_ATTACHMENT:
case GL_STENCIL:
attachment = mStencilbuffer;
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
attachment = getDepthOrStencilbuffer();
break;
default:
UNREACHABLE();
}
if (attachment)
{
renderTarget = attachment->getRenderTarget();
}
}
if (renderTarget)
{
renderTarget->invalidate(x, y, width, height);
}
}
}
DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil) DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
: Framebuffer(renderer, 0) : Framebuffer(renderer, 0)
{ {
......
...@@ -67,6 +67,9 @@ class Framebuffer ...@@ -67,6 +67,9 @@ class Framebuffer
virtual GLenum completeness() const; virtual GLenum completeness() const;
bool hasValidDepthStencil() const; bool hasValidDepthStencil() const;
void invalidate(GLsizei numAttachments, const GLenum* attachments,
GLint x, GLint y, GLsizei width, GLsizei height);
protected: protected:
rx::Renderer *mRenderer; rx::Renderer *mRenderer;
......
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