1

glkView:drawInRect:が呼び出される前に OpenGL ウィンドウのサイズを取得したい。プラットフォームに依存しないようにするために使用するglGetIntegerv(GL_VIEWPORT, &rect)(および使用しないself.bounds、または同様のものを使用する)ことにしましたが、GL_INVALID_ENUMエラーがあります。

テストコードは次のとおりです。

#define SHOW {\
  struct { GLint x, y, w, h; } rect;\
  glGetIntegerv(GL_VIEWPORT, (GLint*)&rect);\
  printf("%s %d %d\n", __FUNCTION__, rect.w, rect.h);\
}

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { SHOW; ... }
- (void)viewDidLoad { SHOW; ... }
- (void)viewWillAppear:(BOOL)animated { SHOW; ... }
- (void)viewDidAppear:(BOOL)animated { SHOW; ... }
- (void)viewDidLayoutSubviews { SHOW; ... }
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { SHOW; ... }

出力は次のとおりです。

-[ViewController viewDidLoad] 0 0
-[ViewController viewWillAppear:] 0 0
-[ViewController application:didFinishLaunchingWithOptions:] 0 0
-[ViewController viewWillLayoutSubviews] 0 0
-[ViewController viewDidLayoutSubviews] 0 0
-[ViewController glkView:drawInRect:] 1024 768
-[ViewController viewDidAppear:] 1024 768
-[ViewController glkView:drawInRect:] 1024 768

glGetIntegerv(GL_VIEWPORT, &rect)glkView:drawInRect: より前に利用できないのはなぜですか? GL_VIEWPORTどういうわけか初期化する必要がありますか?

4

0 に答える 0