为什么 EGL 上下文只与一个线程相关

问题描述 投票:0回答:2

我对 EGL CONTEXT 的意思有点困惑,意思是在 GPU 中专门使用 3D。

线程在CPU端。每个线程都可以向 GPU 发送命令以执行对象绘制(顶点、纹理、提取...使用着色器)

每个着色器都与一个程序相关,可以使用或不使用着色器中定义的内容。为此,我们需要在绘制数组或元素之前绑定资源。

我认为我在初始化时将所有资源发送到 GPU,除了相机框架,这是不同的。如果我考虑在移动设备上,内存在 CPU 和 GPU 之间共享。需要通过线程定义上下文。是解释我不理解的东西。

如果需要执行着色器并使用一些我不需要上下文的资源。我只需要为正确的程序着色器绑定正确的资源。只要一个一个完成,任何线程都可以做到。内存很常见,任何线程都可以访问 GPU 上的任何资源,当然是一个接一个。或者可能在 GPU 接收器的不同通道上,所以程序(着色器)也可以并行处理。

所以不需要为上下文分配资源。所有资源都应该可以通过引用访问。我是否通过程序(着色器)完成绘图,一个简单的调用(程序、ressouce1、ressource2、ext)就足够了。

那么为什么每个线程一个上下文。有灵活性。不再需要共享上下文,女巫对我来说不起作用。任何着色器都可以使用任何资源...

我真的不明白为什么 EGL 上下文,更不知道为什么线程相关。

提前感谢您的解释。

PS:我提出这个问题是因为使用 OpenCL 在 C++ 中的 JAVA EGL(线程 + 上下文)和线程之间共享纹理是一场噩梦。我真的不明白访问纹理或顶点等资源的混乱情况。参考下应该很简单吧

android opengl-es gpu opencl egl
2个回答
0
投票

我真的不明白为什么EGL上下文,更不明白为什么线程相关

...因为规范就是这么说的。最终,如果您不同意设计并不重要,规范以特定的方式工作,这就是它的工作方式。

您可以在同一共享组中分配多个 EGL 上下文——这允许从并行线程共享某种形式的数据(但状态仍然是上下文本地的)。这通常用于一个上下文作为后台加载程序线程,而另一个上下文进行实际渲染。

较新的 API,如 Vulkan,仍然有上下文,但失去了线程限制。


0
投票

EGL 上下文是 CPU 和 GPU 之间的主要连接。当他们限制 EGL 上下文一次附加到一个 CPU 线程时,他们确保从 CPU 到 GPU 的请求将以明确定义的顺序出现。他们希望避免多个 CPU 线程同时以不可预测的顺序与 GPU 通信的情况。

在您的示例中,您断言您的资源是“一对一”绑定的。如果是这种情况,那么 EGL 上下文一次绑定/重新绑定到一个 CPU 线程应该没问题。这可以通过调用 eglMakeCurrent 来完成。

但是,如果您不能保证您的操作“有序”,那么这就是您需要解决的问题——无论 EGL 支持什么。

© www.soinside.com 2019 - 2024. All rights reserved.