Mypal/dom/canvas/WebGLVertexAttribData.h

80 lines
2.0 KiB
C++

/* -*- 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_VERTEX_ATTRIB_DATA_H_
#define WEBGL_VERTEX_ATTRIB_DATA_H_
#include "GLDefs.h"
#include "WebGLBuffer.h"
#include "WebGLObjectModel.h"
namespace mozilla {
class WebGLBuffer;
class WebGLVertexAttribData final
{
public:
uint32_t mDivisor;
bool mEnabled;
private:
bool mIntegerFunc;
public:
WebGLRefPtr<WebGLBuffer> mBuf;
private:
GLenum mType;
GLenum mBaseType;
uint8_t mSize; // num of mType vals per vert
uint8_t mBytesPerVertex;
bool mNormalized;
uint32_t mStride; // bytes
uint32_t mExplicitStride;
uint64_t mByteOffset;
public:
#define GETTER(X) const decltype(m##X)& X() const { return m##X; }
GETTER(IntegerFunc)
GETTER(Type)
GETTER(BaseType)
GETTER(Size)
GETTER(BytesPerVertex)
GETTER(Normalized)
GETTER(Stride)
GETTER(ExplicitStride)
GETTER(ByteOffset)
#undef GETTER
// note that these initial values are what GL initializes vertex attribs to
WebGLVertexAttribData()
: mDivisor(0)
, mEnabled(false)
{
VertexAttribPointer(false, nullptr, 4, LOCAL_GL_FLOAT, false, 0, 0);
}
void VertexAttribPointer(bool integerFunc, WebGLBuffer* buf, uint8_t size,
GLenum type, bool normalized, uint32_t stride,
uint64_t byteOffset);
void DoVertexAttribPointer(gl::GLContext* gl, GLuint index) const;
};
} // namespace mozilla
inline void
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& callback,
mozilla::WebGLVertexAttribData& field,
const char* name,
uint32_t flags = 0)
{
CycleCollectionNoteChild(callback, field.mBuf.get(), name, flags);
}
#endif // WEBGL_VERTEX_ATTRIB_DATA_H_