/* * Copyright 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #import #if TARGET_OS_IPHONE #import #else #import #endif NS_ASSUME_NONNULL_BEGIN @class RTCVideoFrame; // RTCOpenGLVideoRenderer issues appropriate OpenGL commands to draw a frame to // the currently bound framebuffer. Supports OpenGL 3.2 and OpenGLES 2.0. OpenGL // framebuffer creation and management should be handled elsewhere using the // same context used to initialize this class. @interface RTCOpenGLVideoRenderer : NSObject // The last successfully drawn frame. Used to avoid drawing frames unnecessarily // hence saving battery life by reducing load. @property(nonatomic, readonly) RTCVideoFrame *lastDrawnFrame; #if TARGET_OS_IPHONE - (instancetype)initWithContext:(EAGLContext *)context NS_DESIGNATED_INITIALIZER; #else - (instancetype)initWithContext:(NSOpenGLContext *)context NS_DESIGNATED_INITIALIZER; #endif // Draws |frame| onto the currently bound OpenGL framebuffer. |setupGL| must be // called before this function will succeed. - (BOOL)drawFrame:(RTCVideoFrame *)frame; // The following methods are used to manage OpenGL resources. On iOS // applications should release resources when placed in background for use in // the foreground application. In fact, attempting to call OpenGLES commands // while in background will result in application termination. // Sets up the OpenGL state needed for rendering. - (void)setupGL; // Tears down the OpenGL state created by |setupGL|. - (void)teardownGL; - (instancetype)init NS_UNAVAILABLE; @end NS_ASSUME_NONNULL_END