Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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 如何在OpenGL中更改画布大小?glClearColor只是在画一个小盒子_Iphone_Ipad_Opengl Es - Fatal编程技术网

Iphone 如何在OpenGL中更改画布大小?glClearColor只是在画一个小盒子

Iphone 如何在OpenGL中更改画布大小?glClearColor只是在画一个小盒子,iphone,ipad,opengl-es,Iphone,Ipad,Opengl Es,当我运行下面的opengl命令时,它只将ipad屏幕的左下部分涂成红色 glClearColor(255.0f、0.0f、0.0f、0.0f) 如何使整个屏幕被涂成红色 谢谢 不起作用?您可能没有将帧缓冲区设置为正确的大小。如果您使用的是iPhone4,最常见的错误是使用报告的视图尺寸,这与早期型号相同,即使iPhone4的分辨率是以前的两倍 下面是我在我的应用程序中如何做到这一点的(重要提示:这对我来说都是黑魔法,所以请不要让我解释): 我在iPad上使用为iPhone制作的示例代码 代码中

当我运行下面的opengl命令时,它只将ipad屏幕的左下部分涂成红色

glClearColor(255.0f、0.0f、0.0f、0.0f)

如何使整个屏幕被涂成红色


谢谢

不起作用?

您可能没有将帧缓冲区设置为正确的大小。如果您使用的是iPhone4,最常见的错误是使用报告的视图尺寸,这与早期型号相同,即使iPhone4的分辨率是以前的两倍

下面是我在我的应用程序中如何做到这一点的(重要提示:这对我来说都是黑魔法,所以请不要让我解释):

我在iPad上使用为iPhone制作的示例代码

代码中的窗口大小是否可能硬编码为较小的iPhone屏幕尺寸

编辑:
这看起来像是相同的xcode问题(不是OpenGL),原因是:

  • 从xcode中的iPhone项目开始
  • .xib文件中的设置不正确
  • 两种解决方案均未经我测试:
    (一)

    UIWindow的大小调整可以通过使用Interface Builder将.xib文件手动转换为iPad版本来实现。 这在已知问题->Xcode部分中提到。
    这对我有好处

    (二)

    为自己省去很多麻烦,只需在xcode中创建一个新的iPad OGLES应用程序,一切都将为您设置并工作,将您的文件从旧xcode项目拖到新项目中,使用正确的应用程序更新xib,并完成。我今天不得不开始一个全新的项目,这样做只是为了得到MF!!FS#$*!代码签名开始工作


    glViewport更改图像的大小,但不更改使用glClearColor着色的内容。@joe-Marcelo的代码是生成与视图的背景层大小相同的帧缓冲区的标准实现。如果您的代码与此不同,则可能是您的问题的根源。如果相同,请确保在创建帧缓冲区之前,承载OpenGL ES内容的UIView已正确调整大小以适合整个显示。他的代码甚至不会编译,因为vWidth和VHHeight未定义。@joe:抱歉,这是一个较大应用程序的代码片段(显然)。vWidth和vHeight只是类中声明的变量。@joe-是的,它们可能定义为
    GLint vWidth;闪烁的微光其他地方。你应该在你自己的代码中有类似的东西来设置背衬的宽度和高度,特别是如果你是基于苹果的OpenGL ES模板的话。
    
    - (BOOL)resizeFromLayer:(CAEAGLLayer *)layer {
        glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
        [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer];
        glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &vWidth);
        glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &vHeight);
    
        glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderBuffer);
        glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, vWidth, vHeight);
    
        if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
        {
            NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
            return NO;
        }
    
        return YES;
    }