Chromium Code Reviews| 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 |
| //////////////////////////////////////////////////////////////////////////// |