2015-09-13 52 views
0

我试图在0,0绘制一个点,但我的屏幕变成白色并停止响应。OpenGL绘图点与indeces

有人可以查看代码,看看我犯了什么错误吗?

float *vertices; 
GLubyte *pindices; 
int width, height; 

GLuint vboHandlePoints[1]; 
GLuint indexVBOPoints; 

int numberOfPoints; 
GLuint buf; 

void initVboPoints(){ 

    GLenum err = glewInit(); 

    if (err != GLEW_OK) 
    { 
     fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); 
    } 

    glGenBuffers(1, &vboHandlePoints[0]); // create a VBO handle 
    glBindBuffer(GL_ARRAY_BUFFER, vboHandlePoints[0]); // bind the handle to the current VBO 
    glBufferData(GL_ARRAY_BUFFER, 1 * 2 * 4, vertices, GL_STATIC_DRAW); // allocate space and copy the data over 
    glBindBuffer(GL_ARRAY_BUFFER, 0); // clean up 

    glGenBuffers(1, &indexVBOPoints); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBOPoints); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLubyte)*1 * 2, pindices, GL_STATIC_DRAW); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //clean up 


} 
void display(){ 
    glClearColor(0, 1, 0, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor4f(0, 0, 0, 1); 

    glPointSize(5); 
    glEnableClientState(GL_VERTEX_ARRAY); 


    glBindBuffer(GL_ARRAY_BUFFER, vboHandlePoints[0]); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBOPoints); 
    glVertexPointer(2, GL_FLOAT, 0, 0);// 2-dimension 

    glDrawElements(GL_POINTS, 1, GL_UNSIGNED_BYTE, (char*)NULL + 0); 
} 

void initializeGlut(int argc, char** argv){ 

    glutInit(&argc, argv); 
    width = 400; 
    height = 400; 
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); 
    glutInitWindowSize(width, height); 
    glutCreateWindow("Bhavya's Program"); 
    glutDisplayFunc(display); 

} 

void initNormal(){ 
    vertices = new float[2]; 
    pindices = new GLubyte[1]; 
    vertices[0] = 0; 
    vertices[1] = 0; 
    pindices[0] = 0; 
} 

int main(int argc, char** argv){ 

    initNormal(); 
    initializeGlut(argc, argv); 
    initVboPoints(); 

    glutMainLoop(); 
    return 0; 
} 

回答

1

你没有GL_ARRAY_BUFFERglVertexPointer通话的时间约束。所有gl*Pointer函数引用当前绑定GL_ARRAY_BUFFER,缓冲区名称成为指针的一部分。这样,您可以从不同的VBO获取每个属性。 GL_ARRAY_BUFFER绑定与glDraw*函数系列完全无关。

由于您使用不推荐使用的传统GL,绑定VBO 0仍然有效,并且您的指针引用客户端内存。所以,你的应用程序很可能会崩溃,只是因为你告诉GL到read the data at memory address 0 ...

+0

我后绑定移动下来,但并没有帮助,输出画面依然变白并且不产生任何点。 –

0

的问题是,glFlush();需要