可以在Dispatchers上运行EGL命令吗?默认为Android?

m3eecexj  于 2022-12-31  发布在  Android
关注(0)|答案(1)|浏览(105)

据我所知,EGL14.makeCurrent()函数将线程Map到我们创建的EGLContext,并且我们执行的每个EGL操作都将在绑定到线程的EGLContext上执行。
执行 Package 有Dispatchers.Default的EGL操作是否安全?根据文档,“Dispatchers.Default由JVM上的共享线程池支持。默认情况下,此调度程序使用的最大线程数等于CPU核心数,但至少为2。”
那么我的EGL操作会在Dispatchers.Default中切换线程吗?EGLContext对于我所在的线程是不可用的。

tcomlyy6

tcomlyy61#

从链接到EGL上下文的同一个线程调用EGL函数是不安全的。
您可以创建一个专用线程来处理EGL调用并为它们构造Dispatcher。
大概是这样的

val dispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()

suspend fun init() {
    withContext(dispatcher) {
        EGL14.makeCurrent() 
    }
}

suspend fun render() {
    withContext(dispatcher) {
        EGLFun()
    }
}

相关问题