testing: Refactoring

This commit is contained in:
Hajime Hoshi 2020-05-24 22:15:50 +09:00
parent 155c63ec76
commit fc50f9b0be

View File

@ -18,8 +18,8 @@ import (
"github.com/hajimehoshi/ebiten/internal/shaderir" "github.com/hajimehoshi/ebiten/internal/shaderir"
) )
func ShaderProgramFill(r, g, b, a byte) shaderir.Program { var (
mat := shaderir.Expr{ projectionMatrix = shaderir.Expr{
Type: shaderir.Call, Type: shaderir.Call,
Exprs: []shaderir.Expr{ Exprs: []shaderir.Expr{
{ {
@ -130,7 +130,7 @@ func ShaderProgramFill(r, g, b, a byte) shaderir.Program {
}, },
}, },
} }
pos := shaderir.Expr{ vertexPosition = shaderir.Expr{
Type: shaderir.Call, Type: shaderir.Call,
Exprs: []shaderir.Expr{ Exprs: []shaderir.Expr{
{ {
@ -151,6 +151,49 @@ func ShaderProgramFill(r, g, b, a byte) shaderir.Program {
}, },
}, },
} }
defaultVertexFunc = shaderir.VertexFunc{
Block: shaderir.Block{
Stmts: []shaderir.Stmt{
{
Type: shaderir.Assign,
Exprs: []shaderir.Expr{
{
Type: shaderir.LocalVariable,
Index: 4,
},
{
Type: shaderir.Binary,
Op: shaderir.Mul,
Exprs: []shaderir.Expr{
projectionMatrix,
vertexPosition,
},
},
},
},
},
},
}
defaultProgram = shaderir.Program{
Uniforms: []shaderir.Type{
{Main: shaderir.Vec2},
},
Attributes: []shaderir.Type{
{Main: shaderir.Vec2},
{Main: shaderir.Vec2},
{Main: shaderir.Vec4},
{Main: shaderir.Vec4},
},
VertexFunc: defaultVertexFunc,
}
)
// ShaderProgramFill returns a shader intermediate representation to fill the frambuffer.
//
// Uniform variables:
//
// 0. the framebuffer size (vec2)
func ShaderProgramFill(r, g, b, a byte) shaderir.Program {
clr := shaderir.Expr{ clr := shaderir.Expr{
Type: shaderir.Call, Type: shaderir.Call,
Exprs: []shaderir.Expr{ Exprs: []shaderir.Expr{
@ -177,54 +220,23 @@ func ShaderProgramFill(r, g, b, a byte) shaderir.Program {
}, },
} }
return shaderir.Program{ p := defaultProgram
Uniforms: []shaderir.Type{ p.FragmentFunc = shaderir.FragmentFunc{
{Main: shaderir.Vec2}, Block: shaderir.Block{
}, Stmts: []shaderir.Stmt{
Attributes: []shaderir.Type{ {
{Main: shaderir.Vec2}, Type: shaderir.Assign,
{Main: shaderir.Vec2}, Exprs: []shaderir.Expr{
{Main: shaderir.Vec4}, {
{Main: shaderir.Vec4}, Type: shaderir.LocalVariable,
}, Index: 1,
VertexFunc: shaderir.VertexFunc{
Block: shaderir.Block{
Stmts: []shaderir.Stmt{
{
Type: shaderir.Assign,
Exprs: []shaderir.Expr{
{
Type: shaderir.LocalVariable,
Index: 4,
},
{
Type: shaderir.Binary,
Op: shaderir.Mul,
Exprs: []shaderir.Expr{
mat,
pos,
},
},
},
},
},
},
},
FragmentFunc: shaderir.FragmentFunc{
Block: shaderir.Block{
Stmts: []shaderir.Stmt{
{
Type: shaderir.Assign,
Exprs: []shaderir.Expr{
{
Type: shaderir.LocalVariable,
Index: 1,
},
clr,
}, },
clr,
}, },
}, },
}, },
}, },
} }
return p
} }