Fix build break
[chromium-blink-merge.git] / ui / gl / gl_surface_osmesa.cc
blob7994eec379187df5b0838ab1f7749615d8fff3ae
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.
5 #include "base/logging.h"
6 #include "ui/gl/gl_bindings.h"
7 #include "ui/gl/gl_context.h"
8 #include "ui/gl/gl_surface_osmesa.h"
10 namespace gfx {
12 GLSurfaceOSMesa::GLSurfaceOSMesa(unsigned format, const gfx::Size& size)
13 : format_(format),
14 size_(size) {
17 bool GLSurfaceOSMesa::Initialize() {
18 return Resize(size_);
21 void GLSurfaceOSMesa::Destroy() {
22 buffer_.reset();
25 bool GLSurfaceOSMesa::Resize(const gfx::Size& new_size) {
26 GLContext* current_context = GLContext::GetCurrent();
27 bool was_current = current_context && current_context->IsCurrent(this);
28 if (was_current)
29 current_context->ReleaseCurrent(this);
31 // Preserve the old buffer.
32 scoped_ptr<int32[]> old_buffer(buffer_.release());
34 // Allocate a new one.
35 buffer_.reset(new int32[new_size.GetArea()]);
36 memset(buffer_.get(), 0, new_size.GetArea() * sizeof(buffer_[0]));
38 // Copy the old back buffer into the new buffer.
39 if (old_buffer.get()) {
40 int copy_width = std::min(size_.width(), new_size.width());
41 int copy_height = std::min(size_.height(), new_size.height());
42 for (int y = 0; y < copy_height; ++y) {
43 for (int x = 0; x < copy_width; ++x) {
44 buffer_[y * new_size.width() + x] = old_buffer[y * size_.width() + x];
49 size_ = new_size;
51 if (was_current)
52 return current_context->MakeCurrent(this);
54 return true;
57 bool GLSurfaceOSMesa::IsOffscreen() {
58 return true;
61 bool GLSurfaceOSMesa::SwapBuffers() {
62 NOTREACHED() << "Should not call SwapBuffers on an GLSurfaceOSMesa.";
63 return false;
66 gfx::Size GLSurfaceOSMesa::GetSize() {
67 return size_;
70 void* GLSurfaceOSMesa::GetHandle() {
71 return buffer_.get();
74 unsigned GLSurfaceOSMesa::GetFormat() {
75 return format_;
78 GLSurfaceOSMesa::~GLSurfaceOSMesa() {
79 Destroy();
82 } // namespace gfx