前言
增加一篇,修复上节代码中的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);
...
其他的少量变革属于简单的代码调整,可以不用改。