Commit ff8bdfb0 by apatrick@chromium.org

Backing out r417 and r418.

I will recommit these as two separate patches: one for ID invalidation and one for reference counting issue. I will not recommit the FBO changes and since the GLES2 spec will soon make it undefined whether FBOs are in a shared namespace. Review URL: http://codereview.appspot.com/2154045 git-svn-id: https://angleproject.googlecode.com/svn/trunk@422 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent a9cd70ac
...@@ -122,8 +122,11 @@ Context::Context(const egl::Config *config, const gl::Context *shareContext) ...@@ -122,8 +122,11 @@ Context::Context(const egl::Config *config, const gl::Context *shareContext)
// In order that access to these initial textures not be lost, they are treated as texture // In order that access to these initial textures not be lost, they are treated as texture
// objects all of whose names are 0. // objects all of whose names are 0.
mTexture2DZero.set(new Texture2D(0)); mTexture2DZero = new Texture2D(0);
mTextureCubeMapZero.set(new TextureCubeMap(0)); mTextureCubeMapZero = new TextureCubeMap(0);
mColorbufferZero = NULL;
mDepthStencilbufferZero = NULL;
mState.activeSampler = 0; mState.activeSampler = 0;
bindArrayBuffer(0); bindArrayBuffer(0);
...@@ -134,6 +137,11 @@ Context::Context(const egl::Config *config, const gl::Context *shareContext) ...@@ -134,6 +137,11 @@ Context::Context(const egl::Config *config, const gl::Context *shareContext)
bindDrawFramebuffer(0); bindDrawFramebuffer(0);
bindRenderbuffer(0); bindRenderbuffer(0);
for (int type = 0; type < SAMPLER_TYPE_COUNT; type++)
{
mIncompleteTextures[type] = NULL;
}
mState.currentProgram = 0; mState.currentProgram = 0;
mState.packAlignment = 4; mState.packAlignment = 4;
...@@ -171,6 +179,11 @@ Context::~Context() ...@@ -171,6 +179,11 @@ Context::~Context()
mState.currentProgram = 0; mState.currentProgram = 0;
} }
while (!mFramebufferMap.empty())
{
deleteFramebuffer(mFramebufferMap.begin()->first);
}
while (!mFenceMap.empty()) while (!mFenceMap.empty())
{ {
deleteFence(mFenceMap.begin()->first); deleteFence(mFenceMap.begin()->first);
...@@ -192,7 +205,7 @@ Context::~Context() ...@@ -192,7 +205,7 @@ Context::~Context()
for (int type = 0; type < SAMPLER_TYPE_COUNT; type++) for (int type = 0; type < SAMPLER_TYPE_COUNT; type++)
{ {
mIncompleteTextures[type].set(NULL); delete mIncompleteTextures[type];
} }
for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++) for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
...@@ -205,12 +218,9 @@ Context::~Context() ...@@ -205,12 +218,9 @@ Context::~Context()
mState.texture2D.set(NULL); mState.texture2D.set(NULL);
mState.textureCubeMap.set(NULL); mState.textureCubeMap.set(NULL);
mState.renderbuffer.set(NULL); mState.renderbuffer.set(NULL);
mState.readFramebuffer.set(NULL);
mState.drawFramebuffer.set(NULL);
mTexture2DZero.set(NULL); delete mTexture2DZero;
mTextureCubeMapZero.set(NULL); delete mTextureCubeMapZero;
mFramebufferZero.set(NULL);
delete mBufferBackEnd; delete mBufferBackEnd;
delete mVertexDataManager; delete mVertexDataManager;
...@@ -715,12 +725,12 @@ void Context::setActiveSampler(int active) ...@@ -715,12 +725,12 @@ void Context::setActiveSampler(int active)
GLuint Context::getReadFramebufferHandle() const GLuint Context::getReadFramebufferHandle() const
{ {
return mState.readFramebuffer.id(); return mState.readFramebuffer;
} }
GLuint Context::getDrawFramebufferHandle() const GLuint Context::getDrawFramebufferHandle() const
{ {
return mState.drawFramebuffer.id(); return mState.drawFramebuffer;
} }
GLuint Context::getRenderbufferHandle() const GLuint Context::getRenderbufferHandle() const
...@@ -810,9 +820,19 @@ GLuint Context::createRenderbuffer() ...@@ -810,9 +820,19 @@ GLuint Context::createRenderbuffer()
return mResourceManager->createRenderbuffer(); return mResourceManager->createRenderbuffer();
} }
// Returns an unused framebuffer name
GLuint Context::createFramebuffer() GLuint Context::createFramebuffer()
{ {
return mResourceManager->createFramebuffer(); unsigned int handle = 1;
while (mFramebufferMap.find(handle) != mFramebufferMap.end())
{
handle++;
}
mFramebufferMap[handle] = NULL;
return handle;
} }
GLuint Context::createFence() GLuint Context::createFence()
...@@ -871,12 +891,15 @@ void Context::deleteRenderbuffer(GLuint renderbuffer) ...@@ -871,12 +891,15 @@ void Context::deleteRenderbuffer(GLuint renderbuffer)
void Context::deleteFramebuffer(GLuint framebuffer) void Context::deleteFramebuffer(GLuint framebuffer)
{ {
if (mResourceManager->getFramebuffer(framebuffer)) FramebufferMap::iterator framebufferObject = mFramebufferMap.find(framebuffer);
if (framebufferObject != mFramebufferMap.end())
{ {
detachFramebuffer(framebuffer); detachFramebuffer(framebuffer);
}
mResourceManager->deleteFramebuffer(framebuffer); delete framebufferObject->second;
mFramebufferMap.erase(framebufferObject);
}
} }
void Context::deleteFence(GLuint fence) void Context::deleteFence(GLuint fence)
...@@ -915,14 +938,14 @@ Renderbuffer *Context::getRenderbuffer(GLuint handle) ...@@ -915,14 +938,14 @@ Renderbuffer *Context::getRenderbuffer(GLuint handle)
return mResourceManager->getRenderbuffer(handle); return mResourceManager->getRenderbuffer(handle);
} }
Framebuffer *Context::getFramebuffer(GLuint handle) Framebuffer *Context::getReadFramebuffer()
{ {
if (handle == 0) return getFramebuffer(mState.readFramebuffer);
{ }
return mFramebufferZero.get();
}
return mResourceManager->getFramebuffer(handle); Framebuffer *Context::getDrawFramebuffer()
{
return getFramebuffer(mState.drawFramebuffer);
} }
void Context::bindArrayBuffer(unsigned int buffer) void Context::bindArrayBuffer(unsigned int buffer)
...@@ -959,16 +982,22 @@ void Context::bindTextureCubeMap(GLuint texture) ...@@ -959,16 +982,22 @@ void Context::bindTextureCubeMap(GLuint texture)
void Context::bindReadFramebuffer(GLuint framebuffer) void Context::bindReadFramebuffer(GLuint framebuffer)
{ {
mResourceManager->checkFramebufferAllocation(framebuffer); if (!getFramebuffer(framebuffer))
{
mState.readFramebuffer.set(getFramebuffer(framebuffer)); mFramebufferMap[framebuffer] = new Framebuffer();
}
mState.readFramebuffer = framebuffer;
} }
void Context::bindDrawFramebuffer(GLuint framebuffer) void Context::bindDrawFramebuffer(GLuint framebuffer)
{ {
mResourceManager->checkFramebufferAllocation(framebuffer); if (!getFramebuffer(framebuffer))
{
mState.drawFramebuffer.set(getFramebuffer(framebuffer)); mFramebufferMap[framebuffer] = new Framebuffer();
}
mState.drawFramebuffer = framebuffer;
} }
void Context::bindRenderbuffer(GLuint renderbuffer) void Context::bindRenderbuffer(GLuint renderbuffer)
...@@ -1002,17 +1031,8 @@ void Context::useProgram(GLuint program) ...@@ -1002,17 +1031,8 @@ void Context::useProgram(GLuint program)
void Context::setFramebufferZero(Framebuffer *buffer) void Context::setFramebufferZero(Framebuffer *buffer)
{ {
if (mState.readFramebuffer.get() == mFramebufferZero.get()) delete mFramebufferMap[0];
{ mFramebufferMap[0] = buffer;
mState.readFramebuffer.set(buffer);
}
if (mState.drawFramebuffer.get() == mFramebufferZero.get())
{
mState.drawFramebuffer.set(buffer);
}
mFramebufferZero.set(buffer);
} }
void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer) void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
...@@ -1021,6 +1041,20 @@ void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer) ...@@ -1021,6 +1041,20 @@ void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
renderbufferObject->setStorage(renderbuffer); renderbufferObject->setStorage(renderbuffer);
} }
Framebuffer *Context::getFramebuffer(unsigned int handle)
{
FramebufferMap::iterator framebuffer = mFramebufferMap.find(handle);
if (framebuffer == mFramebufferMap.end())
{
return NULL;
}
else
{
return framebuffer->second;
}
}
Fence *Context::getFence(unsigned int handle) Fence *Context::getFence(unsigned int handle)
{ {
FenceMap::iterator fence = mFenceMap.find(handle); FenceMap::iterator fence = mFenceMap.find(handle);
...@@ -1054,7 +1088,7 @@ Texture2D *Context::getTexture2D() ...@@ -1054,7 +1088,7 @@ Texture2D *Context::getTexture2D()
{ {
if (mState.texture2D.id() == 0) // Special case: 0 refers to different initial textures based on the target if (mState.texture2D.id() == 0) // Special case: 0 refers to different initial textures based on the target
{ {
return mTexture2DZero.get(); return mTexture2DZero;
} }
return static_cast<Texture2D*>(mState.texture2D.get()); return static_cast<Texture2D*>(mState.texture2D.get());
...@@ -1064,7 +1098,7 @@ TextureCubeMap *Context::getTextureCubeMap() ...@@ -1064,7 +1098,7 @@ TextureCubeMap *Context::getTextureCubeMap()
{ {
if (mState.textureCubeMap.id() == 0) // Special case: 0 refers to different initial textures based on the target if (mState.textureCubeMap.id() == 0) // Special case: 0 refers to different initial textures based on the target
{ {
return mTextureCubeMapZero.get(); return mTextureCubeMapZero;
} }
return static_cast<TextureCubeMap*>(mState.textureCubeMap.get()); return static_cast<TextureCubeMap*>(mState.textureCubeMap.get());
...@@ -1079,24 +1113,14 @@ Texture *Context::getSamplerTexture(unsigned int sampler, SamplerType type) ...@@ -1079,24 +1113,14 @@ Texture *Context::getSamplerTexture(unsigned int sampler, SamplerType type)
switch (type) switch (type)
{ {
default: UNREACHABLE(); default: UNREACHABLE();
case SAMPLER_2D: return mTexture2DZero.get(); case SAMPLER_2D: return mTexture2DZero;
case SAMPLER_CUBE: return mTextureCubeMapZero.get(); case SAMPLER_CUBE: return mTextureCubeMapZero;
} }
} }
return mState.samplerTexture[type][sampler].get(); return mState.samplerTexture[type][sampler].get();
} }
Framebuffer *Context::getReadFramebuffer()
{
return mState.readFramebuffer.get();
}
Framebuffer *Context::getDrawFramebuffer()
{
return mState.drawFramebuffer.get();
}
bool Context::getBooleanv(GLenum pname, GLboolean *params) bool Context::getBooleanv(GLenum pname, GLboolean *params)
{ {
switch (pname) switch (pname)
...@@ -1192,8 +1216,8 @@ bool Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1192,8 +1216,8 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_ARRAY_BUFFER_BINDING: *params = mState.arrayBuffer.id(); break; case GL_ARRAY_BUFFER_BINDING: *params = mState.arrayBuffer.id(); break;
case GL_ELEMENT_ARRAY_BUFFER_BINDING: *params = mState.elementArrayBuffer.id(); break; case GL_ELEMENT_ARRAY_BUFFER_BINDING: *params = mState.elementArrayBuffer.id(); break;
//case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE //case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mState.drawFramebuffer.id(); break; case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mState.drawFramebuffer; break;
case GL_READ_FRAMEBUFFER_BINDING_ANGLE: *params = mState.readFramebuffer.id(); break; case GL_READ_FRAMEBUFFER_BINDING_ANGLE: *params = mState.readFramebuffer; break;
case GL_RENDERBUFFER_BINDING: *params = mState.renderbuffer.id(); break; case GL_RENDERBUFFER_BINDING: *params = mState.renderbuffer.id(); break;
case GL_CURRENT_PROGRAM: *params = mState.currentProgram; break; case GL_CURRENT_PROGRAM: *params = mState.currentProgram; break;
case GL_PACK_ALIGNMENT: *params = mState.packAlignment; break; case GL_PACK_ALIGNMENT: *params = mState.packAlignment; break;
...@@ -2978,12 +3002,12 @@ void Context::detachFramebuffer(GLuint framebuffer) ...@@ -2978,12 +3002,12 @@ void Context::detachFramebuffer(GLuint framebuffer)
// If a framebuffer that is currently bound to the target FRAMEBUFFER is deleted, it is as though // If a framebuffer that is currently bound to the target FRAMEBUFFER is deleted, it is as though
// BindFramebuffer had been executed with the target of FRAMEBUFFER and framebuffer of zero. // BindFramebuffer had been executed with the target of FRAMEBUFFER and framebuffer of zero.
if (mState.readFramebuffer.id() == framebuffer) if (mState.readFramebuffer == framebuffer)
{ {
bindReadFramebuffer(0); bindReadFramebuffer(0);
} }
if (mState.drawFramebuffer.id() == framebuffer) if (mState.drawFramebuffer == framebuffer)
{ {
bindDrawFramebuffer(0); bindDrawFramebuffer(0);
} }
...@@ -3021,7 +3045,7 @@ void Context::detachRenderbuffer(GLuint renderbuffer) ...@@ -3021,7 +3045,7 @@ void Context::detachRenderbuffer(GLuint renderbuffer)
Texture *Context::getIncompleteTexture(SamplerType type) Texture *Context::getIncompleteTexture(SamplerType type)
{ {
Texture *t = mIncompleteTextures[type].get(); Texture *t = mIncompleteTextures[type];
if (t == NULL) if (t == NULL)
{ {
...@@ -3057,7 +3081,7 @@ Texture *Context::getIncompleteTexture(SamplerType type) ...@@ -3057,7 +3081,7 @@ Texture *Context::getIncompleteTexture(SamplerType type)
break; break;
} }
mIncompleteTextures[type].set(t); mIncompleteTextures[type] = t;
} }
return t; return t;
......
...@@ -184,8 +184,8 @@ struct State ...@@ -184,8 +184,8 @@ struct State
BindingPointer<Buffer> elementArrayBuffer; BindingPointer<Buffer> elementArrayBuffer;
BindingPointer<Texture> texture2D; BindingPointer<Texture> texture2D;
BindingPointer<Texture> textureCubeMap; BindingPointer<Texture> textureCubeMap;
BindingPointer<Framebuffer> readFramebuffer; GLuint readFramebuffer;
BindingPointer<Framebuffer> drawFramebuffer; GLuint drawFramebuffer;
BindingPointer<Renderbuffer> renderbuffer; BindingPointer<Renderbuffer> renderbuffer;
GLuint currentProgram; GLuint currentProgram;
...@@ -422,10 +422,14 @@ class Context ...@@ -422,10 +422,14 @@ class Context
State mState; State mState;
BindingPointer<Texture2D> mTexture2DZero; Texture2D *mTexture2DZero;
BindingPointer<TextureCubeMap> mTextureCubeMapZero; TextureCubeMap *mTextureCubeMapZero;
BindingPointer<Framebuffer> mFramebufferZero; Colorbuffer *mColorbufferZero;
DepthStencilbuffer *mDepthStencilbufferZero;
typedef std::map<GLuint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
typedef std::map<GLuint, Fence*> FenceMap; typedef std::map<GLuint, Fence*> FenceMap;
FenceMap mFenceMap; FenceMap mFenceMap;
...@@ -439,7 +443,7 @@ class Context ...@@ -439,7 +443,7 @@ class Context
Blit *mBlit; Blit *mBlit;
BindingPointer<Texture> mIncompleteTextures[SAMPLER_TYPE_COUNT]; Texture *mIncompleteTextures[SAMPLER_TYPE_COUNT];
// Recorded errors // Recorded errors
bool mInvalidEnum; bool mInvalidEnum;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
namespace gl namespace gl
{ {
Framebuffer::Framebuffer(GLuint id) : RefCountObject(id) Framebuffer::Framebuffer()
{ {
mColorbufferType = GL_NONE; mColorbufferType = GL_NONE;
mDepthbufferType = GL_NONE; mDepthbufferType = GL_NONE;
...@@ -429,7 +429,6 @@ GLenum Framebuffer::completeness() ...@@ -429,7 +429,6 @@ GLenum Framebuffer::completeness()
} }
DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil) DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil)
: Framebuffer(0)
{ {
mColorbufferType = GL_RENDERBUFFER; mColorbufferType = GL_RENDERBUFFER;
mDepthbufferType = GL_RENDERBUFFER; mDepthbufferType = GL_RENDERBUFFER;
......
...@@ -25,10 +25,10 @@ class Depthbuffer; ...@@ -25,10 +25,10 @@ class Depthbuffer;
class Stencilbuffer; class Stencilbuffer;
class DepthStencilbuffer; class DepthStencilbuffer;
class Framebuffer : public RefCountObject class Framebuffer
{ {
public: public:
Framebuffer(GLuint id); Framebuffer();
virtual ~Framebuffer(); virtual ~Framebuffer();
......
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
// that need to be reference counted for correct cross-context deletion. // that need to be reference counted for correct cross-context deletion.
// (Concretely, textures, buffers and renderbuffers.) // (Concretely, textures, buffers and renderbuffers.)
#include "main.h"
#include "RefCountObject.h" #include "RefCountObject.h"
namespace gl namespace gl
...@@ -20,7 +18,6 @@ RefCountObject::RefCountObject(GLuint id) ...@@ -20,7 +18,6 @@ RefCountObject::RefCountObject(GLuint id)
{ {
mId = id; mId = id;
mRefCount = 0; mRefCount = 0;
mIsDeleted = false;
} }
RefCountObject::~RefCountObject() RefCountObject::~RefCountObject()
...@@ -42,22 +39,6 @@ void RefCountObject::release() const ...@@ -42,22 +39,6 @@ void RefCountObject::release() const
} }
} }
GLuint RefCountObject::id() const
{
if (mIsDeleted)
{
return error(GL_INVALID_OPERATION, 0);
}
return mId;
}
void RefCountObject::markAsDeleted()
{
mId = 0;
mIsDeleted = true;
}
void RefCountObjectBindingPointer::set(RefCountObject *newObject) void RefCountObjectBindingPointer::set(RefCountObject *newObject)
{ {
// addRef first in case newObject == mObject and this is the last reference to it. // addRef first in case newObject == mObject and this is the last reference to it.
......
...@@ -31,13 +31,10 @@ class RefCountObject ...@@ -31,13 +31,10 @@ class RefCountObject
virtual void addRef() const; virtual void addRef() const;
virtual void release() const; virtual void release() const;
GLuint id() const; GLuint id() const { return mId; }
void markAsDeleted();
private: private:
GLuint mId; GLuint mId;
bool mIsDeleted;
mutable std::size_t mRefCount; mutable std::size_t mRefCount;
}; };
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "libGLESv2/Buffer.h" #include "libGLESv2/Buffer.h"
#include "libGLESv2/Program.h" #include "libGLESv2/Program.h"
#include "libGLESv2/RenderBuffer.h" #include "libGLESv2/RenderBuffer.h"
#include "libGLESv2/FrameBuffer.h"
#include "libGLESv2/Shader.h" #include "libGLESv2/Shader.h"
#include "libGLESv2/Texture.h" #include "libGLESv2/Texture.h"
...@@ -147,32 +146,13 @@ GLuint ResourceManager::createRenderbuffer() ...@@ -147,32 +146,13 @@ GLuint ResourceManager::createRenderbuffer()
return handle; return handle;
} }
// Returns an unused framebuffer name
GLuint ResourceManager::createFramebuffer()
{
unsigned int handle = 1;
while (mFramebufferMap.find(handle) != mFramebufferMap.end())
{
handle++;
}
mFramebufferMap[handle] = NULL;
return handle;
}
void ResourceManager::deleteBuffer(GLuint buffer) void ResourceManager::deleteBuffer(GLuint buffer)
{ {
BufferMap::iterator bufferObject = mBufferMap.find(buffer); BufferMap::iterator bufferObject = mBufferMap.find(buffer);
if (bufferObject != mBufferMap.end()) if (bufferObject != mBufferMap.end())
{ {
if (bufferObject->second) if (bufferObject->second) bufferObject->second->release();
{
bufferObject->second->markAsDeleted();
bufferObject->second->release();
}
mBufferMap.erase(bufferObject); mBufferMap.erase(bufferObject);
} }
} }
...@@ -219,11 +199,7 @@ void ResourceManager::deleteTexture(GLuint texture) ...@@ -219,11 +199,7 @@ void ResourceManager::deleteTexture(GLuint texture)
if (textureObject != mTextureMap.end()) if (textureObject != mTextureMap.end())
{ {
if (textureObject->second) if (textureObject->second) textureObject->second->release();
{
textureObject->second->markAsDeleted();
textureObject->second->release();
}
mTextureMap.erase(textureObject); mTextureMap.erase(textureObject);
} }
} }
...@@ -234,30 +210,11 @@ void ResourceManager::deleteRenderbuffer(GLuint renderbuffer) ...@@ -234,30 +210,11 @@ void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
if (renderbufferObject != mRenderbufferMap.end()) if (renderbufferObject != mRenderbufferMap.end())
{ {
if (renderbufferObject->second) if (renderbufferObject->second) renderbufferObject->second->release();
{
renderbufferObject->second->markAsDeleted();
renderbufferObject->second->release();
}
mRenderbufferMap.erase(renderbufferObject); mRenderbufferMap.erase(renderbufferObject);
} }
} }
void ResourceManager::deleteFramebuffer(GLuint framebuffer)
{
FramebufferMap::iterator framebufferObject = mFramebufferMap.find(framebuffer);
if (framebufferObject != mFramebufferMap.end())
{
if (framebufferObject->second)
{
framebufferObject->second->markAsDeleted();
framebufferObject->second->release();
}
mFramebufferMap.erase(framebufferObject);
}
}
Buffer *ResourceManager::getBuffer(unsigned int handle) Buffer *ResourceManager::getBuffer(unsigned int handle)
{ {
BufferMap::iterator buffer = mBufferMap.find(handle); BufferMap::iterator buffer = mBufferMap.find(handle);
...@@ -330,20 +287,6 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) ...@@ -330,20 +287,6 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
} }
} }
Framebuffer *ResourceManager::getFramebuffer(unsigned int handle)
{
FramebufferMap::iterator framebuffer = mFramebufferMap.find(handle);
if (framebuffer == mFramebufferMap.end())
{
return NULL;
}
else
{
return framebuffer->second;
}
}
void ResourceManager::setRenderbuffer(GLuint handle, Renderbuffer *buffer) void ResourceManager::setRenderbuffer(GLuint handle, Renderbuffer *buffer)
{ {
mRenderbufferMap[handle] = buffer; mRenderbufferMap[handle] = buffer;
...@@ -394,14 +337,4 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer) ...@@ -394,14 +337,4 @@ void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
} }
} }
void ResourceManager::checkFramebufferAllocation(GLuint framebuffer)
{
if (framebuffer != 0 && !getFramebuffer(framebuffer))
{
Framebuffer *framebufferObject = new Framebuffer(framebuffer);
mFramebufferMap[framebuffer] = framebufferObject;
framebufferObject->addRef();
}
}
} }
...@@ -24,7 +24,6 @@ class Shader; ...@@ -24,7 +24,6 @@ class Shader;
class Program; class Program;
class Texture; class Texture;
class Renderbuffer; class Renderbuffer;
class Framebuffer;
enum SamplerType enum SamplerType
{ {
...@@ -48,29 +47,25 @@ class ResourceManager ...@@ -48,29 +47,25 @@ class ResourceManager
GLuint createProgram(); GLuint createProgram();
GLuint createTexture(); GLuint createTexture();
GLuint createRenderbuffer(); GLuint createRenderbuffer();
GLuint createFramebuffer();
void deleteBuffer(GLuint buffer); void deleteBuffer(GLuint buffer);
void deleteShader(GLuint shader); void deleteShader(GLuint shader);
void deleteProgram(GLuint program); void deleteProgram(GLuint program);
void deleteTexture(GLuint texture); void deleteTexture(GLuint texture);
void deleteRenderbuffer(GLuint renderbuffer); void deleteRenderbuffer(GLuint renderbuffer);
void deleteFramebuffer(GLuint framebuffer);
Buffer *getBuffer(GLuint handle); Buffer *getBuffer(GLuint handle);
Shader *getShader(GLuint handle); Shader *getShader(GLuint handle);
Program *getProgram(GLuint handle); Program *getProgram(GLuint handle);
Texture *getTexture(GLuint handle); Texture *getTexture(GLuint handle);
Renderbuffer *getRenderbuffer(GLuint handle); Renderbuffer *getRenderbuffer(GLuint handle);
Framebuffer *getFramebuffer(GLuint handle);
void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer); void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
void checkBufferAllocation(unsigned int buffer); void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, SamplerType type); void checkTextureAllocation(GLuint texture, SamplerType type);
void checkRenderbufferAllocation(GLuint renderbuffer); void checkRenderbufferAllocation(GLuint renderbuffer);
void checkFramebufferAllocation(GLuint framebuffer);
private: private:
DISALLOW_COPY_AND_ASSIGN(ResourceManager); DISALLOW_COPY_AND_ASSIGN(ResourceManager);
...@@ -90,9 +85,6 @@ class ResourceManager ...@@ -90,9 +85,6 @@ class ResourceManager
typedef std::map<GLuint, Renderbuffer*> RenderbufferMap; typedef std::map<GLuint, Renderbuffer*> RenderbufferMap;
RenderbufferMap mRenderbufferMap; RenderbufferMap mRenderbufferMap;
typedef std::map<GLuint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
}; };
} }
......
...@@ -923,11 +923,12 @@ int Texture::levelCount() const ...@@ -923,11 +923,12 @@ int Texture::levelCount() const
Texture2D::Texture2D(GLuint id) : Texture(id) Texture2D::Texture2D(GLuint id) : Texture(id)
{ {
mTexture = NULL; mTexture = NULL;
mColorbufferProxy = NULL;
} }
Texture2D::~Texture2D() Texture2D::~Texture2D()
{ {
mColorbufferProxy.set(NULL); delete mColorbufferProxy;
if (mTexture) if (mTexture)
{ {
...@@ -1399,12 +1400,13 @@ Renderbuffer *Texture2D::getColorbuffer(GLenum target) ...@@ -1399,12 +1400,13 @@ Renderbuffer *Texture2D::getColorbuffer(GLenum target)
return error(GL_INVALID_OPERATION, (Renderbuffer *)NULL); return error(GL_INVALID_OPERATION, (Renderbuffer *)NULL);
} }
if (mColorbufferProxy.get() == NULL) if (mColorbufferProxy == NULL)
{ {
mColorbufferProxy.set(new Renderbuffer(id(), new TextureColorbufferProxy(this, target))); mColorbufferProxy = new Renderbuffer(id(), new TextureColorbufferProxy(this, target));
mColorbufferProxy->addRef();
} }
return mColorbufferProxy.get(); return mColorbufferProxy;
} }
IDirect3DSurface9 *Texture2D::getRenderTarget(GLenum target) IDirect3DSurface9 *Texture2D::getRenderTarget(GLenum target)
...@@ -1422,13 +1424,18 @@ IDirect3DSurface9 *Texture2D::getRenderTarget(GLenum target) ...@@ -1422,13 +1424,18 @@ IDirect3DSurface9 *Texture2D::getRenderTarget(GLenum target)
TextureCubeMap::TextureCubeMap(GLuint id) : Texture(id) TextureCubeMap::TextureCubeMap(GLuint id) : Texture(id)
{ {
mTexture = NULL; mTexture = NULL;
for (int i = 0; i < 6; i++)
{
mFaceProxies[i] = NULL;
}
} }
TextureCubeMap::~TextureCubeMap() TextureCubeMap::~TextureCubeMap()
{ {
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
{ {
mFaceProxies[i].set(NULL); delete mFaceProxies[i];
} }
if (mTexture) if (mTexture)
...@@ -2005,12 +2012,13 @@ Renderbuffer *TextureCubeMap::getColorbuffer(GLenum target) ...@@ -2005,12 +2012,13 @@ Renderbuffer *TextureCubeMap::getColorbuffer(GLenum target)
unsigned int face = faceIndex(target); unsigned int face = faceIndex(target);
if (mFaceProxies[face].get() == NULL) if (mFaceProxies[face] == NULL)
{ {
mFaceProxies[face].set(new Renderbuffer(id(), new TextureColorbufferProxy(this, target))); mFaceProxies[face] = new Renderbuffer(id(), new TextureColorbufferProxy(this, target));
mFaceProxies[face]->addRef();
} }
return mFaceProxies[face].get(); return mFaceProxies[face];
} }
IDirect3DSurface9 *TextureCubeMap::getRenderTarget(GLenum target) IDirect3DSurface9 *TextureCubeMap::getRenderTarget(GLenum target)
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <d3d9.h> #include <d3d9.h>
#include "libGLESv2/Renderbuffer.h" #include "libGLESv2/Renderbuffer.h"
#include "libGLESv2/RefCountObject.h"
#include "libGLESv2/utilities.h" #include "libGLESv2/utilities.h"
#include "common/debug.h" #include "common/debug.h"
...@@ -240,7 +239,7 @@ class Texture2D : public Texture ...@@ -240,7 +239,7 @@ class Texture2D : public Texture
IDirect3DTexture9 *mTexture; IDirect3DTexture9 *mTexture;
BindingPointer<Renderbuffer> mColorbufferProxy; Renderbuffer *mColorbufferProxy;
}; };
class TextureCubeMap : public Texture class TextureCubeMap : public Texture
...@@ -300,7 +299,7 @@ class TextureCubeMap : public Texture ...@@ -300,7 +299,7 @@ class TextureCubeMap : public Texture
IDirect3DCubeTexture9 *mTexture; IDirect3DCubeTexture9 *mTexture;
BindingPointer<Renderbuffer> mFaceProxies[6]; Renderbuffer *mFaceProxies[6];
}; };
} }
......
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