Blender V5.0
mesh.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <pxr/base/vt/array.h>
8#include <pxr/imaging/hd/sceneDelegate.h>
9
10#include "BLI_set.hh"
11
12#include "material.hh"
13#include "object.hh"
14
15namespace blender::io::hydra {
16
17class MeshData : public ObjectData {
18 public:
19 struct SubMesh {
20 pxr::VtVec3fArray vertices;
21 pxr::VtIntArray face_vertex_counts;
22 pxr::VtIntArray face_vertex_indices;
23 pxr::VtVec3fArray normals;
24 pxr::VtVec2fArray uvs;
25 int mat_index = 0;
27 };
28
29 private:
30 Vector<SubMesh> submeshes_;
31 int submeshes_count_ = 0;
32
33 public:
34 MeshData(HydraSceneDelegate *scene_delegate, const Object *object, pxr::SdfPath const &prim_id);
35
36 void init() override;
37 void insert() override;
38 void remove() override;
39 void update() override;
40
41 pxr::VtValue get_data(pxr::TfToken const &key) const override;
42 pxr::VtValue get_data(pxr::SdfPath const &id, pxr::TfToken const &key) const override;
43 pxr::SdfPath material_id(pxr::SdfPath const &id) const override;
44 void available_materials(Set<pxr::SdfPath> &paths) const override;
45
46 pxr::HdMeshTopology topology(pxr::SdfPath const &id) const;
47 pxr::HdPrimvarDescriptorVector primvar_descriptors(pxr::HdInterpolation interpolation) const;
48 pxr::HdCullStyle cull_style(pxr::SdfPath const &id) const;
49 bool double_sided(pxr::SdfPath const &id) const;
50 void update_double_sided(MaterialData *mat_data);
51 pxr::SdfPathVector submesh_paths() const;
52
53 protected:
54 void write_materials() override;
55
56 private:
57 pxr::SdfPath submesh_prim_id(int index) const;
58 const SubMesh &submesh(pxr::SdfPath const &id) const;
59 void write_submeshes(const Mesh *mesh);
60 void update_prims();
61};
62
63} // namespace blender::io::hydra
pxr::SdfPath prim_id
Definition id.hh:36
pxr::HdMeshTopology topology(pxr::SdfPath const &id) const
pxr::VtValue get_data(pxr::TfToken const &key) const override
pxr::SdfPathVector submesh_paths() const
pxr::HdCullStyle cull_style(pxr::SdfPath const &id) const
void update_double_sided(MaterialData *mat_data)
void available_materials(Set< pxr::SdfPath > &paths) const override
pxr::HdPrimvarDescriptorVector primvar_descriptors(pxr::HdInterpolation interpolation) const
bool double_sided(pxr::SdfPath const &id) const
MeshData(HydraSceneDelegate *scene_delegate, const Object *object, pxr::SdfPath const &prim_id)
virtual pxr::SdfPath material_id() const
ObjectData(HydraSceneDelegate *scene_delegate, const Object *object, pxr::SdfPath const &prim_id)
pxr::VtIntArray face_vertex_counts
Definition mesh.hh:21
pxr::VtIntArray face_vertex_indices
Definition mesh.hh:22