Remove the old single-color-attachment calls from gl::Framebuffer, preferring…

Remove the old single-color-attachment calls from gl::Framebuffer, preferring the new multiple-attachment versions. TRAC #22656 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@2008 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent fc81abc5
......@@ -1421,7 +1421,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_ALPHA_BITS:
{
gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getFirstColorBuffer();
if (colorbuffer)
{
......@@ -1867,7 +1867,8 @@ void Context::clear(GLbitfield mask)
{
mask &= ~GL_COLOR_BUFFER_BIT;
if (framebufferObject->getColorbufferType() != GL_NONE)
// TODO: MRT clear
if (framebufferObject->getColorbufferType(0) != GL_NONE)
{
finalMask |= GL_COLOR_BUFFER_BIT;
}
......@@ -2142,6 +2143,11 @@ int Context::getMaxSupportedSamples() const
return mRenderer->getMaxSupportedSamples();
}
unsigned int Context::getMaximumRenderTargets() const
{
return mRenderer->getMaxRenderTargets();
}
bool Context::supportsEventQueries() const
{
return mSupportsEventQueries;
......@@ -2270,7 +2276,7 @@ bool Context::getCurrentReadFormatType(GLenum *format, GLenum *type)
return gl::error(GL_INVALID_OPERATION, false);
}
Renderbuffer *renderbuffer = framebuffer->getColorbuffer();
Renderbuffer *renderbuffer = framebuffer->getReadColorbuffer();
if (!renderbuffer)
{
return gl::error(GL_INVALID_OPERATION, false);
......@@ -2618,6 +2624,7 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask)
{
// TODO: mrt support for blit
Framebuffer *readFramebuffer = getReadFramebuffer();
Framebuffer *drawFramebuffer = getDrawFramebuffer();
......@@ -2632,10 +2639,10 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
return gl::error(GL_INVALID_OPERATION);
}
int readBufferWidth = readFramebuffer->getColorbuffer()->getWidth();
int readBufferHeight = readFramebuffer->getColorbuffer()->getHeight();
int drawBufferWidth = drawFramebuffer->getColorbuffer()->getWidth();
int drawBufferHeight = drawFramebuffer->getColorbuffer()->getHeight();
int readBufferWidth = readFramebuffer->getColorbuffer(0)->getWidth();
int readBufferHeight = readFramebuffer->getColorbuffer(0)->getHeight();
int drawBufferWidth = drawFramebuffer->getColorbuffer(0)->getWidth();
int drawBufferHeight = drawFramebuffer->getColorbuffer(0)->getHeight();
Rectangle sourceRect;
Rectangle destRect;
......@@ -2794,12 +2801,12 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
if (mask & GL_COLOR_BUFFER_BIT)
{
const bool validReadType = readFramebuffer->getColorbufferType() == GL_TEXTURE_2D ||
readFramebuffer->getColorbufferType() == GL_RENDERBUFFER;
const bool validDrawType = drawFramebuffer->getColorbufferType() == GL_TEXTURE_2D ||
drawFramebuffer->getColorbufferType() == GL_RENDERBUFFER;
const bool validReadType = readFramebuffer->getColorbufferType(0) == GL_TEXTURE_2D ||
readFramebuffer->getColorbufferType(0) == GL_RENDERBUFFER;
const bool validDrawType = drawFramebuffer->getColorbufferType(0) == GL_TEXTURE_2D ||
drawFramebuffer->getColorbufferType(0) == GL_RENDERBUFFER;
if (!validReadType || !validDrawType ||
readFramebuffer->getColorbuffer()->getActualFormat() != drawFramebuffer->getColorbuffer()->getActualFormat())
readFramebuffer->getColorbuffer(0)->getActualFormat() != drawFramebuffer->getColorbuffer(0)->getActualFormat())
{
ERR("Color buffer format conversion in BlitFramebufferANGLE not supported by this implementation");
return gl::error(GL_INVALID_OPERATION);
......
......@@ -366,6 +366,7 @@ class Context
int getMaximumTextureDimension() const;
int getMaximumCubeTextureDimension() const;
int getMaximumTextureLevel() const;
unsigned int getMaximumRenderTargets() const;
GLsizei getMaxSupportedSamples() const;
const char *getExtensionString() const;
const char *getRendererString() const;
......
......@@ -77,11 +77,6 @@ void Framebuffer::setColorbuffer(unsigned int colorAttachment, GLenum type, GLui
mColorbufferPointers[colorAttachment].set(lookupRenderbuffer(type, colorbuffer));
}
void Framebuffer::setColorbuffer(GLenum type, GLuint colorbuffer)
{
setColorbuffer(0, type, colorbuffer);
}
void Framebuffer::setDepthbuffer(GLenum type, GLuint depthbuffer)
{
mDepthbufferType = (depthbuffer != 0) ? type : GL_NONE;
......@@ -156,11 +151,6 @@ unsigned int Framebuffer::getRenderTargetSerial(unsigned int colorAttachment) co
return 0;
}
unsigned int Framebuffer::getRenderTargetSerial() const
{
return getRenderTargetSerial(0);
}
unsigned int Framebuffer::getDepthbufferSerial() const
{
Renderbuffer *depthbuffer = mDepthbufferPointer.get();
......@@ -191,11 +181,6 @@ Renderbuffer *Framebuffer::getColorbuffer(unsigned int colorAttachment) const
return mColorbufferPointers[colorAttachment].get();
}
Renderbuffer *Framebuffer::getColorbuffer() const
{
return getColorbuffer(0);
}
Renderbuffer *Framebuffer::getDepthbuffer() const
{
return mDepthbufferPointer.get();
......@@ -243,11 +228,6 @@ GLenum Framebuffer::getColorbufferType(unsigned int colorAttachment) const
return mColorbufferTypes[colorAttachment];
}
GLenum Framebuffer::getColorbufferType() const
{
return getColorbufferType(0);
}
GLenum Framebuffer::getDepthbufferType() const
{
return mDepthbufferType;
......@@ -264,11 +244,6 @@ GLuint Framebuffer::getColorbufferHandle(unsigned int colorAttachment) const
return mColorbufferPointers[colorAttachment].id();
}
GLuint Framebuffer::getColorbufferHandle() const
{
return getColorbufferHandle(0);
}
GLuint Framebuffer::getDepthbufferHandle() const
{
return mDepthbufferPointer.id();
......
......@@ -35,7 +35,6 @@ class Framebuffer
virtual ~Framebuffer();
void setColorbuffer(unsigned int colorAttachment, GLenum type, GLuint colorbuffer);
void setColorbuffer(GLenum type, GLuint colorbuffer);
void setDepthbuffer(GLenum type, GLuint depthbuffer);
void setStencilbuffer(GLenum type, GLuint stencilbuffer);
......@@ -43,12 +42,10 @@ class Framebuffer
void detachRenderbuffer(GLuint renderbuffer);
unsigned int getRenderTargetSerial(unsigned int colorAttachment) const;
unsigned int getRenderTargetSerial() const;
unsigned int getDepthbufferSerial() const;
unsigned int getStencilbufferSerial() const;
Renderbuffer *getColorbuffer(unsigned int colorAttachment) const;
Renderbuffer *getColorbuffer() const;
Renderbuffer *getDepthbuffer() const;
Renderbuffer *getStencilbuffer() const;
Renderbuffer *getDepthOrStencilbuffer() const;
......@@ -56,12 +53,10 @@ class Framebuffer
Renderbuffer *getFirstColorBuffer() const;
GLenum getColorbufferType(unsigned int colorAttachment) const;
GLenum getColorbufferType() const;
GLenum getDepthbufferType() const;
GLenum getStencilbufferType() const;
GLuint getColorbufferHandle(unsigned int colorAttachment) const;
GLuint getColorbufferHandle() const;
GLuint getDepthbufferHandle() const;
GLuint getStencilbufferHandle() const;
......
......@@ -1317,12 +1317,12 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma
return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION);
}
if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0)
if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0)
{
return gl::error(GL_INVALID_OPERATION);
}
gl::Renderbuffer *source = framebuffer->getColorbuffer();
gl::Renderbuffer *source = framebuffer->getReadColorbuffer();
GLenum colorbufferFormat = source->getInternalFormat();
// [OpenGL ES 2.0.24] table 3.9
......@@ -1493,12 +1493,12 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION);
}
if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0)
if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0)
{
return gl::error(GL_INVALID_OPERATION);
}
gl::Renderbuffer *source = framebuffer->getColorbuffer();
gl::Renderbuffer *source = framebuffer->getReadColorbuffer();
GLenum colorbufferFormat = source->getInternalFormat();
gl::Texture *texture = NULL;
GLenum textureFormat = GL_RGBA;
......@@ -2398,19 +2398,30 @@ void __stdcall glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenu
return gl::error(GL_INVALID_OPERATION);
}
switch (attachment)
if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
{
case GL_COLOR_ATTACHMENT0:
framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer);
break;
case GL_DEPTH_ATTACHMENT:
framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
break;
case GL_STENCIL_ATTACHMENT:
framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
break;
default:
return gl::error(GL_INVALID_ENUM);
const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
if (colorAttachment >= context->getMaximumRenderTargets())
{
return gl::error(GL_INVALID_VALUE);
}
framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer);
}
else
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT:
framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
break;
case GL_STENCIL_ATTACHMENT:
framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
break;
default:
return gl::error(GL_INVALID_ENUM);
}
}
}
}
......@@ -2432,20 +2443,31 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t
return gl::error(GL_INVALID_ENUM);
}
switch (attachment)
{
case GL_COLOR_ATTACHMENT0:
case GL_DEPTH_ATTACHMENT:
case GL_STENCIL_ATTACHMENT:
break;
default:
return gl::error(GL_INVALID_ENUM);
}
gl::Context *context = gl::getNonLostContext();
if (context)
{
if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
{
const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
if (colorAttachment >= context->getMaximumRenderTargets())
{
return gl::error(GL_INVALID_VALUE);
}
}
else
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT:
case GL_STENCIL_ATTACHMENT:
break;
default:
return gl::error(GL_INVALID_ENUM);
}
}
if (texture == 0)
{
textarget = GL_NONE;
......@@ -2522,11 +2544,24 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t
return gl::error(GL_INVALID_OPERATION);
}
switch (attachment)
if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
{
case GL_COLOR_ATTACHMENT0: framebuffer->setColorbuffer(textarget, texture); break;
case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break;
case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
if (colorAttachment >= context->getMaximumRenderTargets())
{
return gl::error(GL_INVALID_VALUE);
}
framebuffer->setColorbuffer(colorAttachment, textarget, texture);
}
else
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break;
case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
}
}
}
}
......@@ -3200,21 +3235,33 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
GLenum attachmentType;
GLuint attachmentHandle;
switch (attachment)
if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
{
case GL_COLOR_ATTACHMENT0:
attachmentType = framebuffer->getColorbufferType();
attachmentHandle = framebuffer->getColorbufferHandle();
break;
case GL_DEPTH_ATTACHMENT:
attachmentType = framebuffer->getDepthbufferType();
attachmentHandle = framebuffer->getDepthbufferHandle();
break;
case GL_STENCIL_ATTACHMENT:
attachmentType = framebuffer->getStencilbufferType();
attachmentHandle = framebuffer->getStencilbufferHandle();
break;
default: return gl::error(GL_INVALID_ENUM);
const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT);
if (colorAttachment >= context->getMaximumRenderTargets())
{
return gl::error(GL_INVALID_ENUM);
}
attachmentType = framebuffer->getColorbufferType(colorAttachment);
attachmentHandle = framebuffer->getColorbufferHandle(colorAttachment);
}
else
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT:
attachmentType = framebuffer->getDepthbufferType();
attachmentHandle = framebuffer->getDepthbufferHandle();
break;
case GL_STENCIL_ATTACHMENT:
attachmentType = framebuffer->getStencilbufferType();
attachmentHandle = framebuffer->getStencilbufferHandle();
break;
default: return gl::error(GL_INVALID_ENUM);
}
}
GLenum attachmentObjectType; // Type category
......
......@@ -215,7 +215,7 @@ bool Blit::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum des
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......@@ -251,7 +251,7 @@ bool Blit::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum des
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......
......@@ -278,7 +278,7 @@ void Image11::loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GL
void Image11::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source)
{
if (source->getColorbuffer() && source->getColorbuffer()->getActualFormat() == (GLuint)mActualFormat)
if (source->getReadColorbuffer() && source->getReadColorbuffer()->getActualFormat() == (GLuint)mActualFormat)
{
// No conversion needed-- use copyback fastpath
ID3D11Texture2D *colorBufferTexture = NULL;
......
......@@ -484,7 +484,7 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width,
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *surface = NULL;
gl::Renderbuffer *colorbuffer = source->getColorbuffer();
gl::Renderbuffer *colorbuffer = source->getColorbuffer(0);
if (colorbuffer)
{
......
......@@ -814,12 +814,13 @@ bool Renderer11::applyPrimitiveType(GLenum mode, GLsizei count)
bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
{
// TODO: mrt support
// Get the color render buffer and serial
gl::Renderbuffer *renderbufferObject = NULL;
unsigned int renderTargetSerial = 0;
if (framebuffer->getColorbufferType() != GL_NONE)
if (framebuffer->getColorbufferType(0) != GL_NONE)
{
renderbufferObject = framebuffer->getColorbuffer();
renderbufferObject = framebuffer->getColorbuffer(0);
if (!renderbufferObject)
{
......@@ -1464,7 +1465,8 @@ void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *
{
if (clearParams.mask & GL_COLOR_BUFFER_BIT)
{
gl::Renderbuffer *renderbufferObject = frameBuffer->getColorbuffer();
// TODO: mrt clear
gl::Renderbuffer *renderbufferObject = frameBuffer->getColorbuffer(0);
if (renderbufferObject)
{
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(renderbufferObject->getRenderTarget());
......@@ -2406,7 +2408,7 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSt
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface2D *storage, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -2469,7 +2471,7 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterfaceCube *storage, GLenum target, GLint level)
{
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer)
{
ERR("Failed to retrieve the color buffer from the frame buffer.");
......@@ -2844,7 +2846,8 @@ FenceImpl *Renderer11::createFence()
bool Renderer11::getRenderTargetResource(gl::Framebuffer *framebuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource)
{
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
// TODO: mrt supprt
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(colorbuffer->getRenderTarget());
......@@ -3320,13 +3323,14 @@ void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResou
bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget,
const gl::Rectangle &drawRect, BlitTarget target)
{
// TODO: mrt support
ASSERT(readRect.width == drawRect.width && readRect.height == drawRect.height);
gl::Renderbuffer *readBuffer = NULL;
switch (target)
{
case BLIT_RENDERTARGET:
readBuffer = readTarget->getColorbuffer();
readBuffer = readTarget->getColorbuffer(0);
break;
case BLIT_DEPTHSTENCIL:
readBuffer = readTarget->getDepthOrStencilbuffer();
......@@ -3384,7 +3388,7 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
switch (target)
{
case BLIT_RENDERTARGET:
drawBuffer = drawTarget->getColorbuffer();
drawBuffer = drawTarget->getColorbuffer(0);
break;
case BLIT_DEPTHSTENCIL:
drawBuffer = drawTarget->getDepthOrStencilbuffer();
......
......@@ -1221,9 +1221,9 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
// if there is no color attachment we must synthesize a NULL colorattachment
// to keep the D3D runtime happy. This should only be possible if depth texturing.
gl::Renderbuffer *renderbufferObject = NULL;
if (framebuffer->getColorbufferType() != GL_NONE)
if (framebuffer->getColorbufferType(0) != GL_NONE)
{
renderbufferObject = framebuffer->getColorbuffer();
renderbufferObject = framebuffer->getColorbuffer(0);
}
else
{
......@@ -2567,8 +2567,8 @@ bool Renderer9::blitRect(gl::Framebuffer *readFramebuffer, const gl::Rectangle &
if (blitRenderTarget)
{
gl::Renderbuffer *readBuffer = readFramebuffer->getColorbuffer();
gl::Renderbuffer *drawBuffer = drawFramebuffer->getColorbuffer();
gl::Renderbuffer *readBuffer = readFramebuffer->getColorbuffer(0);
gl::Renderbuffer *drawBuffer = drawFramebuffer->getColorbuffer(0);
RenderTarget9 *readRenderTarget = NULL;
RenderTarget9 *drawRenderTarget = NULL;
IDirect3DSurface9* readSurface = NULL;
......@@ -2675,7 +2675,7 @@ void Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsiz
{
RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *surface = NULL;
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(0);
if (colorbuffer)
{
......
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