【发布时间】:2019-09-21 23:52:49
【问题描述】:
我想在 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,而是让教科书示例以最小的更改运行。
【问题讨论】:
-
如果你想使用Legacy OpenGL 并通过
glBegin/glEndsequencis 绘制,那么你必须使用兼容性配置文件上下文 (SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)。否则,您必须创建一个Shader,创建一个Vertex Buffer Object 和一个Vertex Array Object。但要解释这一点对于一个问题来说太宽泛了。 -
嗨@Rabbid76 - 我正在阅读一本相对较旧的关于 3D 计算机图形学的书,只是为了好玩和对算法感兴趣。我的重点是让示例运行(尽可能少的 tweeks),而不是(还)最新的 API。为此,您提到的兼容性上下文非常完美。非常感谢!!