diff --git a/compiler/NubLang.CLI/Archive.cs b/compiler/NubLang.CLI/Archive.cs index 59919c5..b9d8d51 100644 --- a/compiler/NubLang.CLI/Archive.cs +++ b/compiler/NubLang.CLI/Archive.cs @@ -21,7 +21,7 @@ public static class Archive var errors = await process.StandardError.ReadToEndAsync(); if (!string.IsNullOrWhiteSpace(errors)) { - await Console.Error.WriteLineAsync("ar error when archiving:\n" + errors); + await Console.Error.WriteLineAsync(errors); } return process.ExitCode == 0; diff --git a/compiler/NubLang.CLI/GCC.cs b/compiler/NubLang.CLI/GCC.cs index 51519ab..e5eb4fe 100644 --- a/compiler/NubLang.CLI/GCC.cs +++ b/compiler/NubLang.CLI/GCC.cs @@ -22,7 +22,7 @@ public static class GCC var errors = await process.StandardError.ReadToEndAsync(); if (!string.IsNullOrWhiteSpace(errors)) { - await Console.Error.WriteLineAsync("gcc error when assembling:\n" + errors); + await Console.Error.WriteLineAsync(errors); } return process.ExitCode == 0; diff --git a/compiler/NubLang.CLI/QBE.cs b/compiler/NubLang.CLI/QBE.cs index 52e37c5..a4aab64 100644 --- a/compiler/NubLang.CLI/QBE.cs +++ b/compiler/NubLang.CLI/QBE.cs @@ -22,7 +22,7 @@ public static class QBE var errors = await process.StandardError.ReadToEndAsync(); if (!string.IsNullOrWhiteSpace(errors)) { - await Console.Error.WriteLineAsync("qbe error:\n" + errors); + await Console.Error.WriteLineAsync(errors); } return process.ExitCode == 0; diff --git a/compiler/NubLang/Diagnostics/Diagnostic.cs b/compiler/NubLang/Diagnostics/Diagnostic.cs index 8d29a28..a1b5e52 100644 --- a/compiler/NubLang/Diagnostics/Diagnostic.cs +++ b/compiler/NubLang/Diagnostics/Diagnostic.cs @@ -118,7 +118,7 @@ public class Diagnostic var contextEndLine = Math.Min(lines.Length, endLine + CONTEXT_LINES); var numberPadding = contextEndLine.ToString().Length; - var codePadding = lines.Skip(contextStartLine - 1).Take(contextEndLine - contextStartLine).Max(x => x.Length); + var codePadding = lines.Skip(contextStartLine - 1).Take(contextEndLine - contextStartLine + 1).Max(x => x.Length); sb.Append('╭'); sb.Append(new string('─', numberPadding + 2)); @@ -144,16 +144,16 @@ public class Diagnostic if (i >= startLine && i <= endLine) { var markerStartColumn = 1; - var markerEndColumn = line.Length + 1; + var markerEndColumn = line.Length; if (i == startLine) { - markerStartColumn = Span.Value.Start.Column; + markerStartColumn = Math.Min(Span.Value.Start.Column, 1); } if (i == endLine) { - markerEndColumn = Span.Value.End.Column; + markerEndColumn = Math.Min(Span.Value.End.Column, line.Length); } var markerLength = markerEndColumn - markerStartColumn; diff --git a/compiler/NubLang/Modules/Module.cs b/compiler/NubLang/Modules/Module.cs index e3d8099..ec20b5b 100644 --- a/compiler/NubLang/Modules/Module.cs +++ b/compiler/NubLang/Modules/Module.cs @@ -34,4 +34,12 @@ public class Module .Where(x => x.Exported || includePrivate) .ToList(); } + + public List GlobalVariables(bool includePrivate) + { + return _definitions + .OfType() + .Where(x => x.Exported || includePrivate) + .ToList(); + } } \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Parser.cs b/compiler/NubLang/Parsing/Parser.cs index d8b96be..b909566 100644 --- a/compiler/NubLang/Parsing/Parser.cs +++ b/compiler/NubLang/Parsing/Parser.cs @@ -86,6 +86,7 @@ public sealed class Parser { Symbol.Func => ParseFunc(startIndex, exported, null), Symbol.Struct => ParseStruct(startIndex, exported), + Symbol.Let => ParseGlobalVariable(startIndex, exported), _ => throw new ParseException(Diagnostic .Error($"Expected 'func' or 'struct' but found '{keyword.Symbol}'") .WithHelp("Valid definition keywords are 'func' and 'struct'") @@ -113,6 +114,22 @@ public sealed class Parser return definitions; } + private GlobalVariableSyntax ParseGlobalVariable(int startIndex, bool exported) + { + var name = ExpectIdentifier(); + + TypeSyntax? type = null; + if (TryExpectSymbol(Symbol.Colon)) + { + type = ParseType(); + } + + ExpectSymbol(Symbol.Assign); + var value = ParseExpression(); + + return new GlobalVariableSyntax(GetTokens(startIndex), name.Value, exported, type, value); + } + private FuncSignatureSyntax ParseFuncSignature() { var startIndex = _tokenIndex; diff --git a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs index d86b535..ca90906 100644 --- a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs @@ -17,3 +17,5 @@ public record StructFuncSyntax(List Tokens, string Name, string? Hook, Fu public record StructSyntax(List Tokens, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); public record StructTemplateSyntax(List Tokens, List TemplateArguments, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); + +public record GlobalVariableSyntax(List Tokens, string Name, bool Exported, TypeSyntax? ExplicitType, ExpressionSyntax Value) : DefinitionSyntax(Tokens, Name, Exported); \ No newline at end of file diff --git a/compiler/NubLang/Tokenization/Token.cs b/compiler/NubLang/Tokenization/Token.cs index e7ae188..2c16999 100644 --- a/compiler/NubLang/Tokenization/Token.cs +++ b/compiler/NubLang/Tokenization/Token.cs @@ -5,6 +5,8 @@ namespace NubLang.Tokenization; public enum LiteralKind { Integer, + Hex, + Binary, Float, String, Bool diff --git a/compiler/NubLang/Tokenization/Tokenizer.cs b/compiler/NubLang/Tokenization/Tokenizer.cs index 4210ac9..354ec74 100644 --- a/compiler/NubLang/Tokenization/Tokenizer.cs +++ b/compiler/NubLang/Tokenization/Tokenizer.cs @@ -159,6 +159,51 @@ public sealed class Tokenizer var isFloat = false; var buffer = string.Empty; + if (current == '0' && Peek(1) is 'x') + { + buffer += "0x"; + Next(); + Next(); + while (Peek() != null && Uri.IsHexDigit(Peek()!.Value)) + { + buffer += Peek()!.Value; + Next(); + } + + if (buffer.Length <= 2) + { + throw new TokenizerException(Diagnostic + .Error("Invalid hex literal, no digits found") + .At(_fileName, _line, _column) + .Build()); + } + + return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), LiteralKind.Hex, buffer); + } + + if (current == '0' && Peek(1) is 'b') + { + buffer += "0b"; + Next(); + Next(); + while (Peek() != null && (Peek() == '0' || Peek() == '1')) + { + buffer += Peek()!.Value; + Next(); + } + + if (buffer.Length <= 2) + { + throw new TokenizerException(Diagnostic + .Error("Invalid binary literal, no digits found") + .At(_fileName, _line, _column) + .Build()); + } + + return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), LiteralKind.Binary, buffer); + } + + buffer += current; while (Peek() != null) { var next = Peek()!.Value; @@ -187,7 +232,12 @@ public sealed class Tokenizer } } - return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), isFloat ? LiteralKind.Float : LiteralKind.Integer, buffer); + return new LiteralToken( + _fileName, + CreateSpan(lineStart, columnStart), + isFloat ? LiteralKind.Float : LiteralKind.Integer, + buffer + ); } if (current == '"') diff --git a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs b/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs index d9c6b01..ae83b00 100644 --- a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs +++ b/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs @@ -12,4 +12,6 @@ public record StructFieldNode(string Name, NubType Type, ExpressionNode? Value) public record StructFuncNode(string Name, string? Hook, FuncSignatureNode Signature, BlockNode Body) : Node; -public record StructNode(string Module, string Name, List Fields, List Functions) : DefinitionNode(Module, Name); \ No newline at end of file +public record StructNode(string Module, string Name, List Fields, List Functions) : DefinitionNode(Module, Name); + +public record GlobalVariableNode(string Module, string Name, ExpressionNode Value) : DefinitionNode(Module, Name); \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/TypeChecker.cs b/compiler/NubLang/TypeChecking/TypeChecker.cs index 2f82621..37c9d76 100644 --- a/compiler/NubLang/TypeChecking/TypeChecker.cs +++ b/compiler/NubLang/TypeChecking/TypeChecker.cs @@ -46,27 +46,33 @@ public sealed class TypeChecker Definitions.Clear(); ReferencedStructTypes.Clear(); - foreach (var definition in _syntaxTree.Definitions) + using (BeginRootScope(_syntaxTree.Metadata.ModuleName)) { - try + foreach (var definition in _syntaxTree.Definitions) { - switch (definition) + try { - case FuncSyntax funcSyntax: - Definitions.Add(CheckFuncDefinition(funcSyntax)); - break; - case StructSyntax structSyntax: - Definitions.Add(CheckStructDefinition(structSyntax)); - break; - case StructTemplateSyntax: - break; - default: - throw new ArgumentOutOfRangeException(); + switch (definition) + { + case FuncSyntax funcSyntax: + Definitions.Add(CheckFuncDefinition(funcSyntax)); + break; + case StructSyntax structSyntax: + Definitions.Add(CheckStructDefinition(structSyntax)); + break; + case GlobalVariableSyntax globalVariableSyntax: + Definitions.Add(CheckGlobalVariable(globalVariableSyntax)); + break; + case StructTemplateSyntax: + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + catch (TypeCheckerException e) + { + Diagnostics.Add(e.Diagnostic); } - } - catch (TypeCheckerException e) - { - Diagnostics.Add(e.Diagnostic); } } } @@ -85,9 +91,41 @@ public sealed class TypeChecker return new ScopeDisposer(this); } - private ScopeDisposer BeginRootScope(string module) + private ScopeDisposer BeginRootScope(string moduleName) { - _scopes.Push(new Scope(module)); + if (!_visibleModules.TryGetValue(moduleName, out var moduleScope)) + { + throw new TypeCheckerException(Diagnostic.Error($"Module with name {moduleName} not found").Build()); + } + + var scope = new Scope(moduleName); + _scopes.Push(scope); + + foreach (var globalVariable in moduleScope.GlobalVariables(true)) + { + NubType? type; + + if (globalVariable.ExplicitType != null) + { + type = ResolveType(globalVariable.ExplicitType); + var valueExpression = CheckExpression(globalVariable.Value, type); + + if (valueExpression.Type != ResolveType(globalVariable.ExplicitType)) + { + throw new TypeCheckerException(Diagnostic + .Error("Value does not match explicit type of global variable") + .At(globalVariable.Value) + .Build()); + } + } + else + { + type = CheckExpression(globalVariable.Value).Type; + } + + scope.DeclareVariable(new Variable(globalVariable.Name, type, VariableKind.LValue)); + } + return new ScopeDisposer(this); } @@ -105,30 +143,27 @@ public sealed class TypeChecker private StructNode CheckStructDefinition(StructSyntax node) { - using (BeginRootScope(_syntaxTree.Metadata.ModuleName)) - { - var fieldTypes = node.Fields - .Select(x => new NubStructFieldType(x.Name, ResolveType(x.Type), x.Value != null)) - .ToList(); + var fieldTypes = node.Fields + .Select(x => new NubStructFieldType(x.Name, ResolveType(x.Type), x.Value != null)) + .ToList(); - var fieldFunctions = node.Functions - .Select(x => - { - var parameters = x.Signature.Parameters.Select(y => ResolveType(y.Type)).ToList(); - var returnType = ResolveType(x.Signature.ReturnType); - return new NubStructFuncType(x.Name, x.Hook, parameters, returnType); - }) - .ToList(); + var fieldFunctions = node.Functions + .Select(x => + { + var parameters = x.Signature.Parameters.Select(y => ResolveType(y.Type)).ToList(); + var returnType = ResolveType(x.Signature.ReturnType); + return new NubStructFuncType(x.Name, x.Hook, parameters, returnType); + }) + .ToList(); - var structType = new NubStructType(CurrentScope.Module, node.Name, fieldTypes, fieldFunctions); + var structType = new NubStructType(CurrentScope.Module, node.Name, fieldTypes, fieldFunctions); - CurrentScope.DeclareVariable(new Variable("this", structType, VariableKind.RValue)); + CurrentScope.DeclareVariable(new Variable("this", structType, VariableKind.RValue)); - var fields = node.Fields.Select(CheckStructField).ToList(); - var functions = node.Functions.Select(CheckStructFunc).ToList(); + var fields = node.Fields.Select(CheckStructField).ToList(); + var functions = node.Functions.Select(CheckStructFunc).ToList(); - return new StructNode(CurrentScope.Module, node.Name, fields, functions); - } + return new StructNode(CurrentScope.Module, node.Name, fields, functions); } private StructFuncNode CheckStructFunc(StructFuncSyntax function) @@ -157,42 +192,44 @@ public sealed class TypeChecker private FuncNode CheckFuncDefinition(FuncSyntax node) { - using (BeginRootScope(_syntaxTree.Metadata.ModuleName)) + foreach (var parameter in node.Signature.Parameters) { - foreach (var parameter in node.Signature.Parameters) - { - CurrentScope.DeclareVariable(new Variable(parameter.Name, ResolveType(parameter.Type), VariableKind.RValue)); - } - - var signature = CheckFuncSignature(node.Signature); - - BlockNode? body = null; - if (node.Body != null) - { - _funcReturnTypes.Push(signature.ReturnType); - - body = CheckBlock(node.Body); - - if (!AlwaysReturns(body)) - { - if (signature.ReturnType is NubVoidType) - { - body.Statements.Add(new ReturnNode(null)); - } - else - { - Diagnostics.Add(Diagnostic - .Error("Not all code paths return a value") - .At(node.Body) - .Build()); - } - } - - _funcReturnTypes.Pop(); - } - - return new FuncNode(CurrentScope.Module, node.Name, node.ExternSymbol, signature, body); + CurrentScope.DeclareVariable(new Variable(parameter.Name, ResolveType(parameter.Type), VariableKind.RValue)); } + + var signature = CheckFuncSignature(node.Signature); + + BlockNode? body = null; + if (node.Body != null) + { + _funcReturnTypes.Push(signature.ReturnType); + + body = CheckBlock(node.Body); + + if (!AlwaysReturns(body)) + { + if (signature.ReturnType is NubVoidType) + { + body.Statements.Add(new ReturnNode(null)); + } + else + { + Diagnostics.Add(Diagnostic + .Error("Not all code paths return a value") + .At(node.Body) + .Build()); + } + } + + _funcReturnTypes.Pop(); + } + + return new FuncNode(CurrentScope.Module, node.Name, node.ExternSymbol, signature, body); + } + + private GlobalVariableNode CheckGlobalVariable(GlobalVariableSyntax node) + { + return new GlobalVariableNode(CurrentScope.Module, node.Name, CheckExpression(node.Value)); } private AssignmentNode CheckAssignment(AssignmentSyntax statement) @@ -701,6 +738,19 @@ public sealed class TypeChecker var includePrivate = expression.Module == CurrentScope.Module; + var globalVariable = module.GlobalVariables(includePrivate).FirstOrDefault(x => x.Name == expression.Name); + if (globalVariable != null) + { + // todo(nub31): This should be done in the global scope + NubType? type = null; + if (globalVariable.ExplicitType != null) + { + type = ResolveType(globalVariable.ExplicitType); + } + + return CheckExpression(globalVariable.Value, type); + } + // First, look for the exported function in the specified module var function = module.Functions(includePrivate).FirstOrDefault(x => x.Name == expression.Name); if (function != null) @@ -733,8 +783,8 @@ public sealed class TypeChecker { return floatType.Width switch { - 32 => new Float32LiteralNode(floatType, float.Parse(expression.Value)), - 64 => new Float64LiteralNode(floatType, double.Parse(expression.Value)), + 32 => new Float32LiteralNode(floatType, float.Parse(expression.Value, CultureInfo.InvariantCulture)), + 64 => new Float64LiteralNode(floatType, double.Parse(expression.Value, CultureInfo.InvariantCulture)), _ => throw new ArgumentOutOfRangeException() }; } @@ -749,6 +799,30 @@ public sealed class TypeChecker ? new Float32LiteralNode(type, float.Parse(expression.Value, CultureInfo.InvariantCulture)) : new Float64LiteralNode(type, double.Parse(expression.Value, CultureInfo.InvariantCulture)); } + case LiteralKind.Hex: + { + if (expectedType is NubIntType intType) + { + return intType.Signed + ? new IntLiteralNode(intType, Convert.ToInt64(expression.Value, 16)) + : new UIntLiteralNode(intType, Convert.ToUInt64(expression.Value, 16)); + } + + var type = new NubIntType(true, 64); + return new IntLiteralNode(type, Convert.ToInt64(expression.Value, 16)); + } + case LiteralKind.Binary: + { + if (expectedType is NubIntType intType) + { + return intType.Signed + ? new IntLiteralNode(intType, Convert.ToInt64(expression.Value[2..], 2)) + : new UIntLiteralNode(intType, Convert.ToUInt64(expression.Value[2..], 2)); + } + + var type = new NubIntType(true, 64); + return new IntLiteralNode(type, Convert.ToInt64(expression.Value.Substring(2), 2)); + } case LiteralKind.String: { return expectedType switch diff --git a/example/src/main.nub b/example/src/main.nub index 7542ace..54f5b8f 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -5,7 +5,7 @@ module "main" extern "main" func main(args: []cstring): i64 { - raylib::SetConfigFlags(raylib::ConfigFlags::VSYNC_HINT) + raylib::SetConfigFlags(raylib::FLAG_VSYNC_HINT) raylib::InitWindow(1600, 900, "Hi from nub-lang") raylib::SetTargetFPS(240) @@ -45,7 +45,8 @@ extern "main" func main(args: []cstring): i64 raylib::BeginDrawing() { - raylib::ClearBackground(bgColor); + raylib::ClearBackground(bgColor) + raylib::DrawFPS(10, 10) raylib::DrawRectangle(x, y, width, height, color) } raylib::EndDrawing() diff --git a/example/src/raylib.nub b/example/src/raylib.nub index 6c30f9d..0e875e1 100644 --- a/example/src/raylib.nub +++ b/example/src/raylib.nub @@ -1,34 +1,34 @@ module "raylib" -// export let PI = 3.14159265358979323846 +export let PI = 3.14159265358979323846 -// export let LIGHTGRAY = struct Color { r = 200, g = 200, b = 200, a = 255 } -// export let GRAY = struct Color { r = 130, g = 130, b = 130, a = 255 } -// export let DARKGRAY = struct Color { r = 80, g = 80, b = 80, a = 255 } -// export let YELLOW = struct Color { r = 253, g = 249, b = 0, a = 255 } -// export let GOLD = struct Color { r = 255, g = 203, b = 0, a = 255 } -// export let ORANGE = struct Color { r = 255, g = 161, b = 0, a = 255 } -// export let PINK = struct Color { r = 255, g = 109, b = 194, a = 255 } -// export let RED = struct Color { r = 230, g = 41, b = 55, a = 255 } -// export let MAROON = struct Color { r = 190, g = 33, b = 55, a = 255 } -// export let GREEN = struct Color { r = 0, g = 228, b = 48, a = 255 } -// export let LIME = struct Color { r = 0, g = 158, b = 47, a = 255 } -// export let DARKGREEN = struct Color { r = 0, g = 117, b = 44, a = 255 } -// export let SKYBLUE = struct Color { r = 102, g = 191, b = 255, a = 255 } -// export let BLUE = struct Color { r = 0, g = 121, b = 241, a = 255 } -// export let DARKBLUE = struct Color { r = 0, g = 82, b = 172, a = 255 } -// export let PURPLE = struct Color { r = 200, g = 122, b = 255, a = 255 } -// export let VIOLET = struct Color { r = 135, g = 60, b = 190, a = 255 } -// export let DARKPURPLE = struct Color { r = 112, g = 31, b = 126, a = 255 } -// export let BEIGE = struct Color { r = 211, g = 176, b = 131, a = 255 } -// export let BROWN = struct Color { r = 127, g = 106, b = 79, a = 255 } -// export let DARKBROWN = struct Color { r = 76, g = 63, b = 47, a = 255 } +export let LIGHTGRAY = struct Color { r = 200 g = 200 b = 200 a = 255 } +export let GRAY = struct Color { r = 130 g = 130 b = 130 a = 255 } +export let DARKGRAY = struct Color { r = 80 g = 80 b = 80 a = 255 } +export let YELLOW = struct Color { r = 253 g = 249 b = 0 a = 255 } +export let GOLD = struct Color { r = 255 g = 203 b = 0 a = 255 } +export let ORANGE = struct Color { r = 255 g = 161 b = 0 a = 255 } +export let PINK = struct Color { r = 255 g = 109 b = 194 a = 255 } +export let RED = struct Color { r = 230 g = 41 b = 55 a = 255 } +export let MAROON = struct Color { r = 190 g = 33 b = 55 a = 255 } +export let GREEN = struct Color { r = 0 g = 228 b = 48 a = 255 } +export let LIME = struct Color { r = 0 g = 158 b = 47 a = 255 } +export let DARKGREEN = struct Color { r = 0 g = 117 b = 44 a = 255 } +export let SKYBLUE = struct Color { r = 102 g = 191 b = 255 a = 255 } +export let BLUE = struct Color { r = 0 g = 121 b = 241 a = 255 } +export let DARKBLUE = struct Color { r = 0 g = 82 b = 172 a = 255 } +export let PURPLE = struct Color { r = 200 g = 122 b = 255 a = 255 } +export let VIOLET = struct Color { r = 135 g = 60 b = 190 a = 255 } +export let DARKPURPLE = struct Color { r = 112 g = 31 b = 126 a = 255 } +export let BEIGE = struct Color { r = 211 g = 176 b = 131 a = 255 } +export let BROWN = struct Color { r = 127 g = 106 b = 79 a = 255 } +export let DARKBROWN = struct Color { r = 76 g = 63 b = 47 a = 255 } -// export let WHITE = struct Color { r = 255, g = 255, b = 255, a = 255 } -// export let BLACK = struct Color { r = 0, g = 0, b = 0, a = 255 } -// export let BLANK = struct Color { r = 0, g = 0, b = 0, a = 0 } -// export let MAGENTA = struct Color { r = 255, g = 0, b = 255, a = 255 } -// export let RAYWHITE = struct Color { r = 245, g = 245, b = 245, a = 255 } +export let WHITE = struct Color { r = 255 g = 255 b = 255 a = 255 } +export let BLACK = struct Color { r = 0 g = 0 b = 0 a = 255 } +export let BLANK = struct Color { r = 0 g = 0 b = 0 a = 0 } +export let MAGENTA = struct Color { r = 255 g = 0 b = 255 a = 255 } +export let RAYWHITE = struct Color { r = 245 g = 245 b = 245 a = 255 } export struct Vector2 { @@ -382,388 +382,326 @@ export struct AutomationEventList events: ^AutomationEvent } -// export enum ConfigFlags -// { -// VSYNC_HINT = 0x00000040 -// FULLSCREEN_MODE = 0x00000002 -// WINDOW_RESIZABLE = 0x00000004 -// WINDOW_UNDECORATED = 0x00000008 -// WINDOW_HIDDEN = 0x00000080 -// WINDOW_MINIMIZED = 0x00000200 -// WINDOW_MAXIMIZED = 0x00000400 -// WINDOW_UNFOCUSED = 0x00000800 -// WINDOW_TOPMOST = 0x00001000 -// WINDOW_ALWAYS_RUN = 0x00000100 -// WINDOW_TRANSPARENT = 0x00000010 -// WINDOW_HIGHDPI = 0x00002000 -// WINDOW_MOUSE_PASSTHROUGH = 0x00004000 -// BORDERLESS_WINDOWED_MODE = 0x00008000 -// MSAA_4X_HINT = 0x00000020 -// INTERLACED_HINT = 0x00010000 -// } +export let FLAG_VSYNC_HINT: u32 = 0x00000040 +export let FLAG_FULLSCREEN_MODE: u32 = 0x00000002 +export let FLAG_WINDOW_RESIZABLE: u32 = 0x00000004 +export let FLAG_WINDOW_UNDECORATED: u32 = 0x00000008 +export let FLAG_WINDOW_HIDDEN: u32 = 0x00000080 +export let FLAG_WINDOW_MINIMIZED: u32 = 0x00000200 +export let FLAG_WINDOW_MAXIMIZED: u32 = 0x00000400 +export let FLAG_WINDOW_UNFOCUSED: u32 = 0x00000800 +export let FLAG_WINDOW_TOPMOST: u32 = 0x00001000 +export let FLAG_WINDOW_ALWAYS_RUN: u32 = 0x00000100 +export let FLAG_WINDOW_TRANSPARENT: u32 = 0x00000010 +export let FLAG_WINDOW_HIGHDPI: u32 = 0x00002000 +export let FLAG_WINDOW_MOUSE_PASSTHROUGH: u32 = 0x00004000 +export let FLAG_BORDERLESS_WINDOWED_MODE: u32 = 0x00008000 +export let FLAG_MSAA_4X_HINT: u32 = 0x00000020 +export let FLAG_INTERLACED_HINT: u32 = 0x00010000 +export let LOG_ALL: i32 = 0 +export let LOG_TRACE: i32 = 1 +export let LOG_DEBUG: i32 = 2 +export let LOG_INFO: i32 = 3 +export let LOG_WARNING: i32 = 4 +export let LOG_ERROR: i32 = 5 +export let LOG_FATAL: i32 = 6 +export let LOG_NONE: i32 = 7 -// export enum TraceLogLevel -// { -// LOG_ALL = 0 -// LOG_TRACE -// LOG_DEBUG -// LOG_INFO -// LOG_WARNING -// LOG_ERROR -// LOG_FATAL -// LOG_NONE -// } +export let KEY_NULL: i32 = 0 +export let KEY_APOSTROPHE: i32 = 39 +export let KEY_COMMA: i32 = 44 +export let KEY_MINUS: i32 = 45 +export let KEY_PERIOD: i32 = 46 +export let KEY_SLASH: i32 = 47 +export let KEY_ZERO: i32 = 48 +export let KEY_ONE: i32 = 49 +export let KEY_TWO: i32 = 50 +export let KEY_THREE: i32 = 51 +export let KEY_FOUR: i32 = 52 +export let KEY_FIVE: i32 = 53 +export let KEY_SIX: i32 = 54 +export let KEY_SEVEN: i32 = 55 +export let KEY_EIGHT: i32 = 56 +export let KEY_NINE: i32 = 57 +export let KEY_SEMICOLON: i32 = 59 +export let KEY_EQUAL: i32 = 61 +export let KEY_A: i32 = 65 +export let KEY_B: i32 = 66 +export let KEY_C: i32 = 67 +export let KEY_D: i32 = 68 +export let KEY_E: i32 = 69 +export let KEY_F: i32 = 70 +export let KEY_G: i32 = 71 +export let KEY_H: i32 = 72 +export let KEY_I: i32 = 73 +export let KEY_J: i32 = 74 +export let KEY_K: i32 = 75 +export let KEY_L: i32 = 76 +export let KEY_M: i32 = 77 +export let KEY_N: i32 = 78 +export let KEY_O: i32 = 79 +export let KEY_P: i32 = 80 +export let KEY_Q: i32 = 81 +export let KEY_R: i32 = 82 +export let KEY_S: i32 = 83 +export let KEY_T: i32 = 84 +export let KEY_U: i32 = 85 +export let KEY_V: i32 = 86 +export let KEY_W: i32 = 87 +export let KEY_X: i32 = 88 +export let KEY_Y: i32 = 89 +export let KEY_Z: i32 = 90 +export let KEY_LEFT_BRACKET: i32 = 91 +export let KEY_BACKSLASH: i32 = 92 +export let KEY_RIGHT_BRACKET: i32 = 93 +export let KEY_GRAVE: i32 = 96 +export let KEY_SPACE: i32 = 32 +export let KEY_ESCAPE: i32 = 256 +export let KEY_ENTER: i32 = 257 +export let KEY_TAB: i32 = 258 +export let KEY_BACKSPACE: i32 = 259 +export let KEY_INSERT: i32 = 260 +export let KEY_DELETE: i32 = 261 +export let KEY_RIGHT: i32 = 262 +export let KEY_LEFT: i32 = 263 +export let KEY_DOWN: i32 = 264 +export let KEY_UP: i32 = 265 +export let KEY_PAGE_UP: i32 = 266 +export let KEY_PAGE_DOWN: i32 = 267 +export let KEY_HOME: i32 = 268 +export let KEY_END: i32 = 269 +export let KEY_CAPS_LOCK: i32 = 280 +export let KEY_SCROLL_LOCK: i32 = 281 +export let KEY_NUM_LOCK: i32 = 282 +export let KEY_PRINT_SCREEN: i32 = 283 +export let KEY_PAUSE: i32 = 284 +export let KEY_F1: i32 = 290 +export let KEY_F2: i32 = 291 +export let KEY_F3: i32 = 292 +export let KEY_F4: i32 = 293 +export let KEY_F5: i32 = 294 +export let KEY_F6: i32 = 295 +export let KEY_F7: i32 = 296 +export let KEY_F8: i32 = 297 +export let KEY_F9: i32 = 298 +export let KEY_F10: i32 = 299 +export let KEY_F11: i32 = 300 +export let KEY_F12: i32 = 301 +export let KEY_LEFT_SHIFT: i32 = 340 +export let KEY_LEFT_CONTROL: i32 = 341 +export let KEY_LEFT_ALT: i32 = 342 +export let KEY_LEFT_SUPER: i32 = 343 +export let KEY_RIGHT_SHIFT: i32 = 344 +export let KEY_RIGHT_CONTROL: i32 = 345 +export let KEY_RIGHT_ALT: i32 = 346 +export let KEY_RIGHT_SUPER: i32 = 347 +export let KEY_KB_MENU: i32 = 348 +export let KEY_KP_0: i32 = 320 +export let KEY_KP_1: i32 = 321 +export let KEY_KP_2: i32 = 322 +export let KEY_KP_3: i32 = 323 +export let KEY_KP_4: i32 = 324 +export let KEY_KP_5: i32 = 325 +export let KEY_KP_6: i32 = 326 +export let KEY_KP_7: i32 = 327 +export let KEY_KP_8: i32 = 328 +export let KEY_KP_9: i32 = 329 +export let KEY_KP_DECIMAL: i32 = 330 +export let KEY_KP_DIVIDE: i32 = 331 +export let KEY_KP_MULTIPLY: i32 = 332 +export let KEY_KP_SUBTRACT: i32 = 333 +export let KEY_KP_ADD: i32 = 334 +export let KEY_KP_ENTER: i32 = 335 +export let KEY_KP_EQUAL: i32 = 336 +export let KEY_BACK: i32 = 4 +export let KEY_MENU: i32 = 5 +export let KEY_VOLUME_UP: i32 = 24 +export let KEY_VOLUME_DOWN: i32 = 25 -// export enum KeyboardKey -// { -// NULL = 0 -// APOSTROPHE = 39 -// COMMA = 44 -// MINUS = 45 -// PERIOD = 46 -// SLASH = 47 -// ZERO = 48 -// ONE = 49 -// TWO = 50 -// THREE = 51 -// FOUR = 52 -// FIVE = 53 -// SIX = 54 -// SEVEN = 55 -// EIGHT = 56 -// NINE = 57 -// SEMICOLON = 59 -// EQUAL = 61 -// A = 65 -// B = 66 -// C = 67 -// D = 68 -// E = 69 -// F = 70 -// G = 71 -// H = 72 -// I = 73 -// J = 74 -// K = 75 -// L = 76 -// M = 77 -// N = 78 -// O = 79 -// P = 80 -// Q = 81 -// R = 82 -// S = 83 -// T = 84 -// U = 85 -// V = 86 -// W = 87 -// X = 88 -// Y = 89 -// Z = 90 -// LEFT_BRACKET = 91 -// BACKSLASH = 92 -// RIGHT_BRACKET = 93 -// GRAVE = 96 -// SPACE = 32 -// ESCAPE = 256 -// ENTER = 257 -// TAB = 258 -// BACKSPACE = 259 -// INSERT = 260 -// DELETE = 261 -// RIGHT = 262 -// LEFT = 263 -// DOWN = 264 -// UP = 265 -// PAGE_UP = 266 -// PAGE_DOWN = 267 -// HOME = 268 -// END = 269 -// CAPS_LOCK = 280 -// SCROLL_LOCK = 281 -// NUM_LOCK = 282 -// PRINT_SCREEN = 283 -// PAUSE = 284 -// F1 = 290 -// F2 = 291 -// F3 = 292 -// F4 = 293 -// F5 = 294 -// F6 = 295 -// F7 = 296 -// F8 = 297 -// F9 = 298 -// F10 = 299 -// F11 = 300 -// F12 = 301 -// LEFT_SHIFT = 340 -// LEFT_CONTROL = 341 -// LEFT_ALT = 342 -// LEFT_SUPER = 343 -// RIGHT_SHIFT = 344 -// RIGHT_CONTROL = 345 -// RIGHT_ALT = 346 -// RIGHT_SUPER = 347 -// KB_MENU = 348 -// KP_0 = 320 -// KP_1 = 321 -// KP_2 = 322 -// KP_3 = 323 -// KP_4 = 324 -// KP_5 = 325 -// KP_6 = 326 -// KP_7 = 327 -// KP_8 = 328 -// KP_9 = 329 -// KP_DECIMAL = 330 -// KP_DIVIDE = 331 -// KP_MULTIPLY = 332 -// KP_SUBTRACT = 333 -// KP_ADD = 334 -// KP_ENTER = 335 -// KP_EQUAL = 336 -// BACK = 4 -// MENU = 5 -// VOLUME_UP = 24 -// VOLUME_DOWN = 25 -// } +export let MOUSE_BUTTON_LEFT: i32 = 0 +export let MOUSE_BUTTON_RIGHT: i32 = 1 +export let MOUSE_BUTTON_MIDDLE: i32 = 2 +export let MOUSE_BUTTON_SIDE: i32 = 3 +export let MOUSE_BUTTON_EXTRA: i32 = 4 +export let MOUSE_BUTTON_FORWARD: i32 = 5 +export let MOUSE_BUTTON_BACK: i32 = 6 -// export enum MouseButton -// { -// LEFT = 0 -// RIGHT = 1 -// MIDDLE = 2 -// SIDE = 3 -// EXTRA = 4 -// FORWARD = 5 -// BACK = 6 -// } +export let MOUSE_CURSOR_DEFAULT: i32 = 0 +export let MOUSE_CURSOR_ARROW: i32 = 1 +export let MOUSE_CURSOR_IBEAM: i32 = 2 +export let MOUSE_CURSOR_CROSSHAIR: i32 = 3 +export let MOUSE_CURSOR_POINTING_HAND: i32 = 4 +export let MOUSE_CURSOR_RESIZE_EW: i32 = 5 +export let MOUSE_CURSOR_RESIZE_NS: i32 = 6 +export let MOUSE_CURSOR_RESIZE_NWSE: i32 = 7 +export let MOUSE_CURSOR_RESIZE_NESW: i32 = 8 +export let MOUSE_CURSOR_RESIZE_ALL: i32 = 9 +export let MOUSE_CURSOR_NOT_ALLOWED: i32 = 10 -// export enum MouseCursor -// { -// DEFAULT = 0 -// ARROW = 1 -// IBEAM = 2 -// CROSSHAIR = 3 -// POINTING_HAND = 4 -// RESIZE_EW = 5 -// RESIZE_NS = 6 -// RESIZE_NWSE = 7 -// RESIZE_NESW = 8 -// RESIZE_ALL = 9 -// NOT_ALLOWED = 10 -// } +export let GAMEPAD_BUTTON_UNKNOWN: i32 = 0 +export let GAMEPAD_BUTTON_LEFT_FACE_UP: i32 = 1 +export let GAMEPAD_BUTTON_LEFT_FACE_RIGHT: i32 = 2 +export let GAMEPAD_BUTTON_LEFT_FACE_DOWN: i32 = 3 +export let GAMEPAD_BUTTON_LEFT_FACE_LEFT: i32 = 4 +export let GAMEPAD_BUTTON_RIGHT_FACE_UP: i32 = 5 +export let GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: i32 = 6 +export let GAMEPAD_BUTTON_RIGHT_FACE_DOWN: i32 = 7 +export let GAMEPAD_BUTTON_RIGHT_FACE_LEFT: i32 = 8 +export let GAMEPAD_BUTTON_LEFT_TRIGGER_1: i32 = 9 +export let GAMEPAD_BUTTON_LEFT_TRIGGER_2: i32 = 10 +export let GAMEPAD_BUTTON_RIGHT_TRIGGER_1: i32 = 11 +export let GAMEPAD_BUTTON_RIGHT_TRIGGER_2: i32 = 12 +export let GAMEPAD_BUTTON_MIDDLE_LEFT: i32 = 13 +export let GAMEPAD_BUTTON_MIDDLE: i32 = 14 +export let GAMEPAD_BUTTON_MIDDLE_RIGHT: i32 = 15 +export let GAMEPAD_BUTTON_LEFT_THUMB: i32 = 16 +export let GAMEPAD_BUTTON_RIGHT_THUMB: i32 = 17 -// export enum GamepadButton -// { -// UNKNOWN = 0 -// LEFT_FACE_UP -// LEFT_FACE_RIGHT -// LEFT_FACE_DOWN -// LEFT_FACE_LEFT -// RIGHT_FACE_UP -// RIGHT_FACE_RIGHT -// RIGHT_FACE_DOWN -// RIGHT_FACE_LEFT -// LEFT_TRIGGER_1 -// LEFT_TRIGGER_2 -// RIGHT_TRIGGER_1 -// RIGHT_TRIGGER_2 -// MIDDLE_LEFT -// MIDDLE -// MIDDLE_RIGHT -// LEFT_THUMB -// RIGHT_THUMB -// } +export let GAMEPAD_AXIS_LEFT_X: i32 = 0 +export let GAMEPAD_AXIS_LEFT_Y: i32 = 1 +export let GAMEPAD_AXIS_RIGHT_X: i32 = 2 +export let GAMEPAD_AXIS_RIGHT_Y: i32 = 3 +export let GAMEPAD_AXIS_LEFT_TRIGGER: i32 = 4 +export let GAMEPAD_AXIS_RIGHT_TRIGGER: i32 = 5 -// export enum GamepadAxis -// { -// LEFT_X = 0 -// LEFT_Y = 1 -// RIGHT_X = 2 -// RIGHT_Y = 3 -// LEFT_TRIGGER = 4 -// RIGHT_TRIGGER = 5 -// } +export let MATERIAL_MAP_ALBEDO: i32 = 0 +export let MATERIAL_MAP_METALNESS: i32 = 1 +export let MATERIAL_MAP_NORMAL: i32 = 2 +export let MATERIAL_MAP_ROUGHNESS: i32 = 3 +export let MATERIAL_MAP_OCCLUSION: i32 = 4 +export let MATERIAL_MAP_EMISSION: i32 = 5 +export let MATERIAL_MAP_HEIGHT: i32 = 6 +export let MATERIAL_MAP_CUBEMAP: i32 = 7 +export let MATERIAL_MAP_IRRADIANCE: i32 = 8 +export let MATERIAL_MAP_PREFILTER: i32 = 9 +export let MATERIAL_MAP_BRDF: i32 = 10 -// export enum MaterialMapIndex -// { -// ALBEDO = 0 -// METALNESS -// NORMAL -// ROUGHNESS -// OCCLUSION -// EMISSION -// HEIGHT -// CUBEMAP -// IRRADIANCE -// PREFILTER -// BRDF -// } +export let SHADER_LOC_VERTEX_POSITION: i32 = 0 +export let SHADER_LOC_VERTEX_TEXCOORD01: i32 = 1 +export let SHADER_LOC_VERTEX_TEXCOORD02: i32 = 2 +export let SHADER_LOC_VERTEX_NORMAL: i32 = 3 +export let SHADER_LOC_VERTEX_TANGENT: i32 = 4 +export let SHADER_LOC_VERTEX_COLOR: i32 = 5 +export let SHADER_LOC_MATRIX_MVP: i32 = 6 +export let SHADER_LOC_MATRIX_VIEW: i32 = 7 +export let SHADER_LOC_MATRIX_PROJECTION: i32 = 8 +export let SHADER_LOC_MATRIX_MODEL: i32 = 9 +export let SHADER_LOC_MATRIX_NORMAL: i32 = 10 +export let SHADER_LOC_VECTOR_VIEW: i32 = 11 +export let SHADER_LOC_COLOR_DIFFUSE: i32 = 12 +export let SHADER_LOC_COLOR_SPECULAR: i32 = 13 +export let SHADER_LOC_COLOR_AMBIENT: i32 = 14 +export let SHADER_LOC_MAP_ALBEDO: i32 = 15 +export let SHADER_LOC_MAP_METALNESS: i32 = 16 +export let SHADER_LOC_MAP_NORMAL: i32 = 17 +export let SHADER_LOC_MAP_ROUGHNESS: i32 = 18 +export let SHADER_LOC_MAP_OCCLUSION: i32 = 19 +export let SHADER_LOC_MAP_EMISSION: i32 = 20 +export let SHADER_LOC_MAP_HEIGHT: i32 = 21 +export let SHADER_LOC_MAP_CUBEMAP: i32 = 22 +export let SHADER_LOC_MAP_IRRADIANCE: i32 = 23 +export let SHADER_LOC_MAP_PREFILTER: i32 = 24 +export let SHADER_LOC_MAP_BRDF: i32 = 25 +export let SHADER_LOC_VERTEX_BONEIDS: i32 = 26 +export let SHADER_LOC_VERTEX_BONEWEIGHTS: i32 = 27 +export let SHADER_LOC_BONE_MATRICES: i32 = 28 -// export enum ShaderLocationIndex -// { -// VERTEX_POSITION = 0 -// VERTEX_TEXCOORD01 -// VERTEX_TEXCOORD02 -// VERTEX_NORMAL -// VERTEX_TANGENT -// VERTEX_COLOR -// MATRIX_MVP -// MATRIX_VIEW -// MATRIX_PROJECTION -// MATRIX_MODEL -// MATRIX_NORMAL -// VECTOR_VIEW -// COLOR_DIFFUSE -// COLOR_SPECULAR -// COLOR_AMBIENT -// MAP_ALBEDO -// MAP_METALNESS -// MAP_NORMAL -// MAP_ROUGHNESS -// MAP_OCCLUSION -// MAP_EMISSION -// MAP_HEIGHT -// MAP_CUBEMAP -// MAP_IRRADIANCE -// MAP_PREFILTER -// MAP_BRDF -// VERTEX_BONEIDS -// VERTEX_BONEWEIGHTS -// BONE_MATRICES -// } +export let SHADER_UNIFORM_FLOAT: i32 = 0 +export let SHADER_UNIFORM_VEC2: i32 = 1 +export let SHADER_UNIFORM_VEC3: i32 = 2 +export let SHADER_UNIFORM_VEC4: i32 = 3 +export let SHADER_UNIFORM_INT: i32 = 4 +export let SHADER_UNIFORM_IVEC2: i32 = 5 +export let SHADER_UNIFORM_IVEC3: i32 = 6 +export let SHADER_UNIFORM_IVEC4: i32 = 7 +export let SHADER_UNIFORM_SAMPLER2D: i32 = 8 -// export enum ShaderUniformDataType { -// FLOAT = 0 -// VEC2 -// VEC3 -// VEC4 -// INT -// IVEC2 -// IVEC3 -// IVEC4 -// SAMPLER2D -// } +export let SHADER_ATTRIB_FLOAT: i32 = 0 +export let SHADER_ATTRIB_VEC2: i32 = 1 +export let SHADER_ATTRIB_VEC3: i32 = 2 +export let SHADER_ATTRIB_VEC4: i32 = 3 -// export enum ShaderAttributeDataType { -// FLOAT = 0 -// VEC2 -// VEC3 -// VEC4 -// } +export let PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: i32 = 1 +export let PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: i32 = 2 +export let PIXELFORMAT_UNCOMPRESSED_R5G6B5: i32 = 3 +export let PIXELFORMAT_UNCOMPRESSED_R8G8B8: i32 = 4 +export let PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: i32 = 5 +export let PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: i32 = 6 +export let PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: i32 = 7 +export let PIXELFORMAT_UNCOMPRESSED_R32: i32 = 8 +export let PIXELFORMAT_UNCOMPRESSED_R32G32B32: i32 = 9 +export let PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: i32 = 10 +export let PIXELFORMAT_UNCOMPRESSED_R16: i32 = 11 +export let PIXELFORMAT_UNCOMPRESSED_R16G16B16: i32 = 12 +export let PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: i32 = 13 +export let PIXELFORMAT_COMPRESSED_DXT1_RGB: i32 = 14 +export let PIXELFORMAT_COMPRESSED_DXT1_RGBA: i32 = 15 +export let PIXELFORMAT_COMPRESSED_DXT3_RGBA: i32 = 16 +export let PIXELFORMAT_COMPRESSED_DXT5_RGBA: i32 = 17 +export let PIXELFORMAT_COMPRESSED_ETC1_RGB: i32 = 18 +export let PIXELFORMAT_COMPRESSED_ETC2_RGB: i32 = 19 +export let PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: i32 = 20 +export let PIXELFORMAT_COMPRESSED_PVRT_RGB: i32 = 21 +export let PIXELFORMAT_COMPRESSED_PVRT_RGBA: i32 = 22 +export let PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: i32 = 23 +export let PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: i32 = 24 -// export enum PixelFormat -// { -// UNCOMPRESSED_GRAYSCALE = 1 -// UNCOMPRESSED_GRAY_ALPHA -// UNCOMPRESSED_R5G6B5 -// UNCOMPRESSED_R8G8B8 -// UNCOMPRESSED_R5G5B5A1 -// UNCOMPRESSED_R4G4B4A4 -// UNCOMPRESSED_R8G8B8A8 -// UNCOMPRESSED_R32 -// UNCOMPRESSED_R32G32B32 -// UNCOMPRESSED_R32G32B32A32 -// UNCOMPRESSED_R16 -// UNCOMPRESSED_R16G16B16 -// UNCOMPRESSED_R16G16B16A16 -// COMPRESSED_DXT1_RGB -// COMPRESSED_DXT1_RGBA -// COMPRESSED_DXT3_RGBA -// COMPRESSED_DXT5_RGBA -// COMPRESSED_ETC1_RGB -// COMPRESSED_ETC2_RGB -// COMPRESSED_ETC2_EAC_RGBA -// COMPRESSED_PVRT_RGB -// COMPRESSED_PVRT_RGBA -// COMPRESSED_ASTC_4x4_RGBA -// COMPRESSED_ASTC_8x8_RGBA -// } +export let TEXTURE_FILTER_POINT: i32 = 0 +export let TEXTURE_FILTER_BILINEAR: i32 = 1 +export let TEXTURE_FILTER_TRILINEAR: i32 = 2 +export let TEXTURE_FILTER_ANISOTROPIC_4X: i32 = 3 +export let TEXTURE_FILTER_ANISOTROPIC_8X: i32 = 4 +export let TEXTURE_FILTER_ANISOTROPIC_16X: i32 = 5 -// export enum TextureFilter -// { -// POINT = 0 -// BILINEAR -// TRILINEAR -// ANISOTROPIC_4X -// ANISOTROPIC_8X -// ANISOTROPIC_16X -// } +export let TEXTURE_WRAP_REPEAT: i32 = 0 +export let TEXTURE_WRAP_CLAMP: i32 = 1 +export let TEXTURE_WRAP_MIRROR_REPEAT: i32 = 2 +export let TEXTURE_WRAP_MIRROR_CLAMP: i32 = 3 -// export enum TextureWrap -// { -// REPEAT = 0 -// CLAMP -// MIRROR_REPEAT -// MIRROR_CLAMP -// } +export let CUBEMAP_LAYOUT_AUTO_DETECT: i32 = 0 +export let CUBEMAP_LAYOUT_LINE_VERTICAL: i32 = 1 +export let CUBEMAP_LAYOUT_LINE_HORIZONTAL: i32 = 2 +export let CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: i32 = 3 +export let CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: i32 = 4 -// export enum CubemapLayout -// { -// AUTO_DETECT = 0 -// LINE_VERTICAL -// LINE_HORIZONTAL -// CROSS_THREE_BY_FOUR -// CROSS_FOUR_BY_THREE -// } +export let FONT_DEFAULT: i32 = 0 +export let FONT_BITMAP: i32 = 1 +export let FONT_SDF: i32 = 2 -// export enum FontType -// { -// FONT_DEFAULT = 0 -// FONT_BITMAP -// FONT_SDF -// } +export let BLEND_ALPHA: i32 = 0 +export let BLEND_ADDITIVE: i32 = 1 +export let BLEND_MULTIPLIED: i32 = 2 +export let BLEND_ADD_COLORS: i32 = 3 +export let BLEND_SUBTRACT_COLORS: i32 = 4 +export let BLEND_ALPHA_PREMULTIPLY: i32 = 5 +export let BLEND_CUSTOM: i32 = 6 +export let BLEND_CUSTOM_SEPARATE: i32 = 7 -// export enum BlendMode -// { -// BLEND_ALPHA = 0, -// BLEND_ADDITIVE, -// BLEND_MULTIPLIED, -// BLEND_ADD_COLORS, -// BLEND_SUBTRACT_COLORS, -// BLEND_ALPHA_PREMULTIPLY, -// BLEND_CUSTOM, -// BLEND_CUSTOM_SEPARATE -// } +export let GESTURE_NONE: i32 = 0 +export let GESTURE_TAP: i32 = 1 +export let GESTURE_DOUBLETAP: i32 = 2 +export let GESTURE_HOLD: i32 = 4 +export let GESTURE_DRAG: i32 = 8 +export let GESTURE_SWIPE_RIGHT: i32 = 16 +export let GESTURE_SWIPE_LEFT: i32 = 32 +export let GESTURE_SWIPE_UP: i32 = 64 +export let GESTURE_SWIPE_DOWN: i32 = 128 +export let GESTURE_PINCH_IN: i32 = 256 +export let GESTURE_PINCH_OUT: i32 = 512 -// export enum Gesture -// { -// GESTURE_NONE = 0 -// GESTURE_TAP = 1 -// GESTURE_DOUBLETAP = 2 -// GESTURE_HOLD = 4 -// GESTURE_DRAG = 8 -// GESTURE_SWIPE_RIGHT = 16 -// GESTURE_SWIPE_LEFT = 32 -// GESTURE_SWIPE_UP = 64 -// GESTURE_SWIPE_DOWN = 128 -// GESTURE_PINCH_IN = 256 -// GESTURE_PINCH_OUT = 512 -// } +export let CAMERA_CUSTOM: i32 = 0 +export let CAMERA_FREE: i32 = 1 +export let CAMERA_ORBITAL: i32 = 2 +export let CAMERA_FIRST_PERSON: i32 = 3 +export let CAMERA_THIRD_PERSON: i32 = 4 -// export enum CameraMode -// { -// CAMERA_CUSTOM = 0 -// CAMERA_FREE -// CAMERA_ORBITAL -// CAMERA_FIRST_PERSON -// CAMERA_THIRD_PERSON -// } +export let CAMERA_PERSPECTIVE = 0 +export let CAMERA_ORTHOGRAPHIC = 1 -// export enum CameraProjection -// { -// CAMERA_PERSPECTIVE = 0 -// CAMERA_ORTHOGRAPHIC -// } - -// export enum NPatchLayout -// { -// NPATCH_NINE_PATCH = 0 -// NPATCH_THREE_PATCH_VERTICAL -// NPATCH_THREE_PATCH_HORIZONTAL -// } +export let NPATCH_NINE_PATCH = 0 +export let NPATCH_THREE_PATCH_VERTICAL = 1 +export let NPATCH_THREE_PATCH_HORIZONTAL = 2 export extern "InitWindow" func InitWindow(width: i32, height: i32, title: cstring) export extern "CloseWindow" func CloseWindow()