我正在使用SDL2,我的目的是使用现代OpenGL绘制一个简单的三角形 . 使用现代OpenGL意味着不要使用已弃用的函数,例如glBegin / glEnd等 . 我的教程源代码是http://www.opengl-tutorial.org .

My code:

int main(int ac, char** av) {
    SDL_Init(SDL_INIT_EVERYTHING);

    // Create SDL window with OpenGL support
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 
    SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
    SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

    SDL_Window *pWindow = SDL_CreateWindow("SDL2 OpenGL", 
                                       SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                       600,
                                       400, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);

    // I do not know if required, but I create a GL context before calling 'gl3wInit'
    glcontext = SDL_GL_CreateContext(pWindow);
    gl3wInit();

    SDL_GL_SetSwapInterval(1);

    // I do not know if required, but I generate an initial array as done in many tutorials?
    GLuint vertexArrId;
    glGenVertexArrays(1,&vertexArrId);
    glBindVertexArray(vertexArrId);


    // My actual triangle consisting of 3 vertices
    GLfloat arrPos[] = {
        -1.0,-1.0,0.0,
        1.0,-1.0,0.0,
        0.0,1.0,0.0
    };

    // Generate buffer and store buffer id for my triangle data
    GLuint myBufferId;
    glGenBuffers(1, &myBufferId);
    glBindBuffer(GL_ARRAY_BUFFER, myBufferId);
    glBufferData(GL_ARRAY_BUFFER, sizeof(arrPos), arrPos, GL_STATIC_DRAW);

    // Tell open GL to use this buffer
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, myBufferId);
    glVertexAttribPointer(0,3, GL_FLOAT, GL_FALSE, 0, (void*)0);

    bool green = false; // Toggle background clearing color between green and blue
    while(true)
    {
        green ? glClearColor(0.0,0.5,0.1,1.0) : glClearColor(0.0,0.,0.5,1.0);        
        green ^= true;            

        glClear(GL_COLOR_BUFFER_BIT);

        glDrawArrays(GL_TRIANGLES, 0, 3); // 3: Three vertices. Should draw the triangle?

        SDL_GL_SwapWindow(pWindow);
    }
    return 0;
}

我试图尽可能缩短代码 .

Problem: 三角形不可见 . 我的程序的输出是绿色或蓝色背景,因为背景颜色是每帧切换的,所以我假设OpenGL至少起作用 .