SDL2 + OpenGL 3.3编译并运行,但仅打印黑色(使用Intel HD 520进行debian延伸)

时间:2018-04-03 09:57:12

标签: c++ opengl intel opengl-3 debian-stretch

我正在尝试使用OpenGL 3.3和SDL2来关注3D图形教程,以便创建一个小游戏,您必须使用键盘的箭头键来避免3D障碍。

事情是,我无法设法得到正确的基本示例(见下文),就像在窗口中打印白色三角形一样。此外,我设法使用“遗留”OpenGL(我认为,指的是OpenGL 2.X)从其他教程复制代码来打印三角形。

由于OpenGL 3.3 + SDL2教程的代码在我的OpenGL窗口中没有打印正确的东西都编译并运行 (我可以更改窗口的标题,例如),因为它也适用于我的Windows桌面和朋友的Linux解析(Arch Linux,尽管我认为这可能没有帮助),我开始认为它与我的集成图形处理器如何处理OpenGL 3.3 + SDL2(SO)有关像this one这样的帖子似乎指向了那个方向,但它并不完全是我的架构。

编译和运行的基本白色三角形代码示例:

#ifdef WIN32
#include <GL/glew.h>

#else
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>

#endif

#include <SDL2/SDL.h>
#include <iostream>


int main(int argc, char **argv)
{
    // Notre fenêtre

    SDL_Window* fenetre(0);
    SDL_GLContext contexteOpenGL(0);

    SDL_Event evenements;
    bool terminer(false);


    // Initialisation de la SDL

    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
        SDL_Quit();

        return -1;
    }


    // Version d'OpenGL

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);


    // Double Buffer

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);


    // Création de la fenêtre

    fenetre = SDL_CreateWindow("Test SDL 2.0 - This I can change and it prints !", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);

    if(fenetre == 0)
    {
        std::cout << "Erreur lors de la creation de la fenetre : " << SDL_GetError() << std::endl;
        SDL_Quit();

        return -1;
    }


    // Création du contexte OpenGL

    contexteOpenGL = SDL_GL_CreateContext(fenetre);

    if(contexteOpenGL == 0)
    {
        std::cout << SDL_GetError() << std::endl;
        SDL_DestroyWindow(fenetre);
        SDL_Quit();

        return -1;
    }


#ifdef WIN32

    // On initialise GLEW

        GLenum initialisationGLEW( glewInit() );


        // Si l'initialisation a échouée :

        if(initialisationGLEW != GLEW_OK)
        {
            // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)

            std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;


            // On quitte la SDL

            SDL_GL_DeleteContext(contexteOpenGL);
            SDL_DestroyWindow(fenetre);
            SDL_Quit();

            return -1;
        }

#endif


    // Vertices et coordonnées

    float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};


    // Boucle principale

    while(!terminer)
    {
        // Gestion des évènements

        SDL_WaitEvent(&evenements);

        if(evenements.window.event == SDL_WINDOWEVENT_CLOSE)
            terminer = true;


        // Nettoyage de l'écran

        glClear(GL_COLOR_BUFFER_BIT);


        // On remplie puis on active le tableau Vertex Attrib 0

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


        // On affiche le triangle

        glDrawArrays(GL_TRIANGLES, 0, 3);


        // On désactive le tableau Vertex Attrib puisque l'on n'en a plus besoin

        glDisableVertexAttribArray(0);


        // Actualisation de la fenêtre

        SDL_GL_SwapWindow(fenetre);
    }


    // On quitte la SDL

    SDL_GL_DeleteContext(contexteOpenGL);
    SDL_DestroyWindow(fenetre);
    SDL_Quit();

    return 0;
}

它给了我什么,这不是预期的:

What I have

期望给我的是什么:

enter image description here

我可以添加使用着色器的代码,或者不是编译和运行的代码,再次在我的OpenGL窗口中不打印除黑色之外的任何东西(我曾经希望指定带有颜色的着色器可能会打印不同的东西,但它不会)

我之前链接的SO帖子提示$ glxinfo | grep OpenGL,它返回以下信息:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.0.6
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 13.0.6
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

如果有人有想法或有趣的链接(请不要在编译时出现错误的SO帖子,我不认为这与我的具体问题有关),谢谢!

其他相关的SO帖子:

Mesa 17.0.1 says OpenGL Core 4.5 even though my Intel HD 520 Graphics Card supports only 4.4

OpenGL: How to render 2 simple VAOs on Intel HD Graphics 4000 GPU?

0 个答案:

没有答案