gpt4 book ai didi

c++ - OpenGL glGetError 1281 错误值

转载 作者:可可西里 更新时间:2023-11-01 17:21:32 26 4
gpt4 key购买 nike

我正在使用带顶点和着色器的 OpenGL,屏幕上没有显示任何内容,所以我使用 glGetError 进行调试:我在一个名为 color_array_buffer 的缓冲区上收到错误 1281(错误值),这是我正在谈论的部分:

    GLenum error =  glGetError();
if(error) {
cout << error << endl;
return ;
} else {
cout << "no error yet" << endl;
}
//no error


// Get a handle for our "myTextureSampler" uniform
GLuint TextureID = glGetUniformLocation(shaderProgram, "myTextureSampler");
if(!TextureID)
cout << "TextureID not found ..." << endl;

// Bind our texture in Texture Unit 0
glActiveTexture(GL_TEXTURE0);
sf::Texture::bind(texture);
// Set our "myTextureSampler" sampler to user Texture Unit 0
glUniform1i(TextureID, 0);
// 2nd attribute buffer : UVs
GLuint vertexUVID = glGetAttribLocation(shaderProgram, "color");
if(!vertexUVID)
cout << "vertexUVID not found ..." << endl;
glEnableVertexAttribArray(vertexUVID);
glBindBuffer(GL_ARRAY_BUFFER, color_array_buffer);
glVertexAttribPointer(vertexUVID, 2, GL_FLOAT, GL_FALSE, 0, 0);

error = glGetError();
if(error) {
cout << error << endl;
return ;
}
//error 1281

这是我将缓冲区链接到数组的代码:

    if (textured) {
texture = new sf::Texture();
if(!texture->loadFromFile("textures/simple.jpeg"/*,sf::IntRect(0, 0, 128, 128)*/))
std::cout << "Error loading texture !!" << std::endl;
glGenBuffers(1, &color_array_buffer);
glBindBuffer(GL_ARRAY_BUFFER, color_array_buffer);
glBufferData(GL_ARRAY_BUFFER, uvs.size() * sizeof(glm::vec3), &uvs[0], GL_STATIC_DRAW);
}

和我的 uvs 值:

uvs[0] : 0.748573-0.750412

uvs[1] : 0.749279-0.501284

uvs[2] : 0.99911-0.501077

uvs[3] : 0.999455-0.75038

uvs[4] : 0.250471-0.500702

uvs[5] : 0.249682-0.749677

uvs[6] : 0.001085-0.75038

uvs[7] : 0.001517-0.499994

uvs[8] : 0.499422-0.500239

uvs[9] : 0.500149-0.750166

uvs[10] : 0.748355-0.99823

uvs[11] : 0.500193-0.998728

uvs[12] : 0.498993-0.250415

uvs[13] : 0.748953-0.25092

我是不是做错了什么,如果有人能帮助我那就太好了。

最佳答案

您对 glGetAttribLocation() 的检查未能找到该属性是不正确的:

GLuint vertexUVID = glGetAttribLocation(shaderProgram, "color");
if(!vertexUVID)
cout << "vertexUVID not found ..." << endl;

glGetAttribLocation() 返回一个 GLint(不是 GLuint),如果一个在程序中找不到具有给定名称的属性。由于您将该值分配给一个无符号变量,它最终将成为最大可能的无符号变量,如果您之后将其传递给 glEnableVertexAttribArray(),则该参数是无效参数。

您的代码应该如下所示:

GLint vertexUVID = glGetAttribLocation(shaderProgram, "color");
if(vertexUVID < 0)
cout << "vertexUVID not found ..." << endl;

请注意,0 是一个完全有效的属性位置。

关于c++ - OpenGL glGetError 1281 错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507571/

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