15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/graphics_3d.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_Graphics3D_1_0>() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_GRAPHICS_3D_INTERFACE_1_0;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Graphics3D::Graphics3D() {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Graphics3D::Graphics3D(const InstanceHandle& instance,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const int32_t attrib_list[]) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_Graphics3D_1_0>()) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_Graphics3D_1_0>()->Create(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        instance.pp_instance(), 0, attrib_list));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Graphics3D::Graphics3D(const InstanceHandle& instance,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const Graphics3D& share_context,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const int32_t attrib_list[]) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_Graphics3D_1_0>()) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_Graphics3D_1_0>()->Create(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        instance.pp_instance(),
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        share_context.pp_resource(),
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        attrib_list));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Graphics3D::~Graphics3D() {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Graphics3D::GetAttribs(int32_t attrib_list[]) const {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_Graphics3D_1_0>())
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_ERROR_NOINTERFACE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_Graphics3D_1_0>()->GetAttribs(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(),
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      attrib_list);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Graphics3D::SetAttribs(const int32_t attrib_list[]) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_Graphics3D_1_0>())
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_ERROR_NOINTERFACE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_Graphics3D_1_0>()->SetAttribs(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(),
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      attrib_list);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Graphics3D::ResizeBuffers(int32_t width, int32_t height) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_Graphics3D_1_0>())
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_ERROR_NOINTERFACE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_Graphics3D_1_0>()->ResizeBuffers(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(), width, height);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Graphics3D::SwapBuffers(const CompletionCallback& cc) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_Graphics3D_1_0>())
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_ERROR_NOINTERFACE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_Graphics3D_1_0>()->SwapBuffers(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(),
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cc.pp_completion_callback());
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
84