├── .gitignore ├── .gitmodules ├── .stylish-haskell.yaml ├── .travis.yml ├── LICENSE ├── README.md ├── Setup.hs ├── app ├── Calculator.hs ├── Misc.hs └── Util.hs ├── external ├── gl3w │ ├── include │ │ ├── GL │ │ │ ├── gl3w.h │ │ │ └── glcorearb.h │ │ └── KHR │ │ │ └── khrplatform.h │ └── src │ │ └── gl3w.c └── impl │ ├── include │ ├── cimgui_impl.h │ ├── imgui_impl_opengl3.h │ └── imgui_impl_sdl.h │ └── src │ ├── imgui_impl_opengl3.cpp │ └── imgui_impl_sdl.cpp ├── package.yaml ├── src ├── Imgui.hs └── Imgui │ └── Internal │ └── Bindings.chs ├── stack.yaml └── stack.yaml.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work/ 2 | imgui-haskell.cabal 3 | external/lib 4 | *~ 5 | imgui.ini 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "external/cimgui"] 2 | path = external/cimgui 3 | url = https://github.com/cimgui/cimgui.git -------------------------------------------------------------------------------- /.stylish-haskell.yaml: -------------------------------------------------------------------------------- 1 | # Default stylish-haskell configuration file in Serokell. 2 | # It's based on default config provided by `stylish-haskell --defaults` but has some changes 3 | # ================================== 4 | 5 | # The stylish-haskell tool is mainly configured by specifying steps. These steps 6 | # are a list, so they have an order, and one specific step may appear more than 7 | # once (if needed). Each file is processed by these steps in the given order. 8 | steps: 9 | # Convert some ASCII sequences to their Unicode equivalents. This is disabled 10 | # by default. 11 | # - unicode_syntax: 12 | # # In order to make this work, we also need to insert the UnicodeSyntax 13 | # # language pragma. If this flag is set to true, we insert it when it's 14 | # # not already present. You may want to disable it if you configure 15 | # # language extensions using some other method than pragmas. Default: 16 | # # true. 17 | # add_language_pragma: true 18 | 19 | # Align the right hand side of some elements. This is quite conservative 20 | # and only applies to statements where each element occupies a single 21 | # line. 22 | - simple_align: 23 | cases: true 24 | top_level_patterns: true 25 | records: true 26 | 27 | # Import cleanup 28 | - imports: 29 | # There are different ways we can align names and lists. 30 | # 31 | # - global: Align the import names and import list throughout the entire 32 | # file. 33 | # 34 | # - file: Like global, but don't add padding when there are no qualified 35 | # imports in the file. 36 | # 37 | # - group: Only align the imports per group (a group is formed by adjacent 38 | # import lines). 39 | # 40 | # - none: Do not perform any alignment. 41 | # 42 | # Default: global. 43 | align: global 44 | 45 | # The following options affect only import list alignment. 46 | # 47 | # List align has following options: 48 | # 49 | # - after_alias: Import list is aligned with end of import including 50 | # 'as' and 'hiding' keywords. 51 | # 52 | # > import qualified Data.List as List (concat, foldl, foldr, head, 53 | # > init, last, length) 54 | # 55 | # - with_alias: Import list is aligned with start of alias or hiding. 56 | # 57 | # > import qualified Data.List as List (concat, foldl, foldr, head, 58 | # > init, last, length) 59 | # 60 | # - new_line: Import list starts always on new line. 61 | # 62 | # > import qualified Data.List as List 63 | # > (concat, foldl, foldr, head, init, last, length) 64 | # 65 | # Default: after_alias 66 | list_align: after_alias 67 | 68 | # Right-pad the module names to align imports in a group: 69 | # 70 | # - true: a little more readable 71 | # 72 | # > import qualified Data.List as List (concat, foldl, foldr, 73 | # > init, last, length) 74 | # > import qualified Data.List.Extra as List (concat, foldl, foldr, 75 | # > init, last, length) 76 | # 77 | # - false: diff-safe 78 | # 79 | # > import qualified Data.List as List (concat, foldl, foldr, init, 80 | # > last, length) 81 | # > import qualified Data.List.Extra as List (concat, foldl, foldr, 82 | # > init, last, length) 83 | # 84 | # Default: true 85 | pad_module_names: true 86 | 87 | # Long list align style takes effect when import is too long. This is 88 | # determined by 'columns' setting. 89 | # 90 | # - inline: This option will put as much specs on same line as possible. 91 | # 92 | # - new_line: Import list will start on new line. 93 | # 94 | # - new_line_multiline: Import list will start on new line when it's 95 | # short enough to fit to single line. Otherwise it'll be multiline. 96 | # 97 | # - multiline: One line per import list entry. 98 | # Type with constructor list acts like single import. 99 | # 100 | # > import qualified Data.Map as M 101 | # > ( empty 102 | # > , singleton 103 | # > , ... 104 | # > , delete 105 | # > ) 106 | # 107 | # Default: inline 108 | long_list_align: inline 109 | 110 | # Align empty list (importing instances) 111 | # 112 | # Empty list align has following options 113 | # 114 | # - inherit: inherit list_align setting 115 | # 116 | # - right_after: () is right after the module name: 117 | # 118 | # > import Vector.Instances () 119 | # 120 | # Default: inherit 121 | empty_list_align: inherit 122 | 123 | # List padding determines indentation of import list on lines after import. 124 | # This option affects 'long_list_align'. 125 | # 126 | # - : constant value 127 | # 128 | # - module_name: align under start of module name. 129 | # Useful for 'file' and 'group' align settings. 130 | list_padding: 4 131 | 132 | # Separate lists option affects formatting of import list for type 133 | # or class. The only difference is single space between type and list 134 | # of constructors, selectors and class functions. 135 | # 136 | # - true: There is single space between Foldable type and list of it's 137 | # functions. 138 | # 139 | # > import Data.Foldable (Foldable (fold, foldl, foldMap)) 140 | # 141 | # - false: There is no space between Foldable type and list of it's 142 | # functions. 143 | # 144 | # > import Data.Foldable (Foldable(fold, foldl, foldMap)) 145 | # 146 | # Default: true 147 | separate_lists: true 148 | 149 | # Space surround option affects formatting of import lists on a single 150 | # line. The only difference is single space after the initial 151 | # parenthesis and a single space before the terminal parenthesis. 152 | # 153 | # - true: There is single space associated with the enclosing 154 | # parenthesis. 155 | # 156 | # > import Data.Foo ( foo ) 157 | # 158 | # - false: There is no space associated with the enclosing parenthesis 159 | # 160 | # > import Data.Foo (foo) 161 | # 162 | # Default: false 163 | space_surround: false 164 | 165 | # Language pragmas 166 | - language_pragmas: 167 | # We can generate different styles of language pragma lists. 168 | # 169 | # - vertical: Vertical-spaced language pragmas, one per line. 170 | # 171 | # - compact: A more compact style. 172 | # 173 | # - compact_line: Similar to compact, but wrap each line with 174 | # `{-#LANGUAGE #-}'. 175 | # 176 | # Default: vertical. 177 | style: vertical 178 | 179 | # stylish-haskell can detect redundancy of some language pragmas. If this 180 | # is set to true, it will remove those redundant pragmas. Default: true. 181 | remove_redundant: true 182 | 183 | # Replace tabs by spaces. This is disabled by default. 184 | # - tabs: 185 | # # Number of spaces to use for each tab. Default: 8, as specified by the 186 | # # Haskell report. 187 | # spaces: 8 188 | 189 | # Remove trailing whitespace 190 | - trailing_whitespace: {} 191 | 192 | # A common setting is the number of columns (parts of) code will be wrapped 193 | # to. Different steps take this into account. Default: 80. 194 | columns: 90 195 | 196 | # By default, line endings are converted according to the OS. You can override 197 | # preferred format here. 198 | # 199 | # - native: Native newline format. CRLF on Windows, LF on other OSes. 200 | # 201 | # - lf: Convert to LF ("\n"). 202 | # 203 | # - crlf: Convert to CRLF ("\r\n"). 204 | # 205 | # Default: native. 206 | newline: native 207 | 208 | # These syntax-affecting language extensions are enabled so that 209 | # stylish-haskell wouldn't fail with parsing errors when processing files 210 | # in projects that have those extensions enabled in the .cabal file 211 | # rather than locally. 212 | # 213 | # To my best knowledge, no harm should result from enabling an extension 214 | # that isn't actually used in the file/project. —@neongreen 215 | language_extensions: 216 | - BangPatterns 217 | - ConstraintKinds 218 | - DataKinds 219 | - DefaultSignatures 220 | - DeriveDataTypeable 221 | - DeriveGeneric 222 | - FlexibleContexts 223 | - FlexibleInstances 224 | - FunctionalDependencies 225 | - GADTs 226 | - GeneralizedNewtypeDeriving 227 | - LambdaCase 228 | - MultiParamTypeClasses 229 | - MultiWayIf 230 | - NoImplicitPrelude 231 | - OverloadedStrings 232 | - RecordWildCards 233 | - ScopedTypeVariables 234 | - StandaloneDeriving 235 | - TemplateHaskell 236 | - TupleSections 237 | - TypeApplications 238 | - TypeFamilies 239 | - ViewPatterns 240 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # Use new container infrastructure to enable caching 2 | sudo: true 3 | 4 | dist: xenial 5 | 6 | language: c 7 | 8 | addons: 9 | apt: 10 | packages: 11 | - libsdl2-dev 12 | - libglu1-mesa-dev 13 | - freeglut3 14 | - freeglut3-dev 15 | - mesa-common-dev 16 | 17 | before_install: 18 | # Download and unpack the stack executable 19 | - mkdir -p ~/.local/bin 20 | - export PATH=$HOME/.local/bin:$PATH 21 | - travis_retry curl -L https://get.haskellstack.org/stable/linux-x86_64.tar.gz | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack' 22 | 23 | install: 24 | # Build dependencies 25 | - stack --no-terminal --install-ghc test --only-dependencies 26 | 27 | script: 28 | # Build the package, its tests, and its docs and run the tests 29 | - stack --no-terminal test --haddock --no-haddock-deps 30 | # Sdist and check it works 31 | - stack --no-terminal sdist --test-tarball 32 | 33 | 34 | # Caching so the next build will be fast too. 35 | cache: 36 | directories: 37 | - $HOME/.stack -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Author name here (c) 2019 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Author name here nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # imgui-haskell 2 | 3 | This repo is my attempt at creating bindings for imgui. It's not overly useful at this stage, and requires a lot of work. 4 | 5 | I am no longer working on it. If anyone's interested in taking it over, let me know 6 | -------------------------------------------------------------------------------- /Setup.hs: -------------------------------------------------------------------------------- 1 | import Data.Maybe (fromJust) 2 | import Distribution.PackageDescription 3 | import Distribution.Simple 4 | import Distribution.Simple.LocalBuildInfo 5 | import Distribution.Simple.Setup 6 | import Distribution.Simple.Utils 7 | import Distribution.Verbosity 8 | import System.Directory (getCurrentDirectory) 9 | import System.FilePath (takeFileName) 10 | import System.Info 11 | 12 | main :: IO () 13 | main = defaultMainWithHooks simpleUserHooks { 14 | preConf = preConf', 15 | confHook = confHook', 16 | preBuild = preBuild', 17 | postCopy = postCopy' 18 | } 19 | 20 | preConf' :: Args -> ConfigFlags -> IO HookedBuildInfo 21 | preConf' args flags = do 22 | let verbosity = (fromFlag $ configVerbosity flags) 23 | putStrLn "Make all CImgui lib" 24 | runCommand verbosity ["make", "--directory=external/cimgui", "all"] 25 | putStrLn "Copying and renaming CImgui lib to external/lib" 26 | copyCImguiLib verbosity 27 | preConf simpleUserHooks args flags 28 | 29 | confHook' :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo 30 | confHook' (description, buildInfo) flags = do 31 | lbi <- confHook simpleUserHooks (description, buildInfo) flags 32 | dir <- getCurrentDirectory 33 | let lpd = localPkgDescr lbi 34 | let lib = fromJust (library lpd) 35 | let libbi = libBuildInfo lib 36 | let libPref = libdir $ absoluteInstallDirs lpd lbi NoCopyDest 37 | 38 | let libbi' = libbi { 39 | extraLibDirs = libPref : extraLibDirs libbi ++ [(dir ++ "/external/lib")] 40 | } 41 | 42 | let lib' = lib { libBuildInfo = libbi' } 43 | let lpd' = lpd { library = Just lib' } 44 | 45 | return $ lbi { localPkgDescr = lpd' } 46 | 47 | 48 | preBuild' :: Args -> BuildFlags -> IO HookedBuildInfo 49 | preBuild' _ _ = do 50 | dir <- getCurrentDirectory 51 | let extLibDir = dir ++ "/external/lib" 52 | putStrLn $ "preBuild: adding " ++ extLibDir ++ "/external/lib into extraLibDirs" 53 | let bi = emptyBuildInfo { extraLibDirs = [ extLibDir ] } 54 | return (Just bi, []) 55 | 56 | 57 | postCopy' :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO () 58 | postCopy' _ flags pkg_descr lbi = do 59 | let libPref = libdir . absoluteInstallDirs pkg_descr lbi 60 | . fromFlag . copyDest 61 | $ flags 62 | let verbosity = fromFlag $ copyVerbosity flags 63 | let from = ("external/lib/libcimgui" ++ ext) 64 | let to = (libPref ++ "/libcimgui" ++ ext) 65 | installExecutableFile verbosity from to 66 | 67 | 68 | copyCImguiLib :: Verbosity -> IO () 69 | copyCImguiLib verbosity = do 70 | createDirectoryIfMissingVerbose verbosity True "external/lib" 71 | let from = ("external/cimgui/cimgui" ++ ext) 72 | let to = ("external/lib/libcimgui" ++ ext) 73 | copyFileVerbose verbosity from to 74 | 75 | runCommand :: Verbosity -> [String] -> IO () 76 | runCommand verbosity command = 77 | rawSystemExit verbosity "env" command 78 | 79 | ext :: String 80 | ext = case os of 81 | "darwin" -> ".dylib" 82 | "windows" -> ".dll" 83 | _ -> ".so" 84 | 85 | 86 | -------------------------------------------------------------------------------- /app/Calculator.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | {-# LANGUAGE RecordWildCards #-} 3 | 4 | module Calculator (main) where 5 | 6 | import Foreign.Ptr (nullFunPtr, nullPtr) 7 | import Control.Monad (unless) 8 | import qualified Graphics.Rendering.OpenGL as GL 9 | import qualified ImGui as ImGui 10 | import SDL (($=)) 11 | import qualified SDL as SDL 12 | import qualified SDL.Internal.Types as SDL 13 | import qualified SDL.Raw as SDLRaw 14 | import SDL.Vect 15 | import Util 16 | 17 | data AppState = AppState { 18 | asBgColor :: [Float], 19 | asWindowTitle :: String 20 | } deriving (Eq, Show) 21 | 22 | 23 | draw :: AppState -> IO AppState 24 | draw state = do 25 | ImGui.begin "Window" False ImGui.ImGuiWindowFlags_None 26 | (success, bgColor @ [r, g, b]) <- ImGui.colorEdit3 "Background color" (asBgColor state) ImGui.ImGuiColorEditFlags_None 27 | (success, windowTitle) <- ImGui.inputText "Edit window title" (asWindowTitle state) 64 ImGui.ImGuiInputTextFlags_None nullFunPtr nullPtr 28 | 29 | let newState = state { 30 | asBgColor = bgColor, 31 | asWindowTitle = windowTitle 32 | } 33 | ImGui.end 34 | GL.clearColor $= GL.Color4 r g b 1 35 | pure newState 36 | 37 | main :: IO () 38 | main = runImGuiApp $ 39 | ImGuiApp { 40 | appDraw = draw, 41 | appState = AppState { 42 | asBgColor = [0.0, 0.0, 0.0], 43 | asWindowTitle = "Hello world!" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/Misc.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | {-# LANGUAGE RecordWildCards #-} 3 | 4 | module Misc (main) where 5 | 6 | import Control.Monad (unless) 7 | import qualified Graphics.Rendering.OpenGL as GL 8 | import qualified ImGui as ImGui 9 | import SDL (($=)) 10 | import qualified SDL as SDL 11 | import qualified SDL.Internal.Types as SDL 12 | import qualified SDL.Raw as SDLRaw 13 | import SDL.Vect 14 | import Util 15 | 16 | data AppState = AppState { 17 | asSliderInt :: Int, 18 | asSliderFloat :: Float, 19 | asSliderAngle :: Float, 20 | asColorPicker :: [Float], 21 | asButton :: Bool 22 | } deriving (Eq, Show) 23 | 24 | draw :: AppState -> IO AppState 25 | draw state = do 26 | ImGui.showMetricsWindow True 27 | 28 | 29 | ImGui.begin "Window" False ImGui.ImGuiWindowFlags_None 30 | (_, sliderIntV) <- ImGui.sliderInt "Slider int" (asSliderInt state) 1 100 "" 31 | (_, sliderFloatV) <- ImGui.sliderFloat "Slider float" (asSliderFloat state) 1.0 100.0 "" 1.0 32 | (_, sliderAngleV) <- ImGui.sliderAngle "Slider angle" (asSliderAngle state) 0.0 360.0 "" 33 | (_, colorPickerV) <- ImGui.colorPicker3 "Color picker" (asColorPicker state) ImGui.ImGuiColorEditFlags_None 34 | (buttonV) <- ImGui.button "Press me" (ImGui.makeImVec2 0 0) 35 | ImGui.text $ "Button state = " ++ show buttonV 36 | 37 | 38 | let newState = state { 39 | asSliderInt = sliderIntV, 40 | asSliderFloat = sliderFloatV, 41 | asSliderAngle = sliderAngleV, 42 | asColorPicker = colorPickerV, 43 | asButton = buttonV 44 | } 45 | 46 | 47 | ImGui.end 48 | pure newState 49 | 50 | main :: IO () 51 | main = runImGuiApp $ 52 | ImGuiApp { 53 | appDraw = draw, 54 | appState = AppState { 55 | asSliderInt = 50, 56 | asSliderFloat = 50.0, 57 | asSliderAngle = pi, 58 | asColorPicker = [0.0, 0.0, 0.0], 59 | asButton = False 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/Util.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | 3 | module Util ( 4 | runImGuiApp 5 | , ImGuiApp(..) 6 | ) where 7 | 8 | import Control.Monad (unless) 9 | import qualified Graphics.Rendering.OpenGL as GL 10 | import qualified ImGui as ImGui 11 | import SDL (($=)) 12 | import qualified SDL as SDL 13 | import qualified SDL.Internal.Types as SDL 14 | import qualified SDL.Raw as SDLRaw 15 | import SDL.Vect 16 | import Foreign (alloca) 17 | 18 | 19 | data ImGuiApp s = ImGuiApp { 20 | appDraw :: s -> IO s 21 | , appState :: s 22 | } 23 | 24 | 25 | runImGuiApp :: ImGuiApp s -> IO () 26 | runImGuiApp app = do 27 | SDL.initialize [SDL.InitVideo] 28 | 29 | window @ (SDL.Window wp) <- 30 | SDL.createWindow 31 | "SDL / OpenGL Example" 32 | SDL.defaultWindow { 33 | SDL.windowHighDPI = True, 34 | SDL.windowInitialSize = V2 640 480 35 | } 36 | SDL.showWindow window 37 | glContext <- SDLRaw.glCreateContext wp 38 | ImGui.gl3wInit 39 | imguiContext <- ImGui.createContext Nothing 40 | ImGui.getIO 41 | ImGui.initForOpenGL wp glContext 42 | ImGui.openGL3Init "#version 110" 43 | 44 | loop window app 45 | 46 | ImGui.destroyContext imguiContext 47 | SDL.destroyWindow window 48 | SDL.quit 49 | 50 | 51 | loop :: SDL.Window -> ImGuiApp s -> IO () 52 | loop window @ (SDL.Window wp) app = do 53 | 54 | alloca (\e -> do 55 | SDLRaw.pollEvent e 56 | ImGui.sdl2ProcessEvent e) 57 | -- event <- SDL.pollEvent 58 | -- quit <- case event of 59 | -- Just e -> do 60 | -- ImGui.sdl2ProcessEvent e 61 | -- pure $ SDL.eventPayload e == SDL.QuitEvent 62 | -- Nothing -> 63 | -- pure False 64 | 65 | let quit = False 66 | 67 | ImGui.openGL3NewFrame 68 | ImGui.sdl2NewFrame wp 69 | ImGui.newFrame 70 | 71 | let state = appState app 72 | let draw = appDraw app 73 | newState <- draw state 74 | let newApp = ImGuiApp { 75 | appDraw = draw, 76 | appState = newState 77 | } 78 | 79 | ImGui.render 80 | 81 | GL.clear [GL.ColorBuffer] 82 | ImGui.getDrawData >>= ImGui.openGL3RenderDrawData 83 | SDL.glSwapWindow window 84 | 85 | 86 | unless quit (loop window newApp) 87 | -------------------------------------------------------------------------------- /external/gl3w/include/GL/gl3w.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file was generated with gl3w_gen.py, part of gl3w 3 | * (hosted at https://github.com/skaslev/gl3w) 4 | * 5 | * This is free and unencumbered software released into the public domain. 6 | * 7 | * Anyone is free to copy, modify, publish, use, compile, sell, or 8 | * distribute this software, either in source code form or as a compiled 9 | * binary, for any purpose, commercial or non-commercial, and by any 10 | * means. 11 | * 12 | * In jurisdictions that recognize copyright laws, the author or authors 13 | * of this software dedicate any and all copyright interest in the 14 | * software to the public domain. We make this dedication for the benefit 15 | * of the public at large and to the detriment of our heirs and 16 | * successors. We intend this dedication to be an overt act of 17 | * relinquishment in perpetuity of all present and future rights to this 18 | * software under copyright law. 19 | * 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23 | * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 24 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 25 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | * OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #ifndef __gl3w_h_ 30 | #define __gl3w_h_ 31 | 32 | #include 33 | 34 | #ifndef __gl_h_ 35 | #define __gl_h_ 36 | #endif 37 | 38 | #ifdef __cplusplus 39 | extern "C" { 40 | #endif 41 | 42 | #define GL3W_OK 0 43 | #define GL3W_ERROR_INIT -1 44 | #define GL3W_ERROR_LIBRARY_OPEN -2 45 | #define GL3W_ERROR_OPENGL_VERSION -3 46 | 47 | typedef void (*GL3WglProc)(void); 48 | typedef GL3WglProc (*GL3WGetProcAddressProc)(const char *proc); 49 | 50 | /* gl3w api */ 51 | int gl3wInit(void); 52 | int gl3wInit2(GL3WGetProcAddressProc proc); 53 | int gl3wIsSupported(int major, int minor); 54 | GL3WglProc gl3wGetProcAddress(const char *proc); 55 | 56 | /* gl3w internal state */ 57 | union GL3WProcs { 58 | GL3WglProc ptr[657]; 59 | struct { 60 | PFNGLACTIVESHADERPROGRAMPROC ActiveShaderProgram; 61 | PFNGLACTIVETEXTUREPROC ActiveTexture; 62 | PFNGLATTACHSHADERPROC AttachShader; 63 | PFNGLBEGINCONDITIONALRENDERPROC BeginConditionalRender; 64 | PFNGLBEGINQUERYPROC BeginQuery; 65 | PFNGLBEGINQUERYINDEXEDPROC BeginQueryIndexed; 66 | PFNGLBEGINTRANSFORMFEEDBACKPROC BeginTransformFeedback; 67 | PFNGLBINDATTRIBLOCATIONPROC BindAttribLocation; 68 | PFNGLBINDBUFFERPROC BindBuffer; 69 | PFNGLBINDBUFFERBASEPROC BindBufferBase; 70 | PFNGLBINDBUFFERRANGEPROC BindBufferRange; 71 | PFNGLBINDBUFFERSBASEPROC BindBuffersBase; 72 | PFNGLBINDBUFFERSRANGEPROC BindBuffersRange; 73 | PFNGLBINDFRAGDATALOCATIONPROC BindFragDataLocation; 74 | PFNGLBINDFRAGDATALOCATIONINDEXEDPROC BindFragDataLocationIndexed; 75 | PFNGLBINDFRAMEBUFFERPROC BindFramebuffer; 76 | PFNGLBINDIMAGETEXTUREPROC BindImageTexture; 77 | PFNGLBINDIMAGETEXTURESPROC BindImageTextures; 78 | PFNGLBINDPROGRAMPIPELINEPROC BindProgramPipeline; 79 | PFNGLBINDRENDERBUFFERPROC BindRenderbuffer; 80 | PFNGLBINDSAMPLERPROC BindSampler; 81 | PFNGLBINDSAMPLERSPROC BindSamplers; 82 | PFNGLBINDTEXTUREPROC BindTexture; 83 | PFNGLBINDTEXTUREUNITPROC BindTextureUnit; 84 | PFNGLBINDTEXTURESPROC BindTextures; 85 | PFNGLBINDTRANSFORMFEEDBACKPROC BindTransformFeedback; 86 | PFNGLBINDVERTEXARRAYPROC BindVertexArray; 87 | PFNGLBINDVERTEXBUFFERPROC BindVertexBuffer; 88 | PFNGLBINDVERTEXBUFFERSPROC BindVertexBuffers; 89 | PFNGLBLENDCOLORPROC BlendColor; 90 | PFNGLBLENDEQUATIONPROC BlendEquation; 91 | PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate; 92 | PFNGLBLENDEQUATIONSEPARATEIPROC BlendEquationSeparatei; 93 | PFNGLBLENDEQUATIONIPROC BlendEquationi; 94 | PFNGLBLENDFUNCPROC BlendFunc; 95 | PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate; 96 | PFNGLBLENDFUNCSEPARATEIPROC BlendFuncSeparatei; 97 | PFNGLBLENDFUNCIPROC BlendFunci; 98 | PFNGLBLITFRAMEBUFFERPROC BlitFramebuffer; 99 | PFNGLBLITNAMEDFRAMEBUFFERPROC BlitNamedFramebuffer; 100 | PFNGLBUFFERDATAPROC BufferData; 101 | PFNGLBUFFERSTORAGEPROC BufferStorage; 102 | PFNGLBUFFERSUBDATAPROC BufferSubData; 103 | PFNGLCHECKFRAMEBUFFERSTATUSPROC CheckFramebufferStatus; 104 | PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC CheckNamedFramebufferStatus; 105 | PFNGLCLAMPCOLORPROC ClampColor; 106 | PFNGLCLEARPROC Clear; 107 | PFNGLCLEARBUFFERDATAPROC ClearBufferData; 108 | PFNGLCLEARBUFFERSUBDATAPROC ClearBufferSubData; 109 | PFNGLCLEARBUFFERFIPROC ClearBufferfi; 110 | PFNGLCLEARBUFFERFVPROC ClearBufferfv; 111 | PFNGLCLEARBUFFERIVPROC ClearBufferiv; 112 | PFNGLCLEARBUFFERUIVPROC ClearBufferuiv; 113 | PFNGLCLEARCOLORPROC ClearColor; 114 | PFNGLCLEARDEPTHPROC ClearDepth; 115 | PFNGLCLEARDEPTHFPROC ClearDepthf; 116 | PFNGLCLEARNAMEDBUFFERDATAPROC ClearNamedBufferData; 117 | PFNGLCLEARNAMEDBUFFERSUBDATAPROC ClearNamedBufferSubData; 118 | PFNGLCLEARNAMEDFRAMEBUFFERFIPROC ClearNamedFramebufferfi; 119 | PFNGLCLEARNAMEDFRAMEBUFFERFVPROC ClearNamedFramebufferfv; 120 | PFNGLCLEARNAMEDFRAMEBUFFERIVPROC ClearNamedFramebufferiv; 121 | PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC ClearNamedFramebufferuiv; 122 | PFNGLCLEARSTENCILPROC ClearStencil; 123 | PFNGLCLEARTEXIMAGEPROC ClearTexImage; 124 | PFNGLCLEARTEXSUBIMAGEPROC ClearTexSubImage; 125 | PFNGLCLIENTWAITSYNCPROC ClientWaitSync; 126 | PFNGLCLIPCONTROLPROC ClipControl; 127 | PFNGLCOLORMASKPROC ColorMask; 128 | PFNGLCOLORMASKIPROC ColorMaski; 129 | PFNGLCOMPILESHADERPROC CompileShader; 130 | PFNGLCOMPRESSEDTEXIMAGE1DPROC CompressedTexImage1D; 131 | PFNGLCOMPRESSEDTEXIMAGE2DPROC CompressedTexImage2D; 132 | PFNGLCOMPRESSEDTEXIMAGE3DPROC CompressedTexImage3D; 133 | PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC CompressedTexSubImage1D; 134 | PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC CompressedTexSubImage2D; 135 | PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC CompressedTexSubImage3D; 136 | PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC CompressedTextureSubImage1D; 137 | PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC CompressedTextureSubImage2D; 138 | PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC CompressedTextureSubImage3D; 139 | PFNGLCOPYBUFFERSUBDATAPROC CopyBufferSubData; 140 | PFNGLCOPYIMAGESUBDATAPROC CopyImageSubData; 141 | PFNGLCOPYNAMEDBUFFERSUBDATAPROC CopyNamedBufferSubData; 142 | PFNGLCOPYTEXIMAGE1DPROC CopyTexImage1D; 143 | PFNGLCOPYTEXIMAGE2DPROC CopyTexImage2D; 144 | PFNGLCOPYTEXSUBIMAGE1DPROC CopyTexSubImage1D; 145 | PFNGLCOPYTEXSUBIMAGE2DPROC CopyTexSubImage2D; 146 | PFNGLCOPYTEXSUBIMAGE3DPROC CopyTexSubImage3D; 147 | PFNGLCOPYTEXTURESUBIMAGE1DPROC CopyTextureSubImage1D; 148 | PFNGLCOPYTEXTURESUBIMAGE2DPROC CopyTextureSubImage2D; 149 | PFNGLCOPYTEXTURESUBIMAGE3DPROC CopyTextureSubImage3D; 150 | PFNGLCREATEBUFFERSPROC CreateBuffers; 151 | PFNGLCREATEFRAMEBUFFERSPROC CreateFramebuffers; 152 | PFNGLCREATEPROGRAMPROC CreateProgram; 153 | PFNGLCREATEPROGRAMPIPELINESPROC CreateProgramPipelines; 154 | PFNGLCREATEQUERIESPROC CreateQueries; 155 | PFNGLCREATERENDERBUFFERSPROC CreateRenderbuffers; 156 | PFNGLCREATESAMPLERSPROC CreateSamplers; 157 | PFNGLCREATESHADERPROC CreateShader; 158 | PFNGLCREATESHADERPROGRAMVPROC CreateShaderProgramv; 159 | PFNGLCREATETEXTURESPROC CreateTextures; 160 | PFNGLCREATETRANSFORMFEEDBACKSPROC CreateTransformFeedbacks; 161 | PFNGLCREATEVERTEXARRAYSPROC CreateVertexArrays; 162 | PFNGLCULLFACEPROC CullFace; 163 | PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; 164 | PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; 165 | PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; 166 | PFNGLDELETEBUFFERSPROC DeleteBuffers; 167 | PFNGLDELETEFRAMEBUFFERSPROC DeleteFramebuffers; 168 | PFNGLDELETEPROGRAMPROC DeleteProgram; 169 | PFNGLDELETEPROGRAMPIPELINESPROC DeleteProgramPipelines; 170 | PFNGLDELETEQUERIESPROC DeleteQueries; 171 | PFNGLDELETERENDERBUFFERSPROC DeleteRenderbuffers; 172 | PFNGLDELETESAMPLERSPROC DeleteSamplers; 173 | PFNGLDELETESHADERPROC DeleteShader; 174 | PFNGLDELETESYNCPROC DeleteSync; 175 | PFNGLDELETETEXTURESPROC DeleteTextures; 176 | PFNGLDELETETRANSFORMFEEDBACKSPROC DeleteTransformFeedbacks; 177 | PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays; 178 | PFNGLDEPTHFUNCPROC DepthFunc; 179 | PFNGLDEPTHMASKPROC DepthMask; 180 | PFNGLDEPTHRANGEPROC DepthRange; 181 | PFNGLDEPTHRANGEARRAYVPROC DepthRangeArrayv; 182 | PFNGLDEPTHRANGEINDEXEDPROC DepthRangeIndexed; 183 | PFNGLDEPTHRANGEFPROC DepthRangef; 184 | PFNGLDETACHSHADERPROC DetachShader; 185 | PFNGLDISABLEPROC Disable; 186 | PFNGLDISABLEVERTEXARRAYATTRIBPROC DisableVertexArrayAttrib; 187 | PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray; 188 | PFNGLDISABLEIPROC Disablei; 189 | PFNGLDISPATCHCOMPUTEPROC DispatchCompute; 190 | PFNGLDISPATCHCOMPUTEINDIRECTPROC DispatchComputeIndirect; 191 | PFNGLDRAWARRAYSPROC DrawArrays; 192 | PFNGLDRAWARRAYSINDIRECTPROC DrawArraysIndirect; 193 | PFNGLDRAWARRAYSINSTANCEDPROC DrawArraysInstanced; 194 | PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC DrawArraysInstancedBaseInstance; 195 | PFNGLDRAWBUFFERPROC DrawBuffer; 196 | PFNGLDRAWBUFFERSPROC DrawBuffers; 197 | PFNGLDRAWELEMENTSPROC DrawElements; 198 | PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex; 199 | PFNGLDRAWELEMENTSINDIRECTPROC DrawElementsIndirect; 200 | PFNGLDRAWELEMENTSINSTANCEDPROC DrawElementsInstanced; 201 | PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC DrawElementsInstancedBaseInstance; 202 | PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC DrawElementsInstancedBaseVertex; 203 | PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC DrawElementsInstancedBaseVertexBaseInstance; 204 | PFNGLDRAWRANGEELEMENTSPROC DrawRangeElements; 205 | PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC DrawRangeElementsBaseVertex; 206 | PFNGLDRAWTRANSFORMFEEDBACKPROC DrawTransformFeedback; 207 | PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC DrawTransformFeedbackInstanced; 208 | PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC DrawTransformFeedbackStream; 209 | PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC DrawTransformFeedbackStreamInstanced; 210 | PFNGLENABLEPROC Enable; 211 | PFNGLENABLEVERTEXARRAYATTRIBPROC EnableVertexArrayAttrib; 212 | PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray; 213 | PFNGLENABLEIPROC Enablei; 214 | PFNGLENDCONDITIONALRENDERPROC EndConditionalRender; 215 | PFNGLENDQUERYPROC EndQuery; 216 | PFNGLENDQUERYINDEXEDPROC EndQueryIndexed; 217 | PFNGLENDTRANSFORMFEEDBACKPROC EndTransformFeedback; 218 | PFNGLFENCESYNCPROC FenceSync; 219 | PFNGLFINISHPROC Finish; 220 | PFNGLFLUSHPROC Flush; 221 | PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; 222 | PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC FlushMappedNamedBufferRange; 223 | PFNGLFRAMEBUFFERPARAMETERIPROC FramebufferParameteri; 224 | PFNGLFRAMEBUFFERRENDERBUFFERPROC FramebufferRenderbuffer; 225 | PFNGLFRAMEBUFFERTEXTUREPROC FramebufferTexture; 226 | PFNGLFRAMEBUFFERTEXTURE1DPROC FramebufferTexture1D; 227 | PFNGLFRAMEBUFFERTEXTURE2DPROC FramebufferTexture2D; 228 | PFNGLFRAMEBUFFERTEXTURE3DPROC FramebufferTexture3D; 229 | PFNGLFRAMEBUFFERTEXTURELAYERPROC FramebufferTextureLayer; 230 | PFNGLFRONTFACEPROC FrontFace; 231 | PFNGLGENBUFFERSPROC GenBuffers; 232 | PFNGLGENFRAMEBUFFERSPROC GenFramebuffers; 233 | PFNGLGENPROGRAMPIPELINESPROC GenProgramPipelines; 234 | PFNGLGENQUERIESPROC GenQueries; 235 | PFNGLGENRENDERBUFFERSPROC GenRenderbuffers; 236 | PFNGLGENSAMPLERSPROC GenSamplers; 237 | PFNGLGENTEXTURESPROC GenTextures; 238 | PFNGLGENTRANSFORMFEEDBACKSPROC GenTransformFeedbacks; 239 | PFNGLGENVERTEXARRAYSPROC GenVertexArrays; 240 | PFNGLGENERATEMIPMAPPROC GenerateMipmap; 241 | PFNGLGENERATETEXTUREMIPMAPPROC GenerateTextureMipmap; 242 | PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC GetActiveAtomicCounterBufferiv; 243 | PFNGLGETACTIVEATTRIBPROC GetActiveAttrib; 244 | PFNGLGETACTIVESUBROUTINENAMEPROC GetActiveSubroutineName; 245 | PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC GetActiveSubroutineUniformName; 246 | PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC GetActiveSubroutineUniformiv; 247 | PFNGLGETACTIVEUNIFORMPROC GetActiveUniform; 248 | PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC GetActiveUniformBlockName; 249 | PFNGLGETACTIVEUNIFORMBLOCKIVPROC GetActiveUniformBlockiv; 250 | PFNGLGETACTIVEUNIFORMNAMEPROC GetActiveUniformName; 251 | PFNGLGETACTIVEUNIFORMSIVPROC GetActiveUniformsiv; 252 | PFNGLGETATTACHEDSHADERSPROC GetAttachedShaders; 253 | PFNGLGETATTRIBLOCATIONPROC GetAttribLocation; 254 | PFNGLGETBOOLEANI_VPROC GetBooleani_v; 255 | PFNGLGETBOOLEANVPROC GetBooleanv; 256 | PFNGLGETBUFFERPARAMETERI64VPROC GetBufferParameteri64v; 257 | PFNGLGETBUFFERPARAMETERIVPROC GetBufferParameteriv; 258 | PFNGLGETBUFFERPOINTERVPROC GetBufferPointerv; 259 | PFNGLGETBUFFERSUBDATAPROC GetBufferSubData; 260 | PFNGLGETCOMPRESSEDTEXIMAGEPROC GetCompressedTexImage; 261 | PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC GetCompressedTextureImage; 262 | PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC GetCompressedTextureSubImage; 263 | PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; 264 | PFNGLGETDOUBLEI_VPROC GetDoublei_v; 265 | PFNGLGETDOUBLEVPROC GetDoublev; 266 | PFNGLGETERRORPROC GetError; 267 | PFNGLGETFLOATI_VPROC GetFloati_v; 268 | PFNGLGETFLOATVPROC GetFloatv; 269 | PFNGLGETFRAGDATAINDEXPROC GetFragDataIndex; 270 | PFNGLGETFRAGDATALOCATIONPROC GetFragDataLocation; 271 | PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv; 272 | PFNGLGETFRAMEBUFFERPARAMETERIVPROC GetFramebufferParameteriv; 273 | PFNGLGETGRAPHICSRESETSTATUSPROC GetGraphicsResetStatus; 274 | PFNGLGETINTEGER64I_VPROC GetInteger64i_v; 275 | PFNGLGETINTEGER64VPROC GetInteger64v; 276 | PFNGLGETINTEGERI_VPROC GetIntegeri_v; 277 | PFNGLGETINTEGERVPROC GetIntegerv; 278 | PFNGLGETINTERNALFORMATI64VPROC GetInternalformati64v; 279 | PFNGLGETINTERNALFORMATIVPROC GetInternalformativ; 280 | PFNGLGETMULTISAMPLEFVPROC GetMultisamplefv; 281 | PFNGLGETNAMEDBUFFERPARAMETERI64VPROC GetNamedBufferParameteri64v; 282 | PFNGLGETNAMEDBUFFERPARAMETERIVPROC GetNamedBufferParameteriv; 283 | PFNGLGETNAMEDBUFFERPOINTERVPROC GetNamedBufferPointerv; 284 | PFNGLGETNAMEDBUFFERSUBDATAPROC GetNamedBufferSubData; 285 | PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetNamedFramebufferAttachmentParameteriv; 286 | PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC GetNamedFramebufferParameteriv; 287 | PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC GetNamedRenderbufferParameteriv; 288 | PFNGLGETOBJECTLABELPROC GetObjectLabel; 289 | PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; 290 | PFNGLGETPOINTERVPROC GetPointerv; 291 | PFNGLGETPROGRAMBINARYPROC GetProgramBinary; 292 | PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog; 293 | PFNGLGETPROGRAMINTERFACEIVPROC GetProgramInterfaceiv; 294 | PFNGLGETPROGRAMPIPELINEINFOLOGPROC GetProgramPipelineInfoLog; 295 | PFNGLGETPROGRAMPIPELINEIVPROC GetProgramPipelineiv; 296 | PFNGLGETPROGRAMRESOURCEINDEXPROC GetProgramResourceIndex; 297 | PFNGLGETPROGRAMRESOURCELOCATIONPROC GetProgramResourceLocation; 298 | PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC GetProgramResourceLocationIndex; 299 | PFNGLGETPROGRAMRESOURCENAMEPROC GetProgramResourceName; 300 | PFNGLGETPROGRAMRESOURCEIVPROC GetProgramResourceiv; 301 | PFNGLGETPROGRAMSTAGEIVPROC GetProgramStageiv; 302 | PFNGLGETPROGRAMIVPROC GetProgramiv; 303 | PFNGLGETQUERYBUFFEROBJECTI64VPROC GetQueryBufferObjecti64v; 304 | PFNGLGETQUERYBUFFEROBJECTIVPROC GetQueryBufferObjectiv; 305 | PFNGLGETQUERYBUFFEROBJECTUI64VPROC GetQueryBufferObjectui64v; 306 | PFNGLGETQUERYBUFFEROBJECTUIVPROC GetQueryBufferObjectuiv; 307 | PFNGLGETQUERYINDEXEDIVPROC GetQueryIndexediv; 308 | PFNGLGETQUERYOBJECTI64VPROC GetQueryObjecti64v; 309 | PFNGLGETQUERYOBJECTIVPROC GetQueryObjectiv; 310 | PFNGLGETQUERYOBJECTUI64VPROC GetQueryObjectui64v; 311 | PFNGLGETQUERYOBJECTUIVPROC GetQueryObjectuiv; 312 | PFNGLGETQUERYIVPROC GetQueryiv; 313 | PFNGLGETRENDERBUFFERPARAMETERIVPROC GetRenderbufferParameteriv; 314 | PFNGLGETSAMPLERPARAMETERIIVPROC GetSamplerParameterIiv; 315 | PFNGLGETSAMPLERPARAMETERIUIVPROC GetSamplerParameterIuiv; 316 | PFNGLGETSAMPLERPARAMETERFVPROC GetSamplerParameterfv; 317 | PFNGLGETSAMPLERPARAMETERIVPROC GetSamplerParameteriv; 318 | PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog; 319 | PFNGLGETSHADERPRECISIONFORMATPROC GetShaderPrecisionFormat; 320 | PFNGLGETSHADERSOURCEPROC GetShaderSource; 321 | PFNGLGETSHADERIVPROC GetShaderiv; 322 | PFNGLGETSTRINGPROC GetString; 323 | PFNGLGETSTRINGIPROC GetStringi; 324 | PFNGLGETSUBROUTINEINDEXPROC GetSubroutineIndex; 325 | PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC GetSubroutineUniformLocation; 326 | PFNGLGETSYNCIVPROC GetSynciv; 327 | PFNGLGETTEXIMAGEPROC GetTexImage; 328 | PFNGLGETTEXLEVELPARAMETERFVPROC GetTexLevelParameterfv; 329 | PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; 330 | PFNGLGETTEXPARAMETERIIVPROC GetTexParameterIiv; 331 | PFNGLGETTEXPARAMETERIUIVPROC GetTexParameterIuiv; 332 | PFNGLGETTEXPARAMETERFVPROC GetTexParameterfv; 333 | PFNGLGETTEXPARAMETERIVPROC GetTexParameteriv; 334 | PFNGLGETTEXTUREIMAGEPROC GetTextureImage; 335 | PFNGLGETTEXTURELEVELPARAMETERFVPROC GetTextureLevelParameterfv; 336 | PFNGLGETTEXTURELEVELPARAMETERIVPROC GetTextureLevelParameteriv; 337 | PFNGLGETTEXTUREPARAMETERIIVPROC GetTextureParameterIiv; 338 | PFNGLGETTEXTUREPARAMETERIUIVPROC GetTextureParameterIuiv; 339 | PFNGLGETTEXTUREPARAMETERFVPROC GetTextureParameterfv; 340 | PFNGLGETTEXTUREPARAMETERIVPROC GetTextureParameteriv; 341 | PFNGLGETTEXTURESUBIMAGEPROC GetTextureSubImage; 342 | PFNGLGETTRANSFORMFEEDBACKVARYINGPROC GetTransformFeedbackVarying; 343 | PFNGLGETTRANSFORMFEEDBACKI64_VPROC GetTransformFeedbacki64_v; 344 | PFNGLGETTRANSFORMFEEDBACKI_VPROC GetTransformFeedbacki_v; 345 | PFNGLGETTRANSFORMFEEDBACKIVPROC GetTransformFeedbackiv; 346 | PFNGLGETUNIFORMBLOCKINDEXPROC GetUniformBlockIndex; 347 | PFNGLGETUNIFORMINDICESPROC GetUniformIndices; 348 | PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation; 349 | PFNGLGETUNIFORMSUBROUTINEUIVPROC GetUniformSubroutineuiv; 350 | PFNGLGETUNIFORMDVPROC GetUniformdv; 351 | PFNGLGETUNIFORMFVPROC GetUniformfv; 352 | PFNGLGETUNIFORMIVPROC GetUniformiv; 353 | PFNGLGETUNIFORMUIVPROC GetUniformuiv; 354 | PFNGLGETVERTEXARRAYINDEXED64IVPROC GetVertexArrayIndexed64iv; 355 | PFNGLGETVERTEXARRAYINDEXEDIVPROC GetVertexArrayIndexediv; 356 | PFNGLGETVERTEXARRAYIVPROC GetVertexArrayiv; 357 | PFNGLGETVERTEXATTRIBIIVPROC GetVertexAttribIiv; 358 | PFNGLGETVERTEXATTRIBIUIVPROC GetVertexAttribIuiv; 359 | PFNGLGETVERTEXATTRIBLDVPROC GetVertexAttribLdv; 360 | PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv; 361 | PFNGLGETVERTEXATTRIBDVPROC GetVertexAttribdv; 362 | PFNGLGETVERTEXATTRIBFVPROC GetVertexAttribfv; 363 | PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv; 364 | PFNGLGETNCOMPRESSEDTEXIMAGEPROC GetnCompressedTexImage; 365 | PFNGLGETNTEXIMAGEPROC GetnTexImage; 366 | PFNGLGETNUNIFORMDVPROC GetnUniformdv; 367 | PFNGLGETNUNIFORMFVPROC GetnUniformfv; 368 | PFNGLGETNUNIFORMIVPROC GetnUniformiv; 369 | PFNGLGETNUNIFORMUIVPROC GetnUniformuiv; 370 | PFNGLHINTPROC Hint; 371 | PFNGLINVALIDATEBUFFERDATAPROC InvalidateBufferData; 372 | PFNGLINVALIDATEBUFFERSUBDATAPROC InvalidateBufferSubData; 373 | PFNGLINVALIDATEFRAMEBUFFERPROC InvalidateFramebuffer; 374 | PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC InvalidateNamedFramebufferData; 375 | PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC InvalidateNamedFramebufferSubData; 376 | PFNGLINVALIDATESUBFRAMEBUFFERPROC InvalidateSubFramebuffer; 377 | PFNGLINVALIDATETEXIMAGEPROC InvalidateTexImage; 378 | PFNGLINVALIDATETEXSUBIMAGEPROC InvalidateTexSubImage; 379 | PFNGLISBUFFERPROC IsBuffer; 380 | PFNGLISENABLEDPROC IsEnabled; 381 | PFNGLISENABLEDIPROC IsEnabledi; 382 | PFNGLISFRAMEBUFFERPROC IsFramebuffer; 383 | PFNGLISPROGRAMPROC IsProgram; 384 | PFNGLISPROGRAMPIPELINEPROC IsProgramPipeline; 385 | PFNGLISQUERYPROC IsQuery; 386 | PFNGLISRENDERBUFFERPROC IsRenderbuffer; 387 | PFNGLISSAMPLERPROC IsSampler; 388 | PFNGLISSHADERPROC IsShader; 389 | PFNGLISSYNCPROC IsSync; 390 | PFNGLISTEXTUREPROC IsTexture; 391 | PFNGLISTRANSFORMFEEDBACKPROC IsTransformFeedback; 392 | PFNGLISVERTEXARRAYPROC IsVertexArray; 393 | PFNGLLINEWIDTHPROC LineWidth; 394 | PFNGLLINKPROGRAMPROC LinkProgram; 395 | PFNGLLOGICOPPROC LogicOp; 396 | PFNGLMAPBUFFERPROC MapBuffer; 397 | PFNGLMAPBUFFERRANGEPROC MapBufferRange; 398 | PFNGLMAPNAMEDBUFFERPROC MapNamedBuffer; 399 | PFNGLMAPNAMEDBUFFERRANGEPROC MapNamedBufferRange; 400 | PFNGLMEMORYBARRIERPROC MemoryBarrier; 401 | PFNGLMEMORYBARRIERBYREGIONPROC MemoryBarrierByRegion; 402 | PFNGLMINSAMPLESHADINGPROC MinSampleShading; 403 | PFNGLMULTIDRAWARRAYSPROC MultiDrawArrays; 404 | PFNGLMULTIDRAWARRAYSINDIRECTPROC MultiDrawArraysIndirect; 405 | PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC MultiDrawArraysIndirectCount; 406 | PFNGLMULTIDRAWELEMENTSPROC MultiDrawElements; 407 | PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC MultiDrawElementsBaseVertex; 408 | PFNGLMULTIDRAWELEMENTSINDIRECTPROC MultiDrawElementsIndirect; 409 | PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC MultiDrawElementsIndirectCount; 410 | PFNGLNAMEDBUFFERDATAPROC NamedBufferData; 411 | PFNGLNAMEDBUFFERSTORAGEPROC NamedBufferStorage; 412 | PFNGLNAMEDBUFFERSUBDATAPROC NamedBufferSubData; 413 | PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC NamedFramebufferDrawBuffer; 414 | PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC NamedFramebufferDrawBuffers; 415 | PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC NamedFramebufferParameteri; 416 | PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC NamedFramebufferReadBuffer; 417 | PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC NamedFramebufferRenderbuffer; 418 | PFNGLNAMEDFRAMEBUFFERTEXTUREPROC NamedFramebufferTexture; 419 | PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC NamedFramebufferTextureLayer; 420 | PFNGLNAMEDRENDERBUFFERSTORAGEPROC NamedRenderbufferStorage; 421 | PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC NamedRenderbufferStorageMultisample; 422 | PFNGLOBJECTLABELPROC ObjectLabel; 423 | PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; 424 | PFNGLPATCHPARAMETERFVPROC PatchParameterfv; 425 | PFNGLPATCHPARAMETERIPROC PatchParameteri; 426 | PFNGLPAUSETRANSFORMFEEDBACKPROC PauseTransformFeedback; 427 | PFNGLPIXELSTOREFPROC PixelStoref; 428 | PFNGLPIXELSTOREIPROC PixelStorei; 429 | PFNGLPOINTPARAMETERFPROC PointParameterf; 430 | PFNGLPOINTPARAMETERFVPROC PointParameterfv; 431 | PFNGLPOINTPARAMETERIPROC PointParameteri; 432 | PFNGLPOINTPARAMETERIVPROC PointParameteriv; 433 | PFNGLPOINTSIZEPROC PointSize; 434 | PFNGLPOLYGONMODEPROC PolygonMode; 435 | PFNGLPOLYGONOFFSETPROC PolygonOffset; 436 | PFNGLPOLYGONOFFSETCLAMPPROC PolygonOffsetClamp; 437 | PFNGLPOPDEBUGGROUPPROC PopDebugGroup; 438 | PFNGLPRIMITIVERESTARTINDEXPROC PrimitiveRestartIndex; 439 | PFNGLPROGRAMBINARYPROC ProgramBinary; 440 | PFNGLPROGRAMPARAMETERIPROC ProgramParameteri; 441 | PFNGLPROGRAMUNIFORM1DPROC ProgramUniform1d; 442 | PFNGLPROGRAMUNIFORM1DVPROC ProgramUniform1dv; 443 | PFNGLPROGRAMUNIFORM1FPROC ProgramUniform1f; 444 | PFNGLPROGRAMUNIFORM1FVPROC ProgramUniform1fv; 445 | PFNGLPROGRAMUNIFORM1IPROC ProgramUniform1i; 446 | PFNGLPROGRAMUNIFORM1IVPROC ProgramUniform1iv; 447 | PFNGLPROGRAMUNIFORM1UIPROC ProgramUniform1ui; 448 | PFNGLPROGRAMUNIFORM1UIVPROC ProgramUniform1uiv; 449 | PFNGLPROGRAMUNIFORM2DPROC ProgramUniform2d; 450 | PFNGLPROGRAMUNIFORM2DVPROC ProgramUniform2dv; 451 | PFNGLPROGRAMUNIFORM2FPROC ProgramUniform2f; 452 | PFNGLPROGRAMUNIFORM2FVPROC ProgramUniform2fv; 453 | PFNGLPROGRAMUNIFORM2IPROC ProgramUniform2i; 454 | PFNGLPROGRAMUNIFORM2IVPROC ProgramUniform2iv; 455 | PFNGLPROGRAMUNIFORM2UIPROC ProgramUniform2ui; 456 | PFNGLPROGRAMUNIFORM2UIVPROC ProgramUniform2uiv; 457 | PFNGLPROGRAMUNIFORM3DPROC ProgramUniform3d; 458 | PFNGLPROGRAMUNIFORM3DVPROC ProgramUniform3dv; 459 | PFNGLPROGRAMUNIFORM3FPROC ProgramUniform3f; 460 | PFNGLPROGRAMUNIFORM3FVPROC ProgramUniform3fv; 461 | PFNGLPROGRAMUNIFORM3IPROC ProgramUniform3i; 462 | PFNGLPROGRAMUNIFORM3IVPROC ProgramUniform3iv; 463 | PFNGLPROGRAMUNIFORM3UIPROC ProgramUniform3ui; 464 | PFNGLPROGRAMUNIFORM3UIVPROC ProgramUniform3uiv; 465 | PFNGLPROGRAMUNIFORM4DPROC ProgramUniform4d; 466 | PFNGLPROGRAMUNIFORM4DVPROC ProgramUniform4dv; 467 | PFNGLPROGRAMUNIFORM4FPROC ProgramUniform4f; 468 | PFNGLPROGRAMUNIFORM4FVPROC ProgramUniform4fv; 469 | PFNGLPROGRAMUNIFORM4IPROC ProgramUniform4i; 470 | PFNGLPROGRAMUNIFORM4IVPROC ProgramUniform4iv; 471 | PFNGLPROGRAMUNIFORM4UIPROC ProgramUniform4ui; 472 | PFNGLPROGRAMUNIFORM4UIVPROC ProgramUniform4uiv; 473 | PFNGLPROGRAMUNIFORMMATRIX2DVPROC ProgramUniformMatrix2dv; 474 | PFNGLPROGRAMUNIFORMMATRIX2FVPROC ProgramUniformMatrix2fv; 475 | PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC ProgramUniformMatrix2x3dv; 476 | PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC ProgramUniformMatrix2x3fv; 477 | PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC ProgramUniformMatrix2x4dv; 478 | PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC ProgramUniformMatrix2x4fv; 479 | PFNGLPROGRAMUNIFORMMATRIX3DVPROC ProgramUniformMatrix3dv; 480 | PFNGLPROGRAMUNIFORMMATRIX3FVPROC ProgramUniformMatrix3fv; 481 | PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC ProgramUniformMatrix3x2dv; 482 | PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC ProgramUniformMatrix3x2fv; 483 | PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC ProgramUniformMatrix3x4dv; 484 | PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC ProgramUniformMatrix3x4fv; 485 | PFNGLPROGRAMUNIFORMMATRIX4DVPROC ProgramUniformMatrix4dv; 486 | PFNGLPROGRAMUNIFORMMATRIX4FVPROC ProgramUniformMatrix4fv; 487 | PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC ProgramUniformMatrix4x2dv; 488 | PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC ProgramUniformMatrix4x2fv; 489 | PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC ProgramUniformMatrix4x3dv; 490 | PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC ProgramUniformMatrix4x3fv; 491 | PFNGLPROVOKINGVERTEXPROC ProvokingVertex; 492 | PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; 493 | PFNGLQUERYCOUNTERPROC QueryCounter; 494 | PFNGLREADBUFFERPROC ReadBuffer; 495 | PFNGLREADPIXELSPROC ReadPixels; 496 | PFNGLREADNPIXELSPROC ReadnPixels; 497 | PFNGLRELEASESHADERCOMPILERPROC ReleaseShaderCompiler; 498 | PFNGLRENDERBUFFERSTORAGEPROC RenderbufferStorage; 499 | PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC RenderbufferStorageMultisample; 500 | PFNGLRESUMETRANSFORMFEEDBACKPROC ResumeTransformFeedback; 501 | PFNGLSAMPLECOVERAGEPROC SampleCoverage; 502 | PFNGLSAMPLEMASKIPROC SampleMaski; 503 | PFNGLSAMPLERPARAMETERIIVPROC SamplerParameterIiv; 504 | PFNGLSAMPLERPARAMETERIUIVPROC SamplerParameterIuiv; 505 | PFNGLSAMPLERPARAMETERFPROC SamplerParameterf; 506 | PFNGLSAMPLERPARAMETERFVPROC SamplerParameterfv; 507 | PFNGLSAMPLERPARAMETERIPROC SamplerParameteri; 508 | PFNGLSAMPLERPARAMETERIVPROC SamplerParameteriv; 509 | PFNGLSCISSORPROC Scissor; 510 | PFNGLSCISSORARRAYVPROC ScissorArrayv; 511 | PFNGLSCISSORINDEXEDPROC ScissorIndexed; 512 | PFNGLSCISSORINDEXEDVPROC ScissorIndexedv; 513 | PFNGLSHADERBINARYPROC ShaderBinary; 514 | PFNGLSHADERSOURCEPROC ShaderSource; 515 | PFNGLSHADERSTORAGEBLOCKBINDINGPROC ShaderStorageBlockBinding; 516 | PFNGLSPECIALIZESHADERPROC SpecializeShader; 517 | PFNGLSTENCILFUNCPROC StencilFunc; 518 | PFNGLSTENCILFUNCSEPARATEPROC StencilFuncSeparate; 519 | PFNGLSTENCILMASKPROC StencilMask; 520 | PFNGLSTENCILMASKSEPARATEPROC StencilMaskSeparate; 521 | PFNGLSTENCILOPPROC StencilOp; 522 | PFNGLSTENCILOPSEPARATEPROC StencilOpSeparate; 523 | PFNGLTEXBUFFERPROC TexBuffer; 524 | PFNGLTEXBUFFERRANGEPROC TexBufferRange; 525 | PFNGLTEXIMAGE1DPROC TexImage1D; 526 | PFNGLTEXIMAGE2DPROC TexImage2D; 527 | PFNGLTEXIMAGE2DMULTISAMPLEPROC TexImage2DMultisample; 528 | PFNGLTEXIMAGE3DPROC TexImage3D; 529 | PFNGLTEXIMAGE3DMULTISAMPLEPROC TexImage3DMultisample; 530 | PFNGLTEXPARAMETERIIVPROC TexParameterIiv; 531 | PFNGLTEXPARAMETERIUIVPROC TexParameterIuiv; 532 | PFNGLTEXPARAMETERFPROC TexParameterf; 533 | PFNGLTEXPARAMETERFVPROC TexParameterfv; 534 | PFNGLTEXPARAMETERIPROC TexParameteri; 535 | PFNGLTEXPARAMETERIVPROC TexParameteriv; 536 | PFNGLTEXSTORAGE1DPROC TexStorage1D; 537 | PFNGLTEXSTORAGE2DPROC TexStorage2D; 538 | PFNGLTEXSTORAGE2DMULTISAMPLEPROC TexStorage2DMultisample; 539 | PFNGLTEXSTORAGE3DPROC TexStorage3D; 540 | PFNGLTEXSTORAGE3DMULTISAMPLEPROC TexStorage3DMultisample; 541 | PFNGLTEXSUBIMAGE1DPROC TexSubImage1D; 542 | PFNGLTEXSUBIMAGE2DPROC TexSubImage2D; 543 | PFNGLTEXSUBIMAGE3DPROC TexSubImage3D; 544 | PFNGLTEXTUREBARRIERPROC TextureBarrier; 545 | PFNGLTEXTUREBUFFERPROC TextureBuffer; 546 | PFNGLTEXTUREBUFFERRANGEPROC TextureBufferRange; 547 | PFNGLTEXTUREPARAMETERIIVPROC TextureParameterIiv; 548 | PFNGLTEXTUREPARAMETERIUIVPROC TextureParameterIuiv; 549 | PFNGLTEXTUREPARAMETERFPROC TextureParameterf; 550 | PFNGLTEXTUREPARAMETERFVPROC TextureParameterfv; 551 | PFNGLTEXTUREPARAMETERIPROC TextureParameteri; 552 | PFNGLTEXTUREPARAMETERIVPROC TextureParameteriv; 553 | PFNGLTEXTURESTORAGE1DPROC TextureStorage1D; 554 | PFNGLTEXTURESTORAGE2DPROC TextureStorage2D; 555 | PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC TextureStorage2DMultisample; 556 | PFNGLTEXTURESTORAGE3DPROC TextureStorage3D; 557 | PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC TextureStorage3DMultisample; 558 | PFNGLTEXTURESUBIMAGE1DPROC TextureSubImage1D; 559 | PFNGLTEXTURESUBIMAGE2DPROC TextureSubImage2D; 560 | PFNGLTEXTURESUBIMAGE3DPROC TextureSubImage3D; 561 | PFNGLTEXTUREVIEWPROC TextureView; 562 | PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC TransformFeedbackBufferBase; 563 | PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC TransformFeedbackBufferRange; 564 | PFNGLTRANSFORMFEEDBACKVARYINGSPROC TransformFeedbackVaryings; 565 | PFNGLUNIFORM1DPROC Uniform1d; 566 | PFNGLUNIFORM1DVPROC Uniform1dv; 567 | PFNGLUNIFORM1FPROC Uniform1f; 568 | PFNGLUNIFORM1FVPROC Uniform1fv; 569 | PFNGLUNIFORM1IPROC Uniform1i; 570 | PFNGLUNIFORM1IVPROC Uniform1iv; 571 | PFNGLUNIFORM1UIPROC Uniform1ui; 572 | PFNGLUNIFORM1UIVPROC Uniform1uiv; 573 | PFNGLUNIFORM2DPROC Uniform2d; 574 | PFNGLUNIFORM2DVPROC Uniform2dv; 575 | PFNGLUNIFORM2FPROC Uniform2f; 576 | PFNGLUNIFORM2FVPROC Uniform2fv; 577 | PFNGLUNIFORM2IPROC Uniform2i; 578 | PFNGLUNIFORM2IVPROC Uniform2iv; 579 | PFNGLUNIFORM2UIPROC Uniform2ui; 580 | PFNGLUNIFORM2UIVPROC Uniform2uiv; 581 | PFNGLUNIFORM3DPROC Uniform3d; 582 | PFNGLUNIFORM3DVPROC Uniform3dv; 583 | PFNGLUNIFORM3FPROC Uniform3f; 584 | PFNGLUNIFORM3FVPROC Uniform3fv; 585 | PFNGLUNIFORM3IPROC Uniform3i; 586 | PFNGLUNIFORM3IVPROC Uniform3iv; 587 | PFNGLUNIFORM3UIPROC Uniform3ui; 588 | PFNGLUNIFORM3UIVPROC Uniform3uiv; 589 | PFNGLUNIFORM4DPROC Uniform4d; 590 | PFNGLUNIFORM4DVPROC Uniform4dv; 591 | PFNGLUNIFORM4FPROC Uniform4f; 592 | PFNGLUNIFORM4FVPROC Uniform4fv; 593 | PFNGLUNIFORM4IPROC Uniform4i; 594 | PFNGLUNIFORM4IVPROC Uniform4iv; 595 | PFNGLUNIFORM4UIPROC Uniform4ui; 596 | PFNGLUNIFORM4UIVPROC Uniform4uiv; 597 | PFNGLUNIFORMBLOCKBINDINGPROC UniformBlockBinding; 598 | PFNGLUNIFORMMATRIX2DVPROC UniformMatrix2dv; 599 | PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv; 600 | PFNGLUNIFORMMATRIX2X3DVPROC UniformMatrix2x3dv; 601 | PFNGLUNIFORMMATRIX2X3FVPROC UniformMatrix2x3fv; 602 | PFNGLUNIFORMMATRIX2X4DVPROC UniformMatrix2x4dv; 603 | PFNGLUNIFORMMATRIX2X4FVPROC UniformMatrix2x4fv; 604 | PFNGLUNIFORMMATRIX3DVPROC UniformMatrix3dv; 605 | PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv; 606 | PFNGLUNIFORMMATRIX3X2DVPROC UniformMatrix3x2dv; 607 | PFNGLUNIFORMMATRIX3X2FVPROC UniformMatrix3x2fv; 608 | PFNGLUNIFORMMATRIX3X4DVPROC UniformMatrix3x4dv; 609 | PFNGLUNIFORMMATRIX3X4FVPROC UniformMatrix3x4fv; 610 | PFNGLUNIFORMMATRIX4DVPROC UniformMatrix4dv; 611 | PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv; 612 | PFNGLUNIFORMMATRIX4X2DVPROC UniformMatrix4x2dv; 613 | PFNGLUNIFORMMATRIX4X2FVPROC UniformMatrix4x2fv; 614 | PFNGLUNIFORMMATRIX4X3DVPROC UniformMatrix4x3dv; 615 | PFNGLUNIFORMMATRIX4X3FVPROC UniformMatrix4x3fv; 616 | PFNGLUNIFORMSUBROUTINESUIVPROC UniformSubroutinesuiv; 617 | PFNGLUNMAPBUFFERPROC UnmapBuffer; 618 | PFNGLUNMAPNAMEDBUFFERPROC UnmapNamedBuffer; 619 | PFNGLUSEPROGRAMPROC UseProgram; 620 | PFNGLUSEPROGRAMSTAGESPROC UseProgramStages; 621 | PFNGLVALIDATEPROGRAMPROC ValidateProgram; 622 | PFNGLVALIDATEPROGRAMPIPELINEPROC ValidateProgramPipeline; 623 | PFNGLVERTEXARRAYATTRIBBINDINGPROC VertexArrayAttribBinding; 624 | PFNGLVERTEXARRAYATTRIBFORMATPROC VertexArrayAttribFormat; 625 | PFNGLVERTEXARRAYATTRIBIFORMATPROC VertexArrayAttribIFormat; 626 | PFNGLVERTEXARRAYATTRIBLFORMATPROC VertexArrayAttribLFormat; 627 | PFNGLVERTEXARRAYBINDINGDIVISORPROC VertexArrayBindingDivisor; 628 | PFNGLVERTEXARRAYELEMENTBUFFERPROC VertexArrayElementBuffer; 629 | PFNGLVERTEXARRAYVERTEXBUFFERPROC VertexArrayVertexBuffer; 630 | PFNGLVERTEXARRAYVERTEXBUFFERSPROC VertexArrayVertexBuffers; 631 | PFNGLVERTEXATTRIB1DPROC VertexAttrib1d; 632 | PFNGLVERTEXATTRIB1DVPROC VertexAttrib1dv; 633 | PFNGLVERTEXATTRIB1FPROC VertexAttrib1f; 634 | PFNGLVERTEXATTRIB1FVPROC VertexAttrib1fv; 635 | PFNGLVERTEXATTRIB1SPROC VertexAttrib1s; 636 | PFNGLVERTEXATTRIB1SVPROC VertexAttrib1sv; 637 | PFNGLVERTEXATTRIB2DPROC VertexAttrib2d; 638 | PFNGLVERTEXATTRIB2DVPROC VertexAttrib2dv; 639 | PFNGLVERTEXATTRIB2FPROC VertexAttrib2f; 640 | PFNGLVERTEXATTRIB2FVPROC VertexAttrib2fv; 641 | PFNGLVERTEXATTRIB2SPROC VertexAttrib2s; 642 | PFNGLVERTEXATTRIB2SVPROC VertexAttrib2sv; 643 | PFNGLVERTEXATTRIB3DPROC VertexAttrib3d; 644 | PFNGLVERTEXATTRIB3DVPROC VertexAttrib3dv; 645 | PFNGLVERTEXATTRIB3FPROC VertexAttrib3f; 646 | PFNGLVERTEXATTRIB3FVPROC VertexAttrib3fv; 647 | PFNGLVERTEXATTRIB3SPROC VertexAttrib3s; 648 | PFNGLVERTEXATTRIB3SVPROC VertexAttrib3sv; 649 | PFNGLVERTEXATTRIB4NBVPROC VertexAttrib4Nbv; 650 | PFNGLVERTEXATTRIB4NIVPROC VertexAttrib4Niv; 651 | PFNGLVERTEXATTRIB4NSVPROC VertexAttrib4Nsv; 652 | PFNGLVERTEXATTRIB4NUBPROC VertexAttrib4Nub; 653 | PFNGLVERTEXATTRIB4NUBVPROC VertexAttrib4Nubv; 654 | PFNGLVERTEXATTRIB4NUIVPROC VertexAttrib4Nuiv; 655 | PFNGLVERTEXATTRIB4NUSVPROC VertexAttrib4Nusv; 656 | PFNGLVERTEXATTRIB4BVPROC VertexAttrib4bv; 657 | PFNGLVERTEXATTRIB4DPROC VertexAttrib4d; 658 | PFNGLVERTEXATTRIB4DVPROC VertexAttrib4dv; 659 | PFNGLVERTEXATTRIB4FPROC VertexAttrib4f; 660 | PFNGLVERTEXATTRIB4FVPROC VertexAttrib4fv; 661 | PFNGLVERTEXATTRIB4IVPROC VertexAttrib4iv; 662 | PFNGLVERTEXATTRIB4SPROC VertexAttrib4s; 663 | PFNGLVERTEXATTRIB4SVPROC VertexAttrib4sv; 664 | PFNGLVERTEXATTRIB4UBVPROC VertexAttrib4ubv; 665 | PFNGLVERTEXATTRIB4UIVPROC VertexAttrib4uiv; 666 | PFNGLVERTEXATTRIB4USVPROC VertexAttrib4usv; 667 | PFNGLVERTEXATTRIBBINDINGPROC VertexAttribBinding; 668 | PFNGLVERTEXATTRIBDIVISORPROC VertexAttribDivisor; 669 | PFNGLVERTEXATTRIBFORMATPROC VertexAttribFormat; 670 | PFNGLVERTEXATTRIBI1IPROC VertexAttribI1i; 671 | PFNGLVERTEXATTRIBI1IVPROC VertexAttribI1iv; 672 | PFNGLVERTEXATTRIBI1UIPROC VertexAttribI1ui; 673 | PFNGLVERTEXATTRIBI1UIVPROC VertexAttribI1uiv; 674 | PFNGLVERTEXATTRIBI2IPROC VertexAttribI2i; 675 | PFNGLVERTEXATTRIBI2IVPROC VertexAttribI2iv; 676 | PFNGLVERTEXATTRIBI2UIPROC VertexAttribI2ui; 677 | PFNGLVERTEXATTRIBI2UIVPROC VertexAttribI2uiv; 678 | PFNGLVERTEXATTRIBI3IPROC VertexAttribI3i; 679 | PFNGLVERTEXATTRIBI3IVPROC VertexAttribI3iv; 680 | PFNGLVERTEXATTRIBI3UIPROC VertexAttribI3ui; 681 | PFNGLVERTEXATTRIBI3UIVPROC VertexAttribI3uiv; 682 | PFNGLVERTEXATTRIBI4BVPROC VertexAttribI4bv; 683 | PFNGLVERTEXATTRIBI4IPROC VertexAttribI4i; 684 | PFNGLVERTEXATTRIBI4IVPROC VertexAttribI4iv; 685 | PFNGLVERTEXATTRIBI4SVPROC VertexAttribI4sv; 686 | PFNGLVERTEXATTRIBI4UBVPROC VertexAttribI4ubv; 687 | PFNGLVERTEXATTRIBI4UIPROC VertexAttribI4ui; 688 | PFNGLVERTEXATTRIBI4UIVPROC VertexAttribI4uiv; 689 | PFNGLVERTEXATTRIBI4USVPROC VertexAttribI4usv; 690 | PFNGLVERTEXATTRIBIFORMATPROC VertexAttribIFormat; 691 | PFNGLVERTEXATTRIBIPOINTERPROC VertexAttribIPointer; 692 | PFNGLVERTEXATTRIBL1DPROC VertexAttribL1d; 693 | PFNGLVERTEXATTRIBL1DVPROC VertexAttribL1dv; 694 | PFNGLVERTEXATTRIBL2DPROC VertexAttribL2d; 695 | PFNGLVERTEXATTRIBL2DVPROC VertexAttribL2dv; 696 | PFNGLVERTEXATTRIBL3DPROC VertexAttribL3d; 697 | PFNGLVERTEXATTRIBL3DVPROC VertexAttribL3dv; 698 | PFNGLVERTEXATTRIBL4DPROC VertexAttribL4d; 699 | PFNGLVERTEXATTRIBL4DVPROC VertexAttribL4dv; 700 | PFNGLVERTEXATTRIBLFORMATPROC VertexAttribLFormat; 701 | PFNGLVERTEXATTRIBLPOINTERPROC VertexAttribLPointer; 702 | PFNGLVERTEXATTRIBP1UIPROC VertexAttribP1ui; 703 | PFNGLVERTEXATTRIBP1UIVPROC VertexAttribP1uiv; 704 | PFNGLVERTEXATTRIBP2UIPROC VertexAttribP2ui; 705 | PFNGLVERTEXATTRIBP2UIVPROC VertexAttribP2uiv; 706 | PFNGLVERTEXATTRIBP3UIPROC VertexAttribP3ui; 707 | PFNGLVERTEXATTRIBP3UIVPROC VertexAttribP3uiv; 708 | PFNGLVERTEXATTRIBP4UIPROC VertexAttribP4ui; 709 | PFNGLVERTEXATTRIBP4UIVPROC VertexAttribP4uiv; 710 | PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer; 711 | PFNGLVERTEXBINDINGDIVISORPROC VertexBindingDivisor; 712 | PFNGLVIEWPORTPROC Viewport; 713 | PFNGLVIEWPORTARRAYVPROC ViewportArrayv; 714 | PFNGLVIEWPORTINDEXEDFPROC ViewportIndexedf; 715 | PFNGLVIEWPORTINDEXEDFVPROC ViewportIndexedfv; 716 | PFNGLWAITSYNCPROC WaitSync; 717 | } gl; 718 | }; 719 | 720 | extern union GL3WProcs gl3wProcs; 721 | 722 | /* OpenGL functions */ 723 | #define glActiveShaderProgram gl3wProcs.gl.ActiveShaderProgram 724 | #define glActiveTexture gl3wProcs.gl.ActiveTexture 725 | #define glAttachShader gl3wProcs.gl.AttachShader 726 | #define glBeginConditionalRender gl3wProcs.gl.BeginConditionalRender 727 | #define glBeginQuery gl3wProcs.gl.BeginQuery 728 | #define glBeginQueryIndexed gl3wProcs.gl.BeginQueryIndexed 729 | #define glBeginTransformFeedback gl3wProcs.gl.BeginTransformFeedback 730 | #define glBindAttribLocation gl3wProcs.gl.BindAttribLocation 731 | #define glBindBuffer gl3wProcs.gl.BindBuffer 732 | #define glBindBufferBase gl3wProcs.gl.BindBufferBase 733 | #define glBindBufferRange gl3wProcs.gl.BindBufferRange 734 | #define glBindBuffersBase gl3wProcs.gl.BindBuffersBase 735 | #define glBindBuffersRange gl3wProcs.gl.BindBuffersRange 736 | #define glBindFragDataLocation gl3wProcs.gl.BindFragDataLocation 737 | #define glBindFragDataLocationIndexed gl3wProcs.gl.BindFragDataLocationIndexed 738 | #define glBindFramebuffer gl3wProcs.gl.BindFramebuffer 739 | #define glBindImageTexture gl3wProcs.gl.BindImageTexture 740 | #define glBindImageTextures gl3wProcs.gl.BindImageTextures 741 | #define glBindProgramPipeline gl3wProcs.gl.BindProgramPipeline 742 | #define glBindRenderbuffer gl3wProcs.gl.BindRenderbuffer 743 | #define glBindSampler gl3wProcs.gl.BindSampler 744 | #define glBindSamplers gl3wProcs.gl.BindSamplers 745 | #define glBindTexture gl3wProcs.gl.BindTexture 746 | #define glBindTextureUnit gl3wProcs.gl.BindTextureUnit 747 | #define glBindTextures gl3wProcs.gl.BindTextures 748 | #define glBindTransformFeedback gl3wProcs.gl.BindTransformFeedback 749 | #define glBindVertexArray gl3wProcs.gl.BindVertexArray 750 | #define glBindVertexBuffer gl3wProcs.gl.BindVertexBuffer 751 | #define glBindVertexBuffers gl3wProcs.gl.BindVertexBuffers 752 | #define glBlendColor gl3wProcs.gl.BlendColor 753 | #define glBlendEquation gl3wProcs.gl.BlendEquation 754 | #define glBlendEquationSeparate gl3wProcs.gl.BlendEquationSeparate 755 | #define glBlendEquationSeparatei gl3wProcs.gl.BlendEquationSeparatei 756 | #define glBlendEquationi gl3wProcs.gl.BlendEquationi 757 | #define glBlendFunc gl3wProcs.gl.BlendFunc 758 | #define glBlendFuncSeparate gl3wProcs.gl.BlendFuncSeparate 759 | #define glBlendFuncSeparatei gl3wProcs.gl.BlendFuncSeparatei 760 | #define glBlendFunci gl3wProcs.gl.BlendFunci 761 | #define glBlitFramebuffer gl3wProcs.gl.BlitFramebuffer 762 | #define glBlitNamedFramebuffer gl3wProcs.gl.BlitNamedFramebuffer 763 | #define glBufferData gl3wProcs.gl.BufferData 764 | #define glBufferStorage gl3wProcs.gl.BufferStorage 765 | #define glBufferSubData gl3wProcs.gl.BufferSubData 766 | #define glCheckFramebufferStatus gl3wProcs.gl.CheckFramebufferStatus 767 | #define glCheckNamedFramebufferStatus gl3wProcs.gl.CheckNamedFramebufferStatus 768 | #define glClampColor gl3wProcs.gl.ClampColor 769 | #define glClear gl3wProcs.gl.Clear 770 | #define glClearBufferData gl3wProcs.gl.ClearBufferData 771 | #define glClearBufferSubData gl3wProcs.gl.ClearBufferSubData 772 | #define glClearBufferfi gl3wProcs.gl.ClearBufferfi 773 | #define glClearBufferfv gl3wProcs.gl.ClearBufferfv 774 | #define glClearBufferiv gl3wProcs.gl.ClearBufferiv 775 | #define glClearBufferuiv gl3wProcs.gl.ClearBufferuiv 776 | #define glClearColor gl3wProcs.gl.ClearColor 777 | #define glClearDepth gl3wProcs.gl.ClearDepth 778 | #define glClearDepthf gl3wProcs.gl.ClearDepthf 779 | #define glClearNamedBufferData gl3wProcs.gl.ClearNamedBufferData 780 | #define glClearNamedBufferSubData gl3wProcs.gl.ClearNamedBufferSubData 781 | #define glClearNamedFramebufferfi gl3wProcs.gl.ClearNamedFramebufferfi 782 | #define glClearNamedFramebufferfv gl3wProcs.gl.ClearNamedFramebufferfv 783 | #define glClearNamedFramebufferiv gl3wProcs.gl.ClearNamedFramebufferiv 784 | #define glClearNamedFramebufferuiv gl3wProcs.gl.ClearNamedFramebufferuiv 785 | #define glClearStencil gl3wProcs.gl.ClearStencil 786 | #define glClearTexImage gl3wProcs.gl.ClearTexImage 787 | #define glClearTexSubImage gl3wProcs.gl.ClearTexSubImage 788 | #define glClientWaitSync gl3wProcs.gl.ClientWaitSync 789 | #define glClipControl gl3wProcs.gl.ClipControl 790 | #define glColorMask gl3wProcs.gl.ColorMask 791 | #define glColorMaski gl3wProcs.gl.ColorMaski 792 | #define glCompileShader gl3wProcs.gl.CompileShader 793 | #define glCompressedTexImage1D gl3wProcs.gl.CompressedTexImage1D 794 | #define glCompressedTexImage2D gl3wProcs.gl.CompressedTexImage2D 795 | #define glCompressedTexImage3D gl3wProcs.gl.CompressedTexImage3D 796 | #define glCompressedTexSubImage1D gl3wProcs.gl.CompressedTexSubImage1D 797 | #define glCompressedTexSubImage2D gl3wProcs.gl.CompressedTexSubImage2D 798 | #define glCompressedTexSubImage3D gl3wProcs.gl.CompressedTexSubImage3D 799 | #define glCompressedTextureSubImage1D gl3wProcs.gl.CompressedTextureSubImage1D 800 | #define glCompressedTextureSubImage2D gl3wProcs.gl.CompressedTextureSubImage2D 801 | #define glCompressedTextureSubImage3D gl3wProcs.gl.CompressedTextureSubImage3D 802 | #define glCopyBufferSubData gl3wProcs.gl.CopyBufferSubData 803 | #define glCopyImageSubData gl3wProcs.gl.CopyImageSubData 804 | #define glCopyNamedBufferSubData gl3wProcs.gl.CopyNamedBufferSubData 805 | #define glCopyTexImage1D gl3wProcs.gl.CopyTexImage1D 806 | #define glCopyTexImage2D gl3wProcs.gl.CopyTexImage2D 807 | #define glCopyTexSubImage1D gl3wProcs.gl.CopyTexSubImage1D 808 | #define glCopyTexSubImage2D gl3wProcs.gl.CopyTexSubImage2D 809 | #define glCopyTexSubImage3D gl3wProcs.gl.CopyTexSubImage3D 810 | #define glCopyTextureSubImage1D gl3wProcs.gl.CopyTextureSubImage1D 811 | #define glCopyTextureSubImage2D gl3wProcs.gl.CopyTextureSubImage2D 812 | #define glCopyTextureSubImage3D gl3wProcs.gl.CopyTextureSubImage3D 813 | #define glCreateBuffers gl3wProcs.gl.CreateBuffers 814 | #define glCreateFramebuffers gl3wProcs.gl.CreateFramebuffers 815 | #define glCreateProgram gl3wProcs.gl.CreateProgram 816 | #define glCreateProgramPipelines gl3wProcs.gl.CreateProgramPipelines 817 | #define glCreateQueries gl3wProcs.gl.CreateQueries 818 | #define glCreateRenderbuffers gl3wProcs.gl.CreateRenderbuffers 819 | #define glCreateSamplers gl3wProcs.gl.CreateSamplers 820 | #define glCreateShader gl3wProcs.gl.CreateShader 821 | #define glCreateShaderProgramv gl3wProcs.gl.CreateShaderProgramv 822 | #define glCreateTextures gl3wProcs.gl.CreateTextures 823 | #define glCreateTransformFeedbacks gl3wProcs.gl.CreateTransformFeedbacks 824 | #define glCreateVertexArrays gl3wProcs.gl.CreateVertexArrays 825 | #define glCullFace gl3wProcs.gl.CullFace 826 | #define glDebugMessageCallback gl3wProcs.gl.DebugMessageCallback 827 | #define glDebugMessageControl gl3wProcs.gl.DebugMessageControl 828 | #define glDebugMessageInsert gl3wProcs.gl.DebugMessageInsert 829 | #define glDeleteBuffers gl3wProcs.gl.DeleteBuffers 830 | #define glDeleteFramebuffers gl3wProcs.gl.DeleteFramebuffers 831 | #define glDeleteProgram gl3wProcs.gl.DeleteProgram 832 | #define glDeleteProgramPipelines gl3wProcs.gl.DeleteProgramPipelines 833 | #define glDeleteQueries gl3wProcs.gl.DeleteQueries 834 | #define glDeleteRenderbuffers gl3wProcs.gl.DeleteRenderbuffers 835 | #define glDeleteSamplers gl3wProcs.gl.DeleteSamplers 836 | #define glDeleteShader gl3wProcs.gl.DeleteShader 837 | #define glDeleteSync gl3wProcs.gl.DeleteSync 838 | #define glDeleteTextures gl3wProcs.gl.DeleteTextures 839 | #define glDeleteTransformFeedbacks gl3wProcs.gl.DeleteTransformFeedbacks 840 | #define glDeleteVertexArrays gl3wProcs.gl.DeleteVertexArrays 841 | #define glDepthFunc gl3wProcs.gl.DepthFunc 842 | #define glDepthMask gl3wProcs.gl.DepthMask 843 | #define glDepthRange gl3wProcs.gl.DepthRange 844 | #define glDepthRangeArrayv gl3wProcs.gl.DepthRangeArrayv 845 | #define glDepthRangeIndexed gl3wProcs.gl.DepthRangeIndexed 846 | #define glDepthRangef gl3wProcs.gl.DepthRangef 847 | #define glDetachShader gl3wProcs.gl.DetachShader 848 | #define glDisable gl3wProcs.gl.Disable 849 | #define glDisableVertexArrayAttrib gl3wProcs.gl.DisableVertexArrayAttrib 850 | #define glDisableVertexAttribArray gl3wProcs.gl.DisableVertexAttribArray 851 | #define glDisablei gl3wProcs.gl.Disablei 852 | #define glDispatchCompute gl3wProcs.gl.DispatchCompute 853 | #define glDispatchComputeIndirect gl3wProcs.gl.DispatchComputeIndirect 854 | #define glDrawArrays gl3wProcs.gl.DrawArrays 855 | #define glDrawArraysIndirect gl3wProcs.gl.DrawArraysIndirect 856 | #define glDrawArraysInstanced gl3wProcs.gl.DrawArraysInstanced 857 | #define glDrawArraysInstancedBaseInstance gl3wProcs.gl.DrawArraysInstancedBaseInstance 858 | #define glDrawBuffer gl3wProcs.gl.DrawBuffer 859 | #define glDrawBuffers gl3wProcs.gl.DrawBuffers 860 | #define glDrawElements gl3wProcs.gl.DrawElements 861 | #define glDrawElementsBaseVertex gl3wProcs.gl.DrawElementsBaseVertex 862 | #define glDrawElementsIndirect gl3wProcs.gl.DrawElementsIndirect 863 | #define glDrawElementsInstanced gl3wProcs.gl.DrawElementsInstanced 864 | #define glDrawElementsInstancedBaseInstance gl3wProcs.gl.DrawElementsInstancedBaseInstance 865 | #define glDrawElementsInstancedBaseVertex gl3wProcs.gl.DrawElementsInstancedBaseVertex 866 | #define glDrawElementsInstancedBaseVertexBaseInstance gl3wProcs.gl.DrawElementsInstancedBaseVertexBaseInstance 867 | #define glDrawRangeElements gl3wProcs.gl.DrawRangeElements 868 | #define glDrawRangeElementsBaseVertex gl3wProcs.gl.DrawRangeElementsBaseVertex 869 | #define glDrawTransformFeedback gl3wProcs.gl.DrawTransformFeedback 870 | #define glDrawTransformFeedbackInstanced gl3wProcs.gl.DrawTransformFeedbackInstanced 871 | #define glDrawTransformFeedbackStream gl3wProcs.gl.DrawTransformFeedbackStream 872 | #define glDrawTransformFeedbackStreamInstanced gl3wProcs.gl.DrawTransformFeedbackStreamInstanced 873 | #define glEnable gl3wProcs.gl.Enable 874 | #define glEnableVertexArrayAttrib gl3wProcs.gl.EnableVertexArrayAttrib 875 | #define glEnableVertexAttribArray gl3wProcs.gl.EnableVertexAttribArray 876 | #define glEnablei gl3wProcs.gl.Enablei 877 | #define glEndConditionalRender gl3wProcs.gl.EndConditionalRender 878 | #define glEndQuery gl3wProcs.gl.EndQuery 879 | #define glEndQueryIndexed gl3wProcs.gl.EndQueryIndexed 880 | #define glEndTransformFeedback gl3wProcs.gl.EndTransformFeedback 881 | #define glFenceSync gl3wProcs.gl.FenceSync 882 | #define glFinish gl3wProcs.gl.Finish 883 | #define glFlush gl3wProcs.gl.Flush 884 | #define glFlushMappedBufferRange gl3wProcs.gl.FlushMappedBufferRange 885 | #define glFlushMappedNamedBufferRange gl3wProcs.gl.FlushMappedNamedBufferRange 886 | #define glFramebufferParameteri gl3wProcs.gl.FramebufferParameteri 887 | #define glFramebufferRenderbuffer gl3wProcs.gl.FramebufferRenderbuffer 888 | #define glFramebufferTexture gl3wProcs.gl.FramebufferTexture 889 | #define glFramebufferTexture1D gl3wProcs.gl.FramebufferTexture1D 890 | #define glFramebufferTexture2D gl3wProcs.gl.FramebufferTexture2D 891 | #define glFramebufferTexture3D gl3wProcs.gl.FramebufferTexture3D 892 | #define glFramebufferTextureLayer gl3wProcs.gl.FramebufferTextureLayer 893 | #define glFrontFace gl3wProcs.gl.FrontFace 894 | #define glGenBuffers gl3wProcs.gl.GenBuffers 895 | #define glGenFramebuffers gl3wProcs.gl.GenFramebuffers 896 | #define glGenProgramPipelines gl3wProcs.gl.GenProgramPipelines 897 | #define glGenQueries gl3wProcs.gl.GenQueries 898 | #define glGenRenderbuffers gl3wProcs.gl.GenRenderbuffers 899 | #define glGenSamplers gl3wProcs.gl.GenSamplers 900 | #define glGenTextures gl3wProcs.gl.GenTextures 901 | #define glGenTransformFeedbacks gl3wProcs.gl.GenTransformFeedbacks 902 | #define glGenVertexArrays gl3wProcs.gl.GenVertexArrays 903 | #define glGenerateMipmap gl3wProcs.gl.GenerateMipmap 904 | #define glGenerateTextureMipmap gl3wProcs.gl.GenerateTextureMipmap 905 | #define glGetActiveAtomicCounterBufferiv gl3wProcs.gl.GetActiveAtomicCounterBufferiv 906 | #define glGetActiveAttrib gl3wProcs.gl.GetActiveAttrib 907 | #define glGetActiveSubroutineName gl3wProcs.gl.GetActiveSubroutineName 908 | #define glGetActiveSubroutineUniformName gl3wProcs.gl.GetActiveSubroutineUniformName 909 | #define glGetActiveSubroutineUniformiv gl3wProcs.gl.GetActiveSubroutineUniformiv 910 | #define glGetActiveUniform gl3wProcs.gl.GetActiveUniform 911 | #define glGetActiveUniformBlockName gl3wProcs.gl.GetActiveUniformBlockName 912 | #define glGetActiveUniformBlockiv gl3wProcs.gl.GetActiveUniformBlockiv 913 | #define glGetActiveUniformName gl3wProcs.gl.GetActiveUniformName 914 | #define glGetActiveUniformsiv gl3wProcs.gl.GetActiveUniformsiv 915 | #define glGetAttachedShaders gl3wProcs.gl.GetAttachedShaders 916 | #define glGetAttribLocation gl3wProcs.gl.GetAttribLocation 917 | #define glGetBooleani_v gl3wProcs.gl.GetBooleani_v 918 | #define glGetBooleanv gl3wProcs.gl.GetBooleanv 919 | #define glGetBufferParameteri64v gl3wProcs.gl.GetBufferParameteri64v 920 | #define glGetBufferParameteriv gl3wProcs.gl.GetBufferParameteriv 921 | #define glGetBufferPointerv gl3wProcs.gl.GetBufferPointerv 922 | #define glGetBufferSubData gl3wProcs.gl.GetBufferSubData 923 | #define glGetCompressedTexImage gl3wProcs.gl.GetCompressedTexImage 924 | #define glGetCompressedTextureImage gl3wProcs.gl.GetCompressedTextureImage 925 | #define glGetCompressedTextureSubImage gl3wProcs.gl.GetCompressedTextureSubImage 926 | #define glGetDebugMessageLog gl3wProcs.gl.GetDebugMessageLog 927 | #define glGetDoublei_v gl3wProcs.gl.GetDoublei_v 928 | #define glGetDoublev gl3wProcs.gl.GetDoublev 929 | #define glGetError gl3wProcs.gl.GetError 930 | #define glGetFloati_v gl3wProcs.gl.GetFloati_v 931 | #define glGetFloatv gl3wProcs.gl.GetFloatv 932 | #define glGetFragDataIndex gl3wProcs.gl.GetFragDataIndex 933 | #define glGetFragDataLocation gl3wProcs.gl.GetFragDataLocation 934 | #define glGetFramebufferAttachmentParameteriv gl3wProcs.gl.GetFramebufferAttachmentParameteriv 935 | #define glGetFramebufferParameteriv gl3wProcs.gl.GetFramebufferParameteriv 936 | #define glGetGraphicsResetStatus gl3wProcs.gl.GetGraphicsResetStatus 937 | #define glGetInteger64i_v gl3wProcs.gl.GetInteger64i_v 938 | #define glGetInteger64v gl3wProcs.gl.GetInteger64v 939 | #define glGetIntegeri_v gl3wProcs.gl.GetIntegeri_v 940 | #define glGetIntegerv gl3wProcs.gl.GetIntegerv 941 | #define glGetInternalformati64v gl3wProcs.gl.GetInternalformati64v 942 | #define glGetInternalformativ gl3wProcs.gl.GetInternalformativ 943 | #define glGetMultisamplefv gl3wProcs.gl.GetMultisamplefv 944 | #define glGetNamedBufferParameteri64v gl3wProcs.gl.GetNamedBufferParameteri64v 945 | #define glGetNamedBufferParameteriv gl3wProcs.gl.GetNamedBufferParameteriv 946 | #define glGetNamedBufferPointerv gl3wProcs.gl.GetNamedBufferPointerv 947 | #define glGetNamedBufferSubData gl3wProcs.gl.GetNamedBufferSubData 948 | #define glGetNamedFramebufferAttachmentParameteriv gl3wProcs.gl.GetNamedFramebufferAttachmentParameteriv 949 | #define glGetNamedFramebufferParameteriv gl3wProcs.gl.GetNamedFramebufferParameteriv 950 | #define glGetNamedRenderbufferParameteriv gl3wProcs.gl.GetNamedRenderbufferParameteriv 951 | #define glGetObjectLabel gl3wProcs.gl.GetObjectLabel 952 | #define glGetObjectPtrLabel gl3wProcs.gl.GetObjectPtrLabel 953 | #define glGetPointerv gl3wProcs.gl.GetPointerv 954 | #define glGetProgramBinary gl3wProcs.gl.GetProgramBinary 955 | #define glGetProgramInfoLog gl3wProcs.gl.GetProgramInfoLog 956 | #define glGetProgramInterfaceiv gl3wProcs.gl.GetProgramInterfaceiv 957 | #define glGetProgramPipelineInfoLog gl3wProcs.gl.GetProgramPipelineInfoLog 958 | #define glGetProgramPipelineiv gl3wProcs.gl.GetProgramPipelineiv 959 | #define glGetProgramResourceIndex gl3wProcs.gl.GetProgramResourceIndex 960 | #define glGetProgramResourceLocation gl3wProcs.gl.GetProgramResourceLocation 961 | #define glGetProgramResourceLocationIndex gl3wProcs.gl.GetProgramResourceLocationIndex 962 | #define glGetProgramResourceName gl3wProcs.gl.GetProgramResourceName 963 | #define glGetProgramResourceiv gl3wProcs.gl.GetProgramResourceiv 964 | #define glGetProgramStageiv gl3wProcs.gl.GetProgramStageiv 965 | #define glGetProgramiv gl3wProcs.gl.GetProgramiv 966 | #define glGetQueryBufferObjecti64v gl3wProcs.gl.GetQueryBufferObjecti64v 967 | #define glGetQueryBufferObjectiv gl3wProcs.gl.GetQueryBufferObjectiv 968 | #define glGetQueryBufferObjectui64v gl3wProcs.gl.GetQueryBufferObjectui64v 969 | #define glGetQueryBufferObjectuiv gl3wProcs.gl.GetQueryBufferObjectuiv 970 | #define glGetQueryIndexediv gl3wProcs.gl.GetQueryIndexediv 971 | #define glGetQueryObjecti64v gl3wProcs.gl.GetQueryObjecti64v 972 | #define glGetQueryObjectiv gl3wProcs.gl.GetQueryObjectiv 973 | #define glGetQueryObjectui64v gl3wProcs.gl.GetQueryObjectui64v 974 | #define glGetQueryObjectuiv gl3wProcs.gl.GetQueryObjectuiv 975 | #define glGetQueryiv gl3wProcs.gl.GetQueryiv 976 | #define glGetRenderbufferParameteriv gl3wProcs.gl.GetRenderbufferParameteriv 977 | #define glGetSamplerParameterIiv gl3wProcs.gl.GetSamplerParameterIiv 978 | #define glGetSamplerParameterIuiv gl3wProcs.gl.GetSamplerParameterIuiv 979 | #define glGetSamplerParameterfv gl3wProcs.gl.GetSamplerParameterfv 980 | #define glGetSamplerParameteriv gl3wProcs.gl.GetSamplerParameteriv 981 | #define glGetShaderInfoLog gl3wProcs.gl.GetShaderInfoLog 982 | #define glGetShaderPrecisionFormat gl3wProcs.gl.GetShaderPrecisionFormat 983 | #define glGetShaderSource gl3wProcs.gl.GetShaderSource 984 | #define glGetShaderiv gl3wProcs.gl.GetShaderiv 985 | #define glGetString gl3wProcs.gl.GetString 986 | #define glGetStringi gl3wProcs.gl.GetStringi 987 | #define glGetSubroutineIndex gl3wProcs.gl.GetSubroutineIndex 988 | #define glGetSubroutineUniformLocation gl3wProcs.gl.GetSubroutineUniformLocation 989 | #define glGetSynciv gl3wProcs.gl.GetSynciv 990 | #define glGetTexImage gl3wProcs.gl.GetTexImage 991 | #define glGetTexLevelParameterfv gl3wProcs.gl.GetTexLevelParameterfv 992 | #define glGetTexLevelParameteriv gl3wProcs.gl.GetTexLevelParameteriv 993 | #define glGetTexParameterIiv gl3wProcs.gl.GetTexParameterIiv 994 | #define glGetTexParameterIuiv gl3wProcs.gl.GetTexParameterIuiv 995 | #define glGetTexParameterfv gl3wProcs.gl.GetTexParameterfv 996 | #define glGetTexParameteriv gl3wProcs.gl.GetTexParameteriv 997 | #define glGetTextureImage gl3wProcs.gl.GetTextureImage 998 | #define glGetTextureLevelParameterfv gl3wProcs.gl.GetTextureLevelParameterfv 999 | #define glGetTextureLevelParameteriv gl3wProcs.gl.GetTextureLevelParameteriv 1000 | #define glGetTextureParameterIiv gl3wProcs.gl.GetTextureParameterIiv 1001 | #define glGetTextureParameterIuiv gl3wProcs.gl.GetTextureParameterIuiv 1002 | #define glGetTextureParameterfv gl3wProcs.gl.GetTextureParameterfv 1003 | #define glGetTextureParameteriv gl3wProcs.gl.GetTextureParameteriv 1004 | #define glGetTextureSubImage gl3wProcs.gl.GetTextureSubImage 1005 | #define glGetTransformFeedbackVarying gl3wProcs.gl.GetTransformFeedbackVarying 1006 | #define glGetTransformFeedbacki64_v gl3wProcs.gl.GetTransformFeedbacki64_v 1007 | #define glGetTransformFeedbacki_v gl3wProcs.gl.GetTransformFeedbacki_v 1008 | #define glGetTransformFeedbackiv gl3wProcs.gl.GetTransformFeedbackiv 1009 | #define glGetUniformBlockIndex gl3wProcs.gl.GetUniformBlockIndex 1010 | #define glGetUniformIndices gl3wProcs.gl.GetUniformIndices 1011 | #define glGetUniformLocation gl3wProcs.gl.GetUniformLocation 1012 | #define glGetUniformSubroutineuiv gl3wProcs.gl.GetUniformSubroutineuiv 1013 | #define glGetUniformdv gl3wProcs.gl.GetUniformdv 1014 | #define glGetUniformfv gl3wProcs.gl.GetUniformfv 1015 | #define glGetUniformiv gl3wProcs.gl.GetUniformiv 1016 | #define glGetUniformuiv gl3wProcs.gl.GetUniformuiv 1017 | #define glGetVertexArrayIndexed64iv gl3wProcs.gl.GetVertexArrayIndexed64iv 1018 | #define glGetVertexArrayIndexediv gl3wProcs.gl.GetVertexArrayIndexediv 1019 | #define glGetVertexArrayiv gl3wProcs.gl.GetVertexArrayiv 1020 | #define glGetVertexAttribIiv gl3wProcs.gl.GetVertexAttribIiv 1021 | #define glGetVertexAttribIuiv gl3wProcs.gl.GetVertexAttribIuiv 1022 | #define glGetVertexAttribLdv gl3wProcs.gl.GetVertexAttribLdv 1023 | #define glGetVertexAttribPointerv gl3wProcs.gl.GetVertexAttribPointerv 1024 | #define glGetVertexAttribdv gl3wProcs.gl.GetVertexAttribdv 1025 | #define glGetVertexAttribfv gl3wProcs.gl.GetVertexAttribfv 1026 | #define glGetVertexAttribiv gl3wProcs.gl.GetVertexAttribiv 1027 | #define glGetnCompressedTexImage gl3wProcs.gl.GetnCompressedTexImage 1028 | #define glGetnTexImage gl3wProcs.gl.GetnTexImage 1029 | #define glGetnUniformdv gl3wProcs.gl.GetnUniformdv 1030 | #define glGetnUniformfv gl3wProcs.gl.GetnUniformfv 1031 | #define glGetnUniformiv gl3wProcs.gl.GetnUniformiv 1032 | #define glGetnUniformuiv gl3wProcs.gl.GetnUniformuiv 1033 | #define glHint gl3wProcs.gl.Hint 1034 | #define glInvalidateBufferData gl3wProcs.gl.InvalidateBufferData 1035 | #define glInvalidateBufferSubData gl3wProcs.gl.InvalidateBufferSubData 1036 | #define glInvalidateFramebuffer gl3wProcs.gl.InvalidateFramebuffer 1037 | #define glInvalidateNamedFramebufferData gl3wProcs.gl.InvalidateNamedFramebufferData 1038 | #define glInvalidateNamedFramebufferSubData gl3wProcs.gl.InvalidateNamedFramebufferSubData 1039 | #define glInvalidateSubFramebuffer gl3wProcs.gl.InvalidateSubFramebuffer 1040 | #define glInvalidateTexImage gl3wProcs.gl.InvalidateTexImage 1041 | #define glInvalidateTexSubImage gl3wProcs.gl.InvalidateTexSubImage 1042 | #define glIsBuffer gl3wProcs.gl.IsBuffer 1043 | #define glIsEnabled gl3wProcs.gl.IsEnabled 1044 | #define glIsEnabledi gl3wProcs.gl.IsEnabledi 1045 | #define glIsFramebuffer gl3wProcs.gl.IsFramebuffer 1046 | #define glIsProgram gl3wProcs.gl.IsProgram 1047 | #define glIsProgramPipeline gl3wProcs.gl.IsProgramPipeline 1048 | #define glIsQuery gl3wProcs.gl.IsQuery 1049 | #define glIsRenderbuffer gl3wProcs.gl.IsRenderbuffer 1050 | #define glIsSampler gl3wProcs.gl.IsSampler 1051 | #define glIsShader gl3wProcs.gl.IsShader 1052 | #define glIsSync gl3wProcs.gl.IsSync 1053 | #define glIsTexture gl3wProcs.gl.IsTexture 1054 | #define glIsTransformFeedback gl3wProcs.gl.IsTransformFeedback 1055 | #define glIsVertexArray gl3wProcs.gl.IsVertexArray 1056 | #define glLineWidth gl3wProcs.gl.LineWidth 1057 | #define glLinkProgram gl3wProcs.gl.LinkProgram 1058 | #define glLogicOp gl3wProcs.gl.LogicOp 1059 | #define glMapBuffer gl3wProcs.gl.MapBuffer 1060 | #define glMapBufferRange gl3wProcs.gl.MapBufferRange 1061 | #define glMapNamedBuffer gl3wProcs.gl.MapNamedBuffer 1062 | #define glMapNamedBufferRange gl3wProcs.gl.MapNamedBufferRange 1063 | #define glMemoryBarrier gl3wProcs.gl.MemoryBarrier 1064 | #define glMemoryBarrierByRegion gl3wProcs.gl.MemoryBarrierByRegion 1065 | #define glMinSampleShading gl3wProcs.gl.MinSampleShading 1066 | #define glMultiDrawArrays gl3wProcs.gl.MultiDrawArrays 1067 | #define glMultiDrawArraysIndirect gl3wProcs.gl.MultiDrawArraysIndirect 1068 | #define glMultiDrawArraysIndirectCount gl3wProcs.gl.MultiDrawArraysIndirectCount 1069 | #define glMultiDrawElements gl3wProcs.gl.MultiDrawElements 1070 | #define glMultiDrawElementsBaseVertex gl3wProcs.gl.MultiDrawElementsBaseVertex 1071 | #define glMultiDrawElementsIndirect gl3wProcs.gl.MultiDrawElementsIndirect 1072 | #define glMultiDrawElementsIndirectCount gl3wProcs.gl.MultiDrawElementsIndirectCount 1073 | #define glNamedBufferData gl3wProcs.gl.NamedBufferData 1074 | #define glNamedBufferStorage gl3wProcs.gl.NamedBufferStorage 1075 | #define glNamedBufferSubData gl3wProcs.gl.NamedBufferSubData 1076 | #define glNamedFramebufferDrawBuffer gl3wProcs.gl.NamedFramebufferDrawBuffer 1077 | #define glNamedFramebufferDrawBuffers gl3wProcs.gl.NamedFramebufferDrawBuffers 1078 | #define glNamedFramebufferParameteri gl3wProcs.gl.NamedFramebufferParameteri 1079 | #define glNamedFramebufferReadBuffer gl3wProcs.gl.NamedFramebufferReadBuffer 1080 | #define glNamedFramebufferRenderbuffer gl3wProcs.gl.NamedFramebufferRenderbuffer 1081 | #define glNamedFramebufferTexture gl3wProcs.gl.NamedFramebufferTexture 1082 | #define glNamedFramebufferTextureLayer gl3wProcs.gl.NamedFramebufferTextureLayer 1083 | #define glNamedRenderbufferStorage gl3wProcs.gl.NamedRenderbufferStorage 1084 | #define glNamedRenderbufferStorageMultisample gl3wProcs.gl.NamedRenderbufferStorageMultisample 1085 | #define glObjectLabel gl3wProcs.gl.ObjectLabel 1086 | #define glObjectPtrLabel gl3wProcs.gl.ObjectPtrLabel 1087 | #define glPatchParameterfv gl3wProcs.gl.PatchParameterfv 1088 | #define glPatchParameteri gl3wProcs.gl.PatchParameteri 1089 | #define glPauseTransformFeedback gl3wProcs.gl.PauseTransformFeedback 1090 | #define glPixelStoref gl3wProcs.gl.PixelStoref 1091 | #define glPixelStorei gl3wProcs.gl.PixelStorei 1092 | #define glPointParameterf gl3wProcs.gl.PointParameterf 1093 | #define glPointParameterfv gl3wProcs.gl.PointParameterfv 1094 | #define glPointParameteri gl3wProcs.gl.PointParameteri 1095 | #define glPointParameteriv gl3wProcs.gl.PointParameteriv 1096 | #define glPointSize gl3wProcs.gl.PointSize 1097 | #define glPolygonMode gl3wProcs.gl.PolygonMode 1098 | #define glPolygonOffset gl3wProcs.gl.PolygonOffset 1099 | #define glPolygonOffsetClamp gl3wProcs.gl.PolygonOffsetClamp 1100 | #define glPopDebugGroup gl3wProcs.gl.PopDebugGroup 1101 | #define glPrimitiveRestartIndex gl3wProcs.gl.PrimitiveRestartIndex 1102 | #define glProgramBinary gl3wProcs.gl.ProgramBinary 1103 | #define glProgramParameteri gl3wProcs.gl.ProgramParameteri 1104 | #define glProgramUniform1d gl3wProcs.gl.ProgramUniform1d 1105 | #define glProgramUniform1dv gl3wProcs.gl.ProgramUniform1dv 1106 | #define glProgramUniform1f gl3wProcs.gl.ProgramUniform1f 1107 | #define glProgramUniform1fv gl3wProcs.gl.ProgramUniform1fv 1108 | #define glProgramUniform1i gl3wProcs.gl.ProgramUniform1i 1109 | #define glProgramUniform1iv gl3wProcs.gl.ProgramUniform1iv 1110 | #define glProgramUniform1ui gl3wProcs.gl.ProgramUniform1ui 1111 | #define glProgramUniform1uiv gl3wProcs.gl.ProgramUniform1uiv 1112 | #define glProgramUniform2d gl3wProcs.gl.ProgramUniform2d 1113 | #define glProgramUniform2dv gl3wProcs.gl.ProgramUniform2dv 1114 | #define glProgramUniform2f gl3wProcs.gl.ProgramUniform2f 1115 | #define glProgramUniform2fv gl3wProcs.gl.ProgramUniform2fv 1116 | #define glProgramUniform2i gl3wProcs.gl.ProgramUniform2i 1117 | #define glProgramUniform2iv gl3wProcs.gl.ProgramUniform2iv 1118 | #define glProgramUniform2ui gl3wProcs.gl.ProgramUniform2ui 1119 | #define glProgramUniform2uiv gl3wProcs.gl.ProgramUniform2uiv 1120 | #define glProgramUniform3d gl3wProcs.gl.ProgramUniform3d 1121 | #define glProgramUniform3dv gl3wProcs.gl.ProgramUniform3dv 1122 | #define glProgramUniform3f gl3wProcs.gl.ProgramUniform3f 1123 | #define glProgramUniform3fv gl3wProcs.gl.ProgramUniform3fv 1124 | #define glProgramUniform3i gl3wProcs.gl.ProgramUniform3i 1125 | #define glProgramUniform3iv gl3wProcs.gl.ProgramUniform3iv 1126 | #define glProgramUniform3ui gl3wProcs.gl.ProgramUniform3ui 1127 | #define glProgramUniform3uiv gl3wProcs.gl.ProgramUniform3uiv 1128 | #define glProgramUniform4d gl3wProcs.gl.ProgramUniform4d 1129 | #define glProgramUniform4dv gl3wProcs.gl.ProgramUniform4dv 1130 | #define glProgramUniform4f gl3wProcs.gl.ProgramUniform4f 1131 | #define glProgramUniform4fv gl3wProcs.gl.ProgramUniform4fv 1132 | #define glProgramUniform4i gl3wProcs.gl.ProgramUniform4i 1133 | #define glProgramUniform4iv gl3wProcs.gl.ProgramUniform4iv 1134 | #define glProgramUniform4ui gl3wProcs.gl.ProgramUniform4ui 1135 | #define glProgramUniform4uiv gl3wProcs.gl.ProgramUniform4uiv 1136 | #define glProgramUniformMatrix2dv gl3wProcs.gl.ProgramUniformMatrix2dv 1137 | #define glProgramUniformMatrix2fv gl3wProcs.gl.ProgramUniformMatrix2fv 1138 | #define glProgramUniformMatrix2x3dv gl3wProcs.gl.ProgramUniformMatrix2x3dv 1139 | #define glProgramUniformMatrix2x3fv gl3wProcs.gl.ProgramUniformMatrix2x3fv 1140 | #define glProgramUniformMatrix2x4dv gl3wProcs.gl.ProgramUniformMatrix2x4dv 1141 | #define glProgramUniformMatrix2x4fv gl3wProcs.gl.ProgramUniformMatrix2x4fv 1142 | #define glProgramUniformMatrix3dv gl3wProcs.gl.ProgramUniformMatrix3dv 1143 | #define glProgramUniformMatrix3fv gl3wProcs.gl.ProgramUniformMatrix3fv 1144 | #define glProgramUniformMatrix3x2dv gl3wProcs.gl.ProgramUniformMatrix3x2dv 1145 | #define glProgramUniformMatrix3x2fv gl3wProcs.gl.ProgramUniformMatrix3x2fv 1146 | #define glProgramUniformMatrix3x4dv gl3wProcs.gl.ProgramUniformMatrix3x4dv 1147 | #define glProgramUniformMatrix3x4fv gl3wProcs.gl.ProgramUniformMatrix3x4fv 1148 | #define glProgramUniformMatrix4dv gl3wProcs.gl.ProgramUniformMatrix4dv 1149 | #define glProgramUniformMatrix4fv gl3wProcs.gl.ProgramUniformMatrix4fv 1150 | #define glProgramUniformMatrix4x2dv gl3wProcs.gl.ProgramUniformMatrix4x2dv 1151 | #define glProgramUniformMatrix4x2fv gl3wProcs.gl.ProgramUniformMatrix4x2fv 1152 | #define glProgramUniformMatrix4x3dv gl3wProcs.gl.ProgramUniformMatrix4x3dv 1153 | #define glProgramUniformMatrix4x3fv gl3wProcs.gl.ProgramUniformMatrix4x3fv 1154 | #define glProvokingVertex gl3wProcs.gl.ProvokingVertex 1155 | #define glPushDebugGroup gl3wProcs.gl.PushDebugGroup 1156 | #define glQueryCounter gl3wProcs.gl.QueryCounter 1157 | #define glReadBuffer gl3wProcs.gl.ReadBuffer 1158 | #define glReadPixels gl3wProcs.gl.ReadPixels 1159 | #define glReadnPixels gl3wProcs.gl.ReadnPixels 1160 | #define glReleaseShaderCompiler gl3wProcs.gl.ReleaseShaderCompiler 1161 | #define glRenderbufferStorage gl3wProcs.gl.RenderbufferStorage 1162 | #define glRenderbufferStorageMultisample gl3wProcs.gl.RenderbufferStorageMultisample 1163 | #define glResumeTransformFeedback gl3wProcs.gl.ResumeTransformFeedback 1164 | #define glSampleCoverage gl3wProcs.gl.SampleCoverage 1165 | #define glSampleMaski gl3wProcs.gl.SampleMaski 1166 | #define glSamplerParameterIiv gl3wProcs.gl.SamplerParameterIiv 1167 | #define glSamplerParameterIuiv gl3wProcs.gl.SamplerParameterIuiv 1168 | #define glSamplerParameterf gl3wProcs.gl.SamplerParameterf 1169 | #define glSamplerParameterfv gl3wProcs.gl.SamplerParameterfv 1170 | #define glSamplerParameteri gl3wProcs.gl.SamplerParameteri 1171 | #define glSamplerParameteriv gl3wProcs.gl.SamplerParameteriv 1172 | #define glScissor gl3wProcs.gl.Scissor 1173 | #define glScissorArrayv gl3wProcs.gl.ScissorArrayv 1174 | #define glScissorIndexed gl3wProcs.gl.ScissorIndexed 1175 | #define glScissorIndexedv gl3wProcs.gl.ScissorIndexedv 1176 | #define glShaderBinary gl3wProcs.gl.ShaderBinary 1177 | #define glShaderSource gl3wProcs.gl.ShaderSource 1178 | #define glShaderStorageBlockBinding gl3wProcs.gl.ShaderStorageBlockBinding 1179 | #define glSpecializeShader gl3wProcs.gl.SpecializeShader 1180 | #define glStencilFunc gl3wProcs.gl.StencilFunc 1181 | #define glStencilFuncSeparate gl3wProcs.gl.StencilFuncSeparate 1182 | #define glStencilMask gl3wProcs.gl.StencilMask 1183 | #define glStencilMaskSeparate gl3wProcs.gl.StencilMaskSeparate 1184 | #define glStencilOp gl3wProcs.gl.StencilOp 1185 | #define glStencilOpSeparate gl3wProcs.gl.StencilOpSeparate 1186 | #define glTexBuffer gl3wProcs.gl.TexBuffer 1187 | #define glTexBufferRange gl3wProcs.gl.TexBufferRange 1188 | #define glTexImage1D gl3wProcs.gl.TexImage1D 1189 | #define glTexImage2D gl3wProcs.gl.TexImage2D 1190 | #define glTexImage2DMultisample gl3wProcs.gl.TexImage2DMultisample 1191 | #define glTexImage3D gl3wProcs.gl.TexImage3D 1192 | #define glTexImage3DMultisample gl3wProcs.gl.TexImage3DMultisample 1193 | #define glTexParameterIiv gl3wProcs.gl.TexParameterIiv 1194 | #define glTexParameterIuiv gl3wProcs.gl.TexParameterIuiv 1195 | #define glTexParameterf gl3wProcs.gl.TexParameterf 1196 | #define glTexParameterfv gl3wProcs.gl.TexParameterfv 1197 | #define glTexParameteri gl3wProcs.gl.TexParameteri 1198 | #define glTexParameteriv gl3wProcs.gl.TexParameteriv 1199 | #define glTexStorage1D gl3wProcs.gl.TexStorage1D 1200 | #define glTexStorage2D gl3wProcs.gl.TexStorage2D 1201 | #define glTexStorage2DMultisample gl3wProcs.gl.TexStorage2DMultisample 1202 | #define glTexStorage3D gl3wProcs.gl.TexStorage3D 1203 | #define glTexStorage3DMultisample gl3wProcs.gl.TexStorage3DMultisample 1204 | #define glTexSubImage1D gl3wProcs.gl.TexSubImage1D 1205 | #define glTexSubImage2D gl3wProcs.gl.TexSubImage2D 1206 | #define glTexSubImage3D gl3wProcs.gl.TexSubImage3D 1207 | #define glTextureBarrier gl3wProcs.gl.TextureBarrier 1208 | #define glTextureBuffer gl3wProcs.gl.TextureBuffer 1209 | #define glTextureBufferRange gl3wProcs.gl.TextureBufferRange 1210 | #define glTextureParameterIiv gl3wProcs.gl.TextureParameterIiv 1211 | #define glTextureParameterIuiv gl3wProcs.gl.TextureParameterIuiv 1212 | #define glTextureParameterf gl3wProcs.gl.TextureParameterf 1213 | #define glTextureParameterfv gl3wProcs.gl.TextureParameterfv 1214 | #define glTextureParameteri gl3wProcs.gl.TextureParameteri 1215 | #define glTextureParameteriv gl3wProcs.gl.TextureParameteriv 1216 | #define glTextureStorage1D gl3wProcs.gl.TextureStorage1D 1217 | #define glTextureStorage2D gl3wProcs.gl.TextureStorage2D 1218 | #define glTextureStorage2DMultisample gl3wProcs.gl.TextureStorage2DMultisample 1219 | #define glTextureStorage3D gl3wProcs.gl.TextureStorage3D 1220 | #define glTextureStorage3DMultisample gl3wProcs.gl.TextureStorage3DMultisample 1221 | #define glTextureSubImage1D gl3wProcs.gl.TextureSubImage1D 1222 | #define glTextureSubImage2D gl3wProcs.gl.TextureSubImage2D 1223 | #define glTextureSubImage3D gl3wProcs.gl.TextureSubImage3D 1224 | #define glTextureView gl3wProcs.gl.TextureView 1225 | #define glTransformFeedbackBufferBase gl3wProcs.gl.TransformFeedbackBufferBase 1226 | #define glTransformFeedbackBufferRange gl3wProcs.gl.TransformFeedbackBufferRange 1227 | #define glTransformFeedbackVaryings gl3wProcs.gl.TransformFeedbackVaryings 1228 | #define glUniform1d gl3wProcs.gl.Uniform1d 1229 | #define glUniform1dv gl3wProcs.gl.Uniform1dv 1230 | #define glUniform1f gl3wProcs.gl.Uniform1f 1231 | #define glUniform1fv gl3wProcs.gl.Uniform1fv 1232 | #define glUniform1i gl3wProcs.gl.Uniform1i 1233 | #define glUniform1iv gl3wProcs.gl.Uniform1iv 1234 | #define glUniform1ui gl3wProcs.gl.Uniform1ui 1235 | #define glUniform1uiv gl3wProcs.gl.Uniform1uiv 1236 | #define glUniform2d gl3wProcs.gl.Uniform2d 1237 | #define glUniform2dv gl3wProcs.gl.Uniform2dv 1238 | #define glUniform2f gl3wProcs.gl.Uniform2f 1239 | #define glUniform2fv gl3wProcs.gl.Uniform2fv 1240 | #define glUniform2i gl3wProcs.gl.Uniform2i 1241 | #define glUniform2iv gl3wProcs.gl.Uniform2iv 1242 | #define glUniform2ui gl3wProcs.gl.Uniform2ui 1243 | #define glUniform2uiv gl3wProcs.gl.Uniform2uiv 1244 | #define glUniform3d gl3wProcs.gl.Uniform3d 1245 | #define glUniform3dv gl3wProcs.gl.Uniform3dv 1246 | #define glUniform3f gl3wProcs.gl.Uniform3f 1247 | #define glUniform3fv gl3wProcs.gl.Uniform3fv 1248 | #define glUniform3i gl3wProcs.gl.Uniform3i 1249 | #define glUniform3iv gl3wProcs.gl.Uniform3iv 1250 | #define glUniform3ui gl3wProcs.gl.Uniform3ui 1251 | #define glUniform3uiv gl3wProcs.gl.Uniform3uiv 1252 | #define glUniform4d gl3wProcs.gl.Uniform4d 1253 | #define glUniform4dv gl3wProcs.gl.Uniform4dv 1254 | #define glUniform4f gl3wProcs.gl.Uniform4f 1255 | #define glUniform4fv gl3wProcs.gl.Uniform4fv 1256 | #define glUniform4i gl3wProcs.gl.Uniform4i 1257 | #define glUniform4iv gl3wProcs.gl.Uniform4iv 1258 | #define glUniform4ui gl3wProcs.gl.Uniform4ui 1259 | #define glUniform4uiv gl3wProcs.gl.Uniform4uiv 1260 | #define glUniformBlockBinding gl3wProcs.gl.UniformBlockBinding 1261 | #define glUniformMatrix2dv gl3wProcs.gl.UniformMatrix2dv 1262 | #define glUniformMatrix2fv gl3wProcs.gl.UniformMatrix2fv 1263 | #define glUniformMatrix2x3dv gl3wProcs.gl.UniformMatrix2x3dv 1264 | #define glUniformMatrix2x3fv gl3wProcs.gl.UniformMatrix2x3fv 1265 | #define glUniformMatrix2x4dv gl3wProcs.gl.UniformMatrix2x4dv 1266 | #define glUniformMatrix2x4fv gl3wProcs.gl.UniformMatrix2x4fv 1267 | #define glUniformMatrix3dv gl3wProcs.gl.UniformMatrix3dv 1268 | #define glUniformMatrix3fv gl3wProcs.gl.UniformMatrix3fv 1269 | #define glUniformMatrix3x2dv gl3wProcs.gl.UniformMatrix3x2dv 1270 | #define glUniformMatrix3x2fv gl3wProcs.gl.UniformMatrix3x2fv 1271 | #define glUniformMatrix3x4dv gl3wProcs.gl.UniformMatrix3x4dv 1272 | #define glUniformMatrix3x4fv gl3wProcs.gl.UniformMatrix3x4fv 1273 | #define glUniformMatrix4dv gl3wProcs.gl.UniformMatrix4dv 1274 | #define glUniformMatrix4fv gl3wProcs.gl.UniformMatrix4fv 1275 | #define glUniformMatrix4x2dv gl3wProcs.gl.UniformMatrix4x2dv 1276 | #define glUniformMatrix4x2fv gl3wProcs.gl.UniformMatrix4x2fv 1277 | #define glUniformMatrix4x3dv gl3wProcs.gl.UniformMatrix4x3dv 1278 | #define glUniformMatrix4x3fv gl3wProcs.gl.UniformMatrix4x3fv 1279 | #define glUniformSubroutinesuiv gl3wProcs.gl.UniformSubroutinesuiv 1280 | #define glUnmapBuffer gl3wProcs.gl.UnmapBuffer 1281 | #define glUnmapNamedBuffer gl3wProcs.gl.UnmapNamedBuffer 1282 | #define glUseProgram gl3wProcs.gl.UseProgram 1283 | #define glUseProgramStages gl3wProcs.gl.UseProgramStages 1284 | #define glValidateProgram gl3wProcs.gl.ValidateProgram 1285 | #define glValidateProgramPipeline gl3wProcs.gl.ValidateProgramPipeline 1286 | #define glVertexArrayAttribBinding gl3wProcs.gl.VertexArrayAttribBinding 1287 | #define glVertexArrayAttribFormat gl3wProcs.gl.VertexArrayAttribFormat 1288 | #define glVertexArrayAttribIFormat gl3wProcs.gl.VertexArrayAttribIFormat 1289 | #define glVertexArrayAttribLFormat gl3wProcs.gl.VertexArrayAttribLFormat 1290 | #define glVertexArrayBindingDivisor gl3wProcs.gl.VertexArrayBindingDivisor 1291 | #define glVertexArrayElementBuffer gl3wProcs.gl.VertexArrayElementBuffer 1292 | #define glVertexArrayVertexBuffer gl3wProcs.gl.VertexArrayVertexBuffer 1293 | #define glVertexArrayVertexBuffers gl3wProcs.gl.VertexArrayVertexBuffers 1294 | #define glVertexAttrib1d gl3wProcs.gl.VertexAttrib1d 1295 | #define glVertexAttrib1dv gl3wProcs.gl.VertexAttrib1dv 1296 | #define glVertexAttrib1f gl3wProcs.gl.VertexAttrib1f 1297 | #define glVertexAttrib1fv gl3wProcs.gl.VertexAttrib1fv 1298 | #define glVertexAttrib1s gl3wProcs.gl.VertexAttrib1s 1299 | #define glVertexAttrib1sv gl3wProcs.gl.VertexAttrib1sv 1300 | #define glVertexAttrib2d gl3wProcs.gl.VertexAttrib2d 1301 | #define glVertexAttrib2dv gl3wProcs.gl.VertexAttrib2dv 1302 | #define glVertexAttrib2f gl3wProcs.gl.VertexAttrib2f 1303 | #define glVertexAttrib2fv gl3wProcs.gl.VertexAttrib2fv 1304 | #define glVertexAttrib2s gl3wProcs.gl.VertexAttrib2s 1305 | #define glVertexAttrib2sv gl3wProcs.gl.VertexAttrib2sv 1306 | #define glVertexAttrib3d gl3wProcs.gl.VertexAttrib3d 1307 | #define glVertexAttrib3dv gl3wProcs.gl.VertexAttrib3dv 1308 | #define glVertexAttrib3f gl3wProcs.gl.VertexAttrib3f 1309 | #define glVertexAttrib3fv gl3wProcs.gl.VertexAttrib3fv 1310 | #define glVertexAttrib3s gl3wProcs.gl.VertexAttrib3s 1311 | #define glVertexAttrib3sv gl3wProcs.gl.VertexAttrib3sv 1312 | #define glVertexAttrib4Nbv gl3wProcs.gl.VertexAttrib4Nbv 1313 | #define glVertexAttrib4Niv gl3wProcs.gl.VertexAttrib4Niv 1314 | #define glVertexAttrib4Nsv gl3wProcs.gl.VertexAttrib4Nsv 1315 | #define glVertexAttrib4Nub gl3wProcs.gl.VertexAttrib4Nub 1316 | #define glVertexAttrib4Nubv gl3wProcs.gl.VertexAttrib4Nubv 1317 | #define glVertexAttrib4Nuiv gl3wProcs.gl.VertexAttrib4Nuiv 1318 | #define glVertexAttrib4Nusv gl3wProcs.gl.VertexAttrib4Nusv 1319 | #define glVertexAttrib4bv gl3wProcs.gl.VertexAttrib4bv 1320 | #define glVertexAttrib4d gl3wProcs.gl.VertexAttrib4d 1321 | #define glVertexAttrib4dv gl3wProcs.gl.VertexAttrib4dv 1322 | #define glVertexAttrib4f gl3wProcs.gl.VertexAttrib4f 1323 | #define glVertexAttrib4fv gl3wProcs.gl.VertexAttrib4fv 1324 | #define glVertexAttrib4iv gl3wProcs.gl.VertexAttrib4iv 1325 | #define glVertexAttrib4s gl3wProcs.gl.VertexAttrib4s 1326 | #define glVertexAttrib4sv gl3wProcs.gl.VertexAttrib4sv 1327 | #define glVertexAttrib4ubv gl3wProcs.gl.VertexAttrib4ubv 1328 | #define glVertexAttrib4uiv gl3wProcs.gl.VertexAttrib4uiv 1329 | #define glVertexAttrib4usv gl3wProcs.gl.VertexAttrib4usv 1330 | #define glVertexAttribBinding gl3wProcs.gl.VertexAttribBinding 1331 | #define glVertexAttribDivisor gl3wProcs.gl.VertexAttribDivisor 1332 | #define glVertexAttribFormat gl3wProcs.gl.VertexAttribFormat 1333 | #define glVertexAttribI1i gl3wProcs.gl.VertexAttribI1i 1334 | #define glVertexAttribI1iv gl3wProcs.gl.VertexAttribI1iv 1335 | #define glVertexAttribI1ui gl3wProcs.gl.VertexAttribI1ui 1336 | #define glVertexAttribI1uiv gl3wProcs.gl.VertexAttribI1uiv 1337 | #define glVertexAttribI2i gl3wProcs.gl.VertexAttribI2i 1338 | #define glVertexAttribI2iv gl3wProcs.gl.VertexAttribI2iv 1339 | #define glVertexAttribI2ui gl3wProcs.gl.VertexAttribI2ui 1340 | #define glVertexAttribI2uiv gl3wProcs.gl.VertexAttribI2uiv 1341 | #define glVertexAttribI3i gl3wProcs.gl.VertexAttribI3i 1342 | #define glVertexAttribI3iv gl3wProcs.gl.VertexAttribI3iv 1343 | #define glVertexAttribI3ui gl3wProcs.gl.VertexAttribI3ui 1344 | #define glVertexAttribI3uiv gl3wProcs.gl.VertexAttribI3uiv 1345 | #define glVertexAttribI4bv gl3wProcs.gl.VertexAttribI4bv 1346 | #define glVertexAttribI4i gl3wProcs.gl.VertexAttribI4i 1347 | #define glVertexAttribI4iv gl3wProcs.gl.VertexAttribI4iv 1348 | #define glVertexAttribI4sv gl3wProcs.gl.VertexAttribI4sv 1349 | #define glVertexAttribI4ubv gl3wProcs.gl.VertexAttribI4ubv 1350 | #define glVertexAttribI4ui gl3wProcs.gl.VertexAttribI4ui 1351 | #define glVertexAttribI4uiv gl3wProcs.gl.VertexAttribI4uiv 1352 | #define glVertexAttribI4usv gl3wProcs.gl.VertexAttribI4usv 1353 | #define glVertexAttribIFormat gl3wProcs.gl.VertexAttribIFormat 1354 | #define glVertexAttribIPointer gl3wProcs.gl.VertexAttribIPointer 1355 | #define glVertexAttribL1d gl3wProcs.gl.VertexAttribL1d 1356 | #define glVertexAttribL1dv gl3wProcs.gl.VertexAttribL1dv 1357 | #define glVertexAttribL2d gl3wProcs.gl.VertexAttribL2d 1358 | #define glVertexAttribL2dv gl3wProcs.gl.VertexAttribL2dv 1359 | #define glVertexAttribL3d gl3wProcs.gl.VertexAttribL3d 1360 | #define glVertexAttribL3dv gl3wProcs.gl.VertexAttribL3dv 1361 | #define glVertexAttribL4d gl3wProcs.gl.VertexAttribL4d 1362 | #define glVertexAttribL4dv gl3wProcs.gl.VertexAttribL4dv 1363 | #define glVertexAttribLFormat gl3wProcs.gl.VertexAttribLFormat 1364 | #define glVertexAttribLPointer gl3wProcs.gl.VertexAttribLPointer 1365 | #define glVertexAttribP1ui gl3wProcs.gl.VertexAttribP1ui 1366 | #define glVertexAttribP1uiv gl3wProcs.gl.VertexAttribP1uiv 1367 | #define glVertexAttribP2ui gl3wProcs.gl.VertexAttribP2ui 1368 | #define glVertexAttribP2uiv gl3wProcs.gl.VertexAttribP2uiv 1369 | #define glVertexAttribP3ui gl3wProcs.gl.VertexAttribP3ui 1370 | #define glVertexAttribP3uiv gl3wProcs.gl.VertexAttribP3uiv 1371 | #define glVertexAttribP4ui gl3wProcs.gl.VertexAttribP4ui 1372 | #define glVertexAttribP4uiv gl3wProcs.gl.VertexAttribP4uiv 1373 | #define glVertexAttribPointer gl3wProcs.gl.VertexAttribPointer 1374 | #define glVertexBindingDivisor gl3wProcs.gl.VertexBindingDivisor 1375 | #define glViewport gl3wProcs.gl.Viewport 1376 | #define glViewportArrayv gl3wProcs.gl.ViewportArrayv 1377 | #define glViewportIndexedf gl3wProcs.gl.ViewportIndexedf 1378 | #define glViewportIndexedfv gl3wProcs.gl.ViewportIndexedfv 1379 | #define glWaitSync gl3wProcs.gl.WaitSync 1380 | 1381 | #ifdef __cplusplus 1382 | } 1383 | #endif 1384 | 1385 | #endif 1386 | -------------------------------------------------------------------------------- /external/gl3w/include/KHR/khrplatform.h: -------------------------------------------------------------------------------- 1 | #ifndef __khrplatform_h_ 2 | #define __khrplatform_h_ 3 | 4 | /* 5 | ** Copyright (c) 2008-2018 The Khronos Group Inc. 6 | ** 7 | ** Permission is hereby granted, free of charge, to any person obtaining a 8 | ** copy of this software and/or associated documentation files (the 9 | ** "Materials"), to deal in the Materials without restriction, including 10 | ** without limitation the rights to use, copy, modify, merge, publish, 11 | ** distribute, sublicense, and/or sell copies of the Materials, and to 12 | ** permit persons to whom the Materials are furnished to do so, subject to 13 | ** the following conditions: 14 | ** 15 | ** The above copyright notice and this permission notice shall be included 16 | ** in all copies or substantial portions of the Materials. 17 | ** 18 | ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 | ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 25 | */ 26 | 27 | /* Khronos platform-specific types and definitions. 28 | * 29 | * The master copy of khrplatform.h is maintained in the Khronos EGL 30 | * Registry repository at https://github.com/KhronosGroup/EGL-Registry 31 | * The last semantic modification to khrplatform.h was at commit ID: 32 | * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 33 | * 34 | * Adopters may modify this file to suit their platform. Adopters are 35 | * encouraged to submit platform specific modifications to the Khronos 36 | * group so that they can be included in future versions of this file. 37 | * Please submit changes by filing pull requests or issues on 38 | * the EGL Registry repository linked above. 39 | * 40 | * 41 | * See the Implementer's Guidelines for information about where this file 42 | * should be located on your system and for more details of its use: 43 | * http://www.khronos.org/registry/implementers_guide.pdf 44 | * 45 | * This file should be included as 46 | * #include 47 | * by Khronos client API header files that use its types and defines. 48 | * 49 | * The types in khrplatform.h should only be used to define API-specific types. 50 | * 51 | * Types defined in khrplatform.h: 52 | * khronos_int8_t signed 8 bit 53 | * khronos_uint8_t unsigned 8 bit 54 | * khronos_int16_t signed 16 bit 55 | * khronos_uint16_t unsigned 16 bit 56 | * khronos_int32_t signed 32 bit 57 | * khronos_uint32_t unsigned 32 bit 58 | * khronos_int64_t signed 64 bit 59 | * khronos_uint64_t unsigned 64 bit 60 | * khronos_intptr_t signed same number of bits as a pointer 61 | * khronos_uintptr_t unsigned same number of bits as a pointer 62 | * khronos_ssize_t signed size 63 | * khronos_usize_t unsigned size 64 | * khronos_float_t signed 32 bit floating point 65 | * khronos_time_ns_t unsigned 64 bit time in nanoseconds 66 | * khronos_utime_nanoseconds_t unsigned time interval or absolute time in 67 | * nanoseconds 68 | * khronos_stime_nanoseconds_t signed time interval in nanoseconds 69 | * khronos_boolean_enum_t enumerated boolean type. This should 70 | * only be used as a base type when a client API's boolean type is 71 | * an enum. Client APIs which use an integer or other type for 72 | * booleans cannot use this as the base type for their boolean. 73 | * 74 | * Tokens defined in khrplatform.h: 75 | * 76 | * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. 77 | * 78 | * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. 79 | * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. 80 | * 81 | * Calling convention macros defined in this file: 82 | * KHRONOS_APICALL 83 | * KHRONOS_APIENTRY 84 | * KHRONOS_APIATTRIBUTES 85 | * 86 | * These may be used in function prototypes as: 87 | * 88 | * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( 89 | * int arg1, 90 | * int arg2) KHRONOS_APIATTRIBUTES; 91 | */ 92 | 93 | /*------------------------------------------------------------------------- 94 | * Definition of KHRONOS_APICALL 95 | *------------------------------------------------------------------------- 96 | * This precedes the return type of the function in the function prototype. 97 | */ 98 | #if defined(_WIN32) && !defined(__SCITECH_SNAP__) 99 | # define KHRONOS_APICALL __declspec(dllimport) 100 | #elif defined (__SYMBIAN32__) 101 | # define KHRONOS_APICALL IMPORT_C 102 | #elif defined(__ANDROID__) 103 | # define KHRONOS_APICALL __attribute__((visibility("default"))) 104 | #else 105 | # define KHRONOS_APICALL 106 | #endif 107 | 108 | /*------------------------------------------------------------------------- 109 | * Definition of KHRONOS_APIENTRY 110 | *------------------------------------------------------------------------- 111 | * This follows the return type of the function and precedes the function 112 | * name in the function prototype. 113 | */ 114 | #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) 115 | /* Win32 but not WinCE */ 116 | # define KHRONOS_APIENTRY __stdcall 117 | #else 118 | # define KHRONOS_APIENTRY 119 | #endif 120 | 121 | /*------------------------------------------------------------------------- 122 | * Definition of KHRONOS_APIATTRIBUTES 123 | *------------------------------------------------------------------------- 124 | * This follows the closing parenthesis of the function prototype arguments. 125 | */ 126 | #if defined (__ARMCC_2__) 127 | #define KHRONOS_APIATTRIBUTES __softfp 128 | #else 129 | #define KHRONOS_APIATTRIBUTES 130 | #endif 131 | 132 | /*------------------------------------------------------------------------- 133 | * basic type definitions 134 | *-----------------------------------------------------------------------*/ 135 | #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) 136 | 137 | 138 | /* 139 | * Using 140 | */ 141 | #include 142 | typedef int32_t khronos_int32_t; 143 | typedef uint32_t khronos_uint32_t; 144 | typedef int64_t khronos_int64_t; 145 | typedef uint64_t khronos_uint64_t; 146 | #define KHRONOS_SUPPORT_INT64 1 147 | #define KHRONOS_SUPPORT_FLOAT 1 148 | 149 | #elif defined(__VMS ) || defined(__sgi) 150 | 151 | /* 152 | * Using 153 | */ 154 | #include 155 | typedef int32_t khronos_int32_t; 156 | typedef uint32_t khronos_uint32_t; 157 | typedef int64_t khronos_int64_t; 158 | typedef uint64_t khronos_uint64_t; 159 | #define KHRONOS_SUPPORT_INT64 1 160 | #define KHRONOS_SUPPORT_FLOAT 1 161 | 162 | #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) 163 | 164 | /* 165 | * Win32 166 | */ 167 | typedef __int32 khronos_int32_t; 168 | typedef unsigned __int32 khronos_uint32_t; 169 | typedef __int64 khronos_int64_t; 170 | typedef unsigned __int64 khronos_uint64_t; 171 | #define KHRONOS_SUPPORT_INT64 1 172 | #define KHRONOS_SUPPORT_FLOAT 1 173 | 174 | #elif defined(__sun__) || defined(__digital__) 175 | 176 | /* 177 | * Sun or Digital 178 | */ 179 | typedef int khronos_int32_t; 180 | typedef unsigned int khronos_uint32_t; 181 | #if defined(__arch64__) || defined(_LP64) 182 | typedef long int khronos_int64_t; 183 | typedef unsigned long int khronos_uint64_t; 184 | #else 185 | typedef long long int khronos_int64_t; 186 | typedef unsigned long long int khronos_uint64_t; 187 | #endif /* __arch64__ */ 188 | #define KHRONOS_SUPPORT_INT64 1 189 | #define KHRONOS_SUPPORT_FLOAT 1 190 | 191 | #elif 0 192 | 193 | /* 194 | * Hypothetical platform with no float or int64 support 195 | */ 196 | typedef int khronos_int32_t; 197 | typedef unsigned int khronos_uint32_t; 198 | #define KHRONOS_SUPPORT_INT64 0 199 | #define KHRONOS_SUPPORT_FLOAT 0 200 | 201 | #else 202 | 203 | /* 204 | * Generic fallback 205 | */ 206 | #include 207 | typedef int32_t khronos_int32_t; 208 | typedef uint32_t khronos_uint32_t; 209 | typedef int64_t khronos_int64_t; 210 | typedef uint64_t khronos_uint64_t; 211 | #define KHRONOS_SUPPORT_INT64 1 212 | #define KHRONOS_SUPPORT_FLOAT 1 213 | 214 | #endif 215 | 216 | 217 | /* 218 | * Types that are (so far) the same on all platforms 219 | */ 220 | typedef signed char khronos_int8_t; 221 | typedef unsigned char khronos_uint8_t; 222 | typedef signed short int khronos_int16_t; 223 | typedef unsigned short int khronos_uint16_t; 224 | 225 | /* 226 | * Types that differ between LLP64 and LP64 architectures - in LLP64, 227 | * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears 228 | * to be the only LLP64 architecture in current use. 229 | */ 230 | #ifdef _WIN64 231 | typedef signed long long int khronos_intptr_t; 232 | typedef unsigned long long int khronos_uintptr_t; 233 | typedef signed long long int khronos_ssize_t; 234 | typedef unsigned long long int khronos_usize_t; 235 | #else 236 | typedef signed long int khronos_intptr_t; 237 | typedef unsigned long int khronos_uintptr_t; 238 | typedef signed long int khronos_ssize_t; 239 | typedef unsigned long int khronos_usize_t; 240 | #endif 241 | 242 | #if KHRONOS_SUPPORT_FLOAT 243 | /* 244 | * Float type 245 | */ 246 | typedef float khronos_float_t; 247 | #endif 248 | 249 | #if KHRONOS_SUPPORT_INT64 250 | /* Time types 251 | * 252 | * These types can be used to represent a time interval in nanoseconds or 253 | * an absolute Unadjusted System Time. Unadjusted System Time is the number 254 | * of nanoseconds since some arbitrary system event (e.g. since the last 255 | * time the system booted). The Unadjusted System Time is an unsigned 256 | * 64 bit value that wraps back to 0 every 584 years. Time intervals 257 | * may be either signed or unsigned. 258 | */ 259 | typedef khronos_uint64_t khronos_utime_nanoseconds_t; 260 | typedef khronos_int64_t khronos_stime_nanoseconds_t; 261 | #endif 262 | 263 | /* 264 | * Dummy value used to pad enum types to 32 bits. 265 | */ 266 | #ifndef KHRONOS_MAX_ENUM 267 | #define KHRONOS_MAX_ENUM 0x7FFFFFFF 268 | #endif 269 | 270 | /* 271 | * Enumerated boolean type 272 | * 273 | * Values other than zero should be considered to be true. Therefore 274 | * comparisons should not be made against KHRONOS_TRUE. 275 | */ 276 | typedef enum { 277 | KHRONOS_FALSE = 0, 278 | KHRONOS_TRUE = 1, 279 | KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM 280 | } khronos_boolean_enum_t; 281 | 282 | #endif /* __khrplatform_h_ */ 283 | -------------------------------------------------------------------------------- /external/gl3w/src/gl3w.c: -------------------------------------------------------------------------------- 1 | /* 2 | * This file was generated with gl3w_gen.py, part of gl3w 3 | * (hosted at https://github.com/skaslev/gl3w) 4 | * 5 | * This is free and unencumbered software released into the public domain. 6 | * 7 | * Anyone is free to copy, modify, publish, use, compile, sell, or 8 | * distribute this software, either in source code form or as a compiled 9 | * binary, for any purpose, commercial or non-commercial, and by any 10 | * means. 11 | * 12 | * In jurisdictions that recognize copyright laws, the author or authors 13 | * of this software dedicate any and all copyright interest in the 14 | * software to the public domain. We make this dedication for the benefit 15 | * of the public at large and to the detriment of our heirs and 16 | * successors. We intend this dedication to be an overt act of 17 | * relinquishment in perpetuity of all present and future rights to this 18 | * software under copyright law. 19 | * 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23 | * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 24 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 25 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | * OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | #include 31 | 32 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 33 | 34 | #if defined(_WIN32) 35 | #define WIN32_LEAN_AND_MEAN 1 36 | #include 37 | 38 | static HMODULE libgl; 39 | static PROC (__stdcall *wgl_get_proc_address)(LPCSTR); 40 | 41 | static int open_libgl(void) 42 | { 43 | libgl = LoadLibraryA("opengl32.dll"); 44 | if (!libgl) 45 | return GL3W_ERROR_LIBRARY_OPEN; 46 | 47 | *(void **)(&wgl_get_proc_address) = GetProcAddress(libgl, "wglGetProcAddress"); 48 | return GL3W_OK; 49 | } 50 | 51 | static void close_libgl(void) 52 | { 53 | FreeLibrary(libgl); 54 | } 55 | 56 | static GL3WglProc get_proc(const char *proc) 57 | { 58 | GL3WglProc res; 59 | 60 | res = (GL3WglProc)wgl_get_proc_address(proc); 61 | if (!res) 62 | res = (GL3WglProc)GetProcAddress(libgl, proc); 63 | return res; 64 | } 65 | #elif defined(__APPLE__) 66 | #include 67 | 68 | static void *libgl; 69 | 70 | static int open_libgl(void) 71 | { 72 | libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL); 73 | if (!libgl) 74 | return GL3W_ERROR_LIBRARY_OPEN; 75 | 76 | return GL3W_OK; 77 | } 78 | 79 | static void close_libgl(void) 80 | { 81 | dlclose(libgl); 82 | } 83 | 84 | static GL3WglProc get_proc(const char *proc) 85 | { 86 | GL3WglProc res; 87 | 88 | *(void **)(&res) = dlsym(libgl, proc); 89 | return res; 90 | } 91 | #else 92 | #include 93 | 94 | static void *libgl; 95 | static GL3WglProc (*glx_get_proc_address)(const GLubyte *); 96 | 97 | static int open_libgl(void) 98 | { 99 | libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL); 100 | if (!libgl) 101 | return GL3W_ERROR_LIBRARY_OPEN; 102 | 103 | *(void **)(&glx_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB"); 104 | return GL3W_OK; 105 | } 106 | 107 | static void close_libgl(void) 108 | { 109 | dlclose(libgl); 110 | } 111 | 112 | static GL3WglProc get_proc(const char *proc) 113 | { 114 | GL3WglProc res; 115 | 116 | res = glx_get_proc_address((const GLubyte *)proc); 117 | if (!res) 118 | *(void **)(&res) = dlsym(libgl, proc); 119 | return res; 120 | } 121 | #endif 122 | 123 | static struct { 124 | int major, minor; 125 | } version; 126 | 127 | static int parse_version(void) 128 | { 129 | if (!glGetIntegerv) 130 | return GL3W_ERROR_INIT; 131 | 132 | glGetIntegerv(GL_MAJOR_VERSION, &version.major); 133 | glGetIntegerv(GL_MINOR_VERSION, &version.minor); 134 | 135 | if (version.major < 3) 136 | return GL3W_ERROR_OPENGL_VERSION; 137 | return GL3W_OK; 138 | } 139 | 140 | static void load_procs(GL3WGetProcAddressProc proc); 141 | 142 | int gl3wInit(void) 143 | { 144 | int res; 145 | 146 | res = open_libgl(); 147 | if (res) 148 | return res; 149 | 150 | atexit(close_libgl); 151 | return gl3wInit2(get_proc); 152 | } 153 | 154 | int gl3wInit2(GL3WGetProcAddressProc proc) 155 | { 156 | load_procs(proc); 157 | return parse_version(); 158 | } 159 | 160 | int gl3wIsSupported(int major, int minor) 161 | { 162 | if (major < 3) 163 | return 0; 164 | if (version.major == major) 165 | return version.minor >= minor; 166 | return version.major >= major; 167 | } 168 | 169 | GL3WglProc gl3wGetProcAddress(const char *proc) 170 | { 171 | return get_proc(proc); 172 | } 173 | 174 | static const char *proc_names[] = { 175 | "glActiveShaderProgram", 176 | "glActiveTexture", 177 | "glAttachShader", 178 | "glBeginConditionalRender", 179 | "glBeginQuery", 180 | "glBeginQueryIndexed", 181 | "glBeginTransformFeedback", 182 | "glBindAttribLocation", 183 | "glBindBuffer", 184 | "glBindBufferBase", 185 | "glBindBufferRange", 186 | "glBindBuffersBase", 187 | "glBindBuffersRange", 188 | "glBindFragDataLocation", 189 | "glBindFragDataLocationIndexed", 190 | "glBindFramebuffer", 191 | "glBindImageTexture", 192 | "glBindImageTextures", 193 | "glBindProgramPipeline", 194 | "glBindRenderbuffer", 195 | "glBindSampler", 196 | "glBindSamplers", 197 | "glBindTexture", 198 | "glBindTextureUnit", 199 | "glBindTextures", 200 | "glBindTransformFeedback", 201 | "glBindVertexArray", 202 | "glBindVertexBuffer", 203 | "glBindVertexBuffers", 204 | "glBlendColor", 205 | "glBlendEquation", 206 | "glBlendEquationSeparate", 207 | "glBlendEquationSeparatei", 208 | "glBlendEquationi", 209 | "glBlendFunc", 210 | "glBlendFuncSeparate", 211 | "glBlendFuncSeparatei", 212 | "glBlendFunci", 213 | "glBlitFramebuffer", 214 | "glBlitNamedFramebuffer", 215 | "glBufferData", 216 | "glBufferStorage", 217 | "glBufferSubData", 218 | "glCheckFramebufferStatus", 219 | "glCheckNamedFramebufferStatus", 220 | "glClampColor", 221 | "glClear", 222 | "glClearBufferData", 223 | "glClearBufferSubData", 224 | "glClearBufferfi", 225 | "glClearBufferfv", 226 | "glClearBufferiv", 227 | "glClearBufferuiv", 228 | "glClearColor", 229 | "glClearDepth", 230 | "glClearDepthf", 231 | "glClearNamedBufferData", 232 | "glClearNamedBufferSubData", 233 | "glClearNamedFramebufferfi", 234 | "glClearNamedFramebufferfv", 235 | "glClearNamedFramebufferiv", 236 | "glClearNamedFramebufferuiv", 237 | "glClearStencil", 238 | "glClearTexImage", 239 | "glClearTexSubImage", 240 | "glClientWaitSync", 241 | "glClipControl", 242 | "glColorMask", 243 | "glColorMaski", 244 | "glCompileShader", 245 | "glCompressedTexImage1D", 246 | "glCompressedTexImage2D", 247 | "glCompressedTexImage3D", 248 | "glCompressedTexSubImage1D", 249 | "glCompressedTexSubImage2D", 250 | "glCompressedTexSubImage3D", 251 | "glCompressedTextureSubImage1D", 252 | "glCompressedTextureSubImage2D", 253 | "glCompressedTextureSubImage3D", 254 | "glCopyBufferSubData", 255 | "glCopyImageSubData", 256 | "glCopyNamedBufferSubData", 257 | "glCopyTexImage1D", 258 | "glCopyTexImage2D", 259 | "glCopyTexSubImage1D", 260 | "glCopyTexSubImage2D", 261 | "glCopyTexSubImage3D", 262 | "glCopyTextureSubImage1D", 263 | "glCopyTextureSubImage2D", 264 | "glCopyTextureSubImage3D", 265 | "glCreateBuffers", 266 | "glCreateFramebuffers", 267 | "glCreateProgram", 268 | "glCreateProgramPipelines", 269 | "glCreateQueries", 270 | "glCreateRenderbuffers", 271 | "glCreateSamplers", 272 | "glCreateShader", 273 | "glCreateShaderProgramv", 274 | "glCreateTextures", 275 | "glCreateTransformFeedbacks", 276 | "glCreateVertexArrays", 277 | "glCullFace", 278 | "glDebugMessageCallback", 279 | "glDebugMessageControl", 280 | "glDebugMessageInsert", 281 | "glDeleteBuffers", 282 | "glDeleteFramebuffers", 283 | "glDeleteProgram", 284 | "glDeleteProgramPipelines", 285 | "glDeleteQueries", 286 | "glDeleteRenderbuffers", 287 | "glDeleteSamplers", 288 | "glDeleteShader", 289 | "glDeleteSync", 290 | "glDeleteTextures", 291 | "glDeleteTransformFeedbacks", 292 | "glDeleteVertexArrays", 293 | "glDepthFunc", 294 | "glDepthMask", 295 | "glDepthRange", 296 | "glDepthRangeArrayv", 297 | "glDepthRangeIndexed", 298 | "glDepthRangef", 299 | "glDetachShader", 300 | "glDisable", 301 | "glDisableVertexArrayAttrib", 302 | "glDisableVertexAttribArray", 303 | "glDisablei", 304 | "glDispatchCompute", 305 | "glDispatchComputeIndirect", 306 | "glDrawArrays", 307 | "glDrawArraysIndirect", 308 | "glDrawArraysInstanced", 309 | "glDrawArraysInstancedBaseInstance", 310 | "glDrawBuffer", 311 | "glDrawBuffers", 312 | "glDrawElements", 313 | "glDrawElementsBaseVertex", 314 | "glDrawElementsIndirect", 315 | "glDrawElementsInstanced", 316 | "glDrawElementsInstancedBaseInstance", 317 | "glDrawElementsInstancedBaseVertex", 318 | "glDrawElementsInstancedBaseVertexBaseInstance", 319 | "glDrawRangeElements", 320 | "glDrawRangeElementsBaseVertex", 321 | "glDrawTransformFeedback", 322 | "glDrawTransformFeedbackInstanced", 323 | "glDrawTransformFeedbackStream", 324 | "glDrawTransformFeedbackStreamInstanced", 325 | "glEnable", 326 | "glEnableVertexArrayAttrib", 327 | "glEnableVertexAttribArray", 328 | "glEnablei", 329 | "glEndConditionalRender", 330 | "glEndQuery", 331 | "glEndQueryIndexed", 332 | "glEndTransformFeedback", 333 | "glFenceSync", 334 | "glFinish", 335 | "glFlush", 336 | "glFlushMappedBufferRange", 337 | "glFlushMappedNamedBufferRange", 338 | "glFramebufferParameteri", 339 | "glFramebufferRenderbuffer", 340 | "glFramebufferTexture", 341 | "glFramebufferTexture1D", 342 | "glFramebufferTexture2D", 343 | "glFramebufferTexture3D", 344 | "glFramebufferTextureLayer", 345 | "glFrontFace", 346 | "glGenBuffers", 347 | "glGenFramebuffers", 348 | "glGenProgramPipelines", 349 | "glGenQueries", 350 | "glGenRenderbuffers", 351 | "glGenSamplers", 352 | "glGenTextures", 353 | "glGenTransformFeedbacks", 354 | "glGenVertexArrays", 355 | "glGenerateMipmap", 356 | "glGenerateTextureMipmap", 357 | "glGetActiveAtomicCounterBufferiv", 358 | "glGetActiveAttrib", 359 | "glGetActiveSubroutineName", 360 | "glGetActiveSubroutineUniformName", 361 | "glGetActiveSubroutineUniformiv", 362 | "glGetActiveUniform", 363 | "glGetActiveUniformBlockName", 364 | "glGetActiveUniformBlockiv", 365 | "glGetActiveUniformName", 366 | "glGetActiveUniformsiv", 367 | "glGetAttachedShaders", 368 | "glGetAttribLocation", 369 | "glGetBooleani_v", 370 | "glGetBooleanv", 371 | "glGetBufferParameteri64v", 372 | "glGetBufferParameteriv", 373 | "glGetBufferPointerv", 374 | "glGetBufferSubData", 375 | "glGetCompressedTexImage", 376 | "glGetCompressedTextureImage", 377 | "glGetCompressedTextureSubImage", 378 | "glGetDebugMessageLog", 379 | "glGetDoublei_v", 380 | "glGetDoublev", 381 | "glGetError", 382 | "glGetFloati_v", 383 | "glGetFloatv", 384 | "glGetFragDataIndex", 385 | "glGetFragDataLocation", 386 | "glGetFramebufferAttachmentParameteriv", 387 | "glGetFramebufferParameteriv", 388 | "glGetGraphicsResetStatus", 389 | "glGetInteger64i_v", 390 | "glGetInteger64v", 391 | "glGetIntegeri_v", 392 | "glGetIntegerv", 393 | "glGetInternalformati64v", 394 | "glGetInternalformativ", 395 | "glGetMultisamplefv", 396 | "glGetNamedBufferParameteri64v", 397 | "glGetNamedBufferParameteriv", 398 | "glGetNamedBufferPointerv", 399 | "glGetNamedBufferSubData", 400 | "glGetNamedFramebufferAttachmentParameteriv", 401 | "glGetNamedFramebufferParameteriv", 402 | "glGetNamedRenderbufferParameteriv", 403 | "glGetObjectLabel", 404 | "glGetObjectPtrLabel", 405 | "glGetPointerv", 406 | "glGetProgramBinary", 407 | "glGetProgramInfoLog", 408 | "glGetProgramInterfaceiv", 409 | "glGetProgramPipelineInfoLog", 410 | "glGetProgramPipelineiv", 411 | "glGetProgramResourceIndex", 412 | "glGetProgramResourceLocation", 413 | "glGetProgramResourceLocationIndex", 414 | "glGetProgramResourceName", 415 | "glGetProgramResourceiv", 416 | "glGetProgramStageiv", 417 | "glGetProgramiv", 418 | "glGetQueryBufferObjecti64v", 419 | "glGetQueryBufferObjectiv", 420 | "glGetQueryBufferObjectui64v", 421 | "glGetQueryBufferObjectuiv", 422 | "glGetQueryIndexediv", 423 | "glGetQueryObjecti64v", 424 | "glGetQueryObjectiv", 425 | "glGetQueryObjectui64v", 426 | "glGetQueryObjectuiv", 427 | "glGetQueryiv", 428 | "glGetRenderbufferParameteriv", 429 | "glGetSamplerParameterIiv", 430 | "glGetSamplerParameterIuiv", 431 | "glGetSamplerParameterfv", 432 | "glGetSamplerParameteriv", 433 | "glGetShaderInfoLog", 434 | "glGetShaderPrecisionFormat", 435 | "glGetShaderSource", 436 | "glGetShaderiv", 437 | "glGetString", 438 | "glGetStringi", 439 | "glGetSubroutineIndex", 440 | "glGetSubroutineUniformLocation", 441 | "glGetSynciv", 442 | "glGetTexImage", 443 | "glGetTexLevelParameterfv", 444 | "glGetTexLevelParameteriv", 445 | "glGetTexParameterIiv", 446 | "glGetTexParameterIuiv", 447 | "glGetTexParameterfv", 448 | "glGetTexParameteriv", 449 | "glGetTextureImage", 450 | "glGetTextureLevelParameterfv", 451 | "glGetTextureLevelParameteriv", 452 | "glGetTextureParameterIiv", 453 | "glGetTextureParameterIuiv", 454 | "glGetTextureParameterfv", 455 | "glGetTextureParameteriv", 456 | "glGetTextureSubImage", 457 | "glGetTransformFeedbackVarying", 458 | "glGetTransformFeedbacki64_v", 459 | "glGetTransformFeedbacki_v", 460 | "glGetTransformFeedbackiv", 461 | "glGetUniformBlockIndex", 462 | "glGetUniformIndices", 463 | "glGetUniformLocation", 464 | "glGetUniformSubroutineuiv", 465 | "glGetUniformdv", 466 | "glGetUniformfv", 467 | "glGetUniformiv", 468 | "glGetUniformuiv", 469 | "glGetVertexArrayIndexed64iv", 470 | "glGetVertexArrayIndexediv", 471 | "glGetVertexArrayiv", 472 | "glGetVertexAttribIiv", 473 | "glGetVertexAttribIuiv", 474 | "glGetVertexAttribLdv", 475 | "glGetVertexAttribPointerv", 476 | "glGetVertexAttribdv", 477 | "glGetVertexAttribfv", 478 | "glGetVertexAttribiv", 479 | "glGetnCompressedTexImage", 480 | "glGetnTexImage", 481 | "glGetnUniformdv", 482 | "glGetnUniformfv", 483 | "glGetnUniformiv", 484 | "glGetnUniformuiv", 485 | "glHint", 486 | "glInvalidateBufferData", 487 | "glInvalidateBufferSubData", 488 | "glInvalidateFramebuffer", 489 | "glInvalidateNamedFramebufferData", 490 | "glInvalidateNamedFramebufferSubData", 491 | "glInvalidateSubFramebuffer", 492 | "glInvalidateTexImage", 493 | "glInvalidateTexSubImage", 494 | "glIsBuffer", 495 | "glIsEnabled", 496 | "glIsEnabledi", 497 | "glIsFramebuffer", 498 | "glIsProgram", 499 | "glIsProgramPipeline", 500 | "glIsQuery", 501 | "glIsRenderbuffer", 502 | "glIsSampler", 503 | "glIsShader", 504 | "glIsSync", 505 | "glIsTexture", 506 | "glIsTransformFeedback", 507 | "glIsVertexArray", 508 | "glLineWidth", 509 | "glLinkProgram", 510 | "glLogicOp", 511 | "glMapBuffer", 512 | "glMapBufferRange", 513 | "glMapNamedBuffer", 514 | "glMapNamedBufferRange", 515 | "glMemoryBarrier", 516 | "glMemoryBarrierByRegion", 517 | "glMinSampleShading", 518 | "glMultiDrawArrays", 519 | "glMultiDrawArraysIndirect", 520 | "glMultiDrawArraysIndirectCount", 521 | "glMultiDrawElements", 522 | "glMultiDrawElementsBaseVertex", 523 | "glMultiDrawElementsIndirect", 524 | "glMultiDrawElementsIndirectCount", 525 | "glNamedBufferData", 526 | "glNamedBufferStorage", 527 | "glNamedBufferSubData", 528 | "glNamedFramebufferDrawBuffer", 529 | "glNamedFramebufferDrawBuffers", 530 | "glNamedFramebufferParameteri", 531 | "glNamedFramebufferReadBuffer", 532 | "glNamedFramebufferRenderbuffer", 533 | "glNamedFramebufferTexture", 534 | "glNamedFramebufferTextureLayer", 535 | "glNamedRenderbufferStorage", 536 | "glNamedRenderbufferStorageMultisample", 537 | "glObjectLabel", 538 | "glObjectPtrLabel", 539 | "glPatchParameterfv", 540 | "glPatchParameteri", 541 | "glPauseTransformFeedback", 542 | "glPixelStoref", 543 | "glPixelStorei", 544 | "glPointParameterf", 545 | "glPointParameterfv", 546 | "glPointParameteri", 547 | "glPointParameteriv", 548 | "glPointSize", 549 | "glPolygonMode", 550 | "glPolygonOffset", 551 | "glPolygonOffsetClamp", 552 | "glPopDebugGroup", 553 | "glPrimitiveRestartIndex", 554 | "glProgramBinary", 555 | "glProgramParameteri", 556 | "glProgramUniform1d", 557 | "glProgramUniform1dv", 558 | "glProgramUniform1f", 559 | "glProgramUniform1fv", 560 | "glProgramUniform1i", 561 | "glProgramUniform1iv", 562 | "glProgramUniform1ui", 563 | "glProgramUniform1uiv", 564 | "glProgramUniform2d", 565 | "glProgramUniform2dv", 566 | "glProgramUniform2f", 567 | "glProgramUniform2fv", 568 | "glProgramUniform2i", 569 | "glProgramUniform2iv", 570 | "glProgramUniform2ui", 571 | "glProgramUniform2uiv", 572 | "glProgramUniform3d", 573 | "glProgramUniform3dv", 574 | "glProgramUniform3f", 575 | "glProgramUniform3fv", 576 | "glProgramUniform3i", 577 | "glProgramUniform3iv", 578 | "glProgramUniform3ui", 579 | "glProgramUniform3uiv", 580 | "glProgramUniform4d", 581 | "glProgramUniform4dv", 582 | "glProgramUniform4f", 583 | "glProgramUniform4fv", 584 | "glProgramUniform4i", 585 | "glProgramUniform4iv", 586 | "glProgramUniform4ui", 587 | "glProgramUniform4uiv", 588 | "glProgramUniformMatrix2dv", 589 | "glProgramUniformMatrix2fv", 590 | "glProgramUniformMatrix2x3dv", 591 | "glProgramUniformMatrix2x3fv", 592 | "glProgramUniformMatrix2x4dv", 593 | "glProgramUniformMatrix2x4fv", 594 | "glProgramUniformMatrix3dv", 595 | "glProgramUniformMatrix3fv", 596 | "glProgramUniformMatrix3x2dv", 597 | "glProgramUniformMatrix3x2fv", 598 | "glProgramUniformMatrix3x4dv", 599 | "glProgramUniformMatrix3x4fv", 600 | "glProgramUniformMatrix4dv", 601 | "glProgramUniformMatrix4fv", 602 | "glProgramUniformMatrix4x2dv", 603 | "glProgramUniformMatrix4x2fv", 604 | "glProgramUniformMatrix4x3dv", 605 | "glProgramUniformMatrix4x3fv", 606 | "glProvokingVertex", 607 | "glPushDebugGroup", 608 | "glQueryCounter", 609 | "glReadBuffer", 610 | "glReadPixels", 611 | "glReadnPixels", 612 | "glReleaseShaderCompiler", 613 | "glRenderbufferStorage", 614 | "glRenderbufferStorageMultisample", 615 | "glResumeTransformFeedback", 616 | "glSampleCoverage", 617 | "glSampleMaski", 618 | "glSamplerParameterIiv", 619 | "glSamplerParameterIuiv", 620 | "glSamplerParameterf", 621 | "glSamplerParameterfv", 622 | "glSamplerParameteri", 623 | "glSamplerParameteriv", 624 | "glScissor", 625 | "glScissorArrayv", 626 | "glScissorIndexed", 627 | "glScissorIndexedv", 628 | "glShaderBinary", 629 | "glShaderSource", 630 | "glShaderStorageBlockBinding", 631 | "glSpecializeShader", 632 | "glStencilFunc", 633 | "glStencilFuncSeparate", 634 | "glStencilMask", 635 | "glStencilMaskSeparate", 636 | "glStencilOp", 637 | "glStencilOpSeparate", 638 | "glTexBuffer", 639 | "glTexBufferRange", 640 | "glTexImage1D", 641 | "glTexImage2D", 642 | "glTexImage2DMultisample", 643 | "glTexImage3D", 644 | "glTexImage3DMultisample", 645 | "glTexParameterIiv", 646 | "glTexParameterIuiv", 647 | "glTexParameterf", 648 | "glTexParameterfv", 649 | "glTexParameteri", 650 | "glTexParameteriv", 651 | "glTexStorage1D", 652 | "glTexStorage2D", 653 | "glTexStorage2DMultisample", 654 | "glTexStorage3D", 655 | "glTexStorage3DMultisample", 656 | "glTexSubImage1D", 657 | "glTexSubImage2D", 658 | "glTexSubImage3D", 659 | "glTextureBarrier", 660 | "glTextureBuffer", 661 | "glTextureBufferRange", 662 | "glTextureParameterIiv", 663 | "glTextureParameterIuiv", 664 | "glTextureParameterf", 665 | "glTextureParameterfv", 666 | "glTextureParameteri", 667 | "glTextureParameteriv", 668 | "glTextureStorage1D", 669 | "glTextureStorage2D", 670 | "glTextureStorage2DMultisample", 671 | "glTextureStorage3D", 672 | "glTextureStorage3DMultisample", 673 | "glTextureSubImage1D", 674 | "glTextureSubImage2D", 675 | "glTextureSubImage3D", 676 | "glTextureView", 677 | "glTransformFeedbackBufferBase", 678 | "glTransformFeedbackBufferRange", 679 | "glTransformFeedbackVaryings", 680 | "glUniform1d", 681 | "glUniform1dv", 682 | "glUniform1f", 683 | "glUniform1fv", 684 | "glUniform1i", 685 | "glUniform1iv", 686 | "glUniform1ui", 687 | "glUniform1uiv", 688 | "glUniform2d", 689 | "glUniform2dv", 690 | "glUniform2f", 691 | "glUniform2fv", 692 | "glUniform2i", 693 | "glUniform2iv", 694 | "glUniform2ui", 695 | "glUniform2uiv", 696 | "glUniform3d", 697 | "glUniform3dv", 698 | "glUniform3f", 699 | "glUniform3fv", 700 | "glUniform3i", 701 | "glUniform3iv", 702 | "glUniform3ui", 703 | "glUniform3uiv", 704 | "glUniform4d", 705 | "glUniform4dv", 706 | "glUniform4f", 707 | "glUniform4fv", 708 | "glUniform4i", 709 | "glUniform4iv", 710 | "glUniform4ui", 711 | "glUniform4uiv", 712 | "glUniformBlockBinding", 713 | "glUniformMatrix2dv", 714 | "glUniformMatrix2fv", 715 | "glUniformMatrix2x3dv", 716 | "glUniformMatrix2x3fv", 717 | "glUniformMatrix2x4dv", 718 | "glUniformMatrix2x4fv", 719 | "glUniformMatrix3dv", 720 | "glUniformMatrix3fv", 721 | "glUniformMatrix3x2dv", 722 | "glUniformMatrix3x2fv", 723 | "glUniformMatrix3x4dv", 724 | "glUniformMatrix3x4fv", 725 | "glUniformMatrix4dv", 726 | "glUniformMatrix4fv", 727 | "glUniformMatrix4x2dv", 728 | "glUniformMatrix4x2fv", 729 | "glUniformMatrix4x3dv", 730 | "glUniformMatrix4x3fv", 731 | "glUniformSubroutinesuiv", 732 | "glUnmapBuffer", 733 | "glUnmapNamedBuffer", 734 | "glUseProgram", 735 | "glUseProgramStages", 736 | "glValidateProgram", 737 | "glValidateProgramPipeline", 738 | "glVertexArrayAttribBinding", 739 | "glVertexArrayAttribFormat", 740 | "glVertexArrayAttribIFormat", 741 | "glVertexArrayAttribLFormat", 742 | "glVertexArrayBindingDivisor", 743 | "glVertexArrayElementBuffer", 744 | "glVertexArrayVertexBuffer", 745 | "glVertexArrayVertexBuffers", 746 | "glVertexAttrib1d", 747 | "glVertexAttrib1dv", 748 | "glVertexAttrib1f", 749 | "glVertexAttrib1fv", 750 | "glVertexAttrib1s", 751 | "glVertexAttrib1sv", 752 | "glVertexAttrib2d", 753 | "glVertexAttrib2dv", 754 | "glVertexAttrib2f", 755 | "glVertexAttrib2fv", 756 | "glVertexAttrib2s", 757 | "glVertexAttrib2sv", 758 | "glVertexAttrib3d", 759 | "glVertexAttrib3dv", 760 | "glVertexAttrib3f", 761 | "glVertexAttrib3fv", 762 | "glVertexAttrib3s", 763 | "glVertexAttrib3sv", 764 | "glVertexAttrib4Nbv", 765 | "glVertexAttrib4Niv", 766 | "glVertexAttrib4Nsv", 767 | "glVertexAttrib4Nub", 768 | "glVertexAttrib4Nubv", 769 | "glVertexAttrib4Nuiv", 770 | "glVertexAttrib4Nusv", 771 | "glVertexAttrib4bv", 772 | "glVertexAttrib4d", 773 | "glVertexAttrib4dv", 774 | "glVertexAttrib4f", 775 | "glVertexAttrib4fv", 776 | "glVertexAttrib4iv", 777 | "glVertexAttrib4s", 778 | "glVertexAttrib4sv", 779 | "glVertexAttrib4ubv", 780 | "glVertexAttrib4uiv", 781 | "glVertexAttrib4usv", 782 | "glVertexAttribBinding", 783 | "glVertexAttribDivisor", 784 | "glVertexAttribFormat", 785 | "glVertexAttribI1i", 786 | "glVertexAttribI1iv", 787 | "glVertexAttribI1ui", 788 | "glVertexAttribI1uiv", 789 | "glVertexAttribI2i", 790 | "glVertexAttribI2iv", 791 | "glVertexAttribI2ui", 792 | "glVertexAttribI2uiv", 793 | "glVertexAttribI3i", 794 | "glVertexAttribI3iv", 795 | "glVertexAttribI3ui", 796 | "glVertexAttribI3uiv", 797 | "glVertexAttribI4bv", 798 | "glVertexAttribI4i", 799 | "glVertexAttribI4iv", 800 | "glVertexAttribI4sv", 801 | "glVertexAttribI4ubv", 802 | "glVertexAttribI4ui", 803 | "glVertexAttribI4uiv", 804 | "glVertexAttribI4usv", 805 | "glVertexAttribIFormat", 806 | "glVertexAttribIPointer", 807 | "glVertexAttribL1d", 808 | "glVertexAttribL1dv", 809 | "glVertexAttribL2d", 810 | "glVertexAttribL2dv", 811 | "glVertexAttribL3d", 812 | "glVertexAttribL3dv", 813 | "glVertexAttribL4d", 814 | "glVertexAttribL4dv", 815 | "glVertexAttribLFormat", 816 | "glVertexAttribLPointer", 817 | "glVertexAttribP1ui", 818 | "glVertexAttribP1uiv", 819 | "glVertexAttribP2ui", 820 | "glVertexAttribP2uiv", 821 | "glVertexAttribP3ui", 822 | "glVertexAttribP3uiv", 823 | "glVertexAttribP4ui", 824 | "glVertexAttribP4uiv", 825 | "glVertexAttribPointer", 826 | "glVertexBindingDivisor", 827 | "glViewport", 828 | "glViewportArrayv", 829 | "glViewportIndexedf", 830 | "glViewportIndexedfv", 831 | "glWaitSync", 832 | }; 833 | 834 | union GL3WProcs gl3wProcs; 835 | 836 | static void load_procs(GL3WGetProcAddressProc proc) 837 | { 838 | size_t i; 839 | 840 | for (i = 0; i < ARRAY_SIZE(proc_names); i++) 841 | gl3wProcs.ptr[i] = proc(proc_names[i]); 842 | } 843 | -------------------------------------------------------------------------------- /external/impl/include/cimgui_impl.h: -------------------------------------------------------------------------------- 1 | typedef struct SDL_Window SDL_Window; 2 | typedef struct GLFWwindow GLFWwindow; 3 | 4 | struct GLFWwindow; 5 | 6 | struct SDL_Window; 7 | typedef union SDL_Event SDL_Event;CIMGUI_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window,bool install_callbacks); 8 | CIMGUI_API bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window,bool install_callbacks); 9 | CIMGUI_API void ImGui_ImplGlfw_Shutdown(); 10 | CIMGUI_API void ImGui_ImplGlfw_NewFrame(); 11 | CIMGUI_API void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window,int button,int action,int mods); 12 | CIMGUI_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window,double xoffset,double yoffset); 13 | CIMGUI_API void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window,int key,int scancode,int action,int mods); 14 | CIMGUI_API void ImGui_ImplGlfw_CharCallback(GLFWwindow* window,unsigned int c); 15 | CIMGUI_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version); 16 | CIMGUI_API void ImGui_ImplOpenGL3_Shutdown(); 17 | CIMGUI_API void ImGui_ImplOpenGL3_NewFrame(); 18 | CIMGUI_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); 19 | CIMGUI_API bool ImGui_ImplOpenGL3_CreateFontsTexture(); 20 | CIMGUI_API void ImGui_ImplOpenGL3_DestroyFontsTexture(); 21 | CIMGUI_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(); 22 | CIMGUI_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); 23 | CIMGUI_API bool ImGui_ImplOpenGL2_Init(); 24 | CIMGUI_API void ImGui_ImplOpenGL2_Shutdown(); 25 | CIMGUI_API void ImGui_ImplOpenGL2_NewFrame(); 26 | CIMGUI_API void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data); 27 | CIMGUI_API bool ImGui_ImplOpenGL2_CreateFontsTexture(); 28 | CIMGUI_API void ImGui_ImplOpenGL2_DestroyFontsTexture(); 29 | CIMGUI_API bool ImGui_ImplOpenGL2_CreateDeviceObjects(); 30 | CIMGUI_API void ImGui_ImplOpenGL2_DestroyDeviceObjects(); 31 | CIMGUI_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window,void* sdl_gl_context); 32 | CIMGUI_API bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); 33 | CIMGUI_API void ImGui_ImplSDL2_Shutdown(); 34 | CIMGUI_API void ImGui_ImplSDL2_NewFrame(SDL_Window* window); 35 | CIMGUI_API bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); -------------------------------------------------------------------------------- /external/impl/include/imgui_impl_opengl3.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer for OpenGL3 / OpenGL ES2 / OpenGL ES3 (modern OpenGL with shaders / programmatic pipeline) 2 | // This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) 3 | // (Note: We are using GL3W as a helper library to access OpenGL functions since there is no standard header to access modern OpenGL functions easily. Alternatives are GLEW, Glad, etc..) 4 | 5 | // Implemented features: 6 | // [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. 7 | 8 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 9 | // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. 10 | // https://github.com/ocornut/imgui 11 | 12 | // About OpenGL function loaders: 13 | // About OpenGL function loaders: modern OpenGL doesn't have a standard header file and requires individual function pointers to be loaded manually. 14 | // Helper libraries are often used for this purpose! Here we are supporting a few common ones: gl3w, glew, glad. 15 | // You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. 16 | 17 | // About GLSL version: 18 | // The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string. 19 | // On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" 20 | // Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. 21 | 22 | #pragma once 23 | 24 | // Set default OpenGL loader to be gl3w 25 | #if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \ 26 | && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \ 27 | && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \ 28 | && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) 29 | #define IMGUI_IMPL_OPENGL_LOADER_GL3W 30 | #endif 31 | 32 | extern "C" bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL); 33 | extern "C" void ImGui_ImplOpenGL3_Shutdown(); 34 | extern "C" void ImGui_ImplOpenGL3_NewFrame(); 35 | extern "C" void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); 36 | 37 | // Called by Init/NewFrame/Shutdown 38 | extern "C" bool ImGui_ImplOpenGL3_CreateFontsTexture(); 39 | extern "C" void ImGui_ImplOpenGL3_DestroyFontsTexture(); 40 | extern "C" bool ImGui_ImplOpenGL3_CreateDeviceObjects(); 41 | extern "C" void ImGui_ImplOpenGL3_DestroyDeviceObjects(); -------------------------------------------------------------------------------- /external/impl/include/imgui_impl_sdl.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Binding for SDL2 2 | // This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) 3 | // (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) 4 | 5 | // Implemented features: 6 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 7 | // [X] Platform: Clipboard support. 8 | // [X] Platform: Keyboard arrays indexed using SDL_SCANCODE_* codes, e.g. ImGui::IsKeyPressed(SDL_SCANCODE_SPACE). 9 | // Missing features: 10 | // [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. 11 | // [ ] Platform: Gamepad support (need to use SDL_GameController API to fill the io.NavInputs[] value when ImGuiConfigFlags_NavEnableGamepad is set). 12 | 13 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 14 | // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. 15 | // https://github.com/ocornut/imgui 16 | 17 | #pragma once 18 | 19 | struct SDL_Window; 20 | typedef union SDL_Event SDL_Event; 21 | 22 | extern "C" bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); 23 | extern "C" bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); 24 | extern "C" void ImGui_ImplSDL2_Shutdown(); 25 | extern "C" void ImGui_ImplSDL2_NewFrame(SDL_Window* window); 26 | extern "C" bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); -------------------------------------------------------------------------------- /external/impl/src/imgui_impl_opengl3.cpp: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer for OpenGL3 / OpenGL ES2 / OpenGL ES3 (modern OpenGL with shaders / programmatic pipeline) 2 | // This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) 3 | // (Note: We are using GL3W as a helper library to access OpenGL functions since there is no standard header to access modern OpenGL functions easily. Alternatives are GLEW, Glad, etc..) 4 | 5 | // Implemented features: 6 | // [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. 7 | 8 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 9 | // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. 10 | // https://github.com/ocornut/imgui 11 | 12 | // CHANGELOG 13 | // (minor and older changes stripped away, please see git history for details) 14 | // 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. 15 | // 2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450). 16 | // 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. 17 | // 2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT). 18 | // 2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used. 19 | // 2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES". 20 | // 2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation. 21 | // 2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link. 22 | // 2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples. 23 | // 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. 24 | // 2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state. 25 | // 2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer. 26 | // 2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150". 27 | // 2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. 28 | // 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself. 29 | // 2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150. 30 | // 2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode. 31 | // 2017-05-01: OpenGL: Fixed save and restore of current blend func state. 32 | // 2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE. 33 | // 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle. 34 | // 2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752) 35 | 36 | //---------------------------------------- 37 | // OpenGL GLSL GLSL 38 | // version version string 39 | //---------------------------------------- 40 | // 2.0 110 "#version 110" 41 | // 2.1 120 42 | // 3.0 130 43 | // 3.1 140 44 | // 3.2 150 "#version 150" 45 | // 3.3 330 46 | // 4.0 400 47 | // 4.1 410 "#version 410 core" 48 | // 4.2 420 49 | // 4.3 430 50 | // ES 2.0 100 "#version 100" 51 | // ES 3.0 300 "#version 300 es" 52 | //---------------------------------------- 53 | 54 | #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) 55 | #define _CRT_SECURE_NO_WARNINGS 56 | #endif 57 | 58 | #include "imgui.h" 59 | #include "imgui_impl_opengl3.h" 60 | #include 61 | #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier 62 | #include // intptr_t 63 | #else 64 | #include // intptr_t 65 | #endif 66 | #if defined(__APPLE__) 67 | #include "TargetConditionals.h" 68 | #endif 69 | 70 | // iOS, Android and Emscripten can use GL ES 3 71 | // Call ImGui_ImplOpenGL3_Init() with "#version 300 es" 72 | #if (defined(__APPLE__) && TARGET_OS_IOS) || (defined(__ANDROID__)) || (defined(__EMSCRIPTEN__)) 73 | #define USE_GL_ES3 74 | #endif 75 | 76 | #ifdef USE_GL_ES3 77 | // OpenGL ES 3 78 | #include // Use GL ES 3 79 | #else 80 | // Regular OpenGL 81 | // About OpenGL function loaders: modern OpenGL doesn't have a standard header file and requires individual function pointers to be loaded manually. 82 | // Helper libraries are often used for this purpose! Here we are supporting a few common ones: gl3w, glew, glad. 83 | // You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. 84 | #if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) 85 | #include 86 | #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) 87 | #include 88 | #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) 89 | #include 90 | #else 91 | #include IMGUI_IMPL_OPENGL_LOADER_CUSTOM 92 | #endif 93 | #endif 94 | 95 | // OpenGL Data 96 | static char g_GlslVersionString[32] = ""; 97 | static GLuint g_FontTexture = 0; 98 | static GLuint g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; 99 | static int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; 100 | static int g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; 101 | static unsigned int g_VboHandle = 0, g_ElementsHandle = 0; 102 | 103 | // Functions 104 | bool ImGui_ImplOpenGL3_Init(const char* glsl_version) 105 | { 106 | ImGuiIO& io = ImGui::GetIO(); 107 | io.BackendRendererName = "imgui_impl_opengl3"; 108 | 109 | // Store GLSL version string so we can refer to it later in case we recreate shaders. Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure. 110 | #ifdef USE_GL_ES3 111 | if (glsl_version == NULL) 112 | glsl_version = "#version 300 es"; 113 | #else 114 | if (glsl_version == NULL) 115 | glsl_version = "#version 130"; 116 | #endif 117 | IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(g_GlslVersionString)); 118 | strcpy(g_GlslVersionString, glsl_version); 119 | strcat(g_GlslVersionString, "\n"); 120 | 121 | return true; 122 | } 123 | 124 | void ImGui_ImplOpenGL3_Shutdown() 125 | { 126 | ImGui_ImplOpenGL3_DestroyDeviceObjects(); 127 | } 128 | 129 | void ImGui_ImplOpenGL3_NewFrame() 130 | { 131 | if (!g_FontTexture) 132 | ImGui_ImplOpenGL3_CreateDeviceObjects(); 133 | } 134 | 135 | // OpenGL3 Render function. 136 | // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) 137 | // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. 138 | void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) 139 | { 140 | // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) 141 | int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); 142 | int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); 143 | if (fb_width <= 0 || fb_height <= 0) 144 | return; 145 | 146 | // Backup GL state 147 | GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture); 148 | glActiveTexture(GL_TEXTURE0); 149 | GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); 150 | GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); 151 | #ifdef GL_SAMPLER_BINDING 152 | GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); 153 | #endif 154 | GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); 155 | GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); 156 | #ifdef GL_POLYGON_MODE 157 | GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); 158 | #endif 159 | GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); 160 | GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); 161 | GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb); 162 | GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb); 163 | GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha); 164 | GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha); 165 | GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb); 166 | GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha); 167 | GLboolean last_enable_blend = glIsEnabled(GL_BLEND); 168 | GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE); 169 | GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST); 170 | GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST); 171 | bool clip_origin_lower_left = true; 172 | #ifdef GL_CLIP_ORIGIN 173 | GLenum last_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&last_clip_origin); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT) 174 | if (last_clip_origin == GL_UPPER_LEFT) 175 | clip_origin_lower_left = false; 176 | #endif 177 | 178 | // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill 179 | glEnable(GL_BLEND); 180 | glBlendEquation(GL_FUNC_ADD); 181 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 182 | glDisable(GL_CULL_FACE); 183 | glDisable(GL_DEPTH_TEST); 184 | glEnable(GL_SCISSOR_TEST); 185 | #ifdef GL_POLYGON_MODE 186 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 187 | #endif 188 | 189 | // Setup viewport, orthographic projection matrix 190 | // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. 191 | glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); 192 | float L = draw_data->DisplayPos.x; 193 | float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; 194 | float T = draw_data->DisplayPos.y; 195 | float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; 196 | const float ortho_projection[4][4] = 197 | { 198 | { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, 199 | { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, 200 | { 0.0f, 0.0f, -1.0f, 0.0f }, 201 | { (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f }, 202 | }; 203 | glUseProgram(g_ShaderHandle); 204 | glUniform1i(g_AttribLocationTex, 0); 205 | glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); 206 | #ifdef GL_SAMPLER_BINDING 207 | glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise. 208 | #endif 209 | // Recreate the VAO every time 210 | // (This is to easily allow multiple GL contexts. VAO are not shared among GL contexts, and we don't track creation/deletion of windows so we don't have an obvious key to use to cache them.) 211 | GLuint vao_handle = 0; 212 | glGenVertexArrays(1, &vao_handle); 213 | glBindVertexArray(vao_handle); 214 | glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); 215 | glEnableVertexAttribArray(g_AttribLocationPosition); 216 | glEnableVertexAttribArray(g_AttribLocationUV); 217 | glEnableVertexAttribArray(g_AttribLocationColor); 218 | glVertexAttribPointer(g_AttribLocationPosition, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos)); 219 | glVertexAttribPointer(g_AttribLocationUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv)); 220 | glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col)); 221 | 222 | // Will project scissor/clipping rectangles into framebuffer space 223 | ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports 224 | ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) 225 | 226 | // Render command lists 227 | for (int n = 0; n < draw_data->CmdListsCount; n++) 228 | { 229 | const ImDrawList* cmd_list = draw_data->CmdLists[n]; 230 | size_t idx_buffer_offset = 0; 231 | 232 | glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); 233 | glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); 234 | 235 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle); 236 | glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); 237 | 238 | for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) 239 | { 240 | const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; 241 | if (pcmd->UserCallback) 242 | { 243 | // User callback (registered via ImDrawList::AddCallback) 244 | pcmd->UserCallback(cmd_list, pcmd); 245 | } 246 | else 247 | { 248 | // Project scissor/clipping rectangles into framebuffer space 249 | ImVec4 clip_rect; 250 | clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; 251 | clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; 252 | clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; 253 | clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; 254 | 255 | if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) 256 | { 257 | // Apply scissor/clipping rectangle 258 | if (clip_origin_lower_left) 259 | glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y)); 260 | else 261 | glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT) 262 | 263 | // Bind texture, Draw 264 | glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); 265 | glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)idx_buffer_offset); 266 | } 267 | } 268 | idx_buffer_offset += pcmd->ElemCount * sizeof(ImDrawIdx); 269 | } 270 | } 271 | glDeleteVertexArrays(1, &vao_handle); 272 | 273 | // Restore modified GL state 274 | glUseProgram(last_program); 275 | glBindTexture(GL_TEXTURE_2D, last_texture); 276 | #ifdef GL_SAMPLER_BINDING 277 | glBindSampler(0, last_sampler); 278 | #endif 279 | glActiveTexture(last_active_texture); 280 | glBindVertexArray(last_vertex_array); 281 | glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); 282 | glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); 283 | glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); 284 | if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); 285 | if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); 286 | if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); 287 | if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); 288 | #ifdef GL_POLYGON_MODE 289 | glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); 290 | #endif 291 | glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); 292 | glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); 293 | } 294 | 295 | bool ImGui_ImplOpenGL3_CreateFontsTexture() 296 | { 297 | // Build texture atlas 298 | ImGuiIO& io = ImGui::GetIO(); 299 | unsigned char* pixels; 300 | int width, height; 301 | io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. 302 | 303 | // Upload texture to graphics system 304 | GLint last_texture; 305 | glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); 306 | glGenTextures(1, &g_FontTexture); 307 | glBindTexture(GL_TEXTURE_2D, g_FontTexture); 308 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 309 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 310 | glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); 311 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 312 | 313 | // Store our identifier 314 | io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture; 315 | 316 | // Restore state 317 | glBindTexture(GL_TEXTURE_2D, last_texture); 318 | 319 | return true; 320 | } 321 | 322 | void ImGui_ImplOpenGL3_DestroyFontsTexture() 323 | { 324 | if (g_FontTexture) 325 | { 326 | ImGuiIO& io = ImGui::GetIO(); 327 | glDeleteTextures(1, &g_FontTexture); 328 | io.Fonts->TexID = 0; 329 | g_FontTexture = 0; 330 | } 331 | } 332 | 333 | // If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file. 334 | static bool CheckShader(GLuint handle, const char* desc) 335 | { 336 | GLint status = 0, log_length = 0; 337 | glGetShaderiv(handle, GL_COMPILE_STATUS, &status); 338 | glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length); 339 | if ((GLboolean)status == GL_FALSE) 340 | fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s!\n", desc); 341 | if (log_length > 0) 342 | { 343 | ImVector buf; 344 | buf.resize((int)(log_length + 1)); 345 | glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); 346 | fprintf(stderr, "%s\n", buf.begin()); 347 | } 348 | return (GLboolean)status == GL_TRUE; 349 | } 350 | 351 | // If you get an error please report on GitHub. You may try different GL context version or GLSL version. 352 | static bool CheckProgram(GLuint handle, const char* desc) 353 | { 354 | GLint status = 0, log_length = 0; 355 | glGetProgramiv(handle, GL_LINK_STATUS, &status); 356 | glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length); 357 | if ((GLboolean)status == GL_FALSE) 358 | fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! (with GLSL '%s')\n", desc, g_GlslVersionString); 359 | if (log_length > 0) 360 | { 361 | ImVector buf; 362 | buf.resize((int)(log_length + 1)); 363 | glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); 364 | fprintf(stderr, "%s\n", buf.begin()); 365 | } 366 | return (GLboolean)status == GL_TRUE; 367 | } 368 | 369 | bool ImGui_ImplOpenGL3_CreateDeviceObjects() 370 | { 371 | // Backup GL state 372 | GLint last_texture, last_array_buffer, last_vertex_array; 373 | glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); 374 | glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); 375 | glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); 376 | 377 | // Parse GLSL version string 378 | int glsl_version = 130; 379 | sscanf(g_GlslVersionString, "#version %d", &glsl_version); 380 | 381 | const GLchar* vertex_shader_glsl_120 = 382 | "uniform mat4 ProjMtx;\n" 383 | "attribute vec2 Position;\n" 384 | "attribute vec2 UV;\n" 385 | "attribute vec4 Color;\n" 386 | "varying vec2 Frag_UV;\n" 387 | "varying vec4 Frag_Color;\n" 388 | "void main()\n" 389 | "{\n" 390 | " Frag_UV = UV;\n" 391 | " Frag_Color = Color;\n" 392 | " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" 393 | "}\n"; 394 | 395 | const GLchar* vertex_shader_glsl_130 = 396 | "uniform mat4 ProjMtx;\n" 397 | "in vec2 Position;\n" 398 | "in vec2 UV;\n" 399 | "in vec4 Color;\n" 400 | "out vec2 Frag_UV;\n" 401 | "out vec4 Frag_Color;\n" 402 | "void main()\n" 403 | "{\n" 404 | " Frag_UV = UV;\n" 405 | " Frag_Color = Color;\n" 406 | " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" 407 | "}\n"; 408 | 409 | const GLchar* vertex_shader_glsl_300_es = 410 | "precision mediump float;\n" 411 | "layout (location = 0) in vec2 Position;\n" 412 | "layout (location = 1) in vec2 UV;\n" 413 | "layout (location = 2) in vec4 Color;\n" 414 | "uniform mat4 ProjMtx;\n" 415 | "out vec2 Frag_UV;\n" 416 | "out vec4 Frag_Color;\n" 417 | "void main()\n" 418 | "{\n" 419 | " Frag_UV = UV;\n" 420 | " Frag_Color = Color;\n" 421 | " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" 422 | "}\n"; 423 | 424 | const GLchar* vertex_shader_glsl_410_core = 425 | "layout (location = 0) in vec2 Position;\n" 426 | "layout (location = 1) in vec2 UV;\n" 427 | "layout (location = 2) in vec4 Color;\n" 428 | "uniform mat4 ProjMtx;\n" 429 | "out vec2 Frag_UV;\n" 430 | "out vec4 Frag_Color;\n" 431 | "void main()\n" 432 | "{\n" 433 | " Frag_UV = UV;\n" 434 | " Frag_Color = Color;\n" 435 | " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" 436 | "}\n"; 437 | 438 | const GLchar* fragment_shader_glsl_120 = 439 | "#ifdef GL_ES\n" 440 | " precision mediump float;\n" 441 | "#endif\n" 442 | "uniform sampler2D Texture;\n" 443 | "varying vec2 Frag_UV;\n" 444 | "varying vec4 Frag_Color;\n" 445 | "void main()\n" 446 | "{\n" 447 | " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n" 448 | "}\n"; 449 | 450 | const GLchar* fragment_shader_glsl_130 = 451 | "uniform sampler2D Texture;\n" 452 | "in vec2 Frag_UV;\n" 453 | "in vec4 Frag_Color;\n" 454 | "out vec4 Out_Color;\n" 455 | "void main()\n" 456 | "{\n" 457 | " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" 458 | "}\n"; 459 | 460 | const GLchar* fragment_shader_glsl_300_es = 461 | "precision mediump float;\n" 462 | "uniform sampler2D Texture;\n" 463 | "in vec2 Frag_UV;\n" 464 | "in vec4 Frag_Color;\n" 465 | "layout (location = 0) out vec4 Out_Color;\n" 466 | "void main()\n" 467 | "{\n" 468 | " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" 469 | "}\n"; 470 | 471 | const GLchar* fragment_shader_glsl_410_core = 472 | "in vec2 Frag_UV;\n" 473 | "in vec4 Frag_Color;\n" 474 | "uniform sampler2D Texture;\n" 475 | "layout (location = 0) out vec4 Out_Color;\n" 476 | "void main()\n" 477 | "{\n" 478 | " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" 479 | "}\n"; 480 | 481 | // Select shaders matching our GLSL versions 482 | const GLchar* vertex_shader = NULL; 483 | const GLchar* fragment_shader = NULL; 484 | if (glsl_version < 130) 485 | { 486 | vertex_shader = vertex_shader_glsl_120; 487 | fragment_shader = fragment_shader_glsl_120; 488 | } 489 | else if (glsl_version >= 410) 490 | { 491 | vertex_shader = vertex_shader_glsl_410_core; 492 | fragment_shader = fragment_shader_glsl_410_core; 493 | } 494 | else if (glsl_version == 300) 495 | { 496 | vertex_shader = vertex_shader_glsl_300_es; 497 | fragment_shader = fragment_shader_glsl_300_es; 498 | } 499 | else 500 | { 501 | vertex_shader = vertex_shader_glsl_130; 502 | fragment_shader = fragment_shader_glsl_130; 503 | } 504 | 505 | // Create shaders 506 | const GLchar* vertex_shader_with_version[2] = { g_GlslVersionString, vertex_shader }; 507 | g_VertHandle = glCreateShader(GL_VERTEX_SHADER); 508 | glShaderSource(g_VertHandle, 2, vertex_shader_with_version, NULL); 509 | glCompileShader(g_VertHandle); 510 | CheckShader(g_VertHandle, "vertex shader"); 511 | 512 | const GLchar* fragment_shader_with_version[2] = { g_GlslVersionString, fragment_shader }; 513 | g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER); 514 | glShaderSource(g_FragHandle, 2, fragment_shader_with_version, NULL); 515 | glCompileShader(g_FragHandle); 516 | CheckShader(g_FragHandle, "fragment shader"); 517 | 518 | g_ShaderHandle = glCreateProgram(); 519 | glAttachShader(g_ShaderHandle, g_VertHandle); 520 | glAttachShader(g_ShaderHandle, g_FragHandle); 521 | glLinkProgram(g_ShaderHandle); 522 | CheckProgram(g_ShaderHandle, "shader program"); 523 | 524 | g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture"); 525 | g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx"); 526 | g_AttribLocationPosition = glGetAttribLocation(g_ShaderHandle, "Position"); 527 | g_AttribLocationUV = glGetAttribLocation(g_ShaderHandle, "UV"); 528 | g_AttribLocationColor = glGetAttribLocation(g_ShaderHandle, "Color"); 529 | 530 | // Create buffers 531 | glGenBuffers(1, &g_VboHandle); 532 | glGenBuffers(1, &g_ElementsHandle); 533 | 534 | ImGui_ImplOpenGL3_CreateFontsTexture(); 535 | 536 | // Restore modified GL state 537 | glBindTexture(GL_TEXTURE_2D, last_texture); 538 | glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); 539 | glBindVertexArray(last_vertex_array); 540 | 541 | return true; 542 | } 543 | 544 | void ImGui_ImplOpenGL3_DestroyDeviceObjects() 545 | { 546 | if (g_VboHandle) glDeleteBuffers(1, &g_VboHandle); 547 | if (g_ElementsHandle) glDeleteBuffers(1, &g_ElementsHandle); 548 | g_VboHandle = g_ElementsHandle = 0; 549 | 550 | if (g_ShaderHandle && g_VertHandle) glDetachShader(g_ShaderHandle, g_VertHandle); 551 | if (g_VertHandle) glDeleteShader(g_VertHandle); 552 | g_VertHandle = 0; 553 | 554 | if (g_ShaderHandle && g_FragHandle) glDetachShader(g_ShaderHandle, g_FragHandle); 555 | if (g_FragHandle) glDeleteShader(g_FragHandle); 556 | g_FragHandle = 0; 557 | 558 | if (g_ShaderHandle) glDeleteProgram(g_ShaderHandle); 559 | g_ShaderHandle = 0; 560 | 561 | ImGui_ImplOpenGL3_DestroyFontsTexture(); 562 | } -------------------------------------------------------------------------------- /external/impl/src/imgui_impl_sdl.cpp: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Binding for SDL2 2 | // This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) 3 | // (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) 4 | // (Requires: SDL 2.0. Prefer SDL 2.0.4+ for full feature support.) 5 | 6 | // Implemented features: 7 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 8 | // [X] Platform: Clipboard support. 9 | // [X] Platform: Keyboard arrays indexed using SDL_SCANCODE_* codes, e.g. ImGui::IsKeyPressed(SDL_SCANCODE_SPACE). 10 | // Missing features: 11 | // [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. 12 | // [ ] Platform: Gamepad support (need to use SDL_GameController API to fill the io.NavInputs[] value when ImGuiConfigFlags_NavEnableGamepad is set). 13 | 14 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 15 | // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. 16 | // https://github.com/ocornut/imgui 17 | 18 | // CHANGELOG 19 | // (minor and older changes stripped away, please see git history for details) 20 | // 2018-12-21: Inputs: Workaround for Android/iOS which don't seem to handle focus related calls. 21 | // 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. 22 | // 2018-11-14: Changed the signature of ImGui_ImplSDL2_ProcessEvent() to take a 'const SDL_Event*'. 23 | // 2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls. 24 | // 2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor. 25 | // 2018-06-08: Misc: Extracted imgui_impl_sdl.cpp/.h away from the old combined SDL2+OpenGL/Vulkan examples. 26 | // 2018-06-08: Misc: ImGui_ImplSDL2_InitForOpenGL() now takes a SDL_GLContext parameter. 27 | // 2018-05-09: Misc: Fixed clipboard paste memory leak (we didn't call SDL_FreeMemory on the data returned by SDL_GetClipboardText). 28 | // 2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. 29 | // 2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. 30 | // 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. 31 | // 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. 32 | // 2018-02-05: Misc: Using SDL_GetPerformanceCounter() instead of SDL_GetTicks() to be able to handle very high framerate (1000+ FPS). 33 | // 2018-02-05: Inputs: Keyboard mapping is using scancodes everywhere instead of a confusing mixture of keycodes and scancodes. 34 | // 2018-01-20: Inputs: Added Horizontal Mouse Wheel support. 35 | // 2018-01-19: Inputs: When available (SDL 2.0.4+) using SDL_CaptureMouse() to retrieve coordinates outside of client area when dragging. Otherwise (SDL 2.0.3 and before) testing for SDL_WINDOW_INPUT_FOCUS instead of SDL_WINDOW_MOUSE_FOCUS. 36 | // 2018-01-18: Inputs: Added mapping for ImGuiKey_Insert. 37 | // 2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1). 38 | // 2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers. 39 | 40 | #include "imgui.h" 41 | #include "imgui_impl_sdl.h" 42 | 43 | // SDL 44 | // (the multi-viewports feature requires SDL features supported from SDL 2.0.5+) 45 | #include 46 | #include 47 | #if defined(__APPLE__) 48 | #include "TargetConditionals.h" 49 | #endif 50 | 51 | #define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE SDL_VERSION_ATLEAST(2,0,4) 52 | #define SDL_HAS_VULKAN SDL_VERSION_ATLEAST(2,0,6) 53 | #if !SDL_HAS_VULKAN 54 | static const Uint32 SDL_WINDOW_VULKAN = 0x10000000; 55 | #endif 56 | 57 | // Data 58 | static SDL_Window* g_Window = NULL; 59 | static Uint64 g_Time = 0; 60 | static bool g_MousePressed[3] = { false, false, false }; 61 | static SDL_Cursor* g_MouseCursors[ImGuiMouseCursor_COUNT] = { 0 }; 62 | static char* g_ClipboardTextData = NULL; 63 | 64 | static const char* ImGui_ImplSDL2_GetClipboardText(void*) 65 | { 66 | if (g_ClipboardTextData) 67 | SDL_free(g_ClipboardTextData); 68 | g_ClipboardTextData = SDL_GetClipboardText(); 69 | return g_ClipboardTextData; 70 | } 71 | 72 | static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text) 73 | { 74 | SDL_SetClipboardText(text); 75 | } 76 | 77 | // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. 78 | // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. 79 | // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. 80 | // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. 81 | // If you have multiple SDL events and some of them are not meant to be used by dear imgui, you may need to filter events based on their windowID field. 82 | bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event) 83 | { 84 | ImGuiIO& io = ImGui::GetIO(); 85 | switch (event->type) 86 | { 87 | case SDL_MOUSEWHEEL: 88 | { 89 | if (event->wheel.x > 0) io.MouseWheelH += 1; 90 | if (event->wheel.x < 0) io.MouseWheelH -= 1; 91 | if (event->wheel.y > 0) io.MouseWheel += 1; 92 | if (event->wheel.y < 0) io.MouseWheel -= 1; 93 | return true; 94 | } 95 | case SDL_MOUSEBUTTONDOWN: 96 | { 97 | if (event->button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; 98 | if (event->button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; 99 | if (event->button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; 100 | return true; 101 | } 102 | case SDL_TEXTINPUT: 103 | { 104 | io.AddInputCharactersUTF8(event->text.text); 105 | return true; 106 | } 107 | case SDL_KEYDOWN: 108 | case SDL_KEYUP: 109 | { 110 | int key = event->key.keysym.scancode; 111 | IM_ASSERT(key >= 0 && key < IM_ARRAYSIZE(io.KeysDown)); 112 | io.KeysDown[key] = (event->type == SDL_KEYDOWN); 113 | io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); 114 | io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); 115 | io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); 116 | io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0); 117 | return true; 118 | } 119 | } 120 | return false; 121 | } 122 | 123 | static bool ImGui_ImplSDL2_Init(SDL_Window* window) 124 | { 125 | g_Window = window; 126 | 127 | // Setup back-end capabilities flags 128 | ImGuiIO& io = ImGui::GetIO(); 129 | io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) 130 | io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) 131 | io.BackendPlatformName = "imgui_impl_sdl"; 132 | 133 | // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array. 134 | io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; 135 | io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; 136 | io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; 137 | io.KeyMap[ImGuiKey_UpArrow] = SDL_SCANCODE_UP; 138 | io.KeyMap[ImGuiKey_DownArrow] = SDL_SCANCODE_DOWN; 139 | io.KeyMap[ImGuiKey_PageUp] = SDL_SCANCODE_PAGEUP; 140 | io.KeyMap[ImGuiKey_PageDown] = SDL_SCANCODE_PAGEDOWN; 141 | io.KeyMap[ImGuiKey_Home] = SDL_SCANCODE_HOME; 142 | io.KeyMap[ImGuiKey_End] = SDL_SCANCODE_END; 143 | io.KeyMap[ImGuiKey_Insert] = SDL_SCANCODE_INSERT; 144 | io.KeyMap[ImGuiKey_Delete] = SDL_SCANCODE_DELETE; 145 | io.KeyMap[ImGuiKey_Backspace] = SDL_SCANCODE_BACKSPACE; 146 | io.KeyMap[ImGuiKey_Space] = SDL_SCANCODE_SPACE; 147 | io.KeyMap[ImGuiKey_Enter] = SDL_SCANCODE_RETURN; 148 | io.KeyMap[ImGuiKey_Escape] = SDL_SCANCODE_ESCAPE; 149 | io.KeyMap[ImGuiKey_A] = SDL_SCANCODE_A; 150 | io.KeyMap[ImGuiKey_C] = SDL_SCANCODE_C; 151 | io.KeyMap[ImGuiKey_V] = SDL_SCANCODE_V; 152 | io.KeyMap[ImGuiKey_X] = SDL_SCANCODE_X; 153 | io.KeyMap[ImGuiKey_Y] = SDL_SCANCODE_Y; 154 | io.KeyMap[ImGuiKey_Z] = SDL_SCANCODE_Z; 155 | 156 | io.SetClipboardTextFn = ImGui_ImplSDL2_SetClipboardText; 157 | io.GetClipboardTextFn = ImGui_ImplSDL2_GetClipboardText; 158 | io.ClipboardUserData = NULL; 159 | 160 | g_MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); 161 | g_MouseCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); 162 | g_MouseCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); 163 | g_MouseCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); 164 | g_MouseCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); 165 | g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); 166 | g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); 167 | g_MouseCursors[ImGuiMouseCursor_Hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); 168 | 169 | #ifdef _WIN32 170 | SDL_SysWMinfo wmInfo; 171 | SDL_VERSION(&wmInfo.version); 172 | SDL_GetWindowWMInfo(window, &wmInfo); 173 | io.ImeWindowHandle = wmInfo.info.win.window; 174 | #else 175 | (void)window; 176 | #endif 177 | 178 | return true; 179 | } 180 | 181 | bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context) 182 | { 183 | (void)sdl_gl_context; // Viewport branch will need this. 184 | return ImGui_ImplSDL2_Init(window); 185 | } 186 | 187 | bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window) 188 | { 189 | #if !SDL_HAS_VULKAN 190 | IM_ASSERT(0 && "Unsupported"); 191 | #endif 192 | return ImGui_ImplSDL2_Init(window); 193 | } 194 | 195 | void ImGui_ImplSDL2_Shutdown() 196 | { 197 | g_Window = NULL; 198 | 199 | // Destroy last known clipboard data 200 | if (g_ClipboardTextData) 201 | SDL_free(g_ClipboardTextData); 202 | g_ClipboardTextData = NULL; 203 | 204 | // Destroy SDL mouse cursors 205 | for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++) 206 | SDL_FreeCursor(g_MouseCursors[cursor_n]); 207 | memset(g_MouseCursors, 0, sizeof(g_MouseCursors)); 208 | } 209 | 210 | static void ImGui_ImplSDL2_UpdateMousePosAndButtons() 211 | { 212 | ImGuiIO& io = ImGui::GetIO(); 213 | 214 | // Set OS mouse position if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) 215 | if (io.WantSetMousePos) 216 | SDL_WarpMouseInWindow(g_Window, (int)io.MousePos.x, (int)io.MousePos.y); 217 | else 218 | io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); 219 | 220 | int mx, my; 221 | Uint32 mouse_buttons = SDL_GetMouseState(&mx, &my); 222 | io.MouseDown[0] = g_MousePressed[0] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. 223 | io.MouseDown[1] = g_MousePressed[1] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0; 224 | io.MouseDown[2] = g_MousePressed[2] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE)) != 0; 225 | g_MousePressed[0] = g_MousePressed[1] = g_MousePressed[2] = false; 226 | 227 | #if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE && !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) 228 | SDL_Window* focused_window = SDL_GetKeyboardFocus(); 229 | if (g_Window == focused_window) 230 | { 231 | // SDL_GetMouseState() gives mouse position seemingly based on the last window entered/focused(?) 232 | // The creation of a new windows at runtime and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally. 233 | int wx, wy; 234 | SDL_GetWindowPosition(focused_window, &wx, &wy); 235 | SDL_GetGlobalMouseState(&mx, &my); 236 | mx -= wx; 237 | my -= wy; 238 | io.MousePos = ImVec2((float)mx, (float)my); 239 | } 240 | 241 | // SDL_CaptureMouse() let the OS know e.g. that our imgui drag outside the SDL window boundaries shouldn't e.g. trigger the OS window resize cursor. 242 | // The function is only supported from SDL 2.0.4 (released Jan 2016) 243 | bool any_mouse_button_down = ImGui::IsAnyMouseDown(); 244 | SDL_CaptureMouse(any_mouse_button_down ? SDL_TRUE : SDL_FALSE); 245 | #else 246 | if (SDL_GetWindowFlags(g_Window) & SDL_WINDOW_INPUT_FOCUS) 247 | io.MousePos = ImVec2((float)mx, (float)my); 248 | #endif 249 | } 250 | 251 | static void ImGui_ImplSDL2_UpdateMouseCursor() 252 | { 253 | ImGuiIO& io = ImGui::GetIO(); 254 | if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) 255 | return; 256 | 257 | ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); 258 | if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) 259 | { 260 | // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor 261 | SDL_ShowCursor(SDL_FALSE); 262 | } 263 | else 264 | { 265 | // Show OS mouse cursor 266 | SDL_SetCursor(g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); 267 | SDL_ShowCursor(SDL_TRUE); 268 | } 269 | } 270 | 271 | void ImGui_ImplSDL2_NewFrame(SDL_Window* window) 272 | { 273 | ImGuiIO& io = ImGui::GetIO(); 274 | IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame()."); 275 | 276 | // Setup display size (every frame to accommodate for window resizing) 277 | int w, h; 278 | int display_w, display_h; 279 | SDL_GetWindowSize(window, &w, &h); 280 | SDL_GL_GetDrawableSize(window, &display_w, &display_h); 281 | io.DisplaySize = ImVec2((float)w, (float)h); 282 | io.DisplayFramebufferScale = ImVec2(w > 0 ? ((float)display_w / w) : 0, h > 0 ? ((float)display_h / h) : 0); 283 | 284 | // Setup time step (we don't use SDL_GetTicks() because it is using millisecond resolution) 285 | static Uint64 frequency = SDL_GetPerformanceFrequency(); 286 | Uint64 current_time = SDL_GetPerformanceCounter(); 287 | io.DeltaTime = g_Time > 0 ? (float)((double)(current_time - g_Time) / frequency) : (float)(1.0f / 60.0f); 288 | g_Time = current_time; 289 | 290 | ImGui_ImplSDL2_UpdateMousePosAndButtons(); 291 | ImGui_ImplSDL2_UpdateMouseCursor(); 292 | } -------------------------------------------------------------------------------- /package.yaml: -------------------------------------------------------------------------------- 1 | name: imgui-haskell 2 | version: 0.1.0.0 3 | github: "dbousamra/imgui-haskell" 4 | license: BSD3 5 | author: "Dominic Bou-Samra" 6 | maintainer: "dominic.bou.samra@gmail.com" 7 | copyright: "2019 Dominic Bou-Samra" 8 | 9 | build-type: Custom 10 | extra-source-files: 11 | - README.md 12 | - external/**/* 13 | 14 | # Metadata used when publishing your package 15 | synopsis: Binding to the Dear Imgui graphical user interface library 16 | category: Graphics 17 | 18 | # To avoid duplicated efforts in documentation and dealing with the 19 | # complications of embedding Haddock markup inside cabal files, it is 20 | # common to point users to the README.md file. 21 | description: Please see the README on GitHub at 22 | 23 | dependencies: 24 | - base >= 4.7 && < 5 25 | 26 | library: 27 | source-dirs: src 28 | build-tools: c2hs 29 | exposed-modules: 30 | - ImGui 31 | - ImGui.Internal.Bindings 32 | dependencies: 33 | - sdl2 34 | c-sources: 35 | - external/gl3w/src/gl3w.c 36 | - external/impl/src/imgui_impl_sdl.cpp 37 | - external/impl/src/imgui_impl_opengl3.cpp 38 | include-dirs: 39 | - external/gl3w/include 40 | - external/impl/include 41 | - external/cimgui 42 | - external/cimgui/imgui 43 | extra-libraries: 44 | - stdc++ 45 | - SDL2 46 | - cimgui 47 | frameworks: 48 | - OpenGL 49 | cc-options: 50 | - -fPIC 51 | 52 | executables: 53 | # imgui-example: 54 | # main: Misc.hs 55 | # source-dirs: app 56 | # ghc-options: 57 | # - -main-is Misc 58 | # - -threaded 59 | # - -rtsopts 60 | # - -with-rtsopts=-N 61 | # dependencies: 62 | # - imgui-haskell 63 | # - sdl2 64 | # - linear 65 | # - OpenGL 66 | imgui-calculator: 67 | main: Calculator.hs 68 | source-dirs: app 69 | ghc-options: 70 | - -main-is Calculator 71 | - -threaded 72 | - -rtsopts 73 | - -with-rtsopts=-N 74 | dependencies: 75 | - imgui-haskell 76 | - sdl2 77 | - linear 78 | - OpenGL 79 | -------------------------------------------------------------------------------- /src/Imgui.hs: -------------------------------------------------------------------------------- 1 | module ImGui ( 2 | module ImGui.Internal.Bindings 3 | ) where 4 | 5 | import ImGui.Internal.Bindings 6 | -------------------------------------------------------------------------------- /src/Imgui/Internal/Bindings.chs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE ForeignFunctionInterface #-} 2 | {-# LANGUAGE DeriveAnyClass #-} 3 | {-# LANGUAGE DeriveGeneric #-} 4 | {-# LANGUAGE TypeSynonymInstances #-} 5 | 6 | #define CIMGUI_DEFINE_ENUMS_AND_STRUCTS 7 | #include 8 | #include 9 | #include 10 | 11 | {# context lib="cimgui" #} 12 | 13 | module ImGui.Internal.Bindings where 14 | 15 | import Foreign.C 16 | import Foreign.Ptr 17 | import Foreign.Storable 18 | import Foreign.Marshal.Array 19 | import Foreign.Marshal.Alloc 20 | import Foreign.Marshal.Utils 21 | import Data.Maybe (fromMaybe) 22 | import Control.Monad (liftM) 23 | import qualified SDL.Raw.Types as SDL 24 | import qualified SDL.Internal.Types as SDL hiding (Window, Event) 25 | 26 | -- Enums 27 | {# enum ImGuiCol_ as ImGuiCol {} deriving (Show, Eq) #} 28 | {# enum ImGuiColorEditFlags_ as ImGuiColorEditFlags {} deriving (Show, Eq) #} 29 | {# enum ImGuiWindowFlags_ as ImGuiWindowFlags {} deriving (Show, Eq) #} 30 | {# enum ImGuiInputTextFlags_ as ImGuiInputTextFlags {} deriving (Show, Eq) #} 31 | 32 | {#pointer *ImVec2 as ImVec2Ptr foreign newtype#} 33 | {#pointer *ImVec4 as ImVec4Ptr foreign newtype#} 34 | {#pointer *ImFontAtlas as ImFontAtlas #} 35 | {#pointer *ImDrawData as ImDrawData #} 36 | {#pointer *ImGuiContext as ImGuiContext #} 37 | {#pointer *ImGuiIO as ImGuiIO #} 38 | {#pointer *ImGuiStyle as ImGuiStyle #} 39 | {#pointer *ImGuiID as ImGuiID #} 40 | {#pointer *ImGuiInputTextCallback as ImGuiInputTextCallback #} 41 | 42 | -- ImGui impl functions 43 | {# fun gl3wInit as gl3wInit { } -> `()' #} 44 | {# fun ImGui_ImplOpenGL3_Init as openGL3Init { `String' } -> `Bool' #} 45 | {# fun ImGui_ImplOpenGL3_NewFrame as openGL3NewFrame { } -> `()' #} 46 | {# fun ImGui_ImplOpenGL3_RenderDrawData as openGL3RenderDrawData { `ImDrawData' } -> `()' #} 47 | {# fun ImGui_ImplSDL2_InitForOpenGL as initForOpenGL { castPtr `SDL.Window', castPtr `SDL.GLContext' } -> `Bool' #} 48 | {# fun ImGui_ImplSDL2_ProcessEvent as sdl2ProcessEvent { castPtr `Ptr SDL.Event' } -> `Bool' #} 49 | {# fun ImGui_ImplSDL2_NewFrame as sdl2NewFrame { castPtr `SDL.Window' } -> `()' #} 50 | {# fun ImGui_ImplSDL2_Shutdown as shutdown { } -> `()' #} 51 | 52 | -- Imgui functions 53 | {# fun igCreateContext as createContext_ { `ImFontAtlas' } -> `ImGuiContext' #} 54 | {# fun igDestroyContext as destroyContext { `ImGuiContext' } -> `()' #} 55 | {# fun igGetCurrentContext as getCurrentContext { } -> `ImGuiContext' #} 56 | {# fun igSetCurrentContext as setCurrentContext { `ImGuiContext' } -> `()' #} 57 | {# fun igGetIO as getIO { } -> `ImGuiIO' #} 58 | {# fun igGetStyle as getStyle { } -> `ImGuiStyle' #} 59 | {# fun igNewFrame as newFrame { } -> `()' #} 60 | {# fun igEndFrame as endFrame { } -> `()' #} 61 | {# fun igRender as render { } -> `()' #} 62 | {# fun igGetDrawData as getDrawData { } -> `ImDrawData' #} 63 | {# fun igShowDemoWindow as showDemoWindow { `Bool' } -> `()' #} 64 | {# fun igShowAboutWindow as showAboutWindow { `Bool' } -> `()' #} 65 | {# fun igShowMetricsWindow as showMetricsWindow { `Bool' } -> `()' #} 66 | {# fun igShowStyleEditor as showStyleEditor { `ImGuiStyle' } -> `()' #} 67 | {# fun igShowStyleSelector as showStyleSelector { `String' } -> `Bool' #} 68 | {# fun igShowFontSelector as showFontSelector { `String' } -> `()' #} 69 | {# fun igShowUserGuide as showUserGuide { } -> `()' #} 70 | {# fun igGetVersion as getVersion { } -> `String' #} 71 | {# fun igStyleColorsDark as styleColorsDark { `ImGuiStyle' } -> `()' #} 72 | {# fun igStyleColorsClassic as styleColorsClassic { `ImGuiStyle' } -> `()' #} 73 | {# fun igStyleColorsLight as styleColorsLight { `ImGuiStyle' } -> `()' #} 74 | {# fun igBegin as begin { `String', `Bool', `ImGuiWindowFlags' } -> `()' #} 75 | {# fun igEnd as end { } -> `()' #} 76 | {# fun igBeginChild as beginChild { `String', %`ImVec2Ptr', `Bool', `ImGuiWindowFlags' } -> `()' #} 77 | {# fun igBeginChildID as beginChildID { %`ImGuiID', %`ImVec2Ptr', `Bool', `ImGuiWindowFlags' } -> `()' #} 78 | {# fun igEndChild as endChild { } -> `()' #} 79 | {# fun igButton as button {`String', %`ImVec2Ptr'} -> `Bool'#} 80 | {# fun igText as text { `String' } -> `()' #} 81 | {# fun igPushStyleColor as pushStyleColor { cFromEnum `ImGuiCol', %`ImVec4Ptr' } -> `()' #} 82 | {# fun igPopStyleColor as popStyleColor { `Int' } -> `()' #} 83 | {# fun igInputText as inputText { `String', `String' peekCString*, `Int', cFromEnum `ImGuiInputTextFlags', id `FunPtr (Ptr () -> IO CInt)' , `Ptr ()' } -> `Bool' #} 84 | {# fun unsafe igSliderFloat as sliderFloat { `String', `Float' peekReal*, `Float', `Float', `String', `Float' } -> `Bool' #} 85 | {# fun unsafe igSliderFloat2 as sliderFloat2 { `String', withArrayConvReal * `[Float]' peekRealArray2*, `Float', `Float', `String', `Float' } -> `Bool' #} 86 | {# fun unsafe igSliderFloat3 as sliderFloat3 { `String', withArrayConvReal * `[Float]' peekRealArray3*, `Float', `Float', `String', `Float' } -> `Bool' #} 87 | {# fun unsafe igSliderFloat4 as sliderFloat4 { `String', withArrayConvReal * `[Float]' peekRealArray4*, `Float', `Float', `String', `Float' } -> `Bool' #} 88 | {# fun unsafe igSliderAngle as sliderAngle { `String', `Float' peekReal*, `Float', `Float', `String' } -> `Bool' #} 89 | {# fun unsafe igSliderInt as sliderInt { `String', `Int' peekIntegral*, `Int', `Int', `String' } -> `Bool' #} 90 | {# fun unsafe igSliderInt2 as sliderInt2 { `String', withArrayConvIntegral * `[Int]' peekIntegralArray2*, `Int', `Int', `String' } -> `Bool' #} 91 | {# fun unsafe igSliderInt3 as sliderInt3 { `String', withArrayConvIntegral * `[Int]' peekIntegralArray3*, `Int', `Int', `String' } -> `Bool' #} 92 | {# fun unsafe igSliderInt4 as sliderInt4 { `String', withArrayConvIntegral * `[Int]' peekIntegralArray4*, `Int', `Int', `String' } -> `Bool' #} 93 | {# fun unsafe igColorEdit3 as colorEdit3 { `String', withArrayConvReal * `[Float]' peekRealArray3*, cFromEnum `ImGuiColorEditFlags' } -> `Bool' #} 94 | {# fun unsafe igColorEdit4 as colorEdit4 { `String', withArrayConvReal * `[Float]' peekRealArray4*, cFromEnum `ImGuiColorEditFlags' } -> `Bool' #} 95 | {# fun unsafe igColorPicker3 as colorPicker3 { `String', withArrayConvReal * `[Float]' peekRealArray3*, cFromEnum `ImGuiColorEditFlags' } -> `Bool' #} 96 | {# fun unsafe igColorPicker4 as colorPicker4 { `String', withArrayConvReal * `[Float]' peekRealArray4*, cFromEnum `ImGuiColorEditFlags', `Float' } -> `Bool' #} 97 | 98 | -- Creating structs 99 | {# fun pure ImVec2_ImVec2Float as makeImVec2 {`Float', `Float'} -> `ImVec2Ptr'#} 100 | {# fun pure ImVec4_ImVec4Float as makeImVec4 {`Float', `Float', `Float', `Float'} -> `ImVec4Ptr'#} 101 | 102 | -- High level functions 103 | createContext :: Maybe ImFontAtlas -> IO ImGuiContext 104 | createContext fontAtlas = createContext_ $ fromMaybe nullPtr fontAtlas 105 | 106 | -- Utility functions 107 | cToEnum :: (Integral i, Enum e) => i -> e 108 | cToEnum = toEnum . fromIntegral 109 | 110 | cFromEnum :: (Enum e, Integral i) => e -> i 111 | cFromEnum = fromIntegral . fromEnum 112 | 113 | cToFloat :: (Real i, Fractional e) => i -> e 114 | cToFloat = realToFrac 115 | 116 | peekString :: Ptr CChar -> IO String 117 | peekString = peekCString 118 | 119 | peekIntegral :: (Integral a, Storable a, Integral b) => Ptr a -> IO b 120 | peekIntegral = (fromIntegral <$>) . peek 121 | 122 | peekReal :: (Real a, Storable a, Fractional b) => Ptr a -> IO b 123 | peekReal = fmap realToFrac . peek 124 | 125 | withArrayConvIntegral :: (Integral a, Storable a, Integral b) => [b] -> (Ptr a -> IO c) -> IO c 126 | withArrayConvIntegral = withArray . map fromIntegral 127 | 128 | withArrayConvReal :: [Float] -> (Ptr CFloat -> IO a) -> IO a 129 | withArrayConvReal = withArray . map realToFrac 130 | 131 | peekIntegralArray :: (Integral a, Storable a, Num b) => Int -> Ptr a -> IO [b] 132 | peekIntegralArray n = fmap (map fromIntegral) . peekArray n 133 | 134 | peekIntegralArray2 :: (Integral a, Storable a, Num b) => Ptr a -> IO [b] 135 | peekIntegralArray2 = peekIntegralArray 2 136 | 137 | peekIntegralArray3 :: (Integral a, Storable a, Num b) => Ptr a -> IO [b] 138 | peekIntegralArray3 = peekIntegralArray 3 139 | 140 | peekIntegralArray4 :: (Integral a, Storable a, Num b) => Ptr a -> IO [b] 141 | peekIntegralArray4 = peekIntegralArray 4 142 | 143 | peekRealArray :: (Real a, Storable a, Fractional b) => Int -> Ptr a -> IO [b] 144 | peekRealArray n = fmap (map realToFrac) . peekArray n 145 | 146 | peekRealArray2 :: (Real a, Storable a, Fractional b) => Ptr a -> IO [b] 147 | peekRealArray2 = peekRealArray 2 148 | 149 | peekRealArray3 :: (Real a, Storable a, Fractional b) => Ptr a -> IO [b] 150 | peekRealArray3 = peekRealArray 3 151 | 152 | peekRealArray4 :: (Real a, Storable a, Fractional b) => Ptr a -> IO [b] 153 | peekRealArray4 = peekRealArray 4 -------------------------------------------------------------------------------- /stack.yaml: -------------------------------------------------------------------------------- 1 | resolver: lts-13.27 2 | 3 | packages: 4 | - . 5 | 6 | extra-lib-dirs: 7 | - external/lib -------------------------------------------------------------------------------- /stack.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | packages: [] 7 | snapshots: 8 | - completed: 9 | size: 500539 10 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/27.yaml 11 | sha256: 690db832392afe55733b4c7023fd29b1b1c660ee42f1fb505b86b07394ca994e 12 | original: lts-13.27 13 | --------------------------------------------------------------------------------