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

Unified Diff: cc/output/shader.cc

Issue 2626823002: The great shader refactor: Separate initialization from ctor (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « cc/output/shader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/shader.cc
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index 6d6edb4bd3816730ce45f5d2637b111208760a7c..2b21d24a2e708fbd0ab1384d1e2d33b25d097a1c 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -198,7 +198,7 @@ void VertexShaderBase::Init(GLES2Interface* context,
uniforms.push_back("matrix");
if (has_vertex_opacity_)
uniforms.push_back("opacity");
- if (has_aa_) {
+ if (aa_mode_ == USE_AA) {
uniforms.push_back("viewport");
uniforms.push_back("edge");
}
@@ -232,7 +232,7 @@ void VertexShaderBase::Init(GLES2Interface* context,
matrix_location_ = locations[index++];
if (has_vertex_opacity_)
vertex_opacity_location_ = locations[index++];
- if (has_aa_) {
+ if (aa_mode_ == USE_AA) {
viewport_location_ = locations[index++];
edge_location_ = locations[index++];
}
@@ -298,7 +298,7 @@ std::string VertexShaderBase::GetShaderString() const {
}
// Compute the anti-aliasing edge distances.
- if (has_aa_) {
+ if (aa_mode_ == USE_AA) {
HDR("uniform TexCoordPrecision vec3 edge[8];");
HDR("uniform vec4 viewport;");
HDR("varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances.");
@@ -395,14 +395,14 @@ std::string VertexShaderBase::GetShaderString() const {
FragmentShaderBase::FragmentShaderBase() {}
-std::string FragmentShaderBase::GetShaderString(TexCoordPrecision precision,
- SamplerType sampler) const {
+std::string FragmentShaderBase::GetShaderString() const {
+ TexCoordPrecision precision = tex_coord_precision_;
// The AA shader values will use TexCoordPrecision.
- if (has_aa_ && precision == TEX_COORD_PRECISION_NA)
+ if (aa_mode_ == USE_AA && precision == TEX_COORD_PRECISION_NA)
precision = TEX_COORD_PRECISION_MEDIUM;
return SetFragmentTexCoordPrecision(
precision, SetFragmentSamplerType(
- sampler, SetBlendModeFunctions(GetShaderSource())));
+ sampler_type_, SetBlendModeFunctions(GetShaderSource())));
}
void FragmentShaderBase::Init(GLES2Interface* context,
@@ -415,7 +415,7 @@ void FragmentShaderBase::Init(GLES2Interface* context,
uniforms.push_back("s_originalBackdropTexture");
uniforms.push_back("backdropRect");
}
- if (has_mask_sampler_) {
+ if (mask_mode_ != NO_MASK) {
uniforms.push_back("s_mask");
uniforms.push_back("maskTexCoordScale");
uniforms.push_back("maskTexCoordOffset");
@@ -450,7 +450,7 @@ void FragmentShaderBase::Init(GLES2Interface* context,
original_backdrop_location_ = locations[index++];
backdrop_rect_location_ = locations[index++];
}
- if (has_mask_sampler_) {
+ if (mask_mode_ != NO_MASK) {
mask_sampler_location_ = locations[index++];
mask_tex_coord_scale_location_ = locations[index++];
mask_tex_coord_offset_location_ = locations[index++];
@@ -481,9 +481,9 @@ void FragmentShaderBase::FillLocations(ShaderLocations* locations) const {
locations->backdrop = backdrop_location_;
locations->backdrop_rect = backdrop_rect_location_;
}
- if (mask_for_background())
+ if (mask_for_background_)
locations->original_backdrop = original_backdrop_location_;
- if (has_mask_sampler_) {
+ if (mask_mode_ != NO_MASK) {
locations->mask_sampler = mask_sampler_location_;
locations->mask_tex_coord_scale = mask_tex_coord_scale_location_;
locations->mask_tex_coord_offset = mask_tex_coord_offset_location_;
@@ -519,7 +519,7 @@ std::string FragmentShaderBase::SetBlendModeFunctions(
});
std::string mixFunction;
- if (mask_for_background()) {
+ if (mask_for_background_) {
mixFunction = SHADER0([]() {
vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) {
vec4 backdrop = texture2D(s_backdropTexture, bgTexCoord);
@@ -847,7 +847,7 @@ std::string FragmentShaderBase::GetShaderSource() const {
}
// Read the mask texture.
- if (has_mask_sampler_) {
+ if (mask_mode_ != NO_MASK) {
HDR("uniform SamplerType s_mask;");
HDR("uniform vec2 maskTexCoordScale;");
HDR("uniform vec2 maskTexCoordOffset;");
@@ -859,7 +859,7 @@ std::string FragmentShaderBase::GetShaderSource() const {
}
// Compute AA.
- if (has_aa_) {
+ if (aa_mode_ == USE_AA) {
HDR("varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances.");
SRC("// Compute AA");
SRC("vec4 d4 = min(edge_dist[0], edge_dist[1]);");
@@ -868,7 +868,7 @@ std::string FragmentShaderBase::GetShaderSource() const {
}
// Premultiply by alpha.
- if (has_premultiply_alpha_) {
+ if (premultiply_alpha_mode_ == NON_PREMULTIPLIED_ALPHA) {
SRC("// Premultiply alpha");
SRC("texColor.rgb *= texColor.a;");
}
@@ -881,7 +881,7 @@ std::string FragmentShaderBase::GetShaderSource() const {
}
// Apply swizzle.
- if (has_swizzle_) {
+ if (swizzle_mode_ == DO_SWIZZLE) {
SRC("// Apply swizzle");
SRC("texColor = texColor.bgra;\n");
}
@@ -895,17 +895,17 @@ std::string FragmentShaderBase::GetShaderSource() const {
}
// Apply uniform alpha, aa, varying alpha, and the mask.
- if (has_varying_alpha_ || has_aa_ || has_uniform_alpha_ ||
- has_mask_sampler_) {
+ if (has_varying_alpha_ || aa_mode_ == USE_AA || has_uniform_alpha_ ||
+ mask_mode_ != NO_MASK) {
SRC("// Apply alpha from uniform, varying, aa, and mask.");
std::string line = " texColor = texColor";
if (has_varying_alpha_)
line += " * v_alpha";
if (has_uniform_alpha_)
line += " * alpha";
- if (has_aa_)
+ if (aa_mode_ == USE_AA)
line += " * aa";
- if (has_mask_sampler_)
+ if (mask_mode_ != NO_MASK)
line += " * maskColor.a";
line += ";\n";
source += line;
@@ -923,7 +923,7 @@ std::string FragmentShaderBase::GetShaderSource() const {
SRC("gl_FragColor = vec4(texColor.rgb, 1.0);");
break;
case FRAG_COLOR_MODE_APPLY_BLEND_MODE:
- if (has_mask_sampler_)
+ if (mask_mode_ != NO_MASK)
SRC("gl_FragColor = ApplyBlendMode(texColor, maskColor.w);");
else
SRC("gl_FragColor = ApplyBlendMode(texColor, 0.0);");
@@ -936,14 +936,6 @@ std::string FragmentShaderBase::GetShaderSource() const {
FragmentShaderYUVVideo::FragmentShaderYUVVideo() {}
-void FragmentShaderYUVVideo::SetFeatures(bool use_alpha_texture,
- bool use_nv12,
- bool use_color_lut) {
- use_alpha_texture_ = use_alpha_texture;
- use_nv12_ = use_nv12;
- use_color_lut_ = use_color_lut;
-}
-
void FragmentShaderYUVVideo::Init(GLES2Interface* context,
unsigned program,
int* base_uniform_index) {
« no previous file with comments | « cc/output/shader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698