src/video/uikit/SDL_uikitopenglview.m
author Alex Szpakowski <slime73@gmail.com>
Tue, 09 Jun 2015 21:08:24 -0300
changeset 9727 b845f659e015
parent 9619 b94b6d0bff0f
child 9810 1e079120100e
permissions -rw-r--r--
iOS: Fixed some cases where SDL_DestroyWindow or SDL_GL_DeleteContext can cause crashes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     1
/*
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
     2
  Simple DirectMedia Layer
9619
b94b6d0bff0f Updated the copyright year to 2015
Sam Lantinga <slouken@libsdl.org>
parents: 9532
diff changeset
     3
  Copyright (C) 1997-2015 Sam Lantinga <slouken@libsdl.org>
5262
b530ef003506 Happy 2011! :)
Sam Lantinga <slouken@libsdl.org>
parents: 5209
diff changeset
     4
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
     5
  This software is provided 'as-is', without any express or implied
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
     6
  warranty.  In no event will the authors be held liable for any damages
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
     7
  arising from the use of this software.
5262
b530ef003506 Happy 2011! :)
Sam Lantinga <slouken@libsdl.org>
parents: 5209
diff changeset
     8
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
     9
  Permission is granted to anyone to use this software for any purpose,
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    10
  including commercial applications, and to alter it and redistribute it
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    11
  freely, subject to the following restrictions:
5262
b530ef003506 Happy 2011! :)
Sam Lantinga <slouken@libsdl.org>
parents: 5209
diff changeset
    12
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    13
  1. The origin of this software must not be misrepresented; you must not
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    14
     claim that you wrote the original software. If you use this software
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    15
     in a product, an acknowledgment in the product documentation would be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    16
     appreciated but is not required.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    17
  2. Altered source versions must be plainly marked as such, and must not be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    18
     misrepresented as being the original software.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5527
diff changeset
    19
  3. This notice may not be removed or altered from any source distribution.
5262
b530ef003506 Happy 2011! :)
Sam Lantinga <slouken@libsdl.org>
parents: 5209
diff changeset
    20
*/
8093
b43765095a6f Make internal SDL sources include SDL_internal.h instead of SDL_config.h
Ryan C. Gordon <icculus@icculus.org>
parents: 7784
diff changeset
    21
#include "../../SDL_internal.h"
6044
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 6022
diff changeset
    22
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 6022
diff changeset
    23
#if SDL_VIDEO_DRIVER_UIKIT
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    24
6686
45014250760c Don't run the game loop while a messagebox is up
Sam Lantinga <slouken@libsdl.org>
parents: 6435
diff changeset
    25
#include <OpenGLES/EAGLDrawable.h>
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    26
#include <OpenGLES/ES2/glext.h>
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    27
#import "SDL_uikitopenglview.h"
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    28
#include "SDL_uikitwindow.h"
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    29
9501
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    30
@implementation SDL_uikitopenglview {
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    31
    /* The renderbuffer and framebuffer used to render to this layer. */
9501
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    32
    GLuint viewRenderbuffer, viewFramebuffer;
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    33
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    34
    /* The depth buffer that is attached to viewFramebuffer, if it exists. */
9501
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    35
    GLuint depthRenderbuffer;
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    36
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    37
    /* format of depthRenderbuffer */
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    38
    GLenum depthBufferFormat;
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    39
}
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    40
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    41
@synthesize context;
9501
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    42
@synthesize backingWidth;
574db299498f More cleanup of the iOS Objective-C code.
Alex Szpakowski <slime73@gmail.com>
parents: 9500
diff changeset
    43
@synthesize backingHeight;
9488
f15520430c94 Changed the way retina resolutions are handled in iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 8891
diff changeset
    44
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
    45
