2012-11-28 22:04:26 -08:00
|
|
|
/* -*- 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
|
2013-06-10 13:00:35 -07:00
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef WEBGLVERTEXATTRIBDATA_H_
|
|
|
|
#define WEBGLVERTEXATTRIBDATA_H_
|
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
|
|
|
|
class WebGLBuffer;
|
|
|
|
|
2012-11-28 22:04:26 -08:00
|
|
|
struct WebGLVertexAttribData {
|
|
|
|
// note that these initial values are what GL initializes vertex attribs to
|
|
|
|
WebGLVertexAttribData()
|
2013-08-06 17:05:51 -07:00
|
|
|
: buf(0)
|
|
|
|
, stride(0)
|
|
|
|
, size(4)
|
|
|
|
, divisor(0) // OpenGL ES 3.0 specs paragraphe 6.2 p240
|
|
|
|
, byteOffset(0)
|
|
|
|
, type(LOCAL_GL_FLOAT)
|
|
|
|
, enabled(false)
|
|
|
|
, normalized(false)
|
2012-11-28 22:04:26 -08:00
|
|
|
{ }
|
|
|
|
|
|
|
|
WebGLRefPtr<WebGLBuffer> buf;
|
2013-09-04 05:14:43 -07:00
|
|
|
GLuint stride;
|
|
|
|
GLuint size;
|
|
|
|
GLuint divisor;
|
2012-11-28 22:04:26 -08:00
|
|
|
GLuint byteOffset;
|
|
|
|
GLenum type;
|
|
|
|
bool enabled;
|
|
|
|
bool normalized;
|
|
|
|
|
|
|
|
GLuint componentSize() const {
|
|
|
|
switch(type) {
|
|
|
|
case LOCAL_GL_BYTE:
|
|
|
|
return sizeof(GLbyte);
|
|
|
|
break;
|
|
|
|
case LOCAL_GL_UNSIGNED_BYTE:
|
|
|
|
return sizeof(GLubyte);
|
|
|
|
break;
|
|
|
|
case LOCAL_GL_SHORT:
|
|
|
|
return sizeof(GLshort);
|
|
|
|
break;
|
|
|
|
case LOCAL_GL_UNSIGNED_SHORT:
|
|
|
|
return sizeof(GLushort);
|
|
|
|
break;
|
|
|
|
// XXX case LOCAL_GL_FIXED:
|
|
|
|
case LOCAL_GL_FLOAT:
|
|
|
|
return sizeof(GLfloat);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
NS_ERROR("Should never get here!");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GLuint actualStride() const {
|
|
|
|
if (stride) return stride;
|
|
|
|
return size * componentSize();
|
|
|
|
}
|
2013-06-10 13:00:35 -07:00
|
|
|
};
|
|
|
|
|
2012-11-28 22:04:26 -08:00
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
inline void ImplCycleCollectionUnlink(mozilla::WebGLVertexAttribData& aField)
|
|
|
|
{
|
|
|
|
aField.buf = nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void
|
|
|
|
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback,
|
|
|
|
mozilla::WebGLVertexAttribData& aField,
|
|
|
|
const char* aName,
|
|
|
|
uint32_t aFlags = 0)
|
|
|
|
{
|
2013-08-29 08:39:17 -07:00
|
|
|
CycleCollectionNoteChild(aCallback, aField.buf.get(), aName, aFlags);
|
2013-06-10 13:00:35 -07:00
|
|
|
}
|
|
|
|
|
2012-11-28 22:04:26 -08:00
|
|
|
#endif
|