mirror of
https://codeberg.org/scip/kageviewer.git
synced 2025-12-18 21:11:05 +01:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 821703a989 | |||
| b7d04097bb | |||
| 718f30578d | |||
| dafcaad0ef | |||
| daef8fa8bc | |||
| 086e1613a2 | |||
| 97a8d4b210 | |||
| 42c971cac6 | |||
| a3c1a80e15 | |||
| 868ad2c32d | |||
| fb70f8284c | |||
| f5899ac72f |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
releases
|
||||
kage-viewer
|
||||
kageviewer
|
||||
|
||||
65
.goreleaser.yaml
Normal file
65
.goreleaser.yaml
Normal file
@@ -0,0 +1,65 @@
|
||||
# vim: set ts=2 sw=2 tw=0 fo=cnqoj
|
||||
|
||||
version: 2
|
||||
|
||||
before:
|
||||
hooks:
|
||||
- go mod tidy
|
||||
|
||||
gitea_urls:
|
||||
api: https://codeberg.org/api/v1
|
||||
download: https://codeberg.org
|
||||
|
||||
builds:
|
||||
- env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- linux
|
||||
- freebsd
|
||||
|
||||
archives:
|
||||
- formats: [tar.gz]
|
||||
# this name template makes the OS and Arch compatible with the results of `uname`.
|
||||
name_template: >-
|
||||
{{ .ProjectName }}_
|
||||
{{- title .Os }}_
|
||||
{{- if eq .Arch "amd64" }}x86_64
|
||||
{{- else if eq .Arch "386" }}i386
|
||||
{{- else }}{{ .Arch }}{{ end }}
|
||||
{{- if .Arm }}v{{ .Arm }}{{ end }}_{{ .Tag }}
|
||||
# use zip for windows archives
|
||||
format_overrides:
|
||||
- goos: windows
|
||||
formats: [zip]
|
||||
- goos: linux
|
||||
formats: [tar.gz,binary]
|
||||
files:
|
||||
- src: "*.md"
|
||||
strip_parent: true
|
||||
- src: Makefile.dist
|
||||
dst: Makefile
|
||||
wrap_in_directory: true
|
||||
|
||||
changelog:
|
||||
sort: asc
|
||||
filters:
|
||||
exclude:
|
||||
- "^docs:"
|
||||
- "^test:"
|
||||
groups:
|
||||
- title: Improved
|
||||
regexp: '^.*?(feat|add|new)(\([[:word:]]+\))??!?:.+$'
|
||||
order: 0
|
||||
- title: Fixed
|
||||
regexp: '^.*?(bug|fix)(\([[:word:]]+\))??!?:.+$'
|
||||
order: 1
|
||||
- title: Changed
|
||||
order: 999
|
||||
|
||||
release:
|
||||
header: "# Release Notes"
|
||||
footer: >-
|
||||
|
||||
---
|
||||
|
||||
Full Changelog: [{{ .PreviousTag }}...{{ .Tag }}](https://codeberg.org/scip/kageviewer/compare/{{ .PreviousTag }}...{{ .Tag }})
|
||||
31
.woodpecker/build.yaml
Normal file
31
.woodpecker/build.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
matrix:
|
||||
platform:
|
||||
- linux/amd64
|
||||
goversion:
|
||||
- 1.24
|
||||
|
||||
labels:
|
||||
platform: ${platform}
|
||||
|
||||
steps:
|
||||
build:
|
||||
when:
|
||||
event: [push]
|
||||
image: golang:${goversion}
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install -y libasound2-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev
|
||||
- go get
|
||||
- go build
|
||||
|
||||
linter:
|
||||
when:
|
||||
event: [push]
|
||||
image: golang:${goversion}
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install -y libasound2-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev
|
||||
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.5.0
|
||||
- golangci-lint --version
|
||||
- golangci-lint run ./...
|
||||
depends_on: [build]
|
||||
15
.woodpecker/release.yaml
Normal file
15
.woodpecker/release.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
# build release
|
||||
|
||||
labels:
|
||||
platform: linux/amd64
|
||||
|
||||
steps:
|
||||
goreleaser:
|
||||
image: goreleaser/goreleaser
|
||||
when:
|
||||
event: [tag]
|
||||
environment:
|
||||
GITEA_TOKEN:
|
||||
from_secret: DEPLOY_TOKEN
|
||||
commands:
|
||||
- goreleaser release --clean --verbose
|
||||
15
Makefile
15
Makefile
@@ -16,7 +16,7 @@
|
||||
|
||||
#
|
||||
# no need to modify anything below
|
||||
tool = kage-viewer
|
||||
tool = kageviewer
|
||||
VERSION = $(shell grep VERSION config.go | head -1 | cut -d '"' -f2)
|
||||
archs = darwin freebsd linux windows
|
||||
PREFIX = /usr/local
|
||||
@@ -44,7 +44,7 @@ shader-destruct: buildlocal
|
||||
./$(tool) -g 32x32 -i example/wall.png -i example/damage.png --map-ticks Time -s example/destruct.kage
|
||||
|
||||
shader-ebiten: buildlocal
|
||||
./$(tool) -g 640x480 --map-ticks Time --map-mouse Cursor -s example/ebiten.kage
|
||||
./$(tool) -g 640x480 --map-mouse Cursor -s example/ebiten.kage
|
||||
|
||||
test: clean
|
||||
mkdir -p t/out
|
||||
@@ -72,15 +72,12 @@ cover-report:
|
||||
goupdate:
|
||||
go get -t -u=patch ./...
|
||||
|
||||
buildall:
|
||||
./mkrel.sh $(tool) $(VERSION)
|
||||
|
||||
release: buildall
|
||||
gh release create v$(VERSION) --generate-notes releases/*
|
||||
release:
|
||||
gh release create v$(VERSION) --generate-notes
|
||||
|
||||
show-versions: buildlocal
|
||||
@echo "### kage-viewer version:"
|
||||
@./kage-viewer -V
|
||||
@echo "### kageviewer version:"
|
||||
@./kageviewer -V
|
||||
|
||||
@echo
|
||||
@echo "### go module versions:"
|
||||
|
||||
18
Makefile.dist
Normal file
18
Makefile.dist
Normal file
@@ -0,0 +1,18 @@
|
||||
# -*-make-*-
|
||||
|
||||
.PHONY: install all
|
||||
|
||||
tool = rpn
|
||||
PREFIX = /usr/local
|
||||
UID = root
|
||||
GID = 0
|
||||
|
||||
all:
|
||||
@echo "Type 'sudo make install' to install the tool."
|
||||
@echo "To change prefix, type 'sudo make install PREFIX=/opt'"
|
||||
|
||||
install:
|
||||
install -d -o $(UID) -g $(GID) $(PREFIX)/bin
|
||||
install -d -o $(UID) -g $(GID) $(PREFIX)/share/doc
|
||||
install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
|
||||
install -o $(UID) -g $(GID) -m 444 *.md $(PREFIX)/share/doc/
|
||||
79
README.md
79
README.md
@@ -1,53 +1,32 @@
|
||||
# kage-viewer - Viewer for shaders written in Kage, similar to glslviewer
|
||||
# kageviewer - Viewer for shaders written in Kage, similar to glslviewer
|
||||
|
||||

|
||||

|
||||
|
||||
[](https://github.com/tlinden/kage-viewer/blob/master/LICENSE)
|
||||
[](https://goreportcard.com/report/github.com/tlinden/kage-viewer)
|
||||
[](https://codeberg.org/scip/kageviewer/raw/branch/main/LICENSE)
|
||||
[](https://goreportcard.com/report/codeberg.org/scip/kageviewer)
|
||||
[](https://ci.codeberg.org/repos/15617)
|
||||
|
||||
This little tool can be used to test shaders written in
|
||||
[Kage](https://ebitengine.org/en/documents/shader.html), a shader meta
|
||||
language for
|
||||
[Ebitengine](https://github.com/hajimehoshi/ebiten). kage-viewer
|
||||
[Ebitengine](https://github.com/hajimehoshi/ebiten). kageviewer
|
||||
reloads changed assets, which allows you to develop your shader and
|
||||
see live, how it responds to your changes. If loading fails, an error
|
||||
will be printed to STDOUT. The same applies for images.
|
||||
|
||||
## Screenshot
|
||||
|
||||

|
||||

|
||||
|
||||
## Installation
|
||||
|
||||
The tool does not have any dependencies. Just download the binary for
|
||||
your platform from the releases page and you're good to go.
|
||||
Since `kageviewer` is primarily aimed at golang game developers, no
|
||||
pre built binaries are provided.
|
||||
|
||||
### Installation using a pre-compiled binary
|
||||
|
||||
Go to the [latest release page](https://github.com/TLINDEN/kage-viewer/releases/latest)
|
||||
and look for your OS and platform. There are two options to install the binary:
|
||||
|
||||
Directly download the binary for your platform,
|
||||
e.g. `kage-viewer-linux-amd64-0.0.2`, rename it to `kage-viewer` (or whatever
|
||||
you like more!) and put it into your bin dir (e.g. `$HOME/bin` or as
|
||||
root to `/usr/local/bin`).
|
||||
|
||||
Be sure to verify the signature of the binary file. For this also
|
||||
download the matching `kage-viewer-linux-amd64-0.0.2.sha256` file and:
|
||||
### Installation with go
|
||||
|
||||
```shell
|
||||
cat kage-viewer-linux-amd64-0.0.2.sha25 && sha256sum kage-viewer-linux-amd64-0.0.2
|
||||
```
|
||||
You should see the same SHA256 hash.
|
||||
|
||||
You may also download a binary tarball for your platform, e.g.
|
||||
`kage-viewer-linux-amd64-0.0.2.tar.gz`, unpack and install it. GNU Make is
|
||||
required for this:
|
||||
|
||||
```shell
|
||||
tar xvfz kage-viewer-linux-amd64-0.0.2.tar.gz
|
||||
cd kage-viewer-linux-amd64-0.0.2
|
||||
sudo make install
|
||||
go install codeberg.org/scip/kageviewer@latest
|
||||
```
|
||||
|
||||
### Installation from source
|
||||
@@ -56,8 +35,8 @@ You will need the Golang toolchain in order to build from source. GNU
|
||||
Make will also help but is not strictly neccessary.
|
||||
|
||||
If you want to compile the tool yourself, use `git clone` to clone the
|
||||
repository. Then execute `go mod tidy` to install all
|
||||
dependencies. Then just enter `go build` or - if you have GNU Make
|
||||
repository. Then execute `go mod tidy` to install all
|
||||
dependencies. Then just enter `go build` or - if you have GNU Make
|
||||
installed - `make`.
|
||||
|
||||
To install after building either copy the binary or execute `sudo make
|
||||
@@ -66,10 +45,10 @@ install`.
|
||||
# Usage
|
||||
|
||||
```shell
|
||||
kage-viewer -h
|
||||
This is kage-viewer, a shader viewer.
|
||||
kageviewer -h
|
||||
This is kageviewer, a shader viewer.
|
||||
|
||||
Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
||||
Usage: kageviewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
||||
-i <image0.png> -i <image1.png> -s <shader.kage>
|
||||
|
||||
Options:
|
||||
@@ -81,9 +60,10 @@ Options:
|
||||
-b --background <png file> Image to load as background
|
||||
-t --tps <ticks/s> At how many ticks per second to run
|
||||
--map-flag <name> Map Flag uniform to <name>
|
||||
--map-ticks <name> Map Flag uniform to <name>
|
||||
--map-slider <name> Map Flag uniform to <name>
|
||||
--map-mouse <name> Map Flag uniform to <name>
|
||||
--map-ticks <name> Map Ticks uniform to <name>
|
||||
--map-time <name> Map Time uniform to <name>
|
||||
--map-slider <name> Map Slider uniform to <name>
|
||||
--map-mouse <name> Map Mouse uniform to <name>
|
||||
-d --debug Show debugging output
|
||||
-v --version Show program version
|
||||
```
|
||||
@@ -91,7 +71,7 @@ Options:
|
||||
Example usage using the provided example:
|
||||
|
||||
```shell
|
||||
kage-viewer -g 32x32 -i example/wall.png -i example/damage.png -s example/destruct.kg
|
||||
kageviewer -g 32x32 -i example/wall.png -i example/damage.png -s example/destruct.kg
|
||||
```
|
||||
|
||||
Hit `SPACE` or press the left mouse button to toggle the damage
|
||||
@@ -108,15 +88,16 @@ Uniforms supported so far:
|
||||
`SPACE` or pusing the left mouse button
|
||||
- `var Slider float`: a normalized float value, you can increment it
|
||||
with `UP` or `DOWN`
|
||||
- `var Ticks float`: the time the game runs (ticks, not seconds!)
|
||||
- `var Time float`: the time the game runs (ticks / TPS)
|
||||
- `var Ticks float`: the number of updates happened so far
|
||||
- `var Mouse vec2`: the current mouse position
|
||||
|
||||
If you want to test an existing shader and don't want to rename the
|
||||
uniforms, you can map the ones provided by **kage-viewer** to custom
|
||||
uniforms, you can map the ones provided by **kageviewer** to custom
|
||||
names using the `--map-*` options. For example:
|
||||
|
||||
```shell
|
||||
kage-viewer -g 640x480 --map-ticks Time --map-mouse Cursor examples/shader/default.go
|
||||
kageviewer -g 640x480 --map-ticks Time --map-mouse Cursor examples/shader/default.go
|
||||
```
|
||||
|
||||
This executes the example shader in the ebitenging source repository.
|
||||
@@ -126,10 +107,10 @@ This executes the example shader in the ebitenging source repository.
|
||||
You can use a config file to store your own codes, once you found one
|
||||
you like. A configfile is searched in these locations in this order:
|
||||
|
||||
* `/etc/kage-viewer.conf`
|
||||
* `/usr/local/etc/kage-viewer.conf`
|
||||
* `$HOME/.config/kage-viewer/config`
|
||||
* `$HOME/.kage-viewer`
|
||||
* `/etc/kageviewer.conf`
|
||||
* `/usr/local/etc/kageviewer.conf`
|
||||
* `$HOME/.config/kageviewer/config`
|
||||
* `$HOME/.kageviewer`
|
||||
|
||||
You may also specify a config file on the commandline using the `-c`
|
||||
flag.
|
||||
@@ -148,7 +129,7 @@ Possible parameters equal the long command line options.
|
||||
|
||||
# Report bugs
|
||||
|
||||
[Please open an issue](https://github.com/TLINDEN/kage-viewer/issues). Thanks!
|
||||
[Please open an issue](https://codeberg.org/scip/kageviewer/issues). Thanks!
|
||||
|
||||
# License
|
||||
|
||||
|
||||
45
config.go
45
config.go
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -32,10 +33,10 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
VERSION string = "0.0.4"
|
||||
Usage string = `This is kage-viewer, a shader viewer.
|
||||
VERSION string = "0.0.6"
|
||||
Usage string = `This is kageviewer, a shader viewer.
|
||||
|
||||
Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
||||
Usage: kageviewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
||||
-i <image0.png> -i <image1.png> -s <shader.kage>
|
||||
|
||||
Options:
|
||||
@@ -47,12 +48,12 @@ Options:
|
||||
-b --background <png file> Image to load as background
|
||||
-t --tps <ticks/s> At how many ticks per second to run
|
||||
--map-flag <name> Map Flag uniform to <name>
|
||||
--map-ticks <name> Map Flag uniform to <name>
|
||||
--map-slider <name> Map Flag uniform to <name>
|
||||
--map-mouse <name> Map Flag uniform to <name>
|
||||
--map-ticks <name> Map Ticks uniform to <name>
|
||||
--map-time <name> Map Time uniform to <name>
|
||||
--map-slider <name> Map Slider uniform to <name>
|
||||
--map-mouse <name> Map Mouse uniform to <name>
|
||||
-d --debug Show debugging output
|
||||
-v --version Show program version
|
||||
`
|
||||
-v --version Show program version`
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
@@ -69,6 +70,7 @@ type Config struct {
|
||||
Ticks string `koanf:"map-ticks"`
|
||||
Mouse string `koanf:"map-mouse"`
|
||||
Slider string `koanf:"map-slider"`
|
||||
Time string `koanf:"map-time"`
|
||||
|
||||
X, Y, Width, Height int // feed from -g + -p
|
||||
}
|
||||
@@ -79,7 +81,7 @@ func InitConfig() (*Config, error) {
|
||||
// setup custom usage
|
||||
flagset := flag.NewFlagSet("config", flag.ContinueOnError)
|
||||
flagset.Usage = func() {
|
||||
fmt.Println(Usage)
|
||||
_, _ = fmt.Println(Usage)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
@@ -93,6 +95,7 @@ func InitConfig() (*Config, error) {
|
||||
flagset.StringP("shader", "s", "", "shader file")
|
||||
flagset.StringP("map-flag", "", "Flag", "map flag uniform")
|
||||
flagset.StringP("map-ticks", "", "Ticks", "map ticks uniform")
|
||||
flagset.StringP("map-time", "", "Time", "map time uniform")
|
||||
flagset.StringP("map-mouse", "", "Mouse", "map mouse uniform")
|
||||
flagset.StringP("map-slider", "", "Slider", "map slider uniform")
|
||||
flagset.StringP("background", "b", "", "background image")
|
||||
@@ -113,10 +116,10 @@ func InitConfig() (*Config, error) {
|
||||
configfiles = []string{configfile}
|
||||
} else {
|
||||
configfiles = []string{
|
||||
"/etc/kage-viewer.conf", "/usr/local/etc/kage-viewer.conf", // unix variants
|
||||
filepath.Join(home, ".config", "kage-viewer", "config"),
|
||||
filepath.Join(home, ".kage-viewer"),
|
||||
"kage-viewer.conf",
|
||||
"/etc/kageviewer.conf", "/usr/local/etc/kageviewer.conf", // unix variants
|
||||
filepath.Join(home, ".config", "kageviewer", "config"),
|
||||
filepath.Join(home, ".kageviewer"),
|
||||
"kageviewer.conf",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,13 +165,13 @@ func SanitiyCheck(conf *Config) error {
|
||||
|
||||
geo := strings.Split(conf.Geo, "x")
|
||||
if len(geo) != 2 {
|
||||
return fmt.Errorf(geoerr)
|
||||
return errors.New(geoerr)
|
||||
}
|
||||
|
||||
w, errw := strconv.Atoi(geo[0])
|
||||
h, errh := strconv.Atoi(geo[1])
|
||||
if errw != nil || errh != nil {
|
||||
return fmt.Errorf(geoerr)
|
||||
return errors.New(geoerr)
|
||||
}
|
||||
|
||||
conf.Width = w
|
||||
@@ -178,13 +181,13 @@ func SanitiyCheck(conf *Config) error {
|
||||
|
||||
pos := strings.Split(conf.Posision, "x")
|
||||
if len(geo) != 2 {
|
||||
return fmt.Errorf(poserr)
|
||||
return errors.New(poserr)
|
||||
}
|
||||
|
||||
x, errx := strconv.Atoi(pos[0])
|
||||
y, erry := strconv.Atoi(pos[1])
|
||||
if errx != nil || erry != nil {
|
||||
return fmt.Errorf(poserr)
|
||||
return errors.New(poserr)
|
||||
}
|
||||
|
||||
conf.X = x
|
||||
@@ -192,11 +195,3 @@ func SanitiyCheck(conf *Config) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func fileExists(filename string) bool {
|
||||
info, err := os.Stat(filename)
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
return !info.IsDir()
|
||||
}
|
||||
|
||||
57
game.go
57
game.go
@@ -30,14 +30,15 @@ import (
|
||||
)
|
||||
|
||||
type Game struct {
|
||||
Conf *Config
|
||||
Images []*asset.LiveAsset[*ebiten.Image]
|
||||
Shader *asset.LiveAsset[*ebiten.Shader]
|
||||
Cursor []float64
|
||||
Ticks int
|
||||
Slider float64
|
||||
Flag int
|
||||
Background *asset.LiveAsset[*ebiten.Image]
|
||||
Conf *Config
|
||||
Images []*asset.LiveAsset[*ebiten.Image]
|
||||
Shader *asset.LiveAsset[*ebiten.Shader]
|
||||
ShaderBounds image.Rectangle
|
||||
Cursor []float64
|
||||
Ticks float64
|
||||
Slider float64
|
||||
Flag int
|
||||
Background *asset.LiveAsset[*ebiten.Image]
|
||||
}
|
||||
|
||||
func LoadImage(name string) (*ebiten.Image, error) {
|
||||
@@ -45,7 +46,9 @@ func LoadImage(name string) (*ebiten.Image, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer fd.Close()
|
||||
defer func() {
|
||||
_ = fd.Close()
|
||||
}()
|
||||
|
||||
img, _, err := image.Decode(fd)
|
||||
if err != nil {
|
||||
@@ -56,6 +59,7 @@ func LoadImage(name string) (*ebiten.Image, error) {
|
||||
}
|
||||
|
||||
func (game *Game) Init() error {
|
||||
// preload images
|
||||
for _, image := range game.Conf.Image {
|
||||
slog.Debug("Loading images", "image", image)
|
||||
//img, err := LoadImage(image)
|
||||
@@ -67,6 +71,7 @@ func (game *Game) Init() error {
|
||||
game.Images = append(game.Images, img)
|
||||
}
|
||||
|
||||
// preload shader
|
||||
shader, err := asset.NewLiveAsset[*ebiten.Shader](game.Conf.Shader)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to load shader %s: %s", game.Conf.Shader, err)
|
||||
@@ -85,7 +90,30 @@ func (game *Game) Init() error {
|
||||
|
||||
game.Shader = shader
|
||||
|
||||
ebiten.SetMaxTPS(game.Conf.TPS)
|
||||
// user can customize TPS
|
||||
ebiten.SetTPS(game.Conf.TPS)
|
||||
|
||||
// setup shader bounds, by default we use window size
|
||||
game.ShaderBounds = image.Rect(0, 0, game.Conf.Width, game.Conf.Height)
|
||||
|
||||
if len(game.Images) > 0 {
|
||||
if game.Conf.Width < game.Images[0].Value().Bounds().Max.X {
|
||||
// setup geom. Shader might be smaller than window, we use the
|
||||
// first image - if any - to determine its size. We also enlarge
|
||||
// the window if the first image is larger than the window.
|
||||
game.Conf.Width = game.Images[0].Value().Bounds().Max.X
|
||||
game.Conf.Height = game.Images[0].Value().Bounds().Max.Y
|
||||
}
|
||||
|
||||
// adjust shader size by first image as well
|
||||
game.ShaderBounds = game.Images[0].Value().Bounds()
|
||||
} else {
|
||||
// there might be no shader image but a background image, check it
|
||||
if game.Background != nil {
|
||||
game.Conf.Width = game.Background.Value().Bounds().Max.X
|
||||
game.Conf.Height = game.Background.Value().Bounds().Max.Y
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -176,8 +204,9 @@ func (game *Game) Draw(screen *ebiten.Image) {
|
||||
op.Uniforms = map[string]any{
|
||||
game.Conf.Flag: game.Flag,
|
||||
game.Conf.Slider: game.Slider,
|
||||
game.Conf.Ticks: float64(game.Ticks) / 60,
|
||||
game.Conf.Time: game.Ticks / float64(ebiten.TPS()),
|
||||
game.Conf.Mouse: game.Cursor,
|
||||
game.Conf.Ticks: game.Ticks,
|
||||
}
|
||||
|
||||
for idx, image := range game.Images {
|
||||
@@ -186,7 +215,11 @@ func (game *Game) Draw(screen *ebiten.Image) {
|
||||
|
||||
op.GeoM.Translate(float64(game.Conf.X), float64(game.Conf.Y))
|
||||
|
||||
screen.DrawRectShader(game.Conf.Width, game.Conf.Height, game.Shader.Value(), op)
|
||||
screen.DrawRectShader(
|
||||
game.ShaderBounds.Dx(),
|
||||
game.ShaderBounds.Dy(),
|
||||
game.Shader.Value(),
|
||||
op)
|
||||
}
|
||||
|
||||
func (game *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
|
||||
|
||||
2
go.mod
2
go.mod
@@ -1,4 +1,4 @@
|
||||
module github.com/TLINDEN/kage-viewer
|
||||
module codeberg.org/scip/kageviewer
|
||||
|
||||
go 1.22
|
||||
|
||||
|
||||
4
main.go
4
main.go
@@ -36,7 +36,7 @@ func main() {
|
||||
}
|
||||
|
||||
if conf.Showversion {
|
||||
fmt.Printf("This is kage-viewer version %s\n", VERSION)
|
||||
fmt.Printf("This is kageviewer version %s\n", VERSION)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ func main() {
|
||||
|
||||
ebiten.SetWindowSize(game.Conf.Width, game.Conf.Height)
|
||||
ebiten.SetWindowTitle("Kage shader viewer")
|
||||
ebiten.SetWindowResizable(true)
|
||||
ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
|
||||
|
||||
if err := ebiten.RunGame(game); err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
80
mkrel.sh
80
mkrel.sh
@@ -1,80 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright © 2024 Thomas von Dein
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# get list with: go tool dist list
|
||||
DIST="darwin/amd64
|
||||
freebsd/amd64
|
||||
linux/amd64
|
||||
netbsd/amd64
|
||||
openbsd/amd64
|
||||
windows/amd64
|
||||
freebsd/arm64
|
||||
linux/arm64
|
||||
netbsd/arm64
|
||||
openbsd/arm64
|
||||
windows/arm64"
|
||||
|
||||
DIST="linux/amd64
|
||||
windows/amd64
|
||||
windows/arm64"
|
||||
|
||||
tool="$1"
|
||||
version="$2"
|
||||
|
||||
if test -z "$version"; then
|
||||
echo "Usage: $0 <tool name> <release version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf releases
|
||||
mkdir -p releases
|
||||
|
||||
|
||||
for D in $DIST; do
|
||||
os=${D/\/*/}
|
||||
arch=${D/*\//}
|
||||
binfile="releases/${tool}-${os}-${arch}-${version}"
|
||||
|
||||
if test "$os" = "windows"; then
|
||||
binfile="${binfile}.exe"
|
||||
fi
|
||||
|
||||
tardir="${tool}-${os}-${arch}-${version}"
|
||||
tarfile="releases/${tool}-${os}-${arch}-${version}.tar.gz"
|
||||
set -x
|
||||
#GOOS=${os} GOARCH=${arch} go build -tags osusergo,netgo -ldflags "-extldflags=-static" -o ${binfile}
|
||||
GOOS=${os} GOARCH=${arch} go build -o ${binfile}
|
||||
mkdir -p ${tardir}
|
||||
cp ${binfile} README.md LICENSE ${tardir}/
|
||||
echo 'tool = kage-viewer
|
||||
PREFIX = /usr/local
|
||||
UID = root
|
||||
GID = 0
|
||||
|
||||
install:
|
||||
install -d -o $(UID) -g $(GID) $(PREFIX)/bin
|
||||
install -d -o $(UID) -g $(GID) $(PREFIX)/man/man1
|
||||
install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
|
||||
install -o $(UID) -g $(GID) -m 444 $(tool).1 $(PREFIX)/man/man1/' > ${tardir}/Makefile
|
||||
tar cpzf ${tarfile} ${tardir}
|
||||
sha256sum ${binfile} | cut -d' ' -f1 > ${binfile}.sha256
|
||||
sha256sum ${tarfile} | cut -d' ' -f1 > ${tarfile}.sha256
|
||||
rm -rf ${tardir}
|
||||
set +x
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user