@@ -314,123 +314,3 @@ void GrTextureDomain::GLDomain::setData(const GrGLSLProgramDataManager& pdman,
314
314
std::copy_n (decalFilterWeights, 3 , fPrevDeclFilterWeights );
315
315
}
316
316
}
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