gpt4 book ai didi

opengl - glVertexAttribPointer 引发不可能的 GL_INVALID_OPERATION?

转载 作者:行者123 更新时间:2023-12-02 09:20:38 25 4
gpt4 key购买 nike

我已将错误范围缩小到此 OpenGL 调用:

glVertexAttribPointer(var.vertex, 4, GL_FLOAT, GL_FALSE, 0, 0);

前面没有错误,后面有 GL_INVALID_OPERATION 错误。我的控制台的输出是:

Error in Shader.cpp : bindMesh : 294
OpenGL Error: Invalid Operation
(0x502)
Bound Buffer: 1
var.vertex = 1

According to this ,唯一适用的 GL_INVALID_OPERATION 条件是绑定(bind)缓冲区 ID 为 0。但绑定(bind)缓冲区 ID 为 1。

我正在检查(并打印)错误:

printErrors();
int i = 0;
glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &i);
printf("\tBound Buffer: %i\n", i);
printf("\tvar.vertex = %i\n", var.vertex);

其中 printErrors() 定义为

void PrintErrors(const char* file, const char* func, int line);
#define printErrors() PrintErrors(__BASE_FILE__,__func__,__LINE__)

void PrintErrors(const char* file, const char* func, int line)
{
const char* errors[] = {
"OpenGL Error: Invalid Enumeration\n",
"OpenGL Error: Invalid Value\n",
"OpenGL Error: Invalid Operation\n",
"OpenGL Error: Invalid Frame-Buffer Operation\n",
"OpenGL Error: Out of Memory\n",
"OpenGL Error: Stack Underflow\n",
"OpenGL Error: Stack Overflow\n",
};

uint32 i = glGetError();
while (i != GL_NO_ERROR)
{
printf("Error in %s : %s : %i\n\t%s\t(0x%x)\n", file, func, line, errors[i - GL_INVALID_ENUM], i);
i = glGetError();
}
}

出了什么问题?

编辑:

var.vertex 被发现为:

var.vertex = glGetAttribLocation(programID, "Vertex");

并进行检查以确保通过 if 语句在绑定(bind)着色器中找到 var.vertex:

if (var.vertex != INVALID_SHADER_VARIABLE) // INVALID_SHADER_VARIABLE = 0xFFFFFFFF (-1 if it where a signed int)
{
glBindBuffer(...);
glBuffferData(...);
glEnableVertexAttribArray(var.vertex);
glVertexAttribPointer(var.vertex, 4, GL_FLOAT, GL_FALSE, 0, 0);
}

最佳答案

您必须在不带扩展名 GL_ARB_compatibility 或核心配置文件上下文的 OpenGL 3.1 上下文中绑定(bind)一个非零顶点数组对象。这是隐藏条件之一,每当您尝试执行与顶点数组相关的任何操作(例如绘制、设置顶点指针等等时,都会生成GL_INVALID_OPERATION)/em>)

好消息是这是一个很容易解决的小问题。

至少,您需要做的就是在初始化程序时生成( glGenVertexArrays (...) )并绑定(bind)( glBindVertexArray (...) )一个顶点数组对象。

关于opengl - glVertexAttribPointer 引发不可能的 GL_INVALID_OPERATION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com