Графический процессор OpenGL-Intel 630 — Ubuntu 16.04 не удалось отобразить простой треугольник

Я написал простой код openGL для визуализации треугольника, он успешно скомпилирован, но не смог отобразить треугольник. Только создайте окно как таковое, при вызове API glGetError() ошибка не возвращается. Тот же код отлично работает на графическом процессоре AMD R9. Установка драйвера также выполнена правильно, так как я могу запускать glxdemos, такие как glxgears или glxhead, без каких-либо ошибок. Пожалуйста, помогите мне понять основную причину этой проблемы.

вот конфигурация моей системы. ЦП — Intel i5 7400 (графический процессор Kaby Lake 630 HD) ОС — Ubuntu 16.04 64-разрядная версия MESA — 3.0 v17.03

вот мой код для рендеринга треугольника.

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main(int agrc, char **argv)
{
    //do windowing related stuff here

    if ( !glfwInit())
    {
            printf("Error: Failed to initialize GLFW\n");
            return -1;
    }

    GLFWwindow* window = glfwCreateWindow(800, 600, "Triangle", NULL, NULL);
    if (window == NULL)
    {
            printf("Failed to create GLFW window\n");
            glfwTerminate();
            return -1;
    }
    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
            printf("Error: Failed to initialize GLEW\n");
            return -1;
    }

    //declare vertices
    GLfloat verts[] =
    {
            +0.0f, +0.5f, +0.0f,
            -0.5f, -0.5f, +0.0f,
            +0.5f, -0.5f, +0.0f,
    };

    //VBO related activity
    //declare VAO, VBO 
    GLuint VAO, VBO, EBO;

    //get unique name/ID
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    //glGenBuffers(1, &EBO);

    // Bind VAO first, then bind and set VBOs and then configure vertex attributes
    //bind VAO
    glBindVertexArray(VAO);

    //bind VBO
    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    //copy data to GPU
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);

    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glBindVertexArray(VAO);
    glDrawArrays(GL_TRIANGLES, 0, 3);

    glfwSwapBuffers(window);

    do{
            glfwPollEvents();
    }while(glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose(window) == 0);
    return 0;

}

person dilip shirke    schedule 13.09.2017    source источник
comment
Если изменить размер окна с помощью мыши, оно что-нибудь рисует, даже только цвет фона?   -  person Ripi2    schedule 13.09.2017
comment
@Rabbid76 В Ubuntu может произойти много странных вещей :( например, OGL срабатывает только после некоторого действия. Я видел это раньше с Intel HD4000.   -  person Ripi2    schedule 13.09.2017
comment
некоторые драйверы включают depth_testing по умолчанию (нарушение стандарта opengl). Попробуйте явно отключить. Редактировать: О, я вижу, вы используете Mesa. Какой смелый с твоей стороны, настоящий игрок ;-)   -  person Andreas    schedule 13.09.2017
comment
@Ripi2 - изменение цвета фона отражается, но треугольника нет, если попытаться изменить размер окна с помощью мыши, это создаст поврежденное изображение.   -  person dilip shirke    schedule 16.09.2017
comment
@Andreas — добавлен GL_DEPTH_BUFFER_BIT в glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); но на вывод не влияет.   -  person dilip shirke    schedule 16.09.2017
comment
Буфер глубины все еще включен. Выполнить glDisable(GL_DEPTH_TEST)   -  person Andreas    schedule 16.09.2017
comment
Кстати, вы пробовали запустить программу в отладчике? CodeXL или gDEBugger   -  person Andreas    schedule 16.09.2017


Ответы (1)


person    schedule
comment
Спасибо @Ripi2 за ценную информацию. 1. Та же проблема наблюдается и с GLUT lib. 2. Да, конечно, я попробую предложенное вами изменение, чтобы перенести код рендеринга в цикл, glViewport и вызвать glfw. 3. В то же время я пробовал с кодом шейдера версии 320 es (ogles 3.2), он работал без ошибок. - person dilip shirke; 18.09.2017