现代OpenGL纹理显示不正确

我一直在处理这些代码,并将其简化为最基本的forms,即使如此,我仍然无法获得正确显示的纹理

这是代码: http : //pastebin.com/WkDPYDnv

窗口中没有显示。 我从着色器或程序中没有收到错误,并且所有属性位置都成功分配。 实际图像的文件path似乎没有问题。 我道歉,如果我太模糊,但我找不到在我的代码中的任何地方。

你在这里有一个非常奇怪的代码。


为什么你有

glDetachShader(program, vertex_shader); glDetachShader(program, fragment_shader); 

你的着色器初始化代码中的行? 当你摧毁着色器时应该使用它们。 完全删除它们或者打电话给他们退出。


如果它没有帮助,那么我怀疑glDisableVertexAttribArray()重置顶点glDisableVertexAttribArray()的位置。 然后,删除

 glEnableVertexAttribArray(loc_vertex); glVertexAttribPointer(loc_vertex, 2, GL_FLOAT, GL_FALSE, sizeof(float)*2, 0); glDisableVertexAttribArray(loc_vertex); glEnableVertexAttribArray(loc_texture_vertex); glVertexAttribPointer(loc_texture_vertex, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, (void*)(sizeof(float) * 2)); glDisableVertexAttribArray(loc_texture_vertex); 

从init代码中改变你的绘制代码

 glEnableVertexAttribArray(loc_vertex); glEnableVertexAttribArray(loc_texture_vertex); glDrawArrays(GL_QUADS, 0, 4); 

 glEnableVertexAttribArray(loc_vertex); glEnableVertexAttribArray(loc_texture_vertex); glVertexAttribPointer(loc_vertex, 2, GL_FLOAT, GL_FALSE, sizeof(float)*2, 0); glVertexAttribPointer(loc_texture_vertex, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, (void*)(sizeof(float) * 2)); glDrawArrays(GL_QUADS, 0, 4); glDisableVertexAttribArray(loc_vertex); glDisableVertexAttribArray(loc_texture_vertex); 

如果您不想每次调用所有这些函数,请使用顶点数组对象


另一件事:你不应该打电话

 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

在主循环中。 这不会造成任何错误,但效率不高。 在主循环之前调用一次。 另外,最后一个参数应该是1.0f ,而不是0.0f


而且,GLSL 150也不是现代的。 :d