opengl - SDL2 OpenGL 点渲染
问题描述
我想在 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,而是让教科书示例以最小的更改运行。
解决方案
glBegin
/glEnd
序列已弃用,并且不支持 cor profile Context。
您必须创建一个Shader、一个Vertex Buffer Object和一个Vertex Array Object。
如果您想使用Legacy OpenGL并通过glBegin
/ glEnd
sequencis 绘制,那么您必须使用兼容性配置文件上下文 ( SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
)。
因此,解决问题的最小修复是:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
推荐阅读
- r - 用 lavaan 估计观测变量的协方差
- python - Numpy - 使用满足条件的数组值
- django - Django Apache2 VirtualEnv - 服务器没有响应
- vue.js - 未在 SFC 中定义的组件不使用 Vue3 Router 显示?
- python - 将数据框绘制为条形图,每列在单独的 y 轴上
- php - PHP - Symfony 的 CSRF 保护
- r - 如何在r中的条件匹配中使用管道?
- reactjs - 没有 css/less 的活动选项卡的 AntD 自定义颜色,
- vue.js - 是否可以在 Vue 中删除偏好颜色方案事件侦听器?
- jira - Jira Query 仅过滤掉附加到计划的子任务