好吧我有一个程序与多个线程(在运行时从DLL加载)。每个线程都有独立的OpenGL渲染上下文。我想要做的是,从主线程中,能够绘制每个opengl上下文的帧缓冲区,并在主窗口中选择的位置绘制它们(如果这是有意义的)。我设置了多线程,因为当单线程“运行时进程”(只是荣耀的函数)时,在加载资源(运行时进程,可以随时创建和终止)时使得程序挂起。基本上,我希望能够“哄骗”opengl将其绘制到随机缓冲区中,取出该缓冲区并在主线程中将其转化为opengl纹理并将其绘制到需要的位置(位置也在运行时确定)可调整的)。我的问题是,有没有办法让渲染上下文绘制到一些分配的内存,而不是在窗口中绘制它?还有什么方法可以从该上下文中获取帧缓冲区。如果是这样,我只需调用“glTexImage2D”,并在“字节”参数中指向内存。不要担心线程同步的,我已经得到了相当不错的吧......OpenGL在一个窗口中的多个渲染上下文
0
A
回答
1
我的问题是,有没有什么办法让渲染上下文得出一些分配的内存,而不在一个窗口中绘制了吗?
是的。那些离屏区域被称为帧缓冲区对象(FBO)。
还有什么办法从该上下文中获取帧缓冲区。如果是这样,我只需调用“glTexImage2D”,并在“字节”参数中指向内存。
实际上使用宗教组织可以直接渲染到纹理。然后,您可以使用纹理绘制到常规窗口。
我建议你不要使用多个OpenGL渲染线程。主要原因是,GPU是一个共享资源,并且有多个OpenGL上下文/线程同时访问它会损害性能。依次执行效果图。您可以为此使用单个共享上下文。
多个OpenGL的上下文可以共享他们的数据对象(纹理,顶点缓冲对象,像素缓冲器的对象);用于此的确切API取决于操作系统。在Windows上,您使用wglShareLists
进行连接。抽象状态载体对象(FBO,VAO)不能被共享;作为一个经验法则,您可以上传大容量数据,并在上下文之间共享。
0
相关问题
- 1. 在OpenGL中重新渲染vim窗口
- 2. 在opengl中渲染1000多个图形
- 3. 在OpenGL中渲染多个对象
- 4. OGRE - 多个窗口 - 渲染窗口和菜单窗口
- 5. 在OpenGL中渲染一个立方体
- 6. 在渲染的另一个线程中初始化OpenGL上下文
- 7. OpenGL窗口大小渲染问题
- 8. QT Webkit和OpenGL渲染上下文
- 9. OpenGL创建渲染上下文失败
- 10. OpenGL Viewer控制和渲染上下文
- 11. opengl/pyopengl - 在多个视口渲染完全相同的帧?
- 12. OpenGL不渲染到Framebuffer而是渲染到窗口
- 13. 添加窗口选项到我的OpenGL渲染器窗口
- 14. 如何在C中使用DirectX 9渲染多个窗口?
- 15. 多个线程渲染到单独的OpenGL上下文线程安全吗?
- 16. 设置OpenGL多个渲染目标
- 17. 多个OpenGL ES 2 Android渲染
- 18. 用OpenGL ES 2.0渲染多个对象
- 19. OpenGL ES 2.0渲染为多个纹理
- 20. OpenGL的一个像素渲染过
- 21. 您可以同时创建多少个OpenGL渲染上下文有限制吗?
- 22. 在OpenGL渲染上下文中叠加图形
- 23. 如何在OpenGL上下文中渲染/显示网页?
- 24. OpenGL渲染一个GL_POINTS列表
- 25. XNA 4.0 - 如何在第二个窗口中渲染视口
- 26. SDL2:在多个窗口之间共享渲染器
- 27. 在rails中渲染多个erb文件
- 28. 如何在同一屏幕上将OpenGL窗口分成多个窗口?
- 29. OpenGL上的多个视口
- 30. OpenGL中分层渲染和多个渲染目标之间的混淆
好的,我明白gpu是一个共享资源,但我更喜欢这样做。因为所有的绘图都是二维的(该项目是一个GUI),我最先做的是有一个指向32位整数数组的指针,并从子线程直接绘制到该“缓冲区”,然后将其转换为纹理需要刷新屏幕的时间。即使使用50个200x200,帧率仍然超过750 fps。我只想要一个更简单的方法来在这些线程中执行高级图形。我不想分享上下文。非常感谢您的帮助! – user1433205