OLD | NEW |
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_version_info.h" | 10 #include "ui/gl/gl_version_info.h" |
11 #include "ui/gl/scoped_api.h" | |
12 #include "ui/gl/scoped_binders.h" | 11 #include "ui/gl/scoped_binders.h" |
13 | 12 |
14 namespace gl { | 13 namespace gl { |
15 namespace { | 14 namespace { |
16 | 15 |
17 const char kVertexHeaderCompatiblityProfile[] = | 16 const char kVertexHeaderCompatiblityProfile[] = |
18 "#version 110\n" | 17 "#version 110\n" |
19 "#define ATTRIBUTE attribute\n" | 18 "#define ATTRIBUTE attribute\n" |
20 "#define VARYING varying\n"; | 19 "#define VARYING varying\n"; |
21 | 20 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 TEX(a_uv_texture, v_texCoord * 0.5).rg); | 64 TEX(a_uv_texture, v_texCoord * 0.5).rg); |
66 FRAGCOLOR = vec4(yuv_matrix * (yuv + yuv_adj), 1.0); | 65 FRAGCOLOR = vec4(yuv_matrix * (yuv + yuv_adj), 1.0); |
67 } | 66 } |
68 ); | 67 ); |
69 // clang-format on | 68 // clang-format on |
70 | 69 |
71 } // namespace | 70 } // namespace |
72 | 71 |
73 YUVToRGBConverter::YUVToRGBConverter(const GLVersionInfo& gl_version_info) { | 72 YUVToRGBConverter::YUVToRGBConverter(const GLVersionInfo& gl_version_info) { |
74 bool use_core_profile = gl_version_info.is_desktop_core_profile; | 73 bool use_core_profile = gl_version_info.is_desktop_core_profile; |
75 ScopedSetGLToRealGLApi scoped_set_gl_api; | |
76 glGenFramebuffersEXT(1, &framebuffer_); | 74 glGenFramebuffersEXT(1, &framebuffer_); |
77 vertex_buffer_ = GLHelper::SetupQuadVertexBuffer(); | 75 vertex_buffer_ = GLHelper::SetupQuadVertexBuffer(); |
78 vertex_shader_ = GLHelper::LoadShader( | 76 vertex_shader_ = GLHelper::LoadShader( |
79 GL_VERTEX_SHADER, | 77 GL_VERTEX_SHADER, |
80 base::StringPrintf("%s\n%s", | 78 base::StringPrintf("%s\n%s", |
81 use_core_profile ? kVertexHeaderCoreProfile | 79 use_core_profile ? kVertexHeaderCoreProfile |
82 : kVertexHeaderCompatiblityProfile, | 80 : kVertexHeaderCompatiblityProfile, |
83 kVertexShader) | 81 kVertexShader) |
84 .c_str()); | 82 .c_str()); |
85 fragment_shader_ = GLHelper::LoadShader( | 83 fragment_shader_ = GLHelper::LoadShader( |
(...skipping 14 matching lines...) Expand all Loading... |
100 DCHECK_NE(-1, uv_sampler_location); | 98 DCHECK_NE(-1, uv_sampler_location); |
101 | 99 |
102 glGenTextures(1, &y_texture_); | 100 glGenTextures(1, &y_texture_); |
103 glGenTextures(1, &uv_texture_); | 101 glGenTextures(1, &uv_texture_); |
104 | 102 |
105 glUniform1i(y_sampler_location, 0); | 103 glUniform1i(y_sampler_location, 0); |
106 glUniform1i(uv_sampler_location, 1); | 104 glUniform1i(uv_sampler_location, 1); |
107 } | 105 } |
108 | 106 |
109 YUVToRGBConverter::~YUVToRGBConverter() { | 107 YUVToRGBConverter::~YUVToRGBConverter() { |
110 ScopedSetGLToRealGLApi scoped_set_gl_api; | |
111 glDeleteTextures(1, &y_texture_); | 108 glDeleteTextures(1, &y_texture_); |
112 glDeleteTextures(1, &uv_texture_); | 109 glDeleteTextures(1, &uv_texture_); |
113 glDeleteProgram(program_); | 110 glDeleteProgram(program_); |
114 glDeleteShader(vertex_shader_); | 111 glDeleteShader(vertex_shader_); |
115 glDeleteShader(fragment_shader_); | 112 glDeleteShader(fragment_shader_); |
116 glDeleteBuffersARB(1, &vertex_buffer_); | 113 glDeleteBuffersARB(1, &vertex_buffer_); |
117 glDeleteFramebuffersEXT(1, &framebuffer_); | 114 glDeleteFramebuffersEXT(1, &framebuffer_); |
118 } | 115 } |
119 | 116 |
120 void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target, | 117 void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target, |
121 const gfx::Size& size, | 118 const gfx::Size& size, |
122 unsigned rgb_texture) { | 119 unsigned rgb_texture) { |
123 ScopedSetGLToRealGLApi scoped_set_gl_api; | |
124 | |
125 // Note that state restoration is done explicitly instead of scoped binders to | 120 // Note that state restoration is done explicitly instead of scoped binders to |
126 // avoid https://crbug.com/601729. | 121 // avoid https://crbug.com/601729. |
127 GLint old_active_texture = -1; | 122 GLint old_active_texture = -1; |
128 glGetIntegerv(GL_ACTIVE_TEXTURE, &old_active_texture); | 123 glGetIntegerv(GL_ACTIVE_TEXTURE, &old_active_texture); |
129 GLint old_texture0_binding = -1; | 124 GLint old_texture0_binding = -1; |
130 glActiveTexture(GL_TEXTURE0); | 125 glActiveTexture(GL_TEXTURE0); |
131 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture0_binding); | 126 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture0_binding); |
132 GLint old_texture1_binding = -1; | 127 GLint old_texture1_binding = -1; |
133 glActiveTexture(GL_TEXTURE1); | 128 glActiveTexture(GL_TEXTURE1); |
134 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture1_binding); | 129 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_texture1_binding); |
(...skipping 22 matching lines...) Expand all Loading... |
157 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, | 152 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
158 target, 0, 0); | 153 target, 0, 0); |
159 glActiveTexture(GL_TEXTURE0); | 154 glActiveTexture(GL_TEXTURE0); |
160 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture0_binding); | 155 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture0_binding); |
161 glActiveTexture(GL_TEXTURE1); | 156 glActiveTexture(GL_TEXTURE1); |
162 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture1_binding); | 157 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, old_texture1_binding); |
163 glActiveTexture(old_active_texture); | 158 glActiveTexture(old_active_texture); |
164 } | 159 } |
165 | 160 |
166 } // namespace gl | 161 } // namespace gl |
OLD | NEW |