gpt4 book ai didi

c++ - OpenGL在一个窗口中提供多个渲染上下文

转载 作者:行者123 更新时间:2023-12-03 07:18:54 26 4
gpt4 key购买 nike

好的,我有一个带有多个线程的程序(在运行时从DLL加载)。每个线程都有一个单独的OpenGL渲染上下文。我想要做的是从主线程能够绘制每个opengl上下文的帧缓冲区,并将它们绘制到我在主窗口中选择的位置(如果有任何意义)。我将它设置为多线程,因为当单线程运行时进程(只是荣耀的函数)时,在加载资源时挂孔程序会挂起(运行时进程可以随时创建和终止)。基本上,我希望能够“诱骗” opengl将其绘制到随机缓冲区中,然后将该缓冲区放入主线程,然后将其转换为opengl纹理,然后将其绘制到需要的位置(位置也在运行时确定,并且可调整的)。我的问题是,是否有任何方法可以将渲染上下文绘制到某些已分配的内存中而不在窗口中绘制呢?也有任何方法可以从该上下文中获取帧缓冲区。如果是这样,我将只调用“glTexImage2D”,并在“字节”参数中具有指向内存的指针。不用担心线程同步,我已经很擅长了...

最佳答案

My question is this, is there any way to get a rendering context to draw to some allocated memory without drawing it in a window?



是。这些屏幕外区域称为帧缓冲对象(FBO)。

Also is there any way to get the frame buffer from that context. If so i would just call "glTexImage2D" and in the "bytes" argument have the pointer to the memory.



实际上,使用FBO可以直接渲染到纹理。然后,您可以使用纹理绘制到常规窗口。

我建议您不要使用多个OpenGL渲染线程。主要原因是,GPU是共享资源,并且有多个OpenGL上下文/线程同时访问它会影响性能。按顺序执行渲染。您可以为此使用单个共享上下文。

多个OpenGL上下文可以共享其数据对象(纹理,顶点缓冲区对象,像素缓冲区对象);用于此目的的确切API取决于操作系统。在Windows上,您可以使用 wglShareLists建立连接。但是,不能共享抽象状态载体对象(FBO,VAO)。根据经验,可以在上下文之间共享的所有内容都可以上传批量数据。

关于c++ - OpenGL在一个窗口中提供多个渲染上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com