VBO on old GPU (GL 3.0 & 4.1) not supported?

by Quentin Tealrod   Last Updated July 17, 2017 07:13 AM

I have an application displaying some 3D rendering. I encounter some graphical problems with VBO, when integrating my application on different user's laptops. Vertex Buffer Object work perfectly fine in out development stations

First laptop embeds a AMD Radeon HD 6470M -> OpenGL 4.1

On this laptop, I've got some : old fashion way opengl code, working fine. vbo implemented : No data of the VBO is displayed

Here the code responsible of the drawing of my VBO :

    // Compute this on the client side to attempt compute it for each vertex
    Matrix4 modelview = view * model;

    // Links matrix values to entry shader matrices for the specified shader
    glUniformMatrix4fv(glGetUniformLocation(shaderID, "projection"), 1, GL_TRUE, projection.getValues());
    glUniformMatrix4fv(glGetUniformLocation(shaderID, "modelview"), 1, GL_TRUE, modelview.getValues());
    GLfloat color[4] = {material_->getDiffuse()[0], material_->getDiffuse()[1], material_->getDiffuse()[2], lgc3d::alphaFromSelection(selected)};
    glUniform4fv(glGetUniformLocation(shaderID, "color"), 1, color);


    // Get the positions in the shader for data
    glEnableVertexAttribArray(VPos_index);
    glEnableVertexAttribArray(VNor_index);
    glEnableVertexAttribArray(VTex_index);

    // Bind the buffers we want access
    glBindBuffer(GL_ARRAY_BUFFER, VBO_index_vertices);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO_index_indices3);
    glBindTexture(GL_TEXTURE_2D, material_->getTexture().getID());
    {
        // Precise how the data have to be read by OpenGL (defining offset), for triangles
        glVertexAttribPointer(VPos_index, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0));
        glVertexAttribPointer(VNor_index, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(offsetof(Vertex, normals)));
        glVertexAttribPointer(VTex_index, 2, GL_FLOAT, GL_TRUE, sizeof(Vertex), BUFFER_OFFSET(offsetof(Vertex, textcoords)));
        glDrawElements(GL_TRIANGLES, nb_tri_ * 3, GL_UNSIGNED_INT, 0);
    }

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO_index_indices4);
    {
        // Precise how the data have to be read by OpenGL (defining offset), for quads
        glVertexAttribPointer(VPos_index, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0));
        glVertexAttribPointer(VNor_index, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(offsetof(Vertex, normals)));
        glVertexAttribPointer(VTex_index, 2, GL_FLOAT, GL_TRUE, sizeof(Vertex), BUFFER_OFFSET(offsetof(Vertex, textcoords)));
        glDrawElements(GL_QUADS, nb_qua_ * 4, GL_UNSIGNED_INT, 0);
    }

    // Unbind everything
    glDisableVertexAttribArray(VPos_index);
    glDisableVertexAttribArray(VNor_index);
    glDisableVertexAttribArray(VTex_index);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    glBindTexture(GL_TEXTURE_2D, 0);

Do I use any too recent function ? I really don't have this feeling.

The non-VBO objects are displayed perfectly:

    {
    // defines an array of generic vertex attribute data, of index 0
    glEnableVertexAttribArray(0);

        // Get eye position
        Vector3D eyev(cam->getEyePosition());
        float eyet[3] = {(float)eyev.X, (float)eyev.Y, (float)eyev.Z};

        // Specify data location for OpenGL
        glVertexAttribPointer(0, 3, GL_DOUBLE, GL_FALSE, 0, vertices_);

        // Links matrix values to entry shader matrices for the specified shader
        glUniformMatrix4fv(glGetUniformLocation(shaderID, "projection"), 1, GL_TRUE, projection.getValues());
        glUniformMatrix4fv(glGetUniformLocation(shaderID, "modelview"), 1, GL_TRUE, modelview.getValues());
        glUniform3fv(glGetUniformLocation(shaderID, "cameraEye"), 1, eyet);

        glLineWidth(1);

        // Order OpenGL to draw
        glDrawArrays(GL_LINES, 0, nb_coord_ / 3);

    // Inactivates the generic vertex attribute data of index 0
    glDisableVertexAttribArray(0);
}

Second laptop embeds a Intel Graphic 3000 -> OpenGL 3.0

Here, if I only drop the mouse over the OpenGL canevas, it crashes. Nothing is never displayed... even the background clearing color.

I spent attention do not to use deprecated functions and I really thought that everything would be compatible with a huge bunch a computers/laptops. Does anyone have any idea ?

Everything is displayed in a QGLWidget, with Qt5.8. Problems happens on 64bits platforms, tested on Windows 7 Professional.

Tags : opengl c++ vbo


Related Questions


OpenGL ES 2.0 2D-Image displaying

Updated April 21, 2015 21:05 PM

OpenGL ES God Ray Precision error

Updated July 25, 2015 13:05 PM


Playstation 4 OpenGL ES support (or Xbox)

Updated May 18, 2017 17:13 PM

Optimizing performance of a heavy fragment shader

Updated December 16, 2016 08:05 AM