├── .editorconfig
├── .gitattributes
├── .github
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── examples
├── README.md
├── config.nims
├── tglfw.nim
├── timgui.nim
├── topengl.nim
└── tvulkan.nim
├── nimgl.nimble
└── src
├── nimgl.nim
└── nimgl
├── glfw.nim
├── glfw
└── native.nim
├── imgui.nim
├── imgui
├── impl_glfw.nim
└── impl_opengl.nim
├── opengl.nim
├── private
├── logo.nim
└── ncimgui.h
└── vulkan.nim
/.editorconfig:
--------------------------------------------------------------------------------
1 | # find your plugin here: http://editorconfig.org/
2 | # always follow this rules
3 |
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | insert_final_newline = true
13 |
14 | [*.md]
15 | trim_trailing_whitespace = false
16 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | src/nimgl/private/* linguist-vendored
2 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | **Please open the Pull Request in the individual submodule repo.**
2 |
3 | - https://github.com/nimgl/imgui
4 | - https://github.com/nimgl/glfw
5 | - https://github.com/nimgl/opengl
6 | - https://github.com/nimgl/stb
7 | - https://github.com/nimgl/vulkan
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ### C ###
2 | # Prerequisites
3 | *.d
4 |
5 | # Object files
6 | *.o
7 | *.ko
8 | *.obj
9 | *.elf
10 |
11 | # Linker output
12 | *.ilk
13 | *.map
14 | *.exp
15 |
16 | # Precompiled Headers
17 | *.gch
18 | *.pch
19 |
20 | # Executables
21 | *.exe
22 | *.out
23 | *.app
24 | *.i*86
25 | *.x86_64
26 | *.hex
27 |
28 | # Debug files
29 | *.dSYM/
30 | *.su
31 | *.idb
32 | *.pdb
33 |
34 | # Kernel Module Compile Results
35 | *.mod*
36 | *.cmd
37 | .tmp_versions/
38 | modules.order
39 | Module.symvers
40 | Mkfile.old
41 | dkms.conf
42 |
43 | ### C++ ###
44 | # Prerequisites
45 |
46 | # Compiled Object files
47 | *.slo
48 |
49 | # Precompiled Headers
50 |
51 | # Compiled Dynamic libraries
52 |
53 | # Fortran module files
54 | *.mod
55 | *.smod
56 |
57 | # Compiled Static libraries
58 | *.lai
59 |
60 | # Executables
61 |
62 | ### Linux ###
63 | *~
64 |
65 | # temporary files which can be created if a process still has a handle open of a deleted file
66 | .fuse_hidden*
67 |
68 | # KDE directory preferences
69 | .directory
70 |
71 | # Linux trash folder which might appear on any partition or disk
72 | .Trash-*
73 |
74 | # .nfs files are created when an open file is removed but is still being accessed
75 | .nfs*
76 |
77 | ### macOS ###
78 | *.DS_Store
79 | .AppleDouble
80 | .LSOverride
81 |
82 | # Icon must end with two \r
83 | Icon
84 |
85 | # Thumbnails
86 | ._*
87 |
88 | # Files that might appear in the root of a volume
89 | .DocumentRevisions-V100
90 | .fseventsd
91 | .Spotlight-V100
92 | .TemporaryItems
93 | .Trashes
94 | .VolumeIcon.icns
95 | .com.apple.timemachine.donotpresent
96 |
97 | # Directories potentially created on remote AFP share
98 | .AppleDB
99 | .AppleDesktop
100 | Network Trash Folder
101 | Temporary Items
102 | .apdisk
103 |
104 | ### Nim ###
105 | nimcache/
106 |
107 | ### OSX ###
108 |
109 | # Icon must end with two \r
110 |
111 | # Thumbnails
112 |
113 | # Files that might appear in the root of a volume
114 |
115 | # Directories potentially created on remote AFP share
116 |
117 | ### VisualStudioCode ###
118 | .vscode/*
119 | !.vscode/settings.json
120 | !.vscode/tasks.json
121 | !.vscode/launch.json
122 | !.vscode/extensions.json
123 | .history
124 |
125 | ### Windows ###
126 | # Windows thumbnail cache files
127 | Thumbs.db
128 | ehthumbs.db
129 | ehthumbs_vista.db
130 |
131 | # Folder config file
132 | Desktop.ini
133 |
134 | # Recycle Bin used on file shares
135 | $RECYCLE.BIN/
136 |
137 | # Binaries
138 | [Bb]in/
139 |
140 | # Windows Installer files
141 | *.cab
142 | *.msi
143 | *.msm
144 | *.msp
145 |
146 | # Windows shortcuts
147 | *.lnk
148 |
149 | # Dynamic Libraries
150 | *.dll
151 | *.so
152 | *.dylib
153 |
154 | ### NimGL ###
155 |
156 | # Tests
157 | tests/general
158 | tests/tgeneral
159 | tests/tglfw
160 | tests/tmath
161 | tests/topengl
162 | imgui.ini
163 | docs/
164 |
165 | # End of https://www.gitignore.io/api/c,osx,nim,c++,linux,macos,windows,visualstudiocode
166 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "src/nimgl/private/cimgui"]
2 | path = src/nimgl/private/cimgui
3 | url = https://github.com/nimgl/cimgui.git
4 | [submodule "src/nimgl/private/glfw"]
5 | path = src/nimgl/private/glfw
6 | url = https://github.com/glfw/glfw.git
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Leonardo Mariscal
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Nim Game Library
8 |
9 |
10 |
11 | A collection of bindings for popular libraries
12 | Mostly used in computer graphics
13 |
14 | Explore the docs »
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | ## Table of Contents
26 |
27 | - [About](#about)
28 | - [Getting Started](#getting-started)
29 | - [Installation](#installation)
30 | - [Usage](#usage)
31 | - [Green Window Example](#green-window-example)
32 | - [Contribute](#contribute)
33 | - [Supported Bindings](#supported-bindings)
34 | - [Roadmap](#roadmap)
35 | - [Gallery](#gallery)
36 | - [Contact](#contact)
37 | - [Credits](#credits)
38 | - [License](#license)
39 |
40 | ## About
41 |
42 | NimGL (Nim Game Library) is a collection of bindings for popular libraries,
43 | mostly used in computer graphics. *A library of libraries.*
44 |
45 | This collection of bindings is heavily inspired by LWJGL3, it enables low level
46 | access and it is not a framework, so we highly encourage you to use a game
47 | engine if you do not have experience working with low level graphics
48 | development. This bindings contain several optional helper procedures to help
49 | with the development and to better suit it to the language.
50 |
51 | ## Getting Started
52 |
53 | We highly recommend using a Nimble project to easily add requirements such as
54 | NimGL.
55 |
56 | ### Installation
57 |
58 | #### With Nimble file (recommended)
59 |
60 | 1. Install Nimble, it comes pre installed with Nim.
61 | 2. Add it to your .nimble file.
62 | ```nim
63 | requires "nimgl >= 1.0.0"
64 | ```
65 | 3. Build with nimble.
66 | ```sh
67 | nimble build
68 | ```
69 |
70 | #### With Nimble install
71 |
72 | 1. Install Nimble, it comes pre installed with Nim.
73 | 2. Install NimGL with Nimble.
74 | ```sh
75 | nimble install nimgl
76 | ```
77 | 3. Build with Nim.
78 | ```sh
79 | nim c -r main.nim
80 | ```
81 |
82 | #### Develop with Nimble
83 |
84 | 1. Install Nimble, it comes pre installed with Nim.
85 | 2. Clone and link with Nimble in another directory.
86 | ```sh
87 | nimble develop nimgl
88 | ```
89 | 3. Build with either Nim or Nimble.
90 |
91 |
92 | It is currently being developed and tested on
93 |
94 | - Windows 10
95 | - MacOS Catalina
96 | - Linux Ubuntu 18.10
97 |
98 | ### Usage
99 |
100 | Please refer to each binding documentation to further understand its usage.
101 |
102 | ### Green Window Example
103 | ```nim
104 | import nimgl/[glfw, opengl]
105 |
106 | proc keyProc(window: GLFWWindow, key: int32, scancode: int32,
107 | action: int32, mods: int32): void {.cdecl.} =
108 | if key == GLFWKey.ESCAPE and action == GLFWPress:
109 | window.setWindowShouldClose(true)
110 |
111 | proc main() =
112 | assert glfwInit()
113 |
114 | glfwWindowHint(GLFWContextVersionMajor, 3)
115 | glfwWindowHint(GLFWContextVersionMinor, 3)
116 | glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE) # Used for Mac
117 | glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)
118 | glfwWindowHint(GLFWResizable, GLFW_FALSE)
119 |
120 | let w: GLFWWindow = glfwCreateWindow(800, 600, "NimGL")
121 | if w == nil:
122 | quit(-1)
123 |
124 | discard w.setKeyCallback(keyProc)
125 | w.makeContextCurrent()
126 |
127 | assert glInit()
128 |
129 | while not w.windowShouldClose:
130 | glfwPollEvents()
131 | glClearColor(0.68f, 1f, 0.34f, 1f)
132 | glClear(GL_COLOR_BUFFER_BIT)
133 | w.swapBuffers()
134 |
135 | w.destroyWindow()
136 | glfwTerminate()
137 |
138 | main()
139 | ```
140 |
141 | ## Contribute
142 |
143 | Your contributions truly mean the world to this project, if you are missing some
144 | procedures, bindings or functionality feel free to open an Issue with the
145 | specification and some example on how to properly implement it. For the
146 | adventurous also feel free to open a Pull Request which will be greatly
147 | appreciated.
148 | Thank you so much :tada:
149 |
150 | Read the [Contribution Guide](CONTRIBUTING.md) for more information.
151 |
152 | ## Supported Bindings
153 |
154 | | Library | Description |
155 | |----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
156 | | [GLFW][glfw-url] | Create multiple windows, handle user input (keyboard, mouse, gaming peripherals) and manage contexts. Also features multi-monitor support, clipboard access, file drag-n-drop, and much more. |
157 | | [Vulkan][vulkan-url] | A new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms. |
158 | | [OpenGL][opengl-url] | Open Graphics Library is a cross-language, cross-platform application programming interface for rendering 2D and 3D vector graphics. NimGL only supports modern OpenGL. |
159 | | [ImGUI][imgui-url] | Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. |
160 |
161 | ## Roadmap
162 |
163 | Goals for before June of 2020:
164 |
165 | - Create optional helper functions for each binding to further facilitate
166 | development.
167 | - CI integration with Github Actions
168 |
169 | You can read a small post about the future of the project
170 | [here](https://notes.ldmd.mx/nimgl_1.0.html).
171 |
172 | ## Gallery
173 |
174 | Please let me know if you want to be showcased or removed from here.
175 |
176 | chip-8 emulator by [@kraptor](https://github.com/kraptor)
177 |
178 |
179 |
180 | ## Credits
181 |
182 | Developed by [Leonardo Mariscal](https://lmariscal.com/) and all the amazing
183 | contributors in GitHub.
184 |
185 | Heavily inspired by [LWJGL3](https://github.com/LWJGL/lwjgl3) and
186 | [GLAD](https://github.com/Dav1dde/glad).
187 |
188 | Each binding contains a small credits comment at the top of the file, but in
189 | general thank you to every contributor of each individual library used in this
190 | project :rose:.
191 |
192 | ## License
193 |
194 | [MIT License](https://choosealicense.com/licenses/mit).
195 |
196 | NimGL is open source and is under the MIT License, we highly encourage every
197 | developer that uses it to make improvements and fork them here.
198 |
199 |
200 | [glfw-url]: https://glfw.org/
201 | [opengl-url]: https://www.khronos.org/opengl/
202 | [imgui-url]: https://github.com/ocornut/imgui
203 | [vulkan-url]: https://www.khronos.org/vulkan/
204 |
--------------------------------------------------------------------------------
/examples/README.md:
--------------------------------------------------------------------------------
1 | ## Examples
2 |
3 | This examples purpose is to help check the stability of the bindings and to give some example on
4 | how to use them on other projects. So feel free to check the tests and learn on how to use them.
5 |
6 | I still need to add more examples to test the stability of the bindings. Some bindings depend on
7 | another bindings for certain functionality so expect some tests to contain several bindings.
8 |
9 | As this is a graphics library it needs some specific hardware that most of the computers have but
10 | cannot test on some CI servers. In the future it would be nice to implement the CI service with
11 | Xvfb. All the tests go through the CI by compiling them but they are not tested in execution.
12 |
13 | ### Which examples are integrated
14 |
15 | | File | Purpose | CI |
16 | |-------------|-------------------------------------------------------|-----|
17 | | tglfw.nim | GLFW is initialized correctly and that a window opens | :x: |
18 | | topengl.nim | OpenGL bindings work and give out correct data | :x: |
19 | | timgui.nim | ImGui actually build and display demo window | :x: |
20 | | tvulkan.nim | Vulkan bindings work | :x: |
21 |
22 | ###### More to come...
23 |
--------------------------------------------------------------------------------
/examples/config.nims:
--------------------------------------------------------------------------------
1 | switch("path", "$projectDir/../src")
2 | switch("debuginfo")
3 | switch("debugger", "native")
4 |
--------------------------------------------------------------------------------
/examples/tglfw.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2018, NimGL contributors.
2 |
3 | import nimgl/glfw, nimgl/glfw/native, os
4 |
5 | if os.getEnv("CI") != "":
6 | quit()
7 |
8 | proc main =
9 | assert glfwInit()
10 |
11 | glfwWindowHint(GLFWContextVersionMajor, 3)
12 | glfwWindowHint(GLFWContextVersionMinor, 3)
13 | glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE)
14 | glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)
15 | glfwWindowHint(GLFWResizable, GLFW_FALSE)
16 |
17 | var monitor = glfwGetPrimaryMonitor()
18 |
19 | var videoMode = monitor.getVideoMode()
20 | echo videoMode.width
21 | echo videoMode.height
22 |
23 | let w = glfwCreateWindow(800, 600, "NimGL", nil, nil)
24 | assert w != nil
25 |
26 | w.makeContextCurrent()
27 | when defined(windows):
28 | var hwnd = w.getWin32Window()
29 | assert hwnd != nil
30 |
31 | while not w.windowShouldClose():
32 | w.swapBuffers()
33 | glfwPollEvents()
34 | w.setWindowShouldClose(true)
35 |
36 | w.destroyWindow
37 | glfwTerminate()
38 |
39 | main()
40 |
--------------------------------------------------------------------------------
/examples/timgui.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2018, NimGL contributors.
2 |
3 | import nimgl/imgui, nimgl/imgui/[impl_opengl, impl_glfw]
4 | import nimgl/[opengl, glfw]
5 |
6 | proc main() =
7 | assert glfwInit()
8 |
9 | glfwWindowHint(GLFWContextVersionMajor, 3)
10 | glfwWindowHint(GLFWContextVersionMinor, 3)
11 | glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE)
12 | glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)
13 | glfwWindowHint(GLFWResizable, GLFW_FALSE)
14 |
15 | var w: GLFWWindow = glfwCreateWindow(1280, 720)
16 | if w == nil:
17 | quit(-1)
18 |
19 | w.makeContextCurrent()
20 |
21 | assert glInit()
22 |
23 | let context = igCreateContext()
24 | #let io = igGetIO()
25 |
26 | assert igGlfwInitForOpenGL(w, true)
27 | assert igOpenGL3Init()
28 |
29 | igStyleColorsCherry()
30 |
31 | var show_demo: bool = true
32 | var somefloat: float32 = 0.0f
33 | var counter: int32 = 0
34 |
35 | while not w.windowShouldClose:
36 | glfwPollEvents()
37 |
38 | igOpenGL3NewFrame()
39 | igGlfwNewFrame()
40 | igNewFrame()
41 |
42 | if show_demo:
43 | igShowDemoWindow(show_demo.addr)
44 |
45 | # Simple window
46 | igBegin("Hello, world!")
47 |
48 | igText("This is some useful text.")
49 | igCheckbox("Demo Window", show_demo.addr)
50 |
51 | igSliderFloat("float", somefloat.addr, 0.0f, 1.0f)
52 |
53 | if igButton("Button", ImVec2(x: 0, y: 0)):
54 | counter.inc
55 | igSameLine()
56 | igText("counter = %d", counter)
57 |
58 | igText("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / igGetIO().framerate, igGetIO().framerate)
59 | igEnd()
60 | # End simple window
61 |
62 | igRender()
63 |
64 | glClearColor(0.45f, 0.55f, 0.60f, 1.00f)
65 | glClear(GL_COLOR_BUFFER_BIT)
66 |
67 | igOpenGL3RenderDrawData(igGetDrawData())
68 |
69 | w.swapBuffers()
70 |
71 | igOpenGL3Shutdown()
72 | igGlfwShutdown()
73 | context.igDestroyContext()
74 |
75 | w.destroyWindow()
76 | glfwTerminate()
77 |
78 | main()
79 |
--------------------------------------------------------------------------------
/examples/topengl.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2018, NimGL contributors.
2 |
3 | import nimgl/glfw
4 | import nimgl/opengl
5 | import glm
6 | import os
7 |
8 | if os.getEnv("CI") != "":
9 | quit()
10 |
11 | proc keyProc(window: GLFWWindow, key: int32, scancode: int32, action: int32, mods: int32): void {.cdecl.} =
12 | if key == GLFWKey.Escape and action == GLFWPress:
13 | window.setWindowShouldClose(true)
14 | if key == GLFWKey.Space:
15 | glPolygonMode(GL_FRONT_AND_BACK, if action != GLFWRelease: GL_LINE else: GL_FILL)
16 |
17 | proc statusShader(shader: uint32) =
18 | var status: int32
19 | glGetShaderiv(shader, GL_COMPILE_STATUS, status.addr);
20 | if status != GL_TRUE.ord:
21 | var
22 | log_length: int32
23 | message = newSeq[char](1024)
24 | glGetShaderInfoLog(shader, 1024, log_length.addr, message[0].addr);
25 | echo message
26 |
27 | proc toRGB(vec: Vec3[float32]): Vec3[float32] =
28 | return vec3(vec.x / 255, vec.y / 255, vec.z / 255)
29 |
30 | proc main =
31 | # GLFW
32 | assert glfwInit()
33 |
34 | glfwWindowHint(GLFWContextVersionMajor, 3)
35 | glfwWindowHint(GLFWContextVersionMinor, 3)
36 | glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE)
37 | glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)
38 | glfwWindowHint(GLFWResizable, GLFW_FALSE)
39 |
40 | let w: GLFWWindow = glfwCreateWindow(800, 600, "NimGL", nil, nil)
41 | assert w != nil
42 |
43 | discard w.setKeyCallback(keyProc)
44 | w.makeContextCurrent
45 |
46 | # Opengl
47 | assert glInit()
48 |
49 | echo $glVersionMajor & "." & $glVersionMinor
50 |
51 | glEnable(GL_BLEND)
52 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
53 |
54 | var
55 | mesh: tuple[vbo, vao, ebo: uint32]
56 | vertex : uint32
57 | fragment: uint32
58 | program : uint32
59 |
60 | var vert = @[
61 | 0.3f, 0.3f,
62 | 0.3f, -0.3f,
63 | -0.3f, -0.3f,
64 | -0.3f, 0.3f
65 | ]
66 |
67 | var ind = @[
68 | 0'u32, 1'u32, 3'u32,
69 | 1'u32, 2'u32, 3'u32
70 | ]
71 |
72 | glGenBuffers(1, mesh.vbo.addr)
73 | glGenBuffers(1, mesh.ebo.addr)
74 | glGenVertexArrays(1, mesh.vao.addr)
75 |
76 | glBindVertexArray(mesh.vao)
77 |
78 | glBindBuffer(GL_ARRAY_BUFFER, mesh.vbo)
79 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.ebo)
80 |
81 | glBufferData(GL_ARRAY_BUFFER, cint(cfloat.sizeof * vert.len), vert[0].addr, GL_STATIC_DRAW)
82 | glBufferData(GL_ELEMENT_ARRAY_BUFFER, cint(cuint.sizeof * ind.len), ind[0].addr, GL_STATIC_DRAW)
83 |
84 | glEnableVertexAttribArray(0)
85 | glVertexAttribPointer(0'u32, 2, EGL_FLOAT, false, cfloat.sizeof * 2, nil)
86 |
87 | vertex = glCreateShader(GL_VERTEX_SHADER)
88 | var vsrc: cstring = """
89 | #version 330 core
90 | layout (location = 0) in vec2 aPos;
91 |
92 | uniform mat4 uMVP;
93 |
94 | void main() {
95 | gl_Position = vec4(aPos, 0.0, 1.0) * uMVP;
96 | }
97 | """
98 | glShaderSource(vertex, 1'i32, vsrc.addr, nil)
99 | glCompileShader(vertex)
100 | statusShader(vertex)
101 |
102 | fragment = glCreateShader(GL_FRAGMENT_SHADER)
103 | var fsrc: cstring = """
104 | #version 330 core
105 | out vec4 FragColor;
106 |
107 | uniform vec3 uColor;
108 |
109 | void main() {
110 | FragColor = vec4(uColor, 1.0f);
111 | }
112 | """
113 | glShaderSource(fragment, 1, fsrc.addr, nil)
114 | glCompileShader(fragment)
115 | statusShader(fragment)
116 |
117 | program = glCreateProgram()
118 | glAttachShader(program, vertex)
119 | glAttachShader(program, fragment)
120 | glLinkProgram(program)
121 |
122 | var
123 | log_length: int32
124 | message = newSeq[char](1024)
125 | pLinked: int32
126 | glGetProgramiv(program, GL_LINK_STATUS, pLinked.addr);
127 | if pLinked != GL_TRUE.ord:
128 | glGetProgramInfoLog(program, 1024, log_length.addr, message[0].addr);
129 | echo message
130 |
131 | let
132 | uColor = glGetUniformLocation(program, "uColor")
133 | uMVP = glGetUniformLocation(program, "uMVP")
134 | var
135 | bg = vec3(33f, 33f, 33f).toRgb()
136 | color = vec3(50f, 205f, 50f).toRgb()
137 | mvp = ortho(-2f, 2f, -1.5f, 1.5f, -1f, 1f)
138 |
139 | while not w.windowShouldClose:
140 | glClearColor(bg.r, bg.g, bg.b, 1f)
141 | glClear(GL_COLOR_BUFFER_BIT)
142 |
143 | glUseProgram(program)
144 | glUniform3fv(uColor, 1, color.caddr)
145 | glUniformMatrix4fv(uMVP, 1, false, mvp.caddr)
146 |
147 | glBindVertexArray(mesh.vao)
148 | glDrawElements(GL_TRIANGLES, ind.len.cint, GL_UNSIGNED_INT, nil)
149 |
150 | w.swapBuffers
151 | glfwPollEvents()
152 |
153 | w.destroyWindow
154 |
155 | glfwTerminate()
156 |
157 | glDeleteVertexArrays(1, mesh.vao.addr)
158 | glDeleteBuffers(1, mesh.vbo.addr)
159 | glDeleteBuffers(1, mesh.ebo.addr)
160 |
161 | main()
162 |
--------------------------------------------------------------------------------
/examples/tvulkan.nim:
--------------------------------------------------------------------------------
1 | # Written by Leonardo Mariscal , 2019
2 |
3 | # TODO following vulkan-tutorial.com
4 |
5 | import nimgl/vulkan, nimgl/glfw
6 |
7 | var
8 | window: GLFWWindow
9 | instance: VkInstance
10 |
11 | proc toString(chars: openArray[char]): string =
12 | result = ""
13 | for c in chars:
14 | if c != '\0':
15 | result.add(c)
16 |
17 | proc initWindow() =
18 | if not glfwInit():
19 | quit("failed to init glfw")
20 |
21 | glfwWindowHint(GLFWClientApi, GLFWNoApi)
22 | glfwWindowHint(GLFWResizable, GLFWFalse)
23 |
24 | window = glfwCreateWindow(800, 600)
25 |
26 | if not vkInit():
27 | quit("failed to load vulkan")
28 |
29 | proc loop() =
30 | while not window.windowShouldClose():
31 | glfwPollEvents()
32 |
33 | proc cleanUp() =
34 | vkDestroyInstance(instance, nil)
35 | window.destroyWindow()
36 | glfwTerminate()
37 |
38 | proc initVulkan() =
39 | when defined(macosx):
40 | let vkVersion = vkApiVersion1_0.uint32
41 | else:
42 | let vkVersion = vkApiVersion1_1.uint32
43 | var appInfo = newVkApplicationInfo(
44 | pApplicationName = "NimGL Vulkan Example",
45 | applicationVersion = vkMakeVersion(1, 0, 0),
46 | pEngineName = "No Engine",
47 | engineVersion = vkMakeVersion(1, 0, 0),
48 | apiVersion = vkVersion
49 | )
50 |
51 | var glfwExtensionCount: uint32 = 0
52 | var glfwExtensions: cstringArray
53 | glfwExtensions = glfwGetRequiredInstanceExtensions(glfwExtensionCount.addr)
54 |
55 | var instanceCreateInfo = newVkInstanceCreateInfo(
56 | pApplicationInfo = appInfo.addr,
57 | enabledExtensionCount = glfwExtensionCount,
58 | ppEnabledExtensionNames = glfwExtensions,
59 | enabledLayerCount = 0,
60 | ppEnabledLayerNames = nil,
61 | )
62 |
63 | if vkCreateInstance(instanceCreateInfo.addr, nil, instance.addr) != VKSuccess:
64 | quit("failed to create instance")
65 |
66 | var extensionCount: uint32 = 0
67 | discard vkEnumerateInstanceExtensionProperties(nil, extensionCount.addr, nil)
68 | var extensionsArray = newSeq[VkExtensionProperties](extensionCount)
69 | discard vkEnumerateInstanceExtensionProperties(nil, extensionCount.addr, extensionsArray[0].addr)
70 |
71 | for extension in extensionsArray:
72 | echo extension.extensionName.toString()
73 |
74 | if isMainModule:
75 | initWindow()
76 | initVulkan()
77 | loop()
78 | cleanUp()
79 |
--------------------------------------------------------------------------------
/nimgl.nimble:
--------------------------------------------------------------------------------
1 | # Package
2 |
3 | version = "1.1.0"
4 | author = "Leonardo Mariscal"
5 | description = "Nim Game Library"
6 | license = "MIT"
7 | srcDir = "src"
8 | skipDirs = @[".github", "tests"]
9 |
10 | # Dependencies
11 |
12 | requires "nim >= 1.0.0"
13 |
14 | # Tasks
15 |
16 | import
17 | strutils
18 |
19 | const
20 | docDir = "docs"
21 |
22 | proc nimExt(file: string): bool =
23 | file[file.len - 4 ..< file.len] == ".nim"
24 |
25 | proc genDocs(pathr: string, output: string) =
26 | let path = pathr.replace(r"\", "/")
27 | var src = path[path.rfind("/") + 1 .. path.len - 5]
28 | echo "\n[info] generating " & src & ".nim"
29 | if src == "nimgl":
30 | src = "index"
31 | exec("nim doc -d:vulkan -o:" & output & "/" & src & ".html" & " " & path)
32 |
33 | proc walkRecursive(dir: string) =
34 | for f in listFiles(dir):
35 | if f.nimExt: genDocs(f, docDir)
36 | for od in listDirs(dir):
37 | walkRecursive(od)
38 |
39 | task test, "Run files under examples dir":
40 | exec("nimble install -y glm")
41 | for file in listFiles("examples"):
42 | if file[6] == 't' and file.nimExt:
43 | echo "\n[info] testing " & file[6..`_ Fast UI Development tool for debug and testing
8 | ## - `Impl_GLFW <./impl_glfw.html>`_ ImGui implementation for GLFW
9 | ## - `Impl_OpenGL <./impl_opengl.html>`_ ImGui implementation for OpenGL
10 | ## - `GLFW <./glfw.html>`_ Window Library
11 | ## - `Native <./native.html>`_ Native window handler access
12 | ## - `OpenGL <./opengl.html>`_ Modern OpenGL bindings
13 | ## - `Vulkan <./vulkan.html>`_ Vulkan bindings
14 |
15 | #[
16 | This is just a stationary file to keep the structure of the nimble project.
17 | If you want to import a module, just ```import nimgl/``` and you are
18 | all set and done.
19 | ]#
20 |
--------------------------------------------------------------------------------
/src/nimgl/glfw/native.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2019, NimGL contributors.
2 |
3 | ## GLFW Bindings
4 | ## ====
5 | ## WARNING: This is a generated file. Do not edit
6 | ## Any edits will be overwritten by the generator.
7 | ##
8 | ## The aim is to achieve as much compatibility with C as possible.
9 | ## All procedures which have a GLFW object in the arguments won't have the glfw prefix.
10 | ## Turning ``glfwMakeContextCurrent(window)`` into ``window.makeContextCurrent()``.
11 | ##
12 | ## You can check the original documentation `here `_.
13 | ##
14 | ## **By using the native access functions you assert that you know what you're
15 | ## doing and how to fix problems caused by using them. If you don't, you
16 | ## shouldn't be using them.**
17 | ##
18 | ## Please assert that you are using the right system for the right procedures.
19 |
20 | import ../glfw
21 |
22 | when defined(glfwDLL):
23 | when defined(windows):
24 | const glfw_dll* = "glfw3.dll"
25 | elif defined(macosx):
26 | const glfw_dll* = "libglfw3.dylib"
27 | else:
28 | const glfw_dll* = "libglfw.so.3"
29 |
30 | when defined(windows):
31 | {.passC: "-DGLFW_EXPOSE_NATIVE_WIN32".}
32 | if not defined(vulkan):
33 | {.passC: "-DGLFW_EXPOSE_NATIVE_WGL".}
34 | elif defined(macosx):
35 | {.passC: "-DGLFW_EXPOSE_NATIVE_COCOA".}
36 | if not defined(vulkan):
37 | {.passC: "-DGLFW_EXPOSE_NATIVE_NSGL".}
38 | else:
39 | if defined(wayland):
40 | {.passC: "-DGLFW_EXPOSE_NATIVE_WAYLAND".}
41 | else:
42 | {.passC: "-DGLFW_EXPOSE_NATIVE_X11".}
43 |
44 | if defined(mesa):
45 | {.passC: "-DGLFW_EXPOSE_NATIVE_OSMESA".}
46 | elif defined(egl):
47 | {.passC: "-DGLFW_EXPOSE_NATIVE_EGL".}
48 | elif not defined(vulkan):
49 | {.passC: "-DGLFW_EXPOSE_NATIVE_GLX".}
50 |
51 | # Procs
52 | when defined(glfwDLL):
53 | {.push dynlib: glfw_dll, cdecl.}
54 | else:
55 | {.push cdecl.}
56 |
57 | proc getWin32Adapter*(monitor: GLFWMonitor): cstring {.importc: "glfwGetWin32Adapter".}
58 | ## @brief Returns the adapter device name of the specified monitor.
59 | ##
60 | ## @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`)
61 | ## of the specified monitor, or `NULL` if an error
62 | ## occurred.
63 | ##
64 | ## @thread_safety This function may be called from any thread. Access is not
65 | ## synchronized.
66 | ##
67 | ## @since Added in version 3.1.
68 | ##
69 | ## @ingroup native
70 | proc getWin32Monitor*(monitor: GLFWMonitor): cstring {.importc: "glfwGetWin32Monitor".}
71 | ## @brief Returns the display device name of the specified monitor.
72 | ##
73 | ## @return The UTF-8 encoded display device name (for example
74 | ## `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an
75 | ## error occurred.
76 | ##
77 | ## @thread_safety This function may be called from any thread. Access is not
78 | ## synchronized.
79 | ##
80 | ## @since Added in version 3.1.
81 | ##
82 | ## @ingroup native
83 | proc getWin32Window*(window: GLFWWindow): pointer #[HWND]# {.importc: "glfwGetWin32Window".}
84 | ## @brief Returns the `HWND` of the specified window.
85 | ##
86 | ## @return The `HWND` of the specified window, or `NULL` if an
87 | ## error occurred.
88 | ##
89 | ## @thread_safety This function may be called from any thread. Access is not
90 | ## synchronized.
91 | ##
92 | ## @since Added in version 3.0.
93 | ##
94 | ## @ingroup native
95 | proc getWGLContext*(window: GLFWWindow): pointer #[HGLRC]# {.importc: "glfwGetWGLContext".}
96 | ## @brief Returns the `HGLRC` of the specified window.
97 | ##
98 | ## @return The `HGLRC` of the specified window, or `NULL` if an
99 | ## error occurred.
100 | ##
101 | ## @thread_safety This function may be called from any thread. Access is not
102 | ## synchronized.
103 | ##
104 | ## @since Added in version 3.0.
105 | ##
106 | ## @ingroup native
107 | proc getCocoaMonitor*(monitor: GLFWMonitor): pointer #[CGDirectDisplayID]# {.importc: "glfwGetCocoaMonitor".}
108 | ## @brief Returns the `CGDirectDisplayID` of the specified monitor.
109 | ##
110 | ## @return The `CGDirectDisplayID` of the specified monitor, or
111 | ## `kCGNullDirectDisplay` if an error occurred.
112 | ##
113 | ## @thread_safety This function may be called from any thread. Access is not
114 | ## synchronized.
115 | ##
116 | ## @since Added in version 3.1.
117 | ##
118 | ## @ingroup native
119 | proc getCocoaWindow*(window: GLFWWindow): pointer #[id]# {.importc: "glfwGetCocoaWindow".}
120 | ## @brief Returns the `NSWindow` of the specified window.
121 | ##
122 | ## @return The `NSWindow` of the specified window, or `nil` if an
123 | ## error occurred.
124 | ##
125 | ## @thread_safety This function may be called from any thread. Access is not
126 | ## synchronized.
127 | ##
128 | ## @since Added in version 3.0.
129 | ##
130 | ## @ingroup native
131 | proc getNSGLContext*(window: GLFWWindow): pointer #[id]# {.importc: "glfwGetNSGLContext".}
132 | ## @brief Returns the `NSOpenGLContext` of the specified window.
133 | ##
134 | ## @return The `NSOpenGLContext` of the specified window, or `nil` if an
135 | ## error occurred.
136 | ##
137 | ## @thread_safety This function may be called from any thread. Access is not
138 | ## synchronized.
139 | ##
140 | ## @since Added in version 3.0.
141 | ##
142 | ## @ingroup native
143 | proc glfwGetX11Display*(): pointer #[Display]# {.importc: "glfwGetX11Display".}
144 | ## @brief Returns the `Display` used by GLFW.
145 | ##
146 | ## @return The `Display` used by GLFW, or `NULL` if an
147 | ## error occurred.
148 | ##
149 | ## @thread_safety This function may be called from any thread. Access is not
150 | ## synchronized.
151 | ##
152 | ## @since Added in version 3.0.
153 | ##
154 | ## @ingroup native
155 | proc getX11Adapter*(monitor: GLFWMonitor): pointer #[RRCrtc]# {.importc: "glfwGetX11Adapter".}
156 | ## @brief Returns the `RRCrtc` of the specified monitor.
157 | ##
158 | ## @return The `RRCrtc` of the specified monitor, or `None` if an
159 | ## error occurred.
160 | ##
161 | ## @thread_safety This function may be called from any thread. Access is not
162 | ## synchronized.
163 | ##
164 | ## @since Added in version 3.1.
165 | ##
166 | ## @ingroup native
167 | proc getX11Monitor*(monitor: GLFWMonitor): pointer #[RROutput]# {.importc: "glfwGetX11Monitor".}
168 | ## @brief Returns the `RROutput` of the specified monitor.
169 | ##
170 | ## @return The `RROutput` of the specified monitor, or `None` if an
171 | ## error occurred.
172 | ##
173 | ## @thread_safety This function may be called from any thread. Access is not
174 | ## synchronized.
175 | ##
176 | ## @since Added in version 3.1.
177 | ##
178 | ## @ingroup native
179 | proc getX11Window*(window: GLFWWindow): pointer #[Window]# {.importc: "glfwGetX11Window".}
180 | ## @brief Returns the `Window` of the specified window.
181 | ##
182 | ## @return The `Window` of the specified window, or `None` if an
183 | ## error occurred.
184 | ##
185 | ## @thread_safety This function may be called from any thread. Access is not
186 | ## synchronized.
187 | ##
188 | ## @since Added in version 3.0.
189 | ##
190 | ## @ingroup native
191 | proc glfwSetX11SelectionString*(string: cstring): void {.importc: "glfwSetX11SelectionString".}
192 | ## @brief Sets the current primary selection to the specified string.
193 | ##
194 | ## @param[in] string A UTF-8 encoded string.
195 | ##
196 | ## @errors Possible errors include GLFW_NOT_INITIALIZED and
197 | ## GLFW_PLATFORM_ERROR.
198 | ##
199 | ## @pointer_lifetime The specified string is copied before this function
200 | ## returns.
201 | ##
202 | ## @thread_safety This function must only be called from the main thread.
203 | ##
204 | ## @sa clipboard
205 | ## @sa glfwGetX11SelectionString
206 | ## @sa glfwSetClipboardString
207 | ##
208 | ## @since Added in version 3.3.
209 | ##
210 | ## @ingroup native
211 | proc glfwGetX11SelectionString*(): cstring {.importc: "glfwGetX11SelectionString".}
212 | ## @brief Returns the contents of the current primary selection as a string.
213 | ##
214 | ## If the selection is empty or if its contents cannot be converted, `NULL`
215 | ## is returned and a GLFW_FORMAT_UNAVAILABLE error is generated.
216 | ##
217 | ## @return The contents of the selection as a UTF-8 encoded string, or `NULL`
218 | ## if an error occurred.
219 | ##
220 | ## @errors Possible errors include GLFW_NOT_INITIALIZED and
221 | ## GLFW_PLATFORM_ERROR.
222 | ##
223 | ## @pointer_lifetime The returned string is allocated and freed by GLFW. You
224 | ## should not free it yourself. It is valid until the next call to
225 | ## glfwGetX11SelectionString or glfwSetX11SelectionString, or until the
226 | ## library is terminated.
227 | ##
228 | ## @thread_safety This function must only be called from the main thread.
229 | ##
230 | ## @sa clipboard
231 | ## @sa glfwSetX11SelectionString
232 | ## @sa glfwGetClipboardString
233 | ##
234 | ## @since Added in version 3.3.
235 | ##
236 | ## @ingroup native
237 | proc getGLXContext*(window: GLFWWindow): pointer #[GLXContext]# {.importc: "glfwGetGLXContext".}
238 | ## @brief Returns the `GLXContext` of the specified window.
239 | ##
240 | ## @return The `GLXContext` of the specified window, or `NULL` if an
241 | ## error occurred.
242 | ##
243 | ## @thread_safety This function may be called from any thread. Access is not
244 | ## synchronized.
245 | ##
246 | ## @since Added in version 3.0.
247 | ##
248 | ## @ingroup native
249 | proc getGLXWindow*(window: GLFWWindow): pointer #[GLXWindow]# {.importc: "glfwGetGLXWindow".}
250 | ## @brief Returns the `GLXWindow` of the specified window.
251 | ##
252 | ## @return The `GLXWindow` of the specified window, or `None` if an
253 | ## error occurred.
254 | ##
255 | ## @thread_safety This function may be called from any thread. Access is not
256 | ## synchronized.
257 | ##
258 | ## @since Added in version 3.2.
259 | ##
260 | ## @ingroup native
261 | proc getWaylandDisplay*(): pointer #[struct]# {.importc: "glfwGetWaylandDisplay".}
262 | ## @brief Returns the `struct wl_display*` used by GLFW.
263 | ##
264 | ## @return The `struct wl_display*` used by GLFW, or `NULL` if an
265 | ## error occurred.
266 | ##
267 | ## @thread_safety This function may be called from any thread. Access is not
268 | ## synchronized.
269 | ##
270 | ## @since Added in version 3.2.
271 | ##
272 | ## @ingroup native
273 | proc getWaylandMonitor*(monitor: GLFWMonitor): pointer #[struct]# {.importc: "glfwGetWaylandMonitor".}
274 | ## @brief Returns the `struct wl_output*` of the specified monitor.
275 | ##
276 | ## @return The `struct wl_output*` of the specified monitor, or `NULL` if an
277 | ## error occurred.
278 | ##
279 | ## @thread_safety This function may be called from any thread. Access is not
280 | ## synchronized.
281 | ##
282 | ## @since Added in version 3.2.
283 | ##
284 | ## @ingroup native
285 | proc getWaylandWindow*(window: GLFWWindow): pointer #[struct]# {.importc: "glfwGetWaylandWindow".}
286 | ## @brief Returns the main `struct wl_surface*` of the specified window.
287 | ##
288 | ## @return The main `struct wl_surface*` of the specified window, or `NULL` if
289 | ## an error occurred.
290 | ##
291 | ## @thread_safety This function may be called from any thread. Access is not
292 | ## synchronized.
293 | ##
294 | ## @since Added in version 3.2.
295 | ##
296 | ## @ingroup native
297 | proc glfwGetEGLDisplay*(): pointer #[EGLDisplay]# {.importc: "glfwGetEGLDisplay".}
298 | ## @brief Returns the `EGLDisplay` used by GLFW.
299 | ##
300 | ## @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an
301 | ## error occurred.
302 | ##
303 | ## @thread_safety This function may be called from any thread. Access is not
304 | ## synchronized.
305 | ##
306 | ## @since Added in version 3.0.
307 | ##
308 | ## @ingroup native
309 | proc getEGLContext*(window: GLFWWindow): pointer #[EGLContext]# {.importc: "glfwGetEGLContext".}
310 | ## @brief Returns the `EGLContext` of the specified window.
311 | ##
312 | ## @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an
313 | ## error occurred.
314 | ##
315 | ## @thread_safety This function may be called from any thread. Access is not
316 | ## synchronized.
317 | ##
318 | ## @since Added in version 3.0.
319 | ##
320 | ## @ingroup native
321 | proc getEGLSurface*(window: GLFWWindow): pointer #[EGLSurface]# {.importc: "glfwGetEGLSurface".}
322 | ## @brief Returns the `EGLSurface` of the specified window.
323 | ##
324 | ## @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an
325 | ## error occurred.
326 | ##
327 | ## @thread_safety This function may be called from any thread. Access is not
328 | ## synchronized.
329 | ##
330 | ## @since Added in version 3.0.
331 | ##
332 | ## @ingroup native
333 | proc getOSMesaColorBuffer*(window: GLFWWindow, width: ptr int32, height: ptr int32, format: ptr int32, buffer: ptr pointer): int32 {.importc: "glfwGetOSMesaColorBuffer".}
334 | ## @brief Retrieves the color buffer associated with the specified window.
335 | ##
336 | ## @param[in] window The window whose color buffer to retrieve.
337 | ## @param[out] width Where to store the width of the color buffer, or `NULL`.
338 | ## @param[out] height Where to store the height of the color buffer, or `NULL`.
339 | ## @param[out] format Where to store the OSMesa pixel format of the color
340 | ## buffer, or `NULL`.
341 | ## @param[out] buffer Where to store the address of the color buffer, or
342 | ## `NULL`.
343 | ## @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
344 | ## error occurred.
345 | ##
346 | ## @thread_safety This function may be called from any thread. Access is not
347 | ## synchronized.
348 | ##
349 | ## @since Added in version 3.3.
350 | ##
351 | ## @ingroup native
352 | proc getOSMesaDepthBuffer*(window: GLFWWindow, width: ptr int32, height: ptr int32, bytesPerValue: ptr int32, buffer: ptr pointer): int32 {.importc: "glfwGetOSMesaDepthBuffer".}
353 | ## @brief Retrieves the depth buffer associated with the specified window.
354 | ##
355 | ## @param[in] window The window whose depth buffer to retrieve.
356 | ## @param[out] width Where to store the width of the depth buffer, or `NULL`.
357 | ## @param[out] height Where to store the height of the depth buffer, or `NULL`.
358 | ## @param[out] bytesPerValue Where to store the number of bytes per depth
359 | ## buffer element, or `NULL`.
360 | ## @param[out] buffer Where to store the address of the depth buffer, or
361 | ## `NULL`.
362 | ## @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
363 | ## error occurred.
364 | ##
365 | ## @thread_safety This function may be called from any thread. Access is not
366 | ## synchronized.
367 | ##
368 | ## @since Added in version 3.3.
369 | ##
370 | ## @ingroup native
371 | proc getOSMesaContext*(window: GLFWWindow): pointer #[OSMesaContext]# {.importc: "glfwGetOSMesaContext".}
372 | ## @brief Returns the `OSMesaContext` of the specified window.
373 | ##
374 | ## @return The `OSMesaContext` of the specified window, or `NULL` if an
375 | ## error occurred.
376 | ##
377 | ## @thread_safety This function may be called from any thread. Access is not
378 | ## synchronized.
379 | ##
380 | ## @since Added in version 3.3.
381 | ##
382 | ## @ingroup native
383 |
384 | {.pop.}
385 |
--------------------------------------------------------------------------------
/src/nimgl/imgui.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2019, NimGL contributors.
2 |
3 | ## ImGUI Bindings
4 | ## ====
5 | ## WARNING: This is a generated file. Do not edit
6 | ## Any edits will be overwritten by the genearator.
7 | ##
8 | ## The aim is to achieve as much compatibility with C as possible.
9 | ## Optional helper functions have been created as a submodule
10 | ## ``imgui/imgui_helpers`` to better bind this library to Nim.
11 | ##
12 | ## You can check the original documentation `here `_.
13 | ##
14 | ## Source language of ImGui is C++, since Nim is able to compile both to C
15 | ## and C++ you can select which compile target you wish to use. Note that to use
16 | ## the C backend you must supply a `cimgui `_
17 | ## dynamic library file.
18 | ##
19 | ## HACK: If you are targeting Windows, be sure to compile the cimgui dll with
20 | ## visual studio and not with mingw.
21 |
22 | import strutils
23 |
24 | proc currentSourceDir(): string {.compileTime.} =
25 | result = currentSourcePath().replace("\\", "/")
26 | result = result[0 ..< result.rfind("/")]
27 |
28 | {.passc: "-I" & currentSourceDir() & "/private/cimgui" & " -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS=1".}
29 | when defined(linux):
30 | {.passL: "-Xlinker -rpath .".}
31 |
32 | when not defined(cpp) or defined(cimguiDLL):
33 | when defined(windows):
34 | const imguiDll* = "cimgui.dll"
35 | elif defined(macosx):
36 | const imguiDll* = "cimgui.dylib"
37 | else:
38 | const imguiDll* = "cimgui.so"
39 | {.passc: "-DCIMGUI_DEFINE_ENUMS_AND_STRUCTS".}
40 | {.pragma: imgui_header, header: "cimgui.h".}
41 | else:
42 | {.compile: "private/cimgui/cimgui.cpp",
43 | compile: "private/cimgui/imgui/imgui.cpp",
44 | compile: "private/cimgui/imgui/imgui_draw.cpp",
45 | compile: "private/cimgui/imgui/imgui_demo.cpp",
46 | compile: "private/cimgui/imgui/imgui_widgets.cpp".}
47 | {.pragma: imgui_header, header: "../ncimgui.h".}
48 |
49 | # Enums
50 | type
51 | ImDrawCornerFlags* {.pure, size: int32.sizeof.} = enum
52 | None = 0
53 | TopLeft = 1
54 | TopRight = 2
55 | Top = 3
56 | BotLeft = 4
57 | Left = 5
58 | BotRight = 8
59 | Right = 10
60 | Bot = 12
61 | All = 15
62 | ImDrawListFlags* {.pure, size: int32.sizeof.} = enum
63 | None = 0
64 | AntiAliasedLines = 1
65 | AntiAliasedFill = 2
66 | AllowVtxOffset = 4
67 | ImFontAtlasFlags* {.pure, size: int32.sizeof.} = enum
68 | None = 0
69 | NoPowerOfTwoHeight = 1
70 | NoMouseCursors = 2
71 | ImGuiBackendFlags* {.pure, size: int32.sizeof.} = enum
72 | None = 0
73 | HasGamepad = 1
74 | HasMouseCursors = 2
75 | HasSetMousePos = 4
76 | RendererHasVtxOffset = 8
77 | ImGuiCol* {.pure, size: int32.sizeof.} = enum
78 | Text = 0
79 | TextDisabled = 1
80 | WindowBg = 2
81 | ChildBg = 3
82 | PopupBg = 4
83 | Border = 5
84 | BorderShadow = 6
85 | FrameBg = 7
86 | FrameBgHovered = 8
87 | FrameBgActive = 9
88 | TitleBg = 10
89 | TitleBgActive = 11
90 | TitleBgCollapsed = 12
91 | MenuBarBg = 13
92 | ScrollbarBg = 14
93 | ScrollbarGrab = 15
94 | ScrollbarGrabHovered = 16
95 | ScrollbarGrabActive = 17
96 | CheckMark = 18
97 | SliderGrab = 19
98 | SliderGrabActive = 20
99 | Button = 21
100 | ButtonHovered = 22
101 | ButtonActive = 23
102 | Header = 24
103 | HeaderHovered = 25
104 | HeaderActive = 26
105 | Separator = 27
106 | SeparatorHovered = 28
107 | SeparatorActive = 29
108 | ResizeGrip = 30
109 | ResizeGripHovered = 31
110 | ResizeGripActive = 32
111 | Tab = 33
112 | TabHovered = 34
113 | TabActive = 35
114 | TabUnfocused = 36
115 | TabUnfocusedActive = 37
116 | PlotLines = 38
117 | PlotLinesHovered = 39
118 | PlotHistogram = 40
119 | PlotHistogramHovered = 41
120 | TextSelectedBg = 42
121 | DragDropTarget = 43
122 | NavHighlight = 44
123 | NavWindowingHighlight = 45
124 | NavWindowingDimBg = 46
125 | ModalWindowDimBg = 47
126 | ImGuiColorEditFlags* {.pure, size: int32.sizeof.} = enum
127 | None = 0
128 | NoAlpha = 2
129 | NoPicker = 4
130 | NoOptions = 8
131 | NoSmallPreview = 16
132 | NoInputs = 32
133 | NoTooltip = 64
134 | NoLabel = 128
135 | NoSidePreview = 256
136 | NoDragDrop = 512
137 | AlphaBar = 65536
138 | AlphaPreview = 131072
139 | AlphaPreviewHalf = 262144
140 | HDR = 524288
141 | DisplayRGB = 1048576
142 | DisplayHSV = 2097152
143 | DisplayHex = 4194304
144 | DisplayMask = 7340032
145 | Uint8 = 8388608
146 | Float = 16777216
147 | DataTypeMask = 25165824
148 | PickerHueBar = 33554432
149 | PickerHueWheel = 67108864
150 | PickerMask = 100663296
151 | InputRGB = 134217728
152 | OptionsDefault = 177209344
153 | InputHSV = 268435456
154 | InputMask = 402653184
155 | ImGuiComboFlags* {.pure, size: int32.sizeof.} = enum
156 | None = 0
157 | PopupAlignLeft = 1
158 | HeightSmall = 2
159 | HeightRegular = 4
160 | HeightLarge = 8
161 | HeightLargest = 16
162 | HeightMask = 30
163 | NoArrowButton = 32
164 | NoPreview = 64
165 | ImGuiCond* {.pure, size: int32.sizeof.} = enum
166 | Always = 1
167 | Once = 2
168 | FirstUseEver = 4
169 | Appearing = 8
170 | ImGuiConfigFlags* {.pure, size: int32.sizeof.} = enum
171 | None = 0
172 | NavEnableKeyboard = 1
173 | NavEnableGamepad = 2
174 | NavEnableSetMousePos = 4
175 | NavNoCaptureKeyboard = 8
176 | NoMouse = 16
177 | NoMouseCursorChange = 32
178 | IsSRGB = 1048576
179 | IsTouchScreen = 2097152
180 | ImGuiDataType* {.pure, size: int32.sizeof.} = enum
181 | S8 = 0
182 | U8 = 1
183 | S16 = 2
184 | U16 = 3
185 | S32 = 4
186 | U32 = 5
187 | S64 = 6
188 | U64 = 7
189 | Float = 8
190 | Double = 9
191 | ImGuiDir* {.pure, size: int32.sizeof.} = enum
192 | None = -1
193 | Left = 0
194 | Right = 1
195 | Up = 2
196 | Down = 3
197 | ImGuiDragDropFlags* {.pure, size: int32.sizeof.} = enum
198 | None = 0
199 | SourceNoPreviewTooltip = 1
200 | SourceNoDisableHover = 2
201 | SourceNoHoldToOpenOthers = 4
202 | SourceAllowNullID = 8
203 | SourceExtern = 16
204 | SourceAutoExpirePayload = 32
205 | AcceptBeforeDelivery = 1024
206 | AcceptNoDrawDefaultRect = 2048
207 | AcceptPeekOnly = 3072
208 | AcceptNoPreviewTooltip = 4096
209 | ImGuiFocusedFlags* {.pure, size: int32.sizeof.} = enum
210 | None = 0
211 | ChildWindows = 1
212 | RootWindow = 2
213 | RootAndChildWindows = 3
214 | AnyWindow = 4
215 | ImGuiHoveredFlags* {.pure, size: int32.sizeof.} = enum
216 | None = 0
217 | ChildWindows = 1
218 | RootWindow = 2
219 | RootAndChildWindows = 3
220 | AnyWindow = 4
221 | AllowWhenBlockedByPopup = 8
222 | AllowWhenBlockedByActiveItem = 32
223 | AllowWhenOverlapped = 64
224 | RectOnly = 104
225 | AllowWhenDisabled = 128
226 | ImGuiInputTextFlags* {.pure, size: int32.sizeof.} = enum
227 | None = 0
228 | CharsDecimal = 1
229 | CharsHexadecimal = 2
230 | CharsUppercase = 4
231 | CharsNoBlank = 8
232 | AutoSelectAll = 16
233 | EnterReturnsTrue = 32
234 | CallbackCompletion = 64
235 | CallbackHistory = 128
236 | CallbackAlways = 256
237 | CallbackCharFilter = 512
238 | AllowTabInput = 1024
239 | CtrlEnterForNewLine = 2048
240 | NoHorizontalScroll = 4096
241 | AlwaysInsertMode = 8192
242 | ReadOnly = 16384
243 | Password = 32768
244 | NoUndoRedo = 65536
245 | CharsScientific = 131072
246 | CallbackResize = 262144
247 | Multiline = 1048576
248 | NoMarkEdited = 2097152
249 | ImGuiKey* {.pure, size: int32.sizeof.} = enum
250 | Tab = 0
251 | LeftArrow = 1
252 | RightArrow = 2
253 | UpArrow = 3
254 | DownArrow = 4
255 | PageUp = 5
256 | PageDown = 6
257 | Home = 7
258 | End = 8
259 | Insert = 9
260 | Delete = 10
261 | Backspace = 11
262 | Space = 12
263 | Enter = 13
264 | Escape = 14
265 | KeyPadEnter = 15
266 | A = 16
267 | C = 17
268 | V = 18
269 | X = 19
270 | Y = 20
271 | Z = 21
272 | ImGuiMouseCursor* {.pure, size: int32.sizeof.} = enum
273 | None = -1
274 | Arrow = 0
275 | TextInput = 1
276 | ResizeAll = 2
277 | ResizeNS = 3
278 | ResizeEW = 4
279 | ResizeNESW = 5
280 | ResizeNWSE = 6
281 | Hand = 7
282 | ImGuiNavInput* {.pure, size: int32.sizeof.} = enum
283 | Activate = 0
284 | Cancel = 1
285 | Input = 2
286 | Menu = 3
287 | DpadLeft = 4
288 | DpadRight = 5
289 | DpadUp = 6
290 | DpadDown = 7
291 | LStickLeft = 8
292 | LStickRight = 9
293 | LStickUp = 10
294 | LStickDown = 11
295 | FocusPrev = 12
296 | FocusNext = 13
297 | TweakSlow = 14
298 | TweakFast = 15
299 | KeyMenu = 16
300 | KeyLeft = 17
301 | KeyRight = 18
302 | KeyUp = 19
303 | KeyDown = 20
304 | ImGuiSelectableFlags* {.pure, size: int32.sizeof.} = enum
305 | None = 0
306 | DontClosePopups = 1
307 | SpanAllColumns = 2
308 | AllowDoubleClick = 4
309 | Disabled = 8
310 | AllowItemOverlap = 16
311 | ImGuiStyleVar* {.pure, size: int32.sizeof.} = enum
312 | Alpha = 0
313 | WindowPadding = 1
314 | WindowRounding = 2
315 | WindowBorderSize = 3
316 | WindowMinSize = 4
317 | WindowTitleAlign = 5
318 | ChildRounding = 6
319 | ChildBorderSize = 7
320 | PopupRounding = 8
321 | PopupBorderSize = 9
322 | FramePadding = 10
323 | FrameRounding = 11
324 | FrameBorderSize = 12
325 | ItemSpacing = 13
326 | ItemInnerSpacing = 14
327 | IndentSpacing = 15
328 | ScrollbarSize = 16
329 | ScrollbarRounding = 17
330 | GrabMinSize = 18
331 | GrabRounding = 19
332 | TabRounding = 20
333 | ButtonTextAlign = 21
334 | SelectableTextAlign = 22
335 | ImGuiTabBarFlags* {.pure, size: int32.sizeof.} = enum
336 | None = 0
337 | Reorderable = 1
338 | AutoSelectNewTabs = 2
339 | TabListPopupButton = 4
340 | NoCloseWithMiddleMouseButton = 8
341 | NoTabListScrollingButtons = 16
342 | NoTooltip = 32
343 | FittingPolicyResizeDown = 64
344 | FittingPolicyScroll = 128
345 | FittingPolicyMask = 192
346 | ImGuiTabItemFlags* {.pure, size: int32.sizeof.} = enum
347 | None = 0
348 | UnsavedDocument = 1
349 | SetSelected = 2
350 | NoCloseWithMiddleMouseButton = 4
351 | NoPushId = 8
352 | ImGuiTreeNodeFlags* {.pure, size: int32.sizeof.} = enum
353 | None = 0
354 | Selected = 1
355 | Framed = 2
356 | AllowItemOverlap = 4
357 | NoTreePushOnOpen = 8
358 | NoAutoOpenOnLog = 16
359 | CollapsingHeader = 26
360 | DefaultOpen = 32
361 | OpenOnDoubleClick = 64
362 | OpenOnArrow = 128
363 | Leaf = 256
364 | Bullet = 512
365 | FramePadding = 1024
366 | SpanAvailWidth = 2048
367 | SpanFullWidth = 4096
368 | NavLeftJumpsBackHere = 8192
369 | ImGuiWindowFlags* {.pure, size: int32.sizeof.} = enum
370 | None = 0
371 | NoTitleBar = 1
372 | NoResize = 2
373 | NoMove = 4
374 | NoScrollbar = 8
375 | NoScrollWithMouse = 16
376 | NoCollapse = 32
377 | NoDecoration = 43
378 | AlwaysAutoResize = 64
379 | NoBackground = 128
380 | NoSavedSettings = 256
381 | NoMouseInputs = 512
382 | MenuBar = 1024
383 | HorizontalScrollbar = 2048
384 | NoFocusOnAppearing = 4096
385 | NoBringToFrontOnFocus = 8192
386 | AlwaysVerticalScrollbar = 16384
387 | AlwaysHorizontalScrollbar = 32768
388 | AlwaysUseWindowPadding = 65536
389 | NoNavInputs = 262144
390 | NoNavFocus = 524288
391 | NoNav = 786432
392 | NoInputs = 786944
393 | UnsavedDocument = 1048576
394 | NavFlattened = 8388608
395 | ChildWindow = 16777216
396 | Tooltip = 33554432
397 | Popup = 67108864
398 | Modal = 134217728
399 | ChildMenu = 268435456
400 |
401 | # TypeDefs
402 | type
403 | ImDrawCallback* = proc(parent_list: ptr ImDrawList, cmd: ptr ImDrawCmd): void {.cdecl.}
404 | ImDrawIdx* = uint16
405 | ImGuiID* = uint32
406 | ImGuiInputTextCallback* = proc(data: ptr ImGuiInputTextCallbackData): int32 {.cdecl.}
407 | ImGuiSizeCallback* = proc(data: ptr ImGuiSizeCallbackData): void {.cdecl.}
408 | ImTextureID* = pointer
409 | ImWchar* = uint16
410 |
411 | ImVector*[T] = object # Should I importc a generic?
412 | size* {.importc: "Size".}: int32
413 | capacity* {.importc: "Capacity".}: int32
414 | data* {.importc: "Data".}: UncheckedArray[T]
415 | ImGuiStoragePairData* {.union.} = object
416 | val_i* {.importc: "val_i".}: int32 # Breaking naming convetion to denote "low level"
417 | val_f* {.importc: "val_f".}: float32
418 | val_p* {.importc: "val_p".}: pointer
419 | ImGuiStoragePair* {.importc: "ImGuiStoragePair", imgui_header.} = object
420 | key* {.importc: "key".}: ImGuiID
421 | data*: ImGuiStoragePairData
422 | ImPairData* {.union.} = object
423 | val_i* {.importc: "val_i".}: int32 # Breaking naming convetion to denote "low level"
424 | val_f* {.importc: "val_f".}: float32
425 | val_p* {.importc: "val_p".}: pointer
426 | ImPair* {.importc: "Pair", imgui_header.} = object
427 | key* {.importc: "key".}: ImGuiID
428 | data*: ImPairData
429 | ImDrawListSharedData* {.importc: "ImDrawListSharedData", imgui_header.} = object
430 | ImGuiContext* {.importc: "ImGuiContext", imgui_header.} = object
431 | ImColor* {.importc: "ImColor", imgui_header.} = object
432 | value* {.importc: "Value".}: ImVec4
433 | ImDrawChannel* {.importc: "ImDrawChannel", imgui_header.} = object
434 | cmdBuffer* {.importc: "_CmdBuffer".}: ImVector[ImDrawCmd]
435 | idxBuffer* {.importc: "_IdxBuffer".}: ImVector[ImDrawIdx]
436 | ImDrawCmd* {.importc: "ImDrawCmd", imgui_header.} = object
437 | elemCount* {.importc: "ElemCount".}: uint32
438 | clipRect* {.importc: "ClipRect".}: ImVec4
439 | textureId* {.importc: "TextureId".}: ImTextureID
440 | vtxOffset* {.importc: "VtxOffset".}: uint32
441 | idxOffset* {.importc: "IdxOffset".}: uint32
442 | userCallback* {.importc: "UserCallback".}: ImDrawCallback
443 | userCallbackData* {.importc: "UserCallbackData".}: pointer
444 | ImDrawData* {.importc: "ImDrawData", imgui_header.} = object
445 | valid* {.importc: "Valid".}: bool
446 | cmdLists* {.importc: "CmdLists".}: UncheckedArray[ptr ImDrawList]
447 | cmdListsCount* {.importc: "CmdListsCount".}: int32
448 | totalIdxCount* {.importc: "TotalIdxCount".}: int32
449 | totalVtxCount* {.importc: "TotalVtxCount".}: int32
450 | displayPos* {.importc: "DisplayPos".}: ImVec2
451 | displaySize* {.importc: "DisplaySize".}: ImVec2
452 | framebufferScale* {.importc: "FramebufferScale".}: ImVec2
453 | ImDrawList* {.importc: "ImDrawList", imgui_header.} = object
454 | cmdBuffer* {.importc: "CmdBuffer".}: ImVector[ImDrawCmd]
455 | idxBuffer* {.importc: "IdxBuffer".}: ImVector[ImDrawIdx]
456 | vtxBuffer* {.importc: "VtxBuffer".}: ImVector[ImDrawVert]
457 | flags* {.importc: "Flags".}: ImDrawListFlags
458 | data* {.importc: "_Data".}: ptr ImDrawListSharedData
459 | ownerName* {.importc: "_OwnerName".}: cstring
460 | vtxCurrentOffset* {.importc: "_VtxCurrentOffset".}: uint32
461 | vtxCurrentIdx* {.importc: "_VtxCurrentIdx".}: uint32
462 | vtxWritePtr* {.importc: "_VtxWritePtr".}: ptr ImDrawVert
463 | idxWritePtr* {.importc: "_IdxWritePtr".}: ptr ImDrawIdx
464 | clipRectStack* {.importc: "_ClipRectStack".}: ImVector[ImVec4]
465 | textureIdStack* {.importc: "_TextureIdStack".}: ImVector[ImTextureID]
466 | path* {.importc: "_Path".}: ImVector[ImVec2]
467 | splitter* {.importc: "_Splitter".}: ImDrawListSplitter
468 | ImDrawListSplitter* {.importc: "ImDrawListSplitter", imgui_header.} = object
469 | current* {.importc: "_Current".}: int32
470 | count* {.importc: "_Count".}: int32
471 | channels* {.importc: "_Channels".}: ImVector[ImDrawChannel]
472 | ImDrawVert* {.importc: "ImDrawVert", imgui_header.} = object
473 | pos* {.importc: "pos".}: ImVec2
474 | uv* {.importc: "uv".}: ImVec2
475 | col* {.importc: "col".}: uint32
476 | ImFont* {.importc: "ImFont", imgui_header.} = object
477 | indexAdvanceX* {.importc: "IndexAdvanceX".}: ImVector[float32]
478 | fallbackAdvanceX* {.importc: "FallbackAdvanceX".}: float32
479 | fontSize* {.importc: "FontSize".}: float32
480 | indexLookup* {.importc: "IndexLookup".}: ImVector[ImWchar]
481 | glyphs* {.importc: "Glyphs".}: ImVector[ImFontGlyph]
482 | fallbackGlyph* {.importc: "FallbackGlyph".}: ptr ImFontGlyph
483 | displayOffset* {.importc: "DisplayOffset".}: ImVec2
484 | containerAtlas* {.importc: "ContainerAtlas".}: ptr ImFontAtlas
485 | configData* {.importc: "ConfigData".}: ptr ImFontConfig
486 | configDataCount* {.importc: "ConfigDataCount".}: int16
487 | fallbackChar* {.importc: "FallbackChar".}: ImWchar
488 | ellipsisChar* {.importc: "EllipsisChar".}: ImWchar
489 | scale* {.importc: "Scale".}: float32
490 | ascent* {.importc: "Ascent".}: float32
491 | descent* {.importc: "Descent".}: float32
492 | metricsTotalSurface* {.importc: "MetricsTotalSurface".}: int32
493 | dirtyLookupTables* {.importc: "DirtyLookupTables".}: bool
494 | ImFontAtlas* {.importc: "ImFontAtlas", imgui_header.} = object
495 | locked* {.importc: "Locked".}: bool
496 | flags* {.importc: "Flags".}: ImFontAtlasFlags
497 | texID* {.importc: "TexID".}: ImTextureID
498 | texDesiredWidth* {.importc: "TexDesiredWidth".}: int32
499 | texGlyphPadding* {.importc: "TexGlyphPadding".}: int32
500 | texPixelsAlpha8* {.importc: "TexPixelsAlpha8".}: ptr cuchar
501 | texPixelsRGBA32* {.importc: "TexPixelsRGBA32".}: ptr uint32
502 | texWidth* {.importc: "TexWidth".}: int32
503 | texHeight* {.importc: "TexHeight".}: int32
504 | texUvScale* {.importc: "TexUvScale".}: ImVec2
505 | texUvWhitePixel* {.importc: "TexUvWhitePixel".}: ImVec2
506 | fonts* {.importc: "Fonts".}: ImVector[ptr ImFont]
507 | customRects* {.importc: "CustomRects".}: ImVector[ImFontAtlasCustomRect]
508 | configData* {.importc: "ConfigData".}: ImVector[ImFontConfig]
509 | customRectIds* {.importc: "CustomRectIds".}: array[1, int32]
510 | ImFontAtlasCustomRect* {.importc: "ImFontAtlasCustomRect", imgui_header.} = object
511 | id* {.importc: "ID".}: uint32
512 | width* {.importc: "Width".}: uint16
513 | height* {.importc: "Height".}: uint16
514 | x* {.importc: "X".}: uint16
515 | y* {.importc: "Y".}: uint16
516 | glyphAdvanceX* {.importc: "GlyphAdvanceX".}: float32
517 | glyphOffset* {.importc: "GlyphOffset".}: ImVec2
518 | font* {.importc: "Font".}: ptr ImFont
519 | ImFontConfig* {.importc: "ImFontConfig", imgui_header.} = object
520 | fontData* {.importc: "FontData".}: pointer
521 | fontDataSize* {.importc: "FontDataSize".}: int32
522 | fontDataOwnedByAtlas* {.importc: "FontDataOwnedByAtlas".}: bool
523 | fontNo* {.importc: "FontNo".}: int32
524 | sizePixels* {.importc: "SizePixels".}: float32
525 | oversampleH* {.importc: "OversampleH".}: int32
526 | oversampleV* {.importc: "OversampleV".}: int32
527 | pixelSnapH* {.importc: "PixelSnapH".}: bool
528 | glyphExtraSpacing* {.importc: "GlyphExtraSpacing".}: ImVec2
529 | glyphOffset* {.importc: "GlyphOffset".}: ImVec2
530 | glyphRanges* {.importc: "GlyphRanges".}: ptr ImWchar
531 | glyphMinAdvanceX* {.importc: "GlyphMinAdvanceX".}: float32
532 | glyphMaxAdvanceX* {.importc: "GlyphMaxAdvanceX".}: float32
533 | mergeMode* {.importc: "MergeMode".}: bool
534 | rasterizerFlags* {.importc: "RasterizerFlags".}: uint32
535 | rasterizerMultiply* {.importc: "RasterizerMultiply".}: float32
536 | ellipsisChar* {.importc: "EllipsisChar".}: ImWchar
537 | name* {.importc: "Name".}: array[40, int8]
538 | dstFont* {.importc: "DstFont".}: ptr ImFont
539 | ImFontGlyph* {.importc: "ImFontGlyph", imgui_header.} = object
540 | codepoint* {.importc: "Codepoint".}: ImWchar
541 | advanceX* {.importc: "AdvanceX".}: float32
542 | x0* {.importc: "X0".}: float32
543 | y0* {.importc: "Y0".}: float32
544 | x1* {.importc: "X1".}: float32
545 | y1* {.importc: "Y1".}: float32
546 | u0* {.importc: "U0".}: float32
547 | v0* {.importc: "V0".}: float32
548 | u1* {.importc: "U1".}: float32
549 | v1* {.importc: "V1".}: float32
550 | ImFontGlyphRangesBuilder* {.importc: "ImFontGlyphRangesBuilder", imgui_header.} = object
551 | usedChars* {.importc: "UsedChars".}: ImVector[uint32]
552 | ImGuiIO* {.importc: "ImGuiIO", imgui_header.} = object
553 | configFlags* {.importc: "ConfigFlags".}: ImGuiConfigFlags
554 | backendFlags* {.importc: "BackendFlags".}: ImGuiBackendFlags
555 | displaySize* {.importc: "DisplaySize".}: ImVec2
556 | deltaTime* {.importc: "DeltaTime".}: float32
557 | iniSavingRate* {.importc: "IniSavingRate".}: float32
558 | iniFilename* {.importc: "IniFilename".}: cstring
559 | logFilename* {.importc: "LogFilename".}: cstring
560 | mouseDoubleClickTime* {.importc: "MouseDoubleClickTime".}: float32
561 | mouseDoubleClickMaxDist* {.importc: "MouseDoubleClickMaxDist".}: float32
562 | mouseDragThreshold* {.importc: "MouseDragThreshold".}: float32
563 | keyMap* {.importc: "KeyMap".}: array[22, int32]
564 | keyRepeatDelay* {.importc: "KeyRepeatDelay".}: float32
565 | keyRepeatRate* {.importc: "KeyRepeatRate".}: float32
566 | userData* {.importc: "UserData".}: pointer
567 | fonts* {.importc: "Fonts".}: ptr ImFontAtlas
568 | fontGlobalScale* {.importc: "FontGlobalScale".}: float32
569 | fontAllowUserScaling* {.importc: "FontAllowUserScaling".}: bool
570 | fontDefault* {.importc: "FontDefault".}: ptr ImFont
571 | displayFramebufferScale* {.importc: "DisplayFramebufferScale".}: ImVec2
572 | mouseDrawCursor* {.importc: "MouseDrawCursor".}: bool
573 | configMacOSXBehaviors* {.importc: "ConfigMacOSXBehaviors".}: bool
574 | configInputTextCursorBlink* {.importc: "ConfigInputTextCursorBlink".}: bool
575 | configWindowsResizeFromEdges* {.importc: "ConfigWindowsResizeFromEdges".}: bool
576 | configWindowsMoveFromTitleBarOnly* {.importc: "ConfigWindowsMoveFromTitleBarOnly".}: bool
577 | configWindowsMemoryCompactTimer* {.importc: "ConfigWindowsMemoryCompactTimer".}: float32
578 | backendPlatformName* {.importc: "BackendPlatformName".}: cstring
579 | backendRendererName* {.importc: "BackendRendererName".}: cstring
580 | backendPlatformUserData* {.importc: "BackendPlatformUserData".}: pointer
581 | backendRendererUserData* {.importc: "BackendRendererUserData".}: pointer
582 | backendLanguageUserData* {.importc: "BackendLanguageUserData".}: pointer
583 | getClipboardTextFn* {.importc: "GetClipboardTextFn".}: proc(user_data: pointer): cstring {.cdecl.}
584 | setClipboardTextFn* {.importc: "SetClipboardTextFn".}: proc(user_data: pointer, text: cstring): void {.cdecl.}
585 | clipboardUserData* {.importc: "ClipboardUserData".}: pointer
586 | imeSetInputScreenPosFn* {.importc: "ImeSetInputScreenPosFn".}: proc(x: int32, y: int32): void {.cdecl.}
587 | imeWindowHandle* {.importc: "ImeWindowHandle".}: pointer
588 | renderDrawListsFnUnused* {.importc: "RenderDrawListsFnUnused".}: pointer
589 | mousePos* {.importc: "MousePos".}: ImVec2
590 | mouseDown* {.importc: "MouseDown".}: array[5, bool]
591 | mouseWheel* {.importc: "MouseWheel".}: float32
592 | mouseWheelH* {.importc: "MouseWheelH".}: float32
593 | keyCtrl* {.importc: "KeyCtrl".}: bool
594 | keyShift* {.importc: "KeyShift".}: bool
595 | keyAlt* {.importc: "KeyAlt".}: bool
596 | keySuper* {.importc: "KeySuper".}: bool
597 | keysDown* {.importc: "KeysDown".}: array[512, bool]
598 | navInputs* {.importc: "NavInputs".}: array[21, float32]
599 | wantCaptureMouse* {.importc: "WantCaptureMouse".}: bool
600 | wantCaptureKeyboard* {.importc: "WantCaptureKeyboard".}: bool
601 | wantTextInput* {.importc: "WantTextInput".}: bool
602 | wantSetMousePos* {.importc: "WantSetMousePos".}: bool
603 | wantSaveIniSettings* {.importc: "WantSaveIniSettings".}: bool
604 | navActive* {.importc: "NavActive".}: bool
605 | navVisible* {.importc: "NavVisible".}: bool
606 | framerate* {.importc: "Framerate".}: float32
607 | metricsRenderVertices* {.importc: "MetricsRenderVertices".}: int32
608 | metricsRenderIndices* {.importc: "MetricsRenderIndices".}: int32
609 | metricsRenderWindows* {.importc: "MetricsRenderWindows".}: int32
610 | metricsActiveWindows* {.importc: "MetricsActiveWindows".}: int32
611 | metricsActiveAllocations* {.importc: "MetricsActiveAllocations".}: int32
612 | mouseDelta* {.importc: "MouseDelta".}: ImVec2
613 | mousePosPrev* {.importc: "MousePosPrev".}: ImVec2
614 | mouseClickedPos* {.importc: "MouseClickedPos".}: array[5, ImVec2]
615 | mouseClickedTime* {.importc: "MouseClickedTime".}: array[5, float64]
616 | mouseClicked* {.importc: "MouseClicked".}: array[5, bool]
617 | mouseDoubleClicked* {.importc: "MouseDoubleClicked".}: array[5, bool]
618 | mouseReleased* {.importc: "MouseReleased".}: array[5, bool]
619 | mouseDownOwned* {.importc: "MouseDownOwned".}: array[5, bool]
620 | mouseDownWasDoubleClick* {.importc: "MouseDownWasDoubleClick".}: array[5, bool]
621 | mouseDownDuration* {.importc: "MouseDownDuration".}: array[5, float32]
622 | mouseDownDurationPrev* {.importc: "MouseDownDurationPrev".}: array[5, float32]
623 | mouseDragMaxDistanceAbs* {.importc: "MouseDragMaxDistanceAbs".}: array[5, ImVec2]
624 | mouseDragMaxDistanceSqr* {.importc: "MouseDragMaxDistanceSqr".}: array[5, float32]
625 | keysDownDuration* {.importc: "KeysDownDuration".}: array[512, float32]
626 | keysDownDurationPrev* {.importc: "KeysDownDurationPrev".}: array[512, float32]
627 | navInputsDownDuration* {.importc: "NavInputsDownDuration".}: array[21, float32]
628 | navInputsDownDurationPrev* {.importc: "NavInputsDownDurationPrev".}: array[21, float32]
629 | inputQueueCharacters* {.importc: "InputQueueCharacters".}: ImVector[ImWchar]
630 | ImGuiInputTextCallbackData* {.importc: "ImGuiInputTextCallbackData", imgui_header.} = object
631 | eventFlag* {.importc: "EventFlag".}: ImGuiInputTextFlags
632 | flags* {.importc: "Flags".}: ImGuiInputTextFlags
633 | userData* {.importc: "UserData".}: pointer
634 | eventChar* {.importc: "EventChar".}: ImWchar
635 | eventKey* {.importc: "EventKey".}: ImGuiKey
636 | buf* {.importc: "Buf".}: cstring
637 | bufTextLen* {.importc: "BufTextLen".}: int32
638 | bufSize* {.importc: "BufSize".}: int32
639 | bufDirty* {.importc: "BufDirty".}: bool
640 | cursorPos* {.importc: "CursorPos".}: int32
641 | selectionStart* {.importc: "SelectionStart".}: int32
642 | selectionEnd* {.importc: "SelectionEnd".}: int32
643 | ImGuiListClipper* {.importc: "ImGuiListClipper", imgui_header.} = object
644 | startPosY* {.importc: "StartPosY".}: float32
645 | itemsHeight* {.importc: "ItemsHeight".}: float32
646 | itemsCount* {.importc: "ItemsCount".}: int32
647 | stepNo* {.importc: "StepNo".}: int32
648 | displayStart* {.importc: "DisplayStart".}: int32
649 | displayEnd* {.importc: "DisplayEnd".}: int32
650 | ImGuiOnceUponAFrame* {.importc: "ImGuiOnceUponAFrame", imgui_header.} = object
651 | refFrame* {.importc: "RefFrame".}: int32
652 | ImGuiPayload* {.importc: "ImGuiPayload", imgui_header.} = object
653 | data* {.importc: "Data".}: pointer
654 | dataSize* {.importc: "DataSize".}: int32
655 | sourceId* {.importc: "SourceId".}: ImGuiID
656 | sourceParentId* {.importc: "SourceParentId".}: ImGuiID
657 | dataFrameCount* {.importc: "DataFrameCount".}: int32
658 | dataType* {.importc: "DataType".}: array[32+1, int8]
659 | preview* {.importc: "Preview".}: bool
660 | delivery* {.importc: "Delivery".}: bool
661 | ImGuiSizeCallbackData* {.importc: "ImGuiSizeCallbackData", imgui_header.} = object
662 | userData* {.importc: "UserData".}: pointer
663 | pos* {.importc: "Pos".}: ImVec2
664 | currentSize* {.importc: "CurrentSize".}: ImVec2
665 | desiredSize* {.importc: "DesiredSize".}: ImVec2
666 | ImGuiStorage* {.importc: "ImGuiStorage", imgui_header.} = object
667 | data* {.importc: "Data".}: ImVector[ImGuiStoragePair]
668 | ImGuiStyle* {.importc: "ImGuiStyle", imgui_header.} = object
669 | alpha* {.importc: "Alpha".}: float32
670 | windowPadding* {.importc: "WindowPadding".}: ImVec2
671 | windowRounding* {.importc: "WindowRounding".}: float32
672 | windowBorderSize* {.importc: "WindowBorderSize".}: float32
673 | windowMinSize* {.importc: "WindowMinSize".}: ImVec2
674 | windowTitleAlign* {.importc: "WindowTitleAlign".}: ImVec2
675 | windowMenuButtonPosition* {.importc: "WindowMenuButtonPosition".}: ImGuiDir
676 | childRounding* {.importc: "ChildRounding".}: float32
677 | childBorderSize* {.importc: "ChildBorderSize".}: float32
678 | popupRounding* {.importc: "PopupRounding".}: float32
679 | popupBorderSize* {.importc: "PopupBorderSize".}: float32
680 | framePadding* {.importc: "FramePadding".}: ImVec2
681 | frameRounding* {.importc: "FrameRounding".}: float32
682 | frameBorderSize* {.importc: "FrameBorderSize".}: float32
683 | itemSpacing* {.importc: "ItemSpacing".}: ImVec2
684 | itemInnerSpacing* {.importc: "ItemInnerSpacing".}: ImVec2
685 | touchExtraPadding* {.importc: "TouchExtraPadding".}: ImVec2
686 | indentSpacing* {.importc: "IndentSpacing".}: float32
687 | columnsMinSpacing* {.importc: "ColumnsMinSpacing".}: float32
688 | scrollbarSize* {.importc: "ScrollbarSize".}: float32
689 | scrollbarRounding* {.importc: "ScrollbarRounding".}: float32
690 | grabMinSize* {.importc: "GrabMinSize".}: float32
691 | grabRounding* {.importc: "GrabRounding".}: float32
692 | tabRounding* {.importc: "TabRounding".}: float32
693 | tabBorderSize* {.importc: "TabBorderSize".}: float32
694 | colorButtonPosition* {.importc: "ColorButtonPosition".}: ImGuiDir
695 | buttonTextAlign* {.importc: "ButtonTextAlign".}: ImVec2
696 | selectableTextAlign* {.importc: "SelectableTextAlign".}: ImVec2
697 | displayWindowPadding* {.importc: "DisplayWindowPadding".}: ImVec2
698 | displaySafeAreaPadding* {.importc: "DisplaySafeAreaPadding".}: ImVec2
699 | mouseCursorScale* {.importc: "MouseCursorScale".}: float32
700 | antiAliasedLines* {.importc: "AntiAliasedLines".}: bool
701 | antiAliasedFill* {.importc: "AntiAliasedFill".}: bool
702 | curveTessellationTol* {.importc: "CurveTessellationTol".}: float32
703 | colors* {.importc: "Colors".}: array[48, ImVec4]
704 | ImGuiTextBuffer* {.importc: "ImGuiTextBuffer", imgui_header.} = object
705 | buf* {.importc: "Buf".}: ImVector[int8]
706 | ImGuiTextFilter* {.importc: "ImGuiTextFilter", imgui_header.} = object
707 | inputBuf* {.importc: "InputBuf".}: array[256, int8]
708 | filters* {.importc: "Filters".}: ImVector[ImGuiTextRange]
709 | countGrep* {.importc: "CountGrep".}: int32
710 | ImGuiTextRange* {.importc: "ImGuiTextRange", imgui_header.} = object
711 | b* {.importc: "b".}: cstring
712 | e* {.importc: "e".}: cstring
713 | ImVec2* {.importc: "ImVec2", imgui_header.} = object
714 | x* {.importc: "x".}: float32
715 | y* {.importc: "y".}: float32
716 | ImVec4* {.importc: "ImVec4", imgui_header.} = object
717 | x* {.importc: "x".}: float32
718 | y* {.importc: "y".}: float32
719 | z* {.importc: "z".}: float32
720 | w* {.importc: "w".}: float32
721 |
722 | # Procs
723 | when not defined(cpp) or defined(cimguiDLL):
724 | {.push dynlib: imgui_dll, cdecl, discardable.}
725 | else:
726 | {.push nodecl, discardable.}
727 |
728 | proc hsv*(self: ptr ImColor, h: float32, s: float32, v: float32, a: float32 = 1.0f): ImColor {.importc: "ImColor_HSV".}
729 | proc newImColor*(): void {.importc: "ImColor_ImColor".}
730 | proc newImColor*(r: int32, g: int32, b: int32, a: int32 = 255): void {.importc: "ImColor_ImColorInt".}
731 | proc newImColor*(rgba: uint32): void {.importc: "ImColor_ImColorU32".}
732 | proc newImColor*(r: float32, g: float32, b: float32, a: float32 = 1.0f): void {.importc: "ImColor_ImColorFloat".}
733 | proc newImColor*(col: ImVec4): void {.importc: "ImColor_ImColorVec4".}
734 | proc setHSV*(self: ptr ImColor, h: float32, s: float32, v: float32, a: float32 = 1.0f): void {.importc: "ImColor_SetHSV".}
735 | proc destroy*(self: ptr ImColor): void {.importc: "ImColor_destroy".}
736 | proc newImDrawCmd*(): void {.importc: "ImDrawCmd_ImDrawCmd".}
737 | proc destroy*(self: ptr ImDrawCmd): void {.importc: "ImDrawCmd_destroy".}
738 | proc clear*(self: ptr ImDrawData): void {.importc: "ImDrawData_Clear".}
739 | proc deIndexAllBuffers*(self: ptr ImDrawData): void {.importc: "ImDrawData_DeIndexAllBuffers".}
740 | proc newImDrawData*(): void {.importc: "ImDrawData_ImDrawData".}
741 | proc scaleClipRects*(self: ptr ImDrawData, fb_scale: ImVec2): void {.importc: "ImDrawData_ScaleClipRects".}
742 | proc destroy*(self: ptr ImDrawData): void {.importc: "ImDrawData_destroy".}
743 | proc clear*(self: ptr ImDrawListSplitter): void {.importc: "ImDrawListSplitter_Clear".}
744 | proc clearFreeMemory*(self: ptr ImDrawListSplitter): void {.importc: "ImDrawListSplitter_ClearFreeMemory".}
745 | proc newImDrawListSplitter*(): void {.importc: "ImDrawListSplitter_ImDrawListSplitter".}
746 | proc merge*(self: ptr ImDrawListSplitter, draw_list: ptr ImDrawList): void {.importc: "ImDrawListSplitter_Merge".}
747 | proc setCurrentChannel*(self: ptr ImDrawListSplitter, draw_list: ptr ImDrawList, channel_idx: int32): void {.importc: "ImDrawListSplitter_SetCurrentChannel".}
748 | proc split*(self: ptr ImDrawListSplitter, draw_list: ptr ImDrawList, count: int32): void {.importc: "ImDrawListSplitter_Split".}
749 | proc destroy*(self: ptr ImDrawListSplitter): void {.importc: "ImDrawListSplitter_destroy".}
750 | proc addBezierCurve*(self: ptr ImDrawList, pos0: ImVec2, cp0: ImVec2, cp1: ImVec2, pos1: ImVec2, col: uint32, thickness: float32, num_segments: int32 = 0): void {.importc: "ImDrawList_AddBezierCurve".}
751 | proc addCallback*(self: ptr ImDrawList, callback: ImDrawCallback, callback_data: pointer): void {.importc: "ImDrawList_AddCallback".}
752 | proc addCircle*(self: ptr ImDrawList, center: ImVec2, radius: float32, col: uint32, num_segments: int32 = 12, thickness: float32 = 1.0f): void {.importc: "ImDrawList_AddCircle".}
753 | proc addCircleFilled*(self: ptr ImDrawList, center: ImVec2, radius: float32, col: uint32, num_segments: int32 = 12): void {.importc: "ImDrawList_AddCircleFilled".}
754 | proc addConvexPolyFilled*(self: ptr ImDrawList, points: ptr ImVec2, num_points: int32, col: uint32): void {.importc: "ImDrawList_AddConvexPolyFilled".}
755 | proc addDrawCmd*(self: ptr ImDrawList): void {.importc: "ImDrawList_AddDrawCmd".}
756 | proc addImage*(self: ptr ImDrawList, user_texture_id: ImTextureID, p_min: ImVec2, p_max: ImVec2, uv_min: ImVec2 = ImVec2(x: 0, y: 0), uv_max: ImVec2 = ImVec2(x: 1, y: 1), col: uint32 = high(uint32)): void {.importc: "ImDrawList_AddImage".}
757 | proc addImageQuad*(self: ptr ImDrawList, user_texture_id: ImTextureID, p1: ImVec2, p2: ImVec2, p3: ImVec2, p4: ImVec2, uv1: ImVec2 = ImVec2(x: 0, y: 0), uv2: ImVec2 = ImVec2(x: 1, y: 0), uv3: ImVec2 = ImVec2(x: 1, y: 1), uv4: ImVec2 = ImVec2(x: 0, y: 1), col: uint32 = high(uint32)): void {.importc: "ImDrawList_AddImageQuad".}
758 | proc addImageRounded*(self: ptr ImDrawList, user_texture_id: ImTextureID, p_min: ImVec2, p_max: ImVec2, uv_min: ImVec2, uv_max: ImVec2, col: uint32, rounding: float32, rounding_corners: ImDrawCornerFlags = ImDrawCornerFlags.All): void {.importc: "ImDrawList_AddImageRounded".}
759 | proc addLine*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, col: uint32, thickness: float32 = 1.0f): void {.importc: "ImDrawList_AddLine".}
760 | proc addPolyline*(self: ptr ImDrawList, points: ptr ImVec2, num_points: int32, col: uint32, closed: bool, thickness: float32): void {.importc: "ImDrawList_AddPolyline".}
761 | proc addQuad*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, p3: ImVec2, p4: ImVec2, col: uint32, thickness: float32 = 1.0f): void {.importc: "ImDrawList_AddQuad".}
762 | proc addQuadFilled*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, p3: ImVec2, p4: ImVec2, col: uint32): void {.importc: "ImDrawList_AddQuadFilled".}
763 | proc addRect*(self: ptr ImDrawList, p_min: ImVec2, p_max: ImVec2, col: uint32, rounding: float32 = 0.0f, rounding_corners: ImDrawCornerFlags = ImDrawCornerFlags.All, thickness: float32 = 1.0f): void {.importc: "ImDrawList_AddRect".}
764 | proc addRectFilled*(self: ptr ImDrawList, p_min: ImVec2, p_max: ImVec2, col: uint32, rounding: float32 = 0.0f, rounding_corners: ImDrawCornerFlags = ImDrawCornerFlags.All): void {.importc: "ImDrawList_AddRectFilled".}
765 | proc addRectFilledMultiColor*(self: ptr ImDrawList, p_min: ImVec2, p_max: ImVec2, col_upr_left: uint32, col_upr_right: uint32, col_bot_right: uint32, col_bot_left: uint32): void {.importc: "ImDrawList_AddRectFilledMultiColor".}
766 | proc addText*(self: ptr ImDrawList, pos: ImVec2, col: uint32, text_begin: cstring, text_end: cstring = nil): void {.importc: "ImDrawList_AddText".}
767 | proc addText*(self: ptr ImDrawList, font: ptr ImFont, font_size: float32, pos: ImVec2, col: uint32, text_begin: cstring, text_end: cstring = nil, wrap_width: float32 = 0.0f, cpu_fine_clip_rect: ptr ImVec4 = nil): void {.importc: "ImDrawList_AddTextFontPtr".}
768 | proc addTriangle*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, p3: ImVec2, col: uint32, thickness: float32 = 1.0f): void {.importc: "ImDrawList_AddTriangle".}
769 | proc addTriangleFilled*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, p3: ImVec2, col: uint32): void {.importc: "ImDrawList_AddTriangleFilled".}
770 | proc channelsMerge*(self: ptr ImDrawList): void {.importc: "ImDrawList_ChannelsMerge".}
771 | proc channelsSetCurrent*(self: ptr ImDrawList, n: int32): void {.importc: "ImDrawList_ChannelsSetCurrent".}
772 | proc channelsSplit*(self: ptr ImDrawList, count: int32): void {.importc: "ImDrawList_ChannelsSplit".}
773 | proc clear*(self: ptr ImDrawList): void {.importc: "ImDrawList_Clear".}
774 | proc clearFreeMemory*(self: ptr ImDrawList): void {.importc: "ImDrawList_ClearFreeMemory".}
775 | proc cloneOutput*(self: ptr ImDrawList): ptr ImDrawList {.importc: "ImDrawList_CloneOutput".}
776 | proc getClipRectMax*(self: ptr ImDrawList): ImVec2 {.importc: "ImDrawList_GetClipRectMax".}
777 | proc getClipRectMin*(self: ptr ImDrawList): ImVec2 {.importc: "ImDrawList_GetClipRectMin".}
778 | proc newImDrawList*(shared_data: ptr ImDrawListSharedData): void {.importc: "ImDrawList_ImDrawList".}
779 | proc pathArcTo*(self: ptr ImDrawList, center: ImVec2, radius: float32, a_min: float32, a_max: float32, num_segments: int32 = 10): void {.importc: "ImDrawList_PathArcTo".}
780 | proc pathArcToFast*(self: ptr ImDrawList, center: ImVec2, radius: float32, a_min_of_12: int32, a_max_of_12: int32): void {.importc: "ImDrawList_PathArcToFast".}
781 | proc pathBezierCurveTo*(self: ptr ImDrawList, p1: ImVec2, p2: ImVec2, p3: ImVec2, num_segments: int32 = 0): void {.importc: "ImDrawList_PathBezierCurveTo".}
782 | proc pathClear*(self: ptr ImDrawList): void {.importc: "ImDrawList_PathClear".}
783 | proc pathFillConvex*(self: ptr ImDrawList, col: uint32): void {.importc: "ImDrawList_PathFillConvex".}
784 | proc pathLineTo*(self: ptr ImDrawList, pos: ImVec2): void {.importc: "ImDrawList_PathLineTo".}
785 | proc pathLineToMergeDuplicate*(self: ptr ImDrawList, pos: ImVec2): void {.importc: "ImDrawList_PathLineToMergeDuplicate".}
786 | proc pathRect*(self: ptr ImDrawList, rect_min: ImVec2, rect_max: ImVec2, rounding: float32 = 0.0f, rounding_corners: ImDrawCornerFlags = ImDrawCornerFlags.All): void {.importc: "ImDrawList_PathRect".}
787 | proc pathStroke*(self: ptr ImDrawList, col: uint32, closed: bool, thickness: float32 = 1.0f): void {.importc: "ImDrawList_PathStroke".}
788 | proc popClipRect*(self: ptr ImDrawList): void {.importc: "ImDrawList_PopClipRect".}
789 | proc popTextureID*(self: ptr ImDrawList): void {.importc: "ImDrawList_PopTextureID".}
790 | proc primQuadUV*(self: ptr ImDrawList, a: ImVec2, b: ImVec2, c: ImVec2, d: ImVec2, uv_a: ImVec2, uv_b: ImVec2, uv_c: ImVec2, uv_d: ImVec2, col: uint32): void {.importc: "ImDrawList_PrimQuadUV".}
791 | proc primRect*(self: ptr ImDrawList, a: ImVec2, b: ImVec2, col: uint32): void {.importc: "ImDrawList_PrimRect".}
792 | proc primRectUV*(self: ptr ImDrawList, a: ImVec2, b: ImVec2, uv_a: ImVec2, uv_b: ImVec2, col: uint32): void {.importc: "ImDrawList_PrimRectUV".}
793 | proc primReserve*(self: ptr ImDrawList, idx_count: int32, vtx_count: int32): void {.importc: "ImDrawList_PrimReserve".}
794 | proc primVtx*(self: ptr ImDrawList, pos: ImVec2, uv: ImVec2, col: uint32): void {.importc: "ImDrawList_PrimVtx".}
795 | proc primWriteIdx*(self: ptr ImDrawList, idx: ImDrawIdx): void {.importc: "ImDrawList_PrimWriteIdx".}
796 | proc primWriteVtx*(self: ptr ImDrawList, pos: ImVec2, uv: ImVec2, col: uint32): void {.importc: "ImDrawList_PrimWriteVtx".}
797 | proc pushClipRect*(self: ptr ImDrawList, clip_rect_min: ImVec2, clip_rect_max: ImVec2, intersect_with_current_clip_rect: bool = false): void {.importc: "ImDrawList_PushClipRect".}
798 | proc pushClipRectFullScreen*(self: ptr ImDrawList): void {.importc: "ImDrawList_PushClipRectFullScreen".}
799 | proc pushTextureID*(self: ptr ImDrawList, texture_id: ImTextureID): void {.importc: "ImDrawList_PushTextureID".}
800 | proc updateClipRect*(self: ptr ImDrawList): void {.importc: "ImDrawList_UpdateClipRect".}
801 | proc updateTextureID*(self: ptr ImDrawList): void {.importc: "ImDrawList_UpdateTextureID".}
802 | proc destroy*(self: ptr ImDrawList): void {.importc: "ImDrawList_destroy".}
803 | proc newImFontAtlasCustomRect*(): void {.importc: "ImFontAtlasCustomRect_ImFontAtlasCustomRect".}
804 | proc isPacked*(self: ptr ImFontAtlasCustomRect): bool {.importc: "ImFontAtlasCustomRect_IsPacked".}
805 | proc destroy*(self: ptr ImFontAtlasCustomRect): void {.importc: "ImFontAtlasCustomRect_destroy".}
806 | proc addCustomRectFontGlyph*(self: ptr ImFontAtlas, font: ptr ImFont, id: ImWchar, width: int32, height: int32, advance_x: float32, offset: ImVec2 = ImVec2(x: 0, y: 0)): int32 {.importc: "ImFontAtlas_AddCustomRectFontGlyph".}
807 | proc addCustomRectRegular*(self: ptr ImFontAtlas, id: uint32, width: int32, height: int32): int32 {.importc: "ImFontAtlas_AddCustomRectRegular".}
808 | proc addFont*(self: ptr ImFontAtlas, font_cfg: ptr ImFontConfig): ptr ImFont {.importc: "ImFontAtlas_AddFont".}
809 | proc addFontDefault*(self: ptr ImFontAtlas, font_cfg: ptr ImFontConfig = nil): ptr ImFont {.importc: "ImFontAtlas_AddFontDefault".}
810 | proc addFontFromFileTTF*(self: ptr ImFontAtlas, filename: cstring, size_pixels: float32, font_cfg: ptr ImFontConfig = nil, glyph_ranges: ptr ImWchar = nil): ptr ImFont {.importc: "ImFontAtlas_AddFontFromFileTTF".}
811 | proc addFontFromMemoryCompressedBase85TTF*(self: ptr ImFontAtlas, compressed_font_data_base85: cstring, size_pixels: float32, font_cfg: ptr ImFontConfig = nil, glyph_ranges: ptr ImWchar = nil): ptr ImFont {.importc: "ImFontAtlas_AddFontFromMemoryCompressedBase85TTF".}
812 | proc addFontFromMemoryCompressedTTF*(self: ptr ImFontAtlas, compressed_font_data: pointer, compressed_font_size: int32, size_pixels: float32, font_cfg: ptr ImFontConfig = nil, glyph_ranges: ptr ImWchar = nil): ptr ImFont {.importc: "ImFontAtlas_AddFontFromMemoryCompressedTTF".}
813 | proc addFontFromMemoryTTF*(self: ptr ImFontAtlas, font_data: pointer, font_size: int32, size_pixels: float32, font_cfg: ptr ImFontConfig = nil, glyph_ranges: ptr ImWchar = nil): ptr ImFont {.importc: "ImFontAtlas_AddFontFromMemoryTTF".}
814 | proc build*(self: ptr ImFontAtlas): bool {.importc: "ImFontAtlas_Build".}
815 | proc calcCustomRectUV*(self: ptr ImFontAtlas, rect: ptr ImFontAtlasCustomRect, out_uv_min: ptr ImVec2, out_uv_max: ptr ImVec2): void {.importc: "ImFontAtlas_CalcCustomRectUV".}
816 | proc clear*(self: ptr ImFontAtlas): void {.importc: "ImFontAtlas_Clear".}
817 | proc clearFonts*(self: ptr ImFontAtlas): void {.importc: "ImFontAtlas_ClearFonts".}
818 | proc clearInputData*(self: ptr ImFontAtlas): void {.importc: "ImFontAtlas_ClearInputData".}
819 | proc clearTexData*(self: ptr ImFontAtlas): void {.importc: "ImFontAtlas_ClearTexData".}
820 | proc getCustomRectByIndex*(self: ptr ImFontAtlas, index: int32): ptr ImFontAtlasCustomRect {.importc: "ImFontAtlas_GetCustomRectByIndex".}
821 | proc getGlyphRangesChineseFull*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesChineseFull".}
822 | proc getGlyphRangesChineseSimplifiedCommon*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon".}
823 | proc getGlyphRangesCyrillic*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesCyrillic".}
824 | proc getGlyphRangesDefault*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesDefault".}
825 | proc getGlyphRangesJapanese*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesJapanese".}
826 | proc getGlyphRangesKorean*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesKorean".}
827 | proc getGlyphRangesThai*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesThai".}
828 | proc getGlyphRangesVietnamese*(self: ptr ImFontAtlas): ptr ImWchar {.importc: "ImFontAtlas_GetGlyphRangesVietnamese".}
829 | proc getMouseCursorTexData*(self: ptr ImFontAtlas, cursor: ImGuiMouseCursor, out_offset: ptr ImVec2, out_size: ptr ImVec2, out_uv_border: var array[2, ImVec2], out_uv_fill: var array[2, ImVec2]): bool {.importc: "ImFontAtlas_GetMouseCursorTexData".}
830 | proc getTexDataAsAlpha8*(self: ptr ImFontAtlas, out_pixels: ptr ptr cuchar, out_width: ptr int32, out_height: ptr int32, out_bytes_per_pixel: ptr int32 = nil): void {.importc: "ImFontAtlas_GetTexDataAsAlpha8".}
831 | proc getTexDataAsRGBA32*(self: ptr ImFontAtlas, out_pixels: ptr ptr cuchar, out_width: ptr int32, out_height: ptr int32, out_bytes_per_pixel: ptr int32 = nil): void {.importc: "ImFontAtlas_GetTexDataAsRGBA32".}
832 | proc newImFontAtlas*(): void {.importc: "ImFontAtlas_ImFontAtlas".}
833 | proc isBuilt*(self: ptr ImFontAtlas): bool {.importc: "ImFontAtlas_IsBuilt".}
834 | proc setTexID*(self: ptr ImFontAtlas, id: ImTextureID): void {.importc: "ImFontAtlas_SetTexID".}
835 | proc destroy*(self: ptr ImFontAtlas): void {.importc: "ImFontAtlas_destroy".}
836 | proc newImFontConfig*(): void {.importc: "ImFontConfig_ImFontConfig".}
837 | proc destroy*(self: ptr ImFontConfig): void {.importc: "ImFontConfig_destroy".}
838 | proc addChar*(self: ptr ImFontGlyphRangesBuilder, c: ImWchar): void {.importc: "ImFontGlyphRangesBuilder_AddChar".}
839 | proc addRanges*(self: ptr ImFontGlyphRangesBuilder, ranges: ptr ImWchar): void {.importc: "ImFontGlyphRangesBuilder_AddRanges".}
840 | proc addText*(self: ptr ImFontGlyphRangesBuilder, text: cstring, text_end: cstring = nil): void {.importc: "ImFontGlyphRangesBuilder_AddText".}
841 | proc buildRanges*(self: ptr ImFontGlyphRangesBuilder, out_ranges: ptr ImVector[ImWchar]): void {.importc: "ImFontGlyphRangesBuilder_BuildRanges".}
842 | proc clear*(self: ptr ImFontGlyphRangesBuilder): void {.importc: "ImFontGlyphRangesBuilder_Clear".}
843 | proc getBit*(self: ptr ImFontGlyphRangesBuilder, n: int32): bool {.importc: "ImFontGlyphRangesBuilder_GetBit".}
844 | proc newImFontGlyphRangesBuilder*(): void {.importc: "ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder".}
845 | proc setBit*(self: ptr ImFontGlyphRangesBuilder, n: int32): void {.importc: "ImFontGlyphRangesBuilder_SetBit".}
846 | proc destroy*(self: ptr ImFontGlyphRangesBuilder): void {.importc: "ImFontGlyphRangesBuilder_destroy".}
847 | proc addGlyph*(self: ptr ImFont, c: ImWchar, x0: float32, y0: float32, x1: float32, y1: float32, u0: float32, v0: float32, u1: float32, v1: float32, advance_x: float32): void {.importc: "ImFont_AddGlyph".}
848 | proc addRemapChar*(self: ptr ImFont, dst: ImWchar, src: ImWchar, overwrite_dst: bool = true): void {.importc: "ImFont_AddRemapChar".}
849 | proc buildLookupTable*(self: ptr ImFont): void {.importc: "ImFont_BuildLookupTable".}
850 | proc calcTextSizeA*(self: ptr ImFont, size: float32, max_width: float32, wrap_width: float32, text_begin: cstring, text_end: cstring = nil, remaining: ptr cstring = nil): ImVec2 {.importc: "ImFont_CalcTextSizeA".}
851 | proc calcWordWrapPositionA*(self: ptr ImFont, scale: float32, text: cstring, text_end: cstring, wrap_width: float32): cstring {.importc: "ImFont_CalcWordWrapPositionA".}
852 | proc clearOutputData*(self: ptr ImFont): void {.importc: "ImFont_ClearOutputData".}
853 | proc findGlyph*(self: ptr ImFont, c: ImWchar): ptr ImFontGlyph {.importc: "ImFont_FindGlyph".}
854 | proc findGlyphNoFallback*(self: ptr ImFont, c: ImWchar): ptr ImFontGlyph {.importc: "ImFont_FindGlyphNoFallback".}
855 | proc getCharAdvance*(self: ptr ImFont, c: ImWchar): float32 {.importc: "ImFont_GetCharAdvance".}
856 | proc getDebugName*(self: ptr ImFont): cstring {.importc: "ImFont_GetDebugName".}
857 | proc growIndex*(self: ptr ImFont, new_size: int32): void {.importc: "ImFont_GrowIndex".}
858 | proc newImFont*(): void {.importc: "ImFont_ImFont".}
859 | proc isLoaded*(self: ptr ImFont): bool {.importc: "ImFont_IsLoaded".}
860 | proc renderChar*(self: ptr ImFont, draw_list: ptr ImDrawList, size: float32, pos: ImVec2, col: uint32, c: ImWchar): void {.importc: "ImFont_RenderChar".}
861 | proc renderText*(self: ptr ImFont, draw_list: ptr ImDrawList, size: float32, pos: ImVec2, col: uint32, clip_rect: ImVec4, text_begin: cstring, text_end: cstring, wrap_width: float32 = 0.0f, cpu_fine_clip: bool = false): void {.importc: "ImFont_RenderText".}
862 | proc setFallbackChar*(self: ptr ImFont, c: ImWchar): void {.importc: "ImFont_SetFallbackChar".}
863 | proc destroy*(self: ptr ImFont): void {.importc: "ImFont_destroy".}
864 | proc addInputCharacter*(self: ptr ImGuiIO, c: uint32): void {.importc: "ImGuiIO_AddInputCharacter".}
865 | proc addInputCharactersUTF8*(self: ptr ImGuiIO, str: cstring): void {.importc: "ImGuiIO_AddInputCharactersUTF8".}
866 | proc clearInputCharacters*(self: ptr ImGuiIO): void {.importc: "ImGuiIO_ClearInputCharacters".}
867 | proc newImGuiIO*(): void {.importc: "ImGuiIO_ImGuiIO".}
868 | proc destroy*(self: ptr ImGuiIO): void {.importc: "ImGuiIO_destroy".}
869 | proc deleteChars*(self: ptr ImGuiInputTextCallbackData, pos: int32, bytes_count: int32): void {.importc: "ImGuiInputTextCallbackData_DeleteChars".}
870 | proc hasSelection*(self: ptr ImGuiInputTextCallbackData): bool {.importc: "ImGuiInputTextCallbackData_HasSelection".}
871 | proc newImGuiInputTextCallbackData*(): void {.importc: "ImGuiInputTextCallbackData_ImGuiInputTextCallbackData".}
872 | proc insertChars*(self: ptr ImGuiInputTextCallbackData, pos: int32, text: cstring, text_end: cstring = nil): void {.importc: "ImGuiInputTextCallbackData_InsertChars".}
873 | proc destroy*(self: ptr ImGuiInputTextCallbackData): void {.importc: "ImGuiInputTextCallbackData_destroy".}
874 | proc begin*(self: ptr ImGuiListClipper, items_count: int32, items_height: float32 = -1.0f): void {.importc: "ImGuiListClipper_Begin".}
875 | proc `end`*(self: ptr ImGuiListClipper): void {.importc: "ImGuiListClipper_End".}
876 | proc newImGuiListClipper*(items_count: int32 = -1, items_height: float32 = -1.0f): void {.importc: "ImGuiListClipper_ImGuiListClipper".}
877 | proc step*(self: ptr ImGuiListClipper): bool {.importc: "ImGuiListClipper_Step".}
878 | proc destroy*(self: ptr ImGuiListClipper): void {.importc: "ImGuiListClipper_destroy".}
879 | proc newImGuiOnceUponAFrame*(): void {.importc: "ImGuiOnceUponAFrame_ImGuiOnceUponAFrame".}
880 | proc destroy*(self: ptr ImGuiOnceUponAFrame): void {.importc: "ImGuiOnceUponAFrame_destroy".}
881 | proc clear*(self: ptr ImGuiPayload): void {.importc: "ImGuiPayload_Clear".}
882 | proc newImGuiPayload*(): void {.importc: "ImGuiPayload_ImGuiPayload".}
883 | proc isDataType*(self: ptr ImGuiPayload, `type`: cstring): bool {.importc: "ImGuiPayload_IsDataType".}
884 | proc isDelivery*(self: ptr ImGuiPayload): bool {.importc: "ImGuiPayload_IsDelivery".}
885 | proc isPreview*(self: ptr ImGuiPayload): bool {.importc: "ImGuiPayload_IsPreview".}
886 | proc destroy*(self: ptr ImGuiPayload): void {.importc: "ImGuiPayload_destroy".}
887 | proc newImGuiStoragePair*(key: ImGuiID, val_i: int32): void {.importc: "ImGuiStoragePair_ImGuiStoragePairInt".}
888 | proc newImGuiStoragePair*(key: ImGuiID, val_f: float32): void {.importc: "ImGuiStoragePair_ImGuiStoragePairFloat".}
889 | proc newImGuiStoragePair*(key: ImGuiID, val_p: pointer): void {.importc: "ImGuiStoragePair_ImGuiStoragePairPtr".}
890 | proc destroy*(self: ptr ImGuiStoragePair): void {.importc: "ImGuiStoragePair_destroy".}
891 | proc buildSortByKey*(self: ptr ImGuiStorage): void {.importc: "ImGuiStorage_BuildSortByKey".}
892 | proc clear*(self: ptr ImGuiStorage): void {.importc: "ImGuiStorage_Clear".}
893 | proc getBool*(self: ptr ImGuiStorage, key: ImGuiID, default_val: bool = false): bool {.importc: "ImGuiStorage_GetBool".}
894 | proc getBoolRef*(self: ptr ImGuiStorage, key: ImGuiID, default_val: bool = false): ptr bool {.importc: "ImGuiStorage_GetBoolRef".}
895 | proc getFloat*(self: ptr ImGuiStorage, key: ImGuiID, default_val: float32 = 0.0f): float32 {.importc: "ImGuiStorage_GetFloat".}
896 | proc getFloatRef*(self: ptr ImGuiStorage, key: ImGuiID, default_val: float32 = 0.0f): ptr float32 {.importc: "ImGuiStorage_GetFloatRef".}
897 | proc getInt*(self: ptr ImGuiStorage, key: ImGuiID, default_val: int32 = 0): int32 {.importc: "ImGuiStorage_GetInt".}
898 | proc getIntRef*(self: ptr ImGuiStorage, key: ImGuiID, default_val: int32 = 0): ptr int32 {.importc: "ImGuiStorage_GetIntRef".}
899 | proc getVoidPtr*(self: ptr ImGuiStorage, key: ImGuiID): pointer {.importc: "ImGuiStorage_GetVoidPtr".}
900 | proc getVoidPtrRef*(self: ptr ImGuiStorage, key: ImGuiID, default_val: pointer = nil): ptr pointer {.importc: "ImGuiStorage_GetVoidPtrRef".}
901 | proc setAllInt*(self: ptr ImGuiStorage, val: int32): void {.importc: "ImGuiStorage_SetAllInt".}
902 | proc setBool*(self: ptr ImGuiStorage, key: ImGuiID, val: bool): void {.importc: "ImGuiStorage_SetBool".}
903 | proc setFloat*(self: ptr ImGuiStorage, key: ImGuiID, val: float32): void {.importc: "ImGuiStorage_SetFloat".}
904 | proc setInt*(self: ptr ImGuiStorage, key: ImGuiID, val: int32): void {.importc: "ImGuiStorage_SetInt".}
905 | proc setVoidPtr*(self: ptr ImGuiStorage, key: ImGuiID, val: pointer): void {.importc: "ImGuiStorage_SetVoidPtr".}
906 | proc newImGuiStyle*(): void {.importc: "ImGuiStyle_ImGuiStyle".}
907 | proc scaleAllSizes*(self: ptr ImGuiStyle, scale_factor: float32): void {.importc: "ImGuiStyle_ScaleAllSizes".}
908 | proc destroy*(self: ptr ImGuiStyle): void {.importc: "ImGuiStyle_destroy".}
909 | proc newImGuiTextBuffer*(): void {.importc: "ImGuiTextBuffer_ImGuiTextBuffer".}
910 | proc append*(self: ptr ImGuiTextBuffer, str: cstring, str_end: cstring = nil): void {.importc: "ImGuiTextBuffer_append".}
911 | proc appendf*(self: ptr ImGuiTextBuffer, fmt: cstring): void {.importc: "ImGuiTextBuffer_appendf", varargs.}
912 | proc appendfv*(self: ptr ImGuiTextBuffer, fmt: cstring): void {.importc: "ImGuiTextBuffer_appendfv", varargs.}
913 | proc begin*(self: ptr ImGuiTextBuffer): cstring {.importc: "ImGuiTextBuffer_begin".}
914 | proc c_str*(self: ptr ImGuiTextBuffer): cstring {.importc: "ImGuiTextBuffer_c_str".}
915 | proc clear*(self: ptr ImGuiTextBuffer): void {.importc: "ImGuiTextBuffer_clear".}
916 | proc destroy*(self: ptr ImGuiTextBuffer): void {.importc: "ImGuiTextBuffer_destroy".}
917 | proc empty*(self: ptr ImGuiTextBuffer): bool {.importc: "ImGuiTextBuffer_empty".}
918 | proc `end`*(self: ptr ImGuiTextBuffer): cstring {.importc: "ImGuiTextBuffer_end".}
919 | proc reserve*(self: ptr ImGuiTextBuffer, capacity: int32): void {.importc: "ImGuiTextBuffer_reserve".}
920 | proc size*(self: ptr ImGuiTextBuffer): int32 {.importc: "ImGuiTextBuffer_size".}
921 | proc build*(self: ptr ImGuiTextFilter): void {.importc: "ImGuiTextFilter_Build".}
922 | proc clear*(self: ptr ImGuiTextFilter): void {.importc: "ImGuiTextFilter_Clear".}
923 | proc draw*(self: ptr ImGuiTextFilter, label: cstring = "Filter(inc,-exc)", width: float32 = 0.0f): bool {.importc: "ImGuiTextFilter_Draw".}
924 | proc newImGuiTextFilter*(default_filter: cstring = ""): void {.importc: "ImGuiTextFilter_ImGuiTextFilter".}
925 | proc isActive*(self: ptr ImGuiTextFilter): bool {.importc: "ImGuiTextFilter_IsActive".}
926 | proc passFilter*(self: ptr ImGuiTextFilter, text: cstring, text_end: cstring = nil): bool {.importc: "ImGuiTextFilter_PassFilter".}
927 | proc destroy*(self: ptr ImGuiTextFilter): void {.importc: "ImGuiTextFilter_destroy".}
928 | proc newImGuiTextRange*(): void {.importc: "ImGuiTextRange_ImGuiTextRange".}
929 | proc newImGuiTextRange*(b: cstring, e: cstring): void {.importc: "ImGuiTextRange_ImGuiTextRangeStr".}
930 | proc destroy*(self: ptr ImGuiTextRange): void {.importc: "ImGuiTextRange_destroy".}
931 | proc empty*(self: ptr ImGuiTextRange): bool {.importc: "ImGuiTextRange_empty".}
932 | proc split*(self: ptr ImGuiTextRange, separator: int8, `out`: ptr ImVector[ImGuiTextRange]): void {.importc: "ImGuiTextRange_split".}
933 | proc newImVec2*(): void {.importc: "ImVec2_ImVec2".}
934 | proc newImVec2*(x: float32, y: float32): void {.importc: "ImVec2_ImVec2Float".}
935 | proc destroy*(self: ptr ImVec2): void {.importc: "ImVec2_destroy".}
936 | proc newImVec4*(): void {.importc: "ImVec4_ImVec4".}
937 | proc newImVec4*(x: float32, y: float32, z: float32, w: float32): void {.importc: "ImVec4_ImVec4Float".}
938 | proc destroy*(self: ptr ImVec4): void {.importc: "ImVec4_destroy".}
939 | proc grow_capacity*(self: ptr ImVector, sz: int32): int32 {.importc: "ImVector__grow_capacity".}
940 | proc back*[T](self: ptr ImVector): ptr T {.importc: "ImVector_back".}
941 | proc begin*[T](self: ptr ImVector): ptr T {.importc: "ImVector_begin".}
942 | proc capacity*(self: ptr ImVector): int32 {.importc: "ImVector_capacity".}
943 | proc clear*(self: ptr ImVector): void {.importc: "ImVector_clear".}
944 | proc contains*[T](self: ptr ImVector, v: T): bool {.importc: "ImVector_contains".}
945 | proc destroy*(self: ptr ImVector): void {.importc: "ImVector_destroy".}
946 | proc empty*(self: ptr ImVector): bool {.importc: "ImVector_empty".}
947 | proc `end`*[T](self: ptr ImVector): ptr T {.importc: "ImVector_end".}
948 | proc erase*[T](self: ptr ImVector, it: ptr T): ptr T {.importc: "ImVector_erase".}
949 | proc erase*[T](self: ptr ImVector, it: ptr T, it_last: ptr T): ptr T {.importc: "ImVector_eraseTPtr".}
950 | proc erase_unsorted*[T](self: ptr ImVector, it: ptr T): ptr T {.importc: "ImVector_erase_unsorted".}
951 | proc find*[T](self: ptr ImVector, v: T): ptr T {.importc: "ImVector_find".}
952 | proc find_erase*[T](self: ptr ImVector, v: T): bool {.importc: "ImVector_find_erase".}
953 | proc find_erase_unsorted*[T](self: ptr ImVector, v: T): bool {.importc: "ImVector_find_erase_unsorted".}
954 | proc front*[T](self: ptr ImVector): ptr T {.importc: "ImVector_front".}
955 | proc index_from_ptr*[T](self: ptr ImVector, it: ptr T): int32 {.importc: "ImVector_index_from_ptr".}
956 | proc insert*[T](self: ptr ImVector, it: ptr T, v: T): ptr T {.importc: "ImVector_insert".}
957 | proc pop_back*(self: ptr ImVector): void {.importc: "ImVector_pop_back".}
958 | proc push_back*[T](self: ptr ImVector, v: T): void {.importc: "ImVector_push_back".}
959 | proc push_front*[T](self: ptr ImVector, v: T): void {.importc: "ImVector_push_front".}
960 | proc reserve*(self: ptr ImVector, new_capacity: int32): void {.importc: "ImVector_reserve".}
961 | proc resize*(self: ptr ImVector, new_size: int32): void {.importc: "ImVector_resize".}
962 | proc resize*[T](self: ptr ImVector, new_size: int32, v: T): void {.importc: "ImVector_resizeT".}
963 | proc shrink*(self: ptr ImVector, new_size: int32): void {.importc: "ImVector_shrink".}
964 | proc size*(self: ptr ImVector): int32 {.importc: "ImVector_size".}
965 | proc size_in_bytes*(self: ptr ImVector): int32 {.importc: "ImVector_size_in_bytes".}
966 | proc swap*(self: ptr ImVector, rhs: ImVector): void {.importc: "ImVector_swap".}
967 | proc igAcceptDragDropPayload*(`type`: cstring, flags: ImGuiDragDropFlags = 0.ImGuiDragDropFlags): ptr ImGuiPayload {.importc: "igAcceptDragDropPayload".}
968 | proc igAlignTextToFramePadding*(): void {.importc: "igAlignTextToFramePadding".}
969 | proc igArrowButton*(str_id: cstring, dir: ImGuiDir): bool {.importc: "igArrowButton".}
970 | proc igBegin*(name: cstring, p_open: ptr bool = nil, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBegin".}
971 | proc igBeginChild*(str_id: cstring, size: ImVec2 = ImVec2(x: 0, y: 0), border: bool = false, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBeginChild".}
972 | proc igBeginChild*(id: ImGuiID, size: ImVec2 = ImVec2(x: 0, y: 0), border: bool = false, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBeginChildID".}
973 | proc igBeginChildFrame*(id: ImGuiID, size: ImVec2, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBeginChildFrame".}
974 | proc igBeginCombo*(label: cstring, preview_value: cstring, flags: ImGuiComboFlags = 0.ImGuiComboFlags): bool {.importc: "igBeginCombo".}
975 | proc igBeginDragDropSource*(flags: ImGuiDragDropFlags = 0.ImGuiDragDropFlags): bool {.importc: "igBeginDragDropSource".}
976 | proc igBeginDragDropTarget*(): bool {.importc: "igBeginDragDropTarget".}
977 | proc igBeginGroup*(): void {.importc: "igBeginGroup".}
978 | proc igBeginMainMenuBar*(): bool {.importc: "igBeginMainMenuBar".}
979 | proc igBeginMenu*(label: cstring, enabled: bool = true): bool {.importc: "igBeginMenu".}
980 | proc igBeginMenuBar*(): bool {.importc: "igBeginMenuBar".}
981 | proc igBeginPopup*(str_id: cstring, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBeginPopup".}
982 | proc igBeginPopupContextItem*(str_id: cstring = nil, mouse_button: int32 = 1): bool {.importc: "igBeginPopupContextItem".}
983 | proc igBeginPopupContextVoid*(str_id: cstring = nil, mouse_button: int32 = 1): bool {.importc: "igBeginPopupContextVoid".}
984 | proc igBeginPopupContextWindow*(str_id: cstring = nil, mouse_button: int32 = 1, also_over_items: bool = true): bool {.importc: "igBeginPopupContextWindow".}
985 | proc igBeginPopupModal*(name: cstring, p_open: ptr bool = nil, flags: ImGuiWindowFlags = 0.ImGuiWindowFlags): bool {.importc: "igBeginPopupModal".}
986 | proc igBeginTabBar*(str_id: cstring, flags: ImGuiTabBarFlags = 0.ImGuiTabBarFlags): bool {.importc: "igBeginTabBar".}
987 | proc igBeginTabItem*(label: cstring, p_open: ptr bool = nil, flags: ImGuiTabItemFlags = 0.ImGuiTabItemFlags): bool {.importc: "igBeginTabItem".}
988 | proc igBeginTooltip*(): void {.importc: "igBeginTooltip".}
989 | proc igBullet*(): void {.importc: "igBullet".}
990 | proc igBulletText*(fmt: cstring): void {.importc: "igBulletText", varargs.}
991 | proc igBulletTextV*(fmt: cstring): void {.importc: "igBulletTextV", varargs.}
992 | proc igButton*(label: cstring, size: ImVec2 = ImVec2(x: 0, y: 0)): bool {.importc: "igButton".}
993 | proc igCalcItemWidth*(): float32 {.importc: "igCalcItemWidth".}
994 | proc igCalcListClipping*(items_count: int32, items_height: float32, out_items_display_start: ptr int32, out_items_display_end: ptr int32): void {.importc: "igCalcListClipping".}
995 | proc igCalcTextSize*(text: cstring, text_end: cstring = nil, hide_text_after_double_hash: bool = false, wrap_width: float32 = -1.0f): ImVec2 {.importc: "igCalcTextSize".}
996 | proc igCaptureKeyboardFromApp*(want_capture_keyboard_value: bool = true): void {.importc: "igCaptureKeyboardFromApp".}
997 | proc igCaptureMouseFromApp*(want_capture_mouse_value: bool = true): void {.importc: "igCaptureMouseFromApp".}
998 | proc igCheckbox*(label: cstring, v: ptr bool): bool {.importc: "igCheckbox".}
999 | proc igCheckboxFlags*(label: cstring, flags: ptr uint32, flags_value: uint32): bool {.importc: "igCheckboxFlags".}
1000 | proc igCloseCurrentPopup*(): void {.importc: "igCloseCurrentPopup".}
1001 | proc igCollapsingHeader*(label: cstring, flags: ImGuiTreeNodeFlags = 0.ImGuiTreeNodeFlags): bool {.importc: "igCollapsingHeader".}
1002 | proc igCollapsingHeader*(label: cstring, p_open: ptr bool, flags: ImGuiTreeNodeFlags = 0.ImGuiTreeNodeFlags): bool {.importc: "igCollapsingHeaderBoolPtr".}
1003 | proc igColorButton*(desc_id: cstring, col: ImVec4, flags: ImGuiColorEditFlags = 0.ImGuiColorEditFlags, size: ImVec2 = ImVec2(x: 0, y: 0)): bool {.importc: "igColorButton".}
1004 | proc igColorConvertFloat4ToU32*(`in`: ImVec4): uint32 {.importc: "igColorConvertFloat4ToU32".}
1005 | proc igColorConvertHSVtoRGB*(h: float32, s: float32, v: float32, out_r: float32, out_g: float32, out_b: float32): void {.importc: "igColorConvertHSVtoRGB".}
1006 | proc igColorConvertRGBtoHSV*(r: float32, g: float32, b: float32, out_h: float32, out_s: float32, out_v: float32): void {.importc: "igColorConvertRGBtoHSV".}
1007 | proc igColorConvertU32ToFloat4*(`in`: uint32): ImVec4 {.importc: "igColorConvertU32ToFloat4".}
1008 | proc igColorEdit3*(label: cstring, col: var array[3, float32], flags: ImGuiColorEditFlags = 0.ImGuiColorEditFlags): bool {.importc: "igColorEdit3".}
1009 | proc igColorEdit4*(label: cstring, col: var array[4, float32], flags: ImGuiColorEditFlags = 0.ImGuiColorEditFlags): bool {.importc: "igColorEdit4".}
1010 | proc igColorPicker3*(label: cstring, col: var array[3, float32], flags: ImGuiColorEditFlags = 0.ImGuiColorEditFlags): bool {.importc: "igColorPicker3".}
1011 | proc igColorPicker4*(label: cstring, col: var array[4, float32], flags: ImGuiColorEditFlags = 0.ImGuiColorEditFlags, ref_col: ptr float32 = nil): bool {.importc: "igColorPicker4".}
1012 | proc igColumns*(count: int32 = 1, id: cstring = nil, border: bool = true): void {.importc: "igColumns".}
1013 | proc igCombo*(label: cstring, current_item: ptr int32, items: ptr cstring, items_count: int32, popup_max_height_in_items: int32 = -1): bool {.importc: "igCombo".}
1014 | proc igCombo*(label: cstring, current_item: ptr int32, items_separated_by_zeros: cstring, popup_max_height_in_items: int32 = -1): bool {.importc: "igComboStr".}
1015 | proc igCombo*(label: cstring, current_item: ptr int32, items_getter: proc(data: pointer, idx: int32, out_text: ptr cstring): bool, data: pointer, items_count: int32, popup_max_height_in_items: int32 = -1): bool {.importc: "igComboFnPtr".}
1016 | proc igCreateContext*(shared_font_atlas: ptr ImFontAtlas = nil): ptr ImGuiContext {.importc: "igCreateContext".}
1017 | proc igDebugCheckVersionAndDataLayout*(version_str: cstring, sz_io: uint, sz_style: uint, sz_vec2: uint, sz_vec4: uint, sz_drawvert: uint, sz_drawidx: uint): bool {.importc: "igDebugCheckVersionAndDataLayout".}
1018 | proc igDestroyContext*(ctx: ptr ImGuiContext = nil): void {.importc: "igDestroyContext".}
1019 | proc igDragFloat*(label: cstring, v: ptr float32, v_speed: float32 = 1.0f, v_min: float32 = 0.0f, v_max: float32 = 0.0f, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igDragFloat".}
1020 | proc igDragFloat2*(label: cstring, v: var array[2, float32], v_speed: float32 = 1.0f, v_min: float32 = 0.0f, v_max: float32 = 0.0f, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igDragFloat2".}
1021 | proc igDragFloat3*(label: cstring, v: var array[3, float32], v_speed: float32 = 1.0f, v_min: float32 = 0.0f, v_max: float32 = 0.0f, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igDragFloat3".}
1022 | proc igDragFloat4*(label: cstring, v: var array[4, float32], v_speed: float32 = 1.0f, v_min: float32 = 0.0f, v_max: float32 = 0.0f, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igDragFloat4".}
1023 | proc igDragFloatRange2*(label: cstring, v_current_min: ptr float32, v_current_max: ptr float32, v_speed: float32 = 1.0f, v_min: float32 = 0.0f, v_max: float32 = 0.0f, format: cstring = "%.3f", format_max: cstring = nil, power: float32 = 1.0f): bool {.importc: "igDragFloatRange2".}
1024 | proc igDragInt*(label: cstring, v: ptr int32, v_speed: float32 = 1.0f, v_min: int32 = 0, v_max: int32 = 0, format: cstring = "%d"): bool {.importc: "igDragInt".}
1025 | proc igDragInt2*(label: cstring, v: var array[2, int32], v_speed: float32 = 1.0f, v_min: int32 = 0, v_max: int32 = 0, format: cstring = "%d"): bool {.importc: "igDragInt2".}
1026 | proc igDragInt3*(label: cstring, v: var array[3, int32], v_speed: float32 = 1.0f, v_min: int32 = 0, v_max: int32 = 0, format: cstring = "%d"): bool {.importc: "igDragInt3".}
1027 | proc igDragInt4*(label: cstring, v: var array[4, int32], v_speed: float32 = 1.0f, v_min: int32 = 0, v_max: int32 = 0, format: cstring = "%d"): bool {.importc: "igDragInt4".}
1028 | proc igDragIntRange2*(label: cstring, v_current_min: ptr int32, v_current_max: ptr int32, v_speed: float32 = 1.0f, v_min: int32 = 0, v_max: int32 = 0, format: cstring = "%d", format_max: cstring = nil): bool {.importc: "igDragIntRange2".}
1029 | proc igDragScalar*(label: cstring, data_type: ImGuiDataType, p_data: pointer, v_speed: float32, p_min: pointer = nil, p_max: pointer = nil, format: cstring = nil, power: float32 = 1.0f): bool {.importc: "igDragScalar".}
1030 | proc igDragScalarN*(label: cstring, data_type: ImGuiDataType, p_data: pointer, components: int32, v_speed: float32, p_min: pointer = nil, p_max: pointer = nil, format: cstring = nil, power: float32 = 1.0f): bool {.importc: "igDragScalarN".}
1031 | proc igDummy*(size: ImVec2): void {.importc: "igDummy".}
1032 | proc igEnd*(): void {.importc: "igEnd".}
1033 | proc igEndChild*(): void {.importc: "igEndChild".}
1034 | proc igEndChildFrame*(): void {.importc: "igEndChildFrame".}
1035 | proc igEndCombo*(): void {.importc: "igEndCombo".}
1036 | proc igEndDragDropSource*(): void {.importc: "igEndDragDropSource".}
1037 | proc igEndDragDropTarget*(): void {.importc: "igEndDragDropTarget".}
1038 | proc igEndFrame*(): void {.importc: "igEndFrame".}
1039 | proc igEndGroup*(): void {.importc: "igEndGroup".}
1040 | proc igEndMainMenuBar*(): void {.importc: "igEndMainMenuBar".}
1041 | proc igEndMenu*(): void {.importc: "igEndMenu".}
1042 | proc igEndMenuBar*(): void {.importc: "igEndMenuBar".}
1043 | proc igEndPopup*(): void {.importc: "igEndPopup".}
1044 | proc igEndTabBar*(): void {.importc: "igEndTabBar".}
1045 | proc igEndTabItem*(): void {.importc: "igEndTabItem".}
1046 | proc igEndTooltip*(): void {.importc: "igEndTooltip".}
1047 | proc igGetBackgroundDrawList*(): ptr ImDrawList {.importc: "igGetBackgroundDrawList".}
1048 | proc igGetClipboardText*(): cstring {.importc: "igGetClipboardText".}
1049 | proc igGetColorU32*(idx: ImGuiCol, alpha_mul: float32 = 1.0f): uint32 {.importc: "igGetColorU32".}
1050 | proc igGetColorU32*(col: ImVec4): uint32 {.importc: "igGetColorU32Vec4".}
1051 | proc igGetColorU32*(col: uint32): uint32 {.importc: "igGetColorU32U32".}
1052 | proc igGetColumnIndex*(): int32 {.importc: "igGetColumnIndex".}
1053 | proc igGetColumnOffset*(column_index: int32 = -1): float32 {.importc: "igGetColumnOffset".}
1054 | proc igGetColumnWidth*(column_index: int32 = -1): float32 {.importc: "igGetColumnWidth".}
1055 | proc igGetColumnsCount*(): int32 {.importc: "igGetColumnsCount".}
1056 | proc igGetContentRegionAvail*(): ImVec2 {.importc: "igGetContentRegionAvail".}
1057 | proc igGetContentRegionMax*(): ImVec2 {.importc: "igGetContentRegionMax".}
1058 | proc igGetCurrentContext*(): ptr ImGuiContext {.importc: "igGetCurrentContext".}
1059 | proc igGetCursorPos*(): ImVec2 {.importc: "igGetCursorPos".}
1060 | proc igGetCursorPosX*(): float32 {.importc: "igGetCursorPosX".}
1061 | proc igGetCursorPosY*(): float32 {.importc: "igGetCursorPosY".}
1062 | proc igGetCursorScreenPos*(): ImVec2 {.importc: "igGetCursorScreenPos".}
1063 | proc igGetCursorStartPos*(): ImVec2 {.importc: "igGetCursorStartPos".}
1064 | proc igGetDragDropPayload*(): ptr ImGuiPayload {.importc: "igGetDragDropPayload".}
1065 | proc igGetDrawData*(): ptr ImDrawData {.importc: "igGetDrawData".}
1066 | proc igGetDrawListSharedData*(): ptr ImDrawListSharedData {.importc: "igGetDrawListSharedData".}
1067 | proc igGetFont*(): ptr ImFont {.importc: "igGetFont".}
1068 | proc igGetFontSize*(): float32 {.importc: "igGetFontSize".}
1069 | proc igGetFontTexUvWhitePixel*(): ImVec2 {.importc: "igGetFontTexUvWhitePixel".}
1070 | proc igGetForegroundDrawList*(): ptr ImDrawList {.importc: "igGetForegroundDrawList".}
1071 | proc igGetFrameCount*(): int32 {.importc: "igGetFrameCount".}
1072 | proc igGetFrameHeight*(): float32 {.importc: "igGetFrameHeight".}
1073 | proc igGetFrameHeightWithSpacing*(): float32 {.importc: "igGetFrameHeightWithSpacing".}
1074 | proc igGetID*(str_id: cstring): ImGuiID {.importc: "igGetIDStr".}
1075 | proc igGetID*(str_id_begin: cstring, str_id_end: cstring): ImGuiID {.importc: "igGetIDRange".}
1076 | proc igGetID*(ptr_id: pointer): ImGuiID {.importc: "igGetIDPtr".}
1077 | proc igGetIO*(): ptr ImGuiIO {.importc: "igGetIO".}
1078 | proc igGetItemRectMax*(): ImVec2 {.importc: "igGetItemRectMax".}
1079 | proc igGetItemRectMin*(): ImVec2 {.importc: "igGetItemRectMin".}
1080 | proc igGetItemRectSize*(): ImVec2 {.importc: "igGetItemRectSize".}
1081 | proc igGetKeyIndex*(imgui_key: ImGuiKey): int32 {.importc: "igGetKeyIndex".}
1082 | proc igGetKeyPressedAmount*(key_index: int32, repeat_delay: float32, rate: float32): int32 {.importc: "igGetKeyPressedAmount".}
1083 | proc igGetMouseCursor*(): ImGuiMouseCursor {.importc: "igGetMouseCursor".}
1084 | proc igGetMouseDragDelta*(button: int32 = 0, lock_threshold: float32 = -1.0f): ImVec2 {.importc: "igGetMouseDragDelta".}
1085 | proc igGetMousePos*(): ImVec2 {.importc: "igGetMousePos".}
1086 | proc igGetMousePosOnOpeningCurrentPopup*(): ImVec2 {.importc: "igGetMousePosOnOpeningCurrentPopup".}
1087 | proc igGetScrollMaxX*(): float32 {.importc: "igGetScrollMaxX".}
1088 | proc igGetScrollMaxY*(): float32 {.importc: "igGetScrollMaxY".}
1089 | proc igGetScrollX*(): float32 {.importc: "igGetScrollX".}
1090 | proc igGetScrollY*(): float32 {.importc: "igGetScrollY".}
1091 | proc igGetStateStorage*(): ptr ImGuiStorage {.importc: "igGetStateStorage".}
1092 | proc igGetStyle*(): ptr ImGuiStyle {.importc: "igGetStyle".}
1093 | proc igGetStyleColorName*(idx: ImGuiCol): cstring {.importc: "igGetStyleColorName".}
1094 | proc igGetStyleColorVec4*(idx: ImGuiCol): ptr ImVec4 {.importc: "igGetStyleColorVec4".}
1095 | proc igGetTextLineHeight*(): float32 {.importc: "igGetTextLineHeight".}
1096 | proc igGetTextLineHeightWithSpacing*(): float32 {.importc: "igGetTextLineHeightWithSpacing".}
1097 | proc igGetTime*(): float64 {.importc: "igGetTime".}
1098 | proc igGetTreeNodeToLabelSpacing*(): float32 {.importc: "igGetTreeNodeToLabelSpacing".}
1099 | proc igGetVersion*(): cstring {.importc: "igGetVersion".}
1100 | proc igGetWindowContentRegionMax*(): ImVec2 {.importc: "igGetWindowContentRegionMax".}
1101 | proc igGetWindowContentRegionMin*(): ImVec2 {.importc: "igGetWindowContentRegionMin".}
1102 | proc igGetWindowContentRegionWidth*(): float32 {.importc: "igGetWindowContentRegionWidth".}
1103 | proc igGetWindowDrawList*(): ptr ImDrawList {.importc: "igGetWindowDrawList".}
1104 | proc igGetWindowHeight*(): float32 {.importc: "igGetWindowHeight".}
1105 | proc igGetWindowPos*(): ImVec2 {.importc: "igGetWindowPos".}
1106 | proc igGetWindowSize*(): ImVec2 {.importc: "igGetWindowSize".}
1107 | proc igGetWindowWidth*(): float32 {.importc: "igGetWindowWidth".}
1108 | proc igImage*(user_texture_id: ImTextureID, size: ImVec2, uv0: ImVec2 = ImVec2(x: 0, y: 0), uv1: ImVec2 = ImVec2(x: 1, y: 1), tint_col: ImVec4 = ImVec4(x: 1, y: 1, z: 1, w: 1), border_col: ImVec4 = ImVec4(x: 0, y: 0, z: 0, w: 0)): void {.importc: "igImage".}
1109 | proc igImageButton*(user_texture_id: ImTextureID, size: ImVec2, uv0: ImVec2 = ImVec2(x: 0, y: 0), uv1: ImVec2 = ImVec2(x: 1, y: 1), frame_padding: int32 = -1, bg_col: ImVec4 = ImVec4(x: 0, y: 0, z: 0, w: 0), tint_col: ImVec4 = ImVec4(x: 1, y: 1, z: 1, w: 1)): bool {.importc: "igImageButton".}
1110 | proc igIndent*(indent_w: float32 = 0.0f): void {.importc: "igIndent".}
1111 | proc igInputDouble*(label: cstring, v: ptr float64, step: float64 = 0.0, step_fast: float64 = 0.0, format: cstring = "%.6f", flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputDouble".}
1112 | proc igInputFloat*(label: cstring, v: ptr float32, step: float32 = 0.0f, step_fast: float32 = 0.0f, format: cstring = "%.3f", flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputFloat".}
1113 | proc igInputFloat2*(label: cstring, v: var array[2, float32], format: cstring = "%.3f", flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputFloat2".}
1114 | proc igInputFloat3*(label: cstring, v: var array[3, float32], format: cstring = "%.3f", flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputFloat3".}
1115 | proc igInputFloat4*(label: cstring, v: var array[4, float32], format: cstring = "%.3f", flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputFloat4".}
1116 | proc igInputInt*(label: cstring, v: ptr int32, step: int32 = 1, step_fast: int32 = 100, flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputInt".}
1117 | proc igInputInt2*(label: cstring, v: var array[2, int32], flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputInt2".}
1118 | proc igInputInt3*(label: cstring, v: var array[3, int32], flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputInt3".}
1119 | proc igInputInt4*(label: cstring, v: var array[4, int32], flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputInt4".}
1120 | proc igInputScalar*(label: cstring, data_type: ImGuiDataType, p_data: pointer, p_step: pointer = nil, p_step_fast: pointer = nil, format: cstring = nil, flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputScalar".}
1121 | proc igInputScalarN*(label: cstring, data_type: ImGuiDataType, p_data: pointer, components: int32, p_step: pointer = nil, p_step_fast: pointer = nil, format: cstring = nil, flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags): bool {.importc: "igInputScalarN".}
1122 | proc igInputText*(label: cstring, buf: cstring, buf_size: uint, flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags, callback: ImGuiInputTextCallback = nil, user_data: pointer = nil): bool {.importc: "igInputText".}
1123 | proc igInputTextMultiline*(label: cstring, buf: cstring, buf_size: uint, size: ImVec2 = ImVec2(x: 0, y: 0), flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags, callback: ImGuiInputTextCallback = nil, user_data: pointer = nil): bool {.importc: "igInputTextMultiline".}
1124 | proc igInputTextWithHint*(label: cstring, hint: cstring, buf: cstring, buf_size: uint, flags: ImGuiInputTextFlags = 0.ImGuiInputTextFlags, callback: ImGuiInputTextCallback = nil, user_data: pointer = nil): bool {.importc: "igInputTextWithHint".}
1125 | proc igInvisibleButton*(str_id: cstring, size: ImVec2): bool {.importc: "igInvisibleButton".}
1126 | proc igIsAnyItemActive*(): bool {.importc: "igIsAnyItemActive".}
1127 | proc igIsAnyItemFocused*(): bool {.importc: "igIsAnyItemFocused".}
1128 | proc igIsAnyItemHovered*(): bool {.importc: "igIsAnyItemHovered".}
1129 | proc igIsAnyMouseDown*(): bool {.importc: "igIsAnyMouseDown".}
1130 | proc igIsItemActivated*(): bool {.importc: "igIsItemActivated".}
1131 | proc igIsItemActive*(): bool {.importc: "igIsItemActive".}
1132 | proc igIsItemClicked*(mouse_button: int32 = 0): bool {.importc: "igIsItemClicked".}
1133 | proc igIsItemDeactivated*(): bool {.importc: "igIsItemDeactivated".}
1134 | proc igIsItemDeactivatedAfterEdit*(): bool {.importc: "igIsItemDeactivatedAfterEdit".}
1135 | proc igIsItemEdited*(): bool {.importc: "igIsItemEdited".}
1136 | proc igIsItemFocused*(): bool {.importc: "igIsItemFocused".}
1137 | proc igIsItemHovered*(flags: ImGuiHoveredFlags = 0.ImGuiHoveredFlags): bool {.importc: "igIsItemHovered".}
1138 | proc igIsItemToggledOpen*(): bool {.importc: "igIsItemToggledOpen".}
1139 | proc igIsItemVisible*(): bool {.importc: "igIsItemVisible".}
1140 | proc igIsKeyDown*(user_key_index: int32): bool {.importc: "igIsKeyDown".}
1141 | proc igIsKeyPressed*(user_key_index: int32, repeat: bool = true): bool {.importc: "igIsKeyPressed".}
1142 | proc igIsKeyReleased*(user_key_index: int32): bool {.importc: "igIsKeyReleased".}
1143 | proc igIsMouseClicked*(button: int32, repeat: bool = false): bool {.importc: "igIsMouseClicked".}
1144 | proc igIsMouseDoubleClicked*(button: int32): bool {.importc: "igIsMouseDoubleClicked".}
1145 | proc igIsMouseDown*(button: int32): bool {.importc: "igIsMouseDown".}
1146 | proc igIsMouseDragging*(button: int32 = 0, lock_threshold: float32 = -1.0f): bool {.importc: "igIsMouseDragging".}
1147 | proc igIsMouseHoveringRect*(r_min: ImVec2, r_max: ImVec2, clip: bool = true): bool {.importc: "igIsMouseHoveringRect".}
1148 | proc igIsMousePosValid*(mouse_pos: ptr ImVec2 = nil): bool {.importc: "igIsMousePosValid".}
1149 | proc igIsMouseReleased*(button: int32): bool {.importc: "igIsMouseReleased".}
1150 | proc igIsPopupOpen*(str_id: cstring): bool {.importc: "igIsPopupOpen".}
1151 | proc igIsRectVisible*(size: ImVec2): bool {.importc: "igIsRectVisible".}
1152 | proc igIsRectVisible*(rect_min: ImVec2, rect_max: ImVec2): bool {.importc: "igIsRectVisibleVec2".}
1153 | proc igIsWindowAppearing*(): bool {.importc: "igIsWindowAppearing".}
1154 | proc igIsWindowCollapsed*(): bool {.importc: "igIsWindowCollapsed".}
1155 | proc igIsWindowFocused*(flags: ImGuiFocusedFlags = 0.ImGuiFocusedFlags): bool {.importc: "igIsWindowFocused".}
1156 | proc igIsWindowHovered*(flags: ImGuiHoveredFlags = 0.ImGuiHoveredFlags): bool {.importc: "igIsWindowHovered".}
1157 | proc igLabelText*(label: cstring, fmt: cstring): void {.importc: "igLabelText", varargs.}
1158 | proc igLabelTextV*(label: cstring, fmt: cstring): void {.importc: "igLabelTextV", varargs.}
1159 | proc igListBox*(label: cstring, current_item: ptr int32, items: ptr cstring, items_count: int32, height_in_items: int32 = -1): bool {.importc: "igListBoxStr_arr".}
1160 | proc igListBox*(label: cstring, current_item: ptr int32, items_getter: proc(data: pointer, idx: int32, out_text: ptr cstring): bool, data: pointer, items_count: int32, height_in_items: int32 = -1): bool {.importc: "igListBoxFnPtr".}
1161 | proc igListBoxFooter*(): void {.importc: "igListBoxFooter".}
1162 | proc igListBoxHeader*(label: cstring, size: ImVec2 = ImVec2(x: 0, y: 0)): bool {.importc: "igListBoxHeaderVec2".}
1163 | proc igListBoxHeader*(label: cstring, items_count: int32, height_in_items: int32 = -1): bool {.importc: "igListBoxHeaderInt".}
1164 | proc igLoadIniSettingsFromDisk*(ini_filename: cstring): void {.importc: "igLoadIniSettingsFromDisk".}
1165 | proc igLoadIniSettingsFromMemory*(ini_data: cstring, ini_size: uint = 0): void {.importc: "igLoadIniSettingsFromMemory".}
1166 | proc igLogButtons*(): void {.importc: "igLogButtons".}
1167 | proc igLogFinish*(): void {.importc: "igLogFinish".}
1168 | proc igLogText*(fmt: cstring): void {.importc: "igLogText", varargs.}
1169 | proc igLogToClipboard*(auto_open_depth: int32 = -1): void {.importc: "igLogToClipboard".}
1170 | proc igLogToFile*(auto_open_depth: int32 = -1, filename: cstring = nil): void {.importc: "igLogToFile".}
1171 | proc igLogToTTY*(auto_open_depth: int32 = -1): void {.importc: "igLogToTTY".}
1172 | proc igMemAlloc*(size: uint): pointer {.importc: "igMemAlloc".}
1173 | proc igMemFree*(`ptr`: pointer): void {.importc: "igMemFree".}
1174 | proc igMenuItem*(label: cstring, shortcut: cstring = nil, selected: bool = false, enabled: bool = true): bool {.importc: "igMenuItemBool".}
1175 | proc igMenuItem*(label: cstring, shortcut: cstring, p_selected: ptr bool, enabled: bool = true): bool {.importc: "igMenuItemBoolPtr".}
1176 | proc igNewFrame*(): void {.importc: "igNewFrame".}
1177 | proc igNewLine*(): void {.importc: "igNewLine".}
1178 | proc igNextColumn*(): void {.importc: "igNextColumn".}
1179 | proc igOpenPopup*(str_id: cstring): void {.importc: "igOpenPopup".}
1180 | proc igOpenPopupOnItemClick*(str_id: cstring = nil, mouse_button: int32 = 1): bool {.importc: "igOpenPopupOnItemClick".}
1181 | proc igPlotHistogram*(label: cstring, values: ptr float32, values_count: int32, values_offset: int32 = 0, overlay_text: cstring = nil, scale_min: float32 = high(float32), scale_max: float32 = high(float32), graph_size: ImVec2 = ImVec2(x: 0, y: 0), stride: int32 = sizeof(float32).int32): void {.importc: "igPlotHistogramFloatPtr".}
1182 | proc igPlotHistogram*(label: cstring, values_getter: proc(data: pointer, idx: int32): float32, data: pointer, values_count: int32, values_offset: int32 = 0, overlay_text: cstring = nil, scale_min: float32 = high(float32), scale_max: float32 = high(float32), graph_size: ImVec2 = ImVec2(x: 0, y: 0)): void {.importc: "igPlotHistogramFnPtr".}
1183 | proc igPlotLines*(label: cstring, values: ptr float32, values_count: int32, values_offset: int32 = 0, overlay_text: cstring = nil, scale_min: float32 = high(float32), scale_max: float32 = high(float32), graph_size: ImVec2 = ImVec2(x: 0, y: 0), stride: int32 = sizeof(float32).int32): void {.importc: "igPlotLines".}
1184 | proc igPlotLines*(label: cstring, values_getter: proc(data: pointer, idx: int32): float32, data: pointer, values_count: int32, values_offset: int32 = 0, overlay_text: cstring = nil, scale_min: float32 = high(float32), scale_max: float32 = high(float32), graph_size: ImVec2 = ImVec2(x: 0, y: 0)): void {.importc: "igPlotLinesFnPtr".}
1185 | proc igPopAllowKeyboardFocus*(): void {.importc: "igPopAllowKeyboardFocus".}
1186 | proc igPopButtonRepeat*(): void {.importc: "igPopButtonRepeat".}
1187 | proc igPopClipRect*(): void {.importc: "igPopClipRect".}
1188 | proc igPopFont*(): void {.importc: "igPopFont".}
1189 | proc igPopID*(): void {.importc: "igPopID".}
1190 | proc igPopItemWidth*(): void {.importc: "igPopItemWidth".}
1191 | proc igPopStyleColor*(count: int32 = 1): void {.importc: "igPopStyleColor".}
1192 | proc igPopStyleVar*(count: int32 = 1): void {.importc: "igPopStyleVar".}
1193 | proc igPopTextWrapPos*(): void {.importc: "igPopTextWrapPos".}
1194 | proc igProgressBar*(fraction: float32, size_arg: ImVec2 = ImVec2(x: -1, y: 0), overlay: cstring = nil): void {.importc: "igProgressBar".}
1195 | proc igPushAllowKeyboardFocus*(allow_keyboard_focus: bool): void {.importc: "igPushAllowKeyboardFocus".}
1196 | proc igPushButtonRepeat*(repeat: bool): void {.importc: "igPushButtonRepeat".}
1197 | proc igPushClipRect*(clip_rect_min: ImVec2, clip_rect_max: ImVec2, intersect_with_current_clip_rect: bool): void {.importc: "igPushClipRect".}
1198 | proc igPushFont*(font: ptr ImFont): void {.importc: "igPushFont".}
1199 | proc igPushID*(str_id: cstring): void {.importc: "igPushIDStr".}
1200 | proc igPushID*(str_id_begin: cstring, str_id_end: cstring): void {.importc: "igPushIDRange".}
1201 | proc igPushID*(ptr_id: pointer): void {.importc: "igPushIDPtr".}
1202 | proc igPushID*(int_id: int32): void {.importc: "igPushIDInt".}
1203 | proc igPushItemWidth*(item_width: float32): void {.importc: "igPushItemWidth".}
1204 | proc igPushStyleColor*(idx: ImGuiCol, col: uint32): void {.importc: "igPushStyleColorU32".}
1205 | proc igPushStyleColor*(idx: ImGuiCol, col: ImVec4): void {.importc: "igPushStyleColor".}
1206 | proc igPushStyleVar*(idx: ImGuiStyleVar, val: float32): void {.importc: "igPushStyleVarFloat".}
1207 | proc igPushStyleVar*(idx: ImGuiStyleVar, val: ImVec2): void {.importc: "igPushStyleVarVec2".}
1208 | proc igPushTextWrapPos*(wrap_local_pos_x: float32 = 0.0f): void {.importc: "igPushTextWrapPos".}
1209 | proc igRadioButton*(label: cstring, active: bool): bool {.importc: "igRadioButtonBool".}
1210 | proc igRadioButton*(label: cstring, v: ptr int32, v_button: int32): bool {.importc: "igRadioButtonIntPtr".}
1211 | proc igRender*(): void {.importc: "igRender".}
1212 | proc igResetMouseDragDelta*(button: int32 = 0): void {.importc: "igResetMouseDragDelta".}
1213 | proc igSameLine*(offset_from_start_x: float32 = 0.0f, spacing: float32 = -1.0f): void {.importc: "igSameLine".}
1214 | proc igSaveIniSettingsToDisk*(ini_filename: cstring): void {.importc: "igSaveIniSettingsToDisk".}
1215 | proc igSaveIniSettingsToMemory*(out_ini_size: ptr uint = nil): cstring {.importc: "igSaveIniSettingsToMemory".}
1216 | proc igSelectable*(label: cstring, selected: bool = false, flags: ImGuiSelectableFlags = 0.ImGuiSelectableFlags, size: ImVec2 = ImVec2(x: 0, y: 0)): bool {.importc: "igSelectable".}
1217 | proc igSelectable*(label: cstring, p_selected: ptr bool, flags: ImGuiSelectableFlags = 0.ImGuiSelectableFlags, size: ImVec2 = ImVec2(x: 0, y: 0)): bool {.importc: "igSelectableBoolPtr".}
1218 | proc igSeparator*(): void {.importc: "igSeparator".}
1219 | proc igSetAllocatorFunctions*(alloc_func: proc(sz: uint, user_data: pointer): pointer, free_func: proc(`ptr`: pointer, user_data: pointer): void, user_data: pointer = nil): void {.importc: "igSetAllocatorFunctions".}
1220 | proc igSetClipboardText*(text: cstring): void {.importc: "igSetClipboardText".}
1221 | proc igSetColorEditOptions*(flags: ImGuiColorEditFlags): void {.importc: "igSetColorEditOptions".}
1222 | proc igSetColumnOffset*(column_index: int32, offset_x: float32): void {.importc: "igSetColumnOffset".}
1223 | proc igSetColumnWidth*(column_index: int32, width: float32): void {.importc: "igSetColumnWidth".}
1224 | proc igSetCurrentContext*(ctx: ptr ImGuiContext): void {.importc: "igSetCurrentContext".}
1225 | proc igSetCursorPos*(local_pos: ImVec2): void {.importc: "igSetCursorPos".}
1226 | proc igSetCursorPosX*(local_x: float32): void {.importc: "igSetCursorPosX".}
1227 | proc igSetCursorPosY*(local_y: float32): void {.importc: "igSetCursorPosY".}
1228 | proc igSetCursorScreenPos*(pos: ImVec2): void {.importc: "igSetCursorScreenPos".}
1229 | proc igSetDragDropPayload*(`type`: cstring, data: pointer, sz: uint, cond: ImGuiCond = 0.ImGuiCond): bool {.importc: "igSetDragDropPayload".}
1230 | proc igSetItemAllowOverlap*(): void {.importc: "igSetItemAllowOverlap".}
1231 | proc igSetItemDefaultFocus*(): void {.importc: "igSetItemDefaultFocus".}
1232 | proc igSetKeyboardFocusHere*(offset: int32 = 0): void {.importc: "igSetKeyboardFocusHere".}
1233 | proc igSetMouseCursor*(`type`: ImGuiMouseCursor): void {.importc: "igSetMouseCursor".}
1234 | proc igSetNextItemOpen*(is_open: bool, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetNextItemOpen".}
1235 | proc igSetNextItemWidth*(item_width: float32): void {.importc: "igSetNextItemWidth".}
1236 | proc igSetNextWindowBgAlpha*(alpha: float32): void {.importc: "igSetNextWindowBgAlpha".}
1237 | proc igSetNextWindowCollapsed*(collapsed: bool, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetNextWindowCollapsed".}
1238 | proc igSetNextWindowContentSize*(size: ImVec2): void {.importc: "igSetNextWindowContentSize".}
1239 | proc igSetNextWindowFocus*(): void {.importc: "igSetNextWindowFocus".}
1240 | proc igSetNextWindowPos*(pos: ImVec2, cond: ImGuiCond = 0.ImGuiCond, pivot: ImVec2 = ImVec2(x: 0, y: 0)): void {.importc: "igSetNextWindowPos".}
1241 | proc igSetNextWindowSize*(size: ImVec2, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetNextWindowSize".}
1242 | proc igSetNextWindowSizeConstraints*(size_min: ImVec2, size_max: ImVec2, custom_callback: ImGuiSizeCallback = nil, custom_callback_data: pointer = nil): void {.importc: "igSetNextWindowSizeConstraints".}
1243 | proc igSetScrollFromPosX*(local_x: float32, center_x_ratio: float32 = 0.5f): void {.importc: "igSetScrollFromPosX".}
1244 | proc igSetScrollFromPosY*(local_y: float32, center_y_ratio: float32 = 0.5f): void {.importc: "igSetScrollFromPosY".}
1245 | proc igSetScrollHereX*(center_x_ratio: float32 = 0.5f): void {.importc: "igSetScrollHereX".}
1246 | proc igSetScrollHereY*(center_y_ratio: float32 = 0.5f): void {.importc: "igSetScrollHereY".}
1247 | proc igSetScrollX*(scroll_x: float32): void {.importc: "igSetScrollX".}
1248 | proc igSetScrollY*(scroll_y: float32): void {.importc: "igSetScrollY".}
1249 | proc igSetStateStorage*(storage: ptr ImGuiStorage): void {.importc: "igSetStateStorage".}
1250 | proc igSetTabItemClosed*(tab_or_docked_window_label: cstring): void {.importc: "igSetTabItemClosed".}
1251 | proc igSetTooltip*(fmt: cstring): void {.importc: "igSetTooltip", varargs.}
1252 | proc igSetTooltipV*(fmt: cstring): void {.importc: "igSetTooltipV", varargs.}
1253 | proc igSetWindowCollapsed*(collapsed: bool, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowCollapsedBool".}
1254 | proc igSetWindowCollapsed*(name: cstring, collapsed: bool, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowCollapsedStr".}
1255 | proc igSetWindowFocus*(): void {.importc: "igSetWindowFocus".}
1256 | proc igSetWindowFocus*(name: cstring): void {.importc: "igSetWindowFocusStr".}
1257 | proc igSetWindowFontScale*(scale: float32): void {.importc: "igSetWindowFontScale".}
1258 | proc igSetWindowPos*(pos: ImVec2, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowPosVec2".}
1259 | proc igSetWindowPos*(name: cstring, pos: ImVec2, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowPosStr".}
1260 | proc igSetWindowSize*(size: ImVec2, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowSizeVec2".}
1261 | proc igSetWindowSize*(name: cstring, size: ImVec2, cond: ImGuiCond = 0.ImGuiCond): void {.importc: "igSetWindowSizeStr".}
1262 | proc igShowAboutWindow*(p_open: ptr bool = nil): void {.importc: "igShowAboutWindow".}
1263 | proc igShowDemoWindow*(p_open: ptr bool = nil): void {.importc: "igShowDemoWindow".}
1264 | proc igShowFontSelector*(label: cstring): void {.importc: "igShowFontSelector".}
1265 | proc igShowMetricsWindow*(p_open: ptr bool = nil): void {.importc: "igShowMetricsWindow".}
1266 | proc igShowStyleEditor*(`ref`: ptr ImGuiStyle = nil): void {.importc: "igShowStyleEditor".}
1267 | proc igShowStyleSelector*(label: cstring): bool {.importc: "igShowStyleSelector".}
1268 | proc igShowUserGuide*(): void {.importc: "igShowUserGuide".}
1269 | proc igSliderAngle*(label: cstring, v_rad: ptr float32, v_degrees_min: float32 = -360.0f, v_degrees_max: float32 = +360.0f, format: cstring = "%.0f deg"): bool {.importc: "igSliderAngle".}
1270 | proc igSliderFloat*(label: cstring, v: ptr float32, v_min: float32, v_max: float32, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igSliderFloat".}
1271 | proc igSliderFloat2*(label: cstring, v: var array[2, float32], v_min: float32, v_max: float32, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igSliderFloat2".}
1272 | proc igSliderFloat3*(label: cstring, v: var array[3, float32], v_min: float32, v_max: float32, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igSliderFloat3".}
1273 | proc igSliderFloat4*(label: cstring, v: var array[4, float32], v_min: float32, v_max: float32, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igSliderFloat4".}
1274 | proc igSliderInt*(label: cstring, v: ptr int32, v_min: int32, v_max: int32, format: cstring = "%d"): bool {.importc: "igSliderInt".}
1275 | proc igSliderInt2*(label: cstring, v: var array[2, int32], v_min: int32, v_max: int32, format: cstring = "%d"): bool {.importc: "igSliderInt2".}
1276 | proc igSliderInt3*(label: cstring, v: var array[3, int32], v_min: int32, v_max: int32, format: cstring = "%d"): bool {.importc: "igSliderInt3".}
1277 | proc igSliderInt4*(label: cstring, v: var array[4, int32], v_min: int32, v_max: int32, format: cstring = "%d"): bool {.importc: "igSliderInt4".}
1278 | proc igSliderScalar*(label: cstring, data_type: ImGuiDataType, p_data: pointer, p_min: pointer, p_max: pointer, format: cstring = nil, power: float32 = 1.0f): bool {.importc: "igSliderScalar".}
1279 | proc igSliderScalarN*(label: cstring, data_type: ImGuiDataType, p_data: pointer, components: int32, p_min: pointer, p_max: pointer, format: cstring = nil, power: float32 = 1.0f): bool {.importc: "igSliderScalarN".}
1280 | proc igSmallButton*(label: cstring): bool {.importc: "igSmallButton".}
1281 | proc igSpacing*(): void {.importc: "igSpacing".}
1282 | proc igStyleColorsClassic*(dst: ptr ImGuiStyle = nil): void {.importc: "igStyleColorsClassic".}
1283 | proc igStyleColorsDark*(dst: ptr ImGuiStyle = nil): void {.importc: "igStyleColorsDark".}
1284 | proc igStyleColorsLight*(dst: ptr ImGuiStyle = nil): void {.importc: "igStyleColorsLight".}
1285 | proc igText*(fmt: cstring): void {.importc: "igText", varargs.}
1286 | proc igTextColored*(col: ImVec4, fmt: cstring): void {.importc: "igTextColored", varargs.}
1287 | proc igTextColoredV*(col: ImVec4, fmt: cstring): void {.importc: "igTextColoredV", varargs.}
1288 | proc igTextDisabled*(fmt: cstring): void {.importc: "igTextDisabled", varargs.}
1289 | proc igTextDisabledV*(fmt: cstring): void {.importc: "igTextDisabledV", varargs.}
1290 | proc igTextUnformatted*(text: cstring, text_end: cstring = nil): void {.importc: "igTextUnformatted".}
1291 | proc igTextV*(fmt: cstring): void {.importc: "igTextV", varargs.}
1292 | proc igTextWrapped*(fmt: cstring): void {.importc: "igTextWrapped", varargs.}
1293 | proc igTextWrappedV*(fmt: cstring): void {.importc: "igTextWrappedV", varargs.}
1294 | proc igTreeNode*(label: cstring): bool {.importc: "igTreeNodeStr".}
1295 | proc igTreeNode*(str_id: cstring, fmt: cstring): bool {.importc: "igTreeNodeStrStr", varargs.}
1296 | proc igTreeNode*(ptr_id: pointer, fmt: cstring): bool {.importc: "igTreeNodePtr", varargs.}
1297 | proc igTreeNodeEx*(label: cstring, flags: ImGuiTreeNodeFlags = 0.ImGuiTreeNodeFlags): bool {.importc: "igTreeNodeExStr".}
1298 | proc igTreeNodeEx*(str_id: cstring, flags: ImGuiTreeNodeFlags, fmt: cstring): bool {.importc: "igTreeNodeExStrStr", varargs.}
1299 | proc igTreeNodeEx*(ptr_id: pointer, flags: ImGuiTreeNodeFlags, fmt: cstring): bool {.importc: "igTreeNodeExPtr", varargs.}
1300 | proc igTreeNodeExV*(str_id: cstring, flags: ImGuiTreeNodeFlags, fmt: cstring): bool {.importc: "igTreeNodeExVStr", varargs.}
1301 | proc igTreeNodeExV*(ptr_id: pointer, flags: ImGuiTreeNodeFlags, fmt: cstring): bool {.importc: "igTreeNodeExVPtr", varargs.}
1302 | proc igTreeNodeV*(str_id: cstring, fmt: cstring): bool {.importc: "igTreeNodeVStr", varargs.}
1303 | proc igTreeNodeV*(ptr_id: pointer, fmt: cstring): bool {.importc: "igTreeNodeVPtr", varargs.}
1304 | proc igTreePop*(): void {.importc: "igTreePop".}
1305 | proc igTreePush*(str_id: cstring): void {.importc: "igTreePushStr".}
1306 | proc igTreePush*(ptr_id: pointer = nil): void {.importc: "igTreePushPtr".}
1307 | proc igUnindent*(indent_w: float32 = 0.0f): void {.importc: "igUnindent".}
1308 | proc igVSliderFloat*(label: cstring, size: ImVec2, v: ptr float32, v_min: float32, v_max: float32, format: cstring = "%.3f", power: float32 = 1.0f): bool {.importc: "igVSliderFloat".}
1309 | proc igVSliderInt*(label: cstring, size: ImVec2, v: ptr int32, v_min: int32, v_max: int32, format: cstring = "%d"): bool {.importc: "igVSliderInt".}
1310 | proc igVSliderScalar*(label: cstring, size: ImVec2, data_type: ImGuiDataType, p_data: pointer, p_min: pointer, p_max: pointer, format: cstring = nil, power: float32 = 1.0f): bool {.importc: "igVSliderScalar".}
1311 | proc igValue*(prefix: cstring, b: bool): void {.importc: "igValueBool".}
1312 | proc igValue*(prefix: cstring, v: int32): void {.importc: "igValueInt".}
1313 | proc igValue*(prefix: cstring, v: uint32): void {.importc: "igValueUint".}
1314 | proc igValue*(prefix: cstring, v: float32, float_format: cstring = nil): void {.importc: "igValueFloat".}
1315 |
1316 | {.pop.}
1317 |
1318 | proc igStyleColorsCherry*(dst: ptr ImGuiStyle = nil): void =
1319 | ## To conmemorate this bindings this style is included as a default.
1320 | ## Style created originally by r-lyeh
1321 | var style = igGetStyle()
1322 | if dst != nil:
1323 | style = dst
1324 |
1325 | const ImVec4 = proc(x: float32, y: float32, z: float32, w: float32): ImVec4 = ImVec4(x: x, y: y, z: z, w: w)
1326 | const igHI = proc(v: float32): ImVec4 = ImVec4(0.502f, 0.075f, 0.256f, v)
1327 | const igMED = proc(v: float32): ImVec4 = ImVec4(0.455f, 0.198f, 0.301f, v)
1328 | const igLOW = proc(v: float32): ImVec4 = ImVec4(0.232f, 0.201f, 0.271f, v)
1329 | const igBG = proc(v: float32): ImVec4 = ImVec4(0.200f, 0.220f, 0.270f, v)
1330 | const igTEXT = proc(v: float32): ImVec4 = ImVec4(0.860f, 0.930f, 0.890f, v)
1331 |
1332 | style.colors[ImGuiCol.Text.int32] = igTEXT(0.88f)
1333 | style.colors[ImGuiCol.TextDisabled.int32] = igTEXT(0.28f)
1334 | style.colors[ImGuiCol.WindowBg.int32] = ImVec4(0.13f, 0.14f, 0.17f, 1.00f)
1335 | style.colors[ImGuiCol.PopupBg.int32] = igBG(0.9f)
1336 | style.colors[ImGuiCol.Border.int32] = ImVec4(0.31f, 0.31f, 1.00f, 0.00f)
1337 | style.colors[ImGuiCol.BorderShadow.int32] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f)
1338 | style.colors[ImGuiCol.FrameBg.int32] = igBG(1.00f)
1339 | style.colors[ImGuiCol.FrameBgHovered.int32] = igMED(0.78f)
1340 | style.colors[ImGuiCol.FrameBgActive.int32] = igMED(1.00f)
1341 | style.colors[ImGuiCol.TitleBg.int32] = igLOW(1.00f)
1342 | style.colors[ImGuiCol.TitleBgActive.int32] = igHI(1.00f)
1343 | style.colors[ImGuiCol.TitleBgCollapsed.int32] = igBG(0.75f)
1344 | style.colors[ImGuiCol.MenuBarBg.int32] = igBG(0.47f)
1345 | style.colors[ImGuiCol.ScrollbarBg.int32] = igBG(1.00f)
1346 | style.colors[ImGuiCol.ScrollbarGrab.int32] = ImVec4(0.09f, 0.15f, 0.16f, 1.00f)
1347 | style.colors[ImGuiCol.ScrollbarGrabHovered.int32] = igMED(0.78f)
1348 | style.colors[ImGuiCol.ScrollbarGrabActive.int32] = igMED(1.00f)
1349 | style.colors[ImGuiCol.CheckMark.int32] = ImVec4(0.71f, 0.22f, 0.27f, 1.00f)
1350 | style.colors[ImGuiCol.SliderGrab.int32] = ImVec4(0.47f, 0.77f, 0.83f, 0.14f)
1351 | style.colors[ImGuiCol.SliderGrabActive.int32] = ImVec4(0.71f, 0.22f, 0.27f, 1.00f)
1352 | style.colors[ImGuiCol.Button.int32] = ImVec4(0.47f, 0.77f, 0.83f, 0.14f)
1353 | style.colors[ImGuiCol.ButtonHovered.int32] = igMED(0.86f)
1354 | style.colors[ImGuiCol.ButtonActive.int32] = igMED(1.00f)
1355 | style.colors[ImGuiCol.Header.int32] = igMED(0.76f)
1356 | style.colors[ImGuiCol.HeaderHovered.int32] = igMED(0.86f)
1357 | style.colors[ImGuiCol.HeaderActive.int32] = igHI(1.00f)
1358 | style.colors[ImGuiCol.ResizeGrip.int32] = ImVec4(0.47f, 0.77f, 0.83f, 0.04f)
1359 | style.colors[ImGuiCol.ResizeGripHovered.int32] = igMED(0.78f)
1360 | style.colors[ImGuiCol.ResizeGripActive.int32] = igMED(1.00f)
1361 | style.colors[ImGuiCol.PlotLines.int32] = igTEXT(0.63f)
1362 | style.colors[ImGuiCol.PlotLinesHovered.int32] = igMED(1.00f)
1363 | style.colors[ImGuiCol.PlotHistogram.int32] = igTEXT(0.63f)
1364 | style.colors[ImGuiCol.PlotHistogramHovered.int32] = igMED(1.00f)
1365 | style.colors[ImGuiCol.TextSelectedBg.int32] = igMED(0.43f)
1366 |
1367 | style.windowPadding = ImVec2(x: 6f, y: 4f)
1368 | style.windowRounding = 0.0f
1369 | style.framePadding = ImVec2(x: 5f, y: 2f)
1370 | style.frameRounding = 3.0f
1371 | style.itemSpacing = ImVec2(x: 7f, y: 1f)
1372 | style.itemInnerSpacing = ImVec2(x: 1f, y: 1f)
1373 | style.touchExtraPadding = ImVec2(x: 0f, y: 0f)
1374 | style.indentSpacing = 6.0f
1375 | style.scrollbarSize = 12.0f
1376 | style.scrollbarRounding = 16.0f
1377 | style.grabMinSize = 20.0f
1378 | style.grabRounding = 2.0f
1379 |
1380 | style.windowTitleAlign.x = 0.50f
1381 |
1382 | style.colors[ImGuiCol.Border.int32] = ImVec4(0.539f, 0.479f, 0.255f, 0.162f)
1383 | style.frameBorderSize = 0.0f
1384 | style.windowBorderSize = 1.0f
1385 |
1386 | style.displaySafeAreaPadding.y = 0
1387 | style.framePadding.y = 1
1388 | style.itemSpacing.y = 1
1389 | style.windowPadding.y = 3
1390 | style.scrollbarSize = 13
1391 | style.frameBorderSize = 1
1392 | style.tabBorderSize = 1
1393 |
--------------------------------------------------------------------------------
/src/nimgl/imgui/impl_glfw.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2019, NimGL contributors.
2 |
3 | ## ImGUI GLFW Implementation
4 | ## ====
5 | ## Implementation based on the imgui examples implementations.
6 | ## Feel free to use and modify this implementation.
7 | ## This needs to be used along with a Renderer.
8 |
9 | import ../imgui, ../glfw, ../glfw/native
10 |
11 | type
12 | GlfwClientApi = enum
13 | igGlfwClientApiUnkown
14 | igGlfwClientApiOpenGl
15 | igGlfwClientApiVulkan
16 |
17 | var
18 | gWindow: GLFWwindow
19 | gClientApi = igGlfwClientApiUnkown
20 | gTime: float64 = 0.0f
21 | gMouseJustPressed: array[5, bool]
22 | gMouseCursors: array[ImGuiMouseCursor.high.int32 + 1, GLFWCursor]
23 |
24 | # Store previous callbacks so they can be chained
25 | gPrevMouseButtonCallback: GLFWMousebuttonFun = nil
26 | gPrevScrollCallback: GLFWScrollFun = nil
27 | gPrevKeyCallback: GLFWKeyFun = nil
28 | gPrevCharCallback: GLFWCharFun = nil
29 |
30 | proc igGlfwGetClipboardText(userData: pointer): cstring {.cdecl.} =
31 | cast[GLFWwindow](userData).getClipboardString()
32 |
33 | proc igGlfwSetClipboardText(userData: pointer, text: cstring): void {.cdecl.} =
34 | cast[GLFWwindow](userData).setClipboardString(text)
35 |
36 | proc igGlfwMouseCallback*(window: GLFWWindow, button: int32, action: int32, mods: int32): void {.cdecl.} =
37 | if gPrevMouseButtonCallback != nil:
38 | gPrevMouseButtonCallback(window, button, action, mods)
39 |
40 | if action == GLFWPress and button.ord >= 0 and button.ord < gMouseJustPressed.len:
41 | gMouseJustPressed[button.ord] = true
42 |
43 | proc igGlfwScrollCallback*(window: GLFWWindow, xoff: float64, yoff: float64): void {.cdecl.} =
44 | if gPrevScrollCallback != nil:
45 | gPrevScrollCallback(window, xoff, yoff)
46 |
47 | let io = igGetIO()
48 | io.mouseWheelH += xoff.float32
49 | io.mouseWheel += yoff.float32
50 |
51 | proc igGlfwKeyCallback*(window: GLFWWindow, key: int32, scancode: int32, action: int32, mods: int32): void {.cdecl.} =
52 | if gPrevKeyCallback != nil:
53 | gPrevKeyCallback(window, key, scancode, action, mods)
54 |
55 | let io = igGetIO()
56 | if key.ord < 511 and key.ord >= 0:
57 | if action == GLFWPress:
58 | io.keysDown[key.ord] = true
59 | elif action == GLFWRelease:
60 | io.keysDown[key.ord] = false
61 |
62 | io.keyCtrl = io.keysDown[GLFWKey.LeftControl.ord] or io.keysDown[GLFWKey.RightControl.ord]
63 | io.keyShift = io.keysDown[GLFWKey.LeftShift.ord] or io.keysDown[GLFWKey.RightShift.ord]
64 | io.keyAlt = io.keysDown[GLFWKey.LeftAlt.ord] or io.keysDown[GLFWKey.RightAlt.ord]
65 | io.keySuper = io.keysDown[GLFWKey.LeftSuper.ord] or io.keysDown[GLFWKey.RightSuper.ord]
66 |
67 | proc igGlfwCharCallback*(window: GLFWWindow, code: uint32): void {.cdecl.} =
68 | if gPrevCharCallback != nil:
69 | gPrevCharCallback(window, code)
70 |
71 | let io = igGetIO()
72 | if code > 0'u32 and code < 0x10000'u32:
73 | io.addInputCharacter(cast[ImWchar](code))
74 |
75 | proc igGlfwInstallCallbacks(window: GLFWwindow) =
76 | # The already set callback proc should be returned. Store these and and chain callbacks.
77 | gPrevMouseButtonCallback = gWindow.setMouseButtonCallback(igGlfwMouseCallback)
78 | gPrevScrollCallback = gWindow.setScrollCallback(igGlfwScrollCallback)
79 | gPrevKeyCallback = gWindow.setKeyCallback(igGlfwKeyCallback)
80 | gPrevCharCallback = gWindow.setCharCallback(igGlfwCharCallback)
81 |
82 | proc igGlfwInit(window: GLFWwindow, installCallbacks: bool, clientApi: GlfwClientApi): bool =
83 | gWindow = window
84 | gTime = 0.0f
85 |
86 | let io = igGetIO()
87 | io.backendFlags = (io.backendFlags.int32 or ImGuiBackendFlags.HasMouseCursors.int32).ImGuiBackendFlags
88 | io.backendFlags = (io.backendFlags.int32 or ImGuiBackendFlags.HasSetMousePos.int32).ImGuiBackendFlags
89 |
90 | io.keyMap[ImGuiKey.Tab.int32] = GLFWKey.Tab
91 | io.keyMap[ImGuiKey.LeftArrow.int32] = GLFWKey.Left
92 | io.keyMap[ImGuiKey.RightArrow.int32] = GLFWKey.Right
93 | io.keyMap[ImGuiKey.UpArrow.int32] = GLFWKey.Up
94 | io.keyMap[ImGuiKey.DownArrow.int32] = GLFWKey.Down
95 | io.keyMap[ImGuiKey.PageUp.int32] = GLFWKey.PageUp
96 | io.keyMap[ImGuiKey.PageDown.int32] = GLFWKey.PageDown
97 | io.keyMap[ImGuiKey.Home.int32] = GLFWKey.Home
98 | io.keyMap[ImGuiKey.End.int32] = GLFWKey.End
99 | io.keyMap[ImGuiKey.Insert.int32] = GLFWKey.Insert
100 | io.keyMap[ImGuiKey.Delete.int32] = GLFWKey.Delete
101 | io.keyMap[ImGuiKey.Backspace.int32] = GLFWKey.Backspace
102 | io.keyMap[ImGuiKey.Space.int32] = GLFWKey.Space
103 | io.keyMap[ImGuiKey.Enter.int32] = GLFWKey.Enter
104 | io.keyMap[ImGuiKey.Escape.int32] = GLFWKey.Escape
105 | io.keyMap[ImGuiKey.A.int32] = GLFWKey.A
106 | io.keyMap[ImGuiKey.C.int32] = GLFWKey.C
107 | io.keyMap[ImGuiKey.V.int32] = GLFWKey.V
108 | io.keyMap[ImGuiKey.X.int32] = GLFWKey.X
109 | io.keyMap[ImGuiKey.Y.int32] = GLFWKey.Y
110 | io.keyMap[ImGuiKey.Z.int32] = GLFWKey.Z
111 |
112 | # HELP: If you know how to convert char * to const char * through Nim pragmas
113 | # and types, I would love to know.
114 | when not defined(cpp):
115 | io.setClipboardTextFn = igGlfwSetClipboardText
116 | io.getClipboardTextFn = igGlfwGetClipboardText
117 | io.clipboardUserData = gWindow
118 | when defined windows:
119 | io.imeWindowHandle = gWindow.getWin32Window()
120 |
121 | gMouseCursors[ImGuiMouseCursor.Arrow.int32] = glfwCreateStandardCursor(GLFWArrowCursor)
122 | gMouseCursors[ImGuiMouseCursor.TextInput.int32] = glfwCreateStandardCursor(GLFWIbeamCursor)
123 | gMouseCursors[ImGuiMouseCursor.ResizeAll.int32] = glfwCreateStandardCursor(GLFWArrowCursor)
124 | gMouseCursors[ImGuiMouseCursor.ResizeNS.int32] = glfwCreateStandardCursor(GLFWVresizeCursor)
125 | gMouseCursors[ImGuiMouseCursor.ResizeEW.int32] = glfwCreateStandardCursor(GLFWHresizeCursor)
126 | gMouseCursors[ImGuiMouseCursor.ResizeNESW.int32] = glfwCreateStandardCursor(GLFWArrowCursor)
127 | gMouseCursors[ImGuiMouseCursor.ResizeNWSE.int32] = glfwCreateStandardCursor(GLFWArrowCursor)
128 | gMouseCursors[ImGuiMouseCursor.Hand.int32] = glfwCreateStandardCursor(GLFWHandCursor)
129 |
130 | if installCallbacks:
131 | igGlfwInstallCallbacks(window)
132 |
133 | gClientApi = clientApi
134 | return true
135 |
136 | proc igGlfwInitForOpenGL*(window: GLFWwindow, installCallbacks: bool): bool =
137 | igGlfwInit(window, installCallbacks, igGlfwClientApiOpenGL)
138 |
139 | # @TODO: Vulkan support
140 |
141 | proc igGlfwUpdateMousePosAndButtons() =
142 | let io = igGetIO()
143 | for i in 0 ..< io.mouseDown.len:
144 | io.mouseDown[i] = gMouseJustPressed[i] or gWindow.getMouseButton(i.int32) != 0
145 | gMouseJustPressed[i] = false
146 |
147 | let mousePosBackup = io.mousePos
148 | io.mousePos = ImVec2(x: -high(float32), y: -high(float32))
149 |
150 | when defined(emscripten): # TODO: actually add support for all the library with emscripten
151 | let focused = true
152 | else:
153 | let focused = gWindow.getWindowAttrib(GLFWFocused) != 0
154 |
155 | if focused:
156 | if io.wantSetMousePos:
157 | gWindow.setCursorPos(mousePosBackup.x, mousePosBackup.y)
158 | else:
159 | var mouseX: float64
160 | var mouseY: float64
161 | gWindow.getCursorPos(mouseX.addr, mouseY.addr)
162 | io.mousePos = ImVec2(x: mouseX.float32, y: mouseY.float32)
163 |
164 | proc igGlfwUpdateMouseCursor() =
165 | let io = igGetIO()
166 | if ((io.configFlags.int32 and ImGuiConfigFlags.NoMouseCursorChange.int32) == 1) or (gWindow.getInputMode(GLFWCursorSpecial) == GLFWCursorDisabled):
167 | return
168 |
169 | var igCursor: ImGuiMouseCursor = igGetMouseCursor()
170 | if igCursor == ImGuiMouseCursor.None or io.mouseDrawCursor:
171 | gWindow.setInputMode(GLFWCursorSpecial, GLFWCursorHidden)
172 | else:
173 | gWindow.setCursor(gMouseCursors[igCursor.int32])
174 | gWindow.setInputMode(GLFWCursorSpecial, GLFWCursorNormal)
175 |
176 | proc igGlfwNewFrame*() =
177 | let io = igGetIO()
178 | assert io.fonts.isBuilt()
179 |
180 | var w: int32
181 | var h: int32
182 | var displayW: int32
183 | var displayH: int32
184 |
185 | gWindow.getWindowSize(w.addr, h.addr)
186 | gWindow.getFramebufferSize(displayW.addr, displayH.addr)
187 | io.displaySize = ImVec2(x: w.float32, y: h.float32)
188 | io.displayFramebufferScale = ImVec2(x: if w > 0: displayW.float32 / w.float32 else: 0.0f, y: if h > 0: displayH.float32 / h.float32 else: 0.0f)
189 |
190 | let currentTime = glfwGetTime()
191 | io.deltaTime = if gTime > 0.0f: (currentTime - gTime).float32 else: (1.0f / 60.0f).float32
192 | gTime = currentTime
193 |
194 | igGlfwUpdateMousePosAndButtons()
195 | igGlfwUpdateMouseCursor()
196 |
197 | # @TODO: gamepad mapping
198 |
199 | proc igGlfwShutdown*() =
200 | for i in 0 ..< ImGuiMouseCursor.high.int32 + 1:
201 | gMouseCursors[i].destroyCursor()
202 | gMouseCursors[i] = nil
203 | gClientApi = igGlfwClientApiUnkown
204 |
--------------------------------------------------------------------------------
/src/nimgl/imgui/impl_opengl.nim:
--------------------------------------------------------------------------------
1 | # Copyright 2018, NimGL contributors.
2 |
3 | ## ImGUI OpenGL (modern OpenGL with shaders / programmatic pipeline) Implementation
4 | ## ====
5 | ## Implementation based on the imgui examples implementations.
6 | ## Feel free to use and modify this implementation.
7 | ## This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
8 | ##
9 | ## HACK: To be honest, there are a lot of things to optimize in here if you have control of every step.
10 |
11 | import ../imgui, ../opengl
12 |
13 | var
14 | gGlslVersionString: cstring = "#version 330 core"
15 | gFontTexture: uint32 = 0
16 | gShaderHandle: uint32 = 0
17 | gVertHandle: uint32 = 0
18 | gFragHandle: uint32 = 0
19 | gAttribLocationTex: int32 = 0
20 | gAttribLocationProjMtx: int32 = 0
21 | gAttribLocationPosition: int32 = 0
22 | gAttribLocationUV: int32 = 0
23 | gAttribLocationColor: int32 = 0
24 | gVboHandle: uint32 = 0
25 | gElementsHandle: uint32 = 0
26 |
27 | proc igOpenGL3Init*(): bool =
28 | ## Initiate Opengl, this proc does nothing here because I assume that you are using modern opengl 3.2>.
29 | ## If you actually need to use lower specs open and issue or PR the fix please.
30 | # @TODO: add opengles support
31 | return true
32 |
33 | proc igOpenGL3CheckProgram(handle: uint32, desc: string) =
34 | var status: int32
35 | var log_length: int32
36 | glGetProgramiv(handle, GL_LINK_STATUS, status.addr)
37 | glGetProgramiv(handle, GL_INFO_LOG_LENGTH, log_length.addr)
38 | if status == GL_FALSE.int32:
39 | echo "ERROR: impl_opengl failed to link " & desc
40 | if log_length > 0:
41 | var msg: seq[char] = newSeq[char](log_length)
42 | glGetProgramInfoLog(handle, log_length, nil, msg[0].addr)
43 | for m in msg:
44 | stdout.write(m)
45 | echo ""
46 |
47 | proc igOpenGL3CheckShader(handle: uint32, desc: string) =
48 | var status: int32
49 | var log_length: int32
50 | glGetShaderiv(handle, GL_COMPILE_STATUS, status.addr)
51 | glGetShaderiv(handle, GL_INFO_LOG_LENGTH, log_length.addr)
52 | if status == GL_FALSE.int32:
53 | echo "ERROR: impl_opengl failed to compile " & desc
54 | if log_length > 0:
55 | var msg: seq[char] = newSeq[char](log_length)
56 | glGetShaderInfoLog(handle, log_length, nil, msg[0].addr)
57 | for m in msg:
58 | stdout.write(m)
59 | echo ""
60 |
61 | proc igOpenGL3CreateFontsTexture() =
62 | let io = igGetIO()
63 | var text_pixels: ptr cuchar
64 | var text_w: int32
65 | var text_h: int32
66 | io.fonts.getTexDataAsRGBA32(text_pixels.addr, text_w.addr, text_h.addr)
67 |
68 | var last_texture: int32
69 | glGetIntegerv(GL_TEXTURE_BINDING_2D, last_texture.addr)
70 | glGenTextures(1, gFontTexture.addr)
71 | glBindTexture(GL_TEXTURE_2D, gFontTexture)
72 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR.ord)
73 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR.ord)
74 | glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)
75 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA.ord, text_w, text_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, text_pixels)
76 |
77 | io.fonts.texID = cast[ImTextureID](gFontTexture)
78 | glBindTexture(GL_TEXTURE_2D, last_texture.uint32)
79 |
80 | proc igOpenGL3CreateDeviceObjects() =
81 | var last_texture: int32
82 | var last_array_buffer: int32
83 | var last_vertex_array: int32
84 | glGetIntegerv(GL_TEXTURE_BINDING_2D, last_texture.addr)
85 | glGetIntegerv(GL_ARRAY_BUFFER_BINDING, last_array_buffer.addr)
86 | glGetIntegerv(GL_VERTEX_ARRAY_BINDING, last_vertex_array.addr)
87 |
88 | # @NOTE: if you need the other shader versions, PR them please.
89 | var vertex_shader_glsl: cstring = """
90 | layout (location = 0) in vec2 Position;
91 | layout (location = 1) in vec2 UV;
92 | layout (location = 2) in vec4 Color;
93 | uniform mat4 ProjMtx;
94 | out vec2 Frag_UV;
95 | out vec4 Frag_Color;
96 | void main() {
97 | Frag_UV = UV;
98 | Frag_Color = Color;
99 | gl_Position = ProjMtx * vec4(Position.xy, 0, 1);
100 | }
101 | """
102 | var fragment_shader_glsl: cstring = """
103 | in vec2 Frag_UV;
104 | in vec4 Frag_Color;
105 | uniform sampler2D Texture;
106 | layout (location = 0) out vec4 Out_Color;
107 | void main() {
108 | Out_Color = Frag_Color * texture(Texture, Frag_UV.st);
109 | }
110 | """
111 | vertex_shader_glsl = $gGlslVersionString & "\n" & $vertex_shader_glsl
112 | fragment_shader_glsl = $gGlslVersionString & "\n" & $fragment_shader_glsl
113 |
114 | gVertHandle = glCreateShader(GL_VERTEX_SHADER)
115 | glShaderSource(gVertHandle, 1, vertex_shader_glsl.addr, nil)
116 | glCompileShader(gVertHandle)
117 | igOpenGL3CheckShader(gVertHandle, "vertex shader")
118 |
119 | gFragHandle = glCreateShader(GL_FRAGMENT_SHADER)
120 | glShaderSource(gFragHandle, 1, fragment_shader_glsl.addr, nil)
121 | glCompileShader(gFragHandle)
122 | igOpenGL3CheckShader(gFragHandle, "fragment shader")
123 |
124 | gShaderHandle = glCreateProgram()
125 | glAttachShader(gShaderHandle, gVertHandle)
126 | glAttachShader(gShaderHandle, gFragHandle)
127 | glLinkProgram(gShaderHandle)
128 | igOpenGL3CheckProgram(gShaderHandle, "shader program")
129 |
130 | gAttribLocationTex = glGetUniformLocation(gShaderHandle, "Texture")
131 | gAttribLocationProjMtx = glGetUniformLocation(gShaderHandle, "ProjMtx")
132 | gAttribLocationPosition = glGetAttribLocation(gShaderHandle, "Position")
133 | gAttribLocationUV = glGetAttribLocation(gShaderHandle, "UV")
134 | gAttribLocationColor = glGetAttribLocation(gShaderHandle, "Color")
135 |
136 | glGenBuffers(1, gVboHandle.addr)
137 | glGenBuffers(1, gElementsHandle.addr)
138 |
139 | igOpenGL3CreateFontsTexture()
140 |
141 | glBindTexture(GL_TEXTURE_2D, last_texture.uint32)
142 | glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer.uint32)
143 | glBindVertexArray(last_vertex_array.uint32)
144 |
145 | proc igOpenGL3NewFrame*() =
146 | if gFontTexture == 0:
147 | igOpenGL3CreateDeviceObjects()
148 |
149 | proc igOpenGL3RenderDrawData*(data: ptr ImDrawData) =
150 | let io = igGetIO()
151 | let fb_width = (data.displaySize.x * io.displayFramebufferScale.x).int32
152 | let fb_height = (data.displaySize.y * io.displayFramebufferScale.y).int32
153 | if fb_width <= 0 or fb_height <= 0:
154 | return
155 | data.scaleClipRects(io.displayFramebufferScale)
156 |
157 | var
158 | last_active_texture: int32
159 | last_program: int32
160 | last_texture: int32
161 | last_array_buffer: int32
162 | last_vertex_array: int32
163 | last_viewport: array[4, int32]
164 | last_scissor_box: array[4, int32]
165 | last_blend_src_rgb: int32
166 | last_blend_dst_rgb: int32
167 | last_blend_src_alpha: int32
168 | last_blend_dst_alpha: int32
169 | last_blend_equation_rgb: int32
170 | last_blend_equation_alpha: int32
171 | last_enable_blend: bool
172 | last_enable_cull_face: bool
173 | last_enable_depth_test: bool
174 | last_enable_scissor_test: bool
175 |
176 | glGetIntegerv(GL_ACTIVE_TEXTURE, last_active_texture.addr)
177 | glActiveTexture(GL_TEXTURE_0)
178 | glGetIntegerv(GL_CURRENT_PROGRAM, last_program.addr)
179 | glGetIntegerv(GL_TEXTURE_BINDING_2D, last_texture.addr)
180 | glGetIntegerv(GL_ARRAY_BUFFER_BINDING, last_array_buffer.addr)
181 | glGetIntegerv(GL_VERTEX_ARRAY_BINDING, last_vertex_array.addr)
182 | glGetIntegerv(GL_VIEWPORT, last_viewport[0].addr)
183 | glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box[0].addr)
184 | glGetIntegerv(GL_BLEND_SRC_RGB, last_blend_src_rgb.addr)
185 | glGetIntegerv(GL_BLEND_DST_RGB, last_blend_dst_rgb.addr)
186 | glGetIntegerv(GL_BLEND_SRC_ALPHA, last_blend_src_alpha.addr)
187 | glGetIntegerv(GL_BLEND_DST_ALPHA, last_blend_dst_alpha.addr)
188 | glGetIntegerv(GL_BLEND_EQUATION_RGB, last_blend_equation_rgb.addr)
189 | glGetIntegerv(GL_BLEND_EQUATION_ALPHA, last_blend_equation_alpha.addr)
190 | last_enable_blend = glIsEnabled(GL_BLEND)
191 | last_enable_cull_face = glIsEnabled(GL_CULL_FACE)
192 | last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST)
193 | last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST)
194 |
195 | glEnable(GL_BLEND)
196 | glBlendEquation(GL_FUNC_ADD)
197 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
198 | glDisable(GL_CULL_FACE)
199 | glDisable(GL_DEPTH_TEST)
200 | glEnable(GL_SCISSOR_TEST)
201 |
202 | glViewport(0, 0, fb_width, fb_height)
203 | let L: float32 = data.displayPos.x
204 | let R: float32 = data.displayPos.x + data.displaySize.x
205 | let T: float32 = data.displayPos.y
206 | let B: float32 = data.displayPos.y + data.displaySize.y
207 | var ortho_projection: array[4, array[4, float32]] = [
208 | [ 2.0f/(R-L), 0.0f, 0.0f, 0.0f ],
209 | [ 0.0f, 2.0f/(T-B), 0.0f, 0.0f ],
210 | [ 0.0f, 0.0f, -1.0f, 0.0f ],
211 | [ (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f ],
212 | ]
213 | glUseProgram(gShaderHandle)
214 | glUniform1i(gAttribLocationTex, 0)
215 | glUniformMatrix4fv(gAttribLocationProjMtx, 1, false, ortho_projection[0][0].addr)
216 |
217 | var vaoHandle: uint32 = 0
218 | glGenVertexArrays(1, vaoHandle.addr)
219 | glBindVertexArray(vaoHandle)
220 | glBindBuffer(GL_ARRAY_BUFFER, gVboHandle)
221 | glEnableVertexAttribArray(gAttribLocationPosition.uint32)
222 | glEnableVertexAttribArray(gAttribLocationUV.uint32)
223 | glEnableVertexAttribArray(gAttribLocationColor.uint32)
224 | glVertexAttribPointer(gAttribLocationPosition.uint32, 2, EGL_FLOAT, false, ImDrawVert.sizeof().int32, cast[pointer](0)) # @TODO: actually calculate offset
225 | glVertexAttribPointer(gAttribLocationUV.uint32, 2, EGL_FLOAT, false, ImDrawVert.sizeof().int32, cast[pointer](8))
226 | glVertexAttribPointer(gAttribLocationColor.uint32, 4, GL_UNSIGNED_BYTE, true, ImDrawVert.sizeof().int32, cast[pointer](16))
227 |
228 | let pos = data.displayPos
229 | for n in 0 ..< data.cmdListsCount:
230 | var cmd_list = data.cmdLists[n]
231 | var idx_buffer_offset: int = 0
232 |
233 | glBindBuffer(GL_ARRAY_BUFFER, gVboHandle)
234 | glBufferData(GL_ARRAY_BUFFER, (cmd_list.vtxBuffer.size * ImDrawVert.sizeof()).int32, cmd_list.vtxBuffer.data[0].addr, GL_STREAM_DRAW)
235 |
236 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gElementsHandle)
237 | glBufferData(GL_ELEMENT_ARRAY_BUFFER, (cmd_list.idxBuffer.size * ImDrawIdx.sizeof()).int32, cmd_list.idxBuffer.data[0].addr, GL_STREAM_DRAW)
238 |
239 | for cmd_i in 0 ..< cmd_list.cmdBuffer.size:
240 | var pcmd = cmd_list.cmdBuffer.data[cmd_i]
241 |
242 | if pcmd.userCallback != nil:
243 | pcmd.userCallback(cmd_list, pcmd.addr)
244 | else:
245 | var clip_rect = ImVec4(x: pcmd.clipRect.x - pos.x, y: pcmd.clipRect.y - pos.y, z: pcmd.clipRect.z - pos.x, w: pcmd.clipRect.w - pos.y)
246 | if clip_rect.x < fb_width.float32 and clip_rect.y < fb_height.float32 and clip_rect.z >= 0.0f and clip_rect.w >= 0.0f:
247 | glScissor(clip_rect.x.int32, (fb_height.float32 - clip_rect.w).int32, (clip_rect.z - clip_rect.x).int32, (clip_rect.w - clip_rect.y).int32)
248 | glBindTexture(GL_TEXTURE_2D, cast[uint32](pcmd.textureId))
249 | glDrawElements(GL_TRIANGLES, pcmd.elemCount.int32, if ImDrawIdx.sizeof == 2: GL_UNSIGNED_SHORT else: GL_UNSIGNED_INT, cast[pointer](idx_buffer_offset))
250 | idx_buffer_offset.inc(pcmd.elemCount.int32 * ImDrawIdx.sizeof())
251 |
252 | glDeleteVertexArrays(1, vaoHandle.addr)
253 |
254 | # Restore modified GL State
255 | glUseProgram(last_program.uint32)
256 | glBindTexture(GL_TEXTURE_2D, last_texture.uint32)
257 | glActiveTexture(last_active_texture.GLenum)
258 | glBindVertexArray(last_vertex_array.uint32)
259 | glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer.uint32)
260 | glBlendEquationSeparate(last_blend_equation_rgb.GLenum, last_blend_equation_alpha.GLenum)
261 | glBlendFuncSeparate(last_blend_src_rgb.GLenum, last_blend_dst_rgb.GLenum, last_blend_src_alpha.GLenum, last_blend_dst_alpha.GLenum)
262 |
263 | if last_enable_blend: glEnable(GL_BLEND) else: glDisable(GL_BLEND)
264 | if last_enable_cull_face: glEnable(GL_CULL_FACE) else: glDisable(GL_CULL_FACE)
265 | if last_enable_depth_test: glEnable(GL_DEPTH_TEST) else: glDisable(GL_DEPTH_TEST)
266 | if last_enable_scissor_test: glEnable(GL_SCISSOR_TEST) else: glDisable(GL_SCISSOR_TEST)
267 |
268 | glViewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3])
269 | glScissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3])
270 |
271 | proc igOpenGL3DestroyFontsTexture() =
272 | if gFontTexture > 0'u32:
273 | let io = igGetIO()
274 | glDeleteTextures(1, gFontTexture.addr)
275 | io.fonts.texID = cast[ImTextureID](0)
276 | gFontTexture = 0
277 |
278 | proc igOpenGL3DestroyDeviceObjects() =
279 | if gVboHandle > 0'u32: glDeleteBuffers(1, gVboHandle.addr)
280 | if gElementsHandle > 0'u32: glDeleteBuffers(1, gElementsHandle.addr)
281 | gVboHandle = 0'u32
282 | gElementsHandle = 0'u32
283 |
284 | if gShaderHandle > 0'u32 and gVertHandle > 0'u32: glDetachShader(gShaderHandle, gVertHandle)
285 | if gVertHandle > 0'u32: glDeleteShader(gVertHandle)
286 | gVertHandle = 0'u32
287 |
288 | if gShaderHandle > 0'u32 and gFragHandle > 0'u32: glDetachShader(gShaderHandle, gFragHandle)
289 | if gFragHandle > 0'u32: glDeleteShader(gFragHandle)
290 | gFragHandle = 0'u32
291 |
292 | if gShaderHandle > 0'u32: glDeleteProgram(gShaderHandle)
293 | gShaderHandle = 0'u32
294 |
295 | igOpenGL3DestroyFontsTexture()
296 |
297 | proc igOpenGL3Shutdown*() =
298 | igOpenGL3DestroyDeviceObjects()
299 |
--------------------------------------------------------------------------------
/src/nimgl/private/logo.nim:
--------------------------------------------------------------------------------
1 | var nimglLogoHeight*: int32 = 32
2 | var nimglLogoWidth*: int32 = 32
3 | var nimglLogo*: array[4096, uint8] = [0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
4 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
5 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x40'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
6 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
7 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
8 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
9 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
10 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x24'u8,
11 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x2C'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
12 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
13 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
14 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
15 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
16 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
17 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
18 | 0x6A'u8, 0xA4'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x5A'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
19 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
20 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
21 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
22 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
23 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x38'u8, 0x66'u8, 0xBB'u8,
24 | 0x6A'u8, 0xA2'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x01'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
25 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
26 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
27 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
28 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
29 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
30 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xD0'u8,
31 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x68'u8, 0x66'u8, 0xBB'u8,
32 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
33 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
34 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
35 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
36 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x22'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
37 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xDB'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x21'u8, 0x66'u8, 0xBB'u8,
38 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
39 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
40 | 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
41 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
42 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
43 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xA9'u8, 0x66'u8, 0xBB'u8,
44 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xA2'u8,
45 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
46 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
47 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
48 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
49 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x20'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
50 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFB'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x50'u8,
51 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
52 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
53 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
54 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
55 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
56 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
57 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
58 | 0x6A'u8, 0xD3'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x20'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
59 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
60 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
61 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
62 | 0x6A'u8, 0x21'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
63 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
64 | 0x6A'u8, 0x86'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
65 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
66 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
67 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
68 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
69 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
70 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
71 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFD'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x51'u8, 0x66'u8, 0xBB'u8,
72 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
73 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
74 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x21'u8,
75 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
76 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
77 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xB5'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x0C'u8, 0x66'u8, 0xBB'u8,
78 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
79 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
80 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
81 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
82 | 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
83 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
84 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x83'u8,
85 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
86 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
87 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x21'u8, 0x66'u8, 0xBB'u8,
88 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
89 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
90 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xEB'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x34'u8,
91 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
92 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
93 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
94 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8,
95 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
96 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
97 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
98 | 0x6A'u8, 0xBF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x0B'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
99 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
100 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x21'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
101 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
102 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
103 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
104 | 0x6A'u8, 0x60'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
105 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
106 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
107 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8,
108 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
109 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
110 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
111 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xE9'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x39'u8, 0x66'u8, 0xBB'u8,
112 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
113 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x21'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
114 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
115 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
116 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xD9'u8,
117 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
118 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
119 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
120 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
121 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
122 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
123 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
124 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x71'u8,
125 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
126 | 0x6A'u8, 0x26'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
127 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
128 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
129 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBE'u8, 0xFF'u8, 0xFF'u8,
130 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
131 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
132 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
133 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
134 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
135 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
136 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
137 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
138 | 0x6A'u8, 0xA1'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
139 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
140 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
141 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
142 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
143 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
144 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
145 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
146 | 0x6A'u8, 0xB2'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
147 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
148 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
149 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
150 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
151 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xC3'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x3B'u8, 0x66'u8, 0xBB'u8,
152 | 0x6A'u8, 0xED'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
153 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
154 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
155 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
156 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
157 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
158 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBE'u8,
159 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
160 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
161 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
162 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
163 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
164 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xF4'u8,
165 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
166 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
167 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
168 | 0x6A'u8, 0xBC'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
169 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
170 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
171 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x2B'u8, 0x66'u8, 0xBB'u8,
172 | 0x6A'u8, 0xDA'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
173 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
174 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
175 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
176 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
177 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
178 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
179 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
180 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBC'u8,
181 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
182 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
183 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
184 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
185 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
186 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
187 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
188 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
189 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
190 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
191 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
192 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
193 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBC'u8, 0xFF'u8, 0xFF'u8,
194 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
195 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
196 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
197 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
198 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x72'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
199 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
200 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
201 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
202 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
203 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
204 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
205 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
206 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBC'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
207 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
208 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
209 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
210 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
211 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x3F'u8, 0x66'u8, 0xBB'u8,
212 | 0x6A'u8, 0xF3'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
213 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
214 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
215 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
216 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
217 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
218 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
219 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBB'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
220 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
221 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
222 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
223 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
224 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x12'u8,
225 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xC0'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
226 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
227 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
228 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
229 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
230 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
231 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
232 | 0x6A'u8, 0xBB'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
233 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
234 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
235 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
236 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
237 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
238 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x92'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
239 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
240 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
241 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
242 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
243 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
244 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBB'u8,
245 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
246 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
247 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
248 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
249 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
250 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
251 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x59'u8, 0x66'u8, 0xBB'u8,
252 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
253 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
254 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
255 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
256 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
257 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8,
258 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
259 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
260 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
261 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
262 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
263 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
264 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x29'u8,
265 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xDA'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
266 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
267 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
268 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
269 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
270 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
271 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
272 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
273 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
274 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
275 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
276 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
277 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
278 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xA7'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
279 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
280 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
281 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
282 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
283 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
284 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
285 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
286 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
287 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
288 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
289 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
290 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
291 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x76'u8, 0x66'u8, 0xBB'u8,
292 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
293 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
294 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
295 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
296 | 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
297 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
298 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
299 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
300 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x75'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xDF'u8,
301 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xEE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xCD'u8, 0x66'u8, 0xBB'u8,
302 | 0x6A'u8, 0x3D'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
303 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
304 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x40'u8,
305 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xEE'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
306 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
307 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
308 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8,
309 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
310 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
311 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
312 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xB2'u8,
313 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x79'u8, 0x66'u8, 0xBB'u8,
314 | 0x6A'u8, 0x56'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xA4'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
315 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x5C'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
316 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
317 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
318 | 0x6A'u8, 0x10'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xC7'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
319 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
320 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
321 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8,
322 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
323 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
324 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
325 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x60'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
326 | 0x6A'u8, 0x05'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
327 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x61'u8, 0x66'u8, 0xBB'u8,
328 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x0F'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
329 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
330 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
331 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x8B'u8, 0x66'u8, 0xBB'u8,
332 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
333 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
334 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
335 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
336 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
337 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
338 | 0x6A'u8, 0xDB'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x92'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
339 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
340 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xEC'u8,
341 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x7D'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
342 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
343 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
344 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x57'u8,
345 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
346 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
347 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
348 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
349 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
350 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xE6'u8,
351 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x75'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
352 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
353 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xD9'u8, 0x66'u8, 0xBB'u8,
354 | 0x6A'u8, 0x9A'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
355 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
356 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
357 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
358 | 0x6A'u8, 0x27'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xD9'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
359 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8,
360 | 0x6A'u8, 0xBD'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
361 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
362 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
363 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xA0'u8, 0x66'u8, 0xBB'u8,
364 | 0x6A'u8, 0xD9'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
365 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
366 | 0x6A'u8, 0x09'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x38'u8,
367 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
368 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
369 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
370 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
371 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x01'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAA'u8, 0x66'u8, 0xBB'u8,
372 | 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xB9'u8,
373 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
374 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
375 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
376 | 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x0A'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8,
377 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x9E'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x02'u8, 0x66'u8, 0xBB'u8,
378 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x26'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFA'u8,
379 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xB8'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
380 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
381 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
382 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
383 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
384 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x72'u8,
385 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFF'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xDD'u8, 0xFF'u8, 0xFF'u8,
386 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
387 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
388 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
389 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x1E'u8, 0x66'u8, 0xBB'u8,
390 | 0x6A'u8, 0xE4'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xEA'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xDD'u8,
391 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xFA'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xAC'u8, 0x66'u8, 0xBB'u8,
392 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
393 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
394 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
395 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
396 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
397 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
398 | 0x6A'u8, 0x5F'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xBC'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
399 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
400 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8,
401 | 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
402 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x42'u8,
403 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0xB2'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0xC4'u8, 0x66'u8, 0xBB'u8,
404 | 0x6A'u8, 0x9B'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x14'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
405 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
406 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
407 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
408 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
409 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8,
410 | 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8, 0x66'u8, 0xBB'u8, 0x6A'u8, 0x00'u8,
411 | 0x66'u8, 0xBB'u8, 0x6A'u8, 0x44'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8,
412 | 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8, 0xFF'u8, 0xFF'u8, 0xFF'u8, 0x00'u8]
413 |
--------------------------------------------------------------------------------
/src/nimgl/private/ncimgui.h:
--------------------------------------------------------------------------------
1 | #include "imgui/imgui.h"
2 | #include "cimgui.h"
3 |
4 | // Should open an issue in cimgui about this...
5 | // This isn't best practice in c++ so bear with me.
6 |
--------------------------------------------------------------------------------