Aktuell implementiere ich für mich einen ASSIMP Importer. Um beim Auslesen der Texturdaten nicht für jede Channel Kombinationsmöglichkeit ein eigenes Texture-Struct zu definieren (Nutze VBO-Multistreaming) wollte ich ein TextureStruct verwenden, dass ein dynamisch allokiertes Array nutzt:
Du hast texCoords als vector von TXSTREAMs gemacht, also einen Vektor von Pointern. Die Daten liegen also mit einer Indirektion zu viel im Speicher und "tbo->writeData(0, size, &texCoords[0]);" schreibt die Pointer und nicht die Daten in den Buffer.
Meine Lösung: nutz einen vector<char> und push dort alle Daten rein. Alternativ ein vector<float>.
Danke für Deinen Hinweis. Hab einmal versucht das ganze mit einem std::vector<float> abzuhandlen. Aber irgendwie
bekomme ich das nicht gebacken (k.A. ob die Hitze mir mal wieder zu Kopf steigt :? )
Klappt soweit ich nur einen texture channel habe. Sobald die Mesh 2 Channels hat, steigt mir das ganze beim schreiben der Daten aus. Hab ich etwas übersehen oder meintest Du generell etwas anderes?
Dein size scheint viel zu groß zu sein. Wenn ich die binrevengine richtig verstehe, muss size bei createVB die Anzahl der vertices sein, also texCoord.size() / (channels * 2).
Gleiches gilt dann natürlich auch bei writeData, dort muss auch die Anzahl der vertices stehen.
Weiterhin fehlt mir bei (sizeof ..., (in createVB) die schließende Klammer, ich gehe davon aus, dass das ein copy'n'paste Fehler ist.
Eigentlich nicht. CreateVB erwartet die Size eines einzelnen Vertex bzw. Datensatzes als 2. Parameter und die Anzahl der Vertices als 3. Daraus wird dann dynamisch die Anzahl der Bytes berechnet:
/**
@brief Default constructor.
@param usage The buffer usage enum type.
@param sizeVertex The size of a single vertex.
@param numVertices The number of vertices append to this buffer.
*/
brVertexBuffer::brVertexBuffer(brDataBuffer::eBufferUsage usage, unsigned int sizeVertex, unsigned int numVertices)
: brDataBuffer(usage), m_numVertices(numVertices), m_sizeVertex(sizeVertex), m_useIndices(false)
{
// calculate the number of bytes of data
m_size = m_sizeVertex*m_numVertices;
}
Somit müsste doch die Größe eines Datensatzes im std::vector doch sizeof(float)*2*channels (2 floats pro channel) sein, oder bin ich da grad auf dem Holzweg? P.S. Jupp das mit der fehlenden Klammer war ein C&P Fehler ...