Skip to content

Commit

Permalink
blend: optimize a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
oov committed Aug 16, 2017
1 parent 49aec0b commit 6db5444
Show file tree
Hide file tree
Showing 7 changed files with 66,074 additions and 483 deletions.
12 changes: 6 additions & 6 deletions blend/genblend.go
Original file line number Diff line number Diff line change
Expand Up @@ -503,16 +503,16 @@ var draw{{.Name}}NRGBAToNRGBA drawFunc = func(dest []byte, src []byte, alpha uin
{{end}}
{{define "drawMain1_SrcRGBAToNRGBA"}}
if sa < 0xff {
sr = sr * 0xff / sa
sg = sg * 0xff / sa
sb = sb * 0xff / sa
sr = uint32(rgbaToNRGBATable[(sr<<8)+sa])
sg = uint32(rgbaToNRGBATable[(sg<<8)+sa])
sb = uint32(rgbaToNRGBATable[(sb<<8)+sa])
}
{{end}}
{{define "drawMain1_DestRGBAToNRGBA"}}
if 0x00 < da && da < 0xff {
dr = dr * 0xff / da
dg = dg * 0xff / da
db = db * 0xff / da
dr = uint32(rgbaToNRGBATable[(dr<<8)+da])
dg = uint32(rgbaToNRGBATable[(dg<<8)+da])
db = uint32(rgbaToNRGBATable[(db<<8)+da])
}
{{end}}
{{define "drawMain2"}}
Expand Down
18 changes: 9 additions & 9 deletions blend/genporterduff.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,9 +434,9 @@ var draw{{.Name}}NRGBAToNRGBA drawFunc = func(dest []byte, src []byte, alpha uin
dpix[j+1] = 0
dpix[j+0] = 0
} else {
dpix[j+2] = uint8(b * 0xff / a)
dpix[j+1] = uint8(g * 0xff / a)
dpix[j+0] = uint8(r * 0xff / a)
dpix[j+2] = uint8(rgbaToNRGBATable[(b<<8)+a])
dpix[j+1] = uint8(rgbaToNRGBATable[(g<<8)+a])
dpix[j+0] = uint8(rgbaToNRGBATable[(r<<8)+a])
}
{{end}}
{{define "drawMain3"}}
Expand Down Expand Up @@ -557,9 +557,9 @@ var draw{{.Name}}AlphaToNRGBA drawFunc = func(dest []byte, src []byte, alpha uin
dpix[j+1] = 0
dpix[j+0] = 0
} else {
dpix[j+2] = uint8(b * 0xff / a)
dpix[j+1] = uint8(g * 0xff / a)
dpix[j+0] = uint8(r * 0xff / a)
dpix[j+2] = uint8(rgbaToNRGBATable[(b<<8)+a])
dpix[j+1] = uint8(rgbaToNRGBATable[(g<<8)+a])
dpix[j+0] = uint8(rgbaToNRGBATable[(r<<8)+a])
}
{{end}}
{{define "drawMainAlpha3"}}
Expand Down Expand Up @@ -645,9 +645,9 @@ var draw{{.Name}}UniformToNRGBA drawUniformFunc = func(dest []byte, sr, sg, sb,
dpix[j+1] = 0
dpix[j+0] = 0
} else {
dpix[j+2] = uint8(b * 0xff / a)
dpix[j+1] = uint8(g * 0xff / a)
dpix[j+0] = uint8(r * 0xff / a)
dpix[j+2] = uint8(rgbaToNRGBATable[(b<<8)+a])
dpix[j+1] = uint8(rgbaToNRGBATable[(g<<8)+a])
dpix[j+0] = uint8(rgbaToNRGBATable[(r<<8)+a])
}
{{end}}
{{define "drawMainUniform3"}}
Expand Down
49 changes: 49 additions & 0 deletions blend/genrgba2nrgba.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// +build ignore

package main

import (
"bytes"
"fmt"
"go/format"
"html/template"
"log"
"os"
)

var source = `// Code generated by genrgba2nrgba.go. DO NOT EDIT.
package blend
var rgbaToNRGBATable = [65536]uint16{
{{range $i, $v := .N}}{{printf "%s\n" $v}}{{end}}}
`

func main() {
t := template.Must(template.New("").Parse(source))

n := make([]string, 65536)
for i := 0; i < 256; i++ {
n[i<<8] = fmt.Sprintf("0, // %d * 255 / 0", i)
for j := 1; j < 256; j++ {
n[(i<<8)+j] = fmt.Sprintf("%d, // %d * 255 / %d", i*255/j, i, j)
}
}

b := bytes.NewBufferString("")
if err := t.Execute(b, map[string]interface{}{
"N": n,
}); err != nil {
log.Fatal(err)
}
buf, err := format.Source(b.Bytes())
if err != nil {
log.Fatal(err)
}
f, err := os.Create("zrgba2nrgbatable.go")
if err != nil {
log.Fatal(err)
}
defer f.Close()
if _, err = f.Write(buf); err != nil {
log.Fatal(err)
}
}
1 change: 1 addition & 0 deletions blend/util.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//go:generate go run gendivtable.go
//go:generate go run genrgba2nrgba.go
//go:generate go run genblend.go
//go:generate go run genporterduff.go

Expand Down
Loading

0 comments on commit 6db5444

Please sign in to comment.