Kotlin
processing
OpenGL
gradle
processing3
NCCDay 15

Gradleから指定したProcessing3.3.6で動かなかったP3Dを動かす話

環境

  • Kotlin 1.2.0
  • Processing 3.3.6
  • Gradle

なんでP3D動かんの

KotlinからProcessingを動かそうとしたときに、なぜかP3Dだけ動かなくなりました。

main.kt
fun main(args: Array<String>) :Unit=fuga().run(args)

class fuga:PApplet(){
    override fun settings(){
        size(600,600, PConstants.P3D)
    }
    override fun setup(){

    }
    override fun draw(){

    }
    fun run(args:Array<String>):Unit=PApplet.main("fuga")
}

size命令の引数にP3Dを書き足すだけでもう動かない。

ほげー。

こんなエラーが出てました。

Caused by: com.jogamp.opengl.GLException: Profile [なんかOpenGLのバージョンがいくつも並んでる] is not available on WindowsGraphicsDevice[type .windows, connection decon, unitID 0, handle 0x0, owner false, NullToolkitLock[obj よく分からない16進数]]

エラーについて二日かけて調べる

調べても全く意味が分からないのでここで二日くらい費やしたのですが、ヘトヘトになったところで似たようなStack Overflowを発見しました。

https://stackoverflow.com/questions/45766632/com-jogamp-opengl-glexception-profile-gl-default-is-not-available-on-windowsgra

MinusJTK って書いてある。

僕は英語が読めないので、内容が分からずもはや投げやりでここに書かれたライブラリをbuild.gradleに書き足すことにしました。
(.jarファイルをダウンロードしてきてもできるかもしれない。)

dependencies {
    //この上に他のライブラリがいろいろ書かれている
    compile 'edu.mines.jtk:edu-mines-jtk:1.1.0'
}

なぜか動いた。
なんで?
というかbuild.gradleからこれ消しても動くようになったのでエラー文を再現できない。
なんで?????

このライブラリ一体なんだろう

https://github.com/MinesJTK/jtk

The Mines Java Toolkit (Mines JTK) is a set of Java packages and native (non-Java) software libraries for science and engineering. Applications currently include digital signal processing, linear algebra, optimization, meshing, interpolation, and 2D and 3D graphics.

Google翻訳先生カモン

Mines Java Toolkit(Mines JTK)は、Javaパッケージと、科学技術用のネイティブ(非Java)ソフトウェアライブラリのセットです。 アプリケーションには現在、デジタル信号処理、線形代数、最適化、メッシュ、補間、2Dおよび3Dグラフィックスが含まれます。

3DグラフィックスのプラグインはProcessingに含まれているはずなのになんで動かなかったんだ……?????

信用できない非常に雑な考察

もしかしたら、このMinusJTKが必要だったわけではなく、この中に入っているJOGLの最新バージョンが必要だったのかもしれない。
MinusJTKが入ることによってJOGLのバージョンが上がって、P3Dが動くようになった???????
非常に雑な考察なので誰も信用しないでください。

終わり

というわけで僕はこのライブラリの解説およびなぜ動くようになったのかの理由を募集しています。
同じ問題で困っている人は一回試してみると良いかもしれません。

追記

Processingにこんなissueが立てられてました。
https://github.com/processing/processing/issues/5350
全く同じエラーだ!!!!!
GradleからProcessing 3.3.6を選択するとjogl-all-nativesのjarファイルが指定されていないことで起きていたエラーだそうです。
というわけで、次のバージョンでは修正されていると思われます!
安心!