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

Side by Side Diff: ui/gl/gl_gl_api_implementation.cc

Issue 1998723002: Move code in ui/gl/* from gfx:: to gl:: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 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
« no previous file with comments | « ui/gl/gl_gl_api_implementation.h ('k') | ui/gl/gl_glx_api_implementation.h » ('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) 2012 The Chromium Authors. All rights reserved. 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 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 "ui/gl/gl_gl_api_implementation.h" 5 #include "ui/gl/gl_gl_api_implementation.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "base/strings/string_split.h" 11 #include "base/strings/string_split.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "ui/gl/gl_context.h" 13 #include "ui/gl/gl_context.h"
14 #include "ui/gl/gl_implementation.h" 14 #include "ui/gl/gl_implementation.h"
15 #include "ui/gl/gl_state_restorer.h" 15 #include "ui/gl/gl_state_restorer.h"
16 #include "ui/gl/gl_surface.h" 16 #include "ui/gl/gl_surface.h"
17 #include "ui/gl/gl_switches.h" 17 #include "ui/gl/gl_switches.h"
18 #include "ui/gl/gl_version_info.h" 18 #include "ui/gl/gl_version_info.h"
19 19
20 namespace gfx { 20 namespace gl {
21 21
22 // The GL Api being used. This could be g_real_gl or gl_trace_gl 22 // The GL Api being used. This could be g_real_gl or gl_trace_gl
23 static GLApi* g_gl = NULL; 23 static GLApi* g_gl = NULL;
24 // A GL Api that calls directly into the driver. 24 // A GL Api that calls directly into the driver.
25 static RealGLApi* g_real_gl = NULL; 25 static RealGLApi* g_real_gl = NULL;
26 // A GL Api that does nothing but warn about illegal GL calls without a context 26 // A GL Api that does nothing but warn about illegal GL calls without a context
27 // current. 27 // current.
28 static NoContextGLApi* g_no_context_gl = NULL; 28 static NoContextGLApi* g_no_context_gl = NULL;
29 // A GL Api that calls TRACE and then calls another GL api. 29 // A GL Api that calls TRACE and then calls another GL api.
30 static TraceGLApi* g_trace_gl = NULL; 30 static TraceGLApi* g_trace_gl = NULL;
31 // GL version used when initializing dynamic bindings. 31 // GL version used when initializing dynamic bindings.
32 static GLVersionInfo* g_version_info = NULL; 32 static GLVersionInfo* g_version_info = NULL;
33 33
34 namespace { 34 namespace {
35 35
36 static inline GLenum GetInternalFormat(GLenum internal_format) { 36 static inline GLenum GetInternalFormat(GLenum internal_format) {
37 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { 37 if (gl::GetGLImplementation() != gl::kGLImplementationEGLGLES2) {
38 if (internal_format == GL_BGRA_EXT || internal_format == GL_BGRA8_EXT) 38 if (internal_format == GL_BGRA_EXT || internal_format == GL_BGRA8_EXT)
39 return GL_RGBA8; 39 return GL_RGBA8;
40 } 40 }
41 return internal_format; 41 return internal_format;
42 } 42 }
43 43
44 // TODO(epenner): Could the above function be merged into this and removed? 44 // TODO(epenner): Could the above function be merged into this and removed?
45 static inline GLenum GetTexInternalFormat(GLenum internal_format, 45 static inline GLenum GetTexInternalFormat(GLenum internal_format,
46 GLenum format, 46 GLenum format,
47 GLenum type) { 47 GLenum type) {
48 GLenum gl_internal_format = GetInternalFormat(internal_format); 48 GLenum gl_internal_format = GetInternalFormat(internal_format);
49 49
50 // g_version_info must be initialized when this function is bound. 50 // g_version_info must be initialized when this function is bound.
51 DCHECK(gfx::g_version_info); 51 DCHECK(gl::g_version_info);
52 if (gfx::g_version_info->is_es3) { 52 if (gl::g_version_info->is_es3) {
53 if (internal_format == GL_RED_EXT) { 53 if (internal_format == GL_RED_EXT) {
54 // GL_EXT_texture_rg case in ES2. 54 // GL_EXT_texture_rg case in ES2.
55 switch (type) { 55 switch (type) {
56 case GL_UNSIGNED_BYTE: 56 case GL_UNSIGNED_BYTE:
57 gl_internal_format = GL_R8_EXT; 57 gl_internal_format = GL_R8_EXT;
58 break; 58 break;
59 case GL_HALF_FLOAT_OES: 59 case GL_HALF_FLOAT_OES:
60 gl_internal_format = GL_R16F_EXT; 60 gl_internal_format = GL_R16F_EXT;
61 break; 61 break;
62 case GL_FLOAT: 62 case GL_FLOAT:
(...skipping 17 matching lines...) Expand all
80 gl_internal_format = GL_RG32F_EXT; 80 gl_internal_format = GL_RG32F_EXT;
81 break; 81 break;
82 default: 82 default:
83 NOTREACHED(); 83 NOTREACHED();
84 break; 84 break;
85 } 85 }
86 return gl_internal_format; 86 return gl_internal_format;
87 } 87 }
88 } 88 }
89 89
90 if (type == GL_FLOAT && gfx::g_version_info->is_angle && 90 if (type == GL_FLOAT && gl::g_version_info->is_angle &&
91 gfx::g_version_info->is_es && gfx::g_version_info->major_version == 2) { 91 gl::g_version_info->is_es && gl::g_version_info->major_version == 2) {
92 // It's possible that the texture is using a sized internal format, and 92 // It's possible that the texture is using a sized internal format, and
93 // ANGLE exposing GLES2 API doesn't support those. 93 // ANGLE exposing GLES2 API doesn't support those.
94 // TODO(oetuaho@nvidia.com): Remove these conversions once ANGLE has the 94 // TODO(oetuaho@nvidia.com): Remove these conversions once ANGLE has the
95 // support. 95 // support.
96 // http://code.google.com/p/angleproject/issues/detail?id=556 96 // http://code.google.com/p/angleproject/issues/detail?id=556
97 switch (format) { 97 switch (format) {
98 case GL_RGBA: 98 case GL_RGBA:
99 gl_internal_format = GL_RGBA; 99 gl_internal_format = GL_RGBA;
100 break; 100 break;
101 case GL_RGB: 101 case GL_RGB:
102 gl_internal_format = GL_RGB; 102 gl_internal_format = GL_RGB;
103 break; 103 break;
104 default: 104 default:
105 break; 105 break;
106 } 106 }
107 } 107 }
108 108
109 if (gfx::g_version_info->IsAtLeastGL(2, 1) || 109 if (gl::g_version_info->IsAtLeastGL(2, 1) ||
110 gfx::g_version_info->IsAtLeastGLES(3, 0)) { 110 gl::g_version_info->IsAtLeastGLES(3, 0)) {
111 switch (internal_format) { 111 switch (internal_format) {
112 case GL_SRGB_EXT: 112 case GL_SRGB_EXT:
113 gl_internal_format = GL_SRGB8; 113 gl_internal_format = GL_SRGB8;
114 break; 114 break;
115 case GL_SRGB_ALPHA_EXT: 115 case GL_SRGB_ALPHA_EXT:
116 gl_internal_format = GL_SRGB8_ALPHA8; 116 gl_internal_format = GL_SRGB8_ALPHA8;
117 break; 117 break;
118 default: 118 default:
119 break; 119 break;
120 } 120 }
121 } 121 }
122 122
123 if (gfx::g_version_info->is_es) 123 if (gl::g_version_info->is_es)
124 return gl_internal_format; 124 return gl_internal_format;
125 125
126 if (type == GL_FLOAT) { 126 if (type == GL_FLOAT) {
127 switch (internal_format) { 127 switch (internal_format) {
128 // We need to map all the unsized internal formats from ES2 clients. 128 // We need to map all the unsized internal formats from ES2 clients.
129 case GL_RGBA: 129 case GL_RGBA:
130 gl_internal_format = GL_RGBA32F_ARB; 130 gl_internal_format = GL_RGBA32F_ARB;
131 break; 131 break;
132 case GL_RGB: 132 case GL_RGB:
133 gl_internal_format = GL_RGB32F_ARB; 133 gl_internal_format = GL_RGB32F_ARB;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 break; 168 break;
169 } 169 }
170 } 170 }
171 171
172 return gl_internal_format; 172 return gl_internal_format;
173 } 173 }
174 174
175 static inline GLenum GetTexFormat(GLenum format) { 175 static inline GLenum GetTexFormat(GLenum format) {
176 GLenum gl_format = format; 176 GLenum gl_format = format;
177 177
178 DCHECK(gfx::g_version_info); 178 DCHECK(gl::g_version_info);
179 if (gfx::g_version_info->IsAtLeastGL(2, 1) || 179 if (gl::g_version_info->IsAtLeastGL(2, 1) ||
180 gfx::g_version_info->IsAtLeastGLES(3, 0)) { 180 gl::g_version_info->IsAtLeastGLES(3, 0)) {
181 switch (format) { 181 switch (format) {
182 case GL_SRGB_EXT: 182 case GL_SRGB_EXT:
183 gl_format = GL_RGB; 183 gl_format = GL_RGB;
184 break; 184 break;
185 case GL_SRGB_ALPHA_EXT: 185 case GL_SRGB_ALPHA_EXT:
186 gl_format = GL_RGBA; 186 gl_format = GL_RGBA;
187 break; 187 break;
188 default: 188 default:
189 break; 189 break;
190 } 190 }
191 } 191 }
192 192
193 return gl_format; 193 return gl_format;
194 } 194 }
195 195
196 static inline GLenum GetTexType(GLenum type) { 196 static inline GLenum GetTexType(GLenum type) {
197 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { 197 if (gl::GetGLImplementation() != gl::kGLImplementationEGLGLES2) {
198 if (type == GL_HALF_FLOAT_OES) 198 if (type == GL_HALF_FLOAT_OES)
199 return GL_HALF_FLOAT_ARB; 199 return GL_HALF_FLOAT_ARB;
200 } 200 }
201 return type; 201 return type;
202 } 202 }
203 203
204 static void GL_BINDING_CALL CustomTexImage2D( 204 static void GL_BINDING_CALL CustomTexImage2D(
205 GLenum target, GLint level, GLint internalformat, 205 GLenum target, GLint level, GLint internalformat,
206 GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, 206 GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
207 const void* pixels) { 207 const void* pixels) {
208 GLenum gl_internal_format = GetTexInternalFormat( 208 GLenum gl_internal_format = GetTexInternalFormat(
209 internalformat, format, type); 209 internalformat, format, type);
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 GLApiBase::glFlushFn(); 509 GLApiBase::glFlushFn();
510 } 510 }
511 511
512 void RealGLApi::glFinishFn() { 512 void RealGLApi::glFinishFn() {
513 GLApiBase::glFinishFn(); 513 GLApiBase::glFinishFn();
514 } 514 }
515 515
516 void RealGLApi::InitializeFilteredExtensions() { 516 void RealGLApi::InitializeFilteredExtensions() {
517 if (disabled_exts_.size()) { 517 if (disabled_exts_.size()) {
518 filtered_exts_.clear(); 518 filtered_exts_.clear();
519 if (gfx::WillUseGLGetStringForExtensions()) { 519 if (gl::WillUseGLGetStringForExtensions()) {
520 filtered_exts_str_ = 520 filtered_exts_str_ =
521 FilterGLExtensionList(reinterpret_cast<const char*>( 521 FilterGLExtensionList(reinterpret_cast<const char*>(
522 GLApiBase::glGetStringFn(GL_EXTENSIONS)), 522 GLApiBase::glGetStringFn(GL_EXTENSIONS)),
523 disabled_exts_); 523 disabled_exts_);
524 filtered_exts_ = base::SplitString( 524 filtered_exts_ = base::SplitString(
525 filtered_exts_str_, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 525 filtered_exts_str_, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
526 } else { 526 } else {
527 GLint num_extensions = 0; 527 GLint num_extensions = 0;
528 GLApiBase::glGetIntegervFn(GL_NUM_EXTENSIONS, &num_extensions); 528 GLApiBase::glGetIntegervFn(GL_NUM_EXTENSIONS, &num_extensions);
529 for (GLint i = 0; i < num_extensions; ++i) { 529 for (GLint i = 0; i < num_extensions; ++i) {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 } 665 }
666 666
667 void VirtualGLApi::glFlushFn() { 667 void VirtualGLApi::glFlushFn() {
668 GLApiBase::glFlushFn(); 668 GLApiBase::glFlushFn();
669 } 669 }
670 670
671 void VirtualGLApi::glFinishFn() { 671 void VirtualGLApi::glFinishFn() {
672 GLApiBase::glFinishFn(); 672 GLApiBase::glFinishFn();
673 } 673 }
674 674
675 } // namespace gfx 675 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/gl_gl_api_implementation.h ('k') | ui/gl/gl_glx_api_implementation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698