void G3D::write(AbstractWriter& writer, const GeometrySoA& geometry, uint32_t vertexType) { if (writer.isOpen()) { if (vertexType == SoA) { writeHeader(writer, geometry.info); writeContent(writer, geometry); } else if (vertexType == AoS) { writeHeader(writer, geometry.info, &vertexType); writeIndices(writer, geometry.indices, geometry.info); auto vertices = convertVertices(geometry.vertexAttributes, geometry.info); writeVertices(writer, vertices, geometry.info); } } }
void G3D::readSoA(AbstractReader& reader, G3D::GeometrySoA& geometry) { if (reader.isOpen()) { geometry.info = readHeader(reader); if (geometry.info.numberVertices == 0) return; if (geometry.info.vertexType == SoA) readContent(reader, geometry); else if (geometry.info.vertexType == AoS) { geometry.info.vertexType = SoA; geometry.indices = readIndices(reader, geometry.info); std::vector<float> vertices = readVertices(reader, geometry.info); geometry.vertexAttributes = convertVertices(vertices, geometry.info); } } }
void G3D::readAoS(AbstractReader& reader, G3D::GeometryAoS& geometry) { if (reader.isOpen()) { geometry.info = readHeader(reader); if (geometry.info.numberVertices == 0) return; if (geometry.info.vertexType == AoS) readContent(reader, geometry); else if (geometry.info.vertexType == SoA) { geometry.info.vertexType = AoS; geometry.indices = readIndices(reader, geometry.info); auto vertexAttributes = readVertexAttributes(reader, geometry.info); geometry.vertices = convertVertices(vertexAttributes, geometry.info); } } }
void generatePolygon(int array[][COL], float XCoord[], float YCoord[], int n) { plotVertices(array, XCoord, YCoord, n); //pressEnter(); int i, j; for (i = 0; i < n; i++) { j = i + 1; if (j < n) generateEdge(array, XCoord[i], YCoord[i], XCoord[j], YCoord[j]); else generateEdge(array, XCoord[i], YCoord[i], XCoord[0], YCoord[0]); } //pressEnter(); //fillPolygon(array, XCoord, YCoord, n); convertVertices(array); //pressEnter(); }
void G3D::read(const std::string & file, GeometrySoA * const geometry) { std::fstream fs; fs.open(file.c_str(), std::fstream::in | std::fstream::binary); if (fs.is_open()) { readHeader(fs, geometry->info); if (geometry->info.vertexType == SoA) readContent(fs, *geometry); else if (geometry->info.vertexType == AoS) { geometry->info.vertexType = SoA; readIndices(fs, geometry->indices, geometry->info); float * vertices = NULL; readVertices(fs, vertices, geometry->info); convertVertices(vertices, geometry->vertexAttributes, geometry->info); cleanVertices(vertices); } fs.close(); } }
void G3D::write(const std::string & file, const GeometryAoS * const geometry, const uint32_t vertexType) { std::fstream fs; fs.open(file.c_str(), std::fstream::out | std::fstream::binary | std::fstream::trunc); if (fs.is_open()) { if (vertexType == AoS) { writeHeader(fs, geometry->info); writeContent(fs, *geometry); } else if (vertexType == SoA) { writeHeader(fs, geometry->info, &vertexType); writeIndices(fs, geometry->indices, geometry->info); std::vector<float*> vertexAttributes; convertVertices(geometry->vertices, vertexAttributes, geometry->info); writeVertices(fs, vertexAttributes, geometry->info); cleanVertices(vertexAttributes); } fs.close(); } }