Функция imgui Image () не работает, OpenGL [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Функция imgui Image () не работает, OpenGL [закрыто]

Сообщение Anonymous »

Я рендерирую в 2D -текстуру, используя вычислительный шейдер, а затем пытаюсь отобразить эту текстуру в окне imgui, используя imgui :: image () . Появляется окно графического интерфейса, и я добавил imgui :: text ("test") чуть ниже виджета изображения, чтобы подтвердить поведение макета. Вот соответствующий код: < /p>

Код: Выделить всё

void MyGui::createGui(GLuint textureID, int texWidth, int texHeight) {
dock();

// scene viewer
ImGui::Begin("Scene View");

ImVec2 windowSize = ImGui::GetContentRegionAvail();
ImGui::Image(
(ImTextureID)textureID,
windowSize
);

ImGui::Text("test");

ImGui::End();
}
< /code>
Вот мой основной цикл рендеринга: < /p>
void App::run() {
printDebugInfo();

while (!glfwWindowShouldClose(m_window)) {
// tell ImGui that a new frame is about to begin
m_my_gui.newFrameImGui();
// increment frame count
m_frame_count++;
// clear the buffer
glClearColor(0.1f, 0.1f, 0.2f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);

// compute shader pass
m_compute_program.use();

setPerFrameUniforms();     // set !static uniforms every frame
if (m_frame_count == 1)    // set static uniforms once
setStaticUniforms();

glBindImageTexture(0, m_compute_texture.getID(), 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);

// If reading from same texture (for accumulation), bind as sampler
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_compute_texture.getID());
glUniform1i(glGetUniformLocation(m_compute_program.getID(), "inputTexture"), 1);

glDispatchCompute(m_WINDOW_WIDTH / 8, m_WINDOW_HEIGHT / 4, 1);
glMemoryBarrier(GL_ALL_BARRIER_BITS);

ImGui::Begin("Save");
if (ImGui::Button("Export")) {
exportImage(m_compute_texture.getID(), m_WINDOW_WIDTH, m_WINDOW_HEIGHT);
}
ImGui::End();

// draw all the GUI elements
m_my_gui.createGui(m_compute_texture.getID(), m_WINDOW_WIDTH, m_WINDOW_HEIGHT);

// redner ImGui, update events, swap buffers
m_my_gui.render();
glfwSwapBuffers(m_window);
glfwPollEvents();
}
}

< /code>
mygui class: < /p>
#include "MyGui.hpp"

MyGui::MyGui() {

}

MyGui::~MyGui() {

}

void MyGui::createGui(GLuint textureID, int texWidth, int texHeight) {
dock();

// scene viewer
ImGui::Begin("Scene View");

ImVec2 windowSize = ImGui::GetContentRegionAvail();
ImGui::Image(
(ImTextureID)textureID,
windowSize
);

ImGui::Text("test");

ImGui::End();
}

void MyGui::dock()
{
static bool opt_fullscreen = true;
static bool opt_padding = false;
static ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;

ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDocking;
if (opt_fullscreen)
{
ImGuiViewport* viewport = ImGui::GetMainViewport();
ImGui::SetNextWindowPos(viewport->Pos);
ImGui::SetNextWindowSize(viewport->Size);
ImGui::SetNextWindowViewport(viewport->ID);
window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse |
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
}

if (!opt_padding)
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));

ImGui::Begin("DockSpace Demo", nullptr, window_flags);

if (!opt_padding)
ImGui::PopStyleVar();

// DockSpace
ImGuiID dockspace_id = ImGui::GetID("MyDockSpace");
ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);

ImGui::End();
}

void MyGui::initImGui(GLFWwindow* window) {
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();  (void)io;
ImGui::StyleColorsDark();
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init("#version 460");

// flags
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
}

void MyGui::newFrameImGui() {
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
}

void MyGui::render() const {
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

// viewports
ImGuiIO& io = ImGui::GetIO();
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
{
GLFWwindow* backup_current_context = glfwGetCurrentContext();
ImGui::UpdatePlatformWindows();
ImGui::RenderPlatformWindowsDefault();
glfwMakeContextCurrent(backup_current_context);
}
}
< /code>
и класс текстур: < /p>
#include "Texture.hpp"

Texture::Texture(int width, int height)
: m_width(width), m_height(height), m_id(0) {
}

Texture::~Texture() {
glDeleteTextures(1, &m_id);
}

void Texture::create() {
glCreateTextures(GL_TEXTURE_2D, 1, &m_id);

glTextureParameteri(m_id, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTextureParameteri(m_id, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTextureParameteri(m_id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTextureParameteri(m_id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTextureStorage2D(m_id, 1, GL_RGBA32F, m_width, m_height);
}

void Texture::bind(GLenum texture_unit) const {
glBindTextureUnit(texture_unit, m_id);
}

Вот как это выглядит
Я попытался экспортировать текстуру, используя stb_iamge , чтобы увидеть, не будет ли она пустой, и это не было. Текстура существует в меммории. Попробовал переключиться с стыковки Imgui на Imgui Master, и это не помогло

Подробнее здесь: https://stackoverflow.com/questions/797 ... ork-opengl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Рендеринг текстуры OpenGL в ImGui::Image с использованием двух цветовых буферов [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • ImGui Hooking (imgui-antihook) [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    63 Просмотры
    Последнее сообщение Anonymous
  • QT игнорирует запрос на Desktop OpenGL на Linux, использует вместо этого OpenGL ES. Почему? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Intervention\Image\Facades\Image не работает на Laravel 10 и Intervention 3.7
    Anonymous » » в форуме Php
    0 Ответы
    74 Просмотры
    Последнее сообщение Anonymous
  • «Вызов неопределенного метода Intervention\Image\Image::make()»
    Anonymous » » в форуме Php
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»