| Index: chrome/gpu/gpu_backing_store_glx_context.cc
|
| ===================================================================
|
| --- chrome/gpu/gpu_backing_store_glx_context.cc (revision 65168)
|
| +++ chrome/gpu/gpu_backing_store_glx_context.cc (working copy)
|
| @@ -1,123 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/gpu/gpu_backing_store_glx_context.h"
|
| -
|
| -#include "app/gfx/gl/gl_bindings.h"
|
| -#include "app/x11_util.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "chrome/gpu/gpu_thread.h"
|
| -
|
| -// Must be last.
|
| -#include <X11/Xutil.h>
|
| -
|
| -GpuBackingStoreGLXContext::GpuBackingStoreGLXContext(GpuThread* gpu_thread)
|
| - : gpu_thread_(gpu_thread),
|
| - tried_to_init_(false),
|
| - context_(NULL),
|
| - previous_window_id_(0),
|
| - frame_buffer_for_scrolling_(0),
|
| - is_frame_buffer_bound_(false),
|
| - temp_scroll_texture_id_(0) {
|
| -}
|
| -
|
| -GpuBackingStoreGLXContext::~GpuBackingStoreGLXContext() {
|
| - if (temp_scroll_texture_id_) {
|
| - glDeleteTextures(1, &temp_scroll_texture_id_);
|
| - temp_scroll_texture_id_ = 0;
|
| - }
|
| -
|
| - if (frame_buffer_for_scrolling_)
|
| - glDeleteFramebuffersEXT(1, &frame_buffer_for_scrolling_);
|
| -
|
| - if (context_)
|
| - glXDestroyContext(gpu_thread_->display(), context_);
|
| -}
|
| -
|
| -GLXContext GpuBackingStoreGLXContext::BindContext(XID window_id) {
|
| - DCHECK(!is_frame_buffer_bound_);
|
| -
|
| - if (tried_to_init_) {
|
| - if (!context_)
|
| - return NULL;
|
| - if (!previous_window_id_ || previous_window_id_ != window_id) {
|
| - bool success = glXMakeCurrent(gpu_thread_->display(), window_id,
|
| - context_);
|
| - DCHECK(success);
|
| - }
|
| - previous_window_id_ = window_id;
|
| - return context_;
|
| - }
|
| - tried_to_init_ = true;
|
| -
|
| - int attrib_list[] = { GLX_RGBA, GLX_DOUBLEBUFFER, 0 };
|
| - scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> visual_info(
|
| - glXChooseVisual(gpu_thread_->display(), 0, attrib_list));
|
| - if (!visual_info.get())
|
| - return NULL;
|
| -
|
| - context_ = glXCreateContext(gpu_thread_->display(), visual_info.get(),
|
| - NULL, True);
|
| - bool success = glXMakeCurrent(gpu_thread_->display(), window_id, context_);
|
| - DCHECK(success);
|
| - return context_;
|
| -}
|
| -
|
| -bool GpuBackingStoreGLXContext::BindTextureForScrolling(
|
| - XID window_id,
|
| - const gfx::Size& size) {
|
| - DCHECK(!is_frame_buffer_bound_);
|
| - BindContext(window_id);
|
| -
|
| - // Create a new destination texture if the old one isn't properly sized.
|
| - // This means we try to re-use old ones without re-creating all the texture
|
| - // to save work in the common case of scrolling a window repeatedly that
|
| - // doesn't change size.
|
| - if (temp_scroll_texture_id_ == 0 ||
|
| - size != temp_scroll_texture_size_) {
|
| - if (!temp_scroll_texture_id_) {
|
| - // There may be no temporary one created yet.
|
| - glGenTextures(1, &temp_scroll_texture_id_);
|
| - }
|
| -
|
| - // Create a new texture in the context with random garbage in it large
|
| - // enough to fit the required size.
|
| - glBindTexture(GL_TEXTURE_2D, temp_scroll_texture_id_);
|
| - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
| - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(),
|
| - 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
|
| - glBindTexture(GL_TEXTURE_2D, 0);
|
| - }
|
| -
|
| - if (!frame_buffer_for_scrolling_)
|
| - glGenFramebuffersEXT(1, &frame_buffer_for_scrolling_);
|
| - glBindFramebufferEXT(GL_FRAMEBUFFER, frame_buffer_for_scrolling_);
|
| - is_frame_buffer_bound_ = true;
|
| -
|
| - // Release our color attachment.
|
| - glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
| - temp_scroll_texture_id_, 0);
|
| -
|
| - DCHECK(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) ==
|
| - GL_FRAMEBUFFER_COMPLETE_EXT);
|
| - return true;
|
| -}
|
| -
|
| -unsigned int GpuBackingStoreGLXContext::SwapTextureForScrolling(
|
| - unsigned int old_texture,
|
| - const gfx::Size& old_size) {
|
| - // Unbind the framebuffer, which we expect to be bound.
|
| - DCHECK(is_frame_buffer_bound_);
|
| - glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
|
| - is_frame_buffer_bound_ = false;
|
| -
|
| - DCHECK(temp_scroll_texture_id_);
|
| - unsigned int new_texture = temp_scroll_texture_id_;
|
| -
|
| - temp_scroll_texture_id_ = old_texture;
|
| - temp_scroll_texture_size_ = old_size;
|
| -
|
| - return new_texture;
|
| -}
|
|
|