2013-09-29 50 views
1

我现在正在使用Scala和Akka在使用LWJGL的应用程序中使用。众所周知,您不能在应用程序主线程之外发布OpenGL调用。如果我想用任何角色进行渲染(例如,单个主要角色,例如,耗尽渲染命令队列,或者有多个角色可能随时发出任意OpenGL命令),则会出现问题,因为我没有看到一种在特定线程上运行任何actor的方法。通过将特定角色固定到线程,或通过指示角色在某个特定线程上运行。 (一个Objective-C的performSelectorOnMainThread)Pin/Run Akka演员到主线程

有没有办法将一个“渲染”actor绑定到主线程,或者在将来的某个点上有任何actor在主线程上运行,能够发出OpenGL调用? (或者甚至是一些其他的解决方案,我打开思路)

+0

阿卡可能不这是一个很好的用例。虽然它确实提供了您要求的内容,但它仅用于单元测试。 http://doc.akka.io/docs/akka/2.2.1/scala/testing.html#scala-callingthreaddispatcher – Ryan

+0

您可以在主线程中创建一个消息循环,并简单地使用来自actors的消息。它可以坐在某种'Runnable'的队列上。 –

回答

0

钉住阿卡演员,你可以使用自定义执行服务配置的执行线程:

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() 
    } 
} 

完整的例子就是here