Blank screen while using glGenBuffers in openGL

。_饼干妹妹 提交于 2019-12-02 23:10:01

问题


#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glut.h>

void changeSize(int w, int h)
{
    if(h == 0) 
        h = 1;
    float ratio = w / h;
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, 0, w, h);
    gluPerspective(40,ratio,1.5,20);
    glMatrixMode(GL_MODELVIEW);
}

void renderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT );
    glLoadIdentity();
    glTranslatef(0.0,0.0,-5.0);
    glDrawArrays(GL_TRIANGLES,0,3);
    glutSwapBuffers();
}

void init()
{
    GLfloat verts[] = {
        0.0,   1.0,
       -1.0,  -1.0,
        1.0,  -1.0
    };

    GLuint bufferid;
    glGenBuffers(1,&bufferid);
    glBindBuffer(GL_ARRAY_BUFFER,bufferid);
    glBufferData(GL_ARRAY_BUFFER,sizeof(verts),verts,GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0);

    if(glGetError()==GL_NO_ERROR)
        printf("no error");
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(500,500);
    glutCreateWindow("MM 2004-05");
    glewInit();

    init();

    glutDisplayFunc(renderScene);
    glutReshapeFunc(changeSize);

    if (GLEW_ARB_vertex_program && GLEW_ARB_fragment_program)
        printf("Ready for GLSL\n");
    else {
        printf("No GLSL support\n");
        //exit(1);
    }

    glutMainLoop();
    return 0;
}

When using glGenBuffers my screen turns out black and shows no error. If i draw some other shape without using buffers they are displayed but not with buffer objects.

openGL version:3.0 operating system:ubuntu IDE:eclipse


回答1:


When using glGenBuffers you're using the OpenGL-3.0 specification. To draw anything in OpenGL-3.0+ you need to use shaders, hence why the screen is black; your triangle isn't being shaded.




回答2:


You are using calls for generic vertex attributes here:

glEnableVertexAttribArray(0);
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0);

Generic vertex attributes can only be used in combination with shaders. As long as you're using the fixed function pipeline, you also have to use fixed function vertex attributes.

The corresponding calls using fixed function attributes are:

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);


来源:https://stackoverflow.com/questions/29426874/blank-screen-while-using-glgenbuffers-in-opengl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!