EM・ONEは神機の夢を見るか

久しぶりにEM・ONE高速化ネタ関連で。

GDIの速度に限界を感じつつ、DirectDrawでフレームバッファアドレスをゲットして、ダイレクトに書き込むも、これもまた速度が今ひとつで、さてどうしたものかと思っていましたが、特に思いつくこともなく、何だかトーンダウンしてました。

そんな中、Pandoraをポチっとしたので、その開発環境などを調べているうち、OpenGLで2D GraphicsのDrawingをするってネタを見つけました。そう言えば、EM・ONEには、GoForceアクセラレーション付きのOpenGL ESがあったなぁと…
Pandora も OpenGL ESだなぁ。そう言えば、iPhoneBREWWindows Desktopだって、iアプリだって、AndoroidだってOpenGL ESが使えるじゃまいか(最後の2つはJavaですが)。

時代はOpenGL ESですよ。奥さん

な声が天から聞こえたような、そうでないような。

んな訳で、もう一度 EM・ONE の DLL 周りを調べ直してみました。

  • libgfsdk.dll

 EM・ONEでのグラフィックス周りのDLLはいくつかありますが、コアとなるのがこのDLL。APIエントリを見てみると、グラフィックス周りからカメラ関係、H.264のデコードに至るまで、ありとあらゆるAPIが詰まってます。まさにGoForce SDK.DLLみたいです。ありとあらゆるDLLから呼び出されてます。また、頭がlibになっているところから、Linux版も存在していて、そちらがメインなことも想像できますな。

  • nvddi.dll

 ddiは、Windows GDIから呼び出されるグラフィックスドライバですね。このnvddi.dllは、内部でlibgfsdk.dllを呼び出してます。んで、nvddi.dllからインポートされているlibgfsdk.dllのAPI一覧を見てみると…

GFDxClose
GFDxGetPixelClock
GFDxOpen
GFDxSetPixelClock
GFRmChAlloc
GFRmChAllocateRaiseVector
GFRmChFree
GFRmChLinearSysToVidMemcpy
GFRmChReleaseRaiseVector
GFRmChWaitForIdle
GFRmClose
GFRmGet
GFRmGetAttribute
GFRmIsExternalMemoryHandle
GFRmIxDeInit
GFRmIxEnableModuleClock
GFRmIxEnableModuleEx
GFRmIxGetFrequency
GFRmIxGetModuleConfig
GFRmIxGetModuleFrequency
GFRmIxGetModuleState
GFRmIxInit
GFRmIxSetModuleConfig
GFRmIxSetModuleFrequency
GFRmMemGetOffset
GFRmMemGetPointer
GFRmMemHandleAlloc
GFRmMemHandleFree
GFRmMemInfo
GFRmOpen
GFRmSetAttribute
GFRmSurfaceAlloc
GFRmSurfaceFree
GFVxBlt
GFVxClose
GFVxOpen
GFVxUpdateOverlay
GFVxVIPGPIO

 ん〜、ドロー系のAPIが見あたりません。あえて言えば、GFRmMemXXXXあたりでフレームバッファの管理が出来る位でしょうか。この感じだと、画面を縦にした時の縦横変換もソフトでやってそう。そりゃ遅いにきまってまんがな。

  • libGLES_CM.dll

 こいつは、xda_flameから持ってきたヤツですが、OpenGL ESのライブラリでんすな。xda_flameから持ってきたんで、内部からlibgfsdk.dllを呼び出してます。また、libgfsdk.dllと一緒にlibegl.dllも呼び出してますが、こいつの意味はここに書いてありました。

http://www.khronos.org/developers/library/Tokyo_04_2006/DMP_Khronos-API-Overview-JAPANESE.ppt

OpenGL ES を実装する際の、抽象化層だそうで。こいつもlibgfsdk.dllを呼び出してますんで、まぁ仲間ってことですな。

  • んじゃ、EM・ONEOpenGL ESプログラミングでもしてみますか

 えっと、SDKのフォルダを見てもOpenGL ES関連ファイルがありません。Libもヘッダも。あーぁ、また探検だ。