C++ Segfault尝试使用VBO

C++ Segfault尝试使用VBO,c++,opengl,sfml,vbo,C++,Opengl,Sfml,Vbo,嗯,我正试图摆脱glBegin/glEnd的事情,所以我正试图让VBO工作。 实际上,我在glDrawArrays通话中遇到了一个SEGFULT,我不知道该怎么办 如果您需要任何详细信息,请询问 这是我的代码: #include <GL/glew.h> #include <SFML/Graphics.hpp> #include <SFML/OpenGL.hpp> int main() { sf::RenderWindow window(sf::VideoMo

嗯,我正试图摆脱glBegin/glEnd的事情,所以我正试图让VBO工作。 实际上,我在glDrawArrays通话中遇到了一个SEGFULT,我不知道该怎么办

如果您需要任何详细信息,请询问

这是我的代码:

#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML and VBO", sf::Style::Default);
window.setVerticalSyncEnabled(true);
window.setActive(true);
window.resetGLStates();

GLfloat m_vData[12];
GLuint m_uiVBO;

m_vData[0] = -0.2f; m_vData[1] = -0.1f; m_vData[2] = 0.0f;
m_vData[3] = -0.2f; m_vData[4] = -0.6f; m_vData[5] = 0.0f;
m_vData[6] = 0.2f; m_vData[7] = -0.1f; m_vData[8] = 0.0f;
m_vData[9] = 0.2f; m_vData[10] = -0.6f; m_vData[11] = 0.0f;

glGenBuffers(1, &m_uiVBO);

glBindBuffer(GL_ARRAY_BUFFER, m_uiVBO);
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), m_vData, GL_STATIC_DRAW);

float rotation = 0;

bool running = true;
while(running)
{
    sf::Event event;
    while(window.pollEvent(event))
    {
        switch(event.type)
        {
        case sf::Event::KeyPressed:
            if(event.key.code != sf::Keyboard::Key::Return) { break; }
        case sf::Event::Closed:
            running = false;
            break;
        default:
            break;
        }
    }

    glClearColor(0.3f, 0.3f, 0.3f, 1.f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, m_uiVBO);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // Segfault

    window.display();
}
return 0;
}
#包括
#包括
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(800600),“SFML和VBO”,sf::Style::Default);
window.setVerticalSyncEnabled(真);
window.setActive(true);
window.resetGLStates();
GLM_vData[12];
GLuint m_uiVBO;
m_vData[0]=-0.2f;m_vData[1]=-0.1f;m_vData[2]=0.0f;
m_vData[3]=-0.2f;m_vData[4]=-0.6f;m_vData[5]=0.0f;
m_vData[6]=0.2f;m_vData[7]=-0.1f;m_vData[8]=0.0f;
m_vData[9]=0.2f;m_vData[10]=-0.6f;m_vData[11]=0.0f;
glGenBuffers(1和m_uiVBO);
glBindBuffer(GL_数组_BUFFER,m_uiVBO);
glBufferData(GL_数组_缓冲区,12*sizeof(浮点),m_vData,GL_静态_绘图);
浮动旋转=0;
bool running=true;
(跑步时)
{
sf::事件;
while(window.pollEvent(事件))
{
开关(事件类型)
{
案例sf::事件::按键:
if(event.key.code!=sf::Keyboard::key::Return){break;}
案例sf::事件::已结束:
运行=错误;
打破
违约:
打破
}
}
glClearColor(0.3f、0.3f、0.3f、1.f);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
GlenableVertexAttributeArray(0);
glBindBuffer(GL_数组_BUFFER,m_uiVBO);
glvertexattributepointer(0,3,GL_FLOAT,GL_FALSE,0,0);
gldrawArray(GL_三角形_条带,0,4);//Segfault
window.display();
}
返回0;
}

glDisableVertexAttributeArray(0);好像不见了。这可能是导致您出现问题的原因。另外,这里有一个很好的教程,关于你想做什么,我强烈建议你看一看:还要确保你把这个放在你的gldrawArray调用之后。非常感谢,这个链接帮助了我。