OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 #ifndef CC_OUTPUT_PROGRAM_BINDING_H_ | 5 #ifndef CC_OUTPUT_PROGRAM_BINDING_H_ |
6 #define CC_OUTPUT_PROGRAM_BINDING_H_ | 6 #define CC_OUTPUT_PROGRAM_BINDING_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 bool is_opaque_ = false; | 107 bool is_opaque_ = false; |
108 | 108 |
109 PremultipliedAlphaMode premultiplied_alpha_ = PREMULTIPLIED_ALPHA; | 109 PremultipliedAlphaMode premultiplied_alpha_ = PREMULTIPLIED_ALPHA; |
110 bool has_background_color_ = false; | 110 bool has_background_color_ = false; |
111 | 111 |
112 MaskMode mask_mode_ = NO_MASK; | 112 MaskMode mask_mode_ = NO_MASK; |
113 bool mask_for_background_ = false; | 113 bool mask_for_background_ = false; |
114 bool has_color_matrix_ = false; | 114 bool has_color_matrix_ = false; |
115 }; | 115 }; |
116 | 116 |
| 117 struct ProgramKeyHash { |
| 118 size_t operator()(const ProgramKey& key) const { |
| 119 return (static_cast<size_t>(key.type_) << 0) ^ |
| 120 (static_cast<size_t>(key.precision_) << 3) ^ |
| 121 (static_cast<size_t>(key.sampler_) << 6) ^ |
| 122 (static_cast<size_t>(key.blend_mode_) << 9) ^ |
| 123 (static_cast<size_t>(key.aa_mode_) << 15) ^ |
| 124 (static_cast<size_t>(key.swizzle_mode_) << 16) ^ |
| 125 (static_cast<size_t>(key.is_opaque_) << 17) ^ |
| 126 (static_cast<size_t>(key.premultiplied_alpha_) << 19) ^ |
| 127 (static_cast<size_t>(key.has_background_color_) << 20) ^ |
| 128 (static_cast<size_t>(key.mask_mode_) << 21) ^ |
| 129 (static_cast<size_t>(key.mask_for_background_) << 22) ^ |
| 130 (static_cast<size_t>(key.has_color_matrix_) << 23); |
| 131 } |
| 132 }; |
| 133 |
117 template <class VertexShader, class FragmentShader> | 134 template <class VertexShader, class FragmentShader> |
118 class ProgramBinding : public ProgramBindingBase { | 135 class ProgramBinding : public ProgramBindingBase { |
119 public: | 136 public: |
120 ProgramBinding() {} | 137 ProgramBinding() {} |
121 | 138 |
122 void Initialize(ContextProvider* context_provider, const ProgramKey& key) { | 139 void Initialize(ContextProvider* context_provider, const ProgramKey& key) { |
123 // Set parameters that are common to all sub-classes. | 140 // Set parameters that are common to all sub-classes. |
124 vertex_shader_.aa_mode_ = key.aa_mode_; | 141 vertex_shader_.aa_mode_ = key.aa_mode_; |
125 fragment_shader_.aa_mode_ = key.aa_mode_; | 142 fragment_shader_.aa_mode_ = key.aa_mode_; |
126 fragment_shader_.blend_mode_ = key.blend_mode_; | 143 fragment_shader_.blend_mode_ = key.blend_mode_; |
(...skipping 17 matching lines...) Expand all Loading... |
144 case PROGRAM_TYPE_TEXTURE: | 161 case PROGRAM_TYPE_TEXTURE: |
145 InitializeTextureProgram(key); | 162 InitializeTextureProgram(key); |
146 break; | 163 break; |
147 case PROGRAM_TYPE_RENDER_PASS: | 164 case PROGRAM_TYPE_RENDER_PASS: |
148 InitializeRenderPassProgram(key); | 165 InitializeRenderPassProgram(key); |
149 break; | 166 break; |
150 case PROGRAM_TYPE_VIDEO_STREAM: | 167 case PROGRAM_TYPE_VIDEO_STREAM: |
151 InitializeVideoStreamProgram(key); | 168 InitializeVideoStreamProgram(key); |
152 break; | 169 break; |
153 } | 170 } |
154 fragment_shader_.CheckSubclassProperties(); | |
155 vertex_shader_.CheckSubclassProperties(); | |
156 InitializeInternal(context_provider); | 171 InitializeInternal(context_provider); |
157 } | 172 } |
158 | 173 |
159 void InitializeVideoYUV(ContextProvider* context_provider, | 174 void InitializeVideoYUV(ContextProvider* context_provider, |
160 TexCoordPrecision precision, | 175 TexCoordPrecision precision, |
161 SamplerType sampler, | 176 SamplerType sampler, |
162 bool use_alpha_plane, | 177 bool use_alpha_plane, |
163 bool use_nv12, | 178 bool use_nv12, |
164 bool use_color_lut) { | 179 bool use_color_lut) { |
165 vertex_shader_.tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; | 180 vertex_shader_.tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; |
166 vertex_shader_.has_matrix_ = true; | 181 vertex_shader_.has_matrix_ = true; |
167 vertex_shader_.is_ya_uv_ = true; | 182 vertex_shader_.is_ya_uv_ = true; |
168 | 183 |
169 fragment_shader_.use_alpha_texture_ = use_alpha_plane; | 184 fragment_shader_.use_alpha_texture_ = use_alpha_plane; |
170 fragment_shader_.use_nv12_ = use_nv12; | 185 fragment_shader_.use_nv12_ = use_nv12; |
171 fragment_shader_.use_color_lut_ = use_color_lut; | 186 fragment_shader_.use_color_lut_ = use_color_lut; |
172 fragment_shader_.tex_coord_precision_ = precision; | 187 fragment_shader_.tex_coord_precision_ = precision; |
173 fragment_shader_.sampler_type_ = sampler; | 188 fragment_shader_.sampler_type_ = sampler; |
174 | 189 |
175 fragment_shader_.CheckSubclassProperties(); | |
176 vertex_shader_.CheckSubclassProperties(); | |
177 InitializeInternal(context_provider); | 190 InitializeInternal(context_provider); |
178 } | 191 } |
179 | 192 |
180 const VertexShader& vertex_shader() const { return vertex_shader_; } | 193 const VertexShader& vertex_shader() const { return vertex_shader_; } |
181 const FragmentShader& fragment_shader() const { return fragment_shader_; } | 194 const FragmentShader& fragment_shader() const { return fragment_shader_; } |
182 | 195 |
183 private: | 196 private: |
184 void InitializeDebugBorderProgram() { | 197 void InitializeDebugBorderProgram() { |
185 // Initialize vertex program. | 198 // Initialize vertex program. |
186 vertex_shader_.has_matrix_ = true; | 199 vertex_shader_.has_matrix_ = true; |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 | 321 |
309 initialized_ = true; | 322 initialized_ = true; |
310 } | 323 } |
311 | 324 |
312 VertexShader vertex_shader_; | 325 VertexShader vertex_shader_; |
313 FragmentShader fragment_shader_; | 326 FragmentShader fragment_shader_; |
314 | 327 |
315 DISALLOW_COPY_AND_ASSIGN(ProgramBinding); | 328 DISALLOW_COPY_AND_ASSIGN(ProgramBinding); |
316 }; | 329 }; |
317 | 330 |
| 331 typedef ProgramBinding<VertexShaderBase, FragmentShaderBase> Program; |
| 332 |
318 } // namespace cc | 333 } // namespace cc |
319 | 334 |
320 #endif // CC_OUTPUT_PROGRAM_BINDING_H_ | 335 #endif // CC_OUTPUT_PROGRAM_BINDING_H_ |
OLD | NEW |