/* * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "modules/desktop_capture/mac/scoped_pixel_buffer_object.h" #include namespace webrtc { ScopedPixelBufferObject::ScopedPixelBufferObject() : cgl_context_(NULL), pixel_buffer_object_(0) { } ScopedPixelBufferObject::~ScopedPixelBufferObject() { Release(); } bool ScopedPixelBufferObject::Init(CGLContextObj cgl_context, int size_in_bytes) { cgl_context_ = cgl_context; CGLContextObj CGL_MACRO_CONTEXT = cgl_context_; glGenBuffersARB(1, &pixel_buffer_object_); if (glGetError() == GL_NO_ERROR) { glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_object_); glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size_in_bytes, NULL, GL_STREAM_READ_ARB); glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); if (glGetError() != GL_NO_ERROR) { Release(); } } else { cgl_context_ = NULL; pixel_buffer_object_ = 0; } return pixel_buffer_object_ != 0; } void ScopedPixelBufferObject::Release() { if (pixel_buffer_object_) { CGLContextObj CGL_MACRO_CONTEXT = cgl_context_; glDeleteBuffersARB(1, &pixel_buffer_object_); cgl_context_ = NULL; pixel_buffer_object_ = 0; } } } // namespace webrtc