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