Index: src/core/SkNormalSource.cpp |
diff --git a/src/core/SkNormalSource.cpp b/src/core/SkNormalSource.cpp |
index a69367921263ccdd8d1f2f793d35bc3923c6deef..0ad257bdd1edd0833fc062624c38ac6e8d4ef524 100644 |
--- a/src/core/SkNormalSource.cpp |
+++ b/src/core/SkNormalSource.cpp |
@@ -51,6 +51,7 @@ private: |
virtual ~Provider() override; |
void fillScanLine(int x, int y, SkPoint3 output[], int count) const override; |
+ |
private: |
const NormalMapSourceImpl& fSource; |
SkShader::Context* fMapContext; |
@@ -197,8 +198,7 @@ sk_sp<GrFragmentProcessor> NormalMapSourceImpl::asFragmentProcessor( |
NormalMapSourceImpl::Provider::Provider(const NormalMapSourceImpl& source, |
SkShader::Context* mapContext) |
: fSource(source) |
- , fMapContext(mapContext) { |
-} |
+ , fMapContext(mapContext) {} |
NormalMapSourceImpl::Provider::~Provider() { |
fMapContext->~Context(); |
@@ -316,10 +316,163 @@ sk_sp<SkNormalSource> SkNormalSource::MakeFromNormalMap(sk_sp<SkShader> map, con |
return sk_make_sp<NormalMapSourceImpl>(std::move(map), invCTM); |
} |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+class SK_API NormalFlatSourceImpl : public SkNormalSource { |
+public: |
+ NormalFlatSourceImpl(){} |
+ |
+#if SK_SUPPORT_GPU |
+ sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, |
+ const SkMatrix& viewM, |
+ const SkMatrix* localMatrix, |
+ SkFilterQuality, |
+ SkSourceGammaTreatment) const override; |
+#endif |
+ |
+ SkNormalSource::Provider* asProvider(const SkShader::ContextRec& rec, void* storage) const |
robertphillips
2016/07/11 14:02:04
Hmm, can this be differently indented to not orpha
dvonbeck
2016/07/11 19:37:29
Done.
|
+ override; |
+ size_t providerSize(const SkShader::ContextRec& rec) const override; |
+ |
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(NormalFlatSourceImpl) |
+ |
+protected: |
+ void flatten(SkWriteBuffer& buf) const override; |
+ |
+private: |
+ class Provider : public SkNormalSource::Provider { |
+ public: |
+ Provider(const NormalFlatSourceImpl& source); |
+ |
+ virtual ~Provider(); |
+ |
+ void fillScanLine(int x, int y, SkPoint3 output[], int count) const override; |
+ |
+ private: |
+ const NormalFlatSourceImpl& fSource; |
+ |
+ typedef SkNormalSource::Provider INHERITED; |
+ }; |
+ |
+ friend class SkNormalSource; |
+ |
+ typedef SkNormalSource INHERITED; |
+}; |
+ |
+//////////////////////////////////////////////////////////////////////////// |
+ |
+#if SK_SUPPORT_GPU |
+ |
robertphillips
2016/07/11 14:02:04
??
dvonbeck
2016/07/11 19:37:29
I left the includes there but guarded out so that
robertphillips
2016/07/11 20:51:42
I think so. You can always find the include list e
dvonbeck
2016/07/12 21:01:44
Done.
|
+#if 0 // Keeping here for reference in case code gets refactored into another file |
+#include "GrCoordTransform.h" |
+#include "GrInvariantOutput.h" |
+#include "GrTextureParams.h" |
+#include "glsl/GrGLSLFragmentProcessor.h" |
+#include "glsl/GrGLSLFragmentShaderBuilder.h" |
+#include "SkGr.h" |
+#endif |
+ |
+class NormalFlatFP : public GrFragmentProcessor { |
+public: |
+ NormalFlatFP() { |
+ this->initClassID<NormalFlatFP>(); |
+ } |
+ |
+ class GLSLNormalFlatFP : public GrGLSLFragmentProcessor { |
+ public: |
+ GLSLNormalFlatFP() {} |
+ |
+ void emitCode(EmitArgs& args) override { |
+ GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
+ |
+ fragBuilder->codeAppendf("%s = vec4(0, 0, 1, 0);", args.fOutputColor); |
+ } |
+ |
+ static void GenKey(const GrProcessor& proc, const GrGLSLCaps&, |
+ GrProcessorKeyBuilder* b) { |
robertphillips
2016/07/11 14:02:04
Is the class ID automatically added ?
egdaniel
2016/07/11 18:00:59
yes.
dvonbeck
2016/07/11 19:37:29
Acknowledged.
|
+ b->add32(0x0); |
+ } |
+ |
+ protected: |
+ void onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& proc) override {} |
+ }; |
+ |
+ void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override { |
+ GLSLNormalFlatFP::GenKey(*this, caps, b); |
+ } |
+ |
+ const char* name() const override { return "NormalFlatFP"; } |
+ |
+ void onComputeInvariantOutput(GrInvariantOutput* inout) const override { |
+ inout->setToUnknown(GrInvariantOutput::ReadInput::kWillNot_ReadInput); |
+ } |
+ |
+private: |
+ GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { return new GLSLNormalFlatFP; } |
+ |
+ bool onIsEqual(const GrFragmentProcessor& proc) const override { |
+ return true; |
+ } |
+}; |
+ |
+sk_sp<GrFragmentProcessor> NormalFlatSourceImpl::asFragmentProcessor( |
+ GrContext *context, |
+ const SkMatrix &viewM, |
+ const SkMatrix *localMatrix, |
+ SkFilterQuality filterQuality, |
+ SkSourceGammaTreatment gammaTreatment) const { |
+ |
+ return sk_make_sp<NormalFlatFP>(); |
+} |
+ |
+#endif // SK_SUPPORT_GPU |
+ |
+//////////////////////////////////////////////////////////////////////////// |
+ |
+NormalFlatSourceImpl::Provider::Provider(const NormalFlatSourceImpl& source) |
+ : fSource(source) {} |
+ |
+NormalFlatSourceImpl::Provider::~Provider() {} |
+ |
+SkNormalSource::Provider* NormalFlatSourceImpl::asProvider(const SkShader::ContextRec &rec, |
+ void *storage) const { |
+ return new (storage) Provider(*this); |
+} |
+ |
+size_t NormalFlatSourceImpl::providerSize(const SkShader::ContextRec&) const { |
+ return sizeof(Provider); |
+} |
+ |
+void NormalFlatSourceImpl::Provider::fillScanLine(int x, int y, SkPoint3 output[], int count) |
robertphillips
2016/07/11 14:02:04
odd identing
dvonbeck
2016/07/11 19:37:29
Done?
|
+ const { |
+ for (int i = 0; i < count; i++) { |
+ output[i] = {0.0f, 0.0f, 1.0f}; |
+ } |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+ |
+sk_sp<SkFlattenable> NormalFlatSourceImpl::CreateProc(SkReadBuffer& buf) { |
+ return sk_make_sp<NormalFlatSourceImpl>(); |
+} |
+ |
+void NormalFlatSourceImpl::flatten(SkWriteBuffer& buf) const { |
+ this->INHERITED::flatten(buf); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////// |
+ |
+sk_sp<SkNormalSource> SkNormalSource::MakeFlat() { |
+ return sk_make_sp<NormalFlatSourceImpl>(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////// |
+ |
//////////////////////////////////////////////////////////////////////////// |
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkNormalSource) |
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(NormalMapSourceImpl) |
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(NormalFlatSourceImpl) |
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
//////////////////////////////////////////////////////////////////////////// |