SDL2 OpenGL 点渲染
SDL2 OpenGL Point rendering
我想在 Mac 上使用 SDL2 和 OpenGL 在屏幕上渲染随机定位的点。作为设置的一部分,window 打开并呈现为蓝色(代码未显示),但除此之外什么都没有呈现。
我设置了这个属性:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1)
这是SCREEN_WIDTH
设置为640
的渲染方式,SCREEN_HEIGHT
就是480
也就是window的大小。
void RunGame()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
glColor3f(1.0, 1.0, 1.0);
SDL_Event event;
while (true)
{
SDL_PollEvent(&event);
if (event.type == SDL_QUIT)
break;
int sx = rand() % SCREEN_WIDTH;
int sy = rand() % SCREEN_HEIGHT;
glBegin(GL_POINTS);
glVertex2d(sx, sy);
glEnd();
SDL_GL_SwapWindow(mainWindow);
}
}
正如在下面的评论中所说,我的上下文不是最新的 OpenGL API,而是获得教科书示例 运行 最小的变化。
glBegin
/glEnd
sequences are deprecated and not supported by a cor profile Context.
您必须创建一个 Shader, a Vertex Buffer Object and a Vertex Array Object.
如果您想使用 Legacy OpenGL 并按 glBegin
/glEnd
顺序绘制,则必须使用兼容性配置文件上下文 (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
)。
所以解决问题的最小修复是:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
我想在 Mac 上使用 SDL2 和 OpenGL 在屏幕上渲染随机定位的点。作为设置的一部分,window 打开并呈现为蓝色(代码未显示),但除此之外什么都没有呈现。
我设置了这个属性:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1)
这是SCREEN_WIDTH
设置为640
的渲染方式,SCREEN_HEIGHT
就是480
也就是window的大小。
void RunGame()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
glColor3f(1.0, 1.0, 1.0);
SDL_Event event;
while (true)
{
SDL_PollEvent(&event);
if (event.type == SDL_QUIT)
break;
int sx = rand() % SCREEN_WIDTH;
int sy = rand() % SCREEN_HEIGHT;
glBegin(GL_POINTS);
glVertex2d(sx, sy);
glEnd();
SDL_GL_SwapWindow(mainWindow);
}
}
正如在下面的评论中所说,我的上下文不是最新的 OpenGL API,而是获得教科书示例 运行 最小的变化。
glBegin
/glEnd
sequences are deprecated and not supported by a cor profile Context.
您必须创建一个 Shader, a Vertex Buffer Object and a Vertex Array Object.
如果您想使用 Legacy OpenGL 并按 glBegin
/glEnd
顺序绘制,则必须使用兼容性配置文件上下文 (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
)。
所以解决问题的最小修复是:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);