問題
glPointSizeの最大値の制限により、倍解像度のiPhone4Sの画面にぴったりなサイズのテクスチャをレンダリングできない。以下の画像が黒いテクスチャをレンダリングした結果。
本来なら、白い部分が残らず全て黒になるはずである。しかし、glPointSizeの最大値の制限によりそうはなっていない。
試みた方法
glPointParameterfを用いて、glPointSizeの最大値を目的の大きさに変更する。
デフォルトのglPointSizeの最大値は510になっている(iPhone4S)。以下のコードで確認することができる。
GLfloat param; glGetFloatv(GL_POINT_SIZE_MAX, ¶m); NSLog(@"max size is %f",param);
最大値を倍解像度の940に変更してレンダリングした。
最大値を変化する前と全く変わっていない。
最大値が本当に変化しているかを確かめるため、最大値を250にした。
小さくする変化の場合は、反映されている。
結果
GL_POINT_SIZE_MAXの値は変更されるが、実際にレンダリングされるテクスチャのサイズは変わらない。ただし、小さい方向には変化する。
考察
appleの資料[4]より、OpenGLESには実装依存な値が数多く存在することが分かる。例としてtextureの最大サイズが挙げられている。glPointSizeの最大値もtextureと同様なのではないか。OpenGL側では値の変更を保持するが、OpenGLとiPhoneをつなぐところの実装に依存しているため、サイズが変更されないと考えられる。
まとめ
glPointParameterfによって、glPointSizeの最大値が変更されるか検証を行った。デフォルトの最大値を境にレンダリングされるサイズが変更されなくなった。