November 6, 2019 update:
  • There's a new open source Cardboard SDK for iOS and Android NDK that offers a streamlined API, improved device compatibility, and built-in viewer profile QR code scanning. A corresponding Unity package (SDK) is planned for a future release. We recommend that all developers actively building for Google Cardboard migrate (iOS, Android NDK) to the new Cardboard SDK.
October 15, 2019 update:
  • The Daydream View VR headset is no longer available for purchase. However, you can continue to use the existing Google VR SDK to update and distribute your apps to the Google Play Store, and make them available to users in the Daydream app.

GvrView.StereoRenderer

public static interface GvrView.StereoRenderer

Interface for renderers that delegate all stereoscopic rendering details to the view.

Implementors should simply render a view as they would normally do using the provided transformation parameters. All stereoscopic rendering and distortion correction details are abstracted from the renderer and managed internally by the view.

Public Methods

abstract void
onDrawEye(Eye eye)
Requests to draw the contents from the point of view of an eye.
abstract void
onFinishFrame(Viewport viewport)
Called before a frame is finished.
abstract void
onNewFrame(HeadTransform headTransform)
Called when a new frame is about to be drawn.
abstract void
onRendererShutdown()
Called on the renderer thread when the thread is shutting down.
abstract void
onSurfaceChanged(int width, int height)
Called when there is a change in the surface dimensions.
abstract void
onSurfaceCreated(EGLConfig config)
Called when the surface is created or recreated.

Public Methods

public abstract void onDrawEye (Eye eye)

Requests to draw the contents from the point of view of an eye.

If distortion correction is enabled the GL context will be set to draw into a framebuffer backed by a texture at the time of this call, so if an implementor need to change the framebuffer for some rendering stage then the implementor must reset the framebuffer to the one obtained via glGetIntegerv(GL_FRAMEBUFFER_BINDING, ...) afterwards.

If stereo mode is disabled the onDrawEye method will be called only once with parameters to draw a monocular system and distortion correction will not take place. For monocular rendering, the implementor should feel free to ignore the FieldOfView and instead create a perspective matrix with whatever field of view is desired (ScreenParams.getWidth()/ScreenParams.getHeight() can provide the aspect ratio). See the setStereoModeEnabled method for details.

Parameters
eye The eye to render, including the transformations to be applied.

public abstract void onFinishFrame (Viewport viewport)

Called before a frame is finished.

By the time of this call, the frame contents have been already drawn and, if enabled, distortion correction has been applied.

This method allows to perform additional overlay rendering over the frame results. For example, it could be used to draw markers that help users to properly center their displays in their GVR viewers.

Any rendering in this step is relative to the full surface, not to any single eye view. A viewport object describing the bounds of the full surface is provided and automatically set in the current GL context.

Parameters
viewport Viewport of the full GL surface. Automatically set before this call.

public abstract void onNewFrame (HeadTransform headTransform)

Called when a new frame is about to be drawn.

Allows to differenciate between rendering eye views and different frames. Any per-frame operations not specific to a single view should happen here.

Parameters
headTransform The head transformation in the new frame.

public abstract void onRendererShutdown ()

Called on the renderer thread when the thread is shutting down.

Allows releasing GL resources and performing shutdown operations in the renderer thread. Called only if there was a previous call to onSurfaceCreated.

public abstract void onSurfaceChanged (int width, int height)

Called when there is a change in the surface dimensions.

All values are relative to the size required to render a single eye. If stereo mode is enabled this will be the size to render one of the eyes. If stereo mode is disabled this will be the size of the full surface.

Viewport, field of view and projection details are automatically updated.

Note that the eye parameters passed to onDrawEye(Eye) are computed under the assumption that the surface dimensions correspond to a fullscreen landscape view. Any other configuration is likely to lead to convergence problems.

Note that for stereo renderers the reported surface size corresponds to a single eye, which has half the width of the full view surface when stereo mode is enabled.

Parameters
width New width of the surface for a single eye in pixels.
height New height of the surface for a single eye in pixels.

public abstract void onSurfaceCreated (EGLConfig config)

Called when the surface is created or recreated.

Parameters
config The EGL configuration used when creating the surface.