SDL2 不创建三角形
SDL2 not creating triangle
我试图制作一个三角形,但是当我编译和 运行 程序时它不会呈现。
代码如下:
#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;
}
多个问题:
- 在
SDL_CreateWindow()
. 之前调用SDL_GL_SetAttribute()
s
- 在尝试调用任何 GL 函数之前,使用
SDL_GL_CreateContext()
创建 GL 上下文。
- 如果您最终使用
SDL_GL_CONTEXT_PROFILE_CORE
,您将需要完全 re-write 其余的 GL 代码,以不使用所有那些已删除的功能,例如 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;
}
我试图制作一个三角形,但是当我编译和 运行 程序时它不会呈现。
代码如下:
#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;
}
多个问题:
- 在
SDL_CreateWindow()
. 之前调用 - 在尝试调用任何 GL 函数之前,使用
SDL_GL_CreateContext()
创建 GL 上下文。 - 如果您最终使用
SDL_GL_CONTEXT_PROFILE_CORE
,您将需要完全 re-write 其余的 GL 代码,以不使用所有那些已删除的功能,例如glBegin()
/glVertex()
/glColor()
/glEnd()
.
SDL_GL_SetAttribute()
s
总计:
// 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;
}