2014年12月8日月曜日

Playground KLab との格闘記録


こんばんは。

Klabさんの素晴らしいゲームエンジンPlaygroundOSSが個人的に難しいと話題に
2014/12/7
とりあえずsample表示ぐらいはしたかった。


という事で現在の進捗

0.研究環境&対象OS

Mac OS X 10.9.5
Android Studio 1.0 RC1
Android NDK 10d
=============
Nexus5
Android 5.0 Lollipop 

ADTは今年のI/O的に積極的にさけた方が良いと思っているので
早くAndroidStudio対応Docくだしあ><

1.いろいろインストール



export ANDROID_NDK_ROOT="/{落とした場所}/android-ndk-r10d"
PATH=$PATH:$ANDROID_NDK_ROOT

上の2行を.profileというファイル名で~/の中にかいておく。
公式DocではSDKのインストールをしていたがAndroidStudioを使うのでいりません。
とりあえず
$ndk-build
と入力して「Android NDK: Could not find application project directory !」的な結果が帰ってきたら大丈夫です。

2.cloneする

とりあえずgitは入れておこう
$git clone https://github.com/KLab/PlaygroundOSS.git

3.Buildする

Playgroundの中に入る
$cd /{落とした場所}/PlaygroundOSS/Engine/porting/Android/GameEngine-android
permissionの設定
$chmod +x ./build.py
build実行
$./build.py --rebuild --project SampleProject
(イミワカンナイ感あるがSampleProjectでないと怒られる。イミワカンナイ)

4.AndroidStudioで開く

AndroidStudio 起動 -> Import Project ->
/{落とした場所}/Engine/porting/Android/GameEngine-androidを選択

当然いい感じに開ける。
とりあえず、もろもろ準備
local.propertiesにsdkの場所が書いてあるはずなのでその下にndkの場所も追加する。
ndk.dir=/{落とした場所}/android-ndk-r10dandroid-ndk-r10d
Gradeを走らせる。こける。

箇所1
  修正前のコード
dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
}
  修正後のコード
dependencies {
  classpath 'com.android.tools.build:gradle:0.14.4'
}
箇所2
修正前のコード
compileSdkVersion 17
buildToolsVersion "18.1.0"
  修正後のコード
compileSdkVersion 21
buildToolsVersion "21.0.2"
箇所3
  修正前のコード
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
  pkgTask -> pkgTask.jniDir new File(projectDir, 'libs')
}
修正後のコード
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
  pkgTask ->
    pkgTask.jniFolders = new HashSet<File>()
    pkgTask.jniFolders.add new File(projectDir, 'libs')
}
多分jniDirがないだかで怒られるはず。
で、上の修正した後gradeを走らせると落ちる。落ちた。
/*今回ごり押しでやったので落ち着いたら別の方法を載せる予定*/
なので落ちた部分をコメントアウトしてgradeはしらせて成功したあとコメントアウトを外してもう一回gradeを走らせた。
コメントアウトした箇所は
/*
    if(new File(projectDir, "jni").exists()){
        tasks.withType(Compiler) {
            compileTask -> compileTask.dependsOn ndkBuild
        }
        tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
            pkgTask ->
                pkgTask.jniFolders = new HashSet<File>()
                pkgTask.jniFolders.add new File(projectDir, 'libs')
        }
        clean.dependsOn 'ndkClean'
        clean.dependsOn 'libsClean'
    }
*/
である。 多分Buildはできたはず。


5.Assetsの追加

$cd /PlaygroundOSS/Tutorial/01.SimpleItem/.publish/android/ $zip -r -0 /PlaygroundOSS/Engine/porting/Android/GameEngine-android/assets/AppAssets.zip ./* $echo -n "1" > /Playground0SS/Engine/porting/Android/GameEngine-android/assets/version ./*
公式のDocのまま。echoの数字はバージョン番号で、変更が合ったら数字をかえよう。
できた、AppAssets.zipとversionをAndroidStudio上でassetsというディレクトリを作って放り込む。階層はGameEngine-android直下にした。


6.コードの修正

やはりか、という感じでエラーが起きる。イミワカンナイ!ダレカタスケテー!

    
Process: klb.android.GameEngine, PID: 31119  java.lang.RuntimeException: createContext failed: EGL_BAD_MATCH
  at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1192)
  at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1183)
  at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1033)
  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1400)
  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 


で。このエラーを解決するのに時間を無駄にしたのだが結論は
klb.android.GameEngine.GameGLSurfaceView内の54行目あたりにある
PFInterface pfif = PFInterface.getInstance();int glver = pfif.getGLVersion();setEGLContextClientVersion(glver);
で、glverが-1を返していた。
setEGLContextClientVersion(2);のコメントアウトを外したら動いた。

画面が黒い。Assetが表示されない<-今ココ



という訳で
ダレカタスケテー!


0 件のコメント:

コメントを投稿