Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glfwSwapInterval()导致图形闪烁/中断_C++_Opengl_Glsl_Glfw - Fatal编程技术网

C++ glfwSwapInterval()导致图形闪烁/中断

C++ glfwSwapInterval()导致图形闪烁/中断,c++,opengl,glsl,glfw,C++,Opengl,Glsl,Glfw,我目前正在使用OpenGL进行一个小型2D平台项目,尝试从头开始做大多数事情,作为一个学习练习 目前我遇到的问题似乎与使用glfwSwapInterval(n)有关;。当我将交换间隔设置为0(即,无vsync)时,我正在渲染的游戏对象渲染得非常好,并且移动平稳。将其设置为1会导致对象要么不渲染,要么闪烁,并且角点会四处跳跃。将其设置为更高的值会使问题恶化 我认为相关的代码如下 game.cpp(主游戏类): display.cpp(处理窗口创建): 有人知道是什么导致了这一切吗?我觉得我一定错过

我目前正在使用OpenGL进行一个小型2D平台项目,尝试从头开始做大多数事情,作为一个学习练习

目前我遇到的问题似乎与使用glfwSwapInterval(n)有关;。当我将交换间隔设置为0(即,无vsync)时,我正在渲染的游戏对象渲染得非常好,并且移动平稳。将其设置为1会导致对象要么不渲染,要么闪烁,并且角点会四处跳跃。将其设置为更高的值会使问题恶化

我认为相关的代码如下

game.cpp(主游戏类):

display.cpp(处理窗口创建):

有人知道是什么导致了这一切吗?我觉得我一定错过了一个窗口提示或类似的东西,但我找不到任何提到这一点的文档

编辑:导致问题的着色器代码: basicvert.vs:

#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position.xy = position;
    gl_Position.z = 0.0f;
}

我终于找到了问题的原因

事实证明,这并不是由glfwSwapInterval()引起的-但是,将其设置为0似乎只是由于更高的帧率而掩盖了问题

在我的顶点着色器中,我以vec2的形式传入该位置,并按如下方式设置gl_位置:

#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position.xy = position;
    gl_Position.z = 0.0f;
    // gl_Position.w does not get set -> left as an undefined value?
}
因此,未设置gl_位置的w分量。将此设置为1.0f解决了问题:

#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position = vec4(position, 0.0f, 1.0f); // Works
}
#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position.xy = position;
    gl_Position.z = 0.0f;
}
#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position.xy = position;
    gl_Position.z = 0.0f;
    // gl_Position.w does not get set -> left as an undefined value?
}
#version 330 core

layout (location = 0) in vec2 position;

void main()
{
    gl_Position = vec4(position, 0.0f, 1.0f); // Works
}