internal/shader: use plural forms for Kage compiler directives

This change renames

```
//kage:unit texel
//kage:unit pixel
```

to

```
//kage:unit texels
//kage:unit pixels
```

.

Closes #2717
This commit is contained in:
Hajime Hoshi 2023-08-01 11:41:27 +09:00
parent a0ffd8dd25
commit 63df6168d9
24 changed files with 107 additions and 107 deletions

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -14,7 +14,7 @@
//go:build ignore //go:build ignore
//kage:unit pixel //kage:unit pixels
package main package main

View File

@ -24,7 +24,7 @@ import (
"github.com/hajimehoshi/ebiten/v2/internal/ui" "github.com/hajimehoshi/ebiten/v2/internal/ui"
) )
const screenShaderSrc = `//kage:unit pixel const screenShaderSrc = `//kage:unit pixels
package main package main

View File

@ -740,7 +740,7 @@ var _ [len(DrawRectShaderOptions{}.Images)]struct{} = [graphics.ShaderImageCount
// //
// In a shader, texCoord in Fragment represents a position in a source image. // In a shader, texCoord in Fragment represents a position in a source image.
// If no source images are specified, texCoord represents the position from (0, 0) to (width, height) in pixels. // If no source images are specified, texCoord represents the position from (0, 0) to (width, height) in pixels.
// If the unit is pixels by a compiler directive `//kage:unit pixels`, texCoord values are valid. // If the unit is pixels by a compiler directive `//kage:unit pixelss`, texCoord values are valid.
// If the unit is texels (default), texCoord values still take from (0, 0) to (width, height), // If the unit is texels (default), texCoord values still take from (0, 0) to (width, height),
// but these are invalid since texCoord is expected to be in texels in the texel-unit mode. // but these are invalid since texCoord is expected to be in texels in the texel-unit mode.
// This behavior is preserved for backward compatibility. It is recommended to use the pixel-unit mode to avoid confusion. // This behavior is preserved for backward compatibility. It is recommended to use the pixel-unit mode to avoid confusion.
@ -787,7 +787,7 @@ func (i *Image) DrawRectShader(width, height int, shader *Shader, options *DrawR
b := img.Bounds() b := img.Bounds()
sx, sy = img.adjustPosition(b.Min.X, b.Min.Y) sx, sy = img.adjustPosition(b.Min.X, b.Min.Y)
sr = img.adjustedRegion() sr = img.adjustedRegion()
} else if shader.unit == shaderir.Pixel { } else if shader.unit == shaderir.Pixels {
// Give the source size as pixels only when the unit is pixels so that users can get the source size via imageSrcRegionOnTexture (#2166). // Give the source size as pixels only when the unit is pixels so that users can get the source size via imageSrcRegionOnTexture (#2166).
// With the texel mode, the imageSrcRegionOnTexture values should be in texels so the source position in pixels would not match. // With the texel mode, the imageSrcRegionOnTexture values should be in texels so the source position in pixels would not match.
sr = graphicsdriver.Region{ sr = graphicsdriver.Region{

View File

@ -412,7 +412,7 @@ func (i *Image) drawTriangles(srcs [graphics.ShaderImageCount]*Image, vertices [
vertices[i+2] += oxf vertices[i+2] += oxf
vertices[i+3] += oyf vertices[i+3] += oyf
} }
if shader.unit() == shaderir.Texel { if shader.unit() == shaderir.Texels {
sw, sh := srcs[0].backend.restorable.InternalSize() sw, sh := srcs[0].backend.restorable.InternalSize()
swf, shf := float32(sw), float32(sh) swf, shf := float32(sw), float32(sh)
for i := 0; i < n; i += graphics.VertexFloatCount { for i := 0; i < n; i += graphics.VertexFloatCount {

View File

@ -52,7 +52,7 @@ var (
shadersM sync.Mutex shadersM sync.Mutex
) )
var tmpl = template.Must(template.New("tmpl").Parse(`//kage:unit pixel var tmpl = template.Must(template.New("tmpl").Parse(`//kage:unit pixels
package main package main

View File

@ -79,9 +79,9 @@ func imageSrcRegionOnTexture() (vec2, vec2) {
if i >= 1 { if i >= 1 {
// Convert the position in texture0's positions to the target texture positions. // Convert the position in texture0's positions to the target texture positions.
switch unit { switch unit {
case shaderir.Pixel: case shaderir.Pixels:
pos = fmt.Sprintf("pos + __textureSourceOffsets[%d]", i-1) pos = fmt.Sprintf("pos + __textureSourceOffsets[%d]", i-1)
case shaderir.Texel: case shaderir.Texels:
pos = fmt.Sprintf("(pos * __textureSizes[0] + __textureSourceOffsets[%d]) / __textureSizes[%d]", i-1, i) pos = fmt.Sprintf("(pos * __textureSizes[0] + __textureSourceOffsets[%d]) / __textureSizes[%d]", i-1, i)
default: default:
return "", fmt.Errorf("graphics: unexpected unit: %d", unit) return "", fmt.Errorf("graphics: unexpected unit: %d", unit)

View File

@ -694,7 +694,7 @@ func (q *commandQueue) prependPreservedUniforms(uniforms []uint32, shader *Shade
uniforms[9] = math.Float32bits(float32(h)) uniforms[9] = math.Float32bits(float32(h))
} }
if shader.unit() == shaderir.Texel { if shader.unit() == shaderir.Texels {
dstRegion.X /= float32(dw) dstRegion.X /= float32(dw)
dstRegion.Y /= float32(dh) dstRegion.Y /= float32(dh)
dstRegion.Width /= float32(dw) dstRegion.Width /= float32(dw)
@ -707,7 +707,7 @@ func (q *commandQueue) prependPreservedUniforms(uniforms []uint32, shader *Shade
uniforms[12] = math.Float32bits(dstRegion.Width) uniforms[12] = math.Float32bits(dstRegion.Width)
uniforms[13] = math.Float32bits(dstRegion.Height) uniforms[13] = math.Float32bits(dstRegion.Height)
if shader.unit() == shaderir.Texel && srcs[0] != nil { if shader.unit() == shaderir.Texels && srcs[0] != nil {
w, h := srcs[0].InternalSize() w, h := srcs[0].InternalSize()
srcRegion.X /= float32(w) srcRegion.X /= float32(w)
srcRegion.Y /= float32(h) srcRegion.Y /= float32(h)

View File

@ -80,7 +80,7 @@ func init() {
return nil return nil
}) })
wg.Go(func() error { wg.Go(func() error {
ir, err := graphics.CompileShader([]byte(`//kage:unit pixel ir, err := graphics.CompileShader([]byte(`//kage:unit pixels
package main package main

View File

@ -220,7 +220,7 @@ func Compile(src []byte, vertexEntry, fragmentEntry string, textureCount int) (*
func ParseCompilerDirectives(src []byte) (shaderir.Unit, error) { func ParseCompilerDirectives(src []byte) (shaderir.Unit, error) {
// TODO: Change the unit to pixels in v3 (#2645). // TODO: Change the unit to pixels in v3 (#2645).
unit := shaderir.Texel unit := shaderir.Texels
reUnit := regexp.MustCompile(`^//kage:unit\s+(.+)$`) reUnit := regexp.MustCompile(`^//kage:unit\s+(.+)$`)
var unitParsed bool var unitParsed bool
@ -236,10 +236,10 @@ func ParseCompilerDirectives(src []byte) (shaderir.Unit, error) {
return 0, fmt.Errorf("shader: at most one //kage:unit can exist in a shader") return 0, fmt.Errorf("shader: at most one //kage:unit can exist in a shader")
} }
switch m[1] { switch m[1] {
case "pixel": case "pixels":
unit = shaderir.Pixel unit = shaderir.Pixels
case "texel": case "texels":
unit = shaderir.Texel unit = shaderir.Texels
default: default:
return 0, fmt.Errorf("shader: invalid value for //kage:unit: %s", m[1]) return 0, fmt.Errorf("shader: invalid value for //kage:unit: %s", m[1])
} }

View File

@ -53,7 +53,7 @@ func hlslNormalize(str string) string {
} }
func metalNormalize(str string) string { func metalNormalize(str string) string {
prelude := msl.Prelude(shaderir.Texel) prelude := msl.Prelude(shaderir.Texels)
if strings.HasPrefix(str, prelude) { if strings.HasPrefix(str, prelude) {
str = str[len(prelude):] str = str[len(prelude):]
} }

View File

@ -3137,29 +3137,29 @@ func TestCompilerDirective(t *testing.T) {
func Fragment(position vec4, texCoord vec2, color vec4) vec4 { func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
return position return position
}`, }`,
unit: shaderir.Texel, unit: shaderir.Texels,
err: false, err: false,
}, },
{ {
src: `//kage:unit texel src: `//kage:unit texels
package main package main
func Fragment(position vec4, texCoord vec2, color vec4) vec4 { func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
return position return position
}`, }`,
unit: shaderir.Texel, unit: shaderir.Texels,
err: false, err: false,
}, },
{ {
src: `//kage:unit pixel src: `//kage:unit pixels
package main package main
func Fragment(position vec4, texCoord vec2, color vec4) vec4 { func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
return position return position
}`, }`,
unit: shaderir.Pixel, unit: shaderir.Pixels,
err: false, err: false,
}, },
{ {
@ -3173,8 +3173,8 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
err: true, err: true,
}, },
{ {
src: `//kage:unit pixel src: `//kage:unit pixels
//kage:unit pixel //kage:unit pixels
package main package main
@ -3184,8 +3184,8 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
err: true, err: true,
}, },
{ {
src: `//kage:unit pixel src: `//kage:unit pixels
//kage:unit texel //kage:unit texels
package main package main

View File

@ -122,7 +122,7 @@ func (c *compileContext) builtinFuncString(f shaderir.BuiltinFunc) string {
case shaderir.Dfdy: case shaderir.Dfdy:
return "dFdy" return "dFdy"
case shaderir.TexelAt: case shaderir.TexelAt:
if c.unit == shaderir.Pixel { if c.unit == shaderir.Pixels {
return "texelFetch" return "texelFetch"
} }
return "texture" return "texture"

View File

@ -121,7 +121,7 @@ func Compile(p *shaderir.Program) (vertexShader, pixelShader string, offsets []i
for i := 0; i < p.TextureCount; i++ { for i := 0; i < p.TextureCount; i++ {
lines = append(lines, fmt.Sprintf("Texture2D T%[1]d : register(t%[1]d);", i)) lines = append(lines, fmt.Sprintf("Texture2D T%[1]d : register(t%[1]d);", i))
} }
if c.unit == shaderir.Texel { if c.unit == shaderir.Texels {
lines = append(lines, "SamplerState samp : register(s0);") lines = append(lines, "SamplerState samp : register(s0);")
} }
} }
@ -471,9 +471,9 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
} }
case shaderir.TexelAt: case shaderir.TexelAt:
switch c.unit { switch c.unit {
case shaderir.Pixel: case shaderir.Pixels:
return fmt.Sprintf("%s.Load(int3(%s, 0))", args[0], strings.Join(args[1:], ", ")) return fmt.Sprintf("%s.Load(int3(%s, 0))", args[0], strings.Join(args[1:], ", "))
case shaderir.Texel: case shaderir.Texels:
return fmt.Sprintf("%s.Sample(samp, %s)", args[0], strings.Join(args[1:], ", ")) return fmt.Sprintf("%s.Sample(samp, %s)", args[0], strings.Join(args[1:], ", "))
default: default:
panic(fmt.Sprintf("hlsl: unexpected unit: %d", p.Unit)) panic(fmt.Sprintf("hlsl: unexpected unit: %d", p.Unit))

View File

@ -181,7 +181,7 @@ func TestOutput(t *testing.T) {
{ {
Name: "Empty", Name: "Empty",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
}, },
GlslVS: glsl.VertexPrelude(glsl.GLSLVersionDefault), GlslVS: glsl.VertexPrelude(glsl.GLSLVersionDefault),
GlslFS: glsl.FragmentPrelude(glsl.GLSLVersionDefault), GlslFS: glsl.FragmentPrelude(glsl.GLSLVersionDefault),
@ -189,7 +189,7 @@ func TestOutput(t *testing.T) {
{ {
Name: "Uniform", Name: "Uniform",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Uniforms: []shaderir.Type{ Uniforms: []shaderir.Type{
{Main: shaderir.Float}, {Main: shaderir.Float},
}, },
@ -202,7 +202,7 @@ uniform float U0;`,
{ {
Name: "UniformStruct", Name: "UniformStruct",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Uniforms: []shaderir.Type{ Uniforms: []shaderir.Type{
{ {
Main: shaderir.Struct, Main: shaderir.Struct,
@ -228,7 +228,7 @@ uniform S0 U0;`,
{ {
Name: "Vars", Name: "Vars",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Uniforms: []shaderir.Type{ Uniforms: []shaderir.Type{
{Main: shaderir.Float}, {Main: shaderir.Float},
}, },
@ -250,7 +250,7 @@ in vec3 V0;`,
{ {
Name: "Func", Name: "Func",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -271,7 +271,7 @@ void F0(void) {
{ {
Name: "FuncParams", Name: "FuncParams",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -300,7 +300,7 @@ void F0(in float l0, in vec2 l1, in vec4 l2, out mat4 l3) {
{ {
Name: "FuncReturn", Name: "FuncReturn",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -334,7 +334,7 @@ float F0(in float l0) {
{ {
Name: "FuncLocals", Name: "FuncLocals",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -369,7 +369,7 @@ void F0(in float l0, out float l1) {
{ {
Name: "FuncBlocks", Name: "FuncBlocks",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -424,7 +424,7 @@ void F0(in float l0, out float l1) {
{ {
Name: "Add", Name: "Add",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -466,7 +466,7 @@ void F0(in float l0, in float l1, out float l2) {
{ {
Name: "Selection", Name: "Selection",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -509,7 +509,7 @@ void F0(in bool l0, in float l1, in float l2, out float l3) {
{ {
Name: "Call", Name: "Call",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -558,7 +558,7 @@ void F0(in float l0, in float l1, out vec2 l2) {
{ {
Name: "BuiltinFunc", Name: "BuiltinFunc",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -600,7 +600,7 @@ void F0(in float l0, in float l1, out float l2) {
{ {
Name: "FieldSelector", Name: "FieldSelector",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -640,7 +640,7 @@ void F0(in vec4 l0, out vec2 l1) {
{ {
Name: "If", Name: "If",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -705,7 +705,7 @@ void F0(in float l0, in float l1, out float l2) {
{ {
Name: "For", Name: "For",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -761,7 +761,7 @@ void F0(in float l0, in float l1, out float l2) {
{ {
Name: "For2", Name: "For2",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -817,7 +817,7 @@ void F0(in float l0, in float l1, out float l2) {
l2 = l4; l2 = l4;
} }
}`, }`,
Metal: msl.Prelude(shaderir.Pixel) + ` Metal: msl.Prelude(shaderir.Pixels) + `
void F0(float l0, float l1, thread float& l2); void F0(float l0, float l1, thread float& l2);
@ -831,7 +831,7 @@ void F0(float l0, float l1, thread float& l2) {
{ {
Name: "For3", Name: "For3",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Funcs: []shaderir.Func{ Funcs: []shaderir.Func{
{ {
Index: 0, Index: 0,
@ -914,7 +914,7 @@ void F0(in float l0, in float l1, out float l2) {
l2 = l5; l2 = l5;
} }
}`, }`,
Metal: msl.Prelude(shaderir.Pixel) + ` Metal: msl.Prelude(shaderir.Pixels) + `
void F0(float l0, float l1, thread float& l2); void F0(float l0, float l1, thread float& l2);
@ -932,7 +932,7 @@ void F0(float l0, float l1, thread float& l2) {
{ {
Name: "VertexFunc", Name: "VertexFunc",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Uniforms: []shaderir.Type{ Uniforms: []shaderir.Type{
{Main: shaderir.Float}, {Main: shaderir.Float},
}, },
@ -985,7 +985,7 @@ in vec2 V1;`,
{ {
Name: "FragmentFunc", Name: "FragmentFunc",
Program: shaderir.Program{ Program: shaderir.Program{
Unit: shaderir.Pixel, Unit: shaderir.Pixels,
Uniforms: []shaderir.Type{ Uniforms: []shaderir.Type{
{Main: shaderir.Float}, {Main: shaderir.Float},
}, },

View File

@ -57,7 +57,7 @@ template<typename T, typename U>
T mod(T x, U y) { T mod(T x, U y) {
return x - y * floor(x/y); return x - y * floor(x/y);
}` }`
if unit == shaderir.Texel { if unit == shaderir.Texels {
str += ` str += `
constexpr sampler texture_sampler{filter::nearest};` constexpr sampler texture_sampler{filter::nearest};`
@ -396,9 +396,9 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
} }
if callee.Type == shaderir.BuiltinFuncExpr && callee.BuiltinFunc == shaderir.TexelAt { if callee.Type == shaderir.BuiltinFuncExpr && callee.BuiltinFunc == shaderir.TexelAt {
switch p.Unit { switch p.Unit {
case shaderir.Texel: case shaderir.Texels:
return fmt.Sprintf("%s.sample(texture_sampler, %s)", args[0], strings.Join(args[1:], ", ")) return fmt.Sprintf("%s.sample(texture_sampler, %s)", args[0], strings.Join(args[1:], ", "))
case shaderir.Pixel: case shaderir.Pixels:
return fmt.Sprintf("%s.read(static_cast<uint2>(%s))", args[0], strings.Join(args[1:], ", ")) return fmt.Sprintf("%s.read(static_cast<uint2>(%s))", args[0], strings.Join(args[1:], ", "))
default: default:
panic(fmt.Sprintf("msl: unexpected unit: %d", p.Unit)) panic(fmt.Sprintf("msl: unexpected unit: %d", p.Unit))

View File

@ -25,8 +25,8 @@ import (
type Unit int type Unit int
const ( const (
Texel Unit = iota Texels Unit = iota
Pixel Pixels
) )
type Program struct { type Program struct {

View File

@ -24,7 +24,7 @@ import (
// ShaderProgramFill returns a shader source to fill the frambuffer. // ShaderProgramFill returns a shader source to fill the frambuffer.
func ShaderProgramFill(r, g, b, a byte) *shaderir.Program { func ShaderProgramFill(r, g, b, a byte) *shaderir.Program {
ir, err := graphics.CompileShader([]byte(fmt.Sprintf(`//kage:unit pixel ir, err := graphics.CompileShader([]byte(fmt.Sprintf(`//kage:unit pixels
package main package main
@ -49,7 +49,7 @@ func ShaderProgramImages(numImages int) *shaderir.Program {
exprs = append(exprs, fmt.Sprintf("imageSrc%dUnsafeAt(texCoord)", i)) exprs = append(exprs, fmt.Sprintf("imageSrc%dUnsafeAt(texCoord)", i))
} }
ir, err := graphics.CompileShader([]byte(fmt.Sprintf(`//kage:unit pixel ir, err := graphics.CompileShader([]byte(fmt.Sprintf(`//kage:unit pixels
package main package main

View File

@ -28,7 +28,7 @@ func TestShaderFill(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -60,7 +60,7 @@ func TestShaderFillWithDrawImage(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -97,7 +97,7 @@ func TestShaderWithDrawImageDoesNotWreckTextureUnits(t *testing.T) {
rect := image.Rectangle{Max: image.Point{X: w, Y: h}} rect := image.Rectangle{Max: image.Point{X: w, Y: h}}
dst := ebiten.NewImageWithOptions(rect, &ebiten.NewImageOptions{Unmanaged: true}) dst := ebiten.NewImageWithOptions(rect, &ebiten.NewImageOptions{Unmanaged: true})
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -167,7 +167,7 @@ func TestShaderFillWithDrawTriangles(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -244,7 +244,7 @@ func TestShaderFunction(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -277,7 +277,7 @@ func TestShaderUninitializedUniformVariables(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -308,7 +308,7 @@ func TestShaderMatrix(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -348,7 +348,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
func TestShaderSubImage(t *testing.T) { func TestShaderSubImage(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -476,7 +476,7 @@ func TestShaderDerivatives(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -533,7 +533,7 @@ func TestShaderDerivatives2(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -598,7 +598,7 @@ func TestShaderUniformFirstElement(t *testing.T) {
}{ }{
{ {
Name: "float array", Name: "float array",
Shader: `//kage:unit pixel Shader: `//kage:unit pixels
package main package main
@ -613,7 +613,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
}, },
{ {
Name: "float one-element array", Name: "float one-element array",
Shader: `//kage:unit pixel Shader: `//kage:unit pixels
package main package main
@ -628,7 +628,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
}, },
{ {
Name: "matrix array", Name: "matrix array",
Shader: `//kage:unit pixel Shader: `//kage:unit pixels
package main package main
@ -672,7 +672,7 @@ func TestShaderFuncMod(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -708,7 +708,7 @@ func TestShaderMatrixInitialize(t *testing.T) {
src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff}) src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff})
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -740,7 +740,7 @@ func TestShaderModVectorAndFloat(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -773,7 +773,7 @@ func TestShaderTextureAt(t *testing.T) {
src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff}) src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff})
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -811,7 +811,7 @@ func TestShaderAtan2(t *testing.T) {
src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff}) src.Fill(color.RGBA{R: 0x10, G: 0x20, B: 0x30, A: 0xff})
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -845,7 +845,7 @@ func TestShaderUniformMatrix2(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -885,7 +885,7 @@ func TestShaderUniformMatrix2Array(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -927,7 +927,7 @@ func TestShaderUniformMatrix3(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -968,7 +968,7 @@ func TestShaderUniformMatrix3Array(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1012,7 +1012,7 @@ func TestShaderUniformMatrix4(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1054,7 +1054,7 @@ func TestShaderUniformMatrix4Array(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1099,7 +1099,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
func TestShaderOptionsNegativeBounds(t *testing.T) { func TestShaderOptionsNegativeBounds(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1229,7 +1229,7 @@ func TestShaderVectorEqual(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1279,7 +1279,7 @@ func TestShaderDiscard(t *testing.T) {
} }
src.WritePixels(pix) src.WritePixels(pix)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1326,7 +1326,7 @@ func TestShaderDrawRect(t *testing.T) {
dst := ebiten.NewImage(dstW, dstH) dst := ebiten.NewImage(dstW, dstH)
src := ebiten.NewImage(srcW, srcH) src := ebiten.NewImage(srcW, srcH)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1375,7 +1375,7 @@ func TestShaderDrawRectColorScale(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1407,7 +1407,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
} }
func TestShaderUniformInt(t *testing.T) { func TestShaderUniformInt(t *testing.T) {
const ints = `//kage:unit pixel const ints = `//kage:unit pixels
package main package main
@ -1421,7 +1421,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
} }
` `
const intArray = `//kage:unit pixel const intArray = `//kage:unit pixels
package main package main
@ -1432,7 +1432,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
} }
` `
const intVec = `//kage:unit pixel const intVec = `//kage:unit pixels
package main package main
@ -1609,7 +1609,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
// Issue #2463 // Issue #2463
func TestShaderUniformVec3Array(t *testing.T) { func TestShaderUniformVec3Array(t *testing.T) {
const shader = `//kage:unit pixel const shader = `//kage:unit pixels
package main package main
@ -1682,7 +1682,7 @@ return vec4(b)/255`,
} }
for _, tc := range cases { for _, tc := range cases {
shader := fmt.Sprintf(`//kage:unit pixel shader := fmt.Sprintf(`//kage:unit pixels
package main package main
@ -1716,7 +1716,7 @@ func TestShaderTexelAndPixel(t *testing.T) {
dstPixel := ebiten.NewImage(dstW, dstH) dstPixel := ebiten.NewImage(dstW, dstH)
src := ebiten.NewImage(srcW, srcH) src := ebiten.NewImage(srcW, srcH)
shaderTexel, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit texel shaderTexel, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit texels
package main package main
@ -1731,7 +1731,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
shaderPixel, err := ebiten.NewShader([]byte(`//kage:unit pixel shaderPixel, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1776,7 +1776,7 @@ func TestShaderDifferentTextureSizes(t *testing.T) {
src0.Fill(color.RGBA{0x10, 0x20, 0x30, 0xff}) src0.Fill(color.RGBA{0x10, 0x20, 0x30, 0xff})
src1.Fill(color.RGBA{0x30, 0x20, 0x10, 0xff}) src1.Fill(color.RGBA{0x30, 0x20, 0x10, 0xff})
for _, unit := range []string{"texel", "pixel"} { for _, unit := range []string{"texels", "pixels"} {
unit := unit unit := unit
t.Run(fmt.Sprintf("unit %s", unit), func(t *testing.T) { t.Run(fmt.Sprintf("unit %s", unit), func(t *testing.T) {
shader, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit %s shader, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit %s
@ -1830,7 +1830,7 @@ func TestShaderIVec(t *testing.T) {
// Test that ivec2 can take any float values that can be casted to integers. // Test that ivec2 can take any float values that can be casted to integers.
// This seems the common behavior in shading languages like GLSL, Metal, and HLSL. // This seems the common behavior in shading languages like GLSL, Metal, and HLSL.
shader, err := ebiten.NewShader([]byte(`//kage:unit pixel shader, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1859,7 +1859,7 @@ func TestShaderUniformSizes(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -1978,7 +1978,7 @@ func TestShaderUniformDefaultValue(t *testing.T) {
const w, h = 16, 16 const w, h = 16, 16
dst := ebiten.NewImage(w, h) dst := ebiten.NewImage(w, h)
s, err := ebiten.NewShader([]byte(`//kage:unit pixel s, err := ebiten.NewShader([]byte(`//kage:unit pixels
package main package main
@ -2036,7 +2036,7 @@ func TestShaderDrawRectWithoutSource(t *testing.T) {
src := ebiten.NewImage(srcW, srcH) src := ebiten.NewImage(srcW, srcH)
for _, unit := range []string{"pixel", "texel"} { for _, unit := range []string{"pixels", "texels"} {
s, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit %s s, err := ebiten.NewShader([]byte(fmt.Sprintf(`//kage:unit %s
package main package main
@ -2094,7 +2094,7 @@ func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
var want color.RGBA var want color.RGBA
if offsetX <= i && i < offsetX+srcW && offsetY <= j && j < offsetY+srcH { if offsetX <= i && i < offsetX+srcW && offsetY <= j && j < offsetY+srcH {
var blue byte var blue byte
if !withSrc && unit == "texel" { if !withSrc && unit == "texels" {
blue = 0xff blue = 0xff
} }
if offsetX+srcW/2 <= i && offsetY+srcH/2 <= j { if offsetX+srcW/2 <= i && offsetY+srcH/2 <= j {