【问题标题】:SDL2 not creating triangleSDL2 不创建三角形
【发布时间】:2020-12-17 22:01:29
【问题描述】:

我试着做一个三角形,但是当我编译和运行程序时它不会渲染。

代码如下:

#include <iostream>
#include <gl/GL.h>
#include <SDL.h>
#include <SDL_opengl.h>

const int windowWidth = 1280, windowHeight = 720;

int main(int argc, char* argv[])
{
    // Create window //
    SDL_Window* window = SDL_CreateWindow("OpenGL Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, windowWidth, windowHeight, SDL_WINDOW_OPENGL);

    if (window == NULL)
    {
        return EXIT_FAILURE;
    }

    SDL_Event windowEvent;

    // OpenGL context //
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

    // Main loop //
    while (true)
    {
        if (SDL_PollEvent(&windowEvent))
        {
            if (windowEvent.type == SDL_QUIT)
            {
                break;
            }
        }
        // Draw //
        glClearColor(0.f, 0.f, 0.f, 1.f);
        glClear(GL_COLOR_BUFFER_BIT);

        glBegin(GL_TRIANGLES);
            glColor3f(1.f, 0.f, 0.f);
            glVertex2f(0, 0.5);
            glColor3f(0.f, 1.f, 0.f);
            glVertex2f(-0.5, -0.5);
            glColor3f(0.f, 0.f, 1.f);
            glVertex2f(0.5, -0.5);
        glEnd();

        glFlush();

        SDL_GL_SwapWindow(window);
    }

    SDL_DestroyWindow(window);
    SDL_Quit();

    return EXIT_SUCCESS;
}

【问题讨论】:

    标签: c++ opengl sdl-2 opengl-3


    【解决方案1】:

    多个问题:

    • 致电SDL_GL_SetAttribute()s 之前 SDL_CreateWindow()
    • 在尝试调用任何 GL 函数之前,使用 SDL_GL_CreateContext() 创建一个 GL 上下文。
    • 如果您最终使用了SDL_GL_CONTEXT_PROFILE_CORE,则需要完全重新编写其余的总帐代码,以不使用所有已删除的函数,例如glBegin()/glVertex()/glColor()/glEnd() .

    大家一起:

    // g++ main.cpp `pkg-config --cflags --libs sdl2 gl`
    #include <SDL.h>
    #include <SDL_opengl.h>
    
    int main(int argc, char* argv[])
    {
        SDL_Window* window = SDL_CreateWindow("OpenGL Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_OPENGL);
        if (window == NULL)
        {
            return EXIT_FAILURE;
        }
    
        SDL_GLContext ctx = SDL_GL_CreateContext( window );
    
        // Main loop //
        while (true)
        {
            SDL_Event windowEvent;
            if (SDL_PollEvent(&windowEvent))
            {
                if (windowEvent.type == SDL_QUIT)
                {
                    break;
                }
            }
    
            // Draw //
            glClearColor(0.f, 0.f, 0.f, 1.f);
            glClear(GL_COLOR_BUFFER_BIT);
    
            glBegin(GL_TRIANGLES);
                glColor3f(1.f, 0.f, 0.f);
                glVertex2f(0, 0.5);
                glColor3f(0.f, 1.f, 0.f);
                glVertex2f(-0.5, -0.5);
                glColor3f(0.f, 0.f, 1.f);
                glVertex2f(0.5, -0.5);
            glEnd();
    
            SDL_GL_SwapWindow(window);
        }
    
        SDL_GL_DeleteContext( ctx );
        SDL_DestroyWindow(window);
        SDL_Quit();
    
        return EXIT_SUCCESS;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 2018-06-08
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多