mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 03:08:54 +01:00
mipmap: Avoid using the vertex backend when GopherJS is not used
The backend logic is especially for GopherJS. As the backend logic tends to consume a lot of memory, let's avoid this when possible. Updates #797
This commit is contained in:
parent
385ff8efdf
commit
2a9fd5ef13
@ -68,10 +68,6 @@ func sameColors(c1, c2 color.RGBA, delta int) bool {
|
||||
abs(int(c1.A)-int(c2.A)) <= delta
|
||||
}
|
||||
|
||||
func isGopherJS() bool {
|
||||
return web.IsBrowser() && runtime.GOOS != "js"
|
||||
}
|
||||
|
||||
func TestImagePixels(t *testing.T) {
|
||||
img0, img, err := openEbitenImage()
|
||||
if err != nil {
|
||||
@ -549,7 +545,7 @@ func TestImageClear(t *testing.T) {
|
||||
func TestImageEdge(t *testing.T) {
|
||||
// TODO: This test is not so meaningful after #1218. Do we remove this?
|
||||
|
||||
if isGopherJS() {
|
||||
if web.IsGopherJS() {
|
||||
t.Skip("too slow on GopherJS")
|
||||
return
|
||||
}
|
||||
@ -903,7 +899,7 @@ func TestImageCopy(t *testing.T) {
|
||||
|
||||
// Issue #611, #907
|
||||
func TestImageStretch(t *testing.T) {
|
||||
if isGopherJS() {
|
||||
if web.IsGopherJS() {
|
||||
t.Skip("too slow on GopherJS")
|
||||
return
|
||||
}
|
||||
|
@ -15,9 +15,8 @@
|
||||
package mipmap
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/internal/graphics"
|
||||
"github.com/hajimehoshi/ebiten/internal/web"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -29,11 +28,10 @@ var (
|
||||
type verticesBackend struct {
|
||||
backend []float32
|
||||
head int
|
||||
m sync.Mutex
|
||||
}
|
||||
|
||||
func (v *verticesBackend) slice(n int, last bool) []float32 {
|
||||
v.m.Lock()
|
||||
// As this is called only from GopherJS, mutex is not required.
|
||||
|
||||
need := n * graphics.VertexFloatNum
|
||||
if l := len(v.backend); v.head+need > l {
|
||||
@ -51,14 +49,16 @@ func (v *verticesBackend) slice(n int, last bool) []float32 {
|
||||
} else {
|
||||
v.head += need
|
||||
}
|
||||
|
||||
v.m.Unlock()
|
||||
return s
|
||||
}
|
||||
|
||||
func vertexSlice(n int, last bool) []float32 {
|
||||
if web.IsGopherJS() {
|
||||
// In GopherJS, allocating memory by make is expensive. Use the backend instead.
|
||||
return theVerticesBackend.slice(n, last)
|
||||
}
|
||||
return make([]float32, n*graphics.VertexFloatNum)
|
||||
}
|
||||
|
||||
func quadVertices(sx0, sy0, sx1, sy1 int, a, b, c, d, tx, ty float32, cr, cg, cb, ca float32, last bool) []float32 {
|
||||
x := float32(sx1 - sx0)
|
||||
|
@ -17,6 +17,7 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"strings"
|
||||
"syscall/js"
|
||||
)
|
||||
@ -25,6 +26,10 @@ func IsBrowser() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func IsGopherJS() bool {
|
||||
return IsBrowser() && runtime.GOOS != "js"
|
||||
}
|
||||
|
||||
var (
|
||||
userAgent = js.Global().Get("navigator").Get("userAgent").String()
|
||||
|
||||
|
@ -20,6 +20,10 @@ func IsBrowser() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func IsGopherJS() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func IsIOSSafari() bool {
|
||||
return false
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user