我想在Mac上使用SDL2和OpenGL在屏幕上渲染随机定位的点。作为设置的一部分,将打开一个以蓝色渲染的窗口(未显示代码),但除此之外没有任何渲染。
我已经设置了以下属性:
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
,这也是窗口的大小。
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,而是使课本示例运行时所做的更改最少。
答案 0 :(得分:1)
glBegin
/glEnd
序列已弃用,并且cor配置文件Context不支持该序列。
您将需要创建一个Shader,一个Vertex Buffer Object和一个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);