X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fvertexdatainterpreter.cpp;h=a3012310e1349e7b4cf87bdad79671e281cbfecc;hb=c8695f74ce1ee6a93dee4b3f7da5a70a64706c82;hp=e00466b18bea56ab15c2ac764328a3f76fad402c;hpb=8e7a4ff9d168734533fa1f725b013c048e49b3e9;p=apitrace diff --git a/gui/vertexdatainterpreter.cpp b/gui/vertexdatainterpreter.cpp index e00466b..a301231 100644 --- a/gui/vertexdatainterpreter.cpp +++ b/gui/vertexdatainterpreter.cpp @@ -5,28 +5,27 @@ #include -#include +#include static int -sizeForType(int glType) -{ - switch(glType) { - case GL_FLOAT: - return sizeof(GLfloat); - case GL_UNSIGNED_BYTE: - return sizeof(GLubyte); - case GL_BYTE: - return sizeof(GLbyte); - case GL_SHORT: - return sizeof(GLshort); - case GL_UNSIGNED_SHORT: - return sizeof(GLushort); - case GL_INT: - return sizeof(GLint); - case GL_UNSIGNED_INT: - return sizeof(GLuint); +sizeForType(int type) +{ + switch(type) { + case DT_INT8: + case DT_UINT8: + return 1; + case DT_INT16: + case DT_UINT16: + return 2; + case DT_INT32: + case DT_UINT32: + return 4; + case DT_FLOAT: + return sizeof(float); + case DT_DOUBLE: + return sizeof(double); default: - return sizeof(GLint); + return sizeof(int); } } @@ -35,41 +34,47 @@ static QStringList convertData(const QByteArray &dataArray, int type, int stride, - int numComponents) + int numComponents, + int startingOffset) { QStringList strings; - const char *data = dataArray.constData(); + int dataSize = dataArray.size() - startingOffset; + const char *data = dataArray.constData() + startingOffset; int typeSize = sizeForType(type); - int sizePerAttribute = typeSize; + int elementSize = numComponents * typeSize; + + if (!stride) + stride = elementSize; - if (stride) - sizePerAttribute = stride; + int numElements = dataSize / stride; - int numElements = dataArray.size() / sizePerAttribute; + if ((numElements % numComponents) != 0) { + int temp = qFloor(dataSize / (float)stride); + int fullElemSize = temp * stride; + if (fullElemSize + numComponents * typeSize <= dataSize) { + /* num full elements plus the part of the buffer in which we fit */ + numElements = temp + 1; + } else { + numElements = temp; + } + } #if 0 qDebug() << "numElements = "<(m_data, m_type, m_stride, m_components); + case DT_INT8: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_UNSIGNED_BYTE: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_UINT8: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_BYTE: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_INT16: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_SHORT: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_UINT16: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_UNSIGNED_SHORT: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_INT32: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_INT: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_UINT32: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; - case GL_UNSIGNED_INT: - lst = convertData(m_data, m_type, m_stride, m_components); + case DT_FLOAT: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); + break; + case DT_DOUBLE: + lst = convertData(m_data, m_type, m_stride, m_components, + m_startingOffset); break; default: qDebug()<<"unkown gltype = "<