Home | History | Annotate | Download | only in ios
      1 /*
      2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_MODULES_VIDEO_RENDER_IOS_OPEN_GLES20_H_
     12 #define WEBRTC_MODULES_VIDEO_RENDER_IOS_OPEN_GLES20_H_
     13 
     14 #include <OpenGLES/ES2/glext.h>
     15 
     16 #include "webrtc/modules/video_render/video_render_defines.h"
     17 
     18 /*
     19  * This OpenGles20 is the class of renderer for VideoFrame into a GLES 2.0
     20  * windows used in the VideoRenderIosView class.
     21  */
     22 namespace webrtc {
     23 class OpenGles20 {
     24  public:
     25   OpenGles20();
     26   ~OpenGles20();
     27 
     28   bool Setup(int32_t width, int32_t height);
     29   bool Render(const VideoFrame& frame);
     30 
     31   // SetCoordinates
     32   // Sets the coordinates where the stream shall be rendered.
     33   // Values must be between 0 and 1.
     34   bool SetCoordinates(const float z_order,
     35                       const float left,
     36                       const float top,
     37                       const float right,
     38                       const float bottom);
     39 
     40  private:
     41   // Compile and load the vertex and fragment shaders defined at the top of
     42   // open_gles20.mm
     43   GLuint LoadShader(GLenum shader_type, const char* shader_source);
     44 
     45   GLuint CreateProgram(const char* vertex_source, const char* fragment_source);
     46 
     47   // Initialize the textures by the frame width and height
     48   void SetupTextures(const VideoFrame& frame);
     49 
     50   // Update the textures by the YUV data from the frame
     51   void UpdateTextures(const VideoFrame& frame);
     52 
     53   GLuint texture_ids_[3];  // Texture id of Y,U and V texture.
     54   GLuint program_;
     55   GLsizei texture_width_;
     56   GLsizei texture_height_;
     57 
     58   GLfloat vertices_[20];
     59   static const char indices_[];
     60   static const char vertext_shader_[];
     61   static const char fragment_shader_[];
     62 };
     63 }  // namespace webrtc
     64 #endif  // WEBRTC_MODULES_VIDEO_RENDER_IOS_OPEN_GLES20_H_
     65