現在、NDKを使用してiOSからAndroidに3DC++ゲームを移植しています。レンダリングはGLES2で行われます。プラットフォーム固有のものをすべて書き直してゲーム全体を初めて実行したとき、レンダリングのバグに気づきました。ジオメトリの一部だけがレンダリングされることもあれば、画面全体で巨大な三角形がちらつくこともあります。
4.1.2を実行しているGalaxyNexusでテストしました。glGetError()
何も返しませんでした。また、ゲームはすべてのiOSデバイスで美しく実行されました。ドライバーのバグを疑うようになり、何時間も探した後、VAO(GL_OES_vertex_array_object
)を使用すると問題が発生することがわかりました。同じレンダラーはVAOなしで正常に動作し、VAOを使用してゴミを生成しました。
このバグレポートはGoogleCodeで見つけました。また、IMGフォーラムで同じレポートを見て、スタッフがそれが確かにドライバーのバグであることを確認しました。
これはすべて私に考えさせました-確認されたドライバーのバグのケースをどのように処理しますか?2つのオプションがあります。
- AndroidデバイスでVAOを使用しない。
- 特定のデバイスとドライバーリビジョンをブラックリストに登録し、これらのデバイスでVAOを使用しない。
私は両方のオプションが好きではありません。
オプション番号1は、優れたドライバーを持っているすべてのユーザーを罰します。VAOは本当にパフォーマンスを向上させます。1つのデバイスにバグがあるため、VAOを無視するのは本当に悪いことだと思います。
オプション番号2を正しく実行するのはかなり困難です。すべてのAndroidデバイスで壊れたドライバーをテストすることはできません。リストは絶えず変更されるため、追いつくのが難しくなります。
助言がありますか?すべてのデバイスを手動でテストせずに、実行時にそのようなドライバーのバグを検出する方法はおそらくありますか?