├── .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 | --------------------------------------------------------------------------------