mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
parent
004b279e4f
commit
a0549820fd
@ -446,6 +446,59 @@ func (cs *compileState) parseExpr(block *block, expr ast.Expr) ([]shaderir.Expr,
|
||||
Exprs: exprs,
|
||||
},
|
||||
}, t, stmts, true
|
||||
|
||||
case *ast.CompositeLit:
|
||||
t, ok := cs.parseType(block, e.Type)
|
||||
if !ok {
|
||||
return nil, nil, nil, false
|
||||
}
|
||||
fmt.Println(t)
|
||||
|
||||
idx := len(block.vars)
|
||||
block.vars = append(block.vars, variable{
|
||||
typ: t,
|
||||
})
|
||||
|
||||
var stmts []shaderir.Stmt
|
||||
for i, e := range e.Elts {
|
||||
exprs, _, ss, ok := cs.parseExpr(block, e)
|
||||
if !ok {
|
||||
return nil, nil, nil, false
|
||||
}
|
||||
if len(exprs) != 1 {
|
||||
cs.addError(e.Pos(), fmt.Sprintf("multiple-value context is not available at a composite literal"))
|
||||
return nil, nil, nil, false
|
||||
}
|
||||
stmts = append(stmts, ss...)
|
||||
stmts = append(stmts, shaderir.Stmt{
|
||||
Type: shaderir.Assign,
|
||||
Exprs: []shaderir.Expr{
|
||||
{
|
||||
Type: shaderir.Index,
|
||||
Exprs: []shaderir.Expr{
|
||||
{
|
||||
Type: shaderir.LocalVariable,
|
||||
Index: idx,
|
||||
},
|
||||
{
|
||||
Type: shaderir.NumberExpr,
|
||||
Const: gconstant.MakeInt64(int64(i)),
|
||||
ConstType: shaderir.ConstTypeInt,
|
||||
},
|
||||
},
|
||||
},
|
||||
exprs[0],
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return []shaderir.Expr{
|
||||
{
|
||||
Type: shaderir.LocalVariable,
|
||||
Index: idx,
|
||||
},
|
||||
}, []shaderir.Type{t}, stmts, true
|
||||
|
||||
default:
|
||||
cs.addError(e.Pos(), fmt.Sprintf("expression not implemented: %#v", e))
|
||||
}
|
||||
|
10
internal/shader/testdata/array.expected.vs
vendored
10
internal/shader/testdata/array.expected.vs
vendored
@ -1,9 +1,19 @@
|
||||
uniform vec2[4] U0;
|
||||
|
||||
void F0(out vec2[2] l0);
|
||||
void F1(out vec2[2] l0);
|
||||
|
||||
void F0(out vec2[2] l0) {
|
||||
vec2[2] l1 = vec2[2](vec2(0), vec2(0));
|
||||
l0 = l1;
|
||||
return;
|
||||
}
|
||||
|
||||
void F1(out vec2[2] l0) {
|
||||
vec2[2] l1 = vec2[2](vec2(0), vec2(0));
|
||||
vec2[2] l2 = vec2[2](vec2(0), vec2(0));
|
||||
(l1)[0] = vec2(1.0);
|
||||
l2 = l1;
|
||||
l0 = l2;
|
||||
return;
|
||||
}
|
||||
|
5
internal/shader/testdata/array.go
vendored
5
internal/shader/testdata/array.go
vendored
@ -6,3 +6,8 @@ func Foo() [2]vec2 {
|
||||
var x [2]vec2
|
||||
return x
|
||||
}
|
||||
|
||||
func Bar() [2]vec2 {
|
||||
x := [2]vec2{vec2(1)}
|
||||
return x
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user