mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
internal/graphicscommand: enable EBITENGINE_INTERNAL_IMAGES_KEY
on browsers (#2283)
Closes #2270 Co-authored-by: Hajime Hoshi <hajimehoshi@gmail.com>
This commit is contained in:
parent
216ca95960
commit
26a58d20b3
2
doc.go
2
doc.go
@ -63,7 +63,7 @@
|
|||||||
//
|
//
|
||||||
// `EBITENGINE_INTERNAL_IMAGES_KEY` environment variable specifies the key
|
// `EBITENGINE_INTERNAL_IMAGES_KEY` environment variable specifies the key
|
||||||
// to dump all the internal images. This is valid only when the build tag
|
// to dump all the internal images. This is valid only when the build tag
|
||||||
// 'ebitenginedebug' is specified. This works only on desktops.
|
// 'ebitenginedebug' is specified. This works only on desktops and browsers.
|
||||||
//
|
//
|
||||||
// `EBITENGINE_GRAPHICS_LIBRARY` environment variable specifies the graphics library.
|
// `EBITENGINE_GRAPHICS_LIBRARY` environment variable specifies the graphics library.
|
||||||
// If the specified graphics library is not available, RunGame returns an error.
|
// If the specified graphics library is not available, RunGame returns an error.
|
||||||
|
@ -71,10 +71,6 @@ func dumpInternalImages() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Mkdir(dir, 0755); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := ui.DumpImages(dir); err != nil {
|
if err := ui.DumpImages(dir); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@ import (
|
|||||||
"image"
|
"image"
|
||||||
"io"
|
"io"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2/internal/affine"
|
"github.com/hajimehoshi/ebiten/v2/internal/affine"
|
||||||
"github.com/hajimehoshi/ebiten/v2/internal/debug"
|
"github.com/hajimehoshi/ebiten/v2/internal/debug"
|
||||||
@ -192,6 +194,10 @@ func (i *Image) IsInvalidated() bool {
|
|||||||
return i.image.IsInvalidated()
|
return i.image.IsInvalidated()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *Image) dumpName(path string) string {
|
||||||
|
return strings.ReplaceAll(path, "*", strconv.Itoa(i.id))
|
||||||
|
}
|
||||||
|
|
||||||
// dumpTo dumps the image to the specified writer.
|
// dumpTo dumps the image to the specified writer.
|
||||||
//
|
//
|
||||||
// If blackbg is true, any alpha values in the dumped image will be 255.
|
// If blackbg is true, any alpha values in the dumped image will be 255.
|
||||||
|
@ -15,43 +15,67 @@
|
|||||||
package graphicscommand
|
package graphicscommand
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"image"
|
"image"
|
||||||
"path/filepath"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"syscall/js"
|
"syscall/js"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver"
|
"github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (i *Image) Dump(graphicsDriver graphicsdriver.Graphics, path string, blackbg bool, rect image.Rectangle) error {
|
func download(buf *bytes.Buffer, mime string, path string) {
|
||||||
// Screen image cannot be dumped.
|
|
||||||
if i.screen {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
path = strings.ReplaceAll(path, "*", strconv.Itoa(i.id))
|
|
||||||
path = filepath.Base(path)
|
|
||||||
|
|
||||||
global := js.Global()
|
global := js.Global()
|
||||||
|
|
||||||
buf := &bytes.Buffer{}
|
|
||||||
if err := i.dumpTo(buf, graphicsDriver, blackbg, rect); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
jsData := global.Get("Uint8Array").New(buf.Len())
|
jsData := global.Get("Uint8Array").New(buf.Len())
|
||||||
js.CopyBytesToJS(jsData, buf.Bytes())
|
js.CopyBytesToJS(jsData, buf.Bytes())
|
||||||
|
|
||||||
a := global.Get("document").Call("createElement", "a")
|
a := global.Get("document").Call("createElement", "a")
|
||||||
blob := global.Get("Blob").New(
|
blob := global.Get("Blob").New(
|
||||||
[]interface{}{jsData},
|
[]interface{}{jsData},
|
||||||
map[string]interface{}{"type": "image/png"},
|
map[string]interface{}{"type": mime},
|
||||||
)
|
)
|
||||||
a.Set("href", global.Get("URL").Call("createObjectURL", blob))
|
a.Set("href", global.Get("URL").Call("createObjectURL", blob))
|
||||||
a.Set("download", path)
|
a.Set("download", path)
|
||||||
a.Call("click")
|
a.Call("click")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *Image) Dump(graphicsDriver graphicsdriver.Graphics, path string, blackbg bool, rect image.Rectangle) error {
|
||||||
|
// Screen image cannot be dumped.
|
||||||
|
if i.screen {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
if err := i.dumpTo(buf, graphicsDriver, blackbg, rect); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
download(buf, "image/png", i.dumpName(path))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DumpImages dumps all the specified images to the specified directory.
|
||||||
|
//
|
||||||
|
// This is for testing usage.
|
||||||
|
func DumpImages(images []*Image, graphicsDriver graphicsdriver.Graphics, dir string) error {
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
zw := zip.NewWriter(buf)
|
||||||
|
|
||||||
|
for _, img := range images {
|
||||||
|
f, err := zw.Create(img.dumpName("*.png"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := img.dumpTo(f, graphicsDriver, false, image.Rect(0, 0, img.width, img.height)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zw.Close()
|
||||||
|
|
||||||
|
download(buf, "archive/zip", dir+".zip")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,7 @@ package graphicscommand
|
|||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"path/filepath"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver"
|
"github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver"
|
||||||
)
|
)
|
||||||
@ -32,7 +31,7 @@ func (i *Image) Dump(graphicsDriver graphicsdriver.Graphics, path string, blackb
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
path = strings.ReplaceAll(path, "*", strconv.Itoa(i.id))
|
path = i.dumpName(path)
|
||||||
f, err := os.Create(path)
|
f, err := os.Create(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -45,3 +44,19 @@ func (i *Image) Dump(graphicsDriver graphicsdriver.Graphics, path string, blackb
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DumpImages dumps all the current images to the specified directory.
|
||||||
|
//
|
||||||
|
// This is for testing usage.
|
||||||
|
func DumpImages(images []*Image, graphicsDriver graphicsdriver.Graphics, dir string) error {
|
||||||
|
if err := os.Mkdir(dir, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, img := range images {
|
||||||
|
if err := img.Dump(graphicsDriver, filepath.Join(dir, "*.png"), false, image.Rect(0, 0, img.width, img.height)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
package restorable
|
package restorable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image"
|
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2/internal/debug"
|
"github.com/hajimehoshi/ebiten/v2/internal/debug"
|
||||||
@ -125,12 +123,12 @@ func RestoreIfNeeded(graphicsDriver graphicsdriver.Graphics) error {
|
|||||||
//
|
//
|
||||||
// This is for testing usage.
|
// This is for testing usage.
|
||||||
func DumpImages(graphicsDriver graphicsdriver.Graphics, dir string) error {
|
func DumpImages(graphicsDriver graphicsdriver.Graphics, dir string) error {
|
||||||
|
images := make([]*graphicscommand.Image, 0, len(theImages.images))
|
||||||
for img := range theImages.images {
|
for img := range theImages.images {
|
||||||
if err := img.Dump(graphicsDriver, filepath.Join(dir, "*.png"), false, image.Rect(0, 0, img.width, img.height)); err != nil {
|
images = append(images, img.image)
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
return graphicscommand.DumpImages(images, graphicsDriver, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add adds img to the images.
|
// add adds img to the images.
|
||||||
|
Loading…
Reference in New Issue
Block a user