//
//  NXGLView.h
//  NXKit
//
//  Created by 徐家骏 on 2019/5/9.
//  Copyright © 2019 徐家骏. All rights reserved.
//

#import <GLKit/GLKit.h>
#import "NXVideoFrameContext.h"

NS_ASSUME_NONNULL_BEGIN

#define NXUIViewContentModeCustom  9999   //自己定义一个mode
#define NXUIViewContentModeCustom2 9998   //自定义mode，在横竖一致时按fitRatio剪切fill，在不一致时不剪切fit

@interface NXGLView : GLKView

//取值可以是UIViewContentMode里面的系统定义值（只支持其中scaleToFill，AspectFill, AspectFit三种），也可以是前面#define的NXUIViewContentModeCustom
@property(nonatomic)          UIViewContentMode videoContentMode;

//在NXUIViewContentModeCustom模式下，控制FitRatio，0-100，100表示全部内容要fit进窗口，50表示至少50%的内容要fit进窗口。所以这个值0相当于aspectFill，100相当与aspectFit。
@property(nonatomic)          int               videoContentFitRatio;

@property(nonatomic)          CVImageBufferRef  imageBuffer;
@property(nonatomic)          CVImageBufferRef  backgroundImageBuffer; //有绿幕时，设置背景，这个也可以是视频帧
@property(atomic, strong)     NXVideoFrameContext  *frameContext;
@property(nonatomic)          int64_t           uid;
@property(nonatomic)          int64_t           lastUid;
@property(nonatomic)          BOOL              mirrorFrontCamera;
@property(nonatomic)          BOOL              greenCurtainOn;
@property(nonatomic)          BOOL              enableDebugInfo;

//这三个用于画面镜像，拉伸。这些状态要根据uid记录在videoEngine中，因为glview是会变的。
@property(nonatomic)          BOOL              mirrorHorizontal;
@property(nonatomic)          BOOL              mirrorVertical;
@property(nonatomic)          GLKMatrix3        perspectiveMatrix;
- (GLKMatrix3)getPerspectiveMatrixOfBase:(CGFloat)bx0 :(CGFloat)by0 :(CGFloat)bx1 :(CGFloat)by1 :(CGFloat)bx2 :(CGFloat)by2 :(CGFloat)bx3 :(CGFloat)by3 to:(CGFloat)x0 :(CGFloat)y0 :(CGFloat)x1 :(CGFloat)y1 :(CGFloat)x2 :(CGFloat)y2 :(CGFloat)x3 :(CGFloat)y3;
- (BOOL)findRectInTex:(CGFloat *)x0 :(CGFloat *)y0 :(CGFloat *)x1 :(CGFloat *)y1 :(CGFloat *)x2 :(CGFloat *)y2 :(CGFloat *)x3 :(CGFloat *)y3 colorEnabled:(BOOL)colorEnabled quickSearch:(BOOL)quickSearch;

- (instancetype)initWithCoder:(NSCoder *)aDecoder;
- (instancetype)initWithFrame:(CGRect)frame;
- (void)clearScreen;

//视频改为有sdk自己渲染，setImageBuffer废弃掉
- (CVImageBufferRef)renderImageBuffer:(CVImageBufferRef)imageBuffer;

@end

NS_ASSUME_NONNULL_END
