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 @@
#include "libGLESv2/Texture.h"
#include "libGLESv2/ResourceManager.h"
#include "libGLESv2/renderer/d3d/IndexDataManager.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/VertexArray.h"
#include "libGLESv2/Sampler.h"
......@@ -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,
GLint x, GLint y, GLsizei width, GLsizei height)
{
Framebuffer *frameBuffer = NULL;
Framebuffer *framebuffer = NULL;
switch (target)
{
case GL_FRAMEBUFFER:
case GL_DRAW_FRAMEBUFFER:
frameBuffer = mState.getDrawFramebuffer();
framebuffer = mState.getDrawFramebuffer();
break;
case GL_READ_FRAMEBUFFER:
frameBuffer = mState.getReadFramebuffer();
framebuffer = mState.getReadFramebuffer();
break;
default:
UNREACHABLE();
}
if (frameBuffer && frameBuffer->completeness() == GL_FRAMEBUFFER_COMPLETE)
if (framebuffer && framebuffer->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 = 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);
}
}
framebuffer->invalidate(numAttachments, attachments, x, y, width, height);
}
}
......
......@@ -15,6 +15,7 @@
#include "libGLESv2/Renderbuffer.h"
#include "libGLESv2/FramebufferAttachment.h"
#include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "common/utilities.h"
......@@ -560,6 +561,65 @@ GLenum Framebuffer::completeness() const
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)
: Framebuffer(renderer, 0)
{
......
......@@ -67,6 +67,9 @@ class Framebuffer
virtual GLenum completeness() const;
bool hasValidDepthStencil() const;
void invalidate(GLsizei numAttachments, const GLenum* attachments,
GLint x, GLint y, GLsizei width, GLsizei height);
protected:
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