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

Side by Side Diff: chrome/gpu/gpu_backing_store_glx_context.cc

Issue 2134006: Added EGL based GLContext.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
« no previous file with comments | « chrome/gpu/gpu_backing_store_glx.cc ('k') | chrome/gpu/gpu_main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/gpu/gpu_backing_store_glx_context.h" 5 #include "chrome/gpu/gpu_backing_store_glx_context.h"
6 6
7 #include "app/gfx/gl/gl_bindings.h"
7 #include "app/x11_util.h" 8 #include "app/x11_util.h"
8 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
9 #include "chrome/gpu/gpu_thread.h" 10 #include "chrome/gpu/gpu_thread.h"
10 11
11 // Must be last. 12 // Must be last.
12 #include <GL/glew.h>
13 #include <GL/glxew.h>
14 #include <X11/Xutil.h> 13 #include <X11/Xutil.h>
15 14
16 GpuBackingStoreGLXContext::GpuBackingStoreGLXContext(GpuThread* gpu_thread) 15 GpuBackingStoreGLXContext::GpuBackingStoreGLXContext(GpuThread* gpu_thread)
17 : gpu_thread_(gpu_thread), 16 : gpu_thread_(gpu_thread),
18 tried_to_init_(false), 17 tried_to_init_(false),
19 context_(NULL), 18 context_(NULL),
20 previous_window_id_(0), 19 previous_window_id_(0),
21 frame_buffer_for_scrolling_(0), 20 frame_buffer_for_scrolling_(0),
22 is_frame_buffer_bound_(false), 21 is_frame_buffer_bound_(false),
23 temp_scroll_texture_id_(0) { 22 temp_scroll_texture_id_(0) {
24 } 23 }
25 24
26 GpuBackingStoreGLXContext::~GpuBackingStoreGLXContext() { 25 GpuBackingStoreGLXContext::~GpuBackingStoreGLXContext() {
27 if (temp_scroll_texture_id_) { 26 if (temp_scroll_texture_id_) {
28 glDeleteTextures(1, &temp_scroll_texture_id_); 27 glDeleteTextures(1, &temp_scroll_texture_id_);
29 temp_scroll_texture_id_ = 0; 28 temp_scroll_texture_id_ = 0;
30 } 29 }
31 30
32 if (frame_buffer_for_scrolling_) 31 if (frame_buffer_for_scrolling_)
33 glDeleteFramebuffers(1, &frame_buffer_for_scrolling_); 32 glDeleteFramebuffersEXT(1, &frame_buffer_for_scrolling_);
34 33
35 if (context_) 34 if (context_)
36 glXDestroyContext(gpu_thread_->display(), context_); 35 glXDestroyContext(gpu_thread_->display(), context_);
37 } 36 }
38 37
39 GLXContext GpuBackingStoreGLXContext::BindContext(XID window_id) { 38 GLXContext GpuBackingStoreGLXContext::BindContext(XID window_id) {
40 DCHECK(!is_frame_buffer_bound_); 39 DCHECK(!is_frame_buffer_bound_);
41 40
42 if (tried_to_init_) { 41 if (tried_to_init_) {
43 if (!context_) 42 if (!context_)
44 return NULL; 43 return NULL;
45 if (!previous_window_id_ || previous_window_id_ != window_id) { 44 if (!previous_window_id_ || previous_window_id_ != window_id) {
46 bool success = ::glXMakeCurrent(gpu_thread_->display(), window_id, 45 bool success = glXMakeCurrent(gpu_thread_->display(), window_id,
47 context_); 46 context_);
48 DCHECK(success); 47 DCHECK(success);
49 } 48 }
50 previous_window_id_ = window_id; 49 previous_window_id_ = window_id;
51 return context_; 50 return context_;
52 } 51 }
53 tried_to_init_ = true; 52 tried_to_init_ = true;
54 53
55 int attrib_list[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; 54 int attrib_list[] = { GLX_RGBA, GLX_DOUBLEBUFFER, 0 };
56 scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> visual_info( 55 scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> visual_info(
57 ::glXChooseVisual(gpu_thread_->display(), 0, attrib_list)); 56 glXChooseVisual(gpu_thread_->display(), 0, attrib_list));
58 if (!visual_info.get()) 57 if (!visual_info.get())
59 return NULL; 58 return NULL;
60 59
61 context_ = ::glXCreateContext(gpu_thread_->display(), visual_info.get(), 60 context_ = glXCreateContext(gpu_thread_->display(), visual_info.get(),
62 NULL, True); 61 NULL, True);
63 bool success = ::glXMakeCurrent(gpu_thread_->display(), window_id, context_); 62 bool success = glXMakeCurrent(gpu_thread_->display(), window_id, context_);
64 DCHECK(success); 63 DCHECK(success);
65 glewInit();
66 glewInitGL2Hack(); // Work around for I915. See gpu_video_layer_glx.cc.
67 return context_; 64 return context_;
68 } 65 }
69 66
70 bool GpuBackingStoreGLXContext::BindTextureForScrolling( 67 bool GpuBackingStoreGLXContext::BindTextureForScrolling(
71 XID window_id, 68 XID window_id,
72 const gfx::Size& size) { 69 const gfx::Size& size) {
73 DCHECK(!is_frame_buffer_bound_); 70 DCHECK(!is_frame_buffer_bound_);
74 BindContext(window_id); 71 BindContext(window_id);
75 72
76 // Create a new destination texture if the old one isn't properly sized. 73 // Create a new destination texture if the old one isn't properly sized.
(...skipping 11 matching lines...) Expand all
88 // enough to fit the required size. 85 // enough to fit the required size.
89 glBindTexture(GL_TEXTURE_2D, temp_scroll_texture_id_); 86 glBindTexture(GL_TEXTURE_2D, temp_scroll_texture_id_);
90 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 87 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
91 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 88 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
92 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(), 89 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(),
93 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 90 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
94 glBindTexture(GL_TEXTURE_2D, 0); 91 glBindTexture(GL_TEXTURE_2D, 0);
95 } 92 }
96 93
97 if (!frame_buffer_for_scrolling_) 94 if (!frame_buffer_for_scrolling_)
98 glGenFramebuffers(1, &frame_buffer_for_scrolling_); 95 glGenFramebuffersEXT(1, &frame_buffer_for_scrolling_);
99 glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer_for_scrolling_); 96 glBindFramebufferEXT(GL_FRAMEBUFFER, frame_buffer_for_scrolling_);
100 is_frame_buffer_bound_ = true; 97 is_frame_buffer_bound_ = true;
101 98
102 // Release our color attachment. 99 // Release our color attachment.
103 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 100 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
104 temp_scroll_texture_id_, 0); 101 temp_scroll_texture_id_, 0);
105 102
106 DCHECK(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == 103 DCHECK(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) ==
107 GL_FRAMEBUFFER_COMPLETE_EXT); 104 GL_FRAMEBUFFER_COMPLETE_EXT);
108 return true; 105 return true;
109 } 106 }
110 107
111 unsigned int GpuBackingStoreGLXContext::SwapTextureForScrolling( 108 unsigned int GpuBackingStoreGLXContext::SwapTextureForScrolling(
112 unsigned int old_texture, 109 unsigned int old_texture,
113 const gfx::Size& old_size) { 110 const gfx::Size& old_size) {
114 // Unbind the framebuffer, which we expect to be bound. 111 // Unbind the framebuffer, which we expect to be bound.
115 DCHECK(is_frame_buffer_bound_); 112 DCHECK(is_frame_buffer_bound_);
116 glBindFramebuffer(GL_FRAMEBUFFER, 0); 113 glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
117 is_frame_buffer_bound_ = false; 114 is_frame_buffer_bound_ = false;
118 115
119 DCHECK(temp_scroll_texture_id_); 116 DCHECK(temp_scroll_texture_id_);
120 unsigned int new_texture = temp_scroll_texture_id_; 117 unsigned int new_texture = temp_scroll_texture_id_;
121 118
122 temp_scroll_texture_id_ = old_texture; 119 temp_scroll_texture_id_ = old_texture;
123 temp_scroll_texture_size_ = old_size; 120 temp_scroll_texture_size_ = old_size;
124 121
125 return new_texture; 122 return new_texture;
126 } 123 }
OLDNEW
« no previous file with comments | « chrome/gpu/gpu_backing_store_glx.cc ('k') | chrome/gpu/gpu_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698