graphics: Simplify mipmap calculation

This commit is contained in:
Hajime Hoshi 2018-08-03 00:02:49 +09:00
parent d17a6dde9b
commit bac0431c9f
2 changed files with 8 additions and 12 deletions

View File

@ -275,18 +275,18 @@ func (i *Image) DrawImage(img *Image, options *DrawImageOptions) error {
b *= float32(s) b *= float32(s)
c *= float32(s) c *= float32(s)
d *= float32(s) d *= float32(s)
sx0 = int(math.Ceil(float64(sx0) / float64(s))) sx0 = sx0 / s
sy0 = int(math.Ceil(float64(sy0) / float64(s))) sy0 = sy0 / s
sx1 = int(math.Ceil(float64(sx1) / float64(s))) sx1 = sx1 / s
sy1 = int(math.Ceil(float64(sy1) / float64(s))) sy1 = sy1 / s
} }
w, h = img.shareableImages[len(img.shareableImages)-1].Size() w, h = img.shareableImages[len(img.shareableImages)-1].Size()
for len(img.shareableImages) < level+1 { for len(img.shareableImages) < level+1 {
lastl := len(img.shareableImages) - 1 lastl := len(img.shareableImages) - 1
src := img.shareableImages[lastl] src := img.shareableImages[lastl]
w2 := int(math.Ceil(float64(w) / 2.0)) w2 := w / 2
h2 := int(math.Ceil(float64(h) / 2.0)) h2 := h / 2
if w2 == 0 || h2 == 0 { if w2 == 0 || h2 == 0 {
break break
} }

View File

@ -863,10 +863,6 @@ func TestSprites(t *testing.T) {
} }
func TestMipmap(t *testing.T) { func TestMipmap(t *testing.T) {
ceilDiv := func(x, y int) int {
return int(math.Ceil(float64(x) / float64(y)))
}
src, _, err := openEbitenImage() src, _, err := openEbitenImage()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -874,14 +870,14 @@ func TestMipmap(t *testing.T) {
} }
w, h := src.Size() w, h := src.Size()
l1, _ := NewImage(ceilDiv(w, 2), ceilDiv(h, 2), FilterDefault) l1, _ := NewImage(w/2, h/2, FilterDefault)
op := &DrawImageOptions{} op := &DrawImageOptions{}
op.GeoM.Scale(1/2.0, 1/2.0) op.GeoM.Scale(1/2.0, 1/2.0)
op.Filter = FilterLinear op.Filter = FilterLinear
l1.DrawImage(src, op) l1.DrawImage(src, op)
l1w, l1h := l1.Size() l1w, l1h := l1.Size()
l2, _ := NewImage(ceilDiv(l1w, 2), ceilDiv(l1h, 2), FilterDefault) l2, _ := NewImage(l1w/2, l1h/2, FilterDefault)
op = &DrawImageOptions{} op = &DrawImageOptions{}
op.GeoM.Scale(1/2.0, 1/2.0) op.GeoM.Scale(1/2.0, 1/2.0)
op.Filter = FilterLinear op.Filter = FilterLinear