2014-02-10 02:10:30 +01:00
/*************************************************************************/
/* gl_view.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
2017-08-27 14:16:55 +02:00
/* https://godotengine.org */
2014-02-10 02:10:30 +01:00
/*************************************************************************/
2020-01-01 11:16:22 +01:00
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
2014-02-10 02:10:30 +01:00
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
2017-03-05 16:44:50 +01:00
# import <AVFoundation / AVFoundation.h>
# import <MediaPlayer / MediaPlayer.h>
2014-02-10 02:10:30 +01:00
# import <OpenGLES / EAGL.h>
# import <OpenGLES / ES1 / gl.h>
# import <OpenGLES / ES1 / glext.h>
2017-03-05 16:44:50 +01:00
# import <UIKit / UIKit.h>
2014-02-10 02:10:30 +01:00
@ protocol GLViewDelegate ;
2020-07-02 17:30:07 +02:00
@ class GLViewGestureRecognizer ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
@ interface GLView : UIView < UIKeyInput > {
@ private
2014-02-10 02:10:30 +01:00
// The pixel dimensions of the backbuffer
GLint backingWidth ;
GLint backingHeight ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
EAGLContext * context ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
// OpenGL names for the renderbuffer and framebuffers used to render to this view
GLuint viewRenderbuffer , viewFramebuffer ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
// OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist)
GLuint depthRenderbuffer ;
2016-03-09 00:00:52 +01:00
2015-10-23 02:31:09 +02:00
BOOL useCADisplayLink ;
2015-02-10 20:54:22 +01:00
// CADisplayLink available on 3.1+ synchronizes the animation timer & drawing with the refresh rate of the display, only supports animation intervals of 1/60 1/30 & 1/15
CADisplayLink * displayLink ;
2015-10-23 02:31:09 +02:00
2014-02-10 02:10:30 +01:00
// An animation timer that, when animation is started, will periodically call -drawView at the given rate.
2015-10-23 02:31:09 +02:00
// Only used if CADisplayLink is not
2014-02-10 02:10:30 +01:00
NSTimer * animationTimer ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
NSTimeInterval animationInterval ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
// Delegate to do our drawing, called by -drawView, which can be called manually or via the animation timer.
id < GLViewDelegate > delegate ;
2016-03-09 00:00:52 +01:00
2014-02-10 02:10:30 +01:00
// Flag to denote that the -setupView method of a delegate has been called.
// Resets to NO whenever the delegate changes.
BOOL delegateSetup ;
BOOL active ;
float screen_scale ;
2020-07-02 17:30:07 +02:00
// Delay gesture recognizer
GLViewGestureRecognizer * delayGestureRecognizer ;
2014-02-10 02:10:30 +01:00
}
@ property ( nonatomic , assign ) id < GLViewDelegate > delegate ;
2014-11-17 11:46:11 +01:00
// AVPlayer-related properties
@ property ( strong , nonatomic ) AVAsset * avAsset ;
@ property ( strong , nonatomic ) AVPlayerItem * avPlayerItem ;
@ property ( strong , nonatomic ) AVPlayer * avPlayer ;
@ property ( strong , nonatomic ) AVPlayerLayer * avPlayerLayer ;
2014-03-14 02:57:24 +01:00
@ property ( strong , nonatomic ) UIWindow * backgroundWindow ;
2018-04-10 12:35:30 +02:00
@ property ( nonatomic ) UITextAutocorrectionType autocorrectionType ;
2017-03-05 16:44:50 +01:00
- ( void ) startAnimation ;
- ( void ) stopAnimation ;
- ( void ) drawView ;
2014-02-10 02:10:30 +01:00
- ( BOOL ) canBecomeFirstResponder ;
- ( void ) open_keyboard ;
- ( void ) hide_keyboard ;
- ( void ) deleteBackward ;
- ( BOOL ) hasText ;
- ( void ) insertText : ( NSString * ) p_text ;
- ( id ) initGLES ;
- ( BOOL ) createFramebuffer ;
- ( void ) destroyFramebuffer ;
2017-03-05 16:44:50 +01:00
- ( void ) audioRouteChangeListenerCallback : ( NSNotification * ) notification ;
2017-10-04 10:39:31 +02:00
- ( void ) keyboardOnScreen : ( NSNotification * ) notification ;
- ( void ) keyboardHidden : ( NSNotification * ) notification ;
2015-03-03 18:39:13 +01:00
2014-02-10 02:10:30 +01:00
@ property NSTimeInterval animationInterval ;
2015-10-23 02:31:09 +02:00
@ property ( nonatomic , assign ) BOOL useCADisplayLink ;
2014-02-10 02:10:30 +01:00
@ end
2017-03-05 16:44:50 +01:00
@ protocol GLViewDelegate < NSObject >
2014-02-10 02:10:30 +01:00
@ required
// Draw with OpenGL ES
2017-03-05 16:44:50 +01:00
- ( void ) drawView : ( GLView * ) view ;
2014-02-10 02:10:30 +01:00
@ optional
// Called whenever you need to do some initialization before rendering.
2017-03-05 16:44:50 +01:00
- ( void ) setupView : ( GLView * ) view ;
2014-02-10 02:10:30 +01:00
@ end