Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 某些帧缓冲区大小在iOS设备上失败(不支持GL\U帧缓冲区)_Iphone_Ios_Opengl Es_Framebuffer_Render To Texture - Fatal编程技术网

Iphone 某些帧缓冲区大小在iOS设备上失败(不支持GL\U帧缓冲区)

Iphone 某些帧缓冲区大小在iOS设备上失败(不支持GL\U帧缓冲区),iphone,ios,opengl-es,framebuffer,render-to-texture,Iphone,Ios,Opengl Es,Framebuffer,Render To Texture,我昨天在尝试创建256x8大小的帧缓冲区时遇到了一个问题-在iOS设备(在iPad3、iPhone4和iPadMini上测试)上,某些大小的帧缓冲区将因GL\u framebuffer\u UNSUPPORTED而失败。这些相同的大小在iOS模拟器中工作 这一问题此前曾有报道,但仍未得到答复。我创建了一个测试来检查哪些帧缓冲区大小不起作用。需要明确的是,这些大小仅在实际的iOS硬件上失效,这些大小在iOS模拟器中正常工作 有人知道为什么这些尺寸不合格吗(包括在下面)?这些尺寸合适吗?或者他们失败

我昨天在尝试创建256x8大小的帧缓冲区时遇到了一个问题-在iOS设备(在iPad3、iPhone4和iPadMini上测试)上,某些大小的帧缓冲区将因
GL\u framebuffer\u UNSUPPORTED
而失败。这些相同的大小在iOS模拟器中工作

这一问题此前曾有报道,但仍未得到答复。我创建了一个测试来检查哪些帧缓冲区大小不起作用。需要明确的是,这些大小仅在实际的iOS硬件上失效,这些大小在iOS模拟器中正常工作

有人知道为什么这些尺寸不合格吗(包括在下面)?这些尺寸合适吗?或者他们失败的原因是什么?还是只是一只虫子?有趣的是,每个维度(宽度或高度)都是二的幂。我测试过的每种两种尺寸的非幂都能工作

以下是测试帧缓冲区大小的代码:

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上运行)


我猜,从技术上讲,实现是免费的,不支持一些背景纹理。似乎GPU不支持边长为1、2、4或8的两种纹理的能力。奇怪的至少你可以总是使用至少16的边长来解决这个问题。是的,我认为这只是特定于硬件的对某些背衬纹理大小的拒绝。我认为它也会因设备而异,因为我非常确定我在某些iOS设备上使用了1x256帧缓冲区,而256x1帧缓冲区失败了。
    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