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

Side by Side Diff: ui/gl/yuv_to_rgb_converter.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, 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
« no previous file with comments | « ui/gl/wgl_api_unittest.cc ('k') | ui/keyboard/test/run_all_unittests.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/yuv_to_rgb_converter.h" 5 #include "ui/gl/yuv_to_rgb_converter.h"
6 6
7 #include "base/strings/stringize_macros.h" 7 #include "base/strings/stringize_macros.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "ui/gl/gl_helper.h" 9 #include "ui/gl/gl_helper.h"
10 #include "ui/gl/gl_implementation.h" 10 #include "ui/gl/gl_implementation.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 TEX(a_uv_texture, v_texCoord * 0.5).rg); 65 TEX(a_uv_texture, v_texCoord * 0.5).rg);
66 FRAGCOLOR = vec4(yuv_matrix * (yuv + yuv_adj), 1.0); 66 FRAGCOLOR = vec4(yuv_matrix * (yuv + yuv_adj), 1.0);
67 } 67 }
68 ); 68 );
69 // clang-format on 69 // clang-format on
70 70
71 } // namespace 71 } // namespace
72 72
73 YUVToRGBConverter::YUVToRGBConverter() { 73 YUVToRGBConverter::YUVToRGBConverter() {
74 bool use_core_profile = 74 bool use_core_profile =
75 gfx::GetGLImplementation() == gfx::kGLImplementationDesktopGLCoreProfile; 75 gl::GetGLImplementation() == gl::kGLImplementationDesktopGLCoreProfile;
76 gfx::ScopedSetGLToRealGLApi scoped_set_gl_api; 76 gl::ScopedSetGLToRealGLApi scoped_set_gl_api;
77 glGenFramebuffersEXT(1, &framebuffer_); 77 glGenFramebuffersEXT(1, &framebuffer_);
78 vertex_buffer_ = gfx::GLHelper::SetupQuadVertexBuffer(); 78 vertex_buffer_ = gl::GLHelper::SetupQuadVertexBuffer();
79 vertex_shader_ = gfx::GLHelper::LoadShader( 79 vertex_shader_ = gl::GLHelper::LoadShader(
80 GL_VERTEX_SHADER, 80 GL_VERTEX_SHADER,
81 base::StringPrintf("%s\n%s", 81 base::StringPrintf("%s\n%s",
82 use_core_profile ? kVertexHeaderCoreProfile 82 use_core_profile ? kVertexHeaderCoreProfile
83 : kVertexHeaderCompatiblityProfile, 83 : kVertexHeaderCompatiblityProfile,
84 kVertexShader) 84 kVertexShader)
85 .c_str()); 85 .c_str());
86 fragment_shader_ = gfx::GLHelper::LoadShader( 86 fragment_shader_ = gl::GLHelper::LoadShader(
87 GL_FRAGMENT_SHADER, 87 GL_FRAGMENT_SHADER,
88 base::StringPrintf("%s\n%s", 88 base::StringPrintf("%s\n%s",
89 use_core_profile ? kFragmentHeaderCoreProfile 89 use_core_profile ? kFragmentHeaderCoreProfile
90 : kFragmentHeaderCompatiblityProfile, 90 : kFragmentHeaderCompatiblityProfile,
91 kFragmentShader) 91 kFragmentShader)
92 .c_str()); 92 .c_str());
93 program_ = gfx::GLHelper::SetupProgram(vertex_shader_, fragment_shader_); 93 program_ = gl::GLHelper::SetupProgram(vertex_shader_, fragment_shader_);
94 94
95 gfx::ScopedUseProgram use_program(program_); 95 gl::ScopedUseProgram use_program(program_);
96 size_location_ = glGetUniformLocation(program_, "a_texScale"); 96 size_location_ = glGetUniformLocation(program_, "a_texScale");
97 DCHECK_NE(-1, size_location_); 97 DCHECK_NE(-1, size_location_);
98 int y_sampler_location = glGetUniformLocation(program_, "a_y_texture"); 98 int y_sampler_location = glGetUniformLocation(program_, "a_y_texture");
99 DCHECK_NE(-1, y_sampler_location); 99 DCHECK_NE(-1, y_sampler_location);
100 int uv_sampler_location = glGetUniformLocation(program_, "a_uv_texture"); 100 int uv_sampler_location = glGetUniformLocation(program_, "a_uv_texture");
101 DCHECK_NE(-1, uv_sampler_location); 101 DCHECK_NE(-1, uv_sampler_location);
102 102
103 glGenTextures(1, &y_texture_); 103 glGenTextures(1, &y_texture_);
104 glGenTextures(1, &uv_texture_); 104 glGenTextures(1, &uv_texture_);
105 105
106 glUniform1i(y_sampler_location, 0); 106 glUniform1i(y_sampler_location, 0);
107 glUniform1i(uv_sampler_location, 1); 107 glUniform1i(uv_sampler_location, 1);
108 } 108 }
109 109
110 YUVToRGBConverter::~YUVToRGBConverter() { 110 YUVToRGBConverter::~YUVToRGBConverter() {
111 gfx::ScopedSetGLToRealGLApi scoped_set_gl_api; 111 gl::ScopedSetGLToRealGLApi scoped_set_gl_api;
112 glDeleteTextures(1, &y_texture_); 112 glDeleteTextures(1, &y_texture_);
113 glDeleteTextures(1, &uv_texture_); 113 glDeleteTextures(1, &uv_texture_);
114 glDeleteProgram(program_); 114 glDeleteProgram(program_);
115 glDeleteShader(vertex_shader_); 115 glDeleteShader(vertex_shader_);
116 glDeleteShader(fragment_shader_); 116 glDeleteShader(fragment_shader_);
117 glDeleteBuffersARB(1, &vertex_buffer_); 117 glDeleteBuffersARB(1, &vertex_buffer_);
118 glDeleteFramebuffersEXT(1, &framebuffer_); 118 glDeleteFramebuffersEXT(1, &framebuffer_);
119 } 119 }
120 120
121 void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target, 121 void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target,
122 const gfx::Size& size, 122 const gfx::Size& size,
123 unsigned rgb_texture) { 123 unsigned rgb_texture) {
124 // Only support for rectangle targets exists so far. 124 // Only support for rectangle targets exists so far.
125 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), target); 125 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), target);
126 gfx::ScopedSetGLToRealGLApi scoped_set_gl_api; 126 gl::ScopedSetGLToRealGLApi scoped_set_gl_api;
127 127
128 // Note that state restoration is done explicitly instead of scoped binders to 128 // Note that state restoration is done explicitly instead of scoped binders to
129 // avoid https://crbug.com/601729. 129 // avoid https://crbug.com/601729.
130 GLint old_active_texture = -1; 130 GLint old_active_texture = -1;
131 glGetIntegerv(GL_ACTIVE_TEXTURE, &old_active_texture); 131 glGetIntegerv(GL_ACTIVE_TEXTURE, &old_active_texture);
132 GLint old_texture0_binding = -1; 132 GLint old_texture0_binding = -1;
133 glActiveTexture(GL_TEXTURE0); 133 glActiveTexture(GL_TEXTURE0);
134 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture0_binding); 134 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture0_binding);
135 GLint old_texture1_binding = -1; 135 GLint old_texture1_binding = -1;
136 glActiveTexture(GL_TEXTURE1); 136 glActiveTexture(GL_TEXTURE1);
137 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture1_binding); 137 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture1_binding);
138 138
139 // Allocate the rgb texture. 139 // Allocate the rgb texture.
140 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, rgb_texture); 140 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, rgb_texture);
141 glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, size.width(), size.height(), 141 glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, size.width(), size.height(),
142 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); 142 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
143 143
144 // Set up and issue the draw call. 144 // Set up and issue the draw call.
145 glActiveTexture(GL_TEXTURE0); 145 glActiveTexture(GL_TEXTURE0);
146 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, y_texture_); 146 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, y_texture_);
147 glActiveTexture(GL_TEXTURE1); 147 glActiveTexture(GL_TEXTURE1);
148 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, uv_texture_); 148 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, uv_texture_);
149 gfx::ScopedFrameBufferBinder framebuffer_binder(framebuffer_); 149 gl::ScopedFrameBufferBinder framebuffer_binder(framebuffer_);
150 gfx::ScopedViewport viewport(0, 0, size.width(), size.height()); 150 gl::ScopedViewport viewport(0, 0, size.width(), size.height());
151 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 151 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
152 GL_TEXTURE_RECTANGLE_ARB, rgb_texture, 0); 152 GL_TEXTURE_RECTANGLE_ARB, rgb_texture, 0);
153 DCHECK_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 153 DCHECK_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
154 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER)); 154 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER));
155 gfx::ScopedUseProgram use_program(program_); 155 gl::ScopedUseProgram use_program(program_);
156 glUniform2f(size_location_, size.width(), size.height()); 156 glUniform2f(size_location_, size.width(), size.height());
157 gfx::GLHelper::DrawQuad(vertex_buffer_); 157 gl::GLHelper::DrawQuad(vertex_buffer_);
158 158
159 // Restore previous state. 159 // Restore previous state.
160 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 160 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
161 GL_TEXTURE_RECTANGLE_ARB, 0, 0); 161 GL_TEXTURE_RECTANGLE_ARB, 0, 0);
162 glActiveTexture(GL_TEXTURE0); 162 glActiveTexture(GL_TEXTURE0);
163 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture0_binding); 163 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture0_binding);
164 glActiveTexture(GL_TEXTURE1); 164 glActiveTexture(GL_TEXTURE1);
165 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture1_binding); 165 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture1_binding);
166 glActiveTexture(old_active_texture); 166 glActiveTexture(old_active_texture);
167 } 167 }
168 168
169 } // namespace gl 169 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/wgl_api_unittest.cc ('k') | ui/keyboard/test/run_all_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698