diff --git a/code/demo.odin b/code/demo.odin index 376ed30ac..141788416 100644 --- a/code/demo.odin +++ b/code/demo.odin @@ -11,7 +11,7 @@ import { win32 "sys/windows.odin"; } -const Thing = enum f64 { +Thing :: enum f64 { _, // Ignore first value A = 1<<(10*iota), B, @@ -19,6 +19,9 @@ const Thing = enum f64 { D, }; -const main = proc() { +main :: proc() { fmt.println(Thing.A, Thing.B, Thing.C, Thing.D); + + x := 123; + fmt.println(x); } diff --git a/core/_preload.odin b/core/_preload.odin index e37c36a7c..c8fb77009 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -83,7 +83,7 @@ proc type_info_base(info ^Type_Info) -> ^Type_Info { if info == nil { return nil; } - var base = info; + base := info; match type i : base { case Type_Info.Named: base = i.base; @@ -140,14 +140,14 @@ type { } } -#thread_local var __context Context; +#thread_local __context: Context; -const DEFAULT_ALIGNMENT = align_of([vector 4]f32); +DEFAULT_ALIGNMENT :: align_of([vector 4]f32); proc __check_context() { - var c = ^__context; + c := ^__context; if c.allocator.procedure == nil { c.allocator = default_allocator(); @@ -161,20 +161,20 @@ proc alloc(size int) -> rawptr #inline { return alloc_align(size, DEFAULT_ALIGNM proc alloc_align(size, alignment int) -> rawptr #inline { __check_context(); - var a = context.allocator; + a := context.allocator; return a.procedure(a.data, Allocator_Mode.ALLOC, size, alignment, nil, 0, 0); } proc free(ptr rawptr) #inline { __check_context(); - var a = context.allocator; + a := context.allocator; if ptr != nil { a.procedure(a.data, Allocator_Mode.FREE, 0, 0, ptr, 0, 0); } } proc free_all() #inline { __check_context(); - var a = context.allocator; + a := context.allocator; a.procedure(a.data, Allocator_Mode.FREE_ALL, 0, 0, nil, 0, 0); } @@ -182,7 +182,7 @@ proc free_all() #inline { proc resize (ptr rawptr, old_size, new_size int) -> rawptr #inline { return resize_align(ptr, old_size, new_size, DEFAULT_ALIGNMENT); } proc resize_align(ptr rawptr, old_size, new_size, alignment int) -> rawptr #inline { __check_context(); - var a = context.allocator; + a := context.allocator; return a.procedure(a.data, Allocator_Mode.RESIZE, new_size, alignment, ptr, old_size, 0); } @@ -202,7 +202,7 @@ proc default_resize_align(old_memory rawptr, old_size, new_size, alignment int) return old_memory; } - var new_memory = alloc_align(new_size, alignment); + new_memory := alloc_align(new_size, alignment); if new_memory == nil { return nil; } @@ -221,9 +221,9 @@ proc default_allocator_proc(allocator_data rawptr, mode Allocator_Mode, when false { match mode { case ALLOC: - var total_size = size + alignment + size_of(mem.AllocationHeader); - var ptr = os.heap_alloc(total_size); - var header = ptr as ^mem.AllocationHeader; + total_size := size + alignment + size_of(mem.AllocationHeader); + ptr := os.heap_alloc(total_size); + header := ptr as ^mem.AllocationHeader; ptr = mem.align_forward(header+1, alignment); mem.allocation_header_fill(header, ptr, size); return mem.zero(ptr, size); @@ -236,9 +236,9 @@ proc default_allocator_proc(allocator_data rawptr, mode Allocator_Mode, // NOTE(bill): Does nothing case RESIZE: - var total_size = size + alignment + size_of(mem.AllocationHeader); - var ptr = os.heap_resize(mem.allocation_header(old_memory), total_size); - var header = ptr as ^mem.AllocationHeader; + total_size := size + alignment + size_of(mem.AllocationHeader); + ptr := os.heap_resize(mem.allocation_header(old_memory), total_size); + header := ptr as ^mem.AllocationHeader; ptr = mem.align_forward(header+1, alignment); mem.allocation_header_fill(header, ptr, size); return mem.zero(ptr, size); diff --git a/core/atomic.odin b/core/atomic.odin index 1a8c58490..08fb48795 100644 --- a/core/atomic.odin +++ b/core/atomic.odin @@ -2,7 +2,7 @@ // Inline vs external file? import win32 "sys/windows.odin" when ODIN_OS == "windows"; -var _ = compile_assert(ODIN_ARCH == "amd64"); // TODO(bill): x86 version +_ := compile_assert(ODIN_ARCH == "amd64"); // TODO(bill): x86 version proc yield_thread() { win32._mm_pause(); } @@ -35,8 +35,8 @@ proc fetch_or32(a ^i32, operand i32) -> i32 { return win32.InterlockedOr(a, operand); } proc spin_lock32(a ^i32, time_out int) -> bool { // NOTE(bill) time_out = -1 as default - var old_value = compare_exchange32(a, 1, 0); - var counter = 0; + old_value := compare_exchange32(a, 1, 0); + counter := 0; for old_value != 0 && (time_out < 0 || counter < time_out) { counter++; yield_thread(); @@ -51,7 +51,7 @@ proc spin_unlock32(a ^i32) { } proc try_acquire_lock32(a ^i32) -> bool { yield_thread(); - var old_value = compare_exchange32(a, 1, 0); + old_value := compare_exchange32(a, 1, 0); mfence(); return old_value == 0; } @@ -79,8 +79,8 @@ proc fetch_or64(a ^i64, operand i64) -> i64 { return win32.InterlockedOr64(a, operand); } proc spin_lock64(a ^i64, time_out int) -> bool { // NOTE(bill) time_out = -1 as default - var old_value = compare_exchange64(a, 1, 0); - var counter = 0; + old_value := compare_exchange64(a, 1, 0); + counter := 0; for old_value != 0 && (time_out < 0 || counter < time_out) { counter++; yield_thread(); @@ -95,7 +95,7 @@ proc spin_unlock64(a ^i64) { } proc try_acquire_lock64(a ^i64) -> bool { yield_thread(); - var old_value = compare_exchange64(a, 1, 0); + old_value := compare_exchange64(a, 1, 0); mfence(); return old_value == 0; } diff --git a/core/fmt.odin b/core/fmt.odin index 2b044131a..5e3db4235 100644 --- a/core/fmt.odin +++ b/core/fmt.odin @@ -4,26 +4,26 @@ import { "utf8.odin"; } -const PRINT_BUF_SIZE = 1<<12; +PRINT_BUF_SIZE :: 1<<12; proc fprint(fd os.Handle, args ..any) -> int { - var data [PRINT_BUF_SIZE]byte; - var buf = data[:0]; + data :[PRINT_BUF_SIZE]byte; + buf := data[:0]; bprint(^buf, ..args); os.write(fd, buf); return buf.count; } proc fprintln(fd os.Handle, args ..any) -> int { - var data [PRINT_BUF_SIZE]byte; - var buf = data[:0]; + data :[PRINT_BUF_SIZE]byte; + buf := data[:0]; bprintln(^buf, ..args); os.write(fd, buf); return buf.count; } proc fprintf(fd os.Handle, fmt string, args ..any) -> int { - var data [PRINT_BUF_SIZE]byte; - var buf = data[:0]; + data :[PRINT_BUF_SIZE]byte; + buf := data[:0]; bprintf(^buf, fmt, ..args); os.write(fd, buf); return buf.count; @@ -43,8 +43,8 @@ proc printf(fmt string, args ..any) -> int { proc fprint_type(fd os.Handle, info ^Type_Info) { - var data [PRINT_BUF_SIZE]byte; - var buf = data[:0]; + data :[PRINT_BUF_SIZE]byte; + buf := data[:0]; bprint_type(^buf, info); os.write(fd, buf); } @@ -53,7 +53,7 @@ proc fprint_type(fd os.Handle, info ^Type_Info) { proc print_byte_buffer(buf ^[]byte, b []byte) { if buf.count < buf.capacity { - var n = min(buf.capacity-buf.count, b.count); + n := min(buf.capacity-buf.count, b.count); if n > 0 { mem.copy(buf.data + buf.count, b.data, n); buf.count += n; @@ -67,21 +67,21 @@ proc bprint_string(buf ^[]byte, s string) { proc byte_reverse(b []byte) { - var n = b.count; - for var i = 0; i < n/2; i++ { + n := b.count; + for i := 0; i < n/2; i++ { b[i], b[n-1-i] = b[n-1-i], b[i]; } } proc bprint_rune(buf ^[]byte, r rune) { - var b, n = utf8.encode_rune(r); + b, n := utf8.encode_rune(r); bprint_string(buf, b[:n] as string); } proc bprint_space(buf ^[]byte) { bprint_rune(buf, ' '); } proc bprint_nl (buf ^[]byte) { bprint_rune(buf, '\n'); } -var __NUM_TO_CHAR_TABLE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$"; +__NUM_TO_CHAR_TABLE := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$"; proc bprint_bool(buffer ^[]byte, b bool) { if b { @@ -100,9 +100,9 @@ proc bprint_f16 (buffer ^[]byte, f f32) #inline { print__f64(buffer, f as f64, proc bprint_f32 (buffer ^[]byte, f f32) #inline { print__f64(buffer, f as f64, 7); } proc bprint_f64 (buffer ^[]byte, f f64) #inline { print__f64(buffer, f as f64, 16); } proc bprint_u64(buffer ^[]byte, value u64) { - var i = value; - var buf [20]byte; - var len = 0; + i := value; + buf :[20]byte; + len := 0; if i == 0 { buf[len] = '0'; len++; @@ -117,7 +117,7 @@ proc bprint_u64(buffer ^[]byte, value u64) { } proc bprint_i64(buffer ^[]byte, value i64) { // TODO(bill): Cleanup printing - var i = value; + i := value; if i < 0 { i = -i; bprint_rune(buffer, '-'); @@ -127,14 +127,14 @@ proc bprint_i64(buffer ^[]byte, value i64) { /* proc bprint_u128(buffer ^[]byte, value u128) { - var a = value transmute [2]u64; + a := value transmute [2]u64; if a[1] != 0 { bprint_u64(buffer, a[1]); } bprint_u64(buffer, a[0]); } proc bprint_i128(buffer ^[]byte, value i128) { - var i = value; + i := value; if i < 0 { i = -i; bprint_rune(buffer, '-'); @@ -145,7 +145,7 @@ proc bprint_i128(buffer ^[]byte, value i128) { proc print__f64(buffer ^[]byte, value f64, decimal_places int) { - var f = value; + f := value; if f == 0 { bprint_rune(buffer, '0'); return; @@ -155,13 +155,13 @@ proc print__f64(buffer ^[]byte, value f64, decimal_places int) { f = -f; } - var i = f as u64; + i := f as u64; bprint_u64(buffer, i); f -= i as f64; bprint_rune(buffer, '.'); - var mult f64 = 10.0; + mult :f64 = 10.0; for ; decimal_places >= 0; decimal_places-- { i = (f * mult) as u64; bprint_u64(buffer, i as u64); @@ -214,7 +214,7 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { if info.params == nil { bprint_string(buf, "()"); } else { - var count = (info.params as ^Tuple).fields.count; + count := (info.params as ^Tuple).fields.count; if count == 1 { bprint_string(buf, "("); } bprint_type(buf, info.params); if count == 1 { bprint_string(buf, ")"); } @@ -224,12 +224,12 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { bprint_type(buf, info.results); } case Tuple: - var count = info.fields.count; + count := info.fields.count; if count != 1 { bprint_string(buf, "("); } - for var i = 0; i < count; i++ { + for i := 0; i < count; i++ { if i > 0 { bprint_string(buf, ", "); } - var f = info.fields[i]; + f := info.fields[i]; if f.name.count > 0 { bprint_string(buf, f.name); @@ -259,7 +259,7 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { if info.packed { bprint_string(buf, "#packed "); } if info.ordered { bprint_string(buf, "#ordered "); } bprint_string(buf, "{"); - for var i = 0; i < info.fields.count; i++ { + for i := 0; i < info.fields.count; i++ { if i > 0 { bprint_string(buf, ", "); } @@ -271,7 +271,7 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { case Union: bprint_string(buf, "union {"); - for var i = 0; i < info.fields.count; i++ { + for i := 0; i < info.fields.count; i++ { if i > 0 { bprint_string(buf, ", "); } @@ -283,7 +283,7 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { case Raw_Union: bprint_string(buf, "raw_union {"); - for var i = 0; i < info.fields.count; i++ { + for i := 0; i < info.fields.count; i++ { if i > 0 { bprint_string(buf, ", "); } @@ -303,7 +303,7 @@ proc bprint_type(buf ^[]byte, ti ^Type_Info) { proc make_any(type_info ^Type_Info, data rawptr) -> any { - var a any; + a :any; a.type_info = type_info; a.data = data; return a; @@ -323,20 +323,20 @@ proc bprint_any(buf ^[]byte, arg any) { using Type_Info; match type info : arg.type_info { case Named: - var a = make_any(info.base, arg.data); + a := make_any(info.base, arg.data); match type b : info.base { case Struct: bprint_string(buf, info.name); bprint_string(buf, "{"); - for var i = 0; i < b.fields.count; i++ { - var f = b.fields[i]; + for i := 0; i < b.fields.count; i++ { + f := b.fields[i]; if i > 0 { bprint_string(buf, ", "); } bprint_string(buf, f.name); // bprint_any(buf, f.offset); bprint_string(buf, " = "); - var data = arg.data as ^byte + f.offset; + data := arg.data as ^byte + f.offset; bprint_any(buf, make_any(f.type_info, data)); } bprint_string(buf, "}"); @@ -387,8 +387,8 @@ proc bprint_any(buf ^[]byte, arg any) { } case Maybe: - var size = mem.size_of_type_info(info.elem); - var data = slice_ptr(arg.data as ^byte, size+1); + size := mem.size_of_type_info(info.elem); + data := slice_ptr(arg.data as ^byte, size+1); if data[size] != 0 { bprint_any(buf, make_any(info.elem, arg.data)); } else { @@ -399,26 +399,26 @@ proc bprint_any(buf ^[]byte, arg any) { bprintf(buf, "[%]%{", info.count, info.elem); defer bprint_string(buf, "}"); - for var i = 0; i < info.count; i++ { + for i := 0; i < info.count; i++ { if i > 0 { bprint_string(buf, ", "); } - var data = arg.data as ^byte + i*info.elem_size; + data := arg.data as ^byte + i*info.elem_size; bprint_any(buf, make_any(info.elem, data)); } case Slice: - var slice = arg.data as ^[]byte; + slice := arg.data as ^[]byte; bprintf(buf, "[]%{", info.elem); defer bprint_string(buf, "}"); - for var i = 0; i < slice.count; i++ { + for i := 0; i < slice.count; i++ { if i > 0 { bprint_string(buf, ", "); } - var data = slice.data + i*info.elem_size; + data := slice.data + i*info.elem_size; bprint_any(buf, make_any(info.elem, data)); } @@ -440,12 +440,12 @@ proc bprint_any(buf ^[]byte, arg any) { return; } - for var i = 0; i < info.count; i++ { + for i := 0; i < info.count; i++ { if i > 0 { bprint_string(buf, ", "); } - var data = arg.data as ^byte + i*info.elem_size; + data := arg.data as ^byte + i*info.elem_size; bprint_any(buf, make_any(info.elem, data)); } @@ -454,14 +454,14 @@ proc bprint_any(buf ^[]byte, arg any) { bprintf(buf, "%{", arg.type_info); defer bprint_string(buf, "}"); - for var i = 0; i < info.fields.count; i++ { + for i := 0; i < info.fields.count; i++ { if i > 0 { bprint_string(buf, ", "); } bprint_string(buf, info.fields[i].name); bprint_string(buf, " = "); - var data = arg.data as ^byte + info.fields[i].offset; - var ti = info.fields[i].type_info; + data := arg.data as ^byte + info.fields[i].offset; + ti := info.fields[i].type_info; bprint_any(buf, make_any(ti, data)); } @@ -487,10 +487,10 @@ proc bprintf(buf ^[]byte, fmt string, args ..any) -> int { } proc parse_int(s string, offset int) -> (int, int) { - var result = 0; + result := 0; for ; offset < s.count; offset++ { - var c = s[offset] as rune; + c := s[offset] as rune; if !is_digit(c) { break; } @@ -502,12 +502,12 @@ proc bprintf(buf ^[]byte, fmt string, args ..any) -> int { return result, offset; } - var prev = 0; - var implicit_index = 0; + prev := 0; + implicit_index := 0; - for var i = 0; i < fmt.count; i++ { - var r = fmt[i] as rune; - var index = implicit_index; + for i := 0; i < fmt.count; i++ { + r := fmt[i] as rune; + index := implicit_index; if r != '%' { continue; @@ -516,7 +516,7 @@ proc bprintf(buf ^[]byte, fmt string, args ..any) -> int { bprint_string(buf, fmt[prev:i]); i++; // Skip % if i < fmt.count { - var next = fmt[i] as rune; + next := fmt[i] as rune; if next == '%' { bprint_string(buf, "%"); @@ -561,10 +561,10 @@ proc bprint(buf ^[]byte, args ..any) -> int { } - var prev_string = false; - for var i = 0; i < args.count; i++ { - var arg = args[i]; - var is_string = arg.data != nil && is_type_string(arg.type_info); + prev_string := false; + for i := 0; i < args.count; i++ { + arg := args[i]; + is_string := arg.data != nil && is_type_string(arg.type_info); if i > 0 && !is_string && !prev_string { bprint_space(buf); } @@ -575,7 +575,7 @@ proc bprint(buf ^[]byte, args ..any) -> int { } proc bprintln(buf ^[]byte, args ..any) -> int { - for var i = 0; i < args.count; i++ { + for i := 0; i < args.count; i++ { if i > 0 { append(buf, ' '); } diff --git a/core/hash.odin b/core/hash.odin index e590a4567..8ef10f7df 100644 --- a/core/hash.odin +++ b/core/hash.odin @@ -1,57 +1,57 @@ proc crc32(data rawptr, len int) -> u32 { - var result = ~(0 as u32); - var s = slice_ptr(data as ^u8, len); - for var i = 0; i < len; i++ { - var b = s[i] as u32; + result := ~(0 as u32); + s := slice_ptr(data as ^u8, len); + for i := 0; i < len; i++ { + b := s[i] as u32; result = result>>8 ~ __CRC32_TABLE[(result ~ b) & 0xff]; } return ~result; } proc crc64(data rawptr, len int) -> u64 { - var result = ~(0 as u64); - var s = slice_ptr(data as ^u8, len); - for var i = 0; i < len; i++ { - var b = s[i] as u64; + result := ~(0 as u64); + s := slice_ptr(data as ^u8, len); + for i := 0; i < len; i++ { + b := s[i] as u64; result = result>>8 ~ __CRC64_TABLE[(result ~ b) & 0xff]; } return ~result; } proc fnv32(data rawptr, len int) -> u32 { - var s = slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len); - var h u32 = 0x811c9dc5; - for var i = 0; i < len; i++ { + h :u32 = 0x811c9dc5; + for i := 0; i < len; i++ { h = (h * 0x01000193) ~ s[i] as u32; } return h; } proc fnv64(data rawptr, len int) -> u64 { - var s = slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len); - var h u64 = 0xcbf29ce484222325; - for var i = 0; i < len; i++ { + h :u64 = 0xcbf29ce484222325; + for i := 0; i < len; i++ { h = (h * 0x100000001b3) ~ s[i] as u64; } return h; } proc fnv32a(data rawptr, len int) -> u32 { - var s = slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len); - var h u32 = 0x811c9dc5; - for var i = 0; i < len; i++ { + h :u32 = 0x811c9dc5; + for i := 0; i < len; i++ { h = (h ~ s[i] as u32) * 0x01000193; } return h; } proc fnv64a(data rawptr, len int) -> u64 { - var s = slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len); - var h u64 = 0xcbf29ce484222325; - for var i = 0; i < len; i++ { + h :u64 = 0xcbf29ce484222325; + for i := 0; i < len; i++ { h = (h ~ s[i] as u64) * 0x100000001b3; } return h; @@ -59,19 +59,19 @@ proc fnv64a(data rawptr, len int) -> u64 { proc murmur64(data_ rawptr, len int) -> u64 { - const SEED = 0x9747b28c; + SEED :: 0x9747b28c; when size_of(int) == 8 { - const m = 0xc6a4a7935bd1e995; - const r = 47; + m :: 0xc6a4a7935bd1e995; + r :: 47; - var h u64 = SEED ~ (len as u64 * m); + h: u64 = SEED ~ (len as u64 * m); - var data = slice_ptr(data_ as ^u64, len/size_of(u64)); - var data2 = slice_ptr(data_ as ^u8, len); + data := slice_ptr(data_ as ^u64, len/size_of(u64)); + data2 := slice_ptr(data_ as ^u8, len); - for var i = 0; i < data.count; i++ { - var k = data[i]; + for i := 0; i < data.count; i++ { + k := data[i]; k *= m; k ~= k>>r; @@ -99,17 +99,17 @@ proc murmur64(data_ rawptr, len int) -> u64 { return h; } else { - const m = 0x5bd1e995; - const r = 24; + m :: 0x5bd1e995; + r :: 24; - var h1 u32 = SEED as u32 ~ len as u32; - var h2 u32 = SEED >> 32; + h1: u32 = SEED as u32 ~ len as u32; + h2: u32 = SEED >> 32; - var data = slice_ptr(data_ as ^u32, len/size_of(u32)); + data := slice_ptr(data_ as ^u32, len/size_of(u32)); - var i = 0; + i := 0; for len >= 8 { - var k1, k2 u32; + k1, k2: u32; k1 = data[i]; i++; k1 *= m; k1 ~= k1>>r; @@ -128,7 +128,7 @@ proc murmur64(data_ rawptr, len int) -> u64 { } if (len >= 4) { - var k1 u32; + k1: u32; k1 = data[i]; i++; k1 *= m; k1 ~= k1>>r; @@ -138,7 +138,7 @@ proc murmur64(data_ rawptr, len int) -> u64 { len -= 4; } - var data8 = slice_ptr((data.data+i) as ^u8, 3); // NOTE(bill): This is unsafe + data8 := slice_ptr((data.data+i) as ^u8, 3); // NOTE(bill): This is unsafe match len { case 3: h2 ~= data8[2] as u32 << 16; fallthrough; @@ -157,14 +157,14 @@ proc murmur64(data_ rawptr, len int) -> u64 { h2 ~= h1>>19; h2 *= m; - var h = (h1 as u64)<<32 | h2 as u64; + h := (h1 as u64)<<32 | h2 as u64; return h; } } -var __CRC32_TABLE = [256]u32{ +__CRC32_TABLE := [256]u32{ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, @@ -230,7 +230,7 @@ var __CRC32_TABLE = [256]u32{ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; -var __CRC64_TABLE = [256]u64{ +__CRC64_TABLE := [256]u64{ 0x0000000000000000, 0x42f0e1eba9ea3693, 0x85e1c3d753d46d26, 0xc711223cfa3e5bb5, 0x493366450e42ecdf, 0x0bc387aea7a8da4c, 0xccd2a5925d9681f9, 0x8e224479f47cb76a, 0x9266cc8a1c85d9be, 0xd0962d61b56fef2d, 0x17870f5d4f51b498, 0x5577eeb6e6bb820b, diff --git a/core/math.odin b/core/math.odin index 0c2081a5f..d0efe6444 100644 --- a/core/math.odin +++ b/core/math.odin @@ -1,22 +1,20 @@ -const { - TAU = 6.28318530717958647692528676655900576; - PI = 3.14159265358979323846264338327950288; - ONE_OVER_TAU = 0.636619772367581343075535053490057448; - ONE_OVER_PI = 0.159154943091895335768883763372514362; +TAU :: 6.28318530717958647692528676655900576; +PI :: 3.14159265358979323846264338327950288; +ONE_OVER_TAU :: 0.636619772367581343075535053490057448; +ONE_OVER_PI :: 0.159154943091895335768883763372514362; - E = 2.71828182845904523536; - SQRT_TWO = 1.41421356237309504880168872420969808; - SQRT_THREE = 1.73205080756887729352744634150587236; - SQRT_FIVE = 2.23606797749978969640917366873127623; +E :: 2.71828182845904523536; +SQRT_TWO :: 1.41421356237309504880168872420969808; +SQRT_THREE :: 1.73205080756887729352744634150587236; +SQRT_FIVE :: 2.23606797749978969640917366873127623; - LOG_TWO = 0.693147180559945309417232121458176568; - LOG_TEN = 2.30258509299404568401799145468436421; +LOG_TWO :: 0.693147180559945309417232121458176568; +LOG_TEN :: 2.30258509299404568401799145468436421; - EPSILON = 1.19209290e-7; +EPSILON :: 1.19209290e-7; - τ = TAU; - π = PI; -} +τ :: TAU; +π :: PI; type { Vec2 [vector 2]f32; @@ -49,8 +47,8 @@ proc sign64(x f64) -> f64 { if x >= 0 { return +1; } return -1; } proc copy_sign32(x, y f32) -> f32 { - var ix = x transmute u32; - var iy = y transmute u32; + ix := x transmute u32; + iy := y transmute u32; ix &= 0x7fffffff; ix |= iy & 0x80000000; return ix transmute f32; @@ -80,7 +78,7 @@ proc remainder32(x, y f32) -> f32 { proc fmod32(x, y f32) -> f32 { y = abs(y); - var result = remainder32(abs(x), y); + result := remainder32(abs(x), y); if sign32(result) < 0 { result += y; } @@ -94,13 +92,13 @@ proc to_degrees(radians f32) -> f32 { return radians * 360 / TAU; } -proc dot2(a, b Vec2) -> f32 { var c = a*b; return c.x + c.y; } -proc dot3(a, b Vec3) -> f32 { var c = a*b; return c.x + c.y + c.z; } -proc dot4(a, b Vec4) -> f32 { var c = a*b; return c.x + c.y + c.z + c.w; } +proc dot2(a, b Vec2) -> f32 { c := a*b; return c.x + c.y; } +proc dot3(a, b Vec3) -> f32 { c := a*b; return c.x + c.y + c.z; } +proc dot4(a, b Vec4) -> f32 { c := a*b; return c.x + c.y + c.z + c.w; } proc cross3(x, y Vec3) -> Vec3 { - var a = swizzle(x, 1, 2, 0) * swizzle(y, 2, 0, 1); - var b = swizzle(x, 2, 0, 1) * swizzle(y, 1, 2, 0); + a := swizzle(x, 1, 2, 0) * swizzle(y, 2, 0, 1); + b := swizzle(x, 2, 0, 1) * swizzle(y, 1, 2, 0); return a - b; } @@ -114,7 +112,7 @@ proc vec3_norm(v Vec3) -> Vec3 { return v / Vec3{vec3_mag(v)}; } proc vec4_norm(v Vec4) -> Vec4 { return v / Vec4{vec4_mag(v)}; } proc vec2_norm0(v Vec2) -> Vec2 { - var m = vec2_mag(v); + m := vec2_mag(v); if m == 0 { return Vec2{0}; } @@ -122,7 +120,7 @@ proc vec2_norm0(v Vec2) -> Vec2 { } proc vec3_norm0(v Vec3) -> Vec3 { - var m = vec3_mag(v); + m := vec3_mag(v); if m == 0 { return Vec3{0}; } @@ -130,7 +128,7 @@ proc vec3_norm0(v Vec3) -> Vec3 { } proc vec4_norm0(v Vec4) -> Vec4 { - var m = vec4_mag(v); + m := vec4_mag(v); if m == 0 { return Vec4{0}; } @@ -149,8 +147,8 @@ proc mat4_identity() -> Mat4 { } proc mat4_transpose(m Mat4) -> Mat4 { - for var j = 0; j < 4; j++ { - for var i = 0; i < 4; i++ { + for j := 0; j < 4; j++ { + for i := 0; i < 4; i++ { m[i][j], m[j][i] = m[j][i], m[i][j]; } } @@ -158,9 +156,9 @@ proc mat4_transpose(m Mat4) -> Mat4 { } proc mat4_mul(a, b Mat4) -> Mat4 { - var c Mat4; - for var j = 0; j < 4; j++ { - for var i = 0; i < 4; i++ { + c: Mat4; + for j := 0; j < 4; j++ { + for i := 0; i < 4; i++ { c[j][i] = a[0][i]*b[j][0] + a[1][i]*b[j][1] + a[2][i]*b[j][2] + @@ -180,27 +178,27 @@ proc mat4_mul_vec4(m Mat4, v Vec4) -> Vec4 { } proc mat4_inverse(m Mat4) -> Mat4 { - var o Mat4; + o: Mat4; - var sf00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - var sf01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - var sf02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - var sf03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - var sf04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - var sf05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - var sf06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - var sf07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - var sf08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - var sf09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - var sf10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - var sf11 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - var sf12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - var sf13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - var sf14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - var sf15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - var sf16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - var sf17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - var sf18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + sf00 := m[2][2] * m[3][3] - m[3][2] * m[2][3]; + sf01 := m[2][1] * m[3][3] - m[3][1] * m[2][3]; + sf02 := m[2][1] * m[3][2] - m[3][1] * m[2][2]; + sf03 := m[2][0] * m[3][3] - m[3][0] * m[2][3]; + sf04 := m[2][0] * m[3][2] - m[3][0] * m[2][2]; + sf05 := m[2][0] * m[3][1] - m[3][0] * m[2][1]; + sf06 := m[1][2] * m[3][3] - m[3][2] * m[1][3]; + sf07 := m[1][1] * m[3][3] - m[3][1] * m[1][3]; + sf08 := m[1][1] * m[3][2] - m[3][1] * m[1][2]; + sf09 := m[1][0] * m[3][3] - m[3][0] * m[1][3]; + sf10 := m[1][0] * m[3][2] - m[3][0] * m[1][2]; + sf11 := m[1][1] * m[3][3] - m[3][1] * m[1][3]; + sf12 := m[1][0] * m[3][1] - m[3][0] * m[1][1]; + sf13 := m[1][2] * m[2][3] - m[2][2] * m[1][3]; + sf14 := m[1][1] * m[2][3] - m[2][1] * m[1][3]; + sf15 := m[1][1] * m[2][2] - m[2][1] * m[1][2]; + sf16 := m[1][0] * m[2][3] - m[2][0] * m[1][3]; + sf17 := m[1][0] * m[2][2] - m[2][0] * m[1][2]; + sf18 := m[1][0] * m[2][1] - m[2][0] * m[1][1]; o[0][0] = +(m[1][1] * sf00 - m[1][2] * sf01 + m[1][3] * sf02); o[0][1] = -(m[1][0] * sf00 - m[1][2] * sf03 + m[1][3] * sf04); @@ -222,7 +220,7 @@ proc mat4_inverse(m Mat4) -> Mat4 { o[3][2] = -(m[0][0] * sf14 - m[0][1] * sf16 + m[0][3] * sf18); o[3][3] = +(m[0][0] * sf15 - m[0][1] * sf17 + m[0][2] * sf18); - var ood = 1.0 / (m[0][0] * o[0][0] + + ood := 1.0 / (m[0][0] * o[0][0] + m[0][1] * o[0][1] + m[0][2] * o[0][2] + m[0][3] * o[0][3]); @@ -249,7 +247,7 @@ proc mat4_inverse(m Mat4) -> Mat4 { proc mat4_translate(v Vec3) -> Mat4 { - var m = mat4_identity(); + m := mat4_identity(); m[3][0] = v.x; m[3][1] = v.y; m[3][2] = v.z; @@ -258,13 +256,13 @@ proc mat4_translate(v Vec3) -> Mat4 { } proc mat4_rotate(v Vec3, angle_radians f32) -> Mat4 { - var c = cos32(angle_radians); - var s = sin32(angle_radians); + c := cos32(angle_radians); + s := sin32(angle_radians); - var a = vec3_norm(v); - var t = a * Vec3{1-c}; + a := vec3_norm(v); + t := a * Vec3{1-c}; - var rot = mat4_identity(); + rot := mat4_identity(); rot[0][0] = c + t.x*a.x; rot[0][1] = 0 + t.x*a.y + s*a.z; @@ -300,11 +298,11 @@ proc mat4_scalef(m Mat4, s f32) -> Mat4 { proc mat4_look_at(eye, centre, up Vec3) -> Mat4 { - var f = vec3_norm(centre - eye); - var s = vec3_norm(cross3(f, up)); - var u = cross3(s, f); + f := vec3_norm(centre - eye); + s := vec3_norm(cross3(f, up)); + u := cross3(s, f); - var m Mat4; + m: Mat4; m[0] = Vec4{+s.x, +s.y, +s.z, 0}; m[1] = Vec4{+u.x, +u.y, +u.z, 0}; @@ -314,8 +312,8 @@ proc mat4_look_at(eye, centre, up Vec3) -> Mat4 { return m; } proc mat4_perspective(fovy, aspect, near, far f32) -> Mat4 { - var m Mat4; - var tan_half_fovy = tan32(0.5 * fovy); + m: Mat4; + tan_half_fovy := tan32(0.5 * fovy); m[0][0] = 1.0 / (aspect*tan_half_fovy); m[1][1] = 1.0 / (tan_half_fovy); m[2][2] = -(far + near) / (far - near); @@ -326,7 +324,7 @@ proc mat4_perspective(fovy, aspect, near, far f32) -> Mat4 { proc mat4_ortho3d(left, right, bottom, top, near, far f32) -> Mat4 { - var m = mat4_identity(); + m := mat4_identity(); m[0][0] = +2.0 / (right - left); m[1][1] = +2.0 / (top - bottom); m[2][2] = -2.0 / (far - near); @@ -340,31 +338,31 @@ proc mat4_ortho3d(left, right, bottom, top, near, far f32) -> Mat4 { -const F32_DIG = 6; -const F32_EPSILON = 1.192092896e-07; -const F32_GUARD = 0; -const F32_MANT_DIG = 24; -const F32_MAX = 3.402823466e+38; -const F32_MAX_10_EXP = 38; -const F32_MAX_EXP = 128; -const F32_MIN = 1.175494351e-38; -const F32_MIN_10_EXP = -37; -const F32_MIN_EXP = -125; -const F32_NORMALIZE = 0; -const F32_RADIX = 2; -const F32_ROUNDS = 1; +F32_DIG :: 6; +F32_EPSILON :: 1.192092896e-07; +F32_GUARD :: 0; +F32_MANT_DIG :: 24; +F32_MAX :: 3.402823466e+38; +F32_MAX_10_EXP :: 38; +F32_MAX_EXP :: 128; +F32_MIN :: 1.175494351e-38; +F32_MIN_10_EXP :: -37; +F32_MIN_EXP :: -125; +F32_NORMALIZE :: 0; +F32_RADIX :: 2; +F32_ROUNDS :: 1; -const F64_DIG = 15; // # of decimal digits of precision -const F64_EPSILON = 2.2204460492503131e-016; // smallest such that 1.0+F64_EPSILON != 1.0 -const F64_MANT_DIG = 53; // # of bits in mantissa -const F64_MAX = 1.7976931348623158e+308; // max value -const F64_MAX_10_EXP = 308; // max decimal exponent -const F64_MAX_EXP = 1024; // max binary exponent -const F64_MIN = 2.2250738585072014e-308; // min positive value -const F64_MIN_10_EXP = -307; // min decimal exponent -const F64_MIN_EXP = -1021; // min binary exponent -const F64_RADIX = 2; // exponent radix -const F64_ROUNDS = 1; // addition rounding: near +F64_DIG :: 15; // # of decimal digits of precision +F64_EPSILON :: 2.2204460492503131e-016; // smallest such that 1.0+F64_EPSILON != 1.0 +F64_MANT_DIG :: 53; // # of bits in mantissa +F64_MAX :: 1.7976931348623158e+308; // max value +F64_MAX_10_EXP :: 308; // max decimal exponent +F64_MAX_EXP :: 1024; // max binary exponent +F64_MIN :: 2.2250738585072014e-308; // min positive value +F64_MIN_10_EXP :: -307; // min decimal exponent +F64_MIN_EXP :: -1021; // min binary exponent +F64_RADIX :: 2; // exponent radix +F64_ROUNDS :: 1; // addition rounding: near diff --git a/core/mem.odin b/core/mem.odin index a12135764..d36a9b43d 100644 --- a/core/mem.odin +++ b/core/mem.odin @@ -30,22 +30,22 @@ proc copy_non_overlapping(dst, src rawptr, len int) -> rawptr #link_name "__mem_ proc compare(dst, src rawptr, n int) -> int #link_name "__mem_compare" { // Translation of http://mgronhol.github.io/fast-strcmp/ - var a = slice_ptr(dst as ^byte, n); - var b = slice_ptr(src as ^byte, n); + a := slice_ptr(dst as ^byte, n); + b := slice_ptr(src as ^byte, n); - var fast = n/size_of(int) + 1; - var offset = (fast-1)*size_of(int); - var curr_block = 0; + fast := n/size_of(int) + 1; + offset := (fast-1)*size_of(int); + curr_block := 0; if n <= size_of(int) { fast = 0; } - var la = slice_ptr(^a[0] as ^int, fast); - var lb = slice_ptr(^b[0] as ^int, fast); + la := slice_ptr(^a[0] as ^int, fast); + lb := slice_ptr(^b[0] as ^int, fast); for ; curr_block < fast; curr_block++ { if (la[curr_block] ~ lb[curr_block]) != 0 { - for var pos = curr_block*size_of(int); pos < n; pos++ { + for pos := curr_block*size_of(int); pos < n; pos++ { if (a[pos] ~ b[pos]) != 0 { return a[pos] as int - b[pos] as int; } @@ -80,9 +80,9 @@ proc is_power_of_two(x int) -> bool { proc align_forward(ptr rawptr, align int) -> rawptr { assert(is_power_of_two(align)); - var a = align as uint; - var p = ptr as uint; - var modulo = p & (a-1); + a := align as uint; + p := ptr as uint; + modulo := p & (a-1); if modulo != 0 { p += a - modulo; } @@ -97,14 +97,14 @@ type Allocation_Header struct { proc allocation_header_fill(header ^Allocation_Header, data rawptr, size int) { header.size = size; - var ptr = (header+1) as ^int; + ptr := (header+1) as ^int; - for var i = 0; ptr as rawptr < data; i++ { + for i := 0; ptr as rawptr < data; i++ { (ptr+i)^ = -1; } } proc allocation_header(data rawptr) -> ^Allocation_Header { - var p = data as ^int; + p := data as ^int; for (p-1)^ == -1 { p = (p-1); } @@ -164,20 +164,20 @@ proc arena_allocator_proc(allocator_data rawptr, mode Allocator_Mode, size, alignment int, old_memory rawptr, old_size int, flags u64) -> rawptr { using Allocator_Mode; - var arena = allocator_data as ^Arena; + arena := allocator_data as ^Arena; match mode { case ALLOC: - var total_size = size + alignment; + total_size := size + alignment; if arena.memory.count + total_size > arena.memory.capacity { fmt.fprintln(os.stderr, "Arena out of memory"); return nil; } - #no_bounds_check var end = ^arena.memory[arena.memory.count]; + #no_bounds_check end := ^arena.memory[arena.memory.count]; - var ptr = align_forward(end, alignment); + ptr := align_forward(end, alignment); arena.memory.count += total_size; return zero(ptr, size); @@ -196,7 +196,7 @@ proc arena_allocator_proc(allocator_data rawptr, mode Allocator_Mode, } proc begin_arena_temp_memory(a ^Arena) -> Arena_Temp_Memory { - var tmp Arena_Temp_Memory; + tmp: Arena_Temp_Memory; tmp.arena = a; tmp.original_count = a.memory.count; a.temp_count++; @@ -230,8 +230,8 @@ proc align_of_type_info(type_info ^Type_Info) -> int { return n - (n >> 1); } - const WORD_SIZE = size_of(int); - const MAX_ALIGN = size_of([vector 64]f64); // TODO(bill): Should these constants be builtin constants? + WORD_SIZE :: size_of(int); + MAX_ALIGN :: size_of([vector 64]f64); // TODO(bill): Should these constants be builtin constants? using Type_Info; match type info : type_info { @@ -256,9 +256,9 @@ proc align_of_type_info(type_info ^Type_Info) -> int { case Slice: return WORD_SIZE; case Vector: - var size = size_of_type_info(info.elem); - var count = max(prev_pow2(info.count as i64), 1) as int; - var total = size * count; + size := size_of_type_info(info.elem); + count := max(prev_pow2(info.count as i64), 1) as int; + total := size * count; return clamp(total, 1, MAX_ALIGN); case Struct: return info.align; @@ -272,12 +272,12 @@ proc align_of_type_info(type_info ^Type_Info) -> int { } proc align_formula(size, align int) -> int { - var result = size + align-1; + result := size + align-1; return result - result%align; } proc size_of_type_info(type_info ^Type_Info) -> int { - const WORD_SIZE = size_of(int); + WORD_SIZE :: size_of(int); using Type_Info; match type info : type_info { case Named: @@ -299,13 +299,13 @@ proc size_of_type_info(type_info ^Type_Info) -> int { case Procedure: return WORD_SIZE; case Array: - var count = info.count; + count := info.count; if count == 0 { return 0; } - var size = size_of_type_info(info.elem); - var align = align_of_type_info(info.elem); - var alignment = align_formula(size, align); + size := size_of_type_info(info.elem); + align := align_of_type_info(info.elem); + alignment := align_formula(size, align); return alignment*(count-1) + size; case Slice: return 3*WORD_SIZE; @@ -320,18 +320,18 @@ proc size_of_type_info(type_info ^Type_Info) -> int { return false; } - var count = info.count; + count := info.count; if count == 0 { return 0; } - var bit_size = 8*size_of_type_info(info.elem); + bit_size := 8*size_of_type_info(info.elem); if is_bool(info.elem) { // NOTE(bill): LLVM can store booleans as 1 bit because a boolean _is_ an `i1` // Silly LLVM spec bit_size = 1; } - var total_size_in_bits = bit_size * count; - var total_size = (total_size_in_bits+7)/8; + total_size_in_bits := bit_size * count; + total_size := (total_size_in_bits+7)/8; return total_size; case Struct: diff --git a/core/opengl.odin b/core/opengl.odin index 9947cdf97..272effe0f 100644 --- a/core/opengl.odin +++ b/core/opengl.odin @@ -30,76 +30,74 @@ proc GetIntegerv(name i32, v ^i32) #foreign "glGetIntegerv" -var _libgl = win32.LoadLibraryA(("opengl32.dll\x00" as string).data); +_libgl := win32.LoadLibraryA(("opengl32.dll\x00" as string).data); proc GetProcAddress(name string) -> proc() #cc_c { assert(name[name.count-1] == 0); - var res = win32.wglGetProcAddress(name.data); + res := win32.wglGetProcAddress(name.data); if res == nil { res = win32.GetProcAddress(_libgl, name.data); } return res; } -var { - GenBuffers proc(count i32, buffers ^u32) #cc_c; - GenVertexArrays proc(count i32, buffers ^u32) #cc_c; - GenSamplers proc(count i32, buffers ^u32) #cc_c; - BindBuffer proc(target i32, buffer u32) #cc_c; - BindVertexArray proc(buffer u32) #cc_c; - BindSampler proc(position i32, sampler u32) #cc_c; - BufferData proc(target i32, size int, data rawptr, usage i32) #cc_c; - BufferSubData proc(target i32, offset, size int, data rawptr) #cc_c; +GenBuffers: proc(count i32, buffers ^u32) #cc_c; +GenVertexArrays: proc(count i32, buffers ^u32) #cc_c; +GenSamplers: proc(count i32, buffers ^u32) #cc_c; +BindBuffer: proc(target i32, buffer u32) #cc_c; +BindVertexArray: proc(buffer u32) #cc_c; +BindSampler: proc(position i32, sampler u32) #cc_c; +BufferData: proc(target i32, size int, data rawptr, usage i32) #cc_c; +BufferSubData: proc(target i32, offset, size int, data rawptr) #cc_c; - DrawArrays proc(mode, first i32, count u32) #cc_c; - DrawElements proc(mode i32, count u32, type_ i32, indices rawptr) #cc_c; +DrawArrays: proc(mode, first i32, count u32) #cc_c; +DrawElements: proc(mode i32, count u32, type_ i32, indices rawptr) #cc_c; - MapBuffer proc(target, access i32) -> rawptr #cc_c; - UnmapBuffer proc(target i32) #cc_c; +MapBuffer: proc(target, access i32) -> rawptr #cc_c; +UnmapBuffer: proc(target i32) #cc_c; - VertexAttribPointer proc(index u32, size, type_ i32, normalized i32, stride u32, pointer rawptr) #cc_c; - EnableVertexAttribArray proc(index u32) #cc_c; +VertexAttribPointer: proc(index u32, size, type_ i32, normalized i32, stride u32, pointer rawptr) #cc_c; +EnableVertexAttribArray: proc(index u32) #cc_c; - CreateShader proc(shader_type i32) -> u32 #cc_c; - ShaderSource proc(shader u32, count u32, str ^^byte, length ^i32) #cc_c; - CompileShader proc(shader u32) #cc_c; - CreateProgram proc() -> u32 #cc_c; - AttachShader proc(program, shader u32) #cc_c; - DetachShader proc(program, shader u32) #cc_c; - DeleteShader proc(shader u32) #cc_c; - LinkProgram proc(program u32) #cc_c; - UseProgram proc(program u32) #cc_c; - DeleteProgram proc(program u32) #cc_c; +CreateShader: proc(shader_type i32) -> u32 #cc_c; +ShaderSource: proc(shader u32, count u32, str ^^byte, length ^i32) #cc_c; +CompileShader: proc(shader u32) #cc_c; +CreateProgram: proc() -> u32 #cc_c; +AttachShader: proc(program, shader u32) #cc_c; +DetachShader: proc(program, shader u32) #cc_c; +DeleteShader: proc(shader u32) #cc_c; +LinkProgram: proc(program u32) #cc_c; +UseProgram: proc(program u32) #cc_c; +DeleteProgram: proc(program u32) #cc_c; - GetShaderiv proc(shader u32, pname i32, params ^i32) #cc_c; - GetProgramiv proc(program u32, pname i32, params ^i32) #cc_c; - GetShaderInfoLog proc(shader u32, max_length u32, length ^u32, info_long ^byte) #cc_c; - GetProgramInfoLog proc(program u32, max_length u32, length ^u32, info_long ^byte) #cc_c; +GetShaderiv: proc(shader u32, pname i32, params ^i32) #cc_c; +GetProgramiv: proc(program u32, pname i32, params ^i32) #cc_c; +GetShaderInfoLog: proc(shader u32, max_length u32, length ^u32, info_long ^byte) #cc_c; +GetProgramInfoLog: proc(program u32, max_length u32, length ^u32, info_long ^byte) #cc_c; - ActiveTexture proc(texture i32) #cc_c; - GenerateMipmap proc(target i32) #cc_c; +ActiveTexture: proc(texture i32) #cc_c; +GenerateMipmap: proc(target i32) #cc_c; - SamplerParameteri proc(sampler u32, pname i32, param i32) #cc_c; - SamplerParameterf proc(sampler u32, pname i32, param f32) #cc_c; - SamplerParameteriv proc(sampler u32, pname i32, params ^i32) #cc_c; - SamplerParameterfv proc(sampler u32, pname i32, params ^f32) #cc_c; - SamplerParameterIiv proc(sampler u32, pname i32, params ^i32) #cc_c; - SamplerParameterIuiv proc(sampler u32, pname i32, params ^u32) #cc_c; +SamplerParameteri: proc(sampler u32, pname i32, param i32) #cc_c; +SamplerParameterf: proc(sampler u32, pname i32, param f32) #cc_c; +SamplerParameteriv: proc(sampler u32, pname i32, params ^i32) #cc_c; +SamplerParameterfv: proc(sampler u32, pname i32, params ^f32) #cc_c; +SamplerParameterIiv: proc(sampler u32, pname i32, params ^i32) #cc_c; +SamplerParameterIuiv: proc(sampler u32, pname i32, params ^u32) #cc_c; - Uniform1i proc(loc i32, v0 i32) #cc_c; - Uniform2i proc(loc i32, v0, v1 i32) #cc_c; - Uniform3i proc(loc i32, v0, v1, v2 i32) #cc_c; - Uniform4i proc(loc i32, v0, v1, v2, v3 i32) #cc_c; - Uniform1f proc(loc i32, v0 f32) #cc_c; - Uniform2f proc(loc i32, v0, v1 f32) #cc_c; - Uniform3f proc(loc i32, v0, v1, v2 f32) #cc_c; - Uniform4f proc(loc i32, v0, v1, v2, v3 f32) #cc_c; - UniformMatrix4fv proc(loc i32, count u32, transpose i32, value ^f32) #cc_c; +Uniform1i: proc(loc i32, v0 i32) #cc_c; +Uniform2i: proc(loc i32, v0, v1 i32) #cc_c; +Uniform3i: proc(loc i32, v0, v1, v2 i32) #cc_c; +Uniform4i: proc(loc i32, v0, v1, v2, v3 i32) #cc_c; +Uniform1f: proc(loc i32, v0 f32) #cc_c; +Uniform2f: proc(loc i32, v0, v1 f32) #cc_c; +Uniform3f: proc(loc i32, v0, v1, v2 f32) #cc_c; +Uniform4f: proc(loc i32, v0, v1, v2, v3 f32) #cc_c; +UniformMatrix4fv: proc(loc i32, count u32, transpose i32, value ^f32) #cc_c; - GetUniformLocation proc(program u32, name ^byte) -> i32 #cc_c; -} +GetUniformLocation: proc(program u32, name ^byte) -> i32 #cc_c; proc init() { proc set_proc_address(p rawptr, name string) #inline { (p as ^(proc() #cc_c))^ = GetProcAddress(name); } diff --git a/core/opengl_constants.odin b/core/opengl_constants.odin index 4f3037037..b0cb2e647 100644 --- a/core/opengl_constants.odin +++ b/core/opengl_constants.odin @@ -1,1385 +1,1385 @@ -const { - FALSE = 0; - TRUE = 1; - DEPTH_BUFFER_BIT = 0x00000100; - STENCIL_BUFFER_BIT = 0x00000400; - COLOR_BUFFER_BIT = 0x00004000; - POINTS = 0x0000; - LINES = 0x0001; - LINE_LOOP = 0x0002; - LINE_STRIP = 0x0003; - TRIANGLES = 0x0004; - TRIANGLE_STRIP = 0x0005; - TRIANGLE_FAN = 0x0006; - QUADS = 0x0007; - NEVER = 0x0200; - LESS = 0x0201; - EQUAL = 0x0202; - LEQUAL = 0x0203; - GREATER = 0x0204; - NOTEQUAL = 0x0205; - GEQUAL = 0x0206; - ALWAYS = 0x0207; - ZERO = 0; - ONE = 1; - SRC_COLOR = 0x0300; - ONE_MINUS_SRC_COLOR = 0x0301; - SRC_ALPHA = 0x0302; - ONE_MINUS_SRC_ALPHA = 0x0303; - DST_ALPHA = 0x0304; - ONE_MINUS_DST_ALPHA = 0x0305; - DST_COLOR = 0x0306; - ONE_MINUS_DST_COLOR = 0x0307; - SRC_ALPHA_SATURATE = 0x0308; - NONE = 0; - FRONT_LEFT = 0x0400; - FRONT_RIGHT = 0x0401; - BACK_LEFT = 0x0402; - BACK_RIGHT = 0x0403; - FRONT = 0x0404; - BACK = 0x0405; - LEFT = 0x0406; - RIGHT = 0x0407; - FRONT_AND_BACK = 0x0408; - NO_ERROR = 0; - INVALID_ENUM = 0x0500; - INVALID_VALUE = 0x0501; - INVALID_OPERATION = 0x0502; - OUT_OF_MEMORY = 0x0505; - CW = 0x0900; - CCW = 0x0901; - POINT_SIZE = 0x0B11; - POINT_SIZE_RANGE = 0x0B12; - POINT_SIZE_GRANULARITY = 0x0B13; - LINE_SMOOTH = 0x0B20; - LINE_WIDTH = 0x0B21; - LINE_WIDTH_RANGE = 0x0B22; - LINE_WIDTH_GRANULARITY = 0x0B23; - POLYGON_MODE = 0x0B40; - POLYGON_SMOOTH = 0x0B41; - CULL_FACE = 0x0B44; - CULL_FACE_MODE = 0x0B45; - FRONT_FACE = 0x0B46; - DEPTH_RANGE = 0x0B70; - DEPTH_TEST = 0x0B71; - DEPTH_WRITEMASK = 0x0B72; - DEPTH_CLEAR_VALUE = 0x0B73; - DEPTH_FUNC = 0x0B74; - STENCIL_TEST = 0x0B90; - STENCIL_CLEAR_VALUE = 0x0B91; - STENCIL_FUNC = 0x0B92; - STENCIL_VALUE_MASK = 0x0B93; - STENCIL_FAIL = 0x0B94; - STENCIL_PASS_DEPTH_FAIL = 0x0B95; - STENCIL_PASS_DEPTH_PASS = 0x0B96; - STENCIL_REF = 0x0B97; - STENCIL_WRITEMASK = 0x0B98; - VIEWPORT = 0x0BA2; - DITHER = 0x0BD0; - BLEND_DST = 0x0BE0; - BLEND_SRC = 0x0BE1; - BLEND = 0x0BE2; - LOGIC_OP_MODE = 0x0BF0; - COLOR_LOGIC_OP = 0x0BF2; - DRAW_BUFFER = 0x0C01; - READ_BUFFER = 0x0C02; - SCISSOR_BOX = 0x0C10; - SCISSOR_TEST = 0x0C11; - COLOR_CLEAR_VALUE = 0x0C22; - COLOR_WRITEMASK = 0x0C23; - DOUBLEBUFFER = 0x0C32; - STEREO = 0x0C33; - LINE_SMOOTH_HINT = 0x0C52; - POLYGON_SMOOTH_HINT = 0x0C53; - UNPACK_SWAP_BYTES = 0x0CF0; - UNPACK_LSB_FIRST = 0x0CF1; - UNPACK_ROW_LENGTH = 0x0CF2; - UNPACK_SKIP_ROWS = 0x0CF3; - UNPACK_SKIP_PIXELS = 0x0CF4; - UNPACK_ALIGNMENT = 0x0CF5; - PACK_SWAP_BYTES = 0x0D00; - PACK_LSB_FIRST = 0x0D01; - PACK_ROW_LENGTH = 0x0D02; - PACK_SKIP_ROWS = 0x0D03; - PACK_SKIP_PIXELS = 0x0D04; - PACK_ALIGNMENT = 0x0D05; - MAX_TEXTURE_SIZE = 0x0D33; - MAX_VIEWPORT_DIMS = 0x0D3A; - SUBPIXEL_BITS = 0x0D50; - TEXTURE_1D = 0x0DE0; - TEXTURE_2D = 0x0DE1; - POLYGON_OFFSET_UNITS = 0x2A00; - POLYGON_OFFSET_POINT = 0x2A01; - POLYGON_OFFSET_LINE = 0x2A02; - POLYGON_OFFSET_FILL = 0x8037; - POLYGON_OFFSET_FACTOR = 0x8038; - TEXTURE_BINDING_1D = 0x8068; - TEXTURE_BINDING_2D = 0x8069; - TEXTURE_WIDTH = 0x1000; - TEXTURE_HEIGHT = 0x1001; - TEXTURE_INTERNAL_FORMAT = 0x1003; - TEXTURE_BORDER_COLOR = 0x1004; - TEXTURE_RED_SIZE = 0x805C; - TEXTURE_GREEN_SIZE = 0x805D; - TEXTURE_BLUE_SIZE = 0x805E; - TEXTURE_ALPHA_SIZE = 0x805F; - DONT_CARE = 0x1100; - FASTEST = 0x1101; - NICEST = 0x1102; - BYTE = 0x1400; - UNSIGNED_BYTE = 0x1401; - SHORT = 0x1402; - UNSIGNED_SHORT = 0x1403; - INT = 0x1404; - UNSIGNED_INT = 0x1405; - FLOAT = 0x1406; - DOUBLE = 0x140A; - STACK_OVERFLOW = 0x0503; - STACK_UNDERFLOW = 0x0504; - CLEAR = 0x1500; - AND = 0x1501; - AND_REVERSE = 0x1502; - COPY = 0x1503; - AND_INVERTED = 0x1504; - NOOP = 0x1505; - XOR = 0x1506; - OR = 0x1507; - NOR = 0x1508; - EQUIV = 0x1509; - INVERT = 0x150A; - OR_REVERSE = 0x150B; - COPY_INVERTED = 0x150C; - OR_INVERTED = 0x150D; - NAND = 0x150E; - SET = 0x150F; - TEXTURE = 0x1702; - COLOR = 0x1800; - DEPTH = 0x1801; - STENCIL = 0x1802; - STENCIL_INDEX = 0x1901; - DEPTH_COMPONENT = 0x1902; - RED = 0x1903; - GREEN = 0x1904; - BLUE = 0x1905; - ALPHA = 0x1906; - RGB = 0x1907; - RGBA = 0x1908; - POINT = 0x1B00; - LINE = 0x1B01; - FILL = 0x1B02; - KEEP = 0x1E00; - REPLACE = 0x1E01; - INCR = 0x1E02; - DECR = 0x1E03; - VENDOR = 0x1F00; - RENDERER = 0x1F01; - VERSION = 0x1F02; - EXTENSIONS = 0x1F03; - NEAREST = 0x2600; - LINEAR = 0x2601; - NEAREST_MIPMAP_NEAREST = 0x2700; - LINEAR_MIPMAP_NEAREST = 0x2701; - NEAREST_MIPMAP_LINEAR = 0x2702; - LINEAR_MIPMAP_LINEAR = 0x2703; - TEXTURE_MAG_FILTER = 0x2800; - TEXTURE_MIN_FILTER = 0x2801; - TEXTURE_WRAP_S = 0x2802; - TEXTURE_WRAP_T = 0x2803; - PROXY_TEXTURE_1D = 0x8063; - PROXY_TEXTURE_2D = 0x8064; - REPEAT = 0x2901; - R3_G3_B2 = 0x2A10; - RGB4 = 0x804F; - RGB5 = 0x8050; - RGB8 = 0x8051; - RGB10 = 0x8052; - RGB12 = 0x8053; - RGB16 = 0x8054; - RGBA2 = 0x8055; - RGBA4 = 0x8056; - RGB5_A1 = 0x8057; - RGBA8 = 0x8058; - RGB10_A2 = 0x8059; - RGBA12 = 0x805A; - RGBA16 = 0x805B; - VERTEX_ARRAY = 0x8074; +FALSE :: 0; +TRUE :: 1; - UNSIGNED_BYTE_3_3_2 = 0x8032; - UNSIGNED_SHORT_4_4_4_4 = 0x8033; - UNSIGNED_SHORT_5_5_5_1 = 0x8034; - UNSIGNED_INT_8_8_8_8 = 0x8035; - UNSIGNED_INT_10_10_10_2 = 0x8036; - TEXTURE_BINDING_3D = 0x806A; - PACK_SKIP_IMAGES = 0x806B; - PACK_IMAGE_HEIGHT = 0x806C; - UNPACK_SKIP_IMAGES = 0x806D; - UNPACK_IMAGE_HEIGHT = 0x806E; - TEXTURE_3D = 0x806F; - PROXY_TEXTURE_3D = 0x8070; - TEXTURE_DEPTH = 0x8071; - TEXTURE_WRAP_R = 0x8072; - MAX_3D_TEXTURE_SIZE = 0x8073; - UNSIGNED_BYTE_2_3_3_REV = 0x8362; - UNSIGNED_SHORT_5_6_5 = 0x8363; - UNSIGNED_SHORT_5_6_5_REV = 0x8364; - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365; - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366; - UNSIGNED_INT_8_8_8_8_REV = 0x8367; - UNSIGNED_INT_2_10_10_10_REV = 0x8368; - BGR = 0x80E0; - BGRA = 0x80E1; - MAX_ELEMENTS_VERTICES = 0x80E8; - MAX_ELEMENTS_INDICES = 0x80E9; - CLAMP_TO_EDGE = 0x812F; - TEXTURE_MIN_LOD = 0x813A; - TEXTURE_MAX_LOD = 0x813B; - TEXTURE_BASE_LEVEL = 0x813C; - TEXTURE_MAX_LEVEL = 0x813D; - SMOOTH_POINT_SIZE_RANGE = 0x0B12; - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13; - SMOOTH_LINE_WIDTH_RANGE = 0x0B22; - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23; - ALIASED_LINE_WIDTH_RANGE = 0x846E; +DEPTH_BUFFER_BIT :: 0x00000100; +STENCIL_BUFFER_BIT :: 0x00000400; +COLOR_BUFFER_BIT :: 0x00004000; +POINTS :: 0x0000; +LINES :: 0x0001; +LINE_LOOP :: 0x0002; +LINE_STRIP :: 0x0003; +TRIANGLES :: 0x0004; +TRIANGLE_STRIP :: 0x0005; +TRIANGLE_FAN :: 0x0006; +QUADS :: 0x0007; +NEVER :: 0x0200; +LESS :: 0x0201; +EQUAL :: 0x0202; +LEQUAL :: 0x0203; +GREATER :: 0x0204; +NOTEQUAL :: 0x0205; +GEQUAL :: 0x0206; +ALWAYS :: 0x0207; +ZERO :: 0; +ONE :: 1; +SRC_COLOR :: 0x0300; +ONE_MINUS_SRC_COLOR :: 0x0301; +SRC_ALPHA :: 0x0302; +ONE_MINUS_SRC_ALPHA :: 0x0303; +DST_ALPHA :: 0x0304; +ONE_MINUS_DST_ALPHA :: 0x0305; +DST_COLOR :: 0x0306; +ONE_MINUS_DST_COLOR :: 0x0307; +SRC_ALPHA_SATURATE :: 0x0308; +NONE :: 0; +FRONT_LEFT :: 0x0400; +FRONT_RIGHT :: 0x0401; +BACK_LEFT :: 0x0402; +BACK_RIGHT :: 0x0403; +FRONT :: 0x0404; +BACK :: 0x0405; +LEFT :: 0x0406; +RIGHT :: 0x0407; +FRONT_AND_BACK :: 0x0408; +NO_ERROR :: 0; +INVALID_ENUM :: 0x0500; +INVALID_VALUE :: 0x0501; +INVALID_OPERATION :: 0x0502; +OUT_OF_MEMORY :: 0x0505; +CW :: 0x0900; +CCW :: 0x0901; +POINT_SIZE :: 0x0B11; +POINT_SIZE_RANGE :: 0x0B12; +POINT_SIZE_GRANULARITY :: 0x0B13; +LINE_SMOOTH :: 0x0B20; +LINE_WIDTH :: 0x0B21; +LINE_WIDTH_RANGE :: 0x0B22; +LINE_WIDTH_GRANULARITY :: 0x0B23; +POLYGON_MODE :: 0x0B40; +POLYGON_SMOOTH :: 0x0B41; +CULL_FACE :: 0x0B44; +CULL_FACE_MODE :: 0x0B45; +FRONT_FACE :: 0x0B46; +DEPTH_RANGE :: 0x0B70; +DEPTH_TEST :: 0x0B71; +DEPTH_WRITEMASK :: 0x0B72; +DEPTH_CLEAR_VALUE :: 0x0B73; +DEPTH_FUNC :: 0x0B74; +STENCIL_TEST :: 0x0B90; +STENCIL_CLEAR_VALUE :: 0x0B91; +STENCIL_FUNC :: 0x0B92; +STENCIL_VALUE_MASK :: 0x0B93; +STENCIL_FAIL :: 0x0B94; +STENCIL_PASS_DEPTH_FAIL :: 0x0B95; +STENCIL_PASS_DEPTH_PASS :: 0x0B96; +STENCIL_REF :: 0x0B97; +STENCIL_WRITEMASK :: 0x0B98; +VIEWPORT :: 0x0BA2; +DITHER :: 0x0BD0; +BLEND_DST :: 0x0BE0; +BLEND_SRC :: 0x0BE1; +BLEND :: 0x0BE2; +LOGIC_OP_MODE :: 0x0BF0; +COLOR_LOGIC_OP :: 0x0BF2; +DRAW_BUFFER :: 0x0C01; +READ_BUFFER :: 0x0C02; +SCISSOR_BOX :: 0x0C10; +SCISSOR_TEST :: 0x0C11; +COLOR_CLEAR_VALUE :: 0x0C22; +COLOR_WRITEMASK :: 0x0C23; +DOUBLEBUFFER :: 0x0C32; +STEREO :: 0x0C33; +LINE_SMOOTH_HINT :: 0x0C52; +POLYGON_SMOOTH_HINT :: 0x0C53; +UNPACK_SWAP_BYTES :: 0x0CF0; +UNPACK_LSB_FIRST :: 0x0CF1; +UNPACK_ROW_LENGTH :: 0x0CF2; +UNPACK_SKIP_ROWS :: 0x0CF3; +UNPACK_SKIP_PIXELS :: 0x0CF4; +UNPACK_ALIGNMENT :: 0x0CF5; +PACK_SWAP_BYTES :: 0x0D00; +PACK_LSB_FIRST :: 0x0D01; +PACK_ROW_LENGTH :: 0x0D02; +PACK_SKIP_ROWS :: 0x0D03; +PACK_SKIP_PIXELS :: 0x0D04; +PACK_ALIGNMENT :: 0x0D05; +MAX_TEXTURE_SIZE :: 0x0D33; +MAX_VIEWPORT_DIMS :: 0x0D3A; +SUBPIXEL_BITS :: 0x0D50; +TEXTURE_1D :: 0x0DE0; +TEXTURE_2D :: 0x0DE1; +POLYGON_OFFSET_UNITS :: 0x2A00; +POLYGON_OFFSET_POINT :: 0x2A01; +POLYGON_OFFSET_LINE :: 0x2A02; +POLYGON_OFFSET_FILL :: 0x8037; +POLYGON_OFFSET_FACTOR :: 0x8038; +TEXTURE_BINDING_1D :: 0x8068; +TEXTURE_BINDING_2D :: 0x8069; +TEXTURE_WIDTH :: 0x1000; +TEXTURE_HEIGHT :: 0x1001; +TEXTURE_INTERNAL_FORMAT :: 0x1003; +TEXTURE_BORDER_COLOR :: 0x1004; +TEXTURE_RED_SIZE :: 0x805C; +TEXTURE_GREEN_SIZE :: 0x805D; +TEXTURE_BLUE_SIZE :: 0x805E; +TEXTURE_ALPHA_SIZE :: 0x805F; +DONT_CARE :: 0x1100; +FASTEST :: 0x1101; +NICEST :: 0x1102; +BYTE :: 0x1400; +UNSIGNED_BYTE :: 0x1401; +SHORT :: 0x1402; +UNSIGNED_SHORT :: 0x1403; +INT :: 0x1404; +UNSIGNED_INT :: 0x1405; +FLOAT :: 0x1406; +DOUBLE :: 0x140A; +STACK_OVERFLOW :: 0x0503; +STACK_UNDERFLOW :: 0x0504; +CLEAR :: 0x1500; +AND :: 0x1501; +AND_REVERSE :: 0x1502; +COPY :: 0x1503; +AND_INVERTED :: 0x1504; +NOOP :: 0x1505; +XOR :: 0x1506; +OR :: 0x1507; +NOR :: 0x1508; +EQUIV :: 0x1509; +INVERT :: 0x150A; +OR_REVERSE :: 0x150B; +COPY_INVERTED :: 0x150C; +OR_INVERTED :: 0x150D; +NAND :: 0x150E; +SET :: 0x150F; +TEXTURE :: 0x1702; +COLOR :: 0x1800; +DEPTH :: 0x1801; +STENCIL :: 0x1802; +STENCIL_INDEX :: 0x1901; +DEPTH_COMPONENT :: 0x1902; +RED :: 0x1903; +GREEN :: 0x1904; +BLUE :: 0x1905; +ALPHA :: 0x1906; +RGB :: 0x1907; +RGBA :: 0x1908; +POINT :: 0x1B00; +LINE :: 0x1B01; +FILL :: 0x1B02; +KEEP :: 0x1E00; +REPLACE :: 0x1E01; +INCR :: 0x1E02; +DECR :: 0x1E03; +VENDOR :: 0x1F00; +RENDERER :: 0x1F01; +VERSION :: 0x1F02; +EXTENSIONS :: 0x1F03; +NEAREST :: 0x2600; +LINEAR :: 0x2601; +NEAREST_MIPMAP_NEAREST :: 0x2700; +LINEAR_MIPMAP_NEAREST :: 0x2701; +NEAREST_MIPMAP_LINEAR :: 0x2702; +LINEAR_MIPMAP_LINEAR :: 0x2703; +TEXTURE_MAG_FILTER :: 0x2800; +TEXTURE_MIN_FILTER :: 0x2801; +TEXTURE_WRAP_S :: 0x2802; +TEXTURE_WRAP_T :: 0x2803; +PROXY_TEXTURE_1D :: 0x8063; +PROXY_TEXTURE_2D :: 0x8064; +REPEAT :: 0x2901; +R3_G3_B2 :: 0x2A10; +RGB4 :: 0x804F; +RGB5 :: 0x8050; +RGB8 :: 0x8051; +RGB10 :: 0x8052; +RGB12 :: 0x8053; +RGB16 :: 0x8054; +RGBA2 :: 0x8055; +RGBA4 :: 0x8056; +RGB5_A1 :: 0x8057; +RGBA8 :: 0x8058; +RGB10_A2 :: 0x8059; +RGBA12 :: 0x805A; +RGBA16 :: 0x805B; +VERTEX_ARRAY :: 0x8074; - TEXTURE0 = 0x84C0; - TEXTURE1 = 0x84C1; - TEXTURE2 = 0x84C2; - TEXTURE3 = 0x84C3; - TEXTURE4 = 0x84C4; - TEXTURE5 = 0x84C5; - TEXTURE6 = 0x84C6; - TEXTURE7 = 0x84C7; - TEXTURE8 = 0x84C8; - TEXTURE9 = 0x84C9; - TEXTURE10 = 0x84CA; - TEXTURE11 = 0x84CB; - TEXTURE12 = 0x84CC; - TEXTURE13 = 0x84CD; - TEXTURE14 = 0x84CE; - TEXTURE15 = 0x84CF; - TEXTURE16 = 0x84D0; - TEXTURE17 = 0x84D1; - TEXTURE18 = 0x84D2; - TEXTURE19 = 0x84D3; - TEXTURE20 = 0x84D4; - TEXTURE21 = 0x84D5; - TEXTURE22 = 0x84D6; - TEXTURE23 = 0x84D7; - TEXTURE24 = 0x84D8; - TEXTURE25 = 0x84D9; - TEXTURE26 = 0x84DA; - TEXTURE27 = 0x84DB; - TEXTURE28 = 0x84DC; - TEXTURE29 = 0x84DD; - TEXTURE30 = 0x84DE; - TEXTURE31 = 0x84DF; - ACTIVE_TEXTURE = 0x84E0; - MULTISAMPLE = 0x809D; - SAMPLE_ALPHA_TO_COVERAGE = 0x809E; - SAMPLE_ALPHA_TO_ONE = 0x809F; - SAMPLE_COVERAGE = 0x80A0; - SAMPLE_BUFFERS = 0x80A8; - SAMPLES = 0x80A9; - SAMPLE_COVERAGE_VALUE = 0x80AA; - SAMPLE_COVERAGE_INVERT = 0x80AB; - TEXTURE_CUBE_MAP = 0x8513; - TEXTURE_BINDING_CUBE_MAP = 0x8514; - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; - PROXY_TEXTURE_CUBE_MAP = 0x851B; - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; - COMPRESSED_RGB = 0x84ED; - COMPRESSED_RGBA = 0x84EE; - TEXTURE_COMPRESSION_HINT = 0x84EF; - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0; - TEXTURE_COMPRESSED = 0x86A1; - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2; - COMPRESSED_TEXTURE_FORMATS = 0x86A3; - CLAMP_TO_BORDER = 0x812D; +UNSIGNED_BYTE_3_3_2 :: 0x8032; +UNSIGNED_SHORT_4_4_4_4 :: 0x8033; +UNSIGNED_SHORT_5_5_5_1 :: 0x8034; +UNSIGNED_INT_8_8_8_8 :: 0x8035; +UNSIGNED_INT_10_10_10_2 :: 0x8036; +TEXTURE_BINDING_3D :: 0x806A; +PACK_SKIP_IMAGES :: 0x806B; +PACK_IMAGE_HEIGHT :: 0x806C; +UNPACK_SKIP_IMAGES :: 0x806D; +UNPACK_IMAGE_HEIGHT :: 0x806E; +TEXTURE_3D :: 0x806F; +PROXY_TEXTURE_3D :: 0x8070; +TEXTURE_DEPTH :: 0x8071; +TEXTURE_WRAP_R :: 0x8072; +MAX_3D_TEXTURE_SIZE :: 0x8073; +UNSIGNED_BYTE_2_3_3_REV :: 0x8362; +UNSIGNED_SHORT_5_6_5 :: 0x8363; +UNSIGNED_SHORT_5_6_5_REV :: 0x8364; +UNSIGNED_SHORT_4_4_4_4_REV :: 0x8365; +UNSIGNED_SHORT_1_5_5_5_REV :: 0x8366; +UNSIGNED_INT_8_8_8_8_REV :: 0x8367; +UNSIGNED_INT_2_10_10_10_REV :: 0x8368; +BGR :: 0x80E0; +BGRA :: 0x80E1; +MAX_ELEMENTS_VERTICES :: 0x80E8; +MAX_ELEMENTS_INDICES :: 0x80E9; +CLAMP_TO_EDGE :: 0x812F; +TEXTURE_MIN_LOD :: 0x813A; +TEXTURE_MAX_LOD :: 0x813B; +TEXTURE_BASE_LEVEL :: 0x813C; +TEXTURE_MAX_LEVEL :: 0x813D; +SMOOTH_POINT_SIZE_RANGE :: 0x0B12; +SMOOTH_POINT_SIZE_GRANULARITY :: 0x0B13; +SMOOTH_LINE_WIDTH_RANGE :: 0x0B22; +SMOOTH_LINE_WIDTH_GRANULARITY :: 0x0B23; +ALIASED_LINE_WIDTH_RANGE :: 0x846E; - BLEND_DST_RGB = 0x80C8; - BLEND_SRC_RGB = 0x80C9; - BLEND_DST_ALPHA = 0x80CA; - BLEND_SRC_ALPHA = 0x80CB; - POINT_FADE_THRESHOLD_SIZE = 0x8128; - DEPTH_COMPONENT16 = 0x81A5; - DEPTH_COMPONENT24 = 0x81A6; - DEPTH_COMPONENT32 = 0x81A7; - MIRRORED_REPEAT = 0x8370; - MAX_TEXTURE_LOD_BIAS = 0x84FD; - TEXTURE_LOD_BIAS = 0x8501; - INCR_WRAP = 0x8507; - DECR_WRAP = 0x8508; - TEXTURE_DEPTH_SIZE = 0x884A; - TEXTURE_COMPARE_MODE = 0x884C; - TEXTURE_COMPARE_FUNC = 0x884D; - FUNC_ADD = 0x8006; - FUNC_SUBTRACT = 0x800A; - FUNC_REVERSE_SUBTRACT = 0x800B; - MIN = 0x8007; - MAX = 0x8008; - CONSTANT_COLOR = 0x8001; - ONE_MINUS_CONSTANT_COLOR = 0x8002; - CONSTANT_ALPHA = 0x8003; - ONE_MINUS_CONSTANT_ALPHA = 0x8004; +TEXTURE0 :: 0x84C0; +TEXTURE1 :: 0x84C1; +TEXTURE2 :: 0x84C2; +TEXTURE3 :: 0x84C3; +TEXTURE4 :: 0x84C4; +TEXTURE5 :: 0x84C5; +TEXTURE6 :: 0x84C6; +TEXTURE7 :: 0x84C7; +TEXTURE8 :: 0x84C8; +TEXTURE9 :: 0x84C9; +TEXTURE10 :: 0x84CA; +TEXTURE11 :: 0x84CB; +TEXTURE12 :: 0x84CC; +TEXTURE13 :: 0x84CD; +TEXTURE14 :: 0x84CE; +TEXTURE15 :: 0x84CF; +TEXTURE16 :: 0x84D0; +TEXTURE17 :: 0x84D1; +TEXTURE18 :: 0x84D2; +TEXTURE19 :: 0x84D3; +TEXTURE20 :: 0x84D4; +TEXTURE21 :: 0x84D5; +TEXTURE22 :: 0x84D6; +TEXTURE23 :: 0x84D7; +TEXTURE24 :: 0x84D8; +TEXTURE25 :: 0x84D9; +TEXTURE26 :: 0x84DA; +TEXTURE27 :: 0x84DB; +TEXTURE28 :: 0x84DC; +TEXTURE29 :: 0x84DD; +TEXTURE30 :: 0x84DE; +TEXTURE31 :: 0x84DF; +ACTIVE_TEXTURE :: 0x84E0; +MULTISAMPLE :: 0x809D; +SAMPLE_ALPHA_TO_COVERAGE :: 0x809E; +SAMPLE_ALPHA_TO_ONE :: 0x809F; +SAMPLE_COVERAGE :: 0x80A0; +SAMPLE_BUFFERS :: 0x80A8; +SAMPLES :: 0x80A9; +SAMPLE_COVERAGE_VALUE :: 0x80AA; +SAMPLE_COVERAGE_INVERT :: 0x80AB; +TEXTURE_CUBE_MAP :: 0x8513; +TEXTURE_BINDING_CUBE_MAP :: 0x8514; +TEXTURE_CUBE_MAP_POSITIVE_X :: 0x8515; +TEXTURE_CUBE_MAP_NEGATIVE_X :: 0x8516; +TEXTURE_CUBE_MAP_POSITIVE_Y :: 0x8517; +TEXTURE_CUBE_MAP_NEGATIVE_Y :: 0x8518; +TEXTURE_CUBE_MAP_POSITIVE_Z :: 0x8519; +TEXTURE_CUBE_MAP_NEGATIVE_Z :: 0x851A; +PROXY_TEXTURE_CUBE_MAP :: 0x851B; +MAX_CUBE_MAP_TEXTURE_SIZE :: 0x851C; +COMPRESSED_RGB :: 0x84ED; +COMPRESSED_RGBA :: 0x84EE; +TEXTURE_COMPRESSION_HINT :: 0x84EF; +TEXTURE_COMPRESSED_IMAGE_SIZE :: 0x86A0; +TEXTURE_COMPRESSED :: 0x86A1; +NUM_COMPRESSED_TEXTURE_FORMATS :: 0x86A2; +COMPRESSED_TEXTURE_FORMATS :: 0x86A3; +CLAMP_TO_BORDER :: 0x812D; - BUFFER_SIZE = 0x8764; - BUFFER_USAGE = 0x8765; - QUERY_COUNTER_BITS = 0x8864; - CURRENT_QUERY = 0x8865; - QUERY_RESULT = 0x8866; - QUERY_RESULT_AVAILABLE = 0x8867; - ARRAY_BUFFER = 0x8892; - ELEMENT_ARRAY_BUFFER = 0x8893; - ARRAY_BUFFER_BINDING = 0x8894; - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; - READ_ONLY = 0x88B8; - WRITE_ONLY = 0x88B9; - READ_WRITE = 0x88BA; - BUFFER_ACCESS = 0x88BB; - BUFFER_MAPPED = 0x88BC; - BUFFER_MAP_POINTER = 0x88BD; - STREAM_DRAW = 0x88E0; - STREAM_READ = 0x88E1; - STREAM_COPY = 0x88E2; - STATIC_DRAW = 0x88E4; - STATIC_READ = 0x88E5; - STATIC_COPY = 0x88E6; - DYNAMIC_DRAW = 0x88E8; - DYNAMIC_READ = 0x88E9; - DYNAMIC_COPY = 0x88EA; - SAMPLES_PASSED = 0x8914; - SRC1_ALPHA = 0x8589; +BLEND_DST_RGB :: 0x80C8; +BLEND_SRC_RGB :: 0x80C9; +BLEND_DST_ALPHA :: 0x80CA; +BLEND_SRC_ALPHA :: 0x80CB; +POINT_FADE_THRESHOLD_SIZE :: 0x8128; +DEPTH_COMPONENT16 :: 0x81A5; +DEPTH_COMPONENT24 :: 0x81A6; +DEPTH_COMPONENT32 :: 0x81A7; +MIRRORED_REPEAT :: 0x8370; +MAX_TEXTURE_LOD_BIAS :: 0x84FD; +TEXTURE_LOD_BIAS :: 0x8501; +INCR_WRAP :: 0x8507; +DECR_WRAP :: 0x8508; +TEXTURE_DEPTH_SIZE :: 0x884A; +TEXTURE_COMPARE_MODE :: 0x884C; +TEXTURE_COMPARE_FUNC :: 0x884D; +FUNC_ADD :: 0x8006; +FUNC_SUBTRACT :: 0x800A; +FUNC_REVERSE_SUBTRACT :: 0x800B; +MIN :: 0x8007; +MAX :: 0x8008; +CONSTANT_COLOR :: 0x8001; +ONE_MINUS_CONSTANT_COLOR :: 0x8002; +CONSTANT_ALPHA :: 0x8003; +ONE_MINUS_CONSTANT_ALPHA :: 0x8004; - BLEND_EQUATION_RGB = 0x8009; - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; - CURRENT_VERTEX_ATTRIB = 0x8626; - VERTEX_PROGRAM_POINT_SIZE = 0x8642; - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; - STENCIL_BACK_FUNC = 0x8800; - STENCIL_BACK_FAIL = 0x8801; - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; - MAX_DRAW_BUFFERS = 0x8824; - DRAW_BUFFER0 = 0x8825; - DRAW_BUFFER1 = 0x8826; - DRAW_BUFFER2 = 0x8827; - DRAW_BUFFER3 = 0x8828; - DRAW_BUFFER4 = 0x8829; - DRAW_BUFFER5 = 0x882A; - DRAW_BUFFER6 = 0x882B; - DRAW_BUFFER7 = 0x882C; - DRAW_BUFFER8 = 0x882D; - DRAW_BUFFER9 = 0x882E; - DRAW_BUFFER10 = 0x882F; - DRAW_BUFFER11 = 0x8830; - DRAW_BUFFER12 = 0x8831; - DRAW_BUFFER13 = 0x8832; - DRAW_BUFFER14 = 0x8833; - DRAW_BUFFER15 = 0x8834; - BLEND_EQUATION_ALPHA = 0x883D; - MAX_VERTEX_ATTRIBS = 0x8869; - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; - MAX_TEXTURE_IMAGE_UNITS = 0x8872; - FRAGMENT_SHADER = 0x8B30; - VERTEX_SHADER = 0x8B31; - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49; - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A; - MAX_VARYING_FLOATS = 0x8B4B; - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; - SHADER_TYPE = 0x8B4F; - FLOAT_VEC2 = 0x8B50; - FLOAT_VEC3 = 0x8B51; - FLOAT_VEC4 = 0x8B52; - INT_VEC2 = 0x8B53; - INT_VEC3 = 0x8B54; - INT_VEC4 = 0x8B55; - BOOL = 0x8B56; - BOOL_VEC2 = 0x8B57; - BOOL_VEC3 = 0x8B58; - BOOL_VEC4 = 0x8B59; - FLOAT_MAT2 = 0x8B5A; - FLOAT_MAT3 = 0x8B5B; - FLOAT_MAT4 = 0x8B5C; - SAMPLER_1D = 0x8B5D; - SAMPLER_2D = 0x8B5E; - SAMPLER_3D = 0x8B5F; - SAMPLER_CUBE = 0x8B60; - SAMPLER_1D_SHADOW = 0x8B61; - SAMPLER_2D_SHADOW = 0x8B62; - DELETE_STATUS = 0x8B80; - COMPILE_STATUS = 0x8B81; - LINK_STATUS = 0x8B82; - VALIDATE_STATUS = 0x8B83; - INFO_LOG_LENGTH = 0x8B84; - ATTACHED_SHADERS = 0x8B85; - ACTIVE_UNIFORMS = 0x8B86; - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87; - SHADER_SOURCE_LENGTH = 0x8B88; - ACTIVE_ATTRIBUTES = 0x8B89; - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A; - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B; - SHADING_LANGUAGE_VERSION = 0x8B8C; - CURRENT_PROGRAM = 0x8B8D; - POINT_SPRITE_COORD_ORIGIN = 0x8CA0; - LOWER_LEFT = 0x8CA1; - UPPER_LEFT = 0x8CA2; - STENCIL_BACK_REF = 0x8CA3; - STENCIL_BACK_VALUE_MASK = 0x8CA4; - STENCIL_BACK_WRITEMASK = 0x8CA5; +BUFFER_SIZE :: 0x8764; +BUFFER_USAGE :: 0x8765; +QUERY_COUNTER_BITS :: 0x8864; +CURRENT_QUERY :: 0x8865; +QUERY_RESULT :: 0x8866; +QUERY_RESULT_AVAILABLE :: 0x8867; +ARRAY_BUFFER :: 0x8892; +ELEMENT_ARRAY_BUFFER :: 0x8893; +ARRAY_BUFFER_BINDING :: 0x8894; +ELEMENT_ARRAY_BUFFER_BINDING :: 0x8895; +VERTEX_ATTRIB_ARRAY_BUFFER_BINDING :: 0x889F; +READ_ONLY :: 0x88B8; +WRITE_ONLY :: 0x88B9; +READ_WRITE :: 0x88BA; +BUFFER_ACCESS :: 0x88BB; +BUFFER_MAPPED :: 0x88BC; +BUFFER_MAP_POINTER :: 0x88BD; +STREAM_DRAW :: 0x88E0; +STREAM_READ :: 0x88E1; +STREAM_COPY :: 0x88E2; +STATIC_DRAW :: 0x88E4; +STATIC_READ :: 0x88E5; +STATIC_COPY :: 0x88E6; +DYNAMIC_DRAW :: 0x88E8; +DYNAMIC_READ :: 0x88E9; +DYNAMIC_COPY :: 0x88EA; +SAMPLES_PASSED :: 0x8914; +SRC1_ALPHA :: 0x8589; - PIXEL_PACK_BUFFER = 0x88EB; - PIXEL_UNPACK_BUFFER = 0x88EC; - PIXEL_PACK_BUFFER_BINDING = 0x88ED; - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF; - FLOAT_MAT2x3 = 0x8B65; - FLOAT_MAT2x4 = 0x8B66; - FLOAT_MAT3x2 = 0x8B67; - FLOAT_MAT3x4 = 0x8B68; - FLOAT_MAT4x2 = 0x8B69; - FLOAT_MAT4x3 = 0x8B6A; - SRGB = 0x8C40; - SRGB8 = 0x8C41; - SRGB_ALPHA = 0x8C42; - SRGB8_ALPHA8 = 0x8C43; - COMPRESSED_SRGB = 0x8C48; - COMPRESSED_SRGB_ALPHA = 0x8C49; +BLEND_EQUATION_RGB :: 0x8009; +VERTEX_ATTRIB_ARRAY_ENABLED :: 0x8622; +VERTEX_ATTRIB_ARRAY_SIZE :: 0x8623; +VERTEX_ATTRIB_ARRAY_STRIDE :: 0x8624; +VERTEX_ATTRIB_ARRAY_TYPE :: 0x8625; +CURRENT_VERTEX_ATTRIB :: 0x8626; +VERTEX_PROGRAM_POINT_SIZE :: 0x8642; +VERTEX_ATTRIB_ARRAY_POINTER :: 0x8645; +STENCIL_BACK_FUNC :: 0x8800; +STENCIL_BACK_FAIL :: 0x8801; +STENCIL_BACK_PASS_DEPTH_FAIL :: 0x8802; +STENCIL_BACK_PASS_DEPTH_PASS :: 0x8803; +MAX_DRAW_BUFFERS :: 0x8824; +DRAW_BUFFER0 :: 0x8825; +DRAW_BUFFER1 :: 0x8826; +DRAW_BUFFER2 :: 0x8827; +DRAW_BUFFER3 :: 0x8828; +DRAW_BUFFER4 :: 0x8829; +DRAW_BUFFER5 :: 0x882A; +DRAW_BUFFER6 :: 0x882B; +DRAW_BUFFER7 :: 0x882C; +DRAW_BUFFER8 :: 0x882D; +DRAW_BUFFER9 :: 0x882E; +DRAW_BUFFER10 :: 0x882F; +DRAW_BUFFER11 :: 0x8830; +DRAW_BUFFER12 :: 0x8831; +DRAW_BUFFER13 :: 0x8832; +DRAW_BUFFER14 :: 0x8833; +DRAW_BUFFER15 :: 0x8834; +BLEND_EQUATION_ALPHA :: 0x883D; +MAX_VERTEX_ATTRIBS :: 0x8869; +VERTEX_ATTRIB_ARRAY_NORMALIZED :: 0x886A; +MAX_TEXTURE_IMAGE_UNITS :: 0x8872; +FRAGMENT_SHADER :: 0x8B30; +VERTEX_SHADER :: 0x8B31; +MAX_FRAGMENT_UNIFORM_COMPONENTS :: 0x8B49; +MAX_VERTEX_UNIFORM_COMPONENTS :: 0x8B4A; +MAX_VARYING_FLOATS :: 0x8B4B; +MAX_VERTEX_TEXTURE_IMAGE_UNITS :: 0x8B4C; +MAX_COMBINED_TEXTURE_IMAGE_UNITS :: 0x8B4D; +SHADER_TYPE :: 0x8B4F; +FLOAT_VEC2 :: 0x8B50; +FLOAT_VEC3 :: 0x8B51; +FLOAT_VEC4 :: 0x8B52; +INT_VEC2 :: 0x8B53; +INT_VEC3 :: 0x8B54; +INT_VEC4 :: 0x8B55; +BOOL :: 0x8B56; +BOOL_VEC2 :: 0x8B57; +BOOL_VEC3 :: 0x8B58; +BOOL_VEC4 :: 0x8B59; +FLOAT_MAT2 :: 0x8B5A; +FLOAT_MAT3 :: 0x8B5B; +FLOAT_MAT4 :: 0x8B5C; +SAMPLER_1D :: 0x8B5D; +SAMPLER_2D :: 0x8B5E; +SAMPLER_3D :: 0x8B5F; +SAMPLER_CUBE :: 0x8B60; +SAMPLER_1D_SHADOW :: 0x8B61; +SAMPLER_2D_SHADOW :: 0x8B62; +DELETE_STATUS :: 0x8B80; +COMPILE_STATUS :: 0x8B81; +LINK_STATUS :: 0x8B82; +VALIDATE_STATUS :: 0x8B83; +INFO_LOG_LENGTH :: 0x8B84; +ATTACHED_SHADERS :: 0x8B85; +ACTIVE_UNIFORMS :: 0x8B86; +ACTIVE_UNIFORM_MAX_LENGTH :: 0x8B87; +SHADER_SOURCE_LENGTH :: 0x8B88; +ACTIVE_ATTRIBUTES :: 0x8B89; +ACTIVE_ATTRIBUTE_MAX_LENGTH :: 0x8B8A; +FRAGMENT_SHADER_DERIVATIVE_HINT :: 0x8B8B; +SHADING_LANGUAGE_VERSION :: 0x8B8C; +CURRENT_PROGRAM :: 0x8B8D; +POINT_SPRITE_COORD_ORIGIN :: 0x8CA0; +LOWER_LEFT :: 0x8CA1; +UPPER_LEFT :: 0x8CA2; +STENCIL_BACK_REF :: 0x8CA3; +STENCIL_BACK_VALUE_MASK :: 0x8CA4; +STENCIL_BACK_WRITEMASK :: 0x8CA5; - COMPARE_REF_TO_TEXTURE = 0x884E; - CLIP_DISTANCE0 = 0x3000; - CLIP_DISTANCE1 = 0x3001; - CLIP_DISTANCE2 = 0x3002; - CLIP_DISTANCE3 = 0x3003; - CLIP_DISTANCE4 = 0x3004; - CLIP_DISTANCE5 = 0x3005; - CLIP_DISTANCE6 = 0x3006; - CLIP_DISTANCE7 = 0x3007; - MAX_CLIP_DISTANCES = 0x0D32; - MAJOR_VERSION = 0x821B; - MINOR_VERSION = 0x821C; - NUM_EXTENSIONS = 0x821D; - CONTEXT_FLAGS = 0x821E; - COMPRESSED_RED = 0x8225; - COMPRESSED_RG = 0x8226; - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001; - RGBA32F = 0x8814; - RGB32F = 0x8815; - RGBA16F = 0x881A; - RGB16F = 0x881B; - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD; - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF; - MIN_PROGRAM_TEXEL_OFFSET = 0x8904; - MAX_PROGRAM_TEXEL_OFFSET = 0x8905; - CLAMP_READ_COLOR = 0x891C; - FIXED_ONLY = 0x891D; - MAX_VARYING_COMPONENTS = 0x8B4B; - TEXTURE_1D_ARRAY = 0x8C18; - PROXY_TEXTURE_1D_ARRAY = 0x8C19; - TEXTURE_2D_ARRAY = 0x8C1A; - PROXY_TEXTURE_2D_ARRAY = 0x8C1B; - TEXTURE_BINDING_1D_ARRAY = 0x8C1C; - TEXTURE_BINDING_2D_ARRAY = 0x8C1D; - R11F_G11F_B10F = 0x8C3A; - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B; - RGB9_E5 = 0x8C3D; - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E; - TEXTURE_SHARED_SIZE = 0x8C3F; - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76; - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F; - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80; - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83; - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84; - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85; - PRIMITIVES_GENERATED = 0x8C87; - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; - RASTERIZER_DISCARD = 0x8C89; - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A; - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B; - INTERLEAVED_ATTRIBS = 0x8C8C; - SEPARATE_ATTRIBS = 0x8C8D; - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E; - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F; - RGBA32UI = 0x8D70; - RGB32UI = 0x8D71; - RGBA16UI = 0x8D76; - RGB16UI = 0x8D77; - RGBA8UI = 0x8D7C; - RGB8UI = 0x8D7D; - RGBA32I = 0x8D82; - RGB32I = 0x8D83; - RGBA16I = 0x8D88; - RGB16I = 0x8D89; - RGBA8I = 0x8D8E; - RGB8I = 0x8D8F; - RED_INTEGER = 0x8D94; - GREEN_INTEGER = 0x8D95; - BLUE_INTEGER = 0x8D96; - RGB_INTEGER = 0x8D98; - RGBA_INTEGER = 0x8D99; - BGR_INTEGER = 0x8D9A; - BGRA_INTEGER = 0x8D9B; - SAMPLER_1D_ARRAY = 0x8DC0; - SAMPLER_2D_ARRAY = 0x8DC1; - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3; - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4; - SAMPLER_CUBE_SHADOW = 0x8DC5; - UNSIGNED_INT_VEC2 = 0x8DC6; - UNSIGNED_INT_VEC3 = 0x8DC7; - UNSIGNED_INT_VEC4 = 0x8DC8; - INT_SAMPLER_1D = 0x8DC9; - INT_SAMPLER_2D = 0x8DCA; - INT_SAMPLER_3D = 0x8DCB; - INT_SAMPLER_CUBE = 0x8DCC; - INT_SAMPLER_1D_ARRAY = 0x8DCE; - INT_SAMPLER_2D_ARRAY = 0x8DCF; - UNSIGNED_INT_SAMPLER_1D = 0x8DD1; - UNSIGNED_INT_SAMPLER_2D = 0x8DD2; - UNSIGNED_INT_SAMPLER_3D = 0x8DD3; - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4; - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6; - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7; - QUERY_WAIT = 0x8E13; - QUERY_NO_WAIT = 0x8E14; - QUERY_BY_REGION_WAIT = 0x8E15; - QUERY_BY_REGION_NO_WAIT = 0x8E16; - BUFFER_ACCESS_FLAGS = 0x911F; - BUFFER_MAP_LENGTH = 0x9120; - BUFFER_MAP_OFFSET = 0x9121; - DEPTH_COMPONENT32F = 0x8CAC; - DEPTH32F_STENCIL8 = 0x8CAD; - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD; - INVALID_FRAMEBUFFER_OPERATION = 0x0506; - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210; - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211; - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212; - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213; - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214; - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215; - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216; - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217; - FRAMEBUFFER_DEFAULT = 0x8218; - FRAMEBUFFER_UNDEFINED = 0x8219; - DEPTH_STENCIL_ATTACHMENT = 0x821A; - MAX_RENDERBUFFER_SIZE = 0x84E8; - DEPTH_STENCIL = 0x84F9; - UNSIGNED_INT_24_8 = 0x84FA; - DEPTH24_STENCIL8 = 0x88F0; - TEXTURE_STENCIL_SIZE = 0x88F1; - TEXTURE_RED_TYPE = 0x8C10; - TEXTURE_GREEN_TYPE = 0x8C11; - TEXTURE_BLUE_TYPE = 0x8C12; - TEXTURE_ALPHA_TYPE = 0x8C13; - TEXTURE_DEPTH_TYPE = 0x8C16; - UNSIGNED_NORMALIZED = 0x8C17; - FRAMEBUFFER_BINDING = 0x8CA6; - DRAW_FRAMEBUFFER_BINDING = 0x8CA6; - RENDERBUFFER_BINDING = 0x8CA7; - READ_FRAMEBUFFER = 0x8CA8; - DRAW_FRAMEBUFFER = 0x8CA9; - READ_FRAMEBUFFER_BINDING = 0x8CAA; - RENDERBUFFER_SAMPLES = 0x8CAB; - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4; - FRAMEBUFFER_COMPLETE = 0x8CD5; - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB; - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC; - FRAMEBUFFER_UNSUPPORTED = 0x8CDD; - MAX_COLOR_ATTACHMENTS = 0x8CDF; - COLOR_ATTACHMENT0 = 0x8CE0; - COLOR_ATTACHMENT1 = 0x8CE1; - COLOR_ATTACHMENT2 = 0x8CE2; - COLOR_ATTACHMENT3 = 0x8CE3; - COLOR_ATTACHMENT4 = 0x8CE4; - COLOR_ATTACHMENT5 = 0x8CE5; - COLOR_ATTACHMENT6 = 0x8CE6; - COLOR_ATTACHMENT7 = 0x8CE7; - COLOR_ATTACHMENT8 = 0x8CE8; - COLOR_ATTACHMENT9 = 0x8CE9; - COLOR_ATTACHMENT10 = 0x8CEA; - COLOR_ATTACHMENT11 = 0x8CEB; - COLOR_ATTACHMENT12 = 0x8CEC; - COLOR_ATTACHMENT13 = 0x8CED; - COLOR_ATTACHMENT14 = 0x8CEE; - COLOR_ATTACHMENT15 = 0x8CEF; - COLOR_ATTACHMENT16 = 0x8CF0; - COLOR_ATTACHMENT17 = 0x8CF1; - COLOR_ATTACHMENT18 = 0x8CF2; - COLOR_ATTACHMENT19 = 0x8CF3; - COLOR_ATTACHMENT20 = 0x8CF4; - COLOR_ATTACHMENT21 = 0x8CF5; - COLOR_ATTACHMENT22 = 0x8CF6; - COLOR_ATTACHMENT23 = 0x8CF7; - COLOR_ATTACHMENT24 = 0x8CF8; - COLOR_ATTACHMENT25 = 0x8CF9; - COLOR_ATTACHMENT26 = 0x8CFA; - COLOR_ATTACHMENT27 = 0x8CFB; - COLOR_ATTACHMENT28 = 0x8CFC; - COLOR_ATTACHMENT29 = 0x8CFD; - COLOR_ATTACHMENT30 = 0x8CFE; - COLOR_ATTACHMENT31 = 0x8CFF; - DEPTH_ATTACHMENT = 0x8D00; - STENCIL_ATTACHMENT = 0x8D20; - FRAMEBUFFER = 0x8D40; - RENDERBUFFER = 0x8D41; - RENDERBUFFER_WIDTH = 0x8D42; - RENDERBUFFER_HEIGHT = 0x8D43; - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; - STENCIL_INDEX1 = 0x8D46; - STENCIL_INDEX4 = 0x8D47; - STENCIL_INDEX8 = 0x8D48; - STENCIL_INDEX16 = 0x8D49; - RENDERBUFFER_RED_SIZE = 0x8D50; - RENDERBUFFER_GREEN_SIZE = 0x8D51; - RENDERBUFFER_BLUE_SIZE = 0x8D52; - RENDERBUFFER_ALPHA_SIZE = 0x8D53; - RENDERBUFFER_DEPTH_SIZE = 0x8D54; - RENDERBUFFER_STENCIL_SIZE = 0x8D55; - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56; - MAX_SAMPLES = 0x8D57; - FRAMEBUFFER_SRGB = 0x8DB9; - HALF_FLOAT = 0x140B; - MAP_READ_BIT = 0x0001; - MAP_WRITE_BIT = 0x0002; - MAP_INVALIDATE_RANGE_BIT = 0x0004; - MAP_INVALIDATE_BUFFER_BIT = 0x0008; - MAP_FLUSH_EXPLICIT_BIT = 0x0010; - MAP_UNSYNCHRONIZED_BIT = 0x0020; - COMPRESSED_RED_RGTC1 = 0x8DBB; - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC; - COMPRESSED_RG_RGTC2 = 0x8DBD; - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE; - RG = 0x8227; - RG_INTEGER = 0x8228; - R8 = 0x8229; - R16 = 0x822A; - RG8 = 0x822B; - RG16 = 0x822C; - R16F = 0x822D; - R32F = 0x822E; - RG16F = 0x822F; - RG32F = 0x8230; - R8I = 0x8231; - R8UI = 0x8232; - R16I = 0x8233; - R16UI = 0x8234; - R32I = 0x8235; - R32UI = 0x8236; - RG8I = 0x8237; - RG8UI = 0x8238; - RG16I = 0x8239; - RG16UI = 0x823A; - RG32I = 0x823B; - RG32UI = 0x823C; - VERTEX_ARRAY_BINDING = 0x85B5; +PIXEL_PACK_BUFFER :: 0x88EB; +PIXEL_UNPACK_BUFFER :: 0x88EC; +PIXEL_PACK_BUFFER_BINDING :: 0x88ED; +PIXEL_UNPACK_BUFFER_BINDING :: 0x88EF; +FLOAT_MAT2x3 :: 0x8B65; +FLOAT_MAT2x4 :: 0x8B66; +FLOAT_MAT3x2 :: 0x8B67; +FLOAT_MAT3x4 :: 0x8B68; +FLOAT_MAT4x2 :: 0x8B69; +FLOAT_MAT4x3 :: 0x8B6A; +SRGB :: 0x8C40; +SRGB8 :: 0x8C41; +SRGB_ALPHA :: 0x8C42; +SRGB8_ALPHA8 :: 0x8C43; +COMPRESSED_SRGB :: 0x8C48; +COMPRESSED_SRGB_ALPHA :: 0x8C49; - SAMPLER_2D_RECT = 0x8B63; - SAMPLER_2D_RECT_SHADOW = 0x8B64; - SAMPLER_BUFFER = 0x8DC2; - INT_SAMPLER_2D_RECT = 0x8DCD; - INT_SAMPLER_BUFFER = 0x8DD0; - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5; - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8; - TEXTURE_BUFFER = 0x8C2A; - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B; - TEXTURE_BINDING_BUFFER = 0x8C2C; - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D; - TEXTURE_RECTANGLE = 0x84F5; - TEXTURE_BINDING_RECTANGLE = 0x84F6; - PROXY_TEXTURE_RECTANGLE = 0x84F7; - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8; - R8_SNORM = 0x8F94; - RG8_SNORM = 0x8F95; - RGB8_SNORM = 0x8F96; - RGBA8_SNORM = 0x8F97; - R16_SNORM = 0x8F98; - RG16_SNORM = 0x8F99; - RGB16_SNORM = 0x8F9A; - RGBA16_SNORM = 0x8F9B; - SIGNED_NORMALIZED = 0x8F9C; - PRIMITIVE_RESTART = 0x8F9D; - PRIMITIVE_RESTART_INDEX = 0x8F9E; - COPY_READ_BUFFER = 0x8F36; - COPY_WRITE_BUFFER = 0x8F37; - UNIFORM_BUFFER = 0x8A11; - UNIFORM_BUFFER_BINDING = 0x8A28; - UNIFORM_BUFFER_START = 0x8A29; - UNIFORM_BUFFER_SIZE = 0x8A2A; - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B; - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C; - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D; - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E; - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F; - MAX_UNIFORM_BLOCK_SIZE = 0x8A30; - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31; - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32; - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33; - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34; - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35; - ACTIVE_UNIFORM_BLOCKS = 0x8A36; - UNIFORM_TYPE = 0x8A37; - UNIFORM_SIZE = 0x8A38; - UNIFORM_NAME_LENGTH = 0x8A39; - UNIFORM_BLOCK_INDEX = 0x8A3A; - UNIFORM_OFFSET = 0x8A3B; - UNIFORM_ARRAY_STRIDE = 0x8A3C; - UNIFORM_MATRIX_STRIDE = 0x8A3D; - UNIFORM_IS_ROW_MAJOR = 0x8A3E; - UNIFORM_BLOCK_BINDING = 0x8A3F; - UNIFORM_BLOCK_DATA_SIZE = 0x8A40; - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41; - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42; - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43; - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44; - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45; - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46; - INVALID_INDEX = 0xFFFFFFFF; +COMPARE_REF_TO_TEXTURE :: 0x884E; +CLIP_DISTANCE0 :: 0x3000; +CLIP_DISTANCE1 :: 0x3001; +CLIP_DISTANCE2 :: 0x3002; +CLIP_DISTANCE3 :: 0x3003; +CLIP_DISTANCE4 :: 0x3004; +CLIP_DISTANCE5 :: 0x3005; +CLIP_DISTANCE6 :: 0x3006; +CLIP_DISTANCE7 :: 0x3007; +MAX_CLIP_DISTANCES :: 0x0D32; +MAJOR_VERSION :: 0x821B; +MINOR_VERSION :: 0x821C; +NUM_EXTENSIONS :: 0x821D; +CONTEXT_FLAGS :: 0x821E; +COMPRESSED_RED :: 0x8225; +COMPRESSED_RG :: 0x8226; +CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT :: 0x00000001; +RGBA32F :: 0x8814; +RGB32F :: 0x8815; +RGBA16F :: 0x881A; +RGB16F :: 0x881B; +VERTEX_ATTRIB_ARRAY_INTEGER :: 0x88FD; +MAX_ARRAY_TEXTURE_LAYERS :: 0x88FF; +MIN_PROGRAM_TEXEL_OFFSET :: 0x8904; +MAX_PROGRAM_TEXEL_OFFSET :: 0x8905; +CLAMP_READ_COLOR :: 0x891C; +FIXED_ONLY :: 0x891D; +MAX_VARYING_COMPONENTS :: 0x8B4B; +TEXTURE_1D_ARRAY :: 0x8C18; +PROXY_TEXTURE_1D_ARRAY :: 0x8C19; +TEXTURE_2D_ARRAY :: 0x8C1A; +PROXY_TEXTURE_2D_ARRAY :: 0x8C1B; +TEXTURE_BINDING_1D_ARRAY :: 0x8C1C; +TEXTURE_BINDING_2D_ARRAY :: 0x8C1D; +R11F_G11F_B10F :: 0x8C3A; +UNSIGNED_INT_10F_11F_11F_REV :: 0x8C3B; +RGB9_E5 :: 0x8C3D; +UNSIGNED_INT_5_9_9_9_REV :: 0x8C3E; +TEXTURE_SHARED_SIZE :: 0x8C3F; +TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH :: 0x8C76; +TRANSFORM_FEEDBACK_BUFFER_MODE :: 0x8C7F; +MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS :: 0x8C80; +TRANSFORM_FEEDBACK_VARYINGS :: 0x8C83; +TRANSFORM_FEEDBACK_BUFFER_START :: 0x8C84; +TRANSFORM_FEEDBACK_BUFFER_SIZE :: 0x8C85; +PRIMITIVES_GENERATED :: 0x8C87; +TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN :: 0x8C88; +RASTERIZER_DISCARD :: 0x8C89; +MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS :: 0x8C8A; +MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS :: 0x8C8B; +INTERLEAVED_ATTRIBS :: 0x8C8C; +SEPARATE_ATTRIBS :: 0x8C8D; +TRANSFORM_FEEDBACK_BUFFER :: 0x8C8E; +TRANSFORM_FEEDBACK_BUFFER_BINDING :: 0x8C8F; +RGBA32UI :: 0x8D70; +RGB32UI :: 0x8D71; +RGBA16UI :: 0x8D76; +RGB16UI :: 0x8D77; +RGBA8UI :: 0x8D7C; +RGB8UI :: 0x8D7D; +RGBA32I :: 0x8D82; +RGB32I :: 0x8D83; +RGBA16I :: 0x8D88; +RGB16I :: 0x8D89; +RGBA8I :: 0x8D8E; +RGB8I :: 0x8D8F; +RED_INTEGER :: 0x8D94; +GREEN_INTEGER :: 0x8D95; +BLUE_INTEGER :: 0x8D96; +RGB_INTEGER :: 0x8D98; +RGBA_INTEGER :: 0x8D99; +BGR_INTEGER :: 0x8D9A; +BGRA_INTEGER :: 0x8D9B; +SAMPLER_1D_ARRAY :: 0x8DC0; +SAMPLER_2D_ARRAY :: 0x8DC1; +SAMPLER_1D_ARRAY_SHADOW :: 0x8DC3; +SAMPLER_2D_ARRAY_SHADOW :: 0x8DC4; +SAMPLER_CUBE_SHADOW :: 0x8DC5; +UNSIGNED_INT_VEC2 :: 0x8DC6; +UNSIGNED_INT_VEC3 :: 0x8DC7; +UNSIGNED_INT_VEC4 :: 0x8DC8; +INT_SAMPLER_1D :: 0x8DC9; +INT_SAMPLER_2D :: 0x8DCA; +INT_SAMPLER_3D :: 0x8DCB; +INT_SAMPLER_CUBE :: 0x8DCC; +INT_SAMPLER_1D_ARRAY :: 0x8DCE; +INT_SAMPLER_2D_ARRAY :: 0x8DCF; +UNSIGNED_INT_SAMPLER_1D :: 0x8DD1; +UNSIGNED_INT_SAMPLER_2D :: 0x8DD2; +UNSIGNED_INT_SAMPLER_3D :: 0x8DD3; +UNSIGNED_INT_SAMPLER_CUBE :: 0x8DD4; +UNSIGNED_INT_SAMPLER_1D_ARRAY :: 0x8DD6; +UNSIGNED_INT_SAMPLER_2D_ARRAY :: 0x8DD7; +QUERY_WAIT :: 0x8E13; +QUERY_NO_WAIT :: 0x8E14; +QUERY_BY_REGION_WAIT :: 0x8E15; +QUERY_BY_REGION_NO_WAIT :: 0x8E16; +BUFFER_ACCESS_FLAGS :: 0x911F; +BUFFER_MAP_LENGTH :: 0x9120; +BUFFER_MAP_OFFSET :: 0x9121; +DEPTH_COMPONENT32F :: 0x8CAC; +DEPTH32F_STENCIL8 :: 0x8CAD; +FLOAT_32_UNSIGNED_INT_24_8_REV :: 0x8DAD; +INVALID_FRAMEBUFFER_OPERATION :: 0x0506; +FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING :: 0x8210; +FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE :: 0x8211; +FRAMEBUFFER_ATTACHMENT_RED_SIZE :: 0x8212; +FRAMEBUFFER_ATTACHMENT_GREEN_SIZE :: 0x8213; +FRAMEBUFFER_ATTACHMENT_BLUE_SIZE :: 0x8214; +FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE :: 0x8215; +FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE :: 0x8216; +FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE :: 0x8217; +FRAMEBUFFER_DEFAULT :: 0x8218; +FRAMEBUFFER_UNDEFINED :: 0x8219; +DEPTH_STENCIL_ATTACHMENT :: 0x821A; +MAX_RENDERBUFFER_SIZE :: 0x84E8; +DEPTH_STENCIL :: 0x84F9; +UNSIGNED_INT_24_8 :: 0x84FA; +DEPTH24_STENCIL8 :: 0x88F0; +TEXTURE_STENCIL_SIZE :: 0x88F1; +TEXTURE_RED_TYPE :: 0x8C10; +TEXTURE_GREEN_TYPE :: 0x8C11; +TEXTURE_BLUE_TYPE :: 0x8C12; +TEXTURE_ALPHA_TYPE :: 0x8C13; +TEXTURE_DEPTH_TYPE :: 0x8C16; +UNSIGNED_NORMALIZED :: 0x8C17; +FRAMEBUFFER_BINDING :: 0x8CA6; +DRAW_FRAMEBUFFER_BINDING :: 0x8CA6; +RENDERBUFFER_BINDING :: 0x8CA7; +READ_FRAMEBUFFER :: 0x8CA8; +DRAW_FRAMEBUFFER :: 0x8CA9; +READ_FRAMEBUFFER_BINDING :: 0x8CAA; +RENDERBUFFER_SAMPLES :: 0x8CAB; +FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE :: 0x8CD0; +FRAMEBUFFER_ATTACHMENT_OBJECT_NAME :: 0x8CD1; +FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL :: 0x8CD2; +FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE :: 0x8CD3; +FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER :: 0x8CD4; +FRAMEBUFFER_COMPLETE :: 0x8CD5; +FRAMEBUFFER_INCOMPLETE_ATTACHMENT :: 0x8CD6; +FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT :: 0x8CD7; +FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER :: 0x8CDB; +FRAMEBUFFER_INCOMPLETE_READ_BUFFER :: 0x8CDC; +FRAMEBUFFER_UNSUPPORTED :: 0x8CDD; +MAX_COLOR_ATTACHMENTS :: 0x8CDF; +COLOR_ATTACHMENT0 :: 0x8CE0; +COLOR_ATTACHMENT1 :: 0x8CE1; +COLOR_ATTACHMENT2 :: 0x8CE2; +COLOR_ATTACHMENT3 :: 0x8CE3; +COLOR_ATTACHMENT4 :: 0x8CE4; +COLOR_ATTACHMENT5 :: 0x8CE5; +COLOR_ATTACHMENT6 :: 0x8CE6; +COLOR_ATTACHMENT7 :: 0x8CE7; +COLOR_ATTACHMENT8 :: 0x8CE8; +COLOR_ATTACHMENT9 :: 0x8CE9; +COLOR_ATTACHMENT10 :: 0x8CEA; +COLOR_ATTACHMENT11 :: 0x8CEB; +COLOR_ATTACHMENT12 :: 0x8CEC; +COLOR_ATTACHMENT13 :: 0x8CED; +COLOR_ATTACHMENT14 :: 0x8CEE; +COLOR_ATTACHMENT15 :: 0x8CEF; +COLOR_ATTACHMENT16 :: 0x8CF0; +COLOR_ATTACHMENT17 :: 0x8CF1; +COLOR_ATTACHMENT18 :: 0x8CF2; +COLOR_ATTACHMENT19 :: 0x8CF3; +COLOR_ATTACHMENT20 :: 0x8CF4; +COLOR_ATTACHMENT21 :: 0x8CF5; +COLOR_ATTACHMENT22 :: 0x8CF6; +COLOR_ATTACHMENT23 :: 0x8CF7; +COLOR_ATTACHMENT24 :: 0x8CF8; +COLOR_ATTACHMENT25 :: 0x8CF9; +COLOR_ATTACHMENT26 :: 0x8CFA; +COLOR_ATTACHMENT27 :: 0x8CFB; +COLOR_ATTACHMENT28 :: 0x8CFC; +COLOR_ATTACHMENT29 :: 0x8CFD; +COLOR_ATTACHMENT30 :: 0x8CFE; +COLOR_ATTACHMENT31 :: 0x8CFF; +DEPTH_ATTACHMENT :: 0x8D00; +STENCIL_ATTACHMENT :: 0x8D20; +FRAMEBUFFER :: 0x8D40; +RENDERBUFFER :: 0x8D41; +RENDERBUFFER_WIDTH :: 0x8D42; +RENDERBUFFER_HEIGHT :: 0x8D43; +RENDERBUFFER_INTERNAL_FORMAT :: 0x8D44; +STENCIL_INDEX1 :: 0x8D46; +STENCIL_INDEX4 :: 0x8D47; +STENCIL_INDEX8 :: 0x8D48; +STENCIL_INDEX16 :: 0x8D49; +RENDERBUFFER_RED_SIZE :: 0x8D50; +RENDERBUFFER_GREEN_SIZE :: 0x8D51; +RENDERBUFFER_BLUE_SIZE :: 0x8D52; +RENDERBUFFER_ALPHA_SIZE :: 0x8D53; +RENDERBUFFER_DEPTH_SIZE :: 0x8D54; +RENDERBUFFER_STENCIL_SIZE :: 0x8D55; +FRAMEBUFFER_INCOMPLETE_MULTISAMPLE :: 0x8D56; +MAX_SAMPLES :: 0x8D57; +FRAMEBUFFER_SRGB :: 0x8DB9; +HALF_FLOAT :: 0x140B; +MAP_READ_BIT :: 0x0001; +MAP_WRITE_BIT :: 0x0002; +MAP_INVALIDATE_RANGE_BIT :: 0x0004; +MAP_INVALIDATE_BUFFER_BIT :: 0x0008; +MAP_FLUSH_EXPLICIT_BIT :: 0x0010; +MAP_UNSYNCHRONIZED_BIT :: 0x0020; +COMPRESSED_RED_RGTC1 :: 0x8DBB; +COMPRESSED_SIGNED_RED_RGTC1 :: 0x8DBC; +COMPRESSED_RG_RGTC2 :: 0x8DBD; +COMPRESSED_SIGNED_RG_RGTC2 :: 0x8DBE; +RG :: 0x8227; +RG_INTEGER :: 0x8228; +R8 :: 0x8229; +R16 :: 0x822A; +RG8 :: 0x822B; +RG16 :: 0x822C; +R16F :: 0x822D; +R32F :: 0x822E; +RG16F :: 0x822F; +RG32F :: 0x8230; +R8I :: 0x8231; +R8UI :: 0x8232; +R16I :: 0x8233; +R16UI :: 0x8234; +R32I :: 0x8235; +R32UI :: 0x8236; +RG8I :: 0x8237; +RG8UI :: 0x8238; +RG16I :: 0x8239; +RG16UI :: 0x823A; +RG32I :: 0x823B; +RG32UI :: 0x823C; +VERTEX_ARRAY_BINDING :: 0x85B5; - CONTEXT_CORE_PROFILE_BIT = 0x00000001; - CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002; - LINES_ADJACENCY = 0x000A; - LINE_STRIP_ADJACENCY = 0x000B; - TRIANGLES_ADJACENCY = 0x000C; - TRIANGLE_STRIP_ADJACENCY = 0x000D; - PROGRAM_POINT_SIZE = 0x8642; - MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29; - FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7; - FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8; - GEOMETRY_SHADER = 0x8DD9; - GEOMETRY_VERTICES_OUT = 0x8916; - GEOMETRY_INPUT_TYPE = 0x8917; - GEOMETRY_OUTPUT_TYPE = 0x8918; - MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF; - MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0; - MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1; - MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122; - MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123; - MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124; - MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125; - CONTEXT_PROFILE_MASK = 0x9126; - DEPTH_CLAMP = 0x864F; - QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C; - FIRST_VERTEX_CONVENTION = 0x8E4D; - LAST_VERTEX_CONVENTION = 0x8E4E; - PROVOKING_VERTEX = 0x8E4F; - TEXTURE_CUBE_MAP_SEAMLESS = 0x884F; - MAX_SERVER_WAIT_TIMEOUT = 0x9111; - OBJECT_TYPE = 0x9112; - SYNC_CONDITION = 0x9113; - SYNC_STATUS = 0x9114; - SYNC_FLAGS = 0x9115; - SYNC_FENCE = 0x9116; - SYNC_GPU_COMMANDS_COMPLETE = 0x9117; - UNSIGNALED = 0x9118; - SIGNALED = 0x9119; - ALREADY_SIGNALED = 0x911A; - TIMEOUT_EXPIRED = 0x911B; - CONDITION_SATISFIED = 0x911C; - WAIT_FAILED = 0x911D; - TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF; - SYNC_FLUSH_COMMANDS_BIT = 0x00000001; - SAMPLE_POSITION = 0x8E50; - SAMPLE_MASK = 0x8E51; - SAMPLE_MASK_VALUE = 0x8E52; - MAX_SAMPLE_MASK_WORDS = 0x8E59; - TEXTURE_2D_MULTISAMPLE = 0x9100; - PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101; - TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102; - PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103; - TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104; - TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105; - TEXTURE_SAMPLES = 0x9106; - TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107; - SAMPLER_2D_MULTISAMPLE = 0x9108; - INT_SAMPLER_2D_MULTISAMPLE = 0x9109; - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A; - SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B; - INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C; - UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D; - MAX_COLOR_TEXTURE_SAMPLES = 0x910E; - MAX_DEPTH_TEXTURE_SAMPLES = 0x910F; - MAX_INTEGER_SAMPLES = 0x9110; +SAMPLER_2D_RECT :: 0x8B63; +SAMPLER_2D_RECT_SHADOW :: 0x8B64; +SAMPLER_BUFFER :: 0x8DC2; +INT_SAMPLER_2D_RECT :: 0x8DCD; +INT_SAMPLER_BUFFER :: 0x8DD0; +UNSIGNED_INT_SAMPLER_2D_RECT :: 0x8DD5; +UNSIGNED_INT_SAMPLER_BUFFER :: 0x8DD8; +TEXTURE_BUFFER :: 0x8C2A; +MAX_TEXTURE_BUFFER_SIZE :: 0x8C2B; +TEXTURE_BINDING_BUFFER :: 0x8C2C; +TEXTURE_BUFFER_DATA_STORE_BINDING :: 0x8C2D; +TEXTURE_RECTANGLE :: 0x84F5; +TEXTURE_BINDING_RECTANGLE :: 0x84F6; +PROXY_TEXTURE_RECTANGLE :: 0x84F7; +MAX_RECTANGLE_TEXTURE_SIZE :: 0x84F8; +R8_SNORM :: 0x8F94; +RG8_SNORM :: 0x8F95; +RGB8_SNORM :: 0x8F96; +RGBA8_SNORM :: 0x8F97; +R16_SNORM :: 0x8F98; +RG16_SNORM :: 0x8F99; +RGB16_SNORM :: 0x8F9A; +RGBA16_SNORM :: 0x8F9B; +SIGNED_NORMALIZED :: 0x8F9C; +PRIMITIVE_RESTART :: 0x8F9D; +PRIMITIVE_RESTART_INDEX :: 0x8F9E; +COPY_READ_BUFFER :: 0x8F36; +COPY_WRITE_BUFFER :: 0x8F37; +UNIFORM_BUFFER :: 0x8A11; +UNIFORM_BUFFER_BINDING :: 0x8A28; +UNIFORM_BUFFER_START :: 0x8A29; +UNIFORM_BUFFER_SIZE :: 0x8A2A; +MAX_VERTEX_UNIFORM_BLOCKS :: 0x8A2B; +MAX_GEOMETRY_UNIFORM_BLOCKS :: 0x8A2C; +MAX_FRAGMENT_UNIFORM_BLOCKS :: 0x8A2D; +MAX_COMBINED_UNIFORM_BLOCKS :: 0x8A2E; +MAX_UNIFORM_BUFFER_BINDINGS :: 0x8A2F; +MAX_UNIFORM_BLOCK_SIZE :: 0x8A30; +MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS :: 0x8A31; +MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS :: 0x8A32; +MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS :: 0x8A33; +UNIFORM_BUFFER_OFFSET_ALIGNMENT :: 0x8A34; +ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH :: 0x8A35; +ACTIVE_UNIFORM_BLOCKS :: 0x8A36; +UNIFORM_TYPE :: 0x8A37; +UNIFORM_SIZE :: 0x8A38; +UNIFORM_NAME_LENGTH :: 0x8A39; +UNIFORM_BLOCK_INDEX :: 0x8A3A; +UNIFORM_OFFSET :: 0x8A3B; +UNIFORM_ARRAY_STRIDE :: 0x8A3C; +UNIFORM_MATRIX_STRIDE :: 0x8A3D; +UNIFORM_IS_ROW_MAJOR :: 0x8A3E; +UNIFORM_BLOCK_BINDING :: 0x8A3F; +UNIFORM_BLOCK_DATA_SIZE :: 0x8A40; +UNIFORM_BLOCK_NAME_LENGTH :: 0x8A41; +UNIFORM_BLOCK_ACTIVE_UNIFORMS :: 0x8A42; +UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES :: 0x8A43; +UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER :: 0x8A44; +UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER :: 0x8A45; +UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER :: 0x8A46; +INVALID_INDEX :: 0xFFFFFFFF; - VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE; - SRC1_COLOR = 0x88F9; - ONE_MINUS_SRC1_COLOR = 0x88FA; - ONE_MINUS_SRC1_ALPHA = 0x88FB; - MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC; - ANY_SAMPLES_PASSED = 0x8C2F; - SAMPLER_BINDING = 0x8919; - RGB10_A2UI = 0x906F; - TEXTURE_SWIZZLE_R = 0x8E42; - TEXTURE_SWIZZLE_G = 0x8E43; - TEXTURE_SWIZZLE_B = 0x8E44; - TEXTURE_SWIZZLE_A = 0x8E45; - TEXTURE_SWIZZLE_RGBA = 0x8E46; - TIME_ELAPSED = 0x88BF; - TIMESTAMP = 0x8E28; - INT_2_10_10_10_REV = 0x8D9F; +CONTEXT_CORE_PROFILE_BIT :: 0x00000001; +CONTEXT_COMPATIBILITY_PROFILE_BIT :: 0x00000002; +LINES_ADJACENCY :: 0x000A; +LINE_STRIP_ADJACENCY :: 0x000B; +TRIANGLES_ADJACENCY :: 0x000C; +TRIANGLE_STRIP_ADJACENCY :: 0x000D; +PROGRAM_POINT_SIZE :: 0x8642; +MAX_GEOMETRY_TEXTURE_IMAGE_UNITS :: 0x8C29; +FRAMEBUFFER_ATTACHMENT_LAYERED :: 0x8DA7; +FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS :: 0x8DA8; +GEOMETRY_SHADER :: 0x8DD9; +GEOMETRY_VERTICES_OUT :: 0x8916; +GEOMETRY_INPUT_TYPE :: 0x8917; +GEOMETRY_OUTPUT_TYPE :: 0x8918; +MAX_GEOMETRY_UNIFORM_COMPONENTS :: 0x8DDF; +MAX_GEOMETRY_OUTPUT_VERTICES :: 0x8DE0; +MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS :: 0x8DE1; +MAX_VERTEX_OUTPUT_COMPONENTS :: 0x9122; +MAX_GEOMETRY_INPUT_COMPONENTS :: 0x9123; +MAX_GEOMETRY_OUTPUT_COMPONENTS :: 0x9124; +MAX_FRAGMENT_INPUT_COMPONENTS :: 0x9125; +CONTEXT_PROFILE_MASK :: 0x9126; +DEPTH_CLAMP :: 0x864F; +QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION :: 0x8E4C; +FIRST_VERTEX_CONVENTION :: 0x8E4D; +LAST_VERTEX_CONVENTION :: 0x8E4E; +PROVOKING_VERTEX :: 0x8E4F; +TEXTURE_CUBE_MAP_SEAMLESS :: 0x884F; +MAX_SERVER_WAIT_TIMEOUT :: 0x9111; +OBJECT_TYPE :: 0x9112; +SYNC_CONDITION :: 0x9113; +SYNC_STATUS :: 0x9114; +SYNC_FLAGS :: 0x9115; +SYNC_FENCE :: 0x9116; +SYNC_GPU_COMMANDS_COMPLETE :: 0x9117; +UNSIGNALED :: 0x9118; +SIGNALED :: 0x9119; +ALREADY_SIGNALED :: 0x911A; +TIMEOUT_EXPIRED :: 0x911B; +CONDITION_SATISFIED :: 0x911C; +WAIT_FAILED :: 0x911D; +TIMEOUT_IGNORED :: 0xFFFFFFFFFFFFFFFF; +SYNC_FLUSH_COMMANDS_BIT :: 0x00000001; +SAMPLE_POSITION :: 0x8E50; +SAMPLE_MASK :: 0x8E51; +SAMPLE_MASK_VALUE :: 0x8E52; +MAX_SAMPLE_MASK_WORDS :: 0x8E59; +TEXTURE_2D_MULTISAMPLE :: 0x9100; +PROXY_TEXTURE_2D_MULTISAMPLE :: 0x9101; +TEXTURE_2D_MULTISAMPLE_ARRAY :: 0x9102; +PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY :: 0x9103; +TEXTURE_BINDING_2D_MULTISAMPLE :: 0x9104; +TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY :: 0x9105; +TEXTURE_SAMPLES :: 0x9106; +TEXTURE_FIXED_SAMPLE_LOCATIONS :: 0x9107; +SAMPLER_2D_MULTISAMPLE :: 0x9108; +INT_SAMPLER_2D_MULTISAMPLE :: 0x9109; +UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE :: 0x910A; +SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910B; +INT_SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910C; +UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910D; +MAX_COLOR_TEXTURE_SAMPLES :: 0x910E; +MAX_DEPTH_TEXTURE_SAMPLES :: 0x910F; +MAX_INTEGER_SAMPLES :: 0x9110; - SAMPLE_SHADING = 0x8C36; - MIN_SAMPLE_SHADING_VALUE = 0x8C37; - MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E; - MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F; - TEXTURE_CUBE_MAP_ARRAY = 0x9009; - TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A; - PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B; - SAMPLER_CUBE_MAP_ARRAY = 0x900C; - SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D; - INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E; - UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F; - DRAW_INDIRECT_BUFFER = 0x8F3F; - DRAW_INDIRECT_BUFFER_BINDING = 0x8F43; - GEOMETRY_SHADER_INVOCATIONS = 0x887F; - MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A; - MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B; - MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C; - FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D; - MAX_VERTEX_STREAMS = 0x8E71; - DOUBLE_VEC2 = 0x8FFC; - DOUBLE_VEC3 = 0x8FFD; - DOUBLE_VEC4 = 0x8FFE; - DOUBLE_MAT2 = 0x8F46; - DOUBLE_MAT3 = 0x8F47; - DOUBLE_MAT4 = 0x8F48; - DOUBLE_MAT2x3 = 0x8F49; - DOUBLE_MAT2x4 = 0x8F4A; - DOUBLE_MAT3x2 = 0x8F4B; - DOUBLE_MAT3x4 = 0x8F4C; - DOUBLE_MAT4x2 = 0x8F4D; - DOUBLE_MAT4x3 = 0x8F4E; - ACTIVE_SUBROUTINES = 0x8DE5; - ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6; - ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47; - ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48; - ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49; - MAX_SUBROUTINES = 0x8DE7; - MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8; - NUM_COMPATIBLE_SUBROUTINES = 0x8E4A; - COMPATIBLE_SUBROUTINES = 0x8E4B; - PATCHES = 0x000E; - PATCH_VERTICES = 0x8E72; - PATCH_DEFAULT_INNER_LEVEL = 0x8E73; - PATCH_DEFAULT_OUTER_LEVEL = 0x8E74; - TESS_CONTROL_OUTPUT_VERTICES = 0x8E75; - TESS_GEN_MODE = 0x8E76; - TESS_GEN_SPACING = 0x8E77; - TESS_GEN_VERTEX_ORDER = 0x8E78; - TESS_GEN_POINT_MODE = 0x8E79; - ISOLINES = 0x8E7A; - FRACTIONAL_ODD = 0x8E7B; - FRACTIONAL_EVEN = 0x8E7C; - MAX_PATCH_VERTICES = 0x8E7D; - MAX_TESS_GEN_LEVEL = 0x8E7E; - MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F; - MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80; - MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81; - MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82; - MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83; - MAX_TESS_PATCH_COMPONENTS = 0x8E84; - MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85; - MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86; - MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89; - MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A; - MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C; - MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D; - MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E; - MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F; - UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0; - UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1; - TESS_EVALUATION_SHADER = 0x8E87; - TESS_CONTROL_SHADER = 0x8E88; - TRANSFORM_FEEDBACK = 0x8E22; - TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23; - TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24; - TRANSFORM_FEEDBACK_BINDING = 0x8E25; - MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70; +VERTEX_ATTRIB_ARRAY_DIVISOR :: 0x88FE; +SRC1_COLOR :: 0x88F9; +ONE_MINUS_SRC1_COLOR :: 0x88FA; +ONE_MINUS_SRC1_ALPHA :: 0x88FB; +MAX_DUAL_SOURCE_DRAW_BUFFERS :: 0x88FC; +ANY_SAMPLES_PASSED :: 0x8C2F; +SAMPLER_BINDING :: 0x8919; +RGB10_A2UI :: 0x906F; +TEXTURE_SWIZZLE_R :: 0x8E42; +TEXTURE_SWIZZLE_G :: 0x8E43; +TEXTURE_SWIZZLE_B :: 0x8E44; +TEXTURE_SWIZZLE_A :: 0x8E45; +TEXTURE_SWIZZLE_RGBA :: 0x8E46; +TIME_ELAPSED :: 0x88BF; +TIMESTAMP :: 0x8E28; +INT_2_10_10_10_REV :: 0x8D9F; - FIXED = 0x140C; - IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; - IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; - LOW_FLOAT = 0x8DF0; - MEDIUM_FLOAT = 0x8DF1; - HIGH_FLOAT = 0x8DF2; - LOW_INT = 0x8DF3; - MEDIUM_INT = 0x8DF4; - HIGH_INT = 0x8DF5; - SHADER_COMPILER = 0x8DFA; - SHADER_BINARY_FORMATS = 0x8DF8; - NUM_SHADER_BINARY_FORMATS = 0x8DF9; - MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; - MAX_VARYING_VECTORS = 0x8DFC; - MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; - RGB565 = 0x8D62; - PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257; - PROGRAM_BINARY_LENGTH = 0x8741; - NUM_PROGRAM_BINARY_FORMATS = 0x87FE; - PROGRAM_BINARY_FORMATS = 0x87FF; - VERTEX_SHADER_BIT = 0x00000001; - FRAGMENT_SHADER_BIT = 0x00000002; - GEOMETRY_SHADER_BIT = 0x00000004; - TESS_CONTROL_SHADER_BIT = 0x00000008; - TESS_EVALUATION_SHADER_BIT = 0x00000010; - ALL_SHADER_BITS = 0xFFFFFFFF; - PROGRAM_SEPARABLE = 0x8258; - ACTIVE_PROGRAM = 0x8259; - PROGRAM_PIPELINE_BINDING = 0x825A; - MAX_VIEWPORTS = 0x825B; - VIEWPORT_SUBPIXEL_BITS = 0x825C; - VIEWPORT_BOUNDS_RANGE = 0x825D; - LAYER_PROVOKING_VERTEX = 0x825E; - VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F; - UNDEFINED_VERTEX = 0x8260; +SAMPLE_SHADING :: 0x8C36; +MIN_SAMPLE_SHADING_VALUE :: 0x8C37; +MIN_PROGRAM_TEXTURE_GATHER_OFFSET :: 0x8E5E; +MAX_PROGRAM_TEXTURE_GATHER_OFFSET :: 0x8E5F; +TEXTURE_CUBE_MAP_ARRAY :: 0x9009; +TEXTURE_BINDING_CUBE_MAP_ARRAY :: 0x900A; +PROXY_TEXTURE_CUBE_MAP_ARRAY :: 0x900B; +SAMPLER_CUBE_MAP_ARRAY :: 0x900C; +SAMPLER_CUBE_MAP_ARRAY_SHADOW :: 0x900D; +INT_SAMPLER_CUBE_MAP_ARRAY :: 0x900E; +UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY :: 0x900F; +DRAW_INDIRECT_BUFFER :: 0x8F3F; +DRAW_INDIRECT_BUFFER_BINDING :: 0x8F43; +GEOMETRY_SHADER_INVOCATIONS :: 0x887F; +MAX_GEOMETRY_SHADER_INVOCATIONS :: 0x8E5A; +MIN_FRAGMENT_INTERPOLATION_OFFSET :: 0x8E5B; +MAX_FRAGMENT_INTERPOLATION_OFFSET :: 0x8E5C; +FRAGMENT_INTERPOLATION_OFFSET_BITS :: 0x8E5D; +MAX_VERTEX_STREAMS :: 0x8E71; +DOUBLE_VEC2 :: 0x8FFC; +DOUBLE_VEC3 :: 0x8FFD; +DOUBLE_VEC4 :: 0x8FFE; +DOUBLE_MAT2 :: 0x8F46; +DOUBLE_MAT3 :: 0x8F47; +DOUBLE_MAT4 :: 0x8F48; +DOUBLE_MAT2x3 :: 0x8F49; +DOUBLE_MAT2x4 :: 0x8F4A; +DOUBLE_MAT3x2 :: 0x8F4B; +DOUBLE_MAT3x4 :: 0x8F4C; +DOUBLE_MAT4x2 :: 0x8F4D; +DOUBLE_MAT4x3 :: 0x8F4E; +ACTIVE_SUBROUTINES :: 0x8DE5; +ACTIVE_SUBROUTINE_UNIFORMS :: 0x8DE6; +ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS :: 0x8E47; +ACTIVE_SUBROUTINE_MAX_LENGTH :: 0x8E48; +ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH :: 0x8E49; +MAX_SUBROUTINES :: 0x8DE7; +MAX_SUBROUTINE_UNIFORM_LOCATIONS :: 0x8DE8; +NUM_COMPATIBLE_SUBROUTINES :: 0x8E4A; +COMPATIBLE_SUBROUTINES :: 0x8E4B; +PATCHES :: 0x000E; +PATCH_VERTICES :: 0x8E72; +PATCH_DEFAULT_INNER_LEVEL :: 0x8E73; +PATCH_DEFAULT_OUTER_LEVEL :: 0x8E74; +TESS_CONTROL_OUTPUT_VERTICES :: 0x8E75; +TESS_GEN_MODE :: 0x8E76; +TESS_GEN_SPACING :: 0x8E77; +TESS_GEN_VERTEX_ORDER :: 0x8E78; +TESS_GEN_POINT_MODE :: 0x8E79; +ISOLINES :: 0x8E7A; +FRACTIONAL_ODD :: 0x8E7B; +FRACTIONAL_EVEN :: 0x8E7C; +MAX_PATCH_VERTICES :: 0x8E7D; +MAX_TESS_GEN_LEVEL :: 0x8E7E; +MAX_TESS_CONTROL_UNIFORM_COMPONENTS :: 0x8E7F; +MAX_TESS_EVALUATION_UNIFORM_COMPONENTS :: 0x8E80; +MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS :: 0x8E81; +MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS :: 0x8E82; +MAX_TESS_CONTROL_OUTPUT_COMPONENTS :: 0x8E83; +MAX_TESS_PATCH_COMPONENTS :: 0x8E84; +MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS :: 0x8E85; +MAX_TESS_EVALUATION_OUTPUT_COMPONENTS :: 0x8E86; +MAX_TESS_CONTROL_UNIFORM_BLOCKS :: 0x8E89; +MAX_TESS_EVALUATION_UNIFORM_BLOCKS :: 0x8E8A; +MAX_TESS_CONTROL_INPUT_COMPONENTS :: 0x886C; +MAX_TESS_EVALUATION_INPUT_COMPONENTS :: 0x886D; +MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS :: 0x8E1E; +MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS :: 0x8E1F; +UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER :: 0x84F0; +UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x84F1; +TESS_EVALUATION_SHADER :: 0x8E87; +TESS_CONTROL_SHADER :: 0x8E88; +TRANSFORM_FEEDBACK :: 0x8E22; +TRANSFORM_FEEDBACK_BUFFER_PAUSED :: 0x8E23; +TRANSFORM_FEEDBACK_BUFFER_ACTIVE :: 0x8E24; +TRANSFORM_FEEDBACK_BINDING :: 0x8E25; +MAX_TRANSFORM_FEEDBACK_BUFFERS :: 0x8E70; - COPY_READ_BUFFER_BINDING = 0x8F36; - COPY_WRITE_BUFFER_BINDING = 0x8F37; - TRANSFORM_FEEDBACK_ACTIVE = 0x8E24; - TRANSFORM_FEEDBACK_PAUSED = 0x8E23; - UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127; - UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128; - UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129; - UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A; - PACK_COMPRESSED_BLOCK_WIDTH = 0x912B; - PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C; - PACK_COMPRESSED_BLOCK_DEPTH = 0x912D; - PACK_COMPRESSED_BLOCK_SIZE = 0x912E; - NUM_SAMPLE_COUNTS = 0x9380; - MIN_MAP_BUFFER_ALIGNMENT = 0x90BC; - ATOMIC_COUNTER_BUFFER = 0x92C0; - ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1; - ATOMIC_COUNTER_BUFFER_START = 0x92C2; - ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3; - ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4; - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5; - ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB; - MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC; - MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD; - MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE; - MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF; - MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0; - MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1; - MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2; - MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3; - MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4; - MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5; - MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6; - MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7; - MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8; - MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC; - ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9; - UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA; - UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB; - VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001; - ELEMENT_ARRAY_BARRIER_BIT = 0x00000002; - UNIFORM_BARRIER_BIT = 0x00000004; - TEXTURE_FETCH_BARRIER_BIT = 0x00000008; - SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020; - COMMAND_BARRIER_BIT = 0x00000040; - PIXEL_BUFFER_BARRIER_BIT = 0x00000080; - TEXTURE_UPDATE_BARRIER_BIT = 0x00000100; - BUFFER_UPDATE_BARRIER_BIT = 0x00000200; - FRAMEBUFFER_BARRIER_BIT = 0x00000400; - TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800; - ATOMIC_COUNTER_BARRIER_BIT = 0x00001000; - ALL_BARRIER_BITS = 0xFFFFFFFF; - MAX_IMAGE_UNITS = 0x8F38; - MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39; - IMAGE_BINDING_NAME = 0x8F3A; - IMAGE_BINDING_LEVEL = 0x8F3B; - IMAGE_BINDING_LAYERED = 0x8F3C; - IMAGE_BINDING_LAYER = 0x8F3D; - IMAGE_BINDING_ACCESS = 0x8F3E; - IMAGE_1D = 0x904C; - IMAGE_2D = 0x904D; - IMAGE_3D = 0x904E; - IMAGE_2D_RECT = 0x904F; - IMAGE_CUBE = 0x9050; - IMAGE_BUFFER = 0x9051; - IMAGE_1D_ARRAY = 0x9052; - IMAGE_2D_ARRAY = 0x9053; - IMAGE_CUBE_MAP_ARRAY = 0x9054; - IMAGE_2D_MULTISAMPLE = 0x9055; - IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056; - INT_IMAGE_1D = 0x9057; - INT_IMAGE_2D = 0x9058; - INT_IMAGE_3D = 0x9059; - INT_IMAGE_2D_RECT = 0x905A; - INT_IMAGE_CUBE = 0x905B; - INT_IMAGE_BUFFER = 0x905C; - INT_IMAGE_1D_ARRAY = 0x905D; - INT_IMAGE_2D_ARRAY = 0x905E; - INT_IMAGE_CUBE_MAP_ARRAY = 0x905F; - INT_IMAGE_2D_MULTISAMPLE = 0x9060; - INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061; - UNSIGNED_INT_IMAGE_1D = 0x9062; - UNSIGNED_INT_IMAGE_2D = 0x9063; - UNSIGNED_INT_IMAGE_3D = 0x9064; - UNSIGNED_INT_IMAGE_2D_RECT = 0x9065; - UNSIGNED_INT_IMAGE_CUBE = 0x9066; - UNSIGNED_INT_IMAGE_BUFFER = 0x9067; - UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068; - UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069; - UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A; - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B; - UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C; - MAX_IMAGE_SAMPLES = 0x906D; - IMAGE_BINDING_FORMAT = 0x906E; - IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7; - IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8; - IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9; - MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA; - MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB; - MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC; - MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD; - MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE; - MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF; - COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C; - COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D; - COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E; - COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F; - TEXTURE_IMMUTABLE_FORMAT = 0x912F; +FIXED :: 0x140C; +IMPLEMENTATION_COLOR_READ_TYPE :: 0x8B9A; +IMPLEMENTATION_COLOR_READ_FORMAT :: 0x8B9B; +LOW_FLOAT :: 0x8DF0; +MEDIUM_FLOAT :: 0x8DF1; +HIGH_FLOAT :: 0x8DF2; +LOW_INT :: 0x8DF3; +MEDIUM_INT :: 0x8DF4; +HIGH_INT :: 0x8DF5; +SHADER_COMPILER :: 0x8DFA; +SHADER_BINARY_FORMATS :: 0x8DF8; +NUM_SHADER_BINARY_FORMATS :: 0x8DF9; +MAX_VERTEX_UNIFORM_VECTORS :: 0x8DFB; +MAX_VARYING_VECTORS :: 0x8DFC; +MAX_FRAGMENT_UNIFORM_VECTORS :: 0x8DFD; +RGB565 :: 0x8D62; +PROGRAM_BINARY_RETRIEVABLE_HINT :: 0x8257; +PROGRAM_BINARY_LENGTH :: 0x8741; +NUM_PROGRAM_BINARY_FORMATS :: 0x87FE; +PROGRAM_BINARY_FORMATS :: 0x87FF; +VERTEX_SHADER_BIT :: 0x00000001; +FRAGMENT_SHADER_BIT :: 0x00000002; +GEOMETRY_SHADER_BIT :: 0x00000004; +TESS_CONTROL_SHADER_BIT :: 0x00000008; +TESS_EVALUATION_SHADER_BIT :: 0x00000010; +ALL_SHADER_BITS :: 0xFFFFFFFF; +PROGRAM_SEPARABLE :: 0x8258; +ACTIVE_PROGRAM :: 0x8259; +PROGRAM_PIPELINE_BINDING :: 0x825A; +MAX_VIEWPORTS :: 0x825B; +VIEWPORT_SUBPIXEL_BITS :: 0x825C; +VIEWPORT_BOUNDS_RANGE :: 0x825D; +LAYER_PROVOKING_VERTEX :: 0x825E; +VIEWPORT_INDEX_PROVOKING_VERTEX :: 0x825F; +UNDEFINED_VERTEX :: 0x8260; - NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9; - VERTEX_ATTRIB_ARRAY_LONG = 0x874E; - COMPRESSED_RGB8_ETC2 = 0x9274; - COMPRESSED_SRGB8_ETC2 = 0x9275; - COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276; - COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277; - COMPRESSED_RGBA8_ETC2_EAC = 0x9278; - COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279; - COMPRESSED_R11_EAC = 0x9270; - COMPRESSED_SIGNED_R11_EAC = 0x9271; - COMPRESSED_RG11_EAC = 0x9272; - COMPRESSED_SIGNED_RG11_EAC = 0x9273; - PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69; - ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; - MAX_ELEMENT_INDEX = 0x8D6B; - COMPUTE_SHADER = 0x91B9; - MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB; - MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC; - MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD; - MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262; - MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263; - MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264; - MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265; - MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266; - MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB; - MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE; - MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF; - COMPUTE_WORK_GROUP_SIZE = 0x8267; - UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC; - ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED; - DISPATCH_INDIRECT_BUFFER = 0x90EE; - DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF; - COMPUTE_SHADER_BIT = 0x00000020; - DEBUG_OUTPUT_SYNCHRONOUS = 0x8242; - DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243; - DEBUG_CALLBACK_FUNCTION = 0x8244; - DEBUG_CALLBACK_USER_PARAM = 0x8245; - DEBUG_SOURCE_API = 0x8246; - DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247; - DEBUG_SOURCE_SHADER_COMPILER = 0x8248; - DEBUG_SOURCE_THIRD_PARTY = 0x8249; - DEBUG_SOURCE_APPLICATION = 0x824A; - DEBUG_SOURCE_OTHER = 0x824B; - DEBUG_TYPE_ERROR = 0x824C; - DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D; - DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E; - DEBUG_TYPE_PORTABILITY = 0x824F; - DEBUG_TYPE_PERFORMANCE = 0x8250; - DEBUG_TYPE_OTHER = 0x8251; - MAX_DEBUG_MESSAGE_LENGTH = 0x9143; - MAX_DEBUG_LOGGED_MESSAGES = 0x9144; - DEBUG_LOGGED_MESSAGES = 0x9145; - DEBUG_SEVERITY_HIGH = 0x9146; - DEBUG_SEVERITY_MEDIUM = 0x9147; - DEBUG_SEVERITY_LOW = 0x9148; - DEBUG_TYPE_MARKER = 0x8268; - DEBUG_TYPE_PUSH_GROUP = 0x8269; - DEBUG_TYPE_POP_GROUP = 0x826A; - DEBUG_SEVERITY_NOTIFICATION = 0x826B; - MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C; - DEBUG_GROUP_STACK_DEPTH = 0x826D; - BUFFER = 0x82E0; - SHADER = 0x82E1; - PROGRAM = 0x82E2; - QUERY = 0x82E3; - PROGRAM_PIPELINE = 0x82E4; - SAMPLER = 0x82E6; - MAX_LABEL_LENGTH = 0x82E8; - DEBUG_OUTPUT = 0x92E0; - CONTEXT_FLAG_DEBUG_BIT = 0x00000002; - MAX_UNIFORM_LOCATIONS = 0x826E; - FRAMEBUFFER_DEFAULT_WIDTH = 0x9310; - FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311; - FRAMEBUFFER_DEFAULT_LAYERS = 0x9312; - FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313; - FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314; - MAX_FRAMEBUFFER_WIDTH = 0x9315; - MAX_FRAMEBUFFER_HEIGHT = 0x9316; - MAX_FRAMEBUFFER_LAYERS = 0x9317; - MAX_FRAMEBUFFER_SAMPLES = 0x9318; - INTERNALFORMAT_SUPPORTED = 0x826F; - INTERNALFORMAT_PREFERRED = 0x8270; - INTERNALFORMAT_RED_SIZE = 0x8271; - INTERNALFORMAT_GREEN_SIZE = 0x8272; - INTERNALFORMAT_BLUE_SIZE = 0x8273; - INTERNALFORMAT_ALPHA_SIZE = 0x8274; - INTERNALFORMAT_DEPTH_SIZE = 0x8275; - INTERNALFORMAT_STENCIL_SIZE = 0x8276; - INTERNALFORMAT_SHARED_SIZE = 0x8277; - INTERNALFORMAT_RED_TYPE = 0x8278; - INTERNALFORMAT_GREEN_TYPE = 0x8279; - INTERNALFORMAT_BLUE_TYPE = 0x827A; - INTERNALFORMAT_ALPHA_TYPE = 0x827B; - INTERNALFORMAT_DEPTH_TYPE = 0x827C; - INTERNALFORMAT_STENCIL_TYPE = 0x827D; - MAX_WIDTH = 0x827E; - MAX_HEIGHT = 0x827F; - MAX_DEPTH = 0x8280; - MAX_LAYERS = 0x8281; - MAX_COMBINED_DIMENSIONS = 0x8282; - COLOR_COMPONENTS = 0x8283; - DEPTH_COMPONENTS = 0x8284; - STENCIL_COMPONENTS = 0x8285; - COLOR_RENDERABLE = 0x8286; - DEPTH_RENDERABLE = 0x8287; - STENCIL_RENDERABLE = 0x8288; - FRAMEBUFFER_RENDERABLE = 0x8289; - FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A; - FRAMEBUFFER_BLEND = 0x828B; - READ_PIXELS = 0x828C; - READ_PIXELS_FORMAT = 0x828D; - READ_PIXELS_TYPE = 0x828E; - TEXTURE_IMAGE_FORMAT = 0x828F; - TEXTURE_IMAGE_TYPE = 0x8290; - GET_TEXTURE_IMAGE_FORMAT = 0x8291; - GET_TEXTURE_IMAGE_TYPE = 0x8292; - MIPMAP = 0x8293; - MANUAL_GENERATE_MIPMAP = 0x8294; - AUTO_GENERATE_MIPMAP = 0x8295; - COLOR_ENCODING = 0x8296; - SRGB_READ = 0x8297; - SRGB_WRITE = 0x8298; - FILTER = 0x829A; - VERTEX_TEXTURE = 0x829B; - TESS_CONTROL_TEXTURE = 0x829C; - TESS_EVALUATION_TEXTURE = 0x829D; - GEOMETRY_TEXTURE = 0x829E; - FRAGMENT_TEXTURE = 0x829F; - COMPUTE_TEXTURE = 0x82A0; - TEXTURE_SHADOW = 0x82A1; - TEXTURE_GATHER = 0x82A2; - TEXTURE_GATHER_SHADOW = 0x82A3; - SHADER_IMAGE_LOAD = 0x82A4; - SHADER_IMAGE_STORE = 0x82A5; - SHADER_IMAGE_ATOMIC = 0x82A6; - IMAGE_TEXEL_SIZE = 0x82A7; - IMAGE_COMPATIBILITY_CLASS = 0x82A8; - IMAGE_PIXEL_FORMAT = 0x82A9; - IMAGE_PIXEL_TYPE = 0x82AA; - SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC; - SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD; - SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE; - SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF; - TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1; - TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2; - TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3; - CLEAR_BUFFER = 0x82B4; - TEXTURE_VIEW = 0x82B5; - VIEW_COMPATIBILITY_CLASS = 0x82B6; - FULL_SUPPORT = 0x82B7; - CAVEAT_SUPPORT = 0x82B8; - IMAGE_CLASS_4_X_32 = 0x82B9; - IMAGE_CLASS_2_X_32 = 0x82BA; - IMAGE_CLASS_1_X_32 = 0x82BB; - IMAGE_CLASS_4_X_16 = 0x82BC; - IMAGE_CLASS_2_X_16 = 0x82BD; - IMAGE_CLASS_1_X_16 = 0x82BE; - IMAGE_CLASS_4_X_8 = 0x82BF; - IMAGE_CLASS_2_X_8 = 0x82C0; - IMAGE_CLASS_1_X_8 = 0x82C1; - IMAGE_CLASS_11_11_10 = 0x82C2; - IMAGE_CLASS_10_10_10_2 = 0x82C3; - VIEW_CLASS_128_BITS = 0x82C4; - VIEW_CLASS_96_BITS = 0x82C5; - VIEW_CLASS_64_BITS = 0x82C6; - VIEW_CLASS_48_BITS = 0x82C7; - VIEW_CLASS_32_BITS = 0x82C8; - VIEW_CLASS_24_BITS = 0x82C9; - VIEW_CLASS_16_BITS = 0x82CA; - VIEW_CLASS_8_BITS = 0x82CB; - VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC; - VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD; - VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE; - VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF; - VIEW_CLASS_RGTC1_RED = 0x82D0; - VIEW_CLASS_RGTC2_RG = 0x82D1; - VIEW_CLASS_BPTC_UNORM = 0x82D2; - VIEW_CLASS_BPTC_FLOAT = 0x82D3; - UNIFORM = 0x92E1; - UNIFORM_BLOCK = 0x92E2; - PROGRAM_INPUT = 0x92E3; - PROGRAM_OUTPUT = 0x92E4; - BUFFER_VARIABLE = 0x92E5; - SHADER_STORAGE_BLOCK = 0x92E6; - VERTEX_SUBROUTINE = 0x92E8; - TESS_CONTROL_SUBROUTINE = 0x92E9; - TESS_EVALUATION_SUBROUTINE = 0x92EA; - GEOMETRY_SUBROUTINE = 0x92EB; - FRAGMENT_SUBROUTINE = 0x92EC; - COMPUTE_SUBROUTINE = 0x92ED; - VERTEX_SUBROUTINE_UNIFORM = 0x92EE; - TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF; - TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0; - GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1; - FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2; - COMPUTE_SUBROUTINE_UNIFORM = 0x92F3; - TRANSFORM_FEEDBACK_VARYING = 0x92F4; - ACTIVE_RESOURCES = 0x92F5; - MAX_NAME_LENGTH = 0x92F6; - MAX_NUM_ACTIVE_VARIABLES = 0x92F7; - MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8; - NAME_LENGTH = 0x92F9; - TYPE = 0x92FA; - ARRAY_SIZE = 0x92FB; - OFFSET = 0x92FC; - BLOCK_INDEX = 0x92FD; - ARRAY_STRIDE = 0x92FE; - MATRIX_STRIDE = 0x92FF; - IS_ROW_MAJOR = 0x9300; - ATOMIC_COUNTER_BUFFER_INDEX = 0x9301; - BUFFER_BINDING = 0x9302; - BUFFER_DATA_SIZE = 0x9303; - NUM_ACTIVE_VARIABLES = 0x9304; - ACTIVE_VARIABLES = 0x9305; - REFERENCED_BY_VERTEX_SHADER = 0x9306; - REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307; - REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308; - REFERENCED_BY_GEOMETRY_SHADER = 0x9309; - REFERENCED_BY_FRAGMENT_SHADER = 0x930A; - REFERENCED_BY_COMPUTE_SHADER = 0x930B; - TOP_LEVEL_ARRAY_SIZE = 0x930C; - TOP_LEVEL_ARRAY_STRIDE = 0x930D; - LOCATION = 0x930E; - LOCATION_INDEX = 0x930F; - IS_PER_PATCH = 0x92E7; - SHADER_STORAGE_BUFFER = 0x90D2; - SHADER_STORAGE_BUFFER_BINDING = 0x90D3; - SHADER_STORAGE_BUFFER_START = 0x90D4; - SHADER_STORAGE_BUFFER_SIZE = 0x90D5; - MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6; - MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7; - MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8; - MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9; - MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA; - MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB; - MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC; - MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD; - MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE; - SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF; - SHADER_STORAGE_BARRIER_BIT = 0x00002000; - MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39; - DEPTH_STENCIL_TEXTURE_MODE = 0x90EA; - TEXTURE_BUFFER_OFFSET = 0x919D; - TEXTURE_BUFFER_SIZE = 0x919E; - TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F; - TEXTURE_VIEW_MIN_LEVEL = 0x82DB; - TEXTURE_VIEW_NUM_LEVELS = 0x82DC; - TEXTURE_VIEW_MIN_LAYER = 0x82DD; - TEXTURE_VIEW_NUM_LAYERS = 0x82DE; - TEXTURE_IMMUTABLE_LEVELS = 0x82DF; - VERTEX_ATTRIB_BINDING = 0x82D4; - VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5; - VERTEX_BINDING_DIVISOR = 0x82D6; - VERTEX_BINDING_OFFSET = 0x82D7; - VERTEX_BINDING_STRIDE = 0x82D8; - MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9; - MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA; - VERTEX_BINDING_BUFFER = 0x8F4F; +COPY_READ_BUFFER_BINDING :: 0x8F36; +COPY_WRITE_BUFFER_BINDING :: 0x8F37; +TRANSFORM_FEEDBACK_ACTIVE :: 0x8E24; +TRANSFORM_FEEDBACK_PAUSED :: 0x8E23; +UNPACK_COMPRESSED_BLOCK_WIDTH :: 0x9127; +UNPACK_COMPRESSED_BLOCK_HEIGHT :: 0x9128; +UNPACK_COMPRESSED_BLOCK_DEPTH :: 0x9129; +UNPACK_COMPRESSED_BLOCK_SIZE :: 0x912A; +PACK_COMPRESSED_BLOCK_WIDTH :: 0x912B; +PACK_COMPRESSED_BLOCK_HEIGHT :: 0x912C; +PACK_COMPRESSED_BLOCK_DEPTH :: 0x912D; +PACK_COMPRESSED_BLOCK_SIZE :: 0x912E; +NUM_SAMPLE_COUNTS :: 0x9380; +MIN_MAP_BUFFER_ALIGNMENT :: 0x90BC; +ATOMIC_COUNTER_BUFFER :: 0x92C0; +ATOMIC_COUNTER_BUFFER_BINDING :: 0x92C1; +ATOMIC_COUNTER_BUFFER_START :: 0x92C2; +ATOMIC_COUNTER_BUFFER_SIZE :: 0x92C3; +ATOMIC_COUNTER_BUFFER_DATA_SIZE :: 0x92C4; +ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS :: 0x92C5; +ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES :: 0x92C6; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER :: 0x92C7; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER :: 0x92C8; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x92C9; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER :: 0x92CA; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER :: 0x92CB; +MAX_VERTEX_ATOMIC_COUNTER_BUFFERS :: 0x92CC; +MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS :: 0x92CD; +MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS :: 0x92CE; +MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS :: 0x92CF; +MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS :: 0x92D0; +MAX_COMBINED_ATOMIC_COUNTER_BUFFERS :: 0x92D1; +MAX_VERTEX_ATOMIC_COUNTERS :: 0x92D2; +MAX_TESS_CONTROL_ATOMIC_COUNTERS :: 0x92D3; +MAX_TESS_EVALUATION_ATOMIC_COUNTERS :: 0x92D4; +MAX_GEOMETRY_ATOMIC_COUNTERS :: 0x92D5; +MAX_FRAGMENT_ATOMIC_COUNTERS :: 0x92D6; +MAX_COMBINED_ATOMIC_COUNTERS :: 0x92D7; +MAX_ATOMIC_COUNTER_BUFFER_SIZE :: 0x92D8; +MAX_ATOMIC_COUNTER_BUFFER_BINDINGS :: 0x92DC; +ACTIVE_ATOMIC_COUNTER_BUFFERS :: 0x92D9; +UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX :: 0x92DA; +UNSIGNED_INT_ATOMIC_COUNTER :: 0x92DB; +VERTEX_ATTRIB_ARRAY_BARRIER_BIT :: 0x00000001; +ELEMENT_ARRAY_BARRIER_BIT :: 0x00000002; +UNIFORM_BARRIER_BIT :: 0x00000004; +TEXTURE_FETCH_BARRIER_BIT :: 0x00000008; +SHADER_IMAGE_ACCESS_BARRIER_BIT :: 0x00000020; +COMMAND_BARRIER_BIT :: 0x00000040; +PIXEL_BUFFER_BARRIER_BIT :: 0x00000080; +TEXTURE_UPDATE_BARRIER_BIT :: 0x00000100; +BUFFER_UPDATE_BARRIER_BIT :: 0x00000200; +FRAMEBUFFER_BARRIER_BIT :: 0x00000400; +TRANSFORM_FEEDBACK_BARRIER_BIT :: 0x00000800; +ATOMIC_COUNTER_BARRIER_BIT :: 0x00001000; +ALL_BARRIER_BITS :: 0xFFFFFFFF; +MAX_IMAGE_UNITS :: 0x8F38; +MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS :: 0x8F39; +IMAGE_BINDING_NAME :: 0x8F3A; +IMAGE_BINDING_LEVEL :: 0x8F3B; +IMAGE_BINDING_LAYERED :: 0x8F3C; +IMAGE_BINDING_LAYER :: 0x8F3D; +IMAGE_BINDING_ACCESS :: 0x8F3E; +IMAGE_1D :: 0x904C; +IMAGE_2D :: 0x904D; +IMAGE_3D :: 0x904E; +IMAGE_2D_RECT :: 0x904F; +IMAGE_CUBE :: 0x9050; +IMAGE_BUFFER :: 0x9051; +IMAGE_1D_ARRAY :: 0x9052; +IMAGE_2D_ARRAY :: 0x9053; +IMAGE_CUBE_MAP_ARRAY :: 0x9054; +IMAGE_2D_MULTISAMPLE :: 0x9055; +IMAGE_2D_MULTISAMPLE_ARRAY :: 0x9056; +INT_IMAGE_1D :: 0x9057; +INT_IMAGE_2D :: 0x9058; +INT_IMAGE_3D :: 0x9059; +INT_IMAGE_2D_RECT :: 0x905A; +INT_IMAGE_CUBE :: 0x905B; +INT_IMAGE_BUFFER :: 0x905C; +INT_IMAGE_1D_ARRAY :: 0x905D; +INT_IMAGE_2D_ARRAY :: 0x905E; +INT_IMAGE_CUBE_MAP_ARRAY :: 0x905F; +INT_IMAGE_2D_MULTISAMPLE :: 0x9060; +INT_IMAGE_2D_MULTISAMPLE_ARRAY :: 0x9061; +UNSIGNED_INT_IMAGE_1D :: 0x9062; +UNSIGNED_INT_IMAGE_2D :: 0x9063; +UNSIGNED_INT_IMAGE_3D :: 0x9064; +UNSIGNED_INT_IMAGE_2D_RECT :: 0x9065; +UNSIGNED_INT_IMAGE_CUBE :: 0x9066; +UNSIGNED_INT_IMAGE_BUFFER :: 0x9067; +UNSIGNED_INT_IMAGE_1D_ARRAY :: 0x9068; +UNSIGNED_INT_IMAGE_2D_ARRAY :: 0x9069; +UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY :: 0x906A; +UNSIGNED_INT_IMAGE_2D_MULTISAMPLE :: 0x906B; +UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY :: 0x906C; +MAX_IMAGE_SAMPLES :: 0x906D; +IMAGE_BINDING_FORMAT :: 0x906E; +IMAGE_FORMAT_COMPATIBILITY_TYPE :: 0x90C7; +IMAGE_FORMAT_COMPATIBILITY_BY_SIZE :: 0x90C8; +IMAGE_FORMAT_COMPATIBILITY_BY_CLASS :: 0x90C9; +MAX_VERTEX_IMAGE_UNIFORMS :: 0x90CA; +MAX_TESS_CONTROL_IMAGE_UNIFORMS :: 0x90CB; +MAX_TESS_EVALUATION_IMAGE_UNIFORMS :: 0x90CC; +MAX_GEOMETRY_IMAGE_UNIFORMS :: 0x90CD; +MAX_FRAGMENT_IMAGE_UNIFORMS :: 0x90CE; +MAX_COMBINED_IMAGE_UNIFORMS :: 0x90CF; +COMPRESSED_RGBA_BPTC_UNORM :: 0x8E8C; +COMPRESSED_SRGB_ALPHA_BPTC_UNORM :: 0x8E8D; +COMPRESSED_RGB_BPTC_SIGNED_FLOAT :: 0x8E8E; +COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT :: 0x8E8F; +TEXTURE_IMMUTABLE_FORMAT :: 0x912F; - MAX_VERTEX_ATTRIB_STRIDE = 0x82E5; - PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x8221; - TEXTURE_BUFFER_BINDING = 0x8C2A; - MAP_PERSISTENT_BIT = 0x0040; - MAP_COHERENT_BIT = 0x0080; - DYNAMIC_STORAGE_BIT = 0x0100; - CLIENT_STORAGE_BIT = 0x0200; - CLIENT_MAPPED_BUFFER_BARRIER_BIT = 0x00004000; - BUFFER_IMMUTABLE_STORAGE = 0x821F; - BUFFER_STORAGE_FLAGS = 0x8220; - CLEAR_TEXTURE = 0x9365; - LOCATION_COMPONENT = 0x934A; - TRANSFORM_FEEDBACK_BUFFER_INDEX = 0x934B; - TRANSFORM_FEEDBACK_BUFFER_STRIDE = 0x934C; - QUERY_BUFFER = 0x9192; - QUERY_BUFFER_BARRIER_BIT = 0x00008000; - QUERY_BUFFER_BINDING = 0x9193; - QUERY_RESULT_NO_WAIT = 0x9194; - MIRROR_CLAMP_TO_EDGE = 0x8743; +NUM_SHADING_LANGUAGE_VERSIONS :: 0x82E9; +VERTEX_ATTRIB_ARRAY_LONG :: 0x874E; +COMPRESSED_RGB8_ETC2 :: 0x9274; +COMPRESSED_SRGB8_ETC2 :: 0x9275; +COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 :: 0x9276; +COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 :: 0x9277; +COMPRESSED_RGBA8_ETC2_EAC :: 0x9278; +COMPRESSED_SRGB8_ALPHA8_ETC2_EAC :: 0x9279; +COMPRESSED_R11_EAC :: 0x9270; +COMPRESSED_SIGNED_R11_EAC :: 0x9271; +COMPRESSED_RG11_EAC :: 0x9272; +COMPRESSED_SIGNED_RG11_EAC :: 0x9273; +PRIMITIVE_RESTART_FIXED_INDEX :: 0x8D69; +ANY_SAMPLES_PASSED_CONSERVATIVE :: 0x8D6A; +MAX_ELEMENT_INDEX :: 0x8D6B; +COMPUTE_SHADER :: 0x91B9; +MAX_COMPUTE_UNIFORM_BLOCKS :: 0x91BB; +MAX_COMPUTE_TEXTURE_IMAGE_UNITS :: 0x91BC; +MAX_COMPUTE_IMAGE_UNIFORMS :: 0x91BD; +MAX_COMPUTE_SHARED_MEMORY_SIZE :: 0x8262; +MAX_COMPUTE_UNIFORM_COMPONENTS :: 0x8263; +MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS :: 0x8264; +MAX_COMPUTE_ATOMIC_COUNTERS :: 0x8265; +MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS :: 0x8266; +MAX_COMPUTE_WORK_GROUP_INVOCATIONS :: 0x90EB; +MAX_COMPUTE_WORK_GROUP_COUNT :: 0x91BE; +MAX_COMPUTE_WORK_GROUP_SIZE :: 0x91BF; +COMPUTE_WORK_GROUP_SIZE :: 0x8267; +UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER :: 0x90EC; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER :: 0x90ED; +DISPATCH_INDIRECT_BUFFER :: 0x90EE; +DISPATCH_INDIRECT_BUFFER_BINDING :: 0x90EF; +COMPUTE_SHADER_BIT :: 0x00000020; +DEBUG_OUTPUT_SYNCHRONOUS :: 0x8242; +DEBUG_NEXT_LOGGED_MESSAGE_LENGTH :: 0x8243; +DEBUG_CALLBACK_FUNCTION :: 0x8244; +DEBUG_CALLBACK_USER_PARAM :: 0x8245; +DEBUG_SOURCE_API :: 0x8246; +DEBUG_SOURCE_WINDOW_SYSTEM :: 0x8247; +DEBUG_SOURCE_SHADER_COMPILER :: 0x8248; +DEBUG_SOURCE_THIRD_PARTY :: 0x8249; +DEBUG_SOURCE_APPLICATION :: 0x824A; +DEBUG_SOURCE_OTHER :: 0x824B; +DEBUG_TYPE_ERROR :: 0x824C; +DEBUG_TYPE_DEPRECATED_BEHAVIOR :: 0x824D; +DEBUG_TYPE_UNDEFINED_BEHAVIOR :: 0x824E; +DEBUG_TYPE_PORTABILITY :: 0x824F; +DEBUG_TYPE_PERFORMANCE :: 0x8250; +DEBUG_TYPE_OTHER :: 0x8251; +MAX_DEBUG_MESSAGE_LENGTH :: 0x9143; +MAX_DEBUG_LOGGED_MESSAGES :: 0x9144; +DEBUG_LOGGED_MESSAGES :: 0x9145; +DEBUG_SEVERITY_HIGH :: 0x9146; +DEBUG_SEVERITY_MEDIUM :: 0x9147; +DEBUG_SEVERITY_LOW :: 0x9148; +DEBUG_TYPE_MARKER :: 0x8268; +DEBUG_TYPE_PUSH_GROUP :: 0x8269; +DEBUG_TYPE_POP_GROUP :: 0x826A; +DEBUG_SEVERITY_NOTIFICATION :: 0x826B; +MAX_DEBUG_GROUP_STACK_DEPTH :: 0x826C; +DEBUG_GROUP_STACK_DEPTH :: 0x826D; +BUFFER :: 0x82E0; +SHADER :: 0x82E1; +PROGRAM :: 0x82E2; +QUERY :: 0x82E3; +PROGRAM_PIPELINE :: 0x82E4; +SAMPLER :: 0x82E6; +MAX_LABEL_LENGTH :: 0x82E8; +DEBUG_OUTPUT :: 0x92E0; +CONTEXT_FLAG_DEBUG_BIT :: 0x00000002; +MAX_UNIFORM_LOCATIONS :: 0x826E; +FRAMEBUFFER_DEFAULT_WIDTH :: 0x9310; +FRAMEBUFFER_DEFAULT_HEIGHT :: 0x9311; +FRAMEBUFFER_DEFAULT_LAYERS :: 0x9312; +FRAMEBUFFER_DEFAULT_SAMPLES :: 0x9313; +FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS :: 0x9314; +MAX_FRAMEBUFFER_WIDTH :: 0x9315; +MAX_FRAMEBUFFER_HEIGHT :: 0x9316; +MAX_FRAMEBUFFER_LAYERS :: 0x9317; +MAX_FRAMEBUFFER_SAMPLES :: 0x9318; +INTERNALFORMAT_SUPPORTED :: 0x826F; +INTERNALFORMAT_PREFERRED :: 0x8270; +INTERNALFORMAT_RED_SIZE :: 0x8271; +INTERNALFORMAT_GREEN_SIZE :: 0x8272; +INTERNALFORMAT_BLUE_SIZE :: 0x8273; +INTERNALFORMAT_ALPHA_SIZE :: 0x8274; +INTERNALFORMAT_DEPTH_SIZE :: 0x8275; +INTERNALFORMAT_STENCIL_SIZE :: 0x8276; +INTERNALFORMAT_SHARED_SIZE :: 0x8277; +INTERNALFORMAT_RED_TYPE :: 0x8278; +INTERNALFORMAT_GREEN_TYPE :: 0x8279; +INTERNALFORMAT_BLUE_TYPE :: 0x827A; +INTERNALFORMAT_ALPHA_TYPE :: 0x827B; +INTERNALFORMAT_DEPTH_TYPE :: 0x827C; +INTERNALFORMAT_STENCIL_TYPE :: 0x827D; +MAX_WIDTH :: 0x827E; +MAX_HEIGHT :: 0x827F; +MAX_DEPTH :: 0x8280; +MAX_LAYERS :: 0x8281; +MAX_COMBINED_DIMENSIONS :: 0x8282; +COLOR_COMPONENTS :: 0x8283; +DEPTH_COMPONENTS :: 0x8284; +STENCIL_COMPONENTS :: 0x8285; +COLOR_RENDERABLE :: 0x8286; +DEPTH_RENDERABLE :: 0x8287; +STENCIL_RENDERABLE :: 0x8288; +FRAMEBUFFER_RENDERABLE :: 0x8289; +FRAMEBUFFER_RENDERABLE_LAYERED :: 0x828A; +FRAMEBUFFER_BLEND :: 0x828B; +READ_PIXELS :: 0x828C; +READ_PIXELS_FORMAT :: 0x828D; +READ_PIXELS_TYPE :: 0x828E; +TEXTURE_IMAGE_FORMAT :: 0x828F; +TEXTURE_IMAGE_TYPE :: 0x8290; +GET_TEXTURE_IMAGE_FORMAT :: 0x8291; +GET_TEXTURE_IMAGE_TYPE :: 0x8292; +MIPMAP :: 0x8293; +MANUAL_GENERATE_MIPMAP :: 0x8294; +AUTO_GENERATE_MIPMAP :: 0x8295; +COLOR_ENCODING :: 0x8296; +SRGB_READ :: 0x8297; +SRGB_WRITE :: 0x8298; +FILTER :: 0x829A; +VERTEX_TEXTURE :: 0x829B; +TESS_CONTROL_TEXTURE :: 0x829C; +TESS_EVALUATION_TEXTURE :: 0x829D; +GEOMETRY_TEXTURE :: 0x829E; +FRAGMENT_TEXTURE :: 0x829F; +COMPUTE_TEXTURE :: 0x82A0; +TEXTURE_SHADOW :: 0x82A1; +TEXTURE_GATHER :: 0x82A2; +TEXTURE_GATHER_SHADOW :: 0x82A3; +SHADER_IMAGE_LOAD :: 0x82A4; +SHADER_IMAGE_STORE :: 0x82A5; +SHADER_IMAGE_ATOMIC :: 0x82A6; +IMAGE_TEXEL_SIZE :: 0x82A7; +IMAGE_COMPATIBILITY_CLASS :: 0x82A8; +IMAGE_PIXEL_FORMAT :: 0x82A9; +IMAGE_PIXEL_TYPE :: 0x82AA; +SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST :: 0x82AC; +SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST :: 0x82AD; +SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE :: 0x82AE; +SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE :: 0x82AF; +TEXTURE_COMPRESSED_BLOCK_WIDTH :: 0x82B1; +TEXTURE_COMPRESSED_BLOCK_HEIGHT :: 0x82B2; +TEXTURE_COMPRESSED_BLOCK_SIZE :: 0x82B3; +CLEAR_BUFFER :: 0x82B4; +TEXTURE_VIEW :: 0x82B5; +VIEW_COMPATIBILITY_CLASS :: 0x82B6; +FULL_SUPPORT :: 0x82B7; +CAVEAT_SUPPORT :: 0x82B8; +IMAGE_CLASS_4_X_32 :: 0x82B9; +IMAGE_CLASS_2_X_32 :: 0x82BA; +IMAGE_CLASS_1_X_32 :: 0x82BB; +IMAGE_CLASS_4_X_16 :: 0x82BC; +IMAGE_CLASS_2_X_16 :: 0x82BD; +IMAGE_CLASS_1_X_16 :: 0x82BE; +IMAGE_CLASS_4_X_8 :: 0x82BF; +IMAGE_CLASS_2_X_8 :: 0x82C0; +IMAGE_CLASS_1_X_8 :: 0x82C1; +IMAGE_CLASS_11_11_10 :: 0x82C2; +IMAGE_CLASS_10_10_10_2 :: 0x82C3; +VIEW_CLASS_128_BITS :: 0x82C4; +VIEW_CLASS_96_BITS :: 0x82C5; +VIEW_CLASS_64_BITS :: 0x82C6; +VIEW_CLASS_48_BITS :: 0x82C7; +VIEW_CLASS_32_BITS :: 0x82C8; +VIEW_CLASS_24_BITS :: 0x82C9; +VIEW_CLASS_16_BITS :: 0x82CA; +VIEW_CLASS_8_BITS :: 0x82CB; +VIEW_CLASS_S3TC_DXT1_RGB :: 0x82CC; +VIEW_CLASS_S3TC_DXT1_RGBA :: 0x82CD; +VIEW_CLASS_S3TC_DXT3_RGBA :: 0x82CE; +VIEW_CLASS_S3TC_DXT5_RGBA :: 0x82CF; +VIEW_CLASS_RGTC1_RED :: 0x82D0; +VIEW_CLASS_RGTC2_RG :: 0x82D1; +VIEW_CLASS_BPTC_UNORM :: 0x82D2; +VIEW_CLASS_BPTC_FLOAT :: 0x82D3; +UNIFORM :: 0x92E1; +UNIFORM_BLOCK :: 0x92E2; +PROGRAM_INPUT :: 0x92E3; +PROGRAM_OUTPUT :: 0x92E4; +BUFFER_VARIABLE :: 0x92E5; +SHADER_STORAGE_BLOCK :: 0x92E6; +VERTEX_SUBROUTINE :: 0x92E8; +TESS_CONTROL_SUBROUTINE :: 0x92E9; +TESS_EVALUATION_SUBROUTINE :: 0x92EA; +GEOMETRY_SUBROUTINE :: 0x92EB; +FRAGMENT_SUBROUTINE :: 0x92EC; +COMPUTE_SUBROUTINE :: 0x92ED; +VERTEX_SUBROUTINE_UNIFORM :: 0x92EE; +TESS_CONTROL_SUBROUTINE_UNIFORM :: 0x92EF; +TESS_EVALUATION_SUBROUTINE_UNIFORM :: 0x92F0; +GEOMETRY_SUBROUTINE_UNIFORM :: 0x92F1; +FRAGMENT_SUBROUTINE_UNIFORM :: 0x92F2; +COMPUTE_SUBROUTINE_UNIFORM :: 0x92F3; +TRANSFORM_FEEDBACK_VARYING :: 0x92F4; +ACTIVE_RESOURCES :: 0x92F5; +MAX_NAME_LENGTH :: 0x92F6; +MAX_NUM_ACTIVE_VARIABLES :: 0x92F7; +MAX_NUM_COMPATIBLE_SUBROUTINES :: 0x92F8; +NAME_LENGTH :: 0x92F9; +TYPE :: 0x92FA; +ARRAY_SIZE :: 0x92FB; +OFFSET :: 0x92FC; +BLOCK_INDEX :: 0x92FD; +ARRAY_STRIDE :: 0x92FE; +MATRIX_STRIDE :: 0x92FF; +IS_ROW_MAJOR :: 0x9300; +ATOMIC_COUNTER_BUFFER_INDEX :: 0x9301; +BUFFER_BINDING :: 0x9302; +BUFFER_DATA_SIZE :: 0x9303; +NUM_ACTIVE_VARIABLES :: 0x9304; +ACTIVE_VARIABLES :: 0x9305; +REFERENCED_BY_VERTEX_SHADER :: 0x9306; +REFERENCED_BY_TESS_CONTROL_SHADER :: 0x9307; +REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x9308; +REFERENCED_BY_GEOMETRY_SHADER :: 0x9309; +REFERENCED_BY_FRAGMENT_SHADER :: 0x930A; +REFERENCED_BY_COMPUTE_SHADER :: 0x930B; +TOP_LEVEL_ARRAY_SIZE :: 0x930C; +TOP_LEVEL_ARRAY_STRIDE :: 0x930D; +LOCATION :: 0x930E; +LOCATION_INDEX :: 0x930F; +IS_PER_PATCH :: 0x92E7; +SHADER_STORAGE_BUFFER :: 0x90D2; +SHADER_STORAGE_BUFFER_BINDING :: 0x90D3; +SHADER_STORAGE_BUFFER_START :: 0x90D4; +SHADER_STORAGE_BUFFER_SIZE :: 0x90D5; +MAX_VERTEX_SHADER_STORAGE_BLOCKS :: 0x90D6; +MAX_GEOMETRY_SHADER_STORAGE_BLOCKS :: 0x90D7; +MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS :: 0x90D8; +MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS :: 0x90D9; +MAX_FRAGMENT_SHADER_STORAGE_BLOCKS :: 0x90DA; +MAX_COMPUTE_SHADER_STORAGE_BLOCKS :: 0x90DB; +MAX_COMBINED_SHADER_STORAGE_BLOCKS :: 0x90DC; +MAX_SHADER_STORAGE_BUFFER_BINDINGS :: 0x90DD; +MAX_SHADER_STORAGE_BLOCK_SIZE :: 0x90DE; +SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT :: 0x90DF; +SHADER_STORAGE_BARRIER_BIT :: 0x00002000; +MAX_COMBINED_SHADER_OUTPUT_RESOURCES :: 0x8F39; +DEPTH_STENCIL_TEXTURE_MODE :: 0x90EA; +TEXTURE_BUFFER_OFFSET :: 0x919D; +TEXTURE_BUFFER_SIZE :: 0x919E; +TEXTURE_BUFFER_OFFSET_ALIGNMENT :: 0x919F; +TEXTURE_VIEW_MIN_LEVEL :: 0x82DB; +TEXTURE_VIEW_NUM_LEVELS :: 0x82DC; +TEXTURE_VIEW_MIN_LAYER :: 0x82DD; +TEXTURE_VIEW_NUM_LAYERS :: 0x82DE; +TEXTURE_IMMUTABLE_LEVELS :: 0x82DF; +VERTEX_ATTRIB_BINDING :: 0x82D4; +VERTEX_ATTRIB_RELATIVE_OFFSET :: 0x82D5; +VERTEX_BINDING_DIVISOR :: 0x82D6; +VERTEX_BINDING_OFFSET :: 0x82D7; +VERTEX_BINDING_STRIDE :: 0x82D8; +MAX_VERTEX_ATTRIB_RELATIVE_OFFSET :: 0x82D9; +MAX_VERTEX_ATTRIB_BINDINGS :: 0x82DA; +VERTEX_BINDING_BUFFER :: 0x8F4F; - CONTEXT_LOST = 0x0507; - NEGATIVE_ONE_TO_ONE = 0x935E; - ZERO_TO_ONE = 0x935F; - CLIP_ORIGIN = 0x935C; - CLIP_DEPTH_MODE = 0x935D; - QUERY_WAIT_INVERTED = 0x8E17; - QUERY_NO_WAIT_INVERTED = 0x8E18; - QUERY_BY_REGION_WAIT_INVERTED = 0x8E19; - QUERY_BY_REGION_NO_WAIT_INVERTED = 0x8E1A; - MAX_CULL_DISTANCES = 0x82F9; - MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA; - TEXTURE_TARGET = 0x1006; - QUERY_TARGET = 0x82EA; - GUILTY_CONTEXT_RESET = 0x8253; - INNOCENT_CONTEXT_RESET = 0x8254; - UNKNOWN_CONTEXT_RESET = 0x8255; - RESET_NOTIFICATION_STRATEGY = 0x8256; - LOSE_CONTEXT_ON_RESET = 0x8252; - NO_RESET_NOTIFICATION = 0x8261; - CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004; - CONTEXT_RELEASE_BEHAVIOR = 0x82FB; - CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC; +MAX_VERTEX_ATTRIB_STRIDE :: 0x82E5; +PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED :: 0x8221; +TEXTURE_BUFFER_BINDING :: 0x8C2A; +MAP_PERSISTENT_BIT :: 0x0040; +MAP_COHERENT_BIT :: 0x0080; +DYNAMIC_STORAGE_BIT :: 0x0100; +CLIENT_STORAGE_BIT :: 0x0200; +CLIENT_MAPPED_BUFFER_BARRIER_BIT :: 0x00004000; +BUFFER_IMMUTABLE_STORAGE :: 0x821F; +BUFFER_STORAGE_FLAGS :: 0x8220; +CLEAR_TEXTURE :: 0x9365; +LOCATION_COMPONENT :: 0x934A; +TRANSFORM_FEEDBACK_BUFFER_INDEX :: 0x934B; +TRANSFORM_FEEDBACK_BUFFER_STRIDE :: 0x934C; +QUERY_BUFFER :: 0x9192; +QUERY_BUFFER_BARRIER_BIT :: 0x00008000; +QUERY_BUFFER_BINDING :: 0x9193; +QUERY_RESULT_NO_WAIT :: 0x9194; +MIRROR_CLAMP_TO_EDGE :: 0x8743; + +CONTEXT_LOST :: 0x0507; +NEGATIVE_ONE_TO_ONE :: 0x935E; +ZERO_TO_ONE :: 0x935F; +CLIP_ORIGIN :: 0x935C; +CLIP_DEPTH_MODE :: 0x935D; +QUERY_WAIT_INVERTED :: 0x8E17; +QUERY_NO_WAIT_INVERTED :: 0x8E18; +QUERY_BY_REGION_WAIT_INVERTED :: 0x8E19; +QUERY_BY_REGION_NO_WAIT_INVERTED :: 0x8E1A; +MAX_CULL_DISTANCES :: 0x82F9; +MAX_COMBINED_CLIP_AND_CULL_DISTANCES :: 0x82FA; +TEXTURE_TARGET :: 0x1006; +QUERY_TARGET :: 0x82EA; +GUILTY_CONTEXT_RESET :: 0x8253; +INNOCENT_CONTEXT_RESET :: 0x8254; +UNKNOWN_CONTEXT_RESET :: 0x8255; +RESET_NOTIFICATION_STRATEGY :: 0x8256; +LOSE_CONTEXT_ON_RESET :: 0x8252; +NO_RESET_NOTIFICATION :: 0x8261; +CONTEXT_FLAG_ROBUST_ACCESS_BIT :: 0x00000004; +CONTEXT_RELEASE_BEHAVIOR :: 0x82FB; +CONTEXT_RELEASE_BEHAVIOR_FLUSH :: 0x82FC; + +DEBUG_OUTPUT_SYNCHRONOUS_ARB :: 0x8242; +DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB :: 0x8243; +DEBUG_CALLBACK_FUNCTION_ARB :: 0x8244; +DEBUG_CALLBACK_USER_PARAM_ARB :: 0x8245; +DEBUG_SOURCE_API_ARB :: 0x8246; +DEBUG_SOURCE_WINDOW_SYSTEM_ARB :: 0x8247; +DEBUG_SOURCE_SHADER_COMPILER_ARB :: 0x8248; +DEBUG_SOURCE_THIRD_PARTY_ARB :: 0x8249; +DEBUG_SOURCE_APPLICATION_ARB :: 0x824A; +DEBUG_SOURCE_OTHER_ARB :: 0x824B; +DEBUG_TYPE_ERROR_ARB :: 0x824C; +DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB :: 0x824D; +DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB :: 0x824E; +DEBUG_TYPE_PORTABILITY_ARB :: 0x824F; +DEBUG_TYPE_PERFORMANCE_ARB :: 0x8250; +DEBUG_TYPE_OTHER_ARB :: 0x8251; +MAX_DEBUG_MESSAGE_LENGTH_ARB :: 0x9143; +MAX_DEBUG_LOGGED_MESSAGES_ARB :: 0x9144; +DEBUG_LOGGED_MESSAGES_ARB :: 0x9145; +DEBUG_SEVERITY_HIGH_ARB :: 0x9146; +DEBUG_SEVERITY_MEDIUM_ARB :: 0x9147; +DEBUG_SEVERITY_LOW_ARB :: 0x9148; - DEBUG_OUTPUT_SYNCHRONOUS_ARB = 0x8242; - DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = 0x8243; - DEBUG_CALLBACK_FUNCTION_ARB = 0x8244; - DEBUG_CALLBACK_USER_PARAM_ARB = 0x8245; - DEBUG_SOURCE_API_ARB = 0x8246; - DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x8247; - DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x8248; - DEBUG_SOURCE_THIRD_PARTY_ARB = 0x8249; - DEBUG_SOURCE_APPLICATION_ARB = 0x824A; - DEBUG_SOURCE_OTHER_ARB = 0x824B; - DEBUG_TYPE_ERROR_ARB = 0x824C; - DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x824D; - DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x824E; - DEBUG_TYPE_PORTABILITY_ARB = 0x824F; - DEBUG_TYPE_PERFORMANCE_ARB = 0x8250; - DEBUG_TYPE_OTHER_ARB = 0x8251; - MAX_DEBUG_MESSAGE_LENGTH_ARB = 0x9143; - MAX_DEBUG_LOGGED_MESSAGES_ARB = 0x9144; - DEBUG_LOGGED_MESSAGES_ARB = 0x9145; - DEBUG_SEVERITY_HIGH_ARB = 0x9146; - DEBUG_SEVERITY_MEDIUM_ARB = 0x9147; - DEBUG_SEVERITY_LOW_ARB = 0x9148; -} diff --git a/core/os_windows.odin b/core/os_windows.odin index c45ac134f..0be905d7a 100644 --- a/core/os_windows.odin +++ b/core/os_windows.odin @@ -10,52 +10,48 @@ type { Error int; } -const INVALID_HANDLE Handle = ~(0 as Handle); +INVALID_HANDLE: Handle : ~(0 as Handle); -const { - O_RDONLY = 0x00000; - O_WRONLY = 0x00001; - O_RDWR = 0x00002; - O_CREAT = 0x00040; - O_EXCL = 0x00080; - O_NOCTTY = 0x00100; - O_TRUNC = 0x00200; - O_NONBLOCK = 0x00800; - O_APPEND = 0x00400; - O_SYNC = 0x01000; - O_ASYNC = 0x02000; - O_CLOEXEC = 0x80000; -} -const { - ERROR_NONE Error = 0; - ERROR_FILE_NOT_FOUND Error = 2; - ERROR_PATH_NOT_FOUND Error = 3; - ERROR_ACCESS_DENIED Error = 5; - ERROR_NO_MORE_FILES Error = 18; - ERROR_HANDLE_EOF Error = 38; - ERROR_NETNAME_DELETED Error = 64; - ERROR_FILE_EXISTS Error = 80; - ERROR_BROKEN_PIPE Error = 109; - ERROR_BUFFER_OVERFLOW Error = 111; - ERROR_INSUFFICIENT_BUFFER Error = 122; - ERROR_MOD_NOT_FOUND Error = 126; - ERROR_PROC_NOT_FOUND Error = 127; - ERROR_DIR_NOT_EMPTY Error = 145; - ERROR_ALREADY_EXISTS Error = 183; - ERROR_ENVVAR_NOT_FOUND Error = 203; - ERROR_MORE_DATA Error = 234; - ERROR_OPERATION_ABORTED Error = 995; - ERROR_IO_PENDING Error = 997; - ERROR_NOT_FOUND Error = 1168; - ERROR_PRIVILEGE_NOT_HELD Error = 1314; - WSAEACCES Error = 10013; - WSAECONNRESET Error = 10054; -} +O_RDONLY :: 0x00000; +O_WRONLY :: 0x00001; +O_RDWR :: 0x00002; +O_CREAT :: 0x00040; +O_EXCL :: 0x00080; +O_NOCTTY :: 0x00100; +O_TRUNC :: 0x00200; +O_NONBLOCK :: 0x00800; +O_APPEND :: 0x00400; +O_SYNC :: 0x01000; +O_ASYNC :: 0x02000; +O_CLOEXEC :: 0x80000; -const { // Windows reserves errors >= 1<<29 for application use - ERROR_FILE_IS_PIPE Error = 1<<29 + 0; -} +ERROR_NONE : Error : 0; +ERROR_FILE_NOT_FOUND : Error : 2; +ERROR_PATH_NOT_FOUND : Error : 3; +ERROR_ACCESS_DENIED : Error : 5; +ERROR_NO_MORE_FILES : Error : 18; +ERROR_HANDLE_EOF : Error : 38; +ERROR_NETNAME_DELETED : Error : 64; +ERROR_FILE_EXISTS : Error : 80; +ERROR_BROKEN_PIPE : Error : 109; +ERROR_BUFFER_OVERFLOW : Error : 111; +ERROR_INSUFFICIENT_BUFFER : Error : 122; +ERROR_MOD_NOT_FOUND : Error : 126; +ERROR_PROC_NOT_FOUND : Error : 127; +ERROR_DIR_NOT_EMPTY : Error : 145; +ERROR_ALREADY_EXISTS : Error : 183; +ERROR_ENVVAR_NOT_FOUND : Error : 203; +ERROR_MORE_DATA : Error : 234; +ERROR_OPERATION_ABORTED : Error : 995; +ERROR_IO_PENDING : Error : 997; +ERROR_NOT_FOUND : Error : 1168; +ERROR_PRIVILEGE_NOT_HELD : Error : 1314; +WSAEACCES : Error : 10013; +WSAECONNRESET : Error : 10054; + +// Windows reserves errors >= 1<<29 for application use +ERROR_FILE_IS_PIPE : Error : 1<<29 + 0; @@ -66,7 +62,7 @@ proc open(path string, mode int, perm u32) -> (Handle, Error) { return INVALID_HANDLE, ERROR_FILE_NOT_FOUND; } - var access u32; + access: u32; match mode & (O_RDONLY|O_WRONLY|O_RDWR) { case O_RDONLY: access = FILE_GENERIC_READ; case O_WRONLY: access = FILE_GENERIC_WRITE; @@ -81,14 +77,14 @@ proc open(path string, mode int, perm u32) -> (Handle, Error) { access |= FILE_APPEND_DATA; } - var share_mode = (FILE_SHARE_READ|FILE_SHARE_WRITE) as u32; - var sa ^SECURITY_ATTRIBUTES = nil; - var sa_inherit = SECURITY_ATTRIBUTES{length = size_of(SECURITY_ATTRIBUTES), inherit_handle = 1}; + share_mode := (FILE_SHARE_READ|FILE_SHARE_WRITE) as u32; + sa: ^SECURITY_ATTRIBUTES = nil; + sa_inherit := SECURITY_ATTRIBUTES{length = size_of(SECURITY_ATTRIBUTES), inherit_handle = 1}; if mode&O_CLOEXEC == 0 { sa = ^sa_inherit; } - var create_mode u32; + create_mode: u32; match { case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): create_mode = CREATE_NEW; @@ -102,14 +98,14 @@ proc open(path string, mode int, perm u32) -> (Handle, Error) { create_mode = OPEN_EXISTING; } - var buf [300]byte; + buf: [300]byte; copy(buf[:], path as []byte); - var handle = CreateFileA(^buf[0], access, share_mode, sa, create_mode, FILE_ATTRIBUTE_NORMAL, nil) as Handle; + handle := CreateFileA(^buf[0], access, share_mode, sa, create_mode, FILE_ATTRIBUTE_NORMAL, nil) as Handle; if handle == INVALID_HANDLE { return handle, ERROR_NONE; } - var err = GetLastError(); + err := GetLastError(); return INVALID_HANDLE, err as Error; } @@ -118,8 +114,8 @@ proc close(fd Handle) { } proc write(fd Handle, data []byte) -> (int, Error) { - var bytes_written i32; - var e = win32.WriteFile(fd as win32.HANDLE, data.data, data.count as i32, ^bytes_written, nil); + bytes_written: i32; + e := win32.WriteFile(fd as win32.HANDLE, data.data, data.count as i32, ^bytes_written, nil); if e != 0 { return 0, e as Error; } @@ -127,10 +123,10 @@ proc write(fd Handle, data []byte) -> (int, Error) { } proc read(fd Handle, data []byte) -> (int, Error) { - var bytes_read i32; - var e = win32.ReadFile(fd as win32.HANDLE, data.data, data.count as u32, ^bytes_read, nil); + bytes_read: i32; + e := win32.ReadFile(fd as win32.HANDLE, data.data, data.count as u32, ^bytes_read, nil); if e != win32.FALSE { - var err = win32.GetLastError(); + err := win32.GetLastError(); return 0, err as Error; } return bytes_read as int, ERROR_NONE; @@ -138,21 +134,21 @@ proc read(fd Handle, data []byte) -> (int, Error) { proc seek(fd Handle, offset i64, whence int) -> (i64, Error) { using win32; - var w u32; + w: u32; match whence { case 0: w = FILE_BEGIN; case 1: w = FILE_CURRENT; case 2: w = FILE_END; } - var hi = (offset>>32) as i32; - var lo = offset as i32; - var ft = GetFileType(fd as HANDLE); + hi := (offset>>32) as i32; + lo := offset as i32; + ft := GetFileType(fd as HANDLE); if ft == FILE_TYPE_PIPE { return 0, ERROR_FILE_IS_PIPE; } - var dw_ptr = SetFilePointer(fd as HANDLE, lo, ^hi, w); + dw_ptr := SetFilePointer(fd as HANDLE, lo, ^hi, w); if dw_ptr == INVALID_SET_FILE_POINTER { - var err = GetLastError(); + err := GetLastError(); return 0, err as Error; } return (hi as i64)<<32 + (dw_ptr as i64), ERROR_NONE; @@ -160,14 +156,13 @@ proc seek(fd Handle, offset i64, whence int) -> (i64, Error) { // NOTE(bill): Uses startup to initialize it -var { - stdin = get_std_handle(win32.STD_INPUT_HANDLE); - stdout = get_std_handle(win32.STD_OUTPUT_HANDLE); - stderr = get_std_handle(win32.STD_ERROR_HANDLE); -} +stdin := get_std_handle(win32.STD_INPUT_HANDLE); +stdout := get_std_handle(win32.STD_OUTPUT_HANDLE); +stderr := get_std_handle(win32.STD_ERROR_HANDLE); + proc get_std_handle(h int) -> Handle { - var fd = win32.GetStdHandle(h as i32); + fd := win32.GetStdHandle(h as i32); win32.SetHandleInformation(fd, win32.HANDLE_FLAG_INHERIT, 0); return fd as Handle; } @@ -178,17 +173,17 @@ proc get_std_handle(h int) -> Handle { proc last_write_time(fd Handle) -> File_Time { - var file_info win32.BY_HANDLE_FILE_INFORMATION; + file_info: win32.BY_HANDLE_FILE_INFORMATION; win32.GetFileInformationByHandle(fd as win32.HANDLE, ^file_info); - var lo = file_info.last_write_time.lo as File_Time; - var hi = file_info.last_write_time.hi as File_Time; + lo := file_info.last_write_time.lo as File_Time; + hi := file_info.last_write_time.hi as File_Time; return lo | hi << 32; } proc last_write_time_by_name(name string) -> File_Time { - var last_write_time win32.FILETIME; - var data win32.FILE_ATTRIBUTE_DATA; - var buf [1024]byte; + last_write_time: win32.FILETIME; + data: win32.FILE_ATTRIBUTE_DATA; + buf: [1024]byte; assert(buf.count > name.count); @@ -198,8 +193,8 @@ proc last_write_time_by_name(name string) -> File_Time { last_write_time = data.last_write_time; } - var l = last_write_time.lo as File_Time; - var h = last_write_time.hi as File_Time; + l := last_write_time.lo as File_Time; + h := last_write_time.hi as File_Time; return l | h << 32; } @@ -208,33 +203,33 @@ proc last_write_time_by_name(name string) -> File_Time { proc read_entire_file(name string) -> ([]byte, bool) { - var buf [300]byte; + buf: [300]byte; copy(buf[:], name as []byte); - var fd, err = open(name, O_RDONLY, 0); + fd, err := open(name, O_RDONLY, 0); if err != ERROR_NONE { return nil, false; } defer close(fd); - var length i64; - var file_size_ok = win32.GetFileSizeEx(fd as win32.HANDLE, ^length) != 0; + length: i64; + file_size_ok := win32.GetFileSizeEx(fd as win32.HANDLE, ^length) != 0; if !file_size_ok { return nil, false; } - var data = new_slice(u8, length); + data := new_slice(u8, length); if data.data == nil { return nil, false; } - var single_read_length i32; - var total_read i64; + single_read_length: i32; + total_read: i64; for total_read < length { - var remaining = length - total_read; - var to_read u32; - const MAX = 1<<32-1; + remaining := length - total_read; + to_read: u32; + MAX :: 1<<32-1; if remaining <= MAX { to_read = remaining as u32; } else { diff --git a/core/sync.odin b/core/sync.odin index 79aeacfc8..98322d580 100644 --- a/core/sync.odin +++ b/core/sync.odin @@ -49,7 +49,7 @@ proc mutex_destroy(m ^Mutex) { semaphore_destroy(^m.semaphore); } proc mutex_lock(m ^Mutex) { - var thread_id = current_thread_id(); + thread_id := current_thread_id(); if atomic.fetch_add32(^m.counter, 1) > 0 { if thread_id != atomic.load32(^m.owner) { semaphore_wait(^m.semaphore); @@ -59,11 +59,11 @@ proc mutex_lock(m ^Mutex) { m.recursion++; } proc mutex_try_lock(m ^Mutex) -> bool { - var thread_id = current_thread_id(); + thread_id := current_thread_id(); if atomic.load32(^m.owner) == thread_id { atomic.fetch_add32(^m.counter, 1); } else { - var expected i32 = 0; + expected: i32 = 0; if atomic.load32(^m.counter) != 0 { return false; } @@ -76,8 +76,8 @@ proc mutex_try_lock(m ^Mutex) -> bool { return true; } proc mutex_unlock(m ^Mutex) { - var recursion i32; - var thread_id = current_thread_id(); + recursion: i32; + thread_id := current_thread_id(); assert(thread_id == atomic.load32(^m.owner)); m.recursion--; diff --git a/core/sys/windows.odin b/core/sys/windows.odin index ca0a36467..a406d53ee 100644 --- a/core/sys/windows.odin +++ b/core/sys/windows.odin @@ -20,42 +20,42 @@ type { WNDPROC proc(hwnd HWND, msg u32, wparam WPARAM, lparam LPARAM) -> LRESULT; } -const { - INVALID_HANDLE_VALUE = (-1 as int) as HANDLE; - FALSE BOOL = 0; - TRUE BOOL = 1; +INVALID_HANDLE_VALUE :: (-1 as int) as HANDLE; - CS_VREDRAW = 0x0001; - CS_HREDRAW = 0x0002; - CS_OWNDC = 0x0020; - CW_USEDEFAULT = -0x80000000; +FALSE: BOOL : 0; +TRUE: BOOL : 1; - WS_OVERLAPPED = 0; - WS_MAXIMIZEBOX = 0x00010000; - WS_MINIMIZEBOX = 0x00020000; - WS_THICKFRAME = 0x00040000; - WS_SYSMENU = 0x00080000; - WS_CAPTION = 0x00C00000; - WS_VISIBLE = 0x10000000; - WS_OVERLAPPEDWINDOW = WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX; +CS_VREDRAW :: 0x0001; +CS_HREDRAW :: 0x0002; +CS_OWNDC :: 0x0020; +CW_USEDEFAULT :: -0x80000000; - WM_DESTROY = 0x0002; - WM_CLOSE = 0x0010; - WM_QUIT = 0x0012; - WM_KEYDOWN = 0x0100; - WM_KEYUP = 0x0101; +WS_OVERLAPPED :: 0; +WS_MAXIMIZEBOX :: 0x00010000; +WS_MINIMIZEBOX :: 0x00020000; +WS_THICKFRAME :: 0x00040000; +WS_SYSMENU :: 0x00080000; +WS_CAPTION :: 0x00C00000; +WS_VISIBLE :: 0x10000000; +WS_OVERLAPPEDWINDOW :: WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX; - PM_REMOVE = 1; +WM_DESTROY :: 0x0002; +WM_CLOSE :: 0x0010; +WM_QUIT :: 0x0012; +WM_KEYDOWN :: 0x0100; +WM_KEYUP :: 0x0101; - COLOR_BACKGROUND = 1 as HBRUSH; - BLACK_BRUSH = 4; +PM_REMOVE :: 1; - SM_CXSCREEN = 0; - SM_CYSCREEN = 1; +COLOR_BACKGROUND :: 1 as HBRUSH; +BLACK_BRUSH :: 4; + +SM_CXSCREEN :: 0; +SM_CYSCREEN :: 1; + +SW_SHOW :: 5; - SW_SHOW = 5; -} type { POINT struct #ordered { @@ -118,10 +118,8 @@ type { GET_FILEEX_INFO_LEVELS i32; } -const { - GetFileExInfoStandard = 0 as GET_FILEEX_INFO_LEVELS; - GetFileExMaxInfoLevel = 1 as GET_FILEEX_INFO_LEVELS; -} +GetFileExInfoStandard: GET_FILEEX_INFO_LEVELS : 0; +GetFileExMaxInfoLevel: GET_FILEEX_INFO_LEVELS : 1; proc GetLastError () -> i32 #foreign #dll_import proc ExitProcess (exit_code u32) #foreign #dll_import @@ -163,7 +161,7 @@ proc GetActiveWindow () -> HWND #foreign #dll_import proc GetQueryPerformanceFrequency() -> i64 { - var r i64; + r: i64; QueryPerformanceFrequency(^r); return r; } @@ -191,60 +189,54 @@ proc SetFilePointer(file_handle HANDLE, distance_to_move i32, distance_to_move_h proc SetHandleInformation(obj HANDLE, mask, flags u32) -> BOOL #foreign #dll_import -const { - HANDLE_FLAG_INHERIT = 1; - HANDLE_FLAG_PROTECT_FROM_CLOSE = 2; -} +HANDLE_FLAG_INHERIT :: 1; +HANDLE_FLAG_PROTECT_FROM_CLOSE :: 2; -const { - FILE_BEGIN = 0; - FILE_CURRENT = 1; - FILE_END = 2; -} +FILE_BEGIN :: 0; +FILE_CURRENT :: 1; +FILE_END :: 2; -const { - FILE_SHARE_READ = 0x00000001; - FILE_SHARE_WRITE = 0x00000002; - FILE_SHARE_DELETE = 0x00000004; - FILE_GENERIC_ALL = 0x10000000; - FILE_GENERIC_EXECUTE = 0x20000000; - FILE_GENERIC_WRITE = 0x40000000; - FILE_GENERIC_READ = 0x80000000; +FILE_SHARE_READ :: 0x00000001; +FILE_SHARE_WRITE :: 0x00000002; +FILE_SHARE_DELETE :: 0x00000004; +FILE_GENERIC_ALL :: 0x10000000; +FILE_GENERIC_EXECUTE :: 0x20000000; +FILE_GENERIC_WRITE :: 0x40000000; +FILE_GENERIC_READ :: 0x80000000; - FILE_APPEND_DATA = 0x0004; +FILE_APPEND_DATA :: 0x0004; - STD_INPUT_HANDLE = -10; - STD_OUTPUT_HANDLE = -11; - STD_ERROR_HANDLE = -12; +STD_INPUT_HANDLE :: -10; +STD_OUTPUT_HANDLE :: -11; +STD_ERROR_HANDLE :: -12; - CREATE_NEW = 1; - CREATE_ALWAYS = 2; - OPEN_EXISTING = 3; - OPEN_ALWAYS = 4; - TRUNCATE_EXISTING = 5; +CREATE_NEW :: 1; +CREATE_ALWAYS :: 2; +OPEN_EXISTING :: 3; +OPEN_ALWAYS :: 4; +TRUNCATE_EXISTING :: 5; - FILE_ATTRIBUTE_READONLY = 0x00000001; - FILE_ATTRIBUTE_HIDDEN = 0x00000002; - FILE_ATTRIBUTE_SYSTEM = 0x00000004; - FILE_ATTRIBUTE_DIRECTORY = 0x00000010; - FILE_ATTRIBUTE_ARCHIVE = 0x00000020; - FILE_ATTRIBUTE_DEVICE = 0x00000040; - FILE_ATTRIBUTE_NORMAL = 0x00000080; - FILE_ATTRIBUTE_TEMPORARY = 0x00000100; - FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200; - FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400; - FILE_ATTRIBUTE_COMPRESSED = 0x00000800; - FILE_ATTRIBUTE_OFFLINE = 0x00001000; - FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000; - FILE_ATTRIBUTE_ENCRYPTED = 0x00004000; +FILE_ATTRIBUTE_READONLY :: 0x00000001; +FILE_ATTRIBUTE_HIDDEN :: 0x00000002; +FILE_ATTRIBUTE_SYSTEM :: 0x00000004; +FILE_ATTRIBUTE_DIRECTORY :: 0x00000010; +FILE_ATTRIBUTE_ARCHIVE :: 0x00000020; +FILE_ATTRIBUTE_DEVICE :: 0x00000040; +FILE_ATTRIBUTE_NORMAL :: 0x00000080; +FILE_ATTRIBUTE_TEMPORARY :: 0x00000100; +FILE_ATTRIBUTE_SPARSE_FILE :: 0x00000200; +FILE_ATTRIBUTE_REPARSE_POINT :: 0x00000400; +FILE_ATTRIBUTE_COMPRESSED :: 0x00000800; +FILE_ATTRIBUTE_OFFLINE :: 0x00001000; +FILE_ATTRIBUTE_NOT_CONTENT_INDEXED :: 0x00002000; +FILE_ATTRIBUTE_ENCRYPTED :: 0x00004000; - FILE_TYPE_DISK = 0x0001; - FILE_TYPE_CHAR = 0x0002; - FILE_TYPE_PIPE = 0x0003; +FILE_TYPE_DISK :: 0x0001; +FILE_TYPE_CHAR :: 0x0002; +FILE_TYPE_PIPE :: 0x0003; - INVALID_SET_FILE_POINTER = ~(0 as u32); -} +INVALID_SET_FILE_POINTER :: ~(0 as u32); @@ -255,7 +247,7 @@ proc HeapFree (h HANDLE, flags u32, memory rawptr) -> BOOL #f proc GetProcessHeap() -> HANDLE #foreign #dll_import -const HEAP_ZERO_MEMORY = 0x00000008; +HEAP_ZERO_MEMORY :: 0x00000008; // Synchronization @@ -265,7 +257,7 @@ type SECURITY_ATTRIBUTES struct #ordered { inherit_handle BOOL; } -const INFINITE = 0xffffffff; +INFINITE :: 0xffffffff; proc CreateSemaphoreA (attributes ^SECURITY_ATTRIBUTES, initial_count, maximum_count i32, name ^byte) -> HANDLE #foreign #dll_import proc ReleaseSemaphore (semaphore HANDLE, release_count i32, previous_count ^i32) -> BOOL #foreign #dll_import @@ -314,11 +306,10 @@ type { } } -const { - BI_RGB = 0; - DIB_RGB_COLORS = 0x00; - SRCCOPY = 0x00cc0020 as u32; -} +BI_RGB :: 0; +DIB_RGB_COLORS :: 0x00; +SRCCOPY: u32 : 0x00cc0020; + proc StretchDIBits(hdc HDC, x_dst, y_dst, width_dst, height_dst i32, @@ -338,29 +329,27 @@ proc GetClientRect(hwnd HWND, rect ^RECT) -> BOOL #foreign // Windows OpenGL -const { - PFD_TYPE_RGBA = 0; - PFD_TYPE_COLORINDEX = 1; - PFD_MAIN_PLANE = 0; - PFD_OVERLAY_PLANE = 1; - PFD_UNDERLAY_PLANE = -1; - PFD_DOUBLEBUFFER = 1; - PFD_STEREO = 2; - PFD_DRAW_TO_WINDOW = 4; - PFD_DRAW_TO_BITMAP = 8; - PFD_SUPPORT_GDI = 16; - PFD_SUPPORT_OPENGL = 32; - PFD_GENERIC_FORMAT = 64; - PFD_NEED_PALETTE = 128; - PFD_NEED_SYSTEM_PALETTE = 0x00000100; - PFD_SWAP_EXCHANGE = 0x00000200; - PFD_SWAP_COPY = 0x00000400; - PFD_SWAP_LAYER_BUFFERS = 0x00000800; - PFD_GENERIC_ACCELERATED = 0x00001000; - PFD_DEPTH_DONTCARE = 0x20000000; - PFD_DOUBLEBUFFER_DONTCARE = 0x40000000; - PFD_STEREO_DONTCARE = 0x80000000; -} +PFD_TYPE_RGBA :: 0; +PFD_TYPE_COLORINDEX :: 1; +PFD_MAIN_PLANE :: 0; +PFD_OVERLAY_PLANE :: 1; +PFD_UNDERLAY_PLANE :: -1; +PFD_DOUBLEBUFFER :: 1; +PFD_STEREO :: 2; +PFD_DRAW_TO_WINDOW :: 4; +PFD_DRAW_TO_BITMAP :: 8; +PFD_SUPPORT_GDI :: 16; +PFD_SUPPORT_OPENGL :: 32; +PFD_GENERIC_FORMAT :: 64; +PFD_NEED_PALETTE :: 128; +PFD_NEED_SYSTEM_PALETTE :: 0x00000100; +PFD_SWAP_EXCHANGE :: 0x00000200; +PFD_SWAP_COPY :: 0x00000400; +PFD_SWAP_LAYER_BUFFERS :: 0x00000800; +PFD_GENERIC_ACCELERATED :: 0x00001000; +PFD_DEPTH_DONTCARE :: 0x20000000; +PFD_DOUBLEBUFFER_DONTCARE :: 0x40000000; +PFD_STEREO_DONTCARE :: 0x80000000; type { HGLRC HANDLE; @@ -406,13 +395,11 @@ proc ChoosePixelFormat(hdc HDC, pfd ^PIXELFORMATDESCRIPTOR) -> i32 #foreign #dll proc SwapBuffers (hdc HDC) -> BOOL #foreign #dll_import proc ReleaseDC (wnd HWND, hdc HDC) -> i32 #foreign #dll_import -const { - WGL_CONTEXT_MAJOR_VERSION_ARB = 0x2091; - WGL_CONTEXT_MINOR_VERSION_ARB = 0x2092; - WGL_CONTEXT_PROFILE_MASK_ARB = 0x9126; - WGL_CONTEXT_CORE_PROFILE_BIT_ARB = 0x0001; - WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x0002; -} +WGL_CONTEXT_MAJOR_VERSION_ARB :: 0x2091; +WGL_CONTEXT_MINOR_VERSION_ARB :: 0x2092; +WGL_CONTEXT_PROFILE_MASK_ARB :: 0x9126; +WGL_CONTEXT_CORE_PROFILE_BIT_ARB :: 0x0001; +WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB :: 0x0002; proc wglCreateContext (hdc HDC) -> HGLRC #foreign #dll_import proc wglMakeCurrent (hdc HDC, hglrc HGLRC) -> BOOL #foreign #dll_import diff --git a/core/utf8.odin b/core/utf8.odin index 4b2dd9ac7..1c2b97867 100644 --- a/core/utf8.odin +++ b/core/utf8.odin @@ -1,53 +1,49 @@ -const { - RUNE_ERROR = '\ufffd'; - RUNE_SELF = 0x80; - RUNE_BOM = 0xfeff; - RUNE_EOF = ~(0 as rune); - MAX_RUNE = '\U0010ffff'; - UTF_MAX = 4; +RUNE_ERROR :: '\ufffd'; +RUNE_SELF :: 0x80; +RUNE_BOM :: 0xfeff; +RUNE_EOF :: ~(0 as rune); +MAX_RUNE :: '\U0010ffff'; +UTF_MAX :: 4; - SURROGATE_MIN = 0xd800; - SURROGATE_MAX = 0xdfff; -} +SURROGATE_MIN :: 0xd800; +SURROGATE_MAX :: 0xdfff; type Accept_Range struct { lo, hi u8; } -var { - accept_ranges = [5]Accept_Range{ - {0x80, 0xbf}, - {0xa0, 0xbf}, - {0x80, 0x9f}, - {0x90, 0xbf}, - {0x80, 0x8f}, - }; +accept_ranges := [5]Accept_Range{ + {0x80, 0xbf}, + {0xa0, 0xbf}, + {0x80, 0x9f}, + {0x90, 0xbf}, + {0x80, 0x8f}, +}; - accept_sizes = [256]byte{ - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x00-0x0f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x10-0x1f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x20-0x2f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x30-0x3f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x40-0x4f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x50-0x5f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x60-0x6f - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x70-0x7f +accept_sizes := [256]byte{ + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x00-0x0f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x10-0x1f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x20-0x2f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x30-0x3f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x40-0x4f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x50-0x5f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x60-0x6f + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, // 0x70-0x7f - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0x80-0x8f - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0x90-0x9f - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xa0-0xaf - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xb0-0xbf - 0xf1, 0xf1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // 0xc0-0xcf - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // 0xd0-0xdf - 0x13, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x23, 0x03, 0x03, // 0xe0-0xef - 0x34, 0x04, 0x04, 0x04, 0x44, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xf0-0xff - }; -} + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0x80-0x8f + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0x90-0x9f + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xa0-0xaf + 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xb0-0xbf + 0xf1, 0xf1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // 0xc0-0xcf + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // 0xd0-0xdf + 0x13, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x23, 0x03, 0x03, // 0xe0-0xef + 0x34, 0x04, 0x04, 0x04, 0x44, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, // 0xf0-0xff +}; proc encode_rune(r rune) -> ([4]byte, int) { - var buf [4]byte; - var i = r as u32; - const mask = 0x3f as byte; + buf: [4]byte; + i := r as u32; + mask: byte : 0x3f; if i <= 1<<7-1 { buf[0] = r as byte; return buf, 1; @@ -79,44 +75,42 @@ proc encode_rune(r rune) -> ([4]byte, int) { } proc decode_rune(s string) -> (rune, int) { - var n = s.count; + n := s.count; if n < 1 { return RUNE_ERROR, 0; } - var b0 = s[0]; - var x = accept_sizes[b0]; + b0 := s[0]; + x := accept_sizes[b0]; if x >= 0xf0 { - var mask = (x as rune << 31) >> 31; // all zeros or all ones + mask := (x as rune << 31) >> 31; // all zeros or all ones return (b0 as rune) &~ mask | RUNE_ERROR&mask, 1; } - var size = x & 7; - var ar = accept_ranges[x>>4]; + size := x & 7; + ar := accept_ranges[x>>4]; if n < size as int { return RUNE_ERROR, 1; } - var b1 = s[1]; + b1 := s[1]; if b1 < ar.lo || ar.hi < b1 { return RUNE_ERROR, 1; } - const { - MASK_X = 0b00111111; - MASK_2 = 0b00011111; - MASK_3 = 0b00001111; - MASK_4 = 0b00000111; - } + MASK_X :: 0b00111111; + MASK_2 :: 0b00011111; + MASK_3 :: 0b00001111; + MASK_4 :: 0b00000111; if size == 2 { return (b0&MASK_2) as rune <<6 | (b1&MASK_X) as rune, 2; } - var b2 = s[2]; + b2 := s[2]; if b2 < 0x80 || 0xbf < b2 { return RUNE_ERROR, 1; } if size == 3 { return (b0&MASK_3) as rune <<12 | (b1&MASK_X) as rune <<6 | (b2&MASK_X) as rune, 3; } - var b3 = s[3]; + b3 := s[3]; if b3 < 0x80 || 0xbf < b3 { return RUNE_ERROR, 1; } @@ -137,31 +131,31 @@ proc valid_rune(r rune) -> bool { } proc valid_string(s string) -> bool { - var n = s.count; - for var i = 0; i < n; { - var si = s[i]; + n := s.count; + for i := 0; i < n; { + si := s[i]; if si < RUNE_SELF { // ascii i++; continue; } - var x = accept_sizes[si]; + x := accept_sizes[si]; if x == 0xf1 { return false; } - var size = (x & 7) as int; + size := (x & 7) as int; if i+size > n { return false; } - var ar = accept_ranges[x>>4]; - if var b = s[i+1]; b < ar.lo || ar.hi < b { + ar := accept_ranges[x>>4]; + if b := s[i+1]; b < ar.lo || ar.hi < b { return false; } else if size == 2 { // Okay - } else if var b = s[i+2]; b < 0x80 || 0xbf < b { + } else if b := s[i+2]; b < 0x80 || 0xbf < b { return false; } else if size == 3 { // Okay - } else if var b = s[i+3]; b < 0x80 || 0xbf < b { + } else if b := s[i+3]; b < 0x80 || 0xbf < b { return false; } i += size; @@ -170,34 +164,34 @@ proc valid_string(s string) -> bool { } proc rune_count(s string) -> int { - var count = 0; - var n = s.count; - for var i = 0; i < n; count++ { - var si = s[i]; + count := 0; + n := s.count; + for i := 0; i < n; count++ { + si := s[i]; if si < RUNE_SELF { // ascii i++; continue; } - var x = accept_sizes[si]; + x := accept_sizes[si]; if x == 0xf1 { i++; continue; } - var size = (x & 7) as int; + size := (x & 7) as int; if i+size > n { i++; continue; } - var ar = accept_ranges[x>>4]; - if var b = s[i+1]; b < ar.lo || ar.hi < b { + ar := accept_ranges[x>>4]; + if b := s[i+1]; b < ar.lo || ar.hi < b { size = 1; } else if size == 2 { // Okay - } else if var b = s[i+2]; b < 0x80 || 0xbf < b { + } else if b := s[i+2]; b < 0x80 || 0xbf < b { size = 1; } else if size == 3 { // Okay - } else if var b = s[i+3]; b < 0x80 || 0xbf < b { + } else if b := s[i+3]; b < 0x80 || 0xbf < b { size = 1; } i += size; diff --git a/src/checker/checker.c b/src/checker/checker.c index 4d4c8f30e..64bccbd14 100644 --- a/src/checker/checker.c +++ b/src/checker/checker.c @@ -1075,36 +1075,33 @@ void init_preload(Checker *c) { c->done_preload = true; } -bool check_arity_match(Checker *c, AstNodeValueSpec *s, AstNodeValueSpec *init); +bool check_arity_match(Checker *c, AstNodeValueDecl *d); #include "expr.c" #include "decl.c" #include "stmt.c" -bool check_arity_match(Checker *c, AstNodeValueSpec *s, AstNodeValueSpec *init) { - isize lhs = s->names.count; - isize rhs = s->values.count; - if (init != NULL) { - rhs = init->values.count; - } +bool check_arity_match(Checker *c, AstNodeValueDecl *d) { + isize lhs = d->names.count; + isize rhs = d->values.count; - if (init == NULL && rhs == 0) { - if (s->type == NULL) { - error_node(s->names.e[0], "Missing type or initial expression"); + if (rhs == 0) { + if (d->type == NULL) { + error_node(d->names.e[0], "Missing type or initial expression"); return false; } } else if (lhs < rhs) { - if (lhs < s->values.count) { - AstNode *n = s->values.e[lhs]; + if (lhs < d->values.count) { + AstNode *n = d->values.e[lhs]; gbString str = expr_to_string(n); error_node(n, "Extra initial expression `%s`", str); gb_string_free(str); } else { - error_node(s->names.e[0], "Extra initial expression"); + error_node(d->names.e[0], "Extra initial expression"); } return false; - } else if (lhs > rhs && (init != NULL || rhs != 1)) { - AstNode *n = s->names.e[rhs]; + } else if (lhs > rhs && rhs != 1) { + AstNode *n = d->names.e[rhs]; gbString str = expr_to_string(n); error_node(n, "Missing expression for `%s`", str); gb_string_free(str); @@ -1160,15 +1157,95 @@ void check_global_collect_entities_from_file(Checker *c, Scope *parent_scope, As switch (decl->kind) { case_ast_node(bd, BadDecl, decl); case_end; + + case_ast_node(vd, ValueDecl, decl); + if (vd->is_var) { + // NOTE(bill): You need to store the entity information here unline a constant declaration + isize entity_count = vd->names.count; + isize entity_index = 0; + Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); + DeclInfo *di = NULL; + if (vd->values.count > 0) { + di = make_declaration_info(heap_allocator(), parent_scope); + di->entities = entities; + di->entity_count = entity_count; + di->type_expr = vd->type; + di->init_expr = vd->values.e[0]; + } + + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + AstNode *value = NULL; + if (i < vd->values.count) { + value = vd->values.e[i]; + } + if (name->kind != AstNode_Ident) { + error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); + continue; + } + Entity *e = make_entity_variable(c->allocator, parent_scope, name->Ident, NULL); + e->identifier = name; + entities[entity_index++] = e; + + DeclInfo *d = di; + if (d == NULL) { + AstNode *init_expr = value; + d = make_declaration_info(heap_allocator(), e->scope); + d->type_expr = vd->type; + d->init_expr = init_expr; + d->var_decl_tags = vd->tags; + } + + add_entity_and_decl_info(c, name, e, d); + } + + check_arity_match(c, vd); + } else { + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + if (name->kind != AstNode_Ident) { + error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); + continue; + } + + + AstNode *init = NULL; + if (i < vd->values.count) { + init = vd->values.e[i]; + } + + DeclInfo *d = make_declaration_info(c->allocator, parent_scope); + Entity *e = NULL; + + AstNode *up_init = unparen_expr(init); + if (init != NULL && is_ast_node_type(up_init)) { + e = make_entity_type_name(c->allocator, d->scope, name->Ident, NULL); + d->type_expr = init; + d->init_expr = init; + } else if (init != NULL && up_init->kind == AstNode_ProcLit) { + e = make_entity_procedure(c->allocator, d->scope, name->Ident, NULL, up_init->ProcLit.tags); + d->proc_decl = init; + } else { + e = make_entity_constant(c->allocator, d->scope, name->Ident, NULL, (ExactValue){0}); + d->type_expr = vd->type; + d->init_expr = init; + } + GB_ASSERT(e != NULL); + e->identifier = name; + + add_entity_and_decl_info(c, name, e, d); + } + + check_arity_match(c, vd); + } + case_end; + case_ast_node(gd, GenericDecl, decl); if (!parent_scope->is_file) { // NOTE(bill): Within a procedure, variables must be in order continue; } - AstNodeValueSpec empty_spec_ = {0}, *empty_spec = &empty_spec_; - AstNodeValueSpec *prev_spec = NULL; - for_array(iota, gd->specs) { AstNode *spec = gd->specs.e[iota]; switch (spec->kind) { @@ -1183,99 +1260,6 @@ void check_global_collect_entities_from_file(Checker *c, Scope *parent_scope, As DelayedDecl di = {parent_scope, spec}; array_add(&c->delayed_imports, di); case_end; - case_ast_node(vs, ValueSpec, spec); - switch (vs->keyword) { - case Token_var: { - // NOTE(bill): You need to store the entity information here unline a constant declaration - isize entity_count = vs->names.count; - isize entity_index = 0; - Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); - DeclInfo *di = NULL; - if (vs->values.count > 0) { - di = make_declaration_info(heap_allocator(), parent_scope); - di->entities = entities; - di->entity_count = entity_count; - di->type_expr = vs->type; - di->init_expr = vs->values.e[0]; - } - - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - AstNode *value = NULL; - if (i < vs->values.count) { - value = vs->values.e[i]; - } - if (name->kind != AstNode_Ident) { - error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); - continue; - } - Entity *e = make_entity_variable(c->allocator, parent_scope, name->Ident, NULL); - e->identifier = name; - entities[entity_index++] = e; - - DeclInfo *d = di; - if (d == NULL) { - AstNode *init_expr = value; - d = make_declaration_info(heap_allocator(), e->scope); - d->type_expr = vs->type; - d->init_expr = init_expr; - d->var_decl_tags = gd->tags; - } - - add_entity_and_decl_info(c, name, e, d); - } - - check_arity_match(c, vs, NULL); - } break; - - case Token_const: { - if (vs->type != NULL || vs->values.count > 0) { - prev_spec = vs; - } else if (prev_spec == NULL) { - prev_spec = empty_spec; - } - - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - if (name->kind != AstNode_Ident) { - error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); - continue; - } - - - AstNode *init = NULL; - if (i < prev_spec->values.count) { - init = prev_spec->values.e[i]; - } - - DeclInfo *d = make_declaration_info(c->allocator, parent_scope); - Entity *e = NULL; - - ExactValue v_iota = make_exact_value_integer(iota); - - AstNode *up_init = unparen_expr(init); - if (init != NULL && is_ast_node_type(up_init)) { - e = make_entity_type_name(c->allocator, d->scope, name->Ident, NULL); - d->type_expr = init; - d->init_expr = init; - } else if (init != NULL && up_init->kind == AstNode_ProcLit) { - e = make_entity_procedure(c->allocator, d->scope, name->Ident, NULL, up_init->ProcLit.tags); - d->proc_decl = init; - } else { - e = make_entity_constant(c->allocator, d->scope, name->Ident, NULL, v_iota); - d->type_expr = prev_spec->type; - d->init_expr = init; - } - GB_ASSERT(e != NULL); - e->identifier = name; - - add_entity_and_decl_info(c, name, e, d); - } - - check_arity_match(c, vs, prev_spec); - } break; - } - case_end; case_ast_node(ts, TypeSpec, spec); if (ts->name->kind != AstNode_Ident) { diff --git a/src/checker/decl.c b/src/checker/decl.c index 818a31dd0..179e6f67c 100644 --- a/src/checker/decl.c +++ b/src/checker/decl.c @@ -107,14 +107,14 @@ void check_init_variables(Checker *c, Entity **lhs, isize lhs_count, AstNodeArra gb_temp_arena_memory_end(tmp); } -void check_var_spec_node(Checker *c, AstNodeValueSpec *vs) { - GB_ASSERT(vs->keyword == Token_var); - isize entity_count = vs->names.count; +void check_var_decl_node(Checker *c, AstNodeValueDecl *vd) { + GB_ASSERT(vd->is_var == true); + isize entity_count = vd->names.count; isize entity_index = 0; Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; Entity *entity = NULL; if (name->kind == AstNode_Ident) { Token token = name->Ident; @@ -145,8 +145,8 @@ void check_var_spec_node(Checker *c, AstNodeValueSpec *vs) { } Type *init_type = NULL; - if (vs->type) { - init_type = check_type_extra(c, vs->type, NULL); + if (vd->type) { + init_type = check_type_extra(c, vd->type, NULL); if (init_type == NULL) { init_type = t_invalid; } @@ -165,12 +165,12 @@ void check_var_spec_node(Checker *c, AstNodeValueSpec *vs) { e->type = init_type; } - check_arity_match(c, vs, NULL); - check_init_variables(c, entities, entity_count, vs->values, str_lit("variable declaration")); + check_arity_match(c, vd); + check_init_variables(c, entities, entity_count, vd->values, str_lit("variable declaration")); - for_array(i, vs->names) { + for_array(i, vd->names) { if (entities[i] != NULL) { - add_entity(c, c->context.scope, vs->names.e[i], entities[i]); + add_entity(c, c->context.scope, vd->names.e[i], entities[i]); } } diff --git a/src/checker/expr.c b/src/checker/expr.c index bf15d22dc..08f919827 100644 --- a/src/checker/expr.c +++ b/src/checker/expr.c @@ -85,71 +85,58 @@ void check_local_collect_entities(Checker *c, AstNodeArray nodes, DelayedEntitie case_ast_node(ws, WhenStmt, node); // Will be handled later case_end; - case_ast_node(gd, GenericDecl, node); - AstNodeValueSpec empty_spec_ = {0}, *empty_spec = &empty_spec_; - AstNodeValueSpec *last = NULL; + case_ast_node(vd, ValueDecl, node); + if (vd->is_var) { + // NOTE(bill): Handled later + } else { + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + if (name->kind != AstNode_Ident) { + error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); + continue; + } + + AstNode *init = NULL; + if (i < vd->values.count) { + init = vd->values.e[i]; + } + + DeclInfo *d = make_declaration_info(c->allocator, c->context.scope); + Entity *e = NULL; + + AstNode *up_init = unparen_expr(init); + if (init != NULL && is_ast_node_type(up_init)) { + e = make_entity_type_name(c->allocator, d->scope, name->Ident, NULL); + d->type_expr = init; + d->init_expr = init; + } else if (init != NULL && up_init->kind == AstNode_ProcLit) { + e = make_entity_procedure(c->allocator, d->scope, name->Ident, NULL, up_init->ProcLit.tags); + d->proc_decl = init; + } else { + e = make_entity_constant(c->allocator, d->scope, name->Ident, NULL, (ExactValue){0}); + d->type_expr = vd->type; + d->init_expr = init; + } + GB_ASSERT(e != NULL); + e->identifier = name; + + add_entity_and_decl_info(c, name, e, d); + + DelayedEntity delay = {name, e, d}; + array_add(delayed_entities, delay); + } + + check_arity_match(c, vd); + } + case_end; + + case_ast_node(gd, GenericDecl, node); for_array(iota, gd->specs) { AstNode *spec = gd->specs.e[iota]; switch (spec->kind) { case_ast_node(bd, BadDecl, spec); case_end; - case_ast_node(vs, ValueSpec, spec); - switch (vs->keyword) { - case Token_var: - break; - - case Token_const: { - if (vs->type != NULL || vs->values.count > 0) { - last = vs; - } else if (last == NULL) { - last = empty_spec; - } - - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - if (name->kind != AstNode_Ident) { - error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); - continue; - } - - AstNode *init = NULL; - if (i < vs->values.count) { - init = vs->values.e[i]; - } - - DeclInfo *d = make_declaration_info(c->allocator, c->context.scope); - Entity *e = NULL; - - ExactValue v_iota = make_exact_value_integer(iota); - - AstNode *up_init = unparen_expr(init); - if (init != NULL && is_ast_node_type(up_init)) { - e = make_entity_type_name(c->allocator, d->scope, name->Ident, NULL); - d->type_expr = init; - d->init_expr = init; - } else if (init != NULL && up_init->kind == AstNode_ProcLit) { - e = make_entity_procedure(c->allocator, d->scope, name->Ident, NULL, up_init->ProcLit.tags); - d->proc_decl = init; - } else { - e = make_entity_constant(c->allocator, d->scope, name->Ident, NULL, v_iota); - d->type_expr = vs->type; - d->init_expr = init; - } - GB_ASSERT(e != NULL); - e->identifier = name; - - add_entity_and_decl_info(c, name, e, d); - - DelayedEntity delay = {name, e, d}; - array_add(delayed_entities, delay); - } - - check_arity_match(c, vs, last); - } break; - } - case_end; - case_ast_node(ts, TypeSpec, spec); if (ts->name->kind != AstNode_Ident) { error_node(ts->name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[ts->name->kind])); diff --git a/src/checker/stmt.c b/src/checker/stmt.c index 4c82267fc..d5848a2b2 100644 --- a/src/checker/stmt.c +++ b/src/checker/stmt.c @@ -1026,48 +1026,45 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { } case_end; - case_ast_node(gd, GenericDecl, us->node); - for_array(spec_index, gd->specs) { - AstNode *spec = gd->specs.e[spec_index]; - switch (spec->kind) { - case_ast_node(vs, ValueSpec, spec); - if (vs->keyword != Token_var) { - error_node(spec, "`using` can only be applied to a variable declaration"); - return; - } + case_ast_node(vd, ValueDecl, us->node); + if (!vd->is_var) { + error_node(us->node, "`using` can only be applied to a variable declaration"); + return; + } - if (vs->names.count > 1 && vs->type != NULL) { - error(us->token, "`using` can only be applied to one variable of the same type"); - } + if (vd->names.count > 1 && vd->type != NULL) { + error(us->token, "`using` can only be applied to one variable of the same type"); + } - check_var_spec_node(c, vs); + check_var_decl_node(c, vd); - for_array(name_index, vs->names) { - AstNode *item = vs->names.e[name_index]; - ast_node(i, Ident, item); - String name = i->string; - Entity *e = scope_lookup_entity(c->context.scope, name); - Type *t = base_type(type_deref(e->type)); - if (is_type_struct(t) || is_type_raw_union(t)) { - Scope **found = map_scope_get(&c->info.scopes, hash_pointer(t->Record.node)); - GB_ASSERT(found != NULL); - for_array(i, (*found)->elements.entries) { - Entity *f = (*found)->elements.entries.e[i].value; - if (f->kind == Entity_Variable) { - Entity *uvar = make_entity_using_variable(c->allocator, e, f->token, f->type); - Entity *prev = scope_insert_entity(c->context.scope, uvar); - if (prev != NULL) { - error(us->token, "Namespace collision while `using` `%.*s` of: %.*s", LIT(name), LIT(prev->token.string)); - return; - } - } + for_array(name_index, vd->names) { + AstNode *item = vd->names.e[name_index]; + if (item->kind != AstNode_Ident) { + // TODO(bill): Handle error here??? + continue; + } + ast_node(i, Ident, item); + String name = i->string; + Entity *e = scope_lookup_entity(c->context.scope, name); + Type *t = base_type(type_deref(e->type)); + if (is_type_struct(t) || is_type_raw_union(t)) { + Scope **found = map_scope_get(&c->info.scopes, hash_pointer(t->Record.node)); + GB_ASSERT(found != NULL); + for_array(i, (*found)->elements.entries) { + Entity *f = (*found)->elements.entries.e[i].value; + if (f->kind == Entity_Variable) { + Entity *uvar = make_entity_using_variable(c->allocator, e, f->token, f->type); + Entity *prev = scope_insert_entity(c->context.scope, uvar); + if (prev != NULL) { + error(us->token, "Namespace collision while `using` `%.*s` of: %.*s", LIT(name), LIT(prev->token.string)); + return; } - } else { - error(us->token, "`using` can only be applied to variables of type struct or raw_union"); - return; } } - case_end; + } else { + error(us->token, "`using` can only be applied to variables of type struct or raw_union"); + return; } } case_end; @@ -1096,7 +1093,76 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { case_end; + case_ast_node(vd, ValueDecl, node); + if (vd->is_var) { + isize entity_count = vd->names.count; + isize entity_index = 0; + Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + Entity *entity = NULL; + if (name->kind == AstNode_Ident) { + Token token = name->Ident; + String str = token.string; + Entity *found = NULL; + // NOTE(bill): Ignore assignments to `_` + if (str_ne(str, str_lit("_"))) { + found = current_scope_lookup_entity(c->context.scope, str); + } + if (found == NULL) { + entity = make_entity_variable(c->allocator, c->context.scope, token, NULL); + add_entity_definition(&c->info, name, entity); + } else { + TokenPos pos = found->token.pos; + error(token, + "Redeclaration of `%.*s` in this scope\n" + "\tat %.*s(%td:%td)", + LIT(str), LIT(pos.file), pos.line, pos.column); + entity = found; + } + } else { + error_node(name, "A variable declaration must be an identifier"); + } + if (entity == NULL) { + entity = make_entity_dummy_variable(c->allocator, c->global_scope, ast_node_token(name)); + } + entities[entity_index++] = entity; + } + + Type *init_type = NULL; + if (vd->type) { + init_type = check_type_extra(c, vd->type, NULL); + if (init_type == NULL) { + init_type = t_invalid; + } + } + + for (isize i = 0; i < entity_count; i++) { + Entity *e = entities[i]; + GB_ASSERT(e != NULL); + if (e->flags & EntityFlag_Visited) { + e->type = t_invalid; + continue; + } + e->flags |= EntityFlag_Visited; + + if (e->type == NULL) + e->type = init_type; + } + check_arity_match(c, vd); + + check_init_variables(c, entities, entity_count, vd->values, str_lit("variable declaration")); + + for_array(i, vd->names) { + if (entities[i] != NULL) { + add_entity(c, c->context.scope, vd->names.e[i], entities[i]); + } + } + } else { + // NOTE(bill): Handled elsewhere + } + case_end; case_ast_node(gd, GenericDecl, node); for_array(spec_index, gd->specs) { @@ -1104,81 +1170,6 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { switch (spec->kind) { case_ast_node(bd, BadDecl, spec); case_end; - case_ast_node(vs, ValueSpec, spec); - switch (vs->keyword) { - case Token_var: { - isize entity_count = vs->names.count; - isize entity_index = 0; - Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); - - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - Entity *entity = NULL; - if (name->kind == AstNode_Ident) { - Token token = name->Ident; - String str = token.string; - Entity *found = NULL; - // NOTE(bill): Ignore assignments to `_` - if (str_ne(str, str_lit("_"))) { - found = current_scope_lookup_entity(c->context.scope, str); - } - if (found == NULL) { - entity = make_entity_variable(c->allocator, c->context.scope, token, NULL); - add_entity_definition(&c->info, name, entity); - } else { - TokenPos pos = found->token.pos; - error(token, - "Redeclaration of `%.*s` in this scope\n" - "\tat %.*s(%td:%td)", - LIT(str), LIT(pos.file), pos.line, pos.column); - entity = found; - } - } else { - error_node(name, "A variable declaration must be an identifier"); - } - if (entity == NULL) { - entity = make_entity_dummy_variable(c->allocator, c->global_scope, ast_node_token(name)); - } - entities[entity_index++] = entity; - } - - Type *init_type = NULL; - if (vs->type) { - init_type = check_type_extra(c, vs->type, NULL); - if (init_type == NULL) { - init_type = t_invalid; - } - } - - for (isize i = 0; i < entity_count; i++) { - Entity *e = entities[i]; - GB_ASSERT(e != NULL); - if (e->flags & EntityFlag_Visited) { - e->type = t_invalid; - continue; - } - e->flags |= EntityFlag_Visited; - - if (e->type == NULL) - e->type = init_type; - } - check_arity_match(c, vs, NULL); - - check_init_variables(c, entities, entity_count, vs->values, str_lit("variable declaration")); - - for_array(i, vs->names) { - if (entities[i] != NULL) { - add_entity(c, c->context.scope, vs->names.e[i], entities[i]); - } - } - } break; - - case Token_const: - // NOTE(bill): Handled elsewhere - break; - } - case_end; - case_ast_node(ts, TypeSpec, spec); // NOTE(bill): Handled elsewhere case_end; diff --git a/src/parser.c b/src/parser.c index 12144462c..1a659da7a 100644 --- a/src/parser.c +++ b/src/parser.c @@ -251,12 +251,6 @@ AST_NODE_KIND(_ComplexStmtBegin, "", i32) \ AST_NODE_KIND(_ComplexStmtEnd, "", i32) \ AST_NODE_KIND(_StmtEnd, "", i32) \ AST_NODE_KIND(_SpecBegin, "", i32) \ - AST_NODE_KIND(ValueSpec, "value specification", struct { \ - TokenKind keyword; \ - AstNodeArray names; \ - AstNode * type; \ - AstNodeArray values; \ - }) \ AST_NODE_KIND(TypeSpec, "type specification", struct { \ AstNode *name; \ AstNode *type; \ @@ -280,6 +274,13 @@ AST_NODE_KIND(_DeclBegin, "", i32) \ u64 tags; \ bool is_using; \ }) \ + AST_NODE_KIND(ValueDecl, "value declaration", struct { \ + bool is_var; \ + AstNodeArray names; \ + AstNode * type; \ + AstNodeArray values; \ + u64 tags; \ + }) \ AST_NODE_KIND(ProcDecl, "procedure declaration", struct { \ AstNode *name; \ AstNode *type; \ @@ -498,14 +499,14 @@ Token ast_node_token(AstNode *node) { return node->BadDecl.begin; case AstNode_GenericDecl: return node->GenericDecl.token; + case AstNode_ValueDecl: + return ast_node_token(node->ValueDecl.names.e[0]); case AstNode_ProcDecl: return ast_node_token(node->ProcDecl.name); case AstNode_ForeignLibrary: return node->ForeignLibrary.token; - case AstNode_ValueSpec: - return ast_node_token(node->ValueSpec.names.e[0]); case AstNode_TypeSpec: return ast_node_token(node->TypeSpec.name); case AstNode_ImportSpec: @@ -1076,12 +1077,12 @@ AstNode *make_generic_decl(AstFile *f, Token token, Token open, Token close, Ast return result; } -AstNode *make_value_spec(AstFile *f, TokenKind keyword, AstNodeArray names, AstNode *type, AstNodeArray values) { - AstNode *result = make_node(f, AstNode_ValueSpec); - result->ValueSpec.keyword = keyword; - result->ValueSpec.names = names; - result->ValueSpec.type = type; - result->ValueSpec.values = values; +AstNode *make_value_decl(AstFile *f, bool is_var, AstNodeArray names, AstNode *type, AstNodeArray values) { + AstNode *result = make_node(f, AstNode_ValueDecl); + result->ValueDecl.is_var = is_var; + result->ValueDecl.names = names; + result->ValueDecl.type = type; + result->ValueDecl.values = values; return result; } @@ -1210,8 +1211,8 @@ void fix_advance_to_next_stmt(AstFile *f) { case Token_Semicolon: return; - case Token_var: - case Token_const: + // case Token_var: + // case Token_const: case Token_type: case Token_proc: case Token_import: @@ -2139,42 +2140,42 @@ AstNode *parse_generic_decl(AstFile *f, TokenKind keyword, ParserSpecProc spec_p return make_generic_decl(f, token, open, close, specs, 0, false); } -PARSE_SPEC_PROC(parse_value_spec) { - AstNodeArray names = parse_identfier_list(f); - parse_check_name_list_for_reserves(f, names); - AstNode *type = parse_type_attempt(f); - AstNodeArray values = {0}; +// PARSE_SPEC_PROC(parse_value_spec) { +// AstNodeArray names = parse_identfier_list(f); +// parse_check_name_list_for_reserves(f, names); +// AstNode *type = parse_type_attempt(f); +// AstNodeArray values = {0}; - if (allow_token(f, Token_Eq)) { - values = parse_rhs_expr_list(f); - } +// if (allow_token(f, Token_Eq)) { +// values = parse_rhs_expr_list(f); +// } - if (values.count > names.count) { - syntax_error(f->curr_token, "Too many values on the right hand side of the declaration"); - } +// if (values.count > names.count) { +// syntax_error(f->curr_token, "Too many values on the right hand side of the declaration"); +// } - switch (keyword) { - case Token_var: - if (type == NULL && values.count == 0 && names.count > 0) { - syntax_error(f->curr_token, "Missing type or initialization"); - return make_bad_decl(f, f->curr_token, f->curr_token); - } - break; - case Token_const: - if (values.count == 0 && (index == 0 || type != NULL)) { - syntax_error(f->curr_token, "Missing constant value"); - return make_bad_decl(f, f->curr_token, f->curr_token); - } - break; - } +// switch (keyword) { +// case Token_var: +// if (type == NULL && values.count == 0 && names.count > 0) { +// syntax_error(f->curr_token, "Missing type or initialization"); +// return make_bad_decl(f, f->curr_token, f->curr_token); +// } +// break; +// case Token_const: +// if (values.count == 0 && (index == 0 || type != NULL)) { +// syntax_error(f->curr_token, "Missing constant value"); +// return make_bad_decl(f, f->curr_token, f->curr_token); +// } +// break; +// } - // TODO(bill): Fix this so it does not require it - if (values.e == NULL) { - values = make_ast_node_array(f); - } +// // TODO(bill): Fix this so it does not require it +// if (values.e == NULL) { +// values = make_ast_node_array(f); +// } - return make_value_spec(f, keyword, names, type, values); -} +// return make_value_spec(f, keyword, names, type, values); +// } PARSE_SPEC_PROC(parse_type_spec) { AstNode *name = parse_identifier(f); AstNode *type = parse_type(f); @@ -2239,9 +2240,9 @@ PARSE_SPEC_PROC(parse_include_spec) { AstNode *parse_decl(AstFile *f) { switch (f->curr_token.kind) { - case Token_var: - case Token_const: - return parse_generic_decl(f, f->curr_token.kind, parse_value_spec); + // case Token_var: + // case Token_const: + // return parse_generic_decl(f, f->curr_token.kind, parse_value_spec); case Token_type: return parse_generic_decl(f, f->curr_token.kind, parse_type_spec); @@ -2266,12 +2267,7 @@ AstNode *parse_decl(AstFile *f) { AstNode *parse_simple_stmt(AstFile *f) { - switch (f->curr_token.kind) { - case Token_var: - case Token_const: - return parse_decl(f); - } - + Token start_token = f->curr_token; AstNodeArray lhs = parse_lhs_expr_list(f); Token token = f->curr_token; switch (token.kind) { @@ -2302,6 +2298,61 @@ AstNode *parse_simple_stmt(AstFile *f) { } return make_assign_stmt(f, token, lhs, rhs); } break; + + case Token_Colon: { + parse_check_name_list_for_reserves(f, lhs); + + AstNode *type = NULL; + AstNodeArray values = {0}; + bool is_mutable = true; + + if (allow_token(f, Token_Colon)) { + if (!allow_token(f, Token_type)) { + type = parse_type_attempt(f); + } + } else if (f->curr_token.kind != Token_Eq && + f->curr_token.kind != Token_Semicolon) { + syntax_error(f->curr_token, "Expected a type separator `:` or `=`"); + } + + + switch (f->curr_token.kind) { + case Token_Colon: + is_mutable = false; + /*fallthrough*/ + case Token_Eq: + next_token(f); + values = parse_rhs_expr_list(f); + if (values.count > lhs.count) { + syntax_error(f->curr_token, "Too many values on the right hand side of the declaration"); + } else if (values.count < lhs.count && !is_mutable) { + syntax_error(f->curr_token, "All constant declarations must be defined"); + } else if (values.count == 0) { + syntax_error(f->curr_token, "Expected an expression for this declaration"); + } + break; + } + + if (is_mutable) { + if (type == NULL && values.count == 0) { + syntax_error(f->curr_token, "Missing variable type or initialization"); + return make_bad_decl(f, f->curr_token, f->curr_token); + } + } else { + if (type == NULL && values.count == 0 && lhs.count > 0) { + syntax_error(f->curr_token, "Missing constant value"); + return make_bad_decl(f, f->curr_token, f->curr_token); + } + } + + if (values.e == NULL) { + values = make_ast_node_array(f); + } + + AstNodeArray specs = {0}; + array_init_reserve(&specs, heap_allocator(), 1); + return make_value_decl(f, is_mutable, lhs, type, values); + } break; } if (lhs.count > 1) { @@ -3025,8 +3076,8 @@ AstNode *parse_stmt(AstFile *f) { expect_semicolon(f, s); return s; - case Token_var: - case Token_const: + // case Token_var: + // case Token_const: case Token_proc: case Token_type: case Token_import: @@ -3063,14 +3114,12 @@ AstNode *parse_stmt(AstFile *f) { while (e->kind == AstNode_SelectorExpr) { e = unparen_expr(e->SelectorExpr.selector); } - if (e->kind == AstNode_Ident) { + if (e->kind == AstNode_Ident) { valid = true; } } break; - case AstNode_GenericDecl: - if (node->GenericDecl.token.kind == Token_var) { - valid = true; - } + case AstNode_ValueDecl: + valid = node->ValueDecl.is_var; break; } @@ -3153,8 +3202,8 @@ AstNode *parse_stmt(AstFile *f) { return s; } else if (str_eq(tag, str_lit("thread_local"))) { AstNode *decl = parse_simple_stmt(f); - if (decl->kind == AstNode_GenericDecl && - decl->GenericDecl.token.kind != Token_var) { + if (decl->kind != AstNode_ValueDecl && + !decl->ValueDecl.is_var) { syntax_error(token, "#thread_local may only be applied to variable declarations"); return make_bad_decl(f, token, ast_node_token(decl)); } @@ -3162,8 +3211,9 @@ AstNode *parse_stmt(AstFile *f) { syntax_error(token, "#thread_local is only allowed at the file scope"); return make_bad_decl(f, token, ast_node_token(decl)); } - GB_ASSERT(decl->kind == AstNode_GenericDecl); - decl->GenericDecl.tags |= VarDeclTag_thread_local; + + GB_ASSERT(decl->kind == AstNode_ValueDecl); + decl->ValueDecl.tags |= VarDeclTag_thread_local; return decl; } else if (str_eq(tag, str_lit("bounds_check"))) { s = parse_stmt(f); diff --git a/src/ssa.c b/src/ssa.c index 7eeb2131a..ca77c385c 100644 --- a/src/ssa.c +++ b/src/ssa.c @@ -3924,71 +3924,67 @@ void ssa_build_stmt_internal(ssaProcedure *proc, AstNode *node) { ssa_build_when_stmt(proc, ws); case_end; + case_ast_node(vd, ValueDecl, node); + if (vd->is_var) { + ssaModule *m = proc->module; + gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&m->tmp_arena); + + if (vd->values.count == 0) { // declared and zero-initialized + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + if (!ssa_is_blank_ident(name)) { + ssa_add_local_for_identifier(proc, name, true); + } + } + } else { // Tuple(s) + Array(ssaAddr) lvals; + ssaValueArray inits; + array_init_reserve(&lvals, m->tmp_allocator, vd->names.count); + array_init_reserve(&inits, m->tmp_allocator, vd->names.count); + + for_array(i, vd->names) { + AstNode *name = vd->names.e[i]; + ssaAddr lval = ssa_make_addr(NULL, NULL); + if (!ssa_is_blank_ident(name)) { + ssa_add_local_for_identifier(proc, name, false); + lval = ssa_build_addr(proc, name); + } + + array_add(&lvals, lval); + } + + for_array(i, vd->values) { + ssaValue *init = ssa_build_expr(proc, vd->values.e[i]); + Type *t = ssa_type(init); + if (t->kind == Type_Tuple) { + for (isize i = 0; i < t->Tuple.variable_count; i++) { + Entity *e = t->Tuple.variables[i]; + ssaValue *v = ssa_emit_struct_ev(proc, init, i); + array_add(&inits, v); + } + } else { + array_add(&inits, init); + } + } + + + for_array(i, inits) { + if (lvals.e[i].addr == NULL) { + continue; + } + ssaValue *v = ssa_emit_conv(proc, inits.e[i], ssa_addr_type(lvals.e[i])); + ssa_addr_store(proc, lvals.e[i], v); + } + } + + gb_temp_arena_memory_end(tmp); + } + case_end; case_ast_node(gd, GenericDecl, node); for_array(spec_index, gd->specs) { AstNode *spec = gd->specs.e[spec_index]; switch (spec->kind) { - case_ast_node(vs, ValueSpec, spec); - switch (vs->keyword) { - case Token_const: - break; - case Token_var: { - ssaModule *m = proc->module; - gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&m->tmp_arena); - - if (vs->values.count == 0) { // declared and zero-initialized - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - if (!ssa_is_blank_ident(name)) { - ssa_add_local_for_identifier(proc, name, true); - } - } - } else { // Tuple(s) - Array(ssaAddr) lvals; - ssaValueArray inits; - array_init_reserve(&lvals, m->tmp_allocator, vs->names.count); - array_init_reserve(&inits, m->tmp_allocator, vs->names.count); - - for_array(i, vs->names) { - AstNode *name = vs->names.e[i]; - ssaAddr lval = ssa_make_addr(NULL, NULL); - if (!ssa_is_blank_ident(name)) { - ssa_add_local_for_identifier(proc, name, false); - lval = ssa_build_addr(proc, name); - } - - array_add(&lvals, lval); - } - - for_array(i, vs->values) { - ssaValue *init = ssa_build_expr(proc, vs->values.e[i]); - Type *t = ssa_type(init); - if (t->kind == Type_Tuple) { - for (isize i = 0; i < t->Tuple.variable_count; i++) { - Entity *e = t->Tuple.variables[i]; - ssaValue *v = ssa_emit_struct_ev(proc, init, i); - array_add(&inits, v); - } - } else { - array_add(&inits, init); - } - } - - - for_array(i, inits) { - if (lvals.e[i].addr == NULL) { - continue; - } - ssaValue *v = ssa_emit_conv(proc, inits.e[i], ssa_addr_type(lvals.e[i])); - ssa_addr_store(proc, lvals.e[i], v); - } - } - - gb_temp_arena_memory_end(tmp); - } break; - } - case_end; case_ast_node(ts, TypeSpec, spec); // NOTE(bill): Generate a new name // parent_proc.name-guid diff --git a/src/tokenizer.c b/src/tokenizer.c index c80f7bf2a..7138dc6ae 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -84,8 +84,8 @@ TOKEN_KIND(Token__OperatorEnd, "_OperatorEnd"), \ TOKEN_KIND(Token__KeywordBegin, "_KeywordBegin"), \ TOKEN_KIND(Token_type, "type"), \ TOKEN_KIND(Token_proc, "proc"), \ - TOKEN_KIND(Token_var, "var"), \ - TOKEN_KIND(Token_const, "const"), \ + /* TOKEN_KIND(Token_var, "var"), */\ + /* TOKEN_KIND(Token_const, "const"), */\ TOKEN_KIND(Token_import, "import"), \ TOKEN_KIND(Token_include, "include"), \ TOKEN_KIND(Token_macro, "macro"), \