1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ppapi/cpp/graphics_3d.h"
6
7#include "ppapi/c/pp_errors.h"
8#include "ppapi/cpp/completion_callback.h"
9#include "ppapi/cpp/instance_handle.h"
10#include "ppapi/cpp/module_impl.h"
11#include "ppapi/cpp/var.h"
12
13namespace pp {
14
15namespace {
16
17template <> const char* interface_name<PPB_Graphics3D_1_0>() {
18  return PPB_GRAPHICS_3D_INTERFACE_1_0;
19}
20
21}  // namespace
22
23Graphics3D::Graphics3D() {
24}
25
26Graphics3D::Graphics3D(const InstanceHandle& instance,
27                       const int32_t attrib_list[]) {
28  if (has_interface<PPB_Graphics3D_1_0>()) {
29    PassRefFromConstructor(get_interface<PPB_Graphics3D_1_0>()->Create(
30        instance.pp_instance(), 0, attrib_list));
31  }
32}
33
34Graphics3D::Graphics3D(const InstanceHandle& instance,
35                       const Graphics3D& share_context,
36                       const int32_t attrib_list[]) {
37  if (has_interface<PPB_Graphics3D_1_0>()) {
38    PassRefFromConstructor(get_interface<PPB_Graphics3D_1_0>()->Create(
39        instance.pp_instance(),
40        share_context.pp_resource(),
41        attrib_list));
42  }
43}
44
45Graphics3D::~Graphics3D() {
46}
47
48int32_t Graphics3D::GetAttribs(int32_t attrib_list[]) const {
49  if (!has_interface<PPB_Graphics3D_1_0>())
50    return PP_ERROR_NOINTERFACE;
51
52  return get_interface<PPB_Graphics3D_1_0>()->GetAttribs(
53      pp_resource(),
54      attrib_list);
55}
56
57int32_t Graphics3D::SetAttribs(const int32_t attrib_list[]) {
58  if (!has_interface<PPB_Graphics3D_1_0>())
59    return PP_ERROR_NOINTERFACE;
60
61  return get_interface<PPB_Graphics3D_1_0>()->SetAttribs(
62      pp_resource(),
63      attrib_list);
64}
65
66int32_t Graphics3D::ResizeBuffers(int32_t width, int32_t height) {
67  if (!has_interface<PPB_Graphics3D_1_0>())
68    return PP_ERROR_NOINTERFACE;
69
70  return get_interface<PPB_Graphics3D_1_0>()->ResizeBuffers(
71      pp_resource(), width, height);
72}
73
74int32_t Graphics3D::SwapBuffers(const CompletionCallback& cc) {
75  if (!has_interface<PPB_Graphics3D_1_0>())
76    return PP_ERROR_NOINTERFACE;
77
78  return get_interface<PPB_Graphics3D_1_0>()->SwapBuffers(
79      pp_resource(),
80      cc.pp_completion_callback());
81}
82
83}  // namespace pp
84