framework2
84 строки · 2.0 Кб
1#include "ofxRaccoonImGui.hpp"
2
3#include "imgui_impl_glfw.h"
4#include "imgui_impl_opengl3.h"
5#include "imgui_impl_opengl2.h"
6
7namespace ofxRaccoonImGui {
8void initialize() {
9ImGui::CreateContext();
10
11ImGuiIO& io = ImGui::GetIO();
12io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
13//io.IniFilename = nullptr;
14
15ofAppGLFWWindow *window = dynamic_cast<ofAppGLFWWindow *>(ofGetWindowPtr());
16GLFWwindow *glfwWindow = window->getGLFWWindow();
17ImGui_ImplGlfw_InitForOpenGL(glfwWindow, true);
18
19if (ofIsGLProgrammableRenderer()) {
20ImGui_ImplOpenGL3_Init();
21}
22else {
23ImGui_ImplOpenGL2_Init();
24}
25}
26void shutdown() {
27if (ofIsGLProgrammableRenderer()) {
28ImGui_ImplOpenGL3_Shutdown();
29}
30else {
31ImGui_ImplOpenGL2_Shutdown();
32}
33ImGui_ImplGlfw_Shutdown();
34ImGui::DestroyContext();
35}
36
37static std::vector<std::shared_ptr<ofTexture>> textureStorage;
38
39void beginGui() {
40if (ofIsGLProgrammableRenderer()) {
41ImGui_ImplOpenGL3_NewFrame();
42}
43else {
44ImGui_ImplOpenGL2_NewFrame();
45}
46
47ImGui_ImplGlfw_NewFrame();
48ImGui::NewFrame();
49}
50void endGui() {
51ImGui::Render();
52
53if (ofIsGLProgrammableRenderer()) {
54ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
55}
56else {
57ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());
58}
59
60textureStorage.clear();
61}
62void image(const ofImage &ofimage) {
63image(ofimage, ofimage.getWidth(), ofimage.getHeight());
64}
65void image(const ofImage &ofimage, float width, float height) {
66if (ofimage.getTexture().getTextureData().textureTarget != GL_TEXTURE_2D) {
67bool arb = ofGetUsingArbTex();
68ofDisableArbTex();
69
70std::shared_ptr<ofTexture> texture = std::shared_ptr<ofTexture>(new ofTexture());
71textureStorage.push_back(texture);
72
73texture->loadData(ofimage.getPixels());
74ImGui::Image((ImTextureID)texture->getTextureData().textureID, ImVec2(width, height));
75
76if (arb) {
77ofEnableArbTex();
78}
79}
80else {
81ImGui::Image((ImTextureID)ofimage.getTexture().getTextureData().textureID, ImVec2(width, height));
82}
83}
84}