christoffer 88799d9c1f RTCEAGLVideoView: Fix GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT error.
Fix an issue where using setNeedsDisplay on a GLKView which has a frame
with size zero will make GLKView/iOS output the following error:

  Failed to bind EAGLDrawable: <CAEAGLLayer: 0x1742282e0> to
    GL_RENDERBUFFER 1 Failed to make complete framebuffer object 8cd6

(The error code 8cd6 corresponds to
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT.)

GLKView will internally setup it's render buffer when the delegate is
about to draw into it. Previously when enableSetNeedsDisplay was set to
YES (default), then GLKView would still attempt to setup it's internal
buffer even if it's frame size is zero and that would cause
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT.

By using enableSetNeedsDisplay = NO, RTCEAGLVideoView can guard against
calling -[GLKView display] if it's current frame size is empty.

Review URL: https://codereview.webrtc.org/1347013002

Cr-Commit-Position: refs/heads/master@{#10076}
2015-09-25 13:57:54 +00:00
..
2014-05-30 22:26:06 +00:00

This directory contains the ObjectiveC implementation of the
webrtc::PeerConnection API.  This can be built for Mac or iOS.  This
file describes building the API, unit test, and AppRTCDemo sample app.

Prerequisites:
- Make sure gclient is checking out tools necessary to target iOS: your
  .gclient file should contain a line like:
  target_os = ['ios', 'mac']
  Make sure to re-run gclient sync after adding this to download the tools.

- Set up webrtc-related $GYP_DEFINES; example shell functions that set
  up for building for iOS-device, iOS-simulator, and Mac (resp) are:
function wrbase() {
  cd /path/to/webrtc/trunk
  export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1"
  export GYP_GENERATORS="ninja"
}

function wrios() {
  wrbase
  export GYP_DEFINES="$GYP_DEFINES OS=ios target_arch=armv7"
  export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_ios"
  export GYP_CROSSCOMPILE=1
}

function wrsim() {
  wrbase
  export GYP_DEFINES="$GYP_DEFINES OS=ios target_arch=ia32"
  export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_sim"
  export GYP_CROSSCOMPILE=1
}

function wrmac() {
  wrbase
  export GYP_DEFINES="$GYP_DEFINES OS=mac target_arch=x64"
  export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_mac"
}

- Finally, run "gclient runhooks" to generate ninja files.

Example of building & using the unittest & app:

- To build & run the unittest (must target mac):
  wrmac && gclient runhooks && \
      ninja -C out_mac/Debug libjingle_peerconnection_objc_test && \
      ./out_mac/Debug/libjingle_peerconnection_objc_test.app/Contents/MacOS/libjingle_peerconnection_objc_test

- To build & launch the sample app on OSX:
  wrmac && gclient runhooks && ninja -C out_mac/Debug AppRTCDemo && \
      ./out_mac/Debug/AppRTCDemo.app/Contents/MacOS/AppRTCDemo

- To build & launch the sample app on the iOS simulator:
  wrsim && gclient runhooks && ninja -C out_sim/Debug iossim AppRTCDemo && \
      ./out_sim/Debug/iossim out_sim/Debug/AppRTCDemo.app

- To build & sign the sample app for an iOS device:
  wrios && gclient runhooks && ninja -C out_ios/Debug-iphoneos AppRTCDemo

- To install the sample app on an iOS device:
  ideviceinstaller -i out_ios/Debug-iphoneos/AppRTCDemo.app
  (if installing ideviceinstaller from brew, use --HEAD to get support
  for .app directories)
- Alternatively, use iPhone Configuration Utility:
  - Open "iPhone Configuration Utility" (http://support.apple.com/kb/DL1465)
  - Click the "Add" icon (command-o)
  - Open the app under out_ios/Debug-iphoneos/AppRTCDemo (should be added to the Applications tab)
  - Click the device's name in the left-hand panel and select the Applications tab
  - Click Install on the AppRTCDemo line.
      (If you have any problems deploying for the first time, check
      the Info.plist file to ensure that the Bundle Identifier matches
      your phone provisioning profile, or use a development wildcard
      provisioning profile.)
- Alternately, use ios-deploy:
  ios-deploy -d -b out_ios/Debug-iphoneos/AppRTCDemo.app

- Once installed:
  - Tap AppRTCDemo on the iOS device's home screen (might have to scroll to find it).
  - In desktop chrome, navigate to http://apprtc.appspot.com and note
    the r=<NNN> room number in the resulting URL; enter that number
    into the text field on the phone.