联系我们
简单又实用的WordPress网站制作教学
当前位置:网站首页 > 程序开发学习 > 正文

游戏引擎从零开始(9)-修复错误&imgui窗口渲染不正确&;

作者:访客发布时间:2023-10-28分类:程序开发学习浏览:138


导读:前言增加一篇,修复上节代码中的错误。Imgui渲染的列表大小和坐标都不对。修复后效果,Imgui界面整齐的摆放到右上角(忽略背景色,感觉会灰色的比较好看,绿色的太刺眼了)修改点说明...

前言

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

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

修改点说明

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

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

沙盒/深色/src/深色/核心/Window.h

...
#include <glad/glad.h>
#include <GLFW/glfw3.h>

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

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

GLFWwindow* GetNativeWindow() {
    return m_Window;
}
  • ImGuiLayer初始化

参考演示代码,按照最新版本Imgui库的要求, 增加Imgui_ImplGlfw_InitForOpenGL调用

沙盒/Hazel/src/Hazel/ImGui/ImGuiLayer.cpp

void ImGuiLayer::OnAttach() {
  ...
  ImGui_ImplGlfw_InitForOpenGL(Application::Get().GetWindow().GetNativeWindow(), true);
  ImGui_ImplOpenGL3_Init("#version 330");
}
  • ImGuiLayer更新逻辑完善

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

沙盒/Hazel/src/Hazel/ImGui/ImGuiLayer.cpp

void ImGuiLayer::OnUpdate() {
    ...
    ImGui_ImplOpenGL3_NewFrame();
    ImGui_ImplGlfw_NewFrame();
    ImGui::NewFrame();
    ...
}
  • 去掉glad.h中的异常

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

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

#define __glad_h_

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

换个好看点的背景色

沙盒/哈泽尔/src/哈泽尔/应用.cpp

while(m_Running) {
    glClearColor(0.45f, 0.55f, 0.60f, 1.00f);
    glClear(GL_COLOR_BUFFER_BIT);
    ...

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

完整代码参考

修复错误:imgui窗口呈现不正确


标签:不正确从零开始窗口引擎游戏错误


程序开发学习排行
最近发表
网站分类
标签列表