微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SDL2不创建三角形

如何解决SDL2不创建三角形

我试图制作一个三角形,但是当我编译并运行程序时,它不会渲染。

代码如下:

#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,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,1.f);
        glClear(GL_COLOR_BUFFER_BIT);

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

        glFlush();

        SDL_GL_SwapWindow(window);
    }

    SDL_DestroyWindow(window);
    SDL_Quit();

    return EXIT_SUCCESS;
}

解决方法

多个问题:

  • 在{em> SDL_GL_SetAttribute()前致电SDL_CreateWindow()
  • 在尝试调用任何GL函数之前,先使用SDL_GL_CreateContext()创建GL上下文。
  • 如果最终使用了SDL_GL_CONTEXT_PROFILE_CORE,则需要完全重新编写其余的GL代码,以不使用所有已删除的功能,例如glBegin() / glVertex() / { {1}} / glColor()

一起:

glEnd()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。