Hatena::Groupiphone-dev

white dev. のiPhone話

2009-06-23

OpenGL ES 1.1 と 2.0 の両対応

15:09

同一バイナリで、実行環境(デバイス)に応じて OpenGL ES 1.1 / 2.0 の切り替えができることを Simulator上で確認しました。実機では未確認です。


EAGLContext の生成部分はまず ES 2.0版の生成から試みます。ES 2.0に対応してないデバイスの場合は失敗してしまうので、次に 1.1版を生成するといった流れになります。


EAGLContext	*_context;

_context = [ [EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 ];
if (_context) {
	TnOpenGL_2_0::create();
} else {
	_context = [ [EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 ];
	if (_context) {
		TnOpenGL_1_1::create();
	} else {
		[self release];
		return nil;
	}
}


OpenGL ES 自体にバージョンごとの互換がないため、使用するバージョンに応じて異なる描画処理をしなければなりません。上記のソースでは初期化する OpenGLオブジェクト(自前クラス)を切り替えてます。


テストでは、Simulator のバージョンを 3.0にすると ES 2.0 版の処理になり、Simulator を 2.2.1 にすると、ES 1.1 の処理が実行されました。


そもそも ES 1.1 / 2.0 では描画パフォーマンスやシェーダの有無などかなり違う部分があるので、同一バイナリで動作させようとすること自体が難しい試みだし、あまり意味のないことかも知れませんが(ES 2.0専用の方がかなり楽)、簡単なアプリとかでは実現できなくはない、といった感じでしょうか。

whitedevwhitedev2009/06/23 15:13OpenGL ES 1.1 使用時に、[EAGLContext alloc] を2回実行することになるのは良くない気がしてきた。。。

MiracleMiracle2011/05/14 15:07Suodns great to me BWTHDIK

zbrpnrhzidzbrpnrhzid2011/05/14 21:26vUsMAh <a href="http://qnkcjlspyrwx.com/">qnkcjlspyrwx</a>

vfeazucqvfeazucq2011/05/17 12:57hDIpok <a href="http://xiuvpzigqyzx.com/">xiuvpzigqyzx</a>

gullhggullhg2011/05/29 22:56qv18xH , [url=http://xcrfzapvqwra.com/]xcrfzapvqwra[/url], [link=http://ftqfmlnfvfxv.com/]ftqfmlnfvfxv[/link], http://lfccsihsyeih.com/