Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
ImguiFilamentBridge.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7// Altered from Filament's ImGuiHelper.cpp
8// Filament code is from somewhere close to v1.4.3 and is:
9/*
10 * Copyright (C) 2018 The Android Open Source Project
11 *
12 * Licensed under the Apache License, Version 2.0 (the "License");
13 * you may not use this file except in compliance with the License.
14 * You may obtain a copy of the License at
15 *
16 * http://www.apache.org/licenses/LICENSE-2.0
17 *
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
23 */
24
25#pragma once
26
27// 4068: Filament has some clang-specific vectorizing pragma's that MSVC flags
28// 4146: PixelBufferDescriptor assert unsigned is positive before subtracting
29// but MSVC can't figure that out.
30// 4293: Filament's utils/algorithm.h utils::details::clz() does strange
31// things with MSVC. Somehow sizeof(unsigned int) > 4, but its size is
32// 32 so that x >> 32 gives a warning. (Or maybe the compiler can't
33// determine the if statement does not run.)
34#ifdef _MSC_VER
35#pragma warning(push)
36#pragma warning(disable : 4068 4146 4293)
37#endif // _MSC_VER
38
39#include <filament/Engine.h>
40#include <filament/IndexBuffer.h>
41#include <filament/Material.h>
42#include <filament/MaterialInstance.h>
43#include <filament/Texture.h>
44#include <filament/VertexBuffer.h>
45#include <filament/View.h>
46
47#ifdef _MSC_VER
48#pragma warning(pop)
49#endif // _MSC_VER
50
51#include <cstddef> // <filament/Engine> recursive includes needs this, std::size_t especially
52#include <memory>
53
54struct ImDrawData;
55
56namespace open3d {
57
58namespace visualization {
59namespace rendering {
60class FilamentRenderer;
61}
62} // namespace visualization
63
64namespace visualization {
65namespace gui {
66
67struct Size;
68class Window;
69
70// Translates ImGui's draw commands into Filament primitives, textures, vertex
71// buffers, etc. Creates a UI-specific Scene object and populates it with a
72// Renderable. Does not handle event processing; clients can simply call
73// ImGui::GetIO() directly and set the mouse state.
75public:
77 const Size& window_size);
79
80 // Helper method called after resolving fontPath; public so fonts can be
81 // added by caller. Requires the appropriate ImGuiContext to be current
82 void CreateAtlasTextureAlpha8(unsigned char* pixels,
83 int width,
84 int height,
85 int bytes_per_px);
86
87 // This populates the Filament View. Clients are responsible for
88 // rendering the View. This should be called on every frame, regardless of
89 // whether the Renderer wants to skip or not.
90 void Update(ImDrawData* imguiData);
91
92 void OnWindowResized(const Window& window);
93
94private:
95 void CreateBuffers(size_t num_required_buffers);
96 void PopulateVertexData(size_t buffer_index,
97 size_t vb_size_in_bytes,
98 void* vb_data,
99 size_t ib_size_in_bytes,
100 void* ib_data);
101 void CreateVertexBuffer(size_t buffer_index, size_t capacity);
102 void CreateIndexBuffer(size_t buffer_index, size_t capacity);
103 void SyncThreads();
104
105private:
106 struct Impl;
107 std::unique_ptr<Impl> impl_;
108};
109
110} // namespace gui
111} // namespace visualization
112} // namespace open3d
Definition ImguiFilamentBridge.h:74
void Update(ImDrawData *imguiData)
Definition ImguiFilamentBridge.cpp:271
~ImguiFilamentBridge()
Definition ImguiFilamentBridge.cpp:211
void OnWindowResized(const Window &window)
Definition ImguiFilamentBridge.cpp:370
void CreateAtlasTextureAlpha8(unsigned char *pixels, int width, int height, int bytes_per_px)
Definition ImguiFilamentBridge.cpp:185
int width
Definition FilePCD.cpp:52
int height
Definition FilePCD.cpp:53
Definition PinholeCameraIntrinsic.cpp:16
Definition ImguiFilamentBridge.cpp:129