我开始学习OpenGL,我想知道是否可以通过其他库获得的视频内存缓冲区来绘制它?是否有可能让OpenGL在内存表面上绘图?
回答
对于绘制视频内存,您可以使用framebuffer objects来绘制OpenGL纹理或渲染缓冲区(用于离屏渲染的VRAM区域),就像Stefan所建议的那样。
当涉及到由另一个库创建的VRAM缓冲区时,它取决于您正在讨论的库。如果这个库在底层使用OpenGL,则需要对库有一些了解,以获得该“缓冲区”(可以是一个纹理,您可以直接使用FBO或GL缓冲区对象将纹理渲染到其中像素数据使用PBOs
如果该库使用一些其他API来连接GPU,则没有太多可能性,如果它使用OpenCL或CUDA,这些API可以直接使用它们的内存缓冲区或图像作为OpenGL缓冲区或纹理,然后你可以使用所提到的技术渲染。
如果这个库在底层使用Direct3D,它会变得更加困难,但至少nVidia有一个extension来直接使用Direct3D 9的表面和纹理作为OpenGL的缓冲区和纹理,但我没有这方面的经验,我也不知道这是否得到广泛支持。
您不能让OpenGL直接绘制到任意内存,原因之一是在大多数实现中,OpenGL绘图发生在视频RAM中,而不是系统内存中。但是,您可以绘制到OpenGL屏幕外的上下文,然后将结果读回到系统内存中的任何位置。网页搜索帧缓冲区对象(FBO)应该指向文档和教程。
如果你拥有的内存已经在VRAM中,例如通过硬件加速解码,那么你可以直接绘制它作为OpenGL纹理 - 然后你可以使用一些渲染纹理技术将节省您从VRAM传输数据。
一些小的符号问题:1. OP已经谈到视频内存2.帧缓冲区对象不包含屏幕外上下文,只包含屏幕外缓冲区(可能您认为是Pbuffers)。 3.渲染纹理正是FBO通常使用的。 –
对于“视频内存缓冲区”是指VRAM中的内存缓冲区还是含有视频的内存缓冲区,我不太确定。 – Stefan
啊,我没有想到这个。我看到了视频内存,并立即想到了VRAM。但你说得对,因为它也可能意味着带有视频数据的CPU RAM。 –
- 1. 是否有可能使OpenGL绘制GL_LINES笔状笔画?
- 2. 是否可以在directx dc/buffer上使用opengl进行绘制?
- 3. 是否可以使用OpenGL在WinCE中绘图?
- 4. Java:如何在尽可能小的表面上绘制图像?
- 5. 是否有可能让ntpd在虚拟机上工作?
- 6. 是否有可能让dartdoc在属性上显示注释
- 7. 是否有可能让我的azure functionapp在linux上运行?
- 8. 是否有可能在UITableViewCell上有“touchesBegan”?
- 9. 是否有可能将图像隐藏在图像后面?
- 10. 是否有可能让声音更快?
- 11. OpenGL 4.0 GPU绘图功能?
- 12. 是否有可能让JSmooth显示启动画面(-splash:image.png选项)
- 13. 是否有可能让get_posts()或WP_Query不返回发布内容?
- 14. 是否有可能在一个页面上有两个pixastic影响的图像?
- 15. 是否有一个体面的OpenGL文本绘图库的iPhone SDK?
- 16. 检查表值存在没有Javascript,是否有可能?
- 17. 在相机表面视图上绘图
- 18. 是否有可能在Windows中写入任何内存地址
- 19. NSNumberFormatter是否可能泄漏内存?
- 20. 是否有可能让SeekBar的拇指图像延伸到酒吧外面?
- 21. 是否有可能在wordpress的不同页面上显示相同的内容
- 22. 是否有可能在iPhone上
- 23. 是否有可能在非物化视图上有索引?
- 24. 是否有可能在HTML页面上的<script/>标签中缓存JS?
- 25. 是否有可能在错误页面上使用AppController? (CakePHP 3.1)
- 26. 是否有可能为Tensorflow图在外面跑会议
- 27. MySQL:是否有可能拥有从内存数据库?
- 28. 是否有可能在分组表
- 29. 是否可以绘制matplotlib hexbin图上相同点的列表?
- 30. 是否可以在OpenGL中一次保存所有状态?
还有什么其他的库?这些“库”是否也可用于直接硬件访问(例如Direct3D,CUDA,OpenCL)还是使用这些功能? –