そこそこ複雑なシーンでの比較。
Mali-400MP 800x480 : 50fps Adreno 205 854x480 : 20fps Adreno 200 800x480 : 5fps PVR SGX540 800x480 : 23fps
そこそこの背景+キャラ描画に Shadow map ありの数値です。
TBR だし OpenGL ES 2.0 では Shadow map は現実的ではないと
思ってましたが Mali だと十分できそうです。
影なしだと全体的に数値が上がり、Mali はほとんど 60fps 固定。
PVR 対策で alpha test は off。
圧縮テクスチャ次第ではもう少し差が縮まるかもしれません。
Tegra2 は解像度が異なり近い条件での比較ができませんでした。
Tegra2 には depth texture がありませんが、代わりに half float
の color buffer を使っています。
if( Extension("GL_OES_depth_texture") ){
~
}else if( Extension("GL_OES_texture_half_float") ){
// Tegra250
glGenTextures( 1, &gShadowTexture );
glBindTexture( GL_TEXTURE_2D, gShadowTexture );
glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, NULL );
glGenRenderbuffers( 1, &gShadowDepth );
glBindRenderbuffer( GL_RENDERBUFFER, gShadowDepth );
glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height );
glGenFramebuffers( 1, &gShadowTarget );
glBindFramebuffer( GL_FRAMEBUFFER, gShadowTarget );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gShadowTexture, 0 );
glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, gShadowDepth );
}