如何将 SDL 视频嵌入现有 OpenGL 项目
我正在开发 OpenGL 游戏,并且想在游戏中的 3D 表面上播放视频。 SDL 似乎是视频播放的绝佳选择,但是否可以在现有 OpenGL 上下文中创建表面?我该怎么做呢?
I'm working on an OpenGL game, and would like to play video on 3D surfaces within the game. SDL seems to be an excellent choice for video playback, but is it possible to create the surface inside of an existing OpenGL context? How would I go about doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我所知,SDL 没有视频播放功能;不要被
SDL_Video
这样的 API 名称所迷惑。这些实际上用于窗口管理。您需要做的是使用一些视频解码器库将视频解码到图像缓冲区,然后将这些图像缓冲区传递到 OpenGL 纹理中。开源视频播放器mplayer(内部使用ffmpeg libavformat用于视频/音频解码的libavcodec库)也有一个OpenGL视频输出模块。我建议您获取 mplayer 源代码并查看 OpenGL 视频输出模块,以了解如何执行此操作。
编辑:
由于您使用的是 SdlDotNet,我建议使用
SdlDotNet.Graphics.SurfaceGl
作为SdlDotNet.Graphics.Movie
的目标表面。SDL has, to my knowledge, no functions for video playback; don't be fooled by API names like
SDL_Video
. Those are actually used for window management.What you need to do is using some video decoder library to decode video into image buffers, then pass these image buffers into an OpenGL texture. The open source video player mplayer (which internally uses the ffmpeg libavformat and libavcodec libraries for video/audio decoding) also has an OpenGL video output module. I suggest you fetch the mplayer source code and take a look into the OpenGL video output module, to get an idea how to do this.
EDIT:
Since you're using SdlDotNet, I suggest using a
SdlDotNet.Graphics.SurfaceGl
as target surface for theSdlDotNet.Graphics.Movie
.