Separate Colorbuffer into storage and texture variants, implementing a common interface.

TRAC #16284 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@840 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent bbeffbb6
...@@ -1375,7 +1375,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1375,7 +1375,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::Colorbuffer *colorbuffer = framebuffer->getColorbuffer(); gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer();
if (colorbuffer) if (colorbuffer)
{ {
...@@ -1396,7 +1396,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1396,7 +1396,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_DEPTH_BITS: case GL_DEPTH_BITS:
{ {
gl::Framebuffer *framebuffer = getDrawFramebuffer(); gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::DepthStencilbuffer *depthbuffer = framebuffer->getDepthbuffer(); gl::Renderbuffer *depthbuffer = framebuffer->getDepthbuffer();
if (depthbuffer) if (depthbuffer)
{ {
...@@ -1411,7 +1411,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1411,7 +1411,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_STENCIL_BITS: case GL_STENCIL_BITS:
{ {
gl::Framebuffer *framebuffer = getDrawFramebuffer(); gl::Framebuffer *framebuffer = getDrawFramebuffer();
gl::DepthStencilbuffer *stencilbuffer = framebuffer->getStencilbuffer(); gl::Renderbuffer *stencilbuffer = framebuffer->getStencilbuffer();
if (stencilbuffer) if (stencilbuffer)
{ {
...@@ -1911,7 +1911,7 @@ void Context::applyState(GLenum drawMode) ...@@ -1911,7 +1911,7 @@ void Context::applyState(GLenum drawMode)
} }
// get the maximum size of the stencil ref // get the maximum size of the stencil ref
gl::DepthStencilbuffer *stencilbuffer = framebufferObject->getStencilbuffer(); gl::Renderbuffer *stencilbuffer = framebufferObject->getStencilbuffer();
GLuint maxStencil = (1 << stencilbuffer->getStencilSize()) - 1; GLuint maxStencil = (1 << stencilbuffer->getStencilSize()) - 1;
mDevice->SetRenderState(adjustedFrontFace == GL_CCW ? D3DRS_STENCILWRITEMASK : D3DRS_CCW_STENCILWRITEMASK, mState.stencilWritemask); mDevice->SetRenderState(adjustedFrontFace == GL_CCW ? D3DRS_STENCILWRITEMASK : D3DRS_CCW_STENCILWRITEMASK, mState.stencilWritemask);
...@@ -1978,7 +1978,7 @@ void Context::applyState(GLenum drawMode) ...@@ -1978,7 +1978,7 @@ void Context::applyState(GLenum drawMode)
{ {
if (mState.polygonOffsetFill) if (mState.polygonOffsetFill)
{ {
gl::DepthStencilbuffer *depthbuffer = framebufferObject->getDepthbuffer(); gl::Renderbuffer *depthbuffer = framebufferObject->getDepthbuffer();
if (depthbuffer) if (depthbuffer)
{ {
mDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, *((DWORD*)&mState.polygonOffsetFactor)); mDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, *((DWORD*)&mState.polygonOffsetFactor));
...@@ -3616,8 +3616,8 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1 ...@@ -3616,8 +3616,8 @@ void Context::blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1
if (mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) if (mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT))
{ {
DepthStencilbuffer *readDSBuffer = NULL; Renderbuffer *readDSBuffer = NULL;
DepthStencilbuffer *drawDSBuffer = NULL; Renderbuffer *drawDSBuffer = NULL;
// We support OES_packed_depth_stencil, and do not support a separately attached depth and stencil buffer, so if we have // We support OES_packed_depth_stencil, and do not support a separately attached depth and stencil buffer, so if we have
// both a depth and stencil buffer, it will be the same buffer. // both a depth and stencil buffer, it will be the same buffer.
......
...@@ -181,40 +181,19 @@ unsigned int Framebuffer::getStencilbufferSerial() ...@@ -181,40 +181,19 @@ unsigned int Framebuffer::getStencilbufferSerial()
return 0; return 0;
} }
Colorbuffer *Framebuffer::getColorbuffer() Renderbuffer *Framebuffer::getColorbuffer()
{ {
Renderbuffer *renderbuffer = mColorbufferPointer.get(); return mColorbufferPointer.get();
if (renderbuffer)
{
return renderbuffer->getColorbuffer();
}
return NULL;
} }
DepthStencilbuffer *Framebuffer::getDepthbuffer() Renderbuffer *Framebuffer::getDepthbuffer()
{ {
Renderbuffer *renderbuffer = mDepthbufferPointer.get(); return mDepthbufferPointer.get();
if (renderbuffer)
{
return renderbuffer->getDepthbuffer();
}
return NULL;
} }
DepthStencilbuffer *Framebuffer::getStencilbuffer() Renderbuffer *Framebuffer::getStencilbuffer()
{ {
Renderbuffer *renderbuffer = mStencilbufferPointer.get(); return mStencilbufferPointer.get();
if (renderbuffer)
{
return renderbuffer->getStencilbuffer();
}
return NULL;
} }
GLenum Framebuffer::getColorbufferType() GLenum Framebuffer::getColorbufferType()
...@@ -251,7 +230,7 @@ bool Framebuffer::hasStencil() ...@@ -251,7 +230,7 @@ bool Framebuffer::hasStencil()
{ {
if (mStencilbufferType != GL_NONE) if (mStencilbufferType != GL_NONE)
{ {
DepthStencilbuffer *stencilbufferObject = getStencilbuffer(); Renderbuffer *stencilbufferObject = getStencilbuffer();
if (stencilbufferObject) if (stencilbufferObject)
{ {
...@@ -270,7 +249,7 @@ GLenum Framebuffer::completeness() ...@@ -270,7 +249,7 @@ GLenum Framebuffer::completeness()
if (mColorbufferType != GL_NONE) if (mColorbufferType != GL_NONE)
{ {
Colorbuffer *colorbuffer = getColorbuffer(); Renderbuffer *colorbuffer = getColorbuffer();
if (!colorbuffer) if (!colorbuffer)
{ {
...@@ -296,8 +275,8 @@ GLenum Framebuffer::completeness() ...@@ -296,8 +275,8 @@ GLenum Framebuffer::completeness()
return GL_FRAMEBUFFER_UNSUPPORTED; return GL_FRAMEBUFFER_UNSUPPORTED;
} }
if ((colorbuffer->getType() == GL_FLOAT && !getContext()->supportsFloat32RenderableTextures()) || if ((dx2es::IsFloat32Format(colorbuffer->getD3DFormat()) && !getContext()->supportsFloat32RenderableTextures()) ||
(colorbuffer->getType() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16RenderableTextures())) (dx2es::IsFloat16Format(colorbuffer->getD3DFormat()) && !getContext()->supportsFloat16RenderableTextures()))
{ {
return GL_FRAMEBUFFER_UNSUPPORTED; return GL_FRAMEBUFFER_UNSUPPORTED;
} }
...@@ -318,8 +297,8 @@ GLenum Framebuffer::completeness() ...@@ -318,8 +297,8 @@ GLenum Framebuffer::completeness()
return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
} }
DepthStencilbuffer *depthbuffer = NULL; Renderbuffer *depthbuffer = NULL;
DepthStencilbuffer *stencilbuffer = NULL; Renderbuffer *stencilbuffer = NULL;
if (mDepthbufferType != GL_NONE) if (mDepthbufferType != GL_NONE)
{ {
...@@ -412,17 +391,17 @@ GLenum Framebuffer::completeness() ...@@ -412,17 +391,17 @@ GLenum Framebuffer::completeness()
return GL_FRAMEBUFFER_COMPLETE; return GL_FRAMEBUFFER_COMPLETE;
} }
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil) DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
{ {
mColorbufferType = GL_RENDERBUFFER; mColorbufferPointer.set(new Renderbuffer(0, colorbuffer));
mDepthbufferType = (depthStencil->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE;
mStencilbufferType = (depthStencil->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE;
mColorbufferPointer.set(new Renderbuffer(0, color));
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil); Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil);
mDepthbufferPointer.set(depthStencilRenderbuffer); mDepthbufferPointer.set(depthStencilRenderbuffer);
mStencilbufferPointer.set(depthStencilRenderbuffer); mStencilbufferPointer.set(depthStencilRenderbuffer);
mColorbufferType = GL_RENDERBUFFER;
mDepthbufferType = (depthStencilRenderbuffer->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE;
mStencilbufferType = (depthStencilRenderbuffer->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE;
} }
int Framebuffer::getSamples() int Framebuffer::getSamples()
......
...@@ -46,9 +46,9 @@ class Framebuffer ...@@ -46,9 +46,9 @@ class Framebuffer
unsigned int getDepthbufferSerial(); unsigned int getDepthbufferSerial();
unsigned int getStencilbufferSerial(); unsigned int getStencilbufferSerial();
Colorbuffer *getColorbuffer(); Renderbuffer *getColorbuffer();
DepthStencilbuffer *getDepthbuffer(); Renderbuffer *getDepthbuffer();
DepthStencilbuffer *getStencilbuffer(); Renderbuffer *getStencilbuffer();
GLenum getColorbufferType(); GLenum getColorbufferType();
GLenum getDepthbufferType(); GLenum getDepthbufferType();
...@@ -82,7 +82,7 @@ class Framebuffer ...@@ -82,7 +82,7 @@ class Framebuffer
class DefaultFramebuffer : public Framebuffer class DefaultFramebuffer : public Framebuffer
{ {
public: public:
DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil); DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
virtual GLenum completeness(); virtual GLenum completeness();
......
...@@ -25,37 +25,82 @@ class Texture; ...@@ -25,37 +25,82 @@ class Texture;
class Colorbuffer; class Colorbuffer;
class DepthStencilbuffer; class DepthStencilbuffer;
class RenderbufferInterface
{
public:
RenderbufferInterface();
virtual ~RenderbufferInterface() {};
virtual IDirect3DSurface9 *getRenderTarget() = 0;
virtual IDirect3DSurface9 *getDepthStencil() = 0;
virtual GLsizei getWidth() const = 0;
virtual GLsizei getHeight() const = 0;
virtual GLenum getInternalFormat() const = 0;
virtual D3DFORMAT getD3DFormat() const = 0;
virtual GLsizei getSamples() const = 0;
GLuint getRedSize() const;
GLuint getGreenSize() const;
GLuint getBlueSize() const;
GLuint getAlphaSize() const;
GLuint getDepthSize() const;
GLuint getStencilSize() const;
unsigned int getSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface);
static unsigned int issueSerial();
const unsigned int mSerial;
static unsigned int mCurrentSerial;
};
class RenderbufferTexture : public RenderbufferInterface
{
public:
RenderbufferTexture(Texture *texture, GLenum target);
virtual ~RenderbufferTexture();
IDirect3DSurface9 *getRenderTarget();
IDirect3DSurface9 *getDepthStencil();
GLsizei getWidth() const;
GLsizei getHeight() const;
GLenum getInternalFormat() const;
D3DFORMAT getD3DFormat() const;
GLsizei getSamples() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture);
Texture *mTexture;
GLenum mTarget;
};
// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage // A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
// is called. The specific concrete type depends on whether the internal format is // is called. The specific concrete type depends on whether the internal format is
// colour depth, stencil or packed depth/stencil. // colour depth, stencil or packed depth/stencil.
class RenderbufferStorage class RenderbufferStorage : public RenderbufferInterface
{ {
public: public:
RenderbufferStorage(); RenderbufferStorage();
virtual ~RenderbufferStorage() = 0; virtual ~RenderbufferStorage() = 0;
virtual Colorbuffer *getColorbuffer();
virtual DepthStencilbuffer *getDepthbuffer();
virtual DepthStencilbuffer *getStencilbuffer();
virtual IDirect3DSurface9 *getRenderTarget(); virtual IDirect3DSurface9 *getRenderTarget();
virtual IDirect3DSurface9 *getDepthStencil(); virtual IDirect3DSurface9 *getDepthStencil();
virtual GLsizei getWidth() const; virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const; virtual GLsizei getHeight() const;
virtual GLenum getInternalFormat() const; virtual GLenum getInternalFormat() const;
GLuint getRedSize() const;
GLuint getGreenSize() const;
GLuint getBlueSize() const;
GLuint getAlphaSize() const;
GLuint getDepthSize() const;
GLuint getStencilSize() const;
virtual GLsizei getSamples() const;
virtual D3DFORMAT getD3DFormat() const; virtual D3DFORMAT getD3DFormat() const;
virtual GLsizei getSamples() const;
unsigned int getSerial() const;
protected: protected:
GLsizei mWidth; GLsizei mWidth;
...@@ -66,27 +111,17 @@ class RenderbufferStorage ...@@ -66,27 +111,17 @@ class RenderbufferStorage
private: private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage); DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
static unsigned int issueSerial();
const unsigned int mSerial;
static unsigned int mCurrentSerial;
}; };
// Renderbuffer implements the GL renderbuffer object. // Renderbuffer implements the GL renderbuffer object.
// It's only a proxy for a RenderbufferStorage instance; the internal object // It's only a proxy for a RenderbufferInterface instance; the internal object
// can change whenever glRenderbufferStorage is called. // can change whenever glRenderbufferStorage is called.
class Renderbuffer : public RefCountObject class Renderbuffer : public RefCountObject
{ {
public: public:
Renderbuffer(GLuint id, RenderbufferStorage *storage); Renderbuffer(GLuint id, RenderbufferInterface *storage);
~Renderbuffer();
Colorbuffer *getColorbuffer(); virtual ~Renderbuffer();
DepthStencilbuffer *getDepthbuffer();
DepthStencilbuffer *getStencilbuffer();
IDirect3DSurface9 *getRenderTarget(); IDirect3DSurface9 *getRenderTarget();
IDirect3DSurface9 *getDepthStencil(); IDirect3DSurface9 *getDepthStencil();
...@@ -106,40 +141,27 @@ class Renderbuffer : public RefCountObject ...@@ -106,40 +141,27 @@ class Renderbuffer : public RefCountObject
unsigned int getSerial() const; unsigned int getSerial() const;
void setStorage(RenderbufferStorage *newStorage); void setStorage(RenderbufferStorage *newStorage);
RenderbufferStorage *getStorage() { return mStorage; }
private: private:
DISALLOW_COPY_AND_ASSIGN(Renderbuffer); DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
RenderbufferStorage *mStorage; RenderbufferInterface *mInstance;
}; };
class Colorbuffer : public RenderbufferStorage class Colorbuffer : public RenderbufferStorage
{ {
public: public:
explicit Colorbuffer(IDirect3DSurface9 *renderTarget); explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
Colorbuffer(Texture *texture, GLenum target);
Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples); Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples);
virtual ~Colorbuffer(); virtual ~Colorbuffer();
virtual Colorbuffer *getColorbuffer();
virtual IDirect3DSurface9 *getRenderTarget(); virtual IDirect3DSurface9 *getRenderTarget();
virtual GLsizei getWidth() const;
virtual GLsizei getHeight() const;
virtual GLenum getInternalFormat() const;
virtual GLenum getType() const;
virtual D3DFORMAT getD3DFormat() const;
private: private:
DISALLOW_COPY_AND_ASSIGN(Colorbuffer); DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
IDirect3DSurface9 *mRenderTarget; IDirect3DSurface9 *mRenderTarget;
Texture *mTexture;
GLenum mTarget;
}; };
class DepthStencilbuffer : public RenderbufferStorage class DepthStencilbuffer : public RenderbufferStorage
...@@ -150,14 +172,13 @@ class DepthStencilbuffer : public RenderbufferStorage ...@@ -150,14 +172,13 @@ class DepthStencilbuffer : public RenderbufferStorage
~DepthStencilbuffer(); ~DepthStencilbuffer();
virtual DepthStencilbuffer *getDepthbuffer();
virtual DepthStencilbuffer *getStencilbuffer();
virtual IDirect3DSurface9 *getDepthStencil(); virtual IDirect3DSurface9 *getDepthStencil();
protected:
IDirect3DSurface9 *mDepthStencil;
private: private:
DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer); DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
IDirect3DSurface9 *mDepthStencil;
}; };
class Depthbuffer : public DepthStencilbuffer class Depthbuffer : public DepthStencilbuffer
...@@ -168,9 +189,6 @@ class Depthbuffer : public DepthStencilbuffer ...@@ -168,9 +189,6 @@ class Depthbuffer : public DepthStencilbuffer
virtual ~Depthbuffer(); virtual ~Depthbuffer();
virtual DepthStencilbuffer *getDepthbuffer();
virtual DepthStencilbuffer *getStencilbuffer();
private: private:
DISALLOW_COPY_AND_ASSIGN(Depthbuffer); DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
}; };
...@@ -183,9 +201,6 @@ class Stencilbuffer : public DepthStencilbuffer ...@@ -183,9 +201,6 @@ class Stencilbuffer : public DepthStencilbuffer
virtual ~Stencilbuffer(); virtual ~Stencilbuffer();
virtual DepthStencilbuffer *getDepthbuffer();
virtual DepthStencilbuffer *getStencilbuffer();
private: private:
DISALLOW_COPY_AND_ASSIGN(Stencilbuffer); DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
}; };
......
...@@ -1622,6 +1622,7 @@ void Texture2D::bindTexImage(egl::Surface *surface) ...@@ -1622,6 +1622,7 @@ void Texture2D::bindTexImage(egl::Surface *surface)
mTexture = surface->getOffscreenTexture(); mTexture = surface->getOffscreenTexture();
mSerial = issueSerial(); mSerial = issueSerial();
mColorbufferProxy.set(NULL);
mDirtyImages = true; mDirtyImages = true;
mIsRenderable = true; mIsRenderable = true;
mSurface = surface; mSurface = surface;
...@@ -1640,6 +1641,7 @@ void Texture2D::releaseTexImage() ...@@ -1640,6 +1641,7 @@ void Texture2D::releaseTexImage()
mTexture->Release(); mTexture->Release();
mTexture = NULL; mTexture = NULL;
mSerial = 0; mSerial = 0;
mColorbufferProxy.set(NULL);
} }
for (int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
...@@ -1913,6 +1915,7 @@ void Texture2D::createTexture() ...@@ -1913,6 +1915,7 @@ void Texture2D::createTexture()
mTexture = texture; mTexture = texture;
mSerial = issueSerial(); mSerial = issueSerial();
mColorbufferProxy.set(NULL);
mDirtyImages = true; mDirtyImages = true;
mIsRenderable = false; mIsRenderable = false;
} }
...@@ -2008,6 +2011,7 @@ void Texture2D::convertToRenderTarget() ...@@ -2008,6 +2011,7 @@ void Texture2D::convertToRenderTarget()
mTexture = texture; mTexture = texture;
mSerial = issueSerial(); mSerial = issueSerial();
mColorbufferProxy.set(NULL);
mDirtyImages = true; mDirtyImages = true;
mIsRenderable = true; mIsRenderable = true;
} }
...@@ -2081,7 +2085,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target) ...@@ -2081,7 +2085,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target)
if (mColorbufferProxy.get() == NULL) if (mColorbufferProxy.get() == NULL)
{ {
mColorbufferProxy.set(new Renderbuffer(id(), new Colorbuffer(this, target))); mColorbufferProxy.set(new Renderbuffer(id(), new RenderbufferTexture(this, target)));
} }
return mColorbufferProxy.get(); return mColorbufferProxy.get();
...@@ -2363,6 +2367,7 @@ void TextureCubeMap::createTexture() ...@@ -2363,6 +2367,7 @@ void TextureCubeMap::createTexture()
mTexture = texture; mTexture = texture;
mSerial = issueSerial(); mSerial = issueSerial();
for(int face = 0; face < 6; face++) mFaceProxies[face].set(NULL);
mDirtyImages = true; mDirtyImages = true;
mIsRenderable = false; mIsRenderable = false;
} }
...@@ -2463,6 +2468,7 @@ void TextureCubeMap::convertToRenderTarget() ...@@ -2463,6 +2468,7 @@ void TextureCubeMap::convertToRenderTarget()
mTexture = texture; mTexture = texture;
mSerial = issueSerial(); mSerial = issueSerial();
for(int face = 0; face < 6; face++) mFaceProxies[face].set(NULL);
mDirtyImages = true; mDirtyImages = true;
mIsRenderable = true; mIsRenderable = true;
} }
...@@ -2515,6 +2521,7 @@ void TextureCubeMap::redefineImage(int face, GLint level, GLenum format, GLsizei ...@@ -2515,6 +2521,7 @@ void TextureCubeMap::redefineImage(int face, GLint level, GLenum format, GLsizei
mTexture->Release(); mTexture->Release();
mTexture = NULL; mTexture = NULL;
mSerial = 0; mSerial = 0;
for(int face = 0; face < 6; face++) mFaceProxies[face].set(NULL);
mDirtyImages = true; mDirtyImages = true;
} }
} }
...@@ -2733,7 +2740,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target) ...@@ -2733,7 +2740,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target)
if (mFaceProxies[face].get() == NULL) if (mFaceProxies[face].get() == NULL)
{ {
mFaceProxies[face].set(new Renderbuffer(id(), new Colorbuffer(this, target))); mFaceProxies[face].set(new Renderbuffer(id(), new RenderbufferTexture(this, target)));
} }
return mFaceProxies[face].get(); return mFaceProxies[face].get();
......
...@@ -177,7 +177,7 @@ class Texture : public RefCountObject ...@@ -177,7 +177,7 @@ class Texture : public RefCountObject
static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager. static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager.
protected: protected:
friend class Colorbuffer; friend class RenderbufferTexture;
void setImage(GLint unpackAlignment, const void *pixels, Image *image); void setImage(GLint unpackAlignment, const void *pixels, Image *image);
bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image); bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);
......
...@@ -1092,7 +1092,7 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma ...@@ -1092,7 +1092,7 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
gl::Colorbuffer *source = framebuffer->getColorbuffer(); gl::Renderbuffer *source = framebuffer->getColorbuffer();
GLenum colorbufferFormat = source->getInternalFormat(); GLenum colorbufferFormat = source->getInternalFormat();
// [OpenGL ES 2.0.24] table 3.9 // [OpenGL ES 2.0.24] table 3.9
...@@ -1246,7 +1246,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL ...@@ -1246,7 +1246,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
gl::Colorbuffer *source = framebuffer->getColorbuffer(); gl::Renderbuffer *source = framebuffer->getColorbuffer();
GLenum colorbufferFormat = source->getInternalFormat(); GLenum colorbufferFormat = source->getInternalFormat();
gl::Texture *texture = NULL; gl::Texture *texture = NULL;
......
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