Passes the Renderer to various objects at construction time.

TRAC #22000 Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1406 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 16418b11
...@@ -17,9 +17,10 @@ ...@@ -17,9 +17,10 @@
namespace gl namespace gl
{ {
Buffer::Buffer(GLuint id) : RefCountObject(id) Buffer::Buffer(rx::Renderer *renderer, GLuint id) : RefCountObject(id)
{ {
mRenderer = getDisplay()->getRenderer9(); ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
mRenderer = static_cast<rx::Renderer9*>(renderer);
mContents = NULL; mContents = NULL;
mSize = 0; mSize = 0;
mUsage = GL_DYNAMIC_DRAW; mUsage = GL_DYNAMIC_DRAW;
......
...@@ -29,7 +29,7 @@ class StaticIndexBuffer; ...@@ -29,7 +29,7 @@ class StaticIndexBuffer;
class Buffer : public RefCountObject class Buffer : public RefCountObject
{ {
public: public:
explicit Buffer(GLuint id); Buffer(rx::Renderer *renderer, GLuint id);
virtual ~Buffer(); virtual ~Buffer();
......
...@@ -321,8 +321,8 @@ void Context::makeCurrent(egl::Surface *surface) ...@@ -321,8 +321,8 @@ void Context::makeCurrent(egl::Surface *surface)
// Wrap the existing swapchain resources into GL objects and assign them to the '0' names // Wrap the existing swapchain resources into GL objects and assign them to the '0' names
rx::SwapChain *swapchain = surface->getSwapChain(); rx::SwapChain *swapchain = surface->getSwapChain();
Colorbuffer *colorbufferZero = new Colorbuffer(swapchain); Colorbuffer *colorbufferZero = new Colorbuffer(mRenderer, swapchain);
DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(swapchain); DepthStencilbuffer *depthStencilbufferZero = new DepthStencilbuffer(mRenderer, swapchain);
Framebuffer *framebufferZero = new DefaultFramebuffer(mRenderer, colorbufferZero, depthStencilbufferZero); Framebuffer *framebufferZero = new DefaultFramebuffer(mRenderer, colorbufferZero, depthStencilbufferZero);
setFramebufferZero(framebufferZero); setFramebufferZero(framebufferZero);
...@@ -1250,8 +1250,31 @@ void Context::setFramebufferZero(Framebuffer *buffer) ...@@ -1250,8 +1250,31 @@ void Context::setFramebufferZero(Framebuffer *buffer)
} }
} }
void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer) void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
{ {
RenderbufferStorage *renderbuffer = NULL;
switch (internalformat)
{
case GL_DEPTH_COMPONENT16:
renderbuffer = new gl::Depthbuffer(mRenderer, width, height, samples);
break;
case GL_RGBA4:
case GL_RGB5_A1:
case GL_RGB565:
case GL_RGB8_OES:
case GL_RGBA8_OES:
renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples);
break;
case GL_STENCIL_INDEX8:
renderbuffer = new gl::Stencilbuffer(mRenderer, width, height, samples);
break;
case GL_DEPTH24_STENCIL8_OES:
renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples);
break;
default:
UNREACHABLE(); return;
}
Renderbuffer *renderbufferObject = mState.renderbuffer.get(); Renderbuffer *renderbufferObject = mState.renderbuffer.get();
renderbufferObject->setStorage(renderbuffer); renderbufferObject->setStorage(renderbuffer);
} }
......
...@@ -426,7 +426,7 @@ class Context ...@@ -426,7 +426,7 @@ class Context
void setFramebufferZero(Framebuffer *framebuffer); void setFramebufferZero(Framebuffer *framebuffer);
void setRenderbufferStorage(RenderbufferStorage *renderbuffer); void setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples);
void setVertexAttrib(GLuint index, const GLfloat *values); void setVertexAttrib(GLuint index, const GLfloat *values);
void setVertexAttribDivisor(GLuint index, GLuint divisor); void setVertexAttribDivisor(GLuint index, GLuint divisor);
......
...@@ -219,7 +219,7 @@ Renderbuffer *Framebuffer::getNullColorbuffer() ...@@ -219,7 +219,7 @@ Renderbuffer *Framebuffer::getNullColorbuffer()
if (!nullbuffer || if (!nullbuffer ||
width != nullbuffer->getWidth() || height != nullbuffer->getHeight()) width != nullbuffer->getWidth() || height != nullbuffer->getHeight())
{ {
nullbuffer = new Renderbuffer(0, new Colorbuffer(width, height, GL_NONE, 0)); nullbuffer = new Renderbuffer(mRenderer, 0, new Colorbuffer(mRenderer, width, height, GL_NONE, 0));
mNullColorbufferPointer.set(nullbuffer); mNullColorbufferPointer.set(nullbuffer);
} }
...@@ -477,9 +477,9 @@ GLenum Framebuffer::completeness() ...@@ -477,9 +477,9 @@ GLenum Framebuffer::completeness()
DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil) DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil)
: Framebuffer(renderer) : Framebuffer(renderer)
{ {
mColorbufferPointer.set(new Renderbuffer(0, colorbuffer)); mColorbufferPointer.set(new Renderbuffer(mRenderer, 0, colorbuffer));
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil); Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(mRenderer, 0, depthStencil);
mDepthbufferPointer.set(depthStencilRenderbuffer); mDepthbufferPointer.set(depthStencilRenderbuffer);
mStencilbufferPointer.set(depthStencilRenderbuffer); mStencilbufferPointer.set(depthStencilRenderbuffer);
......
...@@ -136,7 +136,7 @@ void InfoLog::reset() ...@@ -136,7 +136,7 @@ void InfoLog::reset()
} }
} }
Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle) Program::Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle) : mResourceManager(manager), mHandle(handle)
{ {
mFragmentShader = NULL; mFragmentShader = NULL;
mVertexShader = NULL; mVertexShader = NULL;
...@@ -144,6 +144,7 @@ Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(man ...@@ -144,6 +144,7 @@ Program::Program(ResourceManager *manager, GLuint handle) : mResourceManager(man
mDeleteStatus = false; mDeleteStatus = false;
mLinked = false; mLinked = false;
mRefCount = 0; mRefCount = 0;
mRenderer = renderer;
} }
Program::~Program() Program::~Program()
...@@ -247,7 +248,7 @@ bool Program::link() ...@@ -247,7 +248,7 @@ bool Program::link()
mInfoLog.reset(); mInfoLog.reset();
mProgramBinary.set(new ProgramBinary()); mProgramBinary.set(new ProgramBinary(mRenderer));
mLinked = mProgramBinary->link(mInfoLog, mAttributeBindings, mFragmentShader, mVertexShader); mLinked = mProgramBinary->link(mInfoLog, mAttributeBindings, mFragmentShader, mVertexShader);
return mLinked; return mLinked;
...@@ -304,7 +305,7 @@ bool Program::setProgramBinary(const void *binary, GLsizei length) ...@@ -304,7 +305,7 @@ bool Program::setProgramBinary(const void *binary, GLsizei length)
mInfoLog.reset(); mInfoLog.reset();
mProgramBinary.set(new ProgramBinary()); mProgramBinary.set(new ProgramBinary(mRenderer));
mLinked = mProgramBinary->load(mInfoLog, binary, length); mLinked = mProgramBinary->load(mInfoLog, binary, length);
if (!mLinked) if (!mLinked)
{ {
......
...@@ -57,7 +57,7 @@ class InfoLog ...@@ -57,7 +57,7 @@ class InfoLog
class Program class Program
{ {
public: public:
Program(ResourceManager *manager, GLuint handle); Program(rx::Renderer *renderer, ResourceManager *manager, GLuint handle);
~Program(); ~Program();
...@@ -112,6 +112,7 @@ class Program ...@@ -112,6 +112,7 @@ class Program
unsigned int mRefCount; unsigned int mRefCount;
ResourceManager *mResourceManager; ResourceManager *mResourceManager;
rx::Renderer *mRenderer;
const GLuint mHandle; const GLuint mHandle;
InfoLog mInfoLog; InfoLog mInfoLog;
......
...@@ -62,9 +62,10 @@ UniformLocation::UniformLocation(const std::string &_name, unsigned int element, ...@@ -62,9 +62,10 @@ UniformLocation::UniformLocation(const std::string &_name, unsigned int element,
unsigned int ProgramBinary::mCurrentSerial = 1; unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial()) ProgramBinary::ProgramBinary(rx::Renderer *renderer) : RefCountObject(0), mSerial(issueSerial())
{ {
mRenderer = getDisplay()->getRenderer9(); ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
mRenderer = static_cast<rx::Renderer9*>(renderer);
mDevice = mRenderer->getDevice(); // D3D9_REPLACE mDevice = mRenderer->getDevice(); // D3D9_REPLACE
mPixelExecutable = NULL; mPixelExecutable = NULL;
......
...@@ -98,7 +98,7 @@ struct UniformLocation ...@@ -98,7 +98,7 @@ struct UniformLocation
class ProgramBinary : public RefCountObject class ProgramBinary : public RefCountObject
{ {
public: public:
ProgramBinary(); explicit ProgramBinary(rx::Renderer *renderer);
~ProgramBinary(); ~ProgramBinary();
IDirect3DPixelShader9 *getPixelShader(); IDirect3DPixelShader9 *getPixelShader();
......
...@@ -203,7 +203,7 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const ...@@ -203,7 +203,7 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const
////// Renderbuffer Implementation ////// ////// Renderbuffer Implementation //////
Renderbuffer::Renderbuffer(GLuint id, RenderbufferInterface *instance) : RefCountObject(id) Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
{ {
ASSERT(instance != NULL); ASSERT(instance != NULL);
mInstance = instance; mInstance = instance;
...@@ -382,7 +382,7 @@ unsigned int RenderbufferStorage::issueCubeSerials() ...@@ -382,7 +382,7 @@ unsigned int RenderbufferStorage::issueCubeSerials()
return firstSerial; return firstSerial;
} }
Colorbuffer::Colorbuffer(rx::SwapChain *swapChain) Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{ {
mRenderTarget = swapChain->getRenderTarget(); mRenderTarget = swapChain->getRenderTarget();
if (mRenderTarget) if (mRenderTarget)
...@@ -399,13 +399,14 @@ Colorbuffer::Colorbuffer(rx::SwapChain *swapChain) ...@@ -399,13 +399,14 @@ Colorbuffer::Colorbuffer(rx::SwapChain *swapChain)
} }
} }
Colorbuffer::Colorbuffer(int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL) Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
{ {
rx::Renderer9 *renderer = getDisplay()->getRenderer9(); ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(renderer); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer9->getDevice(); // D3D9_REPLACE
D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format); D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format);
int supportedSamples = renderer->getNearestSupportedSamples(requestedFormat, samples); int supportedSamples = renderer9->getNearestSupportedSamples(requestedFormat, samples);
if (supportedSamples == -1) if (supportedSamples == -1)
{ {
...@@ -457,7 +458,7 @@ IDirect3DSurface9 *Colorbuffer::getRenderTarget() ...@@ -457,7 +458,7 @@ IDirect3DSurface9 *Colorbuffer::getRenderTarget()
return mRenderTarget; return mRenderTarget;
} }
DepthStencilbuffer::DepthStencilbuffer(rx::SwapChain *swapChain) DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{ {
mDepthStencil = swapChain->getDepthStencil(); mDepthStencil = swapChain->getDepthStencil();
if (mDepthStencil) if (mDepthStencil)
...@@ -474,14 +475,15 @@ DepthStencilbuffer::DepthStencilbuffer(rx::SwapChain *swapChain) ...@@ -474,14 +475,15 @@ DepthStencilbuffer::DepthStencilbuffer(rx::SwapChain *swapChain)
} }
} }
DepthStencilbuffer::DepthStencilbuffer(int width, int height, GLsizei samples) DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
{ {
rx::Renderer9 *renderer = getDisplay()->getRenderer9(); ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(renderer); // D3D9_REPLACE
IDirect3DDevice9 *device = renderer9->getDevice(); // D3D9_REPLACE
mDepthStencil = NULL; mDepthStencil = NULL;
int supportedSamples = renderer->getNearestSupportedSamples(D3DFMT_D24S8, samples); int supportedSamples = renderer9->getNearestSupportedSamples(D3DFMT_D24S8, samples);
if (supportedSamples == -1) if (supportedSamples == -1)
{ {
...@@ -533,7 +535,7 @@ IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil() ...@@ -533,7 +535,7 @@ IDirect3DSurface9 *DepthStencilbuffer::getDepthStencil()
return mDepthStencil; return mDepthStencil;
} }
Depthbuffer::Depthbuffer(int width, int height, GLsizei samples) : DepthStencilbuffer(width, height, samples) Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
{ {
if (mDepthStencil) if (mDepthStencil)
{ {
...@@ -547,7 +549,7 @@ Depthbuffer::~Depthbuffer() ...@@ -547,7 +549,7 @@ Depthbuffer::~Depthbuffer()
{ {
} }
Stencilbuffer::Stencilbuffer(int width, int height, GLsizei samples) : DepthStencilbuffer(width, height, samples) Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
{ {
if (mDepthStencil) if (mDepthStencil)
{ {
......
...@@ -21,6 +21,11 @@ ...@@ -21,6 +21,11 @@
#include "renderer/SwapChain.h" #include "renderer/SwapChain.h"
namespace rx
{
class Renderer;
}
namespace gl namespace gl
{ {
class Texture2D; class Texture2D;
...@@ -163,7 +168,7 @@ class RenderbufferStorage : public RenderbufferInterface ...@@ -163,7 +168,7 @@ class RenderbufferStorage : public RenderbufferInterface
class Renderbuffer : public RefCountObject class Renderbuffer : public RefCountObject
{ {
public: public:
Renderbuffer(GLuint id, RenderbufferInterface *storage); Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *storage);
virtual ~Renderbuffer(); virtual ~Renderbuffer();
...@@ -202,8 +207,8 @@ class Renderbuffer : public RefCountObject ...@@ -202,8 +207,8 @@ class Renderbuffer : public RefCountObject
class Colorbuffer : public RenderbufferStorage class Colorbuffer : public RenderbufferStorage
{ {
public: public:
explicit Colorbuffer(rx::SwapChain *swapChain); Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
Colorbuffer(GLsizei width, GLsizei height, GLenum format, GLsizei samples); Colorbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples);
virtual ~Colorbuffer(); virtual ~Colorbuffer();
...@@ -218,8 +223,8 @@ class Colorbuffer : public RenderbufferStorage ...@@ -218,8 +223,8 @@ class Colorbuffer : public RenderbufferStorage
class DepthStencilbuffer : public RenderbufferStorage class DepthStencilbuffer : public RenderbufferStorage
{ {
public: public:
explicit DepthStencilbuffer(rx::SwapChain *swapChain); DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain);
DepthStencilbuffer(GLsizei width, GLsizei height, GLsizei samples); DepthStencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
~DepthStencilbuffer(); ~DepthStencilbuffer();
...@@ -235,7 +240,7 @@ class DepthStencilbuffer : public RenderbufferStorage ...@@ -235,7 +240,7 @@ class DepthStencilbuffer : public RenderbufferStorage
class Depthbuffer : public DepthStencilbuffer class Depthbuffer : public DepthStencilbuffer
{ {
public: public:
Depthbuffer(GLsizei width, GLsizei height, GLsizei samples); Depthbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
virtual ~Depthbuffer(); virtual ~Depthbuffer();
...@@ -246,7 +251,7 @@ class Depthbuffer : public DepthStencilbuffer ...@@ -246,7 +251,7 @@ class Depthbuffer : public DepthStencilbuffer
class Stencilbuffer : public DepthStencilbuffer class Stencilbuffer : public DepthStencilbuffer
{ {
public: public:
Stencilbuffer(GLsizei width, GLsizei height, GLsizei samples); Stencilbuffer(rx::Renderer *renderer, GLsizei width, GLsizei height, GLsizei samples);
virtual ~Stencilbuffer(); virtual ~Stencilbuffer();
......
...@@ -98,7 +98,7 @@ GLuint ResourceManager::createProgram() ...@@ -98,7 +98,7 @@ GLuint ResourceManager::createProgram()
{ {
GLuint handle = mProgramShaderHandleAllocator.allocate(); GLuint handle = mProgramShaderHandleAllocator.allocate();
mProgramMap[handle] = new Program(this, handle); mProgramMap[handle] = new Program(mRenderer, this, handle);
return handle; return handle;
} }
...@@ -278,7 +278,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer) ...@@ -278,7 +278,7 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
{ {
if (buffer != 0 && !getBuffer(buffer)) if (buffer != 0 && !getBuffer(buffer))
{ {
Buffer *bufferObject = new Buffer(buffer); Buffer *bufferObject = new Buffer(mRenderer, buffer);
mBufferMap[buffer] = bufferObject; mBufferMap[buffer] = bufferObject;
bufferObject->addRef(); bufferObject->addRef();
} }
...@@ -313,7 +313,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer) ...@@ -313,7 +313,7 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{ {
if (renderbuffer != 0 && !getRenderbuffer(renderbuffer)) if (renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{ {
Renderbuffer *renderbufferObject = new Renderbuffer(renderbuffer, new Colorbuffer(0, 0, GL_RGBA4, 0)); Renderbuffer *renderbufferObject = new Renderbuffer(mRenderer, renderbuffer, new Colorbuffer(mRenderer, 0, 0, GL_RGBA4, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject; mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef(); renderbufferObject->addRef();
} }
......
...@@ -445,7 +445,7 @@ void Texture2D::bindTexImage(egl::Surface *surface) ...@@ -445,7 +445,7 @@ void Texture2D::bindTexImage(egl::Surface *surface)
delete mTexStorage; delete mTexStorage;
rx::SwapChain *swapchain = surface->getSwapChain(); // D3D9_REPLACE rx::SwapChain *swapchain = surface->getSwapChain(); // D3D9_REPLACE
mTexStorage = new TextureStorage2D(swapchain); mTexStorage = new TextureStorage2D(mRenderer, swapchain);
mDirtyImages = true; mDirtyImages = true;
mSurface = surface; mSurface = surface;
...@@ -582,7 +582,7 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo ...@@ -582,7 +582,7 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{ {
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height); mTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
mImmutable = true; mImmutable = true;
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
...@@ -723,7 +723,7 @@ void Texture2D::createTexture() ...@@ -723,7 +723,7 @@ void Texture2D::createTexture()
GLenum internalformat = mImageArray[0].getInternalFormat(); GLenum internalformat = mImageArray[0].getInternalFormat();
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height); mTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged()) if (mTexStorage->isManaged())
{ {
...@@ -766,7 +766,7 @@ void Texture2D::convertToRenderTarget() ...@@ -766,7 +766,7 @@ void Texture2D::convertToRenderTarget()
GLint levels = creationLevels(width, height); GLint levels = creationLevels(width, height);
GLenum internalformat = mImageArray[0].getInternalFormat(); GLenum internalformat = mImageArray[0].getInternalFormat();
newTexStorage = new TextureStorage2D(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height); newTexStorage = new TextureStorage2D(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL) if (mTexStorage != NULL)
{ {
...@@ -830,7 +830,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target) ...@@ -830,7 +830,7 @@ Renderbuffer *Texture2D::getRenderbuffer(GLenum target)
if (mColorbufferProxy == NULL) if (mColorbufferProxy == NULL)
{ {
mColorbufferProxy = new Renderbuffer(id(), new RenderbufferTexture2D(this, target)); mColorbufferProxy = new Renderbuffer(mRenderer, id(), new RenderbufferTexture2D(this, target));
} }
return mColorbufferProxy; return mColorbufferProxy;
...@@ -1171,7 +1171,7 @@ void TextureCubeMap::createTexture() ...@@ -1171,7 +1171,7 @@ void TextureCubeMap::createTexture()
GLenum internalformat = mImageArray[0][0].getInternalFormat(); GLenum internalformat = mImageArray[0][0].getInternalFormat();
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size); mTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged()) if (mTexStorage->isManaged())
{ {
...@@ -1219,7 +1219,7 @@ void TextureCubeMap::convertToRenderTarget() ...@@ -1219,7 +1219,7 @@ void TextureCubeMap::convertToRenderTarget()
GLint levels = creationLevels(size); GLint levels = creationLevels(size);
GLenum internalformat = mImageArray[0][0].getInternalFormat(); GLenum internalformat = mImageArray[0][0].getInternalFormat();
newTexStorage = new TextureStorageCubeMap(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size); newTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL) if (mTexStorage != NULL)
{ {
...@@ -1355,7 +1355,7 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi ...@@ -1355,7 +1355,7 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size) void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{ {
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size); mTexStorage = new TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
mImmutable = true; mImmutable = true;
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
...@@ -1451,7 +1451,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target) ...@@ -1451,7 +1451,7 @@ Renderbuffer *TextureCubeMap::getRenderbuffer(GLenum target)
if (mFaceProxies[face] == NULL) if (mFaceProxies[face] == NULL)
{ {
mFaceProxies[face] = new Renderbuffer(id(), new RenderbufferTextureCubeMap(this, target)); mFaceProxies[face] = new Renderbuffer(mRenderer, id(), new RenderbufferTextureCubeMap(this, target));
} }
return mFaceProxies[face]; return mFaceProxies[face];
......
...@@ -4837,20 +4837,14 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp ...@@ -4837,20 +4837,14 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp
switch (internalformat) switch (internalformat)
{ {
case GL_DEPTH_COMPONENT16: case GL_DEPTH_COMPONENT16:
context->setRenderbufferStorage(new gl::Depthbuffer(width, height, samples));
break;
case GL_RGBA4: case GL_RGBA4:
case GL_RGB5_A1: case GL_RGB5_A1:
case GL_RGB565: case GL_RGB565:
case GL_RGB8_OES: case GL_RGB8_OES:
case GL_RGBA8_OES: case GL_RGBA8_OES:
context->setRenderbufferStorage(new gl::Colorbuffer(width, height, internalformat, samples));
break;
case GL_STENCIL_INDEX8: case GL_STENCIL_INDEX8:
context->setRenderbufferStorage(new gl::Stencilbuffer(width, height, samples));
break;
case GL_DEPTH24_STENCIL8_OES: case GL_DEPTH24_STENCIL8_OES:
context->setRenderbufferStorage(new gl::DepthStencilbuffer(width, height, samples)); context->setRenderbufferStorage(width, height, internalformat, samples);
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
......
...@@ -21,9 +21,10 @@ namespace gl ...@@ -21,9 +21,10 @@ namespace gl
{ {
unsigned int TextureStorage::mCurrentTextureSerial = 1; unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage(DWORD usage) TextureStorage::TextureStorage(rx::Renderer *renderer, DWORD usage)
: mD3DUsage(usage), : mD3DUsage(usage),
mD3DPool(getDisplay()->getRenderer9()->getTexturePool(usage)), // D3D9_REPLACE mD3DPool(getDisplay()->getRenderer9()->getTexturePool(usage)), // D3D9_REPLACE
mRenderer(renderer),
mTextureSerial(issueTextureSerial()), mTextureSerial(issueTextureSerial()),
mLodOffset(0) mLodOffset(0)
{ {
...@@ -206,14 +207,14 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac ...@@ -206,14 +207,14 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac
return true; return true;
} }
TextureStorage2D::TextureStorage2D(rx::SwapChain *swapchain) : TextureStorage(D3DUSAGE_RENDERTARGET), mRenderTargetSerial(RenderbufferStorage::issueSerial()) TextureStorage2D::TextureStorage2D(rx::Renderer *renderer, rx::SwapChain *swapchain) : TextureStorage(renderer, D3DUSAGE_RENDERTARGET), mRenderTargetSerial(RenderbufferStorage::issueSerial())
{ {
IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture(); IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture; mTexture = surfaceTexture;
} }
TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height) TextureStorage2D::TextureStorage2D(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)), : TextureStorage(renderer, GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mRenderTargetSerial(RenderbufferStorage::issueSerial()) mRenderTargetSerial(RenderbufferStorage::issueSerial())
{ {
mTexture = NULL; mTexture = NULL;
...@@ -312,8 +313,8 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const ...@@ -312,8 +313,8 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const
return mRenderTargetSerial; return mRenderTargetSerial;
} }
TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size) TextureStorageCubeMap::TextureStorageCubeMap(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)), : TextureStorage(renderer, GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials()) mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
{ {
mTexture = NULL; mTexture = NULL;
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
namespace rx namespace rx
{ {
class Renderer;
class SwapChain; class SwapChain;
} }
...@@ -29,7 +30,7 @@ class Blit; ...@@ -29,7 +30,7 @@ class Blit;
class TextureStorage class TextureStorage
{ {
public: public:
explicit TextureStorage(DWORD usage); TextureStorage(rx::Renderer *renderer, DWORD usage);
virtual ~TextureStorage(); virtual ~TextureStorage();
...@@ -59,6 +60,8 @@ class TextureStorage ...@@ -59,6 +60,8 @@ class TextureStorage
const DWORD mD3DUsage; const DWORD mD3DUsage;
const D3DPOOL mD3DPool; const D3DPOOL mD3DPool;
rx::Renderer *mRenderer;
const unsigned int mTextureSerial; const unsigned int mTextureSerial;
static unsigned int issueTextureSerial(); static unsigned int issueTextureSerial();
...@@ -68,8 +71,8 @@ class TextureStorage ...@@ -68,8 +71,8 @@ class TextureStorage
class TextureStorage2D : public TextureStorage class TextureStorage2D : public TextureStorage
{ {
public: public:
explicit TextureStorage2D(rx::SwapChain *swapchain); explicit TextureStorage2D(rx::Renderer *renderer, rx::SwapChain *swapchain);
TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height); TextureStorage2D(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual ~TextureStorage2D(); virtual ~TextureStorage2D();
...@@ -91,7 +94,7 @@ class TextureStorage2D : public TextureStorage ...@@ -91,7 +94,7 @@ class TextureStorage2D : public TextureStorage
class TextureStorageCubeMap : public TextureStorage class TextureStorageCubeMap : public TextureStorage
{ {
public: public:
TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size); TextureStorageCubeMap(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap(); virtual ~TextureStorageCubeMap();
......
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