Mercurial > hg > forks > gldragon
view dmply.h @ 83:69d7349dc5d3
Render a textured quad with bitmap letter 'A' in the bottom left corner as
an additional test - this does not render correctly with Zink (on Intel
Haswell at least).
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 09 Mar 2020 09:40:28 +0200 |
parents | 9ee0edff3940 |
children |
line wrap: on
line source
// // GLDragon - OpenGL PLY model viewer / simple benchmark // -- PLY file parsing // Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org> // (C) Copyright 2019-2020 Tecnic Software productions (TNSP) // // See file "COPYING" for license information. // #ifndef DMPLY_H #define DMPLY_H 1 #include "dmscene.h" #include <unordered_map> /* Constants */ #define PLY_PROP_VERTEX_INDICES "vertex_indices" #define PLY_ELEM_FACE "face" #define PLY_ELEM_VERTEX "vertex" enum DMPLYFormat { PLY_FMT_UNKNOWN, PLY_FMT_ASCII, PLY_FMT_BIN_LE, PLY_FMT_BIN_BE }; enum DMPLYPropType { PLY_TYPE_NONE, PLY_TYPE_LIST, PLY_TYPE_UINT8, PLY_TYPE_INT8, PLY_TYPE_INT16, PLY_TYPE_UINT16, PLY_TYPE_INT32, PLY_TYPE_UINT32, PLY_TYPE_FLOAT, PLY_TYPE_DOUBLE }; /* Structures */ union DMPLYPropValue { double v_double; float v_float; unsigned int v_uint; int v_int; }; struct DMPLYFileProperty { std::string name; DMPLYPropType type, list_num_type, list_values_type; DMPLYPropValue value, list_num_value; std::vector<DMPLYPropValue> list_values; }; struct DMPLYFileElement { int value; std::string name; std::unordered_map<std::string, DMPLYFileProperty> prop_map; std::vector<DMPLYFileProperty *> properties; DMPLYFileProperty *checkProp(const std::string &prop) { if (prop_map.count(prop)) return &prop_map[prop]; else return 0; } }; struct DMPLYFileInfo : DMTextFileInfo { DMPLYFormat format; std::unordered_map<std::string, DMPLYFileElement> elem_map; std::vector<DMPLYFileElement *> elements; DMPLYFileElement *element; DMPLYFileInfo() { element = 0; format = PLY_FMT_UNKNOWN; } DMPLYFileElement *checkElem(const std::string &elem) { if (elem_map.count(elem)) return &elem_map[elem]; else return 0; } }; /* Functions */ bool dmLoadFromPLY(DMModel &model, const std::string &filename); bool dmLoadFromPLY(DMModel &model, const std::string &filename, DMPLYFileInfo &info); #endif