@@ -314,123 +314,3 @@ void GrTextureDomain::GLDomain::setData(const GrGLSLProgramDataManager& pdman,
314314 std::copy_n (decalFilterWeights, 3 , fPrevDeclFilterWeights );
315315 }
316316}
317-
318- // /////////////////////////////////////////////////////////////////////////////
319-
320- std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::Make (
321- GrSurfaceProxyView view, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) {
322- return std::unique_ptr<GrFragmentProcessor>(new GrDeviceSpaceTextureDecalFragmentProcessor (
323- std::move (view), subset, deviceSpaceOffset));
324- }
325-
326- GrDeviceSpaceTextureDecalFragmentProcessor::GrDeviceSpaceTextureDecalFragmentProcessor (
327- GrSurfaceProxyView view, const SkIRect& subset, const SkIPoint& deviceSpaceOffset)
328- : INHERITED(kGrDeviceSpaceTextureDecalFragmentProcessor_ClassID ,
329- kCompatibleWithCoverageAsAlpha_OptimizationFlag )
330- , fTextureDomain(view.proxy(),
331- GrTextureDomain::MakeTexelDomain(subset, GrTextureDomain::kDecal_Mode ),
332- GrTextureDomain::kDecal_Mode, GrTextureDomain::kDecal_Mode)
333- , fTextureSampler(std::move(view), GrSamplerState::Filter::kNearest) {
334- this ->setTextureSamplerCnt (1 );
335- fDeviceSpaceOffset .fX = deviceSpaceOffset.fX - subset.fLeft ;
336- fDeviceSpaceOffset .fY = deviceSpaceOffset.fY - subset.fTop ;
337- }
338-
339- GrDeviceSpaceTextureDecalFragmentProcessor::GrDeviceSpaceTextureDecalFragmentProcessor (
340- const GrDeviceSpaceTextureDecalFragmentProcessor& that)
341- : INHERITED(kGrDeviceSpaceTextureDecalFragmentProcessor_ClassID ,
342- kCompatibleWithCoverageAsAlpha_OptimizationFlag )
343- , fTextureDomain(that.fTextureDomain )
344- , fTextureSampler(that.fTextureSampler )
345- , fDeviceSpaceOffset(that.fDeviceSpaceOffset ) {
346- this ->setTextureSamplerCnt (1 );
347- }
348-
349- std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::clone () const {
350- return std::unique_ptr<GrFragmentProcessor>(
351- new GrDeviceSpaceTextureDecalFragmentProcessor (*this ));
352- }
353-
354- GrGLSLFragmentProcessor* GrDeviceSpaceTextureDecalFragmentProcessor::onCreateGLSLInstance () const {
355- class GLSLProcessor : public GrGLSLFragmentProcessor {
356- public:
357- void emitCode (EmitArgs& args) override {
358- const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp =
359- args.fFp .cast <GrDeviceSpaceTextureDecalFragmentProcessor>();
360- const char * scaleAndTranslateName;
361- fScaleAndTranslateUni = args.fUniformHandler ->addUniform (kFragment_GrShaderFlag ,
362- kHalf4_GrSLType ,
363- " scaleAndTranslate" ,
364- &scaleAndTranslateName);
365- args.fFragBuilder ->codeAppendf (" half2 coords = half2(sk_FragCoord.xy * %s.xy + %s.zw);" ,
366- scaleAndTranslateName, scaleAndTranslateName);
367- fGLDomain .sampleTexture (args.fFragBuilder ,
368- args.fUniformHandler ,
369- args.fShaderCaps ,
370- dstdfp.fTextureDomain ,
371- args.fOutputColor ,
372- SkString (" coords" ),
373- args.fTexSamplers [0 ],
374- args.fInputColor );
375- }
376-
377- protected:
378- void onSetData (const GrGLSLProgramDataManager& pdman,
379- const GrFragmentProcessor& fp) override {
380- const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp =
381- fp.cast <GrDeviceSpaceTextureDecalFragmentProcessor>();
382- const auto & view = dstdfp.textureSampler (0 ).view ();
383- SkISize textureDims = view.proxy ()->backingStoreDimensions ();
384-
385- fGLDomain .setData (pdman, dstdfp.fTextureDomain , view,
386- dstdfp.textureSampler (0 ).samplerState ());
387- float iw = 1 .f / textureDims.width ();
388- float ih = 1 .f / textureDims.height ();
389- float scaleAndTransData[4 ] = {
390- iw, ih,
391- -dstdfp.fDeviceSpaceOffset .fX * iw, -dstdfp.fDeviceSpaceOffset .fY * ih
392- };
393- if (view.origin () == kBottomLeft_GrSurfaceOrigin ) {
394- scaleAndTransData[1 ] = -scaleAndTransData[1 ];
395- scaleAndTransData[3 ] = 1 - scaleAndTransData[3 ];
396- }
397- pdman.set4fv (fScaleAndTranslateUni , 1 , scaleAndTransData);
398- }
399-
400- private:
401- GrTextureDomain::GLDomain fGLDomain ;
402- UniformHandle fScaleAndTranslateUni ;
403- };
404-
405- return new GLSLProcessor;
406- }
407-
408- bool GrDeviceSpaceTextureDecalFragmentProcessor::onIsEqual (const GrFragmentProcessor& fp) const {
409- const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp =
410- fp.cast <GrDeviceSpaceTextureDecalFragmentProcessor>();
411- return dstdfp.fTextureSampler .view ().proxy ()->underlyingUniqueID () ==
412- fTextureSampler .view ().proxy ()->underlyingUniqueID () &&
413- dstdfp.fDeviceSpaceOffset == fDeviceSpaceOffset &&
414- dstdfp.fTextureDomain == fTextureDomain ;
415- }
416-
417- // /////////////////////////////////////////////////////////////////////////////
418-
419- GR_DEFINE_FRAGMENT_PROCESSOR_TEST (GrDeviceSpaceTextureDecalFragmentProcessor);
420-
421- #if GR_TEST_UTILS
422- std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::TestCreate (
423- GrProcessorTestData* d) {
424- auto [view, at, ct] = d->randomView ();
425- SkIRect subset;
426- subset.fLeft = d->fRandom ->nextULessThan (view.width () - 1 );
427- subset.fRight = d->fRandom ->nextRangeU (subset.fLeft , view.width ());
428- subset.fTop = d->fRandom ->nextULessThan (view.height () - 1 );
429- subset.fBottom = d->fRandom ->nextRangeU (subset.fTop , view.height ());
430- SkIPoint pt;
431- pt.fX = d->fRandom ->nextULessThan (2048 );
432- pt.fY = d->fRandom ->nextULessThan (2048 );
433-
434- return GrDeviceSpaceTextureDecalFragmentProcessor::Make (std::move (view), subset, pt);
435- }
436- #endif
0 commit comments