Fermat
MeshLoader.h
1 /*
2  * Fermat
3  *
4  * Copyright (c) 2008-2019, NVIDIA CORPORATION. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the NVIDIA CORPORATION nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #pragma once
30 
31 #include "MeshBase.h"
32 #include "MeshStorage.h"
33 
34 
35 class MeshLoader : public MeshBase
36 {
37 public:
38 
39  typedef MeshBase Base;
40 
41  MeshLoader(MeshStorage* mesh);
42 
43  virtual ~MeshLoader();
44 
45  int getVertexTriangleSize() const { return MeshStorage::VERTEX_TRIANGLE_SIZE; }
46  int getNormalTriangleSize() const { return MeshStorage::NORMAL_TRIANGLE_SIZE; }
47  int getTextureTriangleSize() const { return MeshStorage::TEXTURE_TRIANGLE_SIZE; }
48 
49  int* getVertexIndices() { return m_vertex_indices; }
50  const int* getVertexIndices() const { return m_vertex_indices; }
51  int* getNormalIndices() { return m_normal_indices; }
52  const int* getNormalIndices() const { return m_normal_indices; }
53  int* getColorIndices() { return m_color_indices; }
54  const int* getColorIndices() const { return m_color_indices; }
55  int* getTextureCoordinateIndices() { return m_texture_coordinate_indices; }
56  const int* getTextureCoordinateIndices() const { return m_texture_coordinate_indices; }
57 
58  void setGroupName(const uint32 i, const std::string& group_name) { m_mesh->m_group_names[i] = group_name; }
59 
60 protected:
61 
62  // Implementation of MeshBase's subclass interface
63  virtual void preProcess();
64  virtual void allocateData();
65  virtual void startWritingData();
66  virtual void postProcess();
67  virtual void finishWritingData();
68 
69 private:
70 
71  // A helper functor for allocateData()
72  struct AllocateGroupsFunctor;
74 
75  MeshStorage* m_mesh;
76 
77  int* m_vertex_indices;
78  int* m_normal_indices;
79  int* m_color_indices;
80  int* m_texture_coordinate_indices;
81  int* m_material_indices;
82  int* m_group_offsets;
83 };
virtual void allocateData()
Definition: MeshLoader.cpp:83
virtual void startWritingData()
Definition: MeshLoader.cpp:118
virtual void postProcess()
Definition: MeshLoader.cpp:121
Definition: MeshLoader.h:35
virtual void finishWritingData()
Definition: MeshLoader.cpp:146
int getVertexTriangleSize() const
Definition: MeshLoader.h:45
Definition: MeshStorage.h:44
virtual void preProcess()
Definition: MeshLoader.cpp:53
Definition: MeshLoader.cpp:123
Definition: MeshLoader.cpp:59
Definition: MeshBase.h:148