Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ SFML-Opengl VAO问题给了我一个(1282)错误_C++_Opengl_Sfml_Opengl 3_Opengl 4 - Fatal编程技术网

C++ SFML-Opengl VAO问题给了我一个(1282)错误

C++ SFML-Opengl VAO问题给了我一个(1282)错误,c++,opengl,sfml,opengl-3,opengl-4,C++,Opengl,Sfml,Opengl 3,Opengl 4,我在尝试使用VAO的SFML内部时出错,不确定它是SFML还是我自己的opengl代码 GLenum err = glewInit(); if (err != GLEW_OK) { std::cout << "NOT WORKING" << std::endl; } std::vector<sf::Vector3f> g_vertext_buffer_data; g_vertex_buffer_data.push_back({ -1.0f, -

我在尝试使用VAO的SFML内部时出错,不确定它是SFML还是我自己的opengl代码

GLenum err = glewInit();
if (err != GLEW_OK)
{
    std::cout << "NOT WORKING" << std::endl;
}
    std::vector<sf::Vector3f> g_vertext_buffer_data;
g_vertex_buffer_data.push_back({ -1.0f, -1.0f, 0.0f });
g_vertex_buffer_data.push_back({1.0f, -1.0f, 0.0f});
g_vertex_buffer_data.push_back({ 0.0f, 1.0f, 0.0f });

const char* vertexShaderSource =
    "#version 330\n\
                             in vec4 position;\
                                                  void main(void){\                                                                                     gl_Position = position;\
                                                                                                         }";
// compile fragment shader source
const GLchar* fragmentShaderSource = 
    "#version 330\n\
                                    void main(void) {\
                out vec4 fragcolor;                                         fragcolor= vec4(1.0,1.0,1.0,1.0);\
                                                                                                     }";

/* Creating Shader */
this->programId = glCreateProgram();
this->vId = glCreateShader(GL_VERTEX_SHADER);
this->fId = glCreateShader(GL_FRAGMENT_SHADER);
/* Get Shader Size */
int vertexShaderLength = strlen(vertexShaderSource);
int fragmentShaderLength = strlen(fragmentShaderSource);

/* Loading and binding shader */
glShaderSource(this->vId, 1, &vertexShaderSource, NULL);
glShaderSource(this->fId, 1, &fragmentShaderSource, NULL);

/* Compile Shaders */
glCompileShader(vId);
glCompileShader(fId);
/* Attach Shaders */
glAttachShader(this->programId, this->vId);
glAttachShader(this->programId, this->fId);

/* Linkg program */
glLinkProgram(this->programId);
/* Use and bind attribute */
glUseProgram(this->programId);
this->positionId = glGetAttribLocation(this->programId, "position");
glUseProgram(0);
/* VAO Time */
glGenVertexArrays(1, &this->vaoId);
glBindVertexArray(this->vaoId);

/* VBO Time assigning to VAO */
glGenBuffers(1, &this->vboId);
glBindBuffer(GL_ARRAY_BUFFER, this->vboId);
glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data.size() * sizeof(sf::Vector3f), &g_vertex_buffer_data[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(this->positionId);
glVertexAttribPointer(this->positionId, 2, GL_FLOAT, GL_FALSE, sizeof(sf::Vector3f), 0);

/* Close out bindings */
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
  while(1)
  {
glUseProgram(this->programId);
glBindVertexArray(this->vaoId);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glUseProgram(0);    
 gameWindow.glPushStates();
  }
GLenum err=glewInit();
如果(错误!=GLEW_OK)
{
std::cout vId=glCreateShader(GL_顶点_着色器);
此->fId=glCreateShader(GL\u片段\u着色器);
/*获取着色器大小*/
int vertexShaderLength=strlen(vertexShaderSource);
int fragmentShaderLength=strlen(fragmentShaderSource);
/*加载和绑定着色器*/
glShaderSource(this->vId,1,&vertexShaderSource,NULL);
glShaderSource(此->fId,1,&fragmentShaderSource,NULL);
/*编译着色器*/
glCompileShader(vId);
glCompileShader(fId);
/*附加着色器*/
glAttachShader(this->programmaid,this->vId);
glAttachShader(此->程序ID,此->fId);
/*链接程序*/
glLinkProgram(此->程序ID);
/*使用和绑定属性*/
glUseProgram(此->程序ID);
此->位置ID=GLGetAttriblLocation(此->程序ID,“位置”);
glUseProgram(0);
/*VAO时间*/
glgenvertexarray(1,&this->vaoId);
glBindVertexArray(此->vaoId);
/*VBO时间分配给VAO*/
glGenBuffers(1,&this->vboId);
glBindBuffer(GL_数组_BUFFER,this->vboId);
glBufferData(GL_数组缓冲区、g_顶点缓冲区数据.size()*sizeof(sf::Vector3f)和g_顶点缓冲区数据[0],GL_静态图);
GlenableVertexAttributeArray(此->位置ID);
glvertexattributepointer(这个->位置ID,2,GL\u浮点,GL\u假,sizeof(sf::Vector3f),0);
/*收尾绑定*/
glBindVertexArray(0);
glBindBuffer(GL_数组_BUFFER,0);
而(1)
{
glUseProgram(此->程序ID);
glBindVertexArray(此->vaoId);
gldrawArray(GL_三角形,0,3);
glBindVertexArray(0);
glUseProgram(0);
gameWindow.glpushState();
}
我得到的错误代码是:用户代码中的opengl错误(1282)​


我已更改了blBufferData()中提出的大小()问题,但仍然存在该问题。

GLGetAttriblLocation的可能错误代码为:

GL_INVALID_OPERATION
没有固定值的。请尝试使用
gluErrorString()
获取错误字符串,或查看标题中的1282个映射

•检查您的着色器是否编译无误

•检查着色器链接是否正确

什么类型有
positionId
?所有对象id必须是
GLuint
类型

顺便说一句,所有方式都支持着色器编译链接错误检查,调试将提供更多信息

我是这样做的(OpenGL ES 2.0):

在使用GLSL 3.3时,首先必须通过调用

glBindFragDataLocation(this->programId, 0, "fragcolor");
其次,片段着色器必须是

"#version 330
out vec4 fragcolor;

void main(void) {
     fragcolor= vec4(1.0,1.0,1.0,1.0); 
}

启用了使用此类着色器的示例。
glGetAttriblLocation
可能的错误代码如下:

GL_INVALID_OPERATION
没有固定值的。请尝试使用
gluErrorString()
获取错误字符串,或查看标题中的1282个映射

•检查您的着色器是否编译无误

•检查着色器链接是否正确

什么类型有
positionId
?所有对象id必须是
GLuint
类型

顺便说一句,所有方式都支持着色器编译链接错误检查,调试将提供更多信息

我是这样做的(OpenGL ES 2.0):

在使用GLSL 3.3时,首先必须通过调用

glBindFragDataLocation(this->programId, 0, "fragcolor");
其次,片段着色器必须是

"#version 330
out vec4 fragcolor;

void main(void) {
     fragcolor= vec4(1.0,1.0,1.0,1.0); 
}

使用此类着色器的示例已打开。

传递到
glBufferData
的大小至少存在问题:

glBufferData(GL_ARRAY_BUFFER,
             sizeof(g_vertex_buffer_data) * sizeof(sf::Vector3f), 
             g_vertex_buffer_data[0], GL_STATIC_DRAW);
sizeof(g_vertex\u buffer\u data)
等于
sizeof(std::vector)
,它是矢量对象的大小,而不是包含的数据的大小。请尝试使用

    glBufferData(GL_ARRAY_BUFFER,
             g_vertex_buffer_data.size() * sizeof(sf::Vector3f), 
             g_vertex_buffer_data[0], GL_STATIC_DRAW);
另一件事:在OpenGL 3.3核心概要文件中没有
gl\u FragColor
变量。您必须定义一个out变量


下一步:顶点着色器似乎为空。必须写入
gl\u位置
,否则不会显示任何内容。

传递到
glBufferData
的大小至少有问题:

glBufferData(GL_ARRAY_BUFFER,
             sizeof(g_vertex_buffer_data) * sizeof(sf::Vector3f), 
             g_vertex_buffer_data[0], GL_STATIC_DRAW);
sizeof(g_vertex\u buffer\u data)
等于
sizeof(std::vector)
,它是矢量对象的大小,而不是包含的数据的大小。请尝试使用

    glBufferData(GL_ARRAY_BUFFER,
             g_vertex_buffer_data.size() * sizeof(sf::Vector3f), 
             g_vertex_buffer_data[0], GL_STATIC_DRAW);
另一件事:在OpenGL 3.3核心概要文件中没有
gl\u FragColor
变量。您必须定义一个out变量


下一步:您的顶点着色器似乎为空。您必须写入
gl\u位置
,否则将不会显示任何内容。

欢迎这样做!请将这些代码片段组装成一个,否则我们将不得不猜测未显示的代码中会发生什么。这是opengGl代码中使用的所有代码。因为我不确定问题在哪里我刚刚包括了所有的OpenGl代码。这里的MVCE定义得很好,如果没有它,你的问题就不会发生。我不会花时间编写一个测试应用程序来让你的代码片段可以运行,我怀疑其他人会这样做。欢迎这么做!请将这些代码片段组装成一个,否则我们就没有了o猜猜在未显示的代码中发生了什么。这是opengGl代码中使用的所有代码。由于我不确定问题与何处有关,我只包含了所有OpenGl代码。这里被认为是MVCE的定义非常好,如果没有它,你的问题就不会发生。我不会花时间编写测试应用程序来生成你的代码片段是可运行的,我怀疑其他人是否会运行。好吧,所以我继续在gLinkProgram之前放置:glBindAttribLocation(this->programmaid,0,“position”)…但我仍然得到相同的错误。@user5600884:什么类型的have
positionId
?1282是一个GL\u无效的\u操作?因此,当我使用着色器编译时,请检查顶点着色器是否编译良好,但片段着色器未编译正常。@user5600884:问题在于将片段着色器代码粘贴到您的问题中,我们将对此进行调查。好的所以我去了