@@ -12,7 +12,6 @@ import (
12
12
"flag"
13
13
"fmt"
14
14
"go/format"
15
- "io/ioutil"
16
15
"log"
17
16
"os"
18
17
"strings"
@@ -45,7 +44,7 @@ func main() {
45
44
if err != nil {
46
45
log .Fatal (err )
47
46
}
48
- if err := ioutil .WriteFile ("impl.go" , out , 0660 ); err != nil {
47
+ if err := os .WriteFile ("impl.go" , out , 0660 ); err != nil {
49
48
log .Fatal (err )
50
49
}
51
50
}
62
61
{"*image.RGBA" , "*image.NRGBA" },
63
62
{"*image.RGBA" , "*image.RGBA" },
64
63
{"*image.RGBA" , "*image.YCbCr" },
64
+ {"*image.RGBA" , "image.RGBA64Image" },
65
65
{"*image.RGBA" , "image.Image" },
66
+ {"RGBA64Image" , "image.RGBA64Image" },
66
67
{"Image" , "image.Image" },
67
68
}
68
69
dTypes , sTypes []string
@@ -234,13 +235,21 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
234
235
return ";"
235
236
case "Image" :
236
237
s := ""
237
- if d .sType == "image.Image" {
238
+ if d .sType == "image.Image" || d . sType == "image.RGBA64Image" {
238
239
s = "srcMask, smp := opts.SrcMask, opts.SrcMaskP\n "
239
240
}
240
241
return s +
241
242
"dstMask, dmp := opts.DstMask, opts.DstMaskP\n " +
242
243
"dstColorRGBA64 := &color.RGBA64{}\n " +
243
244
"dstColor := color.Color(dstColorRGBA64)"
245
+ case "RGBA64Image" :
246
+ s := ""
247
+ if d .sType == "image.Image" || d .sType == "image.RGBA64Image" {
248
+ s = "srcMask, smp := opts.SrcMask, opts.SrcMaskP\n "
249
+ }
250
+ return s +
251
+ "dstMask, dmp := opts.DstMask, opts.DstMaskP\n " +
252
+ "dstColorRGBA64 := color.RGBA64{}\n "
244
253
}
245
254
246
255
case "preInner" :
@@ -255,7 +264,7 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
255
264
switch d .sType {
256
265
default :
257
266
return ";"
258
- case "image.Image" :
267
+ case "image.Image" , "image.RGBA64Image" :
259
268
return "srcMask, smp := opts.SrcMask, opts.SrcMaskP"
260
269
}
261
270
@@ -334,6 +343,10 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
334
343
"$0g := uint32($1g)\n " +
335
344
"$0b := uint32($1b)" ,
336
345
)
346
+ case "image.RGBA64Image" :
347
+ return argf (args , "" +
348
+ "$0 := color.RGBA64{uint16($1r), uint16($1g), uint16($1b), uint16($1a)}" ,
349
+ )
337
350
}
338
351
339
352
case "outputu" :
@@ -364,14 +377,62 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
364
377
"dstColorRGBA64.A = uint16(qa*$2a1/0xffff + $2a)\n " +
365
378
"dst.Set($0, $1, dstColor)" ,
366
379
)
380
+ case "RGBA64Image" :
381
+ switch d .sType {
382
+ default :
383
+ return argf (args , "" +
384
+ "q := dst.RGBA64At($0, $1)\n " +
385
+ "if dstMask != nil {\n " +
386
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
387
+ " $2r = $2r * ma / 0xffff\n " +
388
+ " $2g = $2g * ma / 0xffff\n " +
389
+ " $2b = $2b * ma / 0xffff\n " +
390
+ " $2a = $2a * ma / 0xffff\n " +
391
+ "}\n " +
392
+ "$2a1 := 0xffff - $2a\n " +
393
+ "dstColorRGBA64.R = uint16(uint32(q.R)*$2a1/0xffff + $2r)\n " +
394
+ "dstColorRGBA64.G = uint16(uint32(q.G)*$2a1/0xffff + $2g)\n " +
395
+ "dstColorRGBA64.B = uint16(uint32(q.B)*$2a1/0xffff + $2b)\n " +
396
+ "dstColorRGBA64.A = uint16(uint32(q.A)*$2a1/0xffff + $2a)\n " +
397
+ "dst.Set($0, $1, dstColorRGBA64)" ,
398
+ )
399
+ case "image.RGBA64Image" :
400
+ return argf (args , "" +
401
+ "q := dst.RGBA64At($0, $1)\n " +
402
+ "if dstMask != nil {\n " +
403
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
404
+ " $2.R = uint16(uint32($2.R) * ma / 0xffff)\n " +
405
+ " $2.G = uint16(uint32($2.G) * ma / 0xffff)\n " +
406
+ " $2.B = uint16(uint32($2.B) * ma / 0xffff)\n " +
407
+ " $2.A = uint16(uint32($2.A) * ma / 0xffff)\n " +
408
+ "}\n " +
409
+ "$2a1 := 0xffff - uint32($2.A)\n " +
410
+ "dstColorRGBA64.R = uint16(uint32(q.R)*$2a1/0xffff + uint32($2.R))\n " +
411
+ "dstColorRGBA64.G = uint16(uint32(q.G)*$2a1/0xffff + uint32($2.G))\n " +
412
+ "dstColorRGBA64.B = uint16(uint32(q.B)*$2a1/0xffff + uint32($2.B))\n " +
413
+ "dstColorRGBA64.A = uint16(uint32(q.A)*$2a1/0xffff + uint32($2.A))\n " +
414
+ "dst.Set($0, $1, dstColorRGBA64)" ,
415
+ )
416
+ }
367
417
case "*image.RGBA" :
368
- return argf (args , "" +
369
- "$2a1 := (0xffff - $2a) * 0x101\n " +
370
- "dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*$2a1/0xffff + $2r) >> 8)\n " +
371
- "dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*$2a1/0xffff + $2g) >> 8)\n " +
372
- "dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*$2a1/0xffff + $2b) >> 8)\n " +
373
- "dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*$2a1/0xffff + $2a) >> 8)" ,
374
- )
418
+ switch d .sType {
419
+ default :
420
+ return argf (args , "" +
421
+ "$2a1 := (0xffff - $2a) * 0x101\n " +
422
+ "dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*$2a1/0xffff + $2r) >> 8)\n " +
423
+ "dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*$2a1/0xffff + $2g) >> 8)\n " +
424
+ "dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*$2a1/0xffff + $2b) >> 8)\n " +
425
+ "dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*$2a1/0xffff + $2a) >> 8)" ,
426
+ )
427
+ case "image.RGBA64Image" :
428
+ return argf (args , "" +
429
+ "$2a1 := (0xffff - uint32($2.A)) * 0x101\n " +
430
+ "dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*$2a1/0xffff + uint32($2.R)) >> 8)\n " +
431
+ "dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*$2a1/0xffff + uint32($2.G)) >> 8)\n " +
432
+ "dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*$2a1/0xffff + uint32($2.B)) >> 8)\n " +
433
+ "dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*$2a1/0xffff + uint32($2.A)) >> 8)" ,
434
+ )
435
+ }
375
436
}
376
437
377
438
case "Src" :
@@ -401,6 +462,51 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
401
462
" dst.Set($0, $1, dstColor)\n " +
402
463
"}" ,
403
464
)
465
+ case "RGBA64Image" :
466
+ switch d .sType {
467
+ default :
468
+ return argf (args , "" +
469
+ "if dstMask != nil {\n " +
470
+ " q := dst.RGBA64At($0, $1)\n " +
471
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
472
+ " pr = pr * ma / 0xffff\n " +
473
+ " pg = pg * ma / 0xffff\n " +
474
+ " pb = pb * ma / 0xffff\n " +
475
+ " pa = pa * ma / 0xffff\n " +
476
+ " $2a1 := 0xffff - ma\n " + // Note that this is ma, not $2a.
477
+ " dstColorRGBA64.R = uint16(uint32(q.R)*$2a1/0xffff + $2r)\n " +
478
+ " dstColorRGBA64.G = uint16(uint32(q.G)*$2a1/0xffff + $2g)\n " +
479
+ " dstColorRGBA64.B = uint16(uint32(q.B)*$2a1/0xffff + $2b)\n " +
480
+ " dstColorRGBA64.A = uint16(uint32(q.A)*$2a1/0xffff + $2a)\n " +
481
+ " dst.Set($0, $1, dstColorRGBA64)\n " +
482
+ "} else {\n " +
483
+ " dstColorRGBA64.R = uint16($2r)\n " +
484
+ " dstColorRGBA64.G = uint16($2g)\n " +
485
+ " dstColorRGBA64.B = uint16($2b)\n " +
486
+ " dstColorRGBA64.A = uint16($2a)\n " +
487
+ " dst.Set($0, $1, dstColorRGBA64)\n " +
488
+ "}" ,
489
+ )
490
+ case "image.RGBA64Image" :
491
+ return argf (args , "" +
492
+ "if dstMask != nil {\n " +
493
+ " q := dst.RGBA64At($0, $1)\n " +
494
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
495
+ " p.R = uint16(uint32(p.R) * ma / 0xffff)\n " +
496
+ " p.G = uint16(uint32(p.G) * ma / 0xffff)\n " +
497
+ " p.B = uint16(uint32(p.B) * ma / 0xffff)\n " +
498
+ " p.A = uint16(uint32(p.A) * ma / 0xffff)\n " +
499
+ " $2a1 := 0xffff - ma\n " + // Note that this is ma, not $2a.
500
+ " dstColorRGBA64.R = uint16(uint32(q.R)*$2a1/0xffff + uint32($2.R))\n " +
501
+ " dstColorRGBA64.G = uint16(uint32(q.G)*$2a1/0xffff + uint32($2.G))\n " +
502
+ " dstColorRGBA64.B = uint16(uint32(q.B)*$2a1/0xffff + uint32($2.B))\n " +
503
+ " dstColorRGBA64.A = uint16(uint32(q.A)*$2a1/0xffff + uint32($2.A))\n " +
504
+ " dst.Set($0, $1, dstColorRGBA64)\n " +
505
+ "} else {\n " +
506
+ " dst.Set($0, $1, $2)\n " +
507
+ "}" ,
508
+ )
509
+ }
404
510
case "*image.RGBA" :
405
511
switch d .sType {
406
512
default :
@@ -425,6 +531,13 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
425
531
"dst.Pix[d+2] = uint8($2b >> 8)\n " +
426
532
"dst.Pix[d+3] = 0xff" ,
427
533
)
534
+ case "image.RGBA64Image" :
535
+ return argf (args , "" +
536
+ "dst.Pix[d+0] = uint8($2.R >> 8)\n " +
537
+ "dst.Pix[d+1] = uint8($2.G >> 8)\n " +
538
+ "dst.Pix[d+2] = uint8($2.B >> 8)\n " +
539
+ "dst.Pix[d+3] = uint8($2.A >> 8)" ,
540
+ )
428
541
}
429
542
}
430
543
}
@@ -462,6 +575,27 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
462
575
"dstColorRGBA64.A = uint16(qa*$3a1/0xffff + $3a0)\n " +
463
576
"dst.Set($0, $1, dstColor)" ,
464
577
)
578
+ case "RGBA64Image" :
579
+ ret = argf (args , "" +
580
+ "q := dst.RGBA64At($0, $1)\n " +
581
+ "$3r0 := uint32($2($3r * $4))\n " +
582
+ "$3g0 := uint32($2($3g * $4))\n " +
583
+ "$3b0 := uint32($2($3b * $4))\n " +
584
+ "$3a0 := uint32($2($3a * $4))\n " +
585
+ "if dstMask != nil {\n " +
586
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
587
+ " $3r0 = $3r0 * ma / 0xffff\n " +
588
+ " $3g0 = $3g0 * ma / 0xffff\n " +
589
+ " $3b0 = $3b0 * ma / 0xffff\n " +
590
+ " $3a0 = $3a0 * ma / 0xffff\n " +
591
+ "}\n " +
592
+ "$3a1 := 0xffff - $3a0\n " +
593
+ "dstColorRGBA64.R = uint16(uint32(q.R)*$3a1/0xffff + $3r0)\n " +
594
+ "dstColorRGBA64.G = uint16(uint32(q.G)*$3a1/0xffff + $3g0)\n " +
595
+ "dstColorRGBA64.B = uint16(uint32(q.B)*$3a1/0xffff + $3b0)\n " +
596
+ "dstColorRGBA64.A = uint16(uint32(q.A)*$3a1/0xffff + $3a0)\n " +
597
+ "dst.SetRGBA64($0, $1, dstColorRGBA64)" ,
598
+ )
465
599
case "*image.RGBA" :
466
600
ret = argf (args , "" +
467
601
"$3r0 := uint32($2($3r * $4))\n " +
@@ -503,6 +637,29 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
503
637
" dst.Set($0, $1, dstColor)\n " +
504
638
"}" ,
505
639
)
640
+ case "RGBA64Image" :
641
+ ret = argf (args , "" +
642
+ "if dstMask != nil {\n " +
643
+ " q := dst.RGBA64At($0, $1)\n " +
644
+ " _, _, _, ma := dstMask.At(dmp.X + $0, dmp.Y + $1).RGBA()\n " +
645
+ " pr := uint32($2($3r * $4)) * ma / 0xffff\n " +
646
+ " pg := uint32($2($3g * $4)) * ma / 0xffff\n " +
647
+ " pb := uint32($2($3b * $4)) * ma / 0xffff\n " +
648
+ " pa := uint32($2($3a * $4)) * ma / 0xffff\n " +
649
+ " pa1 := 0xffff - ma\n " + // Note that this is ma, not pa.
650
+ " dstColorRGBA64.R = uint16(uint32(q.R)*pa1/0xffff + pr)\n " +
651
+ " dstColorRGBA64.G = uint16(uint32(q.G)*pa1/0xffff + pg)\n " +
652
+ " dstColorRGBA64.B = uint16(uint32(q.B)*pa1/0xffff + pb)\n " +
653
+ " dstColorRGBA64.A = uint16(uint32(q.A)*pa1/0xffff + pa)\n " +
654
+ " dst.SetRGBA64($0, $1, dstColorRGBA64)\n " +
655
+ "} else {\n " +
656
+ " dstColorRGBA64.R = $2($3r * $4)\n " +
657
+ " dstColorRGBA64.G = $2($3g * $4)\n " +
658
+ " dstColorRGBA64.B = $2($3b * $4)\n " +
659
+ " dstColorRGBA64.A = $2($3a * $4)\n " +
660
+ " dst.SetRGBA64($0, $1, dstColorRGBA64)\n " +
661
+ "}" ,
662
+ )
506
663
case "*image.RGBA" :
507
664
switch d .sType {
508
665
default :
@@ -560,7 +717,7 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
560
717
"%sr%s, %sg%s, %sb%s, %sa%s := src.At(%s, %s).RGBA()\n " ,
561
718
lhs , tmp , lhs , tmp , lhs , tmp , lhs , tmp , args [0 ], args [1 ],
562
719
)
563
- if d .dType == "" || d .dType == "Image" {
720
+ if d .dType == "" || d .dType == "Image" || d . dType == "RGBA64Image" {
564
721
fmt .Fprintf (buf , "" +
565
722
"if srcMask != nil {\n " +
566
723
" _, _, _, ma := srcMask.At(smp.X+%s, smp.Y+%s).RGBA()\n " +
@@ -576,6 +733,24 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
576
733
lhs , tmp , lhs , tmp ,
577
734
)
578
735
}
736
+ case "image.RGBA64Image" :
737
+ fmt .Fprintf (buf , "" +
738
+ "%s%s := src.RGBA64At(%s, %s)\n " ,
739
+ lhs , tmp , args [0 ], args [1 ],
740
+ )
741
+ if d .dType == "" || d .dType == "Image" || d .dType == "RGBA64Image" {
742
+ fmt .Fprintf (buf , "" +
743
+ "if srcMask != nil {\n " +
744
+ " _, _, _, ma := srcMask.At(smp.X+%[1]s, smp.Y+%[2]s).RGBA()\n " +
745
+ " %[3]s%[4]s.R = uint16(uint32(%[3]s%[4]s.R) * ma / 0xffff)\n " +
746
+ " %[3]s%[4]s.G = uint16(uint32(%[3]s%[4]s.G) * ma / 0xffff)\n " +
747
+ " %[3]s%[4]s.B = uint16(uint32(%[3]s%[4]s.B) * ma / 0xffff)\n " +
748
+ " %[3]s%[4]s.A = uint16(uint32(%[3]s%[4]s.A) * ma / 0xffff)\n " +
749
+ "}\n " ,
750
+ args [0 ], args [1 ],
751
+ lhs , tmp ,
752
+ )
753
+ }
579
754
case "*image.Gray" :
580
755
fmt .Fprintf (buf , "" +
581
756
"%si := %s\n " +
@@ -647,6 +822,14 @@ func expnDollar(prefix, dollar, suffix string, d *data) string {
647
822
lhs , eqOp , lhs , extra ,
648
823
lhs , eqOp , lhs , extra ,
649
824
)
825
+ case "image.RGBA64Image" :
826
+ fmt .Fprintf (buf , "" +
827
+ "%[1]sr %[2]s float64(%[3]su.R)%[4]s\n " +
828
+ "%[1]sg %[2]s float64(%[3]su.G)%[4]s\n " +
829
+ "%[1]sb %[2]s float64(%[3]su.B)%[4]s\n " +
830
+ "%[1]sa %[2]s float64(%[3]su.A)%[4]s\n " ,
831
+ lhs , eqOp , lhs , extra ,
832
+ )
650
833
}
651
834
}
652
835
0 commit comments