我正在用C++写一个带OGL/GLFW的游戏.
我的游戏总是以60 fps运行,没有任何屏幕撕裂.在做了一些研究之后,似乎该glfwSwapInterval()功能应该能够启用/禁用V-sync或60fps上限.
但是,无论我传递给函数的值如何,帧速率都保持锁定在60并且没有任何撕裂.我还检查了linux和nvidia面板上的compositor设置,它们没有任何效果.
这是我认为常见的事情,有没有办法绕过这个fps上限?
我是 ImGui 库的新手,最近我一直在尝试其中包含的示例。一切都像魅力一样,直到我更改了(我想使用的加载器)gl3w的包含(和功能)。glad当我在两个加载器之间交换时,我在文件内遇到了分段错误异常imgui_impl_glfw_gl3.cpp。我发现一篇文章表明,这可能是由于某些函数无法“绑定”并产生空指针而发生的。
我发现错误在
第216行的代码中line 216:imgui_impl_glfw_gl3.cpp
glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
Run Code Online (Sandbox Code Playgroud)
我还将包含文件从 更改imgui_impl_glfw_gl3.cpp为gl3w,glad但没有结果。
这是我正在执行的主要函数(这是使用glad的imgui的基本opengl3示例):
#include "gui/imgui.h"
#include "gui/imgui_impl_glfw_gl3.h"
#include <stdio.h>
#include <glad/glad.h> // This example is using gl3w to access OpenGL functions (because it is small). You may use glew/glad/glLoadGen/etc. whatever already works for you.
#include <GLFW/glfw3.h>
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error %d: %s\n", error, description);
}
int main(int, char**)
{
// Setup …Run Code Online (Sandbox Code Playgroud) 我目前有一个使用 OGL 4.5 和 GLFW 3 的游戏。
我正在尝试创建一个允许在全屏和窗口模式之间切换的功能。然而,为了实现这一点,我似乎必须销毁当前窗口,然后在同一指针中创建一个新窗口(我在 GLFW 文档中将其红色)。
虽然这可行,并且我可以在两种模式之间进行交换,但一旦交换发生,它会导致引擎的一些关键部分停止绘制。
因此,我想知道是否有某种方法可以启用/禁用全屏而不破坏窗口并创建新窗口。
这是该函数的代码:
void TMooseEngine::toggleFullscreen()
{
_fullscreen = !_fullscreen;
glfwDestroyWindow(window);
delete _shader;
delete _skybox;
//delete _particulas;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if(_fullscreen){ //change to fullscreen
window = glfwCreateWindow(_width, _height, "Fate Warriors", glfwGetPrimaryMonitor(), NULL);
glfwMakeContextCurrent(window);
glViewport(0,0,_width,_height);
//culling
glEnable(GL_DEPTH_TEST);
glViewport(0,0,_width,_height);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
_shader = new Shader();
_skybox = new Skybox();
initUI();
}
else{ //change to windowed
window = glfwCreateWindow(_width, _height, "Fate Warriors", NULL, NULL);
glfwMakeContextCurrent(window);
glViewport(0,0,_width,_height);
//culling
glEnable(GL_DEPTH_TEST);
glViewport(0,0,_width,_height);
glEnable(GL_CULL_FACE); …Run Code Online (Sandbox Code Playgroud)