Merge pull request #265 from cxw42/array-classname
Make Array::className() support all Array::Type values
This commit is contained in:
commit
da7a0968be
@ -62,6 +62,7 @@ class OSG_EXPORT Array : public BufferData
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/// The type of data stored in this array.
|
||||||
enum Type
|
enum Type
|
||||||
{
|
{
|
||||||
ArrayType = 0,
|
ArrayType = 0,
|
||||||
@ -115,9 +116,16 @@ class OSG_EXPORT Array : public BufferData
|
|||||||
QuatArrayType = 35,
|
QuatArrayType = 35,
|
||||||
|
|
||||||
UInt64ArrayType = 36,
|
UInt64ArrayType = 36,
|
||||||
Int64ArrayType = 37
|
Int64ArrayType = 37,
|
||||||
|
|
||||||
|
LastArrayType = 37
|
||||||
|
// If new array types are added, update this and
|
||||||
|
// update Array::className() in src/osg/Array.cpp.
|
||||||
|
// Array::Type values are from ArrayType to
|
||||||
|
// LastArrayType, inclusive.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// The scope of applicability of the values in this array
|
||||||
enum Binding
|
enum Binding
|
||||||
{
|
{
|
||||||
BIND_UNDEFINED=-1,
|
BIND_UNDEFINED=-1,
|
||||||
@ -146,6 +154,9 @@ class OSG_EXPORT Array : public BufferData
|
|||||||
|
|
||||||
virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const Array*>(obj)!=NULL; }
|
virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const Array*>(obj)!=NULL; }
|
||||||
virtual const char* libraryName() const { return "osg"; }
|
virtual const char* libraryName() const { return "osg"; }
|
||||||
|
|
||||||
|
/// Get the class name of this array. Defined in src/osg/Array.cpp
|
||||||
|
/// for all concrete array types listed below --- doesn't use traits.
|
||||||
virtual const char* className() const;
|
virtual const char* className() const;
|
||||||
|
|
||||||
virtual void accept(ArrayVisitor&) = 0;
|
virtual void accept(ArrayVisitor&) = 0;
|
||||||
@ -226,6 +237,7 @@ inline osg::Array::Binding getBinding(const osg::Array* array) { return array ?
|
|||||||
inline bool getNormalize(const osg::Array* array) { return array ? array->getNormalize() : false; }
|
inline bool getNormalize(const osg::Array* array) { return array ? array->getNormalize() : false; }
|
||||||
|
|
||||||
|
|
||||||
|
/// A concrete array holding elements of type T.
|
||||||
template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
|
template<typename T, Array::Type ARRAYTYPE, int DataSize, int DataType>
|
||||||
class TemplateArray : public Array, public MixinVector<T>
|
class TemplateArray : public Array, public MixinVector<T>
|
||||||
{
|
{
|
||||||
@ -396,6 +408,8 @@ class TemplateIndexArray : public IndexArray, public MixinVector<T>
|
|||||||
virtual ~TemplateIndexArray() {}
|
virtual ~TemplateIndexArray() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The predefined array types
|
||||||
|
|
||||||
typedef TemplateIndexArray<GLbyte,Array::ByteArrayType,1,GL_BYTE> ByteArray;
|
typedef TemplateIndexArray<GLbyte,Array::ByteArrayType,1,GL_BYTE> ByteArray;
|
||||||
typedef TemplateIndexArray<GLshort,Array::ShortArrayType,1,GL_SHORT> ShortArray;
|
typedef TemplateIndexArray<GLshort,Array::ShortArrayType,1,GL_SHORT> ShortArray;
|
||||||
typedef TemplateIndexArray<GLint,Array::IntArrayType,1,GL_INT> IntArray;
|
typedef TemplateIndexArray<GLint,Array::IntArrayType,1,GL_INT> IntArray;
|
||||||
@ -407,7 +421,6 @@ typedef TemplateIndexArray<GLuint,Array::UIntArrayType,1,GL_UNSIGNED_INT>
|
|||||||
typedef TemplateArray<GLfloat,Array::FloatArrayType,1,GL_FLOAT> FloatArray;
|
typedef TemplateArray<GLfloat,Array::FloatArrayType,1,GL_FLOAT> FloatArray;
|
||||||
typedef TemplateArray<GLdouble,Array::DoubleArrayType,1,GL_DOUBLE> DoubleArray;
|
typedef TemplateArray<GLdouble,Array::DoubleArrayType,1,GL_DOUBLE> DoubleArray;
|
||||||
|
|
||||||
|
|
||||||
typedef TemplateArray<Vec2b,Array::Vec2bArrayType,2,GL_BYTE> Vec2bArray;
|
typedef TemplateArray<Vec2b,Array::Vec2bArrayType,2,GL_BYTE> Vec2bArray;
|
||||||
typedef TemplateArray<Vec3b,Array::Vec3bArrayType,3,GL_BYTE> Vec3bArray;
|
typedef TemplateArray<Vec3b,Array::Vec3bArrayType,3,GL_BYTE> Vec3bArray;
|
||||||
typedef TemplateArray<Vec4b,Array::Vec4bArrayType,4,GL_BYTE> Vec4bArray;
|
typedef TemplateArray<Vec4b,Array::Vec4bArrayType,4,GL_BYTE> Vec4bArray;
|
||||||
@ -447,6 +460,7 @@ typedef TemplateArray<Quat,Array::QuatArrayType,4,GL_DOUBLE>
|
|||||||
|
|
||||||
typedef TemplateIndexArray<GLuint64,Array::UInt64ArrayType,1,GL_UNSIGNED_INT64_ARB> UInt64Array;
|
typedef TemplateIndexArray<GLuint64,Array::UInt64ArrayType,1,GL_UNSIGNED_INT64_ARB> UInt64Array;
|
||||||
typedef TemplateIndexArray<GLint64,Array::Int64ArrayType,1,GL_INT64_ARB> Int64Array;
|
typedef TemplateIndexArray<GLint64,Array::Int64ArrayType,1,GL_INT64_ARB> Int64Array;
|
||||||
|
|
||||||
class ArrayVisitor
|
class ArrayVisitor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
* OpenSceneGraph Public License for more details.
|
* OpenSceneGraph Public License for more details.
|
||||||
*/
|
*/
|
||||||
#include <osg/Array>
|
#include <osg/Array>
|
||||||
|
#include <osg/Notify>
|
||||||
|
|
||||||
using namespace osg;
|
using namespace osg;
|
||||||
|
|
||||||
@ -62,13 +63,20 @@ static const char* s_ArrayNames[] =
|
|||||||
|
|
||||||
"MatrixArray", //33
|
"MatrixArray", //33
|
||||||
"MatrixdArray", //34
|
"MatrixdArray", //34
|
||||||
|
|
||||||
|
"QuatArray", //35
|
||||||
|
|
||||||
|
"UInt64Array", //36
|
||||||
|
"Int64Array", //37
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* Array::className() const
|
const char* Array::className() const
|
||||||
{
|
{
|
||||||
if (_arrayType>=ArrayType && _arrayType<=Vec4dArrayType)
|
if (_arrayType>=ArrayType && _arrayType<=LastArrayType)
|
||||||
return s_ArrayNames[_arrayType];
|
return s_ArrayNames[_arrayType];
|
||||||
else
|
else {
|
||||||
|
OSG_DEBUG << "Array::className(): Unknown array type " << _arrayType << std::endl;
|
||||||
return "UnknownArray";
|
return "UnknownArray";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user