2012-10-04 20:35:54 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#include "WebGLContext.h"
|
2012-12-03 18:27:25 +00:00
|
|
|
#include "WebGLRenderbuffer.h"
|
2012-10-04 20:35:54 +00:00
|
|
|
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
2013-01-31 23:11:49 +00:00
|
|
|
#include "nsContentUtils.h"
|
2012-10-04 20:35:54 +00:00
|
|
|
|
|
|
|
using namespace mozilla;
|
|
|
|
|
|
|
|
JSObject*
|
|
|
|
WebGLRenderbuffer::WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap) {
|
|
|
|
return dom::WebGLRenderbufferBinding::Wrap(cx, scope, this, triedToWrap);
|
|
|
|
}
|
|
|
|
|
2012-12-03 18:27:25 +00:00
|
|
|
WebGLRenderbuffer::WebGLRenderbuffer(WebGLContext *context)
|
|
|
|
: WebGLContextBoundObject(context)
|
|
|
|
, mInternalFormat(0)
|
|
|
|
, mInternalFormatForGL(0)
|
|
|
|
, mHasEverBeenBound(false)
|
|
|
|
, mInitialized(false)
|
|
|
|
{
|
|
|
|
SetIsDOMBinding();
|
|
|
|
mContext->MakeContextCurrent();
|
|
|
|
mContext->gl->fGenRenderbuffers(1, &mGLName);
|
|
|
|
mContext->mRenderbuffers.insertBack(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
WebGLRenderbuffer::Delete() {
|
|
|
|
mContext->MakeContextCurrent();
|
|
|
|
mContext->gl->fDeleteRenderbuffers(1, &mGLName);
|
|
|
|
LinkedListElement<WebGLRenderbuffer>::removeFrom(mContext->mRenderbuffers);
|
|
|
|
}
|
|
|
|
|
|
|
|
int64_t
|
|
|
|
WebGLRenderbuffer::MemoryUsage() const {
|
|
|
|
int64_t pixels = int64_t(Width()) * int64_t(Height());
|
|
|
|
|
|
|
|
// If there is no defined format, we're not taking up any memory
|
|
|
|
if (!mInternalFormatForGL) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (mInternalFormatForGL) {
|
|
|
|
case LOCAL_GL_STENCIL_INDEX8:
|
|
|
|
return pixels;
|
|
|
|
case LOCAL_GL_RGBA4:
|
|
|
|
case LOCAL_GL_RGB5_A1:
|
|
|
|
case LOCAL_GL_RGB565:
|
|
|
|
case LOCAL_GL_DEPTH_COMPONENT16:
|
|
|
|
return 2 * pixels;
|
|
|
|
case LOCAL_GL_RGB8:
|
|
|
|
case LOCAL_GL_DEPTH_COMPONENT24:
|
|
|
|
return 3*pixels;
|
|
|
|
case LOCAL_GL_RGBA8:
|
|
|
|
case LOCAL_GL_DEPTH24_STENCIL8:
|
|
|
|
return 4*pixels;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
NS_ABORT();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2012-10-04 20:35:54 +00:00
|
|
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLRenderbuffer)
|
|
|
|
|
|
|
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLRenderbuffer)
|
|
|
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(WebGLRenderbuffer)
|
|
|
|
|
|
|
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WebGLRenderbuffer)
|
|
|
|
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
|
|
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
|
|
|
NS_INTERFACE_MAP_END
|