+ (Class)layerClass
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
    46
{
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
    47
    return [CAEAGLLayer class];
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    48
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    49
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    50
- (instancetype)initWithFrame:(CGRect)frame
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    51
                        scale:(CGFloat)scale
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    52
                retainBacking:(BOOL)retained
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    53
                        rBits:(int)rBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    54
                        gBits:(int)gBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    55
                        bBits:(int)bBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    56
                        aBits:(int)aBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    57
                    depthBits:(int)depthBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    58
                  stencilBits:(int)stencilBits
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    59
                         sRGB:(BOOL)sRGB
9727
b845f659e015 iOS: Fixed some cases where SDL_DestroyWindow or SDL_GL_DeleteContext can cause crashes.
Alex Szpakowski <slime73@gmail.com>
parents: 9619
diff changeset
    60
                      context:(EAGLContext *)glcontext
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    61
{
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    62
    if ((self = [super initWithFrame:frame])) {
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    63
        const BOOL useStencilBuffer = (stencilBits != 0);
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    64
        const BOOL useDepthBuffer = (depthBits != 0);
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    65
        NSString *colorFormat = nil;
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    66
9727
b845f659e015 iOS: Fixed some cases where SDL_DestroyWindow or SDL_GL_DeleteContext can cause crashes.
Alex Szpakowski <slime73@gmail.com>
parents: 9619
diff changeset
    67
        context = glcontext;
8233
ffece8ab18a6 Fixed bug 2407 - Support for OpenGL ES 3 contexts on iOS
Sam Lantinga <slouken@libsdl.org>
parents: 8149
diff changeset
    68
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    69
        if (!context || ![EAGLContext setCurrentContext:context]) {
9727
b845f659e015 iOS: Fixed some cases where SDL_DestroyWindow or SDL_GL_DeleteContext can cause crashes.
Alex Szpakowski <slime73@gmail.com>
parents: 9619
diff changeset
    70
            SDL_SetError("Could not create OpenGL ES drawable (could not make context current)");
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    71
            return nil;
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    72
        }
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    73
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    74
        if (sRGB) {
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    75
            /* sRGB EAGL drawable support was added in iOS 7. */
9525
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
    76
            if (UIKit_IsSystemVersionAtLeast(7.0)) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    77
                colorFormat = kEAGLColorFormatSRGBA8;
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    78
            } else {
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    79
                SDL_SetError("sRGB drawables are not supported.");
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    80
                return nil;
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    81
            }
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
    82
        } else if (rBits >= 8 || gBits >= 8 || bBits >= 8) {
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    83
            /* if user specifically requests rbg888 or some color format higher than 16bpp */
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    84
            colorFormat = kEAGLColorFormatRGBA8;
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    85
        } else {
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
    86
            /* default case (potentially faster) */
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
    87
            colorFormat = kEAGLColorFormatRGB565;
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
    88
        }
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
    89
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
    90
        CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
    91
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
    92
        eaglLayer.opaque = YES;
9499
6fe9b44b2d84 Updated the iOS Objective-C code to use NSDictionary/NSArray/NSNumber literals and subscripting, for improved code clarity.
Alex Szpakowski <slime73@gmail.com>
parents: 9498
diff changeset
    93
        eaglLayer.drawableProperties = @{
9524
9de159f9cefd Minor objective-c code style improvements
Alex Szpakowski <slime73@gmail.com>
parents: 9520
diff changeset
    94
            kEAGLDrawablePropertyRetainedBacking:@(retained),
9de159f9cefd Minor objective-c code style improvements
Alex Szpakowski <slime73@gmail.com>
parents: 9520
diff changeset
    95
            kEAGLDrawablePropertyColorFormat:colorFormat
9499
6fe9b44b2d84 Updated the iOS Objective-C code to use NSDictionary/NSArray/NSNumber literals and subscripting, for improved code clarity.
Alex Szpakowski <slime73@gmail.com>
parents: 9498
diff changeset
    96
        };
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
    97
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    98
        /* Set the appropriate scale (for retina display support) */
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
    99
        self.contentScaleFactor = scale;
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   100
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   101
        /* Create the color Renderbuffer Object */
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   102
        glGenRenderbuffers(1, &viewRenderbuffer);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   103
        glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   104
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   105
        if (![context renderbufferStorage:GL_RENDERBUFFER fromDrawable:eaglLayer]) {
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   106
            SDL_SetError("Failed to create OpenGL ES drawable");
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   107
            return nil;
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   108
        }
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
   109
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   110
        /* Create the Framebuffer Object */
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   111
        glGenFramebuffers(1, &viewFramebuffer);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   112
        glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer);
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
   113
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   114
        /* attach the color renderbuffer to the FBO */
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   115
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer);
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
   116
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   117
        glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   118
        glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight);
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   119
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   120
        if ((useDepthBuffer) || (useStencilBuffer)) {
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   121
            if (useStencilBuffer) {
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
   122
                /* Apparently you need to pack stencil and depth into one buffer. */
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   123
                depthBufferFormat = GL_DEPTH24_STENCIL8_OES;
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
   124
            } else if (useDepthBuffer) {
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   125
                /* iOS only uses 32-bit float (exposed as fixed point 24-bit)
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   126
                 * depth buffers. */
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
   127
                depthBufferFormat = GL_DEPTH_COMPONENT24_OES;
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   128
            }
6022
e0327dd7d0c0 More cleanup in SDL_uikitopenglview.m
Ryan C. Gordon <icculus@icculus.org>
parents: 6021
diff changeset
   129
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   130
            glGenRenderbuffers(1, &depthRenderbuffer);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   131
            glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   132
            glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight);
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   133
            if (useDepthBuffer) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   134
                glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   135
            }
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   136
            if (useStencilBuffer) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   137
                glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
