mNativeWindow.get()が590200という値を返しているが、これはRGB565なので4になるべきでは?
その疑問を抱いたので、調べることにした。
mNativeWindowは、FramebufferNativeWindowクラス。
frameworks/base/include/ui/FramebufferNativeWindow.hにある。
が、この中にget()はいない。
しかし、getなんていう曖昧な名前は勘弁して欲しい。。。
ここからが大変だ。
定義はこうなっている。
class FramebufferNativeWindow
: public EGLNativeBase<
ANativeWindow,
FramebufferNativeWindow,
LightRefBase
テンプレートだ。。。
template
class EGLNativeBase : public NATIVE_TYPE, public REF
第1と第3のクラスを継承している。
第1はANativeWindow、第3はまたテンプレートだが、これはラッパのようだ。
よくわからないが、そういう書き方をするのだろう。
が、ここまでみていってもget()がない。
なんでだ??
そこでようやく、mNativeWindowの定義を見た。
sp<FramebufferNativeWindow> mNativeWindow;
なんと、spだ。
shared pointerの略なのかな? newすれどdelete不要っていう参照カウンタで管理してくれるやつだ。
で、sp<>.get()は、本体のアドレスを返す。
つまり、mNativeWindow.get()はアドレスなのだ。
それをintでデバッグ表示させていたので、数値が違ったのだな。
なんで間違ったかというと、見る関数を1つ飛ばしていたからだ。
あーあ、ばからしい。
ただしく。
init()はEGLUtils::selectConfigForNativeWindow()を呼び、その中でNATIVE_WINDOW_FORMATを取得し、その値でselectConfigForPixelFormat()を呼び出している。
値を確認すると、4。
ちゃんとしてますな。
問題なのは、eglGetConfigAttrib(EGL_NATIVE_VISUAL_ID)が0を返すというところにある。
次はそこを見ていきましょう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。