diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-12-05 23:39:26 +0000 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-12-05 23:39:26 +0000 |
| commit | a16bdb215a31e66ae8a3d9132483f287fc7f53eb (patch) | |
| tree | 980e4c21f1a74a831152c7812bee1c5219d45849 | |
| parent | 88aa74bbb9043f4ffe843beacb0984c06a1dfff3 (diff) | |
Go/BCPL style semicolon insertion during tokenizing stage
| -rw-r--r-- | build.bat | 2 | ||||
| -rw-r--r-- | code/demo.odin | 18 | ||||
| -rw-r--r-- | code/http_test.odin | 146 | ||||
| -rw-r--r-- | code/punity.odin | 286 | ||||
| -rw-r--r-- | core/_preload.odin | 230 | ||||
| -rw-r--r-- | core/_soft_numbers.odin | 162 | ||||
| -rw-r--r-- | core/fmt.odin | 529 | ||||
| -rw-r--r-- | core/hash.odin | 190 | ||||
| -rw-r--r-- | core/math.odin | 394 | ||||
| -rw-r--r-- | core/mem.odin | 246 | ||||
| -rw-r--r-- | core/opengl.odin | 226 | ||||
| -rw-r--r-- | core/opengl_constants.odin | 2730 | ||||
| -rw-r--r-- | core/os.odin | 2 | ||||
| -rw-r--r-- | core/os_windows.odin | 148 | ||||
| -rw-r--r-- | core/utf8.odin | 188 | ||||
| -rw-r--r-- | core/win32.odin | 240 | ||||
| -rw-r--r-- | src/parser.c | 30 | ||||
| -rw-r--r-- | src/tokenizer.c | 212 |
18 files changed, 3049 insertions, 2930 deletions
@@ -16,7 +16,7 @@ if %release_mode% EQU 0 ( rem Debug ) set compiler_warnings= ^ - -we4002 -we4013 -we4020 -we4024 -we4029 -we4031 -we4047 -we4133 -we4706 ^ + -we4002 -we4013 -we4020 -we4024 -we4029 -we4031 -we4047 -we4133 -we4706 -we4715 ^ -wd4100 -wd4101 -wd4127 -wd4189 ^ -wd4201 -wd4204 -wd4244 ^ -wd4306 ^ diff --git a/code/demo.odin b/code/demo.odin index 0e5c215ad..fb7f48b33 100644 --- a/code/demo.odin +++ b/code/demo.odin @@ -1,18 +1,8 @@ -#import "fmt.odin"; - -A :: type struct { - b: B; -}; -B :: type struct { - c: C; -}; -C :: type struct { - a: A; -}; +#import "fmt.odin" main :: proc() { - fmt.println(size_of(A)); - fmt.println(size_of(B)); - fmt.println(size_of(C)); + if true { + + } } diff --git a/code/http_test.odin b/code/http_test.odin index 09c6d0899..9048cfd63 100644 --- a/code/http_test.odin +++ b/code/http_test.odin @@ -1,10 +1,10 @@ -#import "fmt.odin"; +#import "fmt.odin" -#foreign_system_library "Ws2_32" when ODIN_OS == "windows"; +#foreign_system_library "Ws2_32" when ODIN_OS == "windows" -SOCKET :: type uint; -INVALID_SOCKET :: ~(0 as SOCKET); +SOCKET :: type uint +INVALID_SOCKET :: ~(0 as SOCKET) AF :: enum i32 { UNSPEC = 0, // unspecified @@ -37,45 +37,45 @@ AF :: enum i32 { MAX = 26, } -SOCK_STREAM :: 1; -SOCKET_ERROR :: -1; -IPPROTO_TCP :: 6; -AI_PASSIVE :: 0x0020; -SOMAXCONN :: 128; +SOCK_STREAM :: 1 +SOCKET_ERROR :: -1 +IPPROTO_TCP :: 6 +AI_PASSIVE :: 0x0020 +SOMAXCONN :: 128 -SD_RECEIVE :: 0; -SD_SEND :: 1; -SD_BOTH :: 2; +SD_RECEIVE :: 0 +SD_SEND :: 1 +SD_BOTH :: 2 -WSADESCRIPTION_LEN :: 256; -WSASYS_STATUS_LEN :: 128; +WSADESCRIPTION_LEN :: 256 +WSASYS_STATUS_LEN :: 128 WSADATA :: struct #ordered { - version: i16; - high_version: i16; + version: i16 + high_version: i16 // NOTE(bill): This is x64 ordering - max_sockets: u16; - max_udp_dg: u16; - vendor_info: ^byte; - description: [WSADESCRIPTION_LEN+1]byte; - system_status: [WSASYS_STATUS_LEN+1]byte; + max_sockets: u16 + max_udp_dg: u16 + vendor_info: ^byte + description: [WSADESCRIPTION_LEN+1]byte + system_status: [WSASYS_STATUS_LEN+1]byte } addrinfo :: struct #ordered { - flags: i32; - family: i32; - socktype: i32; - protocol: i32; - addrlen: uint; - canonname: ^u8; - addr: ^sockaddr; - next: ^addrinfo; + flags: i32 + family: i32 + socktype: i32 + protocol: i32 + addrlen: uint + canonname: ^u8 + addr: ^sockaddr + next: ^addrinfo } sockaddr :: struct #ordered { - family: u16; - data: [14]byte; + family: u16 + data: [14]byte } @@ -94,52 +94,52 @@ shutdown :: proc(s: SOCKET, how: i32) -> i32 WSAGetLastError :: proc() -> i32 #foreign #dll_import to_c_string :: proc(s: string) -> ^byte { - c_str := new_slice(byte, s.count+1); - assert(c_str.data != nil); - copy(c_str, s as []byte); - c_str[s.count] = 0; - return c_str.data; + c_str := new_slice(byte, s.count+1) + assert(c_str.data != nil) + copy(c_str, s as []byte) + c_str[s.count] = 0 + return c_str.data } run :: proc() { - wsa: WSADATA; - res: ^addrinfo = nil; - hints: addrinfo; - s, client: SOCKET; + wsa: WSADATA + res: ^addrinfo = nil + hints: addrinfo + s, client: SOCKET if WSAStartup(2 | (2 << 8), ^wsa) != 0 { - fmt.println("WSAStartup failed: ", WSAGetLastError()); - return; + fmt.println("WSAStartup failed: ", WSAGetLastError()) + return } - defer WSACleanup(); + defer WSACleanup() - hints.family = AF.INET as i32; - hints.socktype = SOCK_STREAM; - hints.protocol = IPPROTO_TCP; - hints.flags = AI_PASSIVE; + hints.family = AF.INET as i32 + hints.socktype = SOCK_STREAM + hints.protocol = IPPROTO_TCP + hints.flags = AI_PASSIVE if getaddrinfo(nil, to_c_string("8080"), ^hints, ^res) != 0 { - fmt.println("getaddrinfo failed: ", WSAGetLastError()); - return; + fmt.println("getaddrinfo failed: ", WSAGetLastError()) + return } - defer freeaddrinfo(res); + defer freeaddrinfo(res) - s = socket(res.family, res.socktype, res.protocol); + s = socket(res.family, res.socktype, res.protocol) if s == INVALID_SOCKET { - fmt.println("socket failed: ", WSAGetLastError()); - return; + fmt.println("socket failed: ", WSAGetLastError()) + return } - defer closesocket(s); + defer closesocket(s) - bind(s, res.addr, res.addrlen as i32); - listen(s, SOMAXCONN); + bind(s, res.addr, res.addrlen as i32) + listen(s, SOMAXCONN) - client = accept(s, nil, 0); + client = accept(s, nil, 0) if client == INVALID_SOCKET { - fmt.println("socket failed: ", WSAGetLastError()); - return; + fmt.println("socket failed: ", WSAGetLastError()) + return } - defer closesocket(client); + defer closesocket(client) html := `HTTP/1.1 200 OK @@ -154,27 +154,27 @@ Content-type: text/html <h1 style="color: orange;">Odin Server Demo</h1> </body> </html> -`; +` - buf: [1024]byte; + buf: [1024]byte for { - bytes := recv(client, ^buf[0], buf.count as i32, 0); + bytes := recv(client, ^buf[0], buf.count as i32, 0) if bytes > 0 { - // fmt.println(buf[:bytes] as string); - bytes_sent := send(client, html.data, (html.count-1) as i32, 0); + // fmt.println(buf[:bytes] as string) + bytes_sent := send(client, html.data, (html.count-1) as i32, 0) if bytes_sent == SOCKET_ERROR { - fmt.println("send failed: ", WSAGetLastError()); - return; + fmt.println("send failed: ", WSAGetLastError()) + return } - break; + break } else if bytes == 0 { - fmt.println("Connection closing..."); - break; + fmt.println("Connection closing...") + break } else { - fmt.println("recv failed: ", WSAGetLastError()); - return; + fmt.println("recv failed: ", WSAGetLastError()) + return } } - shutdown(client, SD_SEND); + shutdown(client, SD_SEND) } diff --git a/code/punity.odin b/code/punity.odin index 83d22854f..fb93189ec 100644 --- a/code/punity.odin +++ b/code/punity.odin @@ -1,34 +1,34 @@ -#import "win32.odin"; -#import "fmt.odin"; -#import "os.odin"; +#import "win32.odin" +#import "fmt.odin" +#import "os.odin" -CANVAS_WIDTH :: 128; -CANVAS_HEIGHT :: 128; -CANVAS_SCALE :: 3; -FRAME_TIME :: 1.0/30.0; -WINDOW_TITLE :: "Punity\x00"; +CANVAS_WIDTH :: 128 +CANVAS_HEIGHT :: 128 +CANVAS_SCALE :: 3 +FRAME_TIME :: 1.0/30.0 +WINDOW_TITLE :: "Punity\x00" -_ := compile_assert(CANVAS_WIDTH % 16 == 0); +_ := compile_assert(CANVAS_WIDTH % 16 == 0) -WINDOW_WIDTH :: CANVAS_WIDTH * CANVAS_SCALE; -WINDOW_HEIGHT :: CANVAS_HEIGHT * CANVAS_SCALE; +WINDOW_WIDTH :: CANVAS_WIDTH * CANVAS_SCALE +WINDOW_HEIGHT :: CANVAS_HEIGHT * CANVAS_SCALE -STACK_CAPACITY :: 1<<20; -STORAGE_CAPACITY :: 1<<20; +STACK_CAPACITY :: 1<<20 +STORAGE_CAPACITY :: 1<<20 -DRAW_LIST_RESERVE :: 128; +DRAW_LIST_RESERVE :: 128 -MAX_KEYS :: 256; +MAX_KEYS :: 256 Core :: struct { - stack: ^Bank; - storage: ^Bank; + stack: ^Bank + storage: ^Bank - running: bool; - key_modifiers: u32; - key_states: [MAX_KEYS]byte; - key_deltas: [MAX_KEYS]byte; + running: bool + key_modifiers: u32 + key_states: [MAX_KEYS]byte + key_deltas: [MAX_KEYS]byte perf_frame, perf_frame_inner, @@ -36,70 +36,70 @@ Core :: struct { perf_audio, perf_blit, perf_blit_cvt, - perf_blit_gdi: Perf_Span; + perf_blit_gdi: Perf_Span - frame: i64; + frame: i64 - canvas: Canvas; - draw_list: ^Draw_List; + canvas: Canvas + draw_list: ^Draw_List } Perf_Span :: struct { - stamp: f64; - delta: f32; + stamp: f64 + delta: f32 } Bank :: struct { - memory: []byte; - cursor: int; + memory: []byte + cursor: int } Bank_State :: struct { - state: Bank; - bank: ^Bank; + state: Bank + bank: ^Bank } Color :: raw_union { - using channels: struct{ a, b, g, r: byte; }; - rgba: u32; + using channels: struct{ a, b, g, r: byte; } + rgba: u32 } Palette :: struct { - colors: [256]Color; - colors_count: byte; + colors: [256]Color + colors_count: byte } Rect :: raw_union { using minmax: struct { - min_x, min_y, max_x, max_y: int; - }; + min_x, min_y, max_x, max_y: int + } using pos: struct { - left, top, right, bottom: int; - }; - e: [4]int; + left, top, right, bottom: int + } + e: [4]int } Bitmap :: struct { - pixels: []byte; - width: int; - height: int; + pixels: []byte + width: int + height: int } Font :: struct { - using bitmap: Bitmap; - char_width: int; - char_height: int; + using bitmap: Bitmap + char_width: int + char_height: int } Canvas :: struct { - using bitmap: ^Bitmap; - palette: Palette; - translate_x: int; - translate_y: int; - clip: Rect; - font: ^Font; + using bitmap: ^Bitmap + palette: Palette + translate_x: int + translate_y: int + clip: Rect + font: ^Font } DrawFlag :: enum { @@ -114,7 +114,7 @@ Draw_List :: struct { Item :: struct { } - items: []Item; + items: []Item } Key :: enum { @@ -272,77 +272,77 @@ Key :: enum { key_down :: proc(k: Key) -> bool { - return _core.key_states[k] != 0; + return _core.key_states[k] != 0 } key_pressed :: proc(k: Key) -> bool { - return (_core.key_deltas[k] != 0) && key_down(k); + return (_core.key_deltas[k] != 0) && key_down(k) } -win32_perf_count_freq := win32.GetQueryPerformanceFrequency(); +win32_perf_count_freq := win32.GetQueryPerformanceFrequency() time_now :: proc() -> f64 { - assert(win32_perf_count_freq != 0); + assert(win32_perf_count_freq != 0) - counter: i64; - win32.QueryPerformanceCounter(^counter); - result := counter as f64 / win32_perf_count_freq as f64; - return result; + counter: i64 + win32.QueryPerformanceCounter(^counter) + result := counter as f64 / win32_perf_count_freq as f64 + return result } -_core: Core; +_core: Core run :: proc(user_init, user_step: proc(c: ^Core)) { - using win32; + using win32 - _core.running = true; + _core.running = true win32_proc :: proc(hwnd: HWND, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT #no_inline #stdcall { win32_app_key_mods :: proc() -> u32 { - mods: u32 = 0; + mods: u32 = 0 if is_key_down(Key_Code.SHIFT) { - mods |= Key.MOD_SHIFT as u32; + mods |= Key.MOD_SHIFT as u32 } if is_key_down(Key_Code.CONTROL) { - mods |= Key.MOD_CONTROL as u32; + mods |= Key.MOD_CONTROL as u32 } if is_key_down(Key_Code.MENU) { - mods |= Key.MOD_ALT as u32; + mods |= Key.MOD_ALT as u32 } if is_key_down(Key_Code.LWIN) || is_key_down(Key_Code.RWIN) { - mods |= Key.MOD_SUPER as u32; + mods |= Key.MOD_SUPER as u32 } - return mods; + return mods } match msg { case WM_KEYDOWN: - _core.key_modifiers = win32_app_key_mods(); + _core.key_modifiers = win32_app_key_mods() if wparam < MAX_KEYS { - _core.key_states[wparam] = 1; - _core.key_deltas[wparam] = 1; + _core.key_states[wparam] = 1 + _core.key_deltas[wparam] = 1 } - return 0; + return 0 case WM_KEYUP: - _core.key_modifiers = win32_app_key_mods(); + _core.key_modifiers = win32_app_key_mods() if wparam < MAX_KEYS { - _core.key_states[wparam] = 0; - _core.key_deltas[wparam] = 1; + _core.key_states[wparam] = 0 + _core.key_deltas[wparam] = 1 } - return 0; + return 0 case WM_CLOSE: - PostQuitMessage(0); - _core.running = false; - return 0; + PostQuitMessage(0) + _core.running = false + return 0 } - return DefWindowProcA(hwnd, msg, wparam, lparam); + return DefWindowProcA(hwnd, msg, wparam, lparam) } @@ -354,26 +354,26 @@ run :: proc(user_init, user_step: proc(c: ^Core)) { wnd_proc = win32_proc, // wnd_proc = DefWindowProcA, background = GetStockObject(BLACK_BRUSH) as HBRUSH, - }; + } if RegisterClassExA(^window_class) == 0 { - fmt.fprintln(os.stderr, "RegisterClassExA failed"); - return; + fmt.fprintln(os.stderr, "RegisterClassExA failed") + return } - screen_width := GetSystemMetrics(SM_CXSCREEN); - screen_height := GetSystemMetrics(SM_CYSCREEN); + screen_width := GetSystemMetrics(SM_CXSCREEN) + screen_height := GetSystemMetrics(SM_CYSCREEN) - rc: RECT; - rc.left = (screen_width - WINDOW_WIDTH) / 2; - rc.top = (screen_height - WINDOW_HEIGHT) / 2; - rc.right = rc.left + WINDOW_WIDTH; - rc.bottom = rc.top + WINDOW_HEIGHT; + rc: RECT + rc.left = (screen_width - WINDOW_WIDTH) / 2 + rc.top = (screen_height - WINDOW_HEIGHT) / 2 + rc.right = rc.left + WINDOW_WIDTH + rc.bottom = rc.top + WINDOW_HEIGHT - style: u32 = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; - assert(AdjustWindowRect(^rc, style, 0) != 0); + style: u32 = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX + assert(AdjustWindowRect(^rc, style, 0) != 0) - wt := WINDOW_TITLE; + wt := WINDOW_TITLE win32_window := CreateWindowExA(0, window_class.class_name, @@ -382,101 +382,101 @@ run :: proc(user_init, user_step: proc(c: ^Core)) { rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, nil, nil, window_class.instance, - nil); + nil) if win32_window == nil { - fmt.fprintln(os.stderr, "CreateWindowExA failed"); - return; + fmt.fprintln(os.stderr, "CreateWindowExA failed") + return } - window_bmi: BITMAPINFO; - window_bmi.size = size_of(BITMAPINFO.HEADER) as u32; - window_bmi.width = CANVAS_WIDTH; - window_bmi.height = CANVAS_HEIGHT; - window_bmi.planes = 1; - window_bmi.bit_count = 32; - window_bmi.compression = BI_RGB; + window_bmi: BITMAPINFO + window_bmi.size = size_of(BITMAPINFO.HEADER) as u32 + window_bmi.width = CANVAS_WIDTH + window_bmi.height = CANVAS_HEIGHT + window_bmi.planes = 1 + window_bmi.bit_count = 32 + window_bmi.compression = BI_RGB - user_init(^_core); + user_init(^_core) - ShowWindow(win32_window, SW_SHOW); + ShowWindow(win32_window, SW_SHOW) - window_buffer := new_slice(u32, CANVAS_WIDTH * CANVAS_HEIGHT); - assert(window_buffer.data != nil); - defer free(window_buffer.data); + window_buffer := new_slice(u32, CANVAS_WIDTH * CANVAS_HEIGHT) + assert(window_buffer.data != nil) + defer free(window_buffer.data) for i := 0; i < window_buffer.count; i++ { - window_buffer[i] = 0xff00ff; + window_buffer[i] = 0xff00ff } - prev_time, curr_time,dt: f64; - prev_time = time_now(); - curr_time = time_now(); - total_time : f64 = 0; - offset_x := 0; - offset_y := 0; + prev_time, curr_time,dt: f64 + prev_time = time_now() + curr_time = time_now() + total_time : f64 = 0 + offset_x := 0 + offset_y := 0 - message: MSG; + message: MSG for _core.running { - curr_time = time_now(); - dt = curr_time - prev_time; - prev_time = curr_time; - total_time += dt; + curr_time = time_now() + dt = curr_time - prev_time + prev_time = curr_time + total_time += dt - offset_x += 1; - offset_y += 2; + offset_x += 1 + offset_y += 2 { - data: [128]byte; - buf := data[:0]; - fmt.bprintf(^buf, "Punity: % ms\x00", dt*1000); - win32.SetWindowTextA(win32_window, buf.data); + data: [128]byte + buf := data[:0] + fmt.bprintf(^buf, "Punity: % ms\x00", dt*1000) + win32.SetWindowTextA(win32_window, buf.data) } for y := 0; y < CANVAS_HEIGHT; y++ { for x := 0; x < CANVAS_WIDTH; x++ { - g := (x % 32) * 8; - b := (y % 32) * 8; - window_buffer[x + y*CANVAS_WIDTH] = (g << 8 | b) as u32; + g := (x % 32) * 8 + b := (y % 32) * 8 + window_buffer[x + y*CANVAS_WIDTH] = (g << 8 | b) as u32 } } - _core.key_deltas = nil; + _core.key_deltas = nil for PeekMessageA(^message, nil, 0, 0, PM_REMOVE) != 0 { if message.message == WM_QUIT { - _core.running = false; + _core.running = false } - TranslateMessage(^message); - DispatchMessageA(^message); + TranslateMessage(^message) + DispatchMessageA(^message) } - user_step(^_core); + user_step(^_core) - dc := GetDC(win32_window); + dc := GetDC(win32_window) StretchDIBits(dc, 0, 0, CANVAS_WIDTH * CANVAS_SCALE, CANVAS_HEIGHT * CANVAS_SCALE, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT, window_buffer.data, ^window_bmi, DIB_RGB_COLORS, - SRCCOPY); - ReleaseDC(win32_window, dc); + SRCCOPY) + ReleaseDC(win32_window, dc) { - delta := time_now() - prev_time; - ms := ((FRAME_TIME - delta) * 1000) as i32; + delta := time_now() - prev_time + ms := ((FRAME_TIME - delta) * 1000) as i32 if ms > 0 { - win32.Sleep(ms); + win32.Sleep(ms) } } - _core.frame++; + _core.frame++ } } diff --git a/core/_preload.odin b/core/_preload.odin index 103187096..6f31744ce 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -1,8 +1,8 @@ -#shared_global_scope; +#shared_global_scope -#import "os.odin"; -#import "fmt.odin"; -#import "mem.odin"; +#import "os.odin" +#import "fmt.odin" +#import "mem.odin" // IMPORTANT NOTE(bill): `type_info` & `type_info_val` cannot be used within a // #shared_global_scope due to the internals of the compiler. @@ -15,78 +15,78 @@ Type_Info :: union { Member :: type struct #ordered { name: string; // can be empty if tuple - type_info: ^Type_Info; + type_info: ^Type_Info offset: int; // offsets are not used in tuples } Record :: struct #ordered { - fields: []Member; + fields: []Member size: int; // in bytes align: int; // in bytes - packed: bool; - ordered: bool; + packed: bool + ordered: bool } Named: struct #ordered { - name: string; + name: string base: ^Type_Info; // This will _not_ be a Type_Info.Named - }; + } Integer: struct #ordered { size: int; // in bytes - signed: bool; - }; + signed: bool + } Float: struct #ordered { size: int; // in bytes - }; - Any: struct #ordered {}; - String: struct #ordered {}; - Boolean: struct #ordered {}; + } + Any: struct #ordered {} + String: struct #ordered {} + Boolean: struct #ordered {} Pointer: struct #ordered { elem: ^Type_Info; // nil -> rawptr - }; + } Maybe: struct #ordered { - elem: ^Type_Info; - }; + elem: ^Type_Info + } Procedure: struct #ordered { params: ^Type_Info; // Type_Info.Tuple results: ^Type_Info; // Type_Info.Tuple - variadic: bool; - }; + variadic: bool + } Array: struct #ordered { - elem: ^Type_Info; - elem_size: int; - count: int; - }; + elem: ^Type_Info + elem_size: int + count: int + } Slice: struct #ordered { - elem: ^Type_Info; - elem_size: int; - }; + elem: ^Type_Info + elem_size: int + } Vector: struct #ordered { - elem: ^Type_Info; - elem_size: int; - count: int; - align: int; - }; - Tuple: Record; - Struct: Record; - Union: Record; - Raw_Union: Record; + elem: ^Type_Info + elem_size: int + count: int + align: int + } + Tuple: Record + Struct: Record + Union: Record + Raw_Union: Record Enum: struct #ordered { - base: ^Type_Info; - values: []i64; - names: []string; - }; + base: ^Type_Info + values: []i64 + names: []string + } } type_info_base :: proc(info: ^Type_Info) -> ^Type_Info { if info == nil { - return nil; + return nil } - base := info; + base := info match type i : base { case Type_Info.Named: - base = i.base; + base = i.base } - return base; + return base } @@ -126,147 +126,147 @@ Allocator :: struct #ordered { old_memory: rawptr, old_size: int, flags: u64) -> rawptr - procedure: Proc; - data: rawptr; + procedure: Proc + data: rawptr } Context :: struct #ordered { - thread_id: int; + thread_id: int - allocator: Allocator; + allocator: Allocator - user_data: rawptr; - user_index: int; + user_data: rawptr + user_index: int } -#thread_local __context: Context; +#thread_local __context: Context -DEFAULT_ALIGNMENT :: align_of([vector 4]f32); +DEFAULT_ALIGNMENT :: align_of([vector 4]f32) __check_context :: proc() { - c := ^__context; + c := ^__context if c.allocator.procedure == nil { - c.allocator = default_allocator(); + c.allocator = default_allocator() } if c.thread_id == 0 { - c.thread_id = os.current_thread_id(); + c.thread_id = os.current_thread_id() } } alloc :: proc(size: int) -> rawptr #inline { return alloc_align(size, DEFAULT_ALIGNMENT); } alloc_align :: proc(size, alignment: int) -> rawptr #inline { - __check_context(); - a := context.allocator; - return a.procedure(a.data, Allocator.Mode.ALLOC, size, alignment, nil, 0, 0); + __check_context() + a := context.allocator + return a.procedure(a.data, Allocator.Mode.ALLOC, size, alignment, nil, 0, 0) } free :: proc(ptr: rawptr) #inline { - __check_context(); - a := context.allocator; + __check_context() + a := context.allocator if ptr != nil { - a.procedure(a.data, Allocator.Mode.FREE, 0, 0, ptr, 0, 0); + a.procedure(a.data, Allocator.Mode.FREE, 0, 0, ptr, 0, 0) } } free_all :: proc() #inline { - __check_context(); - a := context.allocator; - a.procedure(a.data, Allocator.Mode.FREE_ALL, 0, 0, nil, 0, 0); + __check_context() + a := context.allocator + a.procedure(a.data, Allocator.Mode.FREE_ALL, 0, 0, nil, 0, 0) } resize :: proc(ptr: rawptr, old_size, new_size: int) -> rawptr #inline { return resize_align(ptr, old_size, new_size, DEFAULT_ALIGNMENT); } resize_align :: proc(ptr: rawptr, old_size, new_size, alignment: int) -> rawptr #inline { - __check_context(); - a := context.allocator; - return a.procedure(a.data, Allocator.Mode.RESIZE, new_size, alignment, ptr, old_size, 0); + __check_context() + a := context.allocator + return a.procedure(a.data, Allocator.Mode.RESIZE, new_size, alignment, ptr, old_size, 0) } default_resize_align :: proc(old_memory: rawptr, old_size, new_size, alignment: int) -> rawptr { if old_memory == nil { - return alloc_align(new_size, alignment); + return alloc_align(new_size, alignment) } if new_size == 0 { - free(old_memory); - return nil; + free(old_memory) + return nil } if new_size == old_size { - return old_memory; + return old_memory } - new_memory := alloc_align(new_size, alignment); + new_memory := alloc_align(new_size, alignment) if new_memory == nil { - return nil; + return nil } - mem.copy(new_memory, old_memory, min(old_size, new_size));; - free(old_memory); - return new_memory; + mem.copy(new_memory, old_memory, min(old_size, new_size)); + free(old_memory) + return new_memory } default_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator.Mode, size, alignment: int, old_memory: rawptr, old_size: int, flags: u64) -> rawptr { - using Allocator.Mode; + using Allocator.Mode when false { match mode { case ALLOC: - 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); + 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) case FREE: - os.heap_free(mem.allocation_header(old_memory)); - return nil; + os.heap_free(mem.allocation_header(old_memory)) + return nil case FREE_ALL: // NOTE(bill): Does nothing case RESIZE: - 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); + 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) } } else { match mode { case ALLOC: - return os.heap_alloc(size); + return os.heap_alloc(size) case FREE: - os.heap_free(old_memory); - return nil; + os.heap_free(old_memory) + return nil case FREE_ALL: // NOTE(bill): Does nothing case RESIZE: - return os.heap_resize(old_memory, size); + return os.heap_resize(old_memory, size) } } - return nil; + return nil } default_allocator :: proc() -> Allocator { return Allocator{ procedure = default_allocator_proc, data = nil, - }; + } } @@ -281,16 +281,16 @@ default_allocator :: proc() -> Allocator { __string_eq :: proc(a, b: string) -> bool { if a.count != b.count { - return false; + return false } if a.data == b.data { - return true; + return true } - return mem.compare(a.data, b.data, a.count) == 0; + return mem.compare(a.data, b.data, a.count) == 0 } __string_cmp :: proc(a, b : string) -> int { - return mem.compare(a.data, b.data, min(a.count, b.count)); + return mem.compare(a.data, b.data, min(a.count, b.count)) } __string_ne :: proc(a, b: string) -> bool #inline { return !__string_eq(a, b); } @@ -302,37 +302,37 @@ __string_ge :: proc(a, b: string) -> bool #inline { return __string_cmp(a, b) >= __assert :: proc(file: string, line, column: int, msg: string) #inline { fmt.fprintf(os.stderr, "%(%:%) Runtime assertion: %\n", - file, line, column, msg); - __debug_trap(); + file, line, column, msg) + __debug_trap() } __bounds_check_error :: proc(file: string, line, column: int, index, count: int) { if 0 <= index && index < count { - return; + return } fmt.fprintf(os.stderr, "%(%:%) Index % is out of bounds range [0, %)\n", - file, line, column, index, count); - __debug_trap(); + file, line, column, index, count) + __debug_trap() } __slice_expr_error :: proc(file: string, line, column: int, low, high, max: int) { if 0 <= low && low <= high && high <= max { - return; + return } fmt.fprintf(os.stderr, "%(%:%) Invalid slice indices: [%:%:%]\n", - file, line, column, low, high, max); - __debug_trap(); + file, line, column, low, high, max) + __debug_trap() } __substring_expr_error :: proc(file: string, line, column: int, low, high: int) { if 0 <= low && low <= high { - return; + return } fmt.fprintf(os.stderr, "%(%:%) Invalid substring indices: [%:%:%]\n", - file, line, column, low, high); - __debug_trap(); + file, line, column, low, high) + __debug_trap() } __enum_to_string :: proc(info: ^Type_Info, value: i64) -> string { @@ -341,11 +341,11 @@ __enum_to_string :: proc(info: ^Type_Info, value: i64) -> string { // TODO(bill): Search faster than linearly for i := 0; i < ti.values.count; i++ { if ti.values[i] == value { - return ti.names[i]; + return ti.names[i] } } } - return ""; + return "" } diff --git a/core/_soft_numbers.odin b/core/_soft_numbers.odin index d599265a5..305d82011 100644 --- a/core/_soft_numbers.odin +++ b/core/_soft_numbers.odin @@ -1,156 +1,156 @@ -#shared_global_scope; +#shared_global_scope -#import "fmt.odin"; +#import "fmt.odin" __u128_mod :: proc(a, b: u128) -> u128 #link_name "__umodti3" { - _, r := __u128_quo_mod(a, b); - return r; + _, r := __u128_quo_mod(a, b) + return r } __u128_quo :: proc(a, b: u128) -> u128 #link_name "__udivti3" { - n, _ := __u128_quo_mod(a, b); - return n; + n, _ := __u128_quo_mod(a, b) + return n } __i128_mod :: proc(a, b: i128) -> i128 #link_name "__modti3" { - _, r := __i128_quo_mod(a, b); - return r; + _, r := __i128_quo_mod(a, b) + return r } __i128_quo :: proc(a, b: i128) -> i128 #link_name "__divti3" { - n, _ := __i128_quo_mod(a, b); - return n; + n, _ := __i128_quo_mod(a, b) + return n } __i128_quo_mod :: proc(a, b: i128) -> (i128, i128) #link_name "__divmodti4" { - s := b >> 127; - b = (b ~ s) - s; - s = a >> 127; - a = (a ~ s) - s; + s := b >> 127 + b = (b ~ s) - s + s = a >> 127 + a = (a ~ s) - s - n, r := __u128_quo_mod(a as u128, b as u128); - return (n as i128 ~ s) - s, (r as i128 ~ s) - s; + n, r := __u128_quo_mod(a as u128, b as u128) + return (n as i128 ~ s) - s, (r as i128 ~ s) - s } __u128_quo_mod :: proc(a, b: u128) -> (u128, u128) #link_name "__udivmodti4" { clz :: proc(x: u64) -> u64 { clz_u64 :: proc(x: u64, is_zero_undef: bool) -> u64 #foreign "llvm.ctlz.i64" - return clz_u64(x, false); + return clz_u64(x, false) } ctz :: proc(x: u64) -> u64 { ctz_u64 :: proc(x: u64, is_zero_undef: bool) -> u64 #foreign "llvm.cttz.i64" - return ctz_u64(x, false); + return ctz_u64(x, false) } u128_lo_hi :: raw_union { - all: u128; - using _lohi: struct {lo, hi: u64;}; + all: u128 + using _lohi: struct {lo, hi: u64;} } - n, d, q, r: u128_lo_hi; - sr: u64; + n, d, q, r: u128_lo_hi + sr: u64 - n.all = a; - d.all = b; + n.all = a + d.all = b if n.hi == 0 { if d.hi == 0 { - return (n.lo / d.lo) as u128, (n.lo % d.lo) as u128; + return (n.lo / d.lo) as u128, (n.lo % d.lo) as u128 } - return 0, n.lo as u128; + return 0, n.lo as u128 } if d.lo == 0 { if d.hi == 0 { - return (n.hi / d.lo) as u128, (n.hi % d.lo) as u128; + return (n.hi / d.lo) as u128, (n.hi % d.lo) as u128 } if n.lo == 0 { - r.hi = n.hi % d.hi; - r.lo = 0; - return (n.hi / d.hi) as u128, r.all; + r.hi = n.hi % d.hi + r.lo = 0 + return (n.hi / d.hi) as u128, r.all } if (d.hi & (d.hi-1)) == 0 { - r.lo = n.lo; - r.hi = n.hi & (d.hi-1); - return (n.hi >> ctz(d.hi)) as u128, r.all; + r.lo = n.lo + r.hi = n.hi & (d.hi-1) + return (n.hi >> ctz(d.hi)) as u128, r.all } - sr = clz(d.hi) - clz(n.hi); + sr = clz(d.hi) - clz(n.hi) if sr > 64 - 2 { - return 0, n.all; + return 0, n.all } - sr++; - q.lo = 0; - q.hi = n.lo << (64-sr); - r.hi = n.hi >> sr; - r.lo = (n.hi << (64-sr)) | (n.lo >> sr); + sr++ + q.lo = 0 + q.hi = n.lo << (64-sr) + r.hi = n.hi >> sr + r.lo = (n.hi << (64-sr)) | (n.lo >> sr) } else { if d.hi == 0 { if (d.lo & (d.lo - 1)) == 0 { - rem := (n.lo % (d.lo - 1)) as u128; + rem := (n.lo % (d.lo - 1)) as u128 if d.lo == 1 { - return n.all, rem; + return n.all, rem } - sr = ctz(d.lo); - q.hi = n.hi >> sr; - q.lo = (n.hi << (64-sr)) | (n.lo >> sr); - return q.all, rem; + sr = ctz(d.lo) + q.hi = n.hi >> sr + q.lo = (n.hi << (64-sr)) | (n.lo >> sr) + return q.all, rem } - sr = 1 + 64 + clz(d.lo) - clz(n.hi); + sr = 1 + 64 + clz(d.lo) - clz(n.hi) - q.all = n.all << (128-sr); - r.all = n.all >> sr; + q.all = n.all << (128-sr) + r.all = n.all >> sr if sr == 64 { - q.lo = 0; - q.hi = n.lo; - r.hi = 0; - r.lo = n.hi; + q.lo = 0 + q.hi = n.lo + r.hi = 0 + r.lo = n.hi } else if sr < 64 { - q.lo = 0; - q.hi = n.lo << (64-sr); - r.hi = n.hi >> sr; - r.lo = (n.hi << (64-sr)) | (n.lo >> sr); + q.lo = 0 + q.hi = n.lo << (64-sr) + r.hi = n.hi >> sr + r.lo = (n.hi << (64-sr)) | (n.lo >> sr) } else { - q.lo = n.lo << (128-sr); - q.hi = (n.hi << (128-sr)) | (n.lo >> (sr-64)); - r.hi = 0; - r.lo = n.hi >> (sr-64); + q.lo = n.lo << (128-sr) + q.hi = (n.hi << (128-sr)) | (n.lo >> (sr-64)) + r.hi = 0 + r.lo = n.hi >> (sr-64) } } else { - sr = clz(d.hi) - clz(n.hi); + sr = clz(d.hi) - clz(n.hi) if sr > 64-1 { - return 0, n.all; + return 0, n.all } - sr++; - q.lo = 0; - q.hi = n.lo << (64-sr); - r.all = n.all >> sr; + sr++ + q.lo = 0 + q.hi = n.lo << (64-sr) + r.all = n.all >> sr if sr < 64 { - r.hi = n.hi >> sr; - r.lo = (n.hi << (64-sr)) | (n.lo >> sr); + r.hi = n.hi >> sr + r.lo = (n.hi << (64-sr)) | (n.lo >> sr) } else { - r.hi = 0; - r.lo = n.hi; + r.hi = 0 + r.lo = n.hi } } } - carry: u64; + carry: u64 for ; sr > 0; sr-- { - r.hi = (r.hi << 1) | (r.lo >> (64-1)); - r.lo = (r.lo << 1) | (r.hi >> (64-1)); - q.hi = (q.hi << 1) | (q.lo >> (64-1)); - q.lo = (q.lo << 1) | carry; + r.hi = (r.hi << 1) | (r.lo >> (64-1)) + r.lo = (r.lo << 1) | (r.hi >> (64-1)) + q.hi = (q.hi << 1) | (q.lo >> (64-1)) + q.lo = (q.lo << 1) | carry - carry = 0; + carry = 0 if r.all >= d.all { - r.all -= d.all; - carry = 1; + r.all -= d.all + carry = 1 } } - q.all = (q.all << 1) | (carry as u128); - return q.all, r.all; + q.all = (q.all << 1) | (carry as u128) + return q.all, r.all } diff --git a/core/fmt.odin b/core/fmt.odin index 2e6c8926f..70a78f527 100644 --- a/core/fmt.odin +++ b/core/fmt.odin @@ -1,592 +1,595 @@ -#import "os.odin"; -#import "mem.odin"; -#import "utf8.odin"; +#import "os.odin" +#import "mem.odin" +#import "utf8.odin" -PRINT_BUF_SIZE :: 1<<12; +PRINT_BUF_SIZE :: 1<<12 fprint :: proc(f: ^os.File, args: ..any) -> int { - data: [PRINT_BUF_SIZE]byte; - buf := data[:0]; - bprint(^buf, ..args); - os.write(f, buf); - return buf.count; + data: [PRINT_BUF_SIZE]byte + buf := data[:0] + bprint(^buf, ..args) + os.write(f, buf) + return buf.count } fprintln :: proc(f: ^os.File, args: ..any) -> int { - data: [PRINT_BUF_SIZE]byte; - buf := data[:0]; - bprintln(^buf, ..args); - os.write(f, buf); - return buf.count; + data: [PRINT_BUF_SIZE]byte + buf := data[:0] + bprintln(^buf, ..args) + os.write(f, buf) + return buf.count } fprintf :: proc(f: ^os.File, fmt: string, args: ..any) -> int { - data: [PRINT_BUF_SIZE]byte; - buf := data[:0]; - bprintf(^buf, fmt, ..args); - os.write(f, buf); - return buf.count; + data: [PRINT_BUF_SIZE]byte + buf := data[:0] + bprintf(^buf, fmt, ..args) + os.write(f, buf) + return buf.count } print :: proc(args: ..any) -> int { - return fprint(os.stdout, ..args); + return fprint(os.stdout, ..args) } println :: proc(args: ..any) -> int { - return fprintln(os.stdout, ..args); + return fprintln(os.stdout, ..args) } printf :: proc(fmt: string, args: ..any) -> int { - return fprintf(os.stdout, fmt, ..args); + return fprintf(os.stdout, fmt, ..args) } fprint_type :: proc(f: ^os.File, info: ^Type_Info) { - data: [PRINT_BUF_SIZE]byte; - buf := data[:0]; - bprint_type(^buf, info); - os.write(f, buf); + data: [PRINT_BUF_SIZE]byte + buf := data[:0] + bprint_type(^buf, info) + os.write(f, buf) } print_byte_buffer :: proc(buf: ^[]byte, b: []byte) { if buf.count < buf.capacity { - 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; + mem.copy(buf.data + buf.count, b.data, n) + buf.count += n } } } bprint_string :: proc(buf: ^[]byte, s: string) { - print_byte_buffer(buf, s as []byte); + print_byte_buffer(buf, s as []byte) } byte_reverse :: proc(b: []byte) { - n := b.count; + n := b.count for i := 0; i < n/2; i++ { - b[i], b[n-1-i] = b[n-1-i], b[i]; + b[i], b[n-1-i] = b[n-1-i], b[i] } } bprint_rune :: proc(buf: ^[]byte, r: rune) { - b, n := utf8.encode_rune(r); - bprint_string(buf, b[:n] as string); + b, n := utf8.encode_rune(r) + bprint_string(buf, b[:n] as string) } bprint_space :: proc(buf: ^[]byte) { bprint_rune(buf, ' '); } bprint_nl :: proc(buf: ^[]byte) { bprint_rune(buf, '\n'); } -__NUM_TO_CHAR_TABLE := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$"; +__NUM_TO_CHAR_TABLE := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$" bprint_bool :: proc(buffer: ^[]byte, b : bool) { - if b { bprint_string(buffer, "true"); } - else { bprint_string(buffer, "false"); } + if b { + bprint_string(buffer, "true") + } else { + bprint_string(buffer, "false") + } } bprint_pointer :: proc(buffer: ^[]byte, p: rawptr) #inline { - bprint_string(buffer, "0x"); - bprint_u64(buffer, p as uint as u64); + bprint_string(buffer, "0x") + bprint_u64(buffer, p as uint as u64) } bprint_f16 :: proc(buffer: ^[]byte, f: f32) #inline { print__f64(buffer, f as f64, 4); } bprint_f32 :: proc(buffer: ^[]byte, f: f32) #inline { print__f64(buffer, f as f64, 7); } bprint_f64 :: proc(buffer: ^[]byte, f: f64) #inline { print__f64(buffer, f as f64, 16); } bprint_u64 :: proc(buffer: ^[]byte, value: u64) { - i := value; - buf: [20]byte; - len := 0; + i := value + buf: [20]byte + len := 0 if i == 0 { - buf[len] = '0'; - len++; + buf[len] = '0' + len++ } for i > 0 { - buf[len] = __NUM_TO_CHAR_TABLE[i % 10]; - len++; - i /= 10; + buf[len] = __NUM_TO_CHAR_TABLE[i % 10] + len++ + i /= 10 } - byte_reverse(buf[:len]); - bprint_string(buffer, buf[:len] as string); + byte_reverse(buf[:len]) + bprint_string(buffer, buf[:len] as string) } bprint_i64 :: proc(buffer: ^[]byte, value: i64) { // TODO(bill): Cleanup printing - i := value; + i := value if i < 0 { - i = -i; - bprint_rune(buffer, '-'); + i = -i + bprint_rune(buffer, '-') } - bprint_u64(buffer, i as u64); + bprint_u64(buffer, i as u64) } bprint_u128 :: proc(buffer: ^[]byte, value: u128) { - a := value transmute [2]u64; + a := value transmute [2]u64 if a[1] != 0 { - bprint_u64(buffer, a[1]); + bprint_u64(buffer, a[1]) } - bprint_u64(buffer, a[0]); + bprint_u64(buffer, a[0]) } bprint_i128 :: proc(buffer: ^[]byte, value: i128) { - i := value; + i := value if i < 0 { - i = -i; - bprint_rune(buffer, '-'); + i = -i + bprint_rune(buffer, '-') } - bprint_u128(buffer, i as u128); + bprint_u128(buffer, i as u128) } print__f64 :: proc(buffer: ^[]byte, value: f64, decimal_places: int) { - f := value; + f := value if f == 0 { - bprint_rune(buffer, '0'); - return; + bprint_rune(buffer, '0') + return } if f < 0 { - bprint_rune(buffer, '-'); - f = -f; + bprint_rune(buffer, '-') + f = -f } - i := f as u64; - bprint_u64(buffer, i); - f -= i as f64; + i := f as u64 + bprint_u64(buffer, i) + f -= i as f64 - bprint_rune(buffer, '.'); + bprint_rune(buffer, '.') - 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); - f -= i as f64 / mult; - mult *= 10; + i = (f * mult) as u64 + bprint_u64(buffer, i as u64) + f -= i as f64 / mult + mult *= 10 } } bprint_type :: proc(buf: ^[]byte, ti: ^Type_Info) { if ti == nil { - return; + return } - using Type_Info; + using Type_Info match type info : ti { case Named: - bprint_string(buf, info.name); + bprint_string(buf, info.name) case Integer: match { case ti == type_info(int): - bprint_string(buf, "int"); + bprint_string(buf, "int") case ti == type_info(uint): - bprint_string(buf, "uint"); + bprint_string(buf, "uint") default: if info.signed { - bprint_string(buf, "i"); + bprint_string(buf, "i") } else { - bprint_string(buf, "u"); + bprint_string(buf, "u") } - bprint_u64(buf, 8*info.size as u64); + bprint_u64(buf, 8*info.size as u64) } case Float: match info.size { - case 4: bprint_string(buf, "f32"); - case 8: bprint_string(buf, "f64"); + case 4: bprint_string(buf, "f32") + case 8: bprint_string(buf, "f64") } - case String: bprint_string(buf, "string"); - case Boolean: bprint_string(buf, "bool"); + case String: bprint_string(buf, "string") + case Boolean: bprint_string(buf, "bool") case Pointer: if info.elem == nil { - bprint_string(buf, "rawptr"); + bprint_string(buf, "rawptr") } else { - bprint_string(buf, "^"); - bprint_type(buf, info.elem); + bprint_string(buf, "^") + bprint_type(buf, info.elem) } case Maybe: - bprint_string(buf, "?"); - bprint_type(buf, info.elem); + bprint_string(buf, "?") + bprint_type(buf, info.elem) case Procedure: - bprint_string(buf, "proc"); + bprint_string(buf, "proc") if info.params == nil { - bprint_string(buf, "()"); + bprint_string(buf, "()") } else { - 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); + bprint_type(buf, info.params) if count == 1 { bprint_string(buf, ")"); } } if info.results != nil { - bprint_string(buf, " -> "); - bprint_type(buf, info.results); + bprint_string(buf, " -> ") + bprint_type(buf, info.results) } case Tuple: - count := info.fields.count; + count := info.fields.count if count != 1 { bprint_string(buf, "("); } for i := 0; i < count; i++ { if i > 0 { bprint_string(buf, ", "); } - f := info.fields[i]; + f := info.fields[i] if f.name.count > 0 { - bprint_string(buf, f.name); - bprint_string(buf, ": "); + bprint_string(buf, f.name) + bprint_string(buf, ": ") } - bprint_type(buf, f.type_info); + bprint_type(buf, f.type_info) } if count != 1 { bprint_string(buf, ")"); } case Array: - bprint_string(buf, "["); - bprint_i64(buf, info.count as i64); - bprint_string(buf, "]"); - bprint_type(buf, info.elem); + bprint_string(buf, "[") + bprint_i64(buf, info.count as i64) + bprint_string(buf, "]") + bprint_type(buf, info.elem) case Slice: - bprint_string(buf, "["); - bprint_string(buf, "]"); - bprint_type(buf, info.elem); + bprint_string(buf, "[") + bprint_string(buf, "]") + bprint_type(buf, info.elem) case Vector: - bprint_string(buf, "[vector "); - bprint_i64(buf, info.count as i64); - bprint_string(buf, "]"); - bprint_type(buf, info.elem); + bprint_string(buf, "[vector ") + bprint_i64(buf, info.count as i64) + bprint_string(buf, "]") + bprint_type(buf, info.elem) case Struct: - bprint_string(buf, "struct "); + bprint_string(buf, "struct ") if info.packed { bprint_string(buf, "#packed "); } if info.ordered { bprint_string(buf, "#ordered "); } - bprint_string(buf, "{"); + bprint_string(buf, "{") for i := 0; i < info.fields.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - bprint_any(buf, info.fields[i].name); - bprint_string(buf, ": "); - bprint_type(buf, info.fields[i].type_info); + bprint_any(buf, info.fields[i].name) + bprint_string(buf, ": ") + bprint_type(buf, info.fields[i].type_info) } - bprint_string(buf, "}"); + bprint_string(buf, "}") case Union: - bprint_string(buf, "union {"); + bprint_string(buf, "union {") for i := 0; i < info.fields.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - bprint_any(buf, info.fields[i].name); - bprint_string(buf, ": "); - bprint_type(buf, info.fields[i].type_info); + bprint_any(buf, info.fields[i].name) + bprint_string(buf, ": ") + bprint_type(buf, info.fields[i].type_info) } - bprint_string(buf, "}"); + bprint_string(buf, "}") case Raw_Union: - bprint_string(buf, "raw_union {"); + bprint_string(buf, "raw_union {") for i := 0; i < info.fields.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - bprint_any(buf, info.fields[i].name); - bprint_string(buf, ": "); - bprint_type(buf, info.fields[i].type_info); + bprint_any(buf, info.fields[i].name) + bprint_string(buf, ": ") + bprint_type(buf, info.fields[i].type_info) } - bprint_string(buf, "}"); + bprint_string(buf, "}") case Enum: - bprint_string(buf, "enum "); - bprint_type(buf, info.base); - bprint_string(buf, "{}"); + bprint_string(buf, "enum ") + bprint_type(buf, info.base) + bprint_string(buf, "{}") } } make_any :: proc(type_info: ^Type_Info, data: rawptr) -> any { - a: any; - a.type_info = type_info; - a.data = data; - return a; + a: any + a.type_info = type_info + a.data = data + return a } bprint_any :: proc(buf: ^[]byte, arg: any) { if arg.type_info == nil { - bprint_string(buf, "<nil>"); - return; + bprint_string(buf, "<nil>") + return } if arg.data == nil { - bprint_string(buf, "<nil>"); - return; + bprint_string(buf, "<nil>") + return } - using Type_Info; + using Type_Info match type info : arg.type_info { case Named: - 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, "{"); + bprint_string(buf, info.name) + bprint_string(buf, "{") for i := 0; i < b.fields.count; i++ { - f := b.fields[i]; + f := b.fields[i] if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - bprint_string(buf, f.name); - // bprint_any(buf, f.offset); - bprint_string(buf, " = "); - data := arg.data as ^byte + f.offset; - bprint_any(buf, make_any(f.type_info, data)); + bprint_string(buf, f.name) + // bprint_any(buf, f.offset) + bprint_string(buf, " = ") + data := arg.data as ^byte + f.offset + bprint_any(buf, make_any(f.type_info, data)) } - bprint_string(buf, "}"); + bprint_string(buf, "}") default: - bprint_any(buf, a); + bprint_any(buf, a) } case Integer: match type i : arg { - case i8: bprint_i64(buf, i as i64); - case u8: bprint_u64(buf, i as u64); - case i16: bprint_i64(buf, i as i64); - case u16: bprint_u64(buf, i as u64); - case i32: bprint_i64(buf, i as i64); - case u32: bprint_u64(buf, i as u64); - case i64: bprint_i64(buf, i); - case u64: bprint_u64(buf, i); - case i128: bprint_i128(buf, i); - case u128: bprint_u128(buf, i); + case i8: bprint_i64(buf, i as i64) + case u8: bprint_u64(buf, i as u64) + case i16: bprint_i64(buf, i as i64) + case u16: bprint_u64(buf, i as u64) + case i32: bprint_i64(buf, i as i64) + case u32: bprint_u64(buf, i as u64) + case i64: bprint_i64(buf, i) + case u64: bprint_u64(buf, i) + case i128: bprint_i128(buf, i) + case u128: bprint_u128(buf, i) - case int: bprint_i64(buf, i as i64); - case uint: bprint_u64(buf, i as u64); + case int: bprint_i64(buf, i as i64) + case uint: bprint_u64(buf, i as u64) } case Float: match type f : arg { - // case f16: bprint_f64(buf, f as f64); - case f32: bprint_f32(buf, f); - case f64: bprint_f64(buf, f); - // case f128: bprint_f64(buf, f as f64); + // case f16: bprint_f64(buf, f as f64) + case f32: bprint_f32(buf, f) + case f64: bprint_f64(buf, f) + // case f128: bprint_f64(buf, f as f64) } case String: match type s : arg { - case string: bprint_string(buf, s); + case string: bprint_string(buf, s) } case Boolean: match type b : arg { - case bool: bprint_bool(buf, b); + case bool: bprint_bool(buf, b) } case Pointer: match type p : arg { - case ^Type_Info: bprint_type(buf, p); - default: bprint_pointer(buf, (arg.data as ^rawptr)^); + case ^Type_Info: bprint_type(buf, p) + default: bprint_pointer(buf, (arg.data as ^rawptr)^) } case Maybe: - size := mem.size_of_type_info(info.elem); - 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)); + bprint_any(buf, make_any(info.elem, arg.data)) } else { - bprint_string(buf, "nil"); + bprint_string(buf, "nil") } case Enum: - value: i64 = 0; + value: i64 = 0 match type i : make_any(info.base, arg.data) { - case i8: value = i as i64; - case i16: value = i as i64; - case i32: value = i as i64; - case i64: value = i as i64; - case u8: value = i as i64; - case u16: value = i as i64; - case u32: value = i as i64; - case u64: value = i as i64; + case i8: value = i as i64 + case i16: value = i as i64 + case i32: value = i as i64 + case i64: value = i as i64 + case u8: value = i as i64 + case u16: value = i as i64 + case u32: value = i as i64 + case u64: value = i as i64 } - bprint_string(buf, __enum_to_string(arg.type_info, value)); + bprint_string(buf, __enum_to_string(arg.type_info, value)) case Array: - bprintf(buf, "[%]%{", info.count, info.elem); - defer bprint_string(buf, "}"); + bprintf(buf, "[%]%{", info.count, info.elem) + defer bprint_string(buf, "}") for i := 0; i < info.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - data := arg.data as ^byte + i*info.elem_size; - bprint_any(buf, make_any(info.elem, data)); + data := arg.data as ^byte + i*info.elem_size + bprint_any(buf, make_any(info.elem, data)) } case Slice: - slice := arg.data as ^[]byte; - bprintf(buf, "[]%{", info.elem); - defer bprint_string(buf, "}"); + slice := arg.data as ^[]byte + bprintf(buf, "[]%{", info.elem) + defer bprint_string(buf, "}") for i := 0; i < slice.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - data := slice.data + i*info.elem_size; - bprint_any(buf, make_any(info.elem, data)); + data := slice.data + i*info.elem_size + bprint_any(buf, make_any(info.elem, data)) } case Vector: is_bool :: proc(type_info: ^Type_Info) -> bool { match type info : type_info { case Named: - return is_bool(info.base); + return is_bool(info.base) case Boolean: - return true; + return true } - return false; + return false } - bprintf(buf, "[vector %]%{", info.count, info.elem); - defer bprint_string(buf, "}"); + bprintf(buf, "[vector %]%{", info.count, info.elem) + defer bprint_string(buf, "}") if is_bool(info.elem) { - return; + return } for i := 0; i < info.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - data := arg.data as ^byte + i*info.elem_size; - bprint_any(buf, make_any(info.elem, data)); + data := arg.data as ^byte + i*info.elem_size + bprint_any(buf, make_any(info.elem, data)) } case Struct: - bprintf(buf, "%{", arg.type_info); - defer bprint_string(buf, "}"); + bprintf(buf, "%{", arg.type_info) + defer bprint_string(buf, "}") for i := 0; i < info.fields.count; i++ { if i > 0 { - bprint_string(buf, ", "); + bprint_string(buf, ", ") } - bprint_string(buf, info.fields[i].name); - bprint_string(buf, " = "); - data := arg.data as ^byte + info.fields[i].offset; - ti := info.fields[i].type_info; - bprint_any(buf, make_any(ti, data)); + bprint_string(buf, info.fields[i].name) + bprint_string(buf, " = ") + data := arg.data as ^byte + info.fields[i].offset + ti := info.fields[i].type_info + bprint_any(buf, make_any(ti, data)) } case Union: - bprint_string(buf, "(union)"); + bprint_string(buf, "(union)") case Raw_Union: - bprint_string(buf, "(raw_union)"); + bprint_string(buf, "(raw_union)") case Procedure: - bprint_type(buf, arg.type_info); - bprint_string(buf, " @ 0x"); - bprint_pointer(buf, (arg.data as ^rawptr)^); + bprint_type(buf, arg.type_info) + bprint_string(buf, " @ 0x") + bprint_pointer(buf, (arg.data as ^rawptr)^) } } bprintf :: proc(buf: ^[]byte, fmt: string, args: ..any) -> int { is_digit :: proc(r: rune) -> bool #inline { - return '0' <= r && r <= '9'; + return '0' <= r && r <= '9' } parse_int :: proc(s: string, offset: int) -> (int, int) { - result := 0; + result := 0 for ; offset < s.count; offset++ { - c := s[offset] as rune; + c := s[offset] as rune if !is_digit(c) { - break; + break } - result *= 10; - result += (c - '0') as int; + result *= 10 + result += (c - '0') as int } - return result, offset; + return result, offset } - prev := 0; - implicit_index := 0; + prev := 0 + implicit_index := 0 for i := 0; i < fmt.count; i++ { - r := fmt[i] as rune; - index := implicit_index; + r := fmt[i] as rune + index := implicit_index if r != '%' { - continue; + continue } - bprint_string(buf, fmt[prev:i]); + bprint_string(buf, fmt[prev:i]) i++; // Skip % if i < fmt.count { - next := fmt[i] as rune; + next := fmt[i] as rune if next == '%' { - bprint_string(buf, "%"); - i++; - prev = i; - continue; + bprint_string(buf, "%") + i++ + prev = i + continue } if is_digit(next) { - index, i = parse_int(fmt, i); + index, i = parse_int(fmt, i) } } if 0 <= index && index < args.count { - bprint_any(buf, args[index]); - implicit_index = index+1; + bprint_any(buf, args[index]) + implicit_index = index+1 } else { // TODO(bill): Error check index out bounds - bprint_string(buf, "<invalid>"); + bprint_string(buf, "<invalid>") } - prev = i; + prev = i } - bprint_string(buf, fmt[prev:]); - return buf.count; + bprint_string(buf, fmt[prev:]) + return buf.count } bprint :: proc(buf: ^[]byte, args: ..any) -> int { is_type_string :: proc(info: ^Type_Info) -> bool { - using Type_Info; + using Type_Info if info == nil { - return false; + return false } match type i : type_info_base(info) { case String: - return true; + return true } - return false; + return false } - prev_string := false; + prev_string := false for i := 0; i < args.count; i++ { - arg := args[i]; - is_string := arg.data != nil && is_type_string(arg.type_info); + arg := args[i] + is_string := arg.data != nil && is_type_string(arg.type_info) if i > 0 && !is_string && !prev_string { - bprint_space(buf); + bprint_space(buf) } - bprint_any(buf, arg); - prev_string = is_string; + bprint_any(buf, arg) + prev_string = is_string } - return buf.count; + return buf.count } bprintln :: proc(buf: ^[]byte, args: ..any) -> int { for i := 0; i < args.count; i++ { if i > 0 { - append(buf, ' '); + append(buf, ' ') } - bprint_any(buf, args[i]); + bprint_any(buf, args[i]) } - bprint_nl(buf); - return buf.count; + bprint_nl(buf) + return buf.count } diff --git a/core/hash.odin b/core/hash.odin index 9a827e1bb..d61b01a71 100644 --- a/core/hash.odin +++ b/core/hash.odin @@ -1,164 +1,164 @@ crc32 :: proc(data: rawptr, len: int) -> u32 { - result := ~(0 as u32); - s := slice_ptr(data as ^u8, len); + 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]; + b := s[i] as u32 + result = result>>8 ~ __CRC32_TABLE[(result ~ b) & 0xff] } - return ~result; + return ~result } crc64 :: proc(data: rawptr, len: int) -> u64 { - result := ~(0 as u64); - s := slice_ptr(data as ^u8, len); + 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]; + b := s[i] as u64 + result = result>>8 ~ __CRC64_TABLE[(result ~ b) & 0xff] } - return ~result; + return ~result } fnv32 :: proc(data: rawptr, len: int) -> u32 { - s := slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len) - h: u32 = 0x811c9dc5; + h: u32 = 0x811c9dc5 for i := 0; i < len; i++ { - h = (h * 0x01000193) ~ s[i] as u32; + h = (h * 0x01000193) ~ s[i] as u32 } - return h; + return h } fnv64 :: proc(data: rawptr, len: int) -> u64 { - s := slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len) - h: u64 = 0xcbf29ce484222325; + h: u64 = 0xcbf29ce484222325 for i := 0; i < len; i++ { - h = (h * 0x100000001b3) ~ s[i] as u64; + h = (h * 0x100000001b3) ~ s[i] as u64 } - return h; + return h } fnv32a :: proc(data: rawptr, len: int) -> u32 { - s := slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len) - h: u32 = 0x811c9dc5; + h: u32 = 0x811c9dc5 for i := 0; i < len; i++ { - h = (h ~ s[i] as u32) * 0x01000193; + h = (h ~ s[i] as u32) * 0x01000193 } - return h; + return h } fnv64a :: proc(data: rawptr, len: int) -> u64 { - s := slice_ptr(data as ^u8, len); + s := slice_ptr(data as ^u8, len) - h: u64 = 0xcbf29ce484222325; + h: u64 = 0xcbf29ce484222325 for i := 0; i < len; i++ { - h = (h ~ s[i] as u64) * 0x100000001b3; + h = (h ~ s[i] as u64) * 0x100000001b3 } - return h; + return h } murmur64 :: proc(data_: rawptr, len: int) -> u64 { - SEED :: 0x9747b28c; + SEED :: 0x9747b28c if size_of(int) == 8 { - m :: 0xc6a4a7935bd1e995; - r :: 47; + m :: 0xc6a4a7935bd1e995 + r :: 47 - h: u64 = SEED ~ (len as u64 * m); + h: u64 = SEED ~ (len as u64 * m) - data := slice_ptr(data_ as ^u64, len/size_of(u64)); - 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 i := 0; i < data.count; i++ { - k := data[i]; + k := data[i] - k *= m; - k ~= k>>r; - k *= m; + k *= m + k ~= k>>r + k *= m - h ~= k; - h *= m; + h ~= k + h *= m } match len & 7 { - case 7: h ~= data2[6] as u64 << 48; fallthrough; - case 6: h ~= data2[5] as u64 << 40; fallthrough; - case 5: h ~= data2[4] as u64 << 32; fallthrough; - case 4: h ~= data2[3] as u64 << 24; fallthrough; - case 3: h ~= data2[2] as u64 << 16; fallthrough; - case 2: h ~= data2[1] as u64 << 8; fallthrough; + case 7: h ~= data2[6] as u64 << 48; fallthrough + case 6: h ~= data2[5] as u64 << 40; fallthrough + case 5: h ~= data2[4] as u64 << 32; fallthrough + case 4: h ~= data2[3] as u64 << 24; fallthrough + case 3: h ~= data2[2] as u64 << 16; fallthrough + case 2: h ~= data2[1] as u64 << 8; fallthrough case 1: - h ~= data2[0] as u64; - h *= m; + h ~= data2[0] as u64 + h *= m } - h ~= h>>r; - h *= m; - h ~= h>>r; + h ~= h>>r + h *= m + h ~= h>>r - return h; + return h } else { - m :: 0x5bd1e995; - r :: 24; + m :: 0x5bd1e995 + r :: 24 - h1: u32 = SEED as u32 ~ len as u32; - h2: u32 = SEED >> 32; + h1: u32 = SEED as u32 ~ len as u32 + h2: u32 = SEED >> 32 - data := slice_ptr(data_ as ^u32, len/size_of(u32)); + data := slice_ptr(data_ as ^u32, len/size_of(u32)) - i := 0; + i := 0 for len >= 8 { - k1, k2: u32; - k1 = data[i]; i++; - k1 *= m; - k1 ~= k1>>r; - k1 *= m; - h1 *= m; - h1 ~= k1; - len -= 4; + k1, k2: u32 + k1 = data[i]; i++ + k1 *= m + k1 ~= k1>>r + k1 *= m + h1 *= m + h1 ~= k1 + len -= 4 - k2 = data[i]; i++; - k2 *= m; - k2 ~= k2>>r; - k2 *= m; - h2 *= m; - h2 ~= k2; - len -= 4; + k2 = data[i]; i++ + k2 *= m + k2 ~= k2>>r + k2 *= m + h2 *= m + h2 ~= k2 + len -= 4 } if (len >= 4) { - k1: u32; - k1 = data[i]; i++; - k1 *= m; - k1 ~= k1>>r; - k1 *= m; - h1 *= m; - h1 ~= k1; - len -= 4; + k1: u32 + k1 = data[i]; i++ + k1 *= m + k1 ~= k1>>r + k1 *= m + h1 *= m + h1 ~= k1 + len -= 4 } 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; - case 2: h2 ~= data8[1] as u32 << 8; fallthrough; + case 3: h2 ~= data8[2] as u32 << 16; fallthrough + case 2: h2 ~= data8[1] as u32 << 8; fallthrough case 1: - h2 ~= data8[0] as u32; - h2 *= m; + h2 ~= data8[0] as u32 + h2 *= m } - h1 ~= h2>>18; - h1 *= m; - h2 ~= h1>>22; - h2 *= m; - h1 ~= h2>>17; - h1 *= m; - h2 ~= h1>>19; - h2 *= m; + h1 ~= h2>>18 + h1 *= m + h2 ~= h1>>22 + h2 *= m + h1 ~= h2>>17 + h1 *= m + h2 ~= h1>>19 + h2 *= m - h := (h1 as u64)<<32 | h2 as u64; - return h; + h := (h1 as u64)<<32 | h2 as u64 + return h } } @@ -229,7 +229,7 @@ __CRC32_TABLE := [256]u32{ 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, -}; +} __CRC64_TABLE := [256]u64{ 0x0000000000000000, 0x42f0e1eba9ea3693, 0x85e1c3d753d46d26, 0xc711223cfa3e5bb5, 0x493366450e42ecdf, 0x0bc387aea7a8da4c, 0xccd2a5925d9681f9, 0x8e224479f47cb76a, @@ -295,4 +295,4 @@ __CRC64_TABLE := [256]u64{ 0xcf8b0890283e370c, 0x8d7be97b81d4019f, 0x4a6acb477bea5a2a, 0x089a2aacd2006cb9, 0x14dea25f3af9026d, 0x562e43b4931334fe, 0x913f6188692d6f4b, 0xd3cf8063c0c759d8, 0x5dedc41a34bbeeb2, 0x1f1d25f19d51d821, 0xd80c07cd676f8394, 0x9afce626ce85b507, -}; +} diff --git a/core/math.odin b/core/math.odin index a996e2320..9476eac21 100644 --- a/core/math.odin +++ b/core/math.odin @@ -1,29 +1,29 @@ -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 -Vec2 :: type [vector 2]f32; -Vec3 :: type [vector 3]f32; -Vec4 :: type [vector 4]f32; +Vec2 :: type [vector 2]f32 +Vec3 :: type [vector 3]f32 +Vec4 :: type [vector 4]f32 -Mat2 :: type [2]Vec2; -Mat3 :: type [3]Vec3; -Mat4 :: type [4]Vec4; +Mat2 :: type [2]Vec2 +Mat3 :: type [3]Vec3 +Mat4 :: type [4]Vec4 sqrt32 :: proc(x: f32) -> f32 #foreign "llvm.sqrt.f32" @@ -47,42 +47,42 @@ sign64 :: proc(x: f64) -> f64 { if x >= 0 { return +1; } return -1; } copy_sign32 :: proc(x, y: f32) -> f32 { - ix := x transmute u32; - iy := y transmute u32; - ix &= 0x7fffffff; - ix |= iy & 0x80000000; - return ix transmute f32; + ix := x transmute u32 + iy := y transmute u32 + ix &= 0x7fffffff + ix |= iy & 0x80000000 + return ix transmute f32 } round32 :: proc(x: f32) -> f32 { if x >= 0 { - return floor32(x + 0.5); + return floor32(x + 0.5) } - return ceil32(x - 0.5); + return ceil32(x - 0.5) } floor32 :: proc(x: f32) -> f32 { if x >= 0 { - return x as int as f32; + return x as int as f32 } - return (x-0.5) as int as f32; + return (x-0.5) as int as f32 } ceil32 :: proc(x: f32) -> f32 { if x < 0 { - return x as int as f32; + return x as int as f32 } - return ((x as int)+1) as f32; + return ((x as int)+1) as f32 } remainder32 :: proc(x, y: f32) -> f32 { - return x - round32(x/y) * y; + return x - round32(x/y) * y } fmod32 :: proc(x, y: f32) -> f32 { - y = abs(y); - result := remainder32(abs(x), y); + y = abs(y) + result := remainder32(abs(x), y) if sign32(result) < 0 { - result += y; + result += y } - return copy_sign32(result, x); + return copy_sign32(result, x) } @@ -97,9 +97,9 @@ dot3 :: proc(a, b: Vec3) -> f32 { c := a*b; return c.x + c.y + c.z; } dot4 :: proc(a, b: Vec4) -> f32 { c := a*b; return c.x + c.y + c.z + c.w; } cross3 :: proc(x, y: Vec3) -> Vec3 { - 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; + 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 } @@ -112,27 +112,27 @@ vec3_norm :: proc(v: Vec3) -> Vec3 { return v / Vec3{vec3_mag(v)}; } vec4_norm :: proc(v: Vec4) -> Vec4 { return v / Vec4{vec4_mag(v)}; } vec2_norm0 :: proc(v: Vec2) -> Vec2 { - m := vec2_mag(v); + m := vec2_mag(v) if m == 0 { - return Vec2{0}; + return Vec2{0} } - return v / Vec2{m}; + return v / Vec2{m} } vec3_norm0 :: proc(v: Vec3) -> Vec3 { - m := vec3_mag(v); + m := vec3_mag(v) if m == 0 { - return Vec3{0}; + return Vec3{0} } - return v / Vec3{m}; + return v / Vec3{m} } vec4_norm0 :: proc(v: Vec4) -> Vec4 { - m := vec4_mag(v); + m := vec4_mag(v) if m == 0 { - return Vec4{0}; + return Vec4{0} } - return v / Vec4{m}; + return v / Vec4{m} } @@ -143,29 +143,29 @@ mat4_identity :: proc() -> Mat4 { {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}, - }; + } } mat4_transpose :: proc(m: Mat4) -> Mat4 { for j := 0; j < 4; j++ { for i := 0; i < 4; i++ { - m[i][j], m[j][i] = m[j][i], m[i][j]; + m[i][j], m[j][i] = m[j][i], m[i][j] } } - return m; + return m } mat4_mul :: proc(a, b: Mat4) -> Mat4 { - c: Mat4; + 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] - + a[3][i]*b[j][3]; + + a[3][i]*b[j][3] } } - return c; + return c } mat4_mul_vec4 :: proc(m: Mat4, v: Vec4) -> Vec4 { @@ -174,197 +174,197 @@ mat4_mul_vec4 :: proc(m: Mat4, v: Vec4) -> Vec4 { m[0][1]*v.x + m[1][1]*v.y + m[2][1]*v.z + m[3][1]*v.w, m[0][2]*v.x + m[1][2]*v.y + m[2][2]*v.z + m[3][2]*v.w, m[0][3]*v.x + m[1][3]*v.y + m[2][3]*v.z + m[3][3]*v.w, - }; + } } mat4_inverse :: proc(m: Mat4) -> Mat4 { - o: Mat4; - - 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); - o[0][2] = +(m[1][0] * sf01 - m[1][1] * sf03 + m[1][3] * sf05); - o[0][3] = -(m[1][0] * sf02 - m[1][1] * sf04 + m[1][2] * sf05); - - o[1][0] = -(m[0][1] * sf00 - m[0][2] * sf01 + m[0][3] * sf02); - o[1][1] = +(m[0][0] * sf00 - m[0][2] * sf03 + m[0][3] * sf04); - o[1][2] = -(m[0][0] * sf01 - m[0][1] * sf03 + m[0][3] * sf05); - o[1][3] = +(m[0][0] * sf02 - m[0][1] * sf04 + m[0][2] * sf05); - - o[2][0] = +(m[0][1] * sf06 - m[0][2] * sf07 + m[0][3] * sf08); - o[2][1] = -(m[0][0] * sf06 - m[0][2] * sf09 + m[0][3] * sf10); - o[2][2] = +(m[0][0] * sf11 - m[0][1] * sf09 + m[0][3] * sf12); - o[2][3] = -(m[0][0] * sf08 - m[0][1] * sf10 + m[0][2] * sf12); - - o[3][0] = -(m[0][1] * sf13 - m[0][2] * sf14 + m[0][3] * sf15); - o[3][1] = +(m[0][0] * sf13 - m[0][2] * sf16 + m[0][3] * sf17); - 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); + o: Mat4 + + 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) + o[0][2] = +(m[1][0] * sf01 - m[1][1] * sf03 + m[1][3] * sf05) + o[0][3] = -(m[1][0] * sf02 - m[1][1] * sf04 + m[1][2] * sf05) + + o[1][0] = -(m[0][1] * sf00 - m[0][2] * sf01 + m[0][3] * sf02) + o[1][1] = +(m[0][0] * sf00 - m[0][2] * sf03 + m[0][3] * sf04) + o[1][2] = -(m[0][0] * sf01 - m[0][1] * sf03 + m[0][3] * sf05) + o[1][3] = +(m[0][0] * sf02 - m[0][1] * sf04 + m[0][2] * sf05) + + o[2][0] = +(m[0][1] * sf06 - m[0][2] * sf07 + m[0][3] * sf08) + o[2][1] = -(m[0][0] * sf06 - m[0][2] * sf09 + m[0][3] * sf10) + o[2][2] = +(m[0][0] * sf11 - m[0][1] * sf09 + m[0][3] * sf12) + o[2][3] = -(m[0][0] * sf08 - m[0][1] * sf10 + m[0][2] * sf12) + + o[3][0] = -(m[0][1] * sf13 - m[0][2] * sf14 + m[0][3] * sf15) + o[3][1] = +(m[0][0] * sf13 - m[0][2] * sf16 + m[0][3] * sf17) + 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) 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]); - - o[0][0] *= ood; - o[0][1] *= ood; - o[0][2] *= ood; - o[0][3] *= ood; - o[1][0] *= ood; - o[1][1] *= ood; - o[1][2] *= ood; - o[1][3] *= ood; - o[2][0] *= ood; - o[2][1] *= ood; - o[2][2] *= ood; - o[2][3] *= ood; - o[3][0] *= ood; - o[3][1] *= ood; - o[3][2] *= ood; - o[3][3] *= ood; - - return o; + m[0][3] * o[0][3]) + + o[0][0] *= ood + o[0][1] *= ood + o[0][2] *= ood + o[0][3] *= ood + o[1][0] *= ood + o[1][1] *= ood + o[1][2] *= ood + o[1][3] *= ood + o[2][0] *= ood + o[2][1] *= ood + o[2][2] *= ood + o[2][3] *= ood + o[3][0] *= ood + o[3][1] *= ood + o[3][2] *= ood + o[3][3] *= ood + + return o } mat4_translate :: proc(v: Vec3) -> Mat4 { - m := mat4_identity(); - m[3][0] = v.x; - m[3][1] = v.y; - m[3][2] = v.z; - m[3][3] = 1; - return m; + m := mat4_identity() + m[3][0] = v.x + m[3][1] = v.y + m[3][2] = v.z + m[3][3] = 1 + return m } mat4_rotate :: proc(v: Vec3, angle_radians: f32) -> Mat4 { - c := cos32(angle_radians); - s := sin32(angle_radians); + c := cos32(angle_radians) + s := sin32(angle_radians) - a := vec3_norm(v); - t := a * Vec3{1-c}; + a := vec3_norm(v) + t := a * Vec3{1-c} - 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; - rot[0][2] = 0 + t.x*a.z - s*a.y; - rot[0][3] = 0; + rot[0][0] = c + t.x*a.x + rot[0][1] = 0 + t.x*a.y + s*a.z + rot[0][2] = 0 + t.x*a.z - s*a.y + rot[0][3] = 0 - rot[1][0] = 0 + t.y*a.x - s*a.z; - rot[1][1] = c + t.y*a.y; - rot[1][2] = 0 + t.y*a.z + s*a.x; - rot[1][3] = 0; + rot[1][0] = 0 + t.y*a.x - s*a.z + rot[1][1] = c + t.y*a.y + rot[1][2] = 0 + t.y*a.z + s*a.x + rot[1][3] = 0 - rot[2][0] = 0 + t.z*a.x + s*a.y; - rot[2][1] = 0 + t.z*a.y - s*a.x; - rot[2][2] = c + t.z*a.z; - rot[2][3] = 0; + rot[2][0] = 0 + t.z*a.x + s*a.y + rot[2][1] = 0 + t.z*a.y - s*a.x + rot[2][2] = c + t.z*a.z + rot[2][3] = 0 - return rot; + return rot } mat4_scale :: proc(m: Mat4, v: Vec3) -> Mat4 { - m[0][0] = v.x; - m[1][1] = v.y; - m[2][2] = v.z; - return m; + m[0][0] = v.x + m[1][1] = v.y + m[2][2] = v.z + return m } mat4_scalef :: proc(m: Mat4, s: f32) -> Mat4 { - m[0][0] = s; - m[1][1] = s; - m[2][2] = s; - return m; + m[0][0] = s + m[1][1] = s + m[2][2] = s + return m } mat4_look_at :: proc(eye, centre, up: Vec3) -> Mat4 { - f := vec3_norm(centre - eye); - s := vec3_norm(cross3(f, up)); - u := cross3(s, f); + f := vec3_norm(centre - eye) + s := vec3_norm(cross3(f, up)) + u := cross3(s, f) - m: Mat4; + m: Mat4 - m[0] = Vec4{+s.x, +s.y, +s.z, 0}; - m[1] = Vec4{+u.x, +u.y, +u.z, 0}; - m[2] = Vec4{-f.x, -f.y, -f.z, 0}; - m[3] = Vec4{dot3(s, eye), dot3(u, eye), dot3(f, eye), 1}; + m[0] = Vec4{+s.x, +s.y, +s.z, 0} + m[1] = Vec4{+u.x, +u.y, +u.z, 0} + m[2] = Vec4{-f.x, -f.y, -f.z, 0} + m[3] = Vec4{dot3(s, eye), dot3(u, eye), dot3(f, eye), 1} - return m; + return m } mat4_perspective :: proc(fovy, aspect, near, far: f32) -> Mat4 { - 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); - m[2][3] = -1.0; - m[3][2] = -2.0*far*near / (far - near); - return m; + 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) + m[2][3] = -1.0 + m[3][2] = -2.0*far*near / (far - near) + return m } mat4_ortho3d :: proc(left, right, bottom, top, near, far: f32) -> Mat4 { - 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); - m[3][0] = -(right + left) / (right - left); - m[3][1] = -(top + bottom) / (top - bottom); - m[3][2] = -(far + near) / (far - near); + m[0][0] = +2.0 / (right - left) + m[1][1] = +2.0 / (top - bottom) + m[2][2] = -2.0 / (far - near) + m[3][0] = -(right + left) / (right - left) + m[3][1] = -(top + bottom) / (top - bottom) + m[3][2] = -(far + near) / (far - near) - return m; + return m } -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; - -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 +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 + +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 60335fe43..719c2c073 100644 --- a/core/mem.odin +++ b/core/mem.odin @@ -1,51 +1,51 @@ -#import "fmt.odin"; -#import "os.odin"; +#import "fmt.odin" +#import "os.odin" set :: proc(data: rawptr, value: i32, len: int) -> rawptr #link_name "__mem_set" { llvm_memset_64bit :: proc(dst: rawptr, val: byte, len: int, align: i32, is_volatile: bool) #foreign "llvm.memset.p0i8.i64" - llvm_memset_64bit(data, value as byte, len, 1, false); - return data; + llvm_memset_64bit(data, value as byte, len, 1, false) + return data } zero :: proc(data: rawptr, len: int) -> rawptr { - return set(data, 0, len); + return set(data, 0, len) } copy :: proc(dst, src: rawptr, len: int) -> rawptr #link_name "__mem_copy" { // NOTE(bill): This _must_ implemented like C's memmove llvm_memmove_64bit :: proc(dst, src: rawptr, len: int, align: i32, is_volatile: bool) #foreign "llvm.memmove.p0i8.p0i8.i64" - llvm_memmove_64bit(dst, src, len, 1, false); - return dst; + llvm_memmove_64bit(dst, src, len, 1, false) + return dst } copy_non_overlapping :: proc(dst, src: rawptr, len: int) -> rawptr #link_name "__mem_copy_non_overlapping" { // NOTE(bill): This _must_ implemented like C's memcpy llvm_memcpy_64bit :: proc(dst, src: rawptr, len: int, align: i32, is_volatile: bool) #foreign "llvm.memcpy.p0i8.p0i8.i64" - llvm_memcpy_64bit(dst, src, len, 1, false); - return dst; + llvm_memcpy_64bit(dst, src, len, 1, false) + return dst } compare :: proc(dst, src: rawptr, n: int) -> int #link_name "__mem_compare" { // Translation of http://mgronhol.github.io/fast-strcmp/ - a := slice_ptr(dst as ^byte, n); - b := slice_ptr(src as ^byte, n); + a := slice_ptr(dst as ^byte, n) + b := slice_ptr(src as ^byte, n) - fast := n/size_of(int) + 1; - offset := (fast-1)*size_of(int); - 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; + fast = 0 } - la := slice_ptr(^a[0] as ^int, fast); - 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 pos := curr_block*size_of(int); pos < n; pos++ { if (a[pos] ~ b[pos]) != 0 { - return a[pos] as int - b[pos] as int; + return a[pos] as int - b[pos] as int } } } @@ -54,11 +54,11 @@ compare :: proc(dst, src: rawptr, n: int) -> int #link_name "__mem_compare" { for ; offset < n; offset++ { if (a[offset] ~ b[offset]) != 0 { - return a[offset] as int - b[offset] as int; + return a[offset] as int - b[offset] as int } } - return 0; + return 0 } @@ -70,42 +70,42 @@ terabytes :: proc(x: int) -> int #inline { return terabytes(x) * 1024; } is_power_of_two :: proc(x: int) -> bool { if x <= 0 { - return false; + return false } - return (x & (x-1)) == 0; + return (x & (x-1)) == 0 } align_forward :: proc(ptr: rawptr, align: int) -> rawptr { - assert(is_power_of_two(align)); + assert(is_power_of_two(align)) - a := align as uint; - p := ptr as uint; - modulo := p & (a-1); + a := align as uint + p := ptr as uint + modulo := p & (a-1) if modulo != 0 { - p += a - modulo; + p += a - modulo } - return p as rawptr; + return p as rawptr } AllocationHeader :: struct { - size: int; + size: int } allocation_header_fill :: proc(header: ^AllocationHeader, data: rawptr, size: int) { - header.size = size; - ptr := (header+1) as ^int; + header.size = size + ptr := (header+1) as ^int for i := 0; ptr as rawptr < data; i++ { - (ptr+i)^ = -1; + (ptr+i)^ = -1 } } allocation_header :: proc(data: rawptr) -> ^AllocationHeader { - p := data as ^int; + p := data as ^int for (p-1)^ == -1 { - p = (p-1); + p = (p-1) } - return (p as ^AllocationHeader)-1; + return (p as ^AllocationHeader)-1 } @@ -115,13 +115,13 @@ allocation_header :: proc(data: rawptr) -> ^AllocationHeader { // Custom allocators Arena :: struct { - backing: Allocator; - memory: []byte; - temp_count: int; + backing: Allocator + memory: []byte + temp_count: int Temp_Memory :: struct { - arena: ^Arena; - original_count: int; + arena: ^Arena + original_count: int } } @@ -130,22 +130,22 @@ Arena :: struct { init_arena_from_memory :: proc(using a: ^Arena, data: []byte) { - backing = Allocator{}; - memory = data[:0]; - temp_count = 0; + backing = Allocator{} + memory = data[:0] + temp_count = 0 } init_arena_from_context :: proc(using a: ^Arena, size: int) { - backing = context.allocator; - memory = new_slice(byte, 0, size); - temp_count = 0; + backing = context.allocator + memory = new_slice(byte, 0, size) + temp_count = 0 } free_arena :: proc(using a: ^Arena) { if backing.procedure != nil { push_allocator backing { - free(memory.data); - memory = memory[0:0:0]; + free(memory.data) + memory = memory[0:0:0] } } } @@ -154,57 +154,57 @@ arena_allocator :: proc(arena: ^Arena) -> Allocator { return Allocator{ procedure = arena_allocator_proc, data = arena, - }; + } } arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator.Mode, size, alignment: int, old_memory: rawptr, old_size: int, flags: u64) -> rawptr { - arena := allocator_data as ^Arena; + arena := allocator_data as ^Arena - using Allocator.Mode; + using Allocator.Mode match mode { case ALLOC: - 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; + fmt.fprintln(os.stderr, "Arena out of memory") + return nil } - #no_bounds_check end := ^arena.memory[arena.memory.count]; + #no_bounds_check end := ^arena.memory[arena.memory.count] - ptr := align_forward(end, alignment); - arena.memory.count += total_size; - return zero(ptr, size); + ptr := align_forward(end, alignment) + arena.memory.count += total_size + return zero(ptr, size) case FREE: // NOTE(bill): Free all at once // Use Arena.Temp_Memory if you want to free a block case FREE_ALL: - arena.memory.count = 0; + arena.memory.count = 0 case RESIZE: - return default_resize_align(old_memory, old_size, size, alignment); + return default_resize_align(old_memory, old_size, size, alignment) } - return nil; + return nil } begin_arena_temp_memory :: proc(a: ^Arena) -> Arena.Temp_Memory { - tmp: Arena.Temp_Memory; - tmp.arena = a; - tmp.original_count = a.memory.count; - a.temp_count++; - return tmp; + tmp: Arena.Temp_Memory + tmp.arena = a + tmp.original_count = a.memory.count + a.temp_count++ + return tmp } end_arena_temp_memory :: proc(using tmp: Arena.Temp_Memory) { - assert(arena.memory.count >= original_count); - assert(arena.temp_count > 0); - arena.memory.count = original_count; - arena.temp_count--; + assert(arena.memory.count >= original_count) + assert(arena.temp_count > 0) + arena.memory.count = original_count + arena.temp_count-- } @@ -214,119 +214,119 @@ end_arena_temp_memory :: proc(using tmp: Arena.Temp_Memory) { align_of_type_info :: proc(type_info: ^Type_Info) -> int { - WORD_SIZE :: size_of(int); - using Type_Info; + WORD_SIZE :: size_of(int) + using Type_Info match type info : type_info { case Named: - return align_of_type_info(info.base); + return align_of_type_info(info.base) case Integer: - return info.size; + return info.size case Float: - return info.size; + return info.size case String: - return WORD_SIZE; + return WORD_SIZE case Boolean: - return 1; + return 1 case Pointer: - return WORD_SIZE; + return WORD_SIZE case Maybe: - return max(align_of_type_info(info.elem), 1); + return max(align_of_type_info(info.elem), 1) case Procedure: - return WORD_SIZE; + return WORD_SIZE case Array: - return align_of_type_info(info.elem); + return align_of_type_info(info.elem) case Slice: - return WORD_SIZE; + return WORD_SIZE case Vector: - return align_of_type_info(info.elem); + return align_of_type_info(info.elem) case Struct: - return info.align; + return info.align case Union: - return info.align; + return info.align case Raw_Union: - return info.align; + return info.align case Enum: - return align_of_type_info(info.base); + return align_of_type_info(info.base) } - return 0; + return 0 } align_formula :: proc(size, align: int) -> int { - result := size + align-1; - return result - result%align; + result := size + align-1 + return result - result%align } size_of_type_info :: proc(type_info: ^Type_Info) -> int { - WORD_SIZE :: size_of(int); - using Type_Info; + WORD_SIZE :: size_of(int) + using Type_Info match type info : type_info { case Named: - return size_of_type_info(info.base); + return size_of_type_info(info.base) case Integer: - return info.size; + return info.size case Float: - return info.size; + return info.size case Any: - return 2*WORD_SIZE; + return 2*WORD_SIZE case String: - return 2*WORD_SIZE; + return 2*WORD_SIZE case Boolean: - return 1; + return 1 case Pointer: - return WORD_SIZE; + return WORD_SIZE case Maybe: - return size_of_type_info(info.elem) + 1; + return size_of_type_info(info.elem) + 1 case Procedure: - return WORD_SIZE; + return WORD_SIZE case Array: - count := info.count; + count := info.count if count == 0 { - return 0; + return 0 } - size := size_of_type_info(info.elem); - align := align_of_type_info(info.elem); - alignment := align_formula(size, align); - return alignment*(count-1) + size; + 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; + return 3*WORD_SIZE case Vector: is_bool :: proc(type_info: ^Type_Info) -> bool { match type info : type_info { case Named: - return is_bool(info.base); + return is_bool(info.base) case Boolean: - return true; + return true } - return false; + return false } - count := info.count; + count := info.count if count == 0 { - return 0; + return 0 } - 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; + bit_size = 1 } - total_size_in_bits := bit_size * count; - total_size := (total_size_in_bits+7)/8; - return total_size; + total_size_in_bits := bit_size * count + total_size := (total_size_in_bits+7)/8 + return total_size case Struct: - return info.size; + return info.size case Union: - return info.size; + return info.size case Raw_Union: - return info.size; + return info.size case Enum: - return size_of_type_info(info.base); + return size_of_type_info(info.base) } - return 0; + return 0 } diff --git a/core/opengl.odin b/core/opengl.odin index d67e9c7cb..3e546b9ca 100644 --- a/core/opengl.odin +++ b/core/opengl.odin @@ -1,6 +1,6 @@ -#foreign_system_library "opengl32" when ODIN_OS == "windows"; -#import "win32.odin" when ODIN_OS == "windows"; -#include "opengl_constants.odin"; +#foreign_system_library "opengl32" when ODIN_OS == "windows" +#import "win32.odin" when ODIN_OS == "windows" +#include "opengl_constants.odin" Clear :: proc(mask: u32) #foreign "glClear" ClearColor :: proc(r, g, b, a: f32) #foreign "glClearColor" @@ -30,126 +30,126 @@ GetIntegerv :: proc(name: i32, v: ^i32) #foreign "glGetIntegerv" -_libgl := win32.LoadLibraryA(("opengl32.dll\x00" as string).data); +_libgl := win32.LoadLibraryA(("opengl32.dll\x00" as string).data) GetProcAddress :: proc(name: string) -> proc() { - assert(name[name.count-1] == 0); - res := win32.wglGetProcAddress(name.data); + assert(name[name.count-1] == 0) + res := win32.wglGetProcAddress(name.data) if res == nil { - res = win32.GetProcAddress(_libgl, name.data); + res = win32.GetProcAddress(_libgl, name.data) } - return res; + return res } -GenBuffers: proc(count: i32, buffers: ^u32); -GenVertexArrays: proc(count: i32, buffers: ^u32); -GenSamplers: proc(count: i32, buffers: ^u32); -BindBuffer: proc(target: i32, buffer: u32); -BindVertexArray: proc(buffer: u32); -BindSampler: proc(position: i32, sampler: u32); -BufferData: proc(target: i32, size: int, data: rawptr, usage: i32); -BufferSubData: proc(target: i32, offset, size: int, data: rawptr); - -DrawArrays: proc(mode, first: i32, count: u32); -DrawElements: proc(mode: i32, count: u32, type_: i32, indices: rawptr); - -MapBuffer: proc(target, access: i32) -> rawptr; -UnmapBuffer: proc(target: i32); - -VertexAttribPointer: proc(index: u32, size, type_: i32, normalized: i32, stride: u32, pointer: rawptr); -EnableVertexAttribArray: proc(index: u32); - -CreateShader: proc(shader_type: i32) -> u32; -ShaderSource: proc(shader: u32, count: u32, string: ^^byte, length: ^i32); -CompileShader: proc(shader: u32); -CreateProgram: proc() -> u32; -AttachShader: proc(program, shader: u32); -DetachShader: proc(program, shader: u32); -DeleteShader: proc(shader: u32); -LinkProgram: proc(program: u32); -UseProgram: proc(program: u32); -DeleteProgram: proc(program: u32); - - -GetShaderiv: proc(shader: u32, pname: i32, params: ^i32); -GetProgramiv: proc(program: u32, pname: i32, params: ^i32); -GetShaderInfoLog: proc(shader: u32, max_length: u32, length: ^u32, info_long: ^byte); -GetProgramInfoLog: proc(program: u32, max_length: u32, length: ^u32, info_long: ^byte); - -ActiveTexture: proc(texture: i32); -GenerateMipmap: proc(target: i32); - -SamplerParameteri: proc(sampler: u32, pname: i32, param: i32); -SamplerParameterf: proc(sampler: u32, pname: i32, param: f32); -SamplerParameteriv: proc(sampler: u32, pname: i32, params: ^i32); -SamplerParameterfv: proc(sampler: u32, pname: i32, params: ^f32); -SamplerParameterIiv: proc(sampler: u32, pname: i32, params: ^i32); -SamplerParameterIuiv: proc(sampler: u32, pname: i32, params: ^u32); - - -Uniform1i: proc(loc: i32, v0: i32); -Uniform2i: proc(loc: i32, v0, v1: i32); -Uniform3i: proc(loc: i32, v0, v1, v2: i32); -Uniform4i: proc(loc: i32, v0, v1, v2, v3: i32); -Uniform1f: proc(loc: i32, v0: f32); -Uniform2f: proc(loc: i32, v0, v1: f32); -Uniform3f: proc(loc: i32, v0, v1, v2: f32); -Uniform4f: proc(loc: i32, v0, v1, v2, v3: f32); -UniformMatrix4fv: proc(loc: i32, count: u32, transpose: i32, value: ^f32); - -GetUniformLocation: proc(program: u32, name: ^byte) -> i32; +GenBuffers: proc(count: i32, buffers: ^u32) +GenVertexArrays: proc(count: i32, buffers: ^u32) +GenSamplers: proc(count: i32, buffers: ^u32) +BindBuffer: proc(target: i32, buffer: u32) +BindVertexArray: proc(buffer: u32) +BindSampler: proc(position: i32, sampler: u32) +BufferData: proc(target: i32, size: int, data: rawptr, usage: i32) +BufferSubData: proc(target: i32, offset, size: int, data: rawptr) + +DrawArrays: proc(mode, first: i32, count: u32) +DrawElements: proc(mode: i32, count: u32, type_: i32, indices: rawptr) + +MapBuffer: proc(target, access: i32) -> rawptr +UnmapBuffer: proc(target: i32) + +VertexAttribPointer: proc(index: u32, size, type_: i32, normalized: i32, stride: u32, pointer: rawptr) +EnableVertexAttribArray: proc(index: u32) + +CreateShader: proc(shader_type: i32) -> u32 +ShaderSource: proc(shader: u32, count: u32, string: ^^byte, length: ^i32) +CompileShader: proc(shader: u32) +CreateProgram: proc() -> u32 +AttachShader: proc(program, shader: u32) +DetachShader: proc(program, shader: u32) +DeleteShader: proc(shader: u32) +LinkProgram: proc(program: u32) +UseProgram: proc(program: u32) +DeleteProgram: proc(program: u32) + + +GetShaderiv: proc(shader: u32, pname: i32, params: ^i32) +GetProgramiv: proc(program: u32, pname: i32, params: ^i32) +GetShaderInfoLog: proc(shader: u32, max_length: u32, length: ^u32, info_long: ^byte) +GetProgramInfoLog: proc(program: u32, max_length: u32, length: ^u32, info_long: ^byte) + +ActiveTexture: proc(texture: i32) +GenerateMipmap: proc(target: i32) + +SamplerParameteri: proc(sampler: u32, pname: i32, param: i32) +SamplerParameterf: proc(sampler: u32, pname: i32, param: f32) +SamplerParameteriv: proc(sampler: u32, pname: i32, params: ^i32) +SamplerParameterfv: proc(sampler: u32, pname: i32, params: ^f32) +SamplerParameterIiv: proc(sampler: u32, pname: i32, params: ^i32) +SamplerParameterIuiv: proc(sampler: u32, pname: i32, params: ^u32) + + +Uniform1i: proc(loc: i32, v0: i32) +Uniform2i: proc(loc: i32, v0, v1: i32) +Uniform3i: proc(loc: i32, v0, v1, v2: i32) +Uniform4i: proc(loc: i32, v0, v1, v2, v3: i32) +Uniform1f: proc(loc: i32, v0: f32) +Uniform2f: proc(loc: i32, v0, v1: f32) +Uniform3f: proc(loc: i32, v0, v1, v2: f32) +Uniform4f: proc(loc: i32, v0, v1, v2, v3: f32) +UniformMatrix4fv: proc(loc: i32, count: u32, transpose: i32, value: ^f32) + +GetUniformLocation: proc(program: u32, name: ^byte) -> i32 init :: proc() { set_proc_address :: proc(p: rawptr, name: string) #inline { (p as ^proc())^ = GetProcAddress(name); } - set_proc_address(^GenBuffers, "glGenBuffers\x00"); - set_proc_address(^GenVertexArrays, "glGenVertexArrays\x00"); - set_proc_address(^GenSamplers, "glGenSamplers\x00"); - set_proc_address(^BindBuffer, "glBindBuffer\x00"); - set_proc_address(^BindSampler, "glBindSampler\x00"); - set_proc_address(^BindVertexArray, "glBindVertexArray\x00"); - set_proc_address(^BufferData, "glBufferData\x00"); - set_proc_address(^BufferSubData, "glBufferSubData\x00"); - - set_proc_address(^DrawArrays, "glDrawArrays\x00"); - set_proc_address(^DrawElements, "glDrawElements\x00"); - - set_proc_address(^MapBuffer, "glMapBuffer\x00"); - set_proc_address(^UnmapBuffer, "glUnmapBuffer\x00"); - - set_proc_address(^VertexAttribPointer, "glVertexAttribPointer\x00"); - set_proc_address(^EnableVertexAttribArray, "glEnableVertexAttribArray\x00"); - - set_proc_address(^CreateShader, "glCreateShader\x00"); - set_proc_address(^ShaderSource, "glShaderSource\x00"); - set_proc_address(^CompileShader, "glCompileShader\x00"); - set_proc_address(^CreateProgram, "glCreateProgram\x00"); - set_proc_address(^AttachShader, "glAttachShader\x00"); - set_proc_address(^DetachShader, "glDetachShader\x00"); - set_proc_address(^DeleteShader, "glDeleteShader\x00"); - set_proc_address(^LinkProgram, "glLinkProgram\x00"); - set_proc_address(^UseProgram, "glUseProgram\x00"); - set_proc_address(^DeleteProgram, "glDeleteProgram\x00"); - - set_proc_address(^GetShaderiv, "glGetShaderiv\x00"); - set_proc_address(^GetProgramiv, "glGetProgramiv\x00"); - set_proc_address(^GetShaderInfoLog, "glGetShaderInfoLog\x00"); - set_proc_address(^GetProgramInfoLog, "glGetProgramInfoLog\x00"); - - set_proc_address(^ActiveTexture, "glActiveTexture\x00"); - set_proc_address(^GenerateMipmap, "glGenerateMipmap\x00"); - - set_proc_address(^Uniform1i, "glUniform1i\x00"); - set_proc_address(^UniformMatrix4fv, "glUniformMatrix4fv\x00"); - - set_proc_address(^GetUniformLocation, "glGetUniformLocation\x00"); - - set_proc_address(^SamplerParameteri, "glSamplerParameteri\x00"); - set_proc_address(^SamplerParameterf, "glSamplerParameterf\x00"); - set_proc_address(^SamplerParameteriv, "glSamplerParameteriv\x00"); - set_proc_address(^SamplerParameterfv, "glSamplerParameterfv\x00"); - set_proc_address(^SamplerParameterIiv, "glSamplerParameterIiv\x00"); - set_proc_address(^SamplerParameterIuiv, "glSamplerParameterIuiv\x00"); + set_proc_address(^GenBuffers, "glGenBuffers\x00") + set_proc_address(^GenVertexArrays, "glGenVertexArrays\x00") + set_proc_address(^GenSamplers, "glGenSamplers\x00") + set_proc_address(^BindBuffer, "glBindBuffer\x00") + set_proc_address(^BindSampler, "glBindSampler\x00") + set_proc_address(^BindVertexArray, "glBindVertexArray\x00") + set_proc_address(^BufferData, "glBufferData\x00") + set_proc_address(^BufferSubData, "glBufferSubData\x00") + + set_proc_address(^DrawArrays, "glDrawArrays\x00") + set_proc_address(^DrawElements, "glDrawElements\x00") + + set_proc_address(^MapBuffer, "glMapBuffer\x00") + set_proc_address(^UnmapBuffer, "glUnmapBuffer\x00") + + set_proc_address(^VertexAttribPointer, "glVertexAttribPointer\x00") + set_proc_address(^EnableVertexAttribArray, "glEnableVertexAttribArray\x00") + + set_proc_address(^CreateShader, "glCreateShader\x00") + set_proc_address(^ShaderSource, "glShaderSource\x00") + set_proc_address(^CompileShader, "glCompileShader\x00") + set_proc_address(^CreateProgram, "glCreateProgram\x00") + set_proc_address(^AttachShader, "glAttachShader\x00") + set_proc_address(^DetachShader, "glDetachShader\x00") + set_proc_address(^DeleteShader, "glDeleteShader\x00") + set_proc_address(^LinkProgram, "glLinkProgram\x00") + set_proc_address(^UseProgram, "glUseProgram\x00") + set_proc_address(^DeleteProgram, "glDeleteProgram\x00") + + set_proc_address(^GetShaderiv, "glGetShaderiv\x00") + set_proc_address(^GetProgramiv, "glGetProgramiv\x00") + set_proc_address(^GetShaderInfoLog, "glGetShaderInfoLog\x00") + set_proc_address(^GetProgramInfoLog, "glGetProgramInfoLog\x00") + + set_proc_address(^ActiveTexture, "glActiveTexture\x00") + set_proc_address(^GenerateMipmap, "glGenerateMipmap\x00") + + set_proc_address(^Uniform1i, "glUniform1i\x00") + set_proc_address(^UniformMatrix4fv, "glUniformMatrix4fv\x00") + + set_proc_address(^GetUniformLocation, "glGetUniformLocation\x00") + + set_proc_address(^SamplerParameteri, "glSamplerParameteri\x00") + set_proc_address(^SamplerParameterf, "glSamplerParameterf\x00") + set_proc_address(^SamplerParameteriv, "glSamplerParameteriv\x00") + set_proc_address(^SamplerParameterfv, "glSamplerParameterfv\x00") + set_proc_address(^SamplerParameterIiv, "glSamplerParameterIiv\x00") + set_proc_address(^SamplerParameterIuiv, "glSamplerParameterIuiv\x00") } diff --git a/core/opengl_constants.odin b/core/opengl_constants.odin index 306f56fee..ffb1c33ec 100644 --- a/core/opengl_constants.odin +++ b/core/opengl_constants.odin @@ -1,1384 +1,1384 @@ -FALSE :: 0; -TRUE :: 1; +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; +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 -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; +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 -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; +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 -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_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 -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; +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_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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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 -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; +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; +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.odin b/core/os.odin index 2a44b8a88..22e2d533c 100644 --- a/core/os.odin +++ b/core/os.odin @@ -1,2 +1,2 @@ -#include "os_windows.odin" when ODIN_OS == "windows"; +#include "os_windows.odin" when ODIN_OS == "windows" diff --git a/core/os_windows.odin b/core/os_windows.odin index 4624ea1ef..34ab661da 100644 --- a/core/os_windows.odin +++ b/core/os_windows.odin @@ -1,82 +1,82 @@ -#import "win32.odin"; -#import "fmt.odin"; +#import "win32.odin" +#import "fmt.odin" File_Time :: type u64 File :: struct { Handle :: raw_union { - p: rawptr; - i: int; + p: rawptr + i: int } - handle: Handle; - last_write_time: File_Time; + handle: Handle + last_write_time: File_Time } open :: proc(name: string) -> (File, bool) { - using win32; - buf: [300]byte; - copy(buf[:], name as []byte); - f: File; - f.handle.p = CreateFileA(^buf[0], FILE_GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, nil) as rawptr; - success := f.handle.p != INVALID_HANDLE_VALUE; - f.last_write_time = last_write_time(^f); - return f, success; + using win32 + buf: [300]byte + copy(buf[:], name as []byte) + f: File + f.handle.p = CreateFileA(^buf[0], FILE_GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, nil) as rawptr + success := f.handle.p != INVALID_HANDLE_VALUE + f.last_write_time = last_write_time(^f) + return f, success } create :: proc(name: string) -> (File, bool) { - using win32; - buf: [300]byte; - copy(buf[:], name as []byte); - f: File; - f.handle.p = CreateFileA(^buf[0], FILE_GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, nil) as rawptr; - success := f.handle.p != INVALID_HANDLE_VALUE; - f.last_write_time = last_write_time(^f); - return f, success; + using win32 + buf: [300]byte + copy(buf[:], name as []byte) + f: File + f.handle.p = CreateFileA(^buf[0], FILE_GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, nil) as rawptr + success := f.handle.p != INVALID_HANDLE_VALUE + f.last_write_time = last_write_time(^f) + return f, success } close :: proc(using f: ^File) { - win32.CloseHandle(handle.p as win32.HANDLE); + win32.CloseHandle(handle.p as win32.HANDLE) } write :: proc(using f: ^File, buf: []byte) -> bool { - bytes_written: i32; - return win32.WriteFile(handle.p as win32.HANDLE, buf.data, buf.count as i32, ^bytes_written, nil) != 0; + bytes_written: i32 + return win32.WriteFile(handle.p as win32.HANDLE, buf.data, buf.count as i32, ^bytes_written, nil) != 0 } file_has_changed :: proc(f: ^File) -> bool { - last_write_time := last_write_time(f); + last_write_time := last_write_time(f) if f.last_write_time != last_write_time { - f.last_write_time = last_write_time; - return true; + f.last_write_time = last_write_time + return true } - return false; + return false } last_write_time :: proc(f: ^File) -> File_Time { - file_info: win32.BY_HANDLE_FILE_INFORMATION; - win32.GetFileInformationByHandle(f.handle.p as win32.HANDLE, ^file_info); - l := file_info.last_write_time.low_date_time as File_Time; - h := file_info.last_write_time.high_date_time as File_Time; - return l | h << 32; + file_info: win32.BY_HANDLE_FILE_INFORMATION + win32.GetFileInformationByHandle(f.handle.p as win32.HANDLE, ^file_info) + l := file_info.last_write_time.low_date_time as File_Time + h := file_info.last_write_time.high_date_time as File_Time + return l | h << 32 } last_write_time_by_name :: proc(name: string) -> File_Time { - last_write_time: win32.FILETIME; - data: win32.WIN32_FILE_ATTRIBUTE_DATA; + last_write_time: win32.FILETIME + data: win32.WIN32_FILE_ATTRIBUTE_DATA - buf: [1024]byte; - path := buf[:0]; - fmt.bprint(^path, name, "\x00"); + buf: [1024]byte + path := buf[:0] + fmt.bprint(^path, name, "\x00") if win32.GetFileAttributesExA(path.data, win32.GetFileExInfoStandard, ^data) != 0 { - last_write_time = data.last_write_time; + last_write_time = data.last_write_time } - l := last_write_time.low_date_time as File_Time; - h := last_write_time.high_date_time as File_Time; - return l | h << 32; + l := last_write_time.low_date_time as File_Time + h := last_write_time.high_date_time as File_Time + return l | h << 32 } @@ -93,81 +93,81 @@ __std_files := [File_Standard.count]File{ {handle = win32.GetStdHandle(win32.STD_INPUT_HANDLE) transmute File.Handle }, {handle = win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) transmute File.Handle }, {handle = win32.GetStdHandle(win32.STD_ERROR_HANDLE) transmute File.Handle }, -}; +} -stdin := ^__std_files[File_Standard.INPUT]; -stdout := ^__std_files[File_Standard.OUTPUT]; -stderr := ^__std_files[File_Standard.ERROR]; +stdin := ^__std_files[File_Standard.INPUT] +stdout := ^__std_files[File_Standard.OUTPUT] +stderr := ^__std_files[File_Standard.ERROR] read_entire_file :: proc(name: string) -> ([]byte, bool) { - buf: [300]byte; - copy(buf[:], name as []byte); + buf: [300]byte + copy(buf[:], name as []byte) - f, file_ok := open(name); + f, file_ok := open(name) if !file_ok { - return nil, false; + return nil, false } - defer close(^f); + defer close(^f) - length: i64; - file_size_ok := win32.GetFileSizeEx(f.handle.p as win32.HANDLE, ^length) != 0; + length: i64 + file_size_ok := win32.GetFileSizeEx(f.handle.p as win32.HANDLE, ^length) != 0 if !file_size_ok { - return nil, false; + return nil, false } - data := new_slice(u8, length); + data := new_slice(u8, length) if data.data == nil { - return nil, false; + return nil, false } - single_read_length: i32; - total_read: i64; + single_read_length: i32 + total_read: i64 for total_read < length { - remaining := length - total_read; - to_read: u32; - MAX :: 1<<32-1; + remaining := length - total_read + to_read: u32 + MAX :: 1<<32-1 if remaining <= MAX { - to_read = remaining as u32; + to_read = remaining as u32 } else { - to_read = MAX; + to_read = MAX } - win32.ReadFile(f.handle.p as win32.HANDLE, ^data[total_read], to_read, ^single_read_length, nil); + win32.ReadFile(f.handle.p as win32.HANDLE, ^data[total_read], to_read, ^single_read_length, nil) if single_read_length <= 0 { - free(data.data); - return nil, false; + free(data.data) + return nil, false } - total_read += single_read_length as i64; + total_read += single_read_length as i64 } - return data, true; + return data, true } heap_alloc :: proc(size: int) -> rawptr { - return win32.HeapAlloc(win32.GetProcessHeap(), win32.HEAP_ZERO_MEMORY, size); + return win32.HeapAlloc(win32.GetProcessHeap(), win32.HEAP_ZERO_MEMORY, size) } heap_resize :: proc(ptr: rawptr, new_size: int) -> rawptr { - return win32.HeapReAlloc(win32.GetProcessHeap(), win32.HEAP_ZERO_MEMORY, ptr, new_size); + return win32.HeapReAlloc(win32.GetProcessHeap(), win32.HEAP_ZERO_MEMORY, ptr, new_size) } heap_free :: proc(ptr: rawptr) { - win32.HeapFree(win32.GetProcessHeap(), 0, ptr); + win32.HeapFree(win32.GetProcessHeap(), 0, ptr) } exit :: proc(code: int) { - win32.ExitProcess(code as u32); + win32.ExitProcess(code as u32) } current_thread_id :: proc() -> int { GetCurrentThreadId :: proc() -> u32 #foreign #dll_import - return GetCurrentThreadId() as int; + return GetCurrentThreadId() as int } diff --git a/core/utf8.odin b/core/utf8.odin index 32769881f..c2bac6194 100644 --- a/core/utf8.odin +++ b/core/utf8.odin @@ -1,17 +1,17 @@ -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 Accept_Range :: struct { - lo, hi: u8; + lo, hi: u8 } accept_ranges := [5]Accept_Range{ @@ -20,7 +20,7 @@ accept_ranges := [5]Accept_Range{ {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 @@ -40,177 +40,177 @@ accept_sizes := [256]byte{ 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 -}; +} encode_rune :: proc(r_: rune) -> ([4]byte, int) { - r := r_; - buf: [4]byte; - i := r as u32; - mask: byte : 0x3f; + r := r_ + buf: [4]byte + i := r as u32 + mask: byte : 0x3f if i <= 1<<7-1 { - buf[0] = r as byte; - return buf, 1; + buf[0] = r as byte + return buf, 1 } if i <= 1<<11-1 { - buf[0] = 0xc0 | (r>>6) as byte; - buf[1] = 0x80 | (r) as byte & mask; - return buf, 2; + buf[0] = 0xc0 | (r>>6) as byte + buf[1] = 0x80 | (r) as byte & mask + return buf, 2 } // Invalid or Surrogate range if i > 0x0010ffff || (0xd800 <= i && i <= 0xdfff) { - r = 0xfffd; + r = 0xfffd } if i <= 1<<16-1 { - buf[0] = 0xe0 | (r>>12) as byte; - buf[1] = 0x80 | (r>>6) as byte & mask; - buf[2] = 0x80 | (r) as byte & mask; - return buf, 3; + buf[0] = 0xe0 | (r>>12) as byte + buf[1] = 0x80 | (r>>6) as byte & mask + buf[2] = 0x80 | (r) as byte & mask + return buf, 3 } - buf[0] = 0xf0 | (r>>18) as byte; - buf[1] = 0x80 | (r>>12) as byte & mask; - buf[2] = 0x80 | (r>>6) as byte & mask; - buf[3] = 0x80 | (r) as byte & mask; - return buf, 4; + buf[0] = 0xf0 | (r>>18) as byte + buf[1] = 0x80 | (r>>12) as byte & mask + buf[2] = 0x80 | (r>>6) as byte & mask + buf[3] = 0x80 | (r) as byte & mask + return buf, 4 } decode_rune :: proc(s: string) -> (rune, int) { - n := s.count; + n := s.count if n < 1 { - return RUNE_ERROR, 0; + return RUNE_ERROR, 0 } - b0 := s[0]; - x := accept_sizes[b0]; + b0 := s[0] + x := accept_sizes[b0] if x >= 0xf0 { mask := (x as rune << 31) >> 31; // all zeros or all ones - return (b0 as rune) &~ mask | RUNE_ERROR&mask, 1; + return (b0 as rune) &~ mask | RUNE_ERROR&mask, 1 } - size := x & 7; - ar := accept_ranges[x>>4]; + size := x & 7 + ar := accept_ranges[x>>4] if n < size as int { - return RUNE_ERROR, 1; + return RUNE_ERROR, 1 } - b1 := s[1]; + b1 := s[1] if b1 < ar.lo || ar.hi < b1 { - return RUNE_ERROR, 1; + return RUNE_ERROR, 1 } - 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; + return (b0&MASK_2) as rune <<6 | (b1&MASK_X) as rune, 2 } - b2 := s[2]; + b2 := s[2] if b2 < 0x80 || 0xbf < b2 { - return RUNE_ERROR, 1; + 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; + return (b0&MASK_3) as rune <<12 | (b1&MASK_X) as rune <<6 | (b2&MASK_X) as rune, 3 } - b3 := s[3]; + b3 := s[3] if b3 < 0x80 || 0xbf < b3 { - return RUNE_ERROR, 1; + return RUNE_ERROR, 1 } - return (b0&MASK_4) as rune <<18 | (b1&MASK_X) as rune <<12 | (b3&MASK_X) as rune <<6 | (b3&MASK_X) as rune, 4; + return (b0&MASK_4) as rune <<18 | (b1&MASK_X) as rune <<12 | (b3&MASK_X) as rune <<6 | (b3&MASK_X) as rune, 4 } valid_rune :: proc(r: rune) -> bool { if r < 0 { - return false; + return false } else if SURROGATE_MIN <= r && r <= SURROGATE_MAX { - return false; + return false } else if r > MAX_RUNE { - return false; + return false } - return true; + return true } valid_string :: proc(s: string) -> bool { - n := s.count; + n := s.count for i := 0; i < n; { - si := s[i]; + si := s[i] if si < RUNE_SELF { // ascii - i++; - continue; + i++ + continue } - x := accept_sizes[si]; + x := accept_sizes[si] if x == 0xf1 { - return false; + return false } - size := (x & 7) as int; + size := (x & 7) as int if i+size > n { - return false; + return false } - ar := accept_ranges[x>>4]; + ar := accept_ranges[x>>4] if b := s[i+1]; b < ar.lo || ar.hi < b { - return false; + return false } else if size == 2 { // Okay } else if b := s[i+2]; b < 0x80 || 0xbf < b { - return false; + return false } else if size == 3 { // Okay } else if b := s[i+3]; b < 0x80 || 0xbf < b { - return false; + return false } - i += size; + i += size } - return true; + return true } rune_count :: proc(s: string) -> int { - count := 0; - n := s.count; + count := 0 + n := s.count for i := 0; i < n; count++ { - si := s[i]; + si := s[i] if si < RUNE_SELF { // ascii - i++; - continue; + i++ + continue } - x := accept_sizes[si]; + x := accept_sizes[si] if x == 0xf1 { - i++; - continue; + i++ + continue } - size := (x & 7) as int; + size := (x & 7) as int if i+size > n { - i++; - continue; + i++ + continue } - ar := accept_ranges[x>>4]; + ar := accept_ranges[x>>4] if b := s[i+1]; b < ar.lo || ar.hi < b { - size = 1; + size = 1 } else if size == 2 { // Okay } else if b := s[i+2]; b < 0x80 || 0xbf < b { - size = 1; + size = 1 } else if size == 3 { // Okay } else if b := s[i+3]; b < 0x80 || 0xbf < b { - size = 1; + size = 1 } - i += size; + i += size } - return count; + return count } rune_size :: proc(r: rune) -> int { match { - case r < 0: return -1; - case r <= 1<<7 - 1: return 1; - case r <= 1<<11 - 1: return 2; - case SURROGATE_MIN <= r && r <= SURROGATE_MAX: return -1; - case r <= 1<<16 - 1: return 3; - case r <= MAX_RUNE: return 4; - } - return -1; + case r < 0: return -1 + case r <= 1<<7 - 1: return 1 + case r <= 1<<11 - 1: return 2 + case SURROGATE_MIN <= r && r <= SURROGATE_MAX: return -1 + case r <= 1<<16 - 1: return 3 + case r <= MAX_RUNE: return 4 + } + return -1 } diff --git a/core/win32.odin b/core/win32.odin index 3b29c1b77..93eeec1f5 100644 --- a/core/win32.odin +++ b/core/win32.odin @@ -1,5 +1,5 @@ -#foreign_system_library "user32" when ODIN_OS == "windows"; -#foreign_system_library "gdi32" when ODIN_OS == "windows"; +#foreign_system_library "user32" when ODIN_OS == "windows" +#foreign_system_library "gdi32" when ODIN_OS == "windows" HANDLE :: type rawptr HWND :: type HANDLE @@ -18,100 +18,100 @@ ATOM :: type i16 BOOL :: type i32 WNDPROC :: type proc(hwnd: HWND, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT -INVALID_HANDLE_VALUE :: (-1 as int) as HANDLE; +INVALID_HANDLE_VALUE :: (-1 as int) as HANDLE -CS_VREDRAW :: 0x0001; -CS_HREDRAW :: 0x0002; -CS_OWNDC :: 0x0020; -CW_USEDEFAULT :: -0x80000000; +CS_VREDRAW :: 0x0001 +CS_HREDRAW :: 0x0002 +CS_OWNDC :: 0x0020 +CW_USEDEFAULT :: -0x80000000 -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; +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 -WM_DESTROY :: 0x0002; -WM_CLOSE :: 0x0010; -WM_QUIT :: 0x0012; -WM_KEYDOWN :: 0x0100; -WM_KEYUP :: 0x0101; +WM_DESTROY :: 0x0002 +WM_CLOSE :: 0x0010 +WM_QUIT :: 0x0012 +WM_KEYDOWN :: 0x0100 +WM_KEYUP :: 0x0101 -PM_REMOVE :: 1; +PM_REMOVE :: 1 -COLOR_BACKGROUND :: 1 as HBRUSH; -BLACK_BRUSH :: 4; +COLOR_BACKGROUND :: 1 as HBRUSH +BLACK_BRUSH :: 4 -SM_CXSCREEN :: 0; -SM_CYSCREEN :: 1; +SM_CXSCREEN :: 0 +SM_CYSCREEN :: 1 -SW_SHOW :: 5; +SW_SHOW :: 5 POINT :: struct #ordered { - x, y: i32; + x, y: i32 } WNDCLASSEXA :: struct #ordered { - size, style: u32; - wnd_proc: WNDPROC; - cls_extra, wnd_extra: i32; - instance: HINSTANCE; - icon: HICON; - cursor: HCURSOR; - background: HBRUSH; - menu_name, class_name: ^u8; - sm: HICON; + size, style: u32 + wnd_proc: WNDPROC + cls_extra, wnd_extra: i32 + instance: HINSTANCE + icon: HICON + cursor: HCURSOR + background: HBRUSH + menu_name, class_name: ^u8 + sm: HICON } MSG :: struct #ordered { - hwnd: HWND; - message: u32; - wparam: WPARAM; - lparam: LPARAM; - time: u32; - pt: POINT; + hwnd: HWND + message: u32 + wparam: WPARAM + lparam: LPARAM + time: u32 + pt: POINT } RECT :: struct #ordered { - left: i32; - top: i32; - right: i32; - bottom: i32; + left: i32 + top: i32 + right: i32 + bottom: i32 } FILETIME :: struct #ordered { - low_date_time, high_date_time: u32; + low_date_time, high_date_time: u32 } BY_HANDLE_FILE_INFORMATION :: struct #ordered { - file_attributes: u32; + file_attributes: u32 creation_time, last_access_time, - last_write_time: FILETIME; + last_write_time: FILETIME volume_serial_number, file_size_high, file_size_low, number_of_links, file_index_high, - file_index_low: u32; + file_index_low: u32 } WIN32_FILE_ATTRIBUTE_DATA :: struct #ordered { - file_attributes: u32; + file_attributes: u32 creation_time, last_access_time, - last_write_time: FILETIME; + last_write_time: FILETIME file_size_high, - file_size_low: u32; + file_size_low: u32 } -GET_FILEEX_INFO_LEVELS :: type i32; -GetFileExInfoStandard : GET_FILEEX_INFO_LEVELS : 0; -GetFileExMaxInfoLevel : GET_FILEEX_INFO_LEVELS : 1; +GET_FILEEX_INFO_LEVELS :: type i32 +GetFileExInfoStandard : GET_FILEEX_INFO_LEVELS : 0 +GetFileExMaxInfoLevel : GET_FILEEX_INFO_LEVELS : 1 GetLastError :: proc() -> i32 #foreign #dll_import ExitProcess :: proc(exit_code: u32) #foreign #dll_import @@ -152,9 +152,9 @@ AdjustWindowRect :: proc(rect: ^RECT, style: u32, menu: BOOL) -> BOOL #foreign # GetQueryPerformanceFrequency :: proc() -> i64 { - r: i64; - QueryPerformanceFrequency(^r); - return r; + r: i64 + QueryPerformanceFrequency(^r) + return r } GetCommandLineA :: proc() -> ^u8 #foreign #dll_import @@ -175,23 +175,23 @@ GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^i64) -> BOOL GetFileAttributesExA :: proc(filename: ^u8, info_level_id: GET_FILEEX_INFO_LEVELS, file_info: rawptr) -> BOOL #foreign #dll_import GetFileInformationByHandle :: proc(file_handle: HANDLE, file_info: ^BY_HANDLE_FILE_INFORMATION) -> BOOL #foreign #dll_import -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 -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 @@ -203,7 +203,7 @@ HeapFree :: proc(h: HANDLE, flags: u32, memory: rawptr) -> BOOL GetProcessHeap :: proc() -> HANDLE #foreign #dll_import -HEAP_ZERO_MEMORY :: 0x00000008; +HEAP_ZERO_MEMORY :: 0x00000008 @@ -211,28 +211,28 @@ HEAP_ZERO_MEMORY :: 0x00000008; BITMAPINFO :: struct #ordered { HEADER :: struct #ordered { - size: u32; - width, height: i32; - planes, bit_count: i16; - compression: u32; - size_image: u32; - x_pels_per_meter: i32; - y_pels_per_meter: i32; - clr_used: u32; - clr_important: u32; + size: u32 + width, height: i32 + planes, bit_count: i16 + compression: u32 + size_image: u32 + x_pels_per_meter: i32 + y_pels_per_meter: i32 + clr_used: u32 + clr_important: u32 } - using header: HEADER; - colors: [1]RGBQUAD; + using header: HEADER + colors: [1]RGBQUAD } RGBQUAD :: struct #ordered { - blue, green, red, reserved: byte; + blue, green, red, reserved: byte } -BI_RGB :: 0; -DIB_RGB_COLORS :: 0x00; -SRCCOPY : u32 : 0x00cc0020; +BI_RGB :: 0 +DIB_RGB_COLORS :: 0x00 +SRCCOPY : u32 : 0x00cc0020 StretchDIBits :: proc(hdc: HDC, x_dst, y_dst, width_dst, height_dst: i32, @@ -253,27 +253,27 @@ GetClientRect :: proc(hwnd: HWND, rect: ^RECT) -> BOOL #foreign // Windows OpenGL -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 HGLRC :: type HANDLE PROC :: type proc() @@ -283,7 +283,7 @@ wglCreateContextAttribsARBType :: type proc(hdc: HDC, hshareContext: rawptr, att PIXELFORMATDESCRIPTOR :: struct #ordered { size, version, - flags: u32; + flags: u32 pixel_type, color_bits, @@ -304,11 +304,11 @@ PIXELFORMATDESCRIPTOR :: struct #ordered { stencil_bits, aux_buffers, layer_type, - reserved: byte; + reserved: byte layer_mask, visible_mask, - damage_mask: u32; + damage_mask: u32 } GetDC :: proc(h: HANDLE) -> HDC #foreign @@ -317,11 +317,11 @@ ChoosePixelFormat :: proc(hdc: HDC, pfd: ^PIXELFORMATDESCRIPTOR) -> i32 #foreign SwapBuffers :: proc(hdc: HDC) -> BOOL #foreign #dll_import ReleaseDC :: proc(wnd: HWND, hdc: HDC) -> i32 #foreign #dll_import -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 wglCreateContext :: proc(hdc: HDC) -> HGLRC #foreign #dll_import wglMakeCurrent :: proc(hdc: HDC, hglrc: HGLRC) -> BOOL #foreign #dll_import @@ -334,7 +334,7 @@ GetKeyState :: proc(v_key: i32) -> i16 #foreign #dll_import GetAsyncKeyState :: proc(v_key: i32) -> i16 #foreign #dll_import is_key_down :: proc(key: Key_Code) -> bool { - return GetAsyncKeyState(key as i32) < 0; + return GetAsyncKeyState(key as i32) < 0 } Key_Code :: enum i32 { diff --git a/src/parser.c b/src/parser.c index 28925fb57..7eeb9133f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1158,26 +1158,6 @@ bool expect_semicolon_after_stmt(AstFile *f, AstNode *s) { } if (s != NULL) { - switch (s->kind) { - case AstNode_ProcDecl: - case AstNode_TypeDecl: - return true; - } - } - - // if (f->curr_token.pos.line != f->prev_token.pos.line) { - // return true; - // } - - if (f->curr_token.pos.line == f->prev_token.pos.line) { - switch (f->curr_token.kind) { - case Token_EOF: - case Token_CloseBrace: - return true; - } - } - - if (s != NULL) { syntax_error(f->prev_token, "Expected `;` after %.*s, got `%.*s`", LIT(ast_node_strings[s->kind]), LIT(token_strings[f->prev_token.kind])); } else { @@ -2222,10 +2202,14 @@ AstNode *parse_identifier_or_type(AstFile *f, u32 flags) { break; } // fallthrough - default: + default: { + String prev = str_lit("newline"); + if (str_ne(f->prev_token.string, str_lit("\n"))) { + prev = f->prev_token.string; + } syntax_error(f->curr_token, - "Expected a type or identifier after `%.*s`, got `%.*s`", LIT(f->prev_token.string), LIT(f->curr_token.string)); - break; + "Expected a type or identifier after %.*s, got %.*s", LIT(prev), LIT(f->curr_token.string)); + } break; } return NULL; diff --git a/src/tokenizer.c b/src/tokenizer.c index 455d7bf36..13cafc1f7 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -303,6 +303,8 @@ typedef struct Tokenizer { u8 * line; // current line pos isize line_count; + bool insert_semicolon; // Inserts a semicolon before the next newline + isize error_count; Array(String) allocated_strings; } Tokenizer; @@ -413,7 +415,10 @@ gb_inline void destroy_tokenizer(Tokenizer *t) { } void tokenizer_skip_whitespace(Tokenizer *t) { - while (rune_is_whitespace(t->curr_rune)) { + while (t->curr_rune == ' ' || + t->curr_rune == '\t' || + (t->curr_rune == '\n' && !t->insert_semicolon) || + t->curr_rune == '\r') { advance_to_next_rune(t); } } @@ -617,6 +622,51 @@ gb_inline TokenKind token_kind_dub_eq(Tokenizer *t, Rune sing_rune, TokenKind si return sing; } +void tokenizer__fle_update(Tokenizer *t) { + t->curr_rune = '/'; + t->curr = t->curr-1; + t->read_curr = t->curr+1; + advance_to_next_rune(t); +} + +// NOTE(bill): needed if comment is straight after a "semicolon" +bool tokenizer_find_line_end(Tokenizer *t) { + while (t->curr_rune == '/' || t->curr_rune == '*') { + if (t->curr_rune == '/') { + tokenizer__fle_update(t); + return true; + } + + advance_to_next_rune(t); + while (t->curr_rune >= 0) { + Rune r = t->curr_rune; + if (r == '\n') { + tokenizer__fle_update(t); + return true; + } + advance_to_next_rune(t); + if (r == '*' && t->curr_rune == '/') { + advance_to_next_rune(t); + break; + } + } + + tokenizer_skip_whitespace(t); + if (t->curr_rune < 0 || t->curr_rune == '\n') { + tokenizer__fle_update(t); + return true; + } + if (t->curr_rune != '/') { + tokenizer__fle_update(t); + return false; + } + advance_to_next_rune(t); + } + + tokenizer__fle_update(t); + return false; +} + Token tokenizer_get_token(Tokenizer *t) { Token token = {0}; Rune curr_rune; @@ -627,6 +677,8 @@ Token tokenizer_get_token(Tokenizer *t) { token.pos.line = t->line_count; token.pos.column = t->curr - t->line + 1; + bool insert_semicolon = false; + curr_rune = t->curr_rune; if (rune_is_letter(curr_rune)) { token.kind = Token_Ident; @@ -654,19 +706,48 @@ Token tokenizer_get_token(Tokenizer *t) { } } } + + switch (token.kind) { + case Token_Ident: + case Token_return: + case Token_break: + case Token_continue: + case Token_fallthrough: + insert_semicolon = true; + break; + } + } else { + insert_semicolon = true; } } else if (gb_is_between(curr_rune, '0', '9')) { + insert_semicolon = true; token = scan_number_to_token(t, false); } else { advance_to_next_rune(t); switch (curr_rune) { case GB_RUNE_EOF: + if (t->insert_semicolon) { + t->insert_semicolon = false; + token.string = str_lit("\n"); + token.kind = Token_Semicolon; + return token; + } token.kind = Token_EOF; break; + case '\n': + // NOTE(bill): This will be only be reached if t->insert_semicolom was set + // earlier and exited early from tokenizer_skip_whitespace() + t->insert_semicolon = false; + token.string = str_lit("\n"); + token.kind = Token_Semicolon; + return token; + case '\'': // Rune Literal { + insert_semicolon = true; + token.kind = Token_Rune; Rune quote = curr_rune; bool valid = true; @@ -699,6 +780,7 @@ Token tokenizer_get_token(Tokenizer *t) { if (success == 2) { array_add(&t->allocated_strings, token.string); } + t->insert_semicolon = true; return token; } else { tokenizer_err(t, "Invalid rune literal"); @@ -708,6 +790,8 @@ Token tokenizer_get_token(Tokenizer *t) { case '`': // Raw String Literal case '"': // String Literal { + insert_semicolon = true; + i32 success; Rune quote = curr_rune; token.kind = Token_String; @@ -745,6 +829,7 @@ Token tokenizer_get_token(Tokenizer *t) { if (success == 2) { array_add(&t->allocated_strings, token.string); } + t->insert_semicolon = true; return token; } else { tokenizer_err(t, "Invalid string literal"); @@ -754,6 +839,7 @@ Token tokenizer_get_token(Tokenizer *t) { case '.': token.kind = Token_Period; // Default if (gb_is_between(t->curr_rune, '0', '9')) { // Might be a number + insert_semicolon = true; token = scan_number_to_token(t, true); } else if (t->curr_rune == '.') { // Could be an ellipsis advance_to_next_rune(t); @@ -765,54 +851,107 @@ Token tokenizer_get_token(Tokenizer *t) { } break; - case '#': token.kind = Token_Hash; break; - case '@': token.kind = Token_At; break; - case '^': token.kind = Token_Pointer; break; - case '?': token.kind = Token_Maybe; break; - case ';': token.kind = Token_Semicolon; break; - case ',': token.kind = Token_Comma; break; - case '(': token.kind = Token_OpenParen; break; - case ')': token.kind = Token_CloseParen; break; - case '[': token.kind = Token_OpenBracket; break; - case ']': token.kind = Token_CloseBracket; break; - case '{': token.kind = Token_OpenBrace; break; - case '}': token.kind = Token_CloseBrace; break; - case ':': token.kind = Token_Colon; break; + case '#': + token.kind = Token_Hash; + break; + case '@': + token.kind = Token_At; + break; + case '^': + token.kind = Token_Pointer; + break; + case '?': + token.kind = Token_Maybe; + break; + case ';': + token.kind = Token_Semicolon; + token.string = str_lit(";"); + break; + case ',': + token.kind = Token_Comma; + break; + case ':': + token.kind = Token_Colon; + break; + case '(': + token.kind = Token_OpenParen; + break; + case ')': + insert_semicolon = true; + token.kind = Token_CloseParen; + break; + case '[': + token.kind = Token_OpenBracket; + break; + case ']': + insert_semicolon = true; + token.kind = Token_CloseBracket; + break; + case '{': + token.kind = Token_OpenBrace; + break; + case '}': + insert_semicolon = true; + token.kind = Token_CloseBrace; + break; case '*': token.kind = token_kind_variant2(t, Token_Mul, Token_MulEq); break; case '%': token.kind = token_kind_variant2(t, Token_Mod, Token_ModEq); break; case '=': token.kind = token_kind_variant2(t, Token_Eq, Token_CmpEq); break; case '~': token.kind = token_kind_variant2(t, Token_Xor, Token_XorEq); break; case '!': token.kind = token_kind_variant2(t, Token_Not, Token_NotEq); break; - case '+': token.kind = token_kind_variant3(t, Token_Add, Token_AddEq, '+', Token_Increment); break; - case '-': token.kind = token_kind_variant4(t, Token_Sub, Token_SubEq, '-', Token_Decrement, '>', Token_ArrowRight); break; + case '+': + token.kind = token_kind_variant3(t, Token_Add, Token_AddEq, '+', Token_Increment); + if (token.kind == Token_Increment) { + insert_semicolon = true; + } + break; + case '-': + token.kind = token_kind_variant4(t, Token_Sub, Token_SubEq, '-', Token_Decrement, '>', Token_ArrowRight); + if (token.kind == Token_Decrement) { + insert_semicolon = true; + } + break; case '/': { - if (t->curr_rune == '/') { - while (t->curr_rune != '\n') { - advance_to_next_rune(t); + if (t->curr_rune == '/' || t->curr_rune == '*') { + if (t->insert_semicolon && tokenizer_find_line_end(t)) { + t->curr_rune = '/'; + t->curr = token.string.text; + t->read_curr = t->curr+1; + t->insert_semicolon = false; + + token.kind = Token_Semicolon; + token.string = str_lit("\n"); + return token; } - token.kind = Token_Comment; - } else if (t->curr_rune == '*') { - isize comment_scope = 1; - advance_to_next_rune(t); - while (comment_scope > 0) { - if (t->curr_rune == '/') { - advance_to_next_rune(t); - if (t->curr_rune == '*') { - advance_to_next_rune(t); - comment_scope++; - } - } else if (t->curr_rune == '*') { + + if (t->curr_rune == '/') { + while (t->curr_rune != '\n') { advance_to_next_rune(t); + } + token.kind = Token_Comment; + } else if (t->curr_rune == '*') { + isize comment_scope = 1; + advance_to_next_rune(t); + while (comment_scope > 0) { if (t->curr_rune == '/') { advance_to_next_rune(t); - comment_scope--; + if (t->curr_rune == '*') { + advance_to_next_rune(t); + comment_scope++; + } + } else if (t->curr_rune == '*') { + advance_to_next_rune(t); + if (t->curr_rune == '/') { + advance_to_next_rune(t); + comment_scope--; + } + } else { + advance_to_next_rune(t); } - } else { - advance_to_next_rune(t); } + token.kind = Token_Comment; } - token.kind = Token_Comment; } else { token.kind = token_kind_variant2(t, Token_Quo, Token_QuoEq); } @@ -851,11 +990,14 @@ Token tokenizer_get_token(Tokenizer *t) { int len = cast(int)gb_utf8_encode_rune(str, curr_rune); tokenizer_err(t, "Illegal character: %.*s (%d) ", len, str, curr_rune); } + insert_semicolon = t->insert_semicolon; token.kind = Token_Invalid; break; } } + t->insert_semicolon = insert_semicolon; + token.string.len = t->curr - token.string.text; return token; } |