6021
a4bf2a9b0fd0 Added stencil buffer support on iOS.
Ryan C. Gordon <icculus@icculus.org>
parents: 6008
diff changeset
   138
            }
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   139
        }
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
   140
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   141
        if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   142
            SDL_SetError("Failed creating OpenGL ES framebuffer");
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   143
            return nil;
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   144
        }
7784
70b305e09b4e Avoid redundant state changes in the GLES2 renderer.
Ryan C. Gordon <icculus@icculus.org>
parents: 7423
diff changeset
   145
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   146
        glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
9525
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   147
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   148
        [self setDebugLabels];
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   149
    }
5130
ec13e48ee0d9 Fixed bug #1112 (retina display support)
Sam Lantinga <slouken@libsdl.org>
parents: 5129
diff changeset
   150
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   151
    return self;
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   152
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   153
9514
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   154
- (GLuint)drawableRenderbuffer
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   155
{
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   156
    return viewRenderbuffer;
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   157
}
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   158
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   159
- (GLuint)drawableFramebuffer
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   160
{
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   161
    return viewFramebuffer;
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   162
}
5b56ab9ff5fe Added iOS-specific functions to get the window view's current OpenGL Renderbuffer and Framebuffer objects, so they can be more easily rebound when necessary.
Alex Szpakowski <slime73@gmail.com>
parents: 9510
diff changeset
   163
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   164
- (void)updateFrame
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   165
{
9526
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   166
    GLint prevRenderbuffer = 0;
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   167
    glGetIntegerv(GL_RENDERBUFFER_BINDING, &prevRenderbuffer);
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   168
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   169
    glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   170
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   171
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   172
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   173
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight);
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   174
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   175
    if (depthRenderbuffer != 0) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   176
        glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   177
        glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight);
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   178
    }
7784
70b305e09b4e Avoid redundant state changes in the GLES2 renderer.
Ryan C. Gordon <icculus@icculus.org>
parents: 7423
diff changeset
   179
9526
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   180
    glBindRenderbuffer(GL_RENDERBUFFER, prevRenderbuffer);
9525
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   181
}
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   182
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   183
- (void)setDebugLabels
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   184
{
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   185
    if (viewFramebuffer != 0) {
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   186
        glLabelObjectEXT(GL_FRAMEBUFFER, viewFramebuffer, 0, "context FBO");
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   187
    }
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   188
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   189
    if (viewRenderbuffer != 0) {
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   190
        glLabelObjectEXT(GL_RENDERBUFFER, viewRenderbuffer, 0, "context color buffer");
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   191
    }
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   192
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   193
    if (depthRenderbuffer != 0) {
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   194
        if (depthBufferFormat == GL_DEPTH24_STENCIL8_OES) {
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   195
            glLabelObjectEXT(GL_RENDERBUFFER, depthRenderbuffer, 0, "context depth-stencil buffer");
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   196
        } else {
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   197
            glLabelObjectEXT(GL_RENDERBUFFER, depthRenderbuffer, 0, "context depth buffer");
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   198
        }
64e3f446d6d7 Added debug labels for the OpenGL ES objects created with SDL_GL_CreateContext on iOS.
Alex Szpakowski <slime73@gmail.com>
parents: 9524
diff changeset
   199
    }
5527
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   200
}
9a03d2300486 iOS: Correctly resize renderbuffers when rotating orientation.
Ryan C. Gordon <icculus@icculus.org>
parents: 5520
diff changeset
   201
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   202
- (void)swapBuffers
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   203
{
7784
70b305e09b4e Avoid redundant state changes in the GLES2 renderer.
Ryan C. Gordon <icculus@icculus.org>
parents: 7423
diff changeset
   204
    /* viewRenderbuffer should always be bound here. Code that binds something
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   205
     * else is responsible for rebinding viewRenderbuffer, to reduce duplicate
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   206
     * state changes. */
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   207
    [context presentRenderbuffer:GL_RENDERBUFFER];
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   208
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   209
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   210
- (void)layoutSubviews
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   211
{
9496
abc8df8ce987 The default implementation of [view layoutSubviews] actually does something in iOS 6+, so we should call [super layoutSubviews] when overriding it.
Alex Szpakowski <slime73@gmail.com>
parents: 9492
diff changeset
   212
    [super layoutSubviews];
abc8df8ce987 The default implementation of [view layoutSubviews] actually does something in iOS 6+, so we should call [super layoutSubviews] when overriding it.
Alex Szpakowski <slime73@gmail.com>
parents: 9492
diff changeset
   213
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   214
    int width  = (int) (self.bounds.size.width * self.contentScaleFactor);
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   215
    int height = (int) (self.bounds.size.height * self.contentScaleFactor);
9526
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   216
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   217
    /* Update the color and depth buffer storage if the layer size has changed. */
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   218
    if (width != backingWidth || height != backingHeight) {
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   219
        EAGLContext *prevContext = [EAGLContext currentContext];
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   220
        if (prevContext != context) {
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   221
            [EAGLContext setCurrentContext:context];
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   222
        }
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   223
9526
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   224
        [self updateFrame];
9532
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   225
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   226
        if (prevContext != context) {
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   227
            [EAGLContext setCurrentContext:prevContext];
318042c16b76 Several improvements to the iOS backend:
Alex Szpakowski <slime73@gmail.com>
parents: 9529
diff changeset
   228
        }
9526
b1e51123fbea The iOS OpenGL ES context's color Renderbuffer Object is no longer completely destroyed and recreated in layoutSubviews. Its storage is now only reallocated when the actual size of the layer changes. The framebuffer object and renderbuffer object binding states are no longer clobbered by the storage reallocation code in layoutSubviews.
Alex Szpakowski <slime73@gmail.com>
parents: 9525
diff changeset
   229
    }
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   230
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   231
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   232
- (void)destroyFramebuffer
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   233
{
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   234
    if (viewFramebuffer != 0) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   235
        glDeleteFramebuffers(1, &viewFramebuffer);
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   236
        viewFramebuffer = 0;
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   237
    }
6001
3ae3d1e58d59 Cleanup out trailing whitespace in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 5535
diff changeset
   238
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   239
    if (viewRenderbuffer != 0) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   240
        glDeleteRenderbuffers(1, &viewRenderbuffer);
9498
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   241
        viewRenderbuffer = 0;
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   242
    }
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   243
d02c27e3f698 Cleaned up iOS OpenGL ES context creation code and added sRGB context support on iOS 7+
Alex Szpakowski <slime73@gmail.com>
parents: 9496
diff changeset
   244
    if (depthRenderbuffer != 0) {
9520
6a655264dd47 Switched to the core versions of OpenGL ES framebuffer object and renderbuffer functions.
Alex Szpakowski <slime73@gmail.com>
parents: 9514
diff changeset
   245
        glDeleteRenderbuffers(1, &depthRenderbuffer);
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   246
        depthRenderbuffer = 0;
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   247
    }
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   248
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   249
6003
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   250
- (void)dealloc
fddf81967e2d Use a consistent source code format in src/video/uikit
Kees Bakker <kees@ijzerbout.nl>
parents: 6001
diff changeset
   251
{
9727
b845f659e015 iOS: Fixed some cases where SDL_DestroyWindow or SDL_GL_DeleteContext can cause crashes.
Alex Szpakowski <slime73@gmail.com>
parents: 9619
diff changeset
   252
    if (context && context == [EAGLContext currentContext]) {
9510
e19faa3b5d88 Updated the iOS backend code to use Objective-C's automatic reference counting (ARC).
Alex Szpakowski <slime73@gmail.com>
parents: 9502
diff changeset
   253
        [self destroyFramebuffer];
5129
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   254
        [EAGLContext setCurrentContext:nil];
5690ebc772c7 Fixed spacing
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   255
    }
2765
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   256
}
f55c87ae336b Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   257
2859
99210400e8b9 Updated copyright date
Sam Lantinga <slouken@libsdl.org>
parents: 2765
diff changeset
   258
@end
5132
5f09cb749d75 Added vim spacing hints
Sam Lantinga <slouken@libsdl.org>
parents: 5130
diff changeset
   259
6044
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 6022
diff changeset
   260
#endif /* SDL_VIDEO_DRIVER_UIKIT */
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 6022
diff changeset
   261
5132
5f09cb749d75 Added vim spacing hints
Sam Lantinga <slouken@libsdl.org>
parents: 5130
diff changeset
   262
/* vi: set ts=4 sw=4 expandtab: */