# gvr::GvrApi

`#include <gvr.h>`

This is a convenience C++ wrapper for the Google VR C API.

## Summary

This wrapper strategy prevents ABI compatibility issues between compilers by ensuring that the interface between client code and the implementation code in libgvr.so is a pure C interface. The translation from C++ calls to C calls provided by this wrapper runs entirely in the client's binary and is compiled by the client's compiler.

Methods in this class are only documented insofar as the C++ wrapping logic is concerned; for information about the method itself, please refer to the corresponding function in the C API.

Example API usage:

```
// Functionality supplied by the application in the example below has
// the "app-" prefix.
#ifdef __ANDROID__
// On Android, the gvr_context should almost always be obtained from the
// Java GvrLayout object via
// GvrLayout.getGvrApi().getNativeGvrContext().
std::unique_ptr gvr = GvrApi::WrapNonOwned(gvr_context);
#else
std::unique_ptr gvr = GvrApi::Create();
#endif

gvr->InitializeGl();

gvr::BufferViewportList viewport_list =
    gvr->CreateEmptyBufferViewportList();
gvr->GetRecommendedBufferViewports(&viewport_list);
gvr::BufferViewport left_eye_viewport = gvr->CreateBufferViewport();
gvr::BufferViewport right_eye_viewport = gvr->CreateBufferViewport();
viewport_list.Get(0, &left_eye_view);
viewport_list.Get(1, &right_eye_view);

std::vector<gvr::BufferSpec> specs;
specs.push_back(gvr->CreateBufferSpec());
specs[0].SetSamples(app_samples);
gvr::SwapChain swap_chain = gvr->CreateSwapChain(specs);

while (client_app_should_render) {
  // A client app should be ready for the render target size to change
  // whenever a new QR code is scanned, or a new viewer is paired.
  gvr::Sizei render_target_size =
      gvr->GetRecommendedRenderTargetSize();
  swap_chain.ResizeBuffer(0, render_target_size);
  gvr::Frame frame = swap_chain.AcquireFrame();
  while (!frame) {
    std::this_thread::sleep_for(2ms);
    frame = swap_chain.AcquireFrame();
  }

  // This function will depend on your render loop's implementation.
  gvr::ClockTimePoint next_vsync = AppGetNextVsyncTime();

  const gvr::Mat4f head_view =
      gvr->GetHeadSpaceFromStartSpaceRotation(next_vsync);
  const gvr::Mat4f left_eye_view = MatrixMultiply(
      gvr->GetEyeFromHeadMatrix(kLeftEye), head_view);
  const gvr::Mat4f right_eye_view = MatrixMultiply(
      gvr->GetEyeFromHeadMatrix(kRightEye), head_view);

  frame.BindBuffer(0);
  // App does its rendering to the current framebuffer here.
  AppDoSomeRenderingForEye(
      left_eye_viewport.GetSourceUv(), left_eye_view);
  AppDoSomeRenderingForEye(
      right_eye_viewport.GetSourceUv(), right_eye_view);
  frame.Unbind();
  frame.Submit(viewport_list, head_view);
}
```

<br />

| ### Constructors and Destructors ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a5ac6ad6139c78fc0aa64be4328e531dc(const https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api &)` ||
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ad2659929a9710377dc147bae9045ffe7()` ||

| ### Error handling ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a19e7a9137f96411a8ebf8bab17383d03()` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1gab6f56d27fe86b45573e1f2a6f18d0bf5` For more information, see [gvr_clear_error()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga93959164fe4336ac29a861c23c9c3923). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a78f29745898738aed8a0130d4b86dd2d()` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/properties#classgvr_1_1_properties` For more information, see [gvr_get_current_properties()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac56137de76a1a2308a664e1200d7e338). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1acd7731f9a1c213f7c0d08c9fef53be82()` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1gab6f56d27fe86b45573e1f2a6f18d0bf5` For more information, see [gvr_get_error()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaf6e8312f2723daf5235d0eb7bc2c7a39). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ab0a4deceef51a7e192d09504d926aa47(https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1gab6f56d27fe86b45573e1f2a6f18d0bf5 error_code)` | `const char *` For more information, see [gvr_get_error_string()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga8b775e4138612281ee26fd6673d4795a). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a48b1f964cc13c874c71ae4815061a35d() const ` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/user-prefs#classgvr_1_1_user_prefs` For more information, see [gvr_get_user_prefs()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga268a847867a92aa1f82e00380256b061). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1aca592c2df3615c72e91a3c8579419907(https://developers.google.com/vr/reference/android-ndk/struct/gvr-event#structgvr__event *event_out)` | `bool` For more information, see [gvr_poll_event()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga646c351335c25b694eb3a3981734a882). |

| ### Rendering ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ab7448e2f8d3c37404cacbd8284034e37()` | `void` For more information, see [gvr_bind_default_framebuffer()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga5455f6470e15d8ad96ef6622dcc74914). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ab76db71b183c1e09674c3eac2c989874()` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-spec#classgvr_1_1_buffer_spec` For more information, see [gvr_buffer_spec_create()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga2cbd960ec39e8d009fe2e87b90c4c356). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1aa0a39afc30ffd97cd91b6afd290e643b() const ` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-viewport#classgvr_1_1_buffer_viewport` Constructs a C++ wrapper for a gvr_buffer_viewport object. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a3b62fcbaec54dc527dd75eb0e658f538() const ` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-viewport-list#classgvr_1_1_buffer_viewport_list` Constructs a C++ wrapper for a gvr_buffer_viewport_list object. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a1b8309b6cc9af4754620a5e919f51c64(const std::vector< https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-spec#classgvr_1_1_buffer_spec > & specs)` | `https://developers.google.com/vr/reference/android-ndk/class/gvr/swap-chain#classgvr_1_1_swap_chain` For more information, see [gvr_swap_chain_create()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga423d0cba3833a31d9ffe3a3d8c9bac53). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4253ce55ace81775b28eea7de70cb84b(int32_t texture_id, const https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-viewport-list#classgvr_1_1_buffer_viewport_list & viewport_list, const https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f & rendered_head_pose_in_start_space_matrix, const https://developers.google.com/vr/reference/android-ndk/struct/gvr-clock-time-point#structgvr__clock__time__point & texture_presentation_time)` | `void` For more information, see [gvr_distort_to_screen()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga7203566bcd4eab6c1ce9cbe9d0086864). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a6f507e89210da3effbe0d54179898c06() const ` | `bool` For more information, see [gvr_get_async_reprojection_enabled()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaf7b4d84cf203a131b7c2374ca26e8f75). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a0ad88ffd1f6e25874ead5d84c26bee66() const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-sizei#structgvr__sizei` For more information, see [gvr_get_maximum_effective_render_target_size()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga0901d5be5a0b41ae2ac646401ec91b41). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a5d9a65325a9aa8f7d11e7156a0c9e9e3() const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-sizei#structgvr__sizei` For more information, see [gvr_get_screen_target_size()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac04622bcc9ae32618cbdf684653cefd8). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a1e4e6036e9d12b18aa044f5e533b8c09()` | `void` For more information, see [gvr_initialize_gl()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac1c7d9d37b2d02fb8703a05c9f60b124). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ac76f4c0797053655e9ff80e25609900d(int32_t feature) const ` | `bool` For more information, see [gvr_is_feature_supported()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga1bbf30ae0f68ba3de74c19cd736d7fc8). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a5116e4580480f7160befe14d2e9a0df8(const int32_t *required_features, int32_t required_count, const int32_t *optional_features, int32_t optional_count, void *on_complete_activity) const ` | `void` For more information, see [gvr_request_features()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaeebe4aa2b3f62f3fbad74a6c1f1acd35). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a3fe12aa73523549d095e50b7ef915ab7(https://developers.google.com/vr/reference/android-ndk/struct/gvr-sizei#structgvr__sizei surface_size_pixels)` | `void` For more information, see gvr_set_surface_size(). |

| ### Head tracking ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a1f495feab908f55c9d683edfaea45231(const https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f & head_space_from_start_space_rotation, float factor) const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f` For more information, see [gvr_apply_neck_model()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga1fee0bcb23ef9f22ccc7282d9f8ec920). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a10ef090f9819ade3d26793a0690a3366(const https://developers.google.com/vr/reference/android-ndk/struct/gvr-clock-time-point#structgvr__clock__time__point & time_point) const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f` For more information see gvr_get_head_space_from_start_space_rotation. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a9fe1c2b77f077d4116c1e4897d73131e(const https://developers.google.com/vr/reference/android-ndk/struct/gvr-clock-time-point#structgvr__clock__time__point & time_point) const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f` For more information see gvr_get_head_space_from_start_space_transform. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a08f0814d8ea847e07aac0f139fb8e125()` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-clock-time-point#structgvr__clock__time__point` For more information, see [gvr_get_time_point_now()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga3ce252705c9932b10107838952594a59). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a99c4d9673162b2f774c570c480ede257()` | `void` For more information, see [gvr_pause_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga46dc7a999b9f22064c020b561619e07d). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a24898154c616cb7d33a594a2613f28c9()` | `void` |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1acc86e590423572d5c9c025a39f7cd590()` | `void` For more information, see [gvr_reset_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1gaadbdbc68dcfaa83fc50f0c1b3b3dff45). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a95cf2e52955275e1184c568eb0ccdb26()` | `void` For more information, see [gvr_resume_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga5b3e41d5daf13173f5fed781230b093c). |

| ### Viewer parameters ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a45216fe31612f25d44d5f8ddb01c4177(https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga85307f8900f38a9100d4d201c32d5b0b eye, const https://developers.google.com/vr/reference/android-ndk/struct/gvr-vec2f#structgvr__vec2f & uv_in)` | `std::array< https://developers.google.com/vr/reference/android-ndk/struct/gvr-vec2f#structgvr__vec2f, 3 >` For more information, see [gvr_compute_distorted_point()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga45bc64fff9319039dfc1a4b7680afb3a). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a8363998d534af6d4b5d706fb4daf6bca(https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga85307f8900f38a9100d4d201c32d5b0b eye) const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-mat4f#structgvr__mat4f` For more information, see [gvr_get_eye_from_head_matrix()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaddf0ec0d10c90427b87257d0f1344348). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a14877c4fa46bf0a155e31442fe82ef41() const ` | `const char *` For more information, see [gvr_get_viewer_model()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga521073e2ee6b56435f1dcbe44e777f6a). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a7abe1eb59ced8995dd61de02a22f43f0() const ` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1gac838227d4c585b3e8e04fc6d1afbe4b7` For more information, see [gvr_get_viewer_type()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaf95a05d7c2e95e893deb51d6f0074557). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a6958f5c903a2a51155b106918488deb9() const ` | `const char *` For more information, see [gvr_get_viewer_vendor()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaecffd73e68a74233fd03f200ad5991f9). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ab5a578cada847b992e78c5bb2de4bcdf() const ` | `https://developers.google.com/vr/reference/android-ndk/struct/gvr-recti#structgvr__recti` For more information, see [gvr_get_window_bounds()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga5e3570b005a0f76b8b7b9b650a634674). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1ac149633113ac7628c2499554a531adfe()` | `void` For more information, see [gvr_refresh_viewer_profile()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gac2b8fe0c95855e4f3cbd79804b0cb781). |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a3f0e316ec533f10ada09c7f367137aeb(const char *viewer_profile_uri)` | `bool` For more information, see [gvr_set_default_viewer_profile()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gacdbc7438587f61749324bff457c7fc7e). |

| ### Wrapper manipulation ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1aff68d39cfbfc70f29e8f96cca5070679()` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *` **[Deprecated.](https://developers.google.com/vr/reference/android-ndk/deprecated/deprecated)** Use [cobj()](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4f3cbde39a79bebf6ac7021297325744) instead. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a8148fb9a79b4772c7544136211b7e3cb() const ` | `const https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *` **[Deprecated.](https://developers.google.com/vr/reference/android-ndk/deprecated/deprecated)** Use [cobj()](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4f3cbde39a79bebf6ac7021297325744) instead. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a78425de567807a6790476da362e3ff51(https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *context, bool owned)` | ` `` ` |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1aef4e04674b6de079a6e8136b5825ebb5(https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *context)` | `std::unique_ptr< https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api >` Instantiates a [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance that wraps a *non-owned* gvr_context. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4f3cbde39a79bebf6ac7021297325744()` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *` Returns the wrapped C object. Does not affect ownership. |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a281f1fe78e8f6ef05a79850962e6e96d() const ` | `const https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *` |
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1aaade0e76774dd8007182f8c671245378()` | `https://developers.google.com/vr/reference/android-ndk/group/types#group__types_1ga23df772969ac0cc13f77fffdec5c18ea *` Returns the wrapped C object and transfers its ownership to the caller. |

| ### Public static functions ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1afa60a3ff29bd236b9b0d7cf7e76fccad(JNIEnv *env, jobject app_context, jobject class_loader)` | `std::unique_ptr< https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api >` Instantiates and returns a [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance that owns a gvr_context. |

| ### Public functions ||
|---|---|
| `https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a037453b54db3a429c7f0db7f3584e6dc(const https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api &)=delete` | `void` |

## Error handling

### ClearError

```
Error ClearError()
```
For more information, see [gvr_clear_error()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga93959164fe4336ac29a861c23c9c3923).

### GetCurrentProperties

```
Properties GetCurrentProperties()
```
For more information, see [gvr_get_current_properties()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac56137de76a1a2308a664e1200d7e338).

### GetError

```
Error GetError()
```
For more information, see [gvr_get_error()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaf6e8312f2723daf5235d0eb7bc2c7a39).

### GetErrorString

```
const char * GetErrorString(
  Error error_code
)
```
For more information, see [gvr_get_error_string()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga8b775e4138612281ee26fd6673d4795a).

### GetUserPrefs

```
UserPrefs GetUserPrefs() const 
```
For more information, see [gvr_get_user_prefs()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga268a847867a92aa1f82e00380256b061).

### PollEvent

```
bool PollEvent(
  Event *event_out
)
```
For more information, see [gvr_poll_event()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga646c351335c25b694eb3a3981734a882).

## Rendering

### BindDefaultFramebuffer

```
void BindDefaultFramebuffer()
```
For more information, see [gvr_bind_default_framebuffer()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga5455f6470e15d8ad96ef6622dcc74914).

### CreateBufferSpec

```
BufferSpec CreateBufferSpec()
```
For more information, see [gvr_buffer_spec_create()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga2cbd960ec39e8d009fe2e87b90c4c356).

### CreateBufferViewport

```
BufferViewport CreateBufferViewport() const 
```
Constructs a C++ wrapper for a gvr_buffer_viewport object.

For more information, see [gvr_buffer_viewport_create()](https://developers.google.com/vr/reference/android-ndk/group/viewport#group__viewport_1ga1005a44252487944198b31d0a6f49d45).

<br />

| Details ||
|---|---|
| **Returns** | A new [BufferViewport](https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-viewport#classgvr_1_1_buffer_viewport) instance with memory allocated for an underlying gvr_buffer_viewport. |

### CreateEmptyBufferViewportList

```
BufferViewportList CreateEmptyBufferViewportList() const 
```
Constructs a C++ wrapper for a gvr_buffer_viewport_list object.

For more information, see [gvr_buffer_viewport_list_create()](https://developers.google.com/vr/reference/android-ndk/group/viewport#group__viewport_1ga1764815894fde73a0ce1680250830af4).

<br />

| Details ||
|---|---|
| **Returns** | A new, empty [BufferViewportList](https://developers.google.com/vr/reference/android-ndk/class/gvr/buffer-viewport-list#classgvr_1_1_buffer_viewport_list) instance. Note: The validity of the returned object is closely tied to the lifetime of the member gvr_context. The caller is responsible for ensuring correct usage accordingly. |

### CreateSwapChain

```
SwapChain CreateSwapChain(
  const std::vector< BufferSpec > & specs
)
```
For more information, see [gvr_swap_chain_create()](https://developers.google.com/vr/reference/android-ndk/group/swap-chain#group__swap__chain_1ga423d0cba3833a31d9ffe3a3d8c9bac53).

### DistortToScreen

```
void DistortToScreen(
  int32_t texture_id,
  const BufferViewportList & viewport_list,
  const Mat4f & rendered_head_pose_in_start_space_matrix,
  const ClockTimePoint & texture_presentation_time
)
```
For more information, see [gvr_distort_to_screen()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga7203566bcd4eab6c1ce9cbe9d0086864).

### GetAsyncReprojectionEnabled

```
bool GetAsyncReprojectionEnabled() const 
```
For more information, see [gvr_get_async_reprojection_enabled()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaf7b4d84cf203a131b7c2374ca26e8f75).

### GetMaximumEffectiveRenderTargetSize

```
Sizei GetMaximumEffectiveRenderTargetSize() const 
```
For more information, see [gvr_get_maximum_effective_render_target_size()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga0901d5be5a0b41ae2ac646401ec91b41).

### GetScreenTargetSize

```
Sizei GetScreenTargetSize() const 
```
For more information, see [gvr_get_screen_target_size()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac04622bcc9ae32618cbdf684653cefd8).

### InitializeGl

```
void InitializeGl()
```
For more information, see [gvr_initialize_gl()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gac1c7d9d37b2d02fb8703a05c9f60b124).

### IsFeatureSupported

```
bool IsFeatureSupported(
  int32_t feature
) const 
```
For more information, see [gvr_is_feature_supported()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1ga1bbf30ae0f68ba3de74c19cd736d7fc8).

### RequestFeatures

```
void RequestFeatures(
  const int32_t *required_features,
  int32_t required_count,
  const int32_t *optional_features,
  int32_t optional_count,
  void *on_complete_activity
) const 
```
For more information, see [gvr_request_features()](https://developers.google.com/vr/reference/android-ndk/group/base#group__base_1gaeebe4aa2b3f62f3fbad74a6c1f1acd35).

### SetSurfaceSize

```
void SetSurfaceSize(
  Sizei surface_size_pixels
)
```
For more information, see gvr_set_surface_size().

## Head tracking

### ApplyNeckModel

```
Mat4f ApplyNeckModel(
  const Mat4f & head_space_from_start_space_rotation,
  float factor
) const 
```
For more information, see [gvr_apply_neck_model()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga1fee0bcb23ef9f22ccc7282d9f8ec920).

### GetHeadSpaceFromStartSpaceRotation

```
Mat4f GetHeadSpaceFromStartSpaceRotation(
  const ClockTimePoint & time_point
) const 
```
For more information see gvr_get_head_space_from_start_space_rotation.

### GetHeadSpaceFromStartSpaceTransform

```
Mat4f GetHeadSpaceFromStartSpaceTransform(
  const ClockTimePoint & time_point
) const 
```
For more information see gvr_get_head_space_from_start_space_transform.

### GetTimePointNow

```
ClockTimePoint GetTimePointNow()
```
For more information, see [gvr_get_time_point_now()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga3ce252705c9932b10107838952594a59).

### PauseTracking

```
void PauseTracking()
```
For more information, see [gvr_pause_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga46dc7a999b9f22064c020b561619e07d).

### RecenterTracking

```
void RecenterTracking()
```

### ResetTracking

```
void ResetTracking()
```
For more information, see [gvr_reset_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1gaadbdbc68dcfaa83fc50f0c1b3b3dff45).

### ResumeTracking

```
void ResumeTracking()
```
For more information, see [gvr_resume_tracking()](https://developers.google.com/vr/reference/android-ndk/group/headtracking#group___headtracking_1ga5b3e41d5daf13173f5fed781230b093c).

## Viewer parameters

### ComputeDistortedPoint

```
std::array< Vec2f, 3 > ComputeDistortedPoint(
  Eye eye,
  const Vec2f & uv_in
)
```
For more information, see [gvr_compute_distorted_point()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga45bc64fff9319039dfc1a4b7680afb3a).

### GetEyeFromHeadMatrix

```
Mat4f GetEyeFromHeadMatrix(
  Eye eye
) const 
```
For more information, see [gvr_get_eye_from_head_matrix()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaddf0ec0d10c90427b87257d0f1344348).

### GetViewerModel

```
const char * GetViewerModel() const 
```
For more information, see [gvr_get_viewer_model()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga521073e2ee6b56435f1dcbe44e777f6a).

### GetViewerType

```
ViewerType GetViewerType() const 
```
For more information, see [gvr_get_viewer_type()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaf95a05d7c2e95e893deb51d6f0074557).

### GetViewerVendor

```
const char * GetViewerVendor() const 
```
For more information, see [gvr_get_viewer_vendor()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gaecffd73e68a74233fd03f200ad5991f9).

### GetWindowBounds

```
Recti GetWindowBounds() const 
```
For more information, see [gvr_get_window_bounds()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1ga5e3570b005a0f76b8b7b9b650a634674).

### RefreshViewerProfile

```
void RefreshViewerProfile()
```
For more information, see [gvr_refresh_viewer_profile()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gac2b8fe0c95855e4f3cbd79804b0cb781).

### SetDefaultViewerProfile

```
bool SetDefaultViewerProfile(
  const char *viewer_profile_uri
)
```
For more information, see [gvr_set_default_viewer_profile()](https://developers.google.com/vr/reference/android-ndk/group/h-m-d#group___h_m_d_1gacdbc7438587f61749324bff457c7fc7e).

## Wrapper manipulation

### GetContext

```
gvr_context * GetContext()
```
**[Deprecated.](https://developers.google.com/vr/reference/android-ndk/deprecated/deprecated)** Use [cobj()](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4f3cbde39a79bebf6ac7021297325744) instead.

### GetContext

```
const gvr_context * GetContext() const 
```
**[Deprecated.](https://developers.google.com/vr/reference/android-ndk/deprecated/deprecated)** Use [cobj()](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api_1a4f3cbde39a79bebf6ac7021297325744) instead.

### GvrApi

```
 GvrApi(
  gvr_context *context,
  bool owned
)
```

### WrapNonOwned

```
std::unique_ptr< GvrApi > WrapNonOwned(
  gvr_context *context
)
```
Instantiates a [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance that wraps a *non-owned* gvr_context.

Ownership of the provided `context` remains with the caller, and they are responsible for ensuring proper disposal of the context.

<br />

Details Parameters `context` Pointer to a non-null, non-owned gvr_context instance. **Returns** unique_ptr to the created [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance. Never null.

### cobj

```
gvr_context * cobj()
```
Returns the wrapped C object. Does not affect ownership.

### cobj

```
const gvr_context * cobj() const 
```

### release

```
gvr_context * release()
```
Returns the wrapped C object and transfers its ownership to the caller.

The wrapper becomes invalid and should not be used.

## Public static functions

### Create

```
std::unique_ptr< GvrApi > Create(
  JNIEnv *env,
  jobject app_context,
  jobject class_loader
)
```
Instantiates and returns a [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance that owns a gvr_context.

<br />

Details Parameters `env` The JNIEnv associated with the current thread. `app_context` The Android application context. This must be the application context, NOT an Activity context (Note: from any Android Activity in your app, you can call getApplicationContext() to retrieve the application context). `class_loader` The class loader to use when loading Java classes. This must be your app's main class loader (usually accessible through activity.getClassLoader() on any of your Activities). **Returns** unique_ptr to the created [GvrApi](https://developers.google.com/vr/reference/android-ndk/class/gvr/gvr-api#classgvr_1_1_gvr_api) instance, nullptr on failure.

## Public functions

### GvrApi

```
 GvrApi(
  const GvrApi &
)=delete
```

### operator=

```
void operator=(
  const GvrApi &
)=delete
```

### \~GvrApi

```
 ~GvrApi()
```