Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(723)

Side by Side Diff: ui/gfx/gl/gl_context_osmesa.cc

Issue 7021014: GLContext no longer holds a pointer to a GLSurface. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <GL/osmesa.h> 5 #include <GL/osmesa.h>
6 6
7 #include <algorithm> 7 #include "ui/gfx/gl/gl_context_osmesa.h"
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "ui/gfx/gl/gl_bindings.h" 10 #include "ui/gfx/gl/gl_bindings.h"
11 #include "ui/gfx/gl/gl_context_osmesa.h" 11 #include "ui/gfx/gl/gl_surface_osmesa.h"
12 12
13 namespace gfx { 13 namespace gfx {
14 14
15 GLContextOSMesa::GLContextOSMesa(GLSurfaceOSMesa* surface) 15 GLContextOSMesa::GLContextOSMesa()
16 : surface_(surface), 16 : context_(NULL)
17 context_(NULL)
18 { 17 {
19 } 18 }
20 19
21 GLContextOSMesa::~GLContextOSMesa() { 20 GLContextOSMesa::~GLContextOSMesa() {
22 Destroy(); 21 Destroy();
23 } 22 }
24 23
25 bool GLContextOSMesa::Initialize(GLuint format, GLContext* shared_context) { 24 bool GLContextOSMesa::Initialize(GLuint format, GLContext* shared_context) {
26 DCHECK(!context_); 25 DCHECK(!context_);
27 26
(...skipping 12 matching lines...) Expand all
40 } 39 }
41 40
42 return true; 41 return true;
43 } 42 }
44 43
45 void GLContextOSMesa::Destroy() { 44 void GLContextOSMesa::Destroy() {
46 if (context_) { 45 if (context_) {
47 OSMesaDestroyContext(static_cast<OSMesaContext>(context_)); 46 OSMesaDestroyContext(static_cast<OSMesaContext>(context_));
48 context_ = NULL; 47 context_ = NULL;
49 } 48 }
50
51 if (surface_.get()) {
52 surface_->Destroy();
53 surface_.reset();
54 }
55 } 49 }
56 50
57 bool GLContextOSMesa::MakeCurrent() { 51 bool GLContextOSMesa::MakeCurrent(GLSurface* surface) {
58 DCHECK(context_); 52 DCHECK(context_);
59 53
60 gfx::Size size = surface_->GetSize(); 54 gfx::Size size = surface->GetSize();
61 55
62 if (!OSMesaMakeCurrent(static_cast<OSMesaContext>(context_), 56 if (!OSMesaMakeCurrent(static_cast<OSMesaContext>(context_),
63 surface_->GetHandle(), 57 surface->GetHandle(),
64 GL_UNSIGNED_BYTE, 58 GL_UNSIGNED_BYTE,
65 size.width(), size.height())) { 59 size.width(),
60 size.height())) {
61 LOG(ERROR) << "OSMesaMakeCurrent failed.";
62 Destroy();
66 return false; 63 return false;
67 } 64 }
68 65
69 // Row 0 is at the top. 66 // Row 0 is at the top.
70 OSMesaPixelStore(OSMESA_Y_UP, 0); 67 OSMesaPixelStore(OSMESA_Y_UP, 0);
71 68
72 return true; 69 return true;
73 } 70 }
74 71
75 bool GLContextOSMesa::IsCurrent() { 72 void GLContextOSMesa::ReleaseCurrent(GLSurface* surface) {
76 DCHECK(context_); 73 if (!IsCurrent(surface))
77 return context_ == OSMesaGetCurrentContext(); 74 return;
75
76 OSMesaMakeCurrent(NULL, NULL, GL_UNSIGNED_BYTE, 0, 0);
78 } 77 }
79 78
80 bool GLContextOSMesa::IsOffscreen() { 79 bool GLContextOSMesa::IsCurrent(GLSurface* surface) {
81 // TODO(apatrick): remove this from GLContext interface. 80 DCHECK(context_);
82 return surface_->IsOffscreen(); 81 if (context_ != OSMesaGetCurrentContext())
83 } 82 return false;
84 83
85 bool GLContextOSMesa::SwapBuffers() { 84 if (surface) {
86 // TODO(apatrick): remove this from GLContext interface. 85 GLint width;
87 return surface_->SwapBuffers(); 86 GLint height;
88 } 87 GLint format;
88 void* buffer = NULL;
89 OSMesaGetColorBuffer(context_, &width, &height, &format, &buffer);
90 if (buffer != surface->GetHandle())
91 return false;
92 }
89 93
90 gfx::Size GLContextOSMesa::GetSize() { 94 return true;
91 // TODO(apatrick): remove this from GLContext interface.
92 return surface_->GetSize();
93 } 95 }
94 96
95 void* GLContextOSMesa::GetHandle() { 97 void* GLContextOSMesa::GetHandle() {
96 return context_; 98 return context_;
97 } 99 }
98 100
99 void GLContextOSMesa::SetSwapInterval(int interval) { 101 void GLContextOSMesa::SetSwapInterval(int interval) {
100 DCHECK(IsCurrent()); 102 DCHECK(IsCurrent(NULL));
101 NOTREACHED() << "Attempt to call SetSwapInterval on an GLContextOSMesa."; 103 NOTREACHED() << "Attempt to call SetSwapInterval on an GLContextOSMesa.";
102 } 104 }
103 105
104 } // namespace gfx 106 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698