Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

imgui prototype #1077

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions library/src/interactor_impl.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

#include "camera.h"

#include "imgui_impl_vtk.h"

namespace f3d::detail
{
class interactor_impl::internals
Expand All @@ -51,6 +53,8 @@ class interactor_impl::internals
// in order to be able to interact while animating
this->VTKInteractor->RemoveObservers(vtkCommand::TimerEvent);

ImGui_ImplVTK_AddObservers(this->VTKInteractor);

vtkNew<vtkCallbackCommand> keyPressCallback;
keyPressCallback->SetClientData(this);
keyPressCallback->SetCallback(OnKeyPress);
Expand Down
4 changes: 2 additions & 2 deletions library/src/window_impl.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
#include "vtkF3DGenericImporter.h"
#include "vtkF3DNoRenderWindow.h"
#include "vtkF3DRendererWithColoring.h"
#include "vtkF3DUIRenderWindow.h"

#include <vtkCamera.h>
#include <vtkImageData.h>
#include <vtkImageExport.h>
#include <vtkPNGReader.h>
#include <vtkPointGaussianMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRendererCollection.h>
#include <vtkVersion.h>
#include <vtkWindowToImageFilter.h>
Expand Down Expand Up @@ -169,7 +169,7 @@ window_impl::window_impl(const options& options, Type type)
}
else
{
this->Internals->RenWin = vtkSmartPointer<vtkRenderWindow>::New();
this->Internals->RenWin = vtkSmartPointer<vtkF3DUIRenderWindow>::New();
this->Internals->RenWin->SetOffScreenRendering(type == Type::NATIVE_OFFSCREEN);
this->Internals->RenWin->SetMultiSamples(0); // Disable hardware antialiasing

Expand Down
Binary file added resources/Inter-Regular.ttf
Binary file not shown.
13 changes: 12 additions & 1 deletion vtkext/private/module/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,19 @@ f3d_embed_file(
NAME F3DDefaultHDRI
BINARY)
set(sources
${CMAKE_CURRENT_SOURCE_DIR}/imgui_impl_opengl3.cpp
${CMAKE_CURRENT_SOURCE_DIR}/imgui_impl_vtk.cpp
${CMAKE_CURRENT_BINARY_DIR}/F3DDefaultHDRI.cxx)
set(private_headers
${CMAKE_CURRENT_SOURCE_DIR}/imgui_impl_opengl3.h
${CMAKE_CURRENT_SOURCE_DIR}/imgui_impl_opengl3_loader.h
${CMAKE_CURRENT_SOURCE_DIR}/imgui_impl_vtk.h
${CMAKE_CURRENT_BINARY_DIR}/F3DDefaultHDRI.h)

set(shader_files
glsl/vtkF3DComputeDepthCS.glsl)
glsl/vtkF3DComputeDepthCS.glsl
glsl/vtkF3DImguiFS.glsl
glsl/vtkF3DImguiVS.glsl)

foreach(file IN LISTS shader_files)
vtk_encode_string(
Expand Down Expand Up @@ -49,6 +56,7 @@ set(classes
vtkF3DRenderer
vtkF3DRendererWithColoring
vtkF3DUserRenderPass
vtkF3DUIRenderWindow
)

# Needs https://gitlab.kitware.com/vtk/vtk/-/merge_requests/10675
Expand Down Expand Up @@ -93,3 +101,6 @@ endif()
if(F3D_MODULE_EXR)
vtk_module_link(f3d::vtkextPrivate PRIVATE OpenEXR::OpenEXR)
endif()

find_package(imgui REQUIRED)
vtk_module_link(f3d::vtkextPrivate PRIVATE imgui::imgui)
10 changes: 10 additions & 0 deletions vtkext/private/module/glsl/vtkF3DImguiFS.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//VTK::System::Dec

uniform sampler2D Texture;
in vec2 Frag_UV;
in vec4 Frag_Color;
out vec4 Out_Color;
void main()
{
Out_Color = Frag_Color * texture(Texture, Frag_UV.st);
}
14 changes: 14 additions & 0 deletions vtkext/private/module/glsl/vtkF3DImguiVS.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//VTK::System::Dec

uniform mat4 ProjMtx;
in vec2 Position;
in vec2 UV;
in vec4 Color;
out vec2 Frag_UV;
out vec4 Frag_Color;
void main()
{
Frag_UV = UV;
Frag_Color = Color;
gl_Position = ProjMtx * vec4(Position.xy,0,1);
}
942 changes: 942 additions & 0 deletions vtkext/private/module/imgui_impl_opengl3.cpp

Large diffs are not rendered by default.

63 changes: 63 additions & 0 deletions vtkext/private/module/imgui_impl_opengl3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline
// - Desktop GL: 2.x 3.x 4.x
// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..)

// Implemented features:
// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
// [x] Renderer: Large meshes support (64k+ vertices) with 16-bit indices (Desktop OpenGL only).

// About WebGL/ES:
// - You need to '#define IMGUI_IMPL_OPENGL_ES2' or '#define IMGUI_IMPL_OPENGL_ES3' to use WebGL or OpenGL ES.
// - This is done automatically on iOS, Android and Emscripten targets.
// - For other targets, the define needs to be visible from the imgui_impl_opengl3.cpp compilation unit. If unsure, define globally or in imconfig.h.

// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
// Read online: https://github.com/ocornut/imgui/tree/master/docs

// About GLSL version:
// The 'glsl_version' initialization parameter should be nullptr (default) or a "#version XXX" string.
// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es"
// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp.

#pragma once
#include "imgui.h" // IMGUI_IMPL_API
#ifndef IMGUI_DISABLE

// Backend API
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = nullptr);
IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data);

// (Optional) Called by Init/NewFrame/Shutdown
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture();
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects();

// Specific OpenGL ES versions
//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten
//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android

// You can explicitly select GLES2 or GLES3 API by using one of the '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
#if !defined(IMGUI_IMPL_OPENGL_ES2) \
&& !defined(IMGUI_IMPL_OPENGL_ES3)

// Try to detect GLES on matching platforms
#if defined(__APPLE__)
#include <TargetConditionals.h>
#endif
#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__))
#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es"
#elif defined(__EMSCRIPTEN__) || defined(__amigaos4__)
#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100"
#else
// Otherwise imgui_impl_opengl3_loader.h will be used.
#endif

#endif

#endif // #ifndef IMGUI_DISABLE
Loading