mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1275866 - Clear WebGLTimerQuerys on WebGL GLContext teardown. - r=jerry,jrmuizel
This commit is contained in:
parent
0b06041a22
commit
636cda5db0
@ -67,6 +67,7 @@
|
||||
#include "WebGLQuery.h"
|
||||
#include "WebGLSampler.h"
|
||||
#include "WebGLShader.h"
|
||||
#include "WebGLTimerQuery.h"
|
||||
#include "WebGLTransformFeedback.h"
|
||||
#include "WebGLVertexArray.h"
|
||||
#include "WebGLVertexAttribData.h"
|
||||
@ -213,6 +214,15 @@ WebGLContext::~WebGLContext()
|
||||
mContextLossHandler = nullptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void
|
||||
ClearLinkedList(LinkedList<T>& list)
|
||||
{
|
||||
while (!list.isEmpty()) {
|
||||
list.getLast()->DeleteOnce();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
WebGLContext::DestroyResourcesAndContext()
|
||||
{
|
||||
@ -247,26 +257,21 @@ WebGLContext::DestroyResourcesAndContext()
|
||||
mBoundTransformFeedbackBuffers.Clear();
|
||||
mBoundUniformBuffers.Clear();
|
||||
|
||||
while (!mTextures.isEmpty())
|
||||
mTextures.getLast()->DeleteOnce();
|
||||
while (!mVertexArrays.isEmpty())
|
||||
mVertexArrays.getLast()->DeleteOnce();
|
||||
while (!mBuffers.isEmpty())
|
||||
mBuffers.getLast()->DeleteOnce();
|
||||
while (!mRenderbuffers.isEmpty())
|
||||
mRenderbuffers.getLast()->DeleteOnce();
|
||||
while (!mFramebuffers.isEmpty())
|
||||
mFramebuffers.getLast()->DeleteOnce();
|
||||
while (!mShaders.isEmpty())
|
||||
mShaders.getLast()->DeleteOnce();
|
||||
while (!mPrograms.isEmpty())
|
||||
mPrograms.getLast()->DeleteOnce();
|
||||
while (!mQueries.isEmpty())
|
||||
mQueries.getLast()->DeleteOnce();
|
||||
while (!mSamplers.isEmpty())
|
||||
mSamplers.getLast()->DeleteOnce();
|
||||
while (!mTransformFeedbacks.isEmpty())
|
||||
mTransformFeedbacks.getLast()->DeleteOnce();
|
||||
//////
|
||||
|
||||
ClearLinkedList(mBuffers);
|
||||
ClearLinkedList(mFramebuffers);
|
||||
ClearLinkedList(mPrograms);
|
||||
ClearLinkedList(mQueries);
|
||||
ClearLinkedList(mRenderbuffers);
|
||||
ClearLinkedList(mSamplers);
|
||||
ClearLinkedList(mShaders);
|
||||
ClearLinkedList(mTextures);
|
||||
ClearLinkedList(mTimerQueries);
|
||||
ClearLinkedList(mTransformFeedbacks);
|
||||
ClearLinkedList(mVertexArrays);
|
||||
|
||||
//////
|
||||
|
||||
mFakeBlack_2D_0000 = nullptr;
|
||||
mFakeBlack_2D_0001 = nullptr;
|
||||
|
@ -101,6 +101,7 @@ class WebGLSampler;
|
||||
class WebGLShader;
|
||||
class WebGLShaderPrecisionFormat;
|
||||
class WebGLTexture;
|
||||
class WebGLTimerQuery;
|
||||
class WebGLTransformFeedback;
|
||||
class WebGLUniformLocation;
|
||||
class WebGLVertexArray;
|
||||
@ -1394,18 +1395,17 @@ protected:
|
||||
WebGLRefPtr<WebGLTransformFeedback> mBoundTransformFeedback;
|
||||
WebGLRefPtr<WebGLVertexArray> mBoundVertexArray;
|
||||
|
||||
LinkedList<WebGLTexture> mTextures;
|
||||
LinkedList<WebGLBuffer> mBuffers;
|
||||
LinkedList<WebGLFramebuffer> mFramebuffers;
|
||||
LinkedList<WebGLProgram> mPrograms;
|
||||
LinkedList<WebGLQuery> mQueries;
|
||||
LinkedList<WebGLShader> mShaders;
|
||||
LinkedList<WebGLRenderbuffer> mRenderbuffers;
|
||||
LinkedList<WebGLFramebuffer> mFramebuffers;
|
||||
LinkedList<WebGLVertexArray> mVertexArrays;
|
||||
|
||||
// TODO(djg): Does this need a rethink? Should it be WebGL2Context?
|
||||
LinkedList<WebGLSampler> mSamplers;
|
||||
LinkedList<WebGLShader> mShaders;
|
||||
LinkedList<WebGLTexture> mTextures;
|
||||
LinkedList<WebGLTimerQuery> mTimerQueries;
|
||||
LinkedList<WebGLTransformFeedback> mTransformFeedbacks;
|
||||
LinkedList<WebGLVertexArray> mVertexArrays;
|
||||
|
||||
WebGLRefPtr<WebGLTransformFeedback> mDefaultTransformFeedback;
|
||||
WebGLRefPtr<WebGLVertexArray> mDefaultVertexArray;
|
||||
|
@ -26,6 +26,7 @@ WebGLTimerQuery::WebGLTimerQuery(WebGLContext* webgl, GLuint name)
|
||||
, mTarget(LOCAL_GL_NONE)
|
||||
, mCanBeAvailable(false)
|
||||
{
|
||||
mContext->mTimerQueries.insertBack(this);
|
||||
}
|
||||
|
||||
WebGLTimerQuery::~WebGLTimerQuery()
|
||||
@ -45,8 +46,12 @@ WebGLTimerQuery::Create(WebGLContext* webgl)
|
||||
void
|
||||
WebGLTimerQuery::Delete()
|
||||
{
|
||||
mContext->MakeContextCurrent();
|
||||
mContext->gl->fDeleteQueries(1, &mGLName);
|
||||
gl::GLContext* gl = mContext->GL();
|
||||
|
||||
gl->MakeCurrent();
|
||||
gl->fDeleteQueries(1, &mGLName);
|
||||
|
||||
LinkedListElement<WebGLTimerQuery>::removeFrom(mContext->mTimerQueries);
|
||||
}
|
||||
|
||||
WebGLContext*
|
||||
|
@ -16,6 +16,7 @@ namespace mozilla {
|
||||
class WebGLTimerQuery final
|
||||
: public nsWrapperCache
|
||||
, public WebGLRefCountedObject<WebGLTimerQuery>
|
||||
, public LinkedListElement<WebGLTimerQuery>
|
||||
, public WebGLContextBoundObject
|
||||
{
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user