2

我目前正在研究在使用 LWJGL 的应用程序中使用 Scala 和 Akka。众所周知,您不能真正在应用程序的主线程之外发出 OpenGL 调用。如果我想使用任何参与者进行渲染(例如,一个单一的主要参与者,它会耗尽渲染命令队列,或者有多个参与者可能随时发出任意 OpenGL 命令),这会带来一个问题,因为我还没有看到一种在特定线程上运行任何actor的方法。通过将特定参与者固定到线程,或通过指示参与者在某个时间点在特定线程上运行。(a la Objective-C 的 performSelectorOnMainThread)

有没有办法将“渲染”actor固定到主线程,或者将来某个时候在主线程上运行任何actor,此时它将能够发出OpenGL调用?(甚至是其他一些解决方案,我对想法持开放态度)

4

1 回答 1

2

要固定 Akka Actor 的执行线程,您可以使用自定义执行器服务配置:

  akka {
    ...
    actor {
      ...
      my-dispatcher {
        executor = "com.github.plokhotnyuk.actors.CustomExecutorServiceConfigurator"
      }
    }
  }


class CustomExecutorServiceConfigurator(config: Config, prerequisites: DispatcherPrerequisites) extends ExecutorServiceConfigurator(config, prerequisites) {
  def createExecutorServiceFactory(id: String, threadFactory: ThreadFactory): ExecutorServiceFactory = new ExecutorServiceFactory {
    def createExecutorService: ExecutorService = myExecutorService()
  }
}

完整的例子在这里

于 2013-09-30T10:23:47.847 回答