昨日、サイズ 256x8 のフレームバッファを作成しようとしたときに問題が発生しました。iOS デバイス (iPad 3、iPhone 4、および iPad Mini でテスト済み) では、特定のサイズが で失敗しGL_FRAMEBUFFER_UNSUPPORTED
ます。これらの同じサイズは、iOS シミュレーターで機能します。
この問題は以前にここで報告されましたが、未回答のままです。どのフレーム バッファ サイズが機能しないかを確認するテストを作成しました。明確にするために、これらのサイズは実際の iOS ハードウェアでのみ失敗し、サイズは iOS シミュレーターで適切に機能します。
これらのサイズが失敗する理由を知っている人はいますか (以下に含まれています)。これらのサイズは機能しますか? それとも何か理由があって失敗するのでしょうか?それとも単なるバグですか?注目すべき興味深い点の 1 つは、各次元 (幅または高さ) が常に 2 の累乗であるということです。私がテストした 2 の累乗以外のサイズはすべて動作します。
フレームバッファのサイズをテストするためのコードは次のとおりです。
void initGL()
{
// create OpenGL ES 2.0 context
EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if ( !context )
return;
[EAGLContext setCurrentContext:context];
}
void framebufferTest( int width, int height )
{
// create empty texture
GLuint texture = 0;
glActiveTexture( GL_TEXTURE0 );
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
GLenum dataType = GL_UNSIGNED_BYTE;
GLint internalFormat = GL_RGBA;
glTexImage2D( GL_TEXTURE_2D, 0, internalFormat, width, height, 0, internalFormat, dataType, NULL );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// This is necessary for non-power-of-two textures
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
// create a framebuffer & attatch to texture
GLuint framebuffer = 0;
glGenFramebuffers( 1, &framebuffer );
glBindFramebuffer( GL_FRAMEBUFFER, framebuffer );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0 );
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if ( status != GL_FRAMEBUFFER_COMPLETE )
printf( "%5dx%5d\t\tFAILED! FBO status: 0x%x\n", width, height, status );
// cleanup
glDeleteFramebuffers( 1, &framebuffer );
glDeleteTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, 0 );
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
}
無効なフレームバッファ サイズのリスト (iPad3 および iPhone 4 で実行)
1x 4 FAILED! FBO status: 0x8cdd
1x 8 FAILED! FBO status: 0x8cdd
1x 16 FAILED! FBO status: 0x8cdd
1x 32 FAILED! FBO status: 0x8cdd
1x 64 FAILED! FBO status: 0x8cdd
1x 128 FAILED! FBO status: 0x8cdd
1x 256 FAILED! FBO status: 0x8cdd
1x 512 FAILED! FBO status: 0x8cdd
1x 1024 FAILED! FBO status: 0x8cdd
1x 2048 FAILED! FBO status: 0x8cdd
2x 1 FAILED! FBO status: 0x8cdd
2x 8 FAILED! FBO status: 0x8cdd
2x 16 FAILED! FBO status: 0x8cdd
2x 32 FAILED! FBO status: 0x8cdd
2x 64 FAILED! FBO status: 0x8cdd
2x 128 FAILED! FBO status: 0x8cdd
2x 256 FAILED! FBO status: 0x8cdd
2x 512 FAILED! FBO status: 0x8cdd
2x 1024 FAILED! FBO status: 0x8cdd
2x 2048 FAILED! FBO status: 0x8cdd
4x 1 FAILED! FBO status: 0x8cdd
4x 2 FAILED! FBO status: 0x8cdd
4x 16 FAILED! FBO status: 0x8cdd
4x 32 FAILED! FBO status: 0x8cdd
4x 64 FAILED! FBO status: 0x8cdd
4x 128 FAILED! FBO status: 0x8cdd
4x 256 FAILED! FBO status: 0x8cdd
4x 512 FAILED! FBO status: 0x8cdd
4x 1024 FAILED! FBO status: 0x8cdd
4x 2048 FAILED! FBO status: 0x8cdd
8x 1 FAILED! FBO status: 0x8cdd
8x 2 FAILED! FBO status: 0x8cdd
8x 4 FAILED! FBO status: 0x8cdd
8x 32 FAILED! FBO status: 0x8cdd
8x 64 FAILED! FBO status: 0x8cdd
8x 128 FAILED! FBO status: 0x8cdd
8x 256 FAILED! FBO status: 0x8cdd
8x 512 FAILED! FBO status: 0x8cdd
8x 1024 FAILED! FBO status: 0x8cdd
8x 2048 FAILED! FBO status: 0x8cdd
16x 1 FAILED! FBO status: 0x8cdd
16x 2 FAILED! FBO status: 0x8cdd
16x 4 FAILED! FBO status: 0x8cdd
16x 8 FAILED! FBO status: 0x8cdd
32x 1 FAILED! FBO status: 0x8cdd
32x 2 FAILED! FBO status: 0x8cdd
32x 4 FAILED! FBO status: 0x8cdd
32x 8 FAILED! FBO status: 0x8cdd
64x 1 FAILED! FBO status: 0x8cdd
64x 2 FAILED! FBO status: 0x8cdd
64x 4 FAILED! FBO status: 0x8cdd
64x 8 FAILED! FBO status: 0x8cdd
128x 1 FAILED! FBO status: 0x8cdd
128x 2 FAILED! FBO status: 0x8cdd
128x 4 FAILED! FBO status: 0x8cdd
128x 8 FAILED! FBO status: 0x8cdd
256x 1 FAILED! FBO status: 0x8cdd
256x 2 FAILED! FBO status: 0x8cdd
256x 4 FAILED! FBO status: 0x8cdd
256x 8 FAILED! FBO status: 0x8cdd
512x 1 FAILED! FBO status: 0x8cdd
512x 2 FAILED! FBO status: 0x8cdd
512x 4 FAILED! FBO status: 0x8cdd
512x 8 FAILED! FBO status: 0x8cdd
1024x 1 FAILED! FBO status: 0x8cdd
1024x 2 FAILED! FBO status: 0x8cdd
1024x 4 FAILED! FBO status: 0x8cdd
1024x 8 FAILED! FBO status: 0x8cdd
2048x 1 FAILED! FBO status: 0x8cdd
2048x 2 FAILED! FBO status: 0x8cdd
2048x 4 FAILED! FBO status: 0x8cdd
2048x 8 FAILED! FBO status: 0x8cdd