16c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org/*
26c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
36c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *
46c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  Use of this source code is governed by a BSD-style license
56c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  that can be found in the LICENSE file in the root of the source
66c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  tree. An additional intellectual property rights grant can be found
76c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  in the file PATENTS.  All contributing project authors may
86c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org *  be found in the AUTHORS file in the root of the source tree.
96c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org */
106c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
116c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_SCOPED_PIXEL_BUFFER_OBJECT_H_
126c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#define WEBRTC_MODULES_DESKTOP_CAPTURE_SCOPED_PIXEL_BUFFER_OBJECT_H_
136c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
146c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include <OpenGL/CGLMacro.h>
156c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include <OpenGL/OpenGL.h>
166c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
17774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include "webrtc/base/constructormagic.h"
186c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include "webrtc/typedefs.h"
196c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
206c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgnamespace webrtc {
216c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
226c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgclass ScopedPixelBufferObject {
236c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org public:
246c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  ScopedPixelBufferObject();
256c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  ~ScopedPixelBufferObject();
266c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
276c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  bool Init(CGLContextObj cgl_context, int size_in_bytes);
286c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  void Release();
296c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
306c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  GLuint get() const { return pixel_buffer_object_; }
316c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
326c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org private:
336c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  CGLContextObj cgl_context_;
346c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  GLuint pixel_buffer_object_;
356c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
366c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org  DISALLOW_COPY_AND_ASSIGN(ScopedPixelBufferObject);
376c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org};
386c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
393b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
406c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org
416c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_SCOPED_PIXEL_BUFFER_OBJECT_H_
42