mirror of
https://codeberg.org/scip/kageviewer.git
synced 2025-12-19 13:31:04 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e42df9080f | |||
| 8cd2d74a8b | |||
| 490afb1d76 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
releases
|
releases
|
||||||
|
kage-viewer
|
||||||
|
|||||||
6
Makefile
6
Makefile
@@ -40,6 +40,12 @@ install: buildlocal
|
|||||||
clean:
|
clean:
|
||||||
rm -rf $(tool) coverage.out testdata t/out
|
rm -rf $(tool) coverage.out testdata t/out
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
test: clean
|
test: clean
|
||||||
mkdir -p t/out
|
mkdir -p t/out
|
||||||
go test ./... $(ARGS)
|
go test ./... $(ARGS)
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -66,6 +66,10 @@ Options:
|
|||||||
-s --shader <kage file> Shader to run
|
-s --shader <kage file> Shader to run
|
||||||
-g --geometry <WIDTHxHEIGHT> Window size
|
-g --geometry <WIDTHxHEIGHT> Window size
|
||||||
-p --position <XxY> Position of image0
|
-p --position <XxY> Position of image0
|
||||||
|
--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>
|
||||||
-d --debug Show debugging output
|
-d --debug Show debugging output
|
||||||
-v --version Show program version
|
-v --version Show program version
|
||||||
```
|
```
|
||||||
@@ -90,9 +94,19 @@ Uniforms supported so far:
|
|||||||
`SPACE` or pusing the left mouse button
|
`SPACE` or pusing the left mouse button
|
||||||
- `var Slider float`: a normalized float value, you can increment it
|
- `var Slider float`: a normalized float value, you can increment it
|
||||||
with `UP` or `DOWN`
|
with `UP` or `DOWN`
|
||||||
- `var Ticks int`: the time the game runs (ticks, not seconds!)
|
- `var Ticks float`: the time the game runs (ticks, not seconds!)
|
||||||
- `var Mouse vec2`: the current mouse position
|
- `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
|
||||||
|
names using the `--map-*` options. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kage-viewer -g 640x480 --map-ticks Time --map-mouse Cursor examples/shader/default.go
|
||||||
|
```
|
||||||
|
|
||||||
|
This executes the example shader in the ebitenging source repository.
|
||||||
|
|
||||||
# Config File
|
# Config File
|
||||||
|
|
||||||
You can use a config file to store your own codes, once you found one
|
You can use a config file to store your own codes, once you found one
|
||||||
|
|||||||
26
config.go
26
config.go
@@ -32,7 +32,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VERSION string = "0.0.1"
|
VERSION string = "0.0.2"
|
||||||
Usage string = `This is kage-viewer, a shader viewer.
|
Usage string = `This is kage-viewer, a shader viewer.
|
||||||
|
|
||||||
Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
Usage: kage-viewer [-vd] [-c <config file>] [-g geom] [-p geom] \
|
||||||
@@ -44,6 +44,10 @@ Options:
|
|||||||
-s --shader <kage file> Shader to run
|
-s --shader <kage file> Shader to run
|
||||||
-g --geometry <WIDTHxHEIGHT> Window size
|
-g --geometry <WIDTHxHEIGHT> Window size
|
||||||
-p --position <XxY> Position of image0
|
-p --position <XxY> Position of image0
|
||||||
|
--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>
|
||||||
-d --debug Show debugging output
|
-d --debug Show debugging output
|
||||||
-v --version Show program version
|
-v --version Show program version
|
||||||
`
|
`
|
||||||
@@ -57,6 +61,10 @@ type Config struct {
|
|||||||
Shader string `koanf:"shader"` // -s
|
Shader string `koanf:"shader"` // -s
|
||||||
Geo string `koanf:"geometry"` // -g
|
Geo string `koanf:"geometry"` // -g
|
||||||
Posision string `koanf:"position"` // -p
|
Posision string `koanf:"position"` // -p
|
||||||
|
Flag string `koanf:"map-flag"`
|
||||||
|
Ticks string `koanf:"map-ticks"`
|
||||||
|
Mouse string `koanf:"map-mouse"`
|
||||||
|
Slider string `koanf:"map-slider"`
|
||||||
|
|
||||||
X, Y, Width, Height int // feed from -g + -p
|
X, Y, Width, Height int // feed from -g + -p
|
||||||
}
|
}
|
||||||
@@ -64,14 +72,6 @@ type Config struct {
|
|||||||
func InitConfig() (*Config, error) {
|
func InitConfig() (*Config, error) {
|
||||||
var kloader = koanf.New(".")
|
var kloader = koanf.New(".")
|
||||||
|
|
||||||
// Load default values using the confmap provider.
|
|
||||||
/* not needed yet
|
|
||||||
if err := kloader.Load(confmap.Provider(map[string]interface{}{
|
|
||||||
}, "."), nil); err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to load default values into koanf: %w", err)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// setup custom usage
|
// setup custom usage
|
||||||
flagset := flag.NewFlagSet("config", flag.ContinueOnError)
|
flagset := flag.NewFlagSet("config", flag.ContinueOnError)
|
||||||
flagset.Usage = func() {
|
flagset.Usage = func() {
|
||||||
@@ -87,6 +87,10 @@ func InitConfig() (*Config, error) {
|
|||||||
flagset.StringP("position", "p", "0x0", "position of shader")
|
flagset.StringP("position", "p", "0x0", "position of shader")
|
||||||
flagset.StringArrayP("image", "i", nil, "image file")
|
flagset.StringArrayP("image", "i", nil, "image file")
|
||||||
flagset.StringP("shader", "s", "", "shader file")
|
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-mouse", "", "Mouse", "map mouse uniform")
|
||||||
|
flagset.StringP("map-slider", "", "Slider", "map slider uniform")
|
||||||
|
|
||||||
if err := flagset.Parse(os.Args[1:]); err != nil {
|
if err := flagset.Parse(os.Args[1:]); err != nil {
|
||||||
return nil, fmt.Errorf("failed to parse program arguments: %w", err)
|
return nil, fmt.Errorf("failed to parse program arguments: %w", err)
|
||||||
@@ -140,8 +144,8 @@ func InitConfig() (*Config, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SanitiyCheck(conf *Config) error {
|
func SanitiyCheck(conf *Config) error {
|
||||||
if len(conf.Image) < 1 {
|
if len(conf.Image) > 4 {
|
||||||
return fmt.Errorf("at least 1 image must be specified")
|
return fmt.Errorf("only 4 images can be specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
if conf.Shader == "" {
|
if conf.Shader == "" {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ package main
|
|||||||
|
|
||||||
var Flag int
|
var Flag int
|
||||||
var Slider float
|
var Slider float
|
||||||
var Time int
|
var Time float
|
||||||
var Mouse vec2
|
var Mouse vec2
|
||||||
|
|
||||||
func Fragment(_ vec4, texCoord vec2, _ vec4) vec4 {
|
func Fragment(_ vec4, texCoord vec2, _ vec4) vec4 {
|
||||||
33
example/ebiten.kage
Normal file
33
example/ebiten.kage
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2020 The Ebiten Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
//go:build ignore
|
||||||
|
|
||||||
|
//kage:unit pixels
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
var Time float
|
||||||
|
var Cursor vec2
|
||||||
|
|
||||||
|
func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 {
|
||||||
|
pos := (dstPos.xy - imageDstOrigin()) / imageDstSize()
|
||||||
|
pos += Cursor / imageDstSize() / 4
|
||||||
|
clr := 0.0
|
||||||
|
clr += sin(pos.x*cos(Time/15)*80) + cos(pos.y*cos(Time/15)*10)
|
||||||
|
clr += sin(pos.y*sin(Time/10)*40) + cos(pos.x*sin(Time/25)*40)
|
||||||
|
clr += sin(pos.x*sin(Time/5)*10) + sin(pos.y*sin(Time/35)*80)
|
||||||
|
clr *= sin(Time/10) * 0.5
|
||||||
|
return vec4(clr, clr*0.5, sin(clr+Time/3)*0.75, 1)
|
||||||
|
}
|
||||||
12
game.go
12
game.go
@@ -135,15 +135,13 @@ func (game *Game) Draw(screen *ebiten.Image) {
|
|||||||
mousex, mousey := ebiten.CursorPosition()
|
mousex, mousey := ebiten.CursorPosition()
|
||||||
|
|
||||||
op.Uniforms = map[string]any{
|
op.Uniforms = map[string]any{
|
||||||
"Flag": game.Flag,
|
game.Conf.Flag: game.Flag,
|
||||||
"Slider": game.Slider,
|
game.Conf.Slider: game.Slider,
|
||||||
"Ticks": game.Ticks,
|
game.Conf.Ticks: float64(game.Ticks) / 60,
|
||||||
"Mouse": []float64{float64(mousex), float64(mousey)},
|
game.Conf.Mouse: []float64{float64(mousex), float64(mousey)},
|
||||||
}
|
}
|
||||||
|
|
||||||
for idx, image := range game.Images {
|
copy(op.Images[:3], game.Images)
|
||||||
op.Images[idx] = image
|
|
||||||
}
|
|
||||||
|
|
||||||
op.GeoM.Translate(float64(game.Conf.X), float64(game.Conf.Y))
|
op.GeoM.Translate(float64(game.Conf.X), float64(game.Conf.Y))
|
||||||
|
|
||||||
|
|||||||
BIN
kage-viewer
BIN
kage-viewer
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
f73335dc3e4e65b089624e9580b02d38926597c59127ca507be03148ab229b4f
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
d7726c68b43c550c27a42f7586a418915d042ed9a444f651cb5159e37bdea4ab
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
91b57cfbaa1ec63b797fbb4c4b3892c2e462ec7668207a3c645917af9c7ac3d1
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
197bfab6dda912f8ed8f8d1b7afb1946d1c7640ab84ccb4a48c8d5d7c62fe8ea
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
c69df9ea174b69fb17e5f1e359106bce6105f6185e09531912e04398a4b72eff
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
5c61f307b7b576f10d4a5ae276dbb8070053efd060bbfda93f8535658478b2cf
|
|
||||||
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
df707023f0bd50fe1ff55e466f212c5668d6c488644b25d5880e64ca21c4f073
|
|
||||||
Reference in New Issue
Block a user