diff options
Diffstat (limited to 'dom/canvas/WebGLActiveInfo.h')
-rw-r--r-- | dom/canvas/WebGLActiveInfo.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/dom/canvas/WebGLActiveInfo.h b/dom/canvas/WebGLActiveInfo.h new file mode 100644 index 000000000..4a3c81758 --- /dev/null +++ b/dom/canvas/WebGLActiveInfo.h @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; 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/. */ + +#ifndef WEBGL_ACTIVE_INFO_H_ +#define WEBGL_ACTIVE_INFO_H_ + +#include "GLDefs.h" +#include "mozilla/Attributes.h" +#include "nsCycleCollectionParticipant.h" // NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS +#include "nsISupportsImpl.h" // NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING +#include "nsString.h" +#include "nsWrapperCache.h" + +namespace mozilla { + +class WebGLContext; + +class WebGLActiveInfo final + : public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLActiveInfo) + NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLActiveInfo) + + virtual JSObject* WrapObject(JSContext* js, JS::Handle<JSObject*> givenProto) override; + + WebGLContext* GetParentObject() const { + return mWebGL; + } + + WebGLContext* const mWebGL; + + // ActiveInfo state: + const uint32_t mElemCount; // `size` + const GLenum mElemType; // `type` + const nsCString mBaseUserName; // `name`, but ASCII, and without any final "[0]". + + // Not actually part of ActiveInfo: + const bool mIsArray; + const uint8_t mElemSize; + const nsCString mBaseMappedName; // Without any final "[0]". + + bool IsSampler() const; + + WebGLActiveInfo(WebGLContext* webgl, GLint elemCount, GLenum elemType, bool isArray, + const nsACString& baseUserName, const nsACString& baseMappedName); + + /* GLES 2.0.25, p33: + * This command will return as much information about active + * attributes as possible. If no information is available, length will + * be set to zero and name will be an empty string. This situation + * could arise if GetActiveAttrib is issued after a failed link. + * + * It's the same for GetActiveUniform. + */ + static WebGLActiveInfo* CreateInvalid(WebGLContext* webgl) { + return new WebGLActiveInfo(webgl); + } + + // WebIDL attributes + GLint Size() const { + return mElemCount; + } + + GLenum Type() const { + return mElemType; + } + + void GetName(nsString& retval) const { + CopyASCIItoUTF16(mBaseUserName, retval); + if (mIsArray) + retval.AppendLiteral("[0]"); + } + +private: + explicit WebGLActiveInfo(WebGLContext* webgl) + : mWebGL(webgl) + , mElemCount(0) + , mElemType(0) + , mBaseUserName("") + , mIsArray(false) + , mElemSize(0) + , mBaseMappedName("") + { } + + // Private destructor, to discourage deletion outside of Release(): + ~WebGLActiveInfo() { } +}; + +////////// + +bool IsElemTypeSampler(GLenum elemType); + +} // namespace mozilla + +#endif // WEBGL_ACTIVE_INFO_H_ |