游戏引擎从零开始(9)-修复bug"imgui窗口渲染不正确"

前言

增加一篇,修复上节代码中的bug。imGui渲染的列表大小和坐标都不对.

修复后效果,imgui界面整齐的摆放到右上角(忽略背景色,感觉会灰色的比较好看,绿色的太刺眼了)

修改点说明

关键的修改点一一说明,另删掉了一些无用代码.

  • Window增加获取真实window的接口

Sandbox/Hazel/src/Hazel/Core/Window.h

c++ 复制代码
...
#include <glad/glad.h>
#include <GLFW/glfw3.h>

class Window {
public:
    ...
    virtual GLFWwindow* GetNativeWindow(){return nullptr;};
    ...
};
  • WindowsWindow中实现获取window的接口

Sandbox/Hazel/src/Hazel/Platform/Windows/WindowsWindow.h

arduino 复制代码
GLFWwindow* GetNativeWindow() {
    return m_Window;
}
  • ImGuiLayer初始化

参考Demo代码,按照最新版本ImGui库的要求, 增加ImGui_ImplGlfw_InitForOpenGL调用

Sandbox/Hazel/src/Hazel/ImGui/ImGuiLayer.cpp

c++ 复制代码
void ImGuiLayer::OnAttach() {
  ...
  ImGui_ImplGlfw_InitForOpenGL(Application::Get().GetWindow().GetNativeWindow(), true);
  ImGui_ImplOpenGL3_Init("#version 330");
}
  • ImGuiLayer update逻辑完善

增加ImGui_ImplGlfw_NewFrame()调用,这里面封装了对窗口适配的处理,上节中渲染不正确最核心的逻辑就是少了这行.

Sandbox/Hazel/src/Hazel/ImGui/ImGuiLayer.cpp

c++ 复制代码
void ImGuiLayer::OnUpdate() {
    ...
    ImGui_ImplOpenGL3_NewFrame();
    ImGui_ImplGlfw_NewFrame();
    ImGui::NewFrame();
    ...
}
  • 去掉glad.h中的异常

glad.h include必须在glfw.h include之前。glfw在好几处会用到,一不小心就容易弄错,我们很明确glad.h已经Hook了OpenGL的接口,这里图省事,直接注释掉了glad.h中报错的那行.

Sandbox/Hazel/src/Hazel/Platform/include/glad/glad.h

c+++ 复制代码
#define __glad_h_

#ifdef __gl_h_
//#error OpenGL header already included, remove this include, glad already provides it
#endif
#define __gl_h_
  • 更新清屏颜色

换个好看点的背景色

Sandbox/Hazel/src/Hazel/Application.cpp

scss 复制代码
while(m_Running) {
    glClearColor(0.45f, 0.55f, 0.60f, 1.00f);
    glClear(GL_COLOR_BUFFER_BIT);
    ...

其他的少量变革属于简单的代码调整,可以不用改。

完整代码参考

fix bug: the imgui window rendered not correct

相关推荐
讳疾忌医丶5 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
2401_868534786 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
软件课代表CiCi6 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd7 小时前
从面经中学到的三件事
c++·笔记
时时三省7 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
ThornArmor10 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
Elsa️74612 小时前
算法一周刷题总结
c++·算法
风合星语12 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!12 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
welfare96212 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++