強火で進め

このブログではプログラム関連の記事を中心に書いてます。

バージョンやOpenGL拡張を確認する

今更(NDAの関連で書いちゃまずいかなと思ったので自粛してました)ですがiPhoneOpenGL ESのバージョンやOpenGL拡張の情報の取得方法について書いておきます。

今回はOpenGL ESのプロジェクトを作成した後、ファイル EAGLView.m の

- (BOOL)createFramebuffer {

の直後に記載しました。記述方法はこんな感じです。

- (BOOL)createFramebuffer {
	// ベンダー情報の取得
    const GLubyte *strVendor = glGetString(GL_VENDOR);
	NSLog(@"GL_VENDOR : %s\n", strVendor);
	// レンダラー情報の取得
    const GLubyte *strRenderer = glGetString(GL_RENDERER);
	NSLog(@"GL_RENDERER : %s\n", strRenderer);
	// バージョン情報の取得
    const GLubyte *strVersion = glGetString(GL_VERSION);
	NSLog(@"GL_VERSION : %s\n", strVersion);
	// OpenGL拡張の取得
	const GLubyte * strExtensions = glGetString (GL_EXTENSIONS);
	NSLog(@"GL_EXTENSIONS : %s\n", strExtensions);
	
    glGenFramebuffersOES(1, &viewFramebuffer);
    glGenRenderbuffersOES(1, &viewRenderbuffer);

結果はこんな感じです。結構、使用できるOpenGL拡張のコマンド数がありますね。

定数 結果
GL_VENDOR Imagination Technologies
GL_RENDERER PowerVR MBXLite with VGPLite
GL_VERSION OpenGL ES-CM 1.1 (30.7)
GL_EXTENSIONS GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_IMG_read_format GL_IMG_texture_compression_pvrtc GL_IMG_texture_format_BGRA8888 GL_OES_blend_subtract GL_OES_compressed_paletted_texture GL_OES_depth24 GL_OES_draw_texture GL_OES_framebuffer_object GL_OES_mapbuffer GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_rgb8_rgba8 GL_OES_texture_mirrored_repeat

(2009/03/25 変更)
OpenGL ESの場合、 GL_VERSION で返される値は

OpenGL ES-XX 1.1

というフォーマットになるようです。 XX の部分には CM または CL となります。
※参考資料は以下のPDF
http://www.khronos.org/registry/gles/specs/1.1/es_cm_spec_1.1.12.pdf
こちらのサイトの「OpenGL ES 1.1.12 Difference Specification」が該当のリンクです。

なお、 CM の場合は「Commonプロファイル」、 CL の場合「Common-Liteプロファイル」であることを示します。
「Commonプロファイル」「Common-Liteプロファイル」は以下のサイトによると「CL=固定小数点実数系をターゲット、CM=浮動小数点系までをサポート」とのことです。

ITmedia ライフスタイル:次世代プレイステーションOpenGL系になる? (1/3)
http://plusd.itmedia.co.jp/lifestyle/articles/0407/26/news007.html

iPhoneはCMなので「浮動小数点系までをサポートしている」となります。