Multiple small fixes
- Foreign functions can now have names for parameters - Fix property renaming crash - Properly output texture sampling calls
This commit is contained in:
30
Codegen.jai
30
Codegen.jai
@@ -80,18 +80,40 @@ emit_block :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
|
|||||||
|
|
||||||
emit_call :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
|
emit_call :: (state : *Codegen_State, node : *AST_Node, indentation : int) {
|
||||||
indent(state, indentation);
|
indent(state, indentation);
|
||||||
print_to_builder(*state.builder, "%(", node.name);
|
|
||||||
|
|
||||||
if node.children.count > 0 {
|
if node.name == "sample" {
|
||||||
|
assert(node.children.count > 0);
|
||||||
args := node.children[0];
|
args := node.children[0];
|
||||||
|
|
||||||
for child : args.children {
|
emit_node(state, args.children[0], 0);
|
||||||
|
append(*state.builder, ".");
|
||||||
|
print_to_builder(*state.builder, "%(", node.name);
|
||||||
|
|
||||||
|
for i : 1..args.children.count - 1 {
|
||||||
|
child := args.children[i];
|
||||||
|
|
||||||
emit_node(state, child, 0);
|
emit_node(state, child, 0);
|
||||||
|
|
||||||
if it_index != args.children.count - 1 {
|
if i != args.children.count - 1 {
|
||||||
append(*state.builder, ", ");
|
append(*state.builder, ", ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
print_to_builder(*state.builder, "%(", node.name);
|
||||||
|
|
||||||
|
if node.children.count > 0 {
|
||||||
|
args := node.children[0];
|
||||||
|
|
||||||
|
for child : args.children {
|
||||||
|
emit_node(state, child, 0);
|
||||||
|
|
||||||
|
if it_index != args.children.count - 1 {
|
||||||
|
append(*state.builder, ", ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
append(*state.builder, ")");
|
append(*state.builder, ")");
|
||||||
|
|||||||
@@ -734,7 +734,7 @@ field_list :: (parse_state : *Parse_State, separator : Separator_Type, require_f
|
|||||||
field : *AST_Node;
|
field : *AST_Node;
|
||||||
identifier := parse_state.current;
|
identifier := parse_state.current;
|
||||||
advance(parse_state);
|
advance(parse_state);
|
||||||
if require_field_names {
|
if require_field_names || check(parse_state, .TOKEN_COLON) {
|
||||||
field = field_declaration(parse_state, identifier);
|
field = field_declaration(parse_state, identifier);
|
||||||
} else {
|
} else {
|
||||||
field = make_node(parse_state, .Unnamed_Field);
|
field = make_node(parse_state, .Unnamed_Field);
|
||||||
|
|||||||
@@ -842,10 +842,14 @@ proper_type_to_string :: (checker : *Semantic_Checker, var : Type_Variable, allo
|
|||||||
get_type_from_identifier :: (checker : *Semantic_Checker, scope : Scope_Handle, node : *AST_Node, typename : *string = null) -> Semantic_Type {
|
get_type_from_identifier :: (checker : *Semantic_Checker, scope : Scope_Handle, node : *AST_Node, typename : *string = null) -> Semantic_Type {
|
||||||
type_string := node.token.ident_value;
|
type_string := node.token.ident_value;
|
||||||
|
|
||||||
if type_string == Typenames[Semantic_Type.Int] return .Int;
|
if type_string == {
|
||||||
if type_string == Typenames[Semantic_Type.Half] return .Half;
|
case Typenames[Semantic_Type.Int]; return .Int;
|
||||||
if type_string == Typenames[Semantic_Type.Float] return .Float;
|
case Typenames[Semantic_Type.Half]; return .Half;
|
||||||
if type_string == Typenames[Semantic_Type.Double] return .Double;
|
case Typenames[Semantic_Type.Float]; return .Float;
|
||||||
|
case Typenames[Semantic_Type.Double]; return .Double;
|
||||||
|
case Typenames[Semantic_Type.Sampler]; return .Sampler;
|
||||||
|
case Typenames[Semantic_Type.Texture2D]; return .Texture2D;
|
||||||
|
}
|
||||||
|
|
||||||
symbol := find_symbol(checker, type_string, scope);
|
symbol := find_symbol(checker, type_string, scope);
|
||||||
if symbol {
|
if symbol {
|
||||||
@@ -1199,6 +1203,9 @@ create_variable :: (checker : *Semantic_Checker, node : *AST_Node, struct_field_
|
|||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
lookup_name : string = variable.typename;
|
lookup_name : string = variable.typename;
|
||||||
|
if variable.typename == "properties" {
|
||||||
|
lookup_name = variable.name;
|
||||||
|
}
|
||||||
struct_symbol := find_symbol(checker, lookup_name, checker.current_scope);
|
struct_symbol := find_symbol(checker, lookup_name, checker.current_scope);
|
||||||
type_variable := h2tv(checker, struct_symbol.type_variable);
|
type_variable := h2tv(checker, struct_symbol.type_variable);
|
||||||
|
|
||||||
@@ -1530,13 +1537,17 @@ types_compatible :: (checker : *Semantic_Checker, lhs : Type_Variable_Handle, rh
|
|||||||
rhs_var := h2tv(checker, rhs);
|
rhs_var := h2tv(checker, rhs);
|
||||||
|
|
||||||
if lhs_var.type == {
|
if lhs_var.type == {
|
||||||
case .Int; #through;
|
case .Int; #through;
|
||||||
case .Half; #through;
|
case .Half; #through;
|
||||||
case .Float; #through;
|
case .Float; #through;
|
||||||
case .Double; {
|
case .Double; {
|
||||||
return rhs_var.type == .Int || rhs_var.type == .Half ||
|
return rhs_var.type == .Int || rhs_var.type == .Half ||
|
||||||
rhs_var.type == .Float || rhs_var.type == .Double;
|
rhs_var.type == .Float || rhs_var.type == .Double;
|
||||||
}
|
}
|
||||||
|
case .Sampler; #through;
|
||||||
|
case .Texture2D; {
|
||||||
|
return rhs_var.type == lhs_var.type;
|
||||||
|
}
|
||||||
case .Struct; {
|
case .Struct; {
|
||||||
if rhs_var.type != .Struct {
|
if rhs_var.type != .Struct {
|
||||||
return false;
|
return false;
|
||||||
@@ -1653,13 +1664,13 @@ union_find :: (checker : *Semantic_Checker) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
add_hlsl_builtins :: (checker : *Semantic_Checker) {
|
add_hlsl_builtins :: (checker : *Semantic_Checker) {
|
||||||
#load "hlsl_builtin.jai";
|
HLSL_BUILTIN := read_entire_file("hlsl_builtin.shd");
|
||||||
|
|
||||||
checker.state = .Adding_Builtins;
|
checker.state = .Adding_Builtins;
|
||||||
|
|
||||||
lexer : Lexer;
|
lexer : Lexer;
|
||||||
|
|
||||||
init_lexer_from_string(*lexer, HLSL_BULTIN);
|
init_lexer_from_string(*lexer, HLSL_BUILTIN);
|
||||||
if lexer.result.had_error {
|
if lexer.result.had_error {
|
||||||
print("%\n", report_messages(lexer.result.messages));
|
print("%\n", report_messages(lexer.result.messages));
|
||||||
return;
|
return;
|
||||||
@@ -1741,9 +1752,11 @@ type_to_string :: (type_variable : Type_Variable) -> string {
|
|||||||
return "{{invalid}}";
|
return "{{invalid}}";
|
||||||
case .Unit;
|
case .Unit;
|
||||||
return "()";
|
return "()";
|
||||||
case .Int; #through;
|
case .Int; #through;
|
||||||
case .Half; #through;
|
case .Half; #through;
|
||||||
case .Float; #through;
|
case .Float; #through;
|
||||||
|
case .Sampler; #through;
|
||||||
|
case .Texture2D; #through;
|
||||||
case .Double; {
|
case .Double; {
|
||||||
return Typenames[type_variable.type];
|
return Typenames[type_variable.type];
|
||||||
}
|
}
|
||||||
|
|||||||
266
hlsl_builtin.jai
266
hlsl_builtin.jai
@@ -1,266 +1,6 @@
|
|||||||
HLSL_BULTIN :: #string DONE
|
HLSL_BUILTIN : string;
|
||||||
|
|
||||||
float2 :: struct {
|
#run {
|
||||||
x : float;
|
HLSL_BUILTIN = read_entire_file("hlsl_builtin.shd");
|
||||||
y : float;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float3 :: struct {
|
|
||||||
x : float;
|
|
||||||
y : float;
|
|
||||||
z : float;
|
|
||||||
}
|
|
||||||
|
|
||||||
float4 :: struct {
|
|
||||||
x : float;
|
|
||||||
y : float;
|
|
||||||
z : float;
|
|
||||||
w : float;
|
|
||||||
}
|
|
||||||
|
|
||||||
float4x4 :: struct {
|
|
||||||
m11 : float;
|
|
||||||
m12 : float;
|
|
||||||
m13 : float;
|
|
||||||
m14 : float;
|
|
||||||
m21 : float;
|
|
||||||
m22 : float;
|
|
||||||
m23 : float;
|
|
||||||
m24 : float;
|
|
||||||
m31 : float;
|
|
||||||
m32 : float;
|
|
||||||
m33 : float;
|
|
||||||
m34 : float;
|
|
||||||
m41 : float;
|
|
||||||
m42 : float;
|
|
||||||
m43 : float;
|
|
||||||
m44 : float;
|
|
||||||
}
|
|
||||||
|
|
||||||
int2 :: struct {
|
|
||||||
x : int;
|
|
||||||
y : int;
|
|
||||||
}
|
|
||||||
|
|
||||||
int3 :: struct {
|
|
||||||
x : int;
|
|
||||||
y : int;
|
|
||||||
z : int;
|
|
||||||
}
|
|
||||||
|
|
||||||
int4 :: struct {
|
|
||||||
x : int;
|
|
||||||
y : int;
|
|
||||||
z : int;
|
|
||||||
w : int;
|
|
||||||
}
|
|
||||||
|
|
||||||
int4x4 :: struct {
|
|
||||||
m11 : int;
|
|
||||||
m12 : int;
|
|
||||||
m13 : int;
|
|
||||||
m14 : int;
|
|
||||||
m21 : int;
|
|
||||||
m22 : int;
|
|
||||||
m23 : int;
|
|
||||||
m24 : int;
|
|
||||||
m31 : int;
|
|
||||||
m32 : int;
|
|
||||||
m33 : int;
|
|
||||||
m34 : int;
|
|
||||||
m41 : int;
|
|
||||||
m42 : int;
|
|
||||||
m43 : int;
|
|
||||||
m44 : int;
|
|
||||||
}
|
|
||||||
|
|
||||||
//~ nbr: Constructors
|
|
||||||
#foreign float2 :: (float, float) -> float2;
|
|
||||||
#foreign float3 :: (float, float, float) -> float3;
|
|
||||||
#foreign float4 :: (float, float, float, float) -> float4;
|
|
||||||
|
|
||||||
//~ nbr: Vectors
|
|
||||||
#foreign cross :: (float3, float3) -> float3;
|
|
||||||
#foreign distance :: (float2, float2) -> float;
|
|
||||||
#foreign distance :: (float3, float3) -> float;
|
|
||||||
#foreign distance :: (float4, float4) -> float;
|
|
||||||
|
|
||||||
#foreign dot :: (float2, float2) -> float;
|
|
||||||
#foreign dot :: (float3, float3) -> float;
|
|
||||||
#foreign dot :: (float4, float4) -> float;
|
|
||||||
|
|
||||||
#foreign normalize :: (float2) -> float2;
|
|
||||||
#foreign normalize :: (float3) -> float3;
|
|
||||||
#foreign normalize :: (float4) -> float4;
|
|
||||||
|
|
||||||
#foreign transpose :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
//~ nbr: Multiplies
|
|
||||||
#foreign mul :: (float2, float2) -> float;
|
|
||||||
#foreign mul :: (float3, float3) -> float;
|
|
||||||
#foreign mul :: (float4, float4) -> float;
|
|
||||||
#foreign mul :: (float4x4, float4x4) -> float4x4;
|
|
||||||
#foreign mul :: (float, float2) -> float2;
|
|
||||||
#foreign mul :: (float, float3) -> float3;
|
|
||||||
#foreign mul :: (float, float4) -> float4;
|
|
||||||
|
|
||||||
#foreign mul :: (float, float4x4) -> float4x4;
|
|
||||||
#foreign mul :: (float4x4, float) -> float4x4;
|
|
||||||
#foreign mul :: (float4x4, float4) -> float4;
|
|
||||||
#foreign mul :: (float2, float) -> float2;
|
|
||||||
#foreign mul :: (float3, float) -> float3;
|
|
||||||
#foreign mul :: (float4, float) -> float4;
|
|
||||||
|
|
||||||
#foreign mul :: (float4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
//~ nbr: General
|
|
||||||
#foreign abs :: (float) -> float;
|
|
||||||
#foreign abs :: (float2) -> float2;
|
|
||||||
#foreign abs :: (float3) -> float3;
|
|
||||||
#foreign abs :: (float4) -> float4;
|
|
||||||
#foreign abs :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign min :: (float) -> float;
|
|
||||||
#foreign min :: (float2) -> float2;
|
|
||||||
#foreign min :: (float3) -> float3;
|
|
||||||
#foreign min :: (float4) -> float4;
|
|
||||||
#foreign min :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign max :: (float) -> float;
|
|
||||||
#foreign max :: (float2) -> float2;
|
|
||||||
#foreign max :: (float3) -> float3;
|
|
||||||
#foreign max :: (float4) -> float4;
|
|
||||||
#foreign max :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign ceil :: (float) -> float;
|
|
||||||
#foreign ceil :: (float2) -> float2;
|
|
||||||
#foreign ceil :: (float3) -> float3;
|
|
||||||
#foreign ceil :: (float4) -> float4;
|
|
||||||
#foreign ceil :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign floor :: (float) -> float;
|
|
||||||
#foreign floor :: (float2) -> float2;
|
|
||||||
#foreign floor :: (float3) -> float3;
|
|
||||||
#foreign floor :: (float4) -> float4;
|
|
||||||
#foreign floor :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign round :: (float) -> float;
|
|
||||||
#foreign round :: (float2) -> float2;
|
|
||||||
#foreign round :: (float3) -> float3;
|
|
||||||
#foreign round :: (float4) -> float4;
|
|
||||||
#foreign round :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign clamp :: (float, float, float) -> float;
|
|
||||||
#foreign clamp :: (float2, float2, float2) -> float2;
|
|
||||||
#foreign clamp :: (float3, float3, float3) -> float3;
|
|
||||||
#foreign clamp :: (float4, float4, float4) -> float4;
|
|
||||||
#foreign clamp :: (float4x4, float4x4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign log :: (float) -> float;
|
|
||||||
#foreign log :: (float2) -> float2;
|
|
||||||
#foreign log :: (float3) -> float3;
|
|
||||||
#foreign log :: (float4) -> float4;
|
|
||||||
#foreign log :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign log2 :: (float) -> float;
|
|
||||||
#foreign log2 :: (float2) -> float2;
|
|
||||||
#foreign log2 :: (float3) -> float3;
|
|
||||||
#foreign log2 :: (float4) -> float4;
|
|
||||||
#foreign log2 :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign log10 :: (float) -> float;
|
|
||||||
#foreign log10 :: (float2) -> float2;
|
|
||||||
#foreign log10 :: (float3) -> float3;
|
|
||||||
#foreign log10 :: (float4) -> float4;
|
|
||||||
#foreign log10 :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign pow :: (float, float, float) -> float;
|
|
||||||
#foreign pow :: (float2, float2, float2) -> float2;
|
|
||||||
#foreign pow :: (float3, float3, float3) -> float3;
|
|
||||||
#foreign pow :: (float4, float4, float4) -> float4;
|
|
||||||
#foreign pow :: (float4x4, float4x4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign smoothstep :: (float, float, float) -> float;
|
|
||||||
#foreign smoothstep :: (float2, float2, float2) -> float2;
|
|
||||||
#foreign smoothstep :: (float3, float3, float3) -> float3;
|
|
||||||
#foreign smoothstep :: (float4, float4, float4) -> float4;
|
|
||||||
#foreign smoothstep :: (float4x4, float4x4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign step :: (float, float) -> float;
|
|
||||||
#foreign step :: (float2, float2) -> float2;
|
|
||||||
#foreign step :: (float3, float3) -> float3;
|
|
||||||
#foreign step :: (float4, float4) -> float4;
|
|
||||||
#foreign step :: (float4x4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign sqrt :: (float) -> float;
|
|
||||||
#foreign sqrt :: (float2) -> float2;
|
|
||||||
#foreign sqrt :: (float3) -> float3;
|
|
||||||
#foreign sqrt :: (float4) -> float4;
|
|
||||||
#foreign sqrt :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//~ nbr: Trigonometry
|
|
||||||
#foreign cos :: (float) -> float;
|
|
||||||
#foreign cos :: (float2) -> float2;
|
|
||||||
#foreign cos :: (float3) -> float3;
|
|
||||||
#foreign cos :: (float4) -> float4;
|
|
||||||
#foreign cos :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign cosh :: (float) -> float;
|
|
||||||
#foreign cosh :: (float2) -> float2;
|
|
||||||
#foreign cosh :: (float3) -> float3;
|
|
||||||
#foreign cosh :: (float4) -> float4;
|
|
||||||
#foreign cosh :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign acos :: (float) -> float;
|
|
||||||
#foreign acos :: (float2) -> float2;
|
|
||||||
#foreign acos :: (float3) -> float3;
|
|
||||||
#foreign acos :: (float4) -> float4;
|
|
||||||
#foreign acos :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign sin :: (float) -> float;
|
|
||||||
#foreign sin :: (float2) -> float2;
|
|
||||||
#foreign sin :: (float3) -> float3;
|
|
||||||
#foreign sin :: (float4) -> float4;
|
|
||||||
#foreign sin :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign sinh :: (float) -> float;
|
|
||||||
#foreign sinh :: (float2) -> float2;
|
|
||||||
#foreign sinh :: (float3) -> float3;
|
|
||||||
#foreign sinh :: (float4) -> float4;
|
|
||||||
#foreign sinh :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign asin :: (float) -> float;
|
|
||||||
#foreign asin :: (float2) -> float2;
|
|
||||||
#foreign asin :: (float3) -> float3;
|
|
||||||
#foreign asin :: (float4) -> float4;
|
|
||||||
#foreign asin :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign tan :: (float) -> float;
|
|
||||||
#foreign tan :: (float2) -> float2;
|
|
||||||
#foreign tan :: (float3) -> float3;
|
|
||||||
#foreign tan :: (float4) -> float4;
|
|
||||||
#foreign tan :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign tanh :: (float) -> float;
|
|
||||||
#foreign tanh :: (float2) -> float2;
|
|
||||||
#foreign tanh :: (float3) -> float3;
|
|
||||||
#foreign tanh :: (float4) -> float4;
|
|
||||||
#foreign tanh :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign atan :: (float) -> float;
|
|
||||||
#foreign atan :: (float2) -> float2;
|
|
||||||
#foreign atan :: (float3) -> float3;
|
|
||||||
#foreign atan :: (float4) -> float4;
|
|
||||||
#foreign atan :: (float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign atan2 :: (float, float) -> float;
|
|
||||||
#foreign atan2 :: (float2, float2) -> float2;
|
|
||||||
#foreign atan2 :: (float3, float3) -> float3;
|
|
||||||
#foreign atan2 :: (float4, float4) -> float4;
|
|
||||||
#foreign atan2 :: (float4x4, float4x4) -> float4x4;
|
|
||||||
|
|
||||||
#foreign sample :: (texture : Texture2D, uv : float2, sampler : Sampler) -> float4;
|
|
||||||
|
|
||||||
DONE
|
|
||||||
|
|||||||
262
hlsl_builtin.shd
Normal file
262
hlsl_builtin.shd
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
float2 :: struct {
|
||||||
|
x : float;
|
||||||
|
y : float;
|
||||||
|
}
|
||||||
|
|
||||||
|
float3 :: struct {
|
||||||
|
x : float;
|
||||||
|
y : float;
|
||||||
|
z : float;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 :: struct {
|
||||||
|
x : float;
|
||||||
|
y : float;
|
||||||
|
z : float;
|
||||||
|
w : float;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4x4 :: struct {
|
||||||
|
m11 : float;
|
||||||
|
m12 : float;
|
||||||
|
m13 : float;
|
||||||
|
m14 : float;
|
||||||
|
m21 : float;
|
||||||
|
m22 : float;
|
||||||
|
m23 : float;
|
||||||
|
m24 : float;
|
||||||
|
m31 : float;
|
||||||
|
m32 : float;
|
||||||
|
m33 : float;
|
||||||
|
m34 : float;
|
||||||
|
m41 : float;
|
||||||
|
m42 : float;
|
||||||
|
m43 : float;
|
||||||
|
m44 : float;
|
||||||
|
}
|
||||||
|
|
||||||
|
int2 :: struct {
|
||||||
|
x : int;
|
||||||
|
y : int;
|
||||||
|
}
|
||||||
|
|
||||||
|
int3 :: struct {
|
||||||
|
x : int;
|
||||||
|
y : int;
|
||||||
|
z : int;
|
||||||
|
}
|
||||||
|
|
||||||
|
int4 :: struct {
|
||||||
|
x : int;
|
||||||
|
y : int;
|
||||||
|
z : int;
|
||||||
|
w : int;
|
||||||
|
}
|
||||||
|
|
||||||
|
int4x4 :: struct {
|
||||||
|
m11 : int;
|
||||||
|
m12 : int;
|
||||||
|
m13 : int;
|
||||||
|
m14 : int;
|
||||||
|
m21 : int;
|
||||||
|
m22 : int;
|
||||||
|
m23 : int;
|
||||||
|
m24 : int;
|
||||||
|
m31 : int;
|
||||||
|
m32 : int;
|
||||||
|
m33 : int;
|
||||||
|
m34 : int;
|
||||||
|
m41 : int;
|
||||||
|
m42 : int;
|
||||||
|
m43 : int;
|
||||||
|
m44 : int;
|
||||||
|
}
|
||||||
|
|
||||||
|
//~ nbr: Constructors
|
||||||
|
#foreign float2 :: (float, float) -> float2;
|
||||||
|
#foreign float3 :: (float, float, float) -> float3;
|
||||||
|
#foreign float4 :: (float, float, float, float) -> float4;
|
||||||
|
|
||||||
|
//~ nbr: Vectors
|
||||||
|
#foreign cross :: (float3, float3) -> float3;
|
||||||
|
#foreign distance :: (float2, float2) -> float;
|
||||||
|
#foreign distance :: (float3, float3) -> float;
|
||||||
|
#foreign distance :: (float4, float4) -> float;
|
||||||
|
|
||||||
|
#foreign dot :: (float2, float2) -> float;
|
||||||
|
#foreign dot :: (float3, float3) -> float;
|
||||||
|
#foreign dot :: (float4, float4) -> float;
|
||||||
|
|
||||||
|
#foreign normalize :: (float2) -> float2;
|
||||||
|
#foreign normalize :: (float3) -> float3;
|
||||||
|
#foreign normalize :: (float4) -> float4;
|
||||||
|
|
||||||
|
#foreign transpose :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
//~ nbr: Multiplies
|
||||||
|
#foreign mul :: (float2, float2) -> float;
|
||||||
|
#foreign mul :: (float3, float3) -> float;
|
||||||
|
#foreign mul :: (float4, float4) -> float;
|
||||||
|
#foreign mul :: (float4x4, float4x4) -> float4x4;
|
||||||
|
#foreign mul :: (float, float2) -> float2;
|
||||||
|
#foreign mul :: (float, float3) -> float3;
|
||||||
|
#foreign mul :: (float, float4) -> float4;
|
||||||
|
|
||||||
|
#foreign mul :: (float, float4x4) -> float4x4;
|
||||||
|
#foreign mul :: (float4x4, float) -> float4x4;
|
||||||
|
#foreign mul :: (float4x4, float4) -> float4;
|
||||||
|
#foreign mul :: (float2, float) -> float2;
|
||||||
|
#foreign mul :: (float3, float) -> float3;
|
||||||
|
#foreign mul :: (float4, float) -> float4;
|
||||||
|
|
||||||
|
#foreign mul :: (float4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
//~ nbr: General
|
||||||
|
#foreign abs :: (float) -> float;
|
||||||
|
#foreign abs :: (float2) -> float2;
|
||||||
|
#foreign abs :: (float3) -> float3;
|
||||||
|
#foreign abs :: (float4) -> float4;
|
||||||
|
#foreign abs :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign min :: (float) -> float;
|
||||||
|
#foreign min :: (float2) -> float2;
|
||||||
|
#foreign min :: (float3) -> float3;
|
||||||
|
#foreign min :: (float4) -> float4;
|
||||||
|
#foreign min :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign max :: (float) -> float;
|
||||||
|
#foreign max :: (float2) -> float2;
|
||||||
|
#foreign max :: (float3) -> float3;
|
||||||
|
#foreign max :: (float4) -> float4;
|
||||||
|
#foreign max :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign ceil :: (float) -> float;
|
||||||
|
#foreign ceil :: (float2) -> float2;
|
||||||
|
#foreign ceil :: (float3) -> float3;
|
||||||
|
#foreign ceil :: (float4) -> float4;
|
||||||
|
#foreign ceil :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign floor :: (float) -> float;
|
||||||
|
#foreign floor :: (float2) -> float2;
|
||||||
|
#foreign floor :: (float3) -> float3;
|
||||||
|
#foreign floor :: (float4) -> float4;
|
||||||
|
#foreign floor :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign round :: (float) -> float;
|
||||||
|
#foreign round :: (float2) -> float2;
|
||||||
|
#foreign round :: (float3) -> float3;
|
||||||
|
#foreign round :: (float4) -> float4;
|
||||||
|
#foreign round :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign clamp :: (float, float, float) -> float;
|
||||||
|
#foreign clamp :: (float2, float2, float2) -> float2;
|
||||||
|
#foreign clamp :: (float3, float3, float3) -> float3;
|
||||||
|
#foreign clamp :: (float4, float4, float4) -> float4;
|
||||||
|
#foreign clamp :: (float4x4, float4x4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign log :: (float) -> float;
|
||||||
|
#foreign log :: (float2) -> float2;
|
||||||
|
#foreign log :: (float3) -> float3;
|
||||||
|
#foreign log :: (float4) -> float4;
|
||||||
|
#foreign log :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign log2 :: (float) -> float;
|
||||||
|
#foreign log2 :: (float2) -> float2;
|
||||||
|
#foreign log2 :: (float3) -> float3;
|
||||||
|
#foreign log2 :: (float4) -> float4;
|
||||||
|
#foreign log2 :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign log10 :: (float) -> float;
|
||||||
|
#foreign log10 :: (float2) -> float2;
|
||||||
|
#foreign log10 :: (float3) -> float3;
|
||||||
|
#foreign log10 :: (float4) -> float4;
|
||||||
|
#foreign log10 :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign pow :: (float, float, float) -> float;
|
||||||
|
#foreign pow :: (float2, float2, float2) -> float2;
|
||||||
|
#foreign pow :: (float3, float3, float3) -> float3;
|
||||||
|
#foreign pow :: (float4, float4, float4) -> float4;
|
||||||
|
#foreign pow :: (float4x4, float4x4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign smoothstep :: (float, float, float) -> float;
|
||||||
|
#foreign smoothstep :: (float2, float2, float2) -> float2;
|
||||||
|
#foreign smoothstep :: (float3, float3, float3) -> float3;
|
||||||
|
#foreign smoothstep :: (float4, float4, float4) -> float4;
|
||||||
|
#foreign smoothstep :: (float4x4, float4x4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign step :: (float, float) -> float;
|
||||||
|
#foreign step :: (float2, float2) -> float2;
|
||||||
|
#foreign step :: (float3, float3) -> float3;
|
||||||
|
#foreign step :: (float4, float4) -> float4;
|
||||||
|
#foreign step :: (float4x4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign sqrt :: (float) -> float;
|
||||||
|
#foreign sqrt :: (float2) -> float2;
|
||||||
|
#foreign sqrt :: (float3) -> float3;
|
||||||
|
#foreign sqrt :: (float4) -> float4;
|
||||||
|
#foreign sqrt :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//~ nbr: Trigonometry
|
||||||
|
#foreign cos :: (float) -> float;
|
||||||
|
#foreign cos :: (float2) -> float2;
|
||||||
|
#foreign cos :: (float3) -> float3;
|
||||||
|
#foreign cos :: (float4) -> float4;
|
||||||
|
#foreign cos :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign cosh :: (float) -> float;
|
||||||
|
#foreign cosh :: (float2) -> float2;
|
||||||
|
#foreign cosh :: (float3) -> float3;
|
||||||
|
#foreign cosh :: (float4) -> float4;
|
||||||
|
#foreign cosh :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign acos :: (float) -> float;
|
||||||
|
#foreign acos :: (float2) -> float2;
|
||||||
|
#foreign acos :: (float3) -> float3;
|
||||||
|
#foreign acos :: (float4) -> float4;
|
||||||
|
#foreign acos :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign sin :: (float) -> float;
|
||||||
|
#foreign sin :: (float2) -> float2;
|
||||||
|
#foreign sin :: (float3) -> float3;
|
||||||
|
#foreign sin :: (float4) -> float4;
|
||||||
|
#foreign sin :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign sinh :: (float) -> float;
|
||||||
|
#foreign sinh :: (float2) -> float2;
|
||||||
|
#foreign sinh :: (float3) -> float3;
|
||||||
|
#foreign sinh :: (float4) -> float4;
|
||||||
|
#foreign sinh :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign asin :: (float) -> float;
|
||||||
|
#foreign asin :: (float2) -> float2;
|
||||||
|
#foreign asin :: (float3) -> float3;
|
||||||
|
#foreign asin :: (float4) -> float4;
|
||||||
|
#foreign asin :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign tan :: (float) -> float;
|
||||||
|
#foreign tan :: (float2) -> float2;
|
||||||
|
#foreign tan :: (float3) -> float3;
|
||||||
|
#foreign tan :: (float4) -> float4;
|
||||||
|
#foreign tan :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign tanh :: (float) -> float;
|
||||||
|
#foreign tanh :: (float2) -> float2;
|
||||||
|
#foreign tanh :: (float3) -> float3;
|
||||||
|
#foreign tanh :: (float4) -> float4;
|
||||||
|
#foreign tanh :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign atan :: (float) -> float;
|
||||||
|
#foreign atan :: (float2) -> float2;
|
||||||
|
#foreign atan :: (float3) -> float3;
|
||||||
|
#foreign atan :: (float4) -> float4;
|
||||||
|
#foreign atan :: (float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign atan2 :: (float, float) -> float;
|
||||||
|
#foreign atan2 :: (float2, float2) -> float2;
|
||||||
|
#foreign atan2 :: (float3, float3) -> float3;
|
||||||
|
#foreign atan2 :: (float4, float4) -> float4;
|
||||||
|
#foreign atan2 :: (float4x4, float4x4) -> float4x4;
|
||||||
|
|
||||||
|
#foreign sample :: (Texture2D, float2, Sampler) -> float4;
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
[96m color : float4 = float4(y, 1.0, 1.0, 1.0);
|
[96m color : float4 = float4(y, 1.0, 1.0, 1.0);
|
||||||
^
|
^
|
||||||
[97m Possible overloads:
|
[97m Possible overloads:
|
||||||
[96m foreign float4 :: (float, float, float, float) -> float4; (test/wrong_type_for_function.shd:79)
|
[96m foreign float4 :: (float, float, float, float) -> float4; (test/wrong_type_for_function.shd:78)
|
||||||
|
|
||||||
[36m[37m[1;37mtest/wrong_type_for_function.shd:11,24: [31merror: [37mType mismatch. Expected float got float2
|
[36m[37m[1;37mtest/wrong_type_for_function.shd:11,24: [31merror: [37mType mismatch. Expected float got float2
|
||||||
[96m found:
|
[96m found:
|
||||||
|
|||||||
Reference in New Issue
Block a user