Я пытаюсь добавить im gui для отладки сцены, но im gui всегда визуализируется сзади независимо от порядка, в котором я вызываю визуализацию. scene и im gui отрисовывается нормально, если выполняется индивидуально (с комментариями к другому). Я попытался отключить проверку глубины, используя функцию трафарета, каждый раз, когда сначала отображается im gui. render l oop как
void render() {
bool show_demo_window = true;
bool show_another_window = false;
ImVec4 clear_color = ImVec4(0.1f, 0.1f, 0.1f, 1.0f);
float m_time = glfwGetTime();
while (!glfwWindowShouldClose(window))
glfwGetFramebufferSize(window, &framebufferwidth, &framebufferheight);
glViewport(0, 0, framebufferwidth, framebufferheight);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindVertexArray(0);
glBindTexture(GL_TEXTURE_2D, 0);
finalShader->Use();
for (int i = 0; i < finTex.size(); i++) {
finTex[i]->bind();
std::string top = "texture" + std::to_string(i);
finalShader->setUniform1i(top.c_str(), finTex[i]->getTextureUnit());
}
window2D->updateProjMatrix(window);
winCam->sendToShader(finalShader);
window2D->updateModelMatrix();
window2D->Draw();
finalShader->unUse();
// Rendering ImGui
ImGuiIO& io = ImGui::GetIO();
int framebufferwidth;
int framebufferheight;
glfwGetFramebufferSize(window, &framebufferwidth, &framebufferheight);
io.DisplaySize = ImVec2(framebufferwidth, framebufferheight);
float time = glfwGetTime();
io.DeltaTime = 1 / 60.f;
// Start the Dear ImGui frame
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
if (show_demo_window)
ImGui::ShowDemoWindow(&show_demo_window);
ImGui::EndFrame();
ImGui::Render();
preRender();
postRender();
glfwSwapBuffers(window);
glfwPollEvents();
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
}
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
}
также для инициализации Im Gui, так как я инициализировал ядро окна с помощью opengl 4.4
ImGui_ImplOpenGL3_Init("#version 440");
, также этот код находится в другом пространстве имен и делает dll, который затем связывается.
Изменить: я получил ошибку, которой на самом деле не было, я использовал ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
после glfwSwapBuffers(window);