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

Unified Diff: cc/output/program_binding.h

Issue 555133002: [WIP Experiment] Implement mix-blend-mode in GLRenderer using shaders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile issue on mac Created 6 years, 3 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
Index: cc/output/program_binding.h
diff --git a/cc/output/program_binding.h b/cc/output/program_binding.h
index 912329ef6bf548055ad6a07de577f12040af4936..fd889293ee1e351926a231533b2a24223fb76915 100644
--- a/cc/output/program_binding.h
+++ b/cc/output/program_binding.h
@@ -98,6 +98,56 @@ class ProgramBinding : public ProgramBindingBase {
DISALLOW_COPY_AND_ASSIGN(ProgramBinding);
};
+template <class VertexShader, class FragmentShader>
+class ProgramBindingWithBlendMode : public ProgramBindingBase {
+ public:
+ ProgramBindingWithBlendMode() {}
+
+ void Initialize(ContextProvider* context_provider,
+ TexCoordPrecision precision,
+ SamplerType sampler,
+ SkXfermode::Mode blend_mode) {
+ DCHECK(context_provider);
+ DCHECK(!initialized_);
+
+ if (context_provider->IsContextLost())
+ return;
+
+ if (!ProgramBindingBase::Init(
+ context_provider->ContextGL(),
+ vertex_shader_.GetShaderString(),
+ fragment_shader_.GetShaderString(precision, sampler, blend_mode))) {
+ DCHECK(context_provider->IsContextLost());
+ return;
+ }
+
+ int base_uniform_index = 0;
+ vertex_shader_.Init(
+ context_provider->ContextGL(), program_, &base_uniform_index);
+ fragment_shader_.Init(context_provider->ContextGL(),
+ program_,
+ &base_uniform_index,
+ blend_mode != SkXfermode::kSrcOver_Mode);
+
+ // Link after binding uniforms
+ if (!Link(context_provider->ContextGL())) {
+ DCHECK(context_provider->IsContextLost());
+ return;
+ }
+
+ initialized_ = true;
+ }
+
+ const VertexShader& vertex_shader() const { return vertex_shader_; }
enne (OOO) 2014/09/24 22:07:56 Why shadow the base class with these functions and
+ const FragmentShader& fragment_shader() const { return fragment_shader_; }
+
+ private:
+ VertexShader vertex_shader_;
+ FragmentShader fragment_shader_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProgramBindingWithBlendMode);
+};
+
} // namespace cc
#endif // CC_OUTPUT_PROGRAM_BINDING_H_

Powered by Google App Engine
This is Rietveld 408576698