glfw3 - 这个绘制调用完全在视锥体之外
glfw3 - This draw call is entirely out of view frustum
我遇到一个非常小的 OpenGL 4.4 应用程序的奇怪问题。
在我们开始之前是基础知识。
片段着色器
#version 440
out vec4 color;
void main(void)
{
color = vec4(1.0, 0.0, 0.0, 1.0);
}
顶点着色器
#version 440
layout(location = 0) in vec2 P;
void main(void)
{
gl_Position = vec4(P, 0.0, 1.0);
}
VBO
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
constexpr std::array<GLfloat, 12> vertex =
{
-1.0f, 0.0f,
-1.0f, -1.0f,
0.0f, 0.0f,
0.0f, 0.0f,
-1.0f, -1.0f,
0.0f, -1.0f
};
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex[0]) * vertex.size(), vertex.data(), GL_STATIC_DRAW);
VAO
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
绘图命令
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, vertex.size());
根据以上内容,我希望在屏幕的左下角看到一个红色框。
我试过的
起初我认为它们一定是顶点数据的问题,而且它在 GPU 上不正确。但是,使用 NSight 我可以确认我的顶点数据正确地传输到 GPU。
真正让我感到困惑的是我从 Nsight 收到的错误消息。我的绘图调用完全超出了视锥体。
这让我感到困惑,因为我在设备标准化坐标中传递顶点数据。唯一的剪裁应该来自创建 glfw window 时设置的视口。
使用 OpenGL 已经有一段时间了。我确信它们是我忽略的一件小事,但没有报告任何错误我被卡住了。
好的女士们先生们,正如我所怀疑的那样。我忘记做的一件小事。
glEnableVertexAttribArray
我从未启用我的顶点数据。
我遇到一个非常小的 OpenGL 4.4 应用程序的奇怪问题。
在我们开始之前是基础知识。
片段着色器
#version 440
out vec4 color;
void main(void)
{
color = vec4(1.0, 0.0, 0.0, 1.0);
}
顶点着色器
#version 440
layout(location = 0) in vec2 P;
void main(void)
{
gl_Position = vec4(P, 0.0, 1.0);
}
VBO
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
constexpr std::array<GLfloat, 12> vertex =
{
-1.0f, 0.0f,
-1.0f, -1.0f,
0.0f, 0.0f,
0.0f, 0.0f,
-1.0f, -1.0f,
0.0f, -1.0f
};
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex[0]) * vertex.size(), vertex.data(), GL_STATIC_DRAW);
VAO
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
绘图命令
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, vertex.size());
根据以上内容,我希望在屏幕的左下角看到一个红色框。
我试过的
起初我认为它们一定是顶点数据的问题,而且它在 GPU 上不正确。但是,使用 NSight 我可以确认我的顶点数据正确地传输到 GPU。
真正让我感到困惑的是我从 Nsight 收到的错误消息。我的绘图调用完全超出了视锥体。
这让我感到困惑,因为我在设备标准化坐标中传递顶点数据。唯一的剪裁应该来自创建 glfw window 时设置的视口。
使用 OpenGL 已经有一段时间了。我确信它们是我忽略的一件小事,但没有报告任何错误我被卡住了。
好的女士们先生们,正如我所怀疑的那样。我忘记做的一件小事。
glEnableVertexAttribArray
我从未启用我的顶点数据。