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

Unified Diff: ui/gl/gl_surface_glx.cc

Issue 2347383002: X11: Use better visuals for OpenGL (Closed)
Patch Set: Fix various tests Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: ui/gl/gl_surface_glx.cc
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
index add3a62fc587b0447fb9a2d8ef4e51e0e728d1d9..191da0804469399e1baf580e1f72e4be2b876b42 100644
--- a/ui/gl/gl_surface_glx.cc
+++ b/ui/gl/gl_surface_glx.cc
@@ -29,6 +29,7 @@ extern "C" {
#include "ui/gfx/x/x11_types.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_visual_picker_glx.h"
#include "ui/gl/sync_control_vsync_provider.h"
namespace gl {
@@ -50,6 +51,11 @@ bool g_glx_get_msc_rate_oml_supported = false;
bool g_glx_sgi_video_sync_supported = false;
+// A 24-bit RGB visual and colormap to use when creating offscreen surfaces.
+Visual* g_visual = nullptr;
+int g_depth = CopyFromParent;
+Colormap g_colormap = CopyFromParent;
+
GLXFBConfig GetConfigForWindow(Display* display,
gfx::AcceleratedWidget window) {
DCHECK(window != 0);
@@ -109,9 +115,6 @@ bool CreateDummyWindow(Display* display) {
DCHECK(display);
gfx::AcceleratedWidget parent_window =
RootWindow(display, DefaultScreen(display));
- // We create a window with CopyFromParent visual so that we have the same
- // visual as NativeViewGLSurfaceGLX (i.e. same GLXFBConfig), to ensure
- // contexts are compatible and can be made current with either.
gfx::AcceleratedWidget window =
XCreateWindow(display, parent_window, 0, 0, 1, 1, 0, CopyFromParent,
InputOutput, CopyFromParent, 0, nullptr);
@@ -422,6 +425,13 @@ bool GLSurfaceGLX::InitializeOneOff() {
g_glx_get_msc_rate_oml_supported = g_glx_oml_sync_control_supported;
g_glx_sgi_video_sync_supported = HasGLXExtension("GLX_SGI_video_sync");
+ const XVisualInfo& visual_info =
+ gl::GLVisualPickerGLX::GetInstance()->system_visual();
+ g_visual = visual_info.visual;
+ g_depth = visual_info.depth;
+ g_colormap = XCreateColormap(g_display, DefaultRootWindow(g_display),
+ visual_info.visual, AllocNone);
+
// We create a dummy unmapped window for both the main Display and the video
// sync Display so that the Nvidia driver can initialize itself before the
// sandbox is set up.
@@ -507,6 +517,7 @@ bool NativeViewGLSurfaceGLX::Initialize(GLSurface::Format format) {
return false;
}
size_ = gfx::Size(attributes.width, attributes.height);
+ visual_id_ = XVisualIDFromVisual(attributes.visual);
// Create a child window, with a CopyFromParent visual (to avoid inducing
// extra blits in the driver), that we can resize exactly in Resize(),
// correctly ordered with GL, so that we don't have invalid transient states.
@@ -641,15 +652,14 @@ UnmappedNativeViewGLSurfaceGLX::UnmappedNativeViewGLSurfaceGLX(
bool UnmappedNativeViewGLSurfaceGLX::Initialize(GLSurface::Format format) {
DCHECK(!window_);
- gfx::AcceleratedWidget parent_window =
- RootWindow(g_display, DefaultScreen(g_display));
+ gfx::AcceleratedWidget parent_window = DefaultRootWindow(g_display);
- // We create a window with CopyFromParent visual so that we have the same
- // visual as NativeViewGLSurfaceGLX (i.e. same GLXFBConfig), to ensure
- // contexts are compatible and can be made current with either.
+ XSetWindowAttributes attrs;
+ attrs.border_pixel = 0;
+ attrs.colormap = g_colormap;
window_ = XCreateWindow(g_display, parent_window, 0, 0, size_.width(),
- size_.height(), 0, CopyFromParent, InputOutput,
- CopyFromParent, 0, nullptr);
+ size_.height(), 0, g_depth, InputOutput, g_visual,
+ CWBorderPixel | CWColormap, &attrs);
GetConfig();
DCHECK(config_);
glx_window_ = glXCreateWindow(g_display, config_, window_, NULL);

Powered by Google App Engine
This is Rietveld 408576698