1 #include "vertexdatainterpreter.h"
13 sizeForType(int glType)
17 return sizeof(GLfloat);
18 case GL_UNSIGNED_BYTE:
19 return sizeof(GLubyte);
21 return sizeof(GLbyte);
23 return sizeof(GLshort);
24 case GL_UNSIGNED_SHORT:
25 return sizeof(GLushort);
29 return sizeof(GLuint);
31 return sizeof(GLdouble);
39 convertData(const QByteArray &dataArray,
47 int dataSize = dataArray.size() - startingOffset;
48 const char *data = dataArray.constData() + startingOffset;
49 int typeSize = sizeForType(type);
50 int elementSize = numComponents * typeSize;
55 int numElements = dataSize / stride;
57 if ((numElements % numComponents) != 0) {
58 int temp = qFloor(dataSize / (float)stride);
59 int fullElemSize = temp * stride;
60 if (fullElemSize + numComponents * typeSize <= dataSize) {
61 /* num full elements plus the part of the buffer in which we fit */
62 numElements = temp + 1;
69 qDebug() << "numElements = "<<numElements;
70 qDebug() << "elementSize = "<<elementSize;
71 qDebug() << "stride = "<<stride;
72 qDebug() << "numComponents = "<<numComponents;
73 qDebug() << "typeSize = "<<typeSize;
77 for (int i = 0; i < numElements; ++i) {
78 QString vectorString = QString::fromLatin1("%1) [").arg(i);
79 for (int j = 0; j < numComponents; ++j) {
80 int offset = i*stride + j*typeSize;
82 (const T*)(data + offset);
84 vectorString += QString::number(elem);
85 if ((j + 1) < numComponents)
86 vectorString += QLatin1String(", ");
89 strings += vectorString;
96 VertexDataInterpreter::VertexDataInterpreter(QObject *parent)
106 void VertexDataInterpreter::setData(const QByteArray &data)
110 m_listWidget->clear();
113 QByteArray VertexDataInterpreter::data() const
118 void VertexDataInterpreter::setType(int type)
123 int VertexDataInterpreter::type() const
128 void VertexDataInterpreter::setStride(int stride)
133 int VertexDataInterpreter::stride() const
138 void VertexDataInterpreter::setComponents(int num)
143 int VertexDataInterpreter::components() const
148 void VertexDataInterpreter::setListWidget(QListWidget *listWidget)
150 m_listWidget = listWidget;
153 void VertexDataInterpreter::interpretData()
158 m_listWidget->clear();
160 if (m_data.isEmpty() || !m_components)
166 lst = convertData<float>(m_data, m_type, m_stride, m_components,
169 case GL_UNSIGNED_BYTE:
170 lst = convertData<quint8>(m_data, m_type, m_stride, m_components,
174 lst = convertData<qint8>(m_data, m_type, m_stride, m_components,
178 lst = convertData<qint16>(m_data, m_type, m_stride, m_components,
181 case GL_UNSIGNED_SHORT:
182 lst = convertData<quint16>(m_data, m_type, m_stride, m_components,
186 lst = convertData<unsigned int>(m_data, m_type, m_stride, m_components,
189 case GL_UNSIGNED_INT:
190 lst = convertData<int>(m_data, m_type, m_stride, m_components,
194 lst = convertData<double>(m_data, m_type, m_stride, m_components,
198 qDebug()<<"unkown gltype = "<<m_type;
200 //qDebug()<<"list is "<<lst;
201 m_listWidget->addItems(lst);
205 void VertexDataInterpreter::setTypeFromString(const QString &str)
207 if (str == QLatin1String("GL_FLOAT")) {
209 } else if (str == QLatin1String("GL_INT")) {
211 } else if (str == QLatin1String("GL_UNSIGNED_INT")) {
212 setType(GL_UNSIGNED_INT);
213 } else if (str == QLatin1String("GL_SHORT")) {
215 } else if (str == QLatin1String("GL_UNSIGNED_SHORT")) {
216 setType(GL_UNSIGNED_SHORT);
217 } else if (str == QLatin1String("GL_BYTE")) {
219 } else if (str == QLatin1String("GL_UNSIGNED_BYTE")) {
220 setType(GL_UNSIGNED_BYTE);
221 } else if (str == QLatin1String("GL_DOUBLE")) {
224 qDebug()<<"unknown vertex data type";
228 int VertexDataInterpreter::startingOffset() const
230 return m_startingOffset;
233 void VertexDataInterpreter::setStartingOffset(int offset)
235 m_startingOffset = offset;
238 #include "vertexdatainterpreter.moc"