tmpNnpnZF/0000700000175000017500000000000012543177032011744 5ustar chrischristmpNnpnZF/cmake/0000775000175000017500000000000012543167424013044 5ustar chrischristmpNnpnZF/cmake/FindWaffle.cmake0000664000175000017500000000155712543167424016063 0ustar chrischris# - try to find Waffle include dirs and library if (ANDROID) set (Android_root_path "$ENV{OUT}") if (Android_root_path) set (Waffle_INC_SEARCH_PATH "$ENV{OUT}/obj/include/waffle-1" "$ENV{OUT}/obj/lib" "$ENV{ANDROID_BUILD_TOP}/external/waffle" ) set (Waffle_LIB_SEARCH_PATH "$ENV{OUT}/obj/lib") endif () endif () find_path (Waffle_INCLUDE_DIR waffle.h PATHS ${Waffle_INC_SEARCH_PATH} DOC "The directory where waffle.h resides" NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH ) find_library (Waffle_LIBRARY waffle-1 PATHS ${Waffle_LIB_SEARCH_PATH} DOC "The directory where libwaffle-1 resides" NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH ) if (Waffle_INCLUDE_DIR AND Waffle_LIBRARY) set (Waffle_FOUND 1) endif (Waffle_INCLUDE_DIR AND Waffle_LIBRARY) mark_as_advanced ( Waffle_INCLUDE_DIR Waffle_LIBRARY ) mark_as_advanced ( Waffle_FOUND ) tmpNnpnZF/cmake/ConvenienceLibrary.cmake0000664000175000017500000000064212543167424017631 0ustar chrischris# Function for convenience libraries, ie., libraries which can be statically # linked into shared libraries. function (add_convenience_library) set (name "${ARGV0}") list (REMOVE_AT ARGV 0) add_library ("${name}" STATIC ${ARGV}) set_target_properties ("${name}" PROPERTIES # Ensure it can be statically linked onto shared libraries POSITION_INDEPENDENT_CODE ON ) endfunction () tmpNnpnZF/cmake/FindSNAPPY.cmake0000664000175000017500000000071012543167424015657 0ustar chrischris# Find SNAPPY - A fast compressor/decompressor # # This module defines # SNAPPY_FOUND - whether the snappy library was found # SNAPPY_LIBRARIES - the snappy library # SNAPPY_INCLUDE_DIR - the include path of the snappy library # find_path (SNAPPY_INCLUDE_DIR NAMES snappy.h) find_library (SNAPPY_LIBRARIES NAMES snappy) include (FindPackageHandleStandardArgs) find_package_handle_standard_args (SNAPPY DEFAULT_MSG SNAPPY_LIBRARIES SNAPPY_INCLUDE_DIR) tmpNnpnZF/cmake/InstallPDB.cmake0000664000175000017500000000115212543167424016001 0ustar chrischrisfunction (INSTALL_PDB target_name) if (MSVC) get_target_property (target_output_name ${target_name} OUTPUT_NAME) if (NOT target_output_name) set (target_output_name ${target_name}) endif () # The documentation for the INSTALL command doesn't mention generator # expressions, but they actually work quite well, both when building # MSBuild and Ninja. install ( FILES "$/${target_output_name}.pdb" CONFIGURATIONS Debug RelWithDebInfo ${ARGV} ) endif() endfunction () tmpNnpnZF/cmake/FindDirectX.cmake0000664000175000017500000001637412543167424016224 0ustar chrischris# - try to find DirectX include directories and libraries # # Once done this will define: # # DirectX_XYZ_FOUND - system has the XYZ API # DirectX_XYZ_INCLUDE_FOUND - system has the include for the XYZ API # DirectX_XYZ_INCLUDE_DIR - include directory for the XYZ API # DirectX_XYZ_LIBRARY - path/name for the XYZ library # # Where XYZ can be any of: # # DDRAW # D3D # D3DX # D3D8 # D3DX8 # D3D9 # D3DX9 # D3D10 # D3D10_1 # D3DX10 # D3D11 # D3D11_1 # D3D11_2 # D3DX11 # D2D1 # include (CheckIncludeFileCXX) include (FindPackageMessage) if (WIN32) if (CMAKE_SIZEOF_VOID_P EQUAL 8) set (DirectX_ARCHITECTURE x64) else () set (DirectX_ARCHITECTURE x86) endif () # Can't use "$ENV{ProgramFiles(x86)}" to avoid violating CMP0053. See # http://public.kitware.com/pipermail/cmake-developers/2014-October/023190.html set (ProgramFiles_x86 "ProgramFiles(x86)") if ("$ENV{${ProgramFiles_x86}}") set (ProgramFiles "$ENV{${ProgramFiles_x86}}") else () set (ProgramFiles "$ENV{ProgramFiles}") endif () find_path (DirectX_ROOT_DIR Include/d3d9.h PATHS "$ENV{DXSDK_DIR}" "${ProgramFiles}/Microsoft DirectX SDK (June 2010)" "${ProgramFiles}/Microsoft DirectX SDK (February 2010)" "${ProgramFiles}/Microsoft DirectX SDK (March 2009)" "${ProgramFiles}/Microsoft DirectX SDK (August 2008)" "${ProgramFiles}/Microsoft DirectX SDK (June 2008)" "${ProgramFiles}/Microsoft DirectX SDK (March 2008)" "${ProgramFiles}/Microsoft DirectX SDK (November 2007)" "${ProgramFiles}/Microsoft DirectX SDK (August 2007)" "${ProgramFiles}/Microsoft DirectX SDK" DOC "DirectX SDK root directory" ) if (DirectX_ROOT_DIR) set (DirectX_INC_SEARCH_PATH "${DirectX_ROOT_DIR}/Include") set (DirectX_LIB_SEARCH_PATH "${DirectX_ROOT_DIR}/Lib/${DirectX_ARCHITECTURE}") set (DirectX_BIN_SEARCH_PATH "${DirectX_ROOT_DIR}/Utilities/bin/x86") endif () # With VS 2011 and Windows 8 SDK, the DirectX SDK is included as part of # the Windows SDK. # # See also: # - http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx if (DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) set (USE_WINSDK_HEADERS TRUE) endif () # Find a header in the DirectX SDK macro (find_dxsdk_header var_name header) set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR") set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND") find_path (${include_dir_var} ${header} HINTS ${DirectX_INC_SEARCH_PATH} DOC "The directory where ${header} resides" CMAKE_FIND_ROOT_PATH_BOTH ) if (${include_dir_var}) set (${include_found_var} TRUE) find_package_message (${var_name}_INC "Found ${header} header: ${${include_dir_var}}/${header}" "[${${include_dir_var}}]") endif () mark_as_advanced (${include_found_var}) endmacro () # Find a library in the DirectX SDK macro (find_dxsdk_library var_name library) # DirectX SDK set (library_var "DirectX_${var_name}_LIBRARY") find_library (${library_var} ${library} HINTS ${DirectX_LIB_SEARCH_PATH} DOC "The directory where ${library} resides" CMAKE_FIND_ROOT_PATH_BOTH ) if (${library_var}) find_package_message (${var_name}_LIB "Found ${library} library: ${${library_var}}" "[${${library_var}}]") endif () mark_as_advanced (${library_var}) endmacro () # Find a header in the Windows SDK macro (find_winsdk_header var_name header) if (USE_WINSDK_HEADERS) # Windows SDK set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR") set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND") check_include_file_cxx (${header} ${include_found_var}) set (${include_dir_var}) mark_as_advanced (${include_found_var}) else () find_dxsdk_header (${var_name} ${header}) endif () endmacro () # Find a library in the Windows SDK macro (find_winsdk_library var_name library) if (USE_WINSDK_HEADERS) # XXX: We currently just assume the library exists set (library_var "DirectX_${var_name}_LIBRARY") set (${library_var} ${library}) mark_as_advanced (${library_var}) else () find_dxsdk_library (${var_name} ${library}) endif () endmacro () # Combine header and library variables into an API found variable macro (find_combined var_name inc_var_name lib_var_name) if (DirectX_${inc_var_name}_INCLUDE_FOUND AND DirectX_${lib_var_name}_LIBRARY) set (DirectX_${var_name}_FOUND 1) find_package_message (${var_name} "Found ${var_name} API" "[${DirectX_${lib_var_name}_LIBRARY}][${DirectX_${inc_var_name}_INCLUDE_DIR}]") endif () endmacro () find_winsdk_header (DDRAW ddraw.h) find_winsdk_library (DDRAW ddraw) find_combined (DDRAW DDRAW DDRAW) if (CMAKE_GENERATOR_TOOLSET MATCHES "_xp$") # Windows 7 SDKs, used by XP toolset, do not include d3d.h find_dxsdk_header (D3D d3d.h) else () find_winsdk_header (D3D d3d.h) endif () find_combined (D3D D3D DDRAW) find_dxsdk_header (D3DX d3dx.h) find_combined (D3DX D3DX D3DX) find_dxsdk_header (D3D8 d3d8.h) find_dxsdk_library (D3D8 d3d8) find_combined (D3D8 D3D8 D3D8) find_dxsdk_header (D3DX8 d3dx8.h) find_dxsdk_library (D3DX8 d3dx8) find_combined (D3DX8 D3DX8 D3DX8) find_winsdk_header (D3D9 d3d9.h) find_winsdk_library (D3D9 d3d9) find_combined (D3D9 D3D9 D3D9) find_dxsdk_header (D3DX9 d3dx9.h) find_dxsdk_library (D3DX9 d3dx9) find_combined (D3DX9 D3DX9 D3DX9) find_winsdk_header (DXGI dxgi.h) find_winsdk_header (DXGI1_2 dxgi1_2.h) find_winsdk_header (DXGI1_3 dxgi1_3.h) find_winsdk_library (DXGI dxgi) find_winsdk_header (D3D10 d3d10.h) find_winsdk_library (D3D10 d3d10) find_combined (D3D10 D3D10 D3D10) find_winsdk_header (D3D10_1 d3d10_1.h) find_winsdk_library (D3D10_1 d3d10_1) find_combined (D3D10_1 D3D10_1 D3D10_1) find_dxsdk_header (D3DX10 d3dx10.h) find_dxsdk_library (D3DX10 d3dx10) find_combined (D3DX10 D3DX10 D3DX10) find_winsdk_header (D3D11 d3d11.h) find_winsdk_library (D3D11 d3d11) find_combined (D3D11 D3D11 D3D11) find_winsdk_header (D3D11_1 d3d11_1.h) find_combined (D3D11_1 D3D11_1 D3D11) find_winsdk_header (D3D11_2 d3d11_2.h) find_combined (D3D11_2 D3D11_2 D3D11) find_dxsdk_header (D3DX11 d3dx11.h) find_dxsdk_library (D3DX11 d3dx11) find_combined (D3DX11 D3DX11 D3DX11) find_winsdk_header (D2D1 d2d1.h) find_winsdk_library (D2D1 d2d1) find_combined (D2D1 D2D1 D2D1) find_program (DirectX_FXC_EXECUTABLE fxc HINTS ${DirectX_BIN_SEARCH_PATH} DOC "Path to fxc.exe executable." ) endif () tmpNnpnZF/cmake/.gitignore0000664000175000017500000000001112543167424015024 0ustar chrischris!*.cmake tmpNnpnZF/cmake/toolchain/0000775000175000017500000000000012543167424015024 5ustar chrischristmpNnpnZF/cmake/toolchain/android.toolchain.cmake0000664000175000017500000024661612543167424021444 0ustar chrischris# Copyright (c) 2010-2011, Ethan Rublee # Copyright (c) 2011-2014, Andrey Kamaev # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # 3. Neither the name of the copyright holder nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ------------------------------------------------------------------------------ # Android CMake toolchain file, for use with the Android NDK r5-r10d # Requires cmake 2.6.3 or newer (2.8.5 or newer is recommended). # See home page: https://github.com/taka-no-me/android-cmake # # Usage Linux: # $ export ANDROID_NDK=/absolute/path/to/the/android-ndk # $ mkdir build && cd build # $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. # $ make -j8 # # Usage Linux (using standalone toolchain): # $ export ANDROID_STANDALONE_TOOLCHAIN=/absolute/path/to/android-toolchain # $ mkdir build && cd build # $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. # $ make -j8 # # Usage Windows: # You need native port of make to build your project. # Android NDK r7 (and newer) already has make.exe on board. # For older NDK you have to install it separately. # For example, this one: http://gnuwin32.sourceforge.net/packages/make.htm # # $ SET ANDROID_NDK=C:\absolute\path\to\the\android-ndk # $ mkdir build && cd build # $ cmake.exe -G"MinGW Makefiles" # -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake # -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe" .. # $ cmake.exe --build . # # # Options (can be set as cmake parameters: -D=): # ANDROID_NDK=/opt/android-ndk - path to the NDK root. # Can be set as environment variable. Can be set only at first cmake run. # # ANDROID_STANDALONE_TOOLCHAIN=/opt/android-toolchain - path to the # standalone toolchain. This option is not used if full NDK is found # (ignored if ANDROID_NDK is set). # Can be set as environment variable. Can be set only at first cmake run. # # ANDROID_ABI=armeabi-v7a - specifies the target Application Binary # Interface (ABI). This option nearly matches to the APP_ABI variable # used by ndk-build tool from Android NDK. # # Possible targets are: # "armeabi" - ARMv5TE based CPU with software floating point operations # "armeabi-v7a" - ARMv7 based devices with hardware FPU instructions # this ABI target is used by default # "armeabi-v7a with NEON" - same as armeabi-v7a, but # sets NEON as floating-point unit # "armeabi-v7a with VFPV3" - same as armeabi-v7a, but # sets VFPV3 as floating-point unit (has 32 registers instead of 16) # "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP # "x86" - IA-32 instruction set # "mips" - MIPS32 instruction set # # 64-bit ABIs for NDK r10 and newer: # "arm64-v8a" - ARMv8 AArch64 instruction set # "x86_64" - Intel64 instruction set (r1) # "mips64" - MIPS64 instruction set (r6) # # ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for. # Option is read-only when standalone toolchain is used. # Note: building for "android-L" requires explicit configuration. # # ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9 - the name of compiler # toolchain to be used. The list of possible values depends on the NDK # version. For NDK r10c the possible values are: # # * aarch64-linux-android-4.9 # * aarch64-linux-android-clang3.4 # * aarch64-linux-android-clang3.5 # * arm-linux-androideabi-4.6 # * arm-linux-androideabi-4.8 # * arm-linux-androideabi-4.9 (default) # * arm-linux-androideabi-clang3.4 # * arm-linux-androideabi-clang3.5 # * mips64el-linux-android-4.9 # * mips64el-linux-android-clang3.4 # * mips64el-linux-android-clang3.5 # * mipsel-linux-android-4.6 # * mipsel-linux-android-4.8 # * mipsel-linux-android-4.9 # * mipsel-linux-android-clang3.4 # * mipsel-linux-android-clang3.5 # * x86-4.6 # * x86-4.8 # * x86-4.9 # * x86-clang3.4 # * x86-clang3.5 # * x86_64-4.9 # * x86_64-clang3.4 # * x86_64-clang3.5 # # ANDROID_FORCE_ARM_BUILD=OFF - set ON to generate 32-bit ARM instructions # instead of Thumb. Is not available for "x86" (inapplicable) and # "armeabi-v6 with VFP" (is forced to be ON) ABIs. # # ANDROID_NO_UNDEFINED=ON - set ON to show all undefined symbols as linker # errors even if they are not used. # # ANDROID_SO_UNDEFINED=OFF - set ON to allow undefined symbols in shared # libraries. Automatically turned for NDK r5x and r6x due to GLESv2 # problems. # # LIBRARY_OUTPUT_PATH_ROOT=${CMAKE_SOURCE_DIR} - where to output binary # files. See additional details below. # # ANDROID_SET_OBSOLETE_VARIABLES=ON - if set, then toolchain defines some # obsolete variables which were used by previous versions of this file for # backward compatibility. # # ANDROID_STL=gnustl_static - specify the runtime to use. # # Possible values are: # none -> Do not configure the runtime. # system -> Use the default minimal system C++ runtime library. # Implies -fno-rtti -fno-exceptions. # Is not available for standalone toolchain. # system_re -> Use the default minimal system C++ runtime library. # Implies -frtti -fexceptions. # Is not available for standalone toolchain. # gabi++_static -> Use the GAbi++ runtime as a static library. # Implies -frtti -fno-exceptions. # Available for NDK r7 and newer. # Is not available for standalone toolchain. # gabi++_shared -> Use the GAbi++ runtime as a shared library. # Implies -frtti -fno-exceptions. # Available for NDK r7 and newer. # Is not available for standalone toolchain. # stlport_static -> Use the STLport runtime as a static library. # Implies -fno-rtti -fno-exceptions for NDK before r7. # Implies -frtti -fno-exceptions for NDK r7 and newer. # Is not available for standalone toolchain. # stlport_shared -> Use the STLport runtime as a shared library. # Implies -fno-rtti -fno-exceptions for NDK before r7. # Implies -frtti -fno-exceptions for NDK r7 and newer. # Is not available for standalone toolchain. # gnustl_static -> Use the GNU STL as a static library. # Implies -frtti -fexceptions. # gnustl_shared -> Use the GNU STL as a shared library. # Implies -frtti -fno-exceptions. # Available for NDK r7b and newer. # Silently degrades to gnustl_static if not available. # # ANDROID_STL_FORCE_FEATURES=ON - turn rtti and exceptions support based on # chosen runtime. If disabled, then the user is responsible for settings # these options. # # What?: # android-cmake toolchain searches for NDK/toolchain in the following order: # ANDROID_NDK - cmake parameter # ANDROID_NDK - environment variable # ANDROID_STANDALONE_TOOLCHAIN - cmake parameter # ANDROID_STANDALONE_TOOLCHAIN - environment variable # ANDROID_NDK - default locations # ANDROID_STANDALONE_TOOLCHAIN - default locations # # Make sure to do the following in your scripts: # SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}" ) # SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}" ) # The flags will be prepopulated with critical flags, so don't loose them. # Also be aware that toolchain also sets configuration-specific compiler # flags and linker flags. # # ANDROID and BUILD_ANDROID will be set to true, you may test any of these # variables to make necessary Android-specific configuration changes. # # Also ARMEABI or ARMEABI_V7A or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64 # will be set true, mutually exclusive. NEON option will be set true # if VFP is set to NEON. # # LIBRARY_OUTPUT_PATH_ROOT should be set in cache to determine where Android # libraries will be installed. # Default is ${CMAKE_SOURCE_DIR}, and the android libs will always be # under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} # (depending on the target ABI). This is convenient for Android packaging. # # ------------------------------------------------------------------------------ cmake_minimum_required( VERSION 2.6.3 ) if( DEFINED CMAKE_CROSSCOMPILING ) # subsequent toolchain loading is not really needed return() endif() if( CMAKE_TOOLCHAIN_FILE ) # touch toolchain variable to suppress "unused variable" warning endif() # inherit settings in recursive loads get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) if( _CMAKE_IN_TRY_COMPILE ) include( "${CMAKE_CURRENT_SOURCE_DIR}/../android.toolchain.config.cmake" OPTIONAL ) endif() # this one is important if( CMAKE_VERSION VERSION_GREATER "3.0.99" ) set( CMAKE_SYSTEM_NAME Android ) else() set( CMAKE_SYSTEM_NAME Linux ) endif() # this one not so much set( CMAKE_SYSTEM_VERSION 1 ) # rpath makes low sence for Android set( CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "" ) set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." ) # NDK search paths set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r10d -r10c -r10b -r10 -r9d -r9c -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" ) if(NOT DEFINED ANDROID_NDK_SEARCH_PATHS) if( CMAKE_HOST_WIN32 ) file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS ) set( ANDROID_NDK_SEARCH_PATHS "${ANDROID_NDK_SEARCH_PATHS}/android-ndk" "$ENV{SystemDrive}/NVPACK/android-ndk" ) else() file( TO_CMAKE_PATH "$ENV{HOME}" ANDROID_NDK_SEARCH_PATHS ) set( ANDROID_NDK_SEARCH_PATHS /opt/android-ndk "${ANDROID_NDK_SEARCH_PATHS}/NVPACK/android-ndk" ) endif() endif() if(NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH) set( ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH /opt/android-toolchain ) endif() # known ABIs set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) set( ANDROID_SUPPORTED_ABIS_arm64 "arm64-v8a" ) set( ANDROID_SUPPORTED_ABIS_x86 "x86" ) set( ANDROID_SUPPORTED_ABIS_x86_64 "x86_64" ) set( ANDROID_SUPPORTED_ABIS_mips "mips" ) set( ANDROID_SUPPORTED_ABIS_mips64 "mips64" ) # API level defaults set( ANDROID_DEFAULT_NDK_API_LEVEL 8 ) set( ANDROID_DEFAULT_NDK_API_LEVEL_arm64 21 ) set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 ) set( ANDROID_DEFAULT_NDK_API_LEVEL_x86_64 21 ) set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 ) set( ANDROID_DEFAULT_NDK_API_LEVEL_mips64 21 ) macro( __LIST_FILTER listvar regex ) if( ${listvar} ) foreach( __val ${${listvar}} ) if( __val MATCHES "${regex}" ) list( REMOVE_ITEM ${listvar} "${__val}" ) endif() endforeach() endif() endmacro() macro( __INIT_VARIABLE var_name ) set( __test_path 0 ) foreach( __var ${ARGN} ) if( __var STREQUAL "PATH" ) set( __test_path 1 ) break() endif() endforeach() if( __test_path AND NOT EXISTS "${${var_name}}" ) unset( ${var_name} CACHE ) endif() if( "${${var_name}}" STREQUAL "" ) set( __values 0 ) foreach( __var ${ARGN} ) if( __var STREQUAL "VALUES" ) set( __values 1 ) elseif( NOT __var STREQUAL "PATH" ) set( __obsolete 0 ) if( __var MATCHES "^OBSOLETE_.*$" ) string( REPLACE "OBSOLETE_" "" __var "${__var}" ) set( __obsolete 1 ) endif() if( __var MATCHES "^ENV_.*$" ) string( REPLACE "ENV_" "" __var "${__var}" ) set( __value "$ENV{${__var}}" ) elseif( DEFINED ${__var} ) set( __value "${${__var}}" ) else() if( __values ) set( __value "${__var}" ) else() set( __value "" ) endif() endif() if( NOT "${__value}" STREQUAL "" ) if( __test_path ) if( EXISTS "${__value}" ) file( TO_CMAKE_PATH "${__value}" ${var_name} ) if( __obsolete AND NOT _CMAKE_IN_TRY_COMPILE ) message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) endif() break() endif() else() set( ${var_name} "${__value}" ) if( __obsolete AND NOT _CMAKE_IN_TRY_COMPILE ) message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) endif() break() endif() endif() endif() endforeach() unset( __value ) unset( __values ) unset( __obsolete ) elseif( __test_path ) file( TO_CMAKE_PATH "${${var_name}}" ${var_name} ) endif() unset( __test_path ) endmacro() macro( __DETECT_NATIVE_API_LEVEL _var _path ) SET( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+([0-9]+)[\t ]*.*$" ) FILE( STRINGS ${_path} __apiFileContent REGEX "${__ndkApiLevelRegex}" ) if( NOT __apiFileContent ) message( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." ) endif() string( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${_var} "${__apiFileContent}" ) unset( __apiFileContent ) unset( __ndkApiLevelRegex ) endmacro() macro( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root ) if( EXISTS "${_root}" ) file( GLOB __gccExePath RELATIVE "${_root}/bin/" "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" ) __LIST_FILTER( __gccExePath "^[.].*" ) list( LENGTH __gccExePath __gccExePathsCount ) if( NOT __gccExePathsCount EQUAL 1 AND NOT _CMAKE_IN_TRY_COMPILE ) message( WARNING "Could not determine machine name for compiler from ${_root}" ) set( ${_var} "" ) else() get_filename_component( __gccExeName "${__gccExePath}" NAME_WE ) string( REPLACE "-gcc" "" ${_var} "${__gccExeName}" ) endif() unset( __gccExePath ) unset( __gccExePathsCount ) unset( __gccExeName ) else() set( ${_var} "" ) endif() endmacro() # fight against cygwin set( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL "Prevent cmake from working under cygwin and using cygwin tools") mark_as_advanced( ANDROID_FORBID_SYGWIN ) if( ANDROID_FORBID_SYGWIN ) if( CYGWIN ) message( FATAL_ERROR "Android NDK and android-cmake toolchain are not welcome Cygwin. It is unlikely that this cmake toolchain will work under cygwin. But if you want to try then you can set cmake variable ANDROID_FORBID_SYGWIN to FALSE and rerun cmake." ) endif() if( CMAKE_HOST_WIN32 ) # remove cygwin from PATH set( __new_path "$ENV{PATH}") __LIST_FILTER( __new_path "cygwin" ) set(ENV{PATH} "${__new_path}") unset(__new_path) endif() endif() # detect current host platform if( NOT DEFINED ANDROID_NDK_HOST_X64 AND (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64" OR CMAKE_HOST_APPLE) ) set( ANDROID_NDK_HOST_X64 1 CACHE BOOL "Try to use 64-bit compiler toolchain" ) mark_as_advanced( ANDROID_NDK_HOST_X64 ) endif() set( TOOL_OS_SUFFIX "" ) if( CMAKE_HOST_APPLE ) set( ANDROID_NDK_HOST_SYSTEM_NAME "darwin-x86_64" ) set( ANDROID_NDK_HOST_SYSTEM_NAME2 "darwin-x86" ) elseif( CMAKE_HOST_WIN32 ) set( ANDROID_NDK_HOST_SYSTEM_NAME "windows-x86_64" ) set( ANDROID_NDK_HOST_SYSTEM_NAME2 "windows" ) set( TOOL_OS_SUFFIX ".exe" ) elseif( CMAKE_HOST_UNIX ) set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86_64" ) set( ANDROID_NDK_HOST_SYSTEM_NAME2 "linux-x86" ) else() message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) endif() if( NOT ANDROID_NDK_HOST_X64 ) set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) endif() # see if we have path to Android NDK __INIT_VARIABLE( ANDROID_NDK PATH ENV_ANDROID_NDK ) if( NOT ANDROID_NDK ) # see if we have path to Android standalone toolchain __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ENV_ANDROID_STANDALONE_TOOLCHAIN OBSOLETE_ANDROID_NDK_TOOLCHAIN_ROOT OBSOLETE_ENV_ANDROID_NDK_TOOLCHAIN_ROOT ) if( NOT ANDROID_STANDALONE_TOOLCHAIN ) #try to find Android NDK in one of the the default locations set( __ndkSearchPaths ) foreach( __ndkSearchPath ${ANDROID_NDK_SEARCH_PATHS} ) foreach( suffix ${ANDROID_SUPPORTED_NDK_VERSIONS} ) list( APPEND __ndkSearchPaths "${__ndkSearchPath}${suffix}" ) endforeach() endforeach() __INIT_VARIABLE( ANDROID_NDK PATH VALUES ${__ndkSearchPaths} ) unset( __ndkSearchPaths ) if( ANDROID_NDK ) message( STATUS "Using default path for Android NDK: ${ANDROID_NDK}" ) message( STATUS " If you prefer to use a different location, please define a cmake or environment variable: ANDROID_NDK" ) else() #try to find Android standalone toolchain in one of the the default locations __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) if( ANDROID_STANDALONE_TOOLCHAIN ) message( STATUS "Using default path for standalone toolchain ${ANDROID_STANDALONE_TOOLCHAIN}" ) message( STATUS " If you prefer to use a different location, please define the variable: ANDROID_STANDALONE_TOOLCHAIN" ) endif( ANDROID_STANDALONE_TOOLCHAIN ) endif( ANDROID_NDK ) endif( NOT ANDROID_STANDALONE_TOOLCHAIN ) endif( NOT ANDROID_NDK ) # remember found paths if( ANDROID_NDK ) get_filename_component( ANDROID_NDK "${ANDROID_NDK}" ABSOLUTE ) set( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" FORCE ) set( BUILD_WITH_ANDROID_NDK True ) if( EXISTS "${ANDROID_NDK}/RELEASE.TXT" ) file( STRINGS "${ANDROID_NDK}/RELEASE.TXT" ANDROID_NDK_RELEASE_FULL LIMIT_COUNT 1 REGEX "r[0-9]+[a-z]?" ) string( REGEX MATCH "r([0-9]+)([a-z]?)" ANDROID_NDK_RELEASE "${ANDROID_NDK_RELEASE_FULL}" ) else() set( ANDROID_NDK_RELEASE "r1x" ) set( ANDROID_NDK_RELEASE_FULL "unreleased" ) endif() string( REGEX REPLACE "r([0-9]+)([a-z]?)" "\\1*1000" ANDROID_NDK_RELEASE_NUM "${ANDROID_NDK_RELEASE}" ) string( FIND " abcdefghijklmnopqastuvwxyz" "${CMAKE_MATCH_2}" __ndkReleaseLetterNum ) math( EXPR ANDROID_NDK_RELEASE_NUM "${ANDROID_NDK_RELEASE_NUM}+${__ndkReleaseLetterNum}" ) elseif( ANDROID_STANDALONE_TOOLCHAIN ) get_filename_component( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" ABSOLUTE ) # try to detect change if( CMAKE_AR ) string( LENGTH "${ANDROID_STANDALONE_TOOLCHAIN}" __length ) string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidStandaloneToolchainPreviousPath ) if( NOT __androidStandaloneToolchainPreviousPath STREQUAL ANDROID_STANDALONE_TOOLCHAIN ) message( FATAL_ERROR "It is not possible to change path to the Android standalone toolchain on subsequent run." ) endif() unset( __androidStandaloneToolchainPreviousPath ) unset( __length ) endif() set( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" FORCE ) set( BUILD_WITH_STANDALONE_TOOLCHAIN True ) else() list(GET ANDROID_NDK_SEARCH_PATHS 0 ANDROID_NDK_SEARCH_PATH) message( FATAL_ERROR "Could not find neither Android NDK nor Android standalone toolchain. You should either set an environment variable: export ANDROID_NDK=~/my-android-ndk or export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain or put the toolchain or NDK in the default path: sudo ln -s ~/my-android-ndk ${ANDROID_NDK_SEARCH_PATH} sudo ln -s ~/my-android-toolchain ${ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH}" ) endif() # android NDK layout if( BUILD_WITH_ANDROID_NDK ) if( NOT DEFINED ANDROID_NDK_LAYOUT ) # try to automatically detect the layout if( EXISTS "${ANDROID_NDK}/RELEASE.TXT") set( ANDROID_NDK_LAYOUT "RELEASE" ) elseif( EXISTS "${ANDROID_NDK}/../../linux-x86/toolchain/" ) set( ANDROID_NDK_LAYOUT "LINARO" ) elseif( EXISTS "${ANDROID_NDK}/../../gcc/" ) set( ANDROID_NDK_LAYOUT "ANDROID" ) endif() endif() set( ANDROID_NDK_LAYOUT "${ANDROID_NDK_LAYOUT}" CACHE STRING "The inner layout of NDK" ) mark_as_advanced( ANDROID_NDK_LAYOUT ) if( ANDROID_NDK_LAYOUT STREQUAL "LINARO" ) set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) # only 32-bit at the moment set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/../../${ANDROID_NDK_HOST_SYSTEM_NAME}/toolchain" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH "" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "" ) elseif( ANDROID_NDK_LAYOUT STREQUAL "ANDROID" ) set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) # only 32-bit at the moment set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/../../gcc/${ANDROID_NDK_HOST_SYSTEM_NAME}/arm" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH "" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "" ) else() # ANDROID_NDK_LAYOUT STREQUAL "RELEASE" set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/toolchains" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH "/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME2}" ) endif() get_filename_component( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK_TOOLCHAINS_PATH}" ABSOLUTE ) # try to detect change of NDK if( CMAKE_AR ) string( LENGTH "${ANDROID_NDK_TOOLCHAINS_PATH}" __length ) string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidNdkPreviousPath ) if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK_TOOLCHAINS_PATH ) message( FATAL_ERROR "It is not possible to change the path to the NDK on subsequent CMake run. You must remove all generated files from your build folder first. " ) endif() unset( __androidNdkPreviousPath ) unset( __length ) endif() endif() # get all the details about standalone toolchain if( BUILD_WITH_STANDALONE_TOOLCHAIN ) __DETECT_NATIVE_API_LEVEL( ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h" ) set( ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) set( __availableToolchains "standalone" ) __DETECT_TOOLCHAIN_MACHINE_NAME( __availableToolchainMachines "${ANDROID_STANDALONE_TOOLCHAIN}" ) if( NOT __availableToolchainMachines ) message( FATAL_ERROR "Could not determine machine name of your toolchain. Probably your Android standalone toolchain is broken." ) endif() if( __availableToolchainMachines MATCHES x86_64 ) set( __availableToolchainArchs "x86_64" ) elseif( __availableToolchainMachines MATCHES i686 ) set( __availableToolchainArchs "x86" ) elseif( __availableToolchainMachines MATCHES aarch64 ) set( __availableToolchainArchs "arm64" ) elseif( __availableToolchainMachines MATCHES arm ) set( __availableToolchainArchs "arm" ) elseif( __availableToolchainMachines MATCHES mips64el ) set( __availableToolchainArchs "mips64" ) elseif( __availableToolchainMachines MATCHES mipsel ) set( __availableToolchainArchs "mips" ) endif() execute_process( COMMAND "${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}" -dumpversion OUTPUT_VARIABLE __availableToolchainCompilerVersions OUTPUT_STRIP_TRAILING_WHITESPACE ) string( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9]+)?" __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" ) if( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/bin/clang${TOOL_OS_SUFFIX}" ) list( APPEND __availableToolchains "standalone-clang" ) list( APPEND __availableToolchainMachines ${__availableToolchainMachines} ) list( APPEND __availableToolchainArchs ${__availableToolchainArchs} ) list( APPEND __availableToolchainCompilerVersions ${__availableToolchainCompilerVersions} ) endif() endif() macro( __GLOB_NDK_TOOLCHAINS __availableToolchainsVar __availableToolchainsLst __toolchain_subpath ) foreach( __toolchain ${${__availableToolchainsLst}} ) if( "${__toolchain}" MATCHES "-clang3[.][0-9]$" AND NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}${__toolchain_subpath}" ) SET( __toolchainVersionRegex "^TOOLCHAIN_VERSION[\t ]+:=[\t ]+(.*)$" ) FILE( STRINGS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}/setup.mk" __toolchainVersionStr REGEX "${__toolchainVersionRegex}" ) if( __toolchainVersionStr ) string( REGEX REPLACE "${__toolchainVersionRegex}" "\\1" __toolchainVersionStr "${__toolchainVersionStr}" ) string( REGEX REPLACE "-clang3[.][0-9]$" "-${__toolchainVersionStr}" __gcc_toolchain "${__toolchain}" ) else() string( REGEX REPLACE "-clang3[.][0-9]$" "-4.6" __gcc_toolchain "${__toolchain}" ) endif() unset( __toolchainVersionStr ) unset( __toolchainVersionRegex ) else() set( __gcc_toolchain "${__toolchain}" ) endif() __DETECT_TOOLCHAIN_MACHINE_NAME( __machine "${ANDROID_NDK_TOOLCHAINS_PATH}/${__gcc_toolchain}${__toolchain_subpath}" ) if( __machine ) string( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9x]+)?$" __version "${__gcc_toolchain}" ) if( __machine MATCHES x86_64 ) set( __arch "x86_64" ) elseif( __machine MATCHES i686 ) set( __arch "x86" ) elseif( __machine MATCHES aarch64 ) set( __arch "arm64" ) elseif( __machine MATCHES arm ) set( __arch "arm" ) elseif( __machine MATCHES mips64el ) set( __arch "mips64" ) elseif( __machine MATCHES mipsel ) set( __arch "mips" ) else() set( __arch "" ) endif() #message("machine: !${__machine}!\narch: !${__arch}!\nversion: !${__version}!\ntoolchain: !${__toolchain}!\n") if (__arch) list( APPEND __availableToolchainMachines "${__machine}" ) list( APPEND __availableToolchainArchs "${__arch}" ) list( APPEND __availableToolchainCompilerVersions "${__version}" ) list( APPEND ${__availableToolchainsVar} "${__toolchain}" ) endif() endif() unset( __gcc_toolchain ) endforeach() endmacro() # get all the details about NDK if( BUILD_WITH_ANDROID_NDK ) file( GLOB ANDROID_SUPPORTED_NATIVE_API_LEVELS RELATIVE "${ANDROID_NDK}/platforms" "${ANDROID_NDK}/platforms/android-*" ) string( REPLACE "android-" "" ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_SUPPORTED_NATIVE_API_LEVELS}" ) set( __availableToolchains "" ) set( __availableToolchainMachines "" ) set( __availableToolchainArchs "" ) set( __availableToolchainCompilerVersions "" ) if( ANDROID_TOOLCHAIN_NAME AND EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_TOOLCHAIN_NAME}/" ) # do not go through all toolchains if we know the name set( __availableToolchainsLst "${ANDROID_TOOLCHAIN_NAME}" ) __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 ) __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH2}" ) if( __availableToolchains ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} ) endif() endif() endif() if( NOT __availableToolchains ) file( GLOB __availableToolchainsLst RELATIVE "${ANDROID_NDK_TOOLCHAINS_PATH}" "${ANDROID_NDK_TOOLCHAINS_PATH}/*" ) if( __availableToolchains ) list(SORT __availableToolchainsLst) # we need clang to go after gcc endif() __LIST_FILTER( __availableToolchainsLst "^[.]" ) __LIST_FILTER( __availableToolchainsLst "llvm" ) __LIST_FILTER( __availableToolchainsLst "renderscript" ) __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 ) __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH2}" ) if( __availableToolchains ) set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} ) endif() endif() endif() if( NOT __availableToolchains ) message( FATAL_ERROR "Could not find any working toolchain in the NDK. Probably your Android NDK is broken." ) endif() endif() # build list of available ABIs set( ANDROID_SUPPORTED_ABIS "" ) set( __uniqToolchainArchNames ${__availableToolchainArchs} ) list( REMOVE_DUPLICATES __uniqToolchainArchNames ) list( SORT __uniqToolchainArchNames ) foreach( __arch ${__uniqToolchainArchNames} ) list( APPEND ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${__arch}} ) endforeach() unset( __uniqToolchainArchNames ) if( NOT ANDROID_SUPPORTED_ABIS ) message( FATAL_ERROR "No one of known Android ABIs is supported by this cmake toolchain." ) endif() # choose target ABI __INIT_VARIABLE( ANDROID_ABI OBSOLETE_ARM_TARGET OBSOLETE_ARM_TARGETS VALUES ${ANDROID_SUPPORTED_ABIS} ) # verify that target ABI is supported list( FIND ANDROID_SUPPORTED_ABIS "${ANDROID_ABI}" __androidAbiIdx ) if( __androidAbiIdx EQUAL -1 ) string( REPLACE ";" "\", \"" PRINTABLE_ANDROID_SUPPORTED_ABIS "${ANDROID_SUPPORTED_ABIS}" ) message( FATAL_ERROR "Specified ANDROID_ABI = \"${ANDROID_ABI}\" is not supported by this cmake toolchain or your NDK/toolchain. Supported values are: \"${PRINTABLE_ANDROID_SUPPORTED_ABIS}\" " ) endif() unset( __androidAbiIdx ) # set target ABI options if( ANDROID_ABI STREQUAL "x86" ) set( X86 true ) set( ANDROID_NDK_ABI_NAME "x86" ) set( ANDROID_ARCH_NAME "x86" ) set( ANDROID_LLVM_TRIPLE "i686-none-linux-android" ) set( CMAKE_SYSTEM_PROCESSOR "i686" ) elseif( ANDROID_ABI STREQUAL "x86_64" ) set( X86 true ) set( X86_64 true ) set( ANDROID_NDK_ABI_NAME "x86_64" ) set( ANDROID_ARCH_NAME "x86_64" ) set( CMAKE_SYSTEM_PROCESSOR "x86_64" ) set( ANDROID_LLVM_TRIPLE "x86_64-none-linux-android" ) elseif( ANDROID_ABI STREQUAL "mips64" ) set( MIPS64 true ) set( ANDROID_NDK_ABI_NAME "mips64" ) set( ANDROID_ARCH_NAME "mips64" ) set( ANDROID_LLVM_TRIPLE "mips64el-none-linux-android" ) set( CMAKE_SYSTEM_PROCESSOR "mips64" ) elseif( ANDROID_ABI STREQUAL "mips" ) set( MIPS true ) set( ANDROID_NDK_ABI_NAME "mips" ) set( ANDROID_ARCH_NAME "mips" ) set( ANDROID_LLVM_TRIPLE "mipsel-none-linux-android" ) set( CMAKE_SYSTEM_PROCESSOR "mips" ) elseif( ANDROID_ABI STREQUAL "arm64-v8a" ) set( ARM64_V8A true ) set( ANDROID_NDK_ABI_NAME "arm64-v8a" ) set( ANDROID_ARCH_NAME "arm64" ) set( ANDROID_LLVM_TRIPLE "aarch64-none-linux-android" ) set( CMAKE_SYSTEM_PROCESSOR "aarch64" ) set( VFPV3 true ) set( NEON true ) elseif( ANDROID_ABI STREQUAL "armeabi" ) set( ARMEABI true ) set( ANDROID_NDK_ABI_NAME "armeabi" ) set( ANDROID_ARCH_NAME "arm" ) set( ANDROID_LLVM_TRIPLE "armv5te-none-linux-androideabi" ) set( CMAKE_SYSTEM_PROCESSOR "armv5te" ) elseif( ANDROID_ABI STREQUAL "armeabi-v6 with VFP" ) set( ARMEABI_V6 true ) set( ANDROID_NDK_ABI_NAME "armeabi" ) set( ANDROID_ARCH_NAME "arm" ) set( ANDROID_LLVM_TRIPLE "armv5te-none-linux-androideabi" ) set( CMAKE_SYSTEM_PROCESSOR "armv6" ) # need always fallback to older platform set( ARMEABI true ) elseif( ANDROID_ABI STREQUAL "armeabi-v7a") set( ARMEABI_V7A true ) set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) set( ANDROID_ARCH_NAME "arm" ) set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) elseif( ANDROID_ABI STREQUAL "armeabi-v7a with VFPV3" ) set( ARMEABI_V7A true ) set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) set( ANDROID_ARCH_NAME "arm" ) set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) set( VFPV3 true ) elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" ) set( ARMEABI_V7A true ) set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) set( ANDROID_ARCH_NAME "arm" ) set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) set( VFPV3 true ) set( NEON true ) else() message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." ) endif() if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" ) # really dirty hack # it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run... file( APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" "SET(CMAKE_SYSTEM_PROCESSOR \"${CMAKE_SYSTEM_PROCESSOR}\")\n" ) endif() if( ANDROID_ARCH_NAME STREQUAL "arm" AND NOT ARMEABI_V6 ) __INIT_VARIABLE( ANDROID_FORCE_ARM_BUILD OBSOLETE_FORCE_ARM VALUES OFF ) set( ANDROID_FORCE_ARM_BUILD ${ANDROID_FORCE_ARM_BUILD} CACHE BOOL "Use 32-bit ARM instructions instead of Thumb-1" FORCE ) mark_as_advanced( ANDROID_FORCE_ARM_BUILD ) else() unset( ANDROID_FORCE_ARM_BUILD CACHE ) endif() # choose toolchain if( ANDROID_TOOLCHAIN_NAME ) list( FIND __availableToolchains "${ANDROID_TOOLCHAIN_NAME}" __toolchainIdx ) if( __toolchainIdx EQUAL -1 ) list( SORT __availableToolchains ) string( REPLACE ";" "\n * " toolchains_list "${__availableToolchains}" ) set( toolchains_list " * ${toolchains_list}") message( FATAL_ERROR "Specified toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is missing in your NDK or broken. Please verify that your NDK is working or select another compiler toolchain. To configure the toolchain set CMake variable ANDROID_TOOLCHAIN_NAME to one of the following values:\n${toolchains_list}\n" ) endif() list( GET __availableToolchainArchs ${__toolchainIdx} __toolchainArch ) if( NOT __toolchainArch STREQUAL ANDROID_ARCH_NAME ) message( SEND_ERROR "Selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is not able to compile binaries for the \"${ANDROID_ARCH_NAME}\" platform." ) endif() else() set( __toolchainIdx -1 ) set( __applicableToolchains "" ) set( __toolchainMaxVersion "0.0.0" ) list( LENGTH __availableToolchains __availableToolchainsCount ) math( EXPR __availableToolchainsCount "${__availableToolchainsCount}-1" ) foreach( __idx RANGE ${__availableToolchainsCount} ) list( GET __availableToolchainArchs ${__idx} __toolchainArch ) if( __toolchainArch STREQUAL ANDROID_ARCH_NAME ) list( GET __availableToolchainCompilerVersions ${__idx} __toolchainVersion ) string( REPLACE "x" "99" __toolchainVersion "${__toolchainVersion}") if( __toolchainVersion VERSION_GREATER __toolchainMaxVersion ) set( __toolchainMaxVersion "${__toolchainVersion}" ) set( __toolchainIdx ${__idx} ) endif() endif() endforeach() unset( __availableToolchainsCount ) unset( __toolchainMaxVersion ) unset( __toolchainVersion ) endif() unset( __toolchainArch ) if( __toolchainIdx EQUAL -1 ) message( FATAL_ERROR "No one of available compiler toolchains is able to compile for ${ANDROID_ARCH_NAME} platform." ) endif() list( GET __availableToolchains ${__toolchainIdx} ANDROID_TOOLCHAIN_NAME ) list( GET __availableToolchainMachines ${__toolchainIdx} ANDROID_TOOLCHAIN_MACHINE_NAME ) list( GET __availableToolchainCompilerVersions ${__toolchainIdx} ANDROID_COMPILER_VERSION ) unset( __toolchainIdx ) unset( __availableToolchains ) unset( __availableToolchainMachines ) unset( __availableToolchainArchs ) unset( __availableToolchainCompilerVersions ) # choose native API level __INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL ) string( REPLACE "android-" "" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" ) string( STRIP "${ANDROID_NATIVE_API_LEVEL}" ANDROID_NATIVE_API_LEVEL ) # adjust API level set( __real_api_level ${ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME}} ) foreach( __level ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) if( (__level LESS ANDROID_NATIVE_API_LEVEL OR __level STREQUAL ANDROID_NATIVE_API_LEVEL) AND NOT __level LESS __real_api_level ) set( __real_api_level ${__level} ) endif() endforeach() if( __real_api_level AND NOT ANDROID_NATIVE_API_LEVEL STREQUAL __real_api_level ) message( STATUS "Adjusting Android API level 'android-${ANDROID_NATIVE_API_LEVEL}' to 'android-${__real_api_level}'") set( ANDROID_NATIVE_API_LEVEL ${__real_api_level} ) endif() unset(__real_api_level) # validate list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx ) if( __levelIdx EQUAL -1 ) message( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain." ) else() if( BUILD_WITH_ANDROID_NDK ) __DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" ) if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL AND NOT __realApiLevel GREATER 9000 ) message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." ) endif() unset( __realApiLevel ) endif() set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE ) if( CMAKE_VERSION VERSION_GREATER "2.8" ) list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) endif() endif() unset( __levelIdx ) # remember target ABI set( ANDROID_ABI "${ANDROID_ABI}" CACHE STRING "The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point." FORCE ) if( CMAKE_VERSION VERSION_GREATER "2.8" ) list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME} ) set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME}} ) endif() # runtime choice (STL, rtti, exceptions) if( NOT ANDROID_STL ) # honor legacy ANDROID_USE_STLPORT if( DEFINED ANDROID_USE_STLPORT ) if( ANDROID_USE_STLPORT ) set( ANDROID_STL stlport_static ) endif() message( WARNING "You are using an obsolete variable ANDROID_USE_STLPORT to select the STL variant. Use -DANDROID_STL=stlport_static instead." ) endif() if( NOT ANDROID_STL ) set( ANDROID_STL gnustl_static ) endif() endif() set( ANDROID_STL "${ANDROID_STL}" CACHE STRING "C++ runtime" ) set( ANDROID_STL_FORCE_FEATURES ON CACHE BOOL "automatically configure rtti and exceptions support based on C++ runtime" ) mark_as_advanced( ANDROID_STL ANDROID_STL_FORCE_FEATURES ) if( BUILD_WITH_ANDROID_NDK ) if( NOT "${ANDROID_STL}" MATCHES "^(none|system|system_re|gabi\\+\\+_static|gabi\\+\\+_shared|stlport_static|stlport_shared|gnustl_static|gnustl_shared)$") message( FATAL_ERROR "ANDROID_STL is set to invalid value \"${ANDROID_STL}\". The possible values are: none -> Do not configure the runtime. system -> Use the default minimal system C++ runtime library. system_re -> Same as system but with rtti and exceptions. gabi++_static -> Use the GAbi++ runtime as a static library. gabi++_shared -> Use the GAbi++ runtime as a shared library. stlport_static -> Use the STLport runtime as a static library. stlport_shared -> Use the STLport runtime as a shared library. gnustl_static -> (default) Use the GNU STL as a static library. gnustl_shared -> Use the GNU STL as a shared library. " ) endif() elseif( BUILD_WITH_STANDALONE_TOOLCHAIN ) if( NOT "${ANDROID_STL}" MATCHES "^(none|gnustl_static|gnustl_shared)$") message( FATAL_ERROR "ANDROID_STL is set to invalid value \"${ANDROID_STL}\". The possible values are: none -> Do not configure the runtime. gnustl_static -> (default) Use the GNU STL as a static library. gnustl_shared -> Use the GNU STL as a shared library. " ) endif() endif() unset( ANDROID_RTTI ) unset( ANDROID_EXCEPTIONS ) unset( ANDROID_STL_INCLUDE_DIRS ) unset( __libstl ) unset( __libsupcxx ) if( NOT _CMAKE_IN_TRY_COMPILE AND ANDROID_NDK_RELEASE STREQUAL "r7b" AND ARMEABI_V7A AND NOT VFPV3 AND ANDROID_STL MATCHES "gnustl" ) message( WARNING "The GNU STL armeabi-v7a binaries from NDK r7b can crash non-NEON devices. The files provided with NDK r7b were not configured properly, resulting in crashes on Tegra2-based devices and others when trying to use certain floating-point functions (e.g., cosf, sinf, expf). You are strongly recommended to switch to another NDK release. " ) endif() if( NOT _CMAKE_IN_TRY_COMPILE AND X86 AND ANDROID_STL MATCHES "gnustl" AND ANDROID_NDK_RELEASE STREQUAL "r6" ) message( WARNING "The x86 system header file from NDK r6 has incorrect definition for ptrdiff_t. You are recommended to upgrade to a newer NDK release or manually patch the header: See https://android.googlesource.com/platform/development.git f907f4f9d4e56ccc8093df6fee54454b8bcab6c2 diff --git a/ndk/platforms/android-9/arch-x86/include/machine/_types.h b/ndk/platforms/android-9/arch-x86/include/machine/_types.h index 5e28c64..65892a1 100644 --- a/ndk/platforms/android-9/arch-x86/include/machine/_types.h +++ b/ndk/platforms/android-9/arch-x86/include/machine/_types.h @@ -51,7 +51,11 @@ typedef long int ssize_t; #endif #ifndef _PTRDIFF_T #define _PTRDIFF_T -typedef long ptrdiff_t; +# ifdef __ANDROID__ + typedef int ptrdiff_t; +# else + typedef long ptrdiff_t; +# endif #endif " ) endif() # setup paths and STL for standalone toolchain if( BUILD_WITH_STANDALONE_TOOLCHAIN ) set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) set( ANDROID_CLANG_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) set( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" ) if( NOT ANDROID_STL STREQUAL "none" ) set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/include/c++/${ANDROID_COMPILER_VERSION}" ) if( NOT EXISTS "${ANDROID_STL_INCLUDE_DIRS}" ) # old location ( pre r8c ) set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}" ) endif() if( ARMEABI_V7A AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" ) elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" ) list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" ) else() list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) endif() # always search static GNU STL to get the location of libsupc++.a if( ARMEABI_V7A AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) elseif( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}" ) elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libstdc++.a" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb" ) elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libstdc++.a" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) endif() if( __libstl ) set( __libsupcxx "${__libstl}/libsupc++.a" ) set( __libstl "${__libstl}/libstdc++.a" ) endif() if( NOT EXISTS "${__libsupcxx}" ) message( FATAL_ERROR "The required libstdsupc++.a is missing in your standalone toolchain. Usually it happens because of bug in make-standalone-toolchain.sh script from NDK r7, r7b and r7c. You need to either upgrade to newer NDK or manually copy $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a to ${__libsupcxx} " ) endif() if( ANDROID_STL STREQUAL "gnustl_shared" ) if( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) endif() endif() endif() endif() # clang if( "${ANDROID_TOOLCHAIN_NAME}" STREQUAL "standalone-clang" ) set( ANDROID_COMPILER_IS_CLANG 1 ) execute_process( COMMAND "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/clang${TOOL_OS_SUFFIX}" --version OUTPUT_VARIABLE ANDROID_CLANG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ) string( REGEX MATCH "[0-9]+[.][0-9]+" ANDROID_CLANG_VERSION "${ANDROID_CLANG_VERSION}") elseif( "${ANDROID_TOOLCHAIN_NAME}" MATCHES "-clang3[.][0-9]?$" ) string( REGEX MATCH "3[.][0-9]$" ANDROID_CLANG_VERSION "${ANDROID_TOOLCHAIN_NAME}") string( REGEX REPLACE "-clang${ANDROID_CLANG_VERSION}$" "-${ANDROID_COMPILER_VERSION}" ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" ) if( NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}/bin/clang${TOOL_OS_SUFFIX}" ) message( FATAL_ERROR "Could not find the Clang compiler driver" ) endif() set( ANDROID_COMPILER_IS_CLANG 1 ) set( ANDROID_CLANG_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) else() set( ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" ) unset( ANDROID_COMPILER_IS_CLANG CACHE ) endif() string( REPLACE "." "" _clang_name "clang${ANDROID_CLANG_VERSION}" ) if( NOT EXISTS "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" ) set( _clang_name "clang" ) endif() # setup paths and STL for NDK if( BUILD_WITH_ANDROID_NDK ) set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) set( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" ) if( ANDROID_STL STREQUAL "none" ) # do nothing elseif( ANDROID_STL STREQUAL "system" ) set( ANDROID_RTTI OFF ) set( ANDROID_EXCEPTIONS OFF ) set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" ) elseif( ANDROID_STL STREQUAL "system_re" ) set( ANDROID_RTTI ON ) set( ANDROID_EXCEPTIONS ON ) set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" ) elseif( ANDROID_STL MATCHES "gabi" ) if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 message( FATAL_ERROR "gabi++ is not awailable in your NDK. You have to upgrade to NDK r7 or newer to use gabi++.") endif() set( ANDROID_RTTI ON ) set( ANDROID_EXCEPTIONS OFF ) set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/gabi++/include" ) set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gabi++/libs/${ANDROID_NDK_ABI_NAME}/libgabi++_static.a" ) elseif( ANDROID_STL MATCHES "stlport" ) if( NOT ANDROID_NDK_RELEASE_NUM LESS 8004 ) # before r8d set( ANDROID_EXCEPTIONS ON ) else() set( ANDROID_EXCEPTIONS OFF ) endif() if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 set( ANDROID_RTTI OFF ) else() set( ANDROID_RTTI ON ) endif() set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" ) set( __libstl "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}/libstlport_static.a" ) elseif( ANDROID_STL MATCHES "gnustl" ) set( ANDROID_EXCEPTIONS ON ) set( ANDROID_RTTI ON ) if( EXISTS "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) if( ARMEABI_V7A AND ANDROID_COMPILER_VERSION VERSION_EQUAL "4.7" AND ANDROID_NDK_RELEASE STREQUAL "r8d" ) # gnustl binary for 4.7 compiler is buggy :( # TODO: look for right fix set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.6" ) else() set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) endif() else() set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++" ) endif() set( ANDROID_STL_INCLUDE_DIRS "${__libstl}/include" "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/include" "${__libstl}/include/backward" ) if( EXISTS "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" ) set( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" ) else() set( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libstdc++.a" ) endif() else() message( FATAL_ERROR "Unknown runtime: ${ANDROID_STL}" ) endif() # find libsupc++.a - rtti & exceptions if( ANDROID_STL STREQUAL "system_re" OR ANDROID_STL MATCHES "gnustl" ) set( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" ) # r8b or newer if( NOT EXISTS "${__libsupcxx}" ) set( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" ) # r7-r8 endif() if( NOT EXISTS "${__libsupcxx}" ) # before r7 if( ARMEABI_V7A ) if( ANDROID_FORCE_ARM_BUILD ) set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" ) else() set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" ) endif() elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD ) set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" ) else() set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" ) endif() endif() if( NOT EXISTS "${__libsupcxx}") message( ERROR "Could not find libsupc++.a for a chosen platform. Either your NDK is not supported or is broken.") endif() endif() endif() # case of shared STL linkage if( ANDROID_STL MATCHES "shared" AND DEFINED __libstl ) string( REPLACE "_static.a" "_shared.so" __libstl "${__libstl}" ) # TODO: check if .so file exists before the renaming endif() # ccache support __INIT_VARIABLE( _ndk_ccache NDK_CCACHE ENV_NDK_CCACHE ) if( _ndk_ccache ) if( DEFINED NDK_CCACHE AND NOT EXISTS NDK_CCACHE ) unset( NDK_CCACHE CACHE ) endif() find_program( NDK_CCACHE "${_ndk_ccache}" DOC "The path to ccache binary") else() unset( NDK_CCACHE CACHE ) endif() unset( _ndk_ccache ) # setup the cross-compiler if( NOT CMAKE_C_COMPILER ) if( NDK_CCACHE AND NOT ANDROID_SYSROOT MATCHES "[ ;\"]" ) set( CMAKE_C_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C compiler" ) set( CMAKE_CXX_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C++ compiler" ) if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_C_COMPILER_ARG1 "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") set( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") else() set( CMAKE_C_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") set( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") endif() else() if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_C_COMPILER "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") set( CMAKE_CXX_COMPILER "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") else() set( CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "C compiler" ) set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler" ) endif() endif() set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "assembler" ) set( CMAKE_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" ) set( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" ) set( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" ) set( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" ) set( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" ) set( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" ) set( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" ) endif() set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) if( CMAKE_VERSION VERSION_LESS 2.8.5 ) set( CMAKE_ASM_COMPILER_ARG1 "-c" ) endif() if( APPLE ) find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) if( NOT CMAKE_INSTALL_NAME_TOOL ) message( FATAL_ERROR "Could not find install_name_tool, please check your installation." ) endif() mark_as_advanced( CMAKE_INSTALL_NAME_TOOL ) endif() # Force set compilers because standard identification works badly for us include( CMakeForceCompiler ) CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_C_COMPILER_ID Clang ) endif() set( CMAKE_C_PLATFORM_ID Linux ) if( X86_64 OR MIPS64 OR ARM64_V8A ) set( CMAKE_C_SIZEOF_DATA_PTR 8 ) else() set( CMAKE_C_SIZEOF_DATA_PTR 4 ) endif() set( CMAKE_C_HAS_ISYSROOT 1 ) set( CMAKE_C_COMPILER_ABI ELF ) CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_CXX_COMPILER_ID Clang) endif() set( CMAKE_CXX_PLATFORM_ID Linux ) set( CMAKE_CXX_SIZEOF_DATA_PTR ${CMAKE_C_SIZEOF_DATA_PTR} ) set( CMAKE_CXX_HAS_ISYSROOT 1 ) set( CMAKE_CXX_COMPILER_ABI ELF ) set( CMAKE_CXX_SOURCE_FILE_EXTENSIONS cc cp cxx cpp CPP c++ C ) # force ASM compiler (required for CMake < 2.8.5) set( CMAKE_ASM_COMPILER_ID_RUN TRUE ) set( CMAKE_ASM_COMPILER_ID GNU ) set( CMAKE_ASM_COMPILER_WORKS TRUE ) set( CMAKE_ASM_COMPILER_FORCED TRUE ) set( CMAKE_COMPILER_IS_GNUASM 1) set( CMAKE_ASM_SOURCE_FILE_EXTENSIONS s S asm ) foreach( lang C CXX ASM ) if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_${lang}_COMPILER_VERSION ${ANDROID_CLANG_VERSION} ) else() set( CMAKE_${lang}_COMPILER_VERSION ${ANDROID_COMPILER_VERSION} ) endif() endforeach() # flags and definitions remove_definitions( -DANDROID ) add_definitions( -DANDROID ) if( ANDROID_SYSROOT MATCHES "[ ;\"]" ) if( CMAKE_HOST_WIN32 ) # try to convert path to 8.3 form file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd" "@echo %~s1" ) execute_process( COMMAND "$ENV{ComSpec}" /c "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd" "${ANDROID_SYSROOT}" OUTPUT_VARIABLE __path OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE __result ERROR_QUIET ) if( __result EQUAL 0 ) file( TO_CMAKE_PATH "${__path}" ANDROID_SYSROOT ) set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) else() set( ANDROID_CXX_FLAGS "--sysroot=\"${ANDROID_SYSROOT}\"" ) endif() else() set( ANDROID_CXX_FLAGS "'--sysroot=${ANDROID_SYSROOT}'" ) endif() if( NOT _CMAKE_IN_TRY_COMPILE ) # quotes can break try_compile and compiler identification message(WARNING "Path to your Android NDK (or toolchain) has non-alphanumeric symbols.\nThe build might be broken.\n") endif() else() set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) endif() # NDK flags if (ARM64_V8A ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -ffunction-sections -funwind-tables" ) set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer -fstrict-aliasing" ) set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer -fno-strict-aliasing" ) if( NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" ) endif() elseif( ARMEABI OR ARMEABI_V7A) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 ) set( ANDROID_CXX_FLAGS_RELEASE "-mthumb -fomit-frame-pointer -fno-strict-aliasing" ) set( ANDROID_CXX_FLAGS_DEBUG "-marm -fno-omit-frame-pointer -fno-strict-aliasing" ) if( NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -finline-limit=64" ) endif() else() # always compile ARMEABI_V6 in arm mode; otherwise there is no difference from ARMEABI set( ANDROID_CXX_FLAGS_RELEASE "-marm -fomit-frame-pointer -fstrict-aliasing" ) set( ANDROID_CXX_FLAGS_DEBUG "-marm -fno-omit-frame-pointer -fno-strict-aliasing" ) if( NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" ) endif() endif() elseif( X86 OR X86_64 ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) if( NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" ) endif() set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer -fstrict-aliasing" ) set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer -fno-strict-aliasing" ) elseif( MIPS OR MIPS64 ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0" ) set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer" ) set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer" ) if( NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" ) endif() elseif() set( ANDROID_CXX_FLAGS_RELEASE "" ) set( ANDROID_CXX_FLAGS_DEBUG "" ) endif() set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) # good/necessary when porting desktop libraries if( NOT X86 AND NOT ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "-Wno-psabi ${ANDROID_CXX_FLAGS}" ) endif() if( NOT ANDROID_COMPILER_VERSION VERSION_LESS "4.6" ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -no-canonical-prefixes" ) # see https://android-review.googlesource.com/#/c/47564/ endif() # ABI-specific flags if( ARMEABI_V7A ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp" ) if( NEON ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" ) elseif( VFPV3 ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" ) else() set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" ) endif() elseif( ARMEABI_V6 ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) # vfp == vfpv2 elseif( ARMEABI ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float" ) endif() if( ANDROID_STL MATCHES "gnustl" AND (EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}") ) set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o " ) set( CMAKE_CXX_CREATE_SHARED_MODULE " -o " ) set( CMAKE_CXX_LINK_EXECUTABLE " -o " ) else() set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o " ) set( CMAKE_CXX_CREATE_SHARED_MODULE " -o " ) set( CMAKE_CXX_LINK_EXECUTABLE " -o " ) endif() # STL if( EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}" ) if( EXISTS "${__libstl}" ) set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libstl}\"" ) set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libstl}\"" ) set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libstl}\"" ) endif() if( EXISTS "${__libsupcxx}" ) set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"" ) set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libsupcxx}\"" ) set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libsupcxx}\"" ) # C objects: set( CMAKE_C_CREATE_SHARED_LIBRARY " -o " ) set( CMAKE_C_CREATE_SHARED_MODULE " -o " ) set( CMAKE_C_LINK_EXECUTABLE " -o " ) set( CMAKE_C_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"" ) set( CMAKE_C_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE} \"${__libsupcxx}\"" ) set( CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} \"${__libsupcxx}\"" ) endif() if( ANDROID_STL MATCHES "gnustl" ) if( NOT EXISTS "${ANDROID_LIBM_PATH}" ) set( ANDROID_LIBM_PATH -lm ) endif() set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} ${ANDROID_LIBM_PATH}" ) set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} ${ANDROID_LIBM_PATH}" ) set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} ${ANDROID_LIBM_PATH}" ) endif() endif() # variables controlling optional build flags if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 # libGLESv2.so in NDK's prior to r7 refers to missing external symbols. # So this flag option is required for all projects using OpenGL from native. __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES ON ) else() __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES OFF ) endif() __INIT_VARIABLE( ANDROID_NO_UNDEFINED OBSOLETE_NO_UNDEFINED VALUES ON ) __INIT_VARIABLE( ANDROID_FUNCTION_LEVEL_LINKING VALUES ON ) __INIT_VARIABLE( ANDROID_GOLD_LINKER VALUES ON ) __INIT_VARIABLE( ANDROID_NOEXECSTACK VALUES ON ) __INIT_VARIABLE( ANDROID_RELRO VALUES ON ) set( ANDROID_NO_UNDEFINED ${ANDROID_NO_UNDEFINED} CACHE BOOL "Show all undefined symbols as linker errors" ) set( ANDROID_SO_UNDEFINED ${ANDROID_SO_UNDEFINED} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" ) set( ANDROID_FUNCTION_LEVEL_LINKING ${ANDROID_FUNCTION_LEVEL_LINKING} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" ) set( ANDROID_GOLD_LINKER ${ANDROID_GOLD_LINKER} CACHE BOOL "Enables gold linker" ) set( ANDROID_NOEXECSTACK ${ANDROID_NOEXECSTACK} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" ) set( ANDROID_RELRO ${ANDROID_RELRO} CACHE BOOL "Enables RELRO - a memory corruption mitigation technique" ) mark_as_advanced( ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_FUNCTION_LEVEL_LINKING ANDROID_GOLD_LINKER ANDROID_NOEXECSTACK ANDROID_RELRO ) # linker flags set( ANDROID_LINKER_FLAGS "" ) if( ARMEABI_V7A ) # this is *required* to use the following linker flags that routes around # a CPU bug in some Cortex-A8 implementations: set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--fix-cortex-a8" ) endif() if( ANDROID_NO_UNDEFINED ) if( MIPS ) # there is some sysroot-related problem in mips linker... if( NOT ANDROID_SYSROOT MATCHES "[ ;\"]" ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-undefined -Wl,-rpath-link,${ANDROID_SYSROOT}/usr/lib" ) endif() else() set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-undefined" ) endif() endif() if( ANDROID_SO_UNDEFINED ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-allow-shlib-undefined" ) endif() if( ANDROID_FUNCTION_LEVEL_LINKING ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections" ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--gc-sections" ) endif() if( ANDROID_COMPILER_VERSION VERSION_EQUAL "4.6" ) if( ANDROID_GOLD_LINKER AND (CMAKE_HOST_UNIX OR ANDROID_NDK_RELEASE_NUM GREATER 8002) AND (ARMEABI OR ARMEABI_V7A OR X86) ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=gold" ) elseif( ANDROID_NDK_RELEASE_NUM GREATER 8002 ) # after r8b set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=bfd" ) elseif( ANDROID_NDK_RELEASE STREQUAL "r8b" AND ARMEABI AND NOT _CMAKE_IN_TRY_COMPILE ) message( WARNING "The default bfd linker from arm GCC 4.6 toolchain can fail with 'unresolvable R_ARM_THM_CALL relocation' error message. See https://code.google.com/p/android/issues/detail?id=35342 On Linux and OS X host platform you can workaround this problem using gold linker (default). Rerun cmake with -DANDROID_GOLD_LINKER=ON option in case of problems. " ) endif() endif() # version 4.6 if( ANDROID_NOEXECSTACK ) if( ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -Xclang -mnoexecstack" ) else() set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -Wa,--noexecstack" ) endif() set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-z,noexecstack" ) endif() if( ANDROID_RELRO ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now" ) endif() if( ANDROID_COMPILER_IS_CLANG ) set( ANDROID_CXX_FLAGS "-target ${ANDROID_LLVM_TRIPLE} -Qunused-arguments ${ANDROID_CXX_FLAGS}" ) if( BUILD_WITH_ANDROID_NDK ) set( ANDROID_CXX_FLAGS "-gcc-toolchain ${ANDROID_TOOLCHAIN_ROOT} ${ANDROID_CXX_FLAGS}" ) endif() endif() # cache flags set( CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags" ) set( CMAKE_C_FLAGS "" CACHE STRING "c flags" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c++ Release flags" ) set( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c Release flags" ) set( CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c++ Debug flags" ) set( CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c Debug flags" ) set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags" ) set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags" ) set( CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags" ) # put flags to cache (for debug purpose only) set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" CACHE INTERNAL "Android specific c/c++ flags" ) set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE}" CACHE INTERNAL "Android specific c/c++ Release flags" ) set( ANDROID_CXX_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG}" CACHE INTERNAL "Android specific c/c++ Debug flags" ) set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Android specific c/c++ linker flags" ) # finish flags set( CMAKE_CXX_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" ) set( CMAKE_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}" ) set( CMAKE_C_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}" ) set( CMAKE_CXX_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_DEBUG}" ) set( CMAKE_C_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}" ) set( CMAKE_SHARED_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) set( CMAKE_MODULE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) set( CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) if( MIPS AND BUILD_WITH_ANDROID_NDK AND ANDROID_NDK_RELEASE STREQUAL "r8" ) set( CMAKE_SHARED_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.xsc ${CMAKE_SHARED_LINKER_FLAGS}" ) set( CMAKE_MODULE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.xsc ${CMAKE_MODULE_LINKER_FLAGS}" ) set( CMAKE_EXE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.x ${CMAKE_EXE_LINKER_FLAGS}" ) endif() # pie/pic if( NOT (ANDROID_NATIVE_API_LEVEL LESS 16) AND (NOT DEFINED ANDROID_APP_PIE OR ANDROID_APP_PIE) AND (CMAKE_VERSION VERSION_GREATER 2.8.8) ) set( CMAKE_POSITION_INDEPENDENT_CODE TRUE ) set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie") else() set( CMAKE_POSITION_INDEPENDENT_CODE FALSE ) set( CMAKE_CXX_FLAGS "-fpic ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "-fpic ${CMAKE_C_FLAGS}" ) endif() # configure rtti if( DEFINED ANDROID_RTTI AND ANDROID_STL_FORCE_FEATURES ) if( ANDROID_RTTI ) set( CMAKE_CXX_FLAGS "-frtti ${CMAKE_CXX_FLAGS}" ) else() set( CMAKE_CXX_FLAGS "-fno-rtti ${CMAKE_CXX_FLAGS}" ) endif() endif() # configure exceptios if( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES ) if( ANDROID_EXCEPTIONS ) set( CMAKE_CXX_FLAGS "-fexceptions ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "-fexceptions ${CMAKE_C_FLAGS}" ) else() set( CMAKE_CXX_FLAGS "-fno-exceptions ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "-fno-exceptions ${CMAKE_C_FLAGS}" ) endif() endif() # global includes and link directories include_directories( SYSTEM "${ANDROID_SYSROOT}/usr/include" ${ANDROID_STL_INCLUDE_DIRS} ) get_filename_component(__android_install_path "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ABSOLUTE) # avoid CMP0015 policy warning link_directories( "${__android_install_path}" ) # detect if need link crtbegin_so.o explicitly if( NOT DEFINED ANDROID_EXPLICIT_CRT_LINK ) set( __cmd "${CMAKE_CXX_CREATE_SHARED_LIBRARY}" ) string( REPLACE "" "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}" __cmd "${__cmd}" ) string( REPLACE "" "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" __cmd "${__cmd}" ) string( REPLACE "" "${CMAKE_CXX_FLAGS}" __cmd "${__cmd}" ) string( REPLACE "" "" __cmd "${__cmd}" ) string( REPLACE "" "${CMAKE_SHARED_LINKER_FLAGS}" __cmd "${__cmd}" ) string( REPLACE "" "-shared" __cmd "${__cmd}" ) string( REPLACE "" "" __cmd "${__cmd}" ) string( REPLACE "" "" __cmd "${__cmd}" ) string( REPLACE "" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toolchain_crtlink_test.so" __cmd "${__cmd}" ) string( REPLACE "" "\"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" __cmd "${__cmd}" ) string( REPLACE "" "" __cmd "${__cmd}" ) separate_arguments( __cmd ) foreach( __var ANDROID_NDK ANDROID_NDK_TOOLCHAINS_PATH ANDROID_STANDALONE_TOOLCHAIN ) if( ${__var} ) set( __tmp "${${__var}}" ) separate_arguments( __tmp ) string( REPLACE "${__tmp}" "${${__var}}" __cmd "${__cmd}") endif() endforeach() string( REPLACE "'" "" __cmd "${__cmd}" ) string( REPLACE "\"" "" __cmd "${__cmd}" ) execute_process( COMMAND ${__cmd} RESULT_VARIABLE __cmd_result OUTPUT_QUIET ERROR_QUIET ) if( __cmd_result EQUAL 0 ) set( ANDROID_EXPLICIT_CRT_LINK ON ) else() set( ANDROID_EXPLICIT_CRT_LINK OFF ) endif() endif() if( ANDROID_EXPLICIT_CRT_LINK ) set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" ) set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" ) endif() # setup output directories set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) if(NOT _CMAKE_IN_TRY_COMPILE) if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" ) set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" ) else() set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" ) endif() set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" ) endif() # copy shaed stl library to build directory if( NOT _CMAKE_IN_TRY_COMPILE AND __libstl MATCHES "[.]so$" ) get_filename_component( __libstlname "${__libstl}" NAME ) execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${__libstl}" "${LIBRARY_OUTPUT_PATH}/${__libstlname}" RESULT_VARIABLE __fileCopyProcess ) if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${LIBRARY_OUTPUT_PATH}/${__libstlname}") message( SEND_ERROR "Failed copying of ${__libstl} to the ${LIBRARY_OUTPUT_PATH}/${__libstlname}" ) endif() unset( __fileCopyProcess ) unset( __libstlname ) endif() # set these global flags for cmake client scripts to change behavior set( ANDROID True ) set( BUILD_ANDROID True ) # where is the target environment set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin" "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" "${ANDROID_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" ) # only search for libraries and includes in the ndk toolchain set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) # macro to find packages on the host OS macro( find_host_package ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) if( CMAKE_HOST_WIN32 ) SET( WIN32 1 ) SET( UNIX ) elseif( CMAKE_HOST_APPLE ) SET( APPLE 1 ) SET( UNIX ) endif() find_package( ${ARGN} ) SET( WIN32 ) SET( APPLE ) SET( UNIX 1 ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) endmacro() # macro to find programs on the host OS macro( find_host_program ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) if( CMAKE_HOST_WIN32 ) SET( WIN32 1 ) SET( UNIX ) elseif( CMAKE_HOST_APPLE ) SET( APPLE 1 ) SET( UNIX ) endif() find_program( ${ARGN} ) SET( WIN32 ) SET( APPLE ) SET( UNIX 1 ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) endmacro() macro( ANDROID_GET_ABI_RAWNAME TOOLCHAIN_FLAG VAR ) if( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI" ) set( ${VAR} "armeabi" ) elseif( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI_V7A" ) set( ${VAR} "armeabi-v7a" ) elseif( "${TOOLCHAIN_FLAG}" STREQUAL "X86" ) set( ${VAR} "x86" ) elseif( "${TOOLCHAIN_FLAG}" STREQUAL "MIPS" ) set( ${VAR} "mips" ) else() set( ${VAR} "unknown" ) endif() endmacro() # export toolchain settings for the try_compile() command if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" ) set( __toolchain_config "") foreach( __var NDK_CCACHE LIBRARY_OUTPUT_PATH_ROOT ANDROID_FORBID_SYGWIN ANDROID_SET_OBSOLETE_VARIABLES ANDROID_NDK_HOST_X64 ANDROID_NDK ANDROID_NDK_LAYOUT ANDROID_STANDALONE_TOOLCHAIN ANDROID_TOOLCHAIN_NAME ANDROID_ABI ANDROID_NATIVE_API_LEVEL ANDROID_STL ANDROID_STL_FORCE_FEATURES ANDROID_FORCE_ARM_BUILD ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_FUNCTION_LEVEL_LINKING ANDROID_GOLD_LINKER ANDROID_NOEXECSTACK ANDROID_RELRO ANDROID_LIBM_PATH ANDROID_EXPLICIT_CRT_LINK ANDROID_APP_PIE ) if( DEFINED ${__var} ) if( "${__var}" MATCHES " ") set( __toolchain_config "${__toolchain_config}set( ${__var} \"${${__var}}\" CACHE INTERNAL \"\" )\n" ) else() set( __toolchain_config "${__toolchain_config}set( ${__var} ${${__var}} CACHE INTERNAL \"\" )\n" ) endif() endif() endforeach() file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/android.toolchain.config.cmake" "${__toolchain_config}" ) unset( __toolchain_config ) endif() # force cmake to produce / instead of \ in build commands for Ninja generator if( CMAKE_GENERATOR MATCHES "Ninja" AND CMAKE_HOST_WIN32 ) # it is a bad hack after all # CMake generates Ninja makefiles with UNIX paths only if it thinks that we are going to build with MinGW set( CMAKE_COMPILER_IS_MINGW TRUE ) # tell CMake that we are MinGW set( CMAKE_CROSSCOMPILING TRUE ) # stop recursion enable_language( C ) enable_language( CXX ) # unset( CMAKE_COMPILER_IS_MINGW ) # can't unset because CMake does not convert back-slashes in response files without it unset( MINGW ) endif() # set some obsolete variables for backward compatibility set( ANDROID_SET_OBSOLETE_VARIABLES ON CACHE BOOL "Define obsolete Andrid-specific cmake variables" ) mark_as_advanced( ANDROID_SET_OBSOLETE_VARIABLES ) if( ANDROID_SET_OBSOLETE_VARIABLES ) set( ANDROID_API_LEVEL ${ANDROID_NATIVE_API_LEVEL} ) set( ARM_TARGET "${ANDROID_ABI}" ) set( ARMEABI_NDK_NAME "${ANDROID_NDK_ABI_NAME}" ) endif() # Variables controlling behavior or set by cmake toolchain: # ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips", "arm64-v8a", "x86_64", "mips64" # ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14,15,16,17,18,19,21 (depends on NDK version) # ANDROID_STL : gnustl_static/gnustl_shared/stlport_static/stlport_shared/gabi++_static/gabi++_shared/system_re/system/none # ANDROID_FORBID_SYGWIN : ON/OFF # ANDROID_NO_UNDEFINED : ON/OFF # ANDROID_SO_UNDEFINED : OFF/ON (default depends on NDK version) # ANDROID_FUNCTION_LEVEL_LINKING : ON/OFF # ANDROID_GOLD_LINKER : ON/OFF # ANDROID_NOEXECSTACK : ON/OFF # ANDROID_RELRO : ON/OFF # ANDROID_FORCE_ARM_BUILD : ON/OFF # ANDROID_STL_FORCE_FEATURES : ON/OFF # ANDROID_SET_OBSOLETE_VARIABLES : ON/OFF # Can be set only at the first run: # ANDROID_NDK # ANDROID_STANDALONE_TOOLCHAIN # ANDROID_TOOLCHAIN_NAME : the NDK name of compiler toolchain # ANDROID_NDK_HOST_X64 : try to use x86_64 toolchain (default for x64 host systems) # ANDROID_NDK_LAYOUT : the inner NDK structure (RELEASE, LINARO, ANDROID) # LIBRARY_OUTPUT_PATH_ROOT : # NDK_CCACHE : # Obsolete: # ANDROID_API_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL # ARM_TARGET : superseded by ANDROID_ABI # ARM_TARGETS : superseded by ANDROID_ABI (can be set only) # ANDROID_NDK_TOOLCHAIN_ROOT : superseded by ANDROID_STANDALONE_TOOLCHAIN (can be set only) # ANDROID_USE_STLPORT : superseded by ANDROID_STL=stlport_static # ANDROID_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL (completely removed) # # Primary read-only variables: # ANDROID : always TRUE # ARMEABI : TRUE for arm v6 and older devices # ARMEABI_V6 : TRUE for arm v6 # ARMEABI_V7A : TRUE for arm v7a # ARM64_V8A : TRUE for arm64-v8a # NEON : TRUE if NEON unit is enabled # VFPV3 : TRUE if VFP version 3 is enabled # X86 : TRUE if configured for x86 # X86_64 : TRUE if configured for x86_64 # MIPS : TRUE if configured for mips # MIPS64 : TRUE if configured for mips64 # BUILD_ANDROID : always TRUE # BUILD_WITH_ANDROID_NDK : TRUE if NDK is used # BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used # ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform # ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI # ANDROID_NDK_RELEASE : from r5 to r10d; set only for NDK # ANDROID_NDK_RELEASE_NUM : numeric ANDROID_NDK_RELEASE version (1000*major+minor) # ANDROID_ARCH_NAME : "arm", "x86", "mips", "arm64", "x86_64", "mips64" depending on ANDROID_ABI # ANDROID_SYSROOT : path to the compiler sysroot # TOOL_OS_SUFFIX : "" or ".exe" depending on host platform # ANDROID_COMPILER_IS_CLANG : TRUE if clang compiler is used # Obsolete: # ARMEABI_NDK_NAME : superseded by ANDROID_NDK_ABI_NAME # # Secondary (less stable) read-only variables: # ANDROID_COMPILER_VERSION : GCC version used (not Clang version) # ANDROID_CLANG_VERSION : version of clang compiler if clang is used # ANDROID_CXX_FLAGS : C/C++ compiler flags required by Android platform # ANDROID_SUPPORTED_ABIS : list of currently allowed values for ANDROID_ABI # ANDROID_TOOLCHAIN_MACHINE_NAME : "arm-linux-androideabi", "arm-eabi" or "i686-android-linux" # ANDROID_TOOLCHAIN_ROOT : path to the top level of toolchain (standalone or placed inside NDK) # ANDROID_CLANG_TOOLCHAIN_ROOT : path to clang tools # ANDROID_SUPPORTED_NATIVE_API_LEVELS : list of native API levels found inside NDK # ANDROID_STL_INCLUDE_DIRS : stl include paths # ANDROID_RTTI : if rtti is enabled by the runtime # ANDROID_EXCEPTIONS : if exceptions are enabled by the runtime # ANDROID_GCC_TOOLCHAIN_NAME : read-only, differs from ANDROID_TOOLCHAIN_NAME only if clang is used # ANDROID_LIBM_PATH : path to libm.so (set to something like $(TOP)/out/target/product//obj/lib/libm.so) to workaround unresolved `sincos` # # Defaults: # ANDROID_DEFAULT_NDK_API_LEVEL # ANDROID_DEFAULT_NDK_API_LEVEL_${ARCH} # ANDROID_NDK_SEARCH_PATHS # ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH # ANDROID_SUPPORTED_ABIS_${ARCH} # ANDROID_SUPPORTED_NDK_VERSIONS tmpNnpnZF/cmake/Findprocps.cmake0000664000175000017500000000065312543167424016161 0ustar chrischris# - try to find procps directories and libraries # # Once done this will define: # # PROCPS_FOUND # PROCPS_INCLUDE_DIR # PROCPS_LIBRARY # include (FindPackageHandleStandardArgs) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") find_path (PROCPS_INCLUDE_DIR proc/readproc.h) find_library (PROCPS_LIBRARY NAMES proc procps) find_package_handle_standard_args (procps DEFAULT_MSG PROCPS_LIBRARY PROCPS_INCLUDE_DIR) endif() tmpNnpnZF/appveyor.yml0000664000175000017500000000142412543167424014355 0ustar chrischris# See http://www.appveyor.com/docs/appveyor-yml version: '{build}' branches: except: - /^travis.*$/ init: - git config --global core.autocrlf input shallow_clone: true environment: matrix: - CMAKE_GENERATOR: "Visual Studio 12" CMAKE_PREFIX_PATH: C:\Qt\5.4\msvc2013_opengl - CMAKE_GENERATOR: "Visual Studio 12 Win64" CMAKE_PREFIX_PATH: C:\Qt\5.4\msvc2013_64_opengl matrix: fast_finish: true configuration: Debug before_build: - cmake -H. -Bbuild -G "%CMAKE_GENERATOR%" "-DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%" -DENABLE_GUI=ON build: project: build\apitrace.sln verbosity: minimal after_build: - cmake --build build --use-stderr --config "%CONFIGURATION%" --target package -- /verbosity:minimal #artifacts: #- path: build/apitrace-*.7z # name: apitrace tmpNnpnZF/inject/0000775000175000017500000000000012543167424013240 5ustar chrischristmpNnpnZF/inject/README.markdown0000664000175000017500000000033612543167424015743 0ustar chrischrisUtilities for injection of DLLs in Windows. Wrapper DLLs work well for self-contained APIs (e.g., OpenGL with its opengl32.dll), but not for APIs which are spread across multiple DLLs, in particular DXGI and D3D10+ APIs. tmpNnpnZF/inject/CMakeLists.txt0000664000175000017500000000112612543167424016000 0ustar chrischrisset (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) include_directories (${CMAKE_SOURCE_DIR}/thirdparty/devcon) add_library (injectee MODULE injectee.cpp ) set_target_properties (injectee PROPERTIES PREFIX "" ) install (TARGETS injectee LIBRARY DESTINATION bin) install_pdb (injectee DESTINATION bin) add_executable (injector injector.cpp ) set_target_properties (injector PROPERTIES OUTPUT_NAME inject ) target_link_libraries (injector ${GETOPT_LIBRARIES} devcon psapi ) install (TARGETS injector RUNTIME DESTINATION bin) install_pdb (injector DESTINATION bin) tmpNnpnZF/inject/injectee.cpp0000664000175000017500000010174012543167424015535 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Code for the DLL that will be injected in the target process. * * The injected DLL will manipulate the import tables to hook the * modules/functions of interest. * * See also: * - http://www.codeproject.com/KB/system/api_spying_hack.aspx * - http://www.codeproject.com/KB/threads/APIHooking.aspx * - http://msdn.microsoft.com/en-us/magazine/cc301808.aspx */ #include #include #include #include #include #include #include #include #include #include #include "inject.h" #define VERBOSITY 0 #define NOOP 0 static CRITICAL_SECTION Mutex = {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}; static HMODULE g_hThisModule = NULL; static HMODULE g_hHookModule = NULL; static void debugPrintf(const char *format, ...) { char buf[512]; va_list ap; va_start(ap, format); _vsnprintf(buf, sizeof buf, format, ap); va_end(ap); OutputDebugStringA(buf); } static HMODULE WINAPI MyLoadLibraryA(LPCSTR lpLibFileName); static HMODULE WINAPI MyLoadLibraryW(LPCWSTR lpLibFileName); static HMODULE WINAPI MyLoadLibraryExA(LPCSTR lpFileName, HANDLE hFile, DWORD dwFlags); static HMODULE WINAPI MyLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags); static FARPROC WINAPI MyGetProcAddress(HMODULE hModule, LPCSTR lpProcName); static void MyCreateProcessCommon(BOOL bRet, DWORD dwCreationFlags, LPPROCESS_INFORMATION lpProcessInformation) { if (!bRet) { return; } char szDllPath[MAX_PATH]; GetModuleFileNameA(g_hThisModule, szDllPath, sizeof szDllPath); if (!injectDll(lpProcessInformation->hProcess, szDllPath)) { debugPrintf("inject: warning: failed to inject child process\n"); } if (!(dwCreationFlags & CREATE_SUSPENDED)) { ResumeThread(lpProcessInformation->hThread); } } static BOOL WINAPI MyCreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%s\", \"%s\", ...)\n", __FUNCTION__, lpApplicationName, lpCommandLine); } BOOL bRet; bRet = CreateProcessA(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags | CREATE_SUSPENDED, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); MyCreateProcessCommon(bRet, dwCreationFlags, lpProcessInformation); return bRet; } static BOOL WINAPI MyCreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%S\", \"%S\", ...)\n", __FUNCTION__, lpApplicationName, lpCommandLine); } BOOL bRet; bRet = CreateProcessW(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags | CREATE_SUSPENDED, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); MyCreateProcessCommon(bRet, dwCreationFlags, lpProcessInformation); return bRet; } static BOOL WINAPI MyCreateProcessAsUserA(HANDLE hToken, LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%s\", \"%s\", ...)\n", __FUNCTION__, lpApplicationName, lpCommandLine); } BOOL bRet; bRet = CreateProcessAsUserA(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); MyCreateProcessCommon(bRet, dwCreationFlags, lpProcessInformation); return bRet; } static BOOL WINAPI MyCreateProcessAsUserW(HANDLE hToken, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%S\", \"%S\", ...)\n", __FUNCTION__, lpApplicationName, lpCommandLine); } BOOL bRet; bRet = CreateProcessAsUserW(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); MyCreateProcessCommon(bRet, dwCreationFlags, lpProcessInformation); return bRet; } template< class T, class I > inline T * rvaToVa(HMODULE hModule, I rva) { assert(rva != 0); return reinterpret_cast(reinterpret_cast(hModule) + rva); } static const char * getDescriptorName(HMODULE hModule, const PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor) { return rvaToVa(hModule, pImportDescriptor->Name); } static const char * getDescriptorName(HMODULE hModule, const PImgDelayDescr pDelayDescriptor) { if (pDelayDescriptor->grAttrs & dlattrRva) { return rvaToVa(hModule, pDelayDescriptor->rvaDLLName); } else { // old-stye, with ImgDelayDescr::szName being a LPCSTR return reinterpret_cast(pDelayDescriptor->rvaDLLName); } } static PIMAGE_OPTIONAL_HEADER getOptionalHeader(HMODULE hModule) { PIMAGE_DOS_HEADER pDosHeader = reinterpret_cast(hModule); assert(pDosHeader->e_magic == IMAGE_DOS_SIGNATURE); PIMAGE_NT_HEADERS pNtHeaders = rvaToVa(hModule, pDosHeader->e_lfanew); assert(pNtHeaders->Signature == IMAGE_NT_SIGNATURE); assert(pNtHeaders->OptionalHeader.NumberOfRvaAndSizes > 0); PIMAGE_OPTIONAL_HEADER pOptionalHeader = &pNtHeaders->OptionalHeader; return pOptionalHeader; } static PVOID getImageDirectoryEntry(HMODULE hModule, const char *szModule, UINT Entry) { MEMORY_BASIC_INFORMATION MemoryInfo; if (VirtualQuery(hModule, &MemoryInfo, sizeof MemoryInfo) != sizeof MemoryInfo) { debugPrintf("inject: warning: %s: VirtualQuery failed\n", szModule); return NULL; } if (MemoryInfo.Protect & (PAGE_NOACCESS | PAGE_EXECUTE)) { debugPrintf("inject: warning: %s: no read access (Protect = 0x%08lx)\n", szModule, MemoryInfo.Protect); return NULL; } PIMAGE_OPTIONAL_HEADER pOptionalHeader = getOptionalHeader(hModule); if (pOptionalHeader->DataDirectory[Entry].Size == 0) { return NULL; } UINT_PTR ImportAddress = pOptionalHeader->DataDirectory[Entry].VirtualAddress; if (!ImportAddress) { return NULL; } return rvaToVa(hModule, ImportAddress); } static PIMAGE_IMPORT_DESCRIPTOR getFirstImportDescriptor(HMODULE hModule, const char *szModule) { PVOID pEntry = getImageDirectoryEntry(hModule, szModule, IMAGE_DIRECTORY_ENTRY_IMPORT); return reinterpret_cast(pEntry); } static PImgDelayDescr getDelayImportDescriptor(HMODULE hModule, const char *szModule) { PVOID pEntry = getImageDirectoryEntry(hModule, szModule, IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT); return reinterpret_cast(pEntry); } static PIMAGE_EXPORT_DIRECTORY getExportDescriptor(HMODULE hModule) { PVOID pEntry = getImageDirectoryEntry(hModule, "(wrapper)", IMAGE_DIRECTORY_ENTRY_EXPORT); return reinterpret_cast(pEntry); } static BOOL replaceAddress(LPVOID *lpOldAddress, LPVOID lpNewAddress) { DWORD flOldProtect; if (*lpOldAddress == lpNewAddress) { return TRUE; } EnterCriticalSection(&Mutex); if (!(VirtualProtect(lpOldAddress, sizeof *lpOldAddress, PAGE_READWRITE, &flOldProtect))) { LeaveCriticalSection(&Mutex); return FALSE; } *lpOldAddress = lpNewAddress; if (!(VirtualProtect(lpOldAddress, sizeof *lpOldAddress, flOldProtect, &flOldProtect))) { LeaveCriticalSection(&Mutex); return FALSE; } LeaveCriticalSection(&Mutex); return TRUE; } /* Return pointer to patcheable function address. * * See also: * * - An In-Depth Look into the Win32 Portable Executable File Format, Part 2, Matt Pietrek, * http://msdn.microsoft.com/en-gb/magazine/cc301808.aspx * * - http://www.microsoft.com/msj/1298/hood/hood1298.aspx * */ static LPVOID * getOldFunctionAddress(HMODULE hModule, const char *szDescriptorName, DWORD OriginalFirstThunk, DWORD FirstThunk, const char* pszFunctionName) { if (VERBOSITY >= 4) { debugPrintf("inject: %s(%s, %s)\n", __FUNCTION__, szDescriptorName, pszFunctionName); } PIMAGE_THUNK_DATA pThunkIAT = rvaToVa(hModule, FirstThunk); UINT_PTR pRealFunction = 0; PIMAGE_THUNK_DATA pThunk; if (OriginalFirstThunk) { pThunk = rvaToVa(hModule, OriginalFirstThunk); } else { pThunk = pThunkIAT; } while (pThunk->u1.Function) { if (OriginalFirstThunk == 0 || pThunk->u1.Ordinal & IMAGE_ORDINAL_FLAG) { // No name -- search by the real function address if (!pRealFunction) { HMODULE hRealModule = GetModuleHandleA(szDescriptorName); assert(hRealModule); pRealFunction = (UINT_PTR)GetProcAddress(hRealModule, pszFunctionName); if (!pRealFunction) { return NULL; } } if (pThunkIAT->u1.Function == pRealFunction) { return (LPVOID *)(&pThunkIAT->u1.Function); } } else { // Search by name PIMAGE_IMPORT_BY_NAME pImport = rvaToVa(hModule, pThunk->u1.AddressOfData); const char* szName = (const char* )pImport->Name; if (strcmp(pszFunctionName, szName) == 0) { return (LPVOID *)(&pThunkIAT->u1.Function); } } ++pThunk; ++pThunkIAT; } return NULL; } static LPVOID * getOldFunctionAddress(HMODULE hModule, PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor, const char* pszFunctionName) { assert(pImportDescriptor->TimeDateStamp != 0 || pImportDescriptor->Name != 0); return getOldFunctionAddress(hModule, getDescriptorName(hModule, pImportDescriptor), pImportDescriptor->OriginalFirstThunk, pImportDescriptor->FirstThunk, pszFunctionName); } // See // http://www.microsoft.com/msj/1298/hood/hood1298.aspx // http://msdn.microsoft.com/en-us/library/16b2dyk5.aspx static LPVOID * getOldFunctionAddress(HMODULE hModule, PImgDelayDescr pDelayDescriptor, const char* pszFunctionName) { assert(pDelayDescriptor->rvaDLLName != 0); return getOldFunctionAddress(hModule, getDescriptorName(hModule, pDelayDescriptor), pDelayDescriptor->rvaINT, pDelayDescriptor->rvaIAT, pszFunctionName); } template< class T > static BOOL patchFunction(HMODULE hModule, const char *szModule, const char *pszDllName, T pImportDescriptor, const char *pszFunctionName, LPVOID lpNewAddress) { LPVOID* lpOldFunctionAddress = getOldFunctionAddress(hModule, pImportDescriptor, pszFunctionName); if (lpOldFunctionAddress == NULL) { return FALSE; } if (*lpOldFunctionAddress == lpNewAddress) { return TRUE; } DWORD Offset = (DWORD)(UINT_PTR)lpOldFunctionAddress - (UINT_PTR)hModule; if (VERBOSITY > 0) { debugPrintf("inject: patching %s!0x%lx -> %s!%s\n", szModule, Offset, pszDllName, pszFunctionName); } BOOL bRet; bRet = replaceAddress(lpOldFunctionAddress, lpNewAddress); if (!bRet) { debugPrintf("inject: failed to patch %s!0x%lx -> %s!%s\n", szModule, Offset, pszDllName, pszFunctionName); } return bRet; } struct StrCompare : public std::binary_function { bool operator() (const char * s1, const char * s2) const { return strcmp(s1, s2) < 0; } }; typedef std::map FunctionMap; struct StrICompare : public std::binary_function { bool operator() (const char * s1, const char * s2) const { return stricmp(s1, s2) < 0; } }; struct Module { bool bInternal; FunctionMap functionMap; }; typedef std::map ModulesMap; /* This is only modified at DLL_PROCESS_ATTACH time. */ static ModulesMap modulesMap; static inline bool isMatchModuleName(const char *szModuleName) { ModulesMap::const_iterator modIt = modulesMap.find(szModuleName); return modIt != modulesMap.end(); } /* Set of previously hooked modules */ static std::set g_hHookedModules; template< class T > void patchDescriptor(HMODULE hModule, const char *szModule, T pImportDescriptor) { const char* szDescriptorName = getDescriptorName(hModule, pImportDescriptor); ModulesMap::const_iterator modIt = modulesMap.find(szDescriptorName); if (modIt != modulesMap.end()) { const char *szMatchModule = modIt->first; // same as szDescriptorName const Module & module = modIt->second; const FunctionMap & functionMap = module.functionMap; FunctionMap::const_iterator fnIt; for (fnIt = functionMap.begin(); fnIt != functionMap.end(); ++fnIt) { const char *szFunctionName = fnIt->first; LPVOID lpNewAddress = fnIt->second; BOOL bHooked; bHooked = patchFunction(hModule, szModule, szMatchModule, pImportDescriptor, szFunctionName, lpNewAddress); if (bHooked && !module.bInternal && pSharedMem) { pSharedMem->bReplaced = TRUE; } } } } static void patchModule(HMODULE hModule, const char *szModule) { /* Never patch this module */ if (hModule == g_hThisModule) { return; } /* Never patch our hook module */ if (hModule == g_hHookModule) { return; } /* Hook modules only once */ std::pair< std::set::iterator, bool > ret; EnterCriticalSection(&Mutex); ret = g_hHookedModules.insert(hModule); LeaveCriticalSection(&Mutex); if (!ret.second) { return; } const char *szBaseName = getBaseName(szModule); /* Don't hook our replacement modules to avoid tracing internal APIs */ /* XXX: is this really a good idea? */ if (isMatchModuleName(szBaseName)) { return; } /* Leave these modules alone */ if (stricmp(szBaseName, "kernel32.dll") == 0 || stricmp(szBaseName, "ConEmuHk.dll") == 0) { return; } if (VERBOSITY > 0) { debugPrintf("inject: found module %s\n", szModule); } PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor = getFirstImportDescriptor(hModule, szModule); if (pImportDescriptor) { while (pImportDescriptor->FirstThunk) { patchDescriptor(hModule, szModule, pImportDescriptor); ++pImportDescriptor; } } PImgDelayDescr pDelayDescriptor = getDelayImportDescriptor(hModule, szModule); if (pDelayDescriptor) { while (pDelayDescriptor->rvaDLLName) { if (VERBOSITY > 1) { const char* szName = getDescriptorName(hModule, pDelayDescriptor); debugPrintf("inject: found %sdelay-load import entry for module %s\n", pDelayDescriptor->grAttrs & dlattrRva ? "" : "old-style ", szName); } patchDescriptor(hModule, szModule, pDelayDescriptor); ++pDelayDescriptor; } } } static void patchAllModules(void) { HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); if (hModuleSnap == INVALID_HANDLE_VALUE) { return; } MODULEENTRY32 me32; me32.dwSize = sizeof me32; if (Module32First(hModuleSnap, &me32)) { do { patchModule(me32.hModule, me32.szExePath); } while (Module32Next(hModuleSnap, &me32)); } CloseHandle(hModuleSnap); } static HMODULE WINAPI MyLoadLibraryA(LPCSTR lpLibFileName) { HMODULE hModule = LoadLibraryA(lpLibFileName); if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%s\") = 0x%p\n", __FUNCTION__ + 2, lpLibFileName, hModule); } if (VERBOSITY > 0) { const char *szBaseName = getBaseName(lpLibFileName); if (isMatchModuleName(szBaseName)) { if (VERBOSITY < 2) { debugPrintf("inject: intercepting %s(\"%s\")\n", __FUNCTION__, lpLibFileName); } #ifdef __GNUC__ void *caller = __builtin_return_address (0); HMODULE hModule = 0; BOOL bRet = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)caller, &hModule); assert(bRet); char szCaller[MAX_PATH]; DWORD dwRet = GetModuleFileNameA(hModule, szCaller, sizeof szCaller); assert(dwRet); debugPrintf("inject: called from %s\n", szCaller); #endif } } // Hook all new modules (and not just this one, to pick up any dependencies) patchAllModules(); return hModule; } static HMODULE WINAPI MyLoadLibraryW(LPCWSTR lpLibFileName) { HMODULE hModule = LoadLibraryW(lpLibFileName); if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(L\"%S\") = 0x%p\n", __FUNCTION__ + 2, lpLibFileName, hModule); } // Hook all new modules (and not just this one, to pick up any dependencies) patchAllModules(); return hModule; } #ifndef LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR #define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x00000100 #endif #ifndef LOAD_LIBRARY_SEARCH_APPLICATION_DIR #define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200 #endif #ifndef LOAD_LIBRARY_SEARCH_USER_DIRS #define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400 #endif #ifndef LOAD_LIBRARY_SEARCH_SYSTEM32 #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 #endif #ifndef LOAD_LIBRARY_SEARCH_DEFAULT_DIRS #define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000 #endif static inline DWORD adjustFlags(DWORD dwFlags) { /* * XXX: LoadLibraryEx seems to interpret "application directory" in respect * to the module that's calling it. So when the application restricts the * search path to application directory via * LOAD_LIBRARY_SEARCH_APPLICATION_DIR or LOAD_LIBRARY_SEARCH_DEFAULT_DIRS * flags, kernel32.dll ends up searching on the directory of the inject.dll * module. * * XXX: What about SetDefaultDllDirectories? * */ if (dwFlags & (LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS)) { dwFlags &= ~(LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_USER_DIRS | LOAD_LIBRARY_SEARCH_SYSTEM32 | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); } return dwFlags; } static HMODULE WINAPI MyLoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) { HMODULE hModule = LoadLibraryExA(lpLibFileName, hFile, adjustFlags(dwFlags)); if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(\"%s\", 0x%p, 0x%lx) = 0x%p\n", __FUNCTION__ + 2, lpLibFileName, hFile, dwFlags, hModule); } // Hook all new modules (and not just this one, to pick up any dependencies) patchAllModules(); return hModule; } static HMODULE WINAPI MyLoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) { HMODULE hModule = LoadLibraryExW(lpLibFileName, hFile, adjustFlags(dwFlags)); if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(L\"%S\", 0x%p, 0x%lx) = 0x%p\n", __FUNCTION__ + 2, lpLibFileName, hFile, dwFlags, hModule); } // Hook all new modules (and not just this one, to pick up any dependencies) patchAllModules(); return hModule; } static void logGetProcAddress(HMODULE hModule, LPCSTR lpProcName) { if (HIWORD(lpProcName) == 0) { debugPrintf("inject: intercepting %s(%u)\n", "GetProcAddress", LOWORD(lpProcName)); } else { debugPrintf("inject: intercepting %s(\"%s\")\n", "GetProcAddress", lpProcName); } } static FARPROC WINAPI MyGetProcAddress(HMODULE hModule, LPCSTR lpProcName) { if (VERBOSITY >= 3) { /* XXX this can cause segmentation faults */ logGetProcAddress(hModule, lpProcName); } if (!NOOP) { char szModule[MAX_PATH]; DWORD dwRet = GetModuleFileNameA(hModule, szModule, sizeof szModule); assert(dwRet); const char *szBaseName = getBaseName(szModule); ModulesMap::const_iterator modIt; modIt = modulesMap.find(szBaseName); if (modIt != modulesMap.end()) { if (VERBOSITY > 1 && VERBOSITY < 3) { logGetProcAddress(hModule, lpProcName); } if (HIWORD(lpProcName) == 0) { debugPrintf("inject: ignoring %s!@%u\n", szBaseName, LOWORD(lpProcName)); return GetProcAddress(hModule, lpProcName); } const Module & module = modIt->second; const FunctionMap & functionMap = module.functionMap; FunctionMap::const_iterator fnIt; fnIt = functionMap.find(lpProcName); if (fnIt != functionMap.end()) { LPVOID pProcAddress = fnIt->second; if (VERBOSITY > 0) { debugPrintf("inject: replacing %s!%s\n", szBaseName, lpProcName); } if (!module.bInternal && pSharedMem) { pSharedMem->bReplaced = TRUE; } return (FARPROC)pProcAddress; } else { if (VERBOSITY > 0 && !module.bInternal) { debugPrintf("inject: ignoring %s!%s\n", szBaseName, lpProcName); } } } } return GetProcAddress(hModule, lpProcName); } static BOOL WINAPI MyFreeLibrary(HMODULE hModule) { if (VERBOSITY >= 2) { debugPrintf("inject: intercepting %s(0x%p)\n", __FUNCTION__, hModule); } BOOL bRet = FreeLibrary(hModule); EnterCriticalSection(&Mutex); // TODO: Only clear the modules that have been freed g_hHookedModules.clear(); LeaveCriticalSection(&Mutex); return bRet; } static void registerLibraryLoaderHooks(const char *szMatchModule) { Module & module = modulesMap[szMatchModule]; module.bInternal = true; FunctionMap & functionMap = module.functionMap; functionMap["LoadLibraryA"] = (LPVOID)MyLoadLibraryA; functionMap["LoadLibraryW"] = (LPVOID)MyLoadLibraryW; functionMap["LoadLibraryExA"] = (LPVOID)MyLoadLibraryExA; functionMap["LoadLibraryExW"] = (LPVOID)MyLoadLibraryExW; functionMap["GetProcAddress"] = (LPVOID)MyGetProcAddress; functionMap["FreeLibrary"] = (LPVOID)MyFreeLibrary; } static void registerProcessThreadsHooks(const char *szMatchModule) { Module & module = modulesMap[szMatchModule]; module.bInternal = true; FunctionMap & functionMap = module.functionMap; functionMap["CreateProcessA"] = (LPVOID)MyCreateProcessA; functionMap["CreateProcessW"] = (LPVOID)MyCreateProcessW; functionMap["CreateProcessAsUserA"] = (LPVOID)MyCreateProcessAsUserA; functionMap["CreateProcessAsUserW"] = (LPVOID)MyCreateProcessAsUserW; // TODO: CreateProcessWithTokenW } static void registerModuleHooks(const char *szMatchModule, HMODULE hReplaceModule) { Module & module = modulesMap[szMatchModule]; module.bInternal = false; FunctionMap & functionMap = module.functionMap; PIMAGE_EXPORT_DIRECTORY pExportDescriptor = getExportDescriptor(hReplaceModule); assert(pExportDescriptor); DWORD *pAddressOfNames = (DWORD *)((BYTE *)hReplaceModule + pExportDescriptor->AddressOfNames); for (DWORD i = 0; i < pExportDescriptor->NumberOfNames; ++i) { const char *szFunctionName = (const char *)((BYTE *)hReplaceModule + pAddressOfNames[i]); LPVOID lpNewAddress = (LPVOID)GetProcAddress(hReplaceModule, szFunctionName); assert(lpNewAddress); functionMap[szFunctionName] = lpNewAddress; } } static void dumpRegisteredHooks(void) { if (VERBOSITY > 1) { ModulesMap::const_iterator modIt; for (modIt = modulesMap.begin(); modIt != modulesMap.end(); ++modIt) { const char *szMatchModule = modIt->first; const Module & module = modIt->second; const FunctionMap & functionMap = module.functionMap; FunctionMap::const_iterator fnIt; for (fnIt = functionMap.begin(); fnIt != functionMap.end(); ++fnIt) { const char *szFunctionName = fnIt->first; debugPrintf("inject: registered hook for %s!%s%s\n", szMatchModule, szFunctionName, module.bInternal ? " (internal)" : ""); } } } } EXTERN_C BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { const char *szNewDllName = NULL; const char *szNewDllBaseName; switch (fdwReason) { case DLL_PROCESS_ATTACH: if (VERBOSITY > 0) { debugPrintf("inject: DLL_PROCESS_ATTACH\n"); } g_hThisModule = hinstDLL; if (VERBOSITY > 0) { char szProcess[MAX_PATH]; GetModuleFileNameA(NULL, szProcess, sizeof szProcess); debugPrintf("inject: attached to process %s\n", szProcess); } /* * Calling LoadLibrary inside DllMain is strongly discouraged. But it * works quite well, provided that the loaded DLL does not require or do * anything special in its DllMain, which seems to be the general case. * * See also: * - http://stackoverflow.com/questions/4370812/calling-loadlibrary-from-dllmain * - http://msdn.microsoft.com/en-us/library/ms682583 */ if (!USE_SHARED_MEM) { szNewDllName = getenv("INJECT_DLL"); if (!szNewDllName) { debugPrintf("inject: warning: INJECT_DLL not set\n"); return FALSE; } } else { static char szSharedMemCopy[MAX_PATH]; GetSharedMem(szSharedMemCopy, sizeof szSharedMemCopy); szNewDllName = szSharedMemCopy; } if (VERBOSITY > 0) { debugPrintf("inject: loading %s\n", szNewDllName); } g_hHookModule = LoadLibraryA(szNewDllName); if (!g_hHookModule) { debugPrintf("inject: warning: failed to load %s\n", szNewDllName); return FALSE; } /* * Hook kernel32.dll functions, and its respective Windows API Set. * * http://msdn.microsoft.com/en-us/library/dn505783.aspx (Windows 8.1) * http://msdn.microsoft.com/en-us/library/hh802935.aspx (Windows 8) */ registerLibraryLoaderHooks("kernel32.dll"); registerLibraryLoaderHooks("api-ms-win-core-libraryloader-l1-1-0.dll"); registerLibraryLoaderHooks("api-ms-win-core-libraryloader-l1-1-1.dll"); registerLibraryLoaderHooks("api-ms-win-core-libraryloader-l1-2-0.dll"); registerLibraryLoaderHooks("api-ms-win-core-kernel32-legacy-l1-1-0.dll"); registerLibraryLoaderHooks("api-ms-win-core-kernel32-legacy-l1-1-1.dll"); registerProcessThreadsHooks("kernel32.dll"); registerProcessThreadsHooks("api-ms-win-core-processthreads-l1-1-0.dll"); registerProcessThreadsHooks("api-ms-win-core-processthreads-l1-1-1.dll"); registerProcessThreadsHooks("api-ms-win-core-processthreads-l1-1-2.dll"); szNewDllBaseName = getBaseName(szNewDllName); if (stricmp(szNewDllBaseName, "dxgitrace.dll") == 0) { registerModuleHooks("dxgi.dll", g_hHookModule); registerModuleHooks("d3d10.dll", g_hHookModule); registerModuleHooks("d3d10_1.dll", g_hHookModule); registerModuleHooks("d3d11.dll", g_hHookModule); registerModuleHooks("d3d9.dll", g_hHookModule); // for D3DPERF_* } else if (stricmp(szNewDllBaseName, "d2d1trace.dll") == 0) { registerModuleHooks("d2d1.dll", g_hHookModule); registerModuleHooks("dwrite.dll", g_hHookModule); } else { registerModuleHooks(szNewDllBaseName, g_hHookModule); } dumpRegisteredHooks(); patchAllModules(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: if (VERBOSITY > 0) { debugPrintf("inject: DLL_PROCESS_DETACH\n"); } break; } return TRUE; } tmpNnpnZF/inject/injector.cpp0000664000175000017500000004523512543167424015572 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Main program to start and inject a DLL into a process via a remote thread. * * For background see: * - http://en.wikipedia.org/wiki/DLL_injection#Approaches_on_Microsoft_Windows * - http://www.codeproject.com/KB/threads/completeinject.aspx * - http://www.codeproject.com/KB/threads/winspy.aspx * - http://www.codeproject.com/KB/DLL/DLL_Injection_tutorial.aspx * - http://www.codeproject.com/KB/threads/APIHooking.aspx * * Other slightly different techniques: * - http://www.fr33project.org/pages/projects/phook.htm * - http://www.hbgary.com/loading-a-dll-without-calling-loadlibrary * - http://securityxploded.com/ntcreatethreadex.php */ #include #include #include #include #include #include #include #include #ifndef ERROR_ELEVATION_REQUIRED #define ERROR_ELEVATION_REQUIRED 740 #endif #include "os_version.hpp" #include "devcon.hpp" #include "inject.h" #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) #endif static void debugPrintf(const char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } /** * Determine whether an argument should be quoted. */ static bool needsQuote(const char *arg) { char c; while (true) { c = *arg++; if (c == '\0') { break; } if (c == ' ' || c == '\t' || c == '\"') { return true; } if (c == '\\') { c = *arg++; if (c == '\0') { break; } if (c == '"') { return true; } } } return false; } static void quoteArg(std::string &s, const char *arg) { char c; unsigned backslashes = 0; s.push_back('"'); while (true) { c = *arg++; if (c == '\0') { break; } else if (c == '"') { while (backslashes) { s.push_back('\\'); --backslashes; } s.push_back('\\'); } else { if (c == '\\') { ++backslashes; } else { backslashes = 0; } } s.push_back(c); } s.push_back('"'); } // http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686335.aspx static void restartService(const char *lpServiceName) { SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); assert(hSCManager); if (!hSCManager) { return; } SC_HANDLE hService = OpenServiceA(hSCManager, lpServiceName, SC_MANAGER_ALL_ACCESS); assert(hService); if (!hService) { return; } SERVICE_STATUS_PROCESS ssp; DWORD cbBytesNeeded; QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE) &ssp, sizeof ssp, &cbBytesNeeded); BOOL bRet; if (ssp.dwCurrentState == SERVICE_RUNNING) { bRet = ControlService(hService, SERVICE_CONTROL_STOP, (LPSERVICE_STATUS) &ssp); assert(bRet); while (ssp.dwCurrentState != SERVICE_STOPPED) { Sleep(ssp.dwWaitHint); QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE) &ssp, sizeof ssp, &cbBytesNeeded); } bRet = StartService(hService, 0, NULL); assert(bRet); } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); } // Force DWM process to recreate all its Direct3D objects. static void restartDwmComposition(HANDLE hProcess) { HRESULT hr; HMODULE hModule = LoadLibraryA("dwmapi"); assert(hModule); if (!hModule) { return; } typedef HRESULT (WINAPI *PFNDWMISCOMPOSITIONENABLED)(BOOL *pfEnabled); PFNDWMISCOMPOSITIONENABLED pfnDwmIsCompositionEnabled = (PFNDWMISCOMPOSITIONENABLED)GetProcAddress(hModule, "DwmIsCompositionEnabled"); assert(pfnDwmIsCompositionEnabled); if (!pfnDwmIsCompositionEnabled) { return; } typedef HRESULT (WINAPI *PFNDWMENABLECOMPOSITION)(UINT uCompositionAction); PFNDWMENABLECOMPOSITION pfnDwmEnableComposition = (PFNDWMENABLECOMPOSITION)GetProcAddress(hModule, "DwmEnableComposition"); assert(pfnDwmEnableComposition); if (!pfnDwmEnableComposition) { return; } BOOL bIsWindows8OrGreater = IsWindows8OrGreater(); if (bIsWindows8OrGreater) { // Windows 8 ignores DwmEnableComposition(DWM_EC_DISABLECOMPOSITION). // It is however possible to force DWM to restart by restarting the // display device via the devcon utility devconEnable(DEVCON_CLASS_DISPLAY); } else { BOOL fEnabled = FALSE; hr = pfnDwmIsCompositionEnabled(&fEnabled); if (FAILED(hr) || !fEnabled) { return; } fprintf(stderr, "info: restarting DWM composition\n"); hr = pfnDwmEnableComposition(DWM_EC_DISABLECOMPOSITION); assert(SUCCEEDED(hr)); if (FAILED(hr)) { return; } Sleep(1000/30); hr = pfnDwmEnableComposition(DWM_EC_ENABLECOMPOSITION); assert(SUCCEEDED(hr)); (void)hr; } fprintf(stderr, "Press any key when finished tracing\n"); getchar(); DWORD dwExitCode; if (GetExitCodeProcess(hProcess, &dwExitCode) && dwExitCode != STILL_ACTIVE) { // DWM process has already terminated return; } fprintf(stderr, "info: restarting DWM process\n"); if (bIsWindows8OrGreater) { // From Windows 8 onwards DWM no longer runs as a service. We just // kill it and winlogon parent process will respawn it. if (!TerminateProcess(hProcess, 0)) { logLastError("failed to terminate DWM process"); } } else { hr = pfnDwmEnableComposition(DWM_EC_DISABLECOMPOSITION); assert(SUCCEEDED(hr)); restartService("uxsms"); } } static BOOL attachDebugger(DWORD dwProcessId) { long lRet; HKEY hKey; lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug", 0, KEY_READ, &hKey); if (lRet != ERROR_SUCCESS) { debugPrintf("error: RegOpenKeyExA failed\n"); return FALSE; } char szDebugger[1024]; DWORD cbDebugger = sizeof szDebugger; lRet = RegQueryValueExA(hKey, "Debugger", NULL, NULL, (BYTE *)szDebugger, &cbDebugger); RegCloseKey(hKey); if (lRet != ERROR_SUCCESS) { debugPrintf("error: RegQueryValueExA failed\n"); return FALSE; } SECURITY_ATTRIBUTES sa = { sizeof sa, 0, TRUE }; HANDLE hEvent = CreateEvent(&sa, FALSE, FALSE, NULL); char szDebuggerCommand[1024]; _snprintf(szDebuggerCommand, sizeof szDebuggerCommand, szDebugger, dwProcessId, (DWORD)(UINT_PTR)hEvent, NULL); debugPrintf("%s\n", szDebuggerCommand); PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof pi); STARTUPINFOA si; ZeroMemory(&si, sizeof si); si.cb = sizeof &si; BOOL bRet = FALSE; if (!CreateProcessA( NULL, szDebuggerCommand, NULL, // process attributes NULL, // thread attributes TRUE, // inherit (event) handles 0, NULL, // environment NULL, // current directory &si, &pi)) { debugPrintf("error: CreateProcessA failed 0x%08lx\n", GetLastError()); } else { HANDLE handles[] = { hEvent, pi.hProcess }; DWORD dwRet = WaitForMultipleObjects(_countof(handles), handles, FALSE, INFINITE); bRet = dwRet == WAIT_OBJECT_0; CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } CloseHandle(hEvent); return bRet; } static DWORD getProcessIdByName(const char *szProcessName) { DWORD dwProcessId = 0; HANDLE hProcessSnap; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 pe32; pe32.dwSize = sizeof pe32; if (Process32First(hProcessSnap, &pe32)) { do { if (stricmp(szProcessName, pe32.szExeFile) == 0) { dwProcessId = pe32.th32ProcessID; break; } } while (Process32Next(hProcessSnap, &pe32)); } CloseHandle(hProcessSnap); } return dwProcessId; } static bool isNumber(const char *arg) { while (*arg) { if (!isdigit(*arg++)) { return false; } } return true; } static void help(void) { fprintf(stderr, "usage:\n" " inject -D [args] ...\n" " inject -D \n" " inject -D !\n" ); } static const struct option long_options[] = { { "help", 0, NULL, 'h'}, { "debug", 0, NULL, 'd'}, { "dll", 1, NULL, 'D'}, { "pid", 1, NULL, 'p'}, { "tid", 1, NULL, 't'}, { NULL, 0, NULL, 0} }; int main(int argc, char *argv[]) { BOOL bDebug = FALSE; BOOL bAttach = FALSE; DWORD dwProcessId = 0; DWORD dwThreadId = 0; const char *szDll = NULL; int option_index = 0; while (true) { int opt = getopt_long_only(argc, argv, "hdD:p:t:", long_options, &option_index); if (opt == -1) { break; } switch (opt) { case 'h': help(); return 0; case 'd': bDebug = TRUE; break; case 'D': szDll = optarg; break; case 'p': dwProcessId = strtoul(optarg, NULL, 0); bAttach = TRUE; break; case 't': dwThreadId = strtoul(optarg, NULL, 0); bAttach = TRUE; break; default: debugPrintf("inject: invalid option '%c'\n", optopt); help(); return 1; } } if (!bAttach) { if (argc - optind < 1) { debugPrintf("inject: error: insufficient number of arguments\n"); help(); return 1; } if (isNumber(argv[optind])) { dwProcessId = atol(argv[optind]); bAttach = TRUE; } else if (argv[optind][0] == '!') { const char *szProcessName = &argv[optind][1]; dwProcessId = getProcessIdByName(szProcessName); if (!dwProcessId) { debugPrintf("error: failed to find process %s\n", szProcessName); return 1; } bAttach = TRUE; } } if (!szDll) { debugPrintf("inject: error: DLL not specificed\n"); help(); return 1; } HANDLE hSemaphore = NULL; if (!USE_SHARED_MEM) { SetEnvironmentVariableA("INJECT_DLL", szDll); } else { hSemaphore = CreateSemaphore(NULL, 1, 1, "inject_semaphore"); if (hSemaphore == NULL) { debugPrintf("error: failed to create semaphore\n"); return 1; } DWORD dwWait = WaitForSingleObject(hSemaphore, 0); if (dwWait == WAIT_TIMEOUT) { debugPrintf("info: waiting for another inject instance to finish\n"); dwWait = WaitForSingleObject(hSemaphore, INFINITE); } if (dwWait != WAIT_OBJECT_0) { debugPrintf("error: failed to enter semaphore gate\n"); return 1; } SetSharedMem(szDll); } BOOL bAttachDwm = FALSE; PROCESS_INFORMATION processInfo; HANDLE hProcess; if (bAttach) { BOOL bRet; HANDLE hToken = NULL; bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken); if (!bRet) { debugPrintf("error: OpenProcessToken returned %u\n", (unsigned)bRet); return 1; } LUID Luid; bRet = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid); if (!bRet) { debugPrintf("error: LookupPrivilegeValue returned %u\n", (unsigned)bRet); return 1; } TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; tp.Privileges[0].Luid = Luid; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof tp, NULL, NULL); if (!bRet) { debugPrintf("error: AdjustTokenPrivileges returned %u\n", (unsigned)bRet); return 1; } DWORD dwDesiredAccess = PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_TERMINATE; hProcess = OpenProcess( dwDesiredAccess, FALSE /* bInheritHandle */, dwProcessId); if (!hProcess) { logLastError("failed to open process"); return 1; } char szProcess[MAX_PATH]; DWORD dwRet = GetModuleFileNameEx(hProcess, 0, szProcess, sizeof szProcess); assert(dwRet); if (dwRet && stricmp(getBaseName(szProcess), "dwm.exe") == 0) { bAttachDwm = TRUE; } } else { std::string commandLine; char sep = 0; for (int i = optind; i < argc; ++i) { const char *arg = argv[i]; if (sep) { commandLine.push_back(sep); } if (needsQuote(arg)) { quoteArg(commandLine, arg); } else { commandLine.append(arg); } sep = ' '; } STARTUPINFO startupInfo; memset(&startupInfo, 0, sizeof startupInfo); startupInfo.cb = sizeof startupInfo; // Create the process in suspended state if (!CreateProcessA( NULL, const_cast(commandLine.c_str()), // only modified by CreateProcessW 0, // process attributes 0, // thread attributes TRUE, // inherit handles CREATE_SUSPENDED, NULL, // environment NULL, // current directory &startupInfo, &processInfo)) { DWORD dwLastError = GetLastError(); fprintf(stderr, "error: failed to execute %s (%lu)\n", commandLine.c_str(), dwLastError); if (dwLastError == ERROR_ELEVATION_REQUIRED) { fprintf(stderr, "error: target program requires elevated priviledges and must be started from an Administrator Command Prompt, or UAC must be disabled\n"); } return 1; } hProcess = processInfo.hProcess; } /* * XXX: Mixed architecture don't quite work. See also * http://www.corsix.org/content/dll-injection-and-wow64 */ { typedef BOOL (WINAPI *PFNISWOW64PROCESS)(HANDLE, PBOOL); PFNISWOW64PROCESS pfnIsWow64Process; pfnIsWow64Process = (PFNISWOW64PROCESS) GetProcAddress(GetModuleHandleA("kernel32"), "IsWow64Process"); if (pfnIsWow64Process) { BOOL isParentWow64 = FALSE; BOOL isChildWow64 = FALSE; if (pfnIsWow64Process(GetCurrentProcess(), &isParentWow64) && pfnIsWow64Process(hProcess, &isChildWow64) && isParentWow64 != isChildWow64) { debugPrintf("error: binaries mismatch: you need to use the " #ifdef _WIN64 "32-bits" #else "64-bits" #endif " apitrace binaries to trace this application\n"); TerminateProcess(hProcess, 1); return 1; } } } if (bAttachDwm && IsWindows8OrGreater()) { // Switch to Microsoft Basic Display Driver before injecting, so that // we don't trace with it. devconDisable(DEVCON_CLASS_DISPLAY); Sleep(1000); } const char *szDllName; szDllName = "injectee.dll"; char szDllPath[MAX_PATH]; GetModuleFileNameA(NULL, szDllPath, sizeof szDllPath); getDirName(szDllPath); strncat(szDllPath, szDllName, sizeof szDllPath - strlen(szDllPath) - 1); if (bDebug) { attachDebugger(GetProcessId(hProcess)); } #if 1 if (!injectDll(hProcess, szDllPath)) { TerminateProcess(hProcess, 1); return 1; } #endif DWORD exitCode; if (bAttach) { if (bAttachDwm) { restartDwmComposition(hProcess); } if (dwThreadId) { HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, TRUE, dwThreadId); if (hThread) { ResumeThread(hThread); WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); } else { debugPrintf("inject: failed to open thread %lu\n", dwThreadId); } return 0; } exitCode = 0; } else { // Start main process thread ResumeThread(processInfo.hThread); // Wait for it to finish WaitForSingleObject(hProcess, INFINITE); if (pSharedMem && !pSharedMem->bReplaced) { debugPrintf("warning: %s was never used: application probably does not use this API\n", szDll); } exitCode = ~0; GetExitCodeProcess(hProcess, &exitCode); CloseHandle(processInfo.hThread); } CloseHandle(hProcess); if (hSemaphore) { ReleaseSemaphore(hSemaphore, 1, NULL); CloseHandle(hSemaphore); } return (int)exitCode; } tmpNnpnZF/inject/inject.h0000664000175000017500000001714412543167424014674 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Code for the DLL that will be injected in the target process. * * The injected DLL will manipulate the import tables to hook the * modules/functions of interest. * * See also: * - http://www.codeproject.com/KB/system/api_spying_hack.aspx * - http://www.codeproject.com/KB/threads/APIHooking.aspx * - http://msdn.microsoft.com/en-us/magazine/cc301808.aspx */ #include #include static void #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif debugPrintf(const char *format, ...); static void logLastError(const char *szMsg) { DWORD dwLastError = GetLastError(); // http://msdn.microsoft.com/en-gb/library/windows/desktop/ms680582.aspx LPSTR lpErrorMsg = NULL; DWORD cbWritten; cbWritten = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) &lpErrorMsg, 0, NULL); if (cbWritten) { debugPrintf("inject: error: %s: %s", szMsg, lpErrorMsg); } else { debugPrintf("inject: error: %s: %lu\n", szMsg, dwLastError); } LocalFree(lpErrorMsg); } static inline const char * getSeparator(const char *szFilename) { const char *p, *q; p = NULL; q = szFilename; char c; do { c = *q++; if (c == '\\' || c == '/' || c == ':') { p = q; } } while (c); return p; } static inline const char * getBaseName(const char *szFilename) { const char *pSeparator = getSeparator(szFilename); if (!pSeparator) { return szFilename; } return pSeparator; } static inline void getDirName(char *szFilename) { char *pSeparator = const_cast(getSeparator(szFilename)); if (pSeparator) { *pSeparator = '\0'; } } static inline void getModuleName(char *szModuleName, size_t n, const char *szFilename) { char *p = szModuleName; const char *q = getBaseName(szFilename); char c; while (--n) { c = *q++; if (c == '.' || c == '\0') { break; } *p++ = c; }; *p++ = '\0'; } #define USE_SHARED_MEM 1 struct SharedMem { BOOL bReplaced; char szDllName[4096 - sizeof(BOOL)]; }; static SharedMem *pSharedMem = NULL; static HANDLE hFileMapping = NULL; static SharedMem * OpenSharedMemory(void) { if (pSharedMem) { return pSharedMem; } // Create a NULL DACL to enable the shared memory being accessed by any // process we attach to. SECURITY_ATTRIBUTES sa; SECURITY_DESCRIPTOR sd; LPSECURITY_ATTRIBUTES lpSA; if (InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION) && SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE)) { ZeroMemory(&sa, sizeof sa); sa.nLength = sizeof sa; sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = &sd; lpSA = &sa; } hFileMapping = CreateFileMapping( INVALID_HANDLE_VALUE, // system paging file lpSA, // lpAttributes PAGE_READWRITE, // read/write access 0, // dwMaximumSizeHigh sizeof(SharedMem), // dwMaximumSizeLow TEXT("injectfilemap")); // name of map object if (hFileMapping == NULL) { logLastError("failed to create file mapping"); return NULL; } BOOL bAlreadyExists = (GetLastError() == ERROR_ALREADY_EXISTS); pSharedMem = (SharedMem *)MapViewOfFile( hFileMapping, FILE_MAP_WRITE, // read/write access 0, // dwFileOffsetHigh 0, // dwFileOffsetLow 0); // dwNumberOfBytesToMap (entire file) if (pSharedMem == NULL) { logLastError("failed to map view"); return NULL; } if (!bAlreadyExists) { memset(pSharedMem, 0, sizeof *pSharedMem); } return pSharedMem; } static inline VOID CloseSharedMem(void) { if (!pSharedMem) { return; } UnmapViewOfFile(pSharedMem); pSharedMem = NULL; CloseHandle(hFileMapping); hFileMapping = NULL; } static inline VOID SetSharedMem(LPCSTR lpszSrc) { SharedMem *pSharedMem = OpenSharedMemory(); if (!pSharedMem) { return; } LPSTR lpszDst = pSharedMem->szDllName; size_t n = 1; while (*lpszSrc && n < sizeof pSharedMem->szDllName) { *lpszDst++ = *lpszSrc++; n++; } *lpszDst = '\0'; } static inline VOID GetSharedMem(LPSTR lpszDst, size_t n) { SharedMem *pSharedMem = OpenSharedMemory(); if (!pSharedMem) { return; } LPCSTR lpszSrc = pSharedMem->szDllName; while (*lpszSrc && --n) { *lpszDst++ = *lpszSrc++; } *lpszDst = '\0'; } static BOOL injectDll(HANDLE hProcess, const char *szDllPath) { BOOL bRet = FALSE; PTHREAD_START_ROUTINE lpStartAddress; HANDLE hThread; DWORD hModule; // Allocate memory in the target process to hold the DLL name size_t szDllPathLength = strlen(szDllPath) + 1; void *lpMemory = VirtualAllocEx(hProcess, NULL, szDllPathLength, MEM_COMMIT, PAGE_READWRITE); if (!lpMemory) { logLastError("failed to allocate memory in the process"); goto no_memory; } // Copy DLL name into the target process if (!WriteProcessMemory(hProcess, lpMemory, szDllPath, szDllPathLength, NULL)) { logLastError("failed to write into process memory"); goto no_thread; } /* * Get LoadLibraryA address from kernel32.dll. It's the same for all the * process (XXX: but only within the same architecture). */ lpStartAddress = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("KERNEL32"), "LoadLibraryA"); // Create remote thread in another process hThread = CreateRemoteThread(hProcess, NULL, 0, lpStartAddress, lpMemory, 0, NULL); if (!hThread) { logLastError("failed to create remote thread"); goto no_thread; } // Wait for it to finish WaitForSingleObject(hThread, INFINITE); GetExitCodeThread(hThread, &hModule); if (!hModule) { debugPrintf("inject: error: failed to load %s into the remote process\n", szDllPath); } else { bRet = TRUE; } CloseHandle(hThread); no_thread: VirtualFreeEx(hProcess, lpMemory, 0, MEM_RELEASE); no_memory: return bRet; } tmpNnpnZF/specs/0000775000175000017500000000000012543167424013101 5ustar chrischristmpNnpnZF/specs/d3d8.py0000664000175000017500000005657412543167424014236 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d8.h""" from winapi import * from d3d8types import * from d3d8caps import * D3DSHADER8 = Blob(Const(DWORD), "_shaderSize(pFunction)") D3DSPD = Flags(DWORD, [ "D3DSPD_IUNKNOWN", ]) D3DADAPTER = FakeEnum(UINT, [ "D3DADAPTER_DEFAULT", ]) D3DENUM = FakeEnum(DWORD, [ "D3DENUM_NO_WHQL_LEVEL", ]) D3DSGR = Flags(DWORD, [ "D3DSGR_NO_CALIBRATION", "D3DSGR_CALIBRATE", ]) D3DCURSOR = Flags(DWORD, [ "D3DCURSOR_IMMEDIATE_UPDATE", ]) HRESULT = MAKE_HRESULT(ok = "D3D_OK", errors = [ "D3DERR_WRONGTEXTUREFORMAT", "D3DERR_UNSUPPORTEDCOLOROPERATION", "D3DERR_UNSUPPORTEDCOLORARG", "D3DERR_UNSUPPORTEDALPHAOPERATION", "D3DERR_UNSUPPORTEDALPHAARG", "D3DERR_TOOMANYOPERATIONS", "D3DERR_CONFLICTINGTEXTUREFILTER", "D3DERR_UNSUPPORTEDFACTORVALUE", "D3DERR_CONFLICTINGRENDERSTATE", "D3DERR_UNSUPPORTEDTEXTUREFILTER", "D3DERR_CONFLICTINGTEXTUREPALETTE", "D3DERR_DRIVERINTERNALERROR", "D3DERR_NOTFOUND", "D3DERR_MOREDATA", "D3DERR_DEVICELOST", "D3DERR_DEVICENOTRESET", "D3DERR_NOTAVAILABLE", "D3DERR_OUTOFVIDEOMEMORY", "D3DERR_INVALIDDEVICE", "D3DERR_INVALIDCALL", "D3DERR_DRIVERINVALIDCALL", ]) IDirect3D8 = Interface("IDirect3D8", IUnknown) IDirect3DDevice8 = Interface("IDirect3DDevice8", IUnknown) IDirect3DSwapChain8 = Interface("IDirect3DSwapChain8", IUnknown) IDirect3DResource8 = Interface("IDirect3DResource8", IUnknown) IDirect3DBaseTexture8 = Interface("IDirect3DBaseTexture8", IDirect3DResource8) IDirect3DTexture8 = Interface("IDirect3DTexture8", IDirect3DBaseTexture8) IDirect3DVolumeTexture8 = Interface("IDirect3DVolumeTexture8", IDirect3DBaseTexture8) IDirect3DCubeTexture8 = Interface("IDirect3DCubeTexture8", IDirect3DBaseTexture8) IDirect3DVertexBuffer8 = Interface("IDirect3DVertexBuffer8", IDirect3DResource8) IDirect3DIndexBuffer8 = Interface("IDirect3DIndexBuffer8", IDirect3DResource8) IDirect3DSurface8 = Interface("IDirect3DSurface8", IUnknown) IDirect3DVolume8 = Interface("IDirect3DVolume8", IUnknown) PDIRECT3D8 = ObjPointer(IDirect3D8) PDIRECT3DDEVICE8 = ObjPointer(IDirect3DDevice8) PDIRECT3DSWAPCHAIN8 = ObjPointer(IDirect3DSwapChain8) PDIRECT3DRESOURCE8 = ObjPointer(IDirect3DResource8) PDIRECT3DBASETEXTURE8 = ObjPointer(IDirect3DBaseTexture8) PDIRECT3DTEXTURE8 = ObjPointer(IDirect3DTexture8) PDIRECT3DVOLUMETEXTURE8 = ObjPointer(IDirect3DVolumeTexture8) PDIRECT3DCUBETEXTURE8 = ObjPointer(IDirect3DCubeTexture8) PDIRECT3DVERTEXBUFFER8 = ObjPointer(IDirect3DVertexBuffer8) PDIRECT3DINDEXBUFFER8 = ObjPointer(IDirect3DIndexBuffer8) PDIRECT3DSURFACE8 = ObjPointer(IDirect3DSurface8) PDIRECT3DVOLUME8 = ObjPointer(IDirect3DVolume8) IDirect3D8.methods += [ StdMethod(HRESULT, "RegisterSoftwareDevice", [(OpaquePointer(Void), "pInitializeFunction")], sideeffects=False), StdMethod(UINT, "GetAdapterCount", [], sideeffects=False), StdMethod(HRESULT, "GetAdapterIdentifier", [(D3DADAPTER, "Adapter"), (D3DENUM, "Flags"), Out(Pointer(D3DADAPTER_IDENTIFIER8), "pIdentifier")], sideeffects=False), StdMethod(UINT, "GetAdapterModeCount", [(D3DADAPTER, "Adapter")], sideeffects=False), StdMethod(HRESULT, "EnumAdapterModes", [(D3DADAPTER, "Adapter"), (UINT, "Mode"), Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetAdapterDisplayMode", [(D3DADAPTER, "Adapter"), Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceType", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "CheckType"), (D3DFORMAT, "DisplayFormat"), (D3DFORMAT, "BackBufferFormat"), (BOOL, "Windowed")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceFormat", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "AdapterFormat"), (D3DUSAGE, "Usage"), (D3DRESOURCETYPE, "RType"), (D3DFORMAT, "CheckFormat")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceMultiSampleType", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "SurfaceFormat"), (BOOL, "Windowed"), (D3DMULTISAMPLE_TYPE, "MultiSampleType")], sideeffects=False), StdMethod(HRESULT, "CheckDepthStencilMatch", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "AdapterFormat"), (D3DFORMAT, "RenderTargetFormat"), (D3DFORMAT, "DepthStencilFormat")], sideeffects=False), StdMethod(HRESULT, "GetDeviceCaps", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), Out(Pointer(D3DCAPS8), "pCaps")], sideeffects=False), StdMethod(HMONITOR, "GetAdapterMonitor", [(D3DADAPTER, "Adapter")], sideeffects=False), StdMethod(HRESULT, "CreateDevice", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (HWND, "hFocusWindow"), (D3DCREATE, "BehaviorFlags"), InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(PDIRECT3DDEVICE8), "ppReturnedDeviceInterface")]), ] IDirect3DDevice8.methods += [ StdMethod(HRESULT, "TestCooperativeLevel", []), StdMethod(UINT, "GetAvailableTextureMem", [], sideeffects=False), StdMethod(HRESULT, "ResourceManagerDiscardBytes", [(DWORD, "Bytes")]), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(PDIRECT3D8), "ppD3D8")]), StdMethod(HRESULT, "GetDeviceCaps", [Out(Pointer(D3DCAPS8), "pCaps")], sideeffects=False), StdMethod(HRESULT, "GetDisplayMode", [Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetCreationParameters", [Out(Pointer(D3DDEVICE_CREATION_PARAMETERS), "pParameters")], sideeffects=False), StdMethod(HRESULT, "SetCursorProperties", [(UINT, "XHotSpot"), (UINT, "YHotSpot"), (PDIRECT3DSURFACE8, "pCursorBitmap")]), # XXX: There are different signatures of # IDirect3DDevice8::SetCursorPosition depending on the DXSDK version #StdMethod(Void, "SetCursorPosition", [(UINT, "XScreenSpace"), (UINT, "YScreenSpace"), (D3DCURSOR, "Flags")]), StdMethod(Void, "SetCursorPosition", [(Int, "X"), (Int, "Y"), (D3DCURSOR, "Flags")]), StdMethod(BOOL, "ShowCursor", [(BOOL, "bShow")]), StdMethod(HRESULT, "CreateAdditionalSwapChain", [InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(PDIRECT3DSWAPCHAIN8), "pSwapChain")]), StdMethod(HRESULT, "Reset", [InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters")]), StdMethod(HRESULT, "Present", [(ConstPointer(RECT), "pSourceRect"), (ConstPointer(RECT), "pDestRect"), (HWND, "hDestWindowOverride"), (ConstPointer(RGNDATA), "pDirtyRegion")]), StdMethod(HRESULT, "GetBackBuffer", [(UINT, "BackBuffer"), (D3DBACKBUFFER_TYPE, "Type"), Out(Pointer(PDIRECT3DSURFACE8), "ppBackBuffer")]), StdMethod(HRESULT, "GetRasterStatus", [Out(Pointer(D3DRASTER_STATUS), "pRasterStatus")], sideeffects=False), StdMethod(Void, "SetGammaRamp", [(D3DSGR, "Flags"), (ConstPointer(D3DGAMMARAMP), "pRamp")]), StdMethod(Void, "GetGammaRamp", [Out(Pointer(D3DGAMMARAMP), "pRamp")], sideeffects=False), StdMethod(HRESULT, "CreateTexture", [(UINT, "Width"), (UINT, "Height"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DTEXTURE8), "ppTexture")]), StdMethod(HRESULT, "CreateVolumeTexture", [(UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DVOLUMETEXTURE8), "ppVolumeTexture")]), StdMethod(HRESULT, "CreateCubeTexture", [(UINT, "EdgeLength"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DCUBETEXTURE8), "ppCubeTexture")]), StdMethod(HRESULT, "CreateVertexBuffer", [(UINT, "Length"), (D3DUSAGE, "Usage"), (D3DFVF, "FVF"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DVERTEXBUFFER8), "ppVertexBuffer")]), StdMethod(HRESULT, "CreateIndexBuffer", [(UINT, "Length"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DINDEXBUFFER8), "ppIndexBuffer")]), StdMethod(HRESULT, "CreateRenderTarget", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), (BOOL, "Lockable"), Out(Pointer(PDIRECT3DSURFACE8), "ppSurface")]), StdMethod(HRESULT, "CreateDepthStencilSurface", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), Out(Pointer(PDIRECT3DSURFACE8), "ppSurface")]), StdMethod(HRESULT, "CreateImageSurface", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), Out(Pointer(PDIRECT3DSURFACE8), "ppSurface")]), StdMethod(HRESULT, "CopyRects", [(PDIRECT3DSURFACE8, "pSourceSurface"), (ConstPointer(RECT), "pSourceRectsArray"), (UINT, "cRects"), (PDIRECT3DSURFACE8, "pDestinationSurface"), (ConstPointer(POINT), "pDestPointsArray")]), StdMethod(HRESULT, "UpdateTexture", [(PDIRECT3DBASETEXTURE8, "pSourceTexture"), (PDIRECT3DBASETEXTURE8, "pDestinationTexture")]), StdMethod(HRESULT, "GetFrontBuffer", [(PDIRECT3DSURFACE8, "pDestSurface")]), StdMethod(HRESULT, "SetRenderTarget", [(PDIRECT3DSURFACE8, "pRenderTarget"), (PDIRECT3DSURFACE8, "pNewZStencil")]), StdMethod(HRESULT, "GetRenderTarget", [Out(Pointer(PDIRECT3DSURFACE8), "ppRenderTarget")]), StdMethod(HRESULT, "GetDepthStencilSurface", [Out(Pointer(PDIRECT3DSURFACE8), "ppZStencilSurface")]), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "Clear", [(DWORD, "Count"), (Array(Const(D3DRECT), "Count"), "pRects"), (D3DCLEAR, "Flags"), (D3DCOLOR, "Color"), (Float, "Z"), (DWORD, "Stencil")]), StdMethod(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "State"), (ConstPointer(D3DMATRIX), "pMatrix")]), StdMethod(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "State"), Out(Pointer(D3DMATRIX), "pMatrix")], sideeffects=False), StdMethod(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "State"), (ConstPointer(D3DMATRIX), "pMatrix")]), StdMethod(HRESULT, "SetViewport", [(ConstPointer(D3DVIEWPORT8), "pViewport")]), StdMethod(HRESULT, "GetViewport", [Out(Pointer(D3DVIEWPORT8), "pViewport")], sideeffects=False), StdMethod(HRESULT, "SetMaterial", [(ConstPointer(D3DMATERIAL8), "pMaterial")]), StdMethod(HRESULT, "GetMaterial", [Out(Pointer(D3DMATERIAL8), "pMaterial")], sideeffects=False), StdMethod(HRESULT, "SetLight", [(DWORD, "Index"), (ConstPointer(D3DLIGHT8), "pLight")]), StdMethod(HRESULT, "GetLight", [(DWORD, "Index"), Out(Pointer(D3DLIGHT8), "pLight")], sideeffects=False), StdMethod(HRESULT, "LightEnable", [(DWORD, "Index"), (BOOL, "Enable")]), StdMethod(HRESULT, "GetLightEnable", [(DWORD, "Index"), Out(Pointer(BOOL), "pEnable")], sideeffects=False), StdMethod(HRESULT, "SetClipPlane", [(DWORD, "Index"), (Array(Const(Float), 4), "pPlane")]), StdMethod(HRESULT, "GetClipPlane", [(DWORD, "Index"), Out(Array(Float, 4), "pPlane")], sideeffects=False), StdMethod(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "State"), (D3DRENDERSTATEVALUE, "Value")]), StdMethod(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "State"), Out(Pointer(D3DRENDERSTATEVALUE), "pValue")], sideeffects=False), StdMethod(HRESULT, "BeginStateBlock", []), StdMethod(HRESULT, "EndStateBlock", [Out(Pointer(DWORD), "pToken")]), StdMethod(HRESULT, "ApplyStateBlock", [(DWORD, "Token")]), StdMethod(HRESULT, "CaptureStateBlock", [(DWORD, "Token")]), StdMethod(HRESULT, "DeleteStateBlock", [(DWORD, "Token")]), StdMethod(HRESULT, "CreateStateBlock", [(D3DSTATEBLOCKTYPE, "Type"), Out(Pointer(DWORD), "pToken")]), StdMethod(HRESULT, "SetClipStatus", [(ConstPointer(D3DCLIPSTATUS8), "pClipStatus")]), StdMethod(HRESULT, "GetClipStatus", [Out(Pointer(D3DCLIPSTATUS8), "pClipStatus")], sideeffects=False), StdMethod(HRESULT, "GetTexture", [(DWORD, "Stage"), Out(Pointer(PDIRECT3DBASETEXTURE8), "ppTexture")]), StdMethod(HRESULT, "SetTexture", [(DWORD, "Stage"), (PDIRECT3DBASETEXTURE8, "pTexture")]), StdMethod(HRESULT, "GetTextureStageState", [(DWORD, "Stage"), (D3DTEXTURESTAGESTATETYPE, "Type"), Out(Pointer(D3DTEXTURESTAGESTATEVALUE), "pValue")], sideeffects=False), StdMethod(HRESULT, "SetTextureStageState", [(DWORD, "Stage"), (D3DTEXTURESTAGESTATETYPE, "Type"), (D3DTEXTURESTAGESTATEVALUE, "Value")]), StdMethod(HRESULT, "ValidateDevice", [Out(Pointer(DWORD), "pNumPasses")]), StdMethod(HRESULT, "GetInfo", [(D3DDEVINFOID, "DevInfoID"), Out(OpaqueBlob(Void, "DevInfoStructSize"), "pDevInfoStruct"), (DWORD, "DevInfoStructSize")], sideeffects=False), StdMethod(HRESULT, "SetPaletteEntries", [(UINT, "PaletteNumber"), (Array(Const(PALETTEENTRY), 256), "pEntries")]), StdMethod(HRESULT, "GetPaletteEntries", [(UINT, "PaletteNumber"), Out(Array(PALETTEENTRY, 256), "pEntries")], sideeffects=False), StdMethod(HRESULT, "SetCurrentTexturePalette", [(UINT, "PaletteNumber")]), StdMethod(HRESULT, "GetCurrentTexturePalette", [Out(Pointer(UINT), "PaletteNumber")], sideeffects=False), StdMethod(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "StartVertex"), (UINT, "PrimitiveCount")]), StdMethod(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "minIndex"), (UINT, "NumVertices"), (UINT, "startIndex"), (UINT, "primCount")]), StdMethod(HRESULT, "DrawPrimitiveUP", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "PrimitiveCount"), (Blob(Const(Void), "_vertexDataSize(PrimitiveType, PrimitiveCount, VertexStreamZeroStride)"), "pVertexStreamZeroData"), (UINT, "VertexStreamZeroStride")]), StdMethod(HRESULT, "DrawIndexedPrimitiveUP", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "MinVertexIndex"), (UINT, "NumVertexIndices"), (UINT, "PrimitiveCount"), (Blob(Const(Void), "_indexDataSize(PrimitiveType, PrimitiveCount, IndexDataFormat)"), "pIndexData"), (D3DFORMAT, "IndexDataFormat"), (Blob(Const(Void), "NumVertexIndices*VertexStreamZeroStride"), "pVertexStreamZeroData"), (UINT, "VertexStreamZeroStride")]), StdMethod(HRESULT, "ProcessVertices", [(UINT, "SrcStartIndex"), (UINT, "DestIndex"), (UINT, "VertexCount"), (PDIRECT3DVERTEXBUFFER8, "pDestBuffer"), (D3DPV, "Flags")]), StdMethod(HRESULT, "CreateVertexShader", [(Array(Const(DWORD), "_declCount(pDeclaration)"), "pDeclaration"), (D3DSHADER8, "pFunction"), Out(Pointer(DWORD), "pHandle"), (D3DUSAGE, "Usage")]), StdMethod(HRESULT, "SetVertexShader", [(DWORD, "Handle")]), StdMethod(HRESULT, "GetVertexShader", [Out(Pointer(DWORD), "pHandle")], sideeffects=False), StdMethod(HRESULT, "DeleteVertexShader", [(DWORD, "Handle")]), StdMethod(HRESULT, "SetVertexShaderConstant", [(DWORD, "Register"), (Blob(Const(Void), "ConstantCount*4*sizeof(float)"), "pConstantData"), (DWORD, "ConstantCount")]), StdMethod(HRESULT, "GetVertexShaderConstant", [(DWORD, "Register"), Out(OpaqueBlob(Void, "ConstantCount*4*sizeof(float)"), "pConstantData"), (DWORD, "ConstantCount")], sideeffects=False), StdMethod(HRESULT, "GetVertexShaderDeclaration", [(DWORD, "Handle"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), Out(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "GetVertexShaderFunction", [(DWORD, "Handle"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), Out(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "SetStreamSource", [(UINT, "StreamNumber"), (PDIRECT3DVERTEXBUFFER8, "pStreamData"), (UINT, "Stride")]), StdMethod(HRESULT, "GetStreamSource", [(UINT, "StreamNumber"), Out(Pointer(PDIRECT3DVERTEXBUFFER8), "ppStreamData"), Out(Pointer(UINT), "pStride")]), StdMethod(HRESULT, "SetIndices", [(PDIRECT3DINDEXBUFFER8, "pIndexData"), (UINT, "BaseVertexIndex")]), StdMethod(HRESULT, "GetIndices", [Out(Pointer(PDIRECT3DINDEXBUFFER8), "ppIndexData"), Out(Pointer(UINT), "pBaseVertexIndex")]), StdMethod(HRESULT, "CreatePixelShader", [(D3DSHADER8, "pFunction"), Out(Pointer(DWORD), "pHandle")]), StdMethod(HRESULT, "SetPixelShader", [(DWORD, "Handle")]), StdMethod(HRESULT, "GetPixelShader", [Out(Pointer(DWORD), "pHandle")], sideeffects=False), StdMethod(HRESULT, "DeletePixelShader", [(DWORD, "Handle")]), StdMethod(HRESULT, "SetPixelShaderConstant", [(DWORD, "Register"), (Blob(Const(Void), "ConstantCount*4*sizeof(float)"), "pConstantData"), (DWORD, "ConstantCount")]), StdMethod(HRESULT, "GetPixelShaderConstant", [(DWORD, "Register"), Out(OpaqueBlob(Void, "ConstantCount*4*sizeof(float)"), "pConstantData"), (DWORD, "ConstantCount")], sideeffects=False), StdMethod(HRESULT, "GetPixelShaderFunction", [(DWORD, "Handle"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), Out(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "DrawRectPatch", [(UINT, "Handle"), (ConstPointer(Float), "pNumSegs"), (ConstPointer(D3DRECTPATCH_INFO), "pRectPatchInfo")]), StdMethod(HRESULT, "DrawTriPatch", [(UINT, "Handle"), (ConstPointer(Float), "pNumSegs"), (ConstPointer(D3DTRIPATCH_INFO), "pTriPatchInfo")]), StdMethod(HRESULT, "DeletePatch", [(UINT, "Handle")]), ] IDirect3DSwapChain8.methods += [ StdMethod(HRESULT, "Present", [(ConstPointer(RECT), "pSourceRect"), (ConstPointer(RECT), "pDestRect"), (HWND, "hDestWindowOverride"), (ConstPointer(RGNDATA), "pDirtyRegion")]), StdMethod(HRESULT, "GetBackBuffer", [(UINT, "BackBuffer"), (D3DBACKBUFFER_TYPE, "Type"), Out(Pointer(PDIRECT3DSURFACE8), "ppBackBuffer")]), ] IDirect3DResource8.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE8), "ppDevice")]), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "refguid"), (OpaqueBlob(Const(Void), "SizeOfData"), "pData"), (DWORD, "SizeOfData"), (D3DSPD, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "refguid"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), InOut(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "FreePrivateData", [(REFGUID, "refguid")], sideeffects=False), StdMethod(DWORD, "SetPriority", [(DWORD, "PriorityNew")]), StdMethod(DWORD, "GetPriority", [], sideeffects=False), StdMethod(Void, "PreLoad", []), StdMethod(D3DRESOURCETYPE, "GetType", [], sideeffects=False), ] IDirect3DBaseTexture8.methods += [ StdMethod(DWORD, "SetLOD", [(DWORD, "LODNew")]), StdMethod(DWORD, "GetLOD", [], sideeffects=False), StdMethod(DWORD, "GetLevelCount", [], sideeffects=False), ] IDirect3DTexture8.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetSurfaceLevel", [(UINT, "Level"), Out(Pointer(PDIRECT3DSURFACE8), "ppSurfaceLevel")]), StdMethod(HRESULT, "LockRect", [(UINT, "Level"), Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", [(UINT, "Level")]), StdMethod(HRESULT, "AddDirtyRect", [(ConstPointer(RECT), "pDirtyRect")]), ] IDirect3DVolumeTexture8.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DVOLUME_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetVolumeLevel", [(UINT, "Level"), Out(Pointer(PDIRECT3DVOLUME8), "ppVolumeLevel")]), StdMethod(HRESULT, "LockBox", [(UINT, "Level"), Out(Pointer(D3DLOCKED_BOX), "pLockedVolume"), (ConstPointer(D3DBOX), "pBox"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockBox", [(UINT, "Level")]), StdMethod(HRESULT, "AddDirtyBox", [(ConstPointer(D3DBOX), "pDirtyBox")]), ] IDirect3DCubeTexture8.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetCubeMapSurface", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level"), Out(Pointer(PDIRECT3DSURFACE8), "ppCubeMapSurface")]), StdMethod(HRESULT, "LockRect", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level"), Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level")]), StdMethod(HRESULT, "AddDirtyRect", [(D3DCUBEMAP_FACES, "FaceType"), (ConstPointer(RECT), "pDirtyRect")]), ] IDirect3DVertexBuffer8.methods += [ StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(BYTE, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DVERTEXBUFFER_DESC), "pDesc")], sideeffects=False), ] IDirect3DIndexBuffer8.methods += [ StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(BYTE, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DINDEXBUFFER_DESC), "pDesc")], sideeffects=False), ] IDirect3DSurface8.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE8), "ppDevice")]), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "refguid"), (OpaqueBlob(Const(Void), "SizeOfData"), "pData"), (DWORD, "SizeOfData"), (D3DSPD, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "refguid"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), InOut(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "FreePrivateData", [(REFGUID, "refguid")], sideeffects=False), StdMethod(HRESULT, "GetContainer", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppContainer")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "LockRect", [Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", []), ] IDirect3DVolume8.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE8), "ppDevice")]), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "refguid"), (OpaqueBlob(Const(Void), "SizeOfData"), "pData"), (DWORD, "SizeOfData"), (D3DSPD, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "refguid"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), InOut(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "FreePrivateData", [(REFGUID, "refguid")], sideeffects=False), StdMethod(HRESULT, "GetContainer", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppContainer")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DVOLUME_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "LockBox", [Out(Pointer(D3DLOCKED_BOX), "pLockedVolume"), (ConstPointer(D3DBOX), "pBox"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockBox", []), ] d3d8 = Module("d3d8") d3d8.addFunctions([ StdFunction(PDIRECT3D8, "Direct3DCreate8", [(UINT, "SDKVersion")]), ]) tmpNnpnZF/specs/d3dcaps.py0000664000175000017500000003310412543167424014775 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3dcaps.h""" from winapi import * from d3dtypes import * D3DTRANSFORMCAPS = Flags(DWORD, [ "D3DTRANSFORMCAPS_CLIP", ]) D3DTRANSFORMCAPS = Struct("D3DTRANSFORMCAPS", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), ]) D3DLIGHTINGCAPS = Struct("D3DLIGHTINGCAPS", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwLightingModel"), (DWORD, "dwNumLights"), ]) D3DLIGHTINGMODEL = Flags(DWORD, [ "D3DLIGHTINGMODEL_RGB", "D3DLIGHTINGMODEL_MONO", ]) D3DLIGHTCAPS = Flags(DWORD, [ "D3DLIGHTCAPS_POINT", "D3DLIGHTCAPS_SPOT", "D3DLIGHTCAPS_DIRECTIONAL", "D3DLIGHTCAPS_PARALLELPOINT", "D3DLIGHTCAPS_GLSPOT", ]) D3DPRIMCAPS = Struct("D3DPRIMCAPS", [ (DWORD, "dwSize"), (DWORD, "dwMiscCaps"), (DWORD, "dwRasterCaps"), (DWORD, "dwZCmpCaps"), (DWORD, "dwSrcBlendCaps"), (DWORD, "dwDestBlendCaps"), (DWORD, "dwAlphaCmpCaps"), (DWORD, "dwShadeCaps"), (DWORD, "dwTextureCaps"), (DWORD, "dwTextureFilterCaps"), (DWORD, "dwTextureBlendCaps"), (DWORD, "dwTextureAddressCaps"), (DWORD, "dwStippleWidth"), (DWORD, "dwStippleHeight"), ]) D3DPMISCCAPS = Flags(DWORD, [ "D3DPMISCCAPS_MASKPLANES", "D3DPMISCCAPS_MASKZ", "D3DPMISCCAPS_LINEPATTERNREP", "D3DPMISCCAPS_CONFORMANT", "D3DPMISCCAPS_CULLNONE", "D3DPMISCCAPS_CULLCW", "D3DPMISCCAPS_CULLCCW", ]) D3DXD3DPRASTERCAPSXX = Flags(DWORD, [ "D3DPRASTERCAPS_DITHER", "D3DPRASTERCAPS_ROP2", "D3DPRASTERCAPS_XOR", "D3DPRASTERCAPS_PAT", "D3DPRASTERCAPS_ZTEST", "D3DPRASTERCAPS_SUBPIXEL", "D3DPRASTERCAPS_SUBPIXELX", "D3DPRASTERCAPS_FOGVERTEX", "D3DPRASTERCAPS_FOGTABLE", "D3DPRASTERCAPS_STIPPLE", "D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT", "D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT", "D3DPRASTERCAPS_ANTIALIASEDGES", "D3DPRASTERCAPS_MIPMAPLODBIAS", "D3DPRASTERCAPS_ZBIAS", "D3DPRASTERCAPS_ZBUFFERLESSHSR", "D3DPRASTERCAPS_FOGRANGE", "D3DPRASTERCAPS_ANISOTROPY", "D3DPRASTERCAPS_WBUFFER", "D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT", "D3DPRASTERCAPS_WFOG", "D3DPRASTERCAPS_ZFOG", ]) D3DPCMPCAPS = Flags(DWORD, [ "D3DPCMPCAPS_NEVER", "D3DPCMPCAPS_LESS", "D3DPCMPCAPS_EQUAL", "D3DPCMPCAPS_LESSEQUAL", "D3DPCMPCAPS_GREATER", "D3DPCMPCAPS_NOTEQUAL", "D3DPCMPCAPS_GREATEREQUAL", "D3DPCMPCAPS_ALWAYS", ]) D3DPBLENDCAPS = Flags(DWORD, [ "D3DPBLENDCAPS_ZERO", "D3DPBLENDCAPS_ONE", "D3DPBLENDCAPS_SRCCOLOR", "D3DPBLENDCAPS_INVSRCCOLOR", "D3DPBLENDCAPS_SRCALPHA", "D3DPBLENDCAPS_INVSRCALPHA", "D3DPBLENDCAPS_DESTALPHA", "D3DPBLENDCAPS_INVDESTALPHA", "D3DPBLENDCAPS_DESTCOLOR", "D3DPBLENDCAPS_INVDESTCOLOR", "D3DPBLENDCAPS_SRCALPHASAT", "D3DPBLENDCAPS_BOTHSRCALPHA", "D3DPBLENDCAPS_BOTHINVSRCALPHA", ]) D3DPSHADECAPS = Flags(DWORD, [ "D3DPSHADECAPS_COLORFLATMONO", "D3DPSHADECAPS_COLORFLATRGB", "D3DPSHADECAPS_COLORGOURAUDMONO", "D3DPSHADECAPS_COLORGOURAUDRGB", "D3DPSHADECAPS_COLORPHONGMONO", "D3DPSHADECAPS_COLORPHONGRGB", "D3DPSHADECAPS_SPECULARFLATMONO", "D3DPSHADECAPS_SPECULARFLATRGB", "D3DPSHADECAPS_SPECULARGOURAUDMONO", "D3DPSHADECAPS_SPECULARGOURAUDRGB", "D3DPSHADECAPS_SPECULARPHONGMONO", "D3DPSHADECAPS_SPECULARPHONGRGB", "D3DPSHADECAPS_ALPHAFLATBLEND", "D3DPSHADECAPS_ALPHAFLATSTIPPLED", "D3DPSHADECAPS_ALPHAGOURAUDBLEND", "D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED", "D3DPSHADECAPS_ALPHAPHONGBLEND", "D3DPSHADECAPS_ALPHAPHONGSTIPPLED", "D3DPSHADECAPS_FOGFLAT", "D3DPSHADECAPS_FOGGOURAUD", "D3DPSHADECAPS_FOGPHONG", ]) D3DPTEXTURECAPS = Flags(DWORD, [ "D3DPTEXTURECAPS_PERSPECTIVE", "D3DPTEXTURECAPS_POW2", "D3DPTEXTURECAPS_ALPHA", "D3DPTEXTURECAPS_TRANSPARENCY", "D3DPTEXTURECAPS_BORDER", "D3DPTEXTURECAPS_SQUAREONLY", "D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE", "D3DPTEXTURECAPS_ALPHAPALETTE", "D3DPTEXTURECAPS_NONPOW2CONDITIONAL", "D3DPTEXTURECAPS_PROJECTED", "D3DPTEXTURECAPS_CUBEMAP", "D3DPTEXTURECAPS_COLORKEYBLEND", ]) D3DPTFILTERCAPS = Flags(DWORD, [ "D3DPTFILTERCAPS_NEAREST", "D3DPTFILTERCAPS_LINEAR", "D3DPTFILTERCAPS_MIPNEAREST", "D3DPTFILTERCAPS_MIPLINEAR", "D3DPTFILTERCAPS_LINEARMIPNEAREST", "D3DPTFILTERCAPS_LINEARMIPLINEAR", "D3DPTFILTERCAPS_MINFPOINT", "D3DPTFILTERCAPS_MINFLINEAR", "D3DPTFILTERCAPS_MINFANISOTROPIC", "D3DPTFILTERCAPS_MIPFPOINT", "D3DPTFILTERCAPS_MIPFLINEAR", "D3DPTFILTERCAPS_MAGFPOINT", "D3DPTFILTERCAPS_MAGFLINEAR", "D3DPTFILTERCAPS_MAGFANISOTROPIC", "D3DPTFILTERCAPS_MAGFAFLATCUBIC", "D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC", ]) D3DPTBLENDCAPS = Flags(DWORD, [ "D3DPTBLENDCAPS_DECAL", "D3DPTBLENDCAPS_MODULATE", "D3DPTBLENDCAPS_DECALALPHA", "D3DPTBLENDCAPS_MODULATEALPHA", "D3DPTBLENDCAPS_DECALMASK", "D3DPTBLENDCAPS_MODULATEMASK", "D3DPTBLENDCAPS_COPY", "D3DPTBLENDCAPS_ADD", ]) D3DPTADDRESSCAPS = Flags(DWORD, [ "D3DPTADDRESSCAPS_WRAP", "D3DPTADDRESSCAPS_MIRROR", "D3DPTADDRESSCAPS_CLAMP", "D3DPTADDRESSCAPS_BORDER", "D3DPTADDRESSCAPS_INDEPENDENTUV", ]) D3DSTENCILCAPS = Flags(DWORD, [ "D3DSTENCILCAPS_KEEP", "D3DSTENCILCAPS_ZERO", "D3DSTENCILCAPS_REPLACE", "D3DSTENCILCAPS_INCRSAT", "D3DSTENCILCAPS_DECRSAT", "D3DSTENCILCAPS_INVERT", "D3DSTENCILCAPS_INCR", "D3DSTENCILCAPS_DECR", ]) D3DTEXOPCAPS = Flags(DWORD, [ "D3DTEXOPCAPS_DISABLE", "D3DTEXOPCAPS_SELECTARG1", "D3DTEXOPCAPS_SELECTARG2", "D3DTEXOPCAPS_MODULATE", "D3DTEXOPCAPS_MODULATE2X", "D3DTEXOPCAPS_MODULATE4X", "D3DTEXOPCAPS_ADD", "D3DTEXOPCAPS_ADDSIGNED", "D3DTEXOPCAPS_ADDSIGNED2X", "D3DTEXOPCAPS_SUBTRACT", "D3DTEXOPCAPS_ADDSMOOTH", "D3DTEXOPCAPS_BLENDDIFFUSEALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHA", "D3DTEXOPCAPS_BLENDFACTORALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHAPM", "D3DTEXOPCAPS_BLENDCURRENTALPHA", "D3DTEXOPCAPS_PREMODULATE", "D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA", "D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA", "D3DTEXOPCAPS_BUMPENVMAP", "D3DTEXOPCAPS_BUMPENVMAPLUMINANCE", "D3DTEXOPCAPS_DOTPRODUCT3", ]) D3DFVFCAPS = Flags(DWORD, [ "D3DFVFCAPS_TEXCOORDCOUNTMASK", "D3DFVFCAPS_DONOTSTRIPELEMENTS", ]) D3DDD = Flags(DWORD, [ "D3DDD_COLORMODEL", "D3DDD_DEVCAPS", "D3DDD_TRANSFORMCAPS", "D3DDD_LIGHTINGCAPS", "D3DDD_BCLIPPING", "D3DDD_LINECAPS", "D3DDD_TRICAPS", "D3DDD_DEVICERENDERBITDEPTH", "D3DDD_DEVICEZBUFFERBITDEPTH", "D3DDD_MAXBUFFERSIZE", "D3DDD_MAXVERTEXCOUNT", ]) D3DDEVCAPS = Flags(DWORD, [ "D3DDEVCAPS_FLOATTLVERTEX", "D3DDEVCAPS_SORTINCREASINGZ", "D3DDEVCAPS_SORTDECREASINGZ", "D3DDEVCAPS_SORTEXACT", "D3DDEVCAPS_EXECUTESYSTEMMEMORY", "D3DDEVCAPS_EXECUTEVIDEOMEMORY", "D3DDEVCAPS_TLVERTEXSYSTEMMEMORY", "D3DDEVCAPS_TLVERTEXVIDEOMEMORY", "D3DDEVCAPS_TEXTURESYSTEMMEMORY", "D3DDEVCAPS_TEXTUREVIDEOMEMORY", "D3DDEVCAPS_DRAWPRIMTLVERTEX", "D3DDEVCAPS_CANRENDERAFTERFLIP", "D3DDEVCAPS_TEXTURENONLOCALVIDMEM", "D3DDEVCAPS_DRAWPRIMITIVES2", "D3DDEVCAPS_SEPARATETEXTUREMEMORIES", "D3DDEVCAPS_DRAWPRIMITIVES2EX", "D3DDEVCAPS_HWTRANSFORMANDLIGHT", "D3DDEVCAPS_CANBLTSYSTONONLOCAL", "D3DDEVCAPS_HWRASTERIZATION", ]) D3DVTXPCAPS = Flags(DWORD, [ "D3DVTXPCAPS_TEXGEN", "D3DVTXPCAPS_MATERIALSOURCE7", "D3DVTXPCAPS_VERTEXFOG", "D3DVTXPCAPS_DIRECTIONALLIGHTS", "D3DVTXPCAPS_POSITIONALLIGHTS", "D3DVTXPCAPS_LOCALVIEWER", ]) D3DFDS = Flags(DWORD, [ "D3DFDS_COLORMODEL", "D3DFDS_GUID", "D3DFDS_HARDWARE", "D3DFDS_TRIANGLES", "D3DFDS_LINES", "D3DFDS_MISCCAPS", "D3DFDS_RASTERCAPS", "D3DFDS_ZCMPCAPS", "D3DFDS_ALPHACMPCAPS", "D3DFDS_SRCBLENDCAPS", "D3DFDS_DSTBLENDCAPS", "D3DFDS_SHADECAPS", "D3DFDS_TEXTURECAPS", "D3DFDS_TEXTUREFILTERCAPS", "D3DFDS_TEXTUREBLENDCAPS", "D3DFDS_TEXTUREADDRESSCAPS", ]) D3DFINDDEVICESEARCH = Struct("D3DFINDDEVICESEARCH", [ (DWORD, "dwSize"), (DWORD, "dwFlags"), (BOOL, "bHardware"), (D3DCOLORMODEL, "dcmColorModel"), (GUID, "guid"), (DWORD, "dwCaps"), (D3DPRIMCAPS, "dpcPrimCaps"), ]) LPD3DFINDDEVICESEARCH = Pointer(D3DFINDDEVICESEARCH) D3DEXECUTEBUFFERDESC = Struct("D3DEXECUTEBUFFERDESC", [ (DWORD, "dwSize"), (DWORD, "dwFlags"), (DWORD, "dwCaps"), (DWORD, "dwBufferSize"), (LPVOID, "lpData"), ]) LPD3DEXECUTEBUFFERDESC = Pointer(D3DEXECUTEBUFFERDESC) D3DDEB = Flags(DWORD, [ "D3DDEB_BUFSIZE", "D3DDEB_CAPS", "D3DDEB_LPDATA", ]) D3DDEBCAPS = Flags(DWORD, [ "D3DDEBCAPS_SYSTEMMEMORY", "D3DDEBCAPS_VIDEOMEMORY", "D3DDEBCAPS_MEM", ]) D3DDEVINFO_TEXTUREMANAGER = Struct("D3DDEVINFO_TEXTUREMANAGER", [ (BOOL, "bThrashing"), (DWORD, "dwApproxBytesDownloaded"), (DWORD, "dwNumEvicts"), (DWORD, "dwNumVidCreates"), (DWORD, "dwNumTexturesUsed"), (DWORD, "dwNumUsedTexInVid"), (DWORD, "dwWorkingSet"), (DWORD, "dwWorkingSetBytes"), (DWORD, "dwTotalManaged"), (DWORD, "dwTotalBytes"), (DWORD, "dwLastPri"), ]) D3DDEVINFO_TEXTURING = Struct("D3DDEVINFO_TEXTURING", [ (DWORD, "dwNumLoads"), (DWORD, "dwApproxBytesLoaded"), (DWORD, "dwNumPreLoads"), (DWORD, "dwNumSet"), (DWORD, "dwNumCreates"), (DWORD, "dwNumDestroys"), (DWORD, "dwNumSetPriorities"), (DWORD, "dwNumSetLODs"), (DWORD, "dwNumLocks"), (DWORD, "dwNumGetDCs"), ]) D3DDEVICEDESC = Struct("D3DDEVICEDESC", [ (DWORD, "dwSize"), (DWORD, "dwFlags"), (D3DCOLORMODEL, "dcmColorModel"), (DWORD, "dwDevCaps"), (D3DTRANSFORMCAPS, "dtcTransformCaps"), (BOOL, "bClipping"), (D3DLIGHTINGCAPS, "dlcLightingCaps"), (D3DPRIMCAPS, "dpcLineCaps"), (D3DPRIMCAPS, "dpcTriCaps"), (DWORD, "dwDeviceRenderBitDepth"), (DWORD, "dwDeviceZBufferBitDepth"), (DWORD, "dwMaxBufferSize"), (DWORD, "dwMaxVertexCount"), (DWORD, "dwMinTextureWidth"), (DWORD, "dwMinTextureHeight"), (DWORD, "dwMaxTextureWidth"), (DWORD, "dwMaxTextureHeight"), (DWORD, "dwMinStippleWidth"), (DWORD, "dwMaxStippleWidth"), (DWORD, "dwMinStippleHeight"), (DWORD, "dwMaxStippleHeight"), (DWORD, "dwMaxTextureRepeat"), (DWORD, "dwMaxTextureAspectRatio"), (DWORD, "dwMaxAnisotropy"), (D3DVALUE, "dvGuardBandLeft"), (D3DVALUE, "dvGuardBandTop"), (D3DVALUE, "dvGuardBandRight"), (D3DVALUE, "dvGuardBandBottom"), (D3DVALUE, "dvExtentsAdjust"), (DWORD, "dwStencilCaps"), (DWORD, "dwFVFCaps"), (DWORD, "dwTextureOpCaps"), (WORD, "wMaxTextureBlendStages"), (WORD, "wMaxSimultaneousTextures"), ]) LPD3DDEVICEDESC = Pointer(D3DDEVICEDESC) D3DDEVICEDESC7 = Struct("D3DDEVICEDESC7", [ (DWORD, "dwDevCaps"), (D3DPRIMCAPS, "dpcLineCaps"), (D3DPRIMCAPS, "dpcTriCaps"), (DWORD, "dwDeviceRenderBitDepth"), (DWORD, "dwDeviceZBufferBitDepth"), (DWORD, "dwMinTextureWidth"), (DWORD, "dwMinTextureHeight"), (DWORD, "dwMaxTextureWidth"), (DWORD, "dwMaxTextureHeight"), (DWORD, "dwMaxTextureRepeat"), (DWORD, "dwMaxTextureAspectRatio"), (DWORD, "dwMaxAnisotropy"), (D3DVALUE, "dvGuardBandLeft"), (D3DVALUE, "dvGuardBandTop"), (D3DVALUE, "dvGuardBandRight"), (D3DVALUE, "dvGuardBandBottom"), (D3DVALUE, "dvExtentsAdjust"), (DWORD, "dwStencilCaps"), (DWORD, "dwFVFCaps"), (DWORD, "dwTextureOpCaps"), (WORD, "wMaxTextureBlendStages"), (WORD, "wMaxSimultaneousTextures"), (DWORD, "dwMaxActiveLights"), (D3DVALUE, "dvMaxVertexW"), (GUID, "deviceGUID"), (WORD, "wMaxUserClipPlanes"), (WORD, "wMaxVertexBlendMatrices"), (DWORD, "dwVertexProcessingCaps"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), (DWORD, "dwReserved4"), ]) LPD3DDEVICEDESC7 = Pointer(D3DDEVICEDESC7) D3DFINDDEVICERESULT = Struct("D3DFINDDEVICERESULT", [ (DWORD, "dwSize"), (GUID, "guid"), (D3DDEVICEDESC, "ddHwDesc"), (D3DDEVICEDESC, "ddSwDesc"), ]) LPD3DFINDDEVICERESULT = Pointer(D3DFINDDEVICERESULT) LPD3DENUMDEVICESCALLBACK = FunctionPointer(HRESULT, "LPD3DENUMDEVICESCALLBACK", [(Pointer(GUID), "lpGuid"), (LPSTR, "lpDeviceDescription"), (LPSTR, "lpDeviceName"), LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID]) LPD3DENUMDEVICESCALLBACK7 = FunctionPointer(HRESULT, "LPD3DENUMDEVICESCALLBACK7", [(LPSTR, "lpDeviceDescription"), (LPSTR, "lpDeviceName"), LPD3DDEVICEDESC7, LPVOID]) tmpNnpnZF/specs/glxapi.py0000664000175000017500000007552212543167424014752 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """GLX API description.""" from stdapi import * from glapi import * VisualID = Alias("VisualID", UInt32) Display = Opaque("Display *") Visual = Opaque("Visual *") Font = Alias("Font", UInt32) Pixmap = Alias("Pixmap", UInt32) Window = Alias("Window", UInt32) Colormap = Alias("Colormap", UInt32) GLXContext = Opaque("GLXContext") GLXPixmap = Alias("GLXPixmap", UInt32) GLXDrawable = Alias("GLXDrawable", UInt32) GLXFBConfig = Opaque("GLXFBConfig") GLXFBConfigSGIX = Opaque("GLXFBConfigSGIX") GLXFBConfigID = Alias("GLXFBConfigID", UInt32) GLXContextID = Alias("GLXContextID", UInt32) GLXWindow = Alias("GLXWindow", UInt32) GLXPbuffer = Alias("GLXPbuffer", UInt32) GLXPbufferSGIX = Alias("GLXPbufferSGIX", UInt32) GLXVideoSourceSGIX = Alias("GLXVideoSourceSGIX", UInt32) GLXVideoDeviceNV = Alias("GLXVideoDeviceNV", UInt32) GLXVideoCaptureDeviceNV = Alias("GLXVideoCaptureDeviceNV", UInt32) XVisualInfo = Struct("XVisualInfo", [ (Visual, "visual"), (VisualID, "visualid"), (Int, "screen"), (Int, "depth"), (Int, "c_class"), (ULong, "red_mask"), (ULong, "green_mask"), (ULong, "blue_mask"), (Int, "colormap_size"), (Int, "bits_per_rgb"), ]) Bool = FakeEnum(Int, [ "False", "True", ]) GLXEnum = FakeEnum(Int, [ #"GLX_USE_GL", # 1 "GLX_BUFFER_SIZE", # 2 "GLX_LEVEL", # 3 "GLX_RGBA", # 4 "GLX_DOUBLEBUFFER", # 5 "GLX_STEREO", # 6 "GLX_AUX_BUFFERS", # 7 "GLX_RED_SIZE", # 8 "GLX_GREEN_SIZE", # 9 "GLX_BLUE_SIZE", # 10 "GLX_ALPHA_SIZE", # 11 "GLX_DEPTH_SIZE", # 12 "GLX_STENCIL_SIZE", # 13 "GLX_ACCUM_RED_SIZE", # 14 "GLX_ACCUM_GREEN_SIZE", # 15 "GLX_ACCUM_BLUE_SIZE", # 16 "GLX_ACCUM_ALPHA_SIZE", # 17 "GLX_CONFIG_CAVEAT", # 0x0020 "GLX_X_VISUAL_TYPE", # 0x0022 "GLX_TRANSPARENT_TYPE", # 0x0023 "GLX_TRANSPARENT_INDEX_VALUE", # 0x0024 "GLX_TRANSPARENT_RED_VALUE", # 0x0025 "GLX_TRANSPARENT_GREEN_VALUE", # 0x0026 "GLX_TRANSPARENT_BLUE_VALUE", # 0x0027 "GLX_TRANSPARENT_ALPHA_VALUE", # 0x0028 "GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX", # 0x0050 "GLX_BAD_HYPERPIPE_CONFIG_SGIX", # 0x005B "GLX_BAD_HYPERPIPE_SGIX", # 0x005C "GLX_GPU_VENDOR_AMD", # 0x1F00 "GLX_GPU_RENDERER_STRING_AMD", # 0x1F01 "GLX_GPU_OPENGL_VERSION_STRING_AMD", # 0x1F02 "GLX_CONTEXT_MAJOR_VERSION_ARB", # 0x2091 "GLX_CONTEXT_MINOR_VERSION_ARB", # 0x2092 "GLX_CONTEXT_FLAGS_ARB", # 0x2094 "GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB", # 0x2095 "GLX_CONTEXT_RELEASE_BEHAVIOR_ARB", # 0x2097 "GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB", # 0x2098 "GLX_FLOAT_COMPONENTS_NV", # 0x20B0 "GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT", # 0x20B1 "GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB", # 0x20B2 "GLX_COLOR_SAMPLES_NV", # 0x20B3 "GLX_RGBA_FLOAT_TYPE_ARB", # 0x20B9 "GLX_VIDEO_OUT_COLOR_NV", # 0x20C3 "GLX_VIDEO_OUT_ALPHA_NV", # 0x20C4 "GLX_VIDEO_OUT_DEPTH_NV", # 0x20C5 "GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV", # 0x20C6 "GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV", # 0x20C7 "GLX_VIDEO_OUT_FRAME_NV", # 0x20C8 "GLX_VIDEO_OUT_FIELD_1_NV", # 0x20C9 "GLX_VIDEO_OUT_FIELD_2_NV", # 0x20CA "GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV", # 0x20CB "GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV", # 0x20CC "GLX_DEVICE_ID_NV", # 0x20CD "GLX_UNIQUE_ID_NV", # 0x20CE "GLX_NUM_VIDEO_CAPTURE_SLOTS_NV", # 0x20CF "GLX_BIND_TO_TEXTURE_RGB_EXT", # 0x20D0 "GLX_BIND_TO_TEXTURE_RGBA_EXT", # 0x20D1 "GLX_BIND_TO_MIPMAP_TEXTURE_EXT", # 0x20D2 "GLX_BIND_TO_TEXTURE_TARGETS_EXT", # 0x20D3 "GLX_Y_INVERTED_EXT", # 0x20D4 "GLX_TEXTURE_FORMAT_EXT", # 0x20D5 "GLX_TEXTURE_TARGET_EXT", # 0x20D6 "GLX_MIPMAP_TEXTURE_EXT", # 0x20D7 "GLX_TEXTURE_FORMAT_NONE_EXT", # 0x20D8 "GLX_TEXTURE_FORMAT_RGB_EXT", # 0x20D9 "GLX_TEXTURE_FORMAT_RGBA_EXT", # 0x20DA "GLX_TEXTURE_1D_EXT", # 0x20DB "GLX_TEXTURE_2D_EXT", # 0x20DC "GLX_TEXTURE_RECTANGLE_EXT", # 0x20DD "GLX_FRONT_LEFT_EXT", # 0x20DE "GLX_FRONT_RIGHT_EXT", # 0x20DF "GLX_BACK_LEFT_EXT", # 0x20E0 "GLX_BACK_RIGHT_EXT", # 0x20E1 "GLX_AUX0_EXT", # 0x20E2 "GLX_AUX1_EXT", # 0x20E3 "GLX_AUX2_EXT", # 0x20E4 "GLX_AUX3_EXT", # 0x20E5 "GLX_AUX4_EXT", # 0x20E6 "GLX_AUX5_EXT", # 0x20E7 "GLX_AUX6_EXT", # 0x20E8 "GLX_AUX7_EXT", # 0x20E9 "GLX_AUX8_EXT", # 0x20EA "GLX_AUX9_EXT", # 0x20EB "GLX_NUM_VIDEO_SLOTS_NV", # 0x20F0 "GLX_SWAP_INTERVAL_EXT", # 0x20F1 "GLX_MAX_SWAP_INTERVAL_EXT", # 0x20F2 "GLX_LATE_SWAPS_TEAR_EXT", # 0x20F3 "GLX_BACK_BUFFER_AGE_EXT", # 0x20F4 "GLX_STEREO_TREE_EXT", # 0x20F5 "GLX_GPU_FASTEST_TARGET_GPUS_AMD", # 0x21A2 "GLX_GPU_RAM_AMD", # 0x21A3 "GLX_GPU_CLOCK_AMD", # 0x21A4 "GLX_GPU_NUM_PIPES_AMD", # 0x21A5 "GLX_GPU_NUM_SIMD_AMD", # 0x21A6 "GLX_GPU_NUM_RB_AMD", # 0x21A7 "GLX_GPU_NUM_SPI_AMD", # 0x21A8 "GLX_NONE", # 0x8000 "GLX_SLOW_CONFIG", # 0x8001 "GLX_TRUE_COLOR", # 0x8002 "GLX_DIRECT_COLOR", # 0x8003 "GLX_PSEUDO_COLOR", # 0x8004 "GLX_STATIC_COLOR", # 0x8005 "GLX_GRAY_SCALE", # 0x8006 "GLX_STATIC_GRAY", # 0x8007 "GLX_TRANSPARENT_RGB", # 0x8008 "GLX_TRANSPARENT_INDEX", # 0x8009 "GLX_SHARE_CONTEXT_EXT", # 0x800A "GLX_VISUAL_ID", # 0x800B "GLX_SCREEN", # 0x800C "GLX_NON_CONFORMANT_CONFIG", # 0x800D "GLX_DRAWABLE_TYPE", # 0x8010 "GLX_RENDER_TYPE", # 0x8011 "GLX_X_RENDERABLE", # 0x8012 "GLX_FBCONFIG_ID", # 0x8013 "GLX_RGBA_TYPE", # 0x8014 "GLX_COLOR_INDEX_TYPE", # 0x8015 "GLX_MAX_PBUFFER_WIDTH", # 0x8016 "GLX_MAX_PBUFFER_HEIGHT", # 0x8017 "GLX_MAX_PBUFFER_PIXELS", # 0x8018 "GLX_OPTIMAL_PBUFFER_WIDTH_SGIX", # 0x8019 "GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX", # 0x801A "GLX_PRESERVED_CONTENTS", # 0x801B "GLX_LARGEST_PBUFFER", # 0x801C "GLX_WIDTH", # 0x801D "GLX_HEIGHT", # 0x801E "GLX_EVENT_MASK", # 0x801F "GLX_DAMAGED", # 0x8020 "GLX_SAVED", # 0x8021 "GLX_WINDOW", # 0x8022 "GLX_PBUFFER", # 0x8023 #"GLX_DIGITAL_MEDIA_PBUFFER_SGIX", # 0x8024 "GLX_BLENDED_RGBA_SGIS", # 0x8025 "GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS", # 0x8026 "GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS", # 0x8027 "GLX_VISUAL_SELECT_GROUP_SGIX", # 0x8028 "GLX_HYPERPIPE_ID_SGIX", # 0x8030 "GLX_PBUFFER_HEIGHT", # 0x8040 "GLX_PBUFFER_WIDTH", # 0x8041 "GLX_SAMPLE_BUFFERS_3DFX", # 0x8050 "GLX_SAMPLES_3DFX", # 0x8051 "GLX_SWAP_METHOD_OML", # 0x8060 "GLX_SWAP_EXCHANGE_OML", # 0x8061 "GLX_SWAP_COPY_OML", # 0x8062 "GLX_SWAP_UNDEFINED_OML", # 0x8063 "GLX_EXCHANGE_COMPLETE_INTEL", # 0x8180 "GLX_COPY_COMPLETE_INTEL", # 0x8181 "GLX_FLIP_COMPLETE_INTEL", # 0x8182 "GLX_RENDERER_VENDOR_ID_MESA", # 0x8183 "GLX_RENDERER_DEVICE_ID_MESA", # 0x8184 "GLX_RENDERER_VERSION_MESA", # 0x8185 "GLX_RENDERER_ACCELERATED_MESA", # 0x8186 "GLX_RENDERER_VIDEO_MEMORY_MESA", # 0x8187 "GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA", # 0x8188 "GLX_RENDERER_PREFERRED_PROFILE_MESA", # 0x8189 "GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA", # 0x818A "GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA", # 0x818B "GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA", # 0x818C "GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA", # 0x818D "GLX_RENDERER_ID_MESA", # 0x818E "GLX_LOSE_CONTEXT_ON_RESET_ARB", # 0x8252 "GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB", # 0x8256 "GLX_NO_RESET_NOTIFICATION_ARB", # 0x8261 "GLX_CONTEXT_PROFILE_MASK_ARB", # 0x9126 "GLX_SAMPLE_BUFFERS", # 0x186A0 "GLX_SAMPLES", # 0x186A1 "GLX_DONT_CARE", # 0xFFFFFFFF ]) GLXError = FakeEnum(Int, [ "GLX_BAD_SCREEN", "GLX_BAD_ATTRIBUTE", "GLX_NO_EXTENSION", "GLX_BAD_VISUAL", "GLX_BAD_CONTEXT", "GLX_BAD_VALUE", "GLX_BAD_ENUM", ]) GLXname = FakeEnum(Int, [ "GLX_VENDOR", "GLX_VERSION", "GLX_EXTENSIONS", ]) GLXbuffer = Flags(Int, [ "GLX_WINDOW_BIT", "GLX_PIXMAP_BIT", "GLX_PBUFFER_BIT", "GLX_AUX_BUFFERS_BIT", "GLX_FRONT_LEFT_BUFFER_BIT", "GLX_FRONT_RIGHT_BUFFER_BIT", "GLX_BACK_LEFT_BUFFER_BIT", "GLX_BACK_RIGHT_BUFFER_BIT", "GLX_DEPTH_BUFFER_BIT", "GLX_STENCIL_BUFFER_BIT", "GLX_ACCUM_BUFFER_BIT", ]) GLXbuffer = Flags(Int, [ "GLX_RGBA_BIT", "GLX_COLOR_INDEX_BIT", "GLX_PBUFFER_CLOBBER_MASK", ]) UnusedAttribs = AttribArray(Const(GLXEnum), []) GLXCommonAttribs = [ ('GLX_BUFFER_SIZE', UInt), ('GLX_LEVEL', Int), ('GLX_AUX_BUFFERS', UInt), ('GLX_RED_SIZE', UInt), ('GLX_GREEN_SIZE', UInt), ('GLX_BLUE_SIZE', UInt), ('GLX_ALPHA_SIZE', UInt), ('GLX_DEPTH_SIZE', UInt), ('GLX_STENCIL_SIZE', UInt), ('GLX_ACCUM_RED_SIZE', UInt), ('GLX_ACCUM_GREEN_SIZE', UInt), ('GLX_ACCUM_BLUE_SIZE', UInt), ('GLX_ACCUM_ALPHA_SIZE', UInt), ('GLX_CONFIG_CAVEAT', FakeEnum(Int, ["GLX_NONE", "GLX_SLOW_CONFIG", "GLX_NON_CONFORMANT_CONFIG"])), ('GLX_X_VISUAL_TYPE', FakeEnum(Int, ["GLX_TRUE_COLOR", "GLX_DIRECT_COLOR", "GLX_PSEUDO_COLOR", "GLX_STATIC_COLOR"])), ('GLX_TRANSPARENT_TYPE', FakeEnum(Int, ["GLX_NONE", "GLX_TRANSPARENT_RGB", "GLX_TRANSPARENT_INDEX"])), ('GLX_TRANSPARENT_INDEX_VALUE', Int), ('GLX_TRANSPARENT_RED_VALUE', Int), ('GLX_TRANSPARENT_GREEN_VALUE', Int), ('GLX_TRANSPARENT_BLUE_VALUE', Int), ('GLX_TRANSPARENT_ALPHA_VALUE', Int), ('GLX_SAMPLE_BUFFERS', UInt), ('GLX_SAMPLES', UInt), ] GLXVisualAttribs = AttribArray(GLXEnum, GLXCommonAttribs + [ ('GLX_USE_GL', None), ('GLX_RGBA', None), ('GLX_DOUBLEBUFFER', None), ('GLX_STEREO', None), ]) GLXFBConfigCommonAttribs = GLXCommonAttribs + [ ('GLX_DOUBLEBUFFER', Bool), ('GLX_STEREO', Bool), ('GLX_RENDER_TYPE', Flags(Int, ["GLX_RGBA_BIT", "GLX_COLOR_INDEX_BIT"])), ('GLX_DRAWABLE_TYPE', Flags(Int, ["GLX_WINDOW_BIT", "GLX_PIXMAP_BIT", "GLX_PBUFFER_BIT"])), ('GLX_X_RENDERABLE', Bool), ] GLXFBConfigGLXAttribs = GLXFBConfigCommonAttribs + [ ('GLX_FBCONFIG_ID', GLXFBConfigID), ('GLX_MAX_PBUFFER_WIDTH', Int), ('GLX_MAX_PBUFFER_HEIGHT', Int), ('GLX_MAX_PBUFFER_PIXELS', Int), ('GLX_VISUAL_ID', VisualID), ] GLXFBConfigAttribs = AttribArray(Const(GLXEnum), GLXFBConfigGLXAttribs) GLXFBConfigSGIXAttribs = AttribArray(GLXEnum, GLXFBConfigCommonAttribs) GLXContextProfileMask = Flags(Int, [ "GLX_CONTEXT_CORE_PROFILE_BIT_ARB", "GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB", "GLX_CONTEXT_ES_PROFILE_BIT_EXT", ]) GLXContextARBAttribs = AttribArray(Const(GLXEnum), [ ('GLX_RENDER_TYPE', FakeEnum(Int, ["GLX_RGBA_TYPE", "GLX_COLOR_INDEX_TYPE"])), ('GLX_CONTEXT_MAJOR_VERSION_ARB', Int), ('GLX_CONTEXT_MINOR_VERSION_ARB', Int), ('GLX_CONTEXT_FLAGS_ARB', Flags(Int, [ "GLX_CONTEXT_DEBUG_BIT_ARB", "GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB", "GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB", ])), ('GLX_CONTEXT_PROFILE_MASK_ARB', GLXContextProfileMask), ('GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB', GLXEnum), ('GLX_CONTEXT_RELEASE_BEHAVIOR_ARB', FakeEnum(Int, [ 'GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB', 'GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB', ])), ]) GLXPbufferAttribs = AttribArray(Const(GLXEnum), [ ('GLX_PBUFFER_WIDTH', Int), ('GLX_PBUFFER_HEIGHT', Int), ('GLX_LARGEST_PBUFFER', Bool), ('GLX_PRESERVED_CONTENTS', Bool) ]) GLXPbufferSGIXAttribs = AttribArray(GLXEnum, [ ('GLX_PRESERVED_CONTENTS_SGIX', Bool), ('GLX_LARGEST_PBUFFER', Bool), #('GLX_DIGITAL_MEDIA_PBUFFER_SGIX', Bool), ]) GLXRendererAttrPointer = Polymorphic('attribute', [ ("GLX_RENDERER_VENDOR_ID_MESA", Pointer(UInt)), ("GLX_RENDERER_DEVICE_ID_MESA", Pointer(UInt)), ("GLX_RENDERER_VERSION_MESA", Array(UInt, 3)), ("GLX_RENDERER_ACCELERATED_MESA", Pointer(Bool)), ("GLX_RENDERER_VIDEO_MEMORY_MESA", Pointer(UInt)), ("GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA", Pointer(Bool)), ("GLX_RENDERER_PREFERRED_PROFILE_MESA", Pointer(GLXContextProfileMask)), ("GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA", Array(UInt, 2) ), ("GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA", Array(UInt, 2)), ("GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA", Array(UInt, 2)), ("GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA", Array(UInt, 2)), ], Pointer(UInt) ) glxapi = Module("GLX") PROC = Opaque("__GLXextFuncPtr") glxapi.addFunctions([ # GLX_VERSION_1_0 Function(Pointer(XVisualInfo), "glXChooseVisual", [(Display, "dpy"), (Int, "screen"), (GLXVisualAttribs, "attribList")]), Function(GLXContext, "glXCreateContext", [(Display, "dpy"), (Pointer(XVisualInfo), "vis"), (GLXContext, "shareList"), (Bool, "direct")]), Function(Void, "glXDestroyContext", [(Display, "dpy"), (GLXContext, "ctx")]), Function(Bool, "glXMakeCurrent", [(Display, "dpy"), (GLXDrawable, "drawable"), (GLXContext, "ctx")]), Function(Void, "glXCopyContext", [(Display, "dpy"), (GLXContext, "src"), (GLXContext, "dst"), (ULong, "mask")]), Function(Void, "glXSwapBuffers", [(Display, "dpy"), (GLXDrawable, "drawable")]), Function(GLXPixmap, "glXCreateGLXPixmap", [(Display, "dpy"), (Pointer(XVisualInfo), "visual"), (Pixmap, "pixmap")]), Function(Void, "glXDestroyGLXPixmap", [(Display, "dpy"), (GLXPixmap, "pixmap")]), Function(Bool, "glXQueryExtension", [(Display, "dpy"), Out(Pointer(Int), "errorb"), Out(Pointer(Int), "event")]), Function(Bool, "glXQueryVersion", [(Display, "dpy"), Out(Pointer(Int), "maj"), Out(Pointer(Int), "min")]), Function(Bool, "glXIsDirect", [(Display, "dpy"), (GLXContext, "ctx")]), Function(GLXError, "glXGetConfig", [(Display, "dpy"), (Pointer(XVisualInfo), "visual"), (GLXEnum, "attrib"), Out(Pointer(Int), "value")]), Function(GLXContext, "glXGetCurrentContext", [], sideeffects=False), Function(GLXDrawable, "glXGetCurrentDrawable", [], sideeffects=False), Function(Void, "glXWaitGL", []), Function(Void, "glXWaitX", []), Function(Void, "glXUseXFont", [(Font, "font"), (Int, "first"), (Int, "count"), (Int, "list")]), # GLX_VERSION_1_1 Function(ConstCString, "glXQueryExtensionsString", [(Display, "dpy"), (Int, "screen")], sideeffects=False), Function(ConstCString, "glXQueryServerString", [(Display, "dpy"), (Int, "screen"), (GLXname, "name")], sideeffects=False), Function(ConstCString, "glXGetClientString", [(Display, "dpy"), (GLXname, "name")], sideeffects=False), # GLX_VERSION_1_2 Function(Display, "glXGetCurrentDisplay", [], sideeffects=False), # GLX_VERSION_1_3 Function(Array(GLXFBConfig, "*nitems"), "glXChooseFBConfig", [(Display, "dpy"), (Int, "screen"), (GLXFBConfigAttribs, "attribList"), Out(Pointer(Int), "nitems")]), Function(Int, "glXGetFBConfigAttrib", [(Display, "dpy"), (GLXFBConfig, "config"), (GLXEnum, "attribute"), Out(Pointer(Int), "value")]), Function(Array(GLXFBConfig, "*nelements"), "glXGetFBConfigs", [(Display, "dpy"), (Int, "screen"), Out(Pointer(Int), "nelements")]), Function(Pointer(XVisualInfo), "glXGetVisualFromFBConfig", [(Display, "dpy"), (GLXFBConfig, "config")]), Function(GLXWindow, "glXCreateWindow", [(Display, "dpy"), (GLXFBConfig, "config"), (Window, "win"), (UnusedAttribs, "attribList")]), Function(Void, "glXDestroyWindow", [(Display, "dpy"), (GLXWindow, "window")]), Function(GLXPixmap, "glXCreatePixmap", [(Display, "dpy"), (GLXFBConfig, "config"), (Pixmap, "pixmap"), (UnusedAttribs, "attribList")]), Function(Void, "glXDestroyPixmap", [(Display, "dpy"), (GLXPixmap, "pixmap")]), Function(GLXPbuffer, "glXCreatePbuffer", [(Display, "dpy"), (GLXFBConfig, "config"), (GLXPbufferAttribs, "attribList")]), Function(Void, "glXDestroyPbuffer", [(Display, "dpy"), (GLXPbuffer, "pbuf")]), Function(Void, "glXQueryDrawable", [(Display, "dpy"), (GLXDrawable, "draw"), (GLXEnum, "attribute"), Out(Pointer(UInt), "value")]), Function(GLXContext, "glXCreateNewContext", [(Display, "dpy"), (GLXFBConfig, "config"), (GLXEnum, "renderType"), (GLXContext, "shareList"), (Bool, "direct")]), Function(Bool, "glXMakeContextCurrent", [(Display, "dpy"), (GLXDrawable, "draw"), (GLXDrawable, "read"), (GLXContext, "ctx")]), Function(GLXDrawable, "glXGetCurrentReadDrawable", []), Function(Int, "glXQueryContext", [(Display, "dpy"), (GLXContext, "ctx"), (GLXEnum, "attribute"), Out(Pointer(Int), "value")]), Function(Void, "glXSelectEvent", [(Display, "dpy"), (GLXDrawable, "drawable"), (ULong, "mask")]), Function(Void, "glXGetSelectedEvent", [(Display, "dpy"), (GLXDrawable, "drawable"), Out(Pointer(ULong), "mask")]), # GLX_ARB_create_context Function(GLXContext, "glXCreateContextAttribsARB", [(Display, "dpy"), (GLXFBConfig, "config"), (GLXContext, "share_context"), (Bool, "direct"), (GLXContextARBAttribs, "attrib_list")]), # GLX_EXT_import_context Function(Display, "glXGetCurrentDisplayEXT", []), Function(Int, "glXQueryContextInfoEXT", [(Display, "dpy"), (GLXContext, "context"), (Int, "attribute"), (OpaquePointer(Int), "value")]), Function(GLXContextID, "glXGetContextIDEXT", [(Const(GLXContext), "context")]), Function(GLXContext, "glXImportContextEXT", [(Display, "dpy"), (GLXContextID, "contextID")]), Function(Void, "glXFreeContextEXT", [(Display, "dpy"), (GLXContext, "context")]), # GLX_EXT_swap_control Function(Void, "glXSwapIntervalEXT", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int, "interval")]), # GLX_EXT_texture_from_pixmap Function(Void, "glXBindTexImageEXT", [(Display, "display"), (GLXDrawable, "drawable"), (GLXEnum, "buffer"), (GLXFBConfigAttribs, "attrib_list")]), Function(Void, "glXReleaseTexImageEXT", [(Display, "display"), (GLXDrawable, "drawable"), (GLXEnum, "buffer")]), # GLX_MESA_agp_offset Function(UInt, "glXGetAGPOffsetMESA", [(OpaquePointer(Const(Void)), "pointer")]), # GLX_MESA_copy_sub_buffer Function(Void, "glXCopySubBufferMESA", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int, "x"), (Int, "y"), (Int, "width"), (Int, "height")]), # GLX_MESA_pixmap_colormap Function(GLXPixmap, "glXCreateGLXPixmapMESA", [(Display, "dpy"), (Pointer(XVisualInfo), "visual"), (Pixmap, "pixmap"), (Colormap, "cmap")]), # GLX_MESA_query_renderer GlFunction(Bool, "glXQueryCurrentRendererIntegerMESA", [(GLXEnum, "attribute"), Out(GLXRendererAttrPointer, "value")], sideeffects=False), GlFunction(ConstCString, "glXQueryCurrentRendererStringMESA", [(GLXEnum, "attribute")], sideeffects=False), GlFunction(Bool, "glXQueryRendererIntegerMESA", [(Display, "dpy"), (Int, "screen"), (Int, "renderer"), (GLXEnum, "attribute"), Out(GLXRendererAttrPointer, "value")], sideeffects=False), GlFunction(ConstCString, "glXQueryRendererStringMESA", [(Display, "dpy"), (Int, "screen"), (Int, "renderer"), (GLXEnum, "attribute")], sideeffects=False), # GLX_MESA_release_buffers Function(Bool, "glXReleaseBuffersMESA", [(Display, "dpy"), (GLXDrawable, "drawable")]), # GLX_MESA_set_3dfx_mode Function(Bool, "glXSet3DfxModeMESA", [(Int, "mode")]), # GLX_MESA_swap_control Function(Int, "glXSwapIntervalMESA", [(UInt, "interval")]), Function(Int, "glXGetSwapIntervalMESA", [], sideeffects=False), # GLX_NV_copy_image Function(Void, "glXCopyImageSubDataNV", [(Display, "dpy"), (GLXContext, "srcCtx"), (GLuint, "srcName"), (GLenum, "srcTarget"), (GLint, "srcLevel"), (GLint, "srcX"), (GLint, "srcY"), (GLint, "srcZ"), (GLXContext, "dstCtx"), (GLuint, "dstName"), (GLenum, "dstTarget"), (GLint, "dstLevel"), (GLint, "dstX"), (GLint, "dstY"), (GLint, "dstZ"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), # GLX_NV_present_video Function(Array(UInt, "(nelements ? *nelements : 0)"), "glXEnumerateVideoDevicesNV", [(Display, "dpy"), (Int, "screen"), Out(Pointer(Int), "nelements")]), Function(Int, "glXBindVideoDeviceNV", [(Display, "dpy"), (UInt, "video_slot"), (UInt, "video_device"), (UnusedAttribs, "attrib_list")]), # GLX_NV_swap_group Function(Bool, "glXJoinSwapGroupNV", [(Display, "dpy"), (GLXDrawable, "drawable"), (GLuint, "group")]), Function(Bool, "glXBindSwapBarrierNV", [(Display, "dpy"), (GLuint, "group"), (GLuint, "barrier")]), Function(Bool, "glXQuerySwapGroupNV", [(Display, "dpy"), (GLXDrawable, "drawable"), (OpaquePointer(GLuint), "group"), (OpaquePointer(GLuint), "barrier")]), Function(Bool, "glXQueryMaxSwapGroupsNV", [(Display, "dpy"), (Int, "screen"), (OpaquePointer(GLuint), "maxGroups"), (OpaquePointer(GLuint), "maxBarriers")]), Function(Bool, "glXQueryFrameCountNV", [(Display, "dpy"), (Int, "screen"), (OpaquePointer(GLuint), "count")]), Function(Bool, "glXResetFrameCountNV", [(Display, "dpy"), (Int, "screen")]), # GLX_NV_vertex_array_range Function(OpaquePointer(Void), "glXAllocateMemoryNV", [(GLsizei, "size"), (GLfloat, "readfreq"), (GLfloat, "writefreq"), (GLfloat, "priority")]), Function(Void, "glXFreeMemoryNV", [(OpaquePointer(Void), "pointer")]), # GLX_NV_video_capture Function(Int, "glXBindVideoCaptureDeviceNV", [(Display, "dpy"), (UInt, "video_capture_slot"), (GLXVideoCaptureDeviceNV, "device")]), Function(Array(GLXVideoCaptureDeviceNV, "(nelements ? *nelements : 0)"), "glXEnumerateVideoCaptureDevicesNV", [(Display, "dpy"), (Int, "screen"), Out(Pointer(Int), "nelements")]), Function(Void, "glXLockVideoCaptureDeviceNV", [(Display, "dpy"), (GLXVideoCaptureDeviceNV, "device")]), Function(Int, "glXQueryVideoCaptureDeviceNV", [(Display, "dpy"), (GLXVideoCaptureDeviceNV, "device"), (Int, "attribute"), Out(Pointer(Int), "value")], sideeffects=False), Function(Void, "glXReleaseVideoCaptureDeviceNV", [(Display, "dpy"), (GLXVideoCaptureDeviceNV, "device")]), # GLX_NV_video_output Function(Int, "glXGetVideoDeviceNV", [(Display, "dpy"), (Int, "screen"), (Int, "numVideoDevices"), Out(Array(GLXVideoDeviceNV, "numVideoDevices"), "pVideoDevice")]), Function(Int, "glXReleaseVideoDeviceNV", [(Display, "dpy"), (Int, "screen"), (GLXVideoDeviceNV, "VideoDevice")]), Function(Int, "glXBindVideoImageNV", [(Display, "dpy"), (GLXVideoDeviceNV, "VideoDevice"), (GLXPbuffer, "pbuf"), (Int, "iVideoBuffer")]), Function(Int, "glXReleaseVideoImageNV", [(Display, "dpy"), (GLXPbuffer, "pbuf")]), Function(Int, "glXSendPbufferToVideoNV", [(Display, "dpy"), (GLXPbuffer, "pbuf"), (Int, "iBufferType"), Out(Pointer(ULong), "pulCounterPbuffer"), (GLboolean, "bBlock")]), Function(Int, "glXGetVideoInfoNV", [(Display, "dpy"), (Int, "screen"), (GLXVideoDeviceNV, "VideoDevice"), Out(Pointer(ULong), "pulCounterOutputPbuffer"), Out(Pointer(ULong), "pulCounterOutputVideo")], sideeffects=False), # GLX_OML_sync_control Function(Bool, "glXGetSyncValuesOML", [(Display, "dpy"), (GLXDrawable, "drawable"), (OpaquePointer(Int64), "ust"), (OpaquePointer(Int64), "msc"), (OpaquePointer(Int64), "sbc")]), Function(Bool, "glXGetMscRateOML", [(Display, "dpy"), (GLXDrawable, "drawable"), (OpaquePointer(Int32), "numerator"), (OpaquePointer(Int32), "denominator")]), Function(Int64, "glXSwapBuffersMscOML", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int64, "target_msc"), (Int64, "divisor"), (Int64, "remainder")]), Function(Bool, "glXWaitForMscOML", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int64, "target_msc"), (Int64, "divisor"), (Int64, "remainder"), (OpaquePointer(Int64), "ust"), (OpaquePointer(Int64), "msc"), (OpaquePointer(Int64), "sbc")]), Function(Bool, "glXWaitForSbcOML", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int64, "target_sbc"), (OpaquePointer(Int64), "ust"), (OpaquePointer(Int64), "msc"), (OpaquePointer(Int64), "sbc")]), # GLX_SGI_cushion Function(Void, "glXCushionSGI", [(Display, "dpy"), (Window, "window"), (Float, "cushion")]), # GLX_SGI_make_current_read Function(Bool, "glXMakeCurrentReadSGI", [(Display, "dpy"), (GLXDrawable, "draw"), (GLXDrawable, "read"), (GLXContext, "ctx")]), Function(GLXDrawable, "glXGetCurrentReadDrawableSGI", []), # GLX_SGI_swap_control Function(Int, "glXSwapIntervalSGI", [(Int, "interval")]), # GLX_SGI_video_sync Function(Int, "glXGetVideoSyncSGI", [(OpaquePointer(UInt), "count")]), Function(Int, "glXWaitVideoSyncSGI", [(Int, "divisor"), (Int, "remainder"), (OpaquePointer(UInt), "count")]), # GLX_SGIX_dmbuffer #Function(Bool, "glXAssociateDMPbufferSGIX", [(Display, "dpy"), (GLXPbufferSGIX, "pbuffer"), (OpaquePointer(DMparams), "params"), (DMbuffer, "dmbuffer")]), # GLX_SGIX_fbconfig Function(Int, "glXGetFBConfigAttribSGIX", [(Display, "dpy"), (GLXFBConfigSGIX, "config"), (GLXEnum, "attribute"), Out(Pointer(Int), "value")]), Function(Array(GLXFBConfigSGIX, "*nelements"), "glXChooseFBConfigSGIX", [(Display, "dpy"), (Int, "screen"), (GLXFBConfigSGIXAttribs, "attrib_list"), Out(Pointer(Int), "nelements")]), Function(GLXPixmap, "glXCreateGLXPixmapWithConfigSGIX", [(Display, "dpy"), (GLXFBConfigSGIX, "config"), (Pixmap, "pixmap")]), Function(GLXContext, "glXCreateContextWithConfigSGIX", [(Display, "dpy"), (GLXFBConfigSGIX, "config"), (GLXEnum, "render_type"), (GLXContext, "share_list"), (Bool, "direct")]), Function(Pointer(XVisualInfo), "glXGetVisualFromFBConfigSGIX", [(Display, "dpy"), (GLXFBConfigSGIX, "config")]), Function(GLXFBConfigSGIX, "glXGetFBConfigFromVisualSGIX", [(Display, "dpy"), (Pointer(XVisualInfo), "vis")]), # GLX_SGIX_hyperpipe #Function(OpaquePointer(GLXHyperpipeNetworkSGIX), "glXQueryHyperpipeNetworkSGIX", [(Display, "dpy"), (OpaquePointer(Int), "npipes")]), #Function(Int, "glXHyperpipeConfigSGIX", [(Display, "dpy"), (Int, "networkId"), (Int, "npipes"), (OpaquePointer(GLXHyperpipeConfigSGIX), "cfg"), (OpaquePointer(Int), "hpId")]), #Function(OpaquePointer(GLXHyperpipeConfigSGIX), "glXQueryHyperpipeConfigSGIX", [(Display, "dpy"), (Int, "hpId"), (OpaquePointer(Int), "npipes")]), #Function(Int, "glXDestroyHyperpipeConfigSGIX", [(Display, "dpy"), (Int, "hpId")]), #Function(Int, "glXBindHyperpipeSGIX", [(Display, "dpy"), (Int, "hpId")]), #Function(Int, "glXQueryHyperpipeBestAttribSGIX", [(Display, "dpy"), (Int, "timeSlice"), (Int, "attrib"), (Int, "size"), (OpaquePointer(Void), "attribList"), (OpaquePointer(Void), "returnAttribList")]), #Function(Int, "glXHyperpipeAttribSGIX", [(Display, "dpy"), (Int, "timeSlice"), (Int, "attrib"), (Int, "size"), (OpaquePointer(Void), "attribList")]), #Function(Int, "glXQueryHyperpipeAttribSGIX", [(Display, "dpy"), (Int, "timeSlice"), (Int, "attrib"), (Int, "size"), (OpaquePointer(Void), "returnAttribList")]), # GLX_SGIX_pbuffer Function(GLXPbufferSGIX, "glXCreateGLXPbufferSGIX", [(Display, "dpy"), (GLXFBConfigSGIX, "config"), (UInt, "width"), (UInt, "height"), (GLXPbufferSGIXAttribs, "attrib_list")]), Function(Void, "glXDestroyGLXPbufferSGIX", [(Display, "dpy"), (GLXPbufferSGIX, "pbuf")]), Function(Int, "glXQueryGLXPbufferSGIX", [(Display, "dpy"), (GLXPbufferSGIX, "pbuf"), (Int, "attribute"), Out(Pointer(UInt), "value")]), Function(Void, "glXSelectEventSGIX", [(Display, "dpy"), (GLXDrawable, "drawable"), (ULong, "mask")]), Function(Void, "glXGetSelectedEventSGIX", [(Display, "dpy"), (GLXDrawable, "drawable"), Out(Pointer(ULong), "mask")]), # GLX_SGIX_swap_barrier Function(Void, "glXBindSwapBarrierSGIX", [(Display, "dpy"), (GLXDrawable, "drawable"), (Int, "barrier")]), Function(Bool, "glXQueryMaxSwapBarriersSGIX", [(Display, "dpy"), (Int, "screen"), (OpaquePointer(Int), "max")]), # GLX_SGIX_swap_group Function(Void, "glXJoinSwapGroupSGIX", [(Display, "dpy"), (GLXDrawable, "drawable"), (GLXDrawable, "member")]), # GLX_SGIX_video_resize Function(Int, "glXBindChannelToWindowSGIX", [(Display, "display"), (Int, "screen"), (Int, "channel"), (Window, "window")]), Function(Int, "glXChannelRectSGIX", [(Display, "display"), (Int, "screen"), (Int, "channel"), (Int, "x"), (Int, "y"), (Int, "w"), (Int, "h")]), Function(Int, "glXQueryChannelRectSGIX", [(Display, "display"), (Int, "screen"), (Int, "channel"), (OpaquePointer(Int), "dx"), (OpaquePointer(Int), "dy"), (OpaquePointer(Int), "dw"), (OpaquePointer(Int), "dh")]), Function(Int, "glXQueryChannelDeltasSGIX", [(Display, "display"), (Int, "screen"), (Int, "channel"), (OpaquePointer(Int), "x"), (OpaquePointer(Int), "y"), (OpaquePointer(Int), "w"), (OpaquePointer(Int), "h")]), Function(Int, "glXChannelRectSyncSGIX", [(Display, "display"), (Int, "screen"), (Int, "channel"), (GLenum, "synctype")]), # GLX_SGIX_video_source #Function(GLXVideoSourceSGIX, "glXCreateGLXVideoSourceSGIX", [(Display, "display"), (Int, "screen"), (VLServer, "server"), (VLPath, "path"), (Int, "nodeClass"), (VLNode, "drainNode")]), #Function(Void, "glXDestroyGLXVideoSourceSGIX", [(Display, "dpy"), (GLXVideoSourceSGIX, "glxvideosource")]), # GLX_SUN_get_transparent_index #Function(Status, "glXGetTransparentIndexSUN", [(Display, "dpy"), (Window, "overlay"), (Window, "underlay"), (OpaquePointer(Long), "pTransparentIndex")]), # Must be last Function(PROC, "glXGetProcAddressARB", [(String(Const(GLubyte)), "procName")]), Function(PROC, "glXGetProcAddress", [(String(Const(GLubyte)), "procName")]), ]) # To prevent collision with stdapi.Bool del Bool tmpNnpnZF/specs/dxgi.py0000664000175000017500000011005412543167424014407 0ustar chrischris########################################################################## # # Copyright 2014 VMware, Inc # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * DXGI_FORMAT = Enum("DXGI_FORMAT", [ "DXGI_FORMAT_UNKNOWN", "DXGI_FORMAT_R32G32B32A32_TYPELESS", "DXGI_FORMAT_R32G32B32A32_FLOAT", "DXGI_FORMAT_R32G32B32A32_UINT", "DXGI_FORMAT_R32G32B32A32_SINT", "DXGI_FORMAT_R32G32B32_TYPELESS", "DXGI_FORMAT_R32G32B32_FLOAT", "DXGI_FORMAT_R32G32B32_UINT", "DXGI_FORMAT_R32G32B32_SINT", "DXGI_FORMAT_R16G16B16A16_TYPELESS", "DXGI_FORMAT_R16G16B16A16_FLOAT", "DXGI_FORMAT_R16G16B16A16_UNORM", "DXGI_FORMAT_R16G16B16A16_UINT", "DXGI_FORMAT_R16G16B16A16_SNORM", "DXGI_FORMAT_R16G16B16A16_SINT", "DXGI_FORMAT_R32G32_TYPELESS", "DXGI_FORMAT_R32G32_FLOAT", "DXGI_FORMAT_R32G32_UINT", "DXGI_FORMAT_R32G32_SINT", "DXGI_FORMAT_R32G8X24_TYPELESS", "DXGI_FORMAT_D32_FLOAT_S8X24_UINT", "DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS", "DXGI_FORMAT_X32_TYPELESS_G8X24_UINT", "DXGI_FORMAT_R10G10B10A2_TYPELESS", "DXGI_FORMAT_R10G10B10A2_UNORM", "DXGI_FORMAT_R10G10B10A2_UINT", "DXGI_FORMAT_R11G11B10_FLOAT", "DXGI_FORMAT_R8G8B8A8_TYPELESS", "DXGI_FORMAT_R8G8B8A8_UNORM", "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB", "DXGI_FORMAT_R8G8B8A8_UINT", "DXGI_FORMAT_R8G8B8A8_SNORM", "DXGI_FORMAT_R8G8B8A8_SINT", "DXGI_FORMAT_R16G16_TYPELESS", "DXGI_FORMAT_R16G16_FLOAT", "DXGI_FORMAT_R16G16_UNORM", "DXGI_FORMAT_R16G16_UINT", "DXGI_FORMAT_R16G16_SNORM", "DXGI_FORMAT_R16G16_SINT", "DXGI_FORMAT_R32_TYPELESS", "DXGI_FORMAT_D32_FLOAT", "DXGI_FORMAT_R32_FLOAT", "DXGI_FORMAT_R32_UINT", "DXGI_FORMAT_R32_SINT", "DXGI_FORMAT_R24G8_TYPELESS", "DXGI_FORMAT_D24_UNORM_S8_UINT", "DXGI_FORMAT_R24_UNORM_X8_TYPELESS", "DXGI_FORMAT_X24_TYPELESS_G8_UINT", "DXGI_FORMAT_R8G8_TYPELESS", "DXGI_FORMAT_R8G8_UNORM", "DXGI_FORMAT_R8G8_UINT", "DXGI_FORMAT_R8G8_SNORM", "DXGI_FORMAT_R8G8_SINT", "DXGI_FORMAT_R16_TYPELESS", "DXGI_FORMAT_R16_FLOAT", "DXGI_FORMAT_D16_UNORM", "DXGI_FORMAT_R16_UNORM", "DXGI_FORMAT_R16_UINT", "DXGI_FORMAT_R16_SNORM", "DXGI_FORMAT_R16_SINT", "DXGI_FORMAT_R8_TYPELESS", "DXGI_FORMAT_R8_UNORM", "DXGI_FORMAT_R8_UINT", "DXGI_FORMAT_R8_SNORM", "DXGI_FORMAT_R8_SINT", "DXGI_FORMAT_A8_UNORM", "DXGI_FORMAT_R1_UNORM", "DXGI_FORMAT_R9G9B9E5_SHAREDEXP", "DXGI_FORMAT_R8G8_B8G8_UNORM", "DXGI_FORMAT_G8R8_G8B8_UNORM", "DXGI_FORMAT_BC1_TYPELESS", "DXGI_FORMAT_BC1_UNORM", "DXGI_FORMAT_BC1_UNORM_SRGB", "DXGI_FORMAT_BC2_TYPELESS", "DXGI_FORMAT_BC2_UNORM", "DXGI_FORMAT_BC2_UNORM_SRGB", "DXGI_FORMAT_BC3_TYPELESS", "DXGI_FORMAT_BC3_UNORM", "DXGI_FORMAT_BC3_UNORM_SRGB", "DXGI_FORMAT_BC4_TYPELESS", "DXGI_FORMAT_BC4_UNORM", "DXGI_FORMAT_BC4_SNORM", "DXGI_FORMAT_BC5_TYPELESS", "DXGI_FORMAT_BC5_UNORM", "DXGI_FORMAT_BC5_SNORM", "DXGI_FORMAT_B5G6R5_UNORM", "DXGI_FORMAT_B5G5R5A1_UNORM", "DXGI_FORMAT_B8G8R8A8_UNORM", "DXGI_FORMAT_B8G8R8X8_UNORM", "DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM", "DXGI_FORMAT_B8G8R8A8_TYPELESS", "DXGI_FORMAT_B8G8R8A8_UNORM_SRGB", "DXGI_FORMAT_B8G8R8X8_TYPELESS", "DXGI_FORMAT_B8G8R8X8_UNORM_SRGB", "DXGI_FORMAT_BC6H_TYPELESS", "DXGI_FORMAT_BC6H_UF16", "DXGI_FORMAT_BC6H_SF16", "DXGI_FORMAT_BC7_TYPELESS", "DXGI_FORMAT_BC7_UNORM", "DXGI_FORMAT_BC7_UNORM_SRGB", ]) HRESULT = MAKE_HRESULT([ "DXGI_STATUS_OCCLUDED", "DXGI_STATUS_CLIPPED", "DXGI_STATUS_NO_REDIRECTION", "DXGI_STATUS_NO_DESKTOP_ACCESS", "DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE", "DXGI_STATUS_MODE_CHANGED", "DXGI_STATUS_MODE_CHANGE_IN_PROGRESS", "DXGI_ERROR_INVALID_CALL", "DXGI_ERROR_NOT_FOUND", "DXGI_ERROR_MORE_DATA", "DXGI_ERROR_UNSUPPORTED", "DXGI_ERROR_DEVICE_REMOVED", "DXGI_ERROR_DEVICE_HUNG", "DXGI_ERROR_DEVICE_RESET", "DXGI_ERROR_WAS_STILL_DRAWING", "DXGI_ERROR_FRAME_STATISTICS_DISJOINT", "DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE", "DXGI_ERROR_DRIVER_INTERNAL_ERROR", "DXGI_ERROR_NONEXCLUSIVE", "DXGI_ERROR_NOT_CURRENTLY_AVAILABLE", "DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED", "DXGI_ERROR_REMOTE_OUTOFMEMORY", ]) DXGI_RGB = Struct("DXGI_RGB", [ (Float, "Red"), (Float, "Green"), (Float, "Blue"), ]) DXGI_GAMMA_CONTROL = Struct("DXGI_GAMMA_CONTROL", [ (DXGI_RGB, "Scale"), (DXGI_RGB, "Offset"), (Array(DXGI_RGB, 1025), "GammaCurve"), ]) DXGI_GAMMA_CONTROL_CAPABILITIES = Struct("DXGI_GAMMA_CONTROL_CAPABILITIES", [ (BOOL, "ScaleAndOffsetSupported"), (Float, "MaxConvertedValue"), (Float, "MinConvertedValue"), (UINT, "NumGammaControlPoints"), (Array(Float, "{self}.NumGammaControlPoints"), "ControlPointPositions"), ]) DXGI_RATIONAL = Struct("DXGI_RATIONAL", [ (UINT, "Numerator"), (UINT, "Denominator"), ]) DXGI_MODE_SCANLINE_ORDER = Enum("DXGI_MODE_SCANLINE_ORDER", [ "DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED", "DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE", "DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST", "DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST", ]) DXGI_MODE_SCALING = Enum("DXGI_MODE_SCALING", [ "DXGI_MODE_SCALING_UNSPECIFIED", "DXGI_MODE_SCALING_CENTERED", "DXGI_MODE_SCALING_STRETCHED", ]) DXGI_MODE_ROTATION = Enum("DXGI_MODE_ROTATION", [ "DXGI_MODE_ROTATION_UNSPECIFIED", "DXGI_MODE_ROTATION_IDENTITY", "DXGI_MODE_ROTATION_ROTATE90", "DXGI_MODE_ROTATION_ROTATE180", "DXGI_MODE_ROTATION_ROTATE270", ]) DXGI_MODE_DESC = Struct("DXGI_MODE_DESC", [ (UINT, "Width"), (UINT, "Height"), (DXGI_RATIONAL, "RefreshRate"), (DXGI_FORMAT, "Format"), (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"), (DXGI_MODE_SCALING, "Scaling"), ]) DXGI_SAMPLE_DESC = Struct("DXGI_SAMPLE_DESC", [ (UINT, "Count"), (UINT, "Quality"), ]) DXGI_RGBA = Struct("DXGI_RGBA", [ (Float, "r"), (Float, "g"), (Float, "b"), (Float, "a"), ]) IDXGIObject = Interface("IDXGIObject", IUnknown) IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject) IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject) IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject) IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject) IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface) IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject) IDXGIOutput = Interface("IDXGIOutput", IDXGIObject) IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject) IDXGIFactory = Interface("IDXGIFactory", IDXGIObject) IDXGIDevice = Interface("IDXGIDevice", IDXGIObject) IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory) IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter) IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice) DXGI_USAGE = Flags(UINT, [ "DXGI_CPU_ACCESS_NONE", # 0 "DXGI_CPU_ACCESS_SCRATCH", # 3 "DXGI_CPU_ACCESS_DYNAMIC", # 1 "DXGI_CPU_ACCESS_READ_WRITE", # 2 "DXGI_USAGE_SHADER_INPUT", "DXGI_USAGE_RENDER_TARGET_OUTPUT", "DXGI_USAGE_BACK_BUFFER", "DXGI_USAGE_SHARED", "DXGI_USAGE_READ_ONLY", "DXGI_USAGE_DISCARD_ON_PRESENT", "DXGI_USAGE_UNORDERED_ACCESS", ]) DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [ (UINT, "PresentCount"), (UINT, "PresentRefreshCount"), (UINT, "SyncRefreshCount"), (LARGE_INTEGER, "SyncQPCTime"), (LARGE_INTEGER, "SyncGPUTime"), ]) DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [ (INT, "Pitch"), (LinearPointer(BYTE, "_MappedSize"), "pBits"), ]) DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [ (WString, "Description"), (UINT, "VendorId"), (UINT, "DeviceId"), (UINT, "SubSysId"), (UINT, "Revision"), (SIZE_T, "DedicatedVideoMemory"), (SIZE_T, "DedicatedSystemMemory"), (SIZE_T, "SharedSystemMemory"), (LUID, "AdapterLuid"), ]) DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [ (WString, "DeviceName"), (RECT, "DesktopCoordinates"), (BOOL, "AttachedToDesktop"), (DXGI_MODE_ROTATION, "Rotation"), (HMONITOR, "Monitor"), ]) DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [ (HANDLE, "Handle"), ]) DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [ "DXGI_RESOURCE_PRIORITY_MINIMUM", "DXGI_RESOURCE_PRIORITY_LOW", "DXGI_RESOURCE_PRIORITY_NORMAL", "DXGI_RESOURCE_PRIORITY_HIGH", "DXGI_RESOURCE_PRIORITY_MAXIMUM", ]) DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [ "DXGI_RESIDENCY_FULLY_RESIDENT", "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY", "DXGI_RESIDENCY_EVICTED_TO_DISK", ]) DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [ (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "Format"), (DXGI_SAMPLE_DESC, "SampleDesc"), ]) DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [ "DXGI_SWAP_EFFECT_DISCARD", "DXGI_SWAP_EFFECT_SEQUENTIAL", ]) DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [ "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED", "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH", "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE", ]) DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [ (DXGI_MODE_DESC, "BufferDesc"), (DXGI_SAMPLE_DESC, "SampleDesc"), (DXGI_USAGE, "BufferUsage"), (UINT, "BufferCount"), (HWND, "OutputWindow"), (BOOL, "Windowed"), (DXGI_SWAP_EFFECT, "SwapEffect"), (DXGI_SWAP_CHAIN_FLAG, "Flags"), ]) IDXGIObject.methods += [ StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False), StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]), ] IDXGIDeviceSubObject.methods += [ StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]), ] IDXGIResource.methods += [ StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False), StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]), StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False), ] IDXGIKeyedMutex.methods += [ StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")]), StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]), ] DXGI_MAP = Flags(UINT, [ "DXGI_MAP_READ", "DXGI_MAP_WRITE", "DXGI_MAP_DISCARD", ]) IDXGISurface.methods += [ StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]), StdMethod(HRESULT, "Unmap", []), ] IDXGISurface1.methods += [ StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]), StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]), ] IDXGIAdapter.methods += [ StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False), ] DXGI_ENUM_MODES = Flags(UINT, [ "DXGI_ENUM_MODES_INTERLACED", "DXGI_ENUM_MODES_SCALING", "DXGI_ENUM_MODES_STEREO", "DXGI_ENUM_MODES_DISABLED_STEREO", ]) IDXGIOutput.methods += [ StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False), StdMethod(HRESULT, "FindClosestMatchingMode", [(Pointer(Const(DXGI_MODE_DESC)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")], sideeffects=False), StdMethod(HRESULT, "WaitForVBlank", []), StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]), StdMethod(Void, "ReleaseOwnership", []), StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")], sideeffects=False), StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]), StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False), StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]), StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]), StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False), ] DXGI_PRESENT = Flags(UINT, [ "DXGI_PRESENT_TEST", "DXGI_PRESENT_DO_NOT_SEQUENCE", "DXGI_PRESENT_RESTART", "DXGI_PRESENT_DO_NOT_WAIT", "DXGI_PRESENT_STEREO_PREFER_RIGHT", "DXGI_PRESENT_STEREO_TEMPORARY_MONO", "DXGI_PRESENT_RESTRICT_TO_OUTPUT", "DXGI_PRESENT_USE_DURATION", ]) IDXGISwapChain.methods += [ StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]), StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]), StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]), StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]), StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]), StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]), StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False), StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False), ] DXGI_MWA = Flags(UINT, [ "DXGI_MWA_NO_WINDOW_CHANGES", "DXGI_MWA_NO_ALT_ENTER", "DXGI_MWA_NO_PRINT_SCREEN", "DXGI_MWA_VALID", ]) IDXGIFactory.methods += [ StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]), StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False), StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]), StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]), ] IDXGIDevice.methods += [ StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]), StdMethod(HRESULT, "CreateSurface", [(Pointer(Const(DXGI_SURFACE_DESC)), "pDesc"), (UINT, "NumSurfaces"), (DXGI_USAGE, "Usage"), (Pointer(Const(DXGI_SHARED_RESOURCE)), "pSharedResource"), Out(Pointer(ObjPointer(IDXGISurface)), "ppSurface")]), StdMethod(HRESULT, "QueryResourceResidency", [(Array(Const(ObjPointer(IUnknown)), "NumResources"), "ppResources"), Out(Array(DXGI_RESIDENCY, "NumResources"), "pResidencyStatus"), (UINT, "NumResources")], sideeffects=False), StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]), StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False), ] DXGI_ADAPTER_FLAG = FakeEnum(UINT, [ "DXGI_ADAPTER_FLAG_NONE", "DXGI_ADAPTER_FLAG_REMOTE", "DXGI_ADAPTER_FLAG_SOFTWARE", ]) DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [ (WString, "Description"), (UINT, "VendorId"), (UINT, "DeviceId"), (UINT, "SubSysId"), (UINT, "Revision"), (SIZE_T, "DedicatedVideoMemory"), (SIZE_T, "DedicatedSystemMemory"), (SIZE_T, "SharedSystemMemory"), (LUID, "AdapterLuid"), (DXGI_SWAP_CHAIN_FLAG, "Flags"), ]) DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [ (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"), (Array(Array(FLOAT, 16), 2), "WhitePoints"), ]) IDXGIFactory1.methods += [ StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]), StdMethod(BOOL, "IsCurrent", []), ] IDXGIAdapter1.methods += [ StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False), ] IDXGIDevice1.methods += [ StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]), StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False), ] IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown) IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject) IDXGIFactoryDWM.methods += [ StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]), ] # http://shchetinin.blogspot.co.uk/2012/04/dwm-graphics-directx-win8win7.html IDXGISwapChainDWM.methods += [ StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]), StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]), StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]), StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]), StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False), StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False), ] dxgi = Module('dxgi') dxgi.addInterfaces([ IDXGIKeyedMutex, IDXGIFactory1, IDXGIFactoryDWM, IDXGIDevice1, IDXGIAdapter1, IDXGIResource, ]) dxgi.addFunctions([ StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]), StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]), ]) # # DXGI 1.2 # IDXGIDisplayControl = Interface("IDXGIDisplayControl", IUnknown) IDXGIDisplayControl.methods += [ StdMethod(BOOL, "IsStereoEnabled", [], sideeffects=False), StdMethod(Void, "SetStereoEnabled", [(BOOL, "enabled")]), ] DXGI_OUTDUPL_MOVE_RECT = Struct("DXGI_OUTDUPL_MOVE_RECT", [ (POINT, "SourcePoint"), (RECT, "DestinationRect"), ]) DXGI_OUTDUPL_DESC = Struct("DXGI_OUTDUPL_DESC", [ (DXGI_MODE_DESC, "ModeDesc"), (DXGI_MODE_ROTATION, "Rotation"), (BOOL, "DesktopImageInSystemMemory"), ]) DXGI_OUTDUPL_POINTER_POSITION = Struct("DXGI_OUTDUPL_POINTER_POSITION", [ (POINT, "Position"), (BOOL, "Visible"), ]) DXGI_OUTDUPL_POINTER_SHAPE_TYPE = Enum("DXGI_OUTDUPL_POINTER_SHAPE_TYPE", [ "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME", "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR", "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR", ]) DXGI_OUTDUPL_POINTER_SHAPE_INFO = Struct("DXGI_OUTDUPL_POINTER_SHAPE_INFO", [ (UINT, "Type"), (UINT, "Width"), (UINT, "Height"), (UINT, "Pitch"), (POINT, "HotSpot"), ]) DXGI_OUTDUPL_FRAME_INFO = Struct("DXGI_OUTDUPL_FRAME_INFO", [ (LARGE_INTEGER, "LastPresentTime"), (LARGE_INTEGER, "LastMouseUpdateTime"), (UINT, "AccumulatedFrames"), (BOOL, "RectsCoalesced"), (BOOL, "ProtectedContentMaskedOut"), (DXGI_OUTDUPL_POINTER_POSITION, "PointerPosition"), (UINT, "TotalMetadataBufferSize"), (UINT, "PointerShapeBufferSize"), ]) IDXGIOutputDuplication = Interface("IDXGIOutputDuplication", IDXGIObject) IDXGIOutputDuplication.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(DXGI_OUTDUPL_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "AcquireNextFrame", [(UINT, "TimeoutInMilliseconds"), Out(Pointer(DXGI_OUTDUPL_FRAME_INFO), "pFrameInfo"), Out(Pointer(ObjPointer(IDXGIResource)), "ppDesktopResource")]), StdMethod(HRESULT, "GetFrameDirtyRects", [(UINT, "DirtyRectsBufferSize"), Out(Array(RECT, "DirtyRectsBufferSize"), "pDirtyRectsBuffer"), Out(Pointer(UINT), "pDirtyRectsBufferSizeRequired")], sideeffects=False), StdMethod(HRESULT, "GetFrameMoveRects", [(UINT, "MoveRectsBufferSize"), Out(Array(DXGI_OUTDUPL_MOVE_RECT, "MoveRectsBufferSize"), "pMoveRectBuffer"), Out(Pointer(UINT), "pMoveRectsBufferSizeRequired")], sideeffects=False), StdMethod(HRESULT, "GetFramePointerShape", [(UINT, "PointerShapeBufferSize"), Out(OpaqueBlob(Void, "PointerShapeBufferSize"), "pPointerShapeBuffer"), Out(Pointer(UINT), "pPointerShapeBufferSizeRequired"), Out(Pointer(DXGI_OUTDUPL_POINTER_SHAPE_INFO), "pPointerShapeInfo")], sideeffects=False), StdMethod(HRESULT, "MapDesktopSurface", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect")], sideeffects=False), StdMethod(HRESULT, "UnMapDesktopSurface", [], sideeffects=False), StdMethod(HRESULT, "ReleaseFrame", []), ] DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [ "DXGI_ALPHA_MODE_UNSPECIFIED", "DXGI_ALPHA_MODE_PREMULTIPLIED", "DXGI_ALPHA_MODE_STRAIGHT", "DXGI_ALPHA_MODE_IGNORE", ]) IDXGISurface2 = Interface("IDXGISurface2", IDXGISurface1) IDXGISurface2.methods += [ StdMethod(HRESULT, "GetResource", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParentResource"), Out(Pointer(UINT), "pSubresourceIndex")]), ] DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [ "DXGI_SHARED_RESOURCE_READ", "DXGI_SHARED_RESOURCE_WRITE", ]) IDXGIResource1 = Interface("IDXGIResource1", IDXGIResource) IDXGIResource1.methods += [ StdMethod(HRESULT, "CreateSubresourceSurface", [(UINT, "index"), Out(Pointer(ObjPointer(IDXGISurface2)), "ppSurface")]), StdMethod(HRESULT, "CreateSharedHandle", [(Pointer(Const(SECURITY_ATTRIBUTES)), "pAttributes"), (DXGI_SHARED_RESOURCE_FLAG, "dwAccess"), (LPCWSTR, "lpName"), Out(Pointer(HANDLE), "pHandle")]), ] DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [ "DXGI_OFFER_RESOURCE_PRIORITY_LOW", "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL", "DXGI_OFFER_RESOURCE_PRIORITY_HIGH", ]) IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1) IDXGIDevice2.methods += [ StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]), StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]), StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")]), ] DXGI_MODE_DESC1 = Struct("DXGI_MODE_DESC1", [ (UINT, "Width"), (UINT, "Height"), (DXGI_RATIONAL, "RefreshRate"), (DXGI_FORMAT, "Format"), (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"), (DXGI_MODE_SCALING, "Scaling"), (BOOL, "Stereo"), ]) DXGI_SCALING = Enum("DXGI_SCALING", [ "DXGI_SCALING_STRETCH", "DXGI_SCALING_NONE", "DXGI_SCALING_ASPECT_RATIO_STRETCH", ]) DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [ (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "Format"), (BOOL, "Stereo"), (DXGI_SAMPLE_DESC, "SampleDesc"), (DXGI_USAGE, "BufferUsage"), (UINT, "BufferCount"), (DXGI_SCALING, "Scaling"), (DXGI_SWAP_EFFECT, "SwapEffect"), (DXGI_ALPHA_MODE, "AlphaMode"), (DXGI_SWAP_CHAIN_FLAG, "Flags"), ]) DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [ (DXGI_RATIONAL, "RefreshRate"), (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"), (DXGI_MODE_SCALING, "Scaling"), (BOOL, "Windowed"), ]) DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [ (UINT, "DirtyRectsCount"), (Array(RECT, "{self}.DirtyRectsCount"), "pDirtyRects"), (Pointer(RECT), "pScrollRect"), (Pointer(POINT), "pScrollOffset"), ]) IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain) IDXGISwapChain1.methods += [ StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))], sideeffects=False), StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))], sideeffects=False), StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))], sideeffects=False), StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]), StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]), StdMethod(BOOL, "IsTemporaryMonoSupported", [], sideeffects=False), StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]), StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]), StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))], sideeffects=False), StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]), StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "pRotation"))], sideeffects=False), ] IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1) IDXGIFactory2.methods += [ StdMethod(BOOL, "IsWindowedStereoEnabled", [], sideeffects=False), StdMethod(HRESULT, "CreateSwapChainForHwnd", [(ObjPointer(IUnknown), "pDevice"), (HWND, "WindowHandle"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (Pointer(Const(DXGI_SWAP_CHAIN_FULLSCREEN_DESC)), "pFullscreenDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]), StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]), StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")], sideeffects=False), StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False), StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False), StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")], sideeffects=False), StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False), StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False), StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")], sideeffects=False), StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]), ] DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [ "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY", "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY", "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY", "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY", "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY", ]) DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [ "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY", "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY", "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY", "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY", "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY", ]) DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [ (WString, "Description"), (UINT, "VendorId"), (UINT, "DeviceId"), (UINT, "SubSysId"), (UINT, "Revision"), (SIZE_T, "DedicatedVideoMemory"), (SIZE_T, "DedicatedSystemMemory"), (SIZE_T, "SharedSystemMemory"), (LUID, "AdapterLuid"), (DXGI_ADAPTER_FLAG, "Flags"), (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"), (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"), ]) IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1) IDXGIAdapter2.methods += [ StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False), ] IDXGIOutput1 = Interface("IDXGIOutput1", IDXGIOutput) IDXGIOutput1.methods += [ StdMethod(HRESULT, "GetDisplayModeList1", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC1, "*pNumModes"), "pDesc")], sideeffects=False), StdMethod(HRESULT, "FindClosestMatchingMode1", [(Pointer(Const(DXGI_MODE_DESC1)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC1), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")], sideeffects=False), StdMethod(HRESULT, "GetDisplaySurfaceData1", [(ObjPointer(IDXGIResource), "pDestination")]), StdMethod(HRESULT, "DuplicateOutput", [(ObjPointer(IUnknown), "pDevice"), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), "ppOutputDuplication")]), ] dxgi.addInterfaces([ IDXGIDisplayControl, IDXGIDevice2, IDXGISwapChain1, IDXGIFactory2, IDXGIResource1, IDXGIAdapter2, IDXGIOutput1, ]) # # DXGI 1.3 # DXGI_CREATE_FACTORY_FLAGS = Flags(UINT, [ "DXGI_CREATE_FACTORY_DEBUG", ]) dxgi.addFunctions([ StdFunction(HRESULT, "CreateDXGIFactory2", [(DXGI_CREATE_FACTORY_FLAGS, "Flags"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]), ]) IDXGIDevice3 = Interface("IDXGIDevice3", IDXGIDevice2) IDXGIDevice3.methods += [ StdMethod(Void, "Trim", []), ] DXGI_MATRIX_3X2_F = Struct("DXGI_MATRIX_3X2_F", [ (FLOAT, "_11"), (FLOAT, "_12"), (FLOAT, "_21"), (FLOAT, "_22"), (FLOAT, "_31"), (FLOAT, "_32"), ]) IDXGISwapChain2 = Interface("IDXGISwapChain2", IDXGISwapChain1) IDXGISwapChain2.methods += [ StdMethod(HRESULT, "SetSourceSize", [(UINT, "Width"), (UINT, "Height")]), StdMethod(HRESULT, "GetSourceSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False), StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]), StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False), StdMethod(HANDLE, "GetFrameLatencyWaitableObject", [], sideeffects=False), StdMethod(HRESULT, "SetMatrixTransform", [(Pointer(Const(DXGI_MATRIX_3X2_F)), "pMatrix")]), StdMethod(HRESULT, "GetMatrixTransform", [Out(Pointer(DXGI_MATRIX_3X2_F), "pMatrix")], sideeffects=False), ] IDXGIOutput2 = Interface("IDXGIOutput2", IDXGIOutput1) IDXGIOutput2.methods += [ StdMethod(BOOL, "SupportsOverlays", [], sideeffects=False), ] IDXGIFactory3 = Interface("IDXGIFactory3", IDXGIFactory2) IDXGIFactory3.methods += [ StdMethod(DXGI_CREATE_FACTORY_FLAGS, "GetCreationFlags", [], sideeffects=False), ] DXGI_DECODE_SWAP_CHAIN_DESC = Struct("DXGI_DECODE_SWAP_CHAIN_DESC", [ (UINT, "Flags"), ]) # XXX: Flags DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = Enum("DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", [ "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE", "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709", "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC", ]) IDXGIDecodeSwapChain = Interface("IDXGIDecodeSwapChain", IUnknown) IDXGIDecodeSwapChain.methods += [ StdMethod(HRESULT, "PresentBuffer", [(UINT, "BufferToPresent"), (UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]), StdMethod(HRESULT, "SetSourceRect", [(Pointer(Const(RECT)), "pRect")]), StdMethod(HRESULT, "SetTargetRect", [(Pointer(Const(RECT)), "pRect")]), StdMethod(HRESULT, "SetDestSize", [(UINT, "Width"), (UINT, "Height")]), StdMethod(HRESULT, "GetSourceRect", [Out(Pointer(RECT), "pRect")], sideeffects=False), StdMethod(HRESULT, "GetTargetRect", [Out(Pointer(RECT), "pRect")], sideeffects=False), StdMethod(HRESULT, "GetDestSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False), StdMethod(HRESULT, "SetColorSpace", [(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "ColorSpace")]), StdMethod(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "GetColorSpace", [], sideeffects=False), ] IDXGIFactoryMedia = Interface("IDXGIFactoryMedia", IUnknown) IDXGIFactoryMedia.methods += [ StdMethod(HRESULT, "CreateSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]), StdMethod(HRESULT, "CreateDecodeSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(DXGI_DECODE_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIResource), "pYuvDecodeBuffers"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGIDecodeSwapChain)), "ppSwapChain")]), ] DXGI_FRAME_PRESENTATION_MODE = Enum("DXGI_FRAME_PRESENTATION_MODE", [ "DXGI_FRAME_PRESENTATION_MODE_COMPOSED", "DXGI_FRAME_PRESENTATION_MODE_OVERLAY", "DXGI_FRAME_PRESENTATION_MODE_NONE", ]) DXGI_FRAME_STATISTICS_MEDIA = Struct("DXGI_FRAME_STATISTICS_MEDIA", [ (UINT, "PresentCount"), (UINT, "PresentRefreshCount"), (UINT, "SyncRefreshCount"), (LARGE_INTEGER, "SyncQPCTime"), (LARGE_INTEGER, "SyncGPUTime"), (DXGI_FRAME_PRESENTATION_MODE, "CompositionMode"), (UINT, "ApprovedPresentDuration"), ]) IDXGISwapChainMedia = Interface("IDXGISwapChainMedia", IUnknown) IDXGISwapChainMedia.methods += [ StdMethod(HRESULT, "GetFrameStatisticsMedia", [Out(Pointer(DXGI_FRAME_STATISTICS_MEDIA), "pStats")], sideeffects=False), StdMethod(HRESULT, "SetPresentDuration", [(UINT, "Duration")]), StdMethod(HRESULT, "CheckPresentDurationSupport", [(UINT, "DesiredPresentDuration"), Out(Pointer(UINT), "pClosestSmallerPresentDuration"), Out(Pointer(UINT), "pClosestLargerPresentDuration")], sideeffects=False), ] DXGI_OVERLAY_SUPPORT_FLAG = FakeEnum(UINT, [ "DXGI_OVERLAY_SUPPORT_FLAG_DIRECT", "DXGI_OVERLAY_SUPPORT_FLAG_SCALING", ]) IDXGIOutput3 = Interface("IDXGIOutput3", IDXGIOutput2) IDXGIOutput3.methods += [ StdMethod(HRESULT, "CheckOverlaySupport", [(DXGI_FORMAT, "EnumFormat"), (ObjPointer(IUnknown), "pConcernedDevice"), Out(Pointer(DXGI_OVERLAY_SUPPORT_FLAG), "pFlags")], sideeffects=False), ] dxgi.addInterfaces([ IDXGIDevice3, IDXGISwapChain2, IDXGISwapChainMedia, IDXGIOutput3, IDXGIFactory3, IDXGIFactoryMedia, ]) tmpNnpnZF/specs/d3dcommon.py0000664000175000017500000005736212543167424015353 0ustar chrischris########################################################################## # # Copyright 2012 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * D3D_DRIVER_TYPE = Enum('D3D_DRIVER_TYPE', [ 'D3D_DRIVER_TYPE_UNKNOWN', 'D3D_DRIVER_TYPE_HARDWARE', 'D3D_DRIVER_TYPE_REFERENCE', 'D3D_DRIVER_TYPE_NULL', 'D3D_DRIVER_TYPE_SOFTWARE', 'D3D_DRIVER_TYPE_WARP', ]) D3D_FEATURE_LEVEL = Enum('D3D_FEATURE_LEVEL', [ 'D3D_FEATURE_LEVEL_9_1', 'D3D_FEATURE_LEVEL_9_2', 'D3D_FEATURE_LEVEL_9_3', 'D3D_FEATURE_LEVEL_10_0', 'D3D_FEATURE_LEVEL_10_1', 'D3D_FEATURE_LEVEL_11_0', 'D3D_FEATURE_LEVEL_11_1', ]) D3D_PRIMITIVE_TOPOLOGY = Enum('D3D_PRIMITIVE_TOPOLOGY', [ 'D3D_PRIMITIVE_TOPOLOGY_UNDEFINED', 'D3D_PRIMITIVE_TOPOLOGY_POINTLIST', 'D3D_PRIMITIVE_TOPOLOGY_LINELIST', 'D3D_PRIMITIVE_TOPOLOGY_LINESTRIP', 'D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST', 'D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP', 'D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ', 'D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ', 'D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ', 'D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ', 'D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST', 'D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST', ]) D3D10_PRIMITIVE_TOPOLOGY = Enum('D3D10_PRIMITIVE_TOPOLOGY', [ 'D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED', 'D3D10_PRIMITIVE_TOPOLOGY_POINTLIST', 'D3D10_PRIMITIVE_TOPOLOGY_LINELIST', 'D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP', 'D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST', 'D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP', 'D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ', 'D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ', 'D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ', 'D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ', ]) D3D11_PRIMITIVE_TOPOLOGY = Enum('D3D11_PRIMITIVE_TOPOLOGY', [ 'D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED', 'D3D11_PRIMITIVE_TOPOLOGY_POINTLIST', 'D3D11_PRIMITIVE_TOPOLOGY_LINELIST', 'D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP', 'D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST', 'D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP', 'D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ', 'D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ', 'D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ', 'D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ', 'D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST', 'D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST', ]) D3D_PRIMITIVE = Enum('D3D_PRIMITIVE', [ 'D3D_PRIMITIVE_UNDEFINED', 'D3D_PRIMITIVE_POINT', 'D3D_PRIMITIVE_LINE', 'D3D_PRIMITIVE_TRIANGLE', 'D3D_PRIMITIVE_LINE_ADJ', 'D3D_PRIMITIVE_TRIANGLE_ADJ', 'D3D_PRIMITIVE_1_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_2_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_3_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_4_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_5_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_6_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_7_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_8_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_9_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_10_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_11_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_12_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_13_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_14_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_15_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_16_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_17_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_18_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_19_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_20_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_21_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_22_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_23_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_24_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_25_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_26_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_27_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_28_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_29_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_30_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_31_CONTROL_POINT_PATCH', 'D3D_PRIMITIVE_32_CONTROL_POINT_PATCH', ]) D3D10_PRIMITIVE = Enum('D3D10_PRIMITIVE', [ 'D3D10_PRIMITIVE_UNDEFINED', 'D3D10_PRIMITIVE_POINT', 'D3D10_PRIMITIVE_LINE', 'D3D10_PRIMITIVE_TRIANGLE', 'D3D10_PRIMITIVE_LINE_ADJ', 'D3D10_PRIMITIVE_TRIANGLE_ADJ', ]) D3D11_PRIMITIVE = Enum('D3D11_PRIMITIVE', [ 'D3D11_PRIMITIVE_UNDEFINED', 'D3D11_PRIMITIVE_POINT', 'D3D11_PRIMITIVE_LINE', 'D3D11_PRIMITIVE_TRIANGLE', 'D3D11_PRIMITIVE_LINE_ADJ', 'D3D11_PRIMITIVE_TRIANGLE_ADJ', 'D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH', 'D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH', ]) D3D_SRV_DIMENSION = Enum('D3D_SRV_DIMENSION', [ 'D3D_SRV_DIMENSION_UNKNOWN', 'D3D_SRV_DIMENSION_BUFFER', 'D3D_SRV_DIMENSION_TEXTURE1D', 'D3D_SRV_DIMENSION_TEXTURE1DARRAY', 'D3D_SRV_DIMENSION_TEXTURE2D', 'D3D_SRV_DIMENSION_TEXTURE2DARRAY', 'D3D_SRV_DIMENSION_TEXTURE2DMS', 'D3D_SRV_DIMENSION_TEXTURE2DMSARRAY', 'D3D_SRV_DIMENSION_TEXTURE3D', 'D3D_SRV_DIMENSION_TEXTURECUBE', 'D3D_SRV_DIMENSION_TEXTURECUBEARRAY', 'D3D_SRV_DIMENSION_BUFFEREX', ]) D3D10_SRV_DIMENSION = Enum('D3D10_SRV_DIMENSION', [ 'D3D10_SRV_DIMENSION_UNKNOWN', 'D3D10_SRV_DIMENSION_BUFFER', 'D3D10_SRV_DIMENSION_TEXTURE1D', 'D3D10_SRV_DIMENSION_TEXTURE1DARRAY', 'D3D10_SRV_DIMENSION_TEXTURE2D', 'D3D10_SRV_DIMENSION_TEXTURE2DARRAY', 'D3D10_SRV_DIMENSION_TEXTURE2DMS', 'D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY', 'D3D10_SRV_DIMENSION_TEXTURE3D', 'D3D10_SRV_DIMENSION_TEXTURECUBE', ]) D3D10_SRV_DIMENSION1 = Enum('D3D10_SRV_DIMENSION1', [ 'D3D10_1_SRV_DIMENSION_UNKNOWN', 'D3D10_1_SRV_DIMENSION_BUFFER', 'D3D10_1_SRV_DIMENSION_TEXTURE1D', 'D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY', 'D3D10_1_SRV_DIMENSION_TEXTURE2D', 'D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY', 'D3D10_1_SRV_DIMENSION_TEXTURE2DMS', 'D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY', 'D3D10_1_SRV_DIMENSION_TEXTURE3D', 'D3D10_1_SRV_DIMENSION_TEXTURECUBE', 'D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY', ]) D3D11_SRV_DIMENSION = Enum('D3D11_SRV_DIMENSION', [ 'D3D11_SRV_DIMENSION_UNKNOWN', 'D3D11_SRV_DIMENSION_BUFFER', 'D3D11_SRV_DIMENSION_TEXTURE1D', 'D3D11_SRV_DIMENSION_TEXTURE1DARRAY', 'D3D11_SRV_DIMENSION_TEXTURE2D', 'D3D11_SRV_DIMENSION_TEXTURE2DARRAY', 'D3D11_SRV_DIMENSION_TEXTURE2DMS', 'D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY', 'D3D11_SRV_DIMENSION_TEXTURE3D', 'D3D11_SRV_DIMENSION_TEXTURECUBE', 'D3D11_SRV_DIMENSION_TEXTURECUBEARRAY', 'D3D11_SRV_DIMENSION_BUFFEREX', ]) D3D10_SHADER_MACRO = Struct('D3D10_SHADER_MACRO', [ (LPCSTR, 'Name'), (LPCSTR, 'Definition'), ]) ID3D10Blob = Interface('ID3D10Blob', IUnknown) ID3D10Blob.methods += [ StdMethod(LPVOID, 'GetBufferPointer', [], sideeffects=False), StdMethod(SIZE_T, 'GetBufferSize', [], sideeffects=False), ] LPD3D10BLOB = ObjPointer(ID3D10Blob) D3D_INCLUDE_TYPE = Enum('D3D_INCLUDE_TYPE', [ 'D3D_INCLUDE_LOCAL', 'D3D_INCLUDE_SYSTEM', ]) D3D10_INCLUDE_TYPE = Enum('D3D10_INCLUDE_TYPE', [ 'D3D10_INCLUDE_LOCAL', 'D3D10_INCLUDE_SYSTEM', ]) ID3D10Include = Interface("ID3D10Include", IUnknown) ID3D10Include.methods += [ StdMethod(HRESULT, "Open", [(D3D10_INCLUDE_TYPE, "IncludeType"), (LPCSTR, "pFileName"), (LPCVOID, "pParentData"), Out(Pointer(LPCVOID), "ppData"), Out(Pointer(UINT), "pBytes")]), StdMethod(HRESULT, "Close", [(LPCVOID, "pData")]), ] # It is implemented by applications, not D3D runtime, so treat as opaque for # now. LPD3D10INCLUDE = OpaquePointer(ID3D10Include) D3D_SHADER_VARIABLE_CLASS = Enum('D3D_SHADER_VARIABLE_CLASS', [ 'D3D_SVC_SCALAR', 'D3D_SVC_VECTOR', 'D3D_SVC_MATRIX_ROWS', 'D3D_SVC_MATRIX_COLUMNS', 'D3D_SVC_OBJECT', 'D3D_SVC_STRUCT', 'D3D_SVC_INTERFACE_CLASS', 'D3D_SVC_INTERFACE_POINTER', ]) D3D10_SHADER_VARIABLE_CLASS = Enum('D3D_SHADER_VARIABLE_CLASS', [ 'D3D10_SVC_SCALAR', 'D3D10_SVC_VECTOR', 'D3D10_SVC_MATRIX_ROWS', 'D3D10_SVC_MATRIX_COLUMNS', 'D3D10_SVC_OBJECT', 'D3D10_SVC_STRUCT', ]) D3D11_SHADER_VARIABLE_CLASS = Enum('D3D_SHADER_VARIABLE_CLASS', [ 'D3D11_SVC_INTERFACE_CLASS', 'D3D11_SVC_INTERFACE_POINTER', ]) D3D10_SHADER_VARIABLE_FLAGS = Enum('D3D10_SHADER_VARIABLE_FLAGS', [ 'D3D_SVF_USERPACKED', 'D3D_SVF_USED', 'D3D_SVF_INTERFACE_POINTER', 'D3D_SVF_INTERFACE_PARAMETER', ]) D3D11_SHADER_VARIABLE_FLAGS = Enum('D3D11_SHADER_VARIABLE_FLAGS', [ 'D3D10_SVF_USERPACKED', 'D3D10_SVF_USED', 'D3D11_SVF_INTERFACE_POINTER', 'D3D11_SVF_INTERFACE_PARAMETER', ]) D3D_SHADER_VARIABLE_TYPE = Enum('D3D_SHADER_VARIABLE_TYPE', [ 'D3D_SVT_VOID', 'D3D_SVT_BOOL', 'D3D_SVT_INT', 'D3D_SVT_FLOAT', 'D3D_SVT_STRING', 'D3D_SVT_TEXTURE', 'D3D_SVT_TEXTURE1D', 'D3D_SVT_TEXTURE2D', 'D3D_SVT_TEXTURE3D', 'D3D_SVT_TEXTURECUBE', 'D3D_SVT_SAMPLER', 'D3D_SVT_SAMPLER1D', 'D3D_SVT_SAMPLER2D', 'D3D_SVT_SAMPLER3D', 'D3D_SVT_SAMPLERCUBE', 'D3D_SVT_PIXELSHADER', 'D3D_SVT_VERTEXSHADER', 'D3D_SVT_PIXELFRAGMENT', 'D3D_SVT_VERTEXFRAGMENT', 'D3D_SVT_UINT', 'D3D_SVT_UINT8', 'D3D_SVT_GEOMETRYSHADER', 'D3D_SVT_RASTERIZER', 'D3D_SVT_DEPTHSTENCIL', 'D3D_SVT_BLEND', 'D3D_SVT_BUFFER', 'D3D_SVT_CBUFFER', 'D3D_SVT_TBUFFER', 'D3D_SVT_TEXTURE1DARRAY', 'D3D_SVT_TEXTURE2DARRAY', 'D3D_SVT_RENDERTARGETVIEW', 'D3D_SVT_DEPTHSTENCILVIEW', 'D3D_SVT_TEXTURE2DMS', 'D3D_SVT_TEXTURE2DMSARRAY', 'D3D_SVT_TEXTURECUBEARRAY', 'D3D_SVT_HULLSHADER', 'D3D_SVT_DOMAINSHADER', 'D3D_SVT_INTERFACE_POINTER', 'D3D_SVT_COMPUTESHADER', 'D3D_SVT_DOUBLE', 'D3D_SVT_RWTEXTURE1D', 'D3D_SVT_RWTEXTURE1DARRAY', 'D3D_SVT_RWTEXTURE2D', 'D3D_SVT_RWTEXTURE2DARRAY', 'D3D_SVT_RWTEXTURE3D', 'D3D_SVT_RWBUFFER', 'D3D_SVT_BYTEADDRESS_BUFFER', 'D3D_SVT_RWBYTEADDRESS_BUFFER', 'D3D_SVT_STRUCTURED_BUFFER', 'D3D_SVT_RWSTRUCTURED_BUFFER', 'D3D_SVT_APPEND_STRUCTURED_BUFFER', 'D3D_SVT_CONSUME_STRUCTURED_BUFFER', ]) D3D10_SHADER_VARIABLE_TYPE = Enum('D3D10_SHADER_VARIABLE_TYPE', [ 'D3D10_SVT_VOID', 'D3D10_SVT_BOOL', 'D3D10_SVT_INT', 'D3D10_SVT_FLOAT', 'D3D10_SVT_STRING', 'D3D10_SVT_TEXTURE', 'D3D10_SVT_TEXTURE1D', 'D3D10_SVT_TEXTURE2D', 'D3D10_SVT_TEXTURE3D', 'D3D10_SVT_TEXTURECUBE', 'D3D10_SVT_SAMPLER', 'D3D10_SVT_SAMPLER1D', 'D3D10_SVT_SAMPLER2D', 'D3D10_SVT_SAMPLER3D', 'D3D10_SVT_SAMPLERCUBE', 'D3D10_SVT_PIXELSHADER', 'D3D10_SVT_VERTEXSHADER', 'D3D10_SVT_PIXELFRAGMENT', 'D3D10_SVT_VERTEXFRAGMENT', 'D3D10_SVT_UINT', 'D3D10_SVT_UINT8', 'D3D10_SVT_GEOMETRYSHADER', 'D3D10_SVT_RASTERIZER', 'D3D10_SVT_DEPTHSTENCIL', 'D3D10_SVT_BLEND', 'D3D10_SVT_BUFFER', 'D3D10_SVT_CBUFFER', 'D3D10_SVT_TBUFFER', 'D3D10_SVT_TEXTURE1DARRAY', 'D3D10_SVT_TEXTURE2DARRAY', 'D3D10_SVT_RENDERTARGETVIEW', 'D3D10_SVT_DEPTHSTENCILVIEW', 'D3D10_SVT_TEXTURE2DMS', 'D3D10_SVT_TEXTURE2DMSARRAY', 'D3D10_SVT_TEXTURECUBEARRAY', ]) D3D11_SHADER_VARIABLE_TYPE = Enum('D3D11_SHADER_VARIABLE_TYPE', [ 'D3D11_SVT_HULLSHADER', 'D3D11_SVT_DOMAINSHADER', 'D3D11_SVT_INTERFACE_POINTER', 'D3D11_SVT_COMPUTESHADER', 'D3D11_SVT_DOUBLE', 'D3D11_SVT_RWTEXTURE1D', 'D3D11_SVT_RWTEXTURE1DARRAY', 'D3D11_SVT_RWTEXTURE2D', 'D3D11_SVT_RWTEXTURE2DARRAY', 'D3D11_SVT_RWTEXTURE3D', 'D3D11_SVT_RWBUFFER', 'D3D11_SVT_BYTEADDRESS_BUFFER', 'D3D11_SVT_RWBYTEADDRESS_BUFFER', 'D3D11_SVT_STRUCTURED_BUFFER', 'D3D11_SVT_RWSTRUCTURED_BUFFER', 'D3D11_SVT_APPEND_STRUCTURED_BUFFER', 'D3D11_SVT_CONSUME_STRUCTURED_BUFFER', ]) D3D_SHADER_INPUT_FLAGS = Enum('D3D_SHADER_INPUT_FLAGS', [ 'D3D_SIF_USERPACKED', 'D3D_SIF_COMPARISON_SAMPLER', 'D3D_SIF_TEXTURE_COMPONENT_0', 'D3D_SIF_TEXTURE_COMPONENT_1', 'D3D_SIF_TEXTURE_COMPONENTS', ]) D3D10_SHADER_INPUT_FLAGS = Enum('D3D10_SHADER_INPUT_FLAGS', [ 'D3D10_SIF_USERPACKED', 'D3D10_SIF_COMPARISON_SAMPLER', 'D3D10_SIF_TEXTURE_COMPONENT_0', 'D3D10_SIF_TEXTURE_COMPONENT_1', 'D3D10_SIF_TEXTURE_COMPONENTS', ]) D3D_SHADER_INPUT_TYPE = Enum('D3D_SHADER_INPUT_TYPE', [ 'D3D_SIT_CBUFFER', 'D3D_SIT_TBUFFER', 'D3D_SIT_TEXTURE', 'D3D_SIT_SAMPLER', 'D3D_SIT_UAV_RWTYPED', 'D3D_SIT_STRUCTURED', 'D3D_SIT_UAV_RWSTRUCTURED', 'D3D_SIT_BYTEADDRESS', 'D3D_SIT_UAV_RWBYTEADDRESS', 'D3D_SIT_UAV_APPEND_STRUCTURED', 'D3D_SIT_UAV_CONSUME_STRUCTURED', 'D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER', ]) D3D10_SHADER_INPUT_TYPE = Enum('D3D10_SHADER_INPUT_TYPE', [ 'D3D10_SIT_CBUFFER', 'D3D10_SIT_TBUFFER', 'D3D10_SIT_TEXTURE', 'D3D10_SIT_SAMPLER', ]) D3D11_SHADER_INPUT_TYPE = Enum('D3D11_SHADER_INPUT_TYPE', [ 'D3D11_SIT_UAV_RWTYPED', 'D3D11_SIT_STRUCTURED', 'D3D11_SIT_UAV_RWSTRUCTURED', 'D3D11_SIT_BYTEADDRESS', 'D3D11_SIT_UAV_RWBYTEADDRESS', 'D3D11_SIT_UAV_APPEND_STRUCTURED', 'D3D11_SIT_UAV_CONSUME_STRUCTURED', 'D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER', ]) D3D_SHADER_CBUFFER_FLAGS = Enum('D3D_SHADER_CBUFFER_FLAGS', [ 'D3D_CBF_USERPACKED', ]) D3D10_SHADER_CBUFFER_FLAGS = Enum('D3D10_SHADER_CBUFFER_FLAGS', [ 'D3D10_CBF_USERPACKED', ]) D3D_CBUFFER_TYPE = Enum('D3D_CBUFFER_TYPE', [ 'D3D_CT_CBUFFER', 'D3D_CT_TBUFFER', 'D3D_CT_INTERFACE_POINTERS', 'D3D_CT_RESOURCE_BIND_INFO', ]) D3D10_CBUFFER_TYPE = Enum('D3D10_CBUFFER_TYPE', [ 'D3D10_CT_CBUFFER', 'D3D10_CT_TBUFFER', ]) D3D11_CBUFFER_TYPE = Enum('D3D11_CBUFFER_TYPE', [ 'D3D11_CT_CBUFFER', 'D3D11_CT_TBUFFER', 'D3D11_CT_INTERFACE_POINTERS', 'D3D11_CT_RESOURCE_BIND_INFO', ]) D3D_NAME = Enum('D3D_NAME', [ 'D3D_NAME_UNDEFINED', 'D3D_NAME_POSITION', 'D3D_NAME_CLIP_DISTANCE', 'D3D_NAME_CULL_DISTANCE', 'D3D_NAME_RENDER_TARGET_ARRAY_INDEX', 'D3D_NAME_VIEWPORT_ARRAY_INDEX', 'D3D_NAME_VERTEX_ID', 'D3D_NAME_PRIMITIVE_ID', 'D3D_NAME_INSTANCE_ID', 'D3D_NAME_IS_FRONT_FACE', 'D3D_NAME_SAMPLE_INDEX', 'D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR', 'D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR', 'D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR', 'D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR', 'D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR', 'D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR', 'D3D_NAME_TARGET', 'D3D_NAME_DEPTH', 'D3D_NAME_COVERAGE', 'D3D_NAME_DEPTH_GREATER_EQUAL', 'D3D_NAME_DEPTH_LESS_EQUAL', ]) D3D10_NAME = Enum('D3D10_NAME', [ 'D3D10_NAME_UNDEFINED', 'D3D10_NAME_POSITION', 'D3D10_NAME_CLIP_DISTANCE', 'D3D10_NAME_CULL_DISTANCE', 'D3D10_NAME_RENDER_TARGET_ARRAY_INDEX', 'D3D10_NAME_VIEWPORT_ARRAY_INDEX', 'D3D10_NAME_VERTEX_ID', 'D3D10_NAME_PRIMITIVE_ID', 'D3D10_NAME_INSTANCE_ID', 'D3D10_NAME_IS_FRONT_FACE', 'D3D10_NAME_SAMPLE_INDEX', 'D3D10_NAME_TARGET', 'D3D10_NAME_DEPTH', 'D3D10_NAME_COVERAGE', ]) D3D11_NAME = Enum('D3D11_NAME', [ 'D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR', 'D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR', 'D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR', 'D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR', 'D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR', 'D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR', 'D3D11_NAME_DEPTH_GREATER_EQUAL', 'D3D11_NAME_DEPTH_LESS_EQUAL', ]) D3D_RESOURCE_RETURN_TYPE = Enum('D3D_RESOURCE_RETURN_TYPE', [ 'D3D_RETURN_TYPE_UNORM', 'D3D_RETURN_TYPE_SNORM', 'D3D_RETURN_TYPE_SINT', 'D3D_RETURN_TYPE_UINT', 'D3D_RETURN_TYPE_FLOAT', 'D3D_RETURN_TYPE_MIXED', 'D3D_RETURN_TYPE_DOUBLE', 'D3D_RETURN_TYPE_CONTINUED', ]) D3D10_RESOURCE_RETURN_TYPE = Enum('D3D10_RESOURCE_RETURN_TYPE', [ 'D3D10_RETURN_TYPE_UNORM', 'D3D10_RETURN_TYPE_SNORM', 'D3D10_RETURN_TYPE_SINT', 'D3D10_RETURN_TYPE_UINT', 'D3D10_RETURN_TYPE_FLOAT', 'D3D10_RETURN_TYPE_MIXED', ]) D3D11_RESOURCE_RETURN_TYPE = Enum('D3D11_RESOURCE_RETURN_TYPE', [ 'D3D11_RETURN_TYPE_UNORM', 'D3D11_RETURN_TYPE_SNORM', 'D3D11_RETURN_TYPE_SINT', 'D3D11_RETURN_TYPE_UINT', 'D3D11_RETURN_TYPE_FLOAT', 'D3D11_RETURN_TYPE_MIXED', 'D3D11_RETURN_TYPE_DOUBLE', 'D3D11_RETURN_TYPE_CONTINUED', ]) D3D_REGISTER_COMPONENT_TYPE = Enum('D3D_REGISTER_COMPONENT_TYPE', [ 'D3D_REGISTER_COMPONENT_UNKNOWN', 'D3D_REGISTER_COMPONENT_UINT32', 'D3D_REGISTER_COMPONENT_SINT32', 'D3D_REGISTER_COMPONENT_FLOAT32', ]) D3D10_REGISTER_COMPONENT_TYPE = Enum('D3D10_REGISTER_COMPONENT_TYPE', [ 'D3D10_REGISTER_COMPONENT_UNKNOWN', 'D3D10_REGISTER_COMPONENT_UINT32', 'D3D10_REGISTER_COMPONENT_SINT32', 'D3D10_REGISTER_COMPONENT_FLOAT32', ]) D3D_TESSELLATOR_DOMAIN = Enum('D3D_TESSELLATOR_DOMAIN', [ 'D3D_TESSELLATOR_DOMAIN_UNDEFINED', 'D3D_TESSELLATOR_DOMAIN_ISOLINE', 'D3D_TESSELLATOR_DOMAIN_TRI', 'D3D_TESSELLATOR_DOMAIN_QUAD', ]) D3D11_TESSELLATOR_DOMAIN = Enum('D3D11_TESSELLATOR_DOMAIN', [ 'D3D11_TESSELLATOR_DOMAIN_UNDEFINED', 'D3D11_TESSELLATOR_DOMAIN_ISOLINE', 'D3D11_TESSELLATOR_DOMAIN_TRI', 'D3D11_TESSELLATOR_DOMAIN_QUAD', ]) D3D_TESSELLATOR_PARTITIONING = Enum('D3D_TESSELLATOR_PARTITIONING', [ 'D3D_TESSELLATOR_PARTITIONING_UNDEFINED', 'D3D_TESSELLATOR_PARTITIONING_INTEGER', 'D3D_TESSELLATOR_PARTITIONING_POW2', 'D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD', 'D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN', ]) D3D11_TESSELLATOR_PARTITIONING = Enum('D3D11_TESSELLATOR_PARTITIONING', [ 'D3D11_TESSELLATOR_PARTITIONING_UNDEFINED', 'D3D11_TESSELLATOR_PARTITIONING_INTEGER', 'D3D11_TESSELLATOR_PARTITIONING_POW2', 'D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD', 'D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN', ]) D3D_TESSELLATOR_OUTPUT_PRIMITIVE = Enum('D3D_TESSELLATOR_OUTPUT_PRIMITIVE', [ 'D3D_TESSELLATOR_OUTPUT_UNDEFINED', 'D3D_TESSELLATOR_OUTPUT_POINT', 'D3D_TESSELLATOR_OUTPUT_LINE', 'D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW', 'D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW', ]) D3D11_TESSELLATOR_OUTPUT_PRIMITIVE = Enum('D3D11_TESSELLATOR_OUTPUT_PRIMITIVE', [ 'D3D11_TESSELLATOR_OUTPUT_UNDEFINED', 'D3D11_TESSELLATOR_OUTPUT_POINT', 'D3D11_TESSELLATOR_OUTPUT_LINE', 'D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW', 'D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW', ]) tmpNnpnZF/specs/__init__.py0000664000175000017500000000245112543167424015214 0ustar chrischris########################################################################## # # Copyright 2012 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Package with the specs for all supported APIs.''' tmpNnpnZF/specs/d3d8caps.py0000664000175000017500000002274712543167424015100 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d8caps.h""" from winapi import * from d3d8types import * D3DCAPS = Flags(DWORD, [ "D3DCAPS_READ_SCANLINE", ]) D3DCAPS2 = Flags(DWORD, [ "D3DCAPS2_NO2DDURING3DSCENE", "D3DCAPS2_FULLSCREENGAMMA", "D3DCAPS2_CANRENDERWINDOWED", "D3DCAPS2_CANCALIBRATEGAMMA", "D3DCAPS2_RESERVED", "D3DCAPS2_CANMANAGERESOURCE", "D3DCAPS2_DYNAMICTEXTURES", ]) D3DCAPS3 = Flags(DWORD, [ "D3DCAPS3_RESERVED", "D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD", ]) D3DCURSORCAPS = Flags(DWORD, [ "D3DCURSORCAPS_COLOR", "D3DCURSORCAPS_LOWRES", ]) D3DDEVCAPS = Flags(DWORD, [ "D3DDEVCAPS_EXECUTESYSTEMMEMORY", "D3DDEVCAPS_EXECUTEVIDEOMEMORY", "D3DDEVCAPS_TLVERTEXSYSTEMMEMORY", "D3DDEVCAPS_TLVERTEXVIDEOMEMORY", "D3DDEVCAPS_TEXTURESYSTEMMEMORY", "D3DDEVCAPS_TEXTUREVIDEOMEMORY", "D3DDEVCAPS_DRAWPRIMTLVERTEX", "D3DDEVCAPS_CANRENDERAFTERFLIP", "D3DDEVCAPS_TEXTURENONLOCALVIDMEM", "D3DDEVCAPS_DRAWPRIMITIVES2", "D3DDEVCAPS_SEPARATETEXTUREMEMORIES", "D3DDEVCAPS_DRAWPRIMITIVES2EX", "D3DDEVCAPS_HWTRANSFORMANDLIGHT", "D3DDEVCAPS_CANBLTSYSTONONLOCAL", "D3DDEVCAPS_HWRASTERIZATION", "D3DDEVCAPS_PUREDEVICE", "D3DDEVCAPS_QUINTICRTPATCHES", "D3DDEVCAPS_RTPATCHES", "D3DDEVCAPS_RTPATCHHANDLEZERO", "D3DDEVCAPS_NPATCHES", ]) D3DPMISCCAPS = Flags(DWORD, [ "D3DPMISCCAPS_MASKZ", "D3DPMISCCAPS_LINEPATTERNREP", "D3DPMISCCAPS_CULLNONE", "D3DPMISCCAPS_CULLCW", "D3DPMISCCAPS_CULLCCW", "D3DPMISCCAPS_COLORWRITEENABLE", "D3DPMISCCAPS_CLIPPLANESCALEDPOINTS", "D3DPMISCCAPS_CLIPTLVERTS", "D3DPMISCCAPS_TSSARGTEMP", "D3DPMISCCAPS_BLENDOP", "D3DPMISCCAPS_NULLREFERENCE", ]) D3DLINECAPS = Flags(DWORD, [ "D3DLINECAPS_TEXTURE", "D3DLINECAPS_ZTEST", "D3DLINECAPS_BLEND", "D3DLINECAPS_ALPHACMP", "D3DLINECAPS_FOG", ]) D3DPRASTERCAPS = Flags(DWORD, [ "D3DPRASTERCAPS_DITHER", "D3DPRASTERCAPS_PAT", "D3DPRASTERCAPS_ZTEST", "D3DPRASTERCAPS_FOGVERTEX", "D3DPRASTERCAPS_FOGTABLE", "D3DPRASTERCAPS_ANTIALIASEDGES", "D3DPRASTERCAPS_MIPMAPLODBIAS", "D3DPRASTERCAPS_ZBIAS", "D3DPRASTERCAPS_ZBUFFERLESSHSR", "D3DPRASTERCAPS_FOGRANGE", "D3DPRASTERCAPS_ANISOTROPY", "D3DPRASTERCAPS_WBUFFER", "D3DPRASTERCAPS_WFOG", "D3DPRASTERCAPS_ZFOG", "D3DPRASTERCAPS_COLORPERSPECTIVE", "D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE", ]) D3DPCMPCAPS = Flags(DWORD, [ "D3DPCMPCAPS_NEVER", "D3DPCMPCAPS_LESS", "D3DPCMPCAPS_EQUAL", "D3DPCMPCAPS_LESSEQUAL", "D3DPCMPCAPS_GREATER", "D3DPCMPCAPS_NOTEQUAL", "D3DPCMPCAPS_GREATEREQUAL", "D3DPCMPCAPS_ALWAYS", ]) D3DPBLENDCAPS = Flags(DWORD, [ "D3DPBLENDCAPS_ZERO", "D3DPBLENDCAPS_ONE", "D3DPBLENDCAPS_SRCCOLOR", "D3DPBLENDCAPS_INVSRCCOLOR", "D3DPBLENDCAPS_SRCALPHA", "D3DPBLENDCAPS_INVSRCALPHA", "D3DPBLENDCAPS_DESTALPHA", "D3DPBLENDCAPS_INVDESTALPHA", "D3DPBLENDCAPS_DESTCOLOR", "D3DPBLENDCAPS_INVDESTCOLOR", "D3DPBLENDCAPS_SRCALPHASAT", "D3DPBLENDCAPS_BOTHSRCALPHA", "D3DPBLENDCAPS_BOTHINVSRCALPHA", ]) D3DPSHADECAPS = Flags(DWORD, [ "D3DPSHADECAPS_COLORGOURAUDRGB", "D3DPSHADECAPS_SPECULARGOURAUDRGB", "D3DPSHADECAPS_ALPHAGOURAUDBLEND", "D3DPSHADECAPS_FOGGOURAUD", ]) D3DPTEXTURECAPS = Flags(DWORD, [ "D3DPTEXTURECAPS_PERSPECTIVE", "D3DPTEXTURECAPS_POW2", "D3DPTEXTURECAPS_ALPHA", "D3DPTEXTURECAPS_SQUAREONLY", "D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE", "D3DPTEXTURECAPS_ALPHAPALETTE", "D3DPTEXTURECAPS_NONPOW2CONDITIONAL", "D3DPTEXTURECAPS_PROJECTED", "D3DPTEXTURECAPS_CUBEMAP", "D3DPTEXTURECAPS_VOLUMEMAP", "D3DPTEXTURECAPS_MIPMAP", "D3DPTEXTURECAPS_MIPVOLUMEMAP", "D3DPTEXTURECAPS_MIPCUBEMAP", "D3DPTEXTURECAPS_CUBEMAP_POW2", "D3DPTEXTURECAPS_VOLUMEMAP_POW2", ]) D3DPTFILTERCAPS = Flags(DWORD, [ "D3DPTFILTERCAPS_MINFPOINT", "D3DPTFILTERCAPS_MINFLINEAR", "D3DPTFILTERCAPS_MINFANISOTROPIC", "D3DPTFILTERCAPS_MIPFPOINT", "D3DPTFILTERCAPS_MIPFLINEAR", "D3DPTFILTERCAPS_MAGFPOINT", "D3DPTFILTERCAPS_MAGFLINEAR", "D3DPTFILTERCAPS_MAGFANISOTROPIC", "D3DPTFILTERCAPS_MAGFAFLATCUBIC", "D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC", ]) D3DPTADDRESSCAPS = Flags(DWORD, [ "D3DPTADDRESSCAPS_WRAP", "D3DPTADDRESSCAPS_MIRROR", "D3DPTADDRESSCAPS_CLAMP", "D3DPTADDRESSCAPS_BORDER", "D3DPTADDRESSCAPS_INDEPENDENTUV", "D3DPTADDRESSCAPS_MIRRORONCE", ]) D3DSTENCILCAPS = Flags(DWORD, [ "D3DSTENCILCAPS_KEEP", "D3DSTENCILCAPS_ZERO", "D3DSTENCILCAPS_REPLACE", "D3DSTENCILCAPS_INCRSAT", "D3DSTENCILCAPS_DECRSAT", "D3DSTENCILCAPS_INVERT", "D3DSTENCILCAPS_INCR", "D3DSTENCILCAPS_DECR", ]) D3DTEXOPCAPS = Flags(DWORD, [ "D3DTEXOPCAPS_DISABLE", "D3DTEXOPCAPS_SELECTARG1", "D3DTEXOPCAPS_SELECTARG2", "D3DTEXOPCAPS_MODULATE", "D3DTEXOPCAPS_MODULATE2X", "D3DTEXOPCAPS_MODULATE4X", "D3DTEXOPCAPS_ADD", "D3DTEXOPCAPS_ADDSIGNED", "D3DTEXOPCAPS_ADDSIGNED2X", "D3DTEXOPCAPS_SUBTRACT", "D3DTEXOPCAPS_ADDSMOOTH", "D3DTEXOPCAPS_BLENDDIFFUSEALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHA", "D3DTEXOPCAPS_BLENDFACTORALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHAPM", "D3DTEXOPCAPS_BLENDCURRENTALPHA", "D3DTEXOPCAPS_PREMODULATE", "D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA", "D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA", "D3DTEXOPCAPS_BUMPENVMAP", "D3DTEXOPCAPS_BUMPENVMAPLUMINANCE", "D3DTEXOPCAPS_DOTPRODUCT3", "D3DTEXOPCAPS_MULTIPLYADD", "D3DTEXOPCAPS_LERP", ]) D3DFVFCAPS = Flags(DWORD, [ "D3DFVFCAPS_TEXCOORDCOUNTMASK", "D3DFVFCAPS_DONOTSTRIPELEMENTS", "D3DFVFCAPS_PSIZE", ]) D3DVTXPCAPS = Flags(DWORD, [ "D3DVTXPCAPS_TEXGEN", "D3DVTXPCAPS_MATERIALSOURCE7", "D3DVTXPCAPS_DIRECTIONALLIGHTS", "D3DVTXPCAPS_POSITIONALLIGHTS", "D3DVTXPCAPS_LOCALVIEWER", "D3DVTXPCAPS_TWEENING", "D3DVTXPCAPS_NO_VSDT_UBYTE4", ]) #D3DPS_VERSION = Enum("DWORD", [ # "D3DPS_VERSION(0,0)", # "D3DPS_VERSION(1,0)", # "D3DPS_VERSION(1,1)", # "D3DPS_VERSION(1,2)", # "D3DPS_VERSION(1,3)", # "D3DPS_VERSION(1,4)", # "D3DPS_VERSION(2,0)", # "D3DPS_VERSION(3,0)", #]) D3DPS_VERSION = DWORD #D3DVS_VERSION = Enum("DWORD", [ # "D3DVS_VERSION(0,0)", # "D3DVS_VERSION(1,0)", # "D3DVS_VERSION(1,1)", # "D3DVS_VERSION(2,0)", # "D3DVS_VERSION(3,0)", #]) D3DVS_VERSION = DWORD D3DCAPS8 = Struct("D3DCAPS8", [ (D3DDEVTYPE, "DeviceType"), (UINT, "AdapterOrdinal"), (D3DCAPS, "Caps"), (D3DCAPS2, "Caps2"), (D3DCAPS3, "Caps3"), (D3DPRESENT_INTERVAL, "PresentationIntervals"), (D3DCURSORCAPS, "CursorCaps"), (D3DDEVCAPS, "DevCaps"), (D3DPMISCCAPS, "PrimitiveMiscCaps"), (D3DPRASTERCAPS, "RasterCaps"), (D3DPCMPCAPS, "ZCmpCaps"), (D3DPBLENDCAPS, "SrcBlendCaps"), (D3DPBLENDCAPS, "DestBlendCaps"), (D3DPCMPCAPS, "AlphaCmpCaps"), (D3DPSHADECAPS, "ShadeCaps"), (D3DPTEXTURECAPS, "TextureCaps"), (D3DPTFILTERCAPS, "TextureFilterCaps"), (D3DPTFILTERCAPS, "CubeTextureFilterCaps"), (D3DPTFILTERCAPS, "VolumeTextureFilterCaps"), (D3DPTADDRESSCAPS, "TextureAddressCaps"), (D3DPTADDRESSCAPS, "VolumeTextureAddressCaps"), (D3DLINECAPS, "LineCaps"), (DWORD, "MaxTextureWidth"), (DWORD, "MaxTextureHeight"), (DWORD, "MaxVolumeExtent"), (DWORD, "MaxTextureRepeat"), (DWORD, "MaxTextureAspectRatio"), (DWORD, "MaxAnisotropy"), (Float, "MaxVertexW"), (Float, "GuardBandLeft"), (Float, "GuardBandTop"), (Float, "GuardBandRight"), (Float, "GuardBandBottom"), (Float, "ExtentsAdjust"), (D3DSTENCILCAPS, "StencilCaps"), (D3DFVFCAPS, "FVFCaps"), (D3DTEXOPCAPS, "TextureOpCaps"), (DWORD, "MaxTextureBlendStages"), (DWORD, "MaxSimultaneousTextures"), (D3DVTXPCAPS, "VertexProcessingCaps"), (DWORD, "MaxActiveLights"), (DWORD, "MaxUserClipPlanes"), (DWORD, "MaxVertexBlendMatrices"), (DWORD, "MaxVertexBlendMatrixIndex"), (Float, "MaxPointSize"), (DWORD, "MaxPrimitiveCount"), (DWORD, "MaxVertexIndex"), (DWORD, "MaxStreams"), (DWORD, "MaxStreamStride"), (D3DVS_VERSION, "VertexShaderVersion"), (DWORD, "MaxVertexShaderConst"), (D3DPS_VERSION, "PixelShaderVersion"), (Float, "MaxPixelShaderValue"), ]) tmpNnpnZF/specs/d2derr.py0000664000175000017500000000453312543167424014642 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * HRESULT = Enum("HRESULT", [ "D2DERR_UNSUPPORTED_PIXEL_FORMAT", "D2DERR_INSUFFICIENT_BUFFER", "D2DERR_WRONG_STATE", "D2DERR_NOT_INITIALIZED", "D2DERR_UNSUPPORTED_OPERATION", "D2DERR_SCANNER_FAILED", "D2DERR_SCREEN_ACCESS_DENIED", "D2DERR_DISPLAY_STATE_INVALID", "D2DERR_ZERO_VECTOR", "D2DERR_INTERNAL_ERROR", "D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED", "D2DERR_INVALID_CALL", "D2DERR_NO_HARDWARE_DEVICE", "D2DERR_RECREATE_TARGET", "D2DERR_TOO_MANY_SHADER_ELEMENTS", "D2DERR_SHADER_COMPILE_FAILED", "D2DERR_MAX_TEXTURE_SIZE_EXCEEDED", "D2DERR_UNSUPPORTED_VERSION", "D2DERR_BAD_NUMBER", "D2DERR_WRONG_FACTORY", "D2DERR_LAYER_ALREADY_IN_USE", "D2DERR_POP_CALL_DID_NOT_MATCH_PUSH", "D2DERR_WRONG_RENDER_TARGET", "D2DERR_PUSH_POP_UNBALANCED", "D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT", "D2DERR_INCOMPATIBLE_BRUSH_TYPES", "D2DERR_WIN32_ERROR", "D2DERR_TARGET_NOT_GDI_COMPATIBLE", "D2DERR_TEXT_EFFECT_IS_WRONG_TYPE", "D2DERR_TEXT_RENDERER_NOT_RELEASED", "D2DERR_EXCEEDS_MAX_BITMAP_SIZE", ]) tmpNnpnZF/specs/glparams.py0000664000175000017500000057711412543167424015300 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Describe GL parameters.''' from stdapi import * from gltypes import * # Shorthands for the types X = None # To be determined, merely an enum B = GLboolean I = GLint I64 = GLint64 E = GLenum F = GLfloat D = GLdouble P = OpaquePointer(Void) S = CString H = GLhandleARB # A underscore prefix (e.g., _glGet) is used to skip automatic code generation # for parameters that are obtained through other ways. parameters = [ # (functions, type, count, name) # value ("", X, 1, "GL_ZERO"), # 0x0000 ("", X, 1, "GL_ONE"), # 0x0001 # These are enumerated separately in GLenum_mode #("", X, 1, "GL_POINTS"), # 0x0000 #("", X, 1, "GL_LINES"), # 0x0001 #("", X, 1, "GL_LINE_LOOP"), # 0x0002 #("", X, 1, "GL_LINE_STRIP"), # 0x0003 #("", X, 1, "GL_TRIANGLES"), # 0x0004 #("", X, 1, "GL_TRIANGLE_STRIP"), # 0x0005 #("", X, 1, "GL_TRIANGLE_FAN"), # 0x0006 #("", X, 1, "GL_QUADS"), # 0x0007 #("", X, 1, "GL_QUAD_STRIP"), # 0x0008 #("", X, 1, "GL_POLYGON"), # 0x0009 #("", X, 1, "GL_LINES_ADJACENCY"), # 0x000A #("", X, 1, "GL_LINE_STRIP_ADJACENCY"), # 0x000B #("", X, 1, "GL_TRIANGLES_ADJACENCY"), # 0x000C #("", X, 1, "GL_TRIANGLE_STRIP_ADJACENCY"), # 0x000D #("", X, 1, "GL_PATCHES"), # 0x000E ("", X, 1, "GL_RESTART_PATH_NV"), # 0x00F0 ("", X, 1, "GL_DUP_FIRST_CUBIC_CURVE_TO_NV"), # 0x00F2 ("", X, 1, "GL_DUP_LAST_CUBIC_CURVE_TO_NV"), # 0x00F4 ("", X, 1, "GL_RECT_NV"), # 0x00F6 ("", X, 1, "GL_RELATIVE_RECT_NV"), # 0x00F7 ("", X, 1, "GL_CIRCULAR_CCW_ARC_TO_NV"), # 0x00F8 ("", X, 1, "GL_CIRCULAR_CW_ARC_TO_NV"), # 0x00FA ("", X, 1, "GL_CIRCULAR_TANGENT_ARC_TO_NV"), # 0x00FC ("", X, 1, "GL_ARC_TO_NV"), # 0x00FE ("", X, 1, "GL_RELATIVE_ARC_TO_NV"), # 0x00FF ("", X, 1, "GL_ACCUM"), # 0x0100 ("", X, 1, "GL_LOAD"), # 0x0101 ("", X, 1, "GL_RETURN"), # 0x0102 ("", X, 1, "GL_MULT"), # 0x0103 ("", X, 1, "GL_ADD"), # 0x0104 ("", X, 1, "GL_NEVER"), # 0x0200 ("", X, 1, "GL_LESS"), # 0x0201 ("", X, 1, "GL_EQUAL"), # 0x0202 ("", X, 1, "GL_LEQUAL"), # 0x0203 ("", X, 1, "GL_GREATER"), # 0x0204 ("", X, 1, "GL_NOTEQUAL"), # 0x0205 ("", X, 1, "GL_GEQUAL"), # 0x0206 ("", X, 1, "GL_ALWAYS"), # 0x0207 ("", X, 1, "GL_SRC_COLOR"), # 0x0300 ("", X, 1, "GL_ONE_MINUS_SRC_COLOR"), # 0x0301 ("", X, 1, "GL_SRC_ALPHA"), # 0x0302 ("", X, 1, "GL_ONE_MINUS_SRC_ALPHA"), # 0x0303 ("", X, 1, "GL_DST_ALPHA"), # 0x0304 ("", X, 1, "GL_ONE_MINUS_DST_ALPHA"), # 0x0305 ("", X, 1, "GL_DST_COLOR"), # 0x0306 ("", X, 1, "GL_ONE_MINUS_DST_COLOR"), # 0x0307 ("", X, 1, "GL_SRC_ALPHA_SATURATE"), # 0x0308 ("", X, 1, "GL_FRONT_LEFT"), # 0x0400 ("", X, 1, "GL_FRONT_RIGHT"), # 0x0401 ("", X, 1, "GL_BACK_LEFT"), # 0x0402 ("", X, 1, "GL_BACK_RIGHT"), # 0x0403 ("", X, 1, "GL_FRONT"), # 0x0404 ("", X, 1, "GL_BACK"), # 0x0405 ("", X, 1, "GL_LEFT"), # 0x0406 ("", X, 1, "GL_RIGHT"), # 0x0407 ("", X, 1, "GL_FRONT_AND_BACK"), # 0x0408 ("", X, 1, "GL_AUX0"), # 0x0409 ("", X, 1, "GL_AUX1"), # 0x040A ("", X, 1, "GL_AUX2"), # 0x040B ("", X, 1, "GL_AUX3"), # 0x040C ("", X, 1, "GL_INVALID_ENUM"), # 0x0500 ("", X, 1, "GL_INVALID_VALUE"), # 0x0501 ("", X, 1, "GL_INVALID_OPERATION"), # 0x0502 ("", X, 1, "GL_STACK_OVERFLOW"), # 0x0503 ("", X, 1, "GL_STACK_UNDERFLOW"), # 0x0504 ("", X, 1, "GL_OUT_OF_MEMORY"), # 0x0505 ("", X, 1, "GL_INVALID_FRAMEBUFFER_OPERATION"), # 0x0506 ("", X, 1, "GL_CONTEXT_LOST"), # 0x0507 ("", X, 1, "GL_2D"), # 0x0600 ("", X, 1, "GL_3D"), # 0x0601 ("", X, 1, "GL_3D_COLOR"), # 0x0602 ("", X, 1, "GL_3D_COLOR_TEXTURE"), # 0x0603 ("", X, 1, "GL_4D_COLOR_TEXTURE"), # 0x0604 ("", X, 1, "GL_PASS_THROUGH_TOKEN"), # 0x0700 ("", X, 1, "GL_POINT_TOKEN"), # 0x0701 ("", X, 1, "GL_LINE_TOKEN"), # 0x0702 ("", X, 1, "GL_POLYGON_TOKEN"), # 0x0703 ("", X, 1, "GL_BITMAP_TOKEN"), # 0x0704 ("", X, 1, "GL_DRAW_PIXEL_TOKEN"), # 0x0705 ("", X, 1, "GL_COPY_PIXEL_TOKEN"), # 0x0706 ("", X, 1, "GL_LINE_RESET_TOKEN"), # 0x0707 ("", X, 1, "GL_EXP"), # 0x0800 ("", X, 1, "GL_EXP2"), # 0x0801 ("", X, 1, "GL_CW"), # 0x0900 ("", X, 1, "GL_CCW"), # 0x0901 ("", X, 1, "GL_COEFF"), # 0x0A00 ("", X, 1, "GL_ORDER"), # 0x0A01 ("", X, 1, "GL_DOMAIN"), # 0x0A02 ("glGet", F, 4, "GL_CURRENT_COLOR"), # 0x0B00 ("glGet", F, 1, "GL_CURRENT_INDEX"), # 0x0B01 ("glGet", F, 3, "GL_CURRENT_NORMAL"), # 0x0B02 ("glGet", F, 4, "GL_CURRENT_TEXTURE_COORDS"), # 0x0B03 ("glGet", F, 4, "GL_CURRENT_RASTER_COLOR"), # 0x0B04 ("glGet", F, 1, "GL_CURRENT_RASTER_INDEX"), # 0x0B05 ("glGet", F, 4, "GL_CURRENT_RASTER_TEXTURE_COORDS"), # 0x0B06 ("glGet", F, 4, "GL_CURRENT_RASTER_POSITION"), # 0x0B07 ("glGet", I, 1, "GL_CURRENT_RASTER_POSITION_VALID"), # 0x0B08 ("glGet", F, 1, "GL_CURRENT_RASTER_DISTANCE"), # 0x0B09 ("glGet", B, 1, "GL_POINT_SMOOTH"), # 0x0B10 ("glGet", F, 1, "GL_POINT_SIZE"), # 0x0B11 ("glGet", F, 2, "GL_POINT_SIZE_RANGE"), # 0x0B12 ("glGet", F, 1, "GL_POINT_SIZE_GRANULARITY"), # 0x0B13 ("glGet", B, 1, "GL_LINE_SMOOTH"), # 0x0B20 ("glGet", F, 1, "GL_LINE_WIDTH"), # 0x0B21 ("glGet", F, 2, "GL_LINE_WIDTH_RANGE"), # 0x0B22 ("glGet", F, 1, "GL_LINE_WIDTH_GRANULARITY"), # 0x0B23 ("glGet", B, 1, "GL_LINE_STIPPLE"), # 0x0B24 ("glGet", I, 1, "GL_LINE_STIPPLE_PATTERN"), # 0x0B25 ("glGet", I, 1, "GL_LINE_STIPPLE_REPEAT"), # 0x0B26 ("glGet", E, 1, "GL_LIST_MODE"), # 0x0B30 ("glGet", I, 1, "GL_MAX_LIST_NESTING"), # 0x0B31 ("glGet", I, 1, "GL_LIST_BASE"), # 0x0B32 ("glGet", I, 1, "GL_LIST_INDEX"), # 0x0B33 ("glGet", E, 2, "GL_POLYGON_MODE"), # 0x0B40 ("glGet", B, 1, "GL_POLYGON_SMOOTH"), # 0x0B41 ("glGet", B, 1, "GL_POLYGON_STIPPLE"), # 0x0B42 ("glGet", B, 1, "GL_EDGE_FLAG"), # 0x0B43 ("glGet", B, 1, "GL_CULL_FACE"), # 0x0B44 ("glGet", E, 1, "GL_CULL_FACE_MODE"), # 0x0B45 ("glGet", E, 1, "GL_FRONT_FACE"), # 0x0B46 ("glGet", B, 1, "GL_LIGHTING"), # 0x0B50 ("glGet", B, 1, "GL_LIGHT_MODEL_LOCAL_VIEWER"), # 0x0B51 ("glGet", B, 1, "GL_LIGHT_MODEL_TWO_SIDE"), # 0x0B52 ("glGet", F, 4, "GL_LIGHT_MODEL_AMBIENT"), # 0x0B53 ("glGet", E, 1, "GL_SHADE_MODEL"), # 0x0B54 ("glGet", E, 1, "GL_COLOR_MATERIAL_FACE"), # 0x0B55 ("glGet", E, 1, "GL_COLOR_MATERIAL_PARAMETER"), # 0x0B56 ("glGet", B, 1, "GL_COLOR_MATERIAL"), # 0x0B57 ("glGet", B, 1, "GL_FOG"), # 0x0B60 ("glGet", I, 1, "GL_FOG_INDEX"), # 0x0B61 ("glGet", F, 1, "GL_FOG_DENSITY"), # 0x0B62 ("glGet", F, 1, "GL_FOG_START"), # 0x0B63 ("glGet", F, 1, "GL_FOG_END"), # 0x0B64 ("glGet", E, 1, "GL_FOG_MODE"), # 0x0B65 ("glGet", F, 4, "GL_FOG_COLOR"), # 0x0B66 ("glGet", F, 2, "GL_DEPTH_RANGE"), # 0x0B70 ("glGet", B, 1, "GL_DEPTH_TEST"), # 0x0B71 ("glGet", B, 1, "GL_DEPTH_WRITEMASK"), # 0x0B72 ("glGet", F, 1, "GL_DEPTH_CLEAR_VALUE"), # 0x0B73 ("glGet", E, 1, "GL_DEPTH_FUNC"), # 0x0B74 ("glGet", F, 4, "GL_ACCUM_CLEAR_VALUE"), # 0x0B80 ("glGet", B, 1, "GL_STENCIL_TEST"), # 0x0B90 ("glGet", I, 1, "GL_STENCIL_CLEAR_VALUE"), # 0x0B91 ("glGet", E, 1, "GL_STENCIL_FUNC"), # 0x0B92 ("glGet", I, 1, "GL_STENCIL_VALUE_MASK"), # 0x0B93 ("glGet", E, 1, "GL_STENCIL_FAIL"), # 0x0B94 ("glGet", E, 1, "GL_STENCIL_PASS_DEPTH_FAIL"), # 0x0B95 ("glGet", E, 1, "GL_STENCIL_PASS_DEPTH_PASS"), # 0x0B96 ("glGet", I, 1, "GL_STENCIL_REF"), # 0x0B97 ("glGet", I, 1, "GL_STENCIL_WRITEMASK"), # 0x0B98 ("glGet", E, 1, "GL_MATRIX_MODE"), # 0x0BA0 ("glGet", B, 1, "GL_NORMALIZE"), # 0x0BA1 ("glGet", I, 4, "GL_VIEWPORT"), # 0x0BA2 ("glGet", I, 1, "GL_MODELVIEW_STACK_DEPTH"), # 0x0BA3 ("glGet", I, 1, "GL_PROJECTION_STACK_DEPTH"), # 0x0BA4 ("glGet", I, 1, "GL_TEXTURE_STACK_DEPTH"), # 0x0BA5 ("glGet", F, 16, "GL_MODELVIEW_MATRIX"), # 0x0BA6 ("glGet", F, 16, "GL_PROJECTION_MATRIX"), # 0x0BA7 ("glGet", F, 16, "GL_TEXTURE_MATRIX"), # 0x0BA8 ("glGet", I, 1, "GL_ATTRIB_STACK_DEPTH"), # 0x0BB0 ("glGet", I, 1, "GL_CLIENT_ATTRIB_STACK_DEPTH"), # 0x0BB1 ("glGet", B, 1, "GL_ALPHA_TEST"), # 0x0BC0 ("glGet", E, 1, "GL_ALPHA_TEST_FUNC"), # 0x0BC1 ("glGet", F, 1, "GL_ALPHA_TEST_REF"), # 0x0BC2 ("glGet", B, 1, "GL_DITHER"), # 0x0BD0 ("glGet", E, 1, "GL_BLEND_DST"), # 0x0BE0 ("glGet", E, 1, "GL_BLEND_SRC"), # 0x0BE1 ("glGet", B, 1, "GL_BLEND"), # 0x0BE2 ("glGet", E, 1, "GL_LOGIC_OP_MODE"), # 0x0BF0 ("glGet", B, 1, "GL_INDEX_LOGIC_OP"), # 0x0BF1 ("glGet", B, 1, "GL_COLOR_LOGIC_OP"), # 0x0BF2 ("glGet", I, 1, "GL_AUX_BUFFERS"), # 0x0C00 ("glGet", E, 1, "GL_DRAW_BUFFER"), # 0x0C01 ("glGet", E, 1, "GL_READ_BUFFER"), # 0x0C02 ("glGet", I, 4, "GL_SCISSOR_BOX"), # 0x0C10 ("glGet", B, 1, "GL_SCISSOR_TEST"), # 0x0C11 ("glGet", I, 1, "GL_INDEX_CLEAR_VALUE"), # 0x0C20 ("glGet", I, 1, "GL_INDEX_WRITEMASK"), # 0x0C21 ("glGet", F, 4, "GL_COLOR_CLEAR_VALUE"), # 0x0C22 ("glGet", B, 4, "GL_COLOR_WRITEMASK"), # 0x0C23 ("glGet", B, 1, "GL_INDEX_MODE"), # 0x0C30 ("glGet", B, 1, "GL_RGBA_MODE"), # 0x0C31 ("glGet", B, 1, "GL_DOUBLEBUFFER"), # 0x0C32 ("glGet", B, 1, "GL_STEREO"), # 0x0C33 ("glGet", E, 1, "GL_RENDER_MODE"), # 0x0C40 ("glGet", E, 1, "GL_PERSPECTIVE_CORRECTION_HINT"), # 0x0C50 ("glGet", E, 1, "GL_POINT_SMOOTH_HINT"), # 0x0C51 ("glGet", E, 1, "GL_LINE_SMOOTH_HINT"), # 0x0C52 ("glGet", E, 1, "GL_POLYGON_SMOOTH_HINT"), # 0x0C53 ("glGet", E, 1, "GL_FOG_HINT"), # 0x0C54 ("glGet", B, 1, "GL_TEXTURE_GEN_S"), # 0x0C60 ("glGet", B, 1, "GL_TEXTURE_GEN_T"), # 0x0C61 ("glGet", B, 1, "GL_TEXTURE_GEN_R"), # 0x0C62 ("glGet", B, 1, "GL_TEXTURE_GEN_Q"), # 0x0C63 ("", X, 1, "GL_PIXEL_MAP_I_TO_I"), # 0x0C70 ("", X, 1, "GL_PIXEL_MAP_S_TO_S"), # 0x0C71 ("", X, 1, "GL_PIXEL_MAP_I_TO_R"), # 0x0C72 ("", X, 1, "GL_PIXEL_MAP_I_TO_G"), # 0x0C73 ("", X, 1, "GL_PIXEL_MAP_I_TO_B"), # 0x0C74 ("", X, 1, "GL_PIXEL_MAP_I_TO_A"), # 0x0C75 ("", X, 1, "GL_PIXEL_MAP_R_TO_R"), # 0x0C76 ("", X, 1, "GL_PIXEL_MAP_G_TO_G"), # 0x0C77 ("", X, 1, "GL_PIXEL_MAP_B_TO_B"), # 0x0C78 ("", X, 1, "GL_PIXEL_MAP_A_TO_A"), # 0x0C79 ("glGet", I, 1, "GL_PIXEL_MAP_I_TO_I_SIZE"), # 0x0CB0 ("glGet", I, 1, "GL_PIXEL_MAP_S_TO_S_SIZE"), # 0x0CB1 ("glGet", I, 1, "GL_PIXEL_MAP_I_TO_R_SIZE"), # 0x0CB2 ("glGet", I, 1, "GL_PIXEL_MAP_I_TO_G_SIZE"), # 0x0CB3 ("glGet", I, 1, "GL_PIXEL_MAP_I_TO_B_SIZE"), # 0x0CB4 ("glGet", I, 1, "GL_PIXEL_MAP_I_TO_A_SIZE"), # 0x0CB5 ("glGet", I, 1, "GL_PIXEL_MAP_R_TO_R_SIZE"), # 0x0CB6 ("glGet", I, 1, "GL_PIXEL_MAP_G_TO_G_SIZE"), # 0x0CB7 ("glGet", I, 1, "GL_PIXEL_MAP_B_TO_B_SIZE"), # 0x0CB8 ("glGet", I, 1, "GL_PIXEL_MAP_A_TO_A_SIZE"), # 0x0CB9 ("glGet", B, 1, "GL_UNPACK_SWAP_BYTES"), # 0x0CF0 ("glGet", B, 1, "GL_UNPACK_LSB_FIRST"), # 0x0CF1 ("glGet", I, 1, "GL_UNPACK_ROW_LENGTH"), # 0x0CF2 ("glGet", I, 1, "GL_UNPACK_SKIP_ROWS"), # 0x0CF3 ("glGet", I, 1, "GL_UNPACK_SKIP_PIXELS"), # 0x0CF4 ("glGet", I, 1, "GL_UNPACK_ALIGNMENT"), # 0x0CF5 ("glGet", B, 1, "GL_PACK_SWAP_BYTES"), # 0x0D00 ("glGet", B, 1, "GL_PACK_LSB_FIRST"), # 0x0D01 ("glGet", I, 1, "GL_PACK_ROW_LENGTH"), # 0x0D02 ("glGet", I, 1, "GL_PACK_SKIP_ROWS"), # 0x0D03 ("glGet", I, 1, "GL_PACK_SKIP_PIXELS"), # 0x0D04 ("glGet", I, 1, "GL_PACK_ALIGNMENT"), # 0x0D05 ("glGet", B, 1, "GL_MAP_COLOR"), # 0x0D10 ("glGet", B, 1, "GL_MAP_STENCIL"), # 0x0D11 ("glGet", I, 1, "GL_INDEX_SHIFT"), # 0x0D12 ("glGet", I, 1, "GL_INDEX_OFFSET"), # 0x0D13 ("glGet", F, 1, "GL_RED_SCALE"), # 0x0D14 ("glGet", F, 1, "GL_RED_BIAS"), # 0x0D15 ("glGet", F, 1, "GL_ZOOM_X"), # 0x0D16 ("glGet", F, 1, "GL_ZOOM_Y"), # 0x0D17 ("glGet", F, 1, "GL_GREEN_SCALE"), # 0x0D18 ("glGet", F, 1, "GL_GREEN_BIAS"), # 0x0D19 ("glGet", F, 1, "GL_BLUE_SCALE"), # 0x0D1A ("glGet", F, 1, "GL_BLUE_BIAS"), # 0x0D1B ("glGet,glGetTexEnv", F, 1, "GL_ALPHA_SCALE"), # 0x0D1C ("glGet", F, 1, "GL_ALPHA_BIAS"), # 0x0D1D ("glGet", F, 1, "GL_DEPTH_SCALE"), # 0x0D1E ("glGet", F, 1, "GL_DEPTH_BIAS"), # 0x0D1F ("glGet", I, 1, "GL_MAX_EVAL_ORDER"), # 0x0D30 ("glGet", I, 1, "GL_MAX_LIGHTS"), # 0x0D31 ("glGet", I, 1, "GL_MAX_CLIP_DISTANCES"), # 0x0D32 ("glGet", I, 1, "GL_MAX_TEXTURE_SIZE"), # 0x0D33 ("glGet", I, 1, "GL_MAX_PIXEL_MAP_TABLE"), # 0x0D34 ("glGet", I, 1, "GL_MAX_ATTRIB_STACK_DEPTH"), # 0x0D35 ("glGet", I, 1, "GL_MAX_MODELVIEW_STACK_DEPTH"), # 0x0D36 ("glGet", I, 1, "GL_MAX_NAME_STACK_DEPTH"), # 0x0D37 ("glGet", I, 1, "GL_MAX_PROJECTION_STACK_DEPTH"), # 0x0D38 ("glGet", I, 1, "GL_MAX_TEXTURE_STACK_DEPTH"), # 0x0D39 ("glGet", F, 2, "GL_MAX_VIEWPORT_DIMS"), # 0x0D3A ("glGet", I, 1, "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH"), # 0x0D3B ("glGet", I, 1, "GL_SUBPIXEL_BITS"), # 0x0D50 ("glGet", I, 1, "GL_INDEX_BITS"), # 0x0D51 ("glGet", I, 1, "GL_RED_BITS"), # 0x0D52 ("glGet", I, 1, "GL_GREEN_BITS"), # 0x0D53 ("glGet", I, 1, "GL_BLUE_BITS"), # 0x0D54 ("glGet", I, 1, "GL_ALPHA_BITS"), # 0x0D55 ("glGet", I, 1, "GL_DEPTH_BITS"), # 0x0D56 ("glGet", I, 1, "GL_STENCIL_BITS"), # 0x0D57 ("glGet", I, 1, "GL_ACCUM_RED_BITS"), # 0x0D58 ("glGet", I, 1, "GL_ACCUM_GREEN_BITS"), # 0x0D59 ("glGet", I, 1, "GL_ACCUM_BLUE_BITS"), # 0x0D5A ("glGet", I, 1, "GL_ACCUM_ALPHA_BITS"), # 0x0D5B ("glGet", I, 1, "GL_NAME_STACK_DEPTH"), # 0x0D70 ("glGet", B, 1, "GL_AUTO_NORMAL"), # 0x0D80 ("glGet", B, 1, "GL_MAP1_COLOR_4"), # 0x0D90 ("glGet", B, 1, "GL_MAP1_INDEX"), # 0x0D91 ("glGet", B, 1, "GL_MAP1_NORMAL"), # 0x0D92 ("glGet", B, 1, "GL_MAP1_TEXTURE_COORD_1"), # 0x0D93 ("glGet", B, 1, "GL_MAP1_TEXTURE_COORD_2"), # 0x0D94 ("glGet", B, 1, "GL_MAP1_TEXTURE_COORD_3"), # 0x0D95 ("glGet", B, 1, "GL_MAP1_TEXTURE_COORD_4"), # 0x0D96 ("glGet", B, 1, "GL_MAP1_VERTEX_3"), # 0x0D97 ("glGet", B, 1, "GL_MAP1_VERTEX_4"), # 0x0D98 ("glGet", B, 1, "GL_MAP2_COLOR_4"), # 0x0DB0 ("glGet", B, 1, "GL_MAP2_INDEX"), # 0x0DB1 ("glGet", B, 1, "GL_MAP2_NORMAL"), # 0x0DB2 ("glGet", B, 1, "GL_MAP2_TEXTURE_COORD_1"), # 0x0DB3 ("glGet", B, 1, "GL_MAP2_TEXTURE_COORD_2"), # 0x0DB4 ("glGet", B, 1, "GL_MAP2_TEXTURE_COORD_3"), # 0x0DB5 ("glGet", B, 1, "GL_MAP2_TEXTURE_COORD_4"), # 0x0DB6 ("glGet", B, 1, "GL_MAP2_VERTEX_3"), # 0x0DB7 ("glGet", B, 1, "GL_MAP2_VERTEX_4"), # 0x0DB8 ("glGet", F, 2, "GL_MAP1_GRID_DOMAIN"), # 0x0DD0 ("glGet", I, 1, "GL_MAP1_GRID_SEGMENTS"), # 0x0DD1 ("glGet", F, 4, "GL_MAP2_GRID_DOMAIN"), # 0x0DD2 ("glGet", I, 2, "GL_MAP2_GRID_SEGMENTS"), # 0x0DD3 ("", B, 1, "GL_TEXTURE_1D"), # 0x0DE0 ("", B, 1, "GL_TEXTURE_2D"), # 0x0DE1 ("glGet", P, 1, "GL_FEEDBACK_BUFFER_POINTER"), # 0x0DF0 ("glGet", I, 1, "GL_FEEDBACK_BUFFER_SIZE"), # 0x0DF1 ("glGet", E, 1, "GL_FEEDBACK_BUFFER_TYPE"), # 0x0DF2 ("glGet", P, 1, "GL_SELECTION_BUFFER_POINTER"), # 0x0DF3 ("glGet", I, 1, "GL_SELECTION_BUFFER_SIZE"), # 0x0DF4 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_WIDTH"), # 0x1000 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_HEIGHT"), # 0x1001 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_INTERNAL_FORMAT"), # 0x1003 ("glGetTexParameter,glGetSamplerParameter", F, 4, "GL_TEXTURE_BORDER_COLOR"), # 0x1004 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_BORDER"), # 0x1005 ("", X, 1, "GL_DONT_CARE"), # 0x1100 ("", X, 1, "GL_FASTEST"), # 0x1101 ("", X, 1, "GL_NICEST"), # 0x1102 ("glGetLight,glGetMaterial", F, 4, "GL_AMBIENT"), # 0x1200 ("glGetLight,glGetMaterial", F, 4, "GL_DIFFUSE"), # 0x1201 ("glGetLight,glGetMaterial", F, 4, "GL_SPECULAR"), # 0x1202 ("glGetLight", F, 4, "GL_POSITION"), # 0x1203 ("glGetLight", F, 3, "GL_SPOT_DIRECTION"), # 0x1204 ("glGetLight", F, 1, "GL_SPOT_EXPONENT"), # 0x1205 ("glGetLight", F, 1, "GL_SPOT_CUTOFF"), # 0x1206 ("glGetLight", F, 1, "GL_CONSTANT_ATTENUATION"), # 0x1207 ("glGetLight", F, 1, "GL_LINEAR_ATTENUATION"), # 0x1208 ("glGetLight", F, 1, "GL_QUADRATIC_ATTENUATION"), # 0x1209 ("", X, 1, "GL_COMPILE"), # 0x1300 ("", X, 1, "GL_COMPILE_AND_EXECUTE"), # 0x1301 ("", X, 1, "GL_BYTE"), # 0x1400 ("", X, 1, "GL_UNSIGNED_BYTE"), # 0x1401 ("", X, 1, "GL_SHORT"), # 0x1402 ("", X, 1, "GL_UNSIGNED_SHORT"), # 0x1403 ("", X, 1, "GL_INT"), # 0x1404 ("", X, 1, "GL_UNSIGNED_INT"), # 0x1405 ("", X, 1, "GL_FLOAT"), # 0x1406 ("", X, 1, "GL_2_BYTES"), # 0x1407 ("", X, 1, "GL_3_BYTES"), # 0x1408 ("", X, 1, "GL_4_BYTES"), # 0x1409 ("", X, 1, "GL_DOUBLE"), # 0x140A ("", X, 1, "GL_HALF_FLOAT"), # 0x140B ("", X, 1, "GL_FIXED"), # 0x140C ("", X, 1, "GL_INT64_NV"), # 0x140E ("", X, 1, "GL_UNSIGNED_INT64_ARB"), # 0x140F ("", X, 1, "GL_CLEAR"), # 0x1500 ("", X, 1, "GL_AND"), # 0x1501 ("", X, 1, "GL_AND_REVERSE"), # 0x1502 ("", X, 1, "GL_COPY"), # 0x1503 ("", X, 1, "GL_AND_INVERTED"), # 0x1504 ("", X, 1, "GL_NOOP"), # 0x1505 ("", X, 1, "GL_XOR"), # 0x1506 ("", X, 1, "GL_OR"), # 0x1507 ("", X, 1, "GL_NOR"), # 0x1508 ("", X, 1, "GL_EQUIV"), # 0x1509 ("", X, 1, "GL_INVERT"), # 0x150A ("", X, 1, "GL_OR_REVERSE"), # 0x150B ("", X, 1, "GL_COPY_INVERTED"), # 0x150C ("", X, 1, "GL_OR_INVERTED"), # 0x150D ("", X, 1, "GL_NAND"), # 0x150E ("", X, 1, "GL_SET"), # 0x150F ("glGetMaterial", F, 4, "GL_EMISSION"), # 0x1600 ("glGetMaterial", F, 1, "GL_SHININESS"), # 0x1601 ("", F, 4, "GL_AMBIENT_AND_DIFFUSE"), # 0x1602 ("glGetMaterial", F, 3, "GL_COLOR_INDEXES"), # 0x1603 ("", X, 1, "GL_MODELVIEW"), # 0x1700 ("", X, 1, "GL_PROJECTION"), # 0x1701 ("", X, 1, "GL_TEXTURE"), # 0x1702 ("", X, 1, "GL_COLOR"), # 0x1800 ("", X, 1, "GL_DEPTH"), # 0x1801 ("", X, 1, "GL_STENCIL"), # 0x1802 ("", X, 1, "GL_COLOR_INDEX"), # 0x1900 ("", X, 1, "GL_STENCIL_INDEX"), # 0x1901 ("", X, 1, "GL_DEPTH_COMPONENT"), # 0x1902 ("", X, 1, "GL_RED"), # 0x1903 ("", X, 1, "GL_GREEN"), # 0x1904 ("", X, 1, "GL_BLUE"), # 0x1905 ("", X, 1, "GL_ALPHA"), # 0x1906 ("", X, 1, "GL_RGB"), # 0x1907 ("", X, 1, "GL_RGBA"), # 0x1908 ("", X, 1, "GL_LUMINANCE"), # 0x1909 ("", X, 1, "GL_LUMINANCE_ALPHA"), # 0x190A ("", X, 1, "GL_BITMAP"), # 0x1A00 ("", X, 1, "GL_POINT"), # 0x1B00 ("", X, 1, "GL_LINE"), # 0x1B01 ("", X, 1, "GL_FILL"), # 0x1B02 ("", X, 1, "GL_RENDER"), # 0x1C00 ("", X, 1, "GL_FEEDBACK"), # 0x1C01 ("", X, 1, "GL_SELECT"), # 0x1C02 ("", X, 1, "GL_FLAT"), # 0x1D00 ("", X, 1, "GL_SMOOTH"), # 0x1D01 ("", X, 1, "GL_KEEP"), # 0x1E00 ("", X, 1, "GL_REPLACE"), # 0x1E01 ("", X, 1, "GL_INCR"), # 0x1E02 ("", X, 1, "GL_DECR"), # 0x1E03 ("glGet", S, 1, "GL_VENDOR"), # 0x1F00 ("glGet", S, 1, "GL_RENDERER"), # 0x1F01 ("glGet", S, 1, "GL_VERSION"), # 0x1F02 ("glGet", S, 1, "GL_EXTENSIONS"), # 0x1F03 ("", X, 1, "GL_S"), # 0x2000 ("", X, 1, "GL_T"), # 0x2001 ("", X, 1, "GL_R"), # 0x2002 ("", X, 1, "GL_Q"), # 0x2003 ("", X, 1, "GL_MODULATE"), # 0x2100 ("", X, 1, "GL_DECAL"), # 0x2101 ("glGetTexEnv", E, 1, "GL_TEXTURE_ENV_MODE"), # 0x2200 ("glGetTexEnv", F, 4, "GL_TEXTURE_ENV_COLOR"), # 0x2201 ("", X, 1, "GL_TEXTURE_ENV"), # 0x2300 ("", X, 1, "GL_EYE_LINEAR"), # 0x2400 ("", X, 1, "GL_OBJECT_LINEAR"), # 0x2401 ("", X, 1, "GL_SPHERE_MAP"), # 0x2402 ("glGetTexGen", E, 1, "GL_TEXTURE_GEN_MODE"), # 0x2500 ("glGetTexGen", F, 4, "GL_OBJECT_PLANE"), # 0x2501 ("glGetTexGen", F, 4, "GL_EYE_PLANE"), # 0x2502 ("", X, 1, "GL_NEAREST"), # 0x2600 ("", X, 1, "GL_LINEAR"), # 0x2601 ("", X, 1, "GL_NEAREST_MIPMAP_NEAREST"), # 0x2700 ("", X, 1, "GL_LINEAR_MIPMAP_NEAREST"), # 0x2701 ("", X, 1, "GL_NEAREST_MIPMAP_LINEAR"), # 0x2702 ("", X, 1, "GL_LINEAR_MIPMAP_LINEAR"), # 0x2703 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_MAG_FILTER"), # 0x2800 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_MIN_FILTER"), # 0x2801 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_WRAP_S"), # 0x2802 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_WRAP_T"), # 0x2803 ("", X, 1, "GL_CLAMP"), # 0x2900 ("", X, 1, "GL_REPEAT"), # 0x2901 ("glGet", F, 1, "GL_POLYGON_OFFSET_UNITS"), # 0x2A00 ("glGet", B, 1, "GL_POLYGON_OFFSET_POINT"), # 0x2A01 ("glGet", B, 1, "GL_POLYGON_OFFSET_LINE"), # 0x2A02 ("", X, 1, "GL_R3_G3_B2"), # 0x2A10 ("", X, 1, "GL_V2F"), # 0x2A20 ("", X, 1, "GL_V3F"), # 0x2A21 ("", X, 1, "GL_C4UB_V2F"), # 0x2A22 ("", X, 1, "GL_C4UB_V3F"), # 0x2A23 ("", X, 1, "GL_C3F_V3F"), # 0x2A24 ("", X, 1, "GL_N3F_V3F"), # 0x2A25 ("", X, 1, "GL_C4F_N3F_V3F"), # 0x2A26 ("", X, 1, "GL_T2F_V3F"), # 0x2A27 ("", X, 1, "GL_T4F_V4F"), # 0x2A28 ("", X, 1, "GL_T2F_C4UB_V3F"), # 0x2A29 ("", X, 1, "GL_T2F_C3F_V3F"), # 0x2A2A ("", X, 1, "GL_T2F_N3F_V3F"), # 0x2A2B ("", X, 1, "GL_T2F_C4F_N3F_V3F"), # 0x2A2C ("", X, 1, "GL_T4F_C4F_N3F_V4F"), # 0x2A2D ("glGet", B, 1, "GL_CLIP_DISTANCE0"), # 0x3000 ("glGet", B, 1, "GL_CLIP_DISTANCE1"), # 0x3001 ("glGet", B, 1, "GL_CLIP_DISTANCE2"), # 0x3002 ("glGet", B, 1, "GL_CLIP_DISTANCE3"), # 0x3003 ("glGet", B, 1, "GL_CLIP_DISTANCE4"), # 0x3004 ("glGet", B, 1, "GL_CLIP_DISTANCE5"), # 0x3005 ("glGet", B, 1, "GL_CLIP_DISTANCE6"), # 0x3006 ("glGet", B, 1, "GL_CLIP_DISTANCE7"), # 0x3007 ("_glGet", B, 1, "GL_LIGHT0"), # 0x4000 ("_glGet", B, 1, "GL_LIGHT1"), # 0x4001 ("_glGet", B, 1, "GL_LIGHT2"), # 0x4002 ("_glGet", B, 1, "GL_LIGHT3"), # 0x4003 ("_glGet", B, 1, "GL_LIGHT4"), # 0x4004 ("_glGet", B, 1, "GL_LIGHT5"), # 0x4005 ("_glGet", B, 1, "GL_LIGHT6"), # 0x4006 ("_glGet", B, 1, "GL_LIGHT7"), # 0x4007 ("", X, 1, "GL_ABGR_EXT"), # 0x8000 ("", X, 1, "GL_CONSTANT_COLOR"), # 0x8001 ("", X, 1, "GL_ONE_MINUS_CONSTANT_COLOR"), # 0x8002 ("", X, 1, "GL_CONSTANT_ALPHA"), # 0x8003 ("", X, 1, "GL_ONE_MINUS_CONSTANT_ALPHA"), # 0x8004 ("glGet", F, 4, "GL_BLEND_COLOR"), # 0x8005 ("", X, 1, "GL_FUNC_ADD"), # 0x8006 ("", X, 1, "GL_MIN"), # 0x8007 ("", X, 1, "GL_MAX"), # 0x8008 ("glGet", E, 1, "GL_BLEND_EQUATION"), # 0x8009 ("", X, 1, "GL_FUNC_SUBTRACT"), # 0x800A ("", X, 1, "GL_FUNC_REVERSE_SUBTRACT"), # 0x800B ("", X, 1, "GL_CMYK_EXT"), # 0x800C ("", X, 1, "GL_CMYKA_EXT"), # 0x800D ("glGet", I, 1, "GL_PACK_CMYK_HINT_EXT"), # 0x800E ("glGet", I, 1, "GL_UNPACK_CMYK_HINT_EXT"), # 0x800F ("glGet", B, 1, "GL_CONVOLUTION_1D"), # 0x8010 ("glGet", B, 1, "GL_CONVOLUTION_2D"), # 0x8011 ("glGet", B, 1, "GL_SEPARABLE_2D"), # 0x8012 ("glGetConvolutionParameter", E, 1, "GL_CONVOLUTION_BORDER_MODE"), # 0x8013 ("glGetConvolutionParameter", F, 4, "GL_CONVOLUTION_FILTER_SCALE"), # 0x8014 ("glGetConvolutionParameter", F, 4, "GL_CONVOLUTION_FILTER_BIAS"), # 0x8015 ("", X, 1, "GL_REDUCE"), # 0x8016 ("glGetConvolutionParameter", E, 1, "GL_CONVOLUTION_FORMAT"), # 0x8017 ("glGetConvolutionParameter", I, 1, "GL_CONVOLUTION_WIDTH"), # 0x8018 ("glGetConvolutionParameter", I, 1, "GL_CONVOLUTION_HEIGHT"), # 0x8019 ("glGetConvolutionParameter", I, 1, "GL_MAX_CONVOLUTION_WIDTH"), # 0x801A ("glGetConvolutionParameter", I, 1, "GL_MAX_CONVOLUTION_HEIGHT"), # 0x801B ("glGet", F, 1, "GL_POST_CONVOLUTION_RED_SCALE"), # 0x801C ("glGet", F, 1, "GL_POST_CONVOLUTION_GREEN_SCALE"), # 0x801D ("glGet", F, 1, "GL_POST_CONVOLUTION_BLUE_SCALE"), # 0x801E ("glGet", F, 1, "GL_POST_CONVOLUTION_ALPHA_SCALE"), # 0x801F ("glGet", F, 1, "GL_POST_CONVOLUTION_RED_BIAS"), # 0x8020 ("glGet", F, 1, "GL_POST_CONVOLUTION_GREEN_BIAS"), # 0x8021 ("glGet", F, 1, "GL_POST_CONVOLUTION_BLUE_BIAS"), # 0x8022 ("glGet", F, 1, "GL_POST_CONVOLUTION_ALPHA_BIAS"), # 0x8023 ("glGet", B, 1, "GL_HISTOGRAM"), # 0x8024 ("", X, 1, "GL_PROXY_HISTOGRAM"), # 0x8025 ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_WIDTH"), # 0x8026 ("glGetHistogramParameter", E, 1, "GL_HISTOGRAM_FORMAT"), # 0x8027 ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_RED_SIZE"), # 0x8028 ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_GREEN_SIZE"), # 0x8029 ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_BLUE_SIZE"), # 0x802A ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_ALPHA_SIZE"), # 0x802B ("glGetHistogramParameter", I, 1, "GL_HISTOGRAM_LUMINANCE_SIZE"), # 0x802C ("glGetHistogramParameter", B, 1, "GL_HISTOGRAM_SINK"), # 0x802D ("glGet", B, 1, "GL_MINMAX"), # 0x802E ("glGetMinMaxParameter", E, 1, "GL_MINMAX_FORMAT"), # 0x802F ("glGetMinMaxParameter", B, 1, "GL_MINMAX_SINK"), # 0x8030 ("", X, 1, "GL_TABLE_TOO_LARGE"), # 0x8031 ("", X, 1, "GL_UNSIGNED_BYTE_3_3_2"), # 0x8032 ("", X, 1, "GL_UNSIGNED_SHORT_4_4_4_4"), # 0x8033 ("", X, 1, "GL_UNSIGNED_SHORT_5_5_5_1"), # 0x8034 ("", X, 1, "GL_UNSIGNED_INT_8_8_8_8"), # 0x8035 ("", X, 1, "GL_UNSIGNED_INT_10_10_10_2"), # 0x8036 ("glGet", B, 1, "GL_POLYGON_OFFSET_FILL"), # 0x8037 ("glGet", F, 1, "GL_POLYGON_OFFSET_FACTOR"), # 0x8038 ("glGet", F, 1, "GL_POLYGON_OFFSET_BIAS_EXT"), # 0x8039 ("glGet", B, 1, "GL_RESCALE_NORMAL"), # 0x803A ("", X, 1, "GL_ALPHA4"), # 0x803B ("", X, 1, "GL_ALPHA8"), # 0x803C ("", X, 1, "GL_ALPHA12"), # 0x803D ("", X, 1, "GL_ALPHA16"), # 0x803E ("", X, 1, "GL_LUMINANCE4"), # 0x803F ("", X, 1, "GL_LUMINANCE8"), # 0x8040 ("", X, 1, "GL_LUMINANCE12"), # 0x8041 ("", X, 1, "GL_LUMINANCE16"), # 0x8042 ("", X, 1, "GL_LUMINANCE4_ALPHA4"), # 0x8043 ("", X, 1, "GL_LUMINANCE6_ALPHA2"), # 0x8044 ("", X, 1, "GL_LUMINANCE8_ALPHA8"), # 0x8045 ("", X, 1, "GL_LUMINANCE12_ALPHA4"), # 0x8046 ("", X, 1, "GL_LUMINANCE12_ALPHA12"), # 0x8047 ("", X, 1, "GL_LUMINANCE16_ALPHA16"), # 0x8048 ("", X, 1, "GL_INTENSITY"), # 0x8049 ("", X, 1, "GL_INTENSITY4"), # 0x804A ("", X, 1, "GL_INTENSITY8"), # 0x804B ("", X, 1, "GL_INTENSITY12"), # 0x804C ("", X, 1, "GL_INTENSITY16"), # 0x804D ("", X, 1, "GL_RGB2_EXT"), # 0x804E ("", X, 1, "GL_RGB4"), # 0x804F ("", X, 1, "GL_RGB5"), # 0x8050 ("", X, 1, "GL_RGB8"), # 0x8051 ("", X, 1, "GL_RGB10"), # 0x8052 ("", X, 1, "GL_RGB12"), # 0x8053 ("", X, 1, "GL_RGB16"), # 0x8054 ("", X, 1, "GL_RGBA2"), # 0x8055 ("", X, 1, "GL_RGBA4"), # 0x8056 ("", X, 1, "GL_RGB5_A1"), # 0x8057 ("", X, 1, "GL_RGBA8"), # 0x8058 ("", X, 1, "GL_RGB10_A2"), # 0x8059 ("", X, 1, "GL_RGBA12"), # 0x805A ("", X, 1, "GL_RGBA16"), # 0x805B ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_RED_SIZE"), # 0x805C ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_GREEN_SIZE"), # 0x805D ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_BLUE_SIZE"), # 0x805E ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_ALPHA_SIZE"), # 0x805F ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_LUMINANCE_SIZE"), # 0x8060 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_INTENSITY_SIZE"), # 0x8061 ("", X, 1, "GL_REPLACE_EXT"), # 0x8062 ("", X, 1, "GL_PROXY_TEXTURE_1D"), # 0x8063 ("", X, 1, "GL_PROXY_TEXTURE_2D"), # 0x8064 ("", X, 1, "GL_TEXTURE_TOO_LARGE_EXT"), # 0x8065 ("glGetTexParameter", F, 1, "GL_TEXTURE_PRIORITY"), # 0x8066 ("glGetTexParameter", B, 1, "GL_TEXTURE_RESIDENT"), # 0x8067 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_1D"), # 0x8068 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_2D"), # 0x8069 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_3D"), # 0x806A ("glGet", I, 1, "GL_PACK_SKIP_IMAGES"), # 0x806B ("glGet", F, 1, "GL_PACK_IMAGE_HEIGHT"), # 0x806C ("glGet", I, 1, "GL_UNPACK_SKIP_IMAGES"), # 0x806D ("glGet", F, 1, "GL_UNPACK_IMAGE_HEIGHT"), # 0x806E ("", B, 1, "GL_TEXTURE_3D"), # 0x806F ("", X, 1, "GL_PROXY_TEXTURE_3D"), # 0x8070 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_DEPTH"), # 0x8071 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_WRAP_R"), # 0x8072 ("glGet", I, 1, "GL_MAX_3D_TEXTURE_SIZE"), # 0x8073 ("glGet", B, 1, "GL_VERTEX_ARRAY"), # 0x8074 ("glGet", B, 1, "GL_NORMAL_ARRAY"), # 0x8075 ("glGet", B, 1, "GL_COLOR_ARRAY"), # 0x8076 ("glGet", B, 1, "GL_INDEX_ARRAY"), # 0x8077 ("glGet", B, 1, "GL_TEXTURE_COORD_ARRAY"), # 0x8078 ("glGet", B, 1, "GL_EDGE_FLAG_ARRAY"), # 0x8079 ("glGet", I, 1, "GL_VERTEX_ARRAY_SIZE"), # 0x807A ("glGet", E, 1, "GL_VERTEX_ARRAY_TYPE"), # 0x807B ("glGet", I, 1, "GL_VERTEX_ARRAY_STRIDE"), # 0x807C ("glGet", I, 1, "GL_VERTEX_ARRAY_COUNT_EXT"), # 0x807D ("glGet", E, 1, "GL_NORMAL_ARRAY_TYPE"), # 0x807E ("glGet", I, 1, "GL_NORMAL_ARRAY_STRIDE"), # 0x807F ("glGet", I, 1, "GL_NORMAL_ARRAY_COUNT_EXT"), # 0x8080 ("glGet", I, 1, "GL_COLOR_ARRAY_SIZE"), # 0x8081 ("glGet", E, 1, "GL_COLOR_ARRAY_TYPE"), # 0x8082 ("glGet", I, 1, "GL_COLOR_ARRAY_STRIDE"), # 0x8083 ("glGet", I, 1, "GL_COLOR_ARRAY_COUNT_EXT"), # 0x8084 ("glGet", E, 1, "GL_INDEX_ARRAY_TYPE"), # 0x8085 ("glGet", I, 1, "GL_INDEX_ARRAY_STRIDE"), # 0x8086 ("glGet", I, 1, "GL_INDEX_ARRAY_COUNT_EXT"), # 0x8087 ("glGet", I, 1, "GL_TEXTURE_COORD_ARRAY_SIZE"), # 0x8088 ("glGet", E, 1, "GL_TEXTURE_COORD_ARRAY_TYPE"), # 0x8089 ("glGet", I, 1, "GL_TEXTURE_COORD_ARRAY_STRIDE"), # 0x808A ("glGet", I, 1, "GL_TEXTURE_COORD_ARRAY_COUNT_EXT"), # 0x808B ("glGet", I, 1, "GL_EDGE_FLAG_ARRAY_STRIDE"), # 0x808C ("glGet", I, 1, "GL_EDGE_FLAG_ARRAY_COUNT_EXT"), # 0x808D ("glGet", P, 1, "GL_VERTEX_ARRAY_POINTER"), # 0x808E ("glGet", P, 1, "GL_NORMAL_ARRAY_POINTER"), # 0x808F ("glGet", P, 1, "GL_COLOR_ARRAY_POINTER"), # 0x8090 ("glGet", P, 1, "GL_INDEX_ARRAY_POINTER"), # 0x8091 ("glGet", P, 1, "GL_TEXTURE_COORD_ARRAY_POINTER"), # 0x8092 ("glGet", P, 1, "GL_EDGE_FLAG_ARRAY_POINTER"), # 0x8093 ("glGet", I, 1, "GL_INTERLACE_SGIX"), # 0x8094 ("", X, 1, "GL_DETAIL_TEXTURE_2D_SGIS"), # 0x8095 ("glGet", I, 1, "GL_DETAIL_TEXTURE_2D_BINDING_SGIS"), # 0x8096 ("", X, 1, "GL_LINEAR_DETAIL_SGIS"), # 0x8097 ("", X, 1, "GL_LINEAR_DETAIL_ALPHA_SGIS"), # 0x8098 ("", X, 1, "GL_LINEAR_DETAIL_COLOR_SGIS"), # 0x8099 ("", X, 1, "GL_DETAIL_TEXTURE_LEVEL_SGIS"), # 0x809A ("", X, 1, "GL_DETAIL_TEXTURE_MODE_SGIS"), # 0x809B ("", X, 1, "GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS"), # 0x809C ("glGet", I, 1, "GL_MULTISAMPLE"), # 0x809D ("glGet", I, 1, "GL_SAMPLE_ALPHA_TO_COVERAGE"), # 0x809E ("glGet", I, 1, "GL_SAMPLE_ALPHA_TO_ONE"), # 0x809F ("glGet", I, 1, "GL_SAMPLE_COVERAGE"), # 0x80A0 ("", X, 1, "GL_1PASS_EXT"), # 0x80A1 ("", X, 1, "GL_2PASS_0_EXT"), # 0x80A2 ("", X, 1, "GL_2PASS_1_EXT"), # 0x80A3 ("", X, 1, "GL_4PASS_0_EXT"), # 0x80A4 ("", X, 1, "GL_4PASS_1_EXT"), # 0x80A5 ("", X, 1, "GL_4PASS_2_EXT"), # 0x80A6 ("", X, 1, "GL_4PASS_3_EXT"), # 0x80A7 ("glGet", I, 1, "GL_SAMPLE_BUFFERS"), # 0x80A8 ("glGet", I, 1, "GL_SAMPLES"), # 0x80A9 ("glGet", F, 1, "GL_SAMPLE_COVERAGE_VALUE"), # 0x80AA ("glGet", I, 1, "GL_SAMPLE_COVERAGE_INVERT"), # 0x80AB ("glGet", I, 1, "GL_SAMPLE_PATTERN_EXT"), # 0x80AC ("", X, 1, "GL_LINEAR_SHARPEN_SGIS"), # 0x80AD ("", X, 1, "GL_LINEAR_SHARPEN_ALPHA_SGIS"), # 0x80AE ("", X, 1, "GL_LINEAR_SHARPEN_COLOR_SGIS"), # 0x80AF ("", X, 1, "GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS"), # 0x80B0 ("glGet", F, 16, "GL_COLOR_MATRIX"), # 0x80B1 ("glGet", I, 1, "GL_COLOR_MATRIX_STACK_DEPTH"), # 0x80B2 ("glGet", I, 1, "GL_MAX_COLOR_MATRIX_STACK_DEPTH"), # 0x80B3 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_RED_SCALE"), # 0x80B4 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_GREEN_SCALE"), # 0x80B5 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_BLUE_SCALE"), # 0x80B6 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_ALPHA_SCALE"), # 0x80B7 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_RED_BIAS"), # 0x80B8 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_GREEN_BIAS"), # 0x80B9 ("glGet", F, 1, "GL_POST_COLOR_MATRIX_BLUE_BIAS"), # 0x80BA ("glGet", F, 1, "GL_POST_COLOR_MATRIX_ALPHA_BIAS"), # 0x80BB ("glGet", I, 1, "GL_TEXTURE_COLOR_TABLE_SGI"), # 0x80BC ("", X, 1, "GL_PROXY_TEXTURE_COLOR_TABLE_SGI"), # 0x80BD ("", X, 1, "GL_TEXTURE_ENV_BIAS_SGIX"), # 0x80BE ("glGetTexParameter", F, 1, "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB"), # 0x80BF ("glGet", E, 1, "GL_BLEND_DST_RGB"), # 0x80C8 ("glGet", E, 1, "GL_BLEND_SRC_RGB"), # 0x80C9 ("glGet", E, 1, "GL_BLEND_DST_ALPHA"), # 0x80CA ("glGet", E, 1, "GL_BLEND_SRC_ALPHA"), # 0x80CB ("", X, 1, "GL_422_EXT"), # 0x80CC ("", X, 1, "GL_422_REV_EXT"), # 0x80CD ("", X, 1, "GL_422_AVERAGE_EXT"), # 0x80CE ("", X, 1, "GL_422_REV_AVERAGE_EXT"), # 0x80CF ("glGet", B, 1, "GL_COLOR_TABLE"), # 0x80D0 ("glGet", I, 1, "GL_POST_CONVOLUTION_COLOR_TABLE"), # 0x80D1 ("glGet", I, 1, "GL_POST_COLOR_MATRIX_COLOR_TABLE"), # 0x80D2 ("", X, 1, "GL_PROXY_COLOR_TABLE"), # 0x80D3 ("", X, 1, "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE"), # 0x80D4 ("", X, 1, "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE"), # 0x80D5 ("glGetColorTableParameter", F, 4, "GL_COLOR_TABLE_SCALE"), # 0x80D6 ("glGetColorTableParameter", F, 4, "GL_COLOR_TABLE_BIAS"), # 0x80D7 ("glGetColorTableParameter", E, 1, "GL_COLOR_TABLE_FORMAT"), # 0x80D8 ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_WIDTH"), # 0x80D9 ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_RED_SIZE"), # 0x80DA ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_GREEN_SIZE"), # 0x80DB ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_BLUE_SIZE"), # 0x80DC ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_ALPHA_SIZE"), # 0x80DD ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_LUMINANCE_SIZE"), # 0x80DE ("glGetColorTableParameter", I, 1, "GL_COLOR_TABLE_INTENSITY_SIZE"), # 0x80DF ("", X, 1, "GL_BGR"), # 0x80E0 ("", X, 1, "GL_BGRA"), # 0x80E1 ("", X, 1, "GL_COLOR_INDEX1_EXT"), # 0x80E2 ("", X, 1, "GL_COLOR_INDEX2_EXT"), # 0x80E3 ("", X, 1, "GL_COLOR_INDEX4_EXT"), # 0x80E4 ("", X, 1, "GL_COLOR_INDEX8_EXT"), # 0x80E5 ("", X, 1, "GL_COLOR_INDEX12_EXT"), # 0x80E6 ("", X, 1, "GL_COLOR_INDEX16_EXT"), # 0x80E7 ("glGet", I, 1, "GL_MAX_ELEMENTS_VERTICES"), # 0x80E8 ("glGet", I, 1, "GL_MAX_ELEMENTS_INDICES"), # 0x80E9 ("", X, 1, "GL_PHONG_WIN"), # 0x80EA ("", X, 1, "GL_PHONG_HINT_WIN"), # 0x80EB ("", X, 1, "GL_FOG_SPECULAR_TEXTURE_WIN"), # 0x80EC ("_glGetTexLevelParameter", I, 1, "GL_TEXTURE_INDEX_SIZE_EXT"), # 0x80ED ("", X, 1, "GL_PARAMETER_BUFFER_ARB"), # 0x80EE ("", X, 1, "GL_PARAMETER_BUFFER_BINDING_ARB"), # 0x80EF ("glGet", E, 1, "GL_CLIP_VOLUME_CLIPPING_HINT_EXT"), # 0x80F0 ("", X, 1, "GL_DUAL_ALPHA4_SGIS"), # 0x8110 ("", X, 1, "GL_DUAL_ALPHA8_SGIS"), # 0x8111 ("", X, 1, "GL_DUAL_ALPHA12_SGIS"), # 0x8112 ("", X, 1, "GL_DUAL_ALPHA16_SGIS"), # 0x8113 ("", X, 1, "GL_DUAL_LUMINANCE4_SGIS"), # 0x8114 ("", X, 1, "GL_DUAL_LUMINANCE8_SGIS"), # 0x8115 ("", X, 1, "GL_DUAL_LUMINANCE12_SGIS"), # 0x8116 ("", X, 1, "GL_DUAL_LUMINANCE16_SGIS"), # 0x8117 ("", X, 1, "GL_DUAL_INTENSITY4_SGIS"), # 0x8118 ("", X, 1, "GL_DUAL_INTENSITY8_SGIS"), # 0x8119 ("", X, 1, "GL_DUAL_INTENSITY12_SGIS"), # 0x811A ("", X, 1, "GL_DUAL_INTENSITY16_SGIS"), # 0x811B ("", X, 1, "GL_DUAL_LUMINANCE_ALPHA4_SGIS"), # 0x811C ("", X, 1, "GL_DUAL_LUMINANCE_ALPHA8_SGIS"), # 0x811D ("", X, 1, "GL_QUAD_ALPHA4_SGIS"), # 0x811E ("", X, 1, "GL_QUAD_ALPHA8_SGIS"), # 0x811F ("", X, 1, "GL_QUAD_LUMINANCE4_SGIS"), # 0x8120 ("", X, 1, "GL_QUAD_LUMINANCE8_SGIS"), # 0x8121 ("", X, 1, "GL_QUAD_INTENSITY4_SGIS"), # 0x8122 ("", X, 1, "GL_QUAD_INTENSITY8_SGIS"), # 0x8123 ("", X, 1, "GL_DUAL_TEXTURE_SELECT_SGIS"), # 0x8124 ("", X, 1, "GL_QUAD_TEXTURE_SELECT_SGIS"), # 0x8125 ("glGet", F, 1, "GL_POINT_SIZE_MIN"), # 0x8126 ("glGet", F, 1, "GL_POINT_SIZE_MAX"), # 0x8127 ("glGet", F, 1, "GL_POINT_FADE_THRESHOLD_SIZE"), # 0x8128 ("glGet", F, 3, "GL_POINT_DISTANCE_ATTENUATION"), # 0x8129 ("", X, 1, "GL_FOG_FUNC_SGIS"), # 0x812A ("glGet", I, 1, "GL_FOG_FUNC_POINTS_SGIS"), # 0x812B ("glGet", I, 1, "GL_MAX_FOG_FUNC_POINTS_SGIS"), # 0x812C ("", X, 1, "GL_CLAMP_TO_BORDER"), # 0x812D ("", X, 1, "GL_TEXTURE_MULTI_BUFFER_HINT_SGIX"), # 0x812E ("", X, 1, "GL_CLAMP_TO_EDGE"), # 0x812F ("glGet", I, 1, "GL_PACK_SKIP_VOLUMES_SGIS"), # 0x8130 ("glGet", I, 1, "GL_PACK_IMAGE_DEPTH_SGIS"), # 0x8131 ("glGet", I, 1, "GL_UNPACK_SKIP_VOLUMES_SGIS"), # 0x8132 ("glGet", I, 1, "GL_UNPACK_IMAGE_DEPTH_SGIS"), # 0x8133 ("glGet", I, 1, "GL_TEXTURE_4D_SGIS"), # 0x8134 ("", X, 1, "GL_PROXY_TEXTURE_4D_SGIS"), # 0x8135 ("", X, 1, "GL_TEXTURE_4DSIZE_SGIS"), # 0x8136 ("", X, 1, "GL_TEXTURE_WRAP_Q_SGIS"), # 0x8137 ("glGet", I, 1, "GL_MAX_4D_TEXTURE_SIZE_SGIS"), # 0x8138 ("glGet", I, 1, "GL_PIXEL_TEX_GEN_SGIX"), # 0x8139 ("glGetTexParameter,glGetSamplerParameter", F, 1, "GL_TEXTURE_MIN_LOD"), # 0x813A ("glGetTexParameter,glGetSamplerParameter", F, 1, "GL_TEXTURE_MAX_LOD"), # 0x813B ("glGetTexParameter", F, 1, "GL_TEXTURE_BASE_LEVEL"), # 0x813C ("glGetTexParameter", F, 1, "GL_TEXTURE_MAX_LEVEL"), # 0x813D ("glGet", I, 1, "GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX"), # 0x813E ("glGet", I, 1, "GL_PIXEL_TILE_CACHE_INCREMENT_SGIX"), # 0x813F ("glGet", I, 1, "GL_PIXEL_TILE_WIDTH_SGIX"), # 0x8140 ("glGet", I, 1, "GL_PIXEL_TILE_HEIGHT_SGIX"), # 0x8141 ("glGet", I, 1, "GL_PIXEL_TILE_GRID_WIDTH_SGIX"), # 0x8142 ("glGet", I, 1, "GL_PIXEL_TILE_GRID_HEIGHT_SGIX"), # 0x8143 ("glGet", I, 1, "GL_PIXEL_TILE_GRID_DEPTH_SGIX"), # 0x8144 ("glGet", I, 1, "GL_PIXEL_TILE_CACHE_SIZE_SGIX"), # 0x8145 ("", X, 1, "GL_FILTER4_SGIS"), # 0x8146 ("", X, 1, "GL_TEXTURE_FILTER4_SIZE_SGIS"), # 0x8147 ("glGet", I, 1, "GL_SPRITE_SGIX"), # 0x8148 ("glGet", I, 1, "GL_SPRITE_MODE_SGIX"), # 0x8149 ("glGet", F, 3, "GL_SPRITE_AXIS_SGIX"), # 0x814A ("glGet", F, 3, "GL_SPRITE_TRANSLATION_SGIX"), # 0x814B ("", X, 1, "GL_SPRITE_AXIAL_SGIX"), # 0x814C ("", X, 1, "GL_SPRITE_OBJECT_ALIGNED_SGIX"), # 0x814D ("", X, 1, "GL_SPRITE_EYE_ALIGNED_SGIX"), # 0x814E ("glGet", I, 1, "GL_TEXTURE_4D_BINDING_SGIS"), # 0x814F ("", X, 1, "GL_IGNORE_BORDER_HP"), # 0x8150 ("", X, 1, "GL_CONSTANT_BORDER"), # 0x8151 ("", X, 1, "GL_REPLICATE_BORDER"), # 0x8153 ("glGetConvolutionParameter", F, 4, "GL_CONVOLUTION_BORDER_COLOR"), # 0x8154 ("", X, 1, "GL_IMAGE_SCALE_X_HP"), # 0x8155 ("", X, 1, "GL_IMAGE_SCALE_Y_HP"), # 0x8156 ("", X, 1, "GL_IMAGE_TRANSLATE_X_HP"), # 0x8157 ("", X, 1, "GL_IMAGE_TRANSLATE_Y_HP"), # 0x8158 ("", X, 1, "GL_IMAGE_ROTATE_ANGLE_HP"), # 0x8159 ("", X, 1, "GL_IMAGE_ROTATE_ORIGIN_X_HP"), # 0x815A ("", X, 1, "GL_IMAGE_ROTATE_ORIGIN_Y_HP"), # 0x815B ("", X, 1, "GL_IMAGE_MAG_FILTER_HP"), # 0x815C ("", X, 1, "GL_IMAGE_MIN_FILTER_HP"), # 0x815D ("", X, 1, "GL_IMAGE_CUBIC_WEIGHT_HP"), # 0x815E ("", X, 1, "GL_CUBIC_HP"), # 0x815F ("", X, 1, "GL_AVERAGE_HP"), # 0x8160 ("", X, 1, "GL_IMAGE_TRANSFORM_2D_HP"), # 0x8161 ("", X, 1, "GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP"), # 0x8162 ("", X, 1, "GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP"), # 0x8163 ("_glGet", B, 1, "GL_OCCLUSION_TEST_HP"), # 0x8165 ("_glGet", B, 1, "GL_OCCLUSION_TEST_RESULT_HP"), # 0x8166 ("", X, 1, "GL_TEXTURE_LIGHTING_MODE_HP"), # 0x8167 ("", X, 1, "GL_TEXTURE_POST_SPECULAR_HP"), # 0x8168 ("", X, 1, "GL_TEXTURE_PRE_SPECULAR_HP"), # 0x8169 ("", X, 1, "GL_LINEAR_CLIPMAP_LINEAR_SGIX"), # 0x8170 ("glGetTexParameter", I, 2, "GL_TEXTURE_CLIPMAP_CENTER_SGIX"), # 0x8171 ("glGetTexParameter", F, 1, "GL_TEXTURE_CLIPMAP_FRAME_SGIX"), # 0x8172 ("glGetTexParameter", I, 2, "GL_TEXTURE_CLIPMAP_OFFSET_SGIX"), # 0x8173 ("glGetTexParameter", I, 3, "GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX"), # 0x8174 ("", X, 1, "GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX"), # 0x8175 ("", I, 1, "GL_TEXTURE_CLIPMAP_DEPTH_SGIX"), # 0x8176 ("glGet", I, 1, "GL_MAX_CLIPMAP_DEPTH_SGIX"), # 0x8177 ("glGet", I, 1, "GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX"), # 0x8178 ("glGetTexParameter", F, 1, "GL_POST_TEXTURE_FILTER_BIAS_SGIX"), # 0x8179 ("glGetTexParameter", F, 1, "GL_POST_TEXTURE_FILTER_SCALE_SGIX"), # 0x817A ("glGet", F, 2, "GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX"), # 0x817B ("glGet", F, 2, "GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX"), # 0x817C ("glGet", I, 1, "GL_REFERENCE_PLANE_SGIX"), # 0x817D ("glGet", F, 4, "GL_REFERENCE_PLANE_EQUATION_SGIX"), # 0x817E ("glGet", I, 1, "GL_IR_INSTRUMENT1_SGIX"), # 0x817F ("", X, 1, "GL_INSTRUMENT_BUFFER_POINTER_SGIX"), # 0x8180 ("glGet", I, 1, "GL_INSTRUMENT_MEASUREMENTS_SGIX"), # 0x8181 ("", X, 1, "GL_LIST_PRIORITY_SGIX"), # 0x8182 ("glGet", I, 1, "GL_CALLIGRAPHIC_FRAGMENT_SGIX"), # 0x8183 ("", X, 1, "GL_PIXEL_TEX_GEN_Q_CEILING_SGIX"), # 0x8184 ("", X, 1, "GL_PIXEL_TEX_GEN_Q_ROUND_SGIX"), # 0x8185 ("", X, 1, "GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX"), # 0x8186 ("", X, 1, "GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX"), # 0x8187 ("", X, 1, "GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX"), # 0x8188 ("", X, 1, "GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX"), # 0x8189 ("", X, 1, "GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX"), # 0x818A ("glGet", I, 1, "GL_FRAMEZOOM_SGIX"), # 0x818B ("glGet", I, 1, "GL_FRAMEZOOM_FACTOR_SGIX"), # 0x818C ("glGet", I, 1, "GL_MAX_FRAMEZOOM_FACTOR_SGIX"), # 0x818D ("glGetTexParameter", F, 1, "GL_TEXTURE_LOD_BIAS_S_SGIX"), # 0x818E ("glGetTexParameter", F, 1, "GL_TEXTURE_LOD_BIAS_T_SGIX"), # 0x818F ("glGetTexParameter", F, 1, "GL_TEXTURE_LOD_BIAS_R_SGIX"), # 0x8190 ("glGetTexParameter", B, 1, "GL_GENERATE_MIPMAP"), # 0x8191 ("glGet", E, 1, "GL_GENERATE_MIPMAP_HINT"), # 0x8192 ("", X, 1, "GL_GEOMETRY_DEFORMATION_SGIX"), # 0x8194 ("", X, 1, "GL_TEXTURE_DEFORMATION_SGIX"), # 0x8195 ("glGet", I, 1, "GL_DEFORMATIONS_MASK_SGIX"), # 0x8196 ("", X, 1, "GL_MAX_DEFORMATION_ORDER_SGIX"), # 0x8197 ("glGet", I, 1, "GL_FOG_OFFSET_SGIX"), # 0x8198 ("glGet", F, 4, "GL_FOG_OFFSET_VALUE_SGIX"), # 0x8199 ("glGetTexParameter", B, 1, "GL_TEXTURE_COMPARE_SGIX"), # 0x819A ("glGetTexParameter", E, 1, "GL_TEXTURE_COMPARE_OPERATOR_SGIX"), # 0x819B ("", X, 1, "GL_TEXTURE_LEQUAL_R_SGIX"), # 0x819C ("", X, 1, "GL_TEXTURE_GEQUAL_R_SGIX"), # 0x819D ("", X, 1, "GL_DEPTH_COMPONENT16"), # 0x81A5 ("", X, 1, "GL_DEPTH_COMPONENT24"), # 0x81A6 ("", X, 1, "GL_DEPTH_COMPONENT32"), # 0x81A7 ("glGet", I, 1, "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT"), # 0x81A8 ("glGet", I, 1, "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT"), # 0x81A9 ("glGet", B, 1, "GL_CULL_VERTEX_EXT"), # 0x81AA ("glGet", F, 4, "GL_CULL_VERTEX_EYE_POSITION_EXT"), # 0x81AB ("glGet", F, 4, "GL_CULL_VERTEX_OBJECT_POSITION_EXT"), # 0x81AC ("", X, 1, "GL_IUI_V2F_EXT"), # 0x81AD ("", X, 1, "GL_IUI_V3F_EXT"), # 0x81AE ("", X, 1, "GL_IUI_N3F_V2F_EXT"), # 0x81AF ("", X, 1, "GL_IUI_N3F_V3F_EXT"), # 0x81B0 ("", X, 1, "GL_T2F_IUI_V2F_EXT"), # 0x81B1 ("", X, 1, "GL_T2F_IUI_V3F_EXT"), # 0x81B2 ("", X, 1, "GL_T2F_IUI_N3F_V2F_EXT"), # 0x81B3 ("", X, 1, "GL_T2F_IUI_N3F_V3F_EXT"), # 0x81B4 ("", X, 1, "GL_INDEX_TEST_EXT"), # 0x81B5 ("", X, 1, "GL_INDEX_TEST_FUNC_EXT"), # 0x81B6 ("", X, 1, "GL_INDEX_TEST_REF_EXT"), # 0x81B7 ("", X, 1, "GL_INDEX_MATERIAL_EXT"), # 0x81B8 ("", X, 1, "GL_INDEX_MATERIAL_PARAMETER_EXT"), # 0x81B9 ("", X, 1, "GL_INDEX_MATERIAL_FACE_EXT"), # 0x81BA ("", X, 1, "GL_YCRCB_422_SGIX"), # 0x81BB ("", X, 1, "GL_YCRCB_444_SGIX"), # 0x81BC ("", X, 1, "GL_WRAP_BORDER_SUN"), # 0x81D4 ("", X, 1, "GL_UNPACK_CONSTANT_DATA_SUNX"), # 0x81D5 ("", X, 1, "GL_TEXTURE_CONSTANT_DATA_SUNX"), # 0x81D6 ("", X, 1, "GL_TRIANGLE_LIST_SUN"), # 0x81D7 ("", X, 1, "GL_REPLACEMENT_CODE_SUN"), # 0x81D8 ("", X, 1, "GL_GLOBAL_ALPHA_SUN"), # 0x81D9 ("", X, 1, "GL_GLOBAL_ALPHA_FACTOR_SUN"), # 0x81DA ("glGet", B, 4, "GL_TEXTURE_COLOR_WRITEMASK_SGIS"), # 0x81EF ("", X, 1, "GL_EYE_DISTANCE_TO_POINT_SGIS"), # 0x81F0 ("", X, 1, "GL_OBJECT_DISTANCE_TO_POINT_SGIS"), # 0x81F1 ("", X, 1, "GL_EYE_DISTANCE_TO_LINE_SGIS"), # 0x81F2 ("", X, 1, "GL_OBJECT_DISTANCE_TO_LINE_SGIS"), # 0x81F3 ("", X, 1, "GL_EYE_POINT_SGIS"), # 0x81F4 ("", X, 1, "GL_OBJECT_POINT_SGIS"), # 0x81F5 ("", X, 1, "GL_EYE_LINE_SGIS"), # 0x81F6 ("", X, 1, "GL_OBJECT_LINE_SGIS"), # 0x81F7 ("glGet", E, 1, "GL_LIGHT_MODEL_COLOR_CONTROL"), # 0x81F8 ("", X, 1, "GL_SINGLE_COLOR"), # 0x81F9 ("", X, 1, "GL_SEPARATE_SPECULAR_COLOR"), # 0x81FA ("", X, 1, "GL_SHARED_TEXTURE_PALETTE_EXT"), # 0x81FB ("", X, 1, "GL_FOG_SCALE_SGIX"), # 0x81FC ("", X, 1, "GL_FOG_SCALE_VALUE_SGIX"), # 0x81FD ("", X, 1, "GL_TEXT_FRAGMENT_SHADER_ATI"), # 0x8200 ("glGetFramebufferAttachmentParameter", E, 1, "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING"), # 0x8210 ("glGetFramebufferAttachmentParameter", E, 1, "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE"), # 0x8211 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE"), # 0x8212 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE"), # 0x8213 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE"), # 0x8214 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE"), # 0x8215 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE"), # 0x8216 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE"), # 0x8217 ("", X, 1, "GL_FRAMEBUFFER_DEFAULT"), # 0x8218 ("", X, 1, "GL_FRAMEBUFFER_UNDEFINED"), # 0x8219 ("", X, 1, "GL_DEPTH_STENCIL_ATTACHMENT"), # 0x821A ("glGet", I, 1, "GL_MAJOR_VERSION"), # 0x821B ("glGet", I, 1, "GL_MINOR_VERSION"), # 0x821C ("glGet", I, 1, "GL_NUM_EXTENSIONS"), # 0x821D ("glGet", I, 1, "GL_CONTEXT_FLAGS"), # 0x821E ("glGetBufferParameter", B, 1, "GL_BUFFER_IMMUTABLE_STORAGE"), # 0x821F ("glGetBufferParameter", I, 1, "GL_BUFFER_STORAGE_FLAGS"), # 0x8220 ("glGet", B, 1, "GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"), # 0x8221 ("", X, 1, "GL_INDEX"), # 0x8222 ("", X, 1, "GL_COMPRESSED_RED"), # 0x8225 ("", X, 1, "GL_COMPRESSED_RG"), # 0x8226 ("", X, 1, "GL_RG"), # 0x8227 ("", X, 1, "GL_RG_INTEGER"), # 0x8228 ("", X, 1, "GL_R8"), # 0x8229 ("", X, 1, "GL_R16"), # 0x822A ("", X, 1, "GL_RG8"), # 0x822B ("", X, 1, "GL_RG16"), # 0x822C ("", X, 1, "GL_R16F"), # 0x822D ("", X, 1, "GL_R32F"), # 0x822E ("", X, 1, "GL_RG16F"), # 0x822F ("", X, 1, "GL_RG32F"), # 0x8230 ("", X, 1, "GL_R8I"), # 0x8231 ("", X, 1, "GL_R8UI"), # 0x8232 ("", X, 1, "GL_R16I"), # 0x8233 ("", X, 1, "GL_R16UI"), # 0x8234 ("", X, 1, "GL_R32I"), # 0x8235 ("", X, 1, "GL_R32UI"), # 0x8236 ("", X, 1, "GL_RG8I"), # 0x8237 ("", X, 1, "GL_RG8UI"), # 0x8238 ("", X, 1, "GL_RG16I"), # 0x8239 ("", X, 1, "GL_RG16UI"), # 0x823A ("", X, 1, "GL_RG32I"), # 0x823B ("", X, 1, "GL_RG32UI"), # 0x823C ("", X, 1, "GL_SYNC_CL_EVENT_ARB"), # 0x8240 ("", X, 1, "GL_SYNC_CL_EVENT_COMPLETE_ARB"), # 0x8241 ("glGet", B, 1, "GL_DEBUG_OUTPUT_SYNCHRONOUS"), # 0x8242 ("glGet", I, 1, "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"), # 0x8243 ("_glGet", P, 1, "GL_DEBUG_CALLBACK_FUNCTION"), # 0x8244 ("_glGet", P, 1, "GL_DEBUG_CALLBACK_USER_PARAM"), # 0x8245 ("", X, 1, "GL_DEBUG_SOURCE_API"), # 0x8246 ("", X, 1, "GL_DEBUG_SOURCE_WINDOW_SYSTEM"), # 0x8247 ("", X, 1, "GL_DEBUG_SOURCE_SHADER_COMPILER"), # 0x8248 ("", X, 1, "GL_DEBUG_SOURCE_THIRD_PARTY"), # 0x8249 ("", X, 1, "GL_DEBUG_SOURCE_APPLICATION"), # 0x824A ("", X, 1, "GL_DEBUG_SOURCE_OTHER"), # 0x824B ("", X, 1, "GL_DEBUG_TYPE_ERROR"), # 0x824C ("", X, 1, "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"), # 0x824D ("", X, 1, "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"), # 0x824E ("", X, 1, "GL_DEBUG_TYPE_PORTABILITY"), # 0x824F ("", X, 1, "GL_DEBUG_TYPE_PERFORMANCE"), # 0x8250 ("", X, 1, "GL_DEBUG_TYPE_OTHER"), # 0x8251 ("", X, 1, "GL_LOSE_CONTEXT_ON_RESET_ARB"), # 0x8252 ("", X, 1, "GL_GUILTY_CONTEXT_RESET_ARB"), # 0x8253 ("", X, 1, "GL_INNOCENT_CONTEXT_RESET_ARB"), # 0x8254 ("", X, 1, "GL_UNKNOWN_CONTEXT_RESET_ARB"), # 0x8255 ("glGet", E, 1, "GL_RESET_NOTIFICATION_STRATEGY_ARB"), # 0x8256 ("glGetProgram", B, 1, "GL_PROGRAM_BINARY_RETRIEVABLE_HINT"), # 0x8257 ("", X, 1, "GL_PROGRAM_SEPARABLE"), # 0x8258 ("glGet", I, 1, "GL_ACTIVE_PROGRAM"), # 0x8259 ("glGet", I, 1, "GL_PROGRAM_PIPELINE_BINDING"), # 0x825A ("glGet", I, 1, "GL_MAX_VIEWPORTS"), # 0x825B ("glGet", I, 1, "GL_VIEWPORT_SUBPIXEL_BITS"), # 0x825C ("glGet", F, 2, "GL_VIEWPORT_BOUNDS_RANGE"), # 0x825D ("glGet", E, 1, "GL_LAYER_PROVOKING_VERTEX"), # 0x825E ("glGet", E, 1, "GL_VIEWPORT_INDEX_PROVOKING_VERTEX"), # 0x825F ("", X, 1, "GL_UNDEFINED_VERTEX"), # 0x8260 ("", X, 1, "GL_NO_RESET_NOTIFICATION_ARB"), # 0x8261 ("glGet", I, 1, "GL_MAX_COMPUTE_SHARED_MEMORY_SIZE"), # 0x8262 ("glGet", I, 1, "GL_MAX_COMPUTE_UNIFORM_COMPONENTS"), # 0x8263 ("glGet", I, 1, "GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS"), # 0x8264 ("glGet", I, 1, "GL_MAX_COMPUTE_ATOMIC_COUNTERS"), # 0x8265 ("glGet", I, 1, "GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS"), # 0x8266 ("", X, 1, "GL_COMPUTE_WORK_GROUP_SIZE"), # 0x8267 ("", X, 1, "GL_DEBUG_TYPE_MARKER"), # 0x8268 ("", X, 1, "GL_DEBUG_TYPE_PUSH_GROUP"), # 0x8269 ("", X, 1, "GL_DEBUG_TYPE_POP_GROUP"), # 0x826A ("", X, 1, "GL_DEBUG_SEVERITY_NOTIFICATION"), # 0x826B ("glGet", I, 1, "GL_MAX_DEBUG_GROUP_STACK_DEPTH"), # 0x826C ("glGet", I, 1, "GL_DEBUG_GROUP_STACK_DEPTH"), # 0x826D ("glGet", I, 1, "GL_MAX_UNIFORM_LOCATIONS"), # 0x826E ("", B, 1, "GL_INTERNALFORMAT_SUPPORTED"), # 0x826F ("", E, 1, "GL_INTERNALFORMAT_PREFERRED"), # 0x8270 ("", I, 1, "GL_INTERNALFORMAT_RED_SIZE"), # 0x8271 ("", I, 1, "GL_INTERNALFORMAT_GREEN_SIZE"), # 0x8272 ("", I, 1, "GL_INTERNALFORMAT_BLUE_SIZE"), # 0x8273 ("", I, 1, "GL_INTERNALFORMAT_ALPHA_SIZE"), # 0x8274 ("", I, 1, "GL_INTERNALFORMAT_DEPTH_SIZE"), # 0x8275 ("", I, 1, "GL_INTERNALFORMAT_STENCIL_SIZE"), # 0x8276 ("", I, 1, "GL_INTERNALFORMAT_SHARED_SIZE"), # 0x8277 ("", E, 1, "GL_INTERNALFORMAT_RED_TYPE"), # 0x8278 ("", E, 1, "GL_INTERNALFORMAT_GREEN_TYPE"), # 0x8279 ("", E, 1, "GL_INTERNALFORMAT_BLUE_TYPE"), # 0x827A ("", E, 1, "GL_INTERNALFORMAT_ALPHA_TYPE"), # 0x827B ("", E, 1, "GL_INTERNALFORMAT_DEPTH_TYPE"), # 0x827C ("", E, 1, "GL_INTERNALFORMAT_STENCIL_TYPE"), # 0x827D ("", I, 1, "GL_MAX_WIDTH"), # 0x827E ("", I, 1, "GL_MAX_HEIGHT"), # 0x827F ("", I, 1, "GL_MAX_DEPTH"), # 0x8280 ("", I, 1, "GL_MAX_LAYERS"), # 0x8281 ("", I, 1, "GL_MAX_COMBINED_DIMENSIONS"), # 0x8282 ("", B, 1, "GL_COLOR_COMPONENTS"), # 0x8283 ("", B, 1, "GL_DEPTH_COMPONENTS"), # 0x8284 ("", B, 1, "GL_STENCIL_COMPONENTS"), # 0x8285 ("", B, 1, "GL_COLOR_RENDERABLE"), # 0x8286 ("", B, 1, "GL_DEPTH_RENDERABLE"), # 0x8287 ("", B, 1, "GL_STENCIL_RENDERABLE"), # 0x8288 ("", E, 1, "GL_FRAMEBUFFER_RENDERABLE"), # 0x8289 ("", E, 1, "GL_FRAMEBUFFER_RENDERABLE_LAYERED"), # 0x828A ("", E, 1, "GL_FRAMEBUFFER_BLEND"), # 0x828B ("", E, 1, "GL_READ_PIXELS"), # 0x828C ("", E, 1, "GL_READ_PIXELS_FORMAT"), # 0x828D ("", E, 1, "GL_READ_PIXELS_TYPE"), # 0x828E ("", E, 1, "GL_TEXTURE_IMAGE_FORMAT"), # 0x828F ("", E, 1, "GL_TEXTURE_IMAGE_TYPE"), # 0x8290 ("", E, 1, "GL_GET_TEXTURE_IMAGE_FORMAT"), # 0x8291 ("", E, 1, "GL_GET_TEXTURE_IMAGE_TYPE"), # 0x8292 ("", B, 1, "GL_MIPMAP"), # 0x8293 ("", E, 1, "GL_MANUAL_GENERATE_MIPMAP"), # 0x8294 ("", E, 1, "GL_AUTO_GENERATE_MIPMAP"), # 0x8295 ("", E, 1, "GL_COLOR_ENCODING"), # 0x8296 ("", E, 1, "GL_SRGB_READ"), # 0x8297 ("", E, 1, "GL_SRGB_WRITE"), # 0x8298 ("", E, 1, "GL_SRGB_DECODE_ARB"), # 0x8299 ("", E, 1, "GL_FILTER"), # 0x829A ("", E, 1, "GL_VERTEX_TEXTURE"), # 0x829B ("", E, 1, "GL_TESS_CONTROL_TEXTURE"), # 0x829C ("", E, 1, "GL_TESS_EVALUATION_TEXTURE"), # 0x829D ("", E, 1, "GL_GEOMETRY_TEXTURE"), # 0x829E ("", E, 1, "GL_FRAGMENT_TEXTURE"), # 0x829F ("", E, 1, "GL_COMPUTE_TEXTURE"), # 0x82A0 ("", E, 1, "GL_TEXTURE_SHADOW"), # 0x82A1 ("", E, 1, "GL_TEXTURE_GATHER"), # 0x82A2 ("", E, 1, "GL_TEXTURE_GATHER_SHADOW"), # 0x82A3 ("", E, 1, "GL_SHADER_IMAGE_LOAD"), # 0x82A4 ("", E, 1, "GL_SHADER_IMAGE_STORE"), # 0x82A5 ("", E, 1, "GL_SHADER_IMAGE_ATOMIC"), # 0x82A6 ("", I, 1, "GL_IMAGE_TEXEL_SIZE"), # 0x82A7 ("", E, 1, "GL_IMAGE_COMPATIBILITY_CLASS"), # 0x82A8 ("", E, 1, "GL_IMAGE_PIXEL_FORMAT"), # 0x82A9 ("", E, 1, "GL_IMAGE_PIXEL_TYPE"), # 0x82AA ("", E, 1, "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST"), # 0x82AC ("", E, 1, "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST"), # 0x82AD ("", E, 1, "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE"), # 0x82AE ("", E, 1, "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE"), # 0x82AF ("", I, 1, "GL_TEXTURE_COMPRESSED_BLOCK_WIDTH"), # 0x82B1 ("", I, 1, "GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT"), # 0x82B2 ("", I, 1, "GL_TEXTURE_COMPRESSED_BLOCK_SIZE"), # 0x82B3 ("", E, 1, "GL_CLEAR_BUFFER"), # 0x82B4 ("", E, 1, "GL_TEXTURE_VIEW"), # 0x82B5 ("", E, 1, "GL_VIEW_COMPATIBILITY_CLASS"), # 0x82B6 ("", X, 1, "GL_FULL_SUPPORT"), # 0x82B7 ("", X, 1, "GL_CAVEAT_SUPPORT"), # 0x82B8 ("", X, 1, "GL_IMAGE_CLASS_4_X_32"), # 0x82B9 ("", X, 1, "GL_IMAGE_CLASS_2_X_32"), # 0x82BA ("", X, 1, "GL_IMAGE_CLASS_1_X_32"), # 0x82BB ("", X, 1, "GL_IMAGE_CLASS_4_X_16"), # 0x82BC ("", X, 1, "GL_IMAGE_CLASS_2_X_16"), # 0x82BD ("", X, 1, "GL_IMAGE_CLASS_1_X_16"), # 0x82BE ("", X, 1, "GL_IMAGE_CLASS_4_X_8"), # 0x82BF ("", X, 1, "GL_IMAGE_CLASS_2_X_8"), # 0x82C0 ("", X, 1, "GL_IMAGE_CLASS_1_X_8"), # 0x82C1 ("", X, 1, "GL_IMAGE_CLASS_11_11_10"), # 0x82C2 ("", X, 1, "GL_IMAGE_CLASS_10_10_10_2"), # 0x82C3 ("", X, 1, "GL_VIEW_CLASS_128_BITS"), # 0x82C4 ("", X, 1, "GL_VIEW_CLASS_96_BITS"), # 0x82C5 ("", X, 1, "GL_VIEW_CLASS_64_BITS"), # 0x82C6 ("", X, 1, "GL_VIEW_CLASS_48_BITS"), # 0x82C7 ("", X, 1, "GL_VIEW_CLASS_32_BITS"), # 0x82C8 ("", X, 1, "GL_VIEW_CLASS_24_BITS"), # 0x82C9 ("", X, 1, "GL_VIEW_CLASS_16_BITS"), # 0x82CA ("", X, 1, "GL_VIEW_CLASS_8_BITS"), # 0x82CB ("", X, 1, "GL_VIEW_CLASS_S3TC_DXT1_RGB"), # 0x82CC ("", X, 1, "GL_VIEW_CLASS_S3TC_DXT1_RGBA"), # 0x82CD ("", X, 1, "GL_VIEW_CLASS_S3TC_DXT3_RGBA"), # 0x82CE ("", X, 1, "GL_VIEW_CLASS_S3TC_DXT5_RGBA"), # 0x82CF ("", X, 1, "GL_VIEW_CLASS_RGTC1_RED"), # 0x82D0 ("", X, 1, "GL_VIEW_CLASS_RGTC2_RG"), # 0x82D1 ("", X, 1, "GL_VIEW_CLASS_BPTC_UNORM"), # 0x82D2 ("", X, 1, "GL_VIEW_CLASS_BPTC_FLOAT"), # 0x82D3 ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_BINDING"), # 0x82D4 ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_RELATIVE_OFFSET"), # 0x82D5 ("", I, 1, "GL_VERTEX_BINDING_DIVISOR"), # 0x82D6 ("", I, 1, "GL_VERTEX_BINDING_OFFSET"), # 0x82D7 ("", I, 1, "GL_VERTEX_BINDING_STRIDE"), # 0x82D8 ("glGet", I, 1, "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET"), # 0x82D9 ("glGet", I, 1, "GL_MAX_VERTEX_ATTRIB_BINDINGS"), # 0x82DA ("glGetTexParameter", I, 1, "GL_TEXTURE_VIEW_MIN_LEVEL"), # 0x82DB ("glGetTexParameter", I, 1, "GL_TEXTURE_VIEW_NUM_LEVELS"), # 0x82DC ("glGetTexParameter", I, 1, "GL_TEXTURE_VIEW_MIN_LAYER"), # 0x82DD ("glGetTexParameter", I, 1, "GL_TEXTURE_VIEW_NUM_LAYERS"), # 0x82DE ("glGetTexParameter", I, 1, "GL_TEXTURE_IMMUTABLE_LEVELS"), # 0x82DF ("", X, 1, "GL_BUFFER"), # 0x82E0 ("", X, 1, "GL_SHADER"), # 0x82E1 ("", X, 1, "GL_PROGRAM"), # 0x82E2 ("", X, 1, "GL_QUERY"), # 0x82E3 ("", X, 1, "GL_PROGRAM_PIPELINE"), # 0x82E4 ("", X, 1, "GL_MAX_VERTEX_ATTRIB_STRIDE"), # 0x82E5 ("", X, 1, "GL_SAMPLER"), # 0x82E6 ("", X, 1, "GL_DISPLAY_LIST"), # 0x82E7 ("glGet", I, 1, "GL_MAX_LABEL_LENGTH"), # 0x82E8 ("", X, 1, "GL_NUM_SHADING_LANGUAGE_VERSIONS"), # 0x82E9 ("", X, 1, "GL_QUERY_TARGET"), # 0x82EA #("", X, 1, "GL_TEXTURE_BINDING"), # 0x82EB ("", X, 1, "GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB"), # 0x82EC ("", X, 1, "GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB"), # 0x82ED ("", X, 1, "GL_VERTICES_SUBMITTED_ARB"), # 0x82EE ("", X, 1, "GL_PRIMITIVES_SUBMITTED_ARB"), # 0x82EF ("", X, 1, "GL_VERTEX_SHADER_INVOCATIONS_ARB"), # 0x82F0 ("", X, 1, "GL_TESS_CONTROL_SHADER_PATCHES_ARB"), # 0x82F1 ("", X, 1, "GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB"), # 0x82F2 ("", X, 1, "GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB"), # 0x82F3 ("", X, 1, "GL_FRAGMENT_SHADER_INVOCATIONS_ARB"), # 0x82F4 ("", X, 1, "GL_COMPUTE_SHADER_INVOCATIONS_ARB"), # 0x82F5 ("", X, 1, "GL_CLIPPING_INPUT_PRIMITIVES_ARB"), # 0x82F6 ("", X, 1, "GL_CLIPPING_OUTPUT_PRIMITIVES_ARB"), # 0x82F7 ("", X, 1, "GL_SPARSE_BUFFER_PAGE_SIZE_ARB"), # 0x82F8 ("glGet", I, 1, "GL_MAX_CULL_DISTANCES"), # 0x82F9 ("glGet", I, 1, "GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES"), # 0x82FA ("glGet", E, 1, "GL_CONTEXT_RELEASE_BEHAVIOR"), # 0x82FB ("glGet", E, 1, "GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH"), # 0x82FC ("", X, 1, "GL_DEPTH_PASS_INSTRUMENT_SGIX"), # 0x8310 ("", X, 1, "GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX"), # 0x8311 ("", X, 1, "GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX"), # 0x8312 #("", X, 1, "GL_FRAGMENTS_INSTRUMENT_SGIX"), # 0x8313 #("", X, 1, "GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX"), # 0x8314 #("", X, 1, "GL_FRAGMENTS_INSTRUMENT_MAX_SGIX"), # 0x8315 ("glGet", I, 1, "GL_CONVOLUTION_HINT_SGIX"), # 0x8316 ("", X, 1, "GL_YCRCB_SGIX"), # 0x8318 ("", X, 1, "GL_YCRCBA_SGIX"), # 0x8319 #("", X, 1, "GL_UNPACK_COMPRESSED_SIZE_SGIX"), # 0x831A #("", X, 1, "GL_PACK_MAX_COMPRESSED_SIZE_SGIX"), # 0x831B #("", X, 1, "GL_PACK_COMPRESSED_SIZE_SGIX"), # 0x831C #("", X, 1, "GL_SLIM8U_SGIX"), # 0x831D #("", X, 1, "GL_SLIM10U_SGIX"), # 0x831E #("", X, 1, "GL_SLIM12S_SGIX"), # 0x831F ("", X, 1, "GL_ALPHA_MIN_SGIX"), # 0x8320 ("", X, 1, "GL_ALPHA_MAX_SGIX"), # 0x8321 ("", X, 1, "GL_SCALEBIAS_HINT_SGIX"), # 0x8322 ("", X, 1, "GL_ASYNC_MARKER_SGIX"), # 0x8329 ("glGet", I, 1, "GL_PIXEL_TEX_GEN_MODE_SGIX"), # 0x832B ("", X, 1, "GL_ASYNC_HISTOGRAM_SGIX"), # 0x832C ("", X, 1, "GL_MAX_ASYNC_HISTOGRAM_SGIX"), # 0x832D ("", X, 1, "GL_PIXEL_TRANSFORM_2D_EXT"), # 0x8330 ("", X, 1, "GL_PIXEL_MAG_FILTER_EXT"), # 0x8331 ("", X, 1, "GL_PIXEL_MIN_FILTER_EXT"), # 0x8332 ("", X, 1, "GL_PIXEL_CUBIC_WEIGHT_EXT"), # 0x8333 ("", X, 1, "GL_CUBIC_EXT"), # 0x8334 ("", X, 1, "GL_AVERAGE_EXT"), # 0x8335 ("", X, 1, "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT"), # 0x8336 ("", X, 1, "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT"), # 0x8337 ("", X, 1, "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT"), # 0x8338 ("", X, 1, "GL_FRAGMENT_MATERIAL_EXT"), # 0x8349 ("", X, 1, "GL_FRAGMENT_NORMAL_EXT"), # 0x834A ("", X, 1, "GL_FRAGMENT_COLOR_EXT"), # 0x834C ("", X, 1, "GL_ATTENUATION_EXT"), # 0x834D ("", X, 1, "GL_SHADOW_ATTENUATION_EXT"), # 0x834E ("glGet", I, 1, "GL_TEXTURE_APPLICATION_MODE_EXT"), # 0x834F ("glGet", I, 1, "GL_TEXTURE_LIGHT_EXT"), # 0x8350 ("glGet", I, 1, "GL_TEXTURE_MATERIAL_FACE_EXT"), # 0x8351 ("glGet", I, 1, "GL_TEXTURE_MATERIAL_PARAMETER_EXT"), # 0x8352 ("glGet", I, 1, "GL_PIXEL_TEXTURE_SGIS"), # 0x8353 ("glGet", I, 1, "GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS"), # 0x8354 ("glGet", I, 1, "GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS"), # 0x8355 ("glGet", I, 1, "GL_PIXEL_GROUP_COLOR_SGIS"), # 0x8356 #("", X, 1, "GL_LINE_QUALITY_HINT_SGIX"), # 0x835B ("", X, 1, "GL_ASYNC_TEX_IMAGE_SGIX"), # 0x835C ("", X, 1, "GL_ASYNC_DRAW_PIXELS_SGIX"), # 0x835D ("", X, 1, "GL_ASYNC_READ_PIXELS_SGIX"), # 0x835E ("", X, 1, "GL_MAX_ASYNC_TEX_IMAGE_SGIX"), # 0x835F ("", X, 1, "GL_MAX_ASYNC_DRAW_PIXELS_SGIX"), # 0x8360 ("", X, 1, "GL_MAX_ASYNC_READ_PIXELS_SGIX"), # 0x8361 ("", X, 1, "GL_UNSIGNED_BYTE_2_3_3_REV"), # 0x8362 ("", X, 1, "GL_UNSIGNED_SHORT_5_6_5"), # 0x8363 ("", X, 1, "GL_UNSIGNED_SHORT_5_6_5_REV"), # 0x8364 ("", X, 1, "GL_UNSIGNED_SHORT_4_4_4_4_REV"), # 0x8365 ("", X, 1, "GL_UNSIGNED_SHORT_1_5_5_5_REV"), # 0x8366 ("", X, 1, "GL_UNSIGNED_INT_8_8_8_8_REV"), # 0x8367 ("", X, 1, "GL_UNSIGNED_INT_2_10_10_10_REV"), # 0x8368 ("glGetTexParameter", F, 1, "GL_TEXTURE_MAX_CLAMP_S_SGIX"), # 0x8369 ("glGetTexParameter", F, 1, "GL_TEXTURE_MAX_CLAMP_T_SGIX"), # 0x836A ("glGetTexParameter", F, 1, "GL_TEXTURE_MAX_CLAMP_R_SGIX"), # 0x836B ("", X, 1, "GL_MIRRORED_REPEAT"), # 0x8370 ("", X, 1, "GL_RGB_S3TC"), # 0x83A0 ("", X, 1, "GL_RGB4_S3TC"), # 0x83A1 ("", X, 1, "GL_RGBA_S3TC"), # 0x83A2 ("", X, 1, "GL_RGBA4_S3TC"), # 0x83A3 ("", X, 1, "GL_RGBA_DXT5_S3TC"), # 0x83A4 ("", X, 1, "GL_RGBA4_DXT5_S3TC"), # 0x83A5 ("", X, 1, "GL_VERTEX_PRECLIP_SGIX"), # 0x83EE ("", X, 1, "GL_VERTEX_PRECLIP_HINT_SGIX"), # 0x83EF ("", X, 1, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT"), # 0x83F0 ("", X, 1, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT"), # 0x83F1 ("", X, 1, "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT"), # 0x83F2 ("", X, 1, "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT"), # 0x83F3 ("", X, 1, "GL_PARALLEL_ARRAYS_INTEL"), # 0x83F4 ("", X, 1, "GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL"), # 0x83F5 ("", X, 1, "GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL"), # 0x83F6 ("", X, 1, "GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL"), # 0x83F7 ("", X, 1, "GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL"), # 0x83F8 ("", X, 1, "GL_PERFQUERY_DONOT_FLUSH_INTEL"), # 0x83F9 ("", X, 1, "GL_PERFQUERY_FLUSH_INTEL"), # 0x83FA ("", X, 1, "GL_PERFQUERY_WAIT_INTEL"), # 0x83FB ("glGetTexParameter", E, 1, "GL_TEXTURE_MEMORY_LAYOUT_INTEL"), # 0x83FF ("glGet", I, 1, "GL_FRAGMENT_LIGHTING_SGIX"), # 0x8400 ("glGet", I, 1, "GL_FRAGMENT_COLOR_MATERIAL_SGIX"), # 0x8401 ("glGet", I, 1, "GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX"), # 0x8402 ("glGet", I, 1, "GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX"), # 0x8403 ("glGet", I, 1, "GL_MAX_FRAGMENT_LIGHTS_SGIX"), # 0x8404 ("glGet", I, 1, "GL_MAX_ACTIVE_LIGHTS_SGIX"), # 0x8405 ("glGet", I, 1, "GL_CURRENT_RASTER_NORMAL_SGIX"), # 0x8406 ("glGet", I, 1, "GL_LIGHT_ENV_MODE_SGIX"), # 0x8407 ("glGet", I, 1, "GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX"), # 0x8408 ("glGet", I, 1, "GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX"), # 0x8409 ("glGet", F, 4, "GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX"), # 0x840A ("glGet", I, 1, "GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX"), # 0x840B ("glGet", I, 1, "GL_FRAGMENT_LIGHT0_SGIX"), # 0x840C ("", X, 1, "GL_FRAGMENT_LIGHT1_SGIX"), # 0x840D ("", X, 1, "GL_FRAGMENT_LIGHT2_SGIX"), # 0x840E ("", X, 1, "GL_FRAGMENT_LIGHT3_SGIX"), # 0x840F ("", X, 1, "GL_FRAGMENT_LIGHT4_SGIX"), # 0x8410 ("", X, 1, "GL_FRAGMENT_LIGHT5_SGIX"), # 0x8411 ("", X, 1, "GL_FRAGMENT_LIGHT6_SGIX"), # 0x8412 ("", X, 1, "GL_FRAGMENT_LIGHT7_SGIX"), # 0x8413 ("", X, 1, "GL_PACK_RESAMPLE_SGIX"), # 0x842C ("", X, 1, "GL_UNPACK_RESAMPLE_SGIX"), # 0x842D ("", X, 1, "GL_RESAMPLE_REPLICATE_SGIX"), # 0x842E ("", X, 1, "GL_RESAMPLE_ZERO_FILL_SGIX"), # 0x842F ("", X, 1, "GL_RESAMPLE_DECIMATE_SGIX"), # 0x8430 ("", X, 1, "GL_TANGENT_ARRAY_EXT"), # 0x8439 ("", X, 1, "GL_BINORMAL_ARRAY_EXT"), # 0x843A ("", X, 1, "GL_CURRENT_TANGENT_EXT"), # 0x843B ("", X, 1, "GL_CURRENT_BINORMAL_EXT"), # 0x843C ("glGet", E, 1, "GL_TANGENT_ARRAY_TYPE_EXT"), # 0x843E ("", X, 1, "GL_TANGENT_ARRAY_STRIDE_EXT"), # 0x843F ("glGet", E, 1, "GL_BINORMAL_ARRAY_TYPE_EXT"), # 0x8440 ("", X, 1, "GL_BINORMAL_ARRAY_STRIDE_EXT"), # 0x8441 ("glGet", P, 1, "GL_TANGENT_ARRAY_POINTER_EXT"), # 0x8442 ("glGet", P, 1, "GL_BINORMAL_ARRAY_POINTER_EXT"), # 0x8443 ("", X, 1, "GL_MAP1_TANGENT_EXT"), # 0x8444 ("", X, 1, "GL_MAP2_TANGENT_EXT"), # 0x8445 ("", X, 1, "GL_MAP1_BINORMAL_EXT"), # 0x8446 ("", X, 1, "GL_MAP2_BINORMAL_EXT"), # 0x8447 ("", X, 1, "GL_NEAREST_CLIPMAP_NEAREST_SGIX"), # 0x844D ("", X, 1, "GL_NEAREST_CLIPMAP_LINEAR_SGIX"), # 0x844E ("", X, 1, "GL_LINEAR_CLIPMAP_NEAREST_SGIX"), # 0x844F ("glGet", E, 1, "GL_FOG_COORD_SRC"), # 0x8450 ("", X, 1, "GL_FOG_COORD"), # 0x8451 ("", X, 1, "GL_FRAGMENT_DEPTH"), # 0x8452 ("glGet", F, 1, "GL_CURRENT_FOG_COORD"), # 0x8453 ("glGet", E, 1, "GL_FOG_COORD_ARRAY_TYPE"), # 0x8454 ("glGet", I, 1, "GL_FOG_COORD_ARRAY_STRIDE"), # 0x8455 ("", X, 1, "GL_FOG_COORD_ARRAY_POINTER"), # 0x8456 ("glGet", B, 1, "GL_FOG_COORD_ARRAY"), # 0x8457 ("glGet", B, 1, "GL_COLOR_SUM"), # 0x8458 ("glGet", F, 4, "GL_CURRENT_SECONDARY_COLOR"), # 0x8459 ("glGet", I, 1, "GL_SECONDARY_COLOR_ARRAY_SIZE"), # 0x845A ("glGet", E, 1, "GL_SECONDARY_COLOR_ARRAY_TYPE"), # 0x845B ("glGet", I, 1, "GL_SECONDARY_COLOR_ARRAY_STRIDE"), # 0x845C ("", X, 1, "GL_SECONDARY_COLOR_ARRAY_POINTER"), # 0x845D ("glGet", B, 1, "GL_SECONDARY_COLOR_ARRAY"), # 0x845E ("", X, 1, "GL_CURRENT_RASTER_SECONDARY_COLOR"), # 0x845F ("glGet", F, 2, "GL_ALIASED_POINT_SIZE_RANGE"), # 0x846D ("glGet", F, 2, "GL_ALIASED_LINE_WIDTH_RANGE"), # 0x846E ("", X, 1, "GL_SCREEN_COORDINATES_REND"), # 0x8490 ("", X, 1, "GL_INVERTED_SCREEN_W_REND"), # 0x8491 ("", X, 1, "GL_TEXTURE0"), # 0x84C0 ("", X, 1, "GL_TEXTURE1"), # 0x84C1 ("", X, 1, "GL_TEXTURE2"), # 0x84C2 ("", X, 1, "GL_TEXTURE3"), # 0x84C3 ("", X, 1, "GL_TEXTURE4"), # 0x84C4 ("", X, 1, "GL_TEXTURE5"), # 0x84C5 ("", X, 1, "GL_TEXTURE6"), # 0x84C6 ("", X, 1, "GL_TEXTURE7"), # 0x84C7 ("", X, 1, "GL_TEXTURE8"), # 0x84C8 ("", X, 1, "GL_TEXTURE9"), # 0x84C9 ("", X, 1, "GL_TEXTURE10"), # 0x84CA ("", X, 1, "GL_TEXTURE11"), # 0x84CB ("", X, 1, "GL_TEXTURE12"), # 0x84CC ("", X, 1, "GL_TEXTURE13"), # 0x84CD ("", X, 1, "GL_TEXTURE14"), # 0x84CE ("", X, 1, "GL_TEXTURE15"), # 0x84CF ("", X, 1, "GL_TEXTURE16"), # 0x84D0 ("", X, 1, "GL_TEXTURE17"), # 0x84D1 ("", X, 1, "GL_TEXTURE18"), # 0x84D2 ("", X, 1, "GL_TEXTURE19"), # 0x84D3 ("", X, 1, "GL_TEXTURE20"), # 0x84D4 ("", X, 1, "GL_TEXTURE21"), # 0x84D5 ("", X, 1, "GL_TEXTURE22"), # 0x84D6 ("", X, 1, "GL_TEXTURE23"), # 0x84D7 ("", X, 1, "GL_TEXTURE24"), # 0x84D8 ("", X, 1, "GL_TEXTURE25"), # 0x84D9 ("", X, 1, "GL_TEXTURE26"), # 0x84DA ("", X, 1, "GL_TEXTURE27"), # 0x84DB ("", X, 1, "GL_TEXTURE28"), # 0x84DC ("", X, 1, "GL_TEXTURE29"), # 0x84DD ("", X, 1, "GL_TEXTURE30"), # 0x84DE ("", X, 1, "GL_TEXTURE31"), # 0x84DF ("glGet", E, 1, "GL_ACTIVE_TEXTURE"), # 0x84E0 ("glGet", E, 1, "GL_CLIENT_ACTIVE_TEXTURE"), # 0x84E1 ("glGet", I, 1, "GL_MAX_TEXTURE_UNITS"), # 0x84E2 ("glGet", F, 16, "GL_TRANSPOSE_MODELVIEW_MATRIX"), # 0x84E3 ("glGet", F, 16, "GL_TRANSPOSE_PROJECTION_MATRIX"), # 0x84E4 ("glGet", F, 16, "GL_TRANSPOSE_TEXTURE_MATRIX"), # 0x84E5 ("glGet", F, 16, "GL_TRANSPOSE_COLOR_MATRIX"), # 0x84E6 ("", X, 1, "GL_SUBTRACT"), # 0x84E7 ("glGet", I, 1, "GL_MAX_RENDERBUFFER_SIZE"), # 0x84E8 ("", X, 1, "GL_COMPRESSED_ALPHA"), # 0x84E9 ("", X, 1, "GL_COMPRESSED_LUMINANCE"), # 0x84EA ("", X, 1, "GL_COMPRESSED_LUMINANCE_ALPHA"), # 0x84EB ("", X, 1, "GL_COMPRESSED_INTENSITY"), # 0x84EC ("", X, 1, "GL_COMPRESSED_RGB"), # 0x84ED ("", X, 1, "GL_COMPRESSED_RGBA"), # 0x84EE ("glGet", E, 1, "GL_TEXTURE_COMPRESSION_HINT"), # 0x84EF ("glGetActiveUniformBlock", B, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER"), # 0x84F0 ("glGetActiveUniformBlock", B, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER"), # 0x84F1 ("", X, 1, "GL_ALL_COMPLETED_NV"), # 0x84F2 ("", X, 1, "GL_FENCE_STATUS_NV"), # 0x84F3 ("", X, 1, "GL_FENCE_CONDITION_NV"), # 0x84F4 ("", B, 1, "GL_TEXTURE_RECTANGLE"), # 0x84F5 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_RECTANGLE"), # 0x84F6 ("", X, 1, "GL_PROXY_TEXTURE_RECTANGLE"), # 0x84F7 ("glGet", I, 1, "GL_MAX_RECTANGLE_TEXTURE_SIZE"), # 0x84F8 ("", X, 1, "GL_DEPTH_STENCIL"), # 0x84F9 ("", X, 1, "GL_UNSIGNED_INT_24_8"), # 0x84FA ("glGet", F, 1, "GL_MAX_TEXTURE_LOD_BIAS"), # 0x84FD ("glGetTexParameter,glGetSamplerParameter", F, 1, "GL_TEXTURE_MAX_ANISOTROPY_EXT"), # 0x84FE ("glGet", F, 1, "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT"), # 0x84FF ("", X, 1, "GL_TEXTURE_FILTER_CONTROL"), # 0x8500 ("glGetTexParameter,glGetSamplerParameter,glGetTexEnv", F, 1, "GL_TEXTURE_LOD_BIAS"), # 0x8501 ("", X, 1, "GL_MODELVIEW1_STACK_DEPTH_EXT"), # 0x8502 ("", X, 1, "GL_COMBINE4_NV"), # 0x8503 ("glGet", F, 1, "GL_MAX_SHININESS_NV"), # 0x8504 ("glGet", F, 1, "GL_MAX_SPOT_EXPONENT_NV"), # 0x8505 ("", X, 1, "GL_MODELVIEW1_MATRIX_EXT"), # 0x8506 ("", X, 1, "GL_INCR_WRAP"), # 0x8507 ("", X, 1, "GL_DECR_WRAP"), # 0x8508 ("", X, 1, "GL_VERTEX_WEIGHTING_EXT"), # 0x8509 ("", X, 1, "GL_MODELVIEW1_ARB"), # 0x850A ("", X, 1, "GL_CURRENT_VERTEX_WEIGHT_EXT"), # 0x850B ("", X, 1, "GL_VERTEX_WEIGHT_ARRAY_EXT"), # 0x850C ("", X, 1, "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT"), # 0x850D ("glGet", E, 1, "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT"), # 0x850E ("", X, 1, "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT"), # 0x850F ("", X, 1, "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT"), # 0x8510 ("", X, 1, "GL_NORMAL_MAP"), # 0x8511 ("", X, 1, "GL_REFLECTION_MAP"), # 0x8512 ("", B, 1, "GL_TEXTURE_CUBE_MAP"), # 0x8513 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_CUBE_MAP"), # 0x8514 ("", X, 1, "GL_TEXTURE_CUBE_MAP_POSITIVE_X"), # 0x8515 ("", X, 1, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X"), # 0x8516 ("", X, 1, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y"), # 0x8517 ("", X, 1, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"), # 0x8518 ("", X, 1, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z"), # 0x8519 ("", X, 1, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"), # 0x851A ("", X, 1, "GL_PROXY_TEXTURE_CUBE_MAP"), # 0x851B ("glGet", I, 1, "GL_MAX_CUBE_MAP_TEXTURE_SIZE"), # 0x851C ("_glGet", B, 1, "GL_VERTEX_ARRAY_RANGE_NV"), # 0x851D ("_glGet", I, 1, "GL_VERTEX_ARRAY_RANGE_LENGTH_NV"), # 0x851E ("_glGet", B, 1, "GL_VERTEX_ARRAY_RANGE_VALID_NV"), # 0x851F ("_glGet", I, 1, "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV"), # 0x8520 ("_glGet", P, 1, "GL_VERTEX_ARRAY_RANGE_POINTER_NV"), # 0x8521 ("", X, 1, "GL_REGISTER_COMBINERS_NV"), # 0x8522 ("", X, 1, "GL_VARIABLE_A_NV"), # 0x8523 ("", X, 1, "GL_VARIABLE_B_NV"), # 0x8524 ("", X, 1, "GL_VARIABLE_C_NV"), # 0x8525 ("", X, 1, "GL_VARIABLE_D_NV"), # 0x8526 ("", X, 1, "GL_VARIABLE_E_NV"), # 0x8527 ("", X, 1, "GL_VARIABLE_F_NV"), # 0x8528 ("", X, 1, "GL_VARIABLE_G_NV"), # 0x8529 ("glGet", F, 4, "GL_CONSTANT_COLOR0_NV"), # 0x852A ("glGet", F, 4, "GL_CONSTANT_COLOR1_NV"), # 0x852B ("", X, 1, "GL_PRIMARY_COLOR_NV"), # 0x852C ("", X, 1, "GL_SECONDARY_COLOR_NV"), # 0x852D ("", X, 1, "GL_SPARE0_NV"), # 0x852E ("", X, 1, "GL_SPARE1_NV"), # 0x852F ("", X, 1, "GL_DISCARD_NV"), # 0x8530 ("", X, 1, "GL_E_TIMES_F_NV"), # 0x8531 ("", X, 1, "GL_SPARE0_PLUS_SECONDARY_COLOR_NV"), # 0x8532 ("", X, 1, "GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV"), # 0x8533 ("glGet", E, 1, "GL_MULTISAMPLE_FILTER_HINT_NV"), # 0x8534 ("", X, 1, "GL_PER_STAGE_CONSTANTS_NV"), # 0x8535 ("", X, 1, "GL_UNSIGNED_IDENTITY_NV"), # 0x8536 ("", X, 1, "GL_UNSIGNED_INVERT_NV"), # 0x8537 ("", X, 1, "GL_EXPAND_NORMAL_NV"), # 0x8538 ("", X, 1, "GL_EXPAND_NEGATE_NV"), # 0x8539 ("", X, 1, "GL_HALF_BIAS_NORMAL_NV"), # 0x853A ("", X, 1, "GL_HALF_BIAS_NEGATE_NV"), # 0x853B ("", X, 1, "GL_SIGNED_IDENTITY_NV"), # 0x853C ("", X, 1, "GL_SIGNED_NEGATE_NV"), # 0x853D ("", X, 1, "GL_SCALE_BY_TWO_NV"), # 0x853E ("", X, 1, "GL_SCALE_BY_FOUR_NV"), # 0x853F ("", X, 1, "GL_SCALE_BY_ONE_HALF_NV"), # 0x8540 ("", X, 1, "GL_BIAS_BY_NEGATIVE_ONE_HALF_NV"), # 0x8541 ("", X, 1, "GL_COMBINER_INPUT_NV"), # 0x8542 ("", X, 1, "GL_COMBINER_MAPPING_NV"), # 0x8543 ("", X, 1, "GL_COMBINER_COMPONENT_USAGE_NV"), # 0x8544 ("", X, 1, "GL_COMBINER_AB_DOT_PRODUCT_NV"), # 0x8545 ("", X, 1, "GL_COMBINER_CD_DOT_PRODUCT_NV"), # 0x8546 ("", X, 1, "GL_COMBINER_MUX_SUM_NV"), # 0x8547 ("", X, 1, "GL_COMBINER_SCALE_NV"), # 0x8548 ("", X, 1, "GL_COMBINER_BIAS_NV"), # 0x8549 ("", X, 1, "GL_COMBINER_AB_OUTPUT_NV"), # 0x854A ("", X, 1, "GL_COMBINER_CD_OUTPUT_NV"), # 0x854B ("", X, 1, "GL_COMBINER_SUM_OUTPUT_NV"), # 0x854C ("glGet", I, 1, "GL_MAX_GENERAL_COMBINERS_NV"), # 0x854D ("glGet", I, 1, "GL_NUM_GENERAL_COMBINERS_NV"), # 0x854E ("glGet", B, 1, "GL_COLOR_SUM_CLAMP_NV"), # 0x854F ("", X, 1, "GL_COMBINER0_NV"), # 0x8550 ("", X, 1, "GL_COMBINER1_NV"), # 0x8551 ("", X, 1, "GL_COMBINER2_NV"), # 0x8552 ("", X, 1, "GL_COMBINER3_NV"), # 0x8553 ("", X, 1, "GL_COMBINER4_NV"), # 0x8554 ("", X, 1, "GL_COMBINER5_NV"), # 0x8555 ("", X, 1, "GL_COMBINER6_NV"), # 0x8556 ("", X, 1, "GL_COMBINER7_NV"), # 0x8557 ("glGet", B, 1, "GL_PRIMITIVE_RESTART_NV"), # 0x8558 ("glGet", I, 1, "GL_PRIMITIVE_RESTART_INDEX_NV"), # 0x8559 ("glGet", E, 1, "GL_FOG_DISTANCE_MODE_NV"), # 0x855A ("", X, 1, "GL_EYE_RADIAL_NV"), # 0x855B ("", X, 1, "GL_EYE_PLANE_ABSOLUTE_NV"), # 0x855C ("", X, 1, "GL_EMBOSS_LIGHT_NV"), # 0x855D ("", X, 1, "GL_EMBOSS_CONSTANT_NV"), # 0x855E ("", X, 1, "GL_EMBOSS_MAP_NV"), # 0x855F ("", X, 1, "GL_RED_MIN_CLAMP_INGR"), # 0x8560 ("", X, 1, "GL_GREEN_MIN_CLAMP_INGR"), # 0x8561 ("", X, 1, "GL_BLUE_MIN_CLAMP_INGR"), # 0x8562 ("", X, 1, "GL_ALPHA_MIN_CLAMP_INGR"), # 0x8563 ("", X, 1, "GL_RED_MAX_CLAMP_INGR"), # 0x8564 ("", X, 1, "GL_GREEN_MAX_CLAMP_INGR"), # 0x8565 ("", X, 1, "GL_BLUE_MAX_CLAMP_INGR"), # 0x8566 ("", X, 1, "GL_ALPHA_MAX_CLAMP_INGR"), # 0x8567 ("", X, 1, "GL_INTERLACE_READ_INGR"), # 0x8568 ("", X, 1, "GL_COMBINE"), # 0x8570 ("glGetTexEnv", E, 1, "GL_COMBINE_RGB"), # 0x8571 ("glGetTexEnv", E, 1, "GL_COMBINE_ALPHA"), # 0x8572 ("glGetTexEnv", F, 1, "GL_RGB_SCALE"), # 0x8573 ("", X, 1, "GL_ADD_SIGNED"), # 0x8574 ("", X, 1, "GL_INTERPOLATE"), # 0x8575 ("", X, 1, "GL_CONSTANT"), # 0x8576 ("", X, 1, "GL_PRIMARY_COLOR"), # 0x8577 ("", X, 1, "GL_PREVIOUS"), # 0x8578 ("glGetTexEnv", E, 1, "GL_SRC0_RGB"), # 0x8580 ("glGetTexEnv", E, 1, "GL_SRC1_RGB"), # 0x8581 ("glGetTexEnv", E, 1, "GL_SRC2_RGB"), # 0x8582 ("glGetTexEnv", E, 1, "GL_SOURCE3_RGB_NV"), # 0x8583 ("glGetTexEnv", E, 1, "GL_SRC0_ALPHA"), # 0x8588 ("glGetTexEnv", E, 1, "GL_SRC1_ALPHA"), # 0x8589 ("glGetTexEnv", E, 1, "GL_SRC2_ALPHA"), # 0x858A ("glGetTexEnv", E, 1, "GL_SOURCE3_ALPHA_NV"), # 0x858B ("glGetTexEnv", E, 1, "GL_OPERAND0_RGB"), # 0x8590 ("glGetTexEnv", E, 1, "GL_OPERAND1_RGB"), # 0x8591 ("glGetTexEnv", E, 1, "GL_OPERAND2_RGB"), # 0x8592 ("glGetTexEnv", E, 1, "GL_OPERAND3_RGB_NV"), # 0x8593 ("glGetTexEnv", E, 1, "GL_OPERAND0_ALPHA"), # 0x8598 ("glGetTexEnv", E, 1, "GL_OPERAND1_ALPHA"), # 0x8599 ("glGetTexEnv", E, 1, "GL_OPERAND2_ALPHA"), # 0x859A ("glGetTexEnv", E, 1, "GL_OPERAND3_ALPHA_NV"), # 0x859B ("", X, 1, "GL_PACK_SUBSAMPLE_RATE_SGIX"), # 0x85A0 ("", X, 1, "GL_UNPACK_SUBSAMPLE_RATE_SGIX"), # 0x85A1 ("", X, 1, "GL_PIXEL_SUBSAMPLE_4444_SGIX"), # 0x85A2 ("", X, 1, "GL_PIXEL_SUBSAMPLE_2424_SGIX"), # 0x85A3 ("", X, 1, "GL_PIXEL_SUBSAMPLE_4242_SGIX"), # 0x85A4 ("", X, 1, "GL_PERTURB_EXT"), # 0x85AE ("", X, 1, "GL_TEXTURE_NORMAL_EXT"), # 0x85AF ("", X, 1, "GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE"), # 0x85B0 ("", X, 1, "GL_TRANSFORM_HINT_APPLE"), # 0x85B1 ("", X, 1, "GL_UNPACK_CLIENT_STORAGE_APPLE"), # 0x85B2 ("", X, 1, "GL_BUFFER_OBJECT_APPLE"), # 0x85B3 ("", X, 1, "GL_STORAGE_CLIENT_APPLE"), # 0x85B4 ("glGet", I, 1, "GL_VERTEX_ARRAY_BINDING"), # 0x85B5 ("glGetTexParameter", I, 1, "GL_TEXTURE_RANGE_LENGTH_APPLE"), # 0x85B7 ("", P, 1, "GL_TEXTURE_RANGE_POINTER_APPLE"), # 0x85B8 ("", X, 1, "GL_YCBCR_422_APPLE"), # 0x85B9 ("", X, 1, "GL_UNSIGNED_SHORT_8_8_APPLE"), # 0x85BA ("", X, 1, "GL_UNSIGNED_SHORT_8_8_REV_APPLE"), # 0x85BB ("glGetTexParameter", E, 1, "GL_TEXTURE_STORAGE_HINT_APPLE"), # 0x85BC ("", X, 1, "GL_STORAGE_PRIVATE_APPLE"), # 0x85BD ("", X, 1, "GL_STORAGE_CACHED_APPLE"), # 0x85BE ("", X, 1, "GL_STORAGE_SHARED_APPLE"), # 0x85BF ("", X, 1, "GL_REPLACEMENT_CODE_ARRAY_SUN"), # 0x85C0 ("glGet", E, 1, "GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN"), # 0x85C1 ("", X, 1, "GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN"), # 0x85C2 ("", X, 1, "GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN"), # 0x85C3 ("", X, 1, "GL_R1UI_V3F_SUN"), # 0x85C4 ("", X, 1, "GL_R1UI_C4UB_V3F_SUN"), # 0x85C5 ("", X, 1, "GL_R1UI_C3F_V3F_SUN"), # 0x85C6 ("", X, 1, "GL_R1UI_N3F_V3F_SUN"), # 0x85C7 ("", X, 1, "GL_R1UI_C4F_N3F_V3F_SUN"), # 0x85C8 ("", X, 1, "GL_R1UI_T2F_V3F_SUN"), # 0x85C9 ("", X, 1, "GL_R1UI_T2F_N3F_V3F_SUN"), # 0x85CA ("", X, 1, "GL_R1UI_T2F_C4F_N3F_V3F_SUN"), # 0x85CB ("", X, 1, "GL_SLICE_ACCUM_SUN"), # 0x85CC ("", X, 1, "GL_QUAD_MESH_SUN"), # 0x8614 ("", X, 1, "GL_TRIANGLE_MESH_SUN"), # 0x8615 ("_glGet", B, 1, "GL_VERTEX_PROGRAM_ARB"), # 0x8620 ("", X, 1, "GL_VERTEX_STATE_PROGRAM_NV"), # 0x8621 ("glGetVertexAttrib", B, 1, "GL_VERTEX_ATTRIB_ARRAY_ENABLED"), # 0x8622 ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_ARRAY_SIZE"), # 0x8623 ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_ARRAY_STRIDE"), # 0x8624 ("glGetVertexAttrib", E, 1, "GL_VERTEX_ATTRIB_ARRAY_TYPE"), # 0x8625 ("glGetVertexAttrib", D, 4, "GL_CURRENT_VERTEX_ATTRIB"), # 0x8626 ("glGetProgramARB", I, 1, "GL_PROGRAM_LENGTH_ARB"), # 0x8627 ("", S, 1, "GL_PROGRAM_STRING_ARB"), # 0x8628 ("", X, 1, "GL_MODELVIEW_PROJECTION_NV"), # 0x8629 ("", X, 1, "GL_IDENTITY_NV"), # 0x862A ("", X, 1, "GL_INVERSE_NV"), # 0x862B ("", X, 1, "GL_TRANSPOSE_NV"), # 0x862C ("", X, 1, "GL_INVERSE_TRANSPOSE_NV"), # 0x862D ("glGet", I, 1, "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB"), # 0x862E ("glGet", I, 1, "GL_MAX_PROGRAM_MATRICES_ARB"), # 0x862F ("", X, 1, "GL_MATRIX0_NV"), # 0x8630 ("", X, 1, "GL_MATRIX1_NV"), # 0x8631 ("", X, 1, "GL_MATRIX2_NV"), # 0x8632 ("", X, 1, "GL_MATRIX3_NV"), # 0x8633 ("", X, 1, "GL_MATRIX4_NV"), # 0x8634 ("", X, 1, "GL_MATRIX5_NV"), # 0x8635 ("", X, 1, "GL_MATRIX6_NV"), # 0x8636 ("", X, 1, "GL_MATRIX7_NV"), # 0x8637 ("glGet", I, 1, "GL_CURRENT_MATRIX_STACK_DEPTH_ARB"), # 0x8640 ("glGet", F, 16, "GL_CURRENT_MATRIX_ARB"), # 0x8641 ("glGet", B, 1, "GL_PROGRAM_POINT_SIZE"), # 0x8642 ("glGet", B, 1, "GL_VERTEX_PROGRAM_TWO_SIDE"), # 0x8643 ("", X, 1, "GL_PROGRAM_PARAMETER_NV"), # 0x8644 ("glGetVertexAttrib", P, 1, "GL_VERTEX_ATTRIB_ARRAY_POINTER"), # 0x8645 ("glGetProgramNV", I, 1, "GL_PROGRAM_TARGET_NV"), # 0x8646 ("glGetProgramNV", B, 1, "GL_PROGRAM_RESIDENT_NV"), # 0x8647 ("", X, 1, "GL_TRACK_MATRIX_NV"), # 0x8648 ("", X, 1, "GL_TRACK_MATRIX_TRANSFORM_NV"), # 0x8649 ("glGet", I, 1, "GL_VERTEX_PROGRAM_BINDING_NV"), # 0x864A ("glGet", I, 1, "GL_PROGRAM_ERROR_POSITION_ARB"), # 0x864B ("", X, 1, "GL_OFFSET_TEXTURE_RECTANGLE_NV"), # 0x864C ("", X, 1, "GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV"), # 0x864D ("", X, 1, "GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV"), # 0x864E ("glGet", B, 1, "GL_DEPTH_CLAMP"), # 0x864F ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY0_NV"), # 0x8650 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY1_NV"), # 0x8651 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY2_NV"), # 0x8652 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY3_NV"), # 0x8653 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY4_NV"), # 0x8654 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY5_NV"), # 0x8655 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY6_NV"), # 0x8656 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY7_NV"), # 0x8657 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY8_NV"), # 0x8658 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY9_NV"), # 0x8659 ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY10_NV"), # 0x865A ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY11_NV"), # 0x865B ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY12_NV"), # 0x865C ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY13_NV"), # 0x865D ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY14_NV"), # 0x865E ("_glGet", B, 1, "GL_VERTEX_ATTRIB_ARRAY15_NV"), # 0x865F ("", X, 1, "GL_MAP1_VERTEX_ATTRIB0_4_NV"), # 0x8660 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB1_4_NV"), # 0x8661 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB2_4_NV"), # 0x8662 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB3_4_NV"), # 0x8663 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB4_4_NV"), # 0x8664 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB5_4_NV"), # 0x8665 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB6_4_NV"), # 0x8666 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB7_4_NV"), # 0x8667 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB8_4_NV"), # 0x8668 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB9_4_NV"), # 0x8669 ("", X, 1, "GL_MAP1_VERTEX_ATTRIB10_4_NV"), # 0x866A ("", X, 1, "GL_MAP1_VERTEX_ATTRIB11_4_NV"), # 0x866B ("", X, 1, "GL_MAP1_VERTEX_ATTRIB12_4_NV"), # 0x866C ("", X, 1, "GL_MAP1_VERTEX_ATTRIB13_4_NV"), # 0x866D ("", X, 1, "GL_MAP1_VERTEX_ATTRIB14_4_NV"), # 0x866E ("", X, 1, "GL_MAP1_VERTEX_ATTRIB15_4_NV"), # 0x866F ("", X, 1, "GL_MAP2_VERTEX_ATTRIB0_4_NV"), # 0x8670 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB1_4_NV"), # 0x8671 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB2_4_NV"), # 0x8672 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB3_4_NV"), # 0x8673 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB4_4_NV"), # 0x8674 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB5_4_NV"), # 0x8675 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB6_4_NV"), # 0x8676 ("glGetProgramARB", I, 1, "GL_PROGRAM_BINDING_ARB"), # 0x8677 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB8_4_NV"), # 0x8678 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB9_4_NV"), # 0x8679 ("", X, 1, "GL_MAP2_VERTEX_ATTRIB10_4_NV"), # 0x867A ("", X, 1, "GL_MAP2_VERTEX_ATTRIB11_4_NV"), # 0x867B ("", X, 1, "GL_MAP2_VERTEX_ATTRIB12_4_NV"), # 0x867C ("", X, 1, "GL_MAP2_VERTEX_ATTRIB13_4_NV"), # 0x867D ("", X, 1, "GL_MAP2_VERTEX_ATTRIB14_4_NV"), # 0x867E ("", X, 1, "GL_MAP2_VERTEX_ATTRIB15_4_NV"), # 0x867F ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_COMPRESSED_IMAGE_SIZE"), # 0x86A0 ("glGetTexLevelParameter", B, 1, "GL_TEXTURE_COMPRESSED"), # 0x86A1 ("glGet", I, 1, "GL_NUM_COMPRESSED_TEXTURE_FORMATS"), # 0x86A2 ("glGet", E, '_glGetInteger(GL_NUM_COMPRESSED_TEXTURE_FORMATS)', "GL_COMPRESSED_TEXTURE_FORMATS"), # 0x86A3 ("glGet", I, 1, "GL_MAX_VERTEX_UNITS_ARB"), # 0x86A4 ("glGet", I, 1, "GL_ACTIVE_VERTEX_UNITS_ARB"), # 0x86A5 ("glGet", B, 1, "GL_WEIGHT_SUM_UNITY_ARB"), # 0x86A6 ("glGet", B, 1, "GL_VERTEX_BLEND_ARB"), # 0x86A7 ("glGet", F, 1, "GL_CURRENT_WEIGHT_ARB"), # 0x86A8 ("glGet", E, 1, "GL_WEIGHT_ARRAY_TYPE_ARB"), # 0x86A9 ("glGet", I, 1, "GL_WEIGHT_ARRAY_STRIDE_ARB"), # 0x86AA ("glGet", I, 1, "GL_WEIGHT_ARRAY_SIZE_ARB"), # 0x86AB ("glGet", P, 1, "GL_WEIGHT_ARRAY_POINTER_ARB"), # 0x86AC ("glGet", B, 1, "GL_WEIGHT_ARRAY_ARB"), # 0x86AD ("", X, 1, "GL_DOT3_RGB"), # 0x86AE ("", X, 1, "GL_DOT3_RGBA"), # 0x86AF ("", X, 1, "GL_COMPRESSED_RGB_FXT1_3DFX"), # 0x86B0 ("", X, 1, "GL_COMPRESSED_RGBA_FXT1_3DFX"), # 0x86B1 ("", X, 1, "GL_MULTISAMPLE_3DFX"), # 0x86B2 ("", X, 1, "GL_SAMPLE_BUFFERS_3DFX"), # 0x86B3 ("", X, 1, "GL_SAMPLES_3DFX"), # 0x86B4 ("", X, 1, "GL_EVAL_2D_NV"), # 0x86C0 ("", X, 1, "GL_EVAL_TRIANGULAR_2D_NV"), # 0x86C1 ("", X, 1, "GL_MAP_TESSELLATION_NV"), # 0x86C2 ("", X, 1, "GL_MAP_ATTRIB_U_ORDER_NV"), # 0x86C3 ("", X, 1, "GL_MAP_ATTRIB_V_ORDER_NV"), # 0x86C4 ("", X, 1, "GL_EVAL_FRACTIONAL_TESSELLATION_NV"), # 0x86C5 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB0_NV"), # 0x86C6 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB1_NV"), # 0x86C7 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB2_NV"), # 0x86C8 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB3_NV"), # 0x86C9 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB4_NV"), # 0x86CA ("", X, 1, "GL_EVAL_VERTEX_ATTRIB5_NV"), # 0x86CB ("", X, 1, "GL_EVAL_VERTEX_ATTRIB6_NV"), # 0x86CC ("", X, 1, "GL_EVAL_VERTEX_ATTRIB7_NV"), # 0x86CD ("", X, 1, "GL_EVAL_VERTEX_ATTRIB8_NV"), # 0x86CE ("", X, 1, "GL_EVAL_VERTEX_ATTRIB9_NV"), # 0x86CF ("", X, 1, "GL_EVAL_VERTEX_ATTRIB10_NV"), # 0x86D0 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB11_NV"), # 0x86D1 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB12_NV"), # 0x86D2 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB13_NV"), # 0x86D3 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB14_NV"), # 0x86D4 ("", X, 1, "GL_EVAL_VERTEX_ATTRIB15_NV"), # 0x86D5 ("", X, 1, "GL_MAX_MAP_TESSELLATION_NV"), # 0x86D6 ("", X, 1, "GL_MAX_RATIONAL_EVAL_ORDER_NV"), # 0x86D7 ("", X, 1, "GL_MAX_PROGRAM_PATCH_ATTRIBS_NV"), # 0x86D8 ("glGetTexEnv", E, 1, "GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV"), # 0x86D9 ("", X, 1, "GL_UNSIGNED_INT_S8_S8_8_8_NV"), # 0x86DA ("", X, 1, "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV"), # 0x86DB ("", X, 1, "GL_DSDT_MAG_INTENSITY_NV"), # 0x86DC ("", X, 1, "GL_SHADER_CONSISTENT_NV"), # 0x86DD ("", X, 1, "GL_TEXTURE_SHADER_NV"), # 0x86DE ("glGetTexEnv", E, 1, "GL_SHADER_OPERATION_NV"), # 0x86DF ("glGetTexEnv", E, 4, "GL_CULL_MODES_NV"), # 0x86E0 ("glGetTexEnv", F, 4, "GL_OFFSET_TEXTURE_MATRIX_NV"), # 0x86E1 ("glGetTexEnv", F, 1, "GL_OFFSET_TEXTURE_SCALE_NV"), # 0x86E2 ("glGetTexEnv", F, 1, "GL_OFFSET_TEXTURE_BIAS_NV"), # 0x86E3 ("glGetTexEnv", E, 1, "GL_PREVIOUS_TEXTURE_INPUT_NV"), # 0x86E4 ("glGetTexEnv", F, 3, "GL_CONST_EYE_NV"), # 0x86E5 ("", X, 1, "GL_PASS_THROUGH_NV"), # 0x86E6 ("", X, 1, "GL_CULL_FRAGMENT_NV"), # 0x86E7 ("", X, 1, "GL_OFFSET_TEXTURE_2D_NV"), # 0x86E8 ("", X, 1, "GL_DEPENDENT_AR_TEXTURE_2D_NV"), # 0x86E9 ("", X, 1, "GL_DEPENDENT_GB_TEXTURE_2D_NV"), # 0x86EA ("", X, 1, "GL_SURFACE_STATE_NV"), # 0x86EB ("", X, 1, "GL_DOT_PRODUCT_NV"), # 0x86EC ("", X, 1, "GL_DOT_PRODUCT_DEPTH_REPLACE_NV"), # 0x86ED ("", X, 1, "GL_DOT_PRODUCT_TEXTURE_2D_NV"), # 0x86EE ("", X, 1, "GL_DOT_PRODUCT_TEXTURE_3D_NV"), # 0x86EF ("", X, 1, "GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV"), # 0x86F0 ("", X, 1, "GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV"), # 0x86F1 ("", X, 1, "GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV"), # 0x86F2 ("", X, 1, "GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV"), # 0x86F3 ("", X, 1, "GL_HILO_NV"), # 0x86F4 ("", X, 1, "GL_DSDT_NV"), # 0x86F5 ("", X, 1, "GL_DSDT_MAG_NV"), # 0x86F6 ("", X, 1, "GL_DSDT_MAG_VIB_NV"), # 0x86F7 ("", X, 1, "GL_HILO16_NV"), # 0x86F8 ("", X, 1, "GL_SIGNED_HILO_NV"), # 0x86F9 ("", X, 1, "GL_SIGNED_HILO16_NV"), # 0x86FA ("", X, 1, "GL_SIGNED_RGBA_NV"), # 0x86FB ("", X, 1, "GL_SIGNED_RGBA8_NV"), # 0x86FC ("", X, 1, "GL_SURFACE_REGISTERED_NV"), # 0x86FD ("", X, 1, "GL_SIGNED_RGB_NV"), # 0x86FE ("", X, 1, "GL_SIGNED_RGB8_NV"), # 0x86FF ("", X, 1, "GL_SURFACE_MAPPED_NV"), # 0x8700 ("", X, 1, "GL_SIGNED_LUMINANCE_NV"), # 0x8701 ("", X, 1, "GL_SIGNED_LUMINANCE8_NV"), # 0x8702 ("", X, 1, "GL_SIGNED_LUMINANCE_ALPHA_NV"), # 0x8703 ("", X, 1, "GL_SIGNED_LUMINANCE8_ALPHA8_NV"), # 0x8704 ("", X, 1, "GL_SIGNED_ALPHA_NV"), # 0x8705 ("", X, 1, "GL_SIGNED_ALPHA8_NV"), # 0x8706 ("", X, 1, "GL_SIGNED_INTENSITY_NV"), # 0x8707 ("", X, 1, "GL_SIGNED_INTENSITY8_NV"), # 0x8708 ("", X, 1, "GL_DSDT8_NV"), # 0x8709 ("", X, 1, "GL_DSDT8_MAG8_NV"), # 0x870A ("", X, 1, "GL_DSDT8_MAG8_INTENSITY8_NV"), # 0x870B ("", X, 1, "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV"), # 0x870C ("", X, 1, "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV"), # 0x870D ("", X, 1, "GL_HI_SCALE_NV"), # 0x870E ("", X, 1, "GL_LO_SCALE_NV"), # 0x870F ("", X, 1, "GL_DS_SCALE_NV"), # 0x8710 ("", X, 1, "GL_DT_SCALE_NV"), # 0x8711 ("", X, 1, "GL_MAGNITUDE_SCALE_NV"), # 0x8712 ("", X, 1, "GL_VIBRANCE_SCALE_NV"), # 0x8713 ("", X, 1, "GL_HI_BIAS_NV"), # 0x8714 ("", X, 1, "GL_LO_BIAS_NV"), # 0x8715 ("", X, 1, "GL_DS_BIAS_NV"), # 0x8716 ("", X, 1, "GL_DT_BIAS_NV"), # 0x8717 ("", X, 1, "GL_MAGNITUDE_BIAS_NV"), # 0x8718 ("", X, 1, "GL_VIBRANCE_BIAS_NV"), # 0x8719 ("", X, 1, "GL_TEXTURE_BORDER_VALUES_NV"), # 0x871A ("", X, 1, "GL_TEXTURE_HI_SIZE_NV"), # 0x871B ("", X, 1, "GL_TEXTURE_LO_SIZE_NV"), # 0x871C ("", X, 1, "GL_TEXTURE_DS_SIZE_NV"), # 0x871D ("", X, 1, "GL_TEXTURE_DT_SIZE_NV"), # 0x871E ("", X, 1, "GL_TEXTURE_MAG_SIZE_NV"), # 0x871F ("_glGet", F, 16, "GL_MODELVIEW2_ARB"), # 0x8722 ("_glGet", F, 16, "GL_MODELVIEW3_ARB"), # 0x8723 ("_glGet", F, 16, "GL_MODELVIEW4_ARB"), # 0x8724 ("_glGet", F, 16, "GL_MODELVIEW5_ARB"), # 0x8725 ("_glGet", F, 16, "GL_MODELVIEW6_ARB"), # 0x8726 ("_glGet", F, 16, "GL_MODELVIEW7_ARB"), # 0x8727 ("_glGet", F, 16, "GL_MODELVIEW8_ARB"), # 0x8728 ("_glGet", F, 16, "GL_MODELVIEW9_ARB"), # 0x8729 ("_glGet", F, 16, "GL_MODELVIEW10_ARB"), # 0x872A ("_glGet", F, 16, "GL_MODELVIEW11_ARB"), # 0x872B ("_glGet", F, 16, "GL_MODELVIEW12_ARB"), # 0x872C ("_glGet", F, 16, "GL_MODELVIEW13_ARB"), # 0x872D ("_glGet", F, 16, "GL_MODELVIEW14_ARB"), # 0x872E ("_glGet", F, 16, "GL_MODELVIEW15_ARB"), # 0x872F ("_glGet", F, 16, "GL_MODELVIEW16_ARB"), # 0x8730 ("_glGet", F, 16, "GL_MODELVIEW17_ARB"), # 0x8731 ("_glGet", F, 16, "GL_MODELVIEW18_ARB"), # 0x8732 ("_glGet", F, 16, "GL_MODELVIEW19_ARB"), # 0x8733 ("_glGet", F, 16, "GL_MODELVIEW20_ARB"), # 0x8734 ("_glGet", F, 16, "GL_MODELVIEW21_ARB"), # 0x8735 ("_glGet", F, 16, "GL_MODELVIEW22_ARB"), # 0x8736 ("_glGet", F, 16, "GL_MODELVIEW23_ARB"), # 0x8737 ("_glGet", F, 16, "GL_MODELVIEW24_ARB"), # 0x8738 ("_glGet", F, 16, "GL_MODELVIEW25_ARB"), # 0x8739 ("_glGet", F, 16, "GL_MODELVIEW26_ARB"), # 0x873A ("_glGet", F, 16, "GL_MODELVIEW27_ARB"), # 0x873B ("_glGet", F, 16, "GL_MODELVIEW28_ARB"), # 0x873C ("_glGet", F, 16, "GL_MODELVIEW29_ARB"), # 0x873D ("_glGet", F, 16, "GL_MODELVIEW30_ARB"), # 0x873E ("_glGet", F, 16, "GL_MODELVIEW31_ARB"), # 0x873F ("", X, 1, "GL_DOT3_RGB_EXT"), # 0x8740 # XXX: GL_DOT3_RGBA_EXT == GL_PROGRAM_BINARY_LENGTH, but you can't glGet GL_DOT3_RGBA_EXT ("glGetProgram", I, 1, "GL_PROGRAM_BINARY_LENGTH"), # 0x8741, ("", X, 1, "GL_MIRROR_CLAMP_ATI"), # 0x8742 ("", X, 1, "GL_MIRROR_CLAMP_TO_EDGE"), # 0x8743 ("", X, 1, "GL_MODULATE_ADD_ATI"), # 0x8744 ("", X, 1, "GL_MODULATE_SIGNED_ADD_ATI"), # 0x8745 ("", X, 1, "GL_MODULATE_SUBTRACT_ATI"), # 0x8746 ("", X, 1, "GL_SET_AMD"), # 0x874A ("", X, 1, "GL_REPLACE_VALUE_AMD"), # 0x874B ("", X, 1, "GL_STENCIL_OP_VALUE_AMD"), # 0x874C ("", X, 1, "GL_STENCIL_BACK_OP_VALUE_AMD"), # 0x874D ("glGetVertexAttrib", B, 1, "GL_VERTEX_ATTRIB_ARRAY_LONG"), # 0x874E ("", X, 1, "GL_OCCLUSION_QUERY_EVENT_MASK_AMD"), # 0x874F #("", X, 1, "GL_DEPTH_STENCIL_MESA"), # 0x8750 #("", X, 1, "GL_UNSIGNED_INT_24_8_MESA"), # 0x8751 #("", X, 1, "GL_UNSIGNED_INT_8_24_REV_MESA"), # 0x8752 #("", X, 1, "GL_UNSIGNED_SHORT_15_1_MESA"), # 0x8753 #("", X, 1, "GL_UNSIGNED_SHORT_1_15_REV_MESA"), # 0x8754 #("", X, 1, "GL_TRACE_MASK_MESA"), # 0x8755 #("", X, 1, "GL_TRACE_NAME_MESA"), # 0x8756 ("", X, 1, "GL_YCBCR_MESA"), # 0x8757 ("glGet", B, 1, "GL_PACK_INVERT_MESA"), # 0x8758 ("", X, 1, "GL_TEXTURE_1D_STACK_MESAX"), # 0x8759 ("", X, 1, "GL_TEXTURE_2D_STACK_MESAX"), # 0x875A ("", X, 1, "GL_PROXY_TEXTURE_1D_STACK_MESAX"), # 0x875B ("", X, 1, "GL_PROXY_TEXTURE_2D_STACK_MESAX"), # 0x875C ("", X, 1, "GL_TEXTURE_1D_STACK_BINDING_MESAX"), # 0x875D ("", X, 1, "GL_TEXTURE_2D_STACK_BINDING_MESAX"), # 0x875E ("", X, 1, "GL_STATIC_ATI"), # 0x8760 ("", X, 1, "GL_DYNAMIC_ATI"), # 0x8761 ("", X, 1, "GL_PRESERVE_ATI"), # 0x8762 ("", X, 1, "GL_DISCARD_ATI"), # 0x8763 ("glGetBufferParameter", I, 1, "GL_BUFFER_SIZE"), # 0x8764 ("glGetBufferParameter", E, 1, "GL_BUFFER_USAGE"), # 0x8765 ("", X, 1, "GL_ARRAY_OBJECT_BUFFER_ATI"), # 0x8766 ("", X, 1, "GL_ARRAY_OBJECT_OFFSET_ATI"), # 0x8767 ("", X, 1, "GL_ELEMENT_ARRAY_ATI"), # 0x8768 ("glGet", E, 1, "GL_ELEMENT_ARRAY_TYPE_ATI"), # 0x8769 ("", X, 1, "GL_ELEMENT_ARRAY_POINTER_ATI"), # 0x876A ("", X, 1, "GL_MAX_VERTEX_STREAMS_ATI"), # 0x876B ("", X, 1, "GL_VERTEX_STREAM0_ATI"), # 0x876C ("", X, 1, "GL_VERTEX_STREAM1_ATI"), # 0x876D ("", X, 1, "GL_VERTEX_STREAM2_ATI"), # 0x876E ("", X, 1, "GL_VERTEX_STREAM3_ATI"), # 0x876F ("", X, 1, "GL_VERTEX_STREAM4_ATI"), # 0x8770 ("", X, 1, "GL_VERTEX_STREAM5_ATI"), # 0x8771 ("", X, 1, "GL_VERTEX_STREAM6_ATI"), # 0x8772 ("", X, 1, "GL_VERTEX_STREAM7_ATI"), # 0x8773 ("", X, 1, "GL_VERTEX_SOURCE_ATI"), # 0x8774 ("", X, 1, "GL_BUMP_ROT_MATRIX_ATI"), # 0x8775 ("", X, 1, "GL_BUMP_ROT_MATRIX_SIZE_ATI"), # 0x8776 ("", X, 1, "GL_BUMP_NUM_TEX_UNITS_ATI"), # 0x8777 ("", X, 1, "GL_BUMP_TEX_UNITS_ATI"), # 0x8778 ("", X, 1, "GL_DUDV_ATI"), # 0x8779 ("", X, 1, "GL_DU8DV8_ATI"), # 0x877A ("", X, 1, "GL_BUMP_ENVMAP_ATI"), # 0x877B ("glGetTexEnv", E, 1, "GL_BUMP_TARGET_ATI"), # 0x877C ("", X, 1, "GL_VERTEX_SHADER_EXT"), # 0x8780 ("glGet", I, 1, "GL_VERTEX_SHADER_BINDING_EXT"), # 0x8781 ("", X, 1, "GL_OP_INDEX_EXT"), # 0x8782 ("", X, 1, "GL_OP_NEGATE_EXT"), # 0x8783 ("", X, 1, "GL_OP_DOT3_EXT"), # 0x8784 ("", X, 1, "GL_OP_DOT4_EXT"), # 0x8785 ("", X, 1, "GL_OP_MUL_EXT"), # 0x8786 ("", X, 1, "GL_OP_ADD_EXT"), # 0x8787 ("", X, 1, "GL_OP_MADD_EXT"), # 0x8788 ("", X, 1, "GL_OP_FRAC_EXT"), # 0x8789 ("", X, 1, "GL_OP_MAX_EXT"), # 0x878A ("", X, 1, "GL_OP_MIN_EXT"), # 0x878B ("", X, 1, "GL_OP_SET_GE_EXT"), # 0x878C ("", X, 1, "GL_OP_SET_LT_EXT"), # 0x878D ("", X, 1, "GL_OP_CLAMP_EXT"), # 0x878E ("", X, 1, "GL_OP_FLOOR_EXT"), # 0x878F ("", X, 1, "GL_OP_ROUND_EXT"), # 0x8790 ("", X, 1, "GL_OP_EXP_BASE_2_EXT"), # 0x8791 ("", X, 1, "GL_OP_LOG_BASE_2_EXT"), # 0x8792 ("", X, 1, "GL_OP_POWER_EXT"), # 0x8793 ("", X, 1, "GL_OP_RECIP_EXT"), # 0x8794 ("", X, 1, "GL_OP_RECIP_SQRT_EXT"), # 0x8795 ("", X, 1, "GL_OP_SUB_EXT"), # 0x8796 ("", X, 1, "GL_OP_CROSS_PRODUCT_EXT"), # 0x8797 ("", X, 1, "GL_OP_MULTIPLY_MATRIX_EXT"), # 0x8798 ("", X, 1, "GL_OP_MOV_EXT"), # 0x8799 ("", X, 1, "GL_OUTPUT_VERTEX_EXT"), # 0x879A ("", X, 1, "GL_OUTPUT_COLOR0_EXT"), # 0x879B ("", X, 1, "GL_OUTPUT_COLOR1_EXT"), # 0x879C ("", X, 1, "GL_OUTPUT_TEXTURE_COORD0_EXT"), # 0x879D ("", X, 1, "GL_OUTPUT_TEXTURE_COORD1_EXT"), # 0x879E ("", X, 1, "GL_OUTPUT_TEXTURE_COORD2_EXT"), # 0x879F ("", X, 1, "GL_OUTPUT_TEXTURE_COORD3_EXT"), # 0x87A0 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD4_EXT"), # 0x87A1 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD5_EXT"), # 0x87A2 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD6_EXT"), # 0x87A3 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD7_EXT"), # 0x87A4 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD8_EXT"), # 0x87A5 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD9_EXT"), # 0x87A6 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD10_EXT"), # 0x87A7 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD11_EXT"), # 0x87A8 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD12_EXT"), # 0x87A9 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD13_EXT"), # 0x87AA ("", X, 1, "GL_OUTPUT_TEXTURE_COORD14_EXT"), # 0x87AB ("", X, 1, "GL_OUTPUT_TEXTURE_COORD15_EXT"), # 0x87AC ("", X, 1, "GL_OUTPUT_TEXTURE_COORD16_EXT"), # 0x87AD ("", X, 1, "GL_OUTPUT_TEXTURE_COORD17_EXT"), # 0x87AE ("", X, 1, "GL_OUTPUT_TEXTURE_COORD18_EXT"), # 0x87AF ("", X, 1, "GL_OUTPUT_TEXTURE_COORD19_EXT"), # 0x87B0 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD20_EXT"), # 0x87B1 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD21_EXT"), # 0x87B2 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD22_EXT"), # 0x87B3 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD23_EXT"), # 0x87B4 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD24_EXT"), # 0x87B5 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD25_EXT"), # 0x87B6 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD26_EXT"), # 0x87B7 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD27_EXT"), # 0x87B8 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD28_EXT"), # 0x87B9 ("", X, 1, "GL_OUTPUT_TEXTURE_COORD29_EXT"), # 0x87BA ("", X, 1, "GL_OUTPUT_TEXTURE_COORD30_EXT"), # 0x87BB ("", X, 1, "GL_OUTPUT_TEXTURE_COORD31_EXT"), # 0x87BC ("", X, 1, "GL_OUTPUT_FOG_EXT"), # 0x87BD ("", X, 1, "GL_SCALAR_EXT"), # 0x87BE ("", X, 1, "GL_VECTOR_EXT"), # 0x87BF ("", X, 1, "GL_MATRIX_EXT"), # 0x87C0 ("", X, 1, "GL_VARIANT_EXT"), # 0x87C1 ("", X, 1, "GL_INVARIANT_EXT"), # 0x87C2 ("", X, 1, "GL_LOCAL_CONSTANT_EXT"), # 0x87C3 ("", X, 1, "GL_LOCAL_EXT"), # 0x87C4 ("", X, 1, "GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT"), # 0x87C5 ("", X, 1, "GL_MAX_VERTEX_SHADER_VARIANTS_EXT"), # 0x87C6 ("", X, 1, "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT"), # 0x87C7 ("", X, 1, "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT"), # 0x87C8 ("", X, 1, "GL_MAX_VERTEX_SHADER_LOCALS_EXT"), # 0x87C9 ("", X, 1, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT"), # 0x87CA ("", X, 1, "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT"), # 0x87CB ("", X, 1, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT"), # 0x87CC ("", X, 1, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT"), # 0x87CD ("", X, 1, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT"), # 0x87CE ("", X, 1, "GL_VERTEX_SHADER_INSTRUCTIONS_EXT"), # 0x87CF ("", X, 1, "GL_VERTEX_SHADER_VARIANTS_EXT"), # 0x87D0 ("", X, 1, "GL_VERTEX_SHADER_INVARIANTS_EXT"), # 0x87D1 ("", X, 1, "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT"), # 0x87D2 ("", X, 1, "GL_VERTEX_SHADER_LOCALS_EXT"), # 0x87D3 ("", X, 1, "GL_VERTEX_SHADER_OPTIMIZED_EXT"), # 0x87D4 ("", X, 1, "GL_X_EXT"), # 0x87D5 ("", X, 1, "GL_Y_EXT"), # 0x87D6 ("", X, 1, "GL_Z_EXT"), # 0x87D7 ("", X, 1, "GL_W_EXT"), # 0x87D8 ("", X, 1, "GL_NEGATIVE_X_EXT"), # 0x87D9 ("", X, 1, "GL_NEGATIVE_Y_EXT"), # 0x87DA ("", X, 1, "GL_NEGATIVE_Z_EXT"), # 0x87DB ("", X, 1, "GL_NEGATIVE_W_EXT"), # 0x87DC ("", X, 1, "GL_ZERO_EXT"), # 0x87DD ("", X, 1, "GL_ONE_EXT"), # 0x87DE ("", X, 1, "GL_NEGATIVE_ONE_EXT"), # 0x87DF ("", X, 1, "GL_NORMALIZED_RANGE_EXT"), # 0x87E0 ("", X, 1, "GL_FULL_RANGE_EXT"), # 0x87E1 ("", X, 1, "GL_CURRENT_VERTEX_EXT"), # 0x87E2 ("", X, 1, "GL_MVP_MATRIX_EXT"), # 0x87E3 ("", X, 1, "GL_VARIANT_VALUE_EXT"), # 0x87E4 ("", X, 1, "GL_VARIANT_DATATYPE_EXT"), # 0x87E5 ("", X, 1, "GL_VARIANT_ARRAY_STRIDE_EXT"), # 0x87E6 ("glGet", E, 1, "GL_VARIANT_ARRAY_TYPE_EXT"), # 0x87E7 ("", X, 1, "GL_VARIANT_ARRAY_EXT"), # 0x87E8 ("", X, 1, "GL_VARIANT_ARRAY_POINTER_EXT"), # 0x87E9 ("", X, 1, "GL_INVARIANT_VALUE_EXT"), # 0x87EA ("", X, 1, "GL_INVARIANT_DATATYPE_EXT"), # 0x87EB ("", X, 1, "GL_LOCAL_CONSTANT_VALUE_EXT"), # 0x87EC ("", X, 1, "GL_LOCAL_CONSTANT_DATATYPE_EXT"), # 0x87ED ("", X, 1, "GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD"), # 0x87EE ("", X, 1, "GL_PN_TRIANGLES_ATI"), # 0x87F0 ("", X, 1, "GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI"), # 0x87F1 ("", X, 1, "GL_PN_TRIANGLES_POINT_MODE_ATI"), # 0x87F2 ("", X, 1, "GL_PN_TRIANGLES_NORMAL_MODE_ATI"), # 0x87F3 ("", X, 1, "GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI"), # 0x87F4 ("", X, 1, "GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI"), # 0x87F5 ("", X, 1, "GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI"), # 0x87F6 ("", X, 1, "GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI"), # 0x87F7 ("", X, 1, "GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI"), # 0x87F8 ("", X, 1, "GL_3DC_X_AMD"), # 0x87F9 ("", X, 1, "GL_3DC_XY_AMD"), # 0x87FA ("glGet", I, 1, "GL_VBO_FREE_MEMORY_ATI"), # 0x87FB ("glGet", I, 1, "GL_TEXTURE_FREE_MEMORY_ATI"), # 0x87FC ("glGet", I, 1, "GL_RENDERBUFFER_FREE_MEMORY_ATI"), # 0x87FD ("glGet", I, 1, "GL_NUM_PROGRAM_BINARY_FORMATS"), # 0x87FE ("glGet", E, "_glGetInteger(GL_NUM_PROGRAM_BINARY_FORMATS)", "GL_PROGRAM_BINARY_FORMATS"), # 0x87FF ("glGet", E, 1, "GL_STENCIL_BACK_FUNC"), # 0x8800 ("glGet", E, 1, "GL_STENCIL_BACK_FAIL"), # 0x8801 ("glGet", E, 1, "GL_STENCIL_BACK_PASS_DEPTH_FAIL"), # 0x8802 ("glGet", E, 1, "GL_STENCIL_BACK_PASS_DEPTH_PASS"), # 0x8803 ("_glGet", B, 1, "GL_FRAGMENT_PROGRAM_ARB"), # 0x8804 ("glGetProgramARB", I, 1, "GL_PROGRAM_ALU_INSTRUCTIONS_ARB"), # 0x8805 ("glGetProgramARB", I, 1, "GL_PROGRAM_TEX_INSTRUCTIONS_ARB"), # 0x8806 ("glGetProgramARB", I, 1, "GL_PROGRAM_TEX_INDIRECTIONS_ARB"), # 0x8807 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB"), # 0x8808 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB"), # 0x8809 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB"), # 0x880A ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB"), # 0x880B ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB"), # 0x880C ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB"), # 0x880D ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB"), # 0x880E ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB"), # 0x880F ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB"), # 0x8810 ("", X, 1, "GL_RGBA32F"), # 0x8814 ("", X, 1, "GL_RGB32F"), # 0x8815 ("", X, 1, "GL_ALPHA32F_ARB"), # 0x8816 ("", X, 1, "GL_INTENSITY32F_ARB"), # 0x8817 ("", X, 1, "GL_LUMINANCE32F_ARB"), # 0x8818 ("", X, 1, "GL_LUMINANCE_ALPHA32F_ARB"), # 0x8819 ("", X, 1, "GL_RGBA16F"), # 0x881A ("", X, 1, "GL_RGB16F"), # 0x881B ("", X, 1, "GL_ALPHA16F_ARB"), # 0x881C ("", X, 1, "GL_INTENSITY16F_ARB"), # 0x881D ("", X, 1, "GL_LUMINANCE16F_ARB"), # 0x881E ("", X, 1, "GL_LUMINANCE_ALPHA16F_ARB"), # 0x881F ("glGet", B, 1, "GL_RGBA_FLOAT_MODE_ARB"), # 0x8820 ("glGet", I, 1, "GL_MAX_DRAW_BUFFERS"), # 0x8824 ("glGet", E, 1, "GL_DRAW_BUFFER0"), # 0x8825 ("glGet", E, 1, "GL_DRAW_BUFFER1"), # 0x8826 ("glGet", E, 1, "GL_DRAW_BUFFER2"), # 0x8827 ("glGet", E, 1, "GL_DRAW_BUFFER3"), # 0x8828 ("glGet", E, 1, "GL_DRAW_BUFFER4"), # 0x8829 ("glGet", E, 1, "GL_DRAW_BUFFER5"), # 0x882A ("glGet", E, 1, "GL_DRAW_BUFFER6"), # 0x882B ("glGet", E, 1, "GL_DRAW_BUFFER7"), # 0x882C ("glGet", E, 1, "GL_DRAW_BUFFER8"), # 0x882D ("glGet", E, 1, "GL_DRAW_BUFFER9"), # 0x882E ("glGet", E, 1, "GL_DRAW_BUFFER10"), # 0x882F ("glGet", E, 1, "GL_DRAW_BUFFER11"), # 0x8830 ("glGet", E, 1, "GL_DRAW_BUFFER12"), # 0x8831 ("glGet", E, 1, "GL_DRAW_BUFFER13"), # 0x8832 ("glGet", E, 1, "GL_DRAW_BUFFER14"), # 0x8833 ("glGet", E, 1, "GL_DRAW_BUFFER15"), # 0x8834 ("", X, 1, "GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI"), # 0x8835 #("", X, 1, "GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI"), # 0x8837 ("glGet", E, 1, "GL_BLEND_EQUATION_ALPHA"), # 0x883D ("", X, 1, "GL_SUBSAMPLE_DISTANCE_AMD"), # 0x883F ("glGet", B, 1, "GL_MATRIX_PALETTE_ARB"), # 0x8840 ("glGet", I, 1, "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB"), # 0x8841 ("glGet", I, 1, "GL_MAX_PALETTE_MATRICES_ARB"), # 0x8842 ("glGet", I, 1, "GL_CURRENT_PALETTE_MATRIX_ARB"), # 0x8843 ("glGet", B, 1, "GL_MATRIX_INDEX_ARRAY_ARB"), # 0x8844 ("glGet", I, 1, "GL_CURRENT_MATRIX_INDEX_ARB"), # 0x8845 ("glGet", I, 1, "GL_MATRIX_INDEX_ARRAY_SIZE_ARB"), # 0x8846 ("glGet", E, 1, "GL_MATRIX_INDEX_ARRAY_TYPE_ARB"), # 0x8847 ("glGet", I, 1, "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB"), # 0x8848 ("glGet", P, 1, "GL_MATRIX_INDEX_ARRAY_POINTER_ARB"), # 0x8849 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_DEPTH_SIZE"), # 0x884A ("glGetTexParameter", E, 1, "GL_DEPTH_TEXTURE_MODE"), # 0x884B ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_COMPARE_MODE"), # 0x884C ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_COMPARE_FUNC"), # 0x884D ("", X, 1, "GL_COMPARE_REF_TO_TEXTURE"), # 0x884E ("glGet,glGetTexParameter,glGetSamplerParameter", B, 1, "GL_TEXTURE_CUBE_MAP_SEAMLESS"), # 0x884F ("", X, 1, "GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV"), # 0x8850 ("", X, 1, "GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV"), # 0x8851 ("", X, 1, "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV"), # 0x8852 ("", X, 1, "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV"), # 0x8853 ("", X, 1, "GL_OFFSET_HILO_TEXTURE_2D_NV"), # 0x8854 ("", X, 1, "GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV"), # 0x8855 ("", X, 1, "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV"), # 0x8856 ("", X, 1, "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV"), # 0x8857 ("", X, 1, "GL_DEPENDENT_HILO_TEXTURE_2D_NV"), # 0x8858 ("", X, 1, "GL_DEPENDENT_RGB_TEXTURE_3D_NV"), # 0x8859 ("", X, 1, "GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV"), # 0x885A ("", X, 1, "GL_DOT_PRODUCT_PASS_THROUGH_NV"), # 0x885B ("", X, 1, "GL_DOT_PRODUCT_TEXTURE_1D_NV"), # 0x885C ("", X, 1, "GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV"), # 0x885D ("", X, 1, "GL_HILO8_NV"), # 0x885E ("", X, 1, "GL_SIGNED_HILO8_NV"), # 0x885F ("", X, 1, "GL_FORCE_BLUE_TO_ONE_NV"), # 0x8860 ("glGet", B, 1, "GL_POINT_SPRITE"), # 0x8861 ("glGetTexEnv", B, 1, "GL_COORD_REPLACE"), # 0x8862 ("glGet", E, 1, "GL_POINT_SPRITE_R_MODE_NV"), # 0x8863 ("glGetQuery", I, 1, "GL_QUERY_COUNTER_BITS"), # 0x8864 ("glGetQuery", I, 1, "GL_CURRENT_QUERY"), # 0x8865 ("glGetQueryObject", I, 1, "GL_QUERY_RESULT"), # 0x8866 ("glGetQueryObject", B, 1, "GL_QUERY_RESULT_AVAILABLE"), # 0x8867 ("glGet", I, 1, "GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV"), # 0x8868 ("glGet", I, 1, "GL_MAX_VERTEX_ATTRIBS"), # 0x8869 ("glGetVertexAttrib", B, 1, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"), # 0x886A ("glGet", I, 1, "GL_MAX_TESS_CONTROL_INPUT_COMPONENTS"), # 0x886C ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS"), # 0x886D ("", X, 1, "GL_DEPTH_STENCIL_TO_RGBA_NV"), # 0x886E ("", X, 1, "GL_DEPTH_STENCIL_TO_BGRA_NV"), # 0x886F ("", X, 1, "GL_FRAGMENT_PROGRAM_NV"), # 0x8870 ("glGet", I, 1, "GL_MAX_TEXTURE_COORDS"), # 0x8871 ("glGet", I, 1, "GL_MAX_TEXTURE_IMAGE_UNITS"), # 0x8872 ("glGet", I, 1, "GL_FRAGMENT_PROGRAM_BINDING_NV"), # 0x8873 ("glGet", S, 1, "GL_PROGRAM_ERROR_STRING_ARB"), # 0x8874 ("", X, 1, "GL_PROGRAM_FORMAT_ASCII_ARB"), # 0x8875 ("glGetProgramARB", E, 1, "GL_PROGRAM_FORMAT_ARB"), # 0x8876 ("", X, 1, "GL_WRITE_PIXEL_DATA_RANGE_NV"), # 0x8878 ("", X, 1, "GL_READ_PIXEL_DATA_RANGE_NV"), # 0x8879 ("", X, 1, "GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV"), # 0x887A ("", X, 1, "GL_READ_PIXEL_DATA_RANGE_LENGTH_NV"), # 0x887B ("", X, 1, "GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV"), # 0x887C ("", X, 1, "GL_READ_PIXEL_DATA_RANGE_POINTER_NV"), # 0x887D ("", X, 1, "GL_GEOMETRY_SHADER_INVOCATIONS"), # 0x887F ("", X, 1, "GL_FLOAT_R_NV"), # 0x8880 ("", X, 1, "GL_FLOAT_RG_NV"), # 0x8881 ("", X, 1, "GL_FLOAT_RGB_NV"), # 0x8882 ("", X, 1, "GL_FLOAT_RGBA_NV"), # 0x8883 ("", X, 1, "GL_FLOAT_R16_NV"), # 0x8884 ("", X, 1, "GL_FLOAT_R32_NV"), # 0x8885 ("", X, 1, "GL_FLOAT_RG16_NV"), # 0x8886 ("", X, 1, "GL_FLOAT_RG32_NV"), # 0x8887 ("", X, 1, "GL_FLOAT_RGB16_NV"), # 0x8888 ("", X, 1, "GL_FLOAT_RGB32_NV"), # 0x8889 ("", X, 1, "GL_FLOAT_RGBA16_NV"), # 0x888A ("", X, 1, "GL_FLOAT_RGBA32_NV"), # 0x888B ("", X, 1, "GL_TEXTURE_FLOAT_COMPONENTS_NV"), # 0x888C ("", X, 1, "GL_FLOAT_CLEAR_COLOR_VALUE_NV"), # 0x888D ("", X, 1, "GL_FLOAT_RGBA_MODE_NV"), # 0x888E ("glGetTexParameter", E, 1, "GL_TEXTURE_UNSIGNED_REMAP_MODE_NV"), # 0x888F ("glGet", B, 1, "GL_DEPTH_BOUNDS_TEST_EXT"), # 0x8890 ("glGet", F, 2, "GL_DEPTH_BOUNDS_EXT"), # 0x8891 ("", X, 1, "GL_ARRAY_BUFFER"), # 0x8892 ("", X, 1, "GL_ELEMENT_ARRAY_BUFFER"), # 0x8893 ("glGet", I, 1, "GL_ARRAY_BUFFER_BINDING"), # 0x8894 ("glGet", I, 1, "GL_ELEMENT_ARRAY_BUFFER_BINDING"), # 0x8895 ("glGet", I, 1, "GL_VERTEX_ARRAY_BUFFER_BINDING"), # 0x8896 ("glGet", I, 1, "GL_NORMAL_ARRAY_BUFFER_BINDING"), # 0x8897 ("glGet", I, 1, "GL_COLOR_ARRAY_BUFFER_BINDING"), # 0x8898 ("glGet", I, 1, "GL_INDEX_ARRAY_BUFFER_BINDING"), # 0x8899 ("glGet", I, 1, "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"), # 0x889A ("glGet", I, 1, "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING"), # 0x889B ("glGet", I, 1, "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING"), # 0x889C ("glGet", I, 1, "GL_FOG_COORD_ARRAY_BUFFER_BINDING"), # 0x889D ("glGet", I, 1, "GL_WEIGHT_ARRAY_BUFFER_BINDING"), # 0x889E ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"), # 0x889F ("glGetProgramARB", I, 1, "GL_PROGRAM_INSTRUCTIONS_ARB"), # 0x88A0 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_INSTRUCTIONS_ARB"), # 0x88A1 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB"), # 0x88A2 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB"), # 0x88A3 ("glGetProgramARB", I, 1, "GL_PROGRAM_TEMPORARIES_ARB"), # 0x88A4 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_TEMPORARIES_ARB"), # 0x88A5 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_TEMPORARIES_ARB"), # 0x88A6 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB"), # 0x88A7 ("glGetProgramARB", I, 1, "GL_PROGRAM_PARAMETERS_ARB"), # 0x88A8 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_PARAMETERS_ARB"), # 0x88A9 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_PARAMETERS_ARB"), # 0x88AA ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB"), # 0x88AB ("glGetProgramARB", I, 1, "GL_PROGRAM_ATTRIBS_ARB"), # 0x88AC ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_ATTRIBS_ARB"), # 0x88AD ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_ATTRIBS_ARB"), # 0x88AE ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB"), # 0x88AF ("glGetProgramARB", I, 1, "GL_PROGRAM_ADDRESS_REGISTERS_ARB"), # 0x88B0 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB"), # 0x88B1 ("glGetProgramARB", I, 1, "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB"), # 0x88B2 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB"), # 0x88B3 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB"), # 0x88B4 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB"), # 0x88B5 ("glGetProgramARB", B, 1, "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB"), # 0x88B6 ("glGet", F, 16, "GL_TRANSPOSE_CURRENT_MATRIX_ARB"), # 0x88B7 ("", X, 1, "GL_READ_ONLY"), # 0x88B8 ("", X, 1, "GL_WRITE_ONLY"), # 0x88B9 ("", X, 1, "GL_READ_WRITE"), # 0x88BA ("glGetBufferParameter", E, 1, "GL_BUFFER_ACCESS"), # 0x88BB ("glGetBufferParameter", B, 1, "GL_BUFFER_MAPPED"), # 0x88BC ("glGetBufferParameter", P, 1, "GL_BUFFER_MAP_POINTER"), # 0x88BD ("", X, 1, "GL_WRITE_DISCARD_NV"), # 0x88BE ("", X, 1, "GL_TIME_ELAPSED"), # 0x88BF ("", X, 1, "GL_MATRIX0_ARB"), # 0x88C0 ("", X, 1, "GL_MATRIX1_ARB"), # 0x88C1 ("", X, 1, "GL_MATRIX2_ARB"), # 0x88C2 ("", X, 1, "GL_MATRIX3_ARB"), # 0x88C3 ("", X, 1, "GL_MATRIX4_ARB"), # 0x88C4 ("", X, 1, "GL_MATRIX5_ARB"), # 0x88C5 ("", X, 1, "GL_MATRIX6_ARB"), # 0x88C6 ("", X, 1, "GL_MATRIX7_ARB"), # 0x88C7 ("", X, 1, "GL_MATRIX8_ARB"), # 0x88C8 ("", X, 1, "GL_MATRIX9_ARB"), # 0x88C9 ("", X, 1, "GL_MATRIX10_ARB"), # 0x88CA ("", X, 1, "GL_MATRIX11_ARB"), # 0x88CB ("", X, 1, "GL_MATRIX12_ARB"), # 0x88CC ("", X, 1, "GL_MATRIX13_ARB"), # 0x88CD ("", X, 1, "GL_MATRIX14_ARB"), # 0x88CE ("", X, 1, "GL_MATRIX15_ARB"), # 0x88CF ("", X, 1, "GL_MATRIX16_ARB"), # 0x88D0 ("", X, 1, "GL_MATRIX17_ARB"), # 0x88D1 ("", X, 1, "GL_MATRIX18_ARB"), # 0x88D2 ("", X, 1, "GL_MATRIX19_ARB"), # 0x88D3 ("", X, 1, "GL_MATRIX20_ARB"), # 0x88D4 ("", X, 1, "GL_MATRIX21_ARB"), # 0x88D5 ("", X, 1, "GL_MATRIX22_ARB"), # 0x88D6 ("", X, 1, "GL_MATRIX23_ARB"), # 0x88D7 ("", X, 1, "GL_MATRIX24_ARB"), # 0x88D8 ("", X, 1, "GL_MATRIX25_ARB"), # 0x88D9 ("", X, 1, "GL_MATRIX26_ARB"), # 0x88DA ("", X, 1, "GL_MATRIX27_ARB"), # 0x88DB ("", X, 1, "GL_MATRIX28_ARB"), # 0x88DC ("", X, 1, "GL_MATRIX29_ARB"), # 0x88DD ("", X, 1, "GL_MATRIX30_ARB"), # 0x88DE ("", X, 1, "GL_MATRIX31_ARB"), # 0x88DF ("", X, 1, "GL_STREAM_DRAW"), # 0x88E0 ("", X, 1, "GL_STREAM_READ"), # 0x88E1 ("", X, 1, "GL_STREAM_COPY"), # 0x88E2 ("", X, 1, "GL_STATIC_DRAW"), # 0x88E4 ("", X, 1, "GL_STATIC_READ"), # 0x88E5 ("", X, 1, "GL_STATIC_COPY"), # 0x88E6 ("", X, 1, "GL_DYNAMIC_DRAW"), # 0x88E8 ("", X, 1, "GL_DYNAMIC_READ"), # 0x88E9 ("", X, 1, "GL_DYNAMIC_COPY"), # 0x88EA ("", X, 1, "GL_PIXEL_PACK_BUFFER"), # 0x88EB ("", X, 1, "GL_PIXEL_UNPACK_BUFFER"), # 0x88EC ("glGet", I, 1, "GL_PIXEL_PACK_BUFFER_BINDING"), # 0x88ED ("", X, 1, "GL_ETC1_SRGB8_NV"), # 0x88EE ("glGet", I, 1, "GL_PIXEL_UNPACK_BUFFER_BINDING"), # 0x88EF ("", X, 1, "GL_DEPTH24_STENCIL8"), # 0x88F0 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_STENCIL_SIZE"), # 0x88F1 ("", X, 1, "GL_STENCIL_TAG_BITS_EXT"), # 0x88F2 ("", X, 1, "GL_STENCIL_CLEAR_TAG_VALUE_EXT"), # 0x88F3 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV"), # 0x88F4 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_CALL_DEPTH_NV"), # 0x88F5 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_IF_DEPTH_NV"), # 0x88F6 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_LOOP_DEPTH_NV"), # 0x88F7 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_LOOP_COUNT_NV"), # 0x88F8 ("", X, 1, "GL_SRC1_COLOR"), # 0x88F9 ("", X, 1, "GL_ONE_MINUS_SRC1_COLOR"), # 0x88FA ("", X, 1, "GL_ONE_MINUS_SRC1_ALPHA"), # 0x88FB ("glGet", I, 1, "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS"), # 0x88FC ("glGetVertexAttrib", B, 1, "GL_VERTEX_ATTRIB_ARRAY_INTEGER"), # 0x88FD ("glGetVertexAttrib", I, 1, "GL_VERTEX_ATTRIB_ARRAY_DIVISOR"), # 0x88FE ("glGet", I, 1, "GL_MAX_ARRAY_TEXTURE_LAYERS"), # 0x88FF ("glGet", F, 1, "GL_MIN_PROGRAM_TEXEL_OFFSET"), # 0x8904 ("glGet", F, 1, "GL_MAX_PROGRAM_TEXEL_OFFSET"), # 0x8905 ("", X, 1, "GL_PROGRAM_ATTRIB_COMPONENTS_NV"), # 0x8906 ("", X, 1, "GL_PROGRAM_RESULT_COMPONENTS_NV"), # 0x8907 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV"), # 0x8908 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_RESULT_COMPONENTS_NV"), # 0x8909 ("glGet", B, 1, "GL_STENCIL_TEST_TWO_SIDE_EXT"), # 0x8910 ("glGet", E, 1, "GL_ACTIVE_STENCIL_FACE_EXT"), # 0x8911 ("", X, 1, "GL_MIRROR_CLAMP_TO_BORDER_EXT"), # 0x8912 ("", X, 1, "GL_SAMPLES_PASSED"), # 0x8914 ("glGetProgram", I, 1, "GL_GEOMETRY_VERTICES_OUT"), # 0x8916 ("glGetProgram", E, 1, "GL_GEOMETRY_INPUT_TYPE"), # 0x8917 ("glGetProgram", E, 1, "GL_GEOMETRY_OUTPUT_TYPE"), # 0x8918 ("_glGet", I, 1, "GL_SAMPLER_BINDING"), # 0x8919 ("glGet", E, 1, "GL_CLAMP_VERTEX_COLOR"), # 0x891A ("glGet", E, 1, "GL_CLAMP_FRAGMENT_COLOR"), # 0x891B ("glGet", E, 1, "GL_CLAMP_READ_COLOR"), # 0x891C ("", X, 1, "GL_FIXED_ONLY"), # 0x891D ("", X, 1, "GL_TESS_CONTROL_PROGRAM_NV"), # 0x891E ("", X, 1, "GL_TESS_EVALUATION_PROGRAM_NV"), # 0x891F ("", X, 1, "GL_FRAGMENT_SHADER_ATI"), # 0x8920 ("", X, 1, "GL_REG_0_ATI"), # 0x8921 ("", X, 1, "GL_REG_1_ATI"), # 0x8922 ("", X, 1, "GL_REG_2_ATI"), # 0x8923 ("", X, 1, "GL_REG_3_ATI"), # 0x8924 ("", X, 1, "GL_REG_4_ATI"), # 0x8925 ("", X, 1, "GL_REG_5_ATI"), # 0x8926 ("", X, 1, "GL_REG_6_ATI"), # 0x8927 ("", X, 1, "GL_REG_7_ATI"), # 0x8928 ("", X, 1, "GL_REG_8_ATI"), # 0x8929 ("", X, 1, "GL_REG_9_ATI"), # 0x892A ("", X, 1, "GL_REG_10_ATI"), # 0x892B ("", X, 1, "GL_REG_11_ATI"), # 0x892C ("", X, 1, "GL_REG_12_ATI"), # 0x892D ("", X, 1, "GL_REG_13_ATI"), # 0x892E ("", X, 1, "GL_REG_14_ATI"), # 0x892F ("", X, 1, "GL_REG_15_ATI"), # 0x8930 ("", X, 1, "GL_REG_16_ATI"), # 0x8931 ("", X, 1, "GL_REG_17_ATI"), # 0x8932 ("", X, 1, "GL_REG_18_ATI"), # 0x8933 ("", X, 1, "GL_REG_19_ATI"), # 0x8934 ("", X, 1, "GL_REG_20_ATI"), # 0x8935 ("", X, 1, "GL_REG_21_ATI"), # 0x8936 ("", X, 1, "GL_REG_22_ATI"), # 0x8937 ("", X, 1, "GL_REG_23_ATI"), # 0x8938 ("", X, 1, "GL_REG_24_ATI"), # 0x8939 ("", X, 1, "GL_REG_25_ATI"), # 0x893A ("", X, 1, "GL_REG_26_ATI"), # 0x893B ("", X, 1, "GL_REG_27_ATI"), # 0x893C ("", X, 1, "GL_REG_28_ATI"), # 0x893D ("", X, 1, "GL_REG_29_ATI"), # 0x893E ("", X, 1, "GL_REG_30_ATI"), # 0x893F ("", X, 1, "GL_REG_31_ATI"), # 0x8940 ("", X, 1, "GL_CON_0_ATI"), # 0x8941 ("", X, 1, "GL_CON_1_ATI"), # 0x8942 ("", X, 1, "GL_CON_2_ATI"), # 0x8943 ("", X, 1, "GL_CON_3_ATI"), # 0x8944 ("", X, 1, "GL_CON_4_ATI"), # 0x8945 ("", X, 1, "GL_CON_5_ATI"), # 0x8946 ("", X, 1, "GL_CON_6_ATI"), # 0x8947 ("", X, 1, "GL_CON_7_ATI"), # 0x8948 ("", X, 1, "GL_CON_8_ATI"), # 0x8949 ("", X, 1, "GL_CON_9_ATI"), # 0x894A ("", X, 1, "GL_CON_10_ATI"), # 0x894B ("", X, 1, "GL_CON_11_ATI"), # 0x894C ("", X, 1, "GL_CON_12_ATI"), # 0x894D ("", X, 1, "GL_CON_13_ATI"), # 0x894E ("", X, 1, "GL_CON_14_ATI"), # 0x894F ("", X, 1, "GL_CON_15_ATI"), # 0x8950 ("", X, 1, "GL_CON_16_ATI"), # 0x8951 ("", X, 1, "GL_CON_17_ATI"), # 0x8952 ("", X, 1, "GL_CON_18_ATI"), # 0x8953 ("", X, 1, "GL_CON_19_ATI"), # 0x8954 ("", X, 1, "GL_CON_20_ATI"), # 0x8955 ("", X, 1, "GL_CON_21_ATI"), # 0x8956 ("", X, 1, "GL_CON_22_ATI"), # 0x8957 ("", X, 1, "GL_CON_23_ATI"), # 0x8958 ("", X, 1, "GL_CON_24_ATI"), # 0x8959 ("", X, 1, "GL_CON_25_ATI"), # 0x895A ("", X, 1, "GL_CON_26_ATI"), # 0x895B ("", X, 1, "GL_CON_27_ATI"), # 0x895C ("", X, 1, "GL_CON_28_ATI"), # 0x895D ("", X, 1, "GL_CON_29_ATI"), # 0x895E ("", X, 1, "GL_CON_30_ATI"), # 0x895F ("", X, 1, "GL_CON_31_ATI"), # 0x8960 ("", X, 1, "GL_MOV_ATI"), # 0x8961 ("", X, 1, "GL_ADD_ATI"), # 0x8963 ("", X, 1, "GL_MUL_ATI"), # 0x8964 ("", X, 1, "GL_SUB_ATI"), # 0x8965 ("", X, 1, "GL_DOT3_ATI"), # 0x8966 ("", X, 1, "GL_DOT4_ATI"), # 0x8967 ("", X, 1, "GL_MAD_ATI"), # 0x8968 ("", X, 1, "GL_LERP_ATI"), # 0x8969 ("", X, 1, "GL_CND_ATI"), # 0x896A ("", X, 1, "GL_CND0_ATI"), # 0x896B ("", X, 1, "GL_DOT2_ADD_ATI"), # 0x896C ("", X, 1, "GL_SECONDARY_INTERPOLATOR_ATI"), # 0x896D ("", X, 1, "GL_NUM_FRAGMENT_REGISTERS_ATI"), # 0x896E ("", X, 1, "GL_NUM_FRAGMENT_CONSTANTS_ATI"), # 0x896F ("", X, 1, "GL_NUM_PASSES_ATI"), # 0x8970 ("", X, 1, "GL_NUM_INSTRUCTIONS_PER_PASS_ATI"), # 0x8971 ("", X, 1, "GL_NUM_INSTRUCTIONS_TOTAL_ATI"), # 0x8972 ("", X, 1, "GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI"), # 0x8973 ("", X, 1, "GL_NUM_LOOPBACK_COMPONENTS_ATI"), # 0x8974 ("", X, 1, "GL_COLOR_ALPHA_PAIRING_ATI"), # 0x8975 ("", X, 1, "GL_SWIZZLE_STR_ATI"), # 0x8976 ("", X, 1, "GL_SWIZZLE_STQ_ATI"), # 0x8977 ("", X, 1, "GL_SWIZZLE_STR_DR_ATI"), # 0x8978 ("", X, 1, "GL_SWIZZLE_STQ_DQ_ATI"), # 0x8979 ("", X, 1, "GL_SWIZZLE_STRQ_ATI"), # 0x897A ("", X, 1, "GL_SWIZZLE_STRQ_DQ_ATI"), # 0x897B ("", X, 1, "GL_INTERLACE_OML"), # 0x8980 ("", X, 1, "GL_INTERLACE_READ_OML"), # 0x8981 ("", X, 1, "GL_FORMAT_SUBSAMPLE_24_24_OML"), # 0x8982 ("", X, 1, "GL_FORMAT_SUBSAMPLE_244_244_OML"), # 0x8983 ("", X, 1, "GL_PACK_RESAMPLE_OML"), # 0x8984 ("", X, 1, "GL_UNPACK_RESAMPLE_OML"), # 0x8985 ("", X, 1, "GL_RESAMPLE_REPLICATE_OML"), # 0x8986 ("", X, 1, "GL_RESAMPLE_ZERO_FILL_OML"), # 0x8987 ("", X, 1, "GL_RESAMPLE_AVERAGE_OML"), # 0x8988 ("", X, 1, "GL_RESAMPLE_DECIMATE_OML"), # 0x8989 ("", X, 1, "GL_POINT_SIZE_ARRAY_TYPE_OES"), # 0x898A ("", X, 1, "GL_POINT_SIZE_ARRAY_STRIDE_OES"), # 0x898B ("", X, 1, "GL_POINT_SIZE_ARRAY_POINTER_OES"), # 0x898C ("", X, 1, "GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"), # 0x898D ("", X, 1, "GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"), # 0x898E ("", X, 1, "GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"), # 0x898F ("", X, 1, "GL_VERTEX_ATTRIB_MAP1_APPLE"), # 0x8A00 ("", X, 1, "GL_VERTEX_ATTRIB_MAP2_APPLE"), # 0x8A01 ("", X, 1, "GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE"), # 0x8A02 ("", X, 1, "GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE"), # 0x8A03 ("", X, 1, "GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE"), # 0x8A04 ("", X, 1, "GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE"), # 0x8A05 ("", X, 1, "GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE"), # 0x8A06 ("", X, 1, "GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE"), # 0x8A07 ("", X, 1, "GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE"), # 0x8A08 ("", X, 1, "GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE"), # 0x8A09 ("", X, 1, "GL_DRAW_PIXELS_APPLE"), # 0x8A0A ("", X, 1, "GL_FENCE_APPLE"), # 0x8A0B ("", X, 1, "GL_ELEMENT_ARRAY_APPLE"), # 0x8A0C ("glGet", E, 1, "GL_ELEMENT_ARRAY_TYPE_APPLE"), # 0x8A0D ("", X, 1, "GL_ELEMENT_ARRAY_POINTER_APPLE"), # 0x8A0E ("", X, 1, "GL_COLOR_FLOAT_APPLE"), # 0x8A0F ("", X, 1, "GL_UNIFORM_BUFFER"), # 0x8A11 ("", X, 1, "GL_BUFFER_SERIALIZED_MODIFY_APPLE"), # 0x8A12 ("", X, 1, "GL_BUFFER_FLUSHING_UNMAP_APPLE"), # 0x8A13 ("", X, 1, "GL_AUX_DEPTH_STENCIL_APPLE"), # 0x8A14 ("", X, 1, "GL_PACK_ROW_BYTES_APPLE"), # 0x8A15 ("", X, 1, "GL_UNPACK_ROW_BYTES_APPLE"), # 0x8A16 ("", X, 1, "GL_RELEASED_APPLE"), # 0x8A19 ("", X, 1, "GL_VOLATILE_APPLE"), # 0x8A1A ("", X, 1, "GL_RETAINED_APPLE"), # 0x8A1B ("", X, 1, "GL_UNDEFINED_APPLE"), # 0x8A1C ("", B, 1, "GL_PURGEABLE_APPLE"), # 0x8A1D ("", X, 1, "GL_RGB_422_APPLE"), # 0x8A1F ("glGet,glGet_i", I, 1, "GL_UNIFORM_BUFFER_BINDING"), # 0x8A28 ("glGet_i", I, 1, "GL_UNIFORM_BUFFER_START"), # 0x8A29 ("glGet_i", I, 1, "GL_UNIFORM_BUFFER_SIZE"), # 0x8A2A ("glGet", I, 1, "GL_MAX_VERTEX_UNIFORM_BLOCKS"), # 0x8A2B ("glGet", I, 1, "GL_MAX_GEOMETRY_UNIFORM_BLOCKS"), # 0x8A2C ("glGet", I, 1, "GL_MAX_FRAGMENT_UNIFORM_BLOCKS"), # 0x8A2D ("glGet", I, 1, "GL_MAX_COMBINED_UNIFORM_BLOCKS"), # 0x8A2E ("glGet", I, 1, "GL_MAX_UNIFORM_BUFFER_BINDINGS"), # 0x8A2F ("glGet", I, 1, "GL_MAX_UNIFORM_BLOCK_SIZE"), # 0x8A30 ("glGet", I, 1, "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS"), # 0x8A31 ("glGet", I, 1, "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS"), # 0x8A32 ("glGet", I, 1, "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS"), # 0x8A33 ("glGet", I, 1, "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT"), # 0x8A34 ("glGetProgram", I, 1, "GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH"), # 0x8A35 ("glGetProgram", I, 1, "GL_ACTIVE_UNIFORM_BLOCKS"), # 0x8A36 ("glGetActiveUniforms", E, 1, "GL_UNIFORM_TYPE"), # 0x8A37 ("glGetActiveUniforms", I, 1, "GL_UNIFORM_SIZE"), # 0x8A38 ("glGetActiveUniforms", I, 1, "GL_UNIFORM_NAME_LENGTH"), # 0x8A39 ("glGetActiveUniforms", I, 1, "GL_UNIFORM_BLOCK_INDEX"), # 0x8A3A ("glGetActiveUniforms", I, 1, "GL_UNIFORM_OFFSET"), # 0x8A3B ("glGetActiveUniforms", I, 1, "GL_UNIFORM_ARRAY_STRIDE"), # 0x8A3C ("glGetActiveUniforms", I, 1, "GL_UNIFORM_MATRIX_STRIDE"), # 0x8A3D ("glGetActiveUniforms", B, 1, "GL_UNIFORM_IS_ROW_MAJOR"), # 0x8A3E ("glGetActiveUniformBlock", I, 1, "GL_UNIFORM_BLOCK_BINDING"), # 0x8A3F ("glGetActiveUniformBlock", I, 1, "GL_UNIFORM_BLOCK_DATA_SIZE"), # 0x8A40 ("glGetActiveUniformBlock", I, 1, "GL_UNIFORM_BLOCK_NAME_LENGTH"), # 0x8A41 ("glGetActiveUniformBlock", I, 1, "GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS"), # 0x8A42 ("glGetActiveUniformBlock", I, 1, "GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES"), # 0x8A43 ("glGetActiveUniformBlock", B, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER"), # 0x8A44 ("glGetActiveUniformBlock", B, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER"), # 0x8A45 ("glGetActiveUniformBlock", B, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER"), # 0x8A46 ("glGetTexParameter,glGetSamplerParameter", E, 1, "GL_TEXTURE_SRGB_DECODE_EXT"), # 0x8A48 ("", X, 1, "GL_DECODE_EXT"), # 0x8A49 ("", X, 1, "GL_SKIP_DECODE_EXT"), # 0x8A4A ("", X, 1, "GL_PROGRAM_PIPELINE_OBJECT_EXT"), # 0x8A4F ("", X, 1, "GL_RGB_RAW_422_APPLE"), # 0x8A51 ("", X, 1, "GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT"), # 0x8A52 ("", X, 1, "GL_SYNC_OBJECT_APPLE"), # 0x8A53 ("", X, 1, "GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT"), # 0x8A54 ("", X, 1, "GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT"), # 0x8A55 ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT"), # 0x8A56 ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT"), # 0x8A57 ("glGetProgramPipeline", I, 1, "GL_FRAGMENT_SHADER"), # 0x8B30 ("glGetProgramPipeline", I, 1, "GL_VERTEX_SHADER"), # 0x8B31 ("", H, 1, "GL_PROGRAM_OBJECT_ARB"), # 0x8B40 ("", X, 1, "GL_SHADER_OBJECT_ARB"), # 0x8B48 ("glGet", I, 1, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS"), # 0x8B49 ("glGet", I, 1, "GL_MAX_VERTEX_UNIFORM_COMPONENTS"), # 0x8B4A ("glGet", I, 1, "GL_MAX_VARYING_COMPONENTS"), # 0x8B4B ("glGet", I, 1, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"), # 0x8B4C ("glGet", I, 1, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"), # 0x8B4D ("", E, 1, "GL_OBJECT_TYPE_ARB"), # 0x8B4E ("glGetShader", E, 1, "GL_SHADER_TYPE"), # 0x8B4F ("", X, 1, "GL_FLOAT_VEC2"), # 0x8B50 ("", X, 1, "GL_FLOAT_VEC3"), # 0x8B51 ("", X, 1, "GL_FLOAT_VEC4"), # 0x8B52 ("", X, 1, "GL_INT_VEC2"), # 0x8B53 ("", X, 1, "GL_INT_VEC3"), # 0x8B54 ("", X, 1, "GL_INT_VEC4"), # 0x8B55 ("", X, 1, "GL_BOOL"), # 0x8B56 ("", X, 1, "GL_BOOL_VEC2"), # 0x8B57 ("", X, 1, "GL_BOOL_VEC3"), # 0x8B58 ("", X, 1, "GL_BOOL_VEC4"), # 0x8B59 ("", X, 1, "GL_FLOAT_MAT2"), # 0x8B5A ("", X, 1, "GL_FLOAT_MAT3"), # 0x8B5B ("", X, 1, "GL_FLOAT_MAT4"), # 0x8B5C ("", X, 1, "GL_SAMPLER_1D"), # 0x8B5D ("", X, 1, "GL_SAMPLER_2D"), # 0x8B5E ("", X, 1, "GL_SAMPLER_3D"), # 0x8B5F ("", X, 1, "GL_SAMPLER_CUBE"), # 0x8B60 ("", X, 1, "GL_SAMPLER_1D_SHADOW"), # 0x8B61 ("", X, 1, "GL_SAMPLER_2D_SHADOW"), # 0x8B62 ("", X, 1, "GL_SAMPLER_2D_RECT"), # 0x8B63 ("", X, 1, "GL_SAMPLER_2D_RECT_SHADOW"), # 0x8B64 ("", X, 1, "GL_FLOAT_MAT2x3"), # 0x8B65 ("", X, 1, "GL_FLOAT_MAT2x4"), # 0x8B66 ("", X, 1, "GL_FLOAT_MAT3x2"), # 0x8B67 ("", X, 1, "GL_FLOAT_MAT3x4"), # 0x8B68 ("", X, 1, "GL_FLOAT_MAT4x2"), # 0x8B69 ("", X, 1, "GL_FLOAT_MAT4x3"), # 0x8B6A ("glGetShader,glGetProgram", B, 1, "GL_DELETE_STATUS"), # 0x8B80 ("glGetShader,glGetProgram", B, 1, "GL_COMPILE_STATUS"), # 0x8B81 ("glGetShader,glGetProgram", B, 1, "GL_LINK_STATUS"), # 0x8B82 ("glGetShader,glGetProgram", B, 1, "GL_VALIDATE_STATUS"), # 0x8B83 ("glGetShader,glGetProgram", I, 1, "GL_INFO_LOG_LENGTH"), # 0x8B84 ("glGetProgram", I, 1, "GL_ATTACHED_SHADERS"), # 0x8B85 ("glGetProgram", I, 1, "GL_ACTIVE_UNIFORMS"), # 0x8B86 ("glGetProgram", I, 1, "GL_ACTIVE_UNIFORM_MAX_LENGTH"), # 0x8B87 ("glGetShader", I, 1, "GL_SHADER_SOURCE_LENGTH"), # 0x8B88 ("glGetProgram", I, 1, "GL_ACTIVE_ATTRIBUTES"), # 0x8B89 ("glGetProgram", I, 1, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH"), # 0x8B8A ("", X, 1, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT"), # 0x8B8B ("glGet", S, 1, "GL_SHADING_LANGUAGE_VERSION"), # 0x8B8C ("glGet", I, 1, "GL_CURRENT_PROGRAM"), # 0x8B8D ("", X, 1, "GL_PALETTE4_RGB8_OES"), # 0x8B90 ("", X, 1, "GL_PALETTE4_RGBA8_OES"), # 0x8B91 ("", X, 1, "GL_PALETTE4_R5_G6_B5_OES"), # 0x8B92 ("", X, 1, "GL_PALETTE4_RGBA4_OES"), # 0x8B93 ("", X, 1, "GL_PALETTE4_RGB5_A1_OES"), # 0x8B94 ("", X, 1, "GL_PALETTE8_RGB8_OES"), # 0x8B95 ("", X, 1, "GL_PALETTE8_RGBA8_OES"), # 0x8B96 ("", X, 1, "GL_PALETTE8_R5_G6_B5_OES"), # 0x8B97 ("", X, 1, "GL_PALETTE8_RGBA4_OES"), # 0x8B98 ("", X, 1, "GL_PALETTE8_RGB5_A1_OES"), # 0x8B99 ("glGet", E, 1, "GL_IMPLEMENTATION_COLOR_READ_TYPE"), # 0x8B9A ("glGet", E, 1, "GL_IMPLEMENTATION_COLOR_READ_FORMAT"), # 0x8B9B ("", X, 1, "GL_POINT_SIZE_ARRAY_OES"), # 0x8B9C ("glGetTexParameter", I, 4, "GL_TEXTURE_CROP_RECT_OES"), # 0x8B9D ("glGet", I, 1, "GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"), # 0x8B9E ("", I, 1, "GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"), # 0x8B9F #("", X, 1, "GL_FRAGMENT_PROGRAM_POSITION_MESA"), # 0x8BB0 #("", X, 1, "GL_FRAGMENT_PROGRAM_CALLBACK_MESA"), # 0x8BB1 #("", X, 1, "GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA"), # 0x8BB2 #("", X, 1, "GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA"), # 0x8BB3 #("", X, 1, "GL_VERTEX_PROGRAM_POSITION_MESA"), # 0x8BB4 #("", X, 1, "GL_VERTEX_PROGRAM_CALLBACK_MESA"), # 0x8BB5 #("", X, 1, "GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA"), # 0x8BB6 #("", X, 1, "GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA"), # 0x8BB7 ("", X, 1, "GL_COUNTER_TYPE_AMD"), # 0x8BC0 ("", X, 1, "GL_COUNTER_RANGE_AMD"), # 0x8BC1 ("", X, 1, "GL_UNSIGNED_INT64_AMD"), # 0x8BC2 ("", X, 1, "GL_PERCENTAGE_AMD"), # 0x8BC3 ("", X, 1, "GL_PERFMON_RESULT_AVAILABLE_AMD"), # 0x8BC4 ("", X, 1, "GL_PERFMON_RESULT_SIZE_AMD"), # 0x8BC5 ("", X, 1, "GL_PERFMON_RESULT_AMD"), # 0x8BC6 #("", X, 1, "GL_TEXTURE_WIDTH_QCOM"), # 0x8BD2 #("", X, 1, "GL_TEXTURE_HEIGHT_QCOM"), # 0x8BD3 #("", X, 1, "GL_TEXTURE_DEPTH_QCOM"), # 0x8BD4 #("", X, 1, "GL_TEXTURE_INTERNAL_FORMAT_QCOM"), # 0x8BD5 #("", X, 1, "GL_TEXTURE_FORMAT_QCOM"), # 0x8BD6 #("", X, 1, "GL_TEXTURE_TYPE_QCOM"), # 0x8BD7 #("", X, 1, "GL_TEXTURE_IMAGE_VALID_QCOM"), # 0x8BD8 #("", X, 1, "GL_TEXTURE_NUM_LEVELS_QCOM"), # 0x8BD9 #("", X, 1, "GL_TEXTURE_TARGET_QCOM"), # 0x8BDA #("", X, 1, "GL_TEXTURE_OBJECT_VALID_QCOM"), # 0x8BDB #("", X, 1, "GL_STATE_RESTORE"), # 0x8BDC #("", X, 1, "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG"), # 0x8C00 #("", X, 1, "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG"), # 0x8C01 #("", X, 1, "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"), # 0x8C02 #("", X, 1, "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"), # 0x8C03 #("", X, 1, "GL_MODULATE_COLOR_IMG"), # 0x8C04 #("", X, 1, "GL_RECIP_ADD_SIGNED_ALPHA_IMG"), # 0x8C05 #("", X, 1, "GL_TEXTURE_ALPHA_MODULATE_IMG"), # 0x8C06 #("", X, 1, "GL_FACTOR_ALPHA_MODULATE_IMG"), # 0x8C07 #("", X, 1, "GL_FRAGMENT_ALPHA_MODULATE_IMG"), # 0x8C08 #("", X, 1, "GL_ADD_BLEND_IMG"), # 0x8C09 #("", X, 1, "GL_SGX_BINARY_IMG"), # 0x8C0A ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_RED_TYPE"), # 0x8C10 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_GREEN_TYPE"), # 0x8C11 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_BLUE_TYPE"), # 0x8C12 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_ALPHA_TYPE"), # 0x8C13 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_LUMINANCE_TYPE"), # 0x8C14 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_INTENSITY_TYPE"), # 0x8C15 ("glGetTexLevelParameter", E, 1, "GL_TEXTURE_DEPTH_TYPE"), # 0x8C16 ("", X, 1, "GL_UNSIGNED_NORMALIZED"), # 0x8C17 ("", B, 1, "GL_TEXTURE_1D_ARRAY"), # 0x8C18 ("", X, 1, "GL_PROXY_TEXTURE_1D_ARRAY"), # 0x8C19 ("", B, 1, "GL_TEXTURE_2D_ARRAY"), # 0x8C1A ("", X, 1, "GL_PROXY_TEXTURE_2D_ARRAY"), # 0x8C1B ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_1D_ARRAY"), # 0x8C1C ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_2D_ARRAY"), # 0x8C1D ("", X, 1, "GL_GEOMETRY_PROGRAM_NV"), # 0x8C26 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_OUTPUT_VERTICES_NV"), # 0x8C27 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV"), # 0x8C28 ("glGet", I, 1, "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"), # 0x8C29 ("glGet_texture", I, 1, "GL_TEXTURE_BUFFER"), # 0x8C2A ("glGet", I, 1, "GL_MAX_TEXTURE_BUFFER_SIZE"), # 0x8C2B ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_BUFFER"), # 0x8C2C ("glGet_texture", I, 1, "GL_TEXTURE_BUFFER_DATA_STORE_BINDING"), # 0x8C2D ("glGet_texture", E, 1, "GL_TEXTURE_BUFFER_FORMAT_ARB"), # 0x8C2E ("", B, 1, "GL_ANY_SAMPLES_PASSED"), # 0x8C2F ("glGet", B, 1, "GL_SAMPLE_SHADING"), # 0x8C36 ("glGet", F, 1, "GL_MIN_SAMPLE_SHADING_VALUE"), # 0x8C37 ("", X, 1, "GL_R11F_G11F_B10F"), # 0x8C3A ("", X, 1, "GL_UNSIGNED_INT_10F_11F_11F_REV"), # 0x8C3B ("", X, 1, "GL_RGBA_SIGNED_COMPONENTS_EXT"), # 0x8C3C ("", X, 1, "GL_RGB9_E5"), # 0x8C3D ("", X, 1, "GL_UNSIGNED_INT_5_9_9_9_REV"), # 0x8C3E ("", X, 1, "GL_TEXTURE_SHARED_SIZE"), # 0x8C3F ("", X, 1, "GL_SRGB"), # 0x8C40 ("", X, 1, "GL_SRGB8"), # 0x8C41 ("", X, 1, "GL_SRGB_ALPHA"), # 0x8C42 ("", X, 1, "GL_SRGB8_ALPHA8"), # 0x8C43 ("", X, 1, "GL_SLUMINANCE_ALPHA"), # 0x8C44 ("", X, 1, "GL_SLUMINANCE8_ALPHA8"), # 0x8C45 ("", X, 1, "GL_SLUMINANCE"), # 0x8C46 ("", X, 1, "GL_SLUMINANCE8"), # 0x8C47 ("", X, 1, "GL_COMPRESSED_SRGB"), # 0x8C48 ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA"), # 0x8C49 ("", X, 1, "GL_COMPRESSED_SLUMINANCE"), # 0x8C4A ("", X, 1, "GL_COMPRESSED_SLUMINANCE_ALPHA"), # 0x8C4B ("", X, 1, "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT"), # 0x8C4C ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"), # 0x8C4D ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"), # 0x8C4E ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"), # 0x8C4F ("", X, 1, "GL_COMPRESSED_LUMINANCE_LATC1_EXT"), # 0x8C70 ("", X, 1, "GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT"), # 0x8C71 ("", X, 1, "GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT"), # 0x8C72 ("", X, 1, "GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT"), # 0x8C73 ("", X, 1, "GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV"), # 0x8C74 ("", X, 1, "GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV"), # 0x8C75 ("glGetProgram", I, 1, "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH"), # 0x8C76 ("", X, 1, "GL_BACK_PRIMARY_COLOR_NV"), # 0x8C77 ("", X, 1, "GL_BACK_SECONDARY_COLOR_NV"), # 0x8C78 ("", X, 1, "GL_TEXTURE_COORD_NV"), # 0x8C79 ("", X, 1, "GL_CLIP_DISTANCE_NV"), # 0x8C7A ("", X, 1, "GL_VERTEX_ID_NV"), # 0x8C7B ("", X, 1, "GL_PRIMITIVE_ID_NV"), # 0x8C7C ("", X, 1, "GL_GENERIC_ATTRIB_NV"), # 0x8C7D ("", X, 1, "GL_TRANSFORM_FEEDBACK_ATTRIBS_NV"), # 0x8C7E ("glGetProgram", E, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_MODE"), # 0x8C7F ("glGet", I, 1, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"), # 0x8C80 ("", X, 1, "GL_ACTIVE_VARYINGS_NV"), # 0x8C81 ("", X, 1, "GL_ACTIVE_VARYING_MAX_LENGTH_NV"), # 0x8C82 ("glGetProgram", I, 1, "GL_TRANSFORM_FEEDBACK_VARYINGS"), # 0x8C83 ("glGet_i", I, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_START"), # 0x8C84 ("glGet_i", I, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE"), # 0x8C85 ("", X, 1, "GL_TRANSFORM_FEEDBACK_RECORD_NV"), # 0x8C86 ("", X, 1, "GL_PRIMITIVES_GENERATED"), # 0x8C87 ("", X, 1, "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"), # 0x8C88 ("glGet", B, 1, "GL_RASTERIZER_DISCARD"), # 0x8C89 ("glGet", I, 1, "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"), # 0x8C8A ("glGet", I, 1, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"), # 0x8C8B ("", X, 1, "GL_INTERLEAVED_ATTRIBS"), # 0x8C8C ("", X, 1, "GL_SEPARATE_ATTRIBS"), # 0x8C8D ("", X, 1, "GL_TRANSFORM_FEEDBACK_BUFFER"), # 0x8C8E ("glGet,glGet_i", I, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING"), # 0x8C8F ("", X, 1, "GL_ATC_RGB_AMD"), # 0x8C92 ("", X, 1, "GL_ATC_RGBA_EXPLICIT_ALPHA_AMD"), # 0x8C93 ("glGet", E, 1, "GL_POINT_SPRITE_COORD_ORIGIN"), # 0x8CA0 ("", X, 1, "GL_LOWER_LEFT"), # 0x8CA1 ("", X, 1, "GL_UPPER_LEFT"), # 0x8CA2 ("", X, 1, "GL_STENCIL_BACK_REF"), # 0x8CA3 ("", X, 1, "GL_STENCIL_BACK_VALUE_MASK"), # 0x8CA4 ("", X, 1, "GL_STENCIL_BACK_WRITEMASK"), # 0x8CA5 ("glGet", I, 1, "GL_DRAW_FRAMEBUFFER_BINDING"), # 0x8CA6 ("glGet", I, 1, "GL_RENDERBUFFER_BINDING"), # 0x8CA7 ("", I, 1, "GL_READ_FRAMEBUFFER"), # 0x8CA8 ("", I, 1, "GL_DRAW_FRAMEBUFFER"), # 0x8CA9 ("glGet", I, 1, "GL_READ_FRAMEBUFFER_BINDING"), # 0x8CAA ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_SAMPLES"), # 0x8CAB ("", X, 1, "GL_DEPTH_COMPONENT32F"), # 0x8CAC ("", X, 1, "GL_DEPTH32F_STENCIL8"), # 0x8CAD ("glGetFramebufferAttachmentParameter", E, 1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"), # 0x8CD0 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"), # 0x8CD1 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"), # 0x8CD2 ("glGetFramebufferAttachmentParameter", E, 1, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"), # 0x8CD3 ("glGetFramebufferAttachmentParameter", I, 1, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER"), # 0x8CD4 ("", X, 1, "GL_FRAMEBUFFER_COMPLETE"), # 0x8CD5 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"), # 0x8CD6 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"), # 0x8CD7 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"), # 0x8CD9 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"), # 0x8CDA ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"), # 0x8CDB ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"), # 0x8CDC ("", X, 1, "GL_FRAMEBUFFER_UNSUPPORTED"), # 0x8CDD ("glGet", I, 1, "GL_MAX_COLOR_ATTACHMENTS"), # 0x8CDF ("", X, 1, "GL_COLOR_ATTACHMENT0"), # 0x8CE0 ("", X, 1, "GL_COLOR_ATTACHMENT1"), # 0x8CE1 ("", X, 1, "GL_COLOR_ATTACHMENT2"), # 0x8CE2 ("", X, 1, "GL_COLOR_ATTACHMENT3"), # 0x8CE3 ("", X, 1, "GL_COLOR_ATTACHMENT4"), # 0x8CE4 ("", X, 1, "GL_COLOR_ATTACHMENT5"), # 0x8CE5 ("", X, 1, "GL_COLOR_ATTACHMENT6"), # 0x8CE6 ("", X, 1, "GL_COLOR_ATTACHMENT7"), # 0x8CE7 ("", X, 1, "GL_COLOR_ATTACHMENT8"), # 0x8CE8 ("", X, 1, "GL_COLOR_ATTACHMENT9"), # 0x8CE9 ("", X, 1, "GL_COLOR_ATTACHMENT10"), # 0x8CEA ("", X, 1, "GL_COLOR_ATTACHMENT11"), # 0x8CEB ("", X, 1, "GL_COLOR_ATTACHMENT12"), # 0x8CEC ("", X, 1, "GL_COLOR_ATTACHMENT13"), # 0x8CED ("", X, 1, "GL_COLOR_ATTACHMENT14"), # 0x8CEE ("", X, 1, "GL_COLOR_ATTACHMENT15"), # 0x8CEF ("", X, 1, "GL_COLOR_ATTACHMENT16"), # 0x8CF0 ("", X, 1, "GL_COLOR_ATTACHMENT17"), # 0x8CF1 ("", X, 1, "GL_COLOR_ATTACHMENT18"), # 0x8CF2 ("", X, 1, "GL_COLOR_ATTACHMENT19"), # 0x8CF3 ("", X, 1, "GL_COLOR_ATTACHMENT20"), # 0x8CF4 ("", X, 1, "GL_COLOR_ATTACHMENT21"), # 0x8CF5 ("", X, 1, "GL_COLOR_ATTACHMENT22"), # 0x8CF6 ("", X, 1, "GL_COLOR_ATTACHMENT23"), # 0x8CF7 ("", X, 1, "GL_COLOR_ATTACHMENT24"), # 0x8CF8 ("", X, 1, "GL_COLOR_ATTACHMENT25"), # 0x8CF9 ("", X, 1, "GL_COLOR_ATTACHMENT26"), # 0x8CFA ("", X, 1, "GL_COLOR_ATTACHMENT27"), # 0x8CFB ("", X, 1, "GL_COLOR_ATTACHMENT28"), # 0x8CFC ("", X, 1, "GL_COLOR_ATTACHMENT29"), # 0x8CFD ("", X, 1, "GL_COLOR_ATTACHMENT30"), # 0x8CFE ("", X, 1, "GL_COLOR_ATTACHMENT31"), # 0x8CFF ("", X, 1, "GL_DEPTH_ATTACHMENT"), # 0x8D00 ("", X, 1, "GL_STENCIL_ATTACHMENT"), # 0x8D20 ("", X, 1, "GL_FRAMEBUFFER"), # 0x8D40 ("", X, 1, "GL_RENDERBUFFER"), # 0x8D41 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_WIDTH"), # 0x8D42 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_HEIGHT"), # 0x8D43 ("glGetRenderbufferParameter", E, 1, "GL_RENDERBUFFER_INTERNAL_FORMAT"), # 0x8D44 ("", X, 1, "GL_STENCIL_INDEX1"), # 0x8D46 ("", X, 1, "GL_STENCIL_INDEX4"), # 0x8D47 ("", X, 1, "GL_STENCIL_INDEX8"), # 0x8D48 ("", X, 1, "GL_STENCIL_INDEX16"), # 0x8D49 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_RED_SIZE"), # 0x8D50 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_GREEN_SIZE"), # 0x8D51 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_BLUE_SIZE"), # 0x8D52 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_ALPHA_SIZE"), # 0x8D53 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_DEPTH_SIZE"), # 0x8D54 ("glGetRenderbufferParameter", I, 1, "GL_RENDERBUFFER_STENCIL_SIZE"), # 0x8D55 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"), # 0x8D56 ("glGet", I, 1, "GL_MAX_SAMPLES"), # 0x8D57 ("", X, 1, "GL_TEXTURE_GEN_STR_OES"), # 0x8D60 ("", X, 1, "GL_HALF_FLOAT_OES"), # 0x8D61 ("", X, 1, "GL_RGB565_OES"), # 0x8D62 ("", X, 1, "GL_ETC1_RGB8_OES"), # 0x8D64 ("", X, 1, "GL_TEXTURE_EXTERNAL_OES"), # 0x8D65 ("", X, 1, "GL_SAMPLER_EXTERNAL_OES"), # 0x8D66 ("", X, 1, "GL_TEXTURE_BINDING_EXTERNAL_OES"), # 0x8D67 ("", X, 1, "GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES"), # 0x8D68 ("glGet", B, 1, "GL_PRIMITIVE_RESTART_FIXED_INDEX"), # 0x8D69 ("", B, 1, "GL_ANY_SAMPLES_PASSED_CONSERVATIVE"), # 0x8D6A ("glGet", I, 1, "GL_MAX_ELEMENT_INDEX"), # 0x8D6B ("", X, 1, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT"), # 0x8D6C ("", X, 1, "GL_RGBA32UI"), # 0x8D70 ("", X, 1, "GL_RGB32UI"), # 0x8D71 ("", X, 1, "GL_ALPHA32UI_EXT"), # 0x8D72 ("", X, 1, "GL_INTENSITY32UI_EXT"), # 0x8D73 ("", X, 1, "GL_LUMINANCE32UI_EXT"), # 0x8D74 ("", X, 1, "GL_LUMINANCE_ALPHA32UI_EXT"), # 0x8D75 ("", X, 1, "GL_RGBA16UI"), # 0x8D76 ("", X, 1, "GL_RGB16UI"), # 0x8D77 ("", X, 1, "GL_ALPHA16UI_EXT"), # 0x8D78 ("", X, 1, "GL_INTENSITY16UI_EXT"), # 0x8D79 ("", X, 1, "GL_LUMINANCE16UI_EXT"), # 0x8D7A ("", X, 1, "GL_LUMINANCE_ALPHA16UI_EXT"), # 0x8D7B ("", X, 1, "GL_RGBA8UI"), # 0x8D7C ("", X, 1, "GL_RGB8UI"), # 0x8D7D ("", X, 1, "GL_ALPHA8UI_EXT"), # 0x8D7E ("", X, 1, "GL_INTENSITY8UI_EXT"), # 0x8D7F ("", X, 1, "GL_LUMINANCE8UI_EXT"), # 0x8D80 ("", X, 1, "GL_LUMINANCE_ALPHA8UI_EXT"), # 0x8D81 ("", X, 1, "GL_RGBA32I"), # 0x8D82 ("", X, 1, "GL_RGB32I"), # 0x8D83 ("", X, 1, "GL_ALPHA32I_EXT"), # 0x8D84 ("", X, 1, "GL_INTENSITY32I_EXT"), # 0x8D85 ("", X, 1, "GL_LUMINANCE32I_EXT"), # 0x8D86 ("", X, 1, "GL_LUMINANCE_ALPHA32I_EXT"), # 0x8D87 ("", X, 1, "GL_RGBA16I"), # 0x8D88 ("", X, 1, "GL_RGB16I"), # 0x8D89 ("", X, 1, "GL_ALPHA16I_EXT"), # 0x8D8A ("", X, 1, "GL_INTENSITY16I_EXT"), # 0x8D8B ("", X, 1, "GL_LUMINANCE16I_EXT"), # 0x8D8C ("", X, 1, "GL_LUMINANCE_ALPHA16I_EXT"), # 0x8D8D ("", X, 1, "GL_RGBA8I"), # 0x8D8E ("", X, 1, "GL_RGB8I"), # 0x8D8F ("", X, 1, "GL_ALPHA8I_EXT"), # 0x8D90 ("", X, 1, "GL_INTENSITY8I_EXT"), # 0x8D91 ("", X, 1, "GL_LUMINANCE8I_EXT"), # 0x8D92 ("", X, 1, "GL_LUMINANCE_ALPHA8I_EXT"), # 0x8D93 ("", X, 1, "GL_RED_INTEGER"), # 0x8D94 ("", X, 1, "GL_GREEN_INTEGER"), # 0x8D95 ("", X, 1, "GL_BLUE_INTEGER"), # 0x8D96 ("", X, 1, "GL_ALPHA_INTEGER"), # 0x8D97 ("", X, 1, "GL_RGB_INTEGER"), # 0x8D98 ("", X, 1, "GL_RGBA_INTEGER"), # 0x8D99 ("", X, 1, "GL_BGR_INTEGER"), # 0x8D9A ("", X, 1, "GL_BGRA_INTEGER"), # 0x8D9B ("", X, 1, "GL_LUMINANCE_INTEGER_EXT"), # 0x8D9C ("", X, 1, "GL_LUMINANCE_ALPHA_INTEGER_EXT"), # 0x8D9D ("glGet", B, 1, "GL_RGBA_INTEGER_MODE_EXT"), # 0x8D9E ("", X, 1, "GL_INT_2_10_10_10_REV"), # 0x8D9F ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV"), # 0x8DA0 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV"), # 0x8DA1 ("", X, 1, "GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV"), # 0x8DA2 ("", X, 1, "GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV"), # 0x8DA3 ("", X, 1, "GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV"), # 0x8DA4 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV"), # 0x8DA5 ("glGetProgramARB", I, 1, "GL_MAX_PROGRAM_GENERIC_RESULTS_NV"), # 0x8DA6 ("glGetFramebufferAttachmentParameter", B, 1, "GL_FRAMEBUFFER_ATTACHMENT_LAYERED"), # 0x8DA7 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"), # 0x8DA8 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB"), # 0x8DA9 ("", X, 1, "GL_LAYER_NV"), # 0x8DAA ("", X, 1, "GL_DEPTH_COMPONENT32F_NV"), # 0x8DAB ("", X, 1, "GL_DEPTH32F_STENCIL8_NV"), # 0x8DAC ("", X, 1, "GL_FLOAT_32_UNSIGNED_INT_24_8_REV"), # 0x8DAD ("", X, 1, "GL_SHADER_INCLUDE_ARB"), # 0x8DAE ("", X, 1, "GL_DEPTH_BUFFER_FLOAT_MODE_NV"), # 0x8DAF ("glGet", B, 1, "GL_FRAMEBUFFER_SRGB"), # 0x8DB9 ("glGet", B, 1, "GL_FRAMEBUFFER_SRGB_CAPABLE_EXT"), # 0x8DBA ("", X, 1, "GL_COMPRESSED_RED_RGTC1"), # 0x8DBB ("", X, 1, "GL_COMPRESSED_SIGNED_RED_RGTC1"), # 0x8DBC ("", X, 1, "GL_COMPRESSED_RG_RGTC2"), # 0x8DBD ("", X, 1, "GL_COMPRESSED_SIGNED_RG_RGTC2"), # 0x8DBE ("", X, 1, "GL_SAMPLER_1D_ARRAY"), # 0x8DC0 ("", X, 1, "GL_SAMPLER_2D_ARRAY"), # 0x8DC1 ("", X, 1, "GL_SAMPLER_BUFFER"), # 0x8DC2 ("", X, 1, "GL_SAMPLER_1D_ARRAY_SHADOW"), # 0x8DC3 ("", X, 1, "GL_SAMPLER_2D_ARRAY_SHADOW"), # 0x8DC4 ("", X, 1, "GL_SAMPLER_CUBE_SHADOW"), # 0x8DC5 ("", X, 1, "GL_UNSIGNED_INT_VEC2"), # 0x8DC6 ("", X, 1, "GL_UNSIGNED_INT_VEC3"), # 0x8DC7 ("", X, 1, "GL_UNSIGNED_INT_VEC4"), # 0x8DC8 ("", X, 1, "GL_INT_SAMPLER_1D"), # 0x8DC9 ("", X, 1, "GL_INT_SAMPLER_2D"), # 0x8DCA ("", X, 1, "GL_INT_SAMPLER_3D"), # 0x8DCB ("", X, 1, "GL_INT_SAMPLER_CUBE"), # 0x8DCC ("", X, 1, "GL_INT_SAMPLER_2D_RECT"), # 0x8DCD ("", X, 1, "GL_INT_SAMPLER_1D_ARRAY"), # 0x8DCE ("", X, 1, "GL_INT_SAMPLER_2D_ARRAY"), # 0x8DCF ("", X, 1, "GL_INT_SAMPLER_BUFFER"), # 0x8DD0 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_1D"), # 0x8DD1 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_2D"), # 0x8DD2 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_3D"), # 0x8DD3 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_CUBE"), # 0x8DD4 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_2D_RECT"), # 0x8DD5 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY"), # 0x8DD6 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY"), # 0x8DD7 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_BUFFER"), # 0x8DD8 ("glGetProgramPipeline", I, 1, "GL_GEOMETRY_SHADER"), # 0x8DD9 ("glGetProgram", I, 1, "GL_GEOMETRY_VERTICES_OUT_ARB"), # 0x8DDA ("glGetProgram", E, 1, "GL_GEOMETRY_INPUT_TYPE_ARB"), # 0x8DDB ("glGetProgram", E, 1, "GL_GEOMETRY_OUTPUT_TYPE_ARB"), # 0x8DDC ("glGet", I, 1, "GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB"), # 0x8DDD ("glGet", I, 1, "GL_MAX_VERTEX_VARYING_COMPONENTS_ARB"), # 0x8DDE ("glGet", I, 1, "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS"), # 0x8DDF ("glGet", I, 1, "GL_MAX_GEOMETRY_OUTPUT_VERTICES"), # 0x8DE0 ("glGet", I, 1, "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS"), # 0x8DE1 ("glGet", I, 1, "GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT"), # 0x8DE2 ("glGet", I, 1, "GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT"), # 0x8DE3 ("glGet", I, 1, "GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT"), # 0x8DE4 ("", I, 1, "GL_ACTIVE_SUBROUTINES"), # 0x8DE5 ("", I, 1, "GL_ACTIVE_SUBROUTINE_UNIFORMS"), # 0x8DE6 ("glGet", I, 1, "GL_MAX_SUBROUTINES"), # 0x8DE7 ("glGet", I, 1, "GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS"), # 0x8DE8 ("glGetNamedString", I, 1, "GL_NAMED_STRING_LENGTH_ARB"), # 0x8DE9 ("glGetNamedString", E, 1, "GL_NAMED_STRING_TYPE_ARB"), # 0x8DEA ("glGet", I, 1, "GL_MAX_BINDABLE_UNIFORM_SIZE_EXT"), # 0x8DED ("", X, 1, "GL_UNIFORM_BUFFER_EXT"), # 0x8DEE ("glGet", I, 1, "GL_UNIFORM_BUFFER_BINDING_EXT"), # 0x8DEF ("", X, 1, "GL_LOW_FLOAT"), # 0x8DF0 ("", X, 1, "GL_MEDIUM_FLOAT"), # 0x8DF1 ("", X, 1, "GL_HIGH_FLOAT"), # 0x8DF2 ("", X, 1, "GL_LOW_INT"), # 0x8DF3 ("", X, 1, "GL_MEDIUM_INT"), # 0x8DF4 ("", X, 1, "GL_HIGH_INT"), # 0x8DF5 ("", X, 1, "GL_UNSIGNED_INT_10_10_10_2_OES"), # 0x8DF6 ("", X, 1, "GL_INT_10_10_10_2_OES"), # 0x8DF7 ("", X, 1, "GL_SHADER_BINARY_FORMATS"), # 0x8DF8 ("glGet", I, 1, "GL_NUM_SHADER_BINARY_FORMATS"), # 0x8DF9 ("glGet", B, 1, "GL_SHADER_COMPILER"), # 0x8DFA ("glGet", I, 1, "GL_MAX_VERTEX_UNIFORM_VECTORS"), # 0x8DFB ("glGet", I, 1, "GL_MAX_VARYING_VECTORS"), # 0x8DFC ("glGet", I, 1, "GL_MAX_FRAGMENT_UNIFORM_VECTORS"), # 0x8DFD ("", X, 1, "GL_RENDERBUFFER_COLOR_SAMPLES_NV"), # 0x8E10 ("glGet", I, 1, "GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV"), # 0x8E11 ("", X, 1, "GL_MULTISAMPLE_COVERAGE_MODES_NV"), # 0x8E12 ("", X, 1, "GL_QUERY_WAIT"), # 0x8E13 ("", X, 1, "GL_QUERY_NO_WAIT"), # 0x8E14 ("", X, 1, "GL_QUERY_BY_REGION_WAIT"), # 0x8E15 ("", X, 1, "GL_QUERY_BY_REGION_NO_WAIT"), # 0x8E16 ("", X, 1, "GL_QUERY_WAIT_INVERTED"), # 0x8E17 ("", X, 1, "GL_QUERY_NO_WAIT_INVERTED"), # 0x8E18 ("", X, 1, "GL_QUERY_BY_REGION_WAIT_INVERTED"), # 0x8E19 ("", X, 1, "GL_QUERY_BY_REGION_NO_WAIT_INVERTED"), # 0x8E1A ("glGet", I, 1, "GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS"), # 0x8E1E ("glGet", I, 1, "GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS"), # 0x8E1F ("", X, 1, "GL_COLOR_SAMPLES_NV"), # 0x8E20 ("", X, 1, "GL_TRANSFORM_FEEDBACK"), # 0x8E22 ("glGet", B, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED"), # 0x8E23 ("glGet", B, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE"), # 0x8E24 ("glGet", I, 1, "GL_TRANSFORM_FEEDBACK_BINDING"), # 0x8E25 ("", X, 1, "GL_FRAME_NV"), # 0x8E26 ("", X, 1, "GL_FIELDS_NV"), # 0x8E27 ("_glGet", I64, 1, "GL_TIMESTAMP"), # 0x8E28 ("", X, 1, "GL_NUM_FILL_STREAMS_NV"), # 0x8E29 ("", X, 1, "GL_PRESENT_TIME_NV"), # 0x8E2A ("", X, 1, "GL_PRESENT_DURATION_NV"), # 0x8E2B ("", X, 1, "GL_DEPTH_COMPONENT16_NONLINEAR_NV"), # 0x8E2C ("", X, 1, "GL_PROGRAM_MATRIX_EXT"), # 0x8E2D ("", X, 1, "GL_TRANSPOSE_PROGRAM_MATRIX_EXT"), # 0x8E2E ("", X, 1, "GL_PROGRAM_MATRIX_STACK_DEPTH_EXT"), # 0x8E2F ("glGetTexParameter", E, 1, "GL_TEXTURE_SWIZZLE_R"), # 0x8E42 ("glGetTexParameter", E, 1, "GL_TEXTURE_SWIZZLE_G"), # 0x8E43 ("glGetTexParameter", E, 1, "GL_TEXTURE_SWIZZLE_B"), # 0x8E44 ("glGetTexParameter", E, 1, "GL_TEXTURE_SWIZZLE_A"), # 0x8E45 ("glGetTexParameter", E, 4, "GL_TEXTURE_SWIZZLE_RGBA"), # 0x8E46 ("", I, 1, "GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS"), # 0x8E47 ("", I, 1, "GL_ACTIVE_SUBROUTINE_MAX_LENGTH"), # 0x8E48 ("", I, 1, "GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH"), # 0x8E49 ("", I, 1, "GL_NUM_COMPATIBLE_SUBROUTINES"), # 0x8E4A ("", I, 1, "GL_COMPATIBLE_SUBROUTINES"), # 0x8E4B ("glGet", B, 1, "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION"), # 0x8E4C ("", X, 1, "GL_FIRST_VERTEX_CONVENTION"), # 0x8E4D ("", X, 1, "GL_LAST_VERTEX_CONVENTION"), # 0x8E4E ("glGet", E, 1, "GL_PROVOKING_VERTEX"), # 0x8E4F ("glGetMultisample", I, 1, "GL_SAMPLE_POSITION"), # 0x8E50 ("glGet", B, 1, "GL_SAMPLE_MASK"), # 0x8E51 ("glGet", I, 1, "GL_SAMPLE_MASK_VALUE"), # 0x8E52 ("", X, 1, "GL_TEXTURE_BINDING_RENDERBUFFER_NV"), # 0x8E53 ("glGet", I, 1, "GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV"), # 0x8E54 ("", X, 1, "GL_TEXTURE_RENDERBUFFER_NV"), # 0x8E55 ("", X, 1, "GL_SAMPLER_RENDERBUFFER_NV"), # 0x8E56 ("", X, 1, "GL_INT_SAMPLER_RENDERBUFFER_NV"), # 0x8E57 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV"), # 0x8E58 ("glGet", I, 1, "GL_MAX_SAMPLE_MASK_WORDS"), # 0x8E59 ("glGet", I, 1, "GL_MAX_GEOMETRY_SHADER_INVOCATIONS"), # 0x8E5A ("glGet", F, 1, "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET"), # 0x8E5B ("glGet", F, 1, "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET"), # 0x8E5C ("glGet", I, 1, "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS"), # 0x8E5D ("glGet", I, 1, "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET"), # 0x8E5E ("glGet", I, 1, "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET"), # 0x8E5F ("glGet", I, 1, "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS"), # 0x8E70 ("glGet", I, 1, "GL_MAX_VERTEX_STREAMS"), # 0x8E71 ("glGet", I, 1, "GL_PATCH_VERTICES"), # 0x8E72 ("glGet", F, 2, "GL_PATCH_DEFAULT_INNER_LEVEL"), # 0x8E73 ("glGet", F, 4, "GL_PATCH_DEFAULT_OUTER_LEVEL"), # 0x8E74 ("glGetProgram", I, 1, "GL_TESS_CONTROL_OUTPUT_VERTICES"), # 0x8E75 ("glGetProgram", E, 1, "GL_TESS_GEN_MODE"), # 0x8E76 ("glGetProgram", E, 1, "GL_TESS_GEN_SPACING"), # 0x8E77 ("glGetProgram", E, 1, "GL_TESS_GEN_VERTEX_ORDER"), # 0x8E78 ("glGetProgram", E, 1, "GL_TESS_GEN_POINT_MODE"), # 0x8E79 ("", X, 1, "GL_ISOLINES"), # 0x8E7A ("", X, 1, "GL_FRACTIONAL_ODD"), # 0x8E7B ("", X, 1, "GL_FRACTIONAL_EVEN"), # 0x8E7C ("glGet", I, 1, "GL_MAX_PATCH_VERTICES"), # 0x8E7D ("glGet", I, 1, "GL_MAX_TESS_GEN_LEVEL"), # 0x8E7E ("glGet", I, 1, "GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS"), # 0x8E7F ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS"), # 0x8E80 ("glGet", I, 1, "GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS"), # 0x8E81 ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS"), # 0x8E82 ("glGet", I, 1, "GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS"), # 0x8E83 ("glGet", I, 1, "GL_MAX_TESS_PATCH_COMPONENTS"), # 0x8E84 ("glGet", I, 1, "GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS"), # 0x8E85 ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS"), # 0x8E86 ("glGetProgramPipeline", I, 1, "GL_TESS_EVALUATION_SHADER"), # 0x8E87 ("glGetProgramPipeline", I, 1, "GL_TESS_CONTROL_SHADER"), # 0x8E88 ("glGet", I, 1, "GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS"), # 0x8E89 ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS"), # 0x8E8A ("", X, 1, "GL_COMPRESSED_RGBA_BPTC_UNORM"), # 0x8E8C ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM"), # 0x8E8D ("", X, 1, "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT"), # 0x8E8E ("", X, 1, "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT"), # 0x8E8F #("", X, 1, "GL_COVERAGE_COMPONENT_NV"), # 0x8ED0 #("", X, 1, "GL_COVERAGE_COMPONENT4_NV"), # 0x8ED1 #("", X, 1, "GL_COVERAGE_ATTACHMENT_NV"), # 0x8ED2 #("", X, 1, "GL_COVERAGE_BUFFERS_NV"), # 0x8ED3 #("", X, 1, "GL_COVERAGE_SAMPLES_NV"), # 0x8ED4 #("", X, 1, "GL_COVERAGE_ALL_FRAGMENTS_NV"), # 0x8ED5 #("", X, 1, "GL_COVERAGE_EDGE_FRAGMENTS_NV"), # 0x8ED6 #("", X, 1, "GL_COVERAGE_AUTOMATIC_NV"), # 0x8ED7 ("_glGetBufferParameter", I64, 1, "GL_BUFFER_GPU_ADDRESS_NV"), # 0x8F1D ("", X, 1, "GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV"), # 0x8F1E ("", X, 1, "GL_ELEMENT_ARRAY_UNIFIED_NV"), # 0x8F1F ("", X, 1, "GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV"), # 0x8F20 ("", X, 1, "GL_VERTEX_ARRAY_ADDRESS_NV"), # 0x8F21 ("", X, 1, "GL_NORMAL_ARRAY_ADDRESS_NV"), # 0x8F22 ("", X, 1, "GL_COLOR_ARRAY_ADDRESS_NV"), # 0x8F23 ("", X, 1, "GL_INDEX_ARRAY_ADDRESS_NV"), # 0x8F24 ("", X, 1, "GL_TEXTURE_COORD_ARRAY_ADDRESS_NV"), # 0x8F25 ("", X, 1, "GL_EDGE_FLAG_ARRAY_ADDRESS_NV"), # 0x8F26 ("", X, 1, "GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV"), # 0x8F27 ("", X, 1, "GL_FOG_COORD_ARRAY_ADDRESS_NV"), # 0x8F28 ("", X, 1, "GL_ELEMENT_ARRAY_ADDRESS_NV"), # 0x8F29 ("", X, 1, "GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV"), # 0x8F2A ("", X, 1, "GL_VERTEX_ARRAY_LENGTH_NV"), # 0x8F2B ("", X, 1, "GL_NORMAL_ARRAY_LENGTH_NV"), # 0x8F2C ("", X, 1, "GL_COLOR_ARRAY_LENGTH_NV"), # 0x8F2D ("", X, 1, "GL_INDEX_ARRAY_LENGTH_NV"), # 0x8F2E ("", X, 1, "GL_TEXTURE_COORD_ARRAY_LENGTH_NV"), # 0x8F2F ("", X, 1, "GL_EDGE_FLAG_ARRAY_LENGTH_NV"), # 0x8F30 ("", X, 1, "GL_SECONDARY_COLOR_ARRAY_LENGTH_NV"), # 0x8F31 ("", X, 1, "GL_FOG_COORD_ARRAY_LENGTH_NV"), # 0x8F32 ("", X, 1, "GL_ELEMENT_ARRAY_LENGTH_NV"), # 0x8F33 ("", X, 1, "GL_GPU_ADDRESS_NV"), # 0x8F34 ("_glGet", I64, 1, "GL_MAX_SHADER_BUFFER_ADDRESS_NV"), # 0x8F35 ("glGet", I, 1, "GL_COPY_READ_BUFFER"), # 0x8F36 ("glGet", I, 1, "GL_COPY_WRITE_BUFFER"), # 0x8F37 ("glGet", I, 1, "GL_MAX_IMAGE_UNITS"), # 0x8F38 ("glGet", I, 1, "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS"), # 0x8F39 ("", X, 1, "GL_IMAGE_BINDING_NAME"), # 0x8F3A ("", X, 1, "GL_IMAGE_BINDING_LEVEL"), # 0x8F3B ("", X, 1, "GL_IMAGE_BINDING_LAYERED"), # 0x8F3C ("", X, 1, "GL_IMAGE_BINDING_LAYER"), # 0x8F3D ("", X, 1, "GL_IMAGE_BINDING_ACCESS"), # 0x8F3E ("", X, 1, "GL_DRAW_INDIRECT_BUFFER"), # 0x8F3F ("", X, 1, "GL_DRAW_INDIRECT_UNIFIED_NV"), # 0x8F40 ("", X, 1, "GL_DRAW_INDIRECT_ADDRESS_NV"), # 0x8F41 ("", X, 1, "GL_DRAW_INDIRECT_LENGTH_NV"), # 0x8F42 ("glGet", I, 1, "GL_DRAW_INDIRECT_BUFFER_BINDING"), # 0x8F43 ("", X, 1, "GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV"), # 0x8F44 ("", X, 1, "GL_MAX_PROGRAM_SUBROUTINE_NUM_NV"), # 0x8F45 ("", X, 1, "GL_DOUBLE_MAT2"), # 0x8F46 ("", X, 1, "GL_DOUBLE_MAT3"), # 0x8F47 ("", X, 1, "GL_DOUBLE_MAT4"), # 0x8F48 ("", X, 1, "GL_DOUBLE_MAT2x3"), # 0x8F49 ("", X, 1, "GL_DOUBLE_MAT2x4"), # 0x8F4A ("", X, 1, "GL_DOUBLE_MAT3x2"), # 0x8F4B ("", X, 1, "GL_DOUBLE_MAT3x4"), # 0x8F4C ("", X, 1, "GL_DOUBLE_MAT4x2"), # 0x8F4D ("", X, 1, "GL_DOUBLE_MAT4x3"), # 0x8F4E ("", X, 1, "GL_VERTEX_BINDING_BUFFER"), # 0x8F4F ("", X, 1, "GL_MALI_SHADER_BINARY_ARM"), # 0x8F60 ("", X, 1, "GL_MALI_PROGRAM_BINARY_ARM"), # 0x8F61 ("", X, 1, "GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT"), # 0x8F63 ("", X, 1, "GL_SHADER_PIXEL_LOCAL_STORAGE_EXT"), # 0x8F64 ("", X, 1, "GL_FETCH_PER_SAMPLE_ARM"), # 0x8F65 ("", X, 1, "GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM"), # 0x8F66 ("", X, 1, "GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT"), # 0x8F67 ("", X, 1, "GL_RED_SNORM"), # 0x8F90 ("", X, 1, "GL_RG_SNORM"), # 0x8F91 ("", X, 1, "GL_RGB_SNORM"), # 0x8F92 ("", X, 1, "GL_RGBA_SNORM"), # 0x8F93 ("", X, 1, "GL_R8_SNORM"), # 0x8F94 ("", X, 1, "GL_RG8_SNORM"), # 0x8F95 ("", X, 1, "GL_RGB8_SNORM"), # 0x8F96 ("", X, 1, "GL_RGBA8_SNORM"), # 0x8F97 ("", X, 1, "GL_R16_SNORM"), # 0x8F98 ("", X, 1, "GL_RG16_SNORM"), # 0x8F99 ("", X, 1, "GL_RGB16_SNORM"), # 0x8F9A ("", X, 1, "GL_RGBA16_SNORM"), # 0x8F9B ("", X, 1, "GL_SIGNED_NORMALIZED"), # 0x8F9C ("glGet", B, 1, "GL_PRIMITIVE_RESTART"), # 0x8F9D ("glGet", I, 1, "GL_PRIMITIVE_RESTART_INDEX"), # 0x8F9E ("glGet", I, 1, "GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB"), # 0x8F9F ("", X, 1, "GL_PERFMON_GLOBAL_MODE_QCOM"), # 0x8FA0 ("", X, 1, "GL_BINNING_CONTROL_HINT_QCOM"), # 0x8FB0 ("", X, 1, "GL_CPU_OPTIMIZED_QCOM"), # 0x8FB1 ("", X, 1, "GL_GPU_OPTIMIZED_QCOM"), # 0x8FB2 ("", X, 1, "GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM"), # 0x8FB3 ("", X, 1, "GL_GPU_DISJOINT_EXT"), # 0x8FBB ("", X, 1, "GL_SHADER_BINARY_VIV"), # 0x8FC4 ("", X, 1, "GL_INT8_NV"), # 0x8FE0 ("", X, 1, "GL_INT8_VEC2_NV"), # 0x8FE1 ("", X, 1, "GL_INT8_VEC3_NV"), # 0x8FE2 ("", X, 1, "GL_INT8_VEC4_NV"), # 0x8FE3 ("", X, 1, "GL_INT16_NV"), # 0x8FE4 ("", X, 1, "GL_INT16_VEC2_NV"), # 0x8FE5 ("", X, 1, "GL_INT16_VEC3_NV"), # 0x8FE6 ("", X, 1, "GL_INT16_VEC4_NV"), # 0x8FE7 ("", X, 1, "GL_INT64_VEC2_NV"), # 0x8FE9 ("", X, 1, "GL_INT64_VEC3_NV"), # 0x8FEA ("", X, 1, "GL_INT64_VEC4_NV"), # 0x8FEB ("", X, 1, "GL_UNSIGNED_INT8_NV"), # 0x8FEC ("", X, 1, "GL_UNSIGNED_INT8_VEC2_NV"), # 0x8FED ("", X, 1, "GL_UNSIGNED_INT8_VEC3_NV"), # 0x8FEE ("", X, 1, "GL_UNSIGNED_INT8_VEC4_NV"), # 0x8FEF ("", X, 1, "GL_UNSIGNED_INT16_NV"), # 0x8FF0 ("", X, 1, "GL_UNSIGNED_INT16_VEC2_NV"), # 0x8FF1 ("", X, 1, "GL_UNSIGNED_INT16_VEC3_NV"), # 0x8FF2 ("", X, 1, "GL_UNSIGNED_INT16_VEC4_NV"), # 0x8FF3 ("", X, 1, "GL_UNSIGNED_INT64_VEC2_NV"), # 0x8FF5 ("", X, 1, "GL_UNSIGNED_INT64_VEC3_NV"), # 0x8FF6 ("", X, 1, "GL_UNSIGNED_INT64_VEC4_NV"), # 0x8FF7 ("", X, 1, "GL_FLOAT16_NV"), # 0x8FF8 ("", X, 1, "GL_FLOAT16_VEC2_NV"), # 0x8FF9 ("", X, 1, "GL_FLOAT16_VEC3_NV"), # 0x8FFA ("", X, 1, "GL_FLOAT16_VEC4_NV"), # 0x8FFB ("", X, 1, "GL_DOUBLE_VEC2"), # 0x8FFC ("", X, 1, "GL_DOUBLE_VEC3"), # 0x8FFD ("", X, 1, "GL_DOUBLE_VEC4"), # 0x8FFE ("", X, 1, "GL_SAMPLER_BUFFER_AMD"), # 0x9001 ("", X, 1, "GL_INT_SAMPLER_BUFFER_AMD"), # 0x9002 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD"), # 0x9003 ("", X, 1, "GL_TESSELLATION_MODE_AMD"), # 0x9004 ("", X, 1, "GL_TESSELLATION_FACTOR_AMD"), # 0x9005 ("", X, 1, "GL_DISCRETE_AMD"), # 0x9006 ("", X, 1, "GL_CONTINUOUS_AMD"), # 0x9007 ("", B, 1, "GL_TEXTURE_CUBE_MAP_ARRAY"), # 0x9009 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY"), # 0x900A ("", X, 1, "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY"), # 0x900B ("", X, 1, "GL_SAMPLER_CUBE_MAP_ARRAY"), # 0x900C ("", X, 1, "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW"), # 0x900D ("", X, 1, "GL_INT_SAMPLER_CUBE_MAP_ARRAY"), # 0x900E ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY"), # 0x900F ("", X, 1, "GL_ALPHA_SNORM"), # 0x9010 ("", X, 1, "GL_LUMINANCE_SNORM"), # 0x9011 ("", X, 1, "GL_LUMINANCE_ALPHA_SNORM"), # 0x9012 ("", X, 1, "GL_INTENSITY_SNORM"), # 0x9013 ("", X, 1, "GL_ALPHA8_SNORM"), # 0x9014 ("", X, 1, "GL_LUMINANCE8_SNORM"), # 0x9015 ("", X, 1, "GL_LUMINANCE8_ALPHA8_SNORM"), # 0x9016 ("", X, 1, "GL_INTENSITY8_SNORM"), # 0x9017 ("", X, 1, "GL_ALPHA16_SNORM"), # 0x9018 ("", X, 1, "GL_LUMINANCE16_SNORM"), # 0x9019 ("", X, 1, "GL_LUMINANCE16_ALPHA16_SNORM"), # 0x901A ("", X, 1, "GL_INTENSITY16_SNORM"), # 0x901B ("", X, 1, "GL_FACTOR_MIN_AMD"), # 0x901C ("", X, 1, "GL_FACTOR_MAX_AMD"), # 0x901D ("", B, 1, "GL_DEPTH_CLAMP_NEAR_AMD"), # 0x901E ("", B, 1, "GL_DEPTH_CLAMP_FAR_AMD"), # 0x901F ("", X, 1, "GL_VIDEO_BUFFER_NV"), # 0x9020 ("glGet", I, 1, "GL_VIDEO_BUFFER_BINDING_NV"), # 0x9021 ("", X, 1, "GL_FIELD_UPPER_NV"), # 0x9022 ("", X, 1, "GL_FIELD_LOWER_NV"), # 0x9023 ("", X, 1, "GL_NUM_VIDEO_CAPTURE_STREAMS_NV"), # 0x9024 ("", X, 1, "GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV"), # 0x9025 ("", X, 1, "GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV"), # 0x9026 ("", X, 1, "GL_LAST_VIDEO_CAPTURE_STATUS_NV"), # 0x9027 ("", X, 1, "GL_VIDEO_BUFFER_PITCH_NV"), # 0x9028 ("", X, 1, "GL_VIDEO_COLOR_CONVERSION_MATRIX_NV"), # 0x9029 ("", X, 1, "GL_VIDEO_COLOR_CONVERSION_MAX_NV"), # 0x902A ("", X, 1, "GL_VIDEO_COLOR_CONVERSION_MIN_NV"), # 0x902B ("", X, 1, "GL_VIDEO_COLOR_CONVERSION_OFFSET_NV"), # 0x902C ("", X, 1, "GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV"), # 0x902D ("", X, 1, "GL_PARTIAL_SUCCESS_NV"), # 0x902E ("", X, 1, "GL_SUCCESS_NV"), # 0x902F ("", X, 1, "GL_FAILURE_NV"), # 0x9030 ("", X, 1, "GL_YCBYCR8_422_NV"), # 0x9031 ("", X, 1, "GL_YCBAYCR8A_4224_NV"), # 0x9032 ("", X, 1, "GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV"), # 0x9033 ("", X, 1, "GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV"), # 0x9034 ("", X, 1, "GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV"), # 0x9035 ("", X, 1, "GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV"), # 0x9036 ("", X, 1, "GL_Z4Y12Z4CB12Z4CR12_444_NV"), # 0x9037 ("", X, 1, "GL_VIDEO_CAPTURE_FRAME_WIDTH_NV"), # 0x9038 ("", X, 1, "GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV"), # 0x9039 ("", X, 1, "GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV"), # 0x903A ("", X, 1, "GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV"), # 0x903B ("", X, 1, "GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV"), # 0x903C ("", X, 1, "GL_TEXTURE_COVERAGE_SAMPLES_NV"), # 0x9045 ("", X, 1, "GL_TEXTURE_COLOR_SAMPLES_NV"), # 0x9046 ("glGet", I, 1, "GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX"), # 0x9047 ("glGet", I, 1, "GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX"), # 0x9048 ("glGet", I, 1, "GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX"), # 0x9049 ("glGet", I, 1, "GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX"), # 0x904A ("glGet", I, 1, "GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX"), # 0x904B ("", X, 1, "GL_IMAGE_1D"), # 0x904C ("", X, 1, "GL_IMAGE_2D"), # 0x904D ("", X, 1, "GL_IMAGE_3D"), # 0x904E ("", X, 1, "GL_IMAGE_2D_RECT"), # 0x904F ("", X, 1, "GL_IMAGE_CUBE"), # 0x9050 ("", X, 1, "GL_IMAGE_BUFFER"), # 0x9051 ("", X, 1, "GL_IMAGE_1D_ARRAY"), # 0x9052 ("", X, 1, "GL_IMAGE_2D_ARRAY"), # 0x9053 ("", X, 1, "GL_IMAGE_CUBE_MAP_ARRAY"), # 0x9054 ("", X, 1, "GL_IMAGE_2D_MULTISAMPLE"), # 0x9055 ("", X, 1, "GL_IMAGE_2D_MULTISAMPLE_ARRAY"), # 0x9056 ("", X, 1, "GL_INT_IMAGE_1D"), # 0x9057 ("", X, 1, "GL_INT_IMAGE_2D"), # 0x9058 ("", X, 1, "GL_INT_IMAGE_3D"), # 0x9059 ("", X, 1, "GL_INT_IMAGE_2D_RECT"), # 0x905A ("", X, 1, "GL_INT_IMAGE_CUBE"), # 0x905B ("", X, 1, "GL_INT_IMAGE_BUFFER"), # 0x905C ("", X, 1, "GL_INT_IMAGE_1D_ARRAY"), # 0x905D ("", X, 1, "GL_INT_IMAGE_2D_ARRAY"), # 0x905E ("", X, 1, "GL_INT_IMAGE_CUBE_MAP_ARRAY"), # 0x905F ("", X, 1, "GL_INT_IMAGE_2D_MULTISAMPLE"), # 0x9060 ("", X, 1, "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY"), # 0x9061 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_1D"), # 0x9062 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_2D"), # 0x9063 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_3D"), # 0x9064 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_2D_RECT"), # 0x9065 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_CUBE"), # 0x9066 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_BUFFER"), # 0x9067 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_1D_ARRAY"), # 0x9068 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_2D_ARRAY"), # 0x9069 ("", X, 1, "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY"), # 0x906A ("", X, 1, "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE"), # 0x906B ("", X, 1, "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY"), # 0x906C ("glGet", I, 1, "GL_MAX_IMAGE_SAMPLES"), # 0x906D ("", X, 1, "GL_IMAGE_BINDING_FORMAT"), # 0x906E ("", X, 1, "GL_RGB10_A2UI"), # 0x906F ("", X, 1, "GL_PATH_FORMAT_SVG_NV"), # 0x9070 ("", X, 1, "GL_PATH_FORMAT_PS_NV"), # 0x9071 ("", X, 1, "GL_STANDARD_FONT_NAME_NV"), # 0x9072 ("", X, 1, "GL_SYSTEM_FONT_NAME_NV"), # 0x9073 ("", X, 1, "GL_FILE_NAME_NV"), # 0x9074 ("", X, 1, "GL_PATH_STROKE_WIDTH_NV"), # 0x9075 ("", X, 1, "GL_PATH_END_CAPS_NV"), # 0x9076 ("", X, 1, "GL_PATH_INITIAL_END_CAP_NV"), # 0x9077 ("", X, 1, "GL_PATH_TERMINAL_END_CAP_NV"), # 0x9078 ("", X, 1, "GL_PATH_JOIN_STYLE_NV"), # 0x9079 ("", X, 1, "GL_PATH_MITER_LIMIT_NV"), # 0x907A ("", X, 1, "GL_PATH_DASH_CAPS_NV"), # 0x907B ("", X, 1, "GL_PATH_INITIAL_DASH_CAP_NV"), # 0x907C ("", X, 1, "GL_PATH_TERMINAL_DASH_CAP_NV"), # 0x907D ("", X, 1, "GL_PATH_DASH_OFFSET_NV"), # 0x907E ("", X, 1, "GL_PATH_CLIENT_LENGTH_NV"), # 0x907F ("", X, 1, "GL_PATH_FILL_MODE_NV"), # 0x9080 ("", X, 1, "GL_PATH_FILL_MASK_NV"), # 0x9081 ("", X, 1, "GL_PATH_FILL_COVER_MODE_NV"), # 0x9082 ("", X, 1, "GL_PATH_STROKE_COVER_MODE_NV"), # 0x9083 ("", X, 1, "GL_PATH_STROKE_MASK_NV"), # 0x9084 ("", X, 1, "GL_PATH_SAMPLE_QUALITY_NV"), # 0x9085 ("", X, 1, "GL_PATH_STROKE_OVERSAMPLE_COUNT_NV"), # 0x9087 ("", X, 1, "GL_COUNT_UP_NV"), # 0x9088 ("", X, 1, "GL_COUNT_DOWN_NV"), # 0x9089 ("", X, 1, "GL_PATH_OBJECT_BOUNDING_BOX_NV"), # 0x908A ("", X, 1, "GL_CONVEX_HULL_NV"), # 0x908B ("", X, 1, "GL_MULTI_HULLS_NV"), # 0x908C ("", X, 1, "GL_BOUNDING_BOX_NV"), # 0x908D ("", X, 1, "GL_TRANSLATE_X_NV"), # 0x908E ("", X, 1, "GL_TRANSLATE_Y_NV"), # 0x908F ("", X, 1, "GL_TRANSLATE_2D_NV"), # 0x9090 ("", X, 1, "GL_TRANSLATE_3D_NV"), # 0x9091 ("", X, 1, "GL_AFFINE_2D_NV"), # 0x9092 ("", X, 1, "GL_PROJECTIVE_2D_NV"), # 0x9093 ("", X, 1, "GL_AFFINE_3D_NV"), # 0x9094 ("", X, 1, "GL_PROJECTIVE_3D_NV"), # 0x9095 ("", X, 1, "GL_TRANSPOSE_AFFINE_2D_NV"), # 0x9096 ("", X, 1, "GL_TRANSPOSE_PROJECTIVE_2D_NV"), # 0x9097 ("", X, 1, "GL_TRANSPOSE_AFFINE_3D_NV"), # 0x9098 ("", X, 1, "GL_TRANSPOSE_PROJECTIVE_3D_NV"), # 0x9099 ("", X, 1, "GL_UTF8_NV"), # 0x909A ("", X, 1, "GL_UTF16_NV"), # 0x909B ("", X, 1, "GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV"), # 0x909C ("", X, 1, "GL_PATH_COMMAND_COUNT_NV"), # 0x909D ("", X, 1, "GL_PATH_COORD_COUNT_NV"), # 0x909E ("", X, 1, "GL_PATH_DASH_ARRAY_COUNT_NV"), # 0x909F ("", X, 1, "GL_PATH_COMPUTED_LENGTH_NV"), # 0x90A0 ("", X, 1, "GL_PATH_FILL_BOUNDING_BOX_NV"), # 0x90A1 ("", X, 1, "GL_PATH_STROKE_BOUNDING_BOX_NV"), # 0x90A2 ("", X, 1, "GL_SQUARE_NV"), # 0x90A3 ("", X, 1, "GL_ROUND_NV"), # 0x90A4 ("", X, 1, "GL_TRIANGULAR_NV"), # 0x90A5 ("", X, 1, "GL_BEVEL_NV"), # 0x90A6 ("", X, 1, "GL_MITER_REVERT_NV"), # 0x90A7 ("", X, 1, "GL_MITER_TRUNCATE_NV"), # 0x90A8 ("", X, 1, "GL_SKIP_MISSING_GLYPH_NV"), # 0x90A9 ("", X, 1, "GL_USE_MISSING_GLYPH_NV"), # 0x90AA ("", X, 1, "GL_PATH_ERROR_POSITION_NV"), # 0x90AB ("", X, 1, "GL_PATH_FOG_GEN_MODE_NV"), # 0x90AC ("", X, 1, "GL_ACCUM_ADJACENT_PAIRS_NV"), # 0x90AD ("", X, 1, "GL_ADJACENT_PAIRS_NV"), # 0x90AE ("", X, 1, "GL_FIRST_TO_REST_NV"), # 0x90AF ("", X, 1, "GL_PATH_GEN_MODE_NV"), # 0x90B0 ("", X, 1, "GL_PATH_GEN_COEFF_NV"), # 0x90B1 ("", X, 1, "GL_PATH_GEN_COLOR_FORMAT_NV"), # 0x90B2 ("", X, 1, "GL_PATH_GEN_COMPONENTS_NV"), # 0x90B3 ("", X, 1, "GL_PATH_DASH_OFFSET_RESET_NV"), # 0x90B4 ("", X, 1, "GL_MOVE_TO_RESETS_NV"), # 0x90B5 ("", X, 1, "GL_MOVE_TO_CONTINUES_NV"), # 0x90B6 ("", X, 1, "GL_PATH_STENCIL_FUNC_NV"), # 0x90B7 ("", X, 1, "GL_PATH_STENCIL_REF_NV"), # 0x90B8 ("", X, 1, "GL_PATH_STENCIL_VALUE_MASK_NV"), # 0x90B9 ("", X, 1, "GL_SCALED_RESOLVE_FASTEST_EXT"), # 0x90BA ("", X, 1, "GL_SCALED_RESOLVE_NICEST_EXT"), # 0x90BB ("glGet", I, 1, "GL_MIN_MAP_BUFFER_ALIGNMENT"), # 0x90BC ("", X, 1, "GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV"), # 0x90BD ("", X, 1, "GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV"), # 0x90BE ("", X, 1, "GL_PATH_COVER_DEPTH_FUNC_NV"), # 0x90BF ("", X, 1, "GL_IMAGE_FORMAT_COMPATIBILITY_TYPE"), # 0x90C7 ("", X, 1, "GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE"), # 0x90C8 ("", X, 1, "GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS"), # 0x90C9 ("glGet", I, 1, "GL_MAX_VERTEX_IMAGE_UNIFORMS"), # 0x90CA ("glGet", I, 1, "GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS"), # 0x90CB ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS"), # 0x90CC ("glGet", I, 1, "GL_MAX_GEOMETRY_IMAGE_UNIFORMS"), # 0x90CD ("glGet", I, 1, "GL_MAX_FRAGMENT_IMAGE_UNIFORMS"), # 0x90CE ("glGet", I, 1, "GL_MAX_COMBINED_IMAGE_UNIFORMS"), # 0x90CF ("", X, 1, "GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV"), # 0x90D0 ("", X, 1, "GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV"), # 0x90D1 ("", I, 1, "GL_SHADER_STORAGE_BUFFER"), # 0x90D2 ("glGet,glGet_i", I, 1, "GL_SHADER_STORAGE_BUFFER_BINDING"), # 0x90D3 ("glGet_i", I, 1, "GL_SHADER_STORAGE_BUFFER_START"), # 0x90D4 ("glGet_i", I, 1, "GL_SHADER_STORAGE_BUFFER_SIZE"), # 0x90D5 ("", I, 1, "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS"), # 0x90D6 ("", I, 1, "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS"), # 0x90D7 ("", I, 1, "GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS"), # 0x90D8 ("", I, 1, "GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS"), # 0x90D9 ("", I, 1, "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS"), # 0x90DA ("glGet", I, 1, "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS"), # 0x90DB ("", I, 1, "GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS"), # 0x90DC ("", I, 1, "GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS"), # 0x90DD ("", I, 1, "GL_MAX_SHADER_STORAGE_BLOCK_SIZE"), # 0x90DE ("", X, 1, "GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT"), # 0x90DF ("", X, 1, "GL_SYNC_X11_FENCE_EXT"), # 0x90E1 ("glGetTexParameter", E, 1, "GL_DEPTH_STENCIL_TEXTURE_MODE"), # 0x90EA ("glGet", I, 1, "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS"), # 0x90EB ("", X, 1, "GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER"), # 0x90EC ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER"), # 0x90ED ("", X, 1, "GL_DISPATCH_INDIRECT_BUFFER"), # 0x90EE ("glGet", I, 1, "GL_DISPATCH_INDIRECT_BUFFER_BINDING"), # 0x90EF ("", X, 1, "GL_COLOR_ATTACHMENT_EXT"), # 0x90F0 ("", X, 1, "GL_MULTIVIEW_EXT"), # 0x90F1 ("", X, 1, "GL_MAX_MULTIVIEW_BUFFERS_EXT"), # 0x90F2 ("", X, 1, "GL_CONTEXT_ROBUST_ACCESS"), # 0x90F3 ("", X, 1, "GL_COMPUTE_PROGRAM_NV"), # 0x90FB ("", X, 1, "GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV"), # 0x90FC ("", X, 1, "GL_TEXTURE_2D_MULTISAMPLE"), # 0x9100 ("", X, 1, "GL_PROXY_TEXTURE_2D_MULTISAMPLE"), # 0x9101 ("", X, 1, "GL_TEXTURE_2D_MULTISAMPLE_ARRAY"), # 0x9102 ("", X, 1, "GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY"), # 0x9103 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_2D_MULTISAMPLE"), # 0x9104 ("glGet_texture", I, 1, "GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY"), # 0x9105 ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_SAMPLES"), # 0x9106 ("glGetTexLevelParameter", B, 1, "GL_TEXTURE_FIXED_SAMPLE_LOCATIONS"), # 0x9107 ("", X, 1, "GL_SAMPLER_2D_MULTISAMPLE"), # 0x9108 ("", X, 1, "GL_INT_SAMPLER_2D_MULTISAMPLE"), # 0x9109 ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE"), # 0x910A ("", X, 1, "GL_SAMPLER_2D_MULTISAMPLE_ARRAY"), # 0x910B ("", X, 1, "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"), # 0x910C ("", X, 1, "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"), # 0x910D ("glGet", I, 1, "GL_MAX_COLOR_TEXTURE_SAMPLES"), # 0x910E ("glGet", I, 1, "GL_MAX_DEPTH_TEXTURE_SAMPLES"), # 0x910F ("glGet", I, 1, "GL_MAX_INTEGER_SAMPLES"), # 0x9110 ("_glGet", I64, 1, "GL_MAX_SERVER_WAIT_TIMEOUT"), # 0x9111 ("", X, 1, "GL_OBJECT_TYPE"), # 0x9112 ("", X, 1, "GL_SYNC_CONDITION"), # 0x9113 ("", X, 1, "GL_SYNC_STATUS"), # 0x9114 ("", X, 1, "GL_SYNC_FLAGS"), # 0x9115 ("", X, 1, "GL_SYNC_FENCE"), # 0x9116 ("", X, 1, "GL_SYNC_GPU_COMMANDS_COMPLETE"), # 0x9117 ("", X, 1, "GL_UNSIGNALED"), # 0x9118 ("", X, 1, "GL_SIGNALED"), # 0x9119 ("", X, 1, "GL_ALREADY_SIGNALED"), # 0x911A ("", X, 1, "GL_TIMEOUT_EXPIRED"), # 0x911B ("", X, 1, "GL_CONDITION_SATISFIED"), # 0x911C ("", X, 1, "GL_WAIT_FAILED"), # 0x911D ("glGetBufferParameter", I, 1, "GL_BUFFER_ACCESS_FLAGS"), # 0x911F ("glGetBufferParameter", I, 1, "GL_BUFFER_MAP_LENGTH"), # 0x9120 ("glGetBufferParameter", I, 1, "GL_BUFFER_MAP_OFFSET"), # 0x9121 ("glGet", I, 1, "GL_MAX_VERTEX_OUTPUT_COMPONENTS"), # 0x9122 ("glGet", I, 1, "GL_MAX_GEOMETRY_INPUT_COMPONENTS"), # 0x9123 ("glGet", I, 1, "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS"), # 0x9124 ("glGet", I, 1, "GL_MAX_FRAGMENT_INPUT_COMPONENTS"), # 0x9125 ("glGet", I, 1, "GL_CONTEXT_PROFILE_MASK"), # 0x9126 ("glGet", I, 1, "GL_UNPACK_COMPRESSED_BLOCK_WIDTH"), # 0x9127 ("glGet", I, 1, "GL_UNPACK_COMPRESSED_BLOCK_HEIGHT"), # 0x9128 ("glGet", I, 1, "GL_UNPACK_COMPRESSED_BLOCK_DEPTH"), # 0x9129 ("glGet", I, 1, "GL_UNPACK_COMPRESSED_BLOCK_SIZE"), # 0x912A ("glGet", I, 1, "GL_PACK_COMPRESSED_BLOCK_WIDTH"), # 0x912B ("glGet", I, 1, "GL_PACK_COMPRESSED_BLOCK_HEIGHT"), # 0x912C ("glGet", I, 1, "GL_PACK_COMPRESSED_BLOCK_DEPTH"), # 0x912D ("glGet", I, 1, "GL_PACK_COMPRESSED_BLOCK_SIZE"), # 0x912E ("glGetTexParameter", B, 1, "GL_TEXTURE_IMMUTABLE_FORMAT"), # 0x912F ("", X, 1, "GL_SGX_PROGRAM_BINARY_IMG"), # 0x9130 ("", I, 1, "GL_RENDERBUFFER_SAMPLES_IMG"), # 0x9133 ("", X, 1, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG"), # 0x9134 ("", I, 1, "GL_MAX_SAMPLES_IMG"), # 0x9135 ("", I, 1, "GL_TEXTURE_SAMPLES_IMG"), # 0x9136 ("", X, 1, "GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG"), # 0x9137 ("", X, 1, "GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG"), # 0x9138 ("glGet", I, 1, "GL_MAX_DEBUG_MESSAGE_LENGTH"), # 0x9143 ("glGet", I, 1, "GL_MAX_DEBUG_LOGGED_MESSAGES"), # 0x9144 ("glGet", I, 1, "GL_DEBUG_LOGGED_MESSAGES"), # 0x9145 ("", X, 1, "GL_DEBUG_SEVERITY_HIGH"), # 0x9146 ("", X, 1, "GL_DEBUG_SEVERITY_MEDIUM"), # 0x9147 ("", X, 1, "GL_DEBUG_SEVERITY_LOW"), # 0x9148 ("", X, 1, "GL_DEBUG_CATEGORY_API_ERROR_AMD"), # 0x9149 ("", X, 1, "GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD"), # 0x914A ("", X, 1, "GL_DEBUG_CATEGORY_DEPRECATION_AMD"), # 0x914B ("", X, 1, "GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD"), # 0x914C ("", X, 1, "GL_DEBUG_CATEGORY_PERFORMANCE_AMD"), # 0x914D ("", X, 1, "GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD"), # 0x914E ("", X, 1, "GL_DEBUG_CATEGORY_APPLICATION_AMD"), # 0x914F ("", X, 1, "GL_DEBUG_CATEGORY_OTHER_AMD"), # 0x9150 ("", X, 1, "GL_BUFFER_OBJECT_EXT"), # 0x9151 ("", X, 1, "GL_PERFORMANCE_MONITOR_AMD"), # 0x9152 ("", X, 1, "GL_QUERY_OBJECT_EXT"), # 0x9153 ("", X, 1, "GL_VERTEX_ARRAY_OBJECT_EXT"), # 0x9154 ("", X, 1, "GL_SAMPLER_OBJECT_AMD"), # 0x9155 ("", X, 1, "GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD"), # 0x9160 ("", X, 1, "GL_QUERY_BUFFER"), # 0x9192 ("glGet", I, 1, "GL_QUERY_BUFFER_BINDING"), # 0x9193 ("glGetQueryObject", I, 1, "GL_QUERY_RESULT_NO_WAIT"), # 0x9194 ("", X, 1, "GL_VIRTUAL_PAGE_SIZE_X_ARB"), # 0x9195 ("", X, 1, "GL_VIRTUAL_PAGE_SIZE_Y_ARB"), # 0x9196 ("", X, 1, "GL_VIRTUAL_PAGE_SIZE_Z_ARB"), # 0x9197 ("glGet", I, 1, "GL_MAX_SPARSE_TEXTURE_SIZE_ARB"), # 0x9198 ("glGet", I, 1, "GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB"), # 0x9199 ("glGet", I, 1, "GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS"), # 0x919A ("", X, 1, "GL_MIN_SPARSE_LEVEL_AMD"), # 0x919B ("", X, 1, "GL_MIN_LOD_WARNING_AMD"), # 0x919C ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_BUFFER_OFFSET"), # 0x919D ("glGetTexLevelParameter", I, 1, "GL_TEXTURE_BUFFER_SIZE"), # 0x919E ("glGet", I, 1, "GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT"), # 0x919F ("", X, 1, "GL_STREAM_RASTERIZATION_AMD"), # 0x91A0 ("", X, 1, "GL_VERTEX_ELEMENT_SWIZZLE_AMD"), # 0x91A4 ("", X, 1, "GL_VERTEX_ID_SWIZZLE_AMD"), # 0x91A5 ("", X, 1, "GL_TEXTURE_SPARSE_ARB"), # 0x91A6 ("", X, 1, "GL_VIRTUAL_PAGE_SIZE_INDEX_ARB"), # 0x91A7 ("", X, 1, "GL_NUM_VIRTUAL_PAGE_SIZES_ARB"), # 0x91A8 ("glGet", B, 1, "GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB"), # 0x91A9 ("", X, 1, "GL_NUM_SPARSE_LEVELS_ARB"), # 0x91AA ("glGetProgramPipeline", I, 1, "GL_COMPUTE_SHADER"), # 0x91B9 ("glGet", I, 1, "GL_MAX_COMPUTE_UNIFORM_BLOCKS"), # 0x91BB ("glGet", I, 1, "GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS"), # 0x91BC ("glGet", I, 1, "GL_MAX_COMPUTE_IMAGE_UNIFORMS"), # 0x91BD ("glGet", I, 3, "GL_MAX_COMPUTE_WORK_GROUP_COUNT"), # 0x91BE ("glGet", I, 3, "GL_MAX_COMPUTE_WORK_GROUP_SIZE"), # 0x91BF #("", X, 1, "GL_UNPACK_FLIP_Y_WEBGL"), # 0x9240 #("", X, 1, "GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL"), # 0x9241 #("", X, 1, "GL_CONTEXT_LOST_WEBGL"), # 0x9242 #("", X, 1, "GL_UNPACK_COLORSPACE_CONVERSION_WEBGL"), # 0x9243 #("", X, 1, "GL_BROWSER_DEFAULT_WEBGL"), # 0x9244 ("", X, 1, "GL_SHADER_BINARY_DMP"), # 0x9250 #("", X, 1, "GL_GCCSO_SHADER_BINARY_FJ"), # 0x9260 ("", X, 1, "GL_COMPRESSED_R11_EAC"), # 0x9270 ("", X, 1, "GL_COMPRESSED_SIGNED_R11_EAC"), # 0x9271 ("", X, 1, "GL_COMPRESSED_RG11_EAC"), # 0x9272 ("", X, 1, "GL_COMPRESSED_SIGNED_RG11_EAC"), # 0x9273 ("", X, 1, "GL_COMPRESSED_RGB8_ETC2"), # 0x9274 ("", X, 1, "GL_COMPRESSED_SRGB8_ETC2"), # 0x9275 ("", X, 1, "GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2"), # 0x9276 ("", X, 1, "GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2"), # 0x9277 ("", X, 1, "GL_COMPRESSED_RGBA8_ETC2_EAC"), # 0x9278 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"), # 0x9279 ("", X, 1, "GL_BLEND_PREMULTIPLIED_SRC_NV"), # 0x9280 ("", X, 1, "GL_BLEND_OVERLAP_NV"), # 0x9281 ("", X, 1, "GL_UNCORRELATED_NV"), # 0x9282 ("", X, 1, "GL_DISJOINT_NV"), # 0x9283 ("", X, 1, "GL_CONJOINT_NV"), # 0x9284 ("", X, 1, "GL_BLEND_ADVANCED_COHERENT_KHR"), # 0x9285 ("", X, 1, "GL_SRC_NV"), # 0x9286 ("", X, 1, "GL_DST_NV"), # 0x9287 ("", X, 1, "GL_SRC_OVER_NV"), # 0x9288 ("", X, 1, "GL_DST_OVER_NV"), # 0x9289 ("", X, 1, "GL_SRC_IN_NV"), # 0x928A ("", X, 1, "GL_DST_IN_NV"), # 0x928B ("", X, 1, "GL_SRC_OUT_NV"), # 0x928C ("", X, 1, "GL_DST_OUT_NV"), # 0x928D ("", X, 1, "GL_SRC_ATOP_NV"), # 0x928E ("", X, 1, "GL_DST_ATOP_NV"), # 0x928F ("", X, 1, "GL_PLUS_NV"), # 0x9291 ("", X, 1, "GL_PLUS_DARKER_NV"), # 0x9292 ("", X, 1, "GL_MULTIPLY_KHR"), # 0x9294 ("", X, 1, "GL_SCREEN_KHR"), # 0x9295 ("", X, 1, "GL_OVERLAY_KHR"), # 0x9296 ("", X, 1, "GL_DARKEN_KHR"), # 0x9297 ("", X, 1, "GL_LIGHTEN_KHR"), # 0x9298 ("", X, 1, "GL_COLORDODGE_KHR"), # 0x9299 ("", X, 1, "GL_COLORBURN_KHR"), # 0x929A ("", X, 1, "GL_HARDLIGHT_KHR"), # 0x929B ("", X, 1, "GL_SOFTLIGHT_KHR"), # 0x929C ("", X, 1, "GL_DIFFERENCE_KHR"), # 0x929E ("", X, 1, "GL_MINUS_NV"), # 0x929F ("", X, 1, "GL_EXCLUSION_KHR"), # 0x92A0 ("", X, 1, "GL_CONTRAST_NV"), # 0x92A1 ("", X, 1, "GL_INVERT_RGB_NV"), # 0x92A3 ("", X, 1, "GL_LINEARDODGE_NV"), # 0x92A4 ("", X, 1, "GL_LINEARBURN_NV"), # 0x92A5 ("", X, 1, "GL_VIVIDLIGHT_NV"), # 0x92A6 ("", X, 1, "GL_LINEARLIGHT_NV"), # 0x92A7 ("", X, 1, "GL_PINLIGHT_NV"), # 0x92A8 ("", X, 1, "GL_HARDMIX_NV"), # 0x92A9 ("", X, 1, "GL_HSL_HUE_KHR"), # 0x92AD ("", X, 1, "GL_HSL_SATURATION_KHR"), # 0x92AE ("", X, 1, "GL_HSL_COLOR_KHR"), # 0x92AF ("", X, 1, "GL_HSL_LUMINOSITY_KHR"), # 0x92B0 ("", X, 1, "GL_PLUS_CLAMPED_NV"), # 0x92B1 ("", X, 1, "GL_PLUS_CLAMPED_ALPHA_NV"), # 0x92B2 ("", X, 1, "GL_MINUS_CLAMPED_NV"), # 0x92B3 ("", X, 1, "GL_INVERT_OVG_NV"), # 0x92B4 ("", X, 1, "GL_PRIMITIVE_BOUNDING_BOX_EXT"), # 0x92BE ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER"), # 0x92C0 # FIXME: Causes Mesa to segfault (issue #332). Disable for now. ("_glGet,_glGet_i", I, 1, "GL_ATOMIC_COUNTER_BUFFER_BINDING"), # 0x92C1 ("glGet_i", I, 1, "GL_ATOMIC_COUNTER_BUFFER_START"), # 0x92C2 ("glGet_i", I, 1, "GL_ATOMIC_COUNTER_BUFFER_SIZE"), # 0x92C3 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE"), # 0x92C4 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS"), # 0x92C5 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES"), # 0x92C6 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER"), # 0x92C7 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER"), # 0x92C8 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER"), # 0x92C9 ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER"), # 0x92CA ("", X, 1, "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER"), # 0x92CB ("glGet", I, 1, "GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS"), # 0x92CC ("glGet", I, 1, "GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS"), # 0x92CD ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS"), # 0x92CE ("glGet", I, 1, "GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS"), # 0x92CF ("glGet", I, 1, "GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS"), # 0x92D0 ("glGet", I, 1, "GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS"), # 0x92D1 ("glGet", I, 1, "GL_MAX_VERTEX_ATOMIC_COUNTERS"), # 0x92D2 ("glGet", I, 1, "GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS"), # 0x92D3 ("glGet", I, 1, "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS"), # 0x92D4 ("glGet", I, 1, "GL_MAX_GEOMETRY_ATOMIC_COUNTERS"), # 0x92D5 ("glGet", I, 1, "GL_MAX_FRAGMENT_ATOMIC_COUNTERS"), # 0x92D6 ("glGet", I, 1, "GL_MAX_COMBINED_ATOMIC_COUNTERS"), # 0x92D7 ("glGet", I, 1, "GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE"), # 0x92D8 ("glGetProgram", I, 1, "GL_ACTIVE_ATOMIC_COUNTER_BUFFERS"), # 0x92D9 ("", X, 1, "GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX"), # 0x92DA ("", X, 1, "GL_UNSIGNED_INT_ATOMIC_COUNTER"), # 0x92DB ("glGet", I, 1, "GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS"), # 0x92DC ("glGet", B, 1, "GL_DEBUG_OUTPUT"), # 0x92E0 ("", X, 1, "GL_UNIFORM"), # 0x92E1 ("", X, 1, "GL_UNIFORM_BLOCK"), # 0x92E2 ("", X, 1, "GL_PROGRAM_INPUT"), # 0x92E3 ("", X, 1, "GL_PROGRAM_OUTPUT"), # 0x92E4 ("", X, 1, "GL_BUFFER_VARIABLE"), # 0x92E5 ("", X, 1, "GL_SHADER_STORAGE_BLOCK"), # 0x92E6 ("", I, 1, "GL_IS_PER_PATCH"), # 0x92E7 ("", X, 1, "GL_VERTEX_SUBROUTINE"), # 0x92E8 ("", X, 1, "GL_TESS_CONTROL_SUBROUTINE"), # 0x92E9 ("", X, 1, "GL_TESS_EVALUATION_SUBROUTINE"), # 0x92EA ("", X, 1, "GL_GEOMETRY_SUBROUTINE"), # 0x92EB ("", X, 1, "GL_FRAGMENT_SUBROUTINE"), # 0x92EC ("", X, 1, "GL_COMPUTE_SUBROUTINE"), # 0x92ED ("", X, 1, "GL_VERTEX_SUBROUTINE_UNIFORM"), # 0x92EE ("", X, 1, "GL_TESS_CONTROL_SUBROUTINE_UNIFORM"), # 0x92EF ("", X, 1, "GL_TESS_EVALUATION_SUBROUTINE_UNIFORM"), # 0x92F0 ("", X, 1, "GL_GEOMETRY_SUBROUTINE_UNIFORM"), # 0x92F1 ("", X, 1, "GL_FRAGMENT_SUBROUTINE_UNIFORM"), # 0x92F2 ("", X, 1, "GL_COMPUTE_SUBROUTINE_UNIFORM"), # 0x92F3 ("", X, 1, "GL_TRANSFORM_FEEDBACK_VARYING"), # 0x92F4 ("", I, 1, "GL_ACTIVE_RESOURCES"), # 0x92F5 ("", I, 1, "GL_MAX_NAME_LENGTH"), # 0x92F6 ("", I, 1, "GL_MAX_NUM_ACTIVE_VARIABLES"), # 0x92F7 ("", I, 1, "GL_MAX_NUM_COMPATIBLE_SUBROUTINES"), # 0x92F8 ("", I, 1, "GL_NAME_LENGTH"), # 0x92F9 ("", I, 1, "GL_TYPE"), # 0x92FA ("", I, 1, "GL_ARRAY_SIZE"), # 0x92FB ("", I, 1, "GL_OFFSET"), # 0x92FC ("", I, 1, "GL_BLOCK_INDEX"), # 0x92FD ("", I, 1, "GL_ARRAY_STRIDE"), # 0x92FE ("", I, 1, "GL_MATRIX_STRIDE"), # 0x92FF ("", I, 1, "GL_IS_ROW_MAJOR"), # 0x9300 ("", I, 1, "GL_ATOMIC_COUNTER_BUFFER_INDEX"), # 0x9301 ("", I, 1, "GL_BUFFER_BINDING"), # 0x9302 ("", I, 1, "GL_BUFFER_DATA_SIZE"), # 0x9303 ("", I, 1, "GL_NUM_ACTIVE_VARIABLES"), # 0x9304 ("", I, 1, "GL_ACTIVE_VARIABLES"), # 0x9305 ("", I, 1, "GL_REFERENCED_BY_VERTEX_SHADER"), # 0x9306 ("", I, 1, "GL_REFERENCED_BY_TESS_CONTROL_SHADER"), # 0x9307 ("", I, 1, "GL_REFERENCED_BY_TESS_EVALUATION_SHADER"), # 0x9308 ("", I, 1, "GL_REFERENCED_BY_GEOMETRY_SHADER"), # 0x9309 ("", I, 1, "GL_REFERENCED_BY_FRAGMENT_SHADER"), # 0x930A ("", I, 1, "GL_REFERENCED_BY_COMPUTE_SHADER"), # 0x930B ("", I, 1, "GL_TOP_LEVEL_ARRAY_SIZE"), # 0x930C ("", I, 1, "GL_TOP_LEVEL_ARRAY_STRIDE"), # 0x930D ("", I, 1, "GL_LOCATION"), # 0x930E ("", I, 1, "GL_LOCATION_INDEX"), # 0x930F ("", I, 1, "GL_FRAMEBUFFER_DEFAULT_WIDTH"), # 0x9310 ("", I, 1, "GL_FRAMEBUFFER_DEFAULT_HEIGHT"), # 0x9311 ("", I, 1, "GL_FRAMEBUFFER_DEFAULT_LAYERS"), # 0x9312 ("", I, 1, "GL_FRAMEBUFFER_DEFAULT_SAMPLES"), # 0x9313 ("", B, 1, "GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"), # 0x9314 ("glGet", I, 1, "GL_MAX_FRAMEBUFFER_WIDTH"), # 0x9315 ("glGet", I, 1, "GL_MAX_FRAMEBUFFER_HEIGHT"), # 0x9316 ("glGet", I, 1, "GL_MAX_FRAMEBUFFER_LAYERS"), # 0x9317 ("glGet", I, 1, "GL_MAX_FRAMEBUFFER_SAMPLES"), # 0x9318 ("", X, 1, "GL_WARP_SIZE_NV"), # 0x9339 ("", X, 1, "GL_WARPS_PER_SM_NV"), # 0x933A ("", X, 1, "GL_SM_COUNT_NV"), # 0x933B ("glGet", I, 1, "GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB"), # 0x9344 ("glGet", I, 1, "GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB"), # 0x9345 ("", X, 1, "GL_LOCATION_COMPONENT"), # 0x934A ("", X, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_INDEX"), # 0x934B ("", X, 1, "GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE"), # 0x934C ("glGet", E, 1, "GL_CLIP_ORIGIN"), # 0x935C ("glGet", E, 1, "GL_CLIP_DEPTH_MODE"), # 0x935D ("", X, 1, "GL_NEGATIVE_ONE_TO_ONE"), # 0x935E ("", X, 1, "GL_ZERO_TO_ONE"), # 0x935F ("", X, 1, "GL_CLEAR_TEXTURE"), # 0x9365 ("", X, 1, "GL_FONT_GLYPHS_AVAILABLE_NV"), # 0x9368 ("", X, 1, "GL_FONT_TARGET_UNAVAILABLE_NV"), # 0x9369 ("", X, 1, "GL_FONT_UNAVAILABLE_NV"), # 0x936A ("", X, 1, "GL_FONT_UNINTELLIGIBLE_NV"), # 0x936B ("", X, 1, "GL_STANDARD_FONT_FORMAT_NV"), # 0x936C ("", X, 1, "GL_FRAGMENT_INPUT_NV"), # 0x936D ("", X, 1, "GL_NUM_SAMPLE_COUNTS"), # 0x9380 ("", X, 1, "GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE"), # 0x93A0 ("", X, 1, "GL_BGRA8_EXT"), # 0x93A1 ("", X, 1, "GL_TEXTURE_USAGE_ANGLE"), # 0x93A2 ("", X, 1, "GL_FRAMEBUFFER_ATTACHMENT_ANGLE"), # 0x93A3 ("", X, 1, "GL_PACK_REVERSE_ROW_ORDER_ANGLE"), # 0x93A4 ("", X, 1, "GL_PROGRAM_BINARY_ANGLE"), # 0x93A6 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_4x4_KHR"), # 0x93B0 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_5x4_KHR"), # 0x93B1 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_5x5_KHR"), # 0x93B2 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_6x5_KHR"), # 0x93B3 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_6x6_KHR"), # 0x93B4 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_8x5_KHR"), # 0x93B5 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_8x6_KHR"), # 0x93B6 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_8x8_KHR"), # 0x93B7 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_10x5_KHR"), # 0x93B8 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_10x6_KHR"), # 0x93B9 ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_10x8_KHR"), # 0x93BA ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_10x10_KHR"), # 0x93BB ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_12x10_KHR"), # 0x93BC ("", X, 1, "GL_COMPRESSED_RGBA_ASTC_12x12_KHR"), # 0x93BD #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_3x3x3_OES"), # 0x93C0 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_4x3x3_OES"), # 0x93C1 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_4x4x3_OES"), # 0x93C2 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_4x4x4_OES"), # 0x93C3 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_5x4x4_OES"), # 0x93C4 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_5x5x4_OES"), # 0x93C5 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_5x5x5_OES"), # 0x93C6 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_6x5x5_OES"), # 0x93C7 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_6x6x5_OES"), # 0x93C8 #("", X, 1, "GL_COMPRESSED_RGBA_ASTC_6x6x6_OES"), # 0x93C9 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR"), # 0x93D0 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR"), # 0x93D1 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR"), # 0x93D2 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR"), # 0x93D3 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR"), # 0x93D4 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"), # 0x93D5 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"), # 0x93D6 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"), # 0x93D7 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"), # 0x93D8 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"), # 0x93D9 ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"), # 0x93DA ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"), # 0x93DB ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"), # 0x93DC ("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"), # 0x93DD #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES"), # 0x93E0 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES"), # 0x93E1 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES"), # 0x93E2 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES"), # 0x93E3 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES"), # 0x93E4 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES"), # 0x93E5 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES"), # 0x93E6 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES"), # 0x93E7 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES"), # 0x93E8 #("", X, 1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES"), # 0x93E9 ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG"), # 0x93F0 ("", X, 1, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG"), # 0x93F1 ("", X, 1, "GL_PERFQUERY_COUNTER_EVENT_INTEL"), # 0x94F0 ("", X, 1, "GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL"), # 0x94F1 ("", X, 1, "GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL"), # 0x94F2 ("", X, 1, "GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL"), # 0x94F3 ("", X, 1, "GL_PERFQUERY_COUNTER_RAW_INTEL"), # 0x94F4 ("", X, 1, "GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL"), # 0x94F5 ("", X, 1, "GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL"), # 0x94F8 ("", X, 1, "GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL"), # 0x94F9 ("", X, 1, "GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL"), # 0x94FA ("", X, 1, "GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL"), # 0x94FB ("", X, 1, "GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL"), # 0x94FC ("", X, 1, "GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL"), # 0x94FD ("", X, 1, "GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL"), # 0x94FE ("", X, 1, "GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL"), # 0x94FF ("", X, 1, "GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL"), # 0x9500 ("_glGet", B, 1, "GL_RASTER_POSITION_UNCLIPPED_IBM"), # 0x19262 ("", X, 1, "GL_CULL_VERTEX_IBM"), # 0x1928A ("", X, 1, "GL_ALL_STATIC_DATA_IBM"), # 0x19294 ("", X, 1, "GL_STATIC_VERTEX_ARRAY_IBM"), # 0x19295 ("", X, 1, "GL_VERTEX_ARRAY_LIST_IBM"), # 0x1929E ("", X, 1, "GL_NORMAL_ARRAY_LIST_IBM"), # 0x1929F ("", X, 1, "GL_COLOR_ARRAY_LIST_IBM"), # 0x192A0 ("", X, 1, "GL_INDEX_ARRAY_LIST_IBM"), # 0x192A1 ("", X, 1, "GL_TEXTURE_COORD_ARRAY_LIST_IBM"), # 0x192A2 ("", X, 1, "GL_EDGE_FLAG_ARRAY_LIST_IBM"), # 0x192A3 ("", X, 1, "GL_FOG_COORDINATE_ARRAY_LIST_IBM"), # 0x192A4 ("", X, 1, "GL_SECONDARY_COLOR_ARRAY_LIST_IBM"), # 0x192A5 ("", X, 1, "GL_VERTEX_ARRAY_LIST_STRIDE_IBM"), # 0x192A8 ("", X, 1, "GL_NORMAL_ARRAY_LIST_STRIDE_IBM"), # 0x192A9 ("", X, 1, "GL_COLOR_ARRAY_LIST_STRIDE_IBM"), # 0x192AA ("", X, 1, "GL_INDEX_ARRAY_LIST_STRIDE_IBM"), # 0x192AB ("", X, 1, "GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM"), # 0x192AC ("", X, 1, "GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM"), # 0x192AD ("", X, 1, "GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM"), # 0x192AE ("", X, 1, "GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM"), # 0x192AF ("", X, 1, "GL_PREFER_DOUBLEBUFFER_HINT_PGI"), # 0x1A1F8 ("", X, 1, "GL_CONSERVE_MEMORY_HINT_PGI"), # 0x1A1FD ("", X, 1, "GL_RECLAIM_MEMORY_HINT_PGI"), # 0x1A1FE ("", X, 1, "GL_NATIVE_GRAPHICS_HANDLE_PGI"), # 0x1A202 ("", X, 1, "GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI"), # 0x1A203 ("", X, 1, "GL_NATIVE_GRAPHICS_END_HINT_PGI"), # 0x1A204 ("", X, 1, "GL_ALWAYS_FAST_HINT_PGI"), # 0x1A20C ("", X, 1, "GL_ALWAYS_SOFT_HINT_PGI"), # 0x1A20D ("", X, 1, "GL_ALLOW_DRAW_OBJ_HINT_PGI"), # 0x1A20E ("", X, 1, "GL_ALLOW_DRAW_WIN_HINT_PGI"), # 0x1A20F ("", X, 1, "GL_ALLOW_DRAW_FRG_HINT_PGI"), # 0x1A210 ("", X, 1, "GL_ALLOW_DRAW_MEM_HINT_PGI"), # 0x1A211 ("", X, 1, "GL_STRICT_DEPTHFUNC_HINT_PGI"), # 0x1A216 ("", X, 1, "GL_STRICT_LIGHTING_HINT_PGI"), # 0x1A217 ("", X, 1, "GL_STRICT_SCISSOR_HINT_PGI"), # 0x1A218 ("", X, 1, "GL_FULL_STIPPLE_HINT_PGI"), # 0x1A219 ("", X, 1, "GL_CLIP_NEAR_HINT_PGI"), # 0x1A220 ("", X, 1, "GL_CLIP_FAR_HINT_PGI"), # 0x1A221 ("", X, 1, "GL_WIDE_LINE_HINT_PGI"), # 0x1A222 ("", X, 1, "GL_BACK_NORMALS_HINT_PGI"), # 0x1A223 ("", X, 1, "GL_VERTEX_DATA_HINT_PGI"), # 0x1A22A ("", X, 1, "GL_VERTEX_CONSISTENT_HINT_PGI"), # 0x1A22B ("", X, 1, "GL_MATERIAL_SIDE_HINT_PGI"), # 0x1A22C ("", X, 1, "GL_MAX_VERTEX_HINT_PGI"), # 0x1A22D ("", X, 1, "GL_INVALID_INDEX"), # 0xFFFFFFFFu #("", X, 1, "GL_TIMEOUT_IGNORED"), # 0xFFFFFFFFFFFFFFFFull ] # Add all enums to GLenum type descriptor for _function, _type, _count, _name in parameters: GLenum.values.append(_name) tmpNnpnZF/specs/eglapi.py0000664000175000017500000003475412543167424014731 0ustar chrischris########################################################################## # # Copyright 2011 LunarG, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """EGL API description.""" from stdapi import * from gltypes import * from eglenum import * EGLNativeDisplayType = Opaque("EGLNativeDisplayType") EGLNativeWindowType = Opaque("EGLNativeWindowType") EGLNativePixmapType = Opaque("EGLNativePixmapType") EGLDisplay = Opaque("EGLDisplay") EGLConfig = Opaque("EGLConfig") EGLContext = Opaque("EGLContext") EGLSurface = Opaque("EGLSurface") EGLClientBuffer = Opaque("EGLClientBuffer") EGLBoolean = Enum("EGLBoolean", [ "EGL_FALSE", "EGL_TRUE", ]) EGLint = Alias("EGLint", Int32) # an alias of EGLenum EGLint_enum = Alias("EGLint", EGLenum) EGLattrib = EGLint_enum # EGL_KHR_image_base EGLImageKHR = Opaque("EGLImageKHR") # EGL_KHR_reusable_sync EGLSyncKHR = Opaque("EGLSyncKHR") EGLTimeKHR = Alias("EGLTimeKHR", UInt64) # EGL_NV_sync EGLSyncNV = Alias("EGLSyncNV", EGLSyncKHR) EGLTimeNV = Alias("EGLTimeNV", EGLTimeKHR) # EGL_HI_clientpixmap EGLClientPixmapHI = Struct("struct EGLClientPixmapHI", [ (OpaquePointer(Void), "pData"), (EGLint, "iWidth"), (EGLint, "iHeight"), (EGLint, "iStride"), ]) # EGL_NV_system_time EGLuint64NV = Alias("EGLuint64NV", UInt64) eglapi = Module("EGL") EGLSurfaceFlags = Flags(Int, [ 'EGL_MULTISAMPLE_RESOLVE_BOX_BIT', 'EGL_PBUFFER_BIT', 'EGL_PIXMAP_BIT', 'EGL_SWAP_BEHAVIOR_PRESERVED_BIT', 'EGL_VG_ALPHA_FORMAT_PRE_BIT', 'EGL_VG_COLORSPACE_LINEAR_BIT', 'EGL_WINDOW_BIT' ]) EGLConformantFlags = Flags(Int, [ 'EGL_OPENGL_ES_BIT', # 0x0001 'EGL_OPENVG_BIT', # 0x0002 'EGL_OPENGL_ES2_BIT', # 0x0004 'EGL_OPENGL_BIT', # 0x0008 'EGL_OPENGL_ES3_BIT', # 0x0040 ]) EGLVGAlphaFormat = FakeEnum(Int, ['EGL_VG_ALPHA_FORMAT_NONPRE', 'EGL_VG_ALPHA_FORMAT_PRE']) EGLVGColorspace = FakeEnum(Int, ['EGL_VG_COLORSPACE_sRGB', 'EGL_VG_COLORSPACE_LINEAR']) EGLTextureFormat = FakeEnum(Int, ['EGL_NO_TEXTURE', 'EGL_TEXTURE_RGB', 'EGL_TEXTURE_RGBA']) EGLTextureTarget = FakeEnum(Int, ['EGL_TEXTURE_2D', 'EGL_NO_TEXTURE']) def EGLAttribArray(values): return AttribArray(Const(EGLint_enum), values, terminator = 'EGL_NONE') EGLConfigAttribs = EGLAttribArray([ ('EGL_ALPHA_MASK_SIZE', UInt), ('EGL_ALPHA_SIZE', UInt), ('EGL_BIND_TO_TEXTURE_RGB', EGLBoolean), ('EGL_BIND_TO_TEXTURE_RGBA', EGLBoolean), ('EGL_BLUE_SIZE', UInt), ('EGL_BUFFER_SIZE', UInt), ('EGL_COLOR_BUFFER_TYPE', FakeEnum(Int, ['EGL_RGB_BUFFER', 'EGL_LUMINANCE_BUFFER'])), ('EGL_CONFIG_CAVEAT', FakeEnum(Int, ['EGL_DONT_CARE', 'EGL_NONE', 'EGL_SLOW_CONFIG', 'EGL_NON_CONFORMANT_CONFIG'])), ('EGL_CONFIG_ID', Int), ('EGL_CONFORMANT', EGLConformantFlags), ('EGL_DEPTH_SIZE', Int), ('EGL_GREEN_SIZE', UInt), ('EGL_LEVEL', Int), ('EGL_LUMINANCE_SIZE', UInt), ('EGL_MATCH_NATIVE_PIXMAP', Int), ('EGL_NATIVE_RENDERABLE', FakeEnum(Int, ['EGL_DONT_CARE', 'EGL_TRUE', 'EGL_FALSE'])), ('EGL_MAX_SWAP_INTERVAL', Int), ('EGL_MIN_SWAP_INTERVAL', Int), ('EGL_RED_SIZE', UInt), ('EGL_SAMPLE_BUFFERS', Int), ('EGL_SAMPLES', Int), ('EGL_STENCIL_SIZE', UInt), ('EGL_RENDERABLE_TYPE', EGLConformantFlags), ('EGL_SURFACE_TYPE', EGLSurfaceFlags), ('EGL_TRANSPARENT_TYPE', FakeEnum(Int, ['EGL_NONE', 'EGL_TRANSPARENT_RGB'])), ('EGL_TRANSPARENT_RED_VALUE', Int), ('EGL_TRANSPARENT_GREEN_VALUE', Int), ('EGL_TRANSPARENT_BLUE_VALUE ', Int) ]) EGLWindowsSurfaceAttribs = EGLAttribArray([ ('EGL_RENDER_BUFFER', FakeEnum(Int, ['EGL_SINGLE_BUFFER', 'EGL_BACK_BUFFER'])), ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), ('EGL_VG_COLORSPACE', EGLVGColorspace)]) EGLPixmapSurfaceAttribs = EGLAttribArray([ ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), ('EGL_VG_COLORSPACE', EGLVGColorspace) ]) EGLPbufferAttribs = EGLAttribArray([ ('EGL_HEIGHT', Int), ('EGL_LARGEST_PBUFFER', EGLBoolean), ('EGL_MIPMAP_TEXTURE', UInt), ('EGL_TEXTURE_FORMAT', EGLTextureFormat), ('EGL_TEXTURE_TARGET', EGLTextureTarget), ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), ('EGL_VG_COLORSPACE', EGLVGColorspace), ('EGL_WIDTH', Int) ]) EGLPbufferFromClientBufferAttribs = EGLAttribArray([ ('EGL_MIPMAP_TEXTURE', EGLBoolean), ('EGL_TEXTURE_FORMAT', EGLTextureFormat), ('EGL_TEXTURE_TARGET', EGLTextureTarget) ]) EGLContextAttribs = EGLAttribArray([ ('EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT', EGLBoolean), ('EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT', EGLenum), ('EGL_CONTEXT_MAJOR_VERSION', Int), # Alias for EGL_CONTEXT_CLIENT_VERSION ('EGL_CONTEXT_MINOR_VERSION', Int), ('EGL_CONTEXT_FLAGS_KHR', Flags(Int, [ 'EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR', 'EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR', 'EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR', ])), ('EGL_CONTEXT_OPENGL_PROFILE_MASK', Flags(Int, [ 'EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT', 'EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT', ])), ('EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY', EGLenum), ]) EGLDrmImageMesaAttribs = EGLAttribArray([ ('EGL_DRM_BUFFER_FORMAT_MESA', FakeEnum(Int, ['EGL_DRM_BUFFER_FORMAT_ARGB32_MESA'])), ('EGL_DRM_BUFFER_USE_MESA', Flags(Int, ['EGL_DRM_BUFFER_USE_SCANOUT_MESA', 'EGL_DRM_BUFFER_USE_SHARE_MESA'])) ]) EGLLockSurfaceKHRAttribs = EGLAttribArray([ ('EGL_MAP_PRESERVE_PIXELS_KHR', EGLBoolean), ('EGL_LOCK_USAGE_HINT_KHR', Flags(Int, ['EGL_READ_SURFACE_BIT_KHR', 'EGL_WRITE_SURFACE_BIT_KHR'])) ]) EGLFenceSyncNVAttribs = EGLAttribArray([ ('EGL_SYNC_STATUS_NV', Flags(Int, ['EGL_SIGNALED_NV', 'EGL_UNSIGNALED_NV'])) ]) EGLPlatformDisplayAttribs = EGLAttribArray([ ('EGL_PLATFORM_X11_SCREEN_EXT', Int), ]) EGLProc = Opaque("__eglMustCastToProperFunctionPointerType") def GlFunction(*args, **kwargs): kwargs.setdefault('call', 'GL_APIENTRY') return Function(*args, **kwargs) eglapi.addFunctions([ # EGL 1.4 Function(EGLint_enum, "eglGetError", [], sideeffects=False), Function(EGLDisplay, "eglGetDisplay", [(EGLNativeDisplayType, "display_id")]), Function(EGLBoolean, "eglInitialize", [(EGLDisplay, "dpy"), Out(Pointer(EGLint), "major"), Out(Pointer(EGLint), "minor")]), Function(EGLBoolean, "eglTerminate", [(EGLDisplay, "dpy")]), Function(ConstCString, "eglQueryString", [(EGLDisplay, "dpy"), (EGLint_enum, "name")], sideeffects=False), Function(EGLBoolean, "eglGetConfigs", [(EGLDisplay, "dpy"), Out(Array(EGLConfig, "*num_config"), "configs"), (EGLint, "config_size"), Out(Pointer(EGLint), "num_config")]), Function(EGLBoolean, "eglChooseConfig", [(EGLDisplay, "dpy"), (EGLConfigAttribs, "attrib_list"), Out(Array(EGLConfig, "*num_config"), "configs"), (EGLint, "config_size"), Out(Pointer(EGLint), "num_config")]), Function(EGLBoolean, "eglGetConfigAttrib", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), Function(EGLSurface, "eglCreateWindowSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativeWindowType, "win"), (EGLWindowsSurfaceAttribs, "attrib_list")]), Function(EGLSurface, "eglCreatePbufferSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLPbufferAttribs, "attrib_list")]), Function(EGLSurface, "eglCreatePixmapSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativePixmapType, "pixmap"), (EGLPixmapSurfaceAttribs, "attrib_list")]), Function(EGLBoolean, "eglDestroySurface", [(EGLDisplay, "dpy"), (EGLSurface, "surface")]), Function(EGLBoolean, "eglQuerySurface", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), Function(EGLBoolean, "eglBindAPI", [(EGLenum, "api")]), Function(EGLenum, "eglQueryAPI", [], sideeffects=False), Function(EGLBoolean, "eglWaitClient", []), Function(EGLBoolean, "eglReleaseThread", []), Function(EGLSurface, "eglCreatePbufferFromClientBuffer", [(EGLDisplay, "dpy"), (EGLenum, "buftype"), (EGLClientBuffer, "buffer"), (EGLConfig, "config"), (EGLPbufferFromClientBufferAttribs, "attrib_list")]), Function(EGLBoolean, "eglSurfaceAttrib", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "attribute"), (EGLint, "value")]), Function(EGLBoolean, "eglBindTexImage", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "buffer")]), Function(EGLBoolean, "eglReleaseTexImage", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "buffer")]), Function(EGLBoolean, "eglSwapInterval", [(EGLDisplay, "dpy"), (EGLint, "interval")]), Function(EGLContext, "eglCreateContext", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLContext, "share_context"), (EGLContextAttribs, "attrib_list")]), Function(EGLBoolean, "eglDestroyContext", [(EGLDisplay, "dpy"), (EGLContext, "ctx")]), Function(EGLBoolean, "eglMakeCurrent", [(EGLDisplay, "dpy"), (EGLSurface, "draw"), (EGLSurface, "read"), (EGLContext, "ctx")]), Function(EGLContext, "eglGetCurrentContext", [], sideeffects=False), Function(EGLSurface, "eglGetCurrentSurface", [(EGLattrib, "readdraw")], sideeffects=False), Function(EGLDisplay, "eglGetCurrentDisplay", [], sideeffects=False), Function(EGLBoolean, "eglQueryContext", [(EGLDisplay, "dpy"), (EGLContext, "ctx"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), Function(EGLBoolean, "eglWaitGL", []), Function(EGLBoolean, "eglWaitNative", [(EGLattrib, "engine")]), Function(EGLBoolean, "eglSwapBuffers", [(EGLDisplay, "dpy"), (EGLSurface, "surface")]), Function(EGLBoolean, "eglCopyBuffers", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLNativePixmapType, "target")]), Function(EGLProc, "eglGetProcAddress", [(ConstCString, "procname")]), # EGL_EXT_platform_base GlFunction(EGLDisplay, "eglGetPlatformDisplayEXT", [(EGLenum, "platform"), (OpaquePointer(Void), "native_display"), (EGLPlatformDisplayAttribs, "attrib_list")]), GlFunction(EGLSurface, "eglCreatePlatformWindowSurfaceEXT", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (OpaquePointer(Void), "native_window"), (EGLAttribArray([]), "attrib_list")]), GlFunction(EGLSurface, "eglCreatePlatformPixmapSurfaceEXT", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (OpaquePointer(Void), "native_pixmap"), (EGLAttribArray([]), "attrib_list")]), # EGL_KHR_lock_surface # EGL_KHR_lock_surface2 Function(EGLBoolean, "eglLockSurfaceKHR", [(EGLDisplay, "display"), (EGLSurface, "surface"), (EGLLockSurfaceKHRAttribs, "attrib_list")]), Function(EGLBoolean, "eglUnlockSurfaceKHR", [(EGLDisplay, "display"), (EGLSurface, "surface")]), # EGL_KHR_image_base Function(EGLImageKHR, "eglCreateImageKHR", [(EGLDisplay, "dpy"), (EGLContext, "ctx"), (EGLenum, "target"), (EGLClientBuffer, "buffer"), (EGLAttribArray([('EGL_IMAGE_PRESERVED_KHR', EGLBoolean)]), "attrib_list")]), Function(EGLBoolean, "eglDestroyImageKHR", [(EGLDisplay, "dpy"), (EGLImageKHR, "image")]), # EGL_KHR_fence_sync # EGL_KHR_reusable_sync Function(EGLSyncKHR, "eglCreateSyncKHR", [(EGLDisplay, "dpy"), (EGLenum, "type"), (EGLAttribArray([]), "attrib_list")]), Function(EGLBoolean, "eglDestroySyncKHR", [(EGLDisplay, "dpy"), (EGLSyncKHR, "sync")]), Function(EGLint, "eglClientWaitSyncKHR", [(EGLDisplay, "dpy"), (EGLSyncKHR, "sync"), (EGLint, "flags"), (EGLTimeKHR, "timeout")]), Function(EGLBoolean, "eglSignalSyncKHR", [(EGLDisplay, "dpy"), (EGLSyncKHR, "sync"), (EGLenum, "mode")]), Function(EGLBoolean, "eglGetSyncAttribKHR", [(EGLDisplay, "dpy"), (EGLSyncKHR, "sync"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), # EGL_NV_sync Function(EGLSyncNV, "eglCreateFenceSyncNV", [(EGLDisplay, "dpy"), (EGLenum, "condition"), (EGLFenceSyncNVAttribs, "attrib_list")]), Function(EGLBoolean, "eglDestroySyncNV", [(EGLSyncNV, "sync")]), Function(EGLBoolean, "eglFenceNV", [(EGLSyncNV, "sync")]), Function(EGLint, "eglClientWaitSyncNV", [(EGLSyncNV, "sync"), (EGLint, "flags"), (EGLTimeNV, "timeout")]), Function(EGLBoolean, "eglSignalSyncNV", [(EGLSyncNV, "sync"), (EGLenum, "mode")]), Function(EGLBoolean, "eglGetSyncAttribNV", [(EGLSyncNV, "sync"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), # EGL_HI_clientpixmap Function(EGLSurface, "eglCreatePixmapSurfaceHI", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (Pointer(EGLClientPixmapHI), "pixmap")]), # EGL_MESA_drm_image Function(EGLImageKHR, "eglCreateDRMImageMESA", [(EGLDisplay, "dpy"), (EGLDrmImageMesaAttribs, "attrib_list")]), Function(EGLBoolean, "eglExportDRMImageMESA", [(EGLDisplay, "dpy"), (EGLImageKHR, "image"), Out(Pointer(EGLint), "name"), Out(Pointer(EGLint), "handle"), Out(Pointer(EGLint), "stride")]), # EGL_NV_post_sub_buffer Function(EGLBoolean, "eglPostSubBufferNV", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLint, "x"), (EGLint, "y"), (EGLint, "width"), (EGLint, "height")]), # EGL_ANGLE_query_surface_pointer Function(EGLBoolean, "eglQuerySurfacePointerANGLE", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "attribute"), Out(Pointer(OpaquePointer(Void)), "value")], sideeffects=False), # EGL_NV_system_time Function(EGLuint64NV, "eglGetSystemTimeFrequencyNV", [], sideeffects=False), Function(EGLuint64NV, "eglGetSystemTimeNV", [], sideeffects=False), # GL_OES_EGL_image GlFunction(Void, "glEGLImageTargetTexture2DOES", [(GLenum, "target"), (EGLImageKHR, "image")]), GlFunction(Void, "glEGLImageTargetRenderbufferStorageOES", [(GLenum, "target"), (EGLImageKHR, "image")]), ]) tmpNnpnZF/specs/wglenum.py0000664000175000017500000002157512543167424015143 0ustar chrischris########################################################################## # # Copyright 2008-2011 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """WGL enum description""" from stdapi import * WGLenum = FakeEnum(Int, [ "WGL_GPU_VENDOR_AMD", # 0x1F00 "WGL_GPU_RENDERER_STRING_AMD", # 0x1F01 "WGL_GPU_OPENGL_VERSION_STRING_AMD", # 0x1F02 "WGL_NUMBER_PIXEL_FORMATS_ARB", # 0x2000 "WGL_DRAW_TO_WINDOW_ARB", # 0x2001 "WGL_DRAW_TO_BITMAP_ARB", # 0x2002 "WGL_ACCELERATION_ARB", # 0x2003 "WGL_NEED_PALETTE_ARB", # 0x2004 "WGL_NEED_SYSTEM_PALETTE_ARB", # 0x2005 "WGL_SWAP_LAYER_BUFFERS_ARB", # 0x2006 "WGL_SWAP_METHOD_ARB", # 0x2007 "WGL_NUMBER_OVERLAYS_ARB", # 0x2008 "WGL_NUMBER_UNDERLAYS_ARB", # 0x2009 "WGL_TRANSPARENT_ARB", # 0x200A "WGL_TRANSPARENT_VALUE_EXT", # 0x200B "WGL_SHARE_DEPTH_ARB", # 0x200C "WGL_SHARE_STENCIL_ARB", # 0x200D "WGL_SHARE_ACCUM_ARB", # 0x200E "WGL_SUPPORT_GDI_ARB", # 0x200F "WGL_SUPPORT_OPENGL_ARB", # 0x2010 "WGL_DOUBLE_BUFFER_ARB", # 0x2011 "WGL_STEREO_ARB", # 0x2012 "WGL_PIXEL_TYPE_ARB", # 0x2013 "WGL_COLOR_BITS_ARB", # 0x2014 "WGL_RED_BITS_ARB", # 0x2015 "WGL_RED_SHIFT_ARB", # 0x2016 "WGL_GREEN_BITS_ARB", # 0x2017 "WGL_GREEN_SHIFT_ARB", # 0x2018 "WGL_BLUE_BITS_ARB", # 0x2019 "WGL_BLUE_SHIFT_ARB", # 0x201A "WGL_ALPHA_BITS_ARB", # 0x201B "WGL_ALPHA_SHIFT_ARB", # 0x201C "WGL_ACCUM_BITS_ARB", # 0x201D "WGL_ACCUM_RED_BITS_ARB", # 0x201E "WGL_ACCUM_GREEN_BITS_ARB", # 0x201F "WGL_ACCUM_BLUE_BITS_ARB", # 0x2020 "WGL_ACCUM_ALPHA_BITS_ARB", # 0x2021 "WGL_DEPTH_BITS_ARB", # 0x2022 "WGL_STENCIL_BITS_ARB", # 0x2023 "WGL_AUX_BUFFERS_ARB", # 0x2024 "WGL_NO_ACCELERATION_ARB", # 0x2025 "WGL_GENERIC_ACCELERATION_ARB", # 0x2026 "WGL_FULL_ACCELERATION_ARB", # 0x2027 "WGL_SWAP_EXCHANGE_ARB", # 0x2028 "WGL_SWAP_COPY_ARB", # 0x2029 "WGL_SWAP_UNDEFINED_ARB", # 0x202A "WGL_TYPE_RGBA_ARB", # 0x202B "WGL_TYPE_COLORINDEX_ARB", # 0x202C "WGL_DRAW_TO_PBUFFER_ARB", # 0x202D "WGL_MAX_PBUFFER_PIXELS_ARB", # 0x202E "WGL_MAX_PBUFFER_WIDTH_ARB", # 0x202F "WGL_MAX_PBUFFER_HEIGHT_ARB", # 0x2030 "WGL_OPTIMAL_PBUFFER_WIDTH_EXT", # 0x2031 "WGL_OPTIMAL_PBUFFER_HEIGHT_EXT", # 0x2032 "WGL_PBUFFER_LARGEST_ARB", # 0x2033 "WGL_PBUFFER_WIDTH_ARB", # 0x2034 "WGL_PBUFFER_HEIGHT_ARB", # 0x2035 "WGL_PBUFFER_LOST_ARB", # 0x2036 "WGL_TRANSPARENT_RED_VALUE_ARB", # 0x2037 "WGL_TRANSPARENT_GREEN_VALUE_ARB", # 0x2038 "WGL_TRANSPARENT_BLUE_VALUE_ARB", # 0x2039 "WGL_TRANSPARENT_ALPHA_VALUE_ARB", # 0x203A "WGL_TRANSPARENT_INDEX_VALUE_ARB", # 0x203B "WGL_DEPTH_FLOAT_EXT", # 0x2040 "WGL_SAMPLE_BUFFERS_ARB", # 0x2041 "WGL_SAMPLES_ARB", # 0x2042 "ERROR_INVALID_PIXEL_TYPE_ARB", # 0x2043 "WGL_GENLOCK_SOURCE_MULTIVIEW_I3D", # 0x2044 "WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D", # 0x2045 "WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D", # 0x2046 "WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D", # 0x2047 "WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D", # 0x2048 "WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D", # 0x2049 "WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D", # 0x204A "WGL_GENLOCK_SOURCE_EDGE_RISING_I3D", # 0x204B "WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D", # 0x204C "WGL_GAMMA_TABLE_SIZE_I3D", # 0x204E "WGL_GAMMA_EXCLUDE_DESKTOP_I3D", # 0x204F "WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D", # 0x2050 "WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D", # 0x2051 "WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D", # 0x2052 "WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D", # 0x2053 "ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB", # 0x2054 "WGL_STEREO_EMITTER_ENABLE_3DL", # 0x2055 "WGL_STEREO_EMITTER_DISABLE_3DL", # 0x2056 "WGL_STEREO_POLARITY_NORMAL_3DL", # 0x2057 "WGL_STEREO_POLARITY_INVERT_3DL", # 0x2058 "WGL_SAMPLE_BUFFERS_3DFX", # 0x2060 "WGL_SAMPLES_3DFX", # 0x2061 "WGL_BIND_TO_TEXTURE_RGB_ARB", # 0x2070 "WGL_BIND_TO_TEXTURE_RGBA_ARB", # 0x2071 "WGL_TEXTURE_FORMAT_ARB", # 0x2072 "WGL_TEXTURE_TARGET_ARB", # 0x2073 "WGL_MIPMAP_TEXTURE_ARB", # 0x2074 "WGL_TEXTURE_RGB_ARB", # 0x2075 "WGL_TEXTURE_RGBA_ARB", # 0x2076 "WGL_NO_TEXTURE_ARB", # 0x2077 "WGL_TEXTURE_CUBE_MAP_ARB", # 0x2078 "WGL_TEXTURE_1D_ARB", # 0x2079 "WGL_TEXTURE_2D_ARB", # 0x207A "WGL_MIPMAP_LEVEL_ARB", # 0x207B "WGL_CUBE_MAP_FACE_ARB", # 0x207C "WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB", # 0x207D "WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB", # 0x207E "WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB", # 0x207F "WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB", # 0x2080 "WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB", # 0x2081 "WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB", # 0x2082 "WGL_FRONT_LEFT_ARB", # 0x2083 "WGL_FRONT_RIGHT_ARB", # 0x2084 "WGL_BACK_LEFT_ARB", # 0x2085 "WGL_BACK_RIGHT_ARB", # 0x2086 "WGL_AUX0_ARB", # 0x2087 "WGL_AUX1_ARB", # 0x2088 "WGL_AUX2_ARB", # 0x2089 "WGL_AUX3_ARB", # 0x208A "WGL_AUX4_ARB", # 0x208B "WGL_AUX5_ARB", # 0x208C "WGL_AUX6_ARB", # 0x208D "WGL_AUX7_ARB", # 0x208E "WGL_AUX8_ARB", # 0x208F "WGL_AUX9_ARB", # 0x2090 "WGL_CONTEXT_MAJOR_VERSION_ARB", # 0x2091 "WGL_CONTEXT_MINOR_VERSION_ARB", # 0x2092 "WGL_CONTEXT_LAYER_PLANE_ARB", # 0x2093 "WGL_CONTEXT_FLAGS_ARB", # 0x2094 "ERROR_INVALID_VERSION_ARB", # 0x2095 "ERROR_INVALID_PROFILE_ARB", # 0x2096 "WGL_CONTEXT_RELEASE_BEHAVIOR_ARB", # 0x2097 "WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB", # 0x2098 "WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV", # 0x20A0 "WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV", # 0x20A1 "WGL_TEXTURE_RECTANGLE_NV", # 0x20A2 "WGL_BIND_TO_TEXTURE_DEPTH_NV", # 0x20A3 "WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV", # 0x20A4 "WGL_DEPTH_TEXTURE_FORMAT_NV", # 0x20A5 "WGL_TEXTURE_DEPTH_COMPONENT_NV", # 0x20A6 "WGL_DEPTH_COMPONENT_NV", # 0x20A7 "WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT", # 0x20A8 "WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB", # 0x20A9 "WGL_FLOAT_COMPONENTS_NV", # 0x20B0 "WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV", # 0x20B1 "WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV", # 0x20B2 "WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV", # 0x20B3 "WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV", # 0x20B4 "WGL_TEXTURE_FLOAT_R_NV", # 0x20B5 "WGL_TEXTURE_FLOAT_RG_NV", # 0x20B6 "WGL_TEXTURE_FLOAT_RGB_NV", # 0x20B7 "WGL_TEXTURE_FLOAT_RGBA_NV", # 0x20B8 "WGL_COLOR_SAMPLES_NV", # 0x20B9 "WGL_BIND_TO_VIDEO_RGB_NV", # 0x20C0 "WGL_BIND_TO_VIDEO_RGBA_NV", # 0x20C1 "WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV", # 0x20C2 "WGL_VIDEO_OUT_COLOR_NV", # 0x20C3 "WGL_VIDEO_OUT_ALPHA_NV", # 0x20C4 "WGL_VIDEO_OUT_DEPTH_NV", # 0x20C5 "WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV", # 0x20C6 "WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV", # 0x20C7 "WGL_VIDEO_OUT_FRAME", # 0x20C8 "WGL_VIDEO_OUT_FIELD_1", # 0x20C9 "WGL_VIDEO_OUT_FIELD_2", # 0x20CA "WGL_VIDEO_OUT_STACKED_FIELDS_1_2", # 0x20CB "WGL_VIDEO_OUT_STACKED_FIELDS_2_1", # 0x20CC "WGL_UNIQUE_ID_NV", # 0x20CE "WGL_NUM_VIDEO_CAPTURE_SLOTS_NV", # 0x20CF "ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV", # 0x20D0 "ERROR_MISSING_AFFINITY_MASK_NV", # 0x20D1 "WGL_NUM_VIDEO_SLOTS_NV", # 0x20F0 "WGL_TYPE_RGBA_FLOAT_ARB", # 0x21A0 "WGL_GPU_FASTEST_TARGET_GPUS_AMD", # 0x21A2 "WGL_GPU_RAM_AMD", # 0x21A3 "WGL_GPU_CLOCK_AMD", # 0x21A4 "WGL_GPU_NUM_PIPES_AMD", # 0x21A5 "WGL_GPU_NUM_SIMD_AMD", # 0x21A6 "WGL_GPU_NUM_RB_AMD", # 0x21A7 "WGL_GPU_NUM_SPI_AMD", # 0x21A8 "WGL_LOSE_CONTEXT_ON_RESET_ARB", # 0x8252 "WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB", # 0x8256 "WGL_NO_RESET_NOTIFICATION_ARB", # 0x8261 "WGL_CONTEXT_PROFILE_MASK_ARB", # 0x9126 ]) tmpNnpnZF/specs/d3d11sdklayers.py0000664000175000017500000014656712543167424016234 0ustar chrischris########################################################################## # # Copyright 2012 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dxgi import * ID3D11DeviceChild = Interface("ID3D11DeviceChild", IUnknown) ID3D11DeviceContext = Interface("ID3D11DeviceContext", ID3D11DeviceChild) D3D11_DEBUG_FEATURE = Flags(UINT, [ "D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP", "D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP", "D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP", ]) D3D11_RLDO_FLAGS = Enum("D3D11_RLDO_FLAGS", [ "D3D11_RLDO_SUMMARY", "D3D11_RLDO_DETAIL", ]) ID3D11Debug = Interface("ID3D11Debug", IUnknown) ID3D11Debug.methods += [ StdMethod(HRESULT, "SetFeatureMask", [(D3D11_DEBUG_FEATURE, "Mask")]), StdMethod(D3D11_DEBUG_FEATURE, "GetFeatureMask", [], sideeffects=False), StdMethod(HRESULT, "SetPresentPerRenderOpDelay", [(UINT, "Milliseconds")]), StdMethod(UINT, "GetPresentPerRenderOpDelay", [], sideeffects=False), StdMethod(HRESULT, "SetSwapChain", [(ObjPointer(IDXGISwapChain), "pSwapChain")]), StdMethod(HRESULT, "GetSwapChain", [Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]), StdMethod(HRESULT, "ValidateContext", [(ObjPointer(ID3D11DeviceContext), "pContext")]), StdMethod(HRESULT, "ReportLiveDeviceObjects", [(D3D11_RLDO_FLAGS, "Flags")]), StdMethod(HRESULT, "ValidateContextForDispatch", [(ObjPointer(ID3D11DeviceContext), "pContext")]), ] ID3D11SwitchToRef = Interface("ID3D11SwitchToRef", IUnknown) ID3D11SwitchToRef.methods += [ StdMethod(BOOL, "SetUseRef", [(BOOL, "UseRef")]), StdMethod(BOOL, "GetUseRef", [], sideeffects=False), ] D3D11_MESSAGE_CATEGORY = Enum("D3D11_MESSAGE_CATEGORY", [ "D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED", "D3D11_MESSAGE_CATEGORY_MISCELLANEOUS", "D3D11_MESSAGE_CATEGORY_INITIALIZATION", "D3D11_MESSAGE_CATEGORY_CLEANUP", "D3D11_MESSAGE_CATEGORY_COMPILATION", "D3D11_MESSAGE_CATEGORY_STATE_CREATION", "D3D11_MESSAGE_CATEGORY_STATE_SETTING", "D3D11_MESSAGE_CATEGORY_STATE_GETTING", "D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION", "D3D11_MESSAGE_CATEGORY_EXECUTION", ]) D3D11_MESSAGE_SEVERITY = Enum("D3D11_MESSAGE_SEVERITY", [ "D3D11_MESSAGE_SEVERITY_CORRUPTION", "D3D11_MESSAGE_SEVERITY_ERROR", "D3D11_MESSAGE_SEVERITY_WARNING", "D3D11_MESSAGE_SEVERITY_INFO", ]) D3D11_MESSAGE_ID = Enum("D3D11_MESSAGE_ID", [ "D3D11_MESSAGE_ID_UNKNOWN", "D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD", "D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD", "D3D11_MESSAGE_ID_STRING_FROM_APPLICATION", "D3D11_MESSAGE_ID_CORRUPTED_THIS", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14", "D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15", "D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING", "D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY", "D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA", "D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA", "D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN", "D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS", "D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS", "D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES", "D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE", "D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS", "D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC", "D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC", "D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS", "D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC", "D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC", "D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE", "D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC", "D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY", "D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS", "D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG", "D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC", "D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED", "D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED", "D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE", "D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID", "D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE", "D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT", "D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR", "D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH", "D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH", "D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID", "D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE", "D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE", "D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE", "D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE", "D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE", "D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE", "D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX", "D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE", "D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID", "D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID", "D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID", "D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID", "D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID", "D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE", "D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS", "D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED", "D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED", "D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE", "D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS", "D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED", "D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED", "D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE", "D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS", "D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED", "D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED", "D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE", "D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS", "D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED", "D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED", "D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED", "D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED", "D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS", "D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE", "D3D11_MESSAGE_ID_REF_THREADING_MODE", "D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION", "D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION", "D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION", "D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE", "D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER", "D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY", "D3D11_MESSAGE_ID_REF_INFO", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE", "D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL", "D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL", "D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID", "D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL", "D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT", "D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED", "D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE", "D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER", "D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING", "D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0", "D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT", "D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT", "D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT", "D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN", "D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC", "D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH", "D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW", "D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH", "D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY", "D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY", "D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER", "D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED", "D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER", "D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN", "D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC", "D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER", "D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER", "D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE", "D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED", "D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION", "D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE", "D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS", "D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION", "D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS", "D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN", "D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE", "D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS", "D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL", "D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN", "D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE", "D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT", "D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH", "D3D11_MESSAGE_ID_D3D10_MESSAGES_END", "D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE", "D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED", "D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS", "D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D", "D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE", "D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE", "D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS", "D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS", "D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX", "D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS", "D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS", "D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY", "D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK", "D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK", "D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE", "D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE", "D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES", "D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER", "D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE", "D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT", "D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS", "D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES", "D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED", "D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED", "D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED", "D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED", "D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND", "D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE", "D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED", "D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3", "D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED", "D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO", "D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION", "D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED", "D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR", "D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA", "D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP", "D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED", "D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT", "D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END", "D3D11_MESSAGE_ID_D3D11_MESSAGES_START", "D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS", "D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS", "D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED", "D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN", "D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT", "D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES", "D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES", "D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL", "D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL", "D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH", "D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT", "D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER", "D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW", "D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE", "D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS", "D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED", "D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN", "D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD", "D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE", "D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED", "D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS", "D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH", "D3D11_MESSAGE_ID_CREATE_CONTEXT", "D3D11_MESSAGE_ID_LIVE_CONTEXT", "D3D11_MESSAGE_ID_DESTROY_CONTEXT", "D3D11_MESSAGE_ID_CREATE_BUFFER", "D3D11_MESSAGE_ID_LIVE_BUFFER", "D3D11_MESSAGE_ID_DESTROY_BUFFER", "D3D11_MESSAGE_ID_CREATE_TEXTURE1D", "D3D11_MESSAGE_ID_LIVE_TEXTURE1D", "D3D11_MESSAGE_ID_DESTROY_TEXTURE1D", "D3D11_MESSAGE_ID_CREATE_TEXTURE2D", "D3D11_MESSAGE_ID_LIVE_TEXTURE2D", "D3D11_MESSAGE_ID_DESTROY_TEXTURE2D", "D3D11_MESSAGE_ID_CREATE_TEXTURE3D", "D3D11_MESSAGE_ID_LIVE_TEXTURE3D", "D3D11_MESSAGE_ID_DESTROY_TEXTURE3D", "D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW", "D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW", "D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW", "D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW", "D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW", "D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW", "D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW", "D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW", "D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW", "D3D11_MESSAGE_ID_CREATE_VERTEXSHADER", "D3D11_MESSAGE_ID_LIVE_VERTEXSHADER", "D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER", "D3D11_MESSAGE_ID_CREATE_HULLSHADER", "D3D11_MESSAGE_ID_LIVE_HULLSHADER", "D3D11_MESSAGE_ID_DESTROY_HULLSHADER", "D3D11_MESSAGE_ID_CREATE_DOMAINSHADER", "D3D11_MESSAGE_ID_LIVE_DOMAINSHADER", "D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER", "D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER", "D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER", "D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER", "D3D11_MESSAGE_ID_CREATE_PIXELSHADER", "D3D11_MESSAGE_ID_LIVE_PIXELSHADER", "D3D11_MESSAGE_ID_DESTROY_PIXELSHADER", "D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT", "D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT", "D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT", "D3D11_MESSAGE_ID_CREATE_SAMPLER", "D3D11_MESSAGE_ID_LIVE_SAMPLER", "D3D11_MESSAGE_ID_DESTROY_SAMPLER", "D3D11_MESSAGE_ID_CREATE_BLENDSTATE", "D3D11_MESSAGE_ID_LIVE_BLENDSTATE", "D3D11_MESSAGE_ID_DESTROY_BLENDSTATE", "D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE", "D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE", "D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE", "D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE", "D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE", "D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE", "D3D11_MESSAGE_ID_CREATE_QUERY", "D3D11_MESSAGE_ID_LIVE_QUERY", "D3D11_MESSAGE_ID_DESTROY_QUERY", "D3D11_MESSAGE_ID_CREATE_PREDICATE", "D3D11_MESSAGE_ID_LIVE_PREDICATE", "D3D11_MESSAGE_ID_DESTROY_PREDICATE", "D3D11_MESSAGE_ID_CREATE_COUNTER", "D3D11_MESSAGE_ID_LIVE_COUNTER", "D3D11_MESSAGE_ID_DESTROY_COUNTER", "D3D11_MESSAGE_ID_CREATE_COMMANDLIST", "D3D11_MESSAGE_ID_LIVE_COMMANDLIST", "D3D11_MESSAGE_ID_DESTROY_COMMANDLIST", "D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE", "D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE", "D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE", "D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE", "D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE", "D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE", "D3D11_MESSAGE_ID_LIVE_DEVICE", "D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY", "D3D11_MESSAGE_ID_CREATE_COMPUTESHADER", "D3D11_MESSAGE_ID_LIVE_COMPUTESHADER", "D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER", "D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW", "D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW", "D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA", "D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS", "D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL", "D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE", "D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE", "D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD", "D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD", "D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL", "D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY", "D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE", "D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE", "D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE", "D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED", "D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE", "D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT", "D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD", "D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS", "D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP", "D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD", "D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH", "D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY", "D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY", "D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS", "D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS", "D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER", "D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED", "D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT", "D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE", "D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD", "D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT", "D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE", "D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT", "D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY", "D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY", "D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET", "D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED", "D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW", "D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO", "D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH", "D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED", "D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED", "D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET", "D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET", "D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE", "D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE", "D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED", "D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW", "D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET", "D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS", "D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT", "D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED", "D3D11_MESSAGE_ID_REF_WARNING", "D3D11_MESSAGE_ID_D3D11_MESSAGES_END", ]) D3D11_MESSAGE = Struct("D3D11_MESSAGE", [ (D3D11_MESSAGE_CATEGORY, "Category"), (D3D11_MESSAGE_SEVERITY, "Severity"), (D3D11_MESSAGE_ID, "ID"), (ConstCString, "pDescription"), (SIZE_T, "DescriptionByteLength"), ]) D3D11_INFO_QUEUE_FILTER_DESC = Struct("D3D11_INFO_QUEUE_FILTER_DESC", [ (UINT, "NumCategories"), (Array(D3D11_MESSAGE_CATEGORY, "{self}.NumCategories"), "pCategoryList"), (UINT, "NumSeverities"), (Array(D3D11_MESSAGE_SEVERITY, "{self}.NumSeverities"), "pSeverityList"), (UINT, "NumIDs"), (Array(D3D11_MESSAGE_ID, "{self}.NumIDs"), "pIDList"), ]) D3D11_INFO_QUEUE_FILTER = Struct("D3D11_INFO_QUEUE_FILTER", [ (D3D11_INFO_QUEUE_FILTER_DESC, "AllowList"), (D3D11_INFO_QUEUE_FILTER_DESC, "DenyList"), ]) ID3D11InfoQueue = Interface("ID3D11InfoQueue", IUnknown) ID3D11InfoQueue.methods += [ StdMethod(HRESULT, "SetMessageCountLimit", [(UINT64, "MessageCountLimit")], sideeffects=False), StdMethod(Void, "ClearStoredMessages", [], sideeffects=False), StdMethod(HRESULT, "GetMessage", [(UINT64, "MessageIndex"), Out(Pointer(D3D11_MESSAGE), "pMessage"), Out(Pointer(SIZE_T), "pMessageByteLength")], sideeffects=False), StdMethod(UINT64, "GetNumMessagesAllowedByStorageFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumMessagesDeniedByStorageFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumStoredMessages", [], sideeffects=False), StdMethod(UINT64, "GetNumStoredMessagesAllowedByRetrievalFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumMessagesDiscardedByMessageCountLimit", [], sideeffects=False), StdMethod(UINT64, "GetMessageCountLimit", [], sideeffects=False), StdMethod(HRESULT, "AddStorageFilterEntries", [(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(HRESULT, "GetStorageFilter", [Out(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter"), Out(Pointer(SIZE_T), "pFilterByteLength")], sideeffects=False), StdMethod(Void, "ClearStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushEmptyStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushCopyOfStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushStorageFilter", [(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(Void, "PopStorageFilter", [], sideeffects=False), StdMethod(UINT, "GetStorageFilterStackSize", [], sideeffects=False), StdMethod(HRESULT, "AddRetrievalFilterEntries", [(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(HRESULT, "GetRetrievalFilter", [Out(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter"), Out(Pointer(SIZE_T), "pFilterByteLength")], sideeffects=False), StdMethod(Void, "ClearRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushEmptyRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushCopyOfRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushRetrievalFilter", [(Pointer(D3D11_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(Void, "PopRetrievalFilter", [], sideeffects=False), StdMethod(UINT, "GetRetrievalFilterStackSize", [], sideeffects=False), StdMethod(HRESULT, "AddMessage", [(D3D11_MESSAGE_CATEGORY, "Category"), (D3D11_MESSAGE_SEVERITY, "Severity"), (D3D11_MESSAGE_ID, "ID"), (LPCSTR, "pDescription")], sideeffects=False), StdMethod(HRESULT, "AddApplicationMessage", [(D3D11_MESSAGE_SEVERITY, "Severity"), (LPCSTR, "pDescription")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnCategory", [(D3D11_MESSAGE_CATEGORY, "Category"), (BOOL, "bEnable")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnSeverity", [(D3D11_MESSAGE_SEVERITY, "Severity"), (BOOL, "bEnable")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnID", [(D3D11_MESSAGE_ID, "ID"), (BOOL, "bEnable")], sideeffects=False), StdMethod(BOOL, "GetBreakOnCategory", [(D3D11_MESSAGE_CATEGORY, "Category")], sideeffects=False), StdMethod(BOOL, "GetBreakOnSeverity", [(D3D11_MESSAGE_SEVERITY, "Severity")], sideeffects=False), StdMethod(BOOL, "GetBreakOnID", [(D3D11_MESSAGE_ID, "ID")], sideeffects=False), StdMethod(Void, "SetMuteDebugOutput", [(BOOL, "bMute")], sideeffects=False), StdMethod(BOOL, "GetMuteDebugOutput", [], sideeffects=False), ] tmpNnpnZF/specs/glapi.py0000664000175000017500000136565312543167424014572 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """GL API description. Most of these were automatically generated from Khronos OpenGL spec files by the specs/scripts/glspec.py script, and then manually edited to cover the corner cases correctly. """ from stdapi import * from gltypes import * import glparams def GlFunction(*args, **kwargs): kwargs.setdefault('call', 'APIENTRY') return Function(*args, **kwargs) def InGlString(charType, length, argName): # Helper function to describe input strings, where string length can be # passed as argument. lengthExpr = '((%s) >= 0 ? (%s) : strlen(%s))' % (length, length, argName) return In(String(Const(charType), lengthExpr), argName) def OutGlString(charType, lengthPtr, argName): # Helper function to describe output strings, where string length can be # returned as a pointer. lengthExpr = '((%s) ? *(%s) : strlen(%s))' % (lengthPtr, lengthPtr, argName) return Out(String(charType, lengthExpr), argName) glapi = Module('GL') glapi.addFunctions([ # GL_VERSION_1_0 GlFunction(Void, "glCullFace", [(GLenum, "mode")]), GlFunction(Void, "glFrontFace", [(GLenum, "mode")]), GlFunction(Void, "glHint", [(GLenum, "target"), (GLenum, "mode")]), GlFunction(Void, "glLineWidth", [(GLfloat, "width")]), GlFunction(Void, "glPointSize", [(GLfloat, "size")]), GlFunction(Void, "glPolygonMode", [(GLenum, "face"), (GLenum, "mode")]), GlFunction(Void, "glScissor", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTexParameterf", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTexParameterfv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexParameteri", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTexParameteriv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexImage1D", [(GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTexImage2D", [(GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glDrawBuffer", [(GLenum, "mode")]), GlFunction(Void, "glClear", [(GLbitfield_attrib, "mask")]), GlFunction(Void, "glClearColor", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue"), (GLfloat, "alpha")]), GlFunction(Void, "glClearStencil", [(GLint, "s")]), GlFunction(Void, "glClearDepth", [(GLdouble, "depth")]), GlFunction(Void, "glStencilMask", [(GLuint, "mask")]), GlFunction(Void, "glColorMask", [(GLboolean, "red"), (GLboolean, "green"), (GLboolean, "blue"), (GLboolean, "alpha")]), GlFunction(Void, "glDepthMask", [(GLboolean, "flag")]), GlFunction(Void, "glDisable", [(GLenum, "cap")]), GlFunction(Void, "glEnable", [(GLenum, "cap")]), GlFunction(Void, "glFinish", []), GlFunction(Void, "glFlush", []), GlFunction(Void, "glBlendFunc", [(GLenum, "sfactor"), (GLenum, "dfactor")]), GlFunction(Void, "glLogicOp", [(GLenum, "opcode")]), GlFunction(Void, "glStencilFunc", [(GLenum, "func"), (GLint, "ref"), (GLuint, "mask")]), GlFunction(Void, "glStencilOp", [(GLenum, "fail"), (GLenum, "zfail"), (GLenum, "zpass")]), GlFunction(Void, "glDepthFunc", [(GLenum, "func")]), GlFunction(Void, "glPixelStoref", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPixelStorei", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glReadBuffer", [(GLenum, "mode")]), GlFunction(Void, "glReadPixels", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetBooleanv", [(GLenum, "pname"), Out(Array(GLboolean, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetDoublev", [(GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLenum_error, "glGetError", [], sideeffects=False), GlFunction(Void, "glGetFloatv", [(GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetIntegerv", [(GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(String(Const(GLubyte)), "glGetString", [(GLenum, "name")], sideeffects=False), GlFunction(Void, "glGetTexImage", [(GLenum, "target"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetTexParameterfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexLevelParameterfv", [(GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexLevelParameteriv", [(GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsEnabled", [(GLenum, "cap")], sideeffects=False), GlFunction(Void, "glDepthRange", [(GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glViewport", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), # GL_VERSION_1_0_DEPRECATED GlFunction(Void, "glNewList", [(GLlist, "list"), (GLenum, "mode")]), GlFunction(Void, "glEndList", []), GlFunction(Void, "glCallList", [(GLlist, "list")]), GlFunction(Void, "glCallLists", [(GLsizei, "n"), (GLenum, "type"), (Blob(Const(GLvoid), "_glCallLists_size(n, type)"), "lists")]), GlFunction(Void, "glDeleteLists", [(GLlist, "list"), (GLsizei, "range")]), GlFunction(Handle("list", GLuint, "range"), "glGenLists", [(GLsizei, "range")]), GlFunction(Void, "glListBase", [(GLlist, "base")]), GlFunction(Void, "glBegin", [(GLenum_mode, "mode")]), GlFunction(Void, "glBitmap", [(GLsizei, "width"), (GLsizei, "height"), (GLfloat, "xorig"), (GLfloat, "yorig"), (GLfloat, "xmove"), (GLfloat, "ymove"), (Blob(Const(GLubyte), "_glBitmap_size(width, height)"), "bitmap")]), GlFunction(Void, "glColor3b", [(GLbyte, "red"), (GLbyte, "green"), (GLbyte, "blue")]), GlFunction(Void, "glColor3bv", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glColor3d", [(GLdouble, "red"), (GLdouble, "green"), (GLdouble, "blue")]), GlFunction(Void, "glColor3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glColor3f", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue")]), GlFunction(Void, "glColor3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glColor3i", [(GLint, "red"), (GLint, "green"), (GLint, "blue")]), GlFunction(Void, "glColor3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glColor3s", [(GLshort, "red"), (GLshort, "green"), (GLshort, "blue")]), GlFunction(Void, "glColor3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glColor3ub", [(GLubyte, "red"), (GLubyte, "green"), (GLubyte, "blue")]), GlFunction(Void, "glColor3ubv", [(Array(Const(GLubyte), 3), "v")]), GlFunction(Void, "glColor3ui", [(GLuint, "red"), (GLuint, "green"), (GLuint, "blue")]), GlFunction(Void, "glColor3uiv", [(Array(Const(GLuint), 3), "v")]), GlFunction(Void, "glColor3us", [(GLushort, "red"), (GLushort, "green"), (GLushort, "blue")]), GlFunction(Void, "glColor3usv", [(Array(Const(GLushort), 3), "v")]), GlFunction(Void, "glColor4b", [(GLbyte, "red"), (GLbyte, "green"), (GLbyte, "blue"), (GLbyte, "alpha")]), GlFunction(Void, "glColor4bv", [(Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glColor4d", [(GLdouble, "red"), (GLdouble, "green"), (GLdouble, "blue"), (GLdouble, "alpha")]), GlFunction(Void, "glColor4dv", [(Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glColor4f", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue"), (GLfloat, "alpha")]), GlFunction(Void, "glColor4fv", [(Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glColor4i", [(GLint, "red"), (GLint, "green"), (GLint, "blue"), (GLint, "alpha")]), GlFunction(Void, "glColor4iv", [(Array(Const(GLint), 4), "v")]), GlFunction(Void, "glColor4s", [(GLshort, "red"), (GLshort, "green"), (GLshort, "blue"), (GLshort, "alpha")]), GlFunction(Void, "glColor4sv", [(Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glColor4ub", [(GLubyte, "red"), (GLubyte, "green"), (GLubyte, "blue"), (GLubyte, "alpha")]), GlFunction(Void, "glColor4ubv", [(Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glColor4ui", [(GLuint, "red"), (GLuint, "green"), (GLuint, "blue"), (GLuint, "alpha")]), GlFunction(Void, "glColor4uiv", [(Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glColor4us", [(GLushort, "red"), (GLushort, "green"), (GLushort, "blue"), (GLushort, "alpha")]), GlFunction(Void, "glColor4usv", [(Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glEdgeFlag", [(GLboolean, "flag")]), GlFunction(Void, "glEdgeFlagv", [(Pointer(Const(GLboolean)), "flag")]), GlFunction(Void, "glEnd", []), GlFunction(Void, "glIndexd", [(GLdouble, "c")]), GlFunction(Void, "glIndexdv", [(Pointer(Const(GLdouble)), "c")]), GlFunction(Void, "glIndexf", [(GLfloat, "c")]), GlFunction(Void, "glIndexfv", [(Pointer(Const(GLfloat)), "c")]), GlFunction(Void, "glIndexi", [(GLint, "c")]), GlFunction(Void, "glIndexiv", [(Pointer(Const(GLint)), "c")]), GlFunction(Void, "glIndexs", [(GLshort, "c")]), GlFunction(Void, "glIndexsv", [(Pointer(Const(GLshort)), "c")]), GlFunction(Void, "glNormal3b", [(GLbyte, "nx"), (GLbyte, "ny"), (GLbyte, "nz")]), GlFunction(Void, "glNormal3bv", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glNormal3d", [(GLdouble, "nx"), (GLdouble, "ny"), (GLdouble, "nz")]), GlFunction(Void, "glNormal3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glNormal3f", [(GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz")]), GlFunction(Void, "glNormal3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glNormal3i", [(GLint, "nx"), (GLint, "ny"), (GLint, "nz")]), GlFunction(Void, "glNormal3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glNormal3s", [(GLshort, "nx"), (GLshort, "ny"), (GLshort, "nz")]), GlFunction(Void, "glNormal3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glRasterPos2d", [(GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glRasterPos2dv", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glRasterPos2f", [(GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glRasterPos2fv", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glRasterPos2i", [(GLint, "x"), (GLint, "y")]), GlFunction(Void, "glRasterPos2iv", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glRasterPos2s", [(GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glRasterPos2sv", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glRasterPos3d", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glRasterPos3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glRasterPos3f", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glRasterPos3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glRasterPos3i", [(GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glRasterPos3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glRasterPos3s", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glRasterPos3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glRasterPos4d", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glRasterPos4dv", [(Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glRasterPos4f", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glRasterPos4fv", [(Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glRasterPos4i", [(GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glRasterPos4iv", [(Array(Const(GLint), 4), "v")]), GlFunction(Void, "glRasterPos4s", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glRasterPos4sv", [(Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glRectd", [(GLdouble, "x1"), (GLdouble, "y1"), (GLdouble, "x2"), (GLdouble, "y2")]), GlFunction(Void, "glRectdv", [(Array(Const(GLdouble), 2), "v1"), (Array(Const(GLdouble), 2), "v2")]), GlFunction(Void, "glRectf", [(GLfloat, "x1"), (GLfloat, "y1"), (GLfloat, "x2"), (GLfloat, "y2")]), GlFunction(Void, "glRectfv", [(Array(Const(GLfloat), 2), "v1"), (Array(Const(GLfloat), 2), "v2")]), GlFunction(Void, "glRecti", [(GLint, "x1"), (GLint, "y1"), (GLint, "x2"), (GLint, "y2")]), GlFunction(Void, "glRectiv", [(Array(Const(GLint), 2), "v1"), (Array(Const(GLint), 2), "v2")]), GlFunction(Void, "glRects", [(GLshort, "x1"), (GLshort, "y1"), (GLshort, "x2"), (GLshort, "y2")]), GlFunction(Void, "glRectsv", [(Array(Const(GLshort), 2), "v1"), (Array(Const(GLshort), 2), "v2")]), GlFunction(Void, "glTexCoord1d", [(GLdouble, "s")]), GlFunction(Void, "glTexCoord1dv", [(Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glTexCoord1f", [(GLfloat, "s")]), GlFunction(Void, "glTexCoord1fv", [(Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glTexCoord1i", [(GLint, "s")]), GlFunction(Void, "glTexCoord1iv", [(Pointer(Const(GLint)), "v")]), GlFunction(Void, "glTexCoord1s", [(GLshort, "s")]), GlFunction(Void, "glTexCoord1sv", [(Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glTexCoord2d", [(GLdouble, "s"), (GLdouble, "t")]), GlFunction(Void, "glTexCoord2dv", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glTexCoord2f", [(GLfloat, "s"), (GLfloat, "t")]), GlFunction(Void, "glTexCoord2fv", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glTexCoord2i", [(GLint, "s"), (GLint, "t")]), GlFunction(Void, "glTexCoord2iv", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glTexCoord2s", [(GLshort, "s"), (GLshort, "t")]), GlFunction(Void, "glTexCoord2sv", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glTexCoord3d", [(GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r")]), GlFunction(Void, "glTexCoord3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glTexCoord3f", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r")]), GlFunction(Void, "glTexCoord3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord3i", [(GLint, "s"), (GLint, "t"), (GLint, "r")]), GlFunction(Void, "glTexCoord3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glTexCoord3s", [(GLshort, "s"), (GLshort, "t"), (GLshort, "r")]), GlFunction(Void, "glTexCoord3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glTexCoord4d", [(GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r"), (GLdouble, "q")]), GlFunction(Void, "glTexCoord4dv", [(Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glTexCoord4f", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "q")]), GlFunction(Void, "glTexCoord4fv", [(Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glTexCoord4i", [(GLint, "s"), (GLint, "t"), (GLint, "r"), (GLint, "q")]), GlFunction(Void, "glTexCoord4iv", [(Array(Const(GLint), 4), "v")]), GlFunction(Void, "glTexCoord4s", [(GLshort, "s"), (GLshort, "t"), (GLshort, "r"), (GLshort, "q")]), GlFunction(Void, "glTexCoord4sv", [(Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertex2d", [(GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertex2dv", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertex2f", [(GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glVertex2fv", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glVertex2i", [(GLint, "x"), (GLint, "y")]), GlFunction(Void, "glVertex2iv", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glVertex2s", [(GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glVertex2sv", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glVertex3d", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertex3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertex3f", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glVertex3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glVertex3i", [(GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glVertex3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glVertex3s", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glVertex3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glVertex4d", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertex4dv", [(Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertex4f", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glVertex4fv", [(Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glVertex4i", [(GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glVertex4iv", [(Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertex4s", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glVertex4sv", [(Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glClipPlane", [(GLenum, "plane"), (Array(Const(GLdouble), 4), "equation")]), GlFunction(Void, "glColorMaterial", [(GLenum, "face"), (GLenum, "mode")]), GlFunction(Void, "glFogf", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glFogfv", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFogi", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glFogiv", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLightf", [(GLenum, "light"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glLightfv", [(GLenum, "light"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLighti", [(GLenum, "light"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glLightiv", [(GLenum, "light"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLightModelf", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glLightModelfv", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLightModeli", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glLightModeliv", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLineStipple", [(GLint, "factor"), (GLushort, "pattern")]), GlFunction(Void, "glMaterialf", [(GLenum, "face"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glMaterialfv", [(GLenum, "face"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMateriali", [(GLenum, "face"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glMaterialiv", [(GLenum, "face"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glPolygonStipple", [(Array(Const(GLubyte), "_glPolygonStipple_size()"), "mask")]), GlFunction(Void, "glShadeModel", [(GLenum, "mode")]), GlFunction(Void, "glTexEnvf", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTexEnvfv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexEnvi", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTexEnviv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexGend", [(GLenum, "coord"), (GLenum, "pname"), (GLdouble, "param")]), GlFunction(Void, "glTexGendv", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLdouble), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexGenf", [(GLenum, "coord"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTexGenfv", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexGeni", [(GLenum, "coord"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTexGeniv", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFeedbackBuffer", [(GLsizei, "size"), (GLenum, "type"), Out(Array(GLfloat, "size"), "buffer")]), GlFunction(Void, "glSelectBuffer", [(GLsizei, "size"), Out(Array(GLuint, "size"), "buffer")]), GlFunction(Alias("GLint", GLenum), "glRenderMode", [(GLenum, "mode")]), GlFunction(Void, "glInitNames", []), GlFunction(Void, "glLoadName", [(GLuint, "name")]), GlFunction(Void, "glPassThrough", [(GLfloat, "token")]), GlFunction(Void, "glPopName", []), GlFunction(Void, "glPushName", [(GLuint, "name")]), GlFunction(Void, "glClearAccum", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue"), (GLfloat, "alpha")]), GlFunction(Void, "glClearIndex", [(GLfloat, "c")]), GlFunction(Void, "glIndexMask", [(GLuint, "mask")]), GlFunction(Void, "glAccum", [(GLenum, "op"), (GLfloat, "value")]), GlFunction(Void, "glPopAttrib", []), GlFunction(Void, "glPushAttrib", [(GLbitfield_attrib, "mask")]), GlFunction(Void, "glMap1d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "stride"), (GLint, "order"), (Array(Const(GLdouble), "_glMap1d_size(target, stride, order)"), "points")]), GlFunction(Void, "glMap1f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "stride"), (GLint, "order"), (Array(Const(GLfloat), "_glMap1f_size(target, stride, order)"), "points")]), GlFunction(Void, "glMap2d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLdouble, "v1"), (GLdouble, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Array(Const(GLdouble), "_glMap2d_size(target, ustride, uorder, vstride, vorder)"), "points")]), GlFunction(Void, "glMap2f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLfloat, "v1"), (GLfloat, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Array(Const(GLfloat), "_glMap2f_size(target, ustride, uorder, vstride, vorder)"), "points")]), GlFunction(Void, "glMapGrid1d", [(GLint, "un"), (GLdouble, "u1"), (GLdouble, "u2")]), GlFunction(Void, "glMapGrid1f", [(GLint, "un"), (GLfloat, "u1"), (GLfloat, "u2")]), GlFunction(Void, "glMapGrid2d", [(GLint, "un"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "vn"), (GLdouble, "v1"), (GLdouble, "v2")]), GlFunction(Void, "glMapGrid2f", [(GLint, "un"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "vn"), (GLfloat, "v1"), (GLfloat, "v2")]), GlFunction(Void, "glEvalCoord1d", [(GLdouble, "u")]), GlFunction(Void, "glEvalCoord1dv", [(Pointer(Const(GLdouble)), "u")]), GlFunction(Void, "glEvalCoord1f", [(GLfloat, "u")]), GlFunction(Void, "glEvalCoord1fv", [(Pointer(Const(GLfloat)), "u")]), GlFunction(Void, "glEvalCoord2d", [(GLdouble, "u"), (GLdouble, "v")]), GlFunction(Void, "glEvalCoord2dv", [(Array(Const(GLdouble), 2), "u")]), GlFunction(Void, "glEvalCoord2f", [(GLfloat, "u"), (GLfloat, "v")]), GlFunction(Void, "glEvalCoord2fv", [(Array(Const(GLfloat), 2), "u")]), GlFunction(Void, "glEvalMesh1", [(GLenum, "mode"), (GLint, "i1"), (GLint, "i2")]), GlFunction(Void, "glEvalPoint1", [(GLint, "i")]), GlFunction(Void, "glEvalMesh2", [(GLenum, "mode"), (GLint, "i1"), (GLint, "i2"), (GLint, "j1"), (GLint, "j2")]), GlFunction(Void, "glEvalPoint2", [(GLint, "i"), (GLint, "j")]), GlFunction(Void, "glAlphaFunc", [(GLenum, "func"), (GLfloat, "ref")]), GlFunction(Void, "glPixelZoom", [(GLfloat, "xfactor"), (GLfloat, "yfactor")]), GlFunction(Void, "glPixelTransferf", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPixelTransferi", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPixelMapfv", [(GLenum, "map"), (GLsizei, "mapsize"), (Array(Const(GLfloat), "mapsize"), "values")]), GlFunction(Void, "glPixelMapuiv", [(GLenum, "map"), (GLsizei, "mapsize"), (Array(Const(GLuint), "mapsize"), "values")]), GlFunction(Void, "glPixelMapusv", [(GLenum, "map"), (GLsizei, "mapsize"), (Array(Const(GLushort), "mapsize"), "values")]), GlFunction(Void, "glCopyPixels", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "type")]), GlFunction(Void, "glDrawPixels", [(GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glDrawPixels_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glGetClipPlane", [(GLenum, "plane"), Out(Array(GLdouble, 4), "equation")], sideeffects=False), GlFunction(Void, "glGetLightfv", [(GLenum, "light"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetLightiv", [(GLenum, "light"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMapdv", [(GLenum, "target"), (GLenum, "query"), Out(Pointer(GLdouble), "v")], sideeffects=False), GlFunction(Void, "glGetMapfv", [(GLenum, "target"), (GLenum, "query"), Out(Pointer(GLfloat), "v")], sideeffects=False), GlFunction(Void, "glGetMapiv", [(GLenum, "target"), (GLenum, "query"), Out(Pointer(GLint), "v")], sideeffects=False), GlFunction(Void, "glGetMaterialfv", [(GLenum, "face"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMaterialiv", [(GLenum, "face"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetPixelMapfv", [(GLenum, "map"), Out(Pointer(GLfloat), "values")]), GlFunction(Void, "glGetPixelMapuiv", [(GLenum, "map"), Out(Pointer(GLuint), "values")]), GlFunction(Void, "glGetPixelMapusv", [(GLenum, "map"), Out(Pointer(GLushort), "values")]), GlFunction(Void, "glGetPolygonStipple", [Out(OpaquePointer(GLubyte), "mask")]), GlFunction(Void, "glGetTexEnvfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexEnviv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexGendv", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexGenfv", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexGeniv", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsList", [(GLlist, "list")], sideeffects=False), GlFunction(Void, "glFrustum", [(GLdouble, "left"), (GLdouble, "right"), (GLdouble, "bottom"), (GLdouble, "top"), (GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glLoadIdentity", []), GlFunction(Void, "glLoadMatrixf", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glLoadMatrixd", [(Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMatrixMode", [(GLenum, "mode")]), GlFunction(Void, "glMultMatrixf", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMultMatrixd", [(Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glOrtho", [(GLdouble, "left"), (GLdouble, "right"), (GLdouble, "bottom"), (GLdouble, "top"), (GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glPopMatrix", []), GlFunction(Void, "glPushMatrix", []), GlFunction(Void, "glRotated", [(GLdouble, "angle"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glRotatef", [(GLfloat, "angle"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glScaled", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glScalef", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTranslated", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glTranslatef", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), # GL_VERSION_1_1 GlFunction(Void, "glDrawArrays", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count")]), GlFunction(Void, "glDrawElements", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices")]), GlFunction(Void, "glGetPointerv", [(GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), GlFunction(Void, "glPolygonOffset", [(GLfloat, "factor"), (GLfloat, "units")]), GlFunction(Void, "glCopyTexImage1D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLint, "border")]), GlFunction(Void, "glCopyTexImage2D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border")]), GlFunction(Void, "glCopyTexSubImage1D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyTexSubImage2D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTexSubImage1D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTexSubImage2D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glBindTexture", [(GLenum, "target"), (GLtexture, "texture")]), GlFunction(Void, "glDeleteTextures", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures")]), GlFunction(Void, "glGenTextures", [(GLsizei, "n"), Out(Array(GLtexture, "n"), "textures")]), GlFunction(GLboolean, "glIsTexture", [(GLtexture, "texture")], sideeffects=False), # GL_VERSION_1_1_DEPRECATED GlFunction(Void, "glArrayElement", [(GLint, "i")]), GlFunction(Void, "glColorPointer", [(size_bgra, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glDisableClientState", [(GLenum, "array")]), GlFunction(Void, "glEdgeFlagPointer", [(GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glEnableClientState", [(GLenum, "array")]), GlFunction(Void, "glIndexPointer", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glInterleavedArrays", [(GLenum, "format"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glNormalPointer", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glTexCoordPointer", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glVertexPointer", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(GLboolean, "glAreTexturesResident", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures"), Out(Array(GLboolean, "n"), "residences")], sideeffects=False), GlFunction(Void, "glPrioritizeTextures", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures"), (Array(Const(GLclampf), "n"), "priorities")]), GlFunction(Void, "glIndexub", [(GLubyte, "c")]), GlFunction(Void, "glIndexubv", [(Pointer(Const(GLubyte)), "c")]), GlFunction(Void, "glPopClientAttrib", []), GlFunction(Void, "glPushClientAttrib", [(GLbitfield_client_attrib, "mask")]), # GL_VERSION_1_2 GlFunction(Void, "glBlendColor", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue"), (GLfloat, "alpha")]), GlFunction(Void, "glBlendEquation", [(GLenum, "mode")]), GlFunction(Void, "glDrawRangeElements", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices")]), GlFunction(Void, "glTexImage3D", [(GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glTexSubImage3D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glCopyTexSubImage3D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), # GL_VERSION_1_2_DEPRECATED GlFunction(Void, "glColorTable", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glColorTable_size(format, type, width)"), "table")]), GlFunction(Void, "glColorTableParameterfv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glColorTableParameteriv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCopyColorTable", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glGetColorTable", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetColorTable_size(target, format, type)"), "table")], sideeffects=False), GlFunction(Void, "glGetColorTableParameterfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetColorTableParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glColorSubTable", [(GLenum, "target"), (GLsizei, "start"), (GLsizei, "count"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glColorSubTable_size(format, type, count)"), "data")]), GlFunction(Void, "glCopyColorSubTable", [(GLenum, "target"), (GLsizei, "start"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glConvolutionFilter1D", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, width)"), "image")]), GlFunction(Void, "glConvolutionFilter2D", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter2D_size(format, type, width, height)"), "image")]), GlFunction(Void, "glConvolutionParameterf", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "params")]), GlFunction(Void, "glConvolutionParameterfv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glConvolutionParameteri", [(GLenum, "target"), (GLenum, "pname"), (GLint, "params")]), GlFunction(Void, "glConvolutionParameteriv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCopyConvolutionFilter1D", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyConvolutionFilter2D", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetConvolutionFilter", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetConvolutionFilter_size(target, format, type)"), "image")]), GlFunction(Void, "glGetConvolutionParameterfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetConvolutionParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSeparableFilter", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetSeparableFilter_size(target, format, type)"), "row"), Out(OpaqueBlob(GLvoid, "_glGetSeparableFilter_size(target, format, type)"), "column"), Out(GLpointer, "span")]), GlFunction(Void, "glSeparableFilter2D", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, width)"), "row"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, height)"), "column")]), GlFunction(Void, "glGetHistogram", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetHistogram_size(target, format, type)"), "values")]), GlFunction(Void, "glGetHistogramParameterfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetHistogramParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMinmax", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetMinmax_size(target, format, type)"), "values")]), GlFunction(Void, "glGetMinmaxParameterfv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMinmaxParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glHistogram", [(GLenum, "target"), (GLsizei, "width"), (GLenum, "internalformat"), (GLboolean, "sink")]), GlFunction(Void, "glMinmax", [(GLenum, "target"), (GLenum, "internalformat"), (GLboolean, "sink")]), GlFunction(Void, "glResetHistogram", [(GLenum, "target")]), GlFunction(Void, "glResetMinmax", [(GLenum, "target")]), # GL_VERSION_1_3 GlFunction(Void, "glActiveTexture", [(GLenum, "texture")]), GlFunction(Void, "glSampleCoverage", [(GLfloat, "value"), (GLboolean, "invert")]), GlFunction(Void, "glCompressedTexImage3D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexImage2D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexImage1D", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage3D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage2D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage1D", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glGetCompressedTexImage", [(GLenum, "target"), (GLint, "level"), Out(OpaqueBlob(GLvoid, "_glGetCompressedTexImage_size(target, level)"), "img")]), # GL_VERSION_1_3_DEPRECATED GlFunction(Void, "glClientActiveTexture", [(GLenum, "texture")]), GlFunction(Void, "glMultiTexCoord1d", [(GLenum, "target"), (GLdouble, "s")]), GlFunction(Void, "glMultiTexCoord1dv", [(GLenum, "target"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glMultiTexCoord1f", [(GLenum, "target"), (GLfloat, "s")]), GlFunction(Void, "glMultiTexCoord1fv", [(GLenum, "target"), (Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glMultiTexCoord1i", [(GLenum, "target"), (GLint, "s")]), GlFunction(Void, "glMultiTexCoord1iv", [(GLenum, "target"), (Pointer(Const(GLint)), "v")]), GlFunction(Void, "glMultiTexCoord1s", [(GLenum, "target"), (GLshort, "s")]), GlFunction(Void, "glMultiTexCoord1sv", [(GLenum, "target"), (Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glMultiTexCoord2d", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t")]), GlFunction(Void, "glMultiTexCoord2dv", [(GLenum, "target"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glMultiTexCoord2f", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t")]), GlFunction(Void, "glMultiTexCoord2fv", [(GLenum, "target"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glMultiTexCoord2i", [(GLenum, "target"), (GLint, "s"), (GLint, "t")]), GlFunction(Void, "glMultiTexCoord2iv", [(GLenum, "target"), (Array(Const(GLint), 2), "v")]), GlFunction(Void, "glMultiTexCoord2s", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t")]), GlFunction(Void, "glMultiTexCoord2sv", [(GLenum, "target"), (Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glMultiTexCoord3d", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r")]), GlFunction(Void, "glMultiTexCoord3dv", [(GLenum, "target"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glMultiTexCoord3f", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r")]), GlFunction(Void, "glMultiTexCoord3fv", [(GLenum, "target"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glMultiTexCoord3i", [(GLenum, "target"), (GLint, "s"), (GLint, "t"), (GLint, "r")]), GlFunction(Void, "glMultiTexCoord3iv", [(GLenum, "target"), (Array(Const(GLint), 3), "v")]), GlFunction(Void, "glMultiTexCoord3s", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t"), (GLshort, "r")]), GlFunction(Void, "glMultiTexCoord3sv", [(GLenum, "target"), (Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glMultiTexCoord4d", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r"), (GLdouble, "q")]), GlFunction(Void, "glMultiTexCoord4dv", [(GLenum, "target"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glMultiTexCoord4f", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "q")]), GlFunction(Void, "glMultiTexCoord4fv", [(GLenum, "target"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glMultiTexCoord4i", [(GLenum, "target"), (GLint, "s"), (GLint, "t"), (GLint, "r"), (GLint, "q")]), GlFunction(Void, "glMultiTexCoord4iv", [(GLenum, "target"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glMultiTexCoord4s", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t"), (GLshort, "r"), (GLshort, "q")]), GlFunction(Void, "glMultiTexCoord4sv", [(GLenum, "target"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glLoadTransposeMatrixf", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glLoadTransposeMatrixd", [(Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMultTransposeMatrixf", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMultTransposeMatrixd", [(Array(Const(GLdouble), 16), "m")]), # GL_VERSION_1_4 GlFunction(Void, "glBlendFuncSeparate", [(GLenum, "sfactorRGB"), (GLenum, "dfactorRGB"), (GLenum, "sfactorAlpha"), (GLenum, "dfactorAlpha")]), GlFunction(Void, "glMultiDrawArrays", [(GLenum_mode, "mode"), (Array(Const(GLint), "drawcount"), "first"), (Array(Const(GLsizei), "drawcount"), "count"), (GLsizei, "drawcount")]), GlFunction(Void, "glMultiDrawElements", [(GLenum_mode, "mode"), (Array(Const(GLsizei), "drawcount"), "count"), (GLenum, "type"), (Array(Const(GLindexBuffer("count[{i}]", "type")), "drawcount"), "indices"), (GLsizei, "drawcount")]), GlFunction(Void, "glPointParameterf", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPointParameterfv", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glPointParameteri", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPointParameteriv", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), # GL_VERSION_1_4_DEPRECATED GlFunction(Void, "glFogCoordf", [(GLfloat, "coord")]), GlFunction(Void, "glFogCoordfv", [(Pointer(Const(GLfloat)), "coord")]), GlFunction(Void, "glFogCoordd", [(GLdouble, "coord")]), GlFunction(Void, "glFogCoorddv", [(Pointer(Const(GLdouble)), "coord")]), GlFunction(Void, "glFogCoordPointer", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glSecondaryColor3b", [(GLbyte, "red"), (GLbyte, "green"), (GLbyte, "blue")]), GlFunction(Void, "glSecondaryColor3bv", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glSecondaryColor3d", [(GLdouble, "red"), (GLdouble, "green"), (GLdouble, "blue")]), GlFunction(Void, "glSecondaryColor3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glSecondaryColor3f", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue")]), GlFunction(Void, "glSecondaryColor3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glSecondaryColor3i", [(GLint, "red"), (GLint, "green"), (GLint, "blue")]), GlFunction(Void, "glSecondaryColor3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glSecondaryColor3s", [(GLshort, "red"), (GLshort, "green"), (GLshort, "blue")]), GlFunction(Void, "glSecondaryColor3sv", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glSecondaryColor3ub", [(GLubyte, "red"), (GLubyte, "green"), (GLubyte, "blue")]), GlFunction(Void, "glSecondaryColor3ubv", [(Array(Const(GLubyte), 3), "v")]), GlFunction(Void, "glSecondaryColor3ui", [(GLuint, "red"), (GLuint, "green"), (GLuint, "blue")]), GlFunction(Void, "glSecondaryColor3uiv", [(Array(Const(GLuint), 3), "v")]), GlFunction(Void, "glSecondaryColor3us", [(GLushort, "red"), (GLushort, "green"), (GLushort, "blue")]), GlFunction(Void, "glSecondaryColor3usv", [(Array(Const(GLushort), 3), "v")]), GlFunction(Void, "glSecondaryColorPointer", [(size_bgra, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glWindowPos2d", [(GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glWindowPos2dv", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glWindowPos2f", [(GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glWindowPos2fv", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glWindowPos2i", [(GLint, "x"), (GLint, "y")]), GlFunction(Void, "glWindowPos2iv", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glWindowPos2s", [(GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glWindowPos2sv", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glWindowPos3d", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glWindowPos3dv", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glWindowPos3f", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glWindowPos3fv", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glWindowPos3i", [(GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glWindowPos3iv", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glWindowPos3s", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glWindowPos3sv", [(Array(Const(GLshort), 3), "v")]), # GL_VERSION_1_5 GlFunction(Void, "glGenQueries", [(GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glDeleteQueries", [(GLsizei, "n"), (Array(Const(GLquery), "n"), "ids")]), GlFunction(GLboolean, "glIsQuery", [(GLquery, "id")], sideeffects=False), GlFunction(Void, "glBeginQuery", [(GLenum, "target"), (GLquery, "id")]), GlFunction(Void, "glEndQuery", [(GLenum, "target")]), GlFunction(Void, "glGetQueryiv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectiv", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectuiv", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glBindBuffer", [(GLenum, "target"), (GLbuffer, "buffer")]), GlFunction(Void, "glDeleteBuffers", [(GLsizei, "n"), (Array(Const(GLbuffer), "n"), "buffer")]), GlFunction(Void, "glGenBuffers", [(GLsizei, "n"), Out(Array(GLbuffer, "n"), "buffer")]), GlFunction(GLboolean, "glIsBuffer", [(GLbuffer, "buffer")], sideeffects=False), GlFunction(Void, "glBufferData", [(GLenum, "target"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data"), (GLenum, "usage")]), GlFunction(Void, "glBufferSubData", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data")]), GlFunction(Void, "glGetBufferSubData", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "size"), Out(OpaqueBlob(GLvoid, "size"), "data")], sideeffects=False), GlFunction(GLmap, "glMapBuffer", [(GLenum, "target"), (GLenum, "access")]), GlFunction(GLboolean, "glUnmapBuffer", [(GLenum, "target")]), GlFunction(Void, "glGetBufferParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetBufferPointerv", [(GLenum, "target"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), # GL_VERSION_2_0 GlFunction(Void, "glBlendEquationSeparate", [(GLenum, "modeRGB"), (GLenum, "modeAlpha")]), GlFunction(Void, "glDrawBuffers", [(GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), GlFunction(Void, "glStencilOpSeparate", [(GLenum, "face"), (GLenum, "sfail"), (GLenum, "dpfail"), (GLenum, "dppass")]), GlFunction(Void, "glStencilFuncSeparate", [(GLenum, "face"), (GLenum, "func"), (GLint, "ref"), (GLuint, "mask")]), GlFunction(Void, "glStencilMaskSeparate", [(GLenum, "face"), (GLuint, "mask")]), GlFunction(Void, "glAttachShader", [(GLprogram, "program"), (GLshader, "shader")]), GlFunction(Void, "glBindAttribLocation", [(GLprogram, "program"), (GLuint, "index"), (GLstringConst, "name")]), GlFunction(Void, "glCompileShader", [(GLshader, "shader")]), GlFunction(GLprogram, "glCreateProgram", []), GlFunction(GLshader, "glCreateShader", [(GLenum, "type")]), GlFunction(Void, "glDeleteProgram", [(GLprogram, "program")]), GlFunction(Void, "glDeleteShader", [(GLshader, "shader")]), GlFunction(Void, "glDetachShader", [(GLprogram, "program"), (GLshader, "shader")]), GlFunction(Void, "glDisableVertexAttribArray", [(GLuint, "index")]), GlFunction(Void, "glEnableVertexAttribArray", [(GLuint, "index")]), GlFunction(Void, "glGetActiveAttrib", [(GLprogram, "program"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLint), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glGetActiveUniform", [(GLprogram, "program"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLint), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glGetAttachedShaders", [(GLprogram, "program"), (GLsizei, "maxCount"), Out(Pointer(GLsizei), "count"), Out(Array(GLuint, "(count ? *count : maxCount)"), "obj")], sideeffects=False), GlFunction(GLint, "glGetAttribLocation", [(GLprogram, "program"), (GLstringConst, "name")]), GlFunction(Void, "glGetProgramiv", [(GLprogram, "program"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetProgramInfoLog", [(GLprogram, "program"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "infoLog")], sideeffects=False), GlFunction(Void, "glGetShaderiv", [(GLshader, "shader"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetShaderInfoLog", [(GLshader, "shader"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "infoLog")], sideeffects=False), GlFunction(Void, "glGetShaderSource", [(GLshader, "shader"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "source")], sideeffects=False), GlFunction(GLlocation, "glGetUniformLocation", [(GLprogram, "program"), (GLstringConst, "name")]), GlFunction(Void, "glGetUniformfv", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaquePointer(GLfloat), "params")], sideeffects=False), GlFunction(Void, "glGetUniformiv", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaquePointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribdv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribfv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribiv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribPointerv", [(GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLpointer), "pointer")], sideeffects=False), GlFunction(GLboolean, "glIsProgram", [(GLprogram, "program")], sideeffects=False), GlFunction(GLboolean, "glIsShader", [(GLshader, "shader")], sideeffects=False), GlFunction(Void, "glLinkProgram", [(GLprogram, "program")]), GlFunction(Void, "glShaderSource", [(GLshader, "shader"), (GLsizei, "count"), (Array(Const(String(Const(GLchar), "_glShaderSource_length(string, length, {i})")), "count"), "string"), (Array(Const(GLint), "count"), "length")]), GlFunction(Void, "glUseProgram", [(GLprogram, "program")]), GlFunction(Void, "glUniform1f", [(GLlocation, "location"), (GLfloat, "v0")]), GlFunction(Void, "glUniform2f", [(GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1")]), GlFunction(Void, "glUniform3f", [(GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2")]), GlFunction(Void, "glUniform4f", [(GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2"), (GLfloat, "v3")]), GlFunction(Void, "glUniform1i", [(GLlocation, "location"), (GLint, "v0")]), GlFunction(Void, "glUniform2i", [(GLlocation, "location"), (GLint, "v0"), (GLint, "v1")]), GlFunction(Void, "glUniform3i", [(GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2")]), GlFunction(Void, "glUniform4i", [(GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2"), (GLint, "v3")]), GlFunction(Void, "glUniform1fv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "value")]), GlFunction(Void, "glUniform2fv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*2"), "value")]), GlFunction(Void, "glUniform3fv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*3"), "value")]), GlFunction(Void, "glUniform4fv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "value")]), GlFunction(Void, "glUniform1iv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count"), "value")]), GlFunction(Void, "glUniform2iv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*2"), "value")]), GlFunction(Void, "glUniform3iv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*3"), "value")]), GlFunction(Void, "glUniform4iv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "value")]), GlFunction(Void, "glUniformMatrix2fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*2"), "value")]), GlFunction(Void, "glUniformMatrix3fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*3"), "value")]), GlFunction(Void, "glUniformMatrix4fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*4"), "value")]), GlFunction(Void, "glValidateProgram", [(GLprogram, "program")]), GlFunction(Void, "glVertexAttrib1d", [(GLuint, "index"), (GLdouble, "x")]), GlFunction(Void, "glVertexAttrib1dv", [(GLuint, "index"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glVertexAttrib1f", [(GLuint, "index"), (GLfloat, "x")]), GlFunction(Void, "glVertexAttrib1fv", [(GLuint, "index"), (Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glVertexAttrib1s", [(GLuint, "index"), (GLshort, "x")]), GlFunction(Void, "glVertexAttrib1sv", [(GLuint, "index"), (Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glVertexAttrib2d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexAttrib2dv", [(GLuint, "index"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertexAttrib2f", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glVertexAttrib2fv", [(GLuint, "index"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glVertexAttrib2s", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glVertexAttrib2sv", [(GLuint, "index"), (Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glVertexAttrib3d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexAttrib3dv", [(GLuint, "index"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertexAttrib3f", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glVertexAttrib3fv", [(GLuint, "index"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glVertexAttrib3s", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glVertexAttrib3sv", [(GLuint, "index"), (Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glVertexAttrib4Nbv", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4Niv", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttrib4Nsv", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttrib4Nub", [(GLuint, "index"), (GLubyte, "x"), (GLubyte, "y"), (GLubyte, "z"), (GLubyte, "w")]), GlFunction(Void, "glVertexAttrib4Nubv", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4Nuiv", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttrib4Nusv", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glVertexAttrib4bv", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexAttrib4dv", [(GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertexAttrib4f", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glVertexAttrib4fv", [(GLuint, "index"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glVertexAttrib4iv", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttrib4s", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glVertexAttrib4sv", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttrib4ubv", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4uiv", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttrib4usv", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glVertexAttribPointer", [(GLuint, "index"), (size_bgra, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_VERSION_2_1 GlFunction(Void, "glUniformMatrix2x3fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*3"), "value")]), GlFunction(Void, "glUniformMatrix3x2fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*2"), "value")]), GlFunction(Void, "glUniformMatrix2x4fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*4"), "value")]), GlFunction(Void, "glUniformMatrix4x2fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*2"), "value")]), GlFunction(Void, "glUniformMatrix3x4fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*4"), "value")]), GlFunction(Void, "glUniformMatrix4x3fv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*3"), "value")]), # GL_VERSION_3_0 GlFunction(Void, "glColorMaski", [(GLuint, "index"), (GLboolean, "r"), (GLboolean, "g"), (GLboolean, "b"), (GLboolean, "a")]), GlFunction(Void, "glGetBooleani_v", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLboolean, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetIntegeri_v", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLint, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glEnablei", [(GLenum, "target"), (GLuint, "index")]), GlFunction(Void, "glDisablei", [(GLenum, "target"), (GLuint, "index")]), GlFunction(GLboolean, "glIsEnabledi", [(GLenum, "target"), (GLuint, "index")], sideeffects=False), GlFunction(Void, "glBeginTransformFeedback", [(GLenum_mode, "primitiveMode")]), GlFunction(Void, "glEndTransformFeedback", []), GlFunction(Void, "glBindBufferRange", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glBindBufferBase", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer")]), GlFunction(Void, "glTransformFeedbackVaryings", [(GLprogram, "program"), (GLsizei, "count"), (Array(Const(GLstringConst), "count"), "varyings"), (GLenum, "bufferMode")]), GlFunction(Void, "glGetTransformFeedbackVarying", [(GLprogram, "program"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLsizei), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glClampColor", [(GLenum, "target"), (GLenum, "clamp")]), GlFunction(Void, "glBeginConditionalRender", [(GLquery, "id"), (GLenum, "mode")]), GlFunction(Void, "glEndConditionalRender", []), GlFunction(Void, "glVertexAttribIPointer", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glGetVertexAttribIiv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribIuiv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glVertexAttribI1i", [(GLuint, "index"), (GLint, "x")]), GlFunction(Void, "glVertexAttribI2i", [(GLuint, "index"), (GLint, "x"), (GLint, "y")]), GlFunction(Void, "glVertexAttribI3i", [(GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glVertexAttribI4i", [(GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glVertexAttribI1ui", [(GLuint, "index"), (GLuint, "x")]), GlFunction(Void, "glVertexAttribI2ui", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y")]), GlFunction(Void, "glVertexAttribI3ui", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z")]), GlFunction(Void, "glVertexAttribI4ui", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z"), (GLuint, "w")]), GlFunction(Void, "glVertexAttribI1iv", [(GLuint, "index"), (Pointer(Const(GLint)), "v")]), GlFunction(Void, "glVertexAttribI2iv", [(GLuint, "index"), (Array(Const(GLint), 2), "v")]), GlFunction(Void, "glVertexAttribI3iv", [(GLuint, "index"), (Array(Const(GLint), 3), "v")]), GlFunction(Void, "glVertexAttribI4iv", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttribI1uiv", [(GLuint, "index"), (Pointer(Const(GLuint)), "v")]), GlFunction(Void, "glVertexAttribI2uiv", [(GLuint, "index"), (Array(Const(GLuint), 2), "v")]), GlFunction(Void, "glVertexAttribI3uiv", [(GLuint, "index"), (Array(Const(GLuint), 3), "v")]), GlFunction(Void, "glVertexAttribI4uiv", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttribI4bv", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttribI4sv", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttribI4ubv", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttribI4usv", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glGetUniformuiv", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaqueArray(GLuint, "_glGetUniformuiv_size(program, location)"), "params")], sideeffects=False), GlFunction(Void, "glBindFragDataLocation", [(GLprogram, "program"), (GLuint, "color"), (GLstringConst, "name")]), GlFunction(GLint, "glGetFragDataLocation", [(GLprogram, "program"), (GLstringConst, "name")], sideeffects=False), GlFunction(Void, "glUniform1ui", [(GLlocation, "location"), (GLuint, "v0")]), GlFunction(Void, "glUniform2ui", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1")]), GlFunction(Void, "glUniform3ui", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2")]), GlFunction(Void, "glUniform4ui", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2"), (GLuint, "v3")]), GlFunction(Void, "glUniform1uiv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "value")]), GlFunction(Void, "glUniform2uiv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*2"), "value")]), GlFunction(Void, "glUniform3uiv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*3"), "value")]), GlFunction(Void, "glUniform4uiv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "value")]), GlFunction(Void, "glTexParameterIiv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexParameterIuiv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetTexParameterIiv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexParameterIuiv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glClearBufferiv", [(GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLint), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearBufferuiv", [(GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLuint), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearBufferfv", [(GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLfloat), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearBufferfi", [(GLenum, "buffer"), (GLint, "drawbuffer"), (GLfloat, "depth"), (GLint, "stencil")]), GlFunction(String(Const(GLubyte)), "glGetStringi", [(GLenum, "name"), (GLuint, "index")], sideeffects=False), # GL_VERSION_3_1 GlFunction(Void, "glDrawArraysInstanced", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count"), (GLsizei, "primcount")]), GlFunction(Void, "glDrawElementsInstanced", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount")]), GlFunction(Void, "glTexBuffer", [(GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), GlFunction(Void, "glPrimitiveRestartIndex", [(GLuint, "index")]), # GL_VERSION_3_2 GlFunction(Void, "glGetInteger64i_v", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLint64, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetBufferParameteri64v", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glFramebufferTexture", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level")]), # GL_VERSION_3_3 GlFunction(Void, "glVertexAttribDivisor", [(GLuint, "index"), (GLuint, "divisor")]), # GL_VERSION_4_0 GlFunction(Void, "glMinSampleShading", [(GLfloat, "value")]), GlFunction(Void, "glBlendEquationi", [(GLuint, "buf"), (GLenum, "mode")]), GlFunction(Void, "glBlendEquationSeparatei", [(GLuint, "buf"), (GLenum, "modeRGB"), (GLenum, "modeAlpha")]), GlFunction(Void, "glBlendFunci", [(GLuint, "buf"), (GLenum, "src"), (GLenum, "dst")]), GlFunction(Void, "glBlendFuncSeparatei", [(GLuint, "buf"), (GLenum, "srcRGB"), (GLenum, "dstRGB"), (GLenum, "srcAlpha"), (GLenum, "dstAlpha")]), # GL_VERSION_4_1 # GL_VERSION_4_2 # GL_VERSION_4_3 # GL_VERSION_4_4 # GL_VERSION_4_5 GlFunction(Void, "glGetnCompressedTexImage", [(GLenum, "target"), (GLint, "lod"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "pixels")]), GlFunction(Void, "glGetnTexImage", [(GLenum, "target"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "pixels")]), GlFunction(Void, "glGetnUniformdv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLdouble, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnMapdv", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLdouble, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnMapfv", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnMapiv", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLint, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnPixelMapfv", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "values")]), GlFunction(Void, "glGetnPixelMapuiv", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLuint, "bufSize"), "values")]), GlFunction(Void, "glGetnPixelMapusv", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLushort, "bufSize"), "values")]), GlFunction(Void, "glGetnPolygonStipple", [(GLsizei, "bufSize"), Out(Array(GLubyte, "bufSize"), "pattern")]), GlFunction(Void, "glGetnColorTable", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "table")], sideeffects=False), GlFunction(Void, "glGetnConvolutionFilter", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "image")]), GlFunction(Void, "glGetnSeparableFilter", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "rowBufSize"), Out(OpaqueBlob(Void, "rowBufSize"), "row"), (GLsizei, "columnBufSize"), Out(OpaqueBlob(Void, "columnBufSize"), "column"), Out(GLpointer, "span")]), GlFunction(Void, "glGetnHistogram", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "values")]), GlFunction(Void, "glGetnMinmax", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(Void, "bufSize"), "values")]), # GL_VERSION_ES_CM_1_0 GlFunction(Void, "glClipPlanef", [(GLenum, "plane"), (Array(Const(GLfloat), 4), "equation")]), GlFunction(Void, "glFrustumf", [(GLfloat, "left"), (GLfloat, "right"), (GLfloat, "bottom"), (GLfloat, "top"), (GLfloat, "zNear"), (GLfloat, "zFar")]), GlFunction(Void, "glGetClipPlanef", [(GLenum, "plane"), Out(Array(GLfloat, 4), "equation")], sideeffects=False), GlFunction(Void, "glOrthof", [(GLfloat, "left"), (GLfloat, "right"), (GLfloat, "bottom"), (GLfloat, "top"), (GLfloat, "zNear"), (GLfloat, "zFar")]), GlFunction(Void, "glAlphaFuncx", [(GLenum, "func"), (GLclampx, "ref")]), GlFunction(Void, "glClearColorx", [(GLclampx, "red"), (GLclampx, "green"), (GLclampx, "blue"), (GLclampx, "alpha")]), GlFunction(Void, "glClearDepthx", [(GLclampx, "depth")]), GlFunction(Void, "glClipPlanex", [(GLenum, "plane"), (Array(Const(GLfixed), 4), "equation")]), GlFunction(Void, "glColor4x", [(GLfixed, "red"), (GLfixed, "green"), (GLfixed, "blue"), (GLfixed, "alpha")]), GlFunction(Void, "glDepthRangex", [(GLclampx, "zNear"), (GLclampx, "zFar")]), GlFunction(Void, "glFogx", [(GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glFogxv", [(GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFrustumx", [(GLfixed, "left"), (GLfixed, "right"), (GLfixed, "bottom"), (GLfixed, "top"), (GLfixed, "zNear"), (GLfixed, "zFar")]), GlFunction(Void, "glGetClipPlanex", [(GLenum, "plane"), Out(Array(GLfixed, 4), "equation")], sideeffects=False), GlFunction(Void, "glGetFixedv", [(GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetLightxv", [(GLenum, "light"), (GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMaterialxv", [(GLenum, "face"), (GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexEnvxv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexParameterxv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glLightModelx", [(GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glLightModelxv", [(GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLightx", [(GLenum, "light"), (GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glLightxv", [(GLenum, "light"), (GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glLineWidthx", [(GLfixed, "width")]), GlFunction(Void, "glLoadMatrixx", [(Array(Const(GLfixed), 16), "m")]), GlFunction(Void, "glMaterialx", [(GLenum, "face"), (GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glMaterialxv", [(GLenum, "face"), (GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultMatrixx", [(Array(Const(GLfixed), 16), "m")]), GlFunction(Void, "glMultiTexCoord4x", [(GLenum, "target"), (GLfixed, "s"), (GLfixed, "t"), (GLfixed, "r"), (GLfixed, "q")]), GlFunction(Void, "glNormal3x", [(GLfixed, "nx"), (GLfixed, "ny"), (GLfixed, "nz")]), GlFunction(Void, "glOrthox", [(GLfixed, "left"), (GLfixed, "right"), (GLfixed, "bottom"), (GLfixed, "top"), (GLfixed, "zNear"), (GLfixed, "zFar")]), GlFunction(Void, "glPointParameterx", [(GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glPointParameterxv", [(GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glPointSizex", [(GLfixed, "size")]), GlFunction(Void, "glPolygonOffsetx", [(GLfixed, "factor"), (GLfixed, "units")]), GlFunction(Void, "glRotatex", [(GLfixed, "angle"), (GLfixed, "x"), (GLfixed, "y"), (GLfixed, "z")]), GlFunction(Void, "glSampleCoveragex", [(GLclampx, "value"), (GLboolean, "invert")]), GlFunction(Void, "glScalex", [(GLfixed, "x"), (GLfixed, "y"), (GLfixed, "z")]), GlFunction(Void, "glTexEnvx", [(GLenum, "target"), (GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glTexEnvxv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexParameterx", [(GLenum, "target"), (GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glTexParameterxv", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTranslatex", [(GLfixed, "x"), (GLfixed, "y"), (GLfixed, "z")]), # GL_ES_VERSION_2_0 # GL_ES_VERSION_3_0 # GL_ES_VERSION_3_1 # GL_3DFX_tbuffer GlFunction(Void, "glTbufferMask3DFX", [(GLuint, "mask")]), # GL_AMD_debug_output GlFunction(Void, "glDebugMessageEnableAMD", [(GLenum, "category"), (GLenum, "severity"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "ids"), (GLboolean, "enabled")], sideeffects=True), GlFunction(Void, "glDebugMessageInsertAMD", [(GLenum, "category"), (GLenum, "severity"), (GLuint, "id"), (GLsizei, "length"), InGlString(GLchar, "length", "buf")], sideeffects=True), GlFunction(Void, "glDebugMessageCallbackAMD", [(GLDEBUGPROCAMD, "callback"), (GLpointer, "userParam")], sideeffects=False), GlFunction(GLuint, "glGetDebugMessageLogAMD", [(GLuint, "count"), (GLsizei, "bufsize"), Out(Array(GLenum, "count"), "categories"), Out(Array(GLuint, "count"), "severities"), Out(Array(GLuint, "count"), "ids"), Out(Array(GLsizei, "count"), "lengths"), Out(String(GLchar, "_glGetDebugMessageLog_length(message, lengths, _result)"), "message")], sideeffects=False, fail=0), # GL_AMD_draw_buffers_blend GlFunction(Void, "glBlendFuncIndexedAMD", [(GLuint, "buf"), (GLenum, "src"), (GLenum, "dst")]), GlFunction(Void, "glBlendFuncSeparateIndexedAMD", [(GLuint, "buf"), (GLenum, "srcRGB"), (GLenum, "dstRGB"), (GLenum, "srcAlpha"), (GLenum, "dstAlpha")]), GlFunction(Void, "glBlendEquationIndexedAMD", [(GLuint, "buf"), (GLenum, "mode")]), GlFunction(Void, "glBlendEquationSeparateIndexedAMD", [(GLuint, "buf"), (GLenum, "modeRGB"), (GLenum, "modeAlpha")]), # GL_AMD_interleaved_elements GlFunction(Void, "glVertexAttribParameteriAMD", [(GLuint, "index"), (GLenum, "pname"), (GLint, "param")]), # GL_AMD_multi_draw_indirect GlFunction(Void, "glMultiDrawArraysIndirectAMD", [(GLenum_mode, "mode"), (GLpointerConst, "indirect"), (GLsizei, "primcount"), (GLsizei, "stride")]), GlFunction(Void, "glMultiDrawElementsIndirectAMD", [(GLenum_mode, "mode"), (GLenum, "type"), (GLpointerConst, "indirect"), (GLsizei, "primcount"), (GLsizei, "stride")]), # GL_AMD_name_gen_delete GlFunction(Void, "glGenNamesAMD", [(GLenum, "identifier"), (GLuint, "num"), Out(Array(GLuint, "num"), "names")]), GlFunction(Void, "glDeleteNamesAMD", [(GLenum, "identifier"), (GLuint, "num"), (Array(Const(GLuint), "num"), "names")]), GlFunction(GLboolean, "glIsNameAMD", [(GLenum, "identifier"), (GLuint, "name")], sideeffects=False), # GL_AMD_occlusion_query_event GlFunction(Void, "glQueryObjectParameteruiAMD", [(GLenum, "target"), (GLquery, "id"), (GLenum, "pname"), (GLuint, "param")]), # GL_AMD_performance_monitor GlFunction(Void, "glGetPerfMonitorGroupsAMD", [Out(Pointer(GLint), "numGroups"), (GLsizei, "groupsSize"), Out(Array(GLuint, "groupsSize"), "groups")], sideeffects=False), GlFunction(Void, "glGetPerfMonitorCountersAMD", [(GLuint, "group"), Out(Pointer(GLint), "numCounters"), Out(Pointer(GLint), "maxActiveCounters"), (GLsizei, "counterSize"), Out(Array(GLuint, "counterSize"), "counters")], sideeffects=False), GlFunction(Void, "glGetPerfMonitorGroupStringAMD", [(GLuint, "group"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "groupString")], sideeffects=False), GlFunction(Void, "glGetPerfMonitorCounterStringAMD", [(GLuint, "group"), (GLuint, "counter"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "counterString")], sideeffects=False), GlFunction(Void, "glGetPerfMonitorCounterInfoAMD", [(GLuint, "group"), (GLuint, "counter"), (GLenum, "pname"), Out(GLperfMonitorCounterInfoAMD, "data")], sideeffects=False), GlFunction(Void, "glGenPerfMonitorsAMD", [(GLsizei, "n"), Out(Array(GLuint, "n"), "monitors")]), GlFunction(Void, "glDeletePerfMonitorsAMD", [(GLsizei, "n"), (Array(GLuint, "n"), "monitors")]), GlFunction(Void, "glSelectPerfMonitorCountersAMD", [(GLuint, "monitor"), (GLboolean, "enable"), (GLuint, "group"), (GLint, "numCounters"), (Array(GLuint, "numCounters"), "counterList")]), GlFunction(Void, "glBeginPerfMonitorAMD", [(GLuint, "monitor")]), GlFunction(Void, "glEndPerfMonitorAMD", [(GLuint, "monitor")]), GlFunction(Void, "glGetPerfMonitorCounterDataAMD", [(GLuint, "monitor"), (GLenum, "pname"), (GLsizei, "dataSize"), Out(Array(GLuint, "dataSize"), "data"), Out(Pointer(GLint), "bytesWritten")], sideeffects=False), # GL_AMD_sample_positions GlFunction(Void, "glSetMultisamplefvAMD", [(GLenum, "pname"), (GLuint, "index"), (Array(Const(GLfloat), 2), "val")]), # GL_AMD_sparse_texture GlFunction(Void, "glTexStorageSparseAMD", [(GLenum, "target"), (GLenum, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLsizei, "layers"), (GLbitfield_texStorageSparse, "flags")]), GlFunction(Void, "glTextureStorageSparseAMD", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLsizei, "layers"), (GLbitfield_texStorageSparse, "flags")]), # GL_AMD_stencil_operation_extended GlFunction(Void, "glStencilOpValueAMD", [(GLenum, "face"), (GLuint, "value")]), # GL_AMD_vertex_shader_tessellator GlFunction(Void, "glTessellationFactorAMD", [(GLfloat, "factor")]), GlFunction(Void, "glTessellationModeAMD", [(GLenum, "mode")]), # GL_ANGLE_framebuffer_blit GlFunction(Void, "glBlitFramebufferANGLE", [(GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield_attrib, "mask"), (GLenum, "filter")]), # GL_ANGLE_framebuffer_multisample GlFunction(Void, "glRenderbufferStorageMultisampleANGLE", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), # GL_ANGLE_instanced_arrays GlFunction(Void, "glDrawArraysInstancedANGLE", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count"), (GLsizei, "primcount")]), GlFunction(Void, "glDrawElementsInstancedANGLE", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount")]), GlFunction(Void, "glVertexAttribDivisorANGLE", [(GLuint, "index"), (GLuint, "divisor")]), # GL_ANGLE_timer_query GlFunction(Void, "glGenQueriesANGLE", [(GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glDeleteQueriesANGLE", [(GLsizei, "n"), (Array(Const(GLquery), "n"), "ids")]), GlFunction(GLboolean, "glIsQueryANGLE", [(GLquery, "id")], sideeffects=False), GlFunction(Void, "glBeginQueryANGLE", [(GLenum, "target"), (GLquery, "id")]), GlFunction(Void, "glEndQueryANGLE", [(GLenum, "target")]), GlFunction(Void, "glQueryCounterANGLE", [(GLquery, "id"), (GLenum, "target")]), GlFunction(Void, "glGetQueryivANGLE", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectivANGLE", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectuivANGLE", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjecti64vANGLE", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectui64vANGLE", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint64, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ANGLE_translated_shader_source GlFunction(Void, "glGetTranslatedShaderSourceANGLE", [(GLshader, "shader"), (GLsizei, "bufsize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "source")], sideeffects=False), # GL_APPLE_copy_texture_levels GlFunction(Void, "glCopyTextureLevelsAPPLE", [(GLtexture, "destinationTexture"), (GLtexture, "sourceTexture"), (GLint, "sourceBaseLevel"), (GLsizei, "sourceLevelCount")]), # GL_APPLE_element_array GlFunction(Void, "glElementPointerAPPLE", [(GLenum, "type"), (Blob(Const(GLvoid), "type"), "pointer")]), GlFunction(Void, "glDrawElementArrayAPPLE", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count")]), GlFunction(Void, "glDrawRangeElementArrayAPPLE", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (GLint, "first"), (GLsizei, "count")]), GlFunction(Void, "glMultiDrawElementArrayAPPLE", [(GLenum_mode, "mode"), (Array(Const(GLint), "primcount"), "first"), (Array(Const(GLsizei), "primcount"), "count"), (GLsizei, "primcount")]), GlFunction(Void, "glMultiDrawRangeElementArrayAPPLE", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (Array(Const(GLint), "primcount"), "first"), (Array(Const(GLsizei), "primcount"), "count"), (GLsizei, "primcount")]), # GL_APPLE_fence GlFunction(Void, "glGenFencesAPPLE", [(GLsizei, "n"), Out(Array(GLfence, "n"), "fences")]), GlFunction(Void, "glDeleteFencesAPPLE", [(GLsizei, "n"), (Array(Const(GLfence), "n"), "fences")]), GlFunction(Void, "glSetFenceAPPLE", [(GLfence, "fence")]), GlFunction(GLboolean, "glIsFenceAPPLE", [(GLfence, "fence")], sideeffects=False), GlFunction(GLboolean, "glTestFenceAPPLE", [(GLfence, "fence")]), GlFunction(Void, "glFinishFenceAPPLE", [(GLfence, "fence")]), GlFunction(GLboolean, "glTestObjectAPPLE", [(GLenum, "object"), (GLuint, "name")]), # XXX: name needs swizzling GlFunction(Void, "glFinishObjectAPPLE", [(GLenum, "object"), (GLint, "name")]), # XXX: name needs swizzling # GL_APPLE_flush_buffer_range GlFunction(Void, "glBufferParameteriAPPLE", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glFlushMappedBufferRangeAPPLE", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "size")]), # GL_APPLE_flush_render GlFunction(Void, "glFlushRenderAPPLE", []), GlFunction(Void, "glFinishRenderAPPLE", []), GlFunction(Void, "glSwapAPPLE", []), # GL_APPLE_framebuffer_multisample GlFunction(Void, "glRenderbufferStorageMultisampleAPPLE", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glResolveMultisampleFramebufferAPPLE", []), # GL_APPLE_object_purgeable GlFunction(GLenum, "glObjectPurgeableAPPLE", [(GLenum, "objectType"), (GLuint, "name"), (GLenum, "option")]), GlFunction(GLenum, "glObjectUnpurgeableAPPLE", [(GLenum, "objectType"), (GLuint, "name"), (GLenum, "option")]), GlFunction(Void, "glGetObjectParameterivAPPLE", [(GLenum, "objectType"), (GLuint, "name"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_APPLE_sync GlFunction(GLsync, "glFenceSyncAPPLE", [(GLenum, "condition"), (GLbitfield, "flags")]), GlFunction(GLboolean, "glIsSyncAPPLE", [(GLsync, "sync")], sideeffects=False), GlFunction(Void, "glDeleteSyncAPPLE", [(GLsync, "sync")]), GlFunction(GLenum, "glClientWaitSyncAPPLE", [(GLsync, "sync"), (GLbitfield_sync_flush, "flags"), (GLuint64, "timeout")]), GlFunction(Void, "glWaitSyncAPPLE", [(GLsync, "sync"), (GLbitfield, "flags"), (GLuint64, "timeout")]), GlFunction(Void, "glGetInteger64vAPPLE", [(GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSyncivAPPLE", [(GLsync, "sync"), (GLenum, "pname"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLint, "(length ? *length : bufSize)"), "values")], sideeffects=False), # GL_APPLE_texture_range GlFunction(Void, "glTextureRangeAPPLE", [(GLenum, "target"), (GLsizei, "length"), (Blob(Const(GLvoid), "length"), "pointer")]), GlFunction(Void, "glGetTexParameterPointervAPPLE", [(GLenum, "target"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), # GL_APPLE_vertex_array_object GlFunction(Void, "glBindVertexArrayAPPLE", [(GLarrayAPPLE, "array")]), GlFunction(Void, "glDeleteVertexArraysAPPLE", [(GLsizei, "n"), (Array(Const(GLarrayAPPLE), "n"), "arrays")]), GlFunction(Void, "glGenVertexArraysAPPLE", [(GLsizei, "n"), Out(Array(GLarrayAPPLE, "n"), "arrays")]), GlFunction(GLboolean, "glIsVertexArrayAPPLE", [(GLarrayAPPLE, "array")], sideeffects=False), # GL_APPLE_vertex_array_range GlFunction(Void, "glVertexArrayRangeAPPLE", [(GLsizei, "length"), (GLpointer, "pointer")]), GlFunction(Void, "glFlushVertexArrayRangeAPPLE", [(GLsizei, "length"), (GLpointer, "pointer")]), GlFunction(Void, "glVertexArrayParameteriAPPLE", [(GLenum, "pname"), (GLint, "param")]), # GL_APPLE_vertex_program_evaluators GlFunction(Void, "glEnableVertexAttribAPPLE", [(GLuint, "index"), (GLenum, "pname")]), GlFunction(Void, "glDisableVertexAttribAPPLE", [(GLuint, "index"), (GLenum, "pname")]), GlFunction(GLboolean, "glIsVertexAttribEnabledAPPLE", [(GLuint, "index"), (GLenum, "pname")], sideeffects=False), GlFunction(Void, "glMapVertexAttrib1dAPPLE", [(GLuint, "index"), (GLuint, "size"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "stride"), (GLint, "order"), (OpaqueArray(Const(GLdouble), "_glMapVertexAttrib1dAPPLE_size(size, stride, order)"), "points")]), GlFunction(Void, "glMapVertexAttrib1fAPPLE", [(GLuint, "index"), (GLuint, "size"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "stride"), (GLint, "order"), (OpaqueArray(Const(GLfloat), "_glMapVertexAttrib1fAPPLE_size(size, stride, order)"), "points")]), GlFunction(Void, "glMapVertexAttrib2dAPPLE", [(GLuint, "index"), (GLuint, "size"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLdouble, "v1"), (GLdouble, "v2"), (GLint, "vstride"), (GLint, "vorder"), (OpaqueArray(Const(GLdouble), "_glMapVertexAttrib2dAPPLE_size(size, ustride, uorder, vstride, vorder)"), "points")]), GlFunction(Void, "glMapVertexAttrib2fAPPLE", [(GLuint, "index"), (GLuint, "size"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLfloat, "v1"), (GLfloat, "v2"), (GLint, "vstride"), (GLint, "vorder"), (OpaqueArray(Const(GLfloat), "_glMapVertexAttrib2fAPPLE_size(size, ustride, uorder, vstride, vorder)"), "points")]), # GL_ARB_ES2_compatibility GlFunction(Void, "glReleaseShaderCompiler", []), GlFunction(Void, "glShaderBinary", [(GLsizei, "count"), (Array(Const(GLuint), "count"), "shaders"), (GLenum, "binaryformat"), (Blob(Const(GLvoid), "length"), "binary"), (GLsizei, "length")]), GlFunction(Void, "glGetShaderPrecisionFormat", [(GLenum, "shadertype"), (GLenum, "precisiontype"), Out(Array(GLint, 2), "range"), Out(Array(GLint, 2), "precision")], sideeffects=False), GlFunction(Void, "glDepthRangef", [(GLfloat, "n"), (GLfloat, "f")]), GlFunction(Void, "glClearDepthf", [(GLfloat, "d")]), # GL_ARB_ES3_1_compatibility GlFunction(Void, "glMemoryBarrierByRegion", [(GLbitfield, "barriers")]), # GL_ARB_base_instance GlFunction(Void, "glDrawArraysInstancedBaseInstance", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count"), (GLsizei, "primcount"), (GLuint, "baseinstance")]), GlFunction(Void, "glDrawElementsInstancedBaseInstance", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount"), (GLuint, "baseinstance")]), GlFunction(Void, "glDrawElementsInstancedBaseVertexBaseInstance", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount"), (GLint, "basevertex"), (GLuint, "baseinstance")]), # GL_ARB_bindless_texture GlFunction(GLtextureHandle, "glGetTextureHandleARB", [(GLtexture, "texture")]), GlFunction(GLtextureHandle, "glGetTextureSamplerHandleARB", [(GLtexture, "texture"), (GLsampler, "sampler")]), GlFunction(Void, "glMakeTextureHandleResidentARB", [(GLtextureHandle, "handle")]), GlFunction(Void, "glMakeTextureHandleNonResidentARB", [(GLtextureHandle, "handle")]), GlFunction(GLtextureHandle, "glGetImageHandleARB", [(GLtexture, "texture"), (GLint, "level"), (GLboolean, "layered"), (GLint, "layer"), (GLenum, "format")]), GlFunction(Void, "glMakeImageHandleResidentARB", [(GLtextureHandle, "handle"), (GLenum, "access")]), GlFunction(Void, "glMakeImageHandleNonResidentARB", [(GLtextureHandle, "handle")]), GlFunction(Void, "glUniformHandleui64ARB", [(GLlocation, "location"), (GLtextureHandle, "value")]), GlFunction(Void, "glUniformHandleui64vARB", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLtextureHandle), "count"), "value")]), GlFunction(Void, "glProgramUniformHandleui64ARB", [(GLprogram, "program"), (GLlocation, "location"), (GLtextureHandle, "value")]), GlFunction(Void, "glProgramUniformHandleui64vARB", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLtextureHandle), "count"), "values")]), GlFunction(GLboolean, "glIsTextureHandleResidentARB", [(GLtextureHandle, "handle")], sideeffects=False), GlFunction(GLboolean, "glIsImageHandleResidentARB", [(GLtextureHandle, "handle")], sideeffects=False), GlFunction(Void, "glVertexAttribL1ui64ARB", [(GLuint, "index"), (GLuint64EXT, "x")]), GlFunction(Void, "glVertexAttribL1ui64vARB", [(GLuint, "index"), (Pointer(Const(GLuint64EXT)), "v")]), GlFunction(Void, "glGetVertexAttribLui64vARB", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_blend_func_extended GlFunction(Void, "glBindFragDataLocationIndexed", [(GLprogram, "program"), (GLuint, "colorNumber"), (GLuint, "index"), (GLstringConst, "name")]), GlFunction(GLint, "glGetFragDataIndex", [(GLprogram, "program"), (GLstringConst, "name")], sideeffects=False), # GL_ARB_buffer_storage GlFunction(Void, "glBufferStorage", [ (GLenum, "target"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data"), (GLbitfield_storage, "flags")]), # GL_ARB_cl_event GlFunction(GLsync, "glCreateSyncFromCLeventARB", [(Opaque("struct _cl_context *"), "context"), (Opaque("struct _cl_event *"), "event"), (GLbitfield, "flags")], sideeffects=False), # GL_ARB_clear_buffer_object GlFunction(Void, "glClearBufferData", [(GLenum, "target"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(Void, "glClearBufferSubData", [(GLenum, "target"), (GLenum, "internalformat"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), # GL_ARB_clear_texture GlFunction(Void, "glClearTexImage", [ (GLtexture, "texture"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(Void, "glClearTexSubImage", [ (GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glClearBufferData_size(format, type)"), "data")]), # GL_ARB_clip_control GlFunction(Void, "glClipControl", [(GLenum, "origin"), (GLenum, "depth")]), # GL_ARB_color_buffer_float GlFunction(Void, "glClampColorARB", [(GLenum, "target"), (GLenum, "clamp")]), # GL_ARB_compute_shader GlFunction(Void, "glDispatchCompute", [(GLuint, "num_groups_x"), (GLuint, "num_groups_y"), (GLuint, "num_groups_z")]), GlFunction(Void, "glDispatchComputeIndirect", [(GLintptr, "indirect")]), # GL_ARB_compute_variable_group_size GlFunction(Void, "glDispatchComputeGroupSizeARB", [(GLuint, "num_groups_x"), (GLuint, "num_groups_y"), (GLuint, "num_groups_z"), (GLuint, "group_size_x"), (GLuint, "group_size_y"), (GLuint, "group_size_z")]), # GL_ARB_copy_buffer GlFunction(Void, "glCopyBufferSubData", [(GLenum, "readTarget"), (GLenum, "writeTarget"), (GLintptr, "readOffset"), (GLintptr, "writeOffset"), (GLsizeiptr, "size")]), # GL_ARB_copy_image GlFunction(Void, "glCopyImageSubData", [(GLname("srcTarget"), "srcName"), (GLenum, "srcTarget"), (GLint, "srcLevel"), (GLint, "srcX"), (GLint, "srcY"), (GLint, "srcZ"), (GLname("dstTarget"), "dstName"), (GLenum, "dstTarget"), (GLint, "dstLevel"), (GLint, "dstX"), (GLint, "dstY"), (GLint, "dstZ"), (GLsizei, "srcWidth"), (GLsizei, "srcHeight"), (GLsizei, "srcDepth")]), # GL_ARB_debug_output GlFunction(Void, "glDebugMessageControlARB", [(GLenum, "source"), (GLenum, "type"), (GLenum, "severity"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "ids"), (GLboolean, "enabled")], sideeffects=True), GlFunction(Void, "glDebugMessageInsertARB", [(GLenum, "source"), (GLenum, "type"), (GLuint, "id"), (GLenum, "severity"), (GLsizei, "length"), InGlString(GLchar, "length", "buf")], sideeffects=True), GlFunction(Void, "glDebugMessageCallbackARB", [(GLDEBUGPROCARB, "callback"), (GLpointerConst, "userParam")], sideeffects=False), GlFunction(GLuint, "glGetDebugMessageLogARB", [(GLuint, "count"), (GLsizei, "bufsize"), Out(Array(GLenum, "count"), "sources"), Out(Array(GLenum, "count"), "types"), Out(Array(GLuint, "count"), "ids"), Out(Array(GLenum, "count"), "severities"), Out(Array(GLsizei, "count"), "lengths"), Out(String(GLchar, "_glGetDebugMessageLog_length(messageLog, lengths, _result)"), "messageLog")], sideeffects=False, fail=0), # GL_ARB_direct_state_access GlFunction(Void, "glCreateTransformFeedbacks", [(GLsizei, "n"), Out(Array(GLfeedback, "n"), "ids")]), GlFunction(Void, "glTransformFeedbackBufferBase", [(GLfeedback, "xfb"), (GLuint, "index"), (GLbuffer, "buffer")]), GlFunction(Void, "glTransformFeedbackBufferRange", [(GLfeedback, "xfb"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glGetTransformFeedbackiv", [(GLfeedback, "xfb"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetTransformFeedbacki_v", [(GLfeedback, "xfb"), (GLenum, "pname"), (GLuint, "index"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetTransformFeedbacki64_v", [(GLfeedback, "xfb"), (GLenum, "pname"), (GLuint, "index"), Out(Pointer(GLint64), "param")], sideeffects=False), GlFunction(Void, "glCreateBuffers", [(GLsizei, "n"), Out(Array(GLbuffer, "n"), "buffers")]), GlFunction(Void, "glNamedBufferStorage", [ (GLbuffer, "buffer"), (GLsizeiptr, "size"), (Blob(Const(Void), "size"), "data"), (GLbitfield_storage, "flags")]), GlFunction(Void, "glNamedBufferData", [(GLbuffer, "buffer"), (GLsizeiptr, "size"), (Blob(Const(Void), "size"), "data"), (GLenum, "usage")]), GlFunction(Void, "glNamedBufferSubData", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), (Blob(Const(Void), "size"), "data")]), GlFunction(Void, "glCopyNamedBufferSubData", [(GLbuffer, "readBuffer"), (GLbuffer, "writeBuffer"), (GLintptr, "readOffset"), (GLintptr, "writeOffset"), (GLsizeiptr, "size")]), GlFunction(Void, "glClearNamedBufferData", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(Void, "glClearNamedBufferSubData", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(GLmap, "glMapNamedBuffer", [(GLbuffer, "buffer"), (GLenum, "access")]), GlFunction(GLmap, "glMapNamedBufferRange", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "length"), (GLbitfield_access, "access")]), GlFunction(GLboolean, "glUnmapNamedBuffer", [(GLbuffer, "buffer")]), GlFunction(Void, "glFlushMappedNamedBufferRange", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "length")]), GlFunction(Void, "glGetNamedBufferParameteriv", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferParameteri64v", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferPointerv", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferSubData", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), Out(OpaqueBlob(Void, "size"), "data")], sideeffects=False), GlFunction(Void, "glCreateFramebuffers", [(GLsizei, "n"), Out(Array(GLframebuffer, "n"), "framebuffers")]), GlFunction(Void, "glNamedFramebufferRenderbuffer", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glNamedFramebufferParameteri", [(GLframebuffer, "framebuffer"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glNamedFramebufferTexture", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glNamedFramebufferTextureLayer", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLint, "layer")]), GlFunction(Void, "glNamedFramebufferDrawBuffer", [(GLframebuffer, "framebuffer"), (GLenum, "buf")]), GlFunction(Void, "glNamedFramebufferDrawBuffers", [(GLframebuffer, "framebuffer"), (GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), GlFunction(Void, "glNamedFramebufferReadBuffer", [(GLframebuffer, "framebuffer"), (GLenum, "src")]), GlFunction(Void, "glInvalidateNamedFramebufferData", [(GLframebuffer, "framebuffer"), (GLsizei, "numAttachments"), (Array(Const(GLenum), "numAttachments"), "attachments")]), GlFunction(Void, "glInvalidateNamedFramebufferSubData", [(GLframebuffer, "framebuffer"), (GLsizei, "numAttachments"), (Array(Const(GLenum), "numAttachments"), "attachments"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glClearNamedFramebufferiv", [(GLframebuffer, "framebuffer"), (GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLint), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearNamedFramebufferuiv", [(GLframebuffer, "framebuffer"), (GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLuint), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearNamedFramebufferfv", [(GLframebuffer, "framebuffer"), (GLenum, "buffer"), (GLint, "drawbuffer"), (Array(Const(GLfloat), "_glClearBuffer_size(buffer)"), "value")]), GlFunction(Void, "glClearNamedFramebufferfi", [(GLframebuffer, "framebuffer"), (GLenum, "buffer"), (Const(GLfloat), "depth"), (GLint, "stencil")]), GlFunction(Void, "glBlitNamedFramebuffer", [(GLframebuffer, "readFramebuffer"), (GLframebuffer, "drawFramebuffer"), (GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield, "mask"), (GLenum, "filter")]), GlFunction(GLenum, "glCheckNamedFramebufferStatus", [(GLframebuffer, "framebuffer"), (GLenum, "target")]), GlFunction(Void, "glGetNamedFramebufferParameteriv", [(GLframebuffer, "framebuffer"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetNamedFramebufferAttachmentParameteriv", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glCreateRenderbuffers", [(GLsizei, "n"), Out(Array(GLrenderbuffer, "n"), "renderbuffers")]), GlFunction(Void, "glNamedRenderbufferStorage", [(GLrenderbuffer, "renderbuffer"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glNamedRenderbufferStorageMultisample", [(GLrenderbuffer, "renderbuffer"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetNamedRenderbufferParameteriv", [(GLrenderbuffer, "renderbuffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glCreateTextures", [(GLenum, "target"), (GLsizei, "n"), Out(Array(GLtexture, "n"), "textures")]), GlFunction(Void, "glTextureBuffer", [(GLtexture, "texture"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), GlFunction(Void, "glTextureBufferRange", [(GLtexture, "texture"), (GLenum, "internalformat"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glTextureStorage1D", [(GLtexture, "texture"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width")]), GlFunction(Void, "glTextureStorage2D", [(GLtexture, "texture"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTextureStorage3D", [(GLtexture, "texture"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), GlFunction(Void, "glTextureStorage2DMultisample", [(GLtexture, "texture"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTextureStorage3DMultisample", [(GLtexture, "texture"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTextureSubImage1D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTextureSubImage2D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glTextureSubImage3D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glCompressedTextureSubImage1D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(Void), "imageSize"), "data")]), GlFunction(Void, "glCompressedTextureSubImage2D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(Void), "imageSize"), "data")]), GlFunction(Void, "glCompressedTextureSubImage3D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(Void), "imageSize"), "data")]), GlFunction(Void, "glCopyTextureSubImage1D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyTextureSubImage2D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCopyTextureSubImage3D", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTextureParameterf", [(GLtexture, "texture"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTextureParameterfv", [(GLtexture, "texture"), (GLenum, "pname"), (Pointer(Const(GLfloat)), "param")]), GlFunction(Void, "glTextureParameteri", [(GLtexture, "texture"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTextureParameterIiv", [(GLtexture, "texture"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureParameterIuiv", [(GLtexture, "texture"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureParameteriv", [(GLtexture, "texture"), (GLenum, "pname"), (Pointer(Const(GLint)), "param")]), GlFunction(Void, "glGenerateTextureMipmap", [(GLtexture, "texture")]), GlFunction(Void, "glBindTextureUnit", [(GLuint, "unit"), (GLtexture, "texture")]), GlFunction(Void, "glGetTextureImage", [(GLtexture, "texture"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetCompressedTextureImage", [(GLtexture, "texture"), (GLint, "level"), (GLsizei, "bufSize"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetTextureLevelParameterfv", [(GLtexture, "texture"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureLevelParameteriv", [(GLtexture, "texture"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterfv", [(GLtexture, "texture"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterIiv", [(GLtexture, "texture"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterIuiv", [(GLtexture, "texture"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameteriv", [(GLtexture, "texture"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glCreateVertexArrays", [(GLsizei, "n"), Out(Array(GLarray, "n"), "arrays")]), GlFunction(Void, "glDisableVertexArrayAttrib", [(GLarray, "vaobj"), (GLuint, "index")]), GlFunction(Void, "glEnableVertexArrayAttrib", [(GLarray, "vaobj"), (GLuint, "index")]), GlFunction(Void, "glVertexArrayElementBuffer", [(GLarray, "vaobj"), (GLbuffer, "buffer")]), GlFunction(Void, "glVertexArrayVertexBuffer", [(GLarray, "vaobj"), (GLuint, "bindingindex"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizei, "stride")]), GlFunction(Void, "glVertexArrayVertexBuffers", [(GLarray, "vaobj"), (GLuint, "first"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "buffers"), (Array(Const(GLintptr), "count"), "offsets"), (Array(Const(GLsizei), "count"), "strides")]), GlFunction(Void, "glVertexArrayAttribBinding", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLuint, "bindingindex")]), GlFunction(Void, "glVertexArrayAttribFormat", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayAttribIFormat", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayAttribLFormat", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayBindingDivisor", [(GLarray, "vaobj"), (GLuint, "bindingindex"), (GLuint, "divisor")]), GlFunction(Void, "glGetVertexArrayiv", [(GLarray, "vaobj"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetVertexArrayIndexediv", [(GLarray, "vaobj"), (GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetVertexArrayIndexed64iv", [(GLarray, "vaobj"), (GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLint64), "param")], sideeffects=False), GlFunction(Void, "glCreateSamplers", [(GLsizei, "n"), Out(Array(GLsampler, "n"), "samplers")]), GlFunction(Void, "glCreateProgramPipelines", [(GLsizei, "n"), Out(Array(GLpipeline, "n"), "pipelines")]), GlFunction(Void, "glCreateQueries", [(GLenum, "target"), (GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glGetQueryBufferObjecti64v", [(GLquery, "id"), (GLbuffer, "buffer"), (GLenum, "pname"), (GLintptr, "offset")]), GlFunction(Void, "glGetQueryBufferObjectiv", [(GLquery, "id"), (GLbuffer, "buffer"), (GLenum, "pname"), (GLintptr, "offset")]), GlFunction(Void, "glGetQueryBufferObjectui64v", [(GLquery, "id"), (GLbuffer, "buffer"), (GLenum, "pname"), (GLintptr, "offset")]), GlFunction(Void, "glGetQueryBufferObjectuiv", [(GLquery, "id"), (GLbuffer, "buffer"), (GLenum, "pname"), (GLintptr, "offset")]), # GL_ARB_draw_buffers GlFunction(Void, "glDrawBuffersARB", [(GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), # GL_ARB_draw_buffers_blend GlFunction(Void, "glBlendEquationiARB", [(GLuint, "buf"), (GLenum, "mode")]), GlFunction(Void, "glBlendEquationSeparateiARB", [(GLuint, "buf"), (GLenum, "modeRGB"), (GLenum, "modeAlpha")]), GlFunction(Void, "glBlendFunciARB", [(GLuint, "buf"), (GLenum, "src"), (GLenum, "dst")]), GlFunction(Void, "glBlendFuncSeparateiARB", [(GLuint, "buf"), (GLenum, "srcRGB"), (GLenum, "dstRGB"), (GLenum, "srcAlpha"), (GLenum, "dstAlpha")]), # GL_ARB_draw_elements_base_vertex GlFunction(Void, "glDrawElementsBaseVertex", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLint, "basevertex")]), GlFunction(Void, "glDrawRangeElementsBaseVertex", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLint, "basevertex")]), GlFunction(Void, "glDrawElementsInstancedBaseVertex", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount"), (GLint, "basevertex")]), GlFunction(Void, "glMultiDrawElementsBaseVertex", [(GLenum_mode, "mode"), (Array(Const(GLsizei), "drawcount"), "count"), (GLenum, "type"), (Array(Const(GLindexBuffer("count[{i}]", "type")), "drawcount"), "indices"), (GLsizei, "drawcount"), (Array(Const(GLint), "drawcount"), "basevertex")]), # GL_ARB_draw_indirect GlFunction(Void, "glDrawArraysIndirect", [(GLenum_mode, "mode"), (GLpointerConst, "indirect")]), GlFunction(Void, "glDrawElementsIndirect", [(GLenum_mode, "mode"), (GLenum, "type"), (GLpointerConst, "indirect")]), # GL_ARB_draw_instanced GlFunction(Void, "glDrawArraysInstancedARB", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count"), (GLsizei, "primcount")]), GlFunction(Void, "glDrawElementsInstancedARB", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount")]), # GL_ARB_framebuffer_no_attachments GlFunction(Void, "glFramebufferParameteri", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glGetFramebufferParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_framebuffer_object GlFunction(GLboolean, "glIsRenderbuffer", [(GLrenderbuffer, "renderbuffer")], sideeffects=False), GlFunction(Void, "glBindRenderbuffer", [(GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glDeleteRenderbuffers", [(GLsizei, "n"), (Array(Const(GLrenderbuffer), "n"), "renderbuffers")]), GlFunction(Void, "glGenRenderbuffers", [(GLsizei, "n"), Out(Array(GLrenderbuffer, "n"), "renderbuffers")]), GlFunction(Void, "glRenderbufferStorage", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetRenderbufferParameteriv", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsFramebuffer", [(GLframebuffer, "framebuffer")], sideeffects=False), GlFunction(Void, "glBindFramebuffer", [(GLenum, "target"), (GLframebuffer, "framebuffer")]), GlFunction(Void, "glDeleteFramebuffers", [(GLsizei, "n"), (Array(Const(GLframebuffer), "n"), "framebuffers")]), GlFunction(Void, "glGenFramebuffers", [(GLsizei, "n"), Out(Array(GLframebuffer, "n"), "framebuffers")]), GlFunction(GLenum, "glCheckFramebufferStatus", [(GLenum, "target")]), GlFunction(Void, "glFramebufferTexture1D", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferTexture2D", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferTexture3D", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLint, "zoffset")]), GlFunction(Void, "glFramebufferRenderbuffer", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glGetFramebufferAttachmentParameteriv", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGenerateMipmap", [(GLenum, "target")]), GlFunction(Void, "glBlitFramebuffer", [(GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield_attrib, "mask"), (GLenum, "filter")]), GlFunction(Void, "glRenderbufferStorageMultisample", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glFramebufferTextureLayer", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLint, "layer")]), # GL_ARB_geometry_shader4 GlFunction(Void, "glProgramParameteriARB", [(GLprogram, "program"), (GLenum, "pname"), (GLint, "value")]), GlFunction(Void, "glFramebufferTextureARB", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferTextureLayerARB", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLint, "layer")]), GlFunction(Void, "glFramebufferTextureFaceARB", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLenum, "face")]), # GL_ARB_get_program_binary GlFunction(Void, "glGetProgramBinary", [(GLprogram, "program"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLenum), "binaryFormat"), Out(OpaqueBlob(GLvoid, "length ? *length : bufSize"), "binary")], sideeffects=False), GlFunction(Void, "glProgramBinary", [(GLprogram, "program"), (GLenum, "binaryFormat"), (Blob(Const(GLvoid), "length"), "binary"), (GLsizei, "length")]), GlFunction(Void, "glProgramParameteri", [(GLprogram, "program"), (GLenum, "pname"), (GLint, "value")]), # GL_ARB_get_texture_sub_image GlFunction(Void, "glGetTextureSubImage", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetCompressedTextureSubImage", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLsizei, "bufSize"), Out(GLpointer, "pixels")]), # GL_ARB_gpu_shader_fp64 GlFunction(Void, "glUniform1d", [(GLlocation, "location"), (GLdouble, "x")]), GlFunction(Void, "glUniform2d", [(GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glUniform3d", [(GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glUniform4d", [(GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glUniform1dv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count"), "value")]), GlFunction(Void, "glUniform2dv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*2"), "value")]), GlFunction(Void, "glUniform3dv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*3"), "value")]), GlFunction(Void, "glUniform4dv", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*4"), "value")]), GlFunction(Void, "glUniformMatrix2dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*2"), "value")]), GlFunction(Void, "glUniformMatrix3dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*3"), "value")]), GlFunction(Void, "glUniformMatrix4dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*4"), "value")]), GlFunction(Void, "glUniformMatrix2x3dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*3"), "value")]), GlFunction(Void, "glUniformMatrix2x4dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*4"), "value")]), GlFunction(Void, "glUniformMatrix3x2dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*2"), "value")]), GlFunction(Void, "glUniformMatrix3x4dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*4"), "value")]), GlFunction(Void, "glUniformMatrix4x2dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*2"), "value")]), GlFunction(Void, "glUniformMatrix4x3dv", [(GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*3"), "value")]), GlFunction(Void, "glGetUniformdv", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaqueArray(GLdouble, "_glGetUniformdv_size(location)"), "params")], sideeffects=False), # GL_ARB_indirect_parameters GlFunction(Void, "glMultiDrawArraysIndirectCountARB", [(GLenum_mode, "mode"), (GLintptr, "indirect"), (GLintptr, "drawcount"), (GLsizei, "maxdrawcount"), (GLsizei, "stride")]), GlFunction(Void, "glMultiDrawElementsIndirectCountARB", [(GLenum_mode, "mode"), (GLenum, "type"), (GLintptr, "indirect"), (GLintptr, "drawcount"), (GLsizei, "maxdrawcount"), (GLsizei, "stride")]), # GL_ARB_instanced_arrays GlFunction(Void, "glVertexAttribDivisorARB", [(GLuint, "index"), (GLuint, "divisor")]), # GL_ARB_internalformat_query GlFunction(Void, "glGetInternalformativ", [(GLenum, "target"), (GLenum, "internalformat"), (GLenum, "pname"), (GLsizei, "bufSize"), Out(Array(GLint, "bufSize"), "params")], sideeffects=False), # GL_ARB_internalformat_query2 GlFunction(Void, "glGetInternalformati64v", [(GLenum, "target"), (GLenum, "internalformat"), (GLenum, "pname"), (GLsizei, "bufSize"), Out(Array(GLint64, "bufSize"), "params")], sideeffects=False), # GL_ARB_invalidate_subdata GlFunction(Void, "glInvalidateTexSubImage", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), GlFunction(Void, "glInvalidateTexImage", [(GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glInvalidateBufferSubData", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "length")]), GlFunction(Void, "glInvalidateBufferData", [(GLbuffer, "buffer")]), GlFunction(Void, "glInvalidateFramebuffer", [(GLenum, "target"), (GLsizei, "numAttachments"), (Array(Const(GLenum), "numAttachments"), "attachments")]), GlFunction(Void, "glInvalidateSubFramebuffer", [(GLenum, "target"), (GLsizei, "numAttachments"), (Array(Const(GLenum), "numAttachments"), "attachments"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), # GL_ARB_map_buffer_range GlFunction(GLmap, "glMapBufferRange", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "length"), (GLbitfield_access, "access")]), GlFunction(Void, "glFlushMappedBufferRange", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "length")]), # GL_ARB_matrix_palette GlFunction(Void, "glCurrentPaletteMatrixARB", [(GLint, "index")]), GlFunction(Void, "glMatrixIndexubvARB", [(GLint, "size"), (Array(Const(GLubyte), "size"), "indices")]), GlFunction(Void, "glMatrixIndexusvARB", [(GLint, "size"), (Array(Const(GLushort), "size"), "indices")]), GlFunction(Void, "glMatrixIndexuivARB", [(GLint, "size"), (Array(Const(GLuint), "size"), "indices")]), GlFunction(Void, "glMatrixIndexPointerARB", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_ARB_multi_bind GlFunction(Void, "glBindBuffersBase", [(GLenum, "target"), (GLuint, "first"), (GLsizei, "count"), (Array(Const(GLbuffer), "count"), "buffers")]), GlFunction(Void, "glBindBuffersRange", [(GLenum, "target"), (GLuint, "first"), (GLsizei, "count"), (Array(Const(GLbuffer), "count"), "buffers"), (Array(Const(GLintptr), "count"), "offsets"), (Array(Const(GLsizeiptr), "count"), "sizes")]), GlFunction(Void, "glBindTextures", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLtexture), "count"), "textures")]), GlFunction(Void, "glBindSamplers", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLsampler), "count"), "samplers")]), GlFunction(Void, "glBindImageTextures", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLtexture), "count"), "textures")]), GlFunction(Void, "glBindVertexBuffers", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLbuffer), "count"), "buffers"), (Array(Const(GLintptr), "count"), "offsets"), (Array(Const(GLsizei), "count"), "strides")]), # GL_ARB_multi_draw_indirect GlFunction(Void, "glMultiDrawArraysIndirect", [(GLenum_mode, "mode"), (OpaqueArray(Const(Void), "_glMultiDrawArraysIndirect_size(drawcount, stride)"), "indirect"), (GLsizei, "drawcount"), (GLsizei, "stride")]), GlFunction(Void, "glMultiDrawElementsIndirect", [(GLenum_mode, "mode"), (GLenum, "type"), (OpaqueArray(Const(Void), "_glMultiDrawElementsIndirect_size(drawcount, stride)"), "indirect"), (GLsizei, "drawcount"), (GLsizei, "stride")]), # GL_ARB_multisample GlFunction(Void, "glSampleCoverageARB", [(GLfloat, "value"), (GLboolean, "invert")]), # GL_ARB_multitexture GlFunction(Void, "glActiveTextureARB", [(GLenum, "texture")]), GlFunction(Void, "glClientActiveTextureARB", [(GLenum, "texture")]), GlFunction(Void, "glMultiTexCoord1dARB", [(GLenum, "target"), (GLdouble, "s")]), GlFunction(Void, "glMultiTexCoord1dvARB", [(GLenum, "target"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glMultiTexCoord1fARB", [(GLenum, "target"), (GLfloat, "s")]), GlFunction(Void, "glMultiTexCoord1fvARB", [(GLenum, "target"), (Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glMultiTexCoord1iARB", [(GLenum, "target"), (GLint, "s")]), GlFunction(Void, "glMultiTexCoord1ivARB", [(GLenum, "target"), (Pointer(Const(GLint)), "v")]), GlFunction(Void, "glMultiTexCoord1sARB", [(GLenum, "target"), (GLshort, "s")]), GlFunction(Void, "glMultiTexCoord1svARB", [(GLenum, "target"), (Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glMultiTexCoord2dARB", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t")]), GlFunction(Void, "glMultiTexCoord2dvARB", [(GLenum, "target"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glMultiTexCoord2fARB", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t")]), GlFunction(Void, "glMultiTexCoord2fvARB", [(GLenum, "target"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glMultiTexCoord2iARB", [(GLenum, "target"), (GLint, "s"), (GLint, "t")]), GlFunction(Void, "glMultiTexCoord2ivARB", [(GLenum, "target"), (Array(Const(GLint), 2), "v")]), GlFunction(Void, "glMultiTexCoord2sARB", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t")]), GlFunction(Void, "glMultiTexCoord2svARB", [(GLenum, "target"), (Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glMultiTexCoord3dARB", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r")]), GlFunction(Void, "glMultiTexCoord3dvARB", [(GLenum, "target"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glMultiTexCoord3fARB", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r")]), GlFunction(Void, "glMultiTexCoord3fvARB", [(GLenum, "target"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glMultiTexCoord3iARB", [(GLenum, "target"), (GLint, "s"), (GLint, "t"), (GLint, "r")]), GlFunction(Void, "glMultiTexCoord3ivARB", [(GLenum, "target"), (Array(Const(GLint), 3), "v")]), GlFunction(Void, "glMultiTexCoord3sARB", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t"), (GLshort, "r")]), GlFunction(Void, "glMultiTexCoord3svARB", [(GLenum, "target"), (Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glMultiTexCoord4dARB", [(GLenum, "target"), (GLdouble, "s"), (GLdouble, "t"), (GLdouble, "r"), (GLdouble, "q")]), GlFunction(Void, "glMultiTexCoord4dvARB", [(GLenum, "target"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glMultiTexCoord4fARB", [(GLenum, "target"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "q")]), GlFunction(Void, "glMultiTexCoord4fvARB", [(GLenum, "target"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glMultiTexCoord4iARB", [(GLenum, "target"), (GLint, "s"), (GLint, "t"), (GLint, "r"), (GLint, "q")]), GlFunction(Void, "glMultiTexCoord4ivARB", [(GLenum, "target"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glMultiTexCoord4sARB", [(GLenum, "target"), (GLshort, "s"), (GLshort, "t"), (GLshort, "r"), (GLshort, "q")]), GlFunction(Void, "glMultiTexCoord4svARB", [(GLenum, "target"), (Array(Const(GLshort), 4), "v")]), # GL_ARB_occlusion_query GlFunction(Void, "glGenQueriesARB", [(GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glDeleteQueriesARB", [(GLsizei, "n"), (Array(Const(GLquery), "n"), "ids")]), GlFunction(GLboolean, "glIsQueryARB", [(GLquery, "id")], sideeffects=False), GlFunction(Void, "glBeginQueryARB", [(GLenum, "target"), (GLquery, "id")]), GlFunction(Void, "glEndQueryARB", [(GLenum, "target")]), GlFunction(Void, "glGetQueryivARB", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectivARB", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectuivARB", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_point_parameters GlFunction(Void, "glPointParameterfARB", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPointParameterfvARB", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), # GL_ARB_program_interface_query GlFunction(Void, "glGetProgramInterfaceiv", [(GLprogram, "program"), (GLenum, "programInterface"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLuint, "glGetProgramResourceIndex", [(GLprogram, "program"), (GLenum, "programInterface"), (GLstringConst, "name")], sideeffects=False), GlFunction(Void, "glGetProgramResourceName", [(GLprogram, "program"), (GLenum, "programInterface"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glGetProgramResourceiv", [(GLprogram, "program"), (GLenum, "programInterface"), (GLuint, "index"), (GLsizei, "propCount"), (Array(Const(GLenum), "propCount"), "props"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLint, "bufSize"), "params")], sideeffects=False), GlFunction(GLlocation, "glGetProgramResourceLocation", [(GLprogram, "program"), (GLenum, "programInterface"), (GLstringConst, "name")]), GlFunction(GLint, "glGetProgramResourceLocationIndex", [(GLprogram, "program"), (GLenum, "programInterface"), (GLstringConst, "name")], sideeffects=False), # GL_ARB_provoking_vertex GlFunction(Void, "glProvokingVertex", [(GLenum, "mode")]), # GL_ARB_robustness GlFunction(GLenum, "glGetGraphicsResetStatusARB", [], sideeffects=False), GlFunction(Void, "glGetnMapdvARB", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLdouble, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnMapfvARB", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnMapivARB", [(GLenum, "target"), (GLenum, "query"), (GLsizei, "bufSize"), Out(Array(GLint, "bufSize"), "v")], sideeffects=False), GlFunction(Void, "glGetnPixelMapfvARB", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "values")]), GlFunction(Void, "glGetnPixelMapuivARB", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLuint, "bufSize"), "values")]), GlFunction(Void, "glGetnPixelMapusvARB", [(GLenum, "map"), (GLsizei, "bufSize"), Out(Array(GLushort, "bufSize"), "values")]), GlFunction(Void, "glGetnPolygonStippleARB", [(GLsizei, "bufSize"), Out(OpaqueBlob(GLubyte, "bufSize"), "pattern")]), GlFunction(Void, "glGetnColorTableARB", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "table")], sideeffects=False), GlFunction(Void, "glGetnConvolutionFilterARB", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "image")]), GlFunction(Void, "glGetnSeparableFilterARB", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "rowBufSize"), Out(OpaqueBlob(GLvoid, "rowBufSize"), "row"), (GLsizei, "columnBufSize"), Out(OpaqueBlob(GLvoid, "columnBufSize"), "column"), Out(GLpointer, "span")]), GlFunction(Void, "glGetnHistogramARB", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "values")]), GlFunction(Void, "glGetnMinmaxARB", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "values")]), GlFunction(Void, "glGetnTexImageARB", [(GLenum, "target"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "img")]), GlFunction(Void, "glReadnPixelsARB", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "data")]), GlFunction(Void, "glGetnCompressedTexImageARB", [(GLenum, "target"), (GLint, "lod"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "img")]), GlFunction(Void, "glGetnUniformfvARB", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnUniformivARB", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLint, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnUniformuivARB", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLuint, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnUniformdvARB", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLdouble, "bufSize"), "params")], sideeffects=False), # GL_ARB_sample_shading GlFunction(Void, "glMinSampleShadingARB", [(GLfloat, "value")]), # GL_ARB_sampler_objects GlFunction(Void, "glGenSamplers", [(GLsizei, "count"), Out(Array(GLsampler, "count"), "samplers")]), GlFunction(Void, "glDeleteSamplers", [(GLsizei, "count"), (Array(Const(GLsampler), "count"), "samplers")]), GlFunction(GLboolean, "glIsSampler", [(GLsampler, "sampler")], sideeffects=False), GlFunction(Void, "glBindSampler", [(GLuint, "unit"), (GLsampler, "sampler")]), GlFunction(Void, "glSamplerParameteri", [(GLsampler, "sampler"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glSamplerParameteriv", [(GLsampler, "sampler"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glSamplerParameterf", [(GLsampler, "sampler"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glSamplerParameterfv", [(GLsampler, "sampler"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glSamplerParameterIiv", [(GLsampler, "sampler"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glSamplerParameterIuiv", [(GLsampler, "sampler"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glGetSamplerParameteriv", [(GLsampler, "sampler"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSamplerParameterIiv", [(GLsampler, "sampler"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSamplerParameterfv", [(GLsampler, "sampler"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSamplerParameterIuiv", [(GLsampler, "sampler"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_separate_shader_objects GlFunction(Void, "glUseProgramStages", [(GLpipeline, "pipeline"), (GLbitfield_shader, "stages"), (GLprogram, "program")]), GlFunction(Void, "glActiveShaderProgram", [(GLpipeline, "pipeline"), (GLprogram, "program")]), GlFunction(GLprogram, "glCreateShaderProgramv", [(GLenum, "type"), (GLsizei, "count"), (Array(Const(GLstringConst), "count"), "strings")]), GlFunction(Void, "glBindProgramPipeline", [(GLpipeline, "pipeline")]), GlFunction(Void, "glDeleteProgramPipelines", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "pipelines")]), GlFunction(Void, "glGenProgramPipelines", [(GLsizei, "n"), Out(Array(GLpipeline, "n"), "pipelines")]), GlFunction(GLboolean, "glIsProgramPipeline", [(GLpipeline, "pipeline")], sideeffects=False), GlFunction(Void, "glGetProgramPipelineiv", [(GLpipeline, "pipeline"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glProgramUniform1i", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0")]), GlFunction(Void, "glProgramUniform1iv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count"), "value")]), GlFunction(Void, "glProgramUniform1f", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0")]), GlFunction(Void, "glProgramUniform1fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "value")]), GlFunction(Void, "glProgramUniform1d", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "v0")]), GlFunction(Void, "glProgramUniform1dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count"), "value")]), GlFunction(Void, "glProgramUniform1ui", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0")]), GlFunction(Void, "glProgramUniform1uiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "value")]), GlFunction(Void, "glProgramUniform2i", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1")]), GlFunction(Void, "glProgramUniform2iv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2f", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1")]), GlFunction(Void, "glProgramUniform2fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2d", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "v0"), (GLdouble, "v1")]), GlFunction(Void, "glProgramUniform2dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2ui", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1")]), GlFunction(Void, "glProgramUniform2uiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*2"), "value")]), GlFunction(Void, "glProgramUniform3i", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2")]), GlFunction(Void, "glProgramUniform3iv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3f", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2")]), GlFunction(Void, "glProgramUniform3fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3d", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "v0"), (GLdouble, "v1"), (GLdouble, "v2")]), GlFunction(Void, "glProgramUniform3dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3ui", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2")]), GlFunction(Void, "glProgramUniform3uiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*3"), "value")]), GlFunction(Void, "glProgramUniform4i", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2"), (GLint, "v3")]), GlFunction(Void, "glProgramUniform4iv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4f", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2"), (GLfloat, "v3")]), GlFunction(Void, "glProgramUniform4fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4d", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "v0"), (GLdouble, "v1"), (GLdouble, "v2"), (GLdouble, "v3")]), GlFunction(Void, "glProgramUniform4dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4ui", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2"), (GLuint, "v3")]), GlFunction(Void, "glProgramUniform4uiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix2fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix4fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix2dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix4dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x3fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x2fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x4fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x2fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x4fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x3fv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x3dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x2dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x4dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x2dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x4dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x3dv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*3"), "value")]), GlFunction(Void, "glValidateProgramPipeline", [(GLpipeline, "pipeline")]), GlFunction(Void, "glGetProgramPipelineInfoLog", [(GLpipeline, "pipeline"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "infoLog")], sideeffects=False), # GL_ARB_shader_atomic_counters GlFunction(Void, "glGetActiveAtomicCounterBufferiv", [(GLprogram, "program"), (GLuint, "bufferIndex"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_shader_image_load_store GlFunction(Void, "glBindImageTexture", [(GLuint, "unit"), (GLtexture, "texture"), (GLint, "level"), (GLboolean, "layered"), (GLint, "layer"), (GLenum, "access"), (GLenum, "format")]), GlFunction(Void, "glMemoryBarrier", [(GLbitfield_barrier, "barriers")]), # GL_ARB_shader_objects GlFunction(Void, "glDeleteObjectARB", [(GLhandleARB, "obj")]), GlFunction(GLhandleARB, "glGetHandleARB", [(GLenum, "pname")], sideeffects=False), GlFunction(Void, "glDetachObjectARB", [(GLhandleARB, "containerObj"), (GLhandleARB, "attachedObj")]), GlFunction(GLhandleARB, "glCreateShaderObjectARB", [(GLenum, "shaderType")]), GlFunction(Void, "glShaderSourceARB", [(GLhandleARB, "shaderObj"), (GLsizei, "count"), (Const(Array(String(Const(GLcharARB), "_glShaderSource_length(string, length, {i})"), "count")), "string"), (Array(Const(GLint), "count"), "length")]), GlFunction(Void, "glCompileShaderARB", [(GLhandleARB, "shaderObj")]), GlFunction(GLhandleARB, "glCreateProgramObjectARB", []), GlFunction(Void, "glAttachObjectARB", [(GLhandleARB, "containerObj"), (GLhandleARB, "obj")]), GlFunction(Void, "glLinkProgramARB", [(GLhandleARB, "programObj")]), GlFunction(Void, "glUseProgramObjectARB", [(GLhandleARB, "programObj")]), GlFunction(Void, "glValidateProgramARB", [(GLhandleARB, "programObj")]), GlFunction(Void, "glUniform1fARB", [(GLlocationARB, "location"), (GLfloat, "v0")]), GlFunction(Void, "glUniform2fARB", [(GLlocationARB, "location"), (GLfloat, "v0"), (GLfloat, "v1")]), GlFunction(Void, "glUniform3fARB", [(GLlocationARB, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2")]), GlFunction(Void, "glUniform4fARB", [(GLlocationARB, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2"), (GLfloat, "v3")]), GlFunction(Void, "glUniform1iARB", [(GLlocationARB, "location"), (GLint, "v0")]), GlFunction(Void, "glUniform2iARB", [(GLlocationARB, "location"), (GLint, "v0"), (GLint, "v1")]), GlFunction(Void, "glUniform3iARB", [(GLlocationARB, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2")]), GlFunction(Void, "glUniform4iARB", [(GLlocationARB, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2"), (GLint, "v3")]), GlFunction(Void, "glUniform1fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "value")]), GlFunction(Void, "glUniform2fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*2"), "value")]), GlFunction(Void, "glUniform3fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*3"), "value")]), GlFunction(Void, "glUniform4fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "value")]), GlFunction(Void, "glUniform1ivARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLint), "count"), "value")]), GlFunction(Void, "glUniform2ivARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*2"), "value")]), GlFunction(Void, "glUniform3ivARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*3"), "value")]), GlFunction(Void, "glUniform4ivARB", [(GLlocationARB, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "value")]), GlFunction(Void, "glUniformMatrix2fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*2"), "value")]), GlFunction(Void, "glUniformMatrix3fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*3"), "value")]), GlFunction(Void, "glUniformMatrix4fvARB", [(GLlocationARB, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*4"), "value")]), GlFunction(Void, "glGetObjectParameterfvARB", [(GLhandleARB, "obj"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetObjectParameterivARB", [(GLhandleARB, "obj"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetInfoLogARB", [(GLhandleARB, "obj"), (GLsizei, "maxLength"), Out(Pointer(GLsizei), "length"), OutGlString(GLcharARB, "length", "infoLog")], sideeffects=False), GlFunction(Void, "glGetAttachedObjectsARB", [(GLhandleARB, "containerObj"), (GLsizei, "maxCount"), Out(Pointer(GLsizei), "count"), Out(Array(GLhandleARB, "(count ? *count : maxCount)"), "obj")], sideeffects=False), GlFunction(GLlocationARB, "glGetUniformLocationARB", [(GLhandleARB, "programObj"), (GLstringConstARB, "name")]), GlFunction(Void, "glGetActiveUniformARB", [(GLhandleARB, "programObj"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLint), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLcharARB, "length", "name")], sideeffects=False), GlFunction(Void, "glGetUniformfvARB", [(GLhandleARB, "programObj"), (GLlocationARB, "location"), Out(OpaquePointer(GLfloat), "params")], sideeffects=False), GlFunction(Void, "glGetUniformivARB", [(GLhandleARB, "programObj"), (GLlocationARB, "location"), Out(OpaquePointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glGetShaderSourceARB", [(GLhandleARB, "obj"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLcharARB, "length", "source")], sideeffects=False), # GL_ARB_shader_storage_buffer_object GlFunction(Void, "glShaderStorageBlockBinding", [(GLprogram, "program"), (GLuint, "storageBlockIndex"), (GLuint, "storageBlockBinding")]), # GL_ARB_shader_subroutine GlFunction(GLlocation, "glGetSubroutineUniformLocation", [(GLprogram, "program"), (GLenum, "shadertype"), (GLstringConst, "name")]), GlFunction(GLsubroutine, "glGetSubroutineIndex", [(GLprogram, "program"), (GLenum, "shadertype"), (GLstringConst, "name")]), GlFunction(Void, "glGetActiveSubroutineUniformiv", [(GLprogram, "program"), (GLenum, "shadertype"), (GLsubroutine, "index"), (GLenum, "pname"), Out(OpaqueArray(GLint, "_glGetActiveSubroutineUniformiv_size(pname)"), "values")], sideeffects=False), GlFunction(Void, "glGetActiveSubroutineUniformName", [(GLprogram, "program"), (GLenum, "shadertype"), (GLsubroutine, "index"), (GLsizei, "bufsize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glGetActiveSubroutineName", [(GLprogram, "program"), (GLenum, "shadertype"), (GLsubroutine, "index"), (GLsizei, "bufsize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glUniformSubroutinesuiv", [(GLenum, "shadertype"), (GLsizei, "count"), (Array(Const(GLsubroutine), "count"), "indices")]), GlFunction(Void, "glGetUniformSubroutineuiv", [(GLenum, "shadertype"), (GLlocation, "location"), Out(OpaquePointer(GLuint), "params")], sideeffects=False), GlFunction(Void, "glGetProgramStageiv", [(GLprogram, "program"), (GLenum, "shadertype"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "values")], sideeffects=False), # GL_ARB_shading_language_include GlFunction(Void, "glNamedStringARB", [(GLenum, "type"), (GLint, "namelen"), InGlString(GLchar, "namelen", "name"), (GLint, "stringlen"), InGlString(GLchar, "stringlen", "string")]), GlFunction(Void, "glDeleteNamedStringARB", [(GLint, "namelen"), InGlString(GLchar, "namelen", "name")]), GlFunction(Void, "glCompileShaderIncludeARB", [(GLshader, "shader"), (GLsizei, "count"), (Array(Const(String(Const(GLchar), "_glShaderSource_length(path, length, {i})")), "count"), "path"), (Array(Const(GLint), "count"), "length")]), GlFunction(GLboolean, "glIsNamedStringARB", [(GLint, "namelen"), InGlString(GLchar, "namelen", "name")], sideeffects=False), GlFunction(Void, "glGetNamedStringARB", [(GLint, "namelen"), InGlString(GLchar, "namelen", "name"), (GLsizei, "bufSize"), Out(Pointer(GLint), "stringlen"), OutGlString(GLchar, "stringlen", "string")], sideeffects=False), GlFunction(Void, "glGetNamedStringivARB", [(GLint, "namelen"), InGlString(GLchar, "namelen", "name"), (GLenum, "pname"), Out(OpaqueArray(GLint, "_glGetNamedStringivARB_size(pname)"), "params")], sideeffects=False), # GL_ARB_sparse_buffer GlFunction(Void, "glBufferPageCommitmentARB", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLboolean, "commit")]), GlFunction(Void, "glNamedBufferPageCommitmentEXT", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLboolean, "commit")]), GlFunction(Void, "glNamedBufferPageCommitmentARB", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLboolean, "commit")]), # GL_ARB_sparse_texture GlFunction(Void, "glTexPageCommitmentARB", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "resident")]), # GL_ARB_sync GlFunction(GLsync, "glFenceSync", [(GLenum, "condition"), (GLbitfield, "flags")]), GlFunction(GLboolean, "glIsSync", [(GLsync, "sync")], sideeffects=False), GlFunction(Void, "glDeleteSync", [(GLsync, "sync")]), GlFunction(GLenum, "glClientWaitSync", [(GLsync, "sync"), (GLbitfield_sync_flush, "flags"), (GLuint64, "timeout")]), GlFunction(Void, "glWaitSync", [(GLsync, "sync"), (GLbitfield, "flags"), (GLuint64, "timeout")]), GlFunction(Void, "glGetInteger64v", [(GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSynciv", [(GLsync, "sync"), (GLenum, "pname"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLint, "(length ? *length : bufSize)"), "values")]), # GL_ARB_tessellation_shader GlFunction(Void, "glPatchParameteri", [(GLenum, "pname"), (GLint, "value")]), GlFunction(Void, "glPatchParameterfv", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "values")]), # GL_ARB_texture_barrier GlFunction(Void, "glTextureBarrier", []), # GL_ARB_texture_buffer_object GlFunction(Void, "glTexBufferARB", [(GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), # GL_ARB_texture_buffer_range GlFunction(Void, "glTexBufferRange", [(GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), # GL_ARB_texture_compression GlFunction(Void, "glCompressedTexImage3DARB", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexImage2DARB", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexImage1DARB", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage3DARB", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage2DARB", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage1DARB", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glGetCompressedTexImageARB", [(GLenum, "target"), (GLint, "level"), Out(GLpointer, "img")]), # GL_ARB_texture_multisample GlFunction(Void, "glTexImage2DMultisample", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTexImage3DMultisample", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glGetMultisamplefv", [(GLenum, "pname"), (GLuint, "index"), Out(Array(GLfloat, "_gl_param_size(pname)"), "val")], sideeffects=False), GlFunction(Void, "glSampleMaski", [(GLuint, "index"), (GLbitfield, "mask")]), # GL_ARB_texture_storage GlFunction(Void, "glTexStorage1D", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width")]), GlFunction(Void, "glTexStorage2D", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTexStorage3D", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), # GL_ARB_texture_storage_multisample GlFunction(Void, "glTexStorage2DMultisample", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTexStorage3DMultisample", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedsamplelocations")]), # GL_ARB_texture_view GlFunction(Void, "glTextureView", [(GLtexture, "texture"), (GLenum, "target"), (GLtexture, "origtexture"), (GLenum, "internalformat"), (GLuint, "minlevel"), (GLuint, "numlevels"), (GLuint, "minlayer"), (GLuint, "numlayers")]), # GL_ARB_timer_query GlFunction(Void, "glQueryCounter", [(GLquery, "id"), (GLenum, "target")]), GlFunction(Void, "glGetQueryObjecti64v", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint64, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectui64v", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint64, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_transform_feedback2 GlFunction(Void, "glBindTransformFeedback", [(GLenum, "target"), (GLfeedback, "id")]), GlFunction(Void, "glDeleteTransformFeedbacks", [(GLsizei, "n"), (Array(Const(GLfeedback), "n"), "ids")]), GlFunction(Void, "glGenTransformFeedbacks", [(GLsizei, "n"), Out(Array(GLfeedback, "n"), "ids")]), GlFunction(GLboolean, "glIsTransformFeedback", [(GLfeedback, "id")], sideeffects=False), GlFunction(Void, "glPauseTransformFeedback", []), GlFunction(Void, "glResumeTransformFeedback", []), GlFunction(Void, "glDrawTransformFeedback", [(GLenum_mode, "mode"), (GLfeedback, "id")]), # GL_ARB_transform_feedback3 GlFunction(Void, "glDrawTransformFeedbackStream", [(GLenum_mode, "mode"), (GLfeedback, "id"), (GLuint, "stream")]), GlFunction(Void, "glBeginQueryIndexed", [(GLenum, "target"), (GLuint, "index"), (GLfeedback, "id")]), GlFunction(Void, "glEndQueryIndexed", [(GLenum, "target"), (GLuint, "index")]), GlFunction(Void, "glGetQueryIndexediv", [(GLenum, "target"), (GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_transform_feedback_instanced GlFunction(Void, "glDrawTransformFeedbackInstanced", [(GLenum_mode, "mode"), (GLfeedback, "id"), (GLsizei, "primcount")]), GlFunction(Void, "glDrawTransformFeedbackStreamInstanced", [(GLenum_mode, "mode"), (GLfeedback, "id"), (GLuint, "stream"), (GLsizei, "primcount")]), # GL_ARB_transpose_matrix GlFunction(Void, "glLoadTransposeMatrixfARB", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glLoadTransposeMatrixdARB", [(Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMultTransposeMatrixfARB", [(Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMultTransposeMatrixdARB", [(Array(Const(GLdouble), 16), "m")]), # GL_ARB_uniform_buffer_object GlFunction(Void, "glGetUniformIndices", [(GLprogram, "program"), (GLsizei, "uniformCount"), (Array(Const(GLstringConst), "uniformCount"), "uniformNames"), Out(Array(GLuint, "uniformCount"), "uniformIndices")], sideeffects=False), GlFunction(Void, "glGetActiveUniformsiv", [(GLprogram, "program"), (GLsizei, "uniformCount"), (Array(Const(GLuint), "uniformCount"), "uniformIndices"), (GLenum, "pname"), Out(OpaqueArray(GLint, "_glGetActiveUniformsiv_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetActiveUniformName", [(GLprogram, "program"), (GLuint, "uniformIndex"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "uniformName")], sideeffects=False), GlFunction(GLuniformBlock, "glGetUniformBlockIndex", [(GLprogram, "program"), (GLstringConst, "uniformBlockName")]), GlFunction(Void, "glGetActiveUniformBlockiv", [(GLprogram, "program"), (GLuniformBlock, "uniformBlockIndex"), (GLenum, "pname"), Out(OpaqueArray(GLint, "_glGetActiveUniformBlockiv_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetActiveUniformBlockName", [(GLprogram, "program"), (GLuniformBlock, "uniformBlockIndex"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "uniformBlockName")], sideeffects=False), GlFunction(Void, "glUniformBlockBinding", [(GLprogram, "program"), (GLuniformBlock, "uniformBlockIndex"), (GLuint, "uniformBlockBinding")]), # GL_ARB_vertex_array_object GlFunction(Void, "glBindVertexArray", [(GLarray, "array")]), GlFunction(Void, "glDeleteVertexArrays", [(GLsizei, "n"), (Array(Const(GLarray), "n"), "arrays")]), GlFunction(Void, "glGenVertexArrays", [(GLsizei, "n"), Out(Array(GLarray, "n"), "arrays")]), GlFunction(GLboolean, "glIsVertexArray", [(GLarray, "array")], sideeffects=False), # GL_ARB_vertex_attrib_64bit GlFunction(Void, "glVertexAttribL1d", [(GLuint, "index"), (GLdouble, "x")]), GlFunction(Void, "glVertexAttribL2d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexAttribL3d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexAttribL4d", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexAttribL1dv", [(GLuint, "index"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glVertexAttribL2dv", [(GLuint, "index"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertexAttribL3dv", [(GLuint, "index"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertexAttribL4dv", [(GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertexAttribLPointer", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glGetVertexAttribLdv", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_ARB_vertex_attrib_binding GlFunction(Void, "glBindVertexBuffer", [(GLuint, "bindingindex"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizei, "stride")]), GlFunction(Void, "glVertexAttribFormat", [(GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexAttribIFormat", [(GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexAttribLFormat", [(GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexAttribBinding", [(GLuint, "attribindex"), (GLuint, "bindingindex")]), GlFunction(Void, "glVertexBindingDivisor", [(GLuint, "bindingindex"), (GLuint, "divisor")]), # GL_ARB_vertex_blend GlFunction(Void, "glWeightbvARB", [(GLint, "size"), (Array(Const(GLbyte), "size"), "weights")]), GlFunction(Void, "glWeightsvARB", [(GLint, "size"), (Array(Const(GLshort), "size"), "weights")]), GlFunction(Void, "glWeightivARB", [(GLint, "size"), (Array(Const(GLint), "size"), "weights")]), GlFunction(Void, "glWeightfvARB", [(GLint, "size"), (Array(Const(GLfloat), "size"), "weights")]), GlFunction(Void, "glWeightdvARB", [(GLint, "size"), (Array(Const(GLdouble), "size"), "weights")]), GlFunction(Void, "glWeightubvARB", [(GLint, "size"), (Array(Const(GLubyte), "size"), "weights")]), GlFunction(Void, "glWeightusvARB", [(GLint, "size"), (Array(Const(GLushort), "size"), "weights")]), GlFunction(Void, "glWeightuivARB", [(GLint, "size"), (Array(Const(GLuint), "size"), "weights")]), GlFunction(Void, "glWeightPointerARB", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glVertexBlendARB", [(GLint, "count")]), # GL_ARB_vertex_buffer_object GlFunction(Void, "glBindBufferARB", [(GLenum, "target"), (GLbuffer, "buffer")]), GlFunction(Void, "glDeleteBuffersARB", [(GLsizei, "n"), (Array(Const(GLbuffer), "n"), "buffers")]), GlFunction(Void, "glGenBuffersARB", [(GLsizei, "n"), Out(Array(GLbuffer, "n"), "buffers")]), GlFunction(GLboolean, "glIsBufferARB", [(GLbuffer, "buffer")], sideeffects=False), GlFunction(Void, "glBufferDataARB", [(GLenum, "target"), (GLsizeiptrARB, "size"), (Blob(Const(GLvoid), "size"), "data"), (GLenum, "usage")]), GlFunction(Void, "glBufferSubDataARB", [(GLenum, "target"), (GLintptrARB, "offset"), (GLsizeiptrARB, "size"), (Blob(Const(GLvoid), "size"), "data")]), GlFunction(Void, "glGetBufferSubDataARB", [(GLenum, "target"), (GLintptrARB, "offset"), (GLsizeiptrARB, "size"), Out(OpaqueBlob(GLvoid, "size"), "data")], sideeffects=False), GlFunction(GLmap, "glMapBufferARB", [(GLenum, "target"), (GLenum, "access")]), GlFunction(GLboolean, "glUnmapBufferARB", [(GLenum, "target")]), GlFunction(Void, "glGetBufferParameterivARB", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetBufferPointervARB", [(GLenum, "target"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), # GL_ARB_vertex_program GlFunction(Void, "glVertexAttrib1dARB", [(GLuint, "index"), (GLdouble, "x")]), GlFunction(Void, "glVertexAttrib1dvARB", [(GLuint, "index"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glVertexAttrib1fARB", [(GLuint, "index"), (GLfloat, "x")]), GlFunction(Void, "glVertexAttrib1fvARB", [(GLuint, "index"), (Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glVertexAttrib1sARB", [(GLuint, "index"), (GLshort, "x")]), GlFunction(Void, "glVertexAttrib1svARB", [(GLuint, "index"), (Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glVertexAttrib2dARB", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexAttrib2dvARB", [(GLuint, "index"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertexAttrib2fARB", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glVertexAttrib2fvARB", [(GLuint, "index"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glVertexAttrib2sARB", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glVertexAttrib2svARB", [(GLuint, "index"), (Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glVertexAttrib3dARB", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexAttrib3dvARB", [(GLuint, "index"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertexAttrib3fARB", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glVertexAttrib3fvARB", [(GLuint, "index"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glVertexAttrib3sARB", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glVertexAttrib3svARB", [(GLuint, "index"), (Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glVertexAttrib4NbvARB", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4NivARB", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttrib4NsvARB", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttrib4NubARB", [(GLuint, "index"), (GLubyte, "x"), (GLubyte, "y"), (GLubyte, "z"), (GLubyte, "w")]), GlFunction(Void, "glVertexAttrib4NubvARB", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4NuivARB", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttrib4NusvARB", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glVertexAttrib4bvARB", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4dARB", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexAttrib4dvARB", [(GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertexAttrib4fARB", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glVertexAttrib4fvARB", [(GLuint, "index"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glVertexAttrib4ivARB", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttrib4sARB", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glVertexAttrib4svARB", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttrib4ubvARB", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttrib4uivARB", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttrib4usvARB", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glVertexAttribPointerARB", [(GLuint, "index"), (size_bgra, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glEnableVertexAttribArrayARB", [(GLuint, "index")]), GlFunction(Void, "glDisableVertexAttribArrayARB", [(GLuint, "index")]), GlFunction(Void, "glProgramStringARB", [(GLenum, "target"), (GLenum, "format"), (GLsizei, "len"), (String(Const(Void), "len"), "string")]), GlFunction(Void, "glBindProgramARB", [(GLenum, "target"), (GLprogramARB, "program")]), GlFunction(Void, "glDeleteProgramsARB", [(GLsizei, "n"), (Array(Const(GLprogramARB), "n"), "programs")]), GlFunction(Void, "glGenProgramsARB", [(GLsizei, "n"), Out(Array(GLprogramARB, "n"), "programs")]), GlFunction(Void, "glProgramEnvParameter4dARB", [(GLenum, "target"), (GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glProgramEnvParameter4dvARB", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLdouble), 4), "params")]), GlFunction(Void, "glProgramEnvParameter4fARB", [(GLenum, "target"), (GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glProgramEnvParameter4fvARB", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLfloat), 4), "params")]), GlFunction(Void, "glProgramLocalParameter4dARB", [(GLenum, "target"), (GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glProgramLocalParameter4dvARB", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLdouble), 4), "params")]), GlFunction(Void, "glProgramLocalParameter4fARB", [(GLenum, "target"), (GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glProgramLocalParameter4fvARB", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLfloat), 4), "params")]), GlFunction(Void, "glGetProgramEnvParameterdvARB", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramEnvParameterfvARB", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramLocalParameterdvARB", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramLocalParameterfvARB", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramivARB", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetProgramStringARB", [(GLenum, "target"), (GLenum, "pname"), Out(GLpointer, "string")], sideeffects=False), GlFunction(Void, "glGetVertexAttribdvARB", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribfvARB", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribivARB", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribPointervARB", [(GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLpointer), "pointer")], sideeffects=False), GlFunction(GLboolean, "glIsProgramARB", [(GLprogramARB, "program")], sideeffects=False), # GL_ARB_vertex_shader GlFunction(Void, "glBindAttribLocationARB", [(GLhandleARB, "programObj"), (GLuint, "index"), (GLstringConstARB, "name")]), GlFunction(Void, "glGetActiveAttribARB", [(GLhandleARB, "programObj"), (GLuint, "index"), (GLsizei, "maxLength"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLint), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLcharARB, "length", "name")], sideeffects=False), GlFunction(GLint, "glGetAttribLocationARB", [(GLhandleARB, "programObj"), (GLstringConstARB, "name")]), # GL_ARB_vertex_type_2_10_10_10_rev GlFunction(Void, "glVertexAttribP1ui", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "value")]), GlFunction(Void, "glVertexAttribP1uiv", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexAttribP2ui", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "value")]), GlFunction(Void, "glVertexAttribP2uiv", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexAttribP3ui", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "value")]), GlFunction(Void, "glVertexAttribP3uiv", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexAttribP4ui", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "value")]), GlFunction(Void, "glVertexAttribP4uiv", [(GLuint, "index"), (GLenum, "type"), (GLboolean, "normalized"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexP2ui", [(GLenum, "type"), (GLuint, "value")]), GlFunction(Void, "glVertexP2uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexP3ui", [(GLenum, "type"), (GLuint, "value")]), GlFunction(Void, "glVertexP3uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glVertexP4ui", [(GLenum, "type"), (GLuint, "value")]), GlFunction(Void, "glVertexP4uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "value")]), GlFunction(Void, "glTexCoordP1ui", [(GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glTexCoordP1uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glTexCoordP2ui", [(GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glTexCoordP2uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glTexCoordP3ui", [(GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glTexCoordP3uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glTexCoordP4ui", [(GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glTexCoordP4uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glMultiTexCoordP1ui", [(GLenum, "texture"), (GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glMultiTexCoordP1uiv", [(GLenum, "texture"), (GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glMultiTexCoordP2ui", [(GLenum, "texture"), (GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glMultiTexCoordP2uiv", [(GLenum, "texture"), (GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glMultiTexCoordP3ui", [(GLenum, "texture"), (GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glMultiTexCoordP3uiv", [(GLenum, "texture"), (GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glMultiTexCoordP4ui", [(GLenum, "texture"), (GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glMultiTexCoordP4uiv", [(GLenum, "texture"), (GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glNormalP3ui", [(GLenum, "type"), (GLuint, "coords")]), GlFunction(Void, "glNormalP3uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "coords")]), GlFunction(Void, "glColorP3ui", [(GLenum, "type"), (GLuint, "color")]), GlFunction(Void, "glColorP3uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "color")]), GlFunction(Void, "glColorP4ui", [(GLenum, "type"), (GLuint, "color")]), GlFunction(Void, "glColorP4uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "color")]), GlFunction(Void, "glSecondaryColorP3ui", [(GLenum, "type"), (GLuint, "color")]), GlFunction(Void, "glSecondaryColorP3uiv", [(GLenum, "type"), (Pointer(Const(GLuint)), "color")]), # GL_ARB_viewport_array GlFunction(Void, "glViewportArrayv", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "v")]), GlFunction(Void, "glViewportIndexedf", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "w"), (GLfloat, "h")]), GlFunction(Void, "glViewportIndexedfv", [(GLuint, "index"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glScissorArrayv", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "v")]), GlFunction(Void, "glScissorIndexed", [(GLuint, "index"), (GLint, "left"), (GLint, "bottom"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glScissorIndexedv", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glDepthRangeArrayv", [(GLuint, "first"), (GLsizei, "count"), (Array(Const(GLdouble), "count*2"), "v")]), GlFunction(Void, "glDepthRangeIndexed", [(GLuint, "index"), (GLdouble, "n"), (GLdouble, "f")]), GlFunction(Void, "glGetFloati_v", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetDoublei_v", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, "_gl_param_size(target)"), "data")], sideeffects=False), # GL_ARB_window_pos GlFunction(Void, "glWindowPos2dARB", [(GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glWindowPos2dvARB", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glWindowPos2fARB", [(GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glWindowPos2fvARB", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glWindowPos2iARB", [(GLint, "x"), (GLint, "y")]), GlFunction(Void, "glWindowPos2ivARB", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glWindowPos2sARB", [(GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glWindowPos2svARB", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glWindowPos3dARB", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glWindowPos3dvARB", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glWindowPos3fARB", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glWindowPos3fvARB", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glWindowPos3iARB", [(GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glWindowPos3ivARB", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glWindowPos3sARB", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glWindowPos3svARB", [(Array(Const(GLshort), 3), "v")]), # GL_ATI_draw_buffers GlFunction(Void, "glDrawBuffersATI", [(GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), # GL_ATI_element_array GlFunction(Void, "glElementPointerATI", [(GLenum, "type"), (GLpointerConst, "pointer")]), GlFunction(Void, "glDrawElementArrayATI", [(GLenum_mode, "mode"), (GLsizei, "count")]), GlFunction(Void, "glDrawRangeElementArrayATI", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (GLsizei, "count")]), # GL_ATI_envmap_bumpmap GlFunction(Void, "glTexBumpParameterivATI", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glTexBumpParameterfvATI", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "param")]), GlFunction(Void, "glGetTexBumpParameterivATI", [(GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "param")], sideeffects=False), GlFunction(Void, "glGetTexBumpParameterfvATI", [(GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "param")], sideeffects=False), # GL_ATI_fragment_shader GlFunction(Handle("fragmentShaderATI", GLuint, "range"), "glGenFragmentShadersATI", [(GLuint, "range")]), GlFunction(Void, "glBindFragmentShaderATI", [(GLfragmentShaderATI, "id")]), GlFunction(Void, "glDeleteFragmentShaderATI", [(GLfragmentShaderATI, "id")]), GlFunction(Void, "glBeginFragmentShaderATI", []), GlFunction(Void, "glEndFragmentShaderATI", []), GlFunction(Void, "glPassTexCoordATI", [(GLuint, "dst"), (GLuint, "coord"), (GLenum, "swizzle")]), GlFunction(Void, "glSampleMapATI", [(GLuint, "dst"), (GLuint, "interp"), (GLenum, "swizzle")]), GlFunction(Void, "glColorFragmentOp1ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMask"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod")]), GlFunction(Void, "glColorFragmentOp2ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMask"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod"), (GLuint, "arg2"), (GLuint, "arg2Rep"), (GLuint, "arg2Mod")]), GlFunction(Void, "glColorFragmentOp3ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMask"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod"), (GLuint, "arg2"), (GLuint, "arg2Rep"), (GLuint, "arg2Mod"), (GLuint, "arg3"), (GLuint, "arg3Rep"), (GLuint, "arg3Mod")]), GlFunction(Void, "glAlphaFragmentOp1ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod")]), GlFunction(Void, "glAlphaFragmentOp2ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod"), (GLuint, "arg2"), (GLuint, "arg2Rep"), (GLuint, "arg2Mod")]), GlFunction(Void, "glAlphaFragmentOp3ATI", [(GLenum, "op"), (GLuint, "dst"), (GLuint, "dstMod"), (GLuint, "arg1"), (GLuint, "arg1Rep"), (GLuint, "arg1Mod"), (GLuint, "arg2"), (GLuint, "arg2Rep"), (GLuint, "arg2Mod"), (GLuint, "arg3"), (GLuint, "arg3Rep"), (GLuint, "arg3Mod")]), GlFunction(Void, "glSetFragmentShaderConstantATI", [(GLuint, "dst"), (Array(Const(GLfloat), 4), "value")]), # GL_ATI_map_object_buffer GlFunction(GLmap, "glMapObjectBufferATI", [(GLbuffer, "buffer")]), GlFunction(Void, "glUnmapObjectBufferATI", [(GLbuffer, "buffer")]), # GL_ATI_pn_triangles GlFunction(Void, "glPNTrianglesiATI", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPNTrianglesfATI", [(GLenum, "pname"), (GLfloat, "param")]), # GL_ATI_separate_stencil GlFunction(Void, "glStencilOpSeparateATI", [(GLenum, "face"), (GLenum, "sfail"), (GLenum, "dpfail"), (GLenum, "dppass")]), GlFunction(Void, "glStencilFuncSeparateATI", [(GLenum, "frontfunc"), (GLenum, "backfunc"), (GLint, "ref"), (GLuint, "mask")]), # GL_ATI_vertex_array_object GlFunction(GLuint, "glNewObjectBufferATI", [(GLsizei, "size"), (Blob(Const(GLvoid), "size"), "pointer"), (GLenum, "usage")]), GlFunction(GLboolean, "glIsObjectBufferATI", [(GLuint, "buffer")], sideeffects=False), GlFunction(Void, "glUpdateObjectBufferATI", [(GLuint, "buffer"), (GLuint, "offset"), (GLsizei, "size"), (Blob(Const(GLvoid), "size"), "pointer"), (GLenum, "preserve")]), GlFunction(Void, "glGetObjectBufferfvATI", [(GLuint, "buffer"), (GLenum, "pname"), Out(Pointer(GLfloat), "params")], sideeffects=False), GlFunction(Void, "glGetObjectBufferivATI", [(GLuint, "buffer"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glFreeObjectBufferATI", [(GLuint, "buffer")]), GlFunction(Void, "glArrayObjectATI", [(GLenum, "array"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLuint, "buffer"), (GLuint, "offset")]), GlFunction(Void, "glGetArrayObjectfvATI", [(GLenum, "array"), (GLenum, "pname"), Out(Pointer(GLfloat), "params")], sideeffects=False), GlFunction(Void, "glGetArrayObjectivATI", [(GLenum, "array"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glVariantArrayObjectATI", [(GLuint, "id"), (GLenum, "type"), (GLsizei, "stride"), (GLuint, "buffer"), (GLuint, "offset")]), GlFunction(Void, "glGetVariantArrayObjectfvATI", [(GLuint, "id"), (GLenum, "pname"), Out(Pointer(GLfloat), "params")], sideeffects=False), GlFunction(Void, "glGetVariantArrayObjectivATI", [(GLuint, "id"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), # GL_ATI_vertex_attrib_array_object GlFunction(Void, "glVertexAttribArrayObjectATI", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLsizei, "stride"), (GLuint, "buffer"), (GLuint, "offset")]), GlFunction(Void, "glGetVertexAttribArrayObjectfvATI", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "pname"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribArrayObjectivATI", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "pname"), "params")], sideeffects=False), # GL_ATI_vertex_streams GlFunction(Void, "glVertexStream1sATI", [(GLenum, "stream"), (GLshort, "x")]), GlFunction(Void, "glVertexStream1svATI", [(GLenum, "stream"), (Pointer(Const(GLshort)), "coords")]), GlFunction(Void, "glVertexStream1iATI", [(GLenum, "stream"), (GLint, "x")]), GlFunction(Void, "glVertexStream1ivATI", [(GLenum, "stream"), (Pointer(Const(GLint)), "coords")]), GlFunction(Void, "glVertexStream1fATI", [(GLenum, "stream"), (GLfloat, "x")]), GlFunction(Void, "glVertexStream1fvATI", [(GLenum, "stream"), (Pointer(Const(GLfloat)), "coords")]), GlFunction(Void, "glVertexStream1dATI", [(GLenum, "stream"), (GLdouble, "x")]), GlFunction(Void, "glVertexStream1dvATI", [(GLenum, "stream"), (Pointer(Const(GLdouble)), "coords")]), GlFunction(Void, "glVertexStream2sATI", [(GLenum, "stream"), (GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glVertexStream2svATI", [(GLenum, "stream"), (Array(Const(GLshort), 2), "coords")]), GlFunction(Void, "glVertexStream2iATI", [(GLenum, "stream"), (GLint, "x"), (GLint, "y")]), GlFunction(Void, "glVertexStream2ivATI", [(GLenum, "stream"), (Array(Const(GLint), 2), "coords")]), GlFunction(Void, "glVertexStream2fATI", [(GLenum, "stream"), (GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glVertexStream2fvATI", [(GLenum, "stream"), (Array(Const(GLfloat), 2), "coords")]), GlFunction(Void, "glVertexStream2dATI", [(GLenum, "stream"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexStream2dvATI", [(GLenum, "stream"), (Array(Const(GLdouble), 2), "coords")]), GlFunction(Void, "glVertexStream3sATI", [(GLenum, "stream"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glVertexStream3svATI", [(GLenum, "stream"), (Array(Const(GLshort), 3), "coords")]), GlFunction(Void, "glVertexStream3iATI", [(GLenum, "stream"), (GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glVertexStream3ivATI", [(GLenum, "stream"), (Array(Const(GLint), 3), "coords")]), GlFunction(Void, "glVertexStream3fATI", [(GLenum, "stream"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glVertexStream3fvATI", [(GLenum, "stream"), (Array(Const(GLfloat), 3), "coords")]), GlFunction(Void, "glVertexStream3dATI", [(GLenum, "stream"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexStream3dvATI", [(GLenum, "stream"), (Array(Const(GLdouble), 3), "coords")]), GlFunction(Void, "glVertexStream4sATI", [(GLenum, "stream"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glVertexStream4svATI", [(GLenum, "stream"), (Array(Const(GLshort), 4), "coords")]), GlFunction(Void, "glVertexStream4iATI", [(GLenum, "stream"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glVertexStream4ivATI", [(GLenum, "stream"), (Array(Const(GLint), 4), "coords")]), GlFunction(Void, "glVertexStream4fATI", [(GLenum, "stream"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glVertexStream4fvATI", [(GLenum, "stream"), (Array(Const(GLfloat), 4), "coords")]), GlFunction(Void, "glVertexStream4dATI", [(GLenum, "stream"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexStream4dvATI", [(GLenum, "stream"), (Array(Const(GLdouble), 4), "coords")]), GlFunction(Void, "glNormalStream3bATI", [(GLenum, "stream"), (GLbyte, "nx"), (GLbyte, "ny"), (GLbyte, "nz")]), GlFunction(Void, "glNormalStream3bvATI", [(GLenum, "stream"), (Array(Const(GLbyte), 3), "coords")]), GlFunction(Void, "glNormalStream3sATI", [(GLenum, "stream"), (GLshort, "nx"), (GLshort, "ny"), (GLshort, "nz")]), GlFunction(Void, "glNormalStream3svATI", [(GLenum, "stream"), (Array(Const(GLshort), 3), "coords")]), GlFunction(Void, "glNormalStream3iATI", [(GLenum, "stream"), (GLint, "nx"), (GLint, "ny"), (GLint, "nz")]), GlFunction(Void, "glNormalStream3ivATI", [(GLenum, "stream"), (Array(Const(GLint), 3), "coords")]), GlFunction(Void, "glNormalStream3fATI", [(GLenum, "stream"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz")]), GlFunction(Void, "glNormalStream3fvATI", [(GLenum, "stream"), (Array(Const(GLfloat), 3), "coords")]), GlFunction(Void, "glNormalStream3dATI", [(GLenum, "stream"), (GLdouble, "nx"), (GLdouble, "ny"), (GLdouble, "nz")]), GlFunction(Void, "glNormalStream3dvATI", [(GLenum, "stream"), (Array(Const(GLdouble), 3), "coords")]), GlFunction(Void, "glClientActiveVertexStreamATI", [(GLenum, "stream")]), GlFunction(Void, "glVertexBlendEnviATI", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glVertexBlendEnvfATI", [(GLenum, "pname"), (GLfloat, "param")]), # GL_EXT_bindable_uniform GlFunction(Void, "glUniformBufferEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLbuffer, "buffer")]), GlFunction(GLint, "glGetUniformBufferSizeEXT", [(GLprogram, "program"), (GLlocation, "location")]), GlFunction(GLintptr, "glGetUniformOffsetEXT", [(GLprogram, "program"), (GLlocation, "location")]), # GL_EXT_blend_color GlFunction(Void, "glBlendColorEXT", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue"), (GLfloat, "alpha")]), # GL_EXT_blend_equation_separate GlFunction(Void, "glBlendEquationSeparateEXT", [(GLenum, "modeRGB"), (GLenum, "modeAlpha")]), # GL_EXT_blend_func_separate GlFunction(Void, "glBlendFuncSeparateEXT", [(GLenum, "sfactorRGB"), (GLenum, "dfactorRGB"), (GLenum, "sfactorAlpha"), (GLenum, "dfactorAlpha")]), # GL_EXT_blend_minmax GlFunction(Void, "glBlendEquationEXT", [(GLenum, "mode")]), # GL_EXT_color_subtable GlFunction(Void, "glColorSubTableEXT", [(GLenum, "target"), (GLsizei, "start"), (GLsizei, "count"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glColorSubTable_size(format, type, count)"), "data")]), GlFunction(Void, "glCopyColorSubTableEXT", [(GLenum, "target"), (GLsizei, "start"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), # GL_EXT_compiled_vertex_array GlFunction(Void, "glLockArraysEXT", [(GLint, "first"), (GLsizei, "count")]), GlFunction(Void, "glUnlockArraysEXT", []), # GL_EXT_convolution GlFunction(Void, "glConvolutionFilter1DEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, width)"), "image")]), GlFunction(Void, "glConvolutionFilter2DEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter2D_size(format, type, width, height)"), "image")]), GlFunction(Void, "glConvolutionParameterfEXT", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "params")]), GlFunction(Void, "glConvolutionParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glConvolutionParameteriEXT", [(GLenum, "target"), (GLenum, "pname"), (GLint, "params")]), GlFunction(Void, "glConvolutionParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCopyConvolutionFilter1DEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyConvolutionFilter2DEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetConvolutionFilterEXT", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetConvolutionFilterEXT_size(target, format, type)"), "image")]), GlFunction(Void, "glGetConvolutionParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetConvolutionParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetSeparableFilterEXT", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetSeparableFilterEXT_size(target, format, type)"), "row"), Out(OpaqueBlob(GLvoid, "_glGetSeparableFilterEXT_size(target, format, type)"), "column"), Out(OpaqueBlob(GLvoid, "_glGetSeparableFilterEXT_size(target, format, type)"), "span")]), GlFunction(Void, "glSeparableFilter2DEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, width)"), "row"), (Blob(Const(GLvoid), "_glConvolutionFilter1D_size(format, type, height)"), "column")]), # GL_EXT_coordinate_frame GlFunction(Void, "glTangent3bEXT", [(GLbyte, "tx"), (GLbyte, "ty"), (GLbyte, "tz")]), GlFunction(Void, "glTangent3bvEXT", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glTangent3dEXT", [(GLdouble, "tx"), (GLdouble, "ty"), (GLdouble, "tz")]), GlFunction(Void, "glTangent3dvEXT", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glTangent3fEXT", [(GLfloat, "tx"), (GLfloat, "ty"), (GLfloat, "tz")]), GlFunction(Void, "glTangent3fvEXT", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTangent3iEXT", [(GLint, "tx"), (GLint, "ty"), (GLint, "tz")]), GlFunction(Void, "glTangent3ivEXT", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glTangent3sEXT", [(GLshort, "tx"), (GLshort, "ty"), (GLshort, "tz")]), GlFunction(Void, "glTangent3svEXT", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glBinormal3bEXT", [(GLbyte, "bx"), (GLbyte, "by"), (GLbyte, "bz")]), GlFunction(Void, "glBinormal3bvEXT", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glBinormal3dEXT", [(GLdouble, "bx"), (GLdouble, "by"), (GLdouble, "bz")]), GlFunction(Void, "glBinormal3dvEXT", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glBinormal3fEXT", [(GLfloat, "bx"), (GLfloat, "by"), (GLfloat, "bz")]), GlFunction(Void, "glBinormal3fvEXT", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glBinormal3iEXT", [(GLint, "bx"), (GLint, "by"), (GLint, "bz")]), GlFunction(Void, "glBinormal3ivEXT", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glBinormal3sEXT", [(GLshort, "bx"), (GLshort, "by"), (GLshort, "bz")]), GlFunction(Void, "glBinormal3svEXT", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glTangentPointerEXT", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glBinormalPointerEXT", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_EXT_copy_image GlFunction(Void, "glCopyImageSubDataEXT", [(GLname("srcTarget"), "srcName"), (GLenum, "srcTarget"), (GLint, "srcLevel"), (GLint, "srcX"), (GLint, "srcY"), (GLint, "srcZ"), (GLname("dstTarget"), "dstName"), (GLenum, "dstTarget"), (GLint, "dstLevel"), (GLint, "dstX"), (GLint, "dstY"), (GLint, "dstZ"), (GLsizei, "srcWidth"), (GLsizei, "srcHeight"), (GLsizei, "srcDepth")]), # GL_EXT_copy_texture GlFunction(Void, "glCopyTexImage1DEXT", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLint, "border")]), GlFunction(Void, "glCopyTexImage2DEXT", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border")]), GlFunction(Void, "glCopyTexSubImage1DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyTexSubImage2DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCopyTexSubImage3DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), # GL_EXT_cull_vertex GlFunction(Void, "glCullParameterdvEXT", [(GLenum, "pname"), (Array(GLdouble, 4), "params")]), GlFunction(Void, "glCullParameterfvEXT", [(GLenum, "pname"), (Array(GLfloat, 4), "params")]), # GL_EXT_debug_label GlFunction(Void, "glLabelObjectEXT", [(GLenum, "type"), (GLuint, "object"), (GLsizei, "length"), (GLstringConst, "label")]), GlFunction(Void, "glGetObjectLabelEXT", [(GLenum, "type"), (GLuint, "object"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(GLstring, "label")], sideeffects=False), # GL_EXT_debug_marker GlFunction(Void, "glInsertEventMarkerEXT", [(GLsizei, "length"), (String(Const(GLchar), "length ? length : strlen(marker)"), "marker")], sideeffects=True), GlFunction(Void, "glPushGroupMarkerEXT", [(GLsizei, "length"), (String(Const(GLchar), "length ? length : strlen(marker)"), "marker")], sideeffects=True), GlFunction(Void, "glPopGroupMarkerEXT", [], sideeffects=True), # GL_EXT_depth_bounds_test GlFunction(Void, "glDepthBoundsEXT", [(GLclampd, "zmin"), (GLclampd, "zmax")]), # GL_EXT_direct_state_access GlFunction(Void, "glBindMultiTextureEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLtexture, "texture")]), GlFunction(GLenum, "glCheckNamedFramebufferStatusEXT", [(GLframebuffer, "framebuffer"), (GLenum, "target")]), GlFunction(Void, "glClearNamedBufferDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(Void, "glClearNamedBufferSubDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLsizeiptr, "offset"), (GLsizeiptr, "size"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]), GlFunction(Void, "glClientAttribDefaultEXT", [(GLbitfield_client_attrib, "mask")]), GlFunction(Void, "glCompressedMultiTexImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedMultiTexImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedMultiTexImage3DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedMultiTexSubImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedMultiTexSubImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedMultiTexSubImage3DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureImage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureSubImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureSubImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCompressedTextureSubImage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "bits")]), GlFunction(Void, "glCopyMultiTexImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLint, "border")]), GlFunction(Void, "glCopyMultiTexImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border")]), GlFunction(Void, "glCopyMultiTexSubImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyMultiTexSubImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCopyMultiTexSubImage3DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCopyTextureImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLint, "border")]), GlFunction(Void, "glCopyTextureImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border")]), GlFunction(Void, "glCopyTextureSubImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glCopyTextureSubImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCopyTextureSubImage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glDisableClientStateIndexedEXT", [(GLenum, "array"), (GLuint, "index")]), GlFunction(Void, "glDisableClientStateiEXT", [(GLenum, "array"), (GLuint, "index")]), #GlFunction(Void, "glDisableIndexedEXT", [(GLenum, "target"), (GLuint, "index")]), GlFunction(Void, "glDisableVertexArrayAttribEXT", [(GLarray, "vaobj"), (GLuint, "index")]), GlFunction(Void, "glDisableVertexArrayEXT", [(GLarray, "vaobj"), (GLenum, "array")]), GlFunction(Void, "glEnableClientStateIndexedEXT", [(GLenum, "array"), (GLuint, "index")]), GlFunction(Void, "glEnableClientStateiEXT", [(GLenum, "array"), (GLuint, "index")]), #GlFunction(Void, "glEnableIndexedEXT", [(GLenum, "target"), (GLuint, "index")]), GlFunction(Void, "glEnableVertexArrayAttribEXT", [(GLarray, "vaobj"), (GLuint, "index")]), GlFunction(Void, "glEnableVertexArrayEXT", [(GLarray, "vaobj"), (GLenum, "array")]), GlFunction(Void, "glFlushMappedNamedBufferRangeEXT", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "length")]), GlFunction(Void, "glFramebufferDrawBufferEXT", [(GLframebuffer, "framebuffer"), (GLenum, "mode")]), GlFunction(Void, "glFramebufferDrawBuffersEXT", [(GLframebuffer, "framebuffer"), (GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), GlFunction(Void, "glFramebufferReadBufferEXT", [(GLframebuffer, "framebuffer"), (GLenum, "mode")]), GlFunction(Void, "glGenerateMultiTexMipmapEXT", [(GLenum, "texunit"), (GLenum, "target")]), GlFunction(Void, "glGenerateTextureMipmapEXT", [(GLtexture, "texture"), (GLenum, "target")]), #GlFunction(Void, "glGetBooleanIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), (Array(GLboolean, "COMPSIZE(target)"), "data")]), GlFunction(Void, "glGetCompressedMultiTexImageEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "lod"), Out(OpaqueBlob(GLvoid, "_glGetCompressedMultiTexImageEXT_size(target, lod)"), "img")]), GlFunction(Void, "glGetCompressedTextureImageEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "lod"), Out(OpaqueBlob(GLvoid, "_glGetCompressedTextureImageEXT_size(target, lod)"), "img")]), GlFunction(Void, "glGetDoubleIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetDoublei_vEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetFloatIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetFloati_vEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetFramebufferParameterivEXT", [(GLframebuffer, "framebuffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), #GlFunction(Void, "glGetIntegerIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), (Array(GLint, "COMPSIZE(target)"), "data")]), GlFunction(Void, "glGetMultiTexEnvfvEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexEnvivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexGendvEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexGenfvEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexGenivEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexImageEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetMultiTexImageEXT_size(target, level, format, type)"), "pixels")]), GlFunction(Void, "glGetMultiTexLevelParameterfvEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexLevelParameterivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexParameterIivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexParameterIuivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexParameterfvEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMultiTexParameterivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferParameterivEXT", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferPointervEXT", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferSubDataEXT", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), Out(OpaqueBlob(GLvoid, "size"), "data")], sideeffects=False), GlFunction(Void, "glGetNamedFramebufferAttachmentParameterivEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedFramebufferParameterivEXT", [(GLframebuffer, "framebuffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedProgramLocalParameterIivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), Out(Array(GLint, 4), "params")], sideeffects=False), GlFunction(Void, "glGetNamedProgramLocalParameterIuivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), Out(Array(GLuint, 4), "params")], sideeffects=False), GlFunction(Void, "glGetNamedProgramLocalParameterdvEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), Out(Array(GLdouble, 4), "params")], sideeffects=False), GlFunction(Void, "glGetNamedProgramLocalParameterfvEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), Out(Array(GLfloat, 4), "params")], sideeffects=False), GlFunction(Void, "glGetNamedProgramStringEXT", [(GLprogram, "program"), (GLenum, "target"), (GLenum, "pname"), Out(OpaqueBlob(GLvoid, "_glGetNamedProgramStringEXT_size(program,pname)"), "string")], sideeffects=False), GlFunction(Void, "glGetNamedProgramivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glGetNamedRenderbufferParameterivEXT", [(GLrenderbuffer, "renderbuffer"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetPointerIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLpointer, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetPointeri_vEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLpointer, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetTextureImageEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "format"), (GLenum, "type"), Out(GLpointer, "pixels")]), GlFunction(Void, "glGetTextureLevelParameterfvEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureLevelParameterivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterIivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterIuivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterfvEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTextureParameterivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexArrayIntegeri_vEXT", [(GLarray, "vaobj"), (GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetVertexArrayIntegervEXT", [(GLarray, "vaobj"), (GLenum, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), GlFunction(Void, "glGetVertexArrayPointeri_vEXT", [(GLarray, "vaobj"), (GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLpointer), "param")], sideeffects=False), GlFunction(Void, "glGetVertexArrayPointervEXT", [(GLarray, "vaobj"), (GLenum, "pname"), Out(Pointer(GLpointer), "param")], sideeffects=False), #GlFunction(GLboolean, "glIsEnabledIndexedEXT", [(GLenum, "target"), (GLuint, "index")]), GlFunction(GLmap, "glMapNamedBufferEXT", [(GLbuffer, "buffer"), (GLenum, "access")]), GlFunction(GLmap, "glMapNamedBufferRangeEXT", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "length"), (GLbitfield_access, "access")]), GlFunction(Void, "glMatrixFrustumEXT", [(GLenum, "mode"), (GLdouble, "left"), (GLdouble, "right"), (GLdouble, "bottom"), (GLdouble, "top"), (GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glMatrixLoadIdentityEXT", [(GLenum, "mode")]), GlFunction(Void, "glMatrixLoadTransposedEXT", [(GLenum, "mode"), (Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMatrixLoadTransposefEXT", [(GLenum, "mode"), (Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMatrixLoaddEXT", [(GLenum, "mode"), (Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMatrixLoadfEXT", [(GLenum, "mode"), (Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMatrixMultTransposedEXT", [(GLenum, "mode"), (Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMatrixMultTransposefEXT", [(GLenum, "mode"), (Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMatrixMultdEXT", [(GLenum, "mode"), (Array(Const(GLdouble), 16), "m")]), GlFunction(Void, "glMatrixMultfEXT", [(GLenum, "mode"), (Array(Const(GLfloat), 16), "m")]), GlFunction(Void, "glMatrixOrthoEXT", [(GLenum, "mode"), (GLdouble, "left"), (GLdouble, "right"), (GLdouble, "bottom"), (GLdouble, "top"), (GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glMatrixPopEXT", [(GLenum, "mode")]), GlFunction(Void, "glMatrixPushEXT", [(GLenum, "mode")]), GlFunction(Void, "glMatrixRotatedEXT", [(GLenum, "mode"), (GLdouble, "angle"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glMatrixRotatefEXT", [(GLenum, "mode"), (GLfloat, "angle"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glMatrixScaledEXT", [(GLenum, "mode"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glMatrixScalefEXT", [(GLenum, "mode"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glMatrixTranslatedEXT", [(GLenum, "mode"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glMatrixTranslatefEXT", [(GLenum, "mode"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glMultiTexBufferEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), GlFunction(Void, "glMultiTexCoordPointerEXT", [(GLenum, "texunit"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glMultiTexEnvfEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glMultiTexEnvfvEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexEnviEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glMultiTexEnvivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexGendEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (GLdouble, "param")]), GlFunction(Void, "glMultiTexGendvEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLdouble), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexGenfEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glMultiTexGenfvEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexGeniEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glMultiTexGenivEXT", [(GLenum, "texunit"), (GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glMultiTexImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glMultiTexImage3DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glMultiTexParameterIivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexParameterIuivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexParameterfEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glMultiTexParameterfvEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexParameteriEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glMultiTexParameterivEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glMultiTexRenderbufferEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glMultiTexSubImage1DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glMultiTexSubImage2DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glMultiTexSubImage3DEXT", [(GLenum, "texunit"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glNamedBufferDataEXT", [(GLbuffer, "buffer"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data"), (GLenum, "usage")]), GlFunction(Void, "glNamedBufferStorageEXT", [ (GLbuffer, "buffer"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data"), (GLbitfield_storage, "flags")]), GlFunction(Void, "glNamedBufferSubDataEXT", [(GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size"), (Blob(Const(GLvoid), "size"), "data")]), GlFunction(Void, "glNamedCopyBufferSubDataEXT", [(GLbuffer, "readBuffer"), (GLbuffer, "writeBuffer"), (GLintptr, "readOffset"), (GLintptr, "writeOffset"), (GLsizeiptr, "size")]), GlFunction(Void, "glNamedFramebufferParameteriEXT", [(GLframebuffer, "framebuffer"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glNamedFramebufferRenderbufferEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glNamedFramebufferTexture1DEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glNamedFramebufferTexture2DEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glNamedFramebufferTexture3DEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLint, "zoffset")]), GlFunction(Void, "glNamedFramebufferTextureEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glNamedFramebufferTextureFaceEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLenum, "face")]), GlFunction(Void, "glNamedFramebufferTextureLayerEXT", [(GLframebuffer, "framebuffer"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLint, "layer")]), GlFunction(Void, "glNamedProgramLocalParameter4dEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glNamedProgramLocalParameter4dvEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (Array(Const(GLdouble), 4), "params")]), GlFunction(Void, "glNamedProgramLocalParameter4fEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glNamedProgramLocalParameter4fvEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (Array(Const(GLfloat), 4), "params")]), GlFunction(Void, "glNamedProgramLocalParameterI4iEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glNamedProgramLocalParameterI4ivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (Array(Const(GLint), 4), "params")]), GlFunction(Void, "glNamedProgramLocalParameterI4uiEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z"), (GLuint, "w")]), GlFunction(Void, "glNamedProgramLocalParameterI4uivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (Array(Const(GLuint), 4), "params")]), GlFunction(Void, "glNamedProgramLocalParameters4fvEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "params")]), GlFunction(Void, "glNamedProgramLocalParametersI4ivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "params")]), GlFunction(Void, "glNamedProgramLocalParametersI4uivEXT", [(GLprogram, "program"), (GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "params")]), GlFunction(Void, "glNamedProgramStringEXT", [(GLprogram, "program"), (GLenum, "target"), (GLenum, "format"), (GLsizei, "len"), (String(Const(GLvoid), "len"), "string")]), GlFunction(Void, "glNamedRenderbufferStorageEXT", [(GLrenderbuffer, "renderbuffer"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glNamedRenderbufferStorageMultisampleCoverageEXT", [(GLrenderbuffer, "renderbuffer"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glNamedRenderbufferStorageMultisampleEXT", [(GLrenderbuffer, "renderbuffer"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glProgramUniform1dEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "x")]), GlFunction(Void, "glProgramUniform1dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count"), "value")]), GlFunction(Void, "glProgramUniform1fEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0")]), GlFunction(Void, "glProgramUniform1fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "value")]), GlFunction(Void, "glProgramUniform1iEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0")]), GlFunction(Void, "glProgramUniform1ivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count"), "value")]), GlFunction(Void, "glProgramUniform1uiEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0")]), GlFunction(Void, "glProgramUniform1uivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "value")]), GlFunction(Void, "glProgramUniform2dEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glProgramUniform2dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2fEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1")]), GlFunction(Void, "glProgramUniform2fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2iEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1")]), GlFunction(Void, "glProgramUniform2ivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*2"), "value")]), GlFunction(Void, "glProgramUniform2uiEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1")]), GlFunction(Void, "glProgramUniform2uivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*2"), "value")]), GlFunction(Void, "glProgramUniform3dEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glProgramUniform3dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3fEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2")]), GlFunction(Void, "glProgramUniform3fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3iEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2")]), GlFunction(Void, "glProgramUniform3ivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*3"), "value")]), GlFunction(Void, "glProgramUniform3uiEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2")]), GlFunction(Void, "glProgramUniform3uivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*3"), "value")]), GlFunction(Void, "glProgramUniform4dEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glProgramUniform4dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLdouble), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4fEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLfloat, "v0"), (GLfloat, "v1"), (GLfloat, "v2"), (GLfloat, "v3")]), GlFunction(Void, "glProgramUniform4fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4iEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLint, "v0"), (GLint, "v1"), (GLint, "v2"), (GLint, "v3")]), GlFunction(Void, "glProgramUniform4ivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "value")]), GlFunction(Void, "glProgramUniform4uiEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2"), (GLuint, "v3")]), GlFunction(Void, "glProgramUniform4uivEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix2dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix2fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x3dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x3fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x4dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*2*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix2x4fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*2*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix3dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix3fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x2dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x2fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x4dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*3*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix3x4fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*3*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*4"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x2dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x2fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*2"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x3dvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLdouble), "count*4*3"), "value")]), GlFunction(Void, "glProgramUniformMatrix4x3fvEXT", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (GLboolean, "transpose"), (Array(Const(GLfloat), "count*4*3"), "value")]), GlFunction(Void, "glPushClientAttribDefaultEXT", [(GLbitfield_client_attrib, "mask")]), GlFunction(Void, "glTextureBufferEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), GlFunction(Void, "glTextureBufferRangeEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glTextureImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTextureImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glTextureImage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLenum_int, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glTexturePageCommitmentEXT", [(GLtexture, "texture"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "commit")]), GlFunction(Void, "glTextureParameterIivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureParameterIuivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureParameterfEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTextureParameterfvEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureParameteriEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTextureParameterivEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTextureRenderbufferEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glTextureStorage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width")]), GlFunction(Void, "glTextureStorage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTextureStorage2DMultisampleEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTextureStorage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), GlFunction(Void, "glTextureStorage3DMultisampleEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedsamplelocations")]), GlFunction(Void, "glTextureSubImage1DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTextureSubImage2DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), GlFunction(Void, "glTextureSubImage3DEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(GLboolean, "glUnmapNamedBufferEXT", [(GLbuffer, "buffer")]), GlFunction(Void, "glVertexArrayBindVertexBufferEXT", [(GLarray, "vaobj"), (GLuint, "bindingindex"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizei, "stride")]), GlFunction(Void, "glVertexArrayColorOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayEdgeFlagOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayFogCoordOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayIndexOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayMultiTexCoordOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLenum, "texunit"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayNormalOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArraySecondaryColorOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayTexCoordOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayVertexAttribBindingEXT", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLuint, "bindingindex")]), GlFunction(Void, "glVertexArrayVertexAttribDivisorEXT", [(GLarray, "vaobj"), (GLuint, "index"), (GLuint, "divisor")]), GlFunction(Void, "glVertexArrayVertexAttribFormatEXT", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayVertexAttribIFormatEXT", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayVertexAttribIOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayVertexAttribLFormatEXT", [(GLarray, "vaobj"), (GLuint, "attribindex"), (GLint, "size"), (GLenum, "type"), (GLuint, "relativeoffset")]), GlFunction(Void, "glVertexArrayVertexAttribLOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayVertexAttribOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLsizei, "stride"), (GLintptr, "offset")]), GlFunction(Void, "glVertexArrayVertexBindingDivisorEXT", [(GLarray, "vaobj"), (GLuint, "bindingindex"), (GLuint, "divisor")]), GlFunction(Void, "glVertexArrayVertexOffsetEXT", [(GLarray, "vaobj"), (GLbuffer, "buffer"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLintptr, "offset")]), # GL_EXT_discard_framebuffer GlFunction(Void, "glDiscardFramebufferEXT", [(GLenum, "target"), (GLsizei, "numAttachments"), (Array(Const(GLenum), "numAttachments"), "attachments")]), # GL_EXT_draw_buffers GlFunction(Void, "glDrawBuffersEXT", [(GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), # GL_EXT_draw_buffers2 GlFunction(Void, "glColorMaskIndexedEXT", [(GLuint, "index"), (GLboolean, "r"), (GLboolean, "g"), (GLboolean, "b"), (GLboolean, "a")]), GlFunction(Void, "glGetBooleanIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLboolean, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glGetIntegerIndexedvEXT", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLint, "_gl_param_size(target)"), "data")], sideeffects=False), GlFunction(Void, "glEnableIndexedEXT", [(GLenum, "target"), (GLuint, "index")]), GlFunction(Void, "glDisableIndexedEXT", [(GLenum, "target"), (GLuint, "index")]), GlFunction(GLboolean, "glIsEnabledIndexedEXT", [(GLenum, "target"), (GLuint, "index")], sideeffects=False), # GL_EXT_draw_instanced GlFunction(Void, "glDrawArraysInstancedEXT", [(GLenum_mode, "mode"), (GLint, "start"), (GLsizei, "count"), (GLsizei, "primcount")]), GlFunction(Void, "glDrawElementsInstancedEXT", [(GLenum_mode, "mode"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices"), (GLsizei, "primcount")]), # GL_EXT_draw_range_elements GlFunction(Void, "glDrawRangeElementsEXT", [(GLenum_mode, "mode"), (GLuint, "start"), (GLuint, "end"), (GLsizei, "count"), (GLenum, "type"), (GLindexBuffer("count", "type"), "indices")]), # GL_EXT_fog_coord GlFunction(Void, "glFogCoordfEXT", [(GLfloat, "coord")]), GlFunction(Void, "glFogCoordfvEXT", [(Pointer(Const(GLfloat)), "coord")]), GlFunction(Void, "glFogCoorddEXT", [(GLdouble, "coord")]), GlFunction(Void, "glFogCoorddvEXT", [(Pointer(Const(GLdouble)), "coord")]), GlFunction(Void, "glFogCoordPointerEXT", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_EXT_framebuffer_blit GlFunction(Void, "glBlitFramebufferEXT", [(GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield_attrib, "mask"), (GLenum, "filter")]), # GL_EXT_framebuffer_multisample GlFunction(Void, "glRenderbufferStorageMultisampleEXT", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), # GL_EXT_framebuffer_object GlFunction(GLboolean, "glIsRenderbufferEXT", [(GLrenderbuffer, "renderbuffer")], sideeffects=False), GlFunction(Void, "glBindRenderbufferEXT", [(GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glDeleteRenderbuffersEXT", [(GLsizei, "n"), (Array(Const(GLrenderbuffer), "n"), "renderbuffers")]), GlFunction(Void, "glGenRenderbuffersEXT", [(GLsizei, "n"), Out(Array(GLrenderbuffer, "n"), "renderbuffers")]), GlFunction(Void, "glRenderbufferStorageEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetRenderbufferParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsFramebufferEXT", [(GLframebuffer, "framebuffer")], sideeffects=False), GlFunction(Void, "glBindFramebufferEXT", [(GLenum, "target"), (GLframebuffer, "framebuffer")]), GlFunction(Void, "glDeleteFramebuffersEXT", [(GLsizei, "n"), (Array(Const(GLframebuffer), "n"), "framebuffers")]), GlFunction(Void, "glGenFramebuffersEXT", [(GLsizei, "n"), Out(Array(GLframebuffer, "n"), "framebuffers")]), GlFunction(GLenum, "glCheckFramebufferStatusEXT", [(GLenum, "target")]), GlFunction(Void, "glFramebufferTexture1DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferTexture2DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferTexture3DEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLint, "zoffset")]), GlFunction(Void, "glFramebufferRenderbufferEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glGetFramebufferAttachmentParameterivEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGenerateMipmapEXT", [(GLenum, "target")]), # GL_EXT_geometry_shader GlFunction(Void, "glFramebufferTextureEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level")]), # GL_EXT_geometry_shader4 GlFunction(Void, "glProgramParameteriEXT", [(GLprogram, "program"), (GLenum, "pname"), (GLint, "value")]), # GL_EXT_gpu_program_parameters GlFunction(Void, "glProgramEnvParameters4fvEXT", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "params")]), GlFunction(Void, "glProgramLocalParameters4fvEXT", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "params")]), # GL_EXT_gpu_shader4 GlFunction(Void, "glGetUniformuivEXT", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaqueArray(GLuint, "_glGetUniformuivEXT_size(program, location)"), "params")], sideeffects=False), GlFunction(Void, "glBindFragDataLocationEXT", [(GLprogram, "program"), (GLuint, "color"), (GLstringConst, "name")]), GlFunction(GLint, "glGetFragDataLocationEXT", [(GLprogram, "program"), (GLstringConst, "name")], sideeffects=False), GlFunction(Void, "glUniform1uiEXT", [(GLlocation, "location"), (GLuint, "v0")]), GlFunction(Void, "glUniform2uiEXT", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1")]), GlFunction(Void, "glUniform3uiEXT", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2")]), GlFunction(Void, "glUniform4uiEXT", [(GLlocation, "location"), (GLuint, "v0"), (GLuint, "v1"), (GLuint, "v2"), (GLuint, "v3")]), GlFunction(Void, "glUniform1uivEXT", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "value")]), GlFunction(Void, "glUniform2uivEXT", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*2"), "value")]), GlFunction(Void, "glUniform3uivEXT", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*3"), "value")]), GlFunction(Void, "glUniform4uivEXT", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "value")]), # GL_EXT_histogram GlFunction(Void, "glGetHistogramEXT", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetHistogramEXT_size(target, format, type)"), "values")]), GlFunction(Void, "glGetHistogramParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetHistogramParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetMinmaxEXT", [(GLenum, "target"), (GLboolean, "reset"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetMinmaxEXT_size(target, format, type)"), "values")]), GlFunction(Void, "glGetMinmaxParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMinmaxParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glHistogramEXT", [(GLenum, "target"), (GLsizei, "width"), (GLenum, "internalformat"), (GLboolean, "sink")]), GlFunction(Void, "glMinmaxEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLboolean, "sink")]), GlFunction(Void, "glResetHistogramEXT", [(GLenum, "target")]), GlFunction(Void, "glResetMinmaxEXT", [(GLenum, "target")]), # GL_EXT_index_func GlFunction(Void, "glIndexFuncEXT", [(GLenum, "func"), (GLclampf, "ref")]), # GL_EXT_index_material GlFunction(Void, "glIndexMaterialEXT", [(GLenum, "face"), (GLenum, "mode")]), # GL_EXT_instanced_arrays GlFunction(Void, "glVertexAttribDivisorEXT", [(GLuint, "index"), (GLuint, "divisor")]), # GL_EXT_light_texture GlFunction(Void, "glApplyTextureEXT", [(GLenum, "mode")]), GlFunction(Void, "glTextureLightEXT", [(GLenum, "pname")]), GlFunction(Void, "glTextureMaterialEXT", [(GLenum, "face"), (GLenum, "mode")]), # GL_EXT_map_buffer_range GlFunction(GLmap, "glMapBufferRangeEXT", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "length"), (GLbitfield_access, "access")]), GlFunction(Void, "glFlushMappedBufferRangeEXT", [(GLenum, "target"), (GLintptr, "offset"), (GLsizeiptr, "length")]), # GL_EXT_multi_draw_arrays GlFunction(Void, "glMultiDrawArraysEXT", [(GLenum_mode, "mode"), (Array(Const(GLint), "primcount"), "first"), (Array(Const(GLsizei), "primcount"), "count"), (GLsizei, "primcount")]), GlFunction(Void, "glMultiDrawElementsEXT", [(GLenum_mode, "mode"), (Array(Const(GLsizei), "primcount"), "count"), (GLenum, "type"), (Array(Const(GLindexBuffer("count[{i}]", "type")), "primcount"), "indices"), (GLsizei, "primcount")]), # GL_EXT_multisample GlFunction(Void, "glSampleMaskEXT", [(GLclampf, "value"), (GLboolean, "invert")]), GlFunction(Void, "glSamplePatternEXT", [(GLenum, "pattern")]), # GL_EXT_multisampled_render_to_texture GlFunction(Void, "glFramebufferTexture2DMultisampleEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLsizei, "samples")]), # GL_EXT_occlusion_query_boolean GlFunction(Void, "glGenQueriesEXT", [(GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glDeleteQueriesEXT", [(GLsizei, "n"), (Array(Const(GLquery), "n"), "ids")]), GlFunction(GLboolean, "glIsQueryEXT", [(GLquery, "id")], sideeffects=False), GlFunction(Void, "glBeginQueryEXT", [(GLenum, "target"), (GLquery, "id")]), GlFunction(Void, "glEndQueryEXT", [(GLenum, "target")]), GlFunction(Void, "glGetQueryivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectuivEXT", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_EXT_paletted_texture GlFunction(Void, "glColorTableEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glColorTable_size(format, type, width)"), "table")]), GlFunction(Void, "glGetColorTableEXT", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetColorTableEXT_size(target, format, type)"), "data")], sideeffects=False), GlFunction(Void, "glGetColorTableParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetColorTableParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_EXT_pixel_transform GlFunction(Void, "glPixelTransformParameteriEXT", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPixelTransformParameterfEXT", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPixelTransformParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), (Pointer(Const(GLint)), "params")]), GlFunction(Void, "glPixelTransformParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), (Pointer(Const(GLfloat)), "params")]), GlFunction(Void, "glGetPixelTransformParameterivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetPixelTransformParameterfvEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_EXT_point_parameters GlFunction(Void, "glPointParameterfEXT", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPointParameterfvEXT", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), # GL_EXT_polygon_offset GlFunction(Void, "glPolygonOffsetEXT", [(GLfloat, "factor"), (GLfloat, "bias")]), # GL_EXT_polygon_offset_clamp GlFunction(Void, "glPolygonOffsetClampEXT", [(GLfloat, "factor"), (GLfloat, "units"), (GLfloat, "clamp")]), # GL_EXT_primitive_bounding_box GlFunction(Void, "glPrimitiveBoundingBoxEXT", [(GLfloat, "minX"), (GLfloat, "minY"), (GLfloat, "minZ"), (GLfloat, "minW"), (GLfloat, "maxX"), (GLfloat, "maxY"), (GLfloat, "maxZ"), (GLfloat, "maxW")]), # GL_EXT_provoking_vertex GlFunction(Void, "glProvokingVertexEXT", [(GLenum, "mode")]), # GL_EXT_raster_multisample GlFunction(Void, "glRasterSamplesEXT", [(GLuint, "samples"), (GLboolean, "fixedsamplelocations")]), # GL_EXT_secondary_color GlFunction(Void, "glSecondaryColor3bEXT", [(GLbyte, "red"), (GLbyte, "green"), (GLbyte, "blue")]), GlFunction(Void, "glSecondaryColor3bvEXT", [(Array(Const(GLbyte), 3), "v")]), GlFunction(Void, "glSecondaryColor3dEXT", [(GLdouble, "red"), (GLdouble, "green"), (GLdouble, "blue")]), GlFunction(Void, "glSecondaryColor3dvEXT", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glSecondaryColor3fEXT", [(GLfloat, "red"), (GLfloat, "green"), (GLfloat, "blue")]), GlFunction(Void, "glSecondaryColor3fvEXT", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glSecondaryColor3iEXT", [(GLint, "red"), (GLint, "green"), (GLint, "blue")]), GlFunction(Void, "glSecondaryColor3ivEXT", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glSecondaryColor3sEXT", [(GLshort, "red"), (GLshort, "green"), (GLshort, "blue")]), GlFunction(Void, "glSecondaryColor3svEXT", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glSecondaryColor3ubEXT", [(GLubyte, "red"), (GLubyte, "green"), (GLubyte, "blue")]), GlFunction(Void, "glSecondaryColor3ubvEXT", [(Array(Const(GLubyte), 3), "v")]), GlFunction(Void, "glSecondaryColor3uiEXT", [(GLuint, "red"), (GLuint, "green"), (GLuint, "blue")]), GlFunction(Void, "glSecondaryColor3uivEXT", [(Array(Const(GLuint), 3), "v")]), GlFunction(Void, "glSecondaryColor3usEXT", [(GLushort, "red"), (GLushort, "green"), (GLushort, "blue")]), GlFunction(Void, "glSecondaryColor3usvEXT", [(Array(Const(GLushort), 3), "v")]), GlFunction(Void, "glSecondaryColorPointerEXT", [(size_bgra, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_EXT_separate_shader_objects GlFunction(Void, "glUseShaderProgramEXT", [(GLenum, "type"), (GLprogram, "program")]), GlFunction(Void, "glActiveProgramEXT", [(GLprogram, "program")]), GlFunction(GLprogram, "glCreateShaderProgramEXT", [(GLenum, "type"), (GLstringConst, "string")]), GlFunction(Void, "glActiveShaderProgramEXT", [(GLpipeline, "pipeline"), (GLprogram, "program")]), GlFunction(Void, "glBindProgramPipelineEXT", [(GLpipeline, "pipeline")]), GlFunction(GLprogram, "glCreateShaderProgramvEXT", [(GLenum, "type"), (GLsizei, "count"), (Const(Array(GLstringConst, "count")), "strings")]), GlFunction(Void, "glDeleteProgramPipelinesEXT", [(GLsizei, "n"), (Array(Const(GLuint), "n"), "pipelines")]), GlFunction(Void, "glGenProgramPipelinesEXT", [(GLsizei, "n"), Out(Array(GLpipeline, "n"), "pipelines")]), GlFunction(Void, "glGetProgramPipelineInfoLogEXT", [(GLpipeline, "pipeline"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(GLstring, "infoLog")], sideeffects=False), GlFunction(Void, "glGetProgramPipelineivEXT", [(GLpipeline, "pipeline"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsProgramPipelineEXT", [(GLpipeline, "pipeline")], sideeffects=False), GlFunction(Void, "glUseProgramStagesEXT", [(GLpipeline, "pipeline"), (GLbitfield_shader, "stages"), (GLprogram, "program")]), GlFunction(Void, "glValidateProgramPipelineEXT", [(GLpipeline, "pipeline")]), # GL_EXT_shader_image_load_store GlFunction(Void, "glBindImageTextureEXT", [(GLuint, "index"), (GLtexture, "texture"), (GLint, "level"), (GLboolean, "layered"), (GLint, "layer"), (GLenum, "access"), (GLint, "format")]), GlFunction(Void, "glMemoryBarrierEXT", [(GLbitfield_barrier, "barriers")]), # GL_EXT_stencil_clear_tag GlFunction(Void, "glStencilClearTagEXT", [(GLsizei, "stencilTagBits"), (GLuint, "stencilClearTag")]), # GL_EXT_stencil_two_side GlFunction(Void, "glActiveStencilFaceEXT", [(GLenum, "face")]), # GL_EXT_subtexture GlFunction(Void, "glTexSubImage1DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage1D_size(format, type, width)"), "pixels")]), GlFunction(Void, "glTexSubImage2DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage2D_size(format, type, width, height)"), "pixels")]), # GL_EXT_tessellation_shader GlFunction(Void, "glPatchParameteriEXT", [(GLenum, "pname"), (GLint, "value")]), # GL_EXT_texture3D GlFunction(Void, "glTexImage3DEXT", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glTexSubImage3DEXT", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), # GL_EXT_texture_array GlFunction(Void, "glFramebufferTextureLayerEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLint, "layer")]), # GL_EXT_texture_buffer GlFunction(Void, "glTexBufferEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer")]), GlFunction(Void, "glTexBufferRangeEXT", [(GLenum, "target"), (GLenum, "internalformat"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), # GL_EXT_texture_integer GlFunction(Void, "glTexParameterIivEXT", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexParameterIuivEXT", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLuint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetTexParameterIivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexParameterIuivEXT", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glClearColorIiEXT", [(GLint, "red"), (GLint, "green"), (GLint, "blue"), (GLint, "alpha")]), GlFunction(Void, "glClearColorIuiEXT", [(GLuint, "red"), (GLuint, "green"), (GLuint, "blue"), (GLuint, "alpha")]), # GL_EXT_texture_object GlFunction(GLboolean, "glAreTexturesResidentEXT", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures"), Out(Array(GLboolean, "n"), "residences")], sideeffects=False), GlFunction(Void, "glBindTextureEXT", [(GLenum, "target"), (GLtexture, "texture")]), GlFunction(Void, "glDeleteTexturesEXT", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures")]), GlFunction(Void, "glGenTexturesEXT", [(GLsizei, "n"), Out(Array(GLtexture, "n"), "textures")]), GlFunction(GLboolean, "glIsTextureEXT", [(GLtexture, "texture")], sideeffects=False), GlFunction(Void, "glPrioritizeTexturesEXT", [(GLsizei, "n"), (Array(Const(GLtexture), "n"), "textures"), (Array(Const(GLclampf), "n"), "priorities")]), # GL_EXT_texture_perturb_normal GlFunction(Void, "glTextureNormalEXT", [(GLenum, "mode")]), # GL_EXT_texture_storage GlFunction(Void, "glTexStorage1DEXT", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width")]), GlFunction(Void, "glTexStorage2DEXT", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glTexStorage3DEXT", [(GLenum, "target"), (GLsizei, "levels"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), # GL_EXT_texture_view GlFunction(Void, "glTextureViewEXT", [(GLtexture, "texture"), (GLenum, "target"), (GLtexture, "origtexture"), (GLenum, "internalformat"), (GLuint, "minlevel"), (GLuint, "numlevels"), (GLuint, "minlayer"), (GLuint, "numlayers")]), # GL_EXT_timer_query GlFunction(Void, "glGetQueryObjecti64vEXT", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetQueryObjectui64vEXT", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_EXT_transform_feedback GlFunction(Void, "glBeginTransformFeedbackEXT", [(GLenum_mode, "primitiveMode")]), GlFunction(Void, "glEndTransformFeedbackEXT", []), GlFunction(Void, "glBindBufferRangeEXT", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glBindBufferOffsetEXT", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset")]), GlFunction(Void, "glBindBufferBaseEXT", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer")]), GlFunction(Void, "glTransformFeedbackVaryingsEXT", [(GLprogram, "program"), (GLsizei, "count"), (Array(Const(GLstringConst), "count"), "varyings"), (GLenum, "bufferMode")]), GlFunction(Void, "glGetTransformFeedbackVaryingEXT", [(GLprogram, "program"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLsizei), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLchar, "length", "name")], sideeffects=False), # GL_EXT_vertex_array GlFunction(Void, "glArrayElementEXT", [(GLint, "i")]), GlFunction(Void, "glColorPointerEXT", [(size_bgra, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLsizei, "count"), (GLpointerConst, "pointer")]), GlFunction(Void, "glDrawArraysEXT", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count")]), GlFunction(Void, "glEdgeFlagPointerEXT", [(GLsizei, "stride"), (GLsizei, "count"), (OpaquePointer(Const(GLboolean)), "pointer")]), GlFunction(Void, "glGetPointervEXT", [(GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), GlFunction(Void, "glIndexPointerEXT", [(GLenum, "type"), (GLsizei, "stride"), (GLsizei, "count"), (GLpointerConst, "pointer")]), GlFunction(Void, "glNormalPointerEXT", [(GLenum, "type"), (GLsizei, "stride"), (GLsizei, "count"), (GLpointerConst, "pointer")]), GlFunction(Void, "glTexCoordPointerEXT", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLsizei, "count"), (GLpointerConst, "pointer")]), GlFunction(Void, "glVertexPointerEXT", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLsizei, "count"), (GLpointerConst, "pointer")]), # GL_EXT_vertex_attrib_64bit GlFunction(Void, "glVertexAttribL1dEXT", [(GLuint, "index"), (GLdouble, "x")]), GlFunction(Void, "glVertexAttribL2dEXT", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexAttribL3dEXT", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexAttribL4dEXT", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexAttribL1dvEXT", [(GLuint, "index"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glVertexAttribL2dvEXT", [(GLuint, "index"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertexAttribL3dvEXT", [(GLuint, "index"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertexAttribL4dvEXT", [(GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertexAttribLPointerEXT", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (Blob(Const(GLvoid), "size"), "pointer")]), GlFunction(Void, "glGetVertexAttribLdvEXT", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_EXT_vertex_shader GlFunction(Void, "glBeginVertexShaderEXT", []), GlFunction(Void, "glEndVertexShaderEXT", []), GlFunction(Void, "glBindVertexShaderEXT", [(GLuint, "id")]), GlFunction(GLuint, "glGenVertexShadersEXT", [(GLuint, "range")]), GlFunction(Void, "glDeleteVertexShaderEXT", [(GLuint, "id")]), GlFunction(Void, "glShaderOp1EXT", [(GLenum, "op"), (GLuint, "res"), (GLuint, "arg1")]), GlFunction(Void, "glShaderOp2EXT", [(GLenum, "op"), (GLuint, "res"), (GLuint, "arg1"), (GLuint, "arg2")]), GlFunction(Void, "glShaderOp3EXT", [(GLenum, "op"), (GLuint, "res"), (GLuint, "arg1"), (GLuint, "arg2"), (GLuint, "arg3")]), GlFunction(Void, "glSwizzleEXT", [(GLuint, "res"), (GLuint, "in"), (GLenum, "outX"), (GLenum, "outY"), (GLenum, "outZ"), (GLenum, "outW")]), GlFunction(Void, "glWriteMaskEXT", [(GLuint, "res"), (GLuint, "in"), (GLenum, "outX"), (GLenum, "outY"), (GLenum, "outZ"), (GLenum, "outW")]), GlFunction(Void, "glInsertComponentEXT", [(GLuint, "res"), (GLuint, "src"), (GLuint, "num")]), GlFunction(Void, "glExtractComponentEXT", [(GLuint, "res"), (GLuint, "src"), (GLuint, "num")]), GlFunction(GLuint, "glGenSymbolsEXT", [(GLenum, "datatype"), (GLenum, "storagetype"), (GLenum, "range"), (GLuint, "components")]), GlFunction(Void, "glSetInvariantEXT", [(GLuint, "id"), (GLenum, "type"), (OpaqueBlob(Const(GLvoid), "_glSetInvariantEXT_size(id, type)"), "addr")]), GlFunction(Void, "glSetLocalConstantEXT", [(GLuint, "id"), (GLenum, "type"), (OpaqueBlob(Const(GLvoid), "_glSetLocalConstantEXT_size(id, type)"), "addr")]), GlFunction(Void, "glVariantbvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLbyte), "_glVariantbvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantsvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLshort), "_glVariantsvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantivEXT", [(GLuint, "id"), (OpaqueArray(Const(GLint), "_glVariantivEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantfvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLfloat), "_glVariantfvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantdvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLdouble), "_glVariantdvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantubvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLubyte), "_glVariantubvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantusvEXT", [(GLuint, "id"), (OpaqueArray(Const(GLushort), "_glVariantusvEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantuivEXT", [(GLuint, "id"), (OpaqueArray(Const(GLuint), "_glVariantuivEXT_size(id)"), "addr")]), GlFunction(Void, "glVariantPointerEXT", [(GLuint, "id"), (GLenum, "type"), (GLuint, "stride"), (OpaqueBlob(Const(GLvoid), "_glVariantPointerEXT_size(id, type, stride)"), "addr")]), GlFunction(Void, "glEnableVariantClientStateEXT", [(GLuint, "id")]), GlFunction(Void, "glDisableVariantClientStateEXT", [(GLuint, "id")]), GlFunction(GLuint, "glBindLightParameterEXT", [(GLenum, "light"), (GLenum, "value")]), GlFunction(GLuint, "glBindMaterialParameterEXT", [(GLenum, "face"), (GLenum, "value")]), GlFunction(GLuint, "glBindTexGenParameterEXT", [(GLenum, "unit"), (GLenum, "coord"), (GLenum, "value")]), GlFunction(GLuint, "glBindTextureUnitParameterEXT", [(GLenum, "unit"), (GLenum, "value")]), GlFunction(GLuint, "glBindParameterEXT", [(GLenum, "value")]), GlFunction(GLboolean, "glIsVariantEnabledEXT", [(GLuint, "id"), (GLenum, "cap")], sideeffects=False), GlFunction(Void, "glGetVariantBooleanvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLboolean, "_glGetVariantBooleanvEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetVariantIntegervEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLint, "_glGetVariantIntegervEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetVariantFloatvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLfloat, "_glGetVariantFloatvEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetVariantPointervEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLpointer, "_glGetVariantPointervEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetInvariantBooleanvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLboolean, "_glGetInvariantBooleanvEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetInvariantIntegervEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLint, "_glGetInvariantIntegervEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetInvariantFloatvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLfloat, "_glGetInvariantFloatvEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetLocalConstantBooleanvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLboolean, "_glGetLocalConstantBooleanvEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetLocalConstantIntegervEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLint, "_glGetLocalConstantIntegervEXT_size(id)"), "data")], sideeffects=False), GlFunction(Void, "glGetLocalConstantFloatvEXT", [(GLuint, "id"), (GLenum, "value"), Out(OpaqueArray(GLfloat, "_glGetLocalConstantFloatvEXT_size(id)"), "data")], sideeffects=False), # GL_EXT_vertex_weighting GlFunction(Void, "glVertexWeightfEXT", [(GLfloat, "weight")]), GlFunction(Void, "glVertexWeightfvEXT", [(Pointer(Const(GLfloat)), "weight")]), GlFunction(Void, "glVertexWeightPointerEXT", [(GLsizei, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_EXT_x11_sync_object GlFunction(GLsync, "glImportSyncEXT", [(GLenum, "external_sync_type"), (GLintptr, "external_sync"), (GLbitfield, "flags")]), # GL_GREMEDY_frame_terminator GlFunction(Void, "glFrameTerminatorGREMEDY", []), # GL_GREMEDY_string_marker GlFunction(Void, "glStringMarkerGREMEDY", [(GLsizei, "len"), (String(Const(GLvoid), "len > 0 ? len : strlen((const char *)string)"), "string")], sideeffects=True), # GL_HP_image_transform GlFunction(Void, "glImageTransformParameteriHP", [(GLenum, "target"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glImageTransformParameterfHP", [(GLenum, "target"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glImageTransformParameterivHP", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glImageTransformParameterfvHP", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetImageTransformParameterivHP", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetImageTransformParameterfvHP", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_IBM_multimode_draw_arrays GlFunction(Void, "glMultiModeDrawArraysIBM", [(Array(Const(GLenum_mode), "primcount"), "mode"), (Array(Const(GLint), "primcount"), "first"), (Array(Const(GLsizei), "primcount"), "count"), (GLsizei, "primcount"), (GLint, "modestride")]), GlFunction(Void, "glMultiModeDrawElementsIBM", [(Array(Const(GLenum_mode), "primcount"), "mode"), (Array(Const(GLsizei), "primcount"), "count"), (GLenum, "type"), (Array(Const(GLindexBuffer("count[{i}]", "type")), "primcount"), "indices"), (GLsizei, "primcount"), (GLint, "modestride")]), # GL_IBM_vertex_array_lists GlFunction(Void, "glColorPointerListIBM", [(size_bgra, "size"), (GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glSecondaryColorPointerListIBM", [(size_bgra, "size"), (GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glEdgeFlagPointerListIBM", [(GLint, "stride"), (OpaquePointer(Opaque("const GLboolean *")), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glFogCoordPointerListIBM", [(GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glIndexPointerListIBM", [(GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glNormalPointerListIBM", [(GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glTexCoordPointerListIBM", [(GLint, "size"), (GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), GlFunction(Void, "glVertexPointerListIBM", [(GLint, "size"), (GLenum, "type"), (GLint, "stride"), (OpaquePointer(GLpointerConst), "pointer"), (GLint, "ptrstride")]), # GL_IMG_multisampled_render_to_texture GlFunction(Void, "glRenderbufferStorageMultisampleIMG", [(GLenum, "target"), (GLsizei, "samples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glFramebufferTexture2DMultisampleIMG", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLsizei, "samples")]), # GL_INGR_blend_func_separate GlFunction(Void, "glBlendFuncSeparateINGR", [(GLenum, "sfactorRGB"), (GLenum, "dfactorRGB"), (GLenum, "sfactorAlpha"), (GLenum, "dfactorAlpha")]), # GL_INTEL_map_texture GlFunction(Void, "glSyncTextureINTEL", [(GLtexture, "texture")]), GlFunction(Void, "glUnmapTexture2DINTEL", [(GLtexture, "texture"), (GLint, "level")]), GlFunction(OpaquePointer(GLvoid), "glMapTexture2DINTEL", [(GLtexture, "texture"), (GLint, "level"), (GLbitfield_access, "access"), Out(Pointer(GLint), "stride"), Out(Pointer(GLenum), "layout")]), # GL_INTEL_parallel_arrays GlFunction(Void, "glVertexPointervINTEL", [(GLint, "size"), (GLenum, "type"), (OpaqueArray(GLpointerConst, "size"), "pointer")]), GlFunction(Void, "glNormalPointervINTEL", [(GLenum, "type"), (OpaqueArray(GLpointerConst, "size"), "pointer")]), GlFunction(Void, "glColorPointervINTEL", [(size_bgra, "size"), (GLenum, "type"), (OpaqueArray(GLpointerConst, "size"), "pointer")]), GlFunction(Void, "glTexCoordPointervINTEL", [(GLint, "size"), (GLenum, "type"), (OpaqueArray(GLpointerConst, "size"), "pointer")]), # GL_INTEL_performance_query GlFunction(Void, "glBeginPerfQueryINTEL", [(GLuint, "queryHandle")], sideeffects=False), GlFunction(Void, "glCreatePerfQueryINTEL", [(GLuint, "queryId"), Out(Pointer(GLuint), "queryHandle")], sideeffects=False), GlFunction(Void, "glDeletePerfQueryINTEL", [(GLuint, "queryHandle")], sideeffects=False), GlFunction(Void, "glEndPerfQueryINTEL", [(GLuint, "queryHandle")], sideeffects=False), GlFunction(Void, "glGetFirstPerfQueryIdINTEL", [Out(Pointer(GLuint), "queryId")], sideeffects=False), GlFunction(Void, "glGetNextPerfQueryIdINTEL", [(GLuint, "queryId"), Out(Pointer(GLuint), "nextQueryId")], sideeffects=False), GlFunction(Void, "glGetPerfCounterInfoINTEL", [(GLuint, "queryId"), (GLuint, "counterId"), (GLuint, "counterNameLength"), Out(GLstring, "counterName"), (GLuint, "counterDescLength"), Out(GLstring, "counterDesc"), Out(Pointer(GLuint), "counterOffset"), Out(Pointer(GLuint), "counterDataSize"), Out(Pointer(GLuint), "counterTypeEnum"), Out(Pointer(GLuint), "counterDataTypeEnum"), Out(Pointer(GLuint64), "rawCounterMaxValue")], sideeffects=False), GlFunction(Void, "glGetPerfQueryDataINTEL", [(GLuint, "queryHandle"), (GLuint, "flags"), (GLsizei, "dataSize"), Out(OpaqueBlob(GLvoid, "datasize"), "data"), Out(Pointer(GLuint), "bytesWritten")], sideeffects=False), GlFunction(Void, "glGetPerfQueryIdByNameINTEL", [(GLstring, "queryName"), Out(Pointer(GLuint), "queryId")], sideeffects=False), GlFunction(Void, "glGetPerfQueryInfoINTEL", [(GLuint, "queryId"), (GLuint, "queryNameLength"), Out(GLstring, "queryName"), Out(Pointer(GLuint), "dataSize"), Out(Pointer(GLuint), "noCounters"), Out(Pointer(GLuint), "noInstances"), Out(Pointer(GLuint), "capsMask")], sideeffects=False), # GL_KHR_blend_equation_advanced GlFunction(Void, "glBlendBarrierKHR", []), # GL_KHR_debug GlFunction(Void, "glDebugMessageControl", [(GLenum, "source"), (GLenum, "type"), (GLenum, "severity"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "ids"), (GLboolean, "enabled")], sideeffects=True), GlFunction(Void, "glDebugMessageInsert", [(GLenum, "source"), (GLenum, "type"), (GLuint, "id"), (GLenum, "severity"), (GLsizei, "length"), InGlString(GLchar, "length", "buf")], sideeffects=True), GlFunction(Void, "glDebugMessageCallback", [(GLDEBUGPROC, "callback"), (OpaquePointer(Const(Void)), "userParam")], sideeffects=False), GlFunction(GLuint, "glGetDebugMessageLog", [(GLuint, "count"), (GLsizei, "bufsize"), Out(Array(GLenum, "count"), "sources"), Out(Array(GLenum, "count"), "types"), Out(Array(GLuint, "count"), "ids"), Out(Array(GLenum, "count"), "severities"), Out(Array(GLsizei, "count"), "lengths"), Out(String(GLchar, "_glGetDebugMessageLog_length(messageLog, lengths, _result)"), "messageLog")], sideeffects=False, fail=0), GlFunction(Void, "glPushDebugGroup", [(GLenum, "source"), (GLuint, "id"), (GLsizei, "length"), InGlString(GLchar, "length", "message")], sideeffects=True), GlFunction(Void, "glPopDebugGroup", [], sideeffects=True), GlFunction(Void, "glObjectLabel", [(GLenum, "identifier"), (GLuint, "name"), (GLsizei, "length"), InGlString(GLchar, "length", "label")], sideeffects=True), GlFunction(Void, "glGetObjectLabel", [(GLenum, "identifier"), (GLuint, "name"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "label")], sideeffects=False), GlFunction(Void, "glObjectPtrLabel", [(OpaquePointer(Const(Void)), "ptr"), (GLsizei, "length"), InGlString(GLchar, "length", "label")], sideeffects=True), GlFunction(Void, "glGetObjectPtrLabel", [(OpaquePointer(Const(Void)), "ptr"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), OutGlString(GLchar, "length", "label")], sideeffects=False), # GL_KHR_robustness GlFunction(GLenum, "glGetGraphicsResetStatus", [], sideeffects=False), GlFunction(Void, "glReadnPixels", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (GLsizei, "bufSize"), Out(OpaqueBlob(GLvoid, "bufSize"), "data")]), GlFunction(Void, "glGetnUniformfv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLfloat, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnUniformiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLint, "bufSize"), "params")], sideeffects=False), GlFunction(Void, "glGetnUniformuiv", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "bufSize"), Out(Array(GLuint, "bufSize"), "params")], sideeffects=False), # GL_KTX_buffer_region # XXX: http://www.west.net/~brittain/3dsmax2.htm does not mention EXT suffix GlFunction(GLregion, "glNewBufferRegion", [(GLenum, "type")]), GlFunction(Void, "glDeleteBufferRegion", [(GLregion, "region")]), GlFunction(Void, "glReadBufferRegion", [(GLregion, "region"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glDrawBufferRegion", [(GLregion, "region"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "xDest"), (GLint, "yDest")]), GlFunction(GLuint, "glBufferRegionEnabled", [], sideeffects=False), # GL_MESA_resize_buffers GlFunction(Void, "glResizeBuffersMESA", []), # GL_MESA_window_pos GlFunction(Void, "glWindowPos2dMESA", [(GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glWindowPos2dvMESA", [(Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glWindowPos2fMESA", [(GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glWindowPos2fvMESA", [(Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glWindowPos2iMESA", [(GLint, "x"), (GLint, "y")]), GlFunction(Void, "glWindowPos2ivMESA", [(Array(Const(GLint), 2), "v")]), GlFunction(Void, "glWindowPos2sMESA", [(GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glWindowPos2svMESA", [(Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glWindowPos3dMESA", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glWindowPos3dvMESA", [(Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glWindowPos3fMESA", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glWindowPos3fvMESA", [(Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glWindowPos3iMESA", [(GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glWindowPos3ivMESA", [(Array(Const(GLint), 3), "v")]), GlFunction(Void, "glWindowPos3sMESA", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glWindowPos3svMESA", [(Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glWindowPos4dMESA", [(GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glWindowPos4dvMESA", [(Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glWindowPos4fMESA", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glWindowPos4fvMESA", [(Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glWindowPos4iMESA", [(GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glWindowPos4ivMESA", [(Array(Const(GLint), 4), "v")]), GlFunction(Void, "glWindowPos4sMESA", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glWindowPos4svMESA", [(Array(Const(GLshort), 4), "v")]), # GL_NVX_conditional_render GlFunction(Void, "glBeginConditionalRenderNVX", [(GLquery, "id")]), GlFunction(Void, "glEndConditionalRenderNVX", []), # GL_NV_bindless_multi_draw_indirect GlFunction(Void, "glMultiDrawArraysIndirectBindlessNV", [(GLenum_mode, "mode"), (GLpointerConst, "indirect"), (GLsizei, "drawCount"), (GLsizei, "stride"), (GLint, "vertexBufferCount")]), GlFunction(Void, "glMultiDrawElementsIndirectBindlessNV", [(GLenum_mode, "mode"), (GLenum, "type"), (GLpointerConst, "indirect"), (GLsizei, "drawCount"), (GLsizei, "stride"), (GLint, "vertexBufferCount")]), # GL_NV_bindless_texture GlFunction(GLtextureHandle, "glGetTextureHandleNV", [(GLtexture, "texture")]), GlFunction(GLtextureHandle, "glGetTextureSamplerHandleNV", [(GLtexture, "texture"), (GLsampler, "sampler")]), GlFunction(Void, "glMakeTextureHandleResidentNV", [(GLtextureHandle, "handle")]), GlFunction(Void, "glMakeTextureHandleNonResidentNV", [(GLtextureHandle, "handle")]), GlFunction(GLtextureHandle, "glGetImageHandleNV", [(GLtexture, "texture"), (GLint, "level"), (GLboolean, "layered"), (GLint, "layer"), (GLenum, "format")]), GlFunction(Void, "glMakeImageHandleResidentNV", [(GLtextureHandle, "handle"), (GLenum, "access")]), GlFunction(Void, "glMakeImageHandleNonResidentNV", [(GLtextureHandle, "handle")]), GlFunction(Void, "glUniformHandleui64NV", [(GLlocation, "location"), (GLtextureHandle, "value")]), GlFunction(Void, "glUniformHandleui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLtextureHandle), "count"), "value")]), GlFunction(Void, "glProgramUniformHandleui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLtextureHandle, "value")]), GlFunction(Void, "glProgramUniformHandleui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLtextureHandle), "count"), "values")]), GlFunction(GLboolean, "glIsTextureHandleResidentNV", [(GLtextureHandle, "handle")], sideeffects=False), GlFunction(GLboolean, "glIsImageHandleResidentNV", [(GLtextureHandle, "handle")], sideeffects=False), # GL_NV_blend_equation_advanced GlFunction(Void, "glBlendParameteriNV", [(GLenum, "pname"), (GLint, "value")]), GlFunction(Void, "glBlendBarrierNV", []), # GL_NV_conditional_render GlFunction(Void, "glBeginConditionalRenderNV", [(GLquery, "id"), (GLenum, "mode")]), GlFunction(Void, "glEndConditionalRenderNV", []), # GL_NV_copy_image GlFunction(Void, "glCopyImageSubDataNV", [(GLname("srcTarget"), "srcName"), (GLenum, "srcTarget"), (GLint, "srcLevel"), (GLint, "srcX"), (GLint, "srcY"), (GLint, "srcZ"), (GLname("dstTarget"), "dstName"), (GLenum, "dstTarget"), (GLint, "dstLevel"), (GLint, "dstX"), (GLint, "dstY"), (GLint, "dstZ"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), # GL_NV_coverage_sample GlFunction(Void, "glCoverageMaskNV", [(GLboolean, "mask")]), GlFunction(Void, "glCoverageOperationNV", [(GLenum, "operation")]), # GL_NV_depth_buffer_float GlFunction(Void, "glDepthRangedNV", [(GLdouble, "zNear"), (GLdouble, "zFar")]), GlFunction(Void, "glClearDepthdNV", [(GLdouble, "depth")]), GlFunction(Void, "glDepthBoundsdNV", [(GLdouble, "zmin"), (GLdouble, "zmax")]), # GL_NV_draw_buffers GlFunction(Void, "glDrawBuffersNV", [(GLsizei, "n"), (Array(Const(GLenum), "n"), "bufs")]), # GL_NV_draw_texture GlFunction(Void, "glDrawTextureNV", [(GLtexture, "texture"), (GLsampler, "sampler"), (GLfloat, "x0"), (GLfloat, "y0"), (GLfloat, "x1"), (GLfloat, "y1"), (GLfloat, "z"), (GLfloat, "s0"), (GLfloat, "t0"), (GLfloat, "s1"), (GLfloat, "t1")]), # GL_NV_evaluators GlFunction(Void, "glMapControlPointsNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "type"), (GLsizei, "ustride"), (GLsizei, "vstride"), (GLint, "uorder"), (GLint, "vorder"), (GLboolean, "packed"), (OpaqueBlob(Const(GLvoid), "_glMapControlPointsNV_size(target, uorder, vorder)"), "points")]), GlFunction(Void, "glMapParameterivNV", [(GLenum, "target"), (GLenum, "pname"), (OpaqueArray(Const(GLint), "_glMapParameterivNV_size(target, pname)"), "params")]), GlFunction(Void, "glMapParameterfvNV", [(GLenum, "target"), (GLenum, "pname"), (OpaqueArray(Const(GLfloat), "_glMapParameterfvNV_size(target, pname)"), "params")]), GlFunction(Void, "glGetMapControlPointsNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "type"), (GLsizei, "ustride"), (GLsizei, "vstride"), (GLboolean, "packed"), Out(OpaqueBlob(GLvoid, "_glGetMapControlPointsNV_size(target)"), "points")], sideeffects=False), GlFunction(Void, "glGetMapParameterivNV", [(GLenum, "target"), (GLenum, "pname"), Out(OpaqueArray(GLint, "_glGetMapParameterivNV_size(target, pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMapParameterfvNV", [(GLenum, "target"), (GLenum, "pname"), Out(OpaqueArray(GLfloat, "_glGetMapParameterfvNV_size(target, pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMapAttribParameterivNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetMapAttribParameterfvNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glEvalMapsNV", [(GLenum, "target"), (GLenum, "mode")]), # GL_NV_explicit_multisample GlFunction(Void, "glGetMultisamplefvNV", [(GLenum, "pname"), (GLuint, "index"), Out(Array(GLfloat, 2), "val")], sideeffects=False), GlFunction(Void, "glSampleMaskIndexedNV", [(GLuint, "index"), (GLbitfield, "mask")]), GlFunction(Void, "glTexRenderbufferNV", [(GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), # GL_NV_fence GlFunction(Void, "glDeleteFencesNV", [(GLsizei, "n"), (Array(Const(GLfence), "n"), "fences")]), GlFunction(Void, "glGenFencesNV", [(GLsizei, "n"), Out(Array(GLfence, "n"), "fences")]), GlFunction(GLboolean, "glIsFenceNV", [(GLfence, "fence")], sideeffects=False), GlFunction(GLboolean, "glTestFenceNV", [(GLfence, "fence")]), GlFunction(Void, "glGetFenceivNV", [(GLfence, "fence"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glFinishFenceNV", [(GLfence, "fence")]), GlFunction(Void, "glSetFenceNV", [(GLfence, "fence"), (GLenum, "condition")]), # GL_NV_fragment_program GlFunction(Void, "glProgramNamedParameter4fNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glProgramNamedParameter4dNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glProgramNamedParameter4fvNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glProgramNamedParameter4dvNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glGetProgramNamedParameterdvNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), Out(Array(GLdouble, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramNamedParameterfvNV", [(GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "name"), Out(Array(GLfloat, 4), "params")], sideeffects=False), # GL_NV_framebuffer_blit GlFunction(Void, "glBlitFramebufferNV", [(GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield_attrib, "mask"), (GLenum, "filter")]), # GL_NV_framebuffer_mixed_samples GlFunction(Void, "glCoverageModulationTableNV", [(GLsizei, "n"), (Array(Const(GLfloat), "n"), "v")]), GlFunction(Void, "glGetCoverageModulationTableNV", [(GLsizei, "bufsize"), Out(Array(GLfloat, "bufsize"), "v")], sideeffects=False), GlFunction(Void, "glCoverageModulationNV", [(GLenum, "components")]), # GL_NV_framebuffer_multisample_coverage GlFunction(Void, "glRenderbufferStorageMultisampleCoverageNV", [(GLenum, "target"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), # GL_NV_geometry_program4 GlFunction(Void, "glProgramVertexLimitNV", [(GLenum, "target"), (GLint, "limit")]), GlFunction(Void, "glFramebufferTextureFaceEXT", [(GLenum, "target"), (GLenum, "attachment"), (GLtexture, "texture"), (GLint, "level"), (GLenum, "face")]), # GL_NV_gpu_program4 GlFunction(Void, "glProgramLocalParameterI4iNV", [(GLenum, "target"), (GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glProgramLocalParameterI4ivNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLint), 4), "params")]), GlFunction(Void, "glProgramLocalParametersI4ivNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "params")]), GlFunction(Void, "glProgramLocalParameterI4uiNV", [(GLenum, "target"), (GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z"), (GLuint, "w")]), GlFunction(Void, "glProgramLocalParameterI4uivNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLuint), 4), "params")]), GlFunction(Void, "glProgramLocalParametersI4uivNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "params")]), GlFunction(Void, "glProgramEnvParameterI4iNV", [(GLenum, "target"), (GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glProgramEnvParameterI4ivNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLint), 4), "params")]), GlFunction(Void, "glProgramEnvParametersI4ivNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLint), "count*4"), "params")]), GlFunction(Void, "glProgramEnvParameterI4uiNV", [(GLenum, "target"), (GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z"), (GLuint, "w")]), GlFunction(Void, "glProgramEnvParameterI4uivNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLuint), 4), "params")]), GlFunction(Void, "glProgramEnvParametersI4uivNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLuint), "count*4"), "params")]), GlFunction(Void, "glGetProgramLocalParameterIivNV", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLint, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramLocalParameterIuivNV", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLuint, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramEnvParameterIivNV", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLint, 4), "params")], sideeffects=False), GlFunction(Void, "glGetProgramEnvParameterIuivNV", [(GLenum, "target"), (GLuint, "index"), Out(Array(GLuint, 4), "params")], sideeffects=False), # GL_NV_gpu_program5 GlFunction(Void, "glProgramSubroutineParametersuivNV", [(GLenum, "target"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "params")]), GlFunction(Void, "glGetProgramSubroutineParameteruivNV", [(GLenum, "target"), (GLuint, "index"), Out(Pointer(GLuint), "param")], sideeffects=False), # GL_NV_gpu_shader5 GlFunction(Void, "glUniform1i64NV", [(GLlocation, "location"), (GLint64EXT, "x")]), GlFunction(Void, "glUniform2i64NV", [(GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y")]), GlFunction(Void, "glUniform3i64NV", [(GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z")]), GlFunction(Void, "glUniform4i64NV", [(GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z"), (GLint64EXT, "w")]), GlFunction(Void, "glUniform1i64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count"), "value")]), GlFunction(Void, "glUniform2i64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*2"), "value")]), GlFunction(Void, "glUniform3i64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*3"), "value")]), GlFunction(Void, "glUniform4i64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*4"), "value")]), GlFunction(Void, "glUniform1ui64NV", [(GLlocation, "location"), (GLuint64EXT, "x")]), GlFunction(Void, "glUniform2ui64NV", [(GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y")]), GlFunction(Void, "glUniform3ui64NV", [(GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z")]), GlFunction(Void, "glUniform4ui64NV", [(GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z"), (GLuint64EXT, "w")]), GlFunction(Void, "glUniform1ui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count"), "value")]), GlFunction(Void, "glUniform2ui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*2"), "value")]), GlFunction(Void, "glUniform3ui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*3"), "value")]), GlFunction(Void, "glUniform4ui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*4"), "value")]), GlFunction(Void, "glGetUniformi64vNV", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaqueArray(GLint64EXT, "_glGetUniformi64vNV_size(location)"), "params")], sideeffects=False), GlFunction(Void, "glProgramUniform1i64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLint64EXT, "x")]), GlFunction(Void, "glProgramUniform2i64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y")]), GlFunction(Void, "glProgramUniform3i64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z")]), GlFunction(Void, "glProgramUniform4i64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z"), (GLint64EXT, "w")]), GlFunction(Void, "glProgramUniform1i64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count"), "value")]), GlFunction(Void, "glProgramUniform2i64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*2"), "value")]), GlFunction(Void, "glProgramUniform3i64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*3"), "value")]), GlFunction(Void, "glProgramUniform4i64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLint64EXT), "count*4"), "value")]), GlFunction(Void, "glProgramUniform1ui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLuint64EXT, "x")]), GlFunction(Void, "glProgramUniform2ui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y")]), GlFunction(Void, "glProgramUniform3ui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z")]), GlFunction(Void, "glProgramUniform4ui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z"), (GLuint64EXT, "w")]), GlFunction(Void, "glProgramUniform1ui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count"), "value")]), GlFunction(Void, "glProgramUniform2ui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*2"), "value")]), GlFunction(Void, "glProgramUniform3ui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*3"), "value")]), GlFunction(Void, "glProgramUniform4ui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count*4"), "value")]), # GL_NV_half_float GlFunction(Void, "glVertex2hNV", [(GLhalfNV, "x"), (GLhalfNV, "y")]), GlFunction(Void, "glVertex2hvNV", [(Array(Const(GLhalfNV), 2), "v")]), GlFunction(Void, "glVertex3hNV", [(GLhalfNV, "x"), (GLhalfNV, "y"), (GLhalfNV, "z")]), GlFunction(Void, "glVertex3hvNV", [(Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glVertex4hNV", [(GLhalfNV, "x"), (GLhalfNV, "y"), (GLhalfNV, "z"), (GLhalfNV, "w")]), GlFunction(Void, "glVertex4hvNV", [(Array(Const(GLhalfNV), 4), "v")]), GlFunction(Void, "glNormal3hNV", [(GLhalfNV, "nx"), (GLhalfNV, "ny"), (GLhalfNV, "nz")]), GlFunction(Void, "glNormal3hvNV", [(Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glColor3hNV", [(GLhalfNV, "red"), (GLhalfNV, "green"), (GLhalfNV, "blue")]), GlFunction(Void, "glColor3hvNV", [(Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glColor4hNV", [(GLhalfNV, "red"), (GLhalfNV, "green"), (GLhalfNV, "blue"), (GLhalfNV, "alpha")]), GlFunction(Void, "glColor4hvNV", [(Array(Const(GLhalfNV), 4), "v")]), GlFunction(Void, "glTexCoord1hNV", [(GLhalfNV, "s")]), GlFunction(Void, "glTexCoord1hvNV", [(Pointer(Const(GLhalfNV)), "v")]), GlFunction(Void, "glTexCoord2hNV", [(GLhalfNV, "s"), (GLhalfNV, "t")]), GlFunction(Void, "glTexCoord2hvNV", [(Array(Const(GLhalfNV), 2), "v")]), GlFunction(Void, "glTexCoord3hNV", [(GLhalfNV, "s"), (GLhalfNV, "t"), (GLhalfNV, "r")]), GlFunction(Void, "glTexCoord3hvNV", [(Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glTexCoord4hNV", [(GLhalfNV, "s"), (GLhalfNV, "t"), (GLhalfNV, "r"), (GLhalfNV, "q")]), GlFunction(Void, "glTexCoord4hvNV", [(Array(Const(GLhalfNV), 4), "v")]), GlFunction(Void, "glMultiTexCoord1hNV", [(GLenum, "target"), (GLhalfNV, "s")]), GlFunction(Void, "glMultiTexCoord1hvNV", [(GLenum, "target"), (Pointer(Const(GLhalfNV)), "v")]), GlFunction(Void, "glMultiTexCoord2hNV", [(GLenum, "target"), (GLhalfNV, "s"), (GLhalfNV, "t")]), GlFunction(Void, "glMultiTexCoord2hvNV", [(GLenum, "target"), (Array(Const(GLhalfNV), 2), "v")]), GlFunction(Void, "glMultiTexCoord3hNV", [(GLenum, "target"), (GLhalfNV, "s"), (GLhalfNV, "t"), (GLhalfNV, "r")]), GlFunction(Void, "glMultiTexCoord3hvNV", [(GLenum, "target"), (Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glMultiTexCoord4hNV", [(GLenum, "target"), (GLhalfNV, "s"), (GLhalfNV, "t"), (GLhalfNV, "r"), (GLhalfNV, "q")]), GlFunction(Void, "glMultiTexCoord4hvNV", [(GLenum, "target"), (Array(Const(GLhalfNV), 4), "v")]), GlFunction(Void, "glFogCoordhNV", [(GLhalfNV, "fog")]), GlFunction(Void, "glFogCoordhvNV", [(Pointer(Const(GLhalfNV)), "fog")]), GlFunction(Void, "glSecondaryColor3hNV", [(GLhalfNV, "red"), (GLhalfNV, "green"), (GLhalfNV, "blue")]), GlFunction(Void, "glSecondaryColor3hvNV", [(Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glVertexWeighthNV", [(GLhalfNV, "weight")]), GlFunction(Void, "glVertexWeighthvNV", [(Pointer(Const(GLhalfNV)), "weight")]), GlFunction(Void, "glVertexAttrib1hNV", [(GLuint, "index"), (GLhalfNV, "x")]), GlFunction(Void, "glVertexAttrib1hvNV", [(GLuint, "index"), (Pointer(Const(GLhalfNV)), "v")]), GlFunction(Void, "glVertexAttrib2hNV", [(GLuint, "index"), (GLhalfNV, "x"), (GLhalfNV, "y")]), GlFunction(Void, "glVertexAttrib2hvNV", [(GLuint, "index"), (Array(Const(GLhalfNV), 2), "v")]), GlFunction(Void, "glVertexAttrib3hNV", [(GLuint, "index"), (GLhalfNV, "x"), (GLhalfNV, "y"), (GLhalfNV, "z")]), GlFunction(Void, "glVertexAttrib3hvNV", [(GLuint, "index"), (Array(Const(GLhalfNV), 3), "v")]), GlFunction(Void, "glVertexAttrib4hNV", [(GLuint, "index"), (GLhalfNV, "x"), (GLhalfNV, "y"), (GLhalfNV, "z"), (GLhalfNV, "w")]), GlFunction(Void, "glVertexAttrib4hvNV", [(GLuint, "index"), (Array(Const(GLhalfNV), 4), "v")]), GlFunction(Void, "glVertexAttribs1hvNV", [(GLuint, "index"), (GLsizei, "n"), (Array(Const(GLhalfNV), "n"), "v")]), GlFunction(Void, "glVertexAttribs2hvNV", [(GLuint, "index"), (GLsizei, "n"), (Array(Const(GLhalfNV), "n"), "v")]), GlFunction(Void, "glVertexAttribs3hvNV", [(GLuint, "index"), (GLsizei, "n"), (Array(Const(GLhalfNV), "n"), "v")]), GlFunction(Void, "glVertexAttribs4hvNV", [(GLuint, "index"), (GLsizei, "n"), (Array(Const(GLhalfNV), "n"), "v")]), # GL_NV_occlusion_query GlFunction(Void, "glGenOcclusionQueriesNV", [(GLsizei, "n"), Out(Array(GLquery, "n"), "ids")]), GlFunction(Void, "glDeleteOcclusionQueriesNV", [(GLsizei, "n"), (Array(Const(GLquery), "n"), "ids")]), GlFunction(GLboolean, "glIsOcclusionQueryNV", [(GLquery, "id")], sideeffects=False), GlFunction(Void, "glBeginOcclusionQueryNV", [(GLquery, "id")]), GlFunction(Void, "glEndOcclusionQueryNV", []), GlFunction(Void, "glGetOcclusionQueryivNV", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetOcclusionQueryuivNV", [(GLquery, "id"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_NV_parameter_buffer_object GlFunction(Void, "glProgramBufferParametersfvNV", [(GLenum, "target"), (GLbuffer, "buffer"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "params")]), GlFunction(Void, "glProgramBufferParametersIivNV", [(GLenum, "target"), (GLbuffer, "buffer"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLint), "count"), "params")]), GlFunction(Void, "glProgramBufferParametersIuivNV", [(GLenum, "target"), (GLbuffer, "buffer"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLuint), "count"), "params")]), # GL_NV_path_rendering GlFunction(GLuint, "glGenPathsNV", [(GLsizei, "range")]), GlFunction(Void, "glDeletePathsNV", [(GLuint, "path"), (GLsizei, "range")]), GlFunction(GLboolean, "glIsPathNV", [(GLuint, "path")]), GlFunction(Void, "glPathCommandsNV", [(GLuint, "path"), (GLsizei, "numCommands"), (Array(Const(GLubyte), "numCommands"), "commands"), (GLsizei, "numCoords"), (GLenum, "coordType"), (Blob(Const(GLvoid), "_glPath_coords_size(numCoords, coordType)"), "coords")]), GlFunction(Void, "glPathCoordsNV", [(GLuint, "path"), (GLsizei, "numCoords"), (GLenum, "coordType"), (Blob(Const(GLvoid), "_glPath_coords_size(numCoords, coordType)"), "coords")]), GlFunction(Void, "glPathSubCommandsNV", [(GLuint, "path"), (GLsizei, "commandStart"), (GLsizei, "commandsToDelete"), (GLsizei, "numCommands"), (Array(Const(GLubyte), "numCommands"), "commands"), (GLsizei, "numCoords"), (GLenum, "coordType"), (Blob(Const(GLvoid), "_glPath_coords_size(numCoords, coordType)"), "coords")]), GlFunction(Void, "glPathSubCoordsNV", [(GLuint, "path"), (GLsizei, "coordStart"), (GLsizei, "numCoords"), (GLenum, "coordType"), (Blob(Const(GLvoid), "_glPath_coords_size(numCoords, coordType)"), "coords")]), GlFunction(Void, "glPathStringNV", [(GLuint, "path"), (GLenum, "format"), (GLsizei, "length"), (Blob(Const(GLvoid), "length"), "pathString")]), GlFunction(Void, "glPathGlyphsNV", [(GLuint, "firstPathName"), (GLenum, "fontTarget"), (Blob(Const(GLvoid), "_glPath_fontName_size(fontTarget, fontName)"), "fontName"), (GLbitfield_fontStyle, "fontStyle"), (GLsizei, "numGlyphs"), (GLenum, "type"), (Blob(Const(GLvoid), "_glPath_chardcodes_size(numGlyphs, type)"), "charcodes"), (GLenum, "handleMissingGlyphs"), (GLuint, "pathParameterTemplate"), (GLfloat, "emScale")]), GlFunction(Void, "glPathGlyphRangeNV", [(GLuint, "firstPathName"), (GLenum, "fontTarget"), (Blob(Const(GLvoid), "_glPath_fontName_size(fontTarget, fontName)"), "fontName"), (GLbitfield_fontStyle, "fontStyle"), (GLuint, "firstGlyph"), (GLsizei, "numGlyphs"), (GLenum, "handleMissingGlyphs"), (GLuint, "pathParameterTemplate"), (GLfloat, "emScale")]), GlFunction(Void, "glWeightPathsNV", [(GLuint, "resultPath"), (GLsizei, "numPaths"), (Array(Const(GLuint), "numPaths"), "paths"), (Array(Const(GLfloat), "numPaths"), "weights")]), GlFunction(Void, "glCopyPathNV", [(GLuint, "resultPath"), (GLuint, "srcPath")]), GlFunction(Void, "glInterpolatePathsNV", [(GLuint, "resultPath"), (GLuint, "pathA"), (GLuint, "pathB"), (GLfloat, "weight")]), GlFunction(Void, "glTransformPathNV", [(GLuint, "resultPath"), (GLuint, "srcPath"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(transformType)"), "transformValues")]), GlFunction(Void, "glPathParameterivNV", [(GLuint, "path"), (GLenum, "pname"), (Array(Const(GLint), "_gl_PathParameter_size(pname)"), "value")]), GlFunction(Void, "glPathParameteriNV", [(GLuint, "path"), (GLenum, "pname"), (GLint, "value")]), GlFunction(Void, "glPathParameterfvNV", [(GLuint, "path"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_PathParameter_size(pname)"), "value")]), GlFunction(Void, "glPathParameterfNV", [(GLuint, "path"), (GLenum, "pname"), (GLfloat, "value")]), GlFunction(Void, "glPathDashArrayNV", [(GLuint, "path"), (GLsizei, "dashCount"), (Array(Const(GLfloat), "dashCount"), "dashArray")]), GlFunction(Void, "glPathStencilFuncNV", [(GLenum, "func"), (GLint, "ref"), (GLuint, "mask")]), GlFunction(Void, "glPathStencilDepthOffsetNV", [(GLfloat, "factor"), (GLfloat, "units")]), GlFunction(Void, "glStencilFillPathNV", [(GLuint, "path"), (GLenum, "fillMode"), (GLuint, "mask")]), GlFunction(Void, "glStencilStrokePathNV", [(GLuint, "path"), (GLint, "reference"), (GLuint, "mask")]), GlFunction(Void, "glStencilFillPathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLenum, "fillMode"), (GLuint, "mask"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(Void, "glStencilStrokePathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLint, "reference"), (GLuint, "mask"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(Void, "glPathCoverDepthFuncNV", [(GLenum, "func")]), GlFunction(Void, "glPathColorGenNV", [(GLenum, "color"), (GLenum, "genMode"), (GLenum, "colorFormat"), (Array(Const(GLfloat), "_gl_PathColorGen_size(genMode, colorFormat)"), "coeffs")]), GlFunction(Void, "glPathTexGenNV", [(GLenum, "texCoordSet"), (GLenum, "genMode"), (GLint, "components"), (Array(Const(GLfloat), "_gl_PathTexGen_size(genMode, components)"), "coeffs")]), GlFunction(Void, "glPathFogGenNV", [(GLenum, "genMode")]), GlFunction(Void, "glCoverFillPathNV", [(GLuint, "path"), (GLenum, "coverMode")]), GlFunction(Void, "glCoverStrokePathNV", [(GLuint, "path"), (GLenum, "coverMode")]), GlFunction(Void, "glCoverFillPathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLenum, "coverMode"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(Void, "glCoverStrokePathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLenum, "coverMode"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(Void, "glGetPathParameterivNV", [(GLuint, "path"), (GLenum, "pname"), Out(Array(GLint, "_gl_GetPathParameter_size(pname)"), "value")], sideeffects=False), GlFunction(Void, "glGetPathParameterfvNV", [(GLuint, "path"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_GetPathParameter_size(pname)"), "value")], sideeffects=False), GlFunction(Void, "glGetPathCommandsNV", [(GLuint, "path"), Out(Pointer(GLubyte), "commands")], sideeffects=False), GlFunction(Void, "glGetPathCoordsNV", [(GLuint, "path"), Out(Pointer(GLfloat), "coords")], sideeffects=False), GlFunction(Void, "glGetPathDashArrayNV", [(GLuint, "path"), Out(Pointer(GLfloat), "dashArray")], sideeffects=False), GlFunction(Void, "glGetPathMetricsNV", [(GLbitfield_metricQueryMask, "metricQueryMask"), (GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLsizei, "stride"), Out(Pointer(GLfloat), "metrics")], sideeffects=False), GlFunction(Void, "glGetPathMetricRangeNV", [(GLbitfield_metricQueryMask, "metricQueryMask"), (GLuint, "firstPathName"), (GLsizei, "numPaths"), (GLsizei, "stride"), Out(Pointer(GLfloat), "metrics")], sideeffects=False), GlFunction(Void, "glGetPathSpacingNV", [(GLenum, "pathListMode"), (GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLfloat, "advanceScale"), (GLfloat, "kerningScale"), (GLenum, "transformType"), Out(Array(GLfloat, "_gl_GetPathSpacing(numPaths,transformType)"), "returnedSpacing")]), GlFunction(Void, "glGetPathColorGenivNV", [(GLenum, "color"), (GLenum, "pname"), Out(Pointer(GLint), "value")], sideeffects=False), GlFunction(Void, "glGetPathColorGenfvNV", [(GLenum, "color"), (GLenum, "pname"), Out(Pointer(GLfloat), "value")], sideeffects=False), GlFunction(Void, "glGetPathTexGenivNV", [(GLenum, "texCoordSet"), (GLenum, "pname"), Out(Pointer(GLint), "value")], sideeffects=False), GlFunction(Void, "glGetPathTexGenfvNV", [(GLenum, "texCoordSet"), (GLenum, "pname"), Out(Pointer(GLfloat), "value")], sideeffects=False), GlFunction(GLboolean, "glIsPointInFillPathNV", [(GLuint, "path"), (GLuint, "mask"), (GLfloat, "x"), (GLfloat, "y")], sideeffects=False), GlFunction(GLboolean, "glIsPointInStrokePathNV", [(GLuint, "path"), (GLfloat, "x"), (GLfloat, "y")], sideeffects=False), GlFunction(GLfloat, "glGetPathLengthNV", [(GLuint, "path"), (GLsizei, "startSegment"), (GLsizei, "numSegments")]), GlFunction(GLboolean, "glPointAlongPathNV", [(GLuint, "path"), (GLsizei, "startSegment"), (GLsizei, "numSegments"), (GLfloat, "distance"), Out(Array(GLfloat,1), "x"), Out(Array(GLfloat,1), "y"), Out(Array(GLfloat,1), "tangentX"), Out(Array(GLfloat,1), "tangentY")], sideeffects=False), GlFunction(Void, "glMatrixLoad3x2fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 6), "m")]), GlFunction(Void, "glMatrixLoad3x3fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 9), "m")]), GlFunction(Void, "glMatrixLoadTranspose3x3fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 9), "m")]), GlFunction(Void, "glMatrixMult3x2fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 6), "m")]), GlFunction(Void, "glMatrixMult3x3fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 9), "m")]), GlFunction(Void, "glMatrixMultTranspose3x3fNV", [(GLenum, "matrixMode"), (Array(Const(GLfloat), 9), "m")]), GlFunction(Void, "glStencilThenCoverFillPathNV", [(GLuint, "path"), (GLenum, "fillMode"), (GLuint, "mask"), (GLenum, "coverMode")]), GlFunction(Void, "glStencilThenCoverStrokePathNV", [(GLuint, "path"), (GLint, "reference"), (GLuint, "mask"), (GLenum, "coverMode")]), GlFunction(Void, "glStencilThenCoverFillPathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLenum, "fillMode"), (GLuint, "mask"), (GLenum, "coverMode"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(Void, "glStencilThenCoverStrokePathInstancedNV", [(GLsizei, "numPaths"), (GLenum, "pathNameType"), (Blob(Const(GLvoid), "_gl_Paths_size(numPaths, pathNameType, paths)"), "paths"), (GLuint, "pathBase"), (GLint, "reference"), (GLuint, "mask"), (GLenum, "coverMode"), (GLenum, "transformType"), (Array(Const(GLfloat), "_gl_transformType_size(numPaths, transformType)"), "transformValues")]), GlFunction(GLenum, "glPathGlyphIndexRangeNV", [(GLenum, "fontTarget"), (String(Const(GLvoid)), "fontName"), (GLbitfield, "fontStyle"), (GLuint, "pathParameterTemplate"), (GLfloat, "emScale"), (Array(GLuint, 2), "baseAndCount")]), GlFunction(GLenum, "glPathGlyphIndexArrayNV", [(GLuint, "firstPathName"), (GLenum, "fontTarget"), (String(Const(GLvoid)), "fontName"), (GLbitfield, "fontStyle"), (GLuint, "firstGlyphIndex"), (GLsizei, "numGlyphs"), (GLuint, "pathParameterTemplate"), (GLfloat, "emScale")]), GlFunction(GLenum, "glPathMemoryGlyphIndexArrayNV", [(GLuint, "firstPathName"), (GLenum, "fontTarget"), (GLsizeiptr, "fontSize"), (Blob(Const(Void), "fontSize"), "fontData"), (GLsizei, "faceIndex"), (GLuint, "firstGlyphIndex"), (GLsizei, "numGlyphs"), (GLuint, "pathParameterTemplate"), (GLfloat, "emScale")]), GlFunction(Void, "glProgramPathFragmentInputGenNV", [(GLprogram, "program"), (GLlocation, "location"), (GLenum, "genMode"), (GLint, "components"), (Array(Const(GLfloat), "_gl_PathTexGen_size(genMode, components)"), "coeffs")]), GlFunction(Void, "glGetProgramResourcefvNV", [(GLprogram, "program"), (GLenum, "programInterface"), (GLuint, "index"), (GLsizei, "propCount"), (Array(Const(GLenum), "propCount"), "props"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLfloat, "bufSize"), "params")], sideeffects=False), # GL_NV_pixel_data_range GlFunction(Void, "glPixelDataRangeNV", [(GLenum, "target"), (GLsizei, "length"), (OpaqueBlob(Const(GLvoid), "length"), "pointer")]), GlFunction(Void, "glFlushPixelDataRangeNV", [(GLenum, "target")]), # GL_NV_point_sprite GlFunction(Void, "glPointParameteriNV", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPointParameterivNV", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), # GL_NV_present_video GlFunction(Void, "glPresentFrameKeyedNV", [(GLuint, "video_slot"), (GLuint64EXT, "minPresentTime"), (GLuint, "beginPresentTimeId"), (GLuint, "presentDurationId"), (GLenum, "type"), (GLenum, "target0"), (GLuint, "fill0"), (GLuint, "key0"), (GLenum, "target1"), (GLuint, "fill1"), (GLuint, "key1")]), GlFunction(Void, "glPresentFrameDualFillNV", [(GLuint, "video_slot"), (GLuint64EXT, "minPresentTime"), (GLuint, "beginPresentTimeId"), (GLuint, "presentDurationId"), (GLenum, "type"), (GLenum, "target0"), (GLuint, "fill0"), (GLenum, "target1"), (GLuint, "fill1"), (GLenum, "target2"), (GLuint, "fill2"), (GLenum, "target3"), (GLuint, "fill3")]), GlFunction(Void, "glGetVideoivNV", [(GLuint, "video_slot"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideouivNV", [(GLuint, "video_slot"), (GLenum, "pname"), Out(Array(GLuint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideoi64vNV", [(GLuint, "video_slot"), (GLenum, "pname"), Out(Array(GLint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideoui64vNV", [(GLuint, "video_slot"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_NV_primitive_restart GlFunction(Void, "glPrimitiveRestartNV", []), GlFunction(Void, "glPrimitiveRestartIndexNV", [(GLuint, "index")]), # GL_NV_read_buffer GlFunction(Void, "glReadBufferNV", [(GLenum, "mode")]), # GL_NV_register_combiners GlFunction(Void, "glCombinerParameterfvNV", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCombinerParameterfNV", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glCombinerParameterivNV", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCombinerParameteriNV", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glCombinerInputNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "variable"), (GLenum, "input"), (GLenum, "mapping"), (GLenum, "componentUsage")]), GlFunction(Void, "glCombinerOutputNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "abOutput"), (GLenum, "cdOutput"), (GLenum, "sumOutput"), (GLenum, "scale"), (GLenum, "bias"), (GLboolean, "abDotProduct"), (GLboolean, "cdDotProduct"), (GLboolean, "muxSum")]), GlFunction(Void, "glFinalCombinerInputNV", [(GLenum, "variable"), (GLenum, "input"), (GLenum, "mapping"), (GLenum, "componentUsage")]), GlFunction(Void, "glGetCombinerInputParameterfvNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "variable"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetCombinerInputParameterivNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "variable"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetCombinerOutputParameterfvNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetCombinerOutputParameterivNV", [(GLenum, "stage"), (GLenum, "portion"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetFinalCombinerInputParameterfvNV", [(GLenum, "variable"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetFinalCombinerInputParameterivNV", [(GLenum, "variable"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_NV_register_combiners2 GlFunction(Void, "glCombinerStageParameterfvNV", [(GLenum, "stage"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetCombinerStageParameterfvNV", [(GLenum, "stage"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_NV_shader_buffer_load GlFunction(Void, "glMakeBufferResidentNV", [(GLenum, "target"), (GLenum, "access")]), GlFunction(Void, "glMakeBufferNonResidentNV", [(GLenum, "target")]), GlFunction(GLboolean, "glIsBufferResidentNV", [(GLenum, "target")], sideeffects=False), GlFunction(Void, "glMakeNamedBufferResidentNV", [(GLbuffer, "buffer"), (GLenum, "access")]), GlFunction(Void, "glMakeNamedBufferNonResidentNV", [(GLbuffer, "buffer")]), GlFunction(GLboolean, "glIsNamedBufferResidentNV", [(GLbuffer, "buffer")], sideeffects=False), GlFunction(Void, "glGetBufferParameterui64vNV", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetNamedBufferParameterui64vNV", [(GLbuffer, "buffer"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetIntegerui64vNV", [(GLenum, "value"), Out(Array(GLuint64EXT, "_gl_param_size(value)"), "result")], sideeffects=False), GlFunction(Void, "glUniformui64NV", [(GLlocation, "location"), (GLuint64EXT, "value")]), GlFunction(Void, "glUniformui64vNV", [(GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count"), "value")]), GlFunction(Void, "glGetUniformui64vNV", [(GLprogram, "program"), (GLlocation, "location"), Out(OpaqueArray(GLuint64EXT, "_glGetUniformui64vNV_size(program, location)"), "params")], sideeffects=False), GlFunction(Void, "glProgramUniformui64NV", [(GLprogram, "program"), (GLlocation, "location"), (GLuint64EXT, "value")]), GlFunction(Void, "glProgramUniformui64vNV", [(GLprogram, "program"), (GLlocation, "location"), (GLsizei, "count"), (Array(Const(GLuint64EXT), "count"), "value")]), # GL_NV_texture_barrier GlFunction(Void, "glTextureBarrierNV", []), # GL_NV_texture_multisample GlFunction(Void, "glTexImage2DMultisampleCoverageNV", [(GLenum, "target"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedSampleLocations")]), GlFunction(Void, "glTexImage3DMultisampleCoverageNV", [(GLenum, "target"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedSampleLocations")]), GlFunction(Void, "glTextureImage2DMultisampleNV", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "samples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedSampleLocations")]), GlFunction(Void, "glTextureImage3DMultisampleNV", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "samples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedSampleLocations")]), GlFunction(Void, "glTextureImage2DMultisampleCoverageNV", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLboolean, "fixedSampleLocations")]), GlFunction(Void, "glTextureImage3DMultisampleCoverageNV", [(GLtexture, "texture"), (GLenum, "target"), (GLsizei, "coverageSamples"), (GLsizei, "colorSamples"), (GLint, "internalFormat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLboolean, "fixedSampleLocations")]), # GL_NV_transform_feedback GlFunction(Void, "glBeginTransformFeedbackNV", [(GLenum_mode, "primitiveMode")]), GlFunction(Void, "glEndTransformFeedbackNV", []), GlFunction(Void, "glTransformFeedbackAttribsNV", [(GLsizei, "count"), (Array(Const(GLint), "count*3"), "attribs"), (GLenum, "bufferMode")]), GlFunction(Void, "glBindBufferRangeNV", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset"), (GLsizeiptr, "size")]), GlFunction(Void, "glBindBufferOffsetNV", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer"), (GLintptr, "offset")]), GlFunction(Void, "glBindBufferBaseNV", [(GLenum, "target"), (GLuint, "index"), (GLbuffer, "buffer")]), GlFunction(Void, "glTransformFeedbackVaryingsNV", [(GLprogram, "program"), (GLsizei, "count"), (Array(Const(GLint), "count"), "locations"), (GLenum, "bufferMode")]), GlFunction(Void, "glActiveVaryingNV", [(GLprogram, "program"), (GLstringConst, "name")]), GlFunction(GLlocation, "glGetVaryingLocationNV", [(GLprogram, "program"), (GLstringConst, "name")]), GlFunction(Void, "glGetActiveVaryingNV", [(GLprogram, "program"), (GLuint, "index"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLsizei), "size"), Out(Pointer(GLenum), "type"), OutGlString(GLchar, "length", "name")], sideeffects=False), GlFunction(Void, "glGetTransformFeedbackVaryingNV", [(GLprogram, "program"), (GLuint, "index"), Out(Pointer(GLlocation), "location")], sideeffects=False), GlFunction(Void, "glTransformFeedbackStreamAttribsNV", [(GLsizei, "count"), (Array(Const(GLint), "count"), "attribs"), (GLsizei, "nbuffers"), (Array(Const(GLint), "nbuffers"), "bufstreams"), (GLenum, "bufferMode")]), # GL_NV_transform_feedback2 GlFunction(Void, "glBindTransformFeedbackNV", [(GLenum, "target"), (GLfeedback, "id")]), GlFunction(Void, "glDeleteTransformFeedbacksNV", [(GLsizei, "n"), (Array(Const(GLfeedback), "n"), "ids")]), GlFunction(Void, "glGenTransformFeedbacksNV", [(GLsizei, "n"), Out(Array(GLfeedback, "n"), "ids")]), GlFunction(GLboolean, "glIsTransformFeedbackNV", [(GLfeedback, "id")], sideeffects=False), GlFunction(Void, "glPauseTransformFeedbackNV", []), GlFunction(Void, "glResumeTransformFeedbackNV", []), GlFunction(Void, "glDrawTransformFeedbackNV", [(GLenum_mode, "mode"), (GLfeedback, "id")]), # GL_NV_vdpau_interop GlFunction(Void, "glVDPAUInitNV", [(OpaquePointer(Const(GLvoid)), "vdpDevice"), (OpaquePointer(Const(GLvoid)), "getProcAddress")]), GlFunction(Void, "glVDPAUFiniNV", []), GlFunction(GLvdpauSurfaceNV, "glVDPAURegisterVideoSurfaceNV", [(OpaquePointer(Const(GLvoid)), "vdpSurface"), (GLenum, "target"), (GLsizei, "numTextureNames"), (Array(Const(GLtexture), "numTextureNames"), "textureNames")]), GlFunction(GLvdpauSurfaceNV, "glVDPAURegisterOutputSurfaceNV", [(OpaquePointer(Const(GLvoid)), "vdpSurface"), (GLenum, "target"), (GLsizei, "numTextureNames"), (Array(Const(GLtexture), "numTextureNames"), "textureNames")]), GlFunction(GLboolean, "glVDPAUIsSurfaceNV", [(GLvdpauSurfaceNV, "surface")], sideeffects=False), GlFunction(Void, "glVDPAUUnregisterSurfaceNV", [(GLvdpauSurfaceNV, "surface")]), GlFunction(Void, "glVDPAUGetSurfaceivNV", [(GLvdpauSurfaceNV, "surface"), (GLenum, "pname"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLint, "bufSize"), "values")]), GlFunction(Void, "glVDPAUSurfaceAccessNV", [(GLvdpauSurfaceNV, "surface"), (GLenum, "access")]), GlFunction(Void, "glVDPAUMapSurfacesNV", [(GLsizei, "numSurfaces"), (Array(Const(GLvdpauSurfaceNV), "numSurfaces"), "surfaces")]), GlFunction(Void, "glVDPAUUnmapSurfacesNV", [(GLsizei, "numSurface"), (Array(Const(GLvdpauSurfaceNV), "numSurface"), "surfaces")]), # GL_NV_vertex_array_range GlFunction(Void, "glFlushVertexArrayRangeNV", []), GlFunction(Void, "glVertexArrayRangeNV", [(GLsizei, "length"), (GLpointerConst, "pointer")]), # GL_NV_vertex_attrib_integer_64bit GlFunction(Void, "glVertexAttribL1i64NV", [(GLuint, "index"), (GLint64EXT, "x")]), GlFunction(Void, "glVertexAttribL2i64NV", [(GLuint, "index"), (GLint64EXT, "x"), (GLint64EXT, "y")]), GlFunction(Void, "glVertexAttribL3i64NV", [(GLuint, "index"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z")]), GlFunction(Void, "glVertexAttribL4i64NV", [(GLuint, "index"), (GLint64EXT, "x"), (GLint64EXT, "y"), (GLint64EXT, "z"), (GLint64EXT, "w")]), GlFunction(Void, "glVertexAttribL1i64vNV", [(GLuint, "index"), (Pointer(Const(GLint64EXT)), "v")]), GlFunction(Void, "glVertexAttribL2i64vNV", [(GLuint, "index"), (Array(Const(GLint64EXT), 2), "v")]), GlFunction(Void, "glVertexAttribL3i64vNV", [(GLuint, "index"), (Array(Const(GLint64EXT), 3), "v")]), GlFunction(Void, "glVertexAttribL4i64vNV", [(GLuint, "index"), (Array(Const(GLint64EXT), 4), "v")]), GlFunction(Void, "glVertexAttribL1ui64NV", [(GLuint, "index"), (GLuint64EXT, "x")]), GlFunction(Void, "glVertexAttribL2ui64NV", [(GLuint, "index"), (GLuint64EXT, "x"), (GLuint64EXT, "y")]), GlFunction(Void, "glVertexAttribL3ui64NV", [(GLuint, "index"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z")]), GlFunction(Void, "glVertexAttribL4ui64NV", [(GLuint, "index"), (GLuint64EXT, "x"), (GLuint64EXT, "y"), (GLuint64EXT, "z"), (GLuint64EXT, "w")]), GlFunction(Void, "glVertexAttribL1ui64vNV", [(GLuint, "index"), (Pointer(Const(GLuint64EXT)), "v")]), GlFunction(Void, "glVertexAttribL2ui64vNV", [(GLuint, "index"), (Array(Const(GLuint64EXT), 2), "v")]), GlFunction(Void, "glVertexAttribL3ui64vNV", [(GLuint, "index"), (Array(Const(GLuint64EXT), 3), "v")]), GlFunction(Void, "glVertexAttribL4ui64vNV", [(GLuint, "index"), (Array(Const(GLuint64EXT), 4), "v")]), GlFunction(Void, "glGetVertexAttribLi64vNV", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribLui64vNV", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLuint64EXT, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glVertexAttribLFormatNV", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), # GL_NV_vertex_buffer_unified_memory GlFunction(Void, "glBufferAddressRangeNV", [(GLenum, "pname"), (GLuint, "index"), (GLuint64EXT, "address"), (GLsizeiptr, "length")]), GlFunction(Void, "glVertexFormatNV", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glNormalFormatNV", [(GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glColorFormatNV", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glIndexFormatNV", [(GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glTexCoordFormatNV", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glEdgeFlagFormatNV", [(GLsizei, "stride")]), GlFunction(Void, "glSecondaryColorFormatNV", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glFogCoordFormatNV", [(GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glVertexAttribFormatNV", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLboolean, "normalized"), (GLsizei, "stride")]), GlFunction(Void, "glVertexAttribIFormatNV", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride")]), GlFunction(Void, "glGetIntegerui64i_vNV", [(GLenum, "value"), (GLuint, "index"), Out(Array(GLuint64EXT, "_gl_param_size(value)"), "result")], sideeffects=False), # GL_NV_vertex_program GlFunction(GLboolean, "glAreProgramsResidentNV", [(GLsizei, "n"), (Array(Const(GLprogramARB), "n"), "ids"), Out(Array(GLboolean, "n"), "residences")], sideeffects=False), GlFunction(Void, "glBindProgramNV", [(GLenum, "target"), (GLprogramARB, "program")]), GlFunction(Void, "glDeleteProgramsNV", [(GLsizei, "n"), (Array(Const(GLprogramARB), "n"), "programs")]), GlFunction(Void, "glExecuteProgramNV", [(GLenum, "target"), (GLprogramARB, "id"), (Array(Const(GLfloat), 4), "params")]), GlFunction(Void, "glGenProgramsNV", [(GLsizei, "n"), Out(Array(GLprogramARB, "n"), "programs")]), GlFunction(Void, "glGetProgramParameterdvNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetProgramParameterfvNV", [(GLenum, "target"), (GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetProgramivNV", [(GLprogramARB, "id"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glGetProgramStringNV", [(GLprogramARB, "id"), (GLenum, "pname"), Out(Array(GLubyte, "_gl_param_size(pname)"), "program")], sideeffects=False), GlFunction(Void, "glGetTrackMatrixivNV", [(GLenum, "target"), (GLuint, "address"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribdvNV", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribfvNV", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribivNV", [(GLuint, "index"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribPointervNV", [(GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLpointer), "pointer")], sideeffects=False), GlFunction(GLboolean, "glIsProgramNV", [(GLprogramARB, "program")], sideeffects=False), GlFunction(Void, "glLoadProgramNV", [(GLenum, "target"), (GLprogramARB, "id"), (GLsizei, "len"), (String(Const(GLubyte), "len"), "program")]), GlFunction(Void, "glProgramParameter4dNV", [(GLenum, "target"), (GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glProgramParameter4dvNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glProgramParameter4fNV", [(GLenum, "target"), (GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glProgramParameter4fvNV", [(GLenum, "target"), (GLuint, "index"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glProgramParameters4dvNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLdouble), "count*4"), "v")]), GlFunction(Void, "glProgramParameters4fvNV", [(GLenum, "target"), (GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "v")]), GlFunction(Void, "glRequestResidentProgramsNV", [(GLsizei, "n"), (Array(Const(GLprogramARB), "n"), "programs")]), GlFunction(Void, "glTrackMatrixNV", [(GLenum, "target"), (GLuint, "address"), (GLenum, "matrix"), (GLenum, "transform")]), GlFunction(Void, "glVertexAttribPointerNV", [(GLuint, "index"), (size_bgra, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glVertexAttrib1dNV", [(GLuint, "index"), (GLdouble, "x")]), GlFunction(Void, "glVertexAttrib1dvNV", [(GLuint, "index"), (Pointer(Const(GLdouble)), "v")]), GlFunction(Void, "glVertexAttrib1fNV", [(GLuint, "index"), (GLfloat, "x")]), GlFunction(Void, "glVertexAttrib1fvNV", [(GLuint, "index"), (Pointer(Const(GLfloat)), "v")]), GlFunction(Void, "glVertexAttrib1sNV", [(GLuint, "index"), (GLshort, "x")]), GlFunction(Void, "glVertexAttrib1svNV", [(GLuint, "index"), (Pointer(Const(GLshort)), "v")]), GlFunction(Void, "glVertexAttrib2dNV", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y")]), GlFunction(Void, "glVertexAttrib2dvNV", [(GLuint, "index"), (Array(Const(GLdouble), 2), "v")]), GlFunction(Void, "glVertexAttrib2fNV", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glVertexAttrib2fvNV", [(GLuint, "index"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glVertexAttrib2sNV", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y")]), GlFunction(Void, "glVertexAttrib2svNV", [(GLuint, "index"), (Array(Const(GLshort), 2), "v")]), GlFunction(Void, "glVertexAttrib3dNV", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z")]), GlFunction(Void, "glVertexAttrib3dvNV", [(GLuint, "index"), (Array(Const(GLdouble), 3), "v")]), GlFunction(Void, "glVertexAttrib3fNV", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glVertexAttrib3fvNV", [(GLuint, "index"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glVertexAttrib3sNV", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z")]), GlFunction(Void, "glVertexAttrib3svNV", [(GLuint, "index"), (Array(Const(GLshort), 3), "v")]), GlFunction(Void, "glVertexAttrib4dNV", [(GLuint, "index"), (GLdouble, "x"), (GLdouble, "y"), (GLdouble, "z"), (GLdouble, "w")]), GlFunction(Void, "glVertexAttrib4dvNV", [(GLuint, "index"), (Array(Const(GLdouble), 4), "v")]), GlFunction(Void, "glVertexAttrib4fNV", [(GLuint, "index"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glVertexAttrib4fvNV", [(GLuint, "index"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glVertexAttrib4sNV", [(GLuint, "index"), (GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "w")]), GlFunction(Void, "glVertexAttrib4svNV", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttrib4ubNV", [(GLuint, "index"), (GLubyte, "x"), (GLubyte, "y"), (GLubyte, "z"), (GLubyte, "w")]), GlFunction(Void, "glVertexAttrib4ubvNV", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttribs1dvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLdouble), "count"), "v")]), GlFunction(Void, "glVertexAttribs1fvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count"), "v")]), GlFunction(Void, "glVertexAttribs1svNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLshort), "count"), "v")]), GlFunction(Void, "glVertexAttribs2dvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLdouble), "count*2"), "v")]), GlFunction(Void, "glVertexAttribs2fvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*2"), "v")]), GlFunction(Void, "glVertexAttribs2svNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLshort), "count*2"), "v")]), GlFunction(Void, "glVertexAttribs3dvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLdouble), "count*3"), "v")]), GlFunction(Void, "glVertexAttribs3fvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*3"), "v")]), GlFunction(Void, "glVertexAttribs3svNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLshort), "count*3"), "v")]), GlFunction(Void, "glVertexAttribs4dvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLdouble), "count*4"), "v")]), GlFunction(Void, "glVertexAttribs4fvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLfloat), "count*4"), "v")]), GlFunction(Void, "glVertexAttribs4svNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLshort), "count*4"), "v")]), GlFunction(Void, "glVertexAttribs4ubvNV", [(GLuint, "index"), (GLsizei, "count"), (Array(Const(GLubyte), "count*4"), "v")]), # GL_NV_vertex_program4 GlFunction(Void, "glVertexAttribI1iEXT", [(GLuint, "index"), (GLint, "x")]), GlFunction(Void, "glVertexAttribI2iEXT", [(GLuint, "index"), (GLint, "x"), (GLint, "y")]), GlFunction(Void, "glVertexAttribI3iEXT", [(GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z")]), GlFunction(Void, "glVertexAttribI4iEXT", [(GLuint, "index"), (GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "w")]), GlFunction(Void, "glVertexAttribI1uiEXT", [(GLuint, "index"), (GLuint, "x")]), GlFunction(Void, "glVertexAttribI2uiEXT", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y")]), GlFunction(Void, "glVertexAttribI3uiEXT", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z")]), GlFunction(Void, "glVertexAttribI4uiEXT", [(GLuint, "index"), (GLuint, "x"), (GLuint, "y"), (GLuint, "z"), (GLuint, "w")]), GlFunction(Void, "glVertexAttribI1ivEXT", [(GLuint, "index"), (Pointer(Const(GLint)), "v")]), GlFunction(Void, "glVertexAttribI2ivEXT", [(GLuint, "index"), (Array(Const(GLint), 2), "v")]), GlFunction(Void, "glVertexAttribI3ivEXT", [(GLuint, "index"), (Array(Const(GLint), 3), "v")]), GlFunction(Void, "glVertexAttribI4ivEXT", [(GLuint, "index"), (Array(Const(GLint), 4), "v")]), GlFunction(Void, "glVertexAttribI1uivEXT", [(GLuint, "index"), (Pointer(Const(GLuint)), "v")]), GlFunction(Void, "glVertexAttribI2uivEXT", [(GLuint, "index"), (Array(Const(GLuint), 2), "v")]), GlFunction(Void, "glVertexAttribI3uivEXT", [(GLuint, "index"), (Array(Const(GLuint), 3), "v")]), GlFunction(Void, "glVertexAttribI4uivEXT", [(GLuint, "index"), (Array(Const(GLuint), 4), "v")]), GlFunction(Void, "glVertexAttribI4bvEXT", [(GLuint, "index"), (Array(Const(GLbyte), 4), "v")]), GlFunction(Void, "glVertexAttribI4svEXT", [(GLuint, "index"), (Array(Const(GLshort), 4), "v")]), GlFunction(Void, "glVertexAttribI4ubvEXT", [(GLuint, "index"), (Array(Const(GLubyte), 4), "v")]), GlFunction(Void, "glVertexAttribI4usvEXT", [(GLuint, "index"), (Array(Const(GLushort), 4), "v")]), GlFunction(Void, "glVertexAttribIPointerEXT", [(GLuint, "index"), (GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glGetVertexAttribIivEXT", [(GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLint), "params")], sideeffects=False), GlFunction(Void, "glGetVertexAttribIuivEXT", [(GLuint, "index"), (GLenum, "pname"), Out(Pointer(GLuint), "params")], sideeffects=False), # GL_NV_video_capture GlFunction(Void, "glBeginVideoCaptureNV", [(GLuint, "video_capture_slot")]), GlFunction(Void, "glBindVideoCaptureStreamBufferNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "frame_region"), (GLintptrARB, "offset")]), GlFunction(Void, "glBindVideoCaptureStreamTextureNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "frame_region"), (GLenum, "target"), (GLuint, "texture")]), GlFunction(Void, "glEndVideoCaptureNV", [(GLuint, "video_capture_slot")]), GlFunction(Void, "glGetVideoCaptureivNV", [(GLuint, "video_capture_slot"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideoCaptureStreamivNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideoCaptureStreamfvNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetVideoCaptureStreamdvNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), Out(Array(GLdouble, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLenum, "glVideoCaptureNV", [(GLuint, "video_capture_slot"), Out(Pointer(GLuint), "sequence_num"), Out(Pointer(GLuint64EXT), "capture_time")]), GlFunction(Void, "glVideoCaptureStreamParameterivNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glVideoCaptureStreamParameterfvNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glVideoCaptureStreamParameterdvNV", [(GLuint, "video_capture_slot"), (GLuint, "stream"), (GLenum, "pname"), (Array(Const(GLdouble), "_gl_param_size(pname)"), "params")]), # GL_OES_blend_equation_separate GlFunction(Void, "glBlendEquationSeparateOES", [(GLenum, "modeRGB"), (GLenum, "modeAlpha")]), # GL_OES_blend_func_separate GlFunction(Void, "glBlendFuncSeparateOES", [(GLenum, "sfactorRGB"), (GLenum, "dfactorRGB"), (GLenum, "sfactorAlpha"), (GLenum, "dfactorAlpha")]), # GL_OES_blend_subtract GlFunction(Void, "glBlendEquationOES", [(GLenum, "mode")]), # GL_OES_draw_texture GlFunction(Void, "glDrawTexfOES", [(GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "width"), (GLfloat, "height")]), GlFunction(Void, "glDrawTexfvOES", [(Array(Const(GLfloat), 4), "coords")]), GlFunction(Void, "glDrawTexiOES", [(GLint, "x"), (GLint, "y"), (GLint, "z"), (GLint, "width"), (GLint, "height")]), GlFunction(Void, "glDrawTexivOES", [(Array(Const(GLint), 4), "coords")]), GlFunction(Void, "glDrawTexsOES", [(GLshort, "x"), (GLshort, "y"), (GLshort, "z"), (GLshort, "width"), (GLshort, "height")]), GlFunction(Void, "glDrawTexsvOES", [(Array(Const(GLshort), 4), "coords")]), # GL_OES_framebuffer_object GlFunction(GLboolean, "glIsRenderbufferOES", [(GLrenderbuffer, "renderbuffer")], sideeffects=False), GlFunction(Void, "glBindRenderbufferOES", [(GLenum, "target"), (GLrenderbuffer, "renderbuffer")]), GlFunction(Void, "glDeleteRenderbuffersOES", [(GLsizei, "n"), (Array(Const(GLrenderbuffer), "n"), "renderbuffers")]), GlFunction(Void, "glGenRenderbuffersOES", [(GLsizei, "n"), Out(Array(GLrenderbuffer, "n"), "renderbuffers")]), GlFunction(Void, "glRenderbufferStorageOES", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glGetRenderbufferParameterivOES", [(GLenum, "target"), (GLenum, "pname"), (Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(GLboolean, "glIsFramebufferOES", [(GLframebuffer, "framebuffer")], sideeffects=False), GlFunction(Void, "glBindFramebufferOES", [(GLenum, "target"), (GLframebuffer, "framebuffer")]), GlFunction(Void, "glDeleteFramebuffersOES", [(GLsizei, "n"), (Array(Const(GLframebuffer), "n"), "framebuffers")]), GlFunction(Void, "glGenFramebuffersOES", [(GLsizei, "n"), Out(Array(GLframebuffer, "n"), "framebuffers")]), GlFunction(GLenum, "glCheckFramebufferStatusOES", [(GLenum, "target")]), GlFunction(Void, "glFramebufferTexture2DOES", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level")]), GlFunction(Void, "glFramebufferRenderbufferOES", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "renderbuffertarget"), (GLuint, "renderbuffer")]), GlFunction(Void, "glGetFramebufferAttachmentParameterivOES", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGenerateMipmapOES", [(GLenum, "target")]), # GL_OES_get_program_binary GlFunction(Void, "glGetProgramBinaryOES", [(GLprogram, "program"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Pointer(GLenum), "binaryFormat"), Out(OpaqueBlob(GLvoid, "length ? *length : bufSize"), "binary")], sideeffects=False), GlFunction(Void, "glProgramBinaryOES", [(GLprogram, "program"), (GLenum, "binaryFormat"), (Blob(Const(GLvoid), "length"), "binary"), (GLsizei, "length")]), # GL_OES_mapbuffer GlFunction(Void, "glGetBufferPointervOES", [(GLenum, "target"), (GLenum, "pname"), Out(Pointer(GLpointer), "params")], sideeffects=False), GlFunction(GLmap, "glMapBufferOES", [(GLenum, "target"), (GLenum, "access")]), GlFunction(GLboolean, "glUnmapBufferOES", [(GLenum, "target")]), # GL_OES_matrix_palette GlFunction(Void, "glCurrentPaletteMatrixOES", [(GLuint, "index")]), GlFunction(Void, "glLoadPaletteFromModelViewMatrixOES", []), GlFunction(Void, "glMatrixIndexPointerOES", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), GlFunction(Void, "glWeightPointerOES", [(GLint, "size"), (GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "pointer")]), # GL_OES_point_size_array GlFunction(Void, "glPointSizePointerOES", [(GLenum, "type"), (GLsizei, "stride"), (GLpointerConst, "ptr")]), # GL_OES_query_matrix GlFunction(GLbitfield, "glQueryMatrixxOES", [(Array(GLfixed, 16), "mantissa"), (Array(GLint, 16), "exponent")]), # GL_OES_single_precision GlFunction(Void, "glClearDepthfOES", [(GLclampf, "depth")]), GlFunction(Void, "glClipPlanefOES", [(GLenum, "plane"), (Array(Const(GLfloat), 4), "equation")]), GlFunction(Void, "glDepthRangefOES", [(GLclampf, "n"), (GLclampf, "f")]), GlFunction(Void, "glFrustumfOES", [(GLfloat, "l"), (GLfloat, "r"), (GLfloat, "b"), (GLfloat, "t"), (GLfloat, "n"), (GLfloat, "f")]), GlFunction(Void, "glGetClipPlanefOES", [(GLenum, "plane"), Out(Array(GLfloat, 4), "equation")], sideeffects=False), GlFunction(Void, "glOrthofOES", [(GLfloat, "l"), (GLfloat, "r"), (GLfloat, "b"), (GLfloat, "t"), (GLfloat, "n"), (GLfloat, "f")]), # GL_OES_texture_3D GlFunction(Void, "glTexImage3DOES", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glTexSubImage3DOES", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glTexImage3D_size(format, type, width, height, depth)"), "pixels")]), GlFunction(Void, "glCopyTexSubImage3DOES", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), GlFunction(Void, "glCompressedTexImage3DOES", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLint, "border"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glCompressedTexSubImage3DOES", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLenum, "format"), (GLsizei, "imageSize"), (Blob(Const(GLvoid), "imageSize"), "data")]), GlFunction(Void, "glFramebufferTexture3DOES", [(GLenum, "target"), (GLenum, "attachment"), (GLenum, "textarget"), (GLtexture, "texture"), (GLint, "level"), (GLint, "zoffset")]), # GL_OES_texture_cube_map GlFunction(Void, "glTexGenfOES", [(GLenum, "coord"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glTexGenfvOES", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexGeniOES", [(GLenum, "coord"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glTexGenivOES", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glTexGenxOES", [(GLenum, "coord"), (GLenum, "pname"), (GLfixed, "param")]), GlFunction(Void, "glTexGenxvOES", [(GLenum, "coord"), (GLenum, "pname"), (Array(Const(GLfixed), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetTexGenfvOES", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexGenivOES", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetTexGenxvOES", [(GLenum, "coord"), (GLenum, "pname"), Out(Array(GLfixed, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_OES_vertex_array_object GlFunction(Void, "glBindVertexArrayOES", [(GLarray, "array")]), GlFunction(Void, "glDeleteVertexArraysOES", [(GLsizei, "n"), (Array(Const(GLarray), "n"), "arrays")]), GlFunction(Void, "glGenVertexArraysOES", [(GLsizei, "n"), Out(Array(GLarray, "n"), "arrays")]), GlFunction(GLboolean, "glIsVertexArrayOES", [(GLarray, "array")], sideeffects=False), # GL_PGI_misc_hints GlFunction(Void, "glHintPGI", [(GLenum, "target"), (GLint, "mode")]), # GL_SGIS_detail_texture GlFunction(Void, "glDetailTexFuncSGIS", [(GLenum, "target"), (GLsizei, "n"), (Array(Const(GLfloat), "n*2"), "points")]), GlFunction(Void, "glGetDetailTexFuncSGIS", [(GLenum, "target"), Out(OpaqueArray(GLfloat, "_glGetDetailTexFuncSGIS_size(target)"), "points")], sideeffects=False), # GL_SGIS_fog_function GlFunction(Void, "glFogFuncSGIS", [(GLsizei, "n"), (Array(Const(GLfloat), "n*2"), "points")]), GlFunction(Void, "glGetFogFuncSGIS", [Out(OpaqueArray(GLfloat, "_glGetFogFuncSGIS_size()"), "points")], sideeffects=False), # GL_SGIS_multisample GlFunction(Void, "glSampleMaskSGIS", [(GLclampf, "value"), (GLboolean, "invert")]), GlFunction(Void, "glSamplePatternSGIS", [(GLenum, "pattern")]), # GL_SGIS_pixel_texture GlFunction(Void, "glPixelTexGenParameteriSGIS", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glPixelTexGenParameterivSGIS", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glPixelTexGenParameterfSGIS", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPixelTexGenParameterfvSGIS", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetPixelTexGenParameterivSGIS", [(GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetPixelTexGenParameterfvSGIS", [(GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_SGIS_point_parameters GlFunction(Void, "glPointParameterfSGIS", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glPointParameterfvSGIS", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), # GL_SGIS_sharpen_texture GlFunction(Void, "glSharpenTexFuncSGIS", [(GLenum, "target"), (GLsizei, "n"), (Array(Const(GLfloat), "n*2"), "points")]), GlFunction(Void, "glGetSharpenTexFuncSGIS", [(GLenum, "target"), Out(OpaqueArray(GLfloat, "_glGetSharpenTexFuncSGIS_size(target)"), "points")], sideeffects=False), # GL_SGIS_texture4D GlFunction(Void, "glTexImage4DSGIS", [(GLenum, "target"), (GLint, "level"), (GLenum, "internalformat"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLsizei, "size4d"), (GLint, "border"), (GLenum, "format"), (GLenum, "type"), (OpaqueBlob(Const(GLvoid), "_glTexImage4DSGIS_size(format, type, width, height, depth, size4d)"), "pixels")]), GlFunction(Void, "glTexSubImage4DSGIS", [(GLenum, "target"), (GLint, "level"), (GLint, "xoffset"), (GLint, "yoffset"), (GLint, "zoffset"), (GLint, "woffset"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth"), (GLsizei, "size4d"), (GLenum, "format"), (GLenum, "type"), (OpaqueBlob(Const(GLvoid), "_glTexImage4D_size(format, type, width, height, depth, size4d)"), "pixels")]), # GL_SGIS_texture_color_mask GlFunction(Void, "glTextureColorMaskSGIS", [(GLboolean, "red"), (GLboolean, "green"), (GLboolean, "blue"), (GLboolean, "alpha")]), # GL_SGIS_texture_filter4 GlFunction(Void, "glGetTexFilterFuncSGIS", [(GLenum, "target"), (GLenum, "filter"), Out(OpaqueArray(GLfloat, "_glGetTexFilterFuncSGIS_size(target, filter)"), "weights")], sideeffects=False), GlFunction(Void, "glTexFilterFuncSGIS", [(GLenum, "target"), (GLenum, "filter"), (GLsizei, "n"), (Array(Const(GLfloat), "n"), "weights")]), # GL_SGIX_async GlFunction(Void, "glAsyncMarkerSGIX", [(GLuint, "marker")]), GlFunction(GLint, "glFinishAsyncSGIX", [Out(Pointer(GLuint), "markerp")]), GlFunction(GLint, "glPollAsyncSGIX", [Out(Pointer(GLuint), "markerp")]), GlFunction(GLuint, "glGenAsyncMarkersSGIX", [(GLsizei, "range")]), GlFunction(Void, "glDeleteAsyncMarkersSGIX", [(GLuint, "marker"), (GLsizei, "range")]), GlFunction(GLboolean, "glIsAsyncMarkerSGIX", [(GLuint, "marker")], sideeffects=False), # GL_SGIX_flush_raster GlFunction(Void, "glFlushRasterSGIX", []), # GL_SGIX_fragment_lighting GlFunction(Void, "glFragmentColorMaterialSGIX", [(GLenum, "face"), (GLenum, "mode")]), GlFunction(Void, "glFragmentLightfSGIX", [(GLenum, "light"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glFragmentLightfvSGIX", [(GLenum, "light"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFragmentLightiSGIX", [(GLenum, "light"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glFragmentLightivSGIX", [(GLenum, "light"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFragmentLightModelfSGIX", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glFragmentLightModelfvSGIX", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFragmentLightModeliSGIX", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glFragmentLightModelivSGIX", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFragmentMaterialfSGIX", [(GLenum, "face"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glFragmentMaterialfvSGIX", [(GLenum, "face"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glFragmentMaterialiSGIX", [(GLenum, "face"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glFragmentMaterialivSGIX", [(GLenum, "face"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glGetFragmentLightfvSGIX", [(GLenum, "light"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetFragmentLightivSGIX", [(GLenum, "light"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetFragmentMaterialfvSGIX", [(GLenum, "face"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetFragmentMaterialivSGIX", [(GLenum, "face"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glLightEnviSGIX", [(GLenum, "pname"), (GLint, "param")]), # GL_SGIX_framezoom GlFunction(Void, "glFrameZoomSGIX", [(GLint, "factor")]), # GL_SGIX_igloo_interface GlFunction(Void, "glIglooInterfaceSGIX", [(GLenum, "pname"), (OpaqueBlob(Const(GLvoid), "_glIglooInterfaceSGIX_size(pname)"), "params")]), # GL_SGIX_instruments GlFunction(GLint, "glGetInstrumentsSGIX", [], sideeffects=False), GlFunction(Void, "glInstrumentsBufferSGIX", [(GLsizei, "size"), (OpaqueArray(GLint, "size"), "buffer")]), GlFunction(GLint, "glPollInstrumentsSGIX", [Out(Pointer(GLint), "marker_p")]), GlFunction(Void, "glReadInstrumentsSGIX", [(GLint, "marker")]), GlFunction(Void, "glStartInstrumentsSGIX", []), GlFunction(Void, "glStopInstrumentsSGIX", [(GLint, "marker")]), # GL_SGIX_list_priority GlFunction(Void, "glGetListParameterfvSGIX", [(GLlist, "list"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetListParameterivSGIX", [(GLlist, "list"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glListParameterfSGIX", [(GLlist, "list"), (GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glListParameterfvSGIX", [(GLlist, "list"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glListParameteriSGIX", [(GLlist, "list"), (GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glListParameterivSGIX", [(GLlist, "list"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), # GL_SGIX_pixel_texture GlFunction(Void, "glPixelTexGenSGIX", [(GLenum, "mode")]), # GL_SGIX_polynomial_ffd GlFunction(Void, "glDeformationMap3dSGIX", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLdouble, "v1"), (GLdouble, "v2"), (GLint, "vstride"), (GLint, "vorder"), (GLdouble, "w1"), (GLdouble, "w2"), (GLint, "wstride"), (GLint, "worder"), (OpaqueArray(Const(GLdouble), "_glDeformationMap3dSGIX_size(target, ustride, uorder, vstride, vorder, wstride, worder)"), "points")]), GlFunction(Void, "glDeformationMap3fSGIX", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLfloat, "v1"), (GLfloat, "v2"), (GLint, "vstride"), (GLint, "vorder"), (GLfloat, "w1"), (GLfloat, "w2"), (GLint, "wstride"), (GLint, "worder"), (OpaqueArray(Const(GLfloat), "_glDeformationMap3fSGIX_size(target, ustride, uorder, vstride, vorder, wstride, worder)"), "points")]), GlFunction(Void, "glDeformSGIX", [(GLbitfield, "mask")]), GlFunction(Void, "glLoadIdentityDeformationMapSGIX", [(GLbitfield, "mask")]), # GL_SGIX_reference_plane GlFunction(Void, "glReferencePlaneSGIX", [(Array(Const(GLdouble), 4), "equation")]), # GL_SGIX_sprite GlFunction(Void, "glSpriteParameterfSGIX", [(GLenum, "pname"), (GLfloat, "param")]), GlFunction(Void, "glSpriteParameterfvSGIX", [(GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glSpriteParameteriSGIX", [(GLenum, "pname"), (GLint, "param")]), GlFunction(Void, "glSpriteParameterivSGIX", [(GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), # GL_SGIX_tag_sample_buffer GlFunction(Void, "glTagSampleBufferSGIX", []), # GL_SGI_color_table GlFunction(Void, "glColorTableSGI", [(GLenum, "target"), (GLenum, "internalformat"), (GLsizei, "width"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(GLvoid), "_glColorTable_size(format, type, width)"), "table")]), GlFunction(Void, "glColorTableParameterfvSGI", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLfloat), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glColorTableParameterivSGI", [(GLenum, "target"), (GLenum, "pname"), (Array(Const(GLint), "_gl_param_size(pname)"), "params")]), GlFunction(Void, "glCopyColorTableSGI", [(GLenum, "target"), (GLenum, "internalformat"), (GLint, "x"), (GLint, "y"), (GLsizei, "width")]), GlFunction(Void, "glGetColorTableSGI", [(GLenum, "target"), (GLenum, "format"), (GLenum, "type"), Out(OpaqueBlob(GLvoid, "_glGetColorTableSGI_size(target, format, type)"), "table")], sideeffects=False), GlFunction(Void, "glGetColorTableParameterfvSGI", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLfloat, "_gl_param_size(pname)"), "params")], sideeffects=False), GlFunction(Void, "glGetColorTableParameterivSGI", [(GLenum, "target"), (GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), # GL_SUNX_constant_data GlFunction(Void, "glFinishTextureSUNX", []), # GL_SUN_global_alpha GlFunction(Void, "glGlobalAlphaFactorbSUN", [(GLbyte, "factor")]), GlFunction(Void, "glGlobalAlphaFactorsSUN", [(GLshort, "factor")]), GlFunction(Void, "glGlobalAlphaFactoriSUN", [(GLint, "factor")]), GlFunction(Void, "glGlobalAlphaFactorfSUN", [(GLfloat, "factor")]), GlFunction(Void, "glGlobalAlphaFactordSUN", [(GLdouble, "factor")]), GlFunction(Void, "glGlobalAlphaFactorubSUN", [(GLubyte, "factor")]), GlFunction(Void, "glGlobalAlphaFactorusSUN", [(GLushort, "factor")]), GlFunction(Void, "glGlobalAlphaFactoruiSUN", [(GLuint, "factor")]), # GL_SUN_mesh_array GlFunction(Void, "glDrawMeshArraysSUN", [(GLenum_mode, "mode"), (GLint, "first"), (GLsizei, "count"), (GLsizei, "width")]), # GL_SUN_triangle_list GlFunction(Void, "glReplacementCodeuiSUN", [(GLuint, "code")]), GlFunction(Void, "glReplacementCodeusSUN", [(GLushort, "code")]), GlFunction(Void, "glReplacementCodeubSUN", [(GLubyte, "code")]), GlFunction(Void, "glReplacementCodeuivSUN", [(OpaqueArray(Const(GLuint), "_glReplacementCodeuivSUN_size()"), "code")]), GlFunction(Void, "glReplacementCodeusvSUN", [(OpaqueArray(Const(GLushort), "_glReplacementCodeusvSUN_size()"), "code")]), GlFunction(Void, "glReplacementCodeubvSUN", [(OpaqueArray(Const(GLubyte), "_glReplacementCodeubvSUN_size()"), "code")]), GlFunction(Void, "glReplacementCodePointerSUN", [(GLenum, "type"), (GLsizei, "stride"), (OpaquePointer(GLpointerConst), "pointer")]), # GL_SUN_vertex GlFunction(Void, "glColor4ubVertex2fSUN", [(GLubyte, "r"), (GLubyte, "g"), (GLubyte, "b"), (GLubyte, "a"), (GLfloat, "x"), (GLfloat, "y")]), GlFunction(Void, "glColor4ubVertex2fvSUN", [(Array(Const(GLubyte), 4), "c"), (Array(Const(GLfloat), 2), "v")]), GlFunction(Void, "glColor4ubVertex3fSUN", [(GLubyte, "r"), (GLubyte, "g"), (GLubyte, "b"), (GLubyte, "a"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glColor4ubVertex3fvSUN", [(Array(Const(GLubyte), 4), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glColor3fVertex3fSUN", [(GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glColor3fVertex3fvSUN", [(Array(Const(GLfloat), 3), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glNormal3fVertex3fSUN", [(GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glNormal3fVertex3fvSUN", [(Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glColor4fNormal3fVertex3fSUN", [(GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "a"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glColor4fNormal3fVertex3fvSUN", [(Array(Const(GLfloat), 4), "c"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord2fVertex3fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTexCoord2fVertex3fvSUN", [(Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord4fVertex4fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "p"), (GLfloat, "q"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glTexCoord4fVertex4fvSUN", [(Array(Const(GLfloat), 4), "tc"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glTexCoord2fColor4ubVertex3fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLubyte, "r"), (GLubyte, "g"), (GLubyte, "b"), (GLubyte, "a"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTexCoord2fColor4ubVertex3fvSUN", [(Array(Const(GLfloat), 2), "tc"), (Array(Const(GLubyte), 4), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord2fColor3fVertex3fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTexCoord2fColor3fVertex3fvSUN", [(Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 3), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord2fNormal3fVertex3fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTexCoord2fNormal3fVertex3fvSUN", [(Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord2fColor4fNormal3fVertex3fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "a"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glTexCoord2fColor4fNormal3fVertex3fvSUN", [(Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 4), "c"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glTexCoord4fColor4fNormal3fVertex4fSUN", [(GLfloat, "s"), (GLfloat, "t"), (GLfloat, "p"), (GLfloat, "q"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "a"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z"), (GLfloat, "w")]), GlFunction(Void, "glTexCoord4fColor4fNormal3fVertex4fvSUN", [(Array(Const(GLfloat), 4), "tc"), (Array(Const(GLfloat), 4), "c"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 4), "v")]), GlFunction(Void, "glReplacementCodeuiVertex3fSUN", [(GLuint, "rc"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiColor4ubVertex3fSUN", [(GLuint, "rc"), (GLubyte, "r"), (GLubyte, "g"), (GLubyte, "b"), (GLubyte, "a"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiColor4ubVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLubyte), 4), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiColor3fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiColor3fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 3), "c"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiNormal3fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiNormal3fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiColor4fNormal3fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "a"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiColor4fNormal3fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 4), "c"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN", [(GLuint, "rc"), (GLfloat, "s"), (GLfloat, "t"), (GLfloat, "r"), (GLfloat, "g"), (GLfloat, "b"), (GLfloat, "a"), (GLfloat, "nx"), (GLfloat, "ny"), (GLfloat, "nz"), (GLfloat, "x"), (GLfloat, "y"), (GLfloat, "z")]), GlFunction(Void, "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN", [(Pointer(Const(GLuint)), "rc"), (Array(Const(GLfloat), 2), "tc"), (Array(Const(GLfloat), 4), "c"), (Array(Const(GLfloat), 3), "n"), (Array(Const(GLfloat), 3), "v")]), # GL_WIN_swap_hint GlFunction(Void, "glAddSwapHintRectWIN", [(GLint, "x"), (GLint, "y"), (GLsizei, "width"), (GLsizei, "height")]), ]) tmpNnpnZF/specs/d2d1.py0000664000175000017500000010407212543167424014211 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * from dxgi import DXGI_FORMAT, IDXGISurface from d2derr import * from d2dbasetypes import * from dwrite import * ID2D1Resource = Interface("ID2D1Resource", IUnknown) ID2D1Bitmap = Interface("ID2D1Bitmap", ID2D1Resource) ID2D1GradientStopCollection = Interface("ID2D1GradientStopCollection", ID2D1Resource) ID2D1Brush = Interface("ID2D1Brush", ID2D1Resource) ID2D1BitmapBrush = Interface("ID2D1BitmapBrush", ID2D1Brush) ID2D1SolidColorBrush = Interface("ID2D1SolidColorBrush", ID2D1Brush) ID2D1LinearGradientBrush = Interface("ID2D1LinearGradientBrush", ID2D1Brush) ID2D1RadialGradientBrush = Interface("ID2D1RadialGradientBrush", ID2D1Brush) ID2D1StrokeStyle = Interface("ID2D1StrokeStyle", ID2D1Resource) ID2D1Geometry = Interface("ID2D1Geometry", ID2D1Resource) ID2D1RectangleGeometry = Interface("ID2D1RectangleGeometry", ID2D1Geometry) ID2D1RoundedRectangleGeometry = Interface("ID2D1RoundedRectangleGeometry", ID2D1Geometry) ID2D1EllipseGeometry = Interface("ID2D1EllipseGeometry", ID2D1Geometry) ID2D1GeometryGroup = Interface("ID2D1GeometryGroup", ID2D1Geometry) ID2D1TransformedGeometry = Interface("ID2D1TransformedGeometry", ID2D1Geometry) ID2D1GeometrySink = Interface("ID2D1GeometrySink", ID2D1SimplifiedGeometrySink) ID2D1TessellationSink = Interface("ID2D1TessellationSink", IUnknown) ID2D1PathGeometry = Interface("ID2D1PathGeometry", ID2D1Geometry) ID2D1Mesh = Interface("ID2D1Mesh", ID2D1Resource) ID2D1Layer = Interface("ID2D1Layer", ID2D1Resource) ID2D1DrawingStateBlock = Interface("ID2D1DrawingStateBlock", ID2D1Resource) ID2D1RenderTarget = Interface("ID2D1RenderTarget", ID2D1Resource) ID2D1BitmapRenderTarget = Interface("ID2D1BitmapRenderTarget", ID2D1RenderTarget) ID2D1HwndRenderTarget = Interface("ID2D1HwndRenderTarget", ID2D1RenderTarget) ID2D1GdiInteropRenderTarget = Interface("ID2D1GdiInteropRenderTarget", IUnknown) ID2D1DCRenderTarget = Interface("ID2D1DCRenderTarget", ID2D1RenderTarget) ID2D1Factory = Interface("ID2D1Factory", IUnknown) D2D1_ALPHA_MODE = Enum("D2D1_ALPHA_MODE", [ "D2D1_ALPHA_MODE_UNKNOWN", "D2D1_ALPHA_MODE_PREMULTIPLIED", "D2D1_ALPHA_MODE_STRAIGHT", "D2D1_ALPHA_MODE_IGNORE", ]) D2D1_GAMMA = Enum("D2D1_GAMMA", [ "D2D1_GAMMA_2_2", "D2D1_GAMMA_1_0", ]) D2D1_OPACITY_MASK_CONTENT = Enum("D2D1_OPACITY_MASK_CONTENT", [ "D2D1_OPACITY_MASK_CONTENT_GRAPHICS", "D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL", "D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE", ]) D2D1_EXTEND_MODE = Enum("D2D1_EXTEND_MODE", [ "D2D1_EXTEND_MODE_CLAMP", "D2D1_EXTEND_MODE_WRAP", "D2D1_EXTEND_MODE_MIRROR", ]) D2D1_ANTIALIAS_MODE = Enum("D2D1_ANTIALIAS_MODE", [ "D2D1_ANTIALIAS_MODE_PER_PRIMITIVE", "D2D1_ANTIALIAS_MODE_ALIASED", ]) D2D1_TEXT_ANTIALIAS_MODE = Enum("D2D1_TEXT_ANTIALIAS_MODE", [ "D2D1_TEXT_ANTIALIAS_MODE_DEFAULT", "D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE", "D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE", "D2D1_TEXT_ANTIALIAS_MODE_ALIASED", ]) D2D1_BITMAP_INTERPOLATION_MODE = Enum("D2D1_BITMAP_INTERPOLATION_MODE", [ "D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR", "D2D1_BITMAP_INTERPOLATION_MODE_LINEAR", ]) D2D1_DRAW_TEXT_OPTIONS = EnumFlag("D2D1_DRAW_TEXT_OPTIONS", [ "D2D1_DRAW_TEXT_OPTIONS_NONE", "D2D1_DRAW_TEXT_OPTIONS_NO_SNAP", "D2D1_DRAW_TEXT_OPTIONS_CLIP", ]) D2D1_PIXEL_FORMAT = Struct("D2D1_PIXEL_FORMAT", [ (DXGI_FORMAT, "format"), (D2D1_ALPHA_MODE, "alphaMode"), ]) D2D1_POINT_2U = Alias("D2D1_POINT_2U", D2D_POINT_2U) D2D1_POINT_2F = Alias("D2D1_POINT_2F", D2D_POINT_2F) D2D1_RECT_F = Alias("D2D1_RECT_F", D2D_RECT_F) D2D1_RECT_U = Alias("D2D1_RECT_U", D2D_RECT_U) D2D1_SIZE_F = Alias("D2D1_SIZE_F", D2D_SIZE_F) D2D1_SIZE_U = Alias("D2D1_SIZE_U", D2D_SIZE_U) D2D1_COLOR_F = Alias("D2D1_COLOR_F", D2D_COLOR_F) D2D1_MATRIX_3X2_F = Alias("D2D1_MATRIX_3X2_F", D2D_MATRIX_3X2_F) D2D1_TAG = Alias("D2D1_TAG", UINT64) D2D1_BITMAP_PROPERTIES = Struct("D2D1_BITMAP_PROPERTIES", [ (D2D1_PIXEL_FORMAT, "pixelFormat"), (FLOAT, "dpiX"), (FLOAT, "dpiY"), ]) D2D1_GRADIENT_STOP = Struct("D2D1_GRADIENT_STOP", [ (FLOAT, "position"), (D2D1_COLOR_F, "color"), ]) D2D1_BRUSH_PROPERTIES = Struct("D2D1_BRUSH_PROPERTIES", [ (FLOAT, "opacity"), (D2D1_MATRIX_3X2_F, "transform"), ]) D2D1_BITMAP_BRUSH_PROPERTIES = Struct("D2D1_BITMAP_BRUSH_PROPERTIES", [ (D2D1_EXTEND_MODE, "extendModeX"), (D2D1_EXTEND_MODE, "extendModeY"), (D2D1_BITMAP_INTERPOLATION_MODE, "interpolationMode"), ]) D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES = Struct("D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES", [ (D2D1_POINT_2F, "startPoint"), (D2D1_POINT_2F, "endPoint"), ]) D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES = Struct("D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES", [ (D2D1_POINT_2F, "center"), (D2D1_POINT_2F, "gradientOriginOffset"), (FLOAT, "radiusX"), (FLOAT, "radiusY"), ]) D2D1_ARC_SIZE = Enum("D2D1_ARC_SIZE", [ "D2D1_ARC_SIZE_SMALL", "D2D1_ARC_SIZE_LARGE", ]) D2D1_CAP_STYLE = Enum("D2D1_CAP_STYLE", [ "D2D1_CAP_STYLE_FLAT", "D2D1_CAP_STYLE_SQUARE", "D2D1_CAP_STYLE_ROUND", "D2D1_CAP_STYLE_TRIANGLE", ]) D2D1_DASH_STYLE = Enum("D2D1_DASH_STYLE", [ "D2D1_DASH_STYLE_SOLID", "D2D1_DASH_STYLE_DASH", "D2D1_DASH_STYLE_DOT", "D2D1_DASH_STYLE_DASH_DOT", "D2D1_DASH_STYLE_DASH_DOT_DOT", "D2D1_DASH_STYLE_CUSTOM", ]) D2D1_LINE_JOIN = Enum("D2D1_LINE_JOIN", [ "D2D1_LINE_JOIN_MITER", "D2D1_LINE_JOIN_BEVEL", "D2D1_LINE_JOIN_ROUND", "D2D1_LINE_JOIN_MITER_OR_BEVEL", ]) D2D1_COMBINE_MODE = Enum("D2D1_COMBINE_MODE", [ "D2D1_COMBINE_MODE_UNION", "D2D1_COMBINE_MODE_INTERSECT", "D2D1_COMBINE_MODE_XOR", "D2D1_COMBINE_MODE_EXCLUDE", ]) D2D1_GEOMETRY_RELATION = Enum("D2D1_GEOMETRY_RELATION", [ "D2D1_GEOMETRY_RELATION_UNKNOWN", "D2D1_GEOMETRY_RELATION_DISJOINT", "D2D1_GEOMETRY_RELATION_IS_CONTAINED", "D2D1_GEOMETRY_RELATION_CONTAINS", "D2D1_GEOMETRY_RELATION_OVERLAP", ]) D2D1_GEOMETRY_SIMPLIFICATION_OPTION = Enum("D2D1_GEOMETRY_SIMPLIFICATION_OPTION", [ "D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES", "D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES", ]) D2D1_FIGURE_BEGIN = Enum("D2D1_FIGURE_BEGIN", [ "D2D1_FIGURE_BEGIN_FILLED", "D2D1_FIGURE_BEGIN_HOLLOW", ]) D2D1_FIGURE_END = Enum("D2D1_FIGURE_END", [ "D2D1_FIGURE_END_OPEN", "D2D1_FIGURE_END_CLOSED", ]) D2D1_BEZIER_SEGMENT = Struct("D2D1_BEZIER_SEGMENT", [ (D2D1_POINT_2F, "point1"), (D2D1_POINT_2F, "point2"), (D2D1_POINT_2F, "point3"), ]) D2D1_TRIANGLE = Struct("D2D1_TRIANGLE", [ (D2D1_POINT_2F, "point1"), (D2D1_POINT_2F, "point2"), (D2D1_POINT_2F, "point3"), ]) D2D1_PATH_SEGMENT = EnumFlag("D2D1_PATH_SEGMENT", [ "D2D1_PATH_SEGMENT_NONE", "D2D1_PATH_SEGMENT_FORCE_UNSTROKED", "D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN", ]) D2D1_SWEEP_DIRECTION = Enum("D2D1_SWEEP_DIRECTION", [ "D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE", "D2D1_SWEEP_DIRECTION_CLOCKWISE", ]) D2D1_FILL_MODE = Enum("D2D1_FILL_MODE", [ "D2D1_FILL_MODE_ALTERNATE", "D2D1_FILL_MODE_WINDING", ]) D2D1_ARC_SEGMENT = Struct("D2D1_ARC_SEGMENT", [ (D2D1_POINT_2F, "point"), (D2D1_SIZE_F, "size"), (FLOAT, "rotationAngle"), (D2D1_SWEEP_DIRECTION, "sweepDirection"), (D2D1_ARC_SIZE, "arcSize"), ]) D2D1_QUADRATIC_BEZIER_SEGMENT = Struct("D2D1_QUADRATIC_BEZIER_SEGMENT", [ (D2D1_POINT_2F, "point1"), (D2D1_POINT_2F, "point2"), ]) D2D1_ELLIPSE = Struct("D2D1_ELLIPSE", [ (D2D1_POINT_2F, "point"), (FLOAT, "radiusX"), (FLOAT, "radiusY"), ]) D2D1_ROUNDED_RECT = Struct("D2D1_ROUNDED_RECT", [ (D2D1_RECT_F, "rect"), (FLOAT, "radiusX"), (FLOAT, "radiusY"), ]) D2D1_STROKE_STYLE_PROPERTIES = Struct("D2D1_STROKE_STYLE_PROPERTIES", [ (D2D1_CAP_STYLE, "startCap"), (D2D1_CAP_STYLE, "endCap"), (D2D1_CAP_STYLE, "dashCap"), (D2D1_LINE_JOIN, "lineJoin"), (FLOAT, "miterLimit"), (D2D1_DASH_STYLE, "dashStyle"), (FLOAT, "dashOffset"), ]) D2D1_LAYER_OPTIONS = EnumFlag("D2D1_LAYER_OPTIONS", [ "D2D1_LAYER_OPTIONS_NONE", "D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE", ]) D2D1_LAYER_PARAMETERS = Struct("D2D1_LAYER_PARAMETERS", [ (D2D1_RECT_F, "contentBounds"), (ObjPointer(ID2D1Geometry), "geometricMask"), (D2D1_ANTIALIAS_MODE, "maskAntialiasMode"), (D2D1_MATRIX_3X2_F, "maskTransform"), (FLOAT, "opacity"), (ObjPointer(ID2D1Brush), "opacityBrush"), (D2D1_LAYER_OPTIONS, "layerOptions"), ]) D2D1_WINDOW_STATE = EnumFlag("D2D1_WINDOW_STATE", [ "D2D1_WINDOW_STATE_NONE", "D2D1_WINDOW_STATE_OCCLUDED", ]) D2D1_RENDER_TARGET_TYPE = Enum("D2D1_RENDER_TARGET_TYPE", [ "D2D1_RENDER_TARGET_TYPE_DEFAULT", "D2D1_RENDER_TARGET_TYPE_SOFTWARE", "D2D1_RENDER_TARGET_TYPE_HARDWARE", ]) D2D1_FEATURE_LEVEL = Enum("D2D1_FEATURE_LEVEL", [ "D2D1_FEATURE_LEVEL_DEFAULT", "D2D1_FEATURE_LEVEL_9", "D2D1_FEATURE_LEVEL_10", ]) D2D1_RENDER_TARGET_USAGE = EnumFlag("D2D1_RENDER_TARGET_USAGE", [ "D2D1_RENDER_TARGET_USAGE_NONE", "D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING", "D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE", ]) D2D1_PRESENT_OPTIONS = EnumFlag("D2D1_PRESENT_OPTIONS", [ "D2D1_PRESENT_OPTIONS_NONE", "D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS", "D2D1_PRESENT_OPTIONS_IMMEDIATELY", ]) D2D1_RENDER_TARGET_PROPERTIES = Struct("D2D1_RENDER_TARGET_PROPERTIES", [ (D2D1_RENDER_TARGET_TYPE, "type"), (D2D1_PIXEL_FORMAT, "pixelFormat"), (FLOAT, "dpiX"), (FLOAT, "dpiY"), (D2D1_RENDER_TARGET_USAGE, "usage"), (D2D1_FEATURE_LEVEL, "minLevel"), ]) D2D1_HWND_RENDER_TARGET_PROPERTIES = Struct("D2D1_HWND_RENDER_TARGET_PROPERTIES", [ (HWND, "hwnd"), (D2D1_SIZE_U, "pixelSize"), (D2D1_PRESENT_OPTIONS, "presentOptions"), ]) D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS = EnumFlag("D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS", [ "D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE", "D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE", ]) D2D1_DRAWING_STATE_DESCRIPTION = Struct("D2D1_DRAWING_STATE_DESCRIPTION", [ (D2D1_ANTIALIAS_MODE, "antialiasMode"), (D2D1_TEXT_ANTIALIAS_MODE, "textAntialiasMode"), (D2D1_TAG, "tag1"), (D2D1_TAG, "tag2"), (D2D1_MATRIX_3X2_F, "transform"), ]) D2D1_DC_INITIALIZE_MODE = Enum("D2D1_DC_INITIALIZE_MODE", [ "D2D1_DC_INITIALIZE_MODE_COPY", "D2D1_DC_INITIALIZE_MODE_CLEAR", ]) D2D1_DEBUG_LEVEL = Enum("D2D1_DEBUG_LEVEL", [ "D2D1_DEBUG_LEVEL_NONE", "D2D1_DEBUG_LEVEL_ERROR", "D2D1_DEBUG_LEVEL_WARNING", "D2D1_DEBUG_LEVEL_INFORMATION", ]) D2D1_FACTORY_TYPE = Enum("D2D1_FACTORY_TYPE", [ "D2D1_FACTORY_TYPE_SINGLE_THREADED", "D2D1_FACTORY_TYPE_MULTI_THREADED", ]) D2D1_FACTORY_OPTIONS = Struct("D2D1_FACTORY_OPTIONS", [ (D2D1_DEBUG_LEVEL, "debugLevel"), ]) ID2D1Resource.methods += [ StdMethod(Void, "GetFactory", [Out(Pointer(ObjPointer(ID2D1Factory)), "factory")], const=True), ] ID2D1Bitmap.methods += [ StdMethod(D2D1_SIZE_F, "GetSize", [], const=True), StdMethod(D2D1_SIZE_U, "GetPixelSize", [], const=True), StdMethod(D2D1_PIXEL_FORMAT, "GetPixelFormat", [], const=True), StdMethod(Void, "GetDpi", [Out(Pointer(FLOAT), "dpiX"), Out(Pointer(FLOAT), "dpiY")], const=True), StdMethod(HRESULT, "CopyFromBitmap", [(Pointer(Const(D2D1_POINT_2U)), "destPoint"), (ObjPointer(ID2D1Bitmap), "bitmap"), (Pointer(Const(D2D1_RECT_U)), "srcRect")]), StdMethod(HRESULT, "CopyFromRenderTarget", [(Pointer(Const(D2D1_POINT_2U)), "destPoint"), (ObjPointer(ID2D1RenderTarget), "renderTarget"), (Pointer(Const(D2D1_RECT_U)), "srcRect")]), StdMethod(HRESULT, "CopyFromMemory", [(Pointer(Const(D2D1_RECT_U)), "dstRect"), (OpaquePointer(Const(Void)), "srcData"), (UINT32, "pitch")]), ] ID2D1GradientStopCollection.methods += [ StdMethod(UINT32, "GetGradientStopCount", [], const=True), StdMethod(Void, "GetGradientStops", [Out(Pointer(D2D1_GRADIENT_STOP), "gradientStops"), (UINT, "gradientStopsCount")], const=True), StdMethod(D2D1_GAMMA, "GetColorInterpolationGamma", [], const=True), StdMethod(D2D1_EXTEND_MODE, "GetExtendMode", [], const=True), ] ID2D1Brush.methods += [ StdMethod(Void, "SetOpacity", [(FLOAT, "opacity")]), StdMethod(Void, "SetTransform", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "transform")]), StdMethod(FLOAT, "GetOpacity", [], const=True), StdMethod(Void, "GetTransform", [Out(Pointer(D2D1_MATRIX_3X2_F), "transform")], const=True), ] ID2D1BitmapBrush.methods += [ StdMethod(Void, "SetExtendModeX", [(D2D1_EXTEND_MODE, "extendModeX")]), StdMethod(Void, "SetExtendModeY", [(D2D1_EXTEND_MODE, "extendModeY")]), StdMethod(Void, "SetInterpolationMode", [(D2D1_BITMAP_INTERPOLATION_MODE, "interpolationMode")]), StdMethod(Void, "SetBitmap", [(ObjPointer(ID2D1Bitmap), "bitmap")]), StdMethod(D2D1_EXTEND_MODE, "GetExtendModeX", [], const=True), StdMethod(D2D1_EXTEND_MODE, "GetExtendModeY", [], const=True), StdMethod(D2D1_BITMAP_INTERPOLATION_MODE, "GetInterpolationMode", [], const=True), StdMethod(Void, "GetBitmap", [Out(Pointer(ObjPointer(ID2D1Bitmap)), "bitmap")], const=True), ] ID2D1SolidColorBrush.methods += [ StdMethod(Void, "SetColor", [(Pointer(Const(D2D1_COLOR_F)), "color")]), StdMethod(D2D1_COLOR_F, "GetColor", [], const=True), ] ID2D1LinearGradientBrush.methods += [ StdMethod(Void, "SetStartPoint", [(D2D1_POINT_2F, "startPoint")]), StdMethod(Void, "SetEndPoint", [(D2D1_POINT_2F, "endPoint")]), StdMethod(D2D1_POINT_2F, "GetStartPoint", [], const=True), StdMethod(D2D1_POINT_2F, "GetEndPoint", [], const=True), StdMethod(Void, "GetGradientStopCollection", [Out(Pointer(ObjPointer(ID2D1GradientStopCollection)), "gradientStopCollection")], const=True), ] ID2D1RadialGradientBrush.methods += [ StdMethod(Void, "SetCenter", [(D2D1_POINT_2F, "center")]), StdMethod(Void, "SetGradientOriginOffset", [(D2D1_POINT_2F, "gradientOriginOffset")]), StdMethod(Void, "SetRadiusX", [(FLOAT, "radiusX")]), StdMethod(Void, "SetRadiusY", [(FLOAT, "radiusY")]), StdMethod(D2D1_POINT_2F, "GetCenter", [], const=True), StdMethod(D2D1_POINT_2F, "GetGradientOriginOffset", [], const=True), StdMethod(FLOAT, "GetRadiusX", [], const=True), StdMethod(FLOAT, "GetRadiusY", [], const=True), StdMethod(Void, "GetGradientStopCollection", [Out(Pointer(ObjPointer(ID2D1GradientStopCollection)), "gradientStopCollection")], const=True), ] ID2D1StrokeStyle.methods += [ StdMethod(D2D1_CAP_STYLE, "GetStartCap", [], const=True), StdMethod(D2D1_CAP_STYLE, "GetEndCap", [], const=True), StdMethod(D2D1_CAP_STYLE, "GetDashCap", [], const=True), StdMethod(FLOAT, "GetMiterLimit", [], const=True), StdMethod(D2D1_LINE_JOIN, "GetLineJoin", [], const=True), StdMethod(FLOAT, "GetDashOffset", [], const=True), StdMethod(D2D1_DASH_STYLE, "GetDashStyle", [], const=True), StdMethod(UINT32, "GetDashesCount", [], const=True), StdMethod(Void, "GetDashes", [Out(Array(FLOAT, "dashesCount"), "dashes"), (UINT, "dashesCount")], const=True), ] ID2D1Geometry.methods += [ StdMethod(HRESULT, "GetBounds", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), Out(Pointer(D2D1_RECT_F), "bounds")], const=True), StdMethod(HRESULT, "GetWidenedBounds", [(FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(D2D1_RECT_F), "bounds")], const=True), StdMethod(HRESULT, "StrokeContainsPoint", [(D2D1_POINT_2F, "point"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(BOOL), "contains")], const=True), StdMethod(HRESULT, "FillContainsPoint", [(D2D1_POINT_2F, "point"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(BOOL), "contains")], const=True), StdMethod(HRESULT, "CompareWithGeometry", [(ObjPointer(ID2D1Geometry), "inputGeometry"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "inputGeometryTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(D2D1_GEOMETRY_RELATION), "relation")], const=True), StdMethod(HRESULT, "Simplify", [(D2D1_GEOMETRY_SIMPLIFICATION_OPTION, "simplificationOption"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), (ObjPointer(ID2D1SimplifiedGeometrySink), "geometrySink")], const=True), StdMethod(HRESULT, "Tessellate", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), (ObjPointer(ID2D1TessellationSink), "tessellationSink")], const=True), StdMethod(HRESULT, "CombineWithGeometry", [(ObjPointer(ID2D1Geometry), "inputGeometry"), (D2D1_COMBINE_MODE, "combineMode"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "inputGeometryTransform"), (FLOAT, "flatteningTolerance"), (ObjPointer(ID2D1SimplifiedGeometrySink), "geometrySink")], const=True), StdMethod(HRESULT, "Outline", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), (ObjPointer(ID2D1SimplifiedGeometrySink), "geometrySink")], const=True), StdMethod(HRESULT, "ComputeArea", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(FLOAT), "area")], const=True), StdMethod(HRESULT, "ComputeLength", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(FLOAT), "length")], const=True), StdMethod(HRESULT, "ComputePointAtLength", [(FLOAT, "length"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), Out(Pointer(D2D1_POINT_2F), "point"), Out(Pointer(D2D1_POINT_2F), "unitTangentVector")], const=True), StdMethod(HRESULT, "Widen", [(FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "worldTransform"), (FLOAT, "flatteningTolerance"), (ObjPointer(ID2D1SimplifiedGeometrySink), "geometrySink")], const=True), ] ID2D1RectangleGeometry.methods += [ StdMethod(Void, "GetRect", [Out(Pointer(D2D1_RECT_F), "rect")], const=True), ] ID2D1RoundedRectangleGeometry.methods += [ StdMethod(Void, "GetRoundedRect", [Out(Pointer(D2D1_ROUNDED_RECT), "roundedRect")], const=True), ] ID2D1EllipseGeometry.methods += [ StdMethod(Void, "GetEllipse", [Out(Pointer(D2D1_ELLIPSE), "ellipse")], const=True), ] ID2D1GeometryGroup.methods += [ StdMethod(D2D1_FILL_MODE, "GetFillMode", [], const=True), StdMethod(UINT32, "GetSourceGeometryCount", [], const=True), StdMethod(Void, "GetSourceGeometries", [Out(Array(ObjPointer(ID2D1Geometry), "geometriesCount"), "geometries"), (UINT, "geometriesCount")], const=True), ] ID2D1TransformedGeometry.methods += [ StdMethod(Void, "GetSourceGeometry", [Out(Pointer(ObjPointer(ID2D1Geometry)), "sourceGeometry")], const=True), StdMethod(Void, "GetTransform", [Out(Pointer(D2D1_MATRIX_3X2_F), "transform")], const=True), ] ID2D1SimplifiedGeometrySink.methods += [ StdMethod(Void, "SetFillMode", [(D2D1_FILL_MODE, "fillMode")]), StdMethod(Void, "SetSegmentFlags", [(D2D1_PATH_SEGMENT, "vertexFlags")]), StdMethod(Void, "BeginFigure", [(D2D1_POINT_2F, "startPoint"), (D2D1_FIGURE_BEGIN, "figureBegin")]), StdMethod(Void, "AddLines", [(Array(Const(D2D1_POINT_2F), "pointsCount"), "points"), (UINT, "pointsCount")]), StdMethod(Void, "AddBeziers", [(Array(Const(D2D1_BEZIER_SEGMENT), "beziersCount"), "beziers"), (UINT, "beziersCount")]), StdMethod(Void, "EndFigure", [(D2D1_FIGURE_END, "figureEnd")]), StdMethod(HRESULT, "Close", []), ] ID2D1GeometrySink.methods += [ StdMethod(Void, "AddLine", [(D2D1_POINT_2F, "point")]), StdMethod(Void, "AddBezier", [(Pointer(Const(D2D1_BEZIER_SEGMENT)), "bezier")]), StdMethod(Void, "AddQuadraticBezier", [(Pointer(Const(D2D1_QUADRATIC_BEZIER_SEGMENT)), "bezier")]), StdMethod(Void, "AddQuadraticBeziers", [(Array(Const(D2D1_QUADRATIC_BEZIER_SEGMENT), "beziersCount"), "beziers"), (UINT, "beziersCount")]), StdMethod(Void, "AddArc", [(Pointer(Const(D2D1_ARC_SEGMENT)), "arc")]), ] ID2D1TessellationSink.methods += [ StdMethod(Void, "AddTriangles", [(Array(Const(D2D1_TRIANGLE), "trianglesCount"), "triangles"), (UINT, "trianglesCount")]), StdMethod(HRESULT, "Close", []), ] ID2D1PathGeometry.methods += [ StdMethod(HRESULT, "Open", [Out(Pointer(ObjPointer(ID2D1GeometrySink)), "geometrySink")]), StdMethod(HRESULT, "Stream", [(ObjPointer(ID2D1GeometrySink), "geometrySink")], const=True), StdMethod(HRESULT, "GetSegmentCount", [Out(Pointer(UINT32), "count")], const=True), StdMethod(HRESULT, "GetFigureCount", [Out(Pointer(UINT32), "count")], const=True), ] ID2D1Mesh.methods += [ StdMethod(HRESULT, "Open", [Out(Pointer(ObjPointer(ID2D1TessellationSink)), "tessellationSink")]), ] ID2D1Layer.methods += [ StdMethod(D2D1_SIZE_F, "GetSize", [], const=True), ] ID2D1DrawingStateBlock.methods += [ StdMethod(Void, "GetDescription", [Out(Pointer(D2D1_DRAWING_STATE_DESCRIPTION), "stateDescription")], const=True), StdMethod(Void, "SetDescription", [(Pointer(Const(D2D1_DRAWING_STATE_DESCRIPTION)), "stateDescription")]), StdMethod(Void, "SetTextRenderingParams", [(ObjPointer(IDWriteRenderingParams), "textRenderingParams")]), StdMethod(Void, "GetTextRenderingParams", [Out(Pointer(ObjPointer(IDWriteRenderingParams)), "textRenderingParams")], const=True), ] ID2D1RenderTarget.methods += [ StdMethod(HRESULT, "CreateBitmap", [(D2D1_SIZE_U, "size"), (OpaquePointer(Const(Void)), "srcData"), (UINT32, "pitch"), (Pointer(Const(D2D1_BITMAP_PROPERTIES)), "bitmapProperties"), Out(Pointer(ObjPointer(ID2D1Bitmap)), "bitmap")]), StdMethod(HRESULT, "CreateBitmapFromWicBitmap", [(Opaque("IWICBitmapSource *"), "wicBitmapSource"), (Pointer(Const(D2D1_BITMAP_PROPERTIES)), "bitmapProperties"), Out(Pointer(ObjPointer(ID2D1Bitmap)), "bitmap")]), StdMethod(HRESULT, "CreateSharedBitmap", [(REFIID, "riid"), Out(OpaquePointer(Void), "data"), (Pointer(Const(D2D1_BITMAP_PROPERTIES)), "bitmapProperties"), Out(Pointer(ObjPointer(ID2D1Bitmap)), "bitmap")]), StdMethod(HRESULT, "CreateBitmapBrush", [(ObjPointer(ID2D1Bitmap), "bitmap"), (Pointer(Const(D2D1_BITMAP_BRUSH_PROPERTIES)), "bitmapBrushProperties"), (Pointer(Const(D2D1_BRUSH_PROPERTIES)), "brushProperties"), Out(Pointer(ObjPointer(ID2D1BitmapBrush)), "bitmapBrush")]), StdMethod(HRESULT, "CreateSolidColorBrush", [(Pointer(Const(D2D1_COLOR_F)), "color"), (Pointer(Const(D2D1_BRUSH_PROPERTIES)), "brushProperties"), Out(Pointer(ObjPointer(ID2D1SolidColorBrush)), "solidColorBrush")]), StdMethod(HRESULT, "CreateGradientStopCollection", [(Array(Const(D2D1_GRADIENT_STOP), "gradientStopsCount"), "gradientStops"), (UINT, "gradientStopsCount"), (D2D1_GAMMA, "colorInterpolationGamma"), (D2D1_EXTEND_MODE, "extendMode"), Out(Pointer(ObjPointer(ID2D1GradientStopCollection)), "gradientStopCollection")]), StdMethod(HRESULT, "CreateLinearGradientBrush", [(Pointer(Const(D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES)), "linearGradientBrushProperties"), (Pointer(Const(D2D1_BRUSH_PROPERTIES)), "brushProperties"), (ObjPointer(ID2D1GradientStopCollection), "gradientStopCollection"), Out(Pointer(ObjPointer(ID2D1LinearGradientBrush)), "linearGradientBrush")]), StdMethod(HRESULT, "CreateRadialGradientBrush", [(Pointer(Const(D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES)), "radialGradientBrushProperties"), (Pointer(Const(D2D1_BRUSH_PROPERTIES)), "brushProperties"), (ObjPointer(ID2D1GradientStopCollection), "gradientStopCollection"), Out(Pointer(ObjPointer(ID2D1RadialGradientBrush)), "radialGradientBrush")]), StdMethod(HRESULT, "CreateCompatibleRenderTarget", [(Pointer(Const(D2D1_SIZE_F)), "desiredSize"), (Pointer(Const(D2D1_SIZE_U)), "desiredPixelSize"), (Pointer(Const(D2D1_PIXEL_FORMAT)), "desiredFormat"), (D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS, "options"), Out(Pointer(ObjPointer(ID2D1BitmapRenderTarget)), "bitmapRenderTarget")]), StdMethod(HRESULT, "CreateLayer", [(Pointer(Const(D2D1_SIZE_F)), "size"), Out(Pointer(ObjPointer(ID2D1Layer)), "layer")]), StdMethod(HRESULT, "CreateMesh", [Out(Pointer(ObjPointer(ID2D1Mesh)), "mesh")]), StdMethod(Void, "DrawLine", [(D2D1_POINT_2F, "point0"), (D2D1_POINT_2F, "point1"), (ObjPointer(ID2D1Brush), "brush"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle")]), StdMethod(Void, "DrawRectangle", [(Pointer(Const(D2D1_RECT_F)), "rect"), (ObjPointer(ID2D1Brush), "brush"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle")]), StdMethod(Void, "FillRectangle", [(Pointer(Const(D2D1_RECT_F)), "rect"), (ObjPointer(ID2D1Brush), "brush")]), StdMethod(Void, "DrawRoundedRectangle", [(Pointer(Const(D2D1_ROUNDED_RECT)), "roundedRect"), (ObjPointer(ID2D1Brush), "brush"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle")]), StdMethod(Void, "FillRoundedRectangle", [(Pointer(Const(D2D1_ROUNDED_RECT)), "roundedRect"), (ObjPointer(ID2D1Brush), "brush")]), StdMethod(Void, "DrawEllipse", [(Pointer(Const(D2D1_ELLIPSE)), "ellipse"), (ObjPointer(ID2D1Brush), "brush"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle")]), StdMethod(Void, "FillEllipse", [(Pointer(Const(D2D1_ELLIPSE)), "ellipse"), (ObjPointer(ID2D1Brush), "brush")]), StdMethod(Void, "DrawGeometry", [(ObjPointer(ID2D1Geometry), "geometry"), (ObjPointer(ID2D1Brush), "brush"), (FLOAT, "strokeWidth"), (ObjPointer(ID2D1StrokeStyle), "strokeStyle")]), StdMethod(Void, "FillGeometry", [(ObjPointer(ID2D1Geometry), "geometry"), (ObjPointer(ID2D1Brush), "brush"), (ObjPointer(ID2D1Brush), "opacityBrush")]), StdMethod(Void, "FillMesh", [(ObjPointer(ID2D1Mesh), "mesh"), (ObjPointer(ID2D1Brush), "brush")]), StdMethod(Void, "FillOpacityMask", [(ObjPointer(ID2D1Bitmap), "opacityMask"), (ObjPointer(ID2D1Brush), "brush"), (D2D1_OPACITY_MASK_CONTENT, "content"), (Pointer(Const(D2D1_RECT_F)), "destinationRectangle"), (Pointer(Const(D2D1_RECT_F)), "sourceRectangle")]), StdMethod(Void, "DrawBitmap", [(ObjPointer(ID2D1Bitmap), "bitmap"), (Pointer(Const(D2D1_RECT_F)), "destinationRectangle"), (FLOAT, "opacity"), (D2D1_BITMAP_INTERPOLATION_MODE, "interpolationMode"), (Pointer(Const(D2D1_RECT_F)), "sourceRectangle")]), StdMethod(Void, "DrawText", [(String(Const(WCHAR), "stringLength", wide=True), "string"), (UINT, "stringLength"), (ObjPointer(IDWriteTextFormat), "textFormat"), (Pointer(Const(D2D1_RECT_F)), "layoutRect"), (ObjPointer(ID2D1Brush), "defaultForegroundBrush"), (D2D1_DRAW_TEXT_OPTIONS, "options"), (DWRITE_MEASURING_MODE, "measuringMode")]), StdMethod(Void, "DrawTextLayout", [(D2D1_POINT_2F, "origin"), (ObjPointer(IDWriteTextLayout), "textLayout"), (ObjPointer(ID2D1Brush), "defaultForegroundBrush"), (D2D1_DRAW_TEXT_OPTIONS, "options")]), StdMethod(Void, "DrawGlyphRun", [(D2D1_POINT_2F, "baselineOrigin"), (Pointer(Const(DWRITE_GLYPH_RUN)), "glyphRun"), (ObjPointer(ID2D1Brush), "foregroundBrush"), (DWRITE_MEASURING_MODE, "measuringMode")]), StdMethod(Void, "SetTransform", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "transform")]), StdMethod(Void, "GetTransform", [Out(Pointer(D2D1_MATRIX_3X2_F), "transform")], const=True), StdMethod(Void, "SetAntialiasMode", [(D2D1_ANTIALIAS_MODE, "antialiasMode")]), StdMethod(D2D1_ANTIALIAS_MODE, "GetAntialiasMode", [], const=True), StdMethod(Void, "SetTextAntialiasMode", [(D2D1_TEXT_ANTIALIAS_MODE, "textAntialiasMode")]), StdMethod(D2D1_TEXT_ANTIALIAS_MODE, "GetTextAntialiasMode", [], const=True), StdMethod(Void, "SetTextRenderingParams", [(ObjPointer(IDWriteRenderingParams), "textRenderingParams")]), StdMethod(Void, "GetTextRenderingParams", [Out(Pointer(ObjPointer(IDWriteRenderingParams)), "textRenderingParams")], const=True), StdMethod(Void, "SetTags", [(D2D1_TAG, "tag1"), (D2D1_TAG, "tag2")]), StdMethod(Void, "GetTags", [Out(Pointer(D2D1_TAG), "tag1"), Out(Pointer(D2D1_TAG), "tag2")], const=True), StdMethod(Void, "PushLayer", [(Pointer(Const(D2D1_LAYER_PARAMETERS)), "layerParameters"), (ObjPointer(ID2D1Layer), "layer")]), StdMethod(Void, "PopLayer", []), StdMethod(HRESULT, "Flush", [Out(Pointer(D2D1_TAG), "tag1"), Out(Pointer(D2D1_TAG), "tag2")]), StdMethod(Void, "SaveDrawingState", [(ObjPointer(ID2D1DrawingStateBlock), "drawingStateBlock")], const=True), StdMethod(Void, "RestoreDrawingState", [(ObjPointer(ID2D1DrawingStateBlock), "drawingStateBlock")]), StdMethod(Void, "PushAxisAlignedClip", [(Pointer(Const(D2D1_RECT_F)), "clipRect"), (D2D1_ANTIALIAS_MODE, "antialiasMode")]), StdMethod(Void, "PopAxisAlignedClip", []), StdMethod(Void, "Clear", [(Pointer(Const(D2D1_COLOR_F)), "clearColor")]), StdMethod(Void, "BeginDraw", []), StdMethod(HRESULT, "EndDraw", [Out(Pointer(D2D1_TAG), "tag1"), Out(Pointer(D2D1_TAG), "tag2")]), StdMethod(D2D1_PIXEL_FORMAT, "GetPixelFormat", [], const=True), StdMethod(Void, "SetDpi", [(FLOAT, "dpiX"), (FLOAT, "dpiY")]), StdMethod(Void, "GetDpi", [Out(Pointer(FLOAT), "dpiX"), Out(Pointer(FLOAT), "dpiY")], const=True), StdMethod(D2D1_SIZE_F, "GetSize", [], const=True), StdMethod(D2D1_SIZE_U, "GetPixelSize", [], const=True), StdMethod(UINT32, "GetMaximumBitmapSize", [], const=True), StdMethod(BOOL, "IsSupported", [(Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties")], const=True), ] ID2D1BitmapRenderTarget.methods += [ StdMethod(HRESULT, "GetBitmap", [Out(Pointer(ObjPointer(ID2D1Bitmap)), "bitmap")]), ] ID2D1HwndRenderTarget.methods += [ StdMethod(D2D1_WINDOW_STATE, "CheckWindowState", []), StdMethod(HRESULT, "Resize", [(Pointer(Const(D2D1_SIZE_U)), "pixelSize")]), StdMethod(HWND, "GetHwnd", [], const=True), ] ID2D1GdiInteropRenderTarget.methods += [ StdMethod(HRESULT, "GetDC", [(D2D1_DC_INITIALIZE_MODE, "mode"), Out(Pointer(HDC), "hdc")]), StdMethod(HRESULT, "ReleaseDC", [(Pointer(Const(RECT)), "update")]), ] ID2D1DCRenderTarget.methods += [ StdMethod(HRESULT, "BindDC", [(Const(HDC), "hDC"), (Pointer(Const(RECT)), "pSubRect")]), ] ID2D1Factory.methods += [ StdMethod(HRESULT, "ReloadSystemMetrics", []), StdMethod(Void, "GetDesktopDpi", [Out(Pointer(FLOAT), "dpiX"), Out(Pointer(FLOAT), "dpiY")]), StdMethod(HRESULT, "CreateRectangleGeometry", [(Pointer(Const(D2D1_RECT_F)), "rectangle"), Out(Pointer(ObjPointer(ID2D1RectangleGeometry)), "rectangleGeometry")]), StdMethod(HRESULT, "CreateRoundedRectangleGeometry", [(Pointer(Const(D2D1_ROUNDED_RECT)), "roundedRectangle"), Out(Pointer(ObjPointer(ID2D1RoundedRectangleGeometry)), "roundedRectangleGeometry")]), StdMethod(HRESULT, "CreateEllipseGeometry", [(Pointer(Const(D2D1_ELLIPSE)), "ellipse"), Out(Pointer(ObjPointer(ID2D1EllipseGeometry)), "ellipseGeometry")]), StdMethod(HRESULT, "CreateGeometryGroup", [(D2D1_FILL_MODE, "fillMode"), (Pointer(ObjPointer(ID2D1Geometry)), "geometries"), (UINT, "geometriesCount"), Out(Pointer(ObjPointer(ID2D1GeometryGroup)), "geometryGroup")]), StdMethod(HRESULT, "CreateTransformedGeometry", [(ObjPointer(ID2D1Geometry), "sourceGeometry"), (Pointer(Const(D2D1_MATRIX_3X2_F)), "transform"), Out(Pointer(ObjPointer(ID2D1TransformedGeometry)), "transformedGeometry")]), StdMethod(HRESULT, "CreatePathGeometry", [Out(Pointer(ObjPointer(ID2D1PathGeometry)), "pathGeometry")]), StdMethod(HRESULT, "CreateStrokeStyle", [(Pointer(Const(D2D1_STROKE_STYLE_PROPERTIES)), "strokeStyleProperties"), (Pointer(Const(FLOAT)), "dashes"), (UINT, "dashesCount"), Out(Pointer(ObjPointer(ID2D1StrokeStyle)), "strokeStyle")]), StdMethod(HRESULT, "CreateDrawingStateBlock", [(Pointer(Const(D2D1_DRAWING_STATE_DESCRIPTION)), "drawingStateDescription"), (ObjPointer(IDWriteRenderingParams), "textRenderingParams"), Out(Pointer(ObjPointer(ID2D1DrawingStateBlock)), "drawingStateBlock")]), StdMethod(HRESULT, "CreateWicBitmapRenderTarget", [(Opaque("IWICBitmap *"), "target"), (Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties"), Out(Pointer(ObjPointer(ID2D1RenderTarget)), "renderTarget")]), StdMethod(HRESULT, "CreateHwndRenderTarget", [(Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties"), (Pointer(Const(D2D1_HWND_RENDER_TARGET_PROPERTIES)), "hwndRenderTargetProperties"), Out(Pointer(ObjPointer(ID2D1HwndRenderTarget)), "hwndRenderTarget")]), StdMethod(HRESULT, "CreateDxgiSurfaceRenderTarget", [(ObjPointer(IDXGISurface), "dxgiSurface"), (Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties"), Out(Pointer(ObjPointer(ID2D1RenderTarget)), "renderTarget")]), StdMethod(HRESULT, "CreateDCRenderTarget", [(Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties"), Out(Pointer(ObjPointer(ID2D1DCRenderTarget)), "dcRenderTarget")]), ] d2d1 = Module("d2d1") d2d1.addInterfaces([ ID2D1Factory ]) d2d1.addFunctions([ StdFunction(HRESULT, "D2D1CreateFactory", [(D2D1_FACTORY_TYPE, "factoryType"), (REFIID, "riid"), (Pointer(Const(D2D1_FACTORY_OPTIONS)), "pFactoryOptions"), Out(Pointer(ObjPointer(Void)), "ppIFactory")]), StdFunction(Void, "D2D1MakeRotateMatrix", [(FLOAT, "angle"), (D2D1_POINT_2F, "center"), Out(Pointer(D2D1_MATRIX_3X2_F), "matrix")]), StdFunction(Void, "D2D1MakeSkewMatrix", [(FLOAT, "angleX"), (FLOAT, "angleY"), (D2D1_POINT_2F, "center"), Out(Pointer(D2D1_MATRIX_3X2_F), "matrix")]), StdFunction(BOOL, "D2D1IsMatrixInvertible", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "matrix")]), StdFunction(BOOL, "D2D1InvertMatrix", [InOut(Pointer(D2D1_MATRIX_3X2_F), "matrix")]), ]) tmpNnpnZF/specs/d3d11.py0000664000175000017500000024127712543167424014304 0ustar chrischris########################################################################## # # Copyright 2012 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dxgi import * from d3dcommon import * from d3d11sdklayers import * HRESULT = MAKE_HRESULT([ "D3D11_ERROR_FILE_NOT_FOUND", "D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS", "D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS", "D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD", "D3DERR_INVALIDCALL", "D3DERR_WASSTILLDRAWING", ]) ID3D11DepthStencilState = Interface("ID3D11DepthStencilState", ID3D11DeviceChild) ID3D11BlendState = Interface("ID3D11BlendState", ID3D11DeviceChild) ID3D11RasterizerState = Interface("ID3D11RasterizerState", ID3D11DeviceChild) ID3D11Resource = Interface("ID3D11Resource", ID3D11DeviceChild) ID3D11Buffer = Interface("ID3D11Buffer", ID3D11Resource) ID3D11Texture1D = Interface("ID3D11Texture1D", ID3D11Resource) ID3D11Texture2D = Interface("ID3D11Texture2D", ID3D11Resource) ID3D11Texture3D = Interface("ID3D11Texture3D", ID3D11Resource) ID3D11View = Interface("ID3D11View", ID3D11DeviceChild) ID3D11ShaderResourceView = Interface("ID3D11ShaderResourceView", ID3D11View) ID3D11RenderTargetView = Interface("ID3D11RenderTargetView", ID3D11View) ID3D11DepthStencilView = Interface("ID3D11DepthStencilView", ID3D11View) ID3D11UnorderedAccessView = Interface("ID3D11UnorderedAccessView", ID3D11View) ID3D11VertexShader = Interface("ID3D11VertexShader", ID3D11DeviceChild) ID3D11HullShader = Interface("ID3D11HullShader", ID3D11DeviceChild) ID3D11DomainShader = Interface("ID3D11DomainShader", ID3D11DeviceChild) ID3D11GeometryShader = Interface("ID3D11GeometryShader", ID3D11DeviceChild) ID3D11PixelShader = Interface("ID3D11PixelShader", ID3D11DeviceChild) ID3D11ComputeShader = Interface("ID3D11ComputeShader", ID3D11DeviceChild) ID3D11InputLayout = Interface("ID3D11InputLayout", ID3D11DeviceChild) ID3D11SamplerState = Interface("ID3D11SamplerState", ID3D11DeviceChild) ID3D11Asynchronous = Interface("ID3D11Asynchronous", ID3D11DeviceChild) ID3D11Query = Interface("ID3D11Query", ID3D11Asynchronous) ID3D11Predicate = Interface("ID3D11Predicate", ID3D11Query) ID3D11Counter = Interface("ID3D11Counter", ID3D11Asynchronous) ID3D11ClassInstance = Interface("ID3D11ClassInstance", ID3D11DeviceChild) ID3D11ClassLinkage = Interface("ID3D11ClassLinkage", ID3D11DeviceChild) ID3D11CommandList = Interface("ID3D11CommandList", ID3D11DeviceChild) ID3D11Device = Interface("ID3D11Device", IUnknown) D3D11_INPUT_CLASSIFICATION = Enum("D3D11_INPUT_CLASSIFICATION", [ "D3D11_INPUT_PER_VERTEX_DATA", "D3D11_INPUT_PER_INSTANCE_DATA", ]) D3D11_INPUT_ELEMENT_ALIGNED_BYTE_OFFSET = FakeEnum(UINT, [ "D3D11_APPEND_ALIGNED_ELEMENT", ]) D3D11_INPUT_ELEMENT_DESC = Struct("D3D11_INPUT_ELEMENT_DESC", [ (LPCSTR, "SemanticName"), (UINT, "SemanticIndex"), (DXGI_FORMAT, "Format"), (UINT, "InputSlot"), (D3D11_INPUT_ELEMENT_ALIGNED_BYTE_OFFSET, "AlignedByteOffset"), (D3D11_INPUT_CLASSIFICATION, "InputSlotClass"), (UINT, "InstanceDataStepRate"), ]) D3D11_FILL_MODE = Enum("D3D11_FILL_MODE", [ "D3D11_FILL_WIREFRAME", "D3D11_FILL_SOLID", ]) D3D11_PRIMITIVE_TOPOLOGY = Enum("D3D11_PRIMITIVE_TOPOLOGY", [ "D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED", "D3D11_PRIMITIVE_TOPOLOGY_POINTLIST", "D3D11_PRIMITIVE_TOPOLOGY_LINELIST", "D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP", "D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST", "D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP", "D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ", "D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ", "D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ", "D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ", "D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST", "D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST", ]) D3D11_PRIMITIVE = Enum("D3D11_PRIMITIVE", [ "D3D11_PRIMITIVE_UNDEFINED", "D3D11_PRIMITIVE_POINT", "D3D11_PRIMITIVE_LINE", "D3D11_PRIMITIVE_TRIANGLE", "D3D11_PRIMITIVE_LINE_ADJ", "D3D11_PRIMITIVE_TRIANGLE_ADJ", "D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH", "D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH", ]) D3D11_CULL_MODE = Enum("D3D11_CULL_MODE", [ "D3D11_CULL_NONE", "D3D11_CULL_FRONT", "D3D11_CULL_BACK", ]) D3D11_SO_DECLARATION_ENTRY = Struct("D3D11_SO_DECLARATION_ENTRY", [ (UINT, "Stream"), (LPCSTR, "SemanticName"), (UINT, "SemanticIndex"), (BYTE, "StartComponent"), (BYTE, "ComponentCount"), (BYTE, "OutputSlot"), ]) D3D11_VIEWPORT = Struct("D3D11_VIEWPORT", [ (FLOAT, "TopLeftX"), (FLOAT, "TopLeftY"), (FLOAT, "Width"), (FLOAT, "Height"), (FLOAT, "MinDepth"), (FLOAT, "MaxDepth"), ]) D3D11_RESOURCE_DIMENSION = Enum("D3D11_RESOURCE_DIMENSION", [ "D3D11_RESOURCE_DIMENSION_UNKNOWN", "D3D11_RESOURCE_DIMENSION_BUFFER", "D3D11_RESOURCE_DIMENSION_TEXTURE1D", "D3D11_RESOURCE_DIMENSION_TEXTURE2D", "D3D11_RESOURCE_DIMENSION_TEXTURE3D", ]) D3D11_SRV_DIMENSION = Enum("D3D11_SRV_DIMENSION", [ "D3D11_SRV_DIMENSION_UNKNOWN", "D3D11_SRV_DIMENSION_BUFFER", "D3D11_SRV_DIMENSION_TEXTURE1D", "D3D11_SRV_DIMENSION_TEXTURE1DARRAY", "D3D11_SRV_DIMENSION_TEXTURE2D", "D3D11_SRV_DIMENSION_TEXTURE2DARRAY", "D3D11_SRV_DIMENSION_TEXTURE2DMS", "D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY", "D3D11_SRV_DIMENSION_TEXTURE3D", "D3D11_SRV_DIMENSION_TEXTURECUBE", "D3D11_SRV_DIMENSION_TEXTURECUBEARRAY", "D3D11_SRV_DIMENSION_BUFFEREX", ]) D3D11_DSV_DIMENSION = Enum("D3D11_DSV_DIMENSION", [ "D3D11_DSV_DIMENSION_UNKNOWN", "D3D11_DSV_DIMENSION_TEXTURE1D", "D3D11_DSV_DIMENSION_TEXTURE1DARRAY", "D3D11_DSV_DIMENSION_TEXTURE2D", "D3D11_DSV_DIMENSION_TEXTURE2DARRAY", "D3D11_DSV_DIMENSION_TEXTURE2DMS", "D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY", ]) D3D11_RTV_DIMENSION = Enum("D3D11_RTV_DIMENSION", [ "D3D11_RTV_DIMENSION_UNKNOWN", "D3D11_RTV_DIMENSION_BUFFER", "D3D11_RTV_DIMENSION_TEXTURE1D", "D3D11_RTV_DIMENSION_TEXTURE1DARRAY", "D3D11_RTV_DIMENSION_TEXTURE2D", "D3D11_RTV_DIMENSION_TEXTURE2DARRAY", "D3D11_RTV_DIMENSION_TEXTURE2DMS", "D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY", "D3D11_RTV_DIMENSION_TEXTURE3D", ]) D3D11_UAV_DIMENSION = Enum("D3D11_UAV_DIMENSION", [ "D3D11_UAV_DIMENSION_UNKNOWN", "D3D11_UAV_DIMENSION_BUFFER", "D3D11_UAV_DIMENSION_TEXTURE1D", "D3D11_UAV_DIMENSION_TEXTURE1DARRAY", "D3D11_UAV_DIMENSION_TEXTURE2D", "D3D11_UAV_DIMENSION_TEXTURE2DARRAY", "D3D11_UAV_DIMENSION_TEXTURE3D", ]) D3D11_USAGE = Enum("D3D11_USAGE", [ "D3D11_USAGE_DEFAULT", "D3D11_USAGE_IMMUTABLE", "D3D11_USAGE_DYNAMIC", "D3D11_USAGE_STAGING", ]) D3D11_BIND_FLAG = Flags(UINT, [ "D3D11_BIND_VERTEX_BUFFER", "D3D11_BIND_INDEX_BUFFER", "D3D11_BIND_CONSTANT_BUFFER", "D3D11_BIND_SHADER_RESOURCE", "D3D11_BIND_STREAM_OUTPUT", "D3D11_BIND_RENDER_TARGET", "D3D11_BIND_DEPTH_STENCIL", "D3D11_BIND_UNORDERED_ACCESS", ]) D3D11_CPU_ACCESS_FLAG = Flags(UINT, [ "D3D11_CPU_ACCESS_WRITE", "D3D11_CPU_ACCESS_READ", ]) D3D11_RESOURCE_MISC_FLAG = Flags(UINT, [ "D3D11_RESOURCE_MISC_GENERATE_MIPS", "D3D11_RESOURCE_MISC_SHARED", "D3D11_RESOURCE_MISC_TEXTURECUBE", "D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS", "D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS", "D3D11_RESOURCE_MISC_BUFFER_STRUCTURED", "D3D11_RESOURCE_MISC_RESOURCE_CLAMP", "D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX", "D3D11_RESOURCE_MISC_GDI_COMPATIBLE", "D3D11_RESOURCE_MISC_SHARED_NTHANDLE", "D3D11_RESOURCE_MISC_RESTRICTED_CONTENT", "D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE", "D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER", "D3D11_RESOURCE_MISC_GUARDED", "D3D11_RESOURCE_MISC_TILE_POOL", "D3D11_RESOURCE_MISC_TILED", ]) D3D11_MAP = Enum("D3D11_MAP", [ "D3D11_MAP_READ", "D3D11_MAP_WRITE", "D3D11_MAP_READ_WRITE", "D3D11_MAP_WRITE_DISCARD", "D3D11_MAP_WRITE_NO_OVERWRITE", ]) D3D11_MAP_FLAG = Flags(UINT, [ "D3D11_MAP_FLAG_DO_NOT_WAIT", ]) D3D11_RAISE_FLAG = Flags(UINT, [ "D3D11_RAISE_FLAG_DRIVER_INTERNAL_ERROR", ]) D3D11_CLEAR_FLAG = Flags(UINT, [ "D3D11_CLEAR_DEPTH", "D3D11_CLEAR_STENCIL", ]) D3D11_RECT = Alias("D3D11_RECT", RECT) D3D11_BOX = Struct("D3D11_BOX", [ (UINT, "left"), (UINT, "top"), (UINT, "front"), (UINT, "right"), (UINT, "bottom"), (UINT, "back"), ]) ID3D11DeviceChild.methods += [ StdMethod(Void, "GetDevice", [Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice")]), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "guid"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")]), StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "pData")], sideeffects=False), ] D3D11_COMPARISON_FUNC = Enum("D3D11_COMPARISON_FUNC", [ "D3D11_COMPARISON_NEVER", "D3D11_COMPARISON_LESS", "D3D11_COMPARISON_EQUAL", "D3D11_COMPARISON_LESS_EQUAL", "D3D11_COMPARISON_GREATER", "D3D11_COMPARISON_NOT_EQUAL", "D3D11_COMPARISON_GREATER_EQUAL", "D3D11_COMPARISON_ALWAYS", ]) D3D11_DEPTH_WRITE_MASK = Enum("D3D11_DEPTH_WRITE_MASK", [ "D3D11_DEPTH_WRITE_MASK_ZERO", "D3D11_DEPTH_WRITE_MASK_ALL", ]) D3D11_STENCIL_OP = Enum("D3D11_STENCIL_OP", [ "D3D11_STENCIL_OP_KEEP", "D3D11_STENCIL_OP_ZERO", "D3D11_STENCIL_OP_REPLACE", "D3D11_STENCIL_OP_INCR_SAT", "D3D11_STENCIL_OP_DECR_SAT", "D3D11_STENCIL_OP_INVERT", "D3D11_STENCIL_OP_INCR", "D3D11_STENCIL_OP_DECR", ]) D3D11_DEPTH_STENCILOP_DESC = Struct("D3D11_DEPTH_STENCILOP_DESC", [ (D3D11_STENCIL_OP, "StencilFailOp"), (D3D11_STENCIL_OP, "StencilDepthFailOp"), (D3D11_STENCIL_OP, "StencilPassOp"), (D3D11_COMPARISON_FUNC, "StencilFunc"), ]) D3D11_DEPTH_STENCIL_DESC = Struct("D3D11_DEPTH_STENCIL_DESC", [ (BOOL, "DepthEnable"), (D3D11_DEPTH_WRITE_MASK, "DepthWriteMask"), (D3D11_COMPARISON_FUNC, "DepthFunc"), (BOOL, "StencilEnable"), (UINT8, "StencilReadMask"), (UINT8, "StencilWriteMask"), (D3D11_DEPTH_STENCILOP_DESC, "FrontFace"), (D3D11_DEPTH_STENCILOP_DESC, "BackFace"), ]) ID3D11DepthStencilState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_DEPTH_STENCIL_DESC), "pDesc")], sideeffects=False), ] D3D11_BLEND = Enum("D3D11_BLEND", [ "D3D11_BLEND_ZERO", "D3D11_BLEND_ONE", "D3D11_BLEND_SRC_COLOR", "D3D11_BLEND_INV_SRC_COLOR", "D3D11_BLEND_SRC_ALPHA", "D3D11_BLEND_INV_SRC_ALPHA", "D3D11_BLEND_DEST_ALPHA", "D3D11_BLEND_INV_DEST_ALPHA", "D3D11_BLEND_DEST_COLOR", "D3D11_BLEND_INV_DEST_COLOR", "D3D11_BLEND_SRC_ALPHA_SAT", "D3D11_BLEND_BLEND_FACTOR", "D3D11_BLEND_INV_BLEND_FACTOR", "D3D11_BLEND_SRC1_COLOR", "D3D11_BLEND_INV_SRC1_COLOR", "D3D11_BLEND_SRC1_ALPHA", "D3D11_BLEND_INV_SRC1_ALPHA", ]) D3D11_BLEND_OP = Enum("D3D11_BLEND_OP", [ "D3D11_BLEND_OP_ADD", "D3D11_BLEND_OP_SUBTRACT", "D3D11_BLEND_OP_REV_SUBTRACT", "D3D11_BLEND_OP_MIN", "D3D11_BLEND_OP_MAX", ]) D3D11_COLOR_WRITE_ENABLE = Enum("D3D11_COLOR_WRITE_ENABLE", [ "D3D11_COLOR_WRITE_ENABLE_ALL", "D3D11_COLOR_WRITE_ENABLE_RED", "D3D11_COLOR_WRITE_ENABLE_GREEN", "D3D11_COLOR_WRITE_ENABLE_BLUE", "D3D11_COLOR_WRITE_ENABLE_ALPHA", ]) D3D11_RENDER_TARGET_BLEND_DESC = Struct("D3D11_RENDER_TARGET_BLEND_DESC", [ (BOOL, "BlendEnable"), (D3D11_BLEND, "SrcBlend"), (D3D11_BLEND, "DestBlend"), (D3D11_BLEND_OP, "BlendOp"), (D3D11_BLEND, "SrcBlendAlpha"), (D3D11_BLEND, "DestBlendAlpha"), (D3D11_BLEND_OP, "BlendOpAlpha"), (UINT8, "RenderTargetWriteMask"), ]) D3D11_BLEND_DESC = Struct("D3D11_BLEND_DESC", [ (BOOL, "AlphaToCoverageEnable"), (BOOL, "IndependentBlendEnable"), (Array(D3D11_RENDER_TARGET_BLEND_DESC, 8), "RenderTarget"), ]) ID3D11BlendState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_BLEND_DESC), "pDesc")], sideeffects=False), ] D3D11_RASTERIZER_DESC = Struct("D3D11_RASTERIZER_DESC", [ (D3D11_FILL_MODE, "FillMode"), (D3D11_CULL_MODE, "CullMode"), (BOOL, "FrontCounterClockwise"), (INT, "DepthBias"), (FLOAT, "DepthBiasClamp"), (FLOAT, "SlopeScaledDepthBias"), (BOOL, "DepthClipEnable"), (BOOL, "ScissorEnable"), (BOOL, "MultisampleEnable"), (BOOL, "AntialiasedLineEnable"), ]) ID3D11RasterizerState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_RASTERIZER_DESC), "pDesc")], sideeffects=False), ] D3D11_SUBRESOURCE_DATA = Struct("D3D11_SUBRESOURCE_DATA", [ (Blob(Const(Void), "_calcSubresourceSize(pDesc, {i}, {self}.SysMemPitch, {self}.SysMemSlicePitch)"), "pSysMem"), (UINT, "SysMemPitch"), (UINT, "SysMemSlicePitch"), ]) D3D11_MAPPED_SUBRESOURCE = Struct("D3D11_MAPPED_SUBRESOURCE", [ (LinearPointer(Void, "_MappedSize"), "pData"), (UINT, "RowPitch"), (UINT, "DepthPitch"), ]) ID3D11Resource.methods += [ StdMethod(Void, "GetType", [Out(Pointer(D3D11_RESOURCE_DIMENSION), "pResourceDimension")], sideeffects=False), StdMethod(Void, "SetEvictionPriority", [(UINT, "EvictionPriority")]), StdMethod(UINT, "GetEvictionPriority", [], sideeffects=False), ] D3D11_BUFFER_DESC = Struct("D3D11_BUFFER_DESC", [ (UINT, "ByteWidth"), (D3D11_USAGE, "Usage"), (D3D11_BIND_FLAG, "BindFlags"), (D3D11_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D11_RESOURCE_MISC_FLAG, "MiscFlags"), (UINT, "StructureByteStride"), ]) ID3D11Buffer.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_BUFFER_DESC), "pDesc")], sideeffects=False), ] D3D11_TEXTURE1D_DESC = Struct("D3D11_TEXTURE1D_DESC", [ (UINT, "Width"), (UINT, "MipLevels"), (UINT, "ArraySize"), (DXGI_FORMAT, "Format"), (D3D11_USAGE, "Usage"), (D3D11_BIND_FLAG, "BindFlags"), (D3D11_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D11_RESOURCE_MISC_FLAG, "MiscFlags"), ]) ID3D11Texture1D.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_TEXTURE1D_DESC), "pDesc")], sideeffects=False), ] D3D11_TEXTURE2D_DESC = Struct("D3D11_TEXTURE2D_DESC", [ (UINT, "Width"), (UINT, "Height"), (UINT, "MipLevels"), (UINT, "ArraySize"), (DXGI_FORMAT, "Format"), (DXGI_SAMPLE_DESC, "SampleDesc"), (D3D11_USAGE, "Usage"), (D3D11_BIND_FLAG, "BindFlags"), (D3D11_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D11_RESOURCE_MISC_FLAG, "MiscFlags"), ]) ID3D11Texture2D.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_TEXTURE2D_DESC), "pDesc")], sideeffects=False), ] D3D11_TEXTURE3D_DESC = Struct("D3D11_TEXTURE3D_DESC", [ (UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), (UINT, "MipLevels"), (DXGI_FORMAT, "Format"), (D3D11_USAGE, "Usage"), (D3D11_BIND_FLAG, "BindFlags"), (D3D11_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D11_RESOURCE_MISC_FLAG, "MiscFlags"), ]) ID3D11Texture3D.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_TEXTURE3D_DESC), "pDesc")], sideeffects=False), ] D3D11_TEXTURECUBE_FACE = Enum("D3D11_TEXTURECUBE_FACE", [ "D3D11_TEXTURECUBE_FACE_POSITIVE_X", "D3D11_TEXTURECUBE_FACE_NEGATIVE_X", "D3D11_TEXTURECUBE_FACE_POSITIVE_Y", "D3D11_TEXTURECUBE_FACE_NEGATIVE_Y", "D3D11_TEXTURECUBE_FACE_POSITIVE_Z", "D3D11_TEXTURECUBE_FACE_NEGATIVE_Z", ]) ID3D11View.methods += [ StdMethod(Void, "GetResource", [Out(Pointer(ObjPointer(ID3D11Resource)), "ppResource")]), ] D3D11_BUFFER_SRV = Struct("D3D11_BUFFER_SRV", [ (UINT, "FirstElement"), (UINT, "NumElements"), ]) D3D11_BUFFEREX_SRV_FLAG = Flags(UINT, [ "D3D11_BUFFEREX_SRV_FLAG_RAW", ]) D3D11_BUFFEREX_SRV = Struct("D3D11_BUFFEREX_SRV", [ (UINT, "FirstElement"), (UINT, "NumElements"), (D3D11_BUFFEREX_SRV_FLAG, "Flags"), ]) D3D11_TEX1D_SRV = Struct("D3D11_TEX1D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D11_TEX1D_ARRAY_SRV = Struct("D3D11_TEX1D_ARRAY_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2D_SRV = Struct("D3D11_TEX2D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D11_TEX2D_ARRAY_SRV = Struct("D3D11_TEX2D_ARRAY_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX3D_SRV = Struct("D3D11_TEX3D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D11_TEXCUBE_SRV = Struct("D3D11_TEXCUBE_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D11_TEXCUBE_ARRAY_SRV = Struct("D3D11_TEXCUBE_ARRAY_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "First2DArrayFace"), (UINT, "NumCubes"), ]) D3D11_TEX2DMS_SRV = Struct("D3D11_TEX2DMS_SRV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D11_TEX2DMS_ARRAY_SRV = Struct("D3D11_TEX2DMS_ARRAY_SRV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_SHADER_RESOURCE_VIEW_DESC = Struct("D3D11_SHADER_RESOURCE_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D11_SRV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D11_SRV_DIMENSION_BUFFER", D3D11_BUFFER_SRV, "Buffer"), ("D3D11_SRV_DIMENSION_TEXTURE1D", D3D11_TEX1D_SRV, "Texture1D"), ("D3D11_SRV_DIMENSION_TEXTURE1DARRAY", D3D11_TEX1D_ARRAY_SRV, "Texture1DArray"), ("D3D11_SRV_DIMENSION_TEXTURE2D", D3D11_TEX2D_SRV, "Texture2D"), ("D3D11_SRV_DIMENSION_TEXTURE2DARRAY", D3D11_TEX2D_ARRAY_SRV, "Texture2DArray"), ("D3D11_SRV_DIMENSION_TEXTURE2DMS", D3D11_TEX2DMS_SRV, "Texture2DMS"), ("D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY", D3D11_TEX2DMS_ARRAY_SRV, "Texture2DMSArray"), ("D3D11_SRV_DIMENSION_TEXTURE3D", D3D11_TEX3D_SRV, "Texture3D"), ("D3D11_SRV_DIMENSION_TEXTURECUBE", D3D11_TEXCUBE_SRV, "TextureCube"), ("D3D11_SRV_DIMENSION_TEXTURECUBEARRAY", D3D11_TEXCUBE_ARRAY_SRV, "TextureCubeArray"), ("D3D11_SRV_DIMENSION_BUFFEREX", D3D11_BUFFEREX_SRV, "BufferEx"), ]), None), ]) ID3D11ShaderResourceView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_SHADER_RESOURCE_VIEW_DESC), "pDesc")], sideeffects=False), ] D3D11_BUFFER_RTV = Struct("D3D11_BUFFER_RTV", [ (UINT, "FirstElement"), (UINT, "NumElements"), ]) D3D11_TEX1D_RTV = Struct("D3D11_TEX1D_RTV", [ (UINT, "MipSlice"), ]) D3D11_TEX1D_ARRAY_RTV = Struct("D3D11_TEX1D_ARRAY_RTV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2D_RTV = Struct("D3D11_TEX2D_RTV", [ (UINT, "MipSlice"), ]) D3D11_TEX2DMS_RTV = Struct("D3D11_TEX2DMS_RTV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D11_TEX2D_ARRAY_RTV = Struct("D3D11_TEX2D_ARRAY_RTV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2DMS_ARRAY_RTV = Struct("D3D11_TEX2DMS_ARRAY_RTV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX3D_RTV = Struct("D3D11_TEX3D_RTV", [ (UINT, "MipSlice"), (UINT, "FirstWSlice"), (UINT, "WSize"), ]) D3D11_RENDER_TARGET_VIEW_DESC = Struct("D3D11_RENDER_TARGET_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D11_RTV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D11_RTV_DIMENSION_BUFFER", D3D11_BUFFER_RTV, "Buffer"), ("D3D11_RTV_DIMENSION_TEXTURE1D", D3D11_TEX1D_RTV, "Texture1D"), ("D3D11_RTV_DIMENSION_TEXTURE1DARRAY", D3D11_TEX1D_ARRAY_RTV, "Texture1DArray"), ("D3D11_RTV_DIMENSION_TEXTURE2D", D3D11_TEX2D_RTV, "Texture2D"), ("D3D11_RTV_DIMENSION_TEXTURE2DARRAY", D3D11_TEX2D_ARRAY_RTV, "Texture2DArray"), ("D3D11_RTV_DIMENSION_TEXTURE2DMS", D3D11_TEX2DMS_RTV, "Texture2DMS"), ("D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY", D3D11_TEX2DMS_ARRAY_RTV, "Texture2DMSArray"), ("D3D11_RTV_DIMENSION_TEXTURE3D", D3D11_TEX3D_RTV, "Texture3D"), ]), None), ]) ID3D11RenderTargetView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_RENDER_TARGET_VIEW_DESC), "pDesc")], sideeffects=False), ] D3D11_TEX1D_DSV = Struct("D3D11_TEX1D_DSV", [ (UINT, "MipSlice"), ]) D3D11_TEX1D_ARRAY_DSV = Struct("D3D11_TEX1D_ARRAY_DSV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2D_DSV = Struct("D3D11_TEX2D_DSV", [ (UINT, "MipSlice"), ]) D3D11_TEX2D_ARRAY_DSV = Struct("D3D11_TEX2D_ARRAY_DSV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2DMS_DSV = Struct("D3D11_TEX2DMS_DSV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D11_TEX2DMS_ARRAY_DSV = Struct("D3D11_TEX2DMS_ARRAY_DSV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_DSV_FLAG = Flags(UINT, [ "D3D11_DSV_READ_ONLY_DEPTH", "D3D11_DSV_READ_ONLY_STENCIL", ]) D3D11_DEPTH_STENCIL_VIEW_DESC = Struct("D3D11_DEPTH_STENCIL_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D11_DSV_DIMENSION, "ViewDimension"), (D3D11_DSV_FLAG, "Flags"), (Union("{self}.ViewDimension", [ ("D3D11_DSV_DIMENSION_TEXTURE1D", D3D11_TEX1D_DSV, "Texture1D"), ("D3D11_DSV_DIMENSION_TEXTURE1DARRAY", D3D11_TEX1D_ARRAY_DSV, "Texture1DArray"), ("D3D11_DSV_DIMENSION_TEXTURE2D", D3D11_TEX2D_DSV, "Texture2D"), ("D3D11_DSV_DIMENSION_TEXTURE2DARRAY", D3D11_TEX2D_ARRAY_DSV, "Texture2DArray"), ("D3D11_DSV_DIMENSION_TEXTURE2DMS", D3D11_TEX2DMS_DSV, "Texture2DMS"), ("D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY", D3D11_TEX2DMS_ARRAY_DSV, "Texture2DMSArray"), ]), None), ]) ID3D11DepthStencilView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_DEPTH_STENCIL_VIEW_DESC), "pDesc")], sideeffects=False), ] D3D11_BUFFER_UAV_FLAG = Flags(UINT, [ "D3D11_BUFFER_UAV_FLAG_RAW", "D3D11_BUFFER_UAV_FLAG_APPEND", "D3D11_BUFFER_UAV_FLAG_COUNTER", ]) D3D11_BUFFER_UAV = Struct("D3D11_BUFFER_UAV", [ (UINT, "FirstElement"), (UINT, "NumElements"), (D3D11_BUFFER_UAV_FLAG, "Flags"), ]) D3D11_TEX1D_UAV = Struct("D3D11_TEX1D_UAV", [ (UINT, "MipSlice"), ]) D3D11_TEX1D_ARRAY_UAV = Struct("D3D11_TEX1D_ARRAY_UAV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX2D_UAV = Struct("D3D11_TEX2D_UAV", [ (UINT, "MipSlice"), ]) D3D11_TEX2D_ARRAY_UAV = Struct("D3D11_TEX2D_ARRAY_UAV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D11_TEX3D_UAV = Struct("D3D11_TEX3D_UAV", [ (UINT, "MipSlice"), (UINT, "FirstWSlice"), (UINT, "WSize"), ]) D3D11_UNORDERED_ACCESS_VIEW_DESC = Struct("D3D11_UNORDERED_ACCESS_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D11_UAV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D11_UAV_DIMENSION_BUFFER", D3D11_BUFFER_UAV, "Buffer"), ("D3D11_UAV_DIMENSION_TEXTURE1D", D3D11_TEX1D_UAV, "Texture1D"), ("D3D11_UAV_DIMENSION_TEXTURE1DARRAY", D3D11_TEX1D_ARRAY_UAV, "Texture1DArray"), ("D3D11_UAV_DIMENSION_TEXTURE2D", D3D11_TEX2D_UAV, "Texture2D"), ("D3D11_UAV_DIMENSION_TEXTURE2DARRAY", D3D11_TEX2D_ARRAY_UAV, "Texture2DArray"), ("D3D11_UAV_DIMENSION_TEXTURE3D", D3D11_TEX3D_UAV, "Texture3D"), ]), None), ]) ID3D11UnorderedAccessView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_UNORDERED_ACCESS_VIEW_DESC), "pDesc")], sideeffects=False), ] D3D11_FILTER = Enum("D3D11_FILTER", [ "D3D11_FILTER_MIN_MAG_MIP_POINT", "D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR", "D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT", "D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR", "D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT", "D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR", "D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT", "D3D11_FILTER_MIN_MAG_MIP_LINEAR", "D3D11_FILTER_ANISOTROPIC", "D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT", "D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR", "D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT", "D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR", "D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT", "D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR", "D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT", "D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR", "D3D11_FILTER_COMPARISON_ANISOTROPIC", ]) D3D11_FILTER_TYPE = Enum("D3D11_FILTER_TYPE", [ "D3D11_FILTER_TYPE_POINT", "D3D11_FILTER_TYPE_LINEAR", ]) D3D11_TEXTURE_ADDRESS_MODE = Enum("D3D11_TEXTURE_ADDRESS_MODE", [ "D3D11_TEXTURE_ADDRESS_WRAP", "D3D11_TEXTURE_ADDRESS_MIRROR", "D3D11_TEXTURE_ADDRESS_CLAMP", "D3D11_TEXTURE_ADDRESS_BORDER", "D3D11_TEXTURE_ADDRESS_MIRROR_ONCE", ]) D3D11_SAMPLER_DESC = Struct("D3D11_SAMPLER_DESC", [ (D3D11_FILTER, "Filter"), (D3D11_TEXTURE_ADDRESS_MODE, "AddressU"), (D3D11_TEXTURE_ADDRESS_MODE, "AddressV"), (D3D11_TEXTURE_ADDRESS_MODE, "AddressW"), (FLOAT, "MipLODBias"), (UINT, "MaxAnisotropy"), (D3D11_COMPARISON_FUNC, "ComparisonFunc"), (Array(FLOAT, 4), "BorderColor"), (FLOAT, "MinLOD"), (FLOAT, "MaxLOD"), ]) ID3D11SamplerState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_SAMPLER_DESC), "pDesc")], sideeffects=False), ] D3D11_FORMAT_SUPPORT = Flags(UINT, [ "D3D11_FORMAT_SUPPORT_BUFFER", "D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER", "D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER", "D3D11_FORMAT_SUPPORT_SO_BUFFER", "D3D11_FORMAT_SUPPORT_TEXTURE1D", "D3D11_FORMAT_SUPPORT_TEXTURE2D", "D3D11_FORMAT_SUPPORT_TEXTURE3D", "D3D11_FORMAT_SUPPORT_TEXTURECUBE", "D3D11_FORMAT_SUPPORT_SHADER_LOAD", "D3D11_FORMAT_SUPPORT_SHADER_SAMPLE", "D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON", "D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT", "D3D11_FORMAT_SUPPORT_MIP", "D3D11_FORMAT_SUPPORT_MIP_AUTOGEN", "D3D11_FORMAT_SUPPORT_RENDER_TARGET", "D3D11_FORMAT_SUPPORT_BLENDABLE", "D3D11_FORMAT_SUPPORT_DEPTH_STENCIL", "D3D11_FORMAT_SUPPORT_CPU_LOCKABLE", "D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE", "D3D11_FORMAT_SUPPORT_DISPLAY", "D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT", "D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET", "D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD", "D3D11_FORMAT_SUPPORT_SHADER_GATHER", "D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST", "D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW", "D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON", ]) D3D11_FORMAT_SUPPORT2 = Enum("D3D11_FORMAT_SUPPORT2", [ "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD", "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS", "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE", "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE", "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX", "D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX", "D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD", "D3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE", ]) ID3D11Asynchronous.methods += [ StdMethod(UINT, "GetDataSize", [], sideeffects=False), ] D3D11_ASYNC_GETDATA_FLAG = Flags(UINT, [ "D3D11_ASYNC_GETDATA_DONOTFLUSH", ]) D3D11_QUERY = Enum("D3D11_QUERY", [ "D3D11_QUERY_EVENT", "D3D11_QUERY_OCCLUSION", "D3D11_QUERY_TIMESTAMP", "D3D11_QUERY_TIMESTAMP_DISJOINT", "D3D11_QUERY_PIPELINE_STATISTICS", "D3D11_QUERY_OCCLUSION_PREDICATE", "D3D11_QUERY_SO_STATISTICS", "D3D11_QUERY_SO_OVERFLOW_PREDICATE", "D3D11_QUERY_SO_STATISTICS_STREAM0", "D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0", "D3D11_QUERY_SO_STATISTICS_STREAM1", "D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1", "D3D11_QUERY_SO_STATISTICS_STREAM2", "D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2", "D3D11_QUERY_SO_STATISTICS_STREAM3", "D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3", ]) D3D11_QUERY_MISC_FLAG = Flags(UINT, [ "D3D11_QUERY_MISC_PREDICATEHINT", ]) D3D11_QUERY_DESC = Struct("D3D11_QUERY_DESC", [ (D3D11_QUERY, "Query"), (D3D11_QUERY_MISC_FLAG, "MiscFlags"), ]) ID3D11Query.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_QUERY_DESC), "pDesc")], sideeffects=False), ] D3D11_QUERY_DATA_TIMESTAMP_DISJOINT = Struct("D3D11_QUERY_DATA_TIMESTAMP_DISJOINT", [ (UINT64, "Frequency"), (BOOL, "Disjoint"), ]) D3D11_QUERY_DATA_PIPELINE_STATISTICS = Struct("D3D11_QUERY_DATA_PIPELINE_STATISTICS", [ (UINT64, "IAVertices"), (UINT64, "IAPrimitives"), (UINT64, "VSInvocations"), (UINT64, "GSInvocations"), (UINT64, "GSPrimitives"), (UINT64, "CInvocations"), (UINT64, "CPrimitives"), (UINT64, "PSInvocations"), (UINT64, "HSInvocations"), (UINT64, "DSInvocations"), (UINT64, "CSInvocations"), ]) D3D11_QUERY_DATA_SO_STATISTICS = Struct("D3D11_QUERY_DATA_SO_STATISTICS", [ (UINT64, "NumPrimitivesWritten"), (UINT64, "PrimitivesStorageNeeded"), ]) D3D11_QUERY_DATA = Polymorphic("_getQueryType(pAsync)", [ ("D3D11_QUERY_EVENT", Pointer(BOOL)), ("D3D11_QUERY_OCCLUSION", Pointer(UINT64)), ("D3D11_QUERY_TIMESTAMP", Pointer(UINT64)), ("D3D11_QUERY_TIMESTAMP_DISJOINT", Pointer(D3D11_QUERY_DATA_TIMESTAMP_DISJOINT)), ("D3D11_QUERY_PIPELINE_STATISTICS", Pointer(D3D11_QUERY_DATA_PIPELINE_STATISTICS)), ("D3D11_QUERY_OCCLUSION_PREDICATE", Pointer(BOOL)), ("D3D11_QUERY_SO_STATISTICS", Pointer(D3D11_QUERY_DATA_SO_STATISTICS)), ("D3D11_QUERY_SO_OVERFLOW_PREDICATE", Pointer(BOOL)), ("D3D11_QUERY_SO_STATISTICS_STREAM0", Pointer(D3D11_QUERY_DATA_SO_STATISTICS)), ("D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0", Pointer(BOOL)), ("D3D11_QUERY_SO_STATISTICS_STREAM1", Pointer(D3D11_QUERY_DATA_SO_STATISTICS)), ("D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1", Pointer(BOOL)), ("D3D11_QUERY_SO_STATISTICS_STREAM2", Pointer(D3D11_QUERY_DATA_SO_STATISTICS)), ("D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2", Pointer(BOOL)), ("D3D11_QUERY_SO_STATISTICS_STREAM3", Pointer(D3D11_QUERY_DATA_SO_STATISTICS)), ("D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3", Pointer(BOOL)), ], Blob(Void, "DataSize"), contextLess=False) D3D11_COUNTER = Enum("D3D11_COUNTER", [ "D3D11_COUNTER_DEVICE_DEPENDENT_0", ]) D3D11_COUNTER_TYPE = Enum("D3D11_COUNTER_TYPE", [ "D3D11_COUNTER_TYPE_FLOAT32", "D3D11_COUNTER_TYPE_UINT16", "D3D11_COUNTER_TYPE_UINT32", "D3D11_COUNTER_TYPE_UINT64", ]) D3D11_COUNTER_DESC = Struct("D3D11_COUNTER_DESC", [ (D3D11_COUNTER, "Counter"), (UINT, "MiscFlags"), ]) D3D11_COUNTER_INFO = Struct("D3D11_COUNTER_INFO", [ (D3D11_COUNTER, "LastDeviceDependentCounter"), (UINT, "NumSimultaneousCounters"), (UINT8, "NumDetectableParallelUnits"), ]) ID3D11Counter.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_COUNTER_DESC), "pDesc")], sideeffects=False), ] D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS = Enum("D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS", [ "D3D11_STANDARD_MULTISAMPLE_PATTERN", "D3D11_CENTER_MULTISAMPLE_PATTERN", ]) D3D11_DEVICE_CONTEXT_TYPE = Enum("D3D11_DEVICE_CONTEXT_TYPE", [ "D3D11_DEVICE_CONTEXT_IMMEDIATE", "D3D11_DEVICE_CONTEXT_DEFERRED", ]) D3D11_CLASS_INSTANCE_DESC = Struct("D3D11_CLASS_INSTANCE_DESC", [ (UINT, "InstanceId"), (UINT, "InstanceIndex"), (UINT, "TypeId"), (UINT, "ConstantBuffer"), (UINT, "BaseConstantBufferOffset"), (UINT, "BaseTexture"), (UINT, "BaseSampler"), (BOOL, "Created"), ]) ID3D11ClassInstance.methods += [ StdMethod(Void, "GetClassLinkage", [Out(Pointer(ObjPointer(ID3D11ClassLinkage)), "ppLinkage")]), StdMethod(Void, "GetDesc", [Out(Pointer(D3D11_CLASS_INSTANCE_DESC), "pDesc")], sideeffects=False), StdMethod(Void, "GetInstanceName", [Out(LPSTR, "pInstanceName"), Out(Pointer(SIZE_T), "pBufferLength")], sideeffects=False), StdMethod(Void, "GetTypeName", [Out(LPSTR, "pTypeName"), Out(Pointer(SIZE_T), "pBufferLength")], sideeffects=False), ] ID3D11ClassLinkage.methods += [ StdMethod(HRESULT, "GetClassInstance", [(LPCSTR, "pClassInstanceName"), (UINT, "InstanceIndex"), Out(Pointer(ObjPointer(ID3D11ClassInstance)), "ppInstance")]), StdMethod(HRESULT, "CreateClassInstance", [(LPCSTR, "pClassTypeName"), (UINT, "ConstantBufferOffset"), (UINT, "ConstantVectorOffset"), (UINT, "TextureOffset"), (UINT, "SamplerOffset"), Out(Pointer(ObjPointer(ID3D11ClassInstance)), "ppInstance")]), ] ID3D11CommandList.methods += [ StdMethod(UINT, "GetContextFlags", [], sideeffects=False), ] D3D11_FEATURE_DATA_THREADING = Struct("D3D11_FEATURE_DATA_THREADING", [ (BOOL, "DriverConcurrentCreates"), (BOOL, "DriverCommandLists"), ]) D3D11_FEATURE_DATA_DOUBLES = Struct("D3D11_FEATURE_DATA_DOUBLES", [ (BOOL, "DoublePrecisionFloatShaderOps"), ]) D3D11_FEATURE_DATA_FORMAT_SUPPORT = Struct("D3D11_FEATURE_DATA_FORMAT_SUPPORT", [ (DXGI_FORMAT, "InFormat"), (D3D11_FORMAT_SUPPORT, "OutFormatSupport"), ]) D3D11_FEATURE_DATA_FORMAT_SUPPORT2 = Struct("D3D11_FEATURE_DATA_FORMAT_SUPPORT2", [ (DXGI_FORMAT, "InFormat"), (D3D11_FORMAT_SUPPORT2, "OutFormatSupport2"), ]) D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS = Struct("D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS", [ (BOOL, "ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x"), ]) D3D11_FEATURE_DATA_D3D11_OPTIONS = Struct("D3D11_FEATURE_DATA_D3D11_OPTIONS", [ (BOOL, "OutputMergerLogicOp"), (BOOL, "UAVOnlyRenderingForcedSampleCount"), (BOOL, "DiscardAPIsSeenByDriver"), (BOOL, "FlagsForUpdateAndCopySeenByDriver"), (BOOL, "ClearView"), (BOOL, "CopyWithOverlap"), (BOOL, "ConstantBufferPartialUpdate"), (BOOL, "ConstantBufferOffsetting"), (BOOL, "MapNoOverwriteOnDynamicConstantBuffer"), (BOOL, "MapNoOverwriteOnDynamicBufferSRV"), (BOOL, "MultisampleRTVWithForcedSampleCountOne"), (BOOL, "SAD4ShaderInstructions"), (BOOL, "ExtendedDoublesShaderInstructions"), (BOOL, "ExtendedResourceSharing"), ]) D3D11_FEATURE_DATA_ARCHITECTURE_INFO = Struct("D3D11_FEATURE_DATA_ARCHITECTURE_INFO", [ (BOOL, "TileBasedDeferredRenderer"), ]) D3D11_FEATURE_DATA_D3D9_OPTIONS = Struct("D3D11_FEATURE_DATA_D3D9_OPTIONS", [ (BOOL, "FullNonPow2TextureSupport"), ]) D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT = Struct("D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT", [ (BOOL, "SupportsDepthAsTextureWithLessEqualComparisonFilter"), ]) D3D11_SHADER_MIN_PRECISION_SUPPORT = Enum("D3D11_SHADER_MIN_PRECISION_SUPPORT", [ "D3D11_SHADER_MIN_PRECISION_10_BIT", "D3D11_SHADER_MIN_PRECISION_16_BIT", ]) D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT = Struct("D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT", [ (UINT, "PixelShaderMinPrecision"), (UINT, "AllOtherShaderStagesMinPrecision"), ]) D3D11_TILED_RESOURCES_TIER = Enum("D3D11_TILED_RESOURCES_TIER", [ "D3D11_TILED_RESOURCES_NOT_SUPPORTED", "D3D11_TILED_RESOURCES_TIER_1", "D3D11_TILED_RESOURCES_TIER_2", ]) D3D11_FEATURE_DATA_D3D11_OPTIONS1 = Struct("D3D11_FEATURE_DATA_D3D11_OPTIONS1", [ (D3D11_TILED_RESOURCES_TIER, "TiledResourcesTier"), (BOOL, "MinMaxFiltering"), (BOOL, "ClearViewAlsoSupportsDepthOnlyFormats"), (BOOL, "MapOnDefaultBuffers"), ]) D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT = Struct("D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT", [ (BOOL, "SimpleInstancingSupported"), ]) D3D11_FEATURE_DATA_MARKER_SUPPORT = Struct("D3D11_FEATURE_DATA_MARKER_SUPPORT", [ (BOOL, "Profile"), ]) D3D11_FEATURE_DATA_D3D9_OPTIONS1 = Struct("D3D11_FEATURE_DATA_D3D9_OPTIONS1", [ (BOOL, "FullNonPow2TextureSupported"), (BOOL, "DepthAsTextureWithLessEqualComparisonFilterSupported"), (BOOL, "SimpleInstancingSupported"), (BOOL, "TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported"), ]) D3D11_FEATURE, D3D11_FEATURE_DATA = EnumPolymorphic("D3D11_FEATURE", "Feature", [ ("D3D11_FEATURE_THREADING", Pointer(D3D11_FEATURE_DATA_THREADING)), ("D3D11_FEATURE_DOUBLES", Pointer(D3D11_FEATURE_DATA_DOUBLES)), ("D3D11_FEATURE_FORMAT_SUPPORT", Pointer(D3D11_FEATURE_DATA_FORMAT_SUPPORT)), ("D3D11_FEATURE_FORMAT_SUPPORT2", Pointer(D3D11_FEATURE_DATA_FORMAT_SUPPORT2)), ("D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS", Pointer(D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS)), ("D3D11_FEATURE_D3D11_OPTIONS", Pointer(D3D11_FEATURE_DATA_D3D11_OPTIONS)), ("D3D11_FEATURE_ARCHITECTURE_INFO", Pointer(D3D11_FEATURE_DATA_ARCHITECTURE_INFO)), ("D3D11_FEATURE_D3D9_OPTIONS", Pointer(D3D11_FEATURE_DATA_D3D9_OPTIONS)), ("D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT", Pointer(D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT)), ("D3D11_FEATURE_D3D9_SHADOW_SUPPORT", Pointer(D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT)), ("D3D11_FEATURE_D3D11_OPTIONS1", Pointer(D3D11_FEATURE_DATA_D3D11_OPTIONS1)), ("D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT", Pointer(D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT)), ("D3D11_FEATURE_MARKER_SUPPORT", Pointer(D3D11_FEATURE_DATA_MARKER_SUPPORT)), ("D3D11_FEATURE_D3D9_OPTIONS1", Pointer(D3D11_FEATURE_DATA_D3D9_OPTIONS1)), ], Blob(Void, "FeatureSupportDataSize"), False) ID3D11DeviceContext.methods += [ StdMethod(Void, "VSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "PSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "PSSetShader", [(ObjPointer(ID3D11PixelShader), "pPixelShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "PSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "VSSetShader", [(ObjPointer(ID3D11VertexShader), "pVertexShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "DrawIndexed", [(UINT, "IndexCount"), (UINT, "StartIndexLocation"), (INT, "BaseVertexLocation")]), StdMethod(Void, "Draw", [(UINT, "VertexCount"), (UINT, "StartVertexLocation")]), StdMethod(HRESULT, "Map", [(ObjPointer(ID3D11Resource), "pResource"), (UINT, "Subresource"), (D3D11_MAP, "MapType"), (D3D11_MAP_FLAG, "MapFlags"), Out(Pointer(D3D11_MAPPED_SUBRESOURCE), "pMappedResource")]), StdMethod(Void, "Unmap", [(ObjPointer(ID3D11Resource), "pResource"), (UINT, "Subresource")]), StdMethod(Void, "PSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "IASetInputLayout", [(ObjPointer(ID3D11InputLayout), "pInputLayout")]), StdMethod(Void, "IASetVertexBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppVertexBuffers"), (Array(Const(UINT), "NumBuffers"), "pStrides"), (Array(Const(UINT), "NumBuffers"), "pOffsets")]), StdMethod(Void, "IASetIndexBuffer", [(ObjPointer(ID3D11Buffer), "pIndexBuffer"), (DXGI_FORMAT, "Format"), (UINT, "Offset")]), StdMethod(Void, "DrawIndexedInstanced", [(UINT, "IndexCountPerInstance"), (UINT, "InstanceCount"), (UINT, "StartIndexLocation"), (INT, "BaseVertexLocation"), (UINT, "StartInstanceLocation")]), StdMethod(Void, "DrawInstanced", [(UINT, "VertexCountPerInstance"), (UINT, "InstanceCount"), (UINT, "StartVertexLocation"), (UINT, "StartInstanceLocation")]), StdMethod(Void, "GSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "GSSetShader", [(ObjPointer(ID3D11GeometryShader), "pShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "IASetPrimitiveTopology", [(D3D11_PRIMITIVE_TOPOLOGY, "Topology")]), StdMethod(Void, "VSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "VSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "Begin", [(ObjPointer(ID3D11Asynchronous), "pAsync")]), StdMethod(Void, "End", [(ObjPointer(ID3D11Asynchronous), "pAsync")]), StdMethod(HRESULT, "GetData", [(ObjPointer(ID3D11Asynchronous), "pAsync"), Out(D3D11_QUERY_DATA, "pData"), (UINT, "DataSize"), (D3D11_ASYNC_GETDATA_FLAG, "GetDataFlags")], sideeffects=False), StdMethod(Void, "SetPredication", [(ObjPointer(ID3D11Predicate), "pPredicate"), (BOOL, "PredicateValue")]), StdMethod(Void, "GSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "GSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "OMSetRenderTargets", [(UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11RenderTargetView)), "NumViews"), "ppRenderTargetViews"), (ObjPointer(ID3D11DepthStencilView), "pDepthStencilView")]), StdMethod(Void, "OMSetRenderTargetsAndUnorderedAccessViews", [(UINT, "NumRTVs"), (Array(Const(ObjPointer(ID3D11RenderTargetView)), "NumRTVs"), "ppRenderTargetViews"), (ObjPointer(ID3D11DepthStencilView), "pDepthStencilView"), (UINT, "UAVStartSlot"), (UINT, "NumUAVs"), (Array(Const(ObjPointer(ID3D11UnorderedAccessView)), "NumUAVs"), "ppUnorderedAccessViews"), (Array(Const(UINT), "NumUAVs"), "pUAVInitialCounts")]), StdMethod(Void, "OMSetBlendState", [(ObjPointer(ID3D11BlendState), "pBlendState"), (Array(Const(FLOAT), 4), "BlendFactor"), (UINT, "SampleMask")]), StdMethod(Void, "OMSetDepthStencilState", [(ObjPointer(ID3D11DepthStencilState), "pDepthStencilState"), (UINT, "StencilRef")]), StdMethod(Void, "SOSetTargets", [(UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppSOTargets"), (Array(Const(UINT), "NumBuffers"), "pOffsets")]), StdMethod(Void, "DrawAuto", []), StdMethod(Void, "DrawIndexedInstancedIndirect", [(ObjPointer(ID3D11Buffer), "pBufferForArgs"), (UINT, "AlignedByteOffsetForArgs")]), StdMethod(Void, "DrawInstancedIndirect", [(ObjPointer(ID3D11Buffer), "pBufferForArgs"), (UINT, "AlignedByteOffsetForArgs")]), StdMethod(Void, "Dispatch", [(UINT, "ThreadGroupCountX"), (UINT, "ThreadGroupCountY"), (UINT, "ThreadGroupCountZ")]), StdMethod(Void, "DispatchIndirect", [(ObjPointer(ID3D11Buffer), "pBufferForArgs"), (UINT, "AlignedByteOffsetForArgs")]), StdMethod(Void, "RSSetState", [(ObjPointer(ID3D11RasterizerState), "pRasterizerState")]), StdMethod(Void, "RSSetViewports", [(UINT, "NumViewports"), (Array(Const(D3D11_VIEWPORT), "NumViewports"), "pViewports")]), StdMethod(Void, "RSSetScissorRects", [(UINT, "NumRects"), (Array(Const(D3D11_RECT), "NumRects"), "pRects")]), StdMethod(Void, "CopySubresourceRegion", [(ObjPointer(ID3D11Resource), "pDstResource"), (UINT, "DstSubresource"), (UINT, "DstX"), (UINT, "DstY"), (UINT, "DstZ"), (ObjPointer(ID3D11Resource), "pSrcResource"), (UINT, "SrcSubresource"), (Pointer(Const(D3D11_BOX)), "pSrcBox")]), StdMethod(Void, "CopyResource", [(ObjPointer(ID3D11Resource), "pDstResource"), (ObjPointer(ID3D11Resource), "pSrcResource")]), StdMethod(Void, "UpdateSubresource", [(ObjPointer(ID3D11Resource), "pDstResource"), (UINT, "DstSubresource"), (Pointer(Const(D3D11_BOX)), "pDstBox"), (Blob(Const(Void), "_calcSubresourceSize(pDstResource, DstSubresource, pDstBox, SrcRowPitch, SrcDepthPitch)"), "pSrcData"), (UINT, "SrcRowPitch"), (UINT, "SrcDepthPitch")]), StdMethod(Void, "CopyStructureCount", [(ObjPointer(ID3D11Buffer), "pDstBuffer"), (UINT, "DstAlignedByteOffset"), (ObjPointer(ID3D11UnorderedAccessView), "pSrcView")]), StdMethod(Void, "ClearRenderTargetView", [(ObjPointer(ID3D11RenderTargetView), "pRenderTargetView"), (Array(Const(FLOAT), 4), "ColorRGBA")]), StdMethod(Void, "ClearUnorderedAccessViewUint", [(ObjPointer(ID3D11UnorderedAccessView), "pUnorderedAccessView"), (Array(Const(UINT), 4), "Values")]), StdMethod(Void, "ClearUnorderedAccessViewFloat", [(ObjPointer(ID3D11UnorderedAccessView), "pUnorderedAccessView"), (Array(Const(FLOAT), 4), "Values")]), StdMethod(Void, "ClearDepthStencilView", [(ObjPointer(ID3D11DepthStencilView), "pDepthStencilView"), (D3D11_CLEAR_FLAG, "ClearFlags"), (FLOAT, "Depth"), (UINT8, "Stencil")]), StdMethod(Void, "GenerateMips", [(ObjPointer(ID3D11ShaderResourceView), "pShaderResourceView")]), StdMethod(Void, "SetResourceMinLOD", [(ObjPointer(ID3D11Resource), "pResource"), (FLOAT, "MinLOD")]), StdMethod(FLOAT, "GetResourceMinLOD", [(ObjPointer(ID3D11Resource), "pResource")], sideeffects=False), StdMethod(Void, "ResolveSubresource", [(ObjPointer(ID3D11Resource), "pDstResource"), (UINT, "DstSubresource"), (ObjPointer(ID3D11Resource), "pSrcResource"), (UINT, "SrcSubresource"), (DXGI_FORMAT, "Format")]), StdMethod(Void, "ExecuteCommandList", [(ObjPointer(ID3D11CommandList), "pCommandList"), (BOOL, "RestoreContextState")]), StdMethod(Void, "HSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "HSSetShader", [(ObjPointer(ID3D11HullShader), "pHullShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "HSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "HSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "DSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "DSSetShader", [(ObjPointer(ID3D11DomainShader), "pDomainShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "DSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "DSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "CSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D11ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "CSSetUnorderedAccessViews", [(UINT, "StartSlot"), (UINT, "NumUAVs"), (Array(Const(ObjPointer(ID3D11UnorderedAccessView)), "NumUAVs"), "ppUnorderedAccessViews"), (Array(Const(UINT), "NumUAVs"), "pUAVInitialCounts")]), StdMethod(Void, "CSSetShader", [(ObjPointer(ID3D11ComputeShader), "pComputeShader"), (Array(Const(ObjPointer(ID3D11ClassInstance)), "NumClassInstances"), "ppClassInstances"), (UINT, "NumClassInstances")]), StdMethod(Void, "CSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D11SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "CSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "VSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "PSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "PSGetShader", [Out(Pointer(ObjPointer(ID3D11PixelShader)), "ppPixelShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "PSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "VSGetShader", [Out(Pointer(ObjPointer(ID3D11VertexShader)), "ppVertexShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "PSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "IAGetInputLayout", [Out(Pointer(ObjPointer(ID3D11InputLayout)), "ppInputLayout")]), StdMethod(Void, "IAGetVertexBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppVertexBuffers"), Out(Array(UINT, "NumBuffers"), "pStrides"), Out(Array(UINT, "NumBuffers"), "pOffsets")]), StdMethod(Void, "IAGetIndexBuffer", [Out(Pointer(ObjPointer(ID3D11Buffer)), "pIndexBuffer"), Out(Pointer(DXGI_FORMAT), "Format"), Out(Pointer(UINT), "Offset")]), StdMethod(Void, "GSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "GSGetShader", [Out(Pointer(ObjPointer(ID3D11GeometryShader)), "ppGeometryShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "IAGetPrimitiveTopology", [Out(Pointer(D3D11_PRIMITIVE_TOPOLOGY), "pTopology")], sideeffects=False), StdMethod(Void, "VSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "VSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "GetPredication", [Out(Pointer(ObjPointer(ID3D11Predicate)), "ppPredicate"), Out(Pointer(BOOL), "pPredicateValue")]), StdMethod(Void, "GSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "GSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "OMGetRenderTargets", [(UINT, "NumViews"), Out(Array(ObjPointer(ID3D11RenderTargetView), "NumViews"), "ppRenderTargetViews"), Out(Pointer(ObjPointer(ID3D11DepthStencilView)), "ppDepthStencilView")]), StdMethod(Void, "OMGetRenderTargetsAndUnorderedAccessViews", [(UINT, "NumRTVs"), Out(Array(ObjPointer(ID3D11RenderTargetView), "NumRTVs"), "ppRenderTargetViews"), Out(Pointer(ObjPointer(ID3D11DepthStencilView)), "ppDepthStencilView"), (UINT, "UAVStartSlot"), (UINT, "NumUAVs"), Out(Array(ObjPointer(ID3D11UnorderedAccessView), "NumUAVs"), "ppUnorderedAccessViews")]), StdMethod(Void, "OMGetBlendState", [Out(Pointer(ObjPointer(ID3D11BlendState)), "ppBlendState"), Out(Array(FLOAT, 4), "BlendFactor"), Out(Pointer(UINT), "pSampleMask")]), StdMethod(Void, "OMGetDepthStencilState", [Out(Pointer(ObjPointer(ID3D11DepthStencilState)), "ppDepthStencilState"), Out(Pointer(UINT), "pStencilRef")]), StdMethod(Void, "SOGetTargets", [(UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppSOTargets")]), StdMethod(Void, "RSGetState", [Out(Pointer(ObjPointer(ID3D11RasterizerState)), "ppRasterizerState")]), StdMethod(Void, "RSGetViewports", [InOut(Pointer(UINT), "pNumViewports"), Out(Array(D3D11_VIEWPORT, "*pNumViewports"), "pViewports")], sideeffects=False), StdMethod(Void, "RSGetScissorRects", [InOut(Pointer(UINT), "pNumRects"), Out(Array(D3D11_RECT, "*pNumRects"), "pRects")], sideeffects=False), StdMethod(Void, "HSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "HSGetShader", [Out(Pointer(ObjPointer(ID3D11HullShader)), "ppHullShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "HSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "HSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "DSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "DSGetShader", [Out(Pointer(ObjPointer(ID3D11DomainShader)), "ppDomainShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "DSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "DSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "CSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D11ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "CSGetUnorderedAccessViews", [(UINT, "StartSlot"), (UINT, "NumUAVs"), Out(Array(ObjPointer(ID3D11UnorderedAccessView), "NumUAVs"), "ppUnorderedAccessViews")]), StdMethod(Void, "CSGetShader", [Out(Pointer(ObjPointer(ID3D11ComputeShader)), "ppComputeShader"), Out(Array(ObjPointer(ID3D11ClassInstance), "*pNumClassInstances"), "ppClassInstances"), InOut(Pointer(UINT), "pNumClassInstances")]), StdMethod(Void, "CSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D11SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "CSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "ClearState", []), StdMethod(Void, "Flush", []), StdMethod(D3D11_DEVICE_CONTEXT_TYPE, "GetType", [], sideeffects=False), StdMethod(UINT, "GetContextFlags", [], sideeffects=False), StdMethod(HRESULT, "FinishCommandList", [(BOOL, "RestoreDeferredContextState"), Out(Pointer(ObjPointer(ID3D11CommandList)), "ppCommandList")]), ] D3D11_CREATE_DEVICE_FLAG = Flags(UINT, [ "D3D11_CREATE_DEVICE_SINGLETHREADED", "D3D11_CREATE_DEVICE_DEBUG", "D3D11_CREATE_DEVICE_SWITCH_TO_REF", "D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS", "D3D11_CREATE_DEVICE_BGRA_SUPPORT", "D3D11_CREATE_DEVICE_DEBUGGABLE", "D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY", "D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT", "D3D11_CREATE_DEVICE_VIDEO_SUPPORT", ]) ID3D11Device.methods += [ StdMethod(HRESULT, "CreateBuffer", [(Pointer(Const(D3D11_BUFFER_DESC)), "pDesc"), (Array(Const(D3D11_SUBRESOURCE_DATA), 1), "pInitialData"), Out(Pointer(ObjPointer(ID3D11Buffer)), "ppBuffer")]), StdMethod(HRESULT, "CreateTexture1D", [(Pointer(Const(D3D11_TEXTURE1D_DESC)), "pDesc"), (Array(Const(D3D11_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D11Texture1D)), "ppTexture1D")]), StdMethod(HRESULT, "CreateTexture2D", [(Pointer(Const(D3D11_TEXTURE2D_DESC)), "pDesc"), (Array(Const(D3D11_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D11Texture2D)), "ppTexture2D")]), StdMethod(HRESULT, "CreateTexture3D", [(Pointer(Const(D3D11_TEXTURE3D_DESC)), "pDesc"), (Array(Const(D3D11_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D11Texture3D)), "ppTexture3D")]), StdMethod(HRESULT, "CreateShaderResourceView", [(ObjPointer(ID3D11Resource), "pResource"), (Pointer(Const(D3D11_SHADER_RESOURCE_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D11ShaderResourceView)), "ppSRView")]), StdMethod(HRESULT, "CreateUnorderedAccessView", [(ObjPointer(ID3D11Resource), "pResource"), (Pointer(Const(D3D11_UNORDERED_ACCESS_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D11UnorderedAccessView)), "ppUAView")]), StdMethod(HRESULT, "CreateRenderTargetView", [(ObjPointer(ID3D11Resource), "pResource"), (Pointer(Const(D3D11_RENDER_TARGET_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D11RenderTargetView)), "ppRTView")]), StdMethod(HRESULT, "CreateDepthStencilView", [(ObjPointer(ID3D11Resource), "pResource"), (Pointer(Const(D3D11_DEPTH_STENCIL_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D11DepthStencilView)), "ppDepthStencilView")]), StdMethod(HRESULT, "CreateInputLayout", [(Array(Const(D3D11_INPUT_ELEMENT_DESC), "NumElements"), "pInputElementDescs"), (UINT, "NumElements"), (Blob(Const(Void), "BytecodeLength"), "pShaderBytecodeWithInputSignature"), (SIZE_T, "BytecodeLength"), Out(Pointer(ObjPointer(ID3D11InputLayout)), "ppInputLayout")]), StdMethod(HRESULT, "CreateVertexShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11VertexShader)), "ppVertexShader")]), StdMethod(HRESULT, "CreateGeometryShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11GeometryShader)), "ppGeometryShader")]), StdMethod(HRESULT, "CreateGeometryShaderWithStreamOutput", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (Array(Const(D3D11_SO_DECLARATION_ENTRY), "NumEntries"), "pSODeclaration"), (UINT, "NumEntries"), (Array(Const(UINT), "NumStrides"), "pBufferStrides"), (UINT, "NumStrides"), (UINT, "RasterizedStream"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11GeometryShader)), "ppGeometryShader")]), StdMethod(HRESULT, "CreatePixelShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11PixelShader)), "ppPixelShader")]), StdMethod(HRESULT, "CreateHullShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11HullShader)), "ppHullShader")]), StdMethod(HRESULT, "CreateDomainShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11DomainShader)), "ppDomainShader")]), StdMethod(HRESULT, "CreateComputeShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (ObjPointer(ID3D11ClassLinkage), "pClassLinkage"), Out(Pointer(ObjPointer(ID3D11ComputeShader)), "ppComputeShader")]), StdMethod(HRESULT, "CreateClassLinkage", [Out(Pointer(ObjPointer(ID3D11ClassLinkage)), "ppLinkage")]), StdMethod(HRESULT, "CreateBlendState", [(Pointer(Const(D3D11_BLEND_DESC)), "pBlendStateDesc"), Out(Pointer(ObjPointer(ID3D11BlendState)), "ppBlendState")]), StdMethod(HRESULT, "CreateDepthStencilState", [(Pointer(Const(D3D11_DEPTH_STENCIL_DESC)), "pDepthStencilDesc"), Out(Pointer(ObjPointer(ID3D11DepthStencilState)), "ppDepthStencilState")]), StdMethod(HRESULT, "CreateRasterizerState", [(Pointer(Const(D3D11_RASTERIZER_DESC)), "pRasterizerDesc"), Out(Pointer(ObjPointer(ID3D11RasterizerState)), "ppRasterizerState")]), StdMethod(HRESULT, "CreateSamplerState", [(Pointer(Const(D3D11_SAMPLER_DESC)), "pSamplerDesc"), Out(Pointer(ObjPointer(ID3D11SamplerState)), "ppSamplerState")]), StdMethod(HRESULT, "CreateQuery", [(Pointer(Const(D3D11_QUERY_DESC)), "pQueryDesc"), Out(Pointer(ObjPointer(ID3D11Query)), "ppQuery")]), StdMethod(HRESULT, "CreatePredicate", [(Pointer(Const(D3D11_QUERY_DESC)), "pPredicateDesc"), Out(Pointer(ObjPointer(ID3D11Predicate)), "ppPredicate")]), StdMethod(HRESULT, "CreateCounter", [(Pointer(Const(D3D11_COUNTER_DESC)), "pCounterDesc"), Out(Pointer(ObjPointer(ID3D11Counter)), "ppCounter")]), StdMethod(HRESULT, "CreateDeferredContext", [(UINT, "ContextFlags"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppDeferredContext")]), StdMethod(HRESULT, "OpenSharedResource", [(HANDLE, "hResource"), (REFIID, "ReturnedInterface"), Out(Pointer(ObjPointer(Void)), "ppResource")]), StdMethod(HRESULT, "CheckFormatSupport", [(DXGI_FORMAT, "Format"), Out(Pointer(D3D11_FORMAT_SUPPORT), "pFormatSupport")], sideeffects=False), StdMethod(HRESULT, "CheckMultisampleQualityLevels", [(DXGI_FORMAT, "Format"), (UINT, "SampleCount"), Out(Pointer(UINT), "pNumQualityLevels")], sideeffects=False), StdMethod(Void, "CheckCounterInfo", [Out(Pointer(D3D11_COUNTER_INFO), "pCounterInfo")], sideeffects=False), StdMethod(HRESULT, "CheckCounter", [(Pointer(Const(D3D11_COUNTER_DESC)), "pDesc"), Out(Pointer(D3D11_COUNTER_TYPE), "pType"), Out(Pointer(UINT), "pActiveCounters"), Out(LPSTR, "szName"), Out(Pointer(UINT), "pNameLength"), Out(LPSTR, "szUnits"), Out(Pointer(UINT), "pUnitsLength"), Out(LPSTR, "szDescription"), Out(Pointer(UINT), "pDescriptionLength")], sideeffects=False), StdMethod(HRESULT, "CheckFeatureSupport", [(D3D11_FEATURE, "Feature"), Out(D3D11_FEATURE_DATA, "pFeatureSupportData"), (UINT, "FeatureSupportDataSize")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "guid"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")]), StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "pData")], sideeffects=False), StdMethod(D3D_FEATURE_LEVEL, "GetFeatureLevel", [], sideeffects=False), StdMethod(D3D11_CREATE_DEVICE_FLAG, "GetCreationFlags", [], sideeffects=False), StdMethod(HRESULT, "GetDeviceRemovedReason", [], sideeffects=False), StdMethod(Void, "GetImmediateContext", [Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]), StdMethod(HRESULT, "SetExceptionMode", [(D3D11_RAISE_FLAG, "RaiseFlags")]), StdMethod(D3D11_RAISE_FLAG, "GetExceptionMode", [], sideeffects=False), ] d3d11 = Module("d3d11") d3d11.addFunctions([ StdFunction(HRESULT, "D3D11CreateDevice", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D11_CREATE_DEVICE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice"), Out(Pointer(D3D_FEATURE_LEVEL), "pFeatureLevel"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]), StdFunction(HRESULT, "D3D11CreateDeviceAndSwapChain", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D11_CREATE_DEVICE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC)), "pSwapChainDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain"), Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice"), Out(Pointer(D3D_FEATURE_LEVEL), "pFeatureLevel"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]), ]) d3d11.addInterfaces([ ID3D11Debug, ID3D11InfoQueue, ID3D11SwitchToRef, ]) # # D3D11.1 # D3D_MIN_PRECISION = Enum("D3D_MIN_PRECISION", [ "D3D_MIN_PRECISION_DEFAULT", "D3D_MIN_PRECISION_FLOAT_16", "D3D_MIN_PRECISION_FLOAT_2_8", "D3D_MIN_PRECISION_RESERVED", "D3D_MIN_PRECISION_SINT_16", "D3D_MIN_PRECISION_UINT_16", "D3D_MIN_PRECISION_ANY_16", "D3D_MIN_PRECISION_ANY_10", ]) ID3D11BlendState1 = Interface("ID3D11BlendState1", ID3D11BlendState) ID3D11RasterizerState1 = Interface("ID3D11RasterizerState1", ID3D11RasterizerState) ID3DDeviceContextState = Interface("ID3DDeviceContextState", ID3D11DeviceChild) ID3D11DeviceContext1 = Interface("ID3D11DeviceContext1", ID3D11DeviceContext) ID3D11Device1 = Interface("ID3D11Device1", ID3D11Device) ID3DUserDefinedAnnotation = Interface("ID3DUserDefinedAnnotation", IUnknown) D3D11_COPY_FLAGS = Flags(UINT, [ "D3D11_COPY_NO_OVERWRITE", "D3D11_COPY_DISCARD", ]) D3D11_LOGIC_OP = Enum("D3D11_LOGIC_OP", [ "D3D11_LOGIC_OP_CLEAR", "D3D11_LOGIC_OP_SET", "D3D11_LOGIC_OP_COPY", "D3D11_LOGIC_OP_COPY_INVERTED", "D3D11_LOGIC_OP_NOOP", "D3D11_LOGIC_OP_INVERT", "D3D11_LOGIC_OP_AND", "D3D11_LOGIC_OP_NAND", "D3D11_LOGIC_OP_OR", "D3D11_LOGIC_OP_NOR", "D3D11_LOGIC_OP_XOR", "D3D11_LOGIC_OP_EQUIV", "D3D11_LOGIC_OP_AND_REVERSE", "D3D11_LOGIC_OP_AND_INVERTED", "D3D11_LOGIC_OP_OR_REVERSE", "D3D11_LOGIC_OP_OR_INVERTED", ]) D3D11_RENDER_TARGET_BLEND_DESC1 = Struct("D3D11_RENDER_TARGET_BLEND_DESC1", [ (BOOL, "BlendEnable"), (BOOL, "LogicOpEnable"), (D3D11_BLEND, "SrcBlend"), (D3D11_BLEND, "DestBlend"), (D3D11_BLEND_OP, "BlendOp"), (D3D11_BLEND, "SrcBlendAlpha"), (D3D11_BLEND, "DestBlendAlpha"), (D3D11_BLEND_OP, "BlendOpAlpha"), (D3D11_LOGIC_OP, "LogicOp"), (UINT8, "RenderTargetWriteMask"), ]) D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8 D3D11_BLEND_DESC1 = Struct("D3D11_BLEND_DESC1", [ (BOOL, "AlphaToCoverageEnable"), (BOOL, "IndependentBlendEnable"), (Array(D3D11_RENDER_TARGET_BLEND_DESC1, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT), "RenderTarget"), ]) ID3D11BlendState1.methods += [ StdMethod(Void, "GetDesc1", [Out(Pointer(D3D11_BLEND_DESC1), "pDesc")], sideeffects=False), ] D3D11_RASTERIZER_DESC1 = Struct("D3D11_RASTERIZER_DESC1", [ (D3D11_FILL_MODE, "FillMode"), (D3D11_CULL_MODE, "CullMode"), (BOOL, "FrontCounterClockwise"), (INT, "DepthBias"), (FLOAT, "DepthBiasClamp"), (FLOAT, "SlopeScaledDepthBias"), (BOOL, "DepthClipEnable"), (BOOL, "ScissorEnable"), (BOOL, "MultisampleEnable"), (BOOL, "AntialiasedLineEnable"), (UINT, "ForcedSampleCount"), ]) ID3D11RasterizerState1.methods += [ StdMethod(Void, "GetDesc1", [Out(Pointer(D3D11_RASTERIZER_DESC1), "pDesc")], sideeffects=False), ] D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG = Flags(UINT, [ "D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED", ]) ID3D11DeviceContext1.methods += [ StdMethod(Void, "CopySubresourceRegion1", [(ObjPointer(ID3D11Resource), "pDstResource"), (UINT, "DstSubresource"), (UINT, "DstX"), (UINT, "DstY"), (UINT, "DstZ"), (ObjPointer(ID3D11Resource), "pSrcResource"), (UINT, "SrcSubresource"), (Pointer(Const(D3D11_BOX)), "pSrcBox"), (D3D11_COPY_FLAGS, "CopyFlags")]), StdMethod(Void, "UpdateSubresource1", [(ObjPointer(ID3D11Resource), "pDstResource"), (UINT, "DstSubresource"), (Pointer(Const(D3D11_BOX)), "pDstBox"), (Blob(Const(Void), "_calcSubresourceSize(pDstResource, DstSubresource, pDstBox, SrcRowPitch, SrcDepthPitch)"), "pSrcData"), (UINT, "SrcRowPitch"), (UINT, "SrcDepthPitch"), (D3D11_COPY_FLAGS, "CopyFlags")]), StdMethod(Void, "DiscardResource", [(ObjPointer(ID3D11Resource), "pResource")]), StdMethod(Void, "DiscardView", [(ObjPointer(ID3D11View), "pResourceView")]), StdMethod(Void, "DiscardView1", [(ObjPointer(ID3D11View), "pResourceView"), (Array(Const(D3D11_RECT), "NumRects"), "pRect"), (UINT, "NumRects")]), StdMethod(Void, "VSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "HSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "DSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "GSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "PSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "CSSetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D11Buffer)), "NumBuffers"), "ppConstantBuffers"), (Array(Const(UINT), "NumBuffers"), "pFirstConstant"), (Array(Const(UINT), "NumBuffers"), "pNumConstants")]), StdMethod(Void, "VSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "HSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "DSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "GSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "PSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "CSGetConstantBuffers1", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D11Buffer), "NumBuffers"), "ppConstantBuffers"), Out(Array(UINT, "NumBuffers"), "pFirstConstant"), Out(Array(UINT, "NumBuffers"), "pNumConstants")]), StdMethod(Void, "SwapDeviceContextState", [(ObjPointer(ID3DDeviceContextState), "pState"), Out(Pointer(ObjPointer(ID3DDeviceContextState)), "ppPreviousState")]), StdMethod(Void, "ClearView", [(ObjPointer(ID3D11View), "pView"), (Array(Const(FLOAT), 4), "Color"), (Array(Const(D3D11_RECT), "NumRects"), "pRect"), (UINT, "NumRects")]), ] ID3D11Device1.methods += [ StdMethod(Void, "GetImmediateContext1", [Out(Pointer(ObjPointer(ID3D11DeviceContext1)), "ppImmediateContext")]), StdMethod(HRESULT, "CreateDeferredContext1", [(UINT, "ContextFlags"), Out(Pointer(ObjPointer(ID3D11DeviceContext1)), "ppDeferredContext")]), StdMethod(HRESULT, "CreateBlendState1", [(Pointer(Const(D3D11_BLEND_DESC1)), "pBlendStateDesc"), Out(Pointer(ObjPointer(ID3D11BlendState1)), "ppBlendState")]), StdMethod(HRESULT, "CreateRasterizerState1", [(Pointer(Const(D3D11_RASTERIZER_DESC1)), "pRasterizerDesc"), Out(Pointer(ObjPointer(ID3D11RasterizerState1)), "ppRasterizerState")]), StdMethod(HRESULT, "CreateDeviceContextState", [(D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), (REFIID, "EmulatedInterface"), Out(Pointer(D3D_FEATURE_LEVEL), "pChosenFeatureLevel"), Out(Pointer(ObjPointer(ID3DDeviceContextState)), "ppContextState")]), StdMethod(HRESULT, "OpenSharedResource1", [(HANDLE, "hResource"), (REFIID, "ReturnedInterface"), Out(Pointer(ObjPointer(Void)), "ppResource")]), StdMethod(HRESULT, "OpenSharedResourceByName", [(LPCWSTR, "lpName"), (DXGI_SHARED_RESOURCE_FLAG, "dwDesiredAccess"), (REFIID, "ReturnedInterface"), Out(Pointer(ObjPointer(Void)), "ppResource")]), ] ID3DUserDefinedAnnotation.methods += [ StdMethod(INT, "BeginEvent", [(LPCWSTR, "Name")], sideeffects=False), StdMethod(INT, "EndEvent", [], sideeffects=False), StdMethod(Void, "SetMarker", [(LPCWSTR, "Name")], sideeffects=False), StdMethod(BOOL, "GetStatus", [], sideeffects=False), ] d3d11.addInterfaces([ ID3D11Device1, ID3DUserDefinedAnnotation, ]) # # D3D11.2 # D3D11_TILED_RESOURCE_COORDINATE = Struct("D3D11_TILED_RESOURCE_COORDINATE", [ (UINT, "X"), (UINT, "Y"), (UINT, "Z"), (UINT, "Subresource"), ]) D3D11_TILE_REGION_SIZE = Struct("D3D11_TILE_REGION_SIZE", [ (UINT, "NumTiles"), (BOOL, "bUseBox"), (UINT, "Width"), (UINT16, "Height"), (UINT16, "Depth"), ]) D3D11_TILE_MAPPING_FLAG = Flags(UINT, [ "D3D11_TILE_MAPPING_NO_OVERWRITE", ]) D3D11_TILE_RANGE_FLAG = Flags(UINT, [ "D3D11_TILE_RANGE_NULL", "D3D11_TILE_RANGE_SKIP", "D3D11_TILE_RANGE_REUSE_SINGLE_TILE", ]) D3D11_SUBRESOURCE_TILING = Struct("D3D11_SUBRESOURCE_TILING", [ (UINT, "WidthInTiles"), (UINT16, "HeightInTiles"), (UINT16, "DepthInTiles"), (FakeEnum(UINT, ["D3D11_PACKED_TILE"]), "StartTileIndexInOverallResource"), ]) D3D11_TILE_SHAPE = Struct("D3D11_TILE_SHAPE", [ (UINT, "WidthInTexels"), (UINT, "HeightInTexels"), (UINT, "DepthInTexels"), ]) D3D11_PACKED_MIP_DESC = Struct("D3D11_PACKED_MIP_DESC", [ (UINT8, "NumStandardMips"), (UINT8, "NumPackedMips"), (UINT, "NumTilesForPackedMips"), (UINT, "StartTileIndexInOverallResource"), ]) D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG = Flags(UINT, [ "D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE", ]) D3D11_TILE_COPY_FLAG = Flags(UINT, [ "D3D11_TILE_COPY_NO_OVERWRITE", "D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE", "D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER", ]) ID3D11DeviceContext2 = Interface("ID3D11DeviceContext2", ID3D11DeviceContext1) ID3D11DeviceContext2.methods += [ StdMethod(HRESULT, "UpdateTileMappings", [(ObjPointer(ID3D11Resource), "pTiledResource"), (UINT, "NumTiledResourceRegions"), (Array(Const(D3D11_TILED_RESOURCE_COORDINATE), "NumTiledResourceRegions"), "pTiledResourceRegionStartCoordinates"), (Array(Const(D3D11_TILE_REGION_SIZE), "NumTiledResourceRegions"), "pTiledResourceRegionSizes"), (ObjPointer(ID3D11Buffer), "pTilePool"), (UINT, "NumRanges"), (Array(Const(D3D11_TILE_RANGE_FLAG), "NumRanges"), "pRangeFlags"), (Array(Const(UINT), "NumRanges"), "pTilePoolStartOffsets"), (Array(Const(UINT), "NumRanges"), "pRangeTileCounts"), (D3D11_TILE_MAPPING_FLAG, "Flags")]), StdMethod(HRESULT, "CopyTileMappings", [(ObjPointer(ID3D11Resource), "pDestTiledResource"), (Pointer(Const(D3D11_TILED_RESOURCE_COORDINATE)), "pDestRegionStartCoordinate"), (ObjPointer(ID3D11Resource), "pSourceTiledResource"), (Pointer(Const(D3D11_TILED_RESOURCE_COORDINATE)), "pSourceRegionStartCoordinate"), (Pointer(Const(D3D11_TILE_REGION_SIZE)), "pTileRegionSize"), (D3D11_TILE_MAPPING_FLAG, "Flags")]), StdMethod(Void, "CopyTiles", [(ObjPointer(ID3D11Resource), "pTiledResource"), (Pointer(Const(D3D11_TILED_RESOURCE_COORDINATE)), "pTileRegionStartCoordinate"), (Pointer(Const(D3D11_TILE_REGION_SIZE)), "pTileRegionSize"), (ObjPointer(ID3D11Buffer), "pBuffer"), (UINT64, "BufferStartOffsetInBytes"), (D3D11_TILE_COPY_FLAG, "Flags")]), StdMethod(Void, "UpdateTiles", [(ObjPointer(ID3D11Resource), "pDestTiledResource"), (Pointer(Const(D3D11_TILED_RESOURCE_COORDINATE)), "pDestTileRegionStartCoordinate"), (Pointer(Const(D3D11_TILE_REGION_SIZE)), "pDestTileRegionSize"), (OpaquePointer(Const(Void)), "pSourceTileData"), (D3D11_TILE_COPY_FLAG, "Flags")]), # FIXME StdMethod(HRESULT, "ResizeTilePool", [(ObjPointer(ID3D11Buffer), "pTilePool"), (UINT64, "NewSizeInBytes")]), StdMethod(Void, "TiledResourceBarrier", [(ObjPointer(ID3D11DeviceChild), "pTiledResourceOrViewAccessBeforeBarrier"), (ObjPointer(ID3D11DeviceChild), "pTiledResourceOrViewAccessAfterBarrier")]), StdMethod(BOOL, "IsAnnotationEnabled", [], sideeffects=False), StdMethod(Void, "SetMarkerInt", [(LPCWSTR, "pLabel"), (INT, "Data")]), StdMethod(Void, "BeginEventInt", [(LPCWSTR, "pLabel"), (INT, "Data")]), StdMethod(Void, "EndEvent", []), ] ID3D11Device2 = Interface("ID3D11Device2", ID3D11Device1) ID3D11Device2.methods += [ StdMethod(Void, "GetImmediateContext2", [Out(Pointer(ObjPointer(ID3D11DeviceContext2)), "ppImmediateContext")]), StdMethod(HRESULT, "CreateDeferredContext2", [(UINT, "ContextFlags"), Out(Pointer(ObjPointer(ID3D11DeviceContext2)), "ppDeferredContext")]), StdMethod(Void, "GetResourceTiling", [(ObjPointer(ID3D11Resource), "pTiledResource"), Out(Pointer(UINT), "pNumTilesForEntireResource"), Out(Pointer(D3D11_PACKED_MIP_DESC), "pPackedMipDesc"), Out(Pointer(D3D11_TILE_SHAPE), "pStandardTileShapeForNonPackedMips"), Out(Pointer(UINT), "pNumSubresourceTilings"), (UINT, "FirstSubresourceTilingToGet"), Out(Pointer(D3D11_SUBRESOURCE_TILING), "pSubresourceTilingsForNonPackedMips")]), StdMethod(HRESULT, "CheckMultisampleQualityLevels1", [(DXGI_FORMAT, "Format"), (UINT, "SampleCount"), (D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG, "Flags"), Out(Pointer(UINT), "pNumQualityLevels")], sideeffects=False), ] d3d11.addInterfaces([ ID3D11Device2, ID3D11DeviceContext2, ]) tmpNnpnZF/specs/README.markdown0000664000175000017500000000042612543167424015604 0ustar chrischrisThis directory contains specification of several APIs in a Python class hierarchy. The base classes of this hierarchy are in stdapi.py. Some of these specifications are (partially) generated from other external specifications, by ad-hoc scripts in the `scripts` subdirectory. tmpNnpnZF/specs/d3d10sdklayers.py0000664000175000017500000011021012543167424016203 0ustar chrischris########################################################################## # # Copyright 2012 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dxgi import * D3D10_DEBUG_FEATURE = Flags(UINT, [ "D3D10_DEBUG_FEATURE_FLUSH_PER_RENDER_OP", "D3D10_DEBUG_FEATURE_FINISH_PER_RENDER_OP", "D3D10_DEBUG_FEATURE_PRESENT_PER_RENDER_OP", ]) ID3D10Debug = Interface("ID3D10Debug", IUnknown) ID3D10Debug.methods += [ StdMethod(HRESULT, "SetFeatureMask", [(D3D10_DEBUG_FEATURE, "Mask")]), StdMethod(D3D10_DEBUG_FEATURE, "GetFeatureMask", [], sideeffects=False), StdMethod(HRESULT, "SetPresentPerRenderOpDelay", [(UINT, "Milliseconds")]), StdMethod(UINT, "GetPresentPerRenderOpDelay", [], sideeffects=False), StdMethod(HRESULT, "SetSwapChain", [(ObjPointer(IDXGISwapChain), "pSwapChain")]), StdMethod(HRESULT, "GetSwapChain", [Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]), StdMethod(HRESULT, "Validate", []), ] ID3D10SwitchToRef = Interface("ID3D10SwitchToRef", IUnknown) ID3D10SwitchToRef.methods += [ StdMethod(BOOL, "SetUseRef", [(BOOL, "UseRef")]), StdMethod(BOOL, "GetUseRef", [], sideeffects=False), ] D3D10_MESSAGE_CATEGORY = Enum("D3D10_MESSAGE_CATEGORY", [ "D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED", "D3D10_MESSAGE_CATEGORY_MISCELLANEOUS", "D3D10_MESSAGE_CATEGORY_INITIALIZATION", "D3D10_MESSAGE_CATEGORY_CLEANUP", "D3D10_MESSAGE_CATEGORY_COMPILATION", "D3D10_MESSAGE_CATEGORY_STATE_CREATION", "D3D10_MESSAGE_CATEGORY_STATE_SETTING", "D3D10_MESSAGE_CATEGORY_STATE_GETTING", "D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION", "D3D10_MESSAGE_CATEGORY_EXECUTION", ]) D3D10_MESSAGE_SEVERITY = Enum("D3D10_MESSAGE_SEVERITY", [ "D3D10_MESSAGE_SEVERITY_CORRUPTION", "D3D10_MESSAGE_SEVERITY_ERROR", "D3D10_MESSAGE_SEVERITY_WARNING", "D3D10_MESSAGE_SEVERITY_INFO", ]) D3D10_MESSAGE_ID = Enum("D3D10_MESSAGE_ID", [ "D3D10_MESSAGE_ID_UNKNOWN", "D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD", "D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD", "D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD", "D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD", "D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD", "D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD", "D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD", "D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD", "D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD", "D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD", "D3D10_MESSAGE_ID_STRING_FROM_APPLICATION", "D3D10_MESSAGE_ID_CORRUPTED_THIS", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14", "D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15", "D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING", "D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY", "D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT", "D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA", "D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA", "D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN", "D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS", "D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS", "D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES", "D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE", "D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC", "D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS", "D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC", "D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC", "D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS", "D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC", "D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC", "D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE", "D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE", "D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY", "D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE", "D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC", "D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY", "D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS", "D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG", "D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC", "D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED", "D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED", "D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE", "D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID", "D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE", "D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER", "D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT", "D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR", "D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH", "D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH", "D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID", "D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY", "D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE", "D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE", "D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE", "D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE", "D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE", "D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE", "D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX", "D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE", "D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID", "D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID", "D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID", "D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID", "D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID", "D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE", "D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS", "D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED", "D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN", "D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED", "D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE", "D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS", "D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED", "D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN", "D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED", "D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE", "D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS", "D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED", "D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN", "D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED", "D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE", "D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS", "D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED", "D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN", "D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE", "D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED", "D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED", "D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED", "D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS", "D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN", "D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE", "D3D10_MESSAGE_ID_REF_THREADING_MODE", "D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION", "D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION", "D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION", "D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE", "D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER", "D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY", "D3D10_MESSAGE_ID_REF_INFO", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE", "D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL", "D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL", "D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID", "D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL", "D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH", "D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT", "D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET", "D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED", "D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE", "D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER", "D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING", "D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0", "D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT", "D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT", "D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT", "D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN", "D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN", "D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC", "D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC", "D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH", "D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW", "D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS", "D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH", "D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY", "D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY", "D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER", "D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED", "D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER", "D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN", "D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN", "D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC", "D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER", "D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER", "D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE", "D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED", "D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION", "D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE", "D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS", "D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION", "D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS", "D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN", "D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE", "D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS", "D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL", "D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN", "D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE", "D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT", "D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH", "D3D10_MESSAGE_ID_D3D10_MESSAGES_END", "D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START", "D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE", "D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED", "D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS", "D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D", "D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE", "D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE", "D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS", "D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS", "D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX", "D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS", "D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED", "D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS", "D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY", "D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK", "D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK", "D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE", "D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE", "D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO", "D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES", "D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER", "D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE", "D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT", "D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS", "D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES", "D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED", "D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED", "D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED", "D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED", "D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND", "D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE", "D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED", "D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3", "D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED", "D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO", "D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION", "D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED", "D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR", "D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA", "D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP", "D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED", "D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT", "D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END", ]) D3D10_MESSAGE = Struct("D3D10_MESSAGE", [ (D3D10_MESSAGE_CATEGORY, "Category"), (D3D10_MESSAGE_SEVERITY, "Severity"), (D3D10_MESSAGE_ID, "ID"), (ConstCString, "pDescription"), (SIZE_T, "DescriptionByteLength"), ]) D3D10_INFO_QUEUE_FILTER_DESC = Struct("D3D10_INFO_QUEUE_FILTER_DESC", [ (UINT, "NumCategories"), (Array(D3D10_MESSAGE_CATEGORY, "{self}.NumCategories"), "pCategoryList"), (UINT, "NumSeverities"), (Array(D3D10_MESSAGE_SEVERITY, "{self}.NumSeverities"), "pSeverityList"), (UINT, "NumIDs"), (Array(D3D10_MESSAGE_ID, "{self}.NumIDs"), "pIDList"), ]) D3D10_INFO_QUEUE_FILTER = Struct("D3D10_INFO_QUEUE_FILTER", [ (D3D10_INFO_QUEUE_FILTER_DESC, "AllowList"), (D3D10_INFO_QUEUE_FILTER_DESC, "DenyList"), ]) ID3D10InfoQueue = Interface("ID3D10InfoQueue", IUnknown) ID3D10InfoQueue.methods += [ StdMethod(HRESULT, "SetMessageCountLimit", [(UINT64, "MessageCountLimit")], sideeffects=False), StdMethod(Void, "ClearStoredMessages", [], sideeffects=False), StdMethod(HRESULT, "GetMessage", [(UINT64, "MessageIndex"), Out(Pointer(D3D10_MESSAGE), "pMessage"), Out(Pointer(SIZE_T), "pMessageByteLength")], sideeffects=False), StdMethod(UINT64, "GetNumMessagesAllowedByStorageFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumMessagesDeniedByStorageFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumStoredMessages", [], sideeffects=False), StdMethod(UINT64, "GetNumStoredMessagesAllowedByRetrievalFilter", [], sideeffects=False), StdMethod(UINT64, "GetNumMessagesDiscardedByMessageCountLimit", [], sideeffects=False), StdMethod(UINT64, "GetMessageCountLimit", [], sideeffects=False), StdMethod(HRESULT, "AddStorageFilterEntries", [(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(HRESULT, "GetStorageFilter", [Out(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter"), Out(Pointer(SIZE_T), "pFilterByteLength")], sideeffects=False), StdMethod(Void, "ClearStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushEmptyStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushCopyOfStorageFilter", [], sideeffects=False), StdMethod(HRESULT, "PushStorageFilter", [(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(Void, "PopStorageFilter", [], sideeffects=False), StdMethod(UINT, "GetStorageFilterStackSize", [], sideeffects=False), StdMethod(HRESULT, "AddRetrievalFilterEntries", [(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(HRESULT, "GetRetrievalFilter", [Out(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter"), Out(Pointer(SIZE_T), "pFilterByteLength")], sideeffects=False), StdMethod(Void, "ClearRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushEmptyRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushCopyOfRetrievalFilter", [], sideeffects=False), StdMethod(HRESULT, "PushRetrievalFilter", [(Pointer(D3D10_INFO_QUEUE_FILTER), "pFilter")], sideeffects=False), StdMethod(Void, "PopRetrievalFilter", [], sideeffects=False), StdMethod(UINT, "GetRetrievalFilterStackSize", [], sideeffects=False), StdMethod(HRESULT, "AddMessage", [(D3D10_MESSAGE_CATEGORY, "Category"), (D3D10_MESSAGE_SEVERITY, "Severity"), (D3D10_MESSAGE_ID, "ID"), (LPCSTR, "pDescription")], sideeffects=False), StdMethod(HRESULT, "AddApplicationMessage", [(D3D10_MESSAGE_SEVERITY, "Severity"), (LPCSTR, "pDescription")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnCategory", [(D3D10_MESSAGE_CATEGORY, "Category"), (BOOL, "bEnable")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnSeverity", [(D3D10_MESSAGE_SEVERITY, "Severity"), (BOOL, "bEnable")], sideeffects=False), StdMethod(HRESULT, "SetBreakOnID", [(D3D10_MESSAGE_ID, "ID"), (BOOL, "bEnable")], sideeffects=False), StdMethod(BOOL, "GetBreakOnCategory", [(D3D10_MESSAGE_CATEGORY, "Category")], sideeffects=False), StdMethod(BOOL, "GetBreakOnSeverity", [(D3D10_MESSAGE_SEVERITY, "Severity")], sideeffects=False), StdMethod(BOOL, "GetBreakOnID", [(D3D10_MESSAGE_ID, "ID")], sideeffects=False), StdMethod(Void, "SetMuteDebugOutput", [(BOOL, "bMute")], sideeffects=False), StdMethod(BOOL, "GetMuteDebugOutput", [], sideeffects=False), ] tmpNnpnZF/specs/d3d8types.py0000664000175000017500000005412412543167424015310 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d8types.h""" from winapi import * D3DCOLOR = Alias("D3DCOLOR", DWORD) D3DVECTOR = Struct("D3DVECTOR", [ (Float, "x"), (Float, "y"), (Float, "z"), ]) D3DCOLORVALUE = Struct("D3DCOLORVALUE", [ (Float, "r"), (Float, "g"), (Float, "b"), (Float, "a"), ]) D3DRECT = Struct("D3DRECT", [ (LONG, "x1"), (LONG, "y1"), (LONG, "x2"), (LONG, "y2"), ]) D3DMATRIX = Struct("D3DMATRIX", [ (Array(Array(Float, 4), 4), "m"), ]) D3DVIEWPORT8 = Struct("D3DVIEWPORT8", [ (DWORD, "X"), (DWORD, "Y"), (DWORD, "Width"), (DWORD, "Height"), (Float, "MinZ"), (Float, "MaxZ"), ]) D3DCLIPPLANE = Flags(DWORD, [ "D3DCLIPPLANE0", "D3DCLIPPLANE1", "D3DCLIPPLANE2", "D3DCLIPPLANE3", "D3DCLIPPLANE4", "D3DCLIPPLANE5", ]) D3DCS = Flags(DWORD, [ "D3DCS_ALL", "D3DCS_LEFT", "D3DCS_RIGHT", "D3DCS_TOP", "D3DCS_BOTTOM", "D3DCS_FRONT", "D3DCS_BACK", "D3DCS_PLANE0", "D3DCS_PLANE1", "D3DCS_PLANE2", "D3DCS_PLANE3", "D3DCS_PLANE4", "D3DCS_PLANE5", ]) D3DCLIPSTATUS8 = Struct("D3DCLIPSTATUS8", [ (DWORD, "ClipUnion"), (DWORD, "ClipIntersection"), ]) D3DMATERIAL8 = Struct("D3DMATERIAL8", [ (D3DCOLORVALUE, "Diffuse"), (D3DCOLORVALUE, "Ambient"), (D3DCOLORVALUE, "Specular"), (D3DCOLORVALUE, "Emissive"), (Float, "Power"), ]) D3DLIGHTTYPE = Enum("D3DLIGHTTYPE", [ "D3DLIGHT_POINT", "D3DLIGHT_SPOT", "D3DLIGHT_DIRECTIONAL", ]) D3DLIGHT8 = Struct("D3DLIGHT8", [ (D3DLIGHTTYPE, "Type"), (D3DCOLORVALUE, "Diffuse"), (D3DCOLORVALUE, "Specular"), (D3DCOLORVALUE, "Ambient"), (D3DVECTOR, "Position"), (D3DVECTOR, "Direction"), (Float, "Range"), (Float, "Falloff"), (Float, "Attenuation0"), (Float, "Attenuation1"), (Float, "Attenuation2"), (Float, "Theta"), (Float, "Phi"), ]) D3DCLEAR = Flags(DWORD, [ "D3DCLEAR_TARGET", "D3DCLEAR_ZBUFFER", "D3DCLEAR_STENCIL", ]) D3DSHADEMODE = Enum("D3DSHADEMODE", [ "D3DSHADE_FLAT", "D3DSHADE_GOURAUD", "D3DSHADE_PHONG", ]) D3DFILLMODE = Enum("D3DFILLMODE", [ "D3DFILL_POINT", "D3DFILL_WIREFRAME", "D3DFILL_SOLID", ]) D3DLINEPATTERN = Struct("D3DLINEPATTERN", [ (WORD, "wRepeatFactor"), (WORD, "wLinePattern"), ]) D3DBLEND = Enum("D3DBLEND", [ "D3DBLEND_ZERO", "D3DBLEND_ONE", "D3DBLEND_SRCCOLOR", "D3DBLEND_INVSRCCOLOR", "D3DBLEND_SRCALPHA", "D3DBLEND_INVSRCALPHA", "D3DBLEND_DESTALPHA", "D3DBLEND_INVDESTALPHA", "D3DBLEND_DESTCOLOR", "D3DBLEND_INVDESTCOLOR", "D3DBLEND_SRCALPHASAT", "D3DBLEND_BOTHSRCALPHA", "D3DBLEND_BOTHINVSRCALPHA", ]) D3DBLENDOP = Enum("D3DBLENDOP", [ "D3DBLENDOP_ADD", "D3DBLENDOP_SUBTRACT", "D3DBLENDOP_REVSUBTRACT", "D3DBLENDOP_MIN", "D3DBLENDOP_MAX", ]) D3DTEXTUREADDRESS = Enum("D3DTEXTUREADDRESS", [ "D3DTADDRESS_WRAP", "D3DTADDRESS_MIRROR", "D3DTADDRESS_CLAMP", "D3DTADDRESS_BORDER", "D3DTADDRESS_MIRRORONCE", ]) D3DCULL = Enum("D3DCULL", [ "D3DCULL_NONE", "D3DCULL_CW", "D3DCULL_CCW", ]) D3DCMPFUNC = Enum("D3DCMPFUNC", [ "D3DCMP_NEVER", "D3DCMP_LESS", "D3DCMP_EQUAL", "D3DCMP_LESSEQUAL", "D3DCMP_GREATER", "D3DCMP_NOTEQUAL", "D3DCMP_GREATEREQUAL", "D3DCMP_ALWAYS", ]) D3DSTENCILOP = Enum("D3DSTENCILOP", [ "D3DSTENCILOP_KEEP", "D3DSTENCILOP_ZERO", "D3DSTENCILOP_REPLACE", "D3DSTENCILOP_INCRSAT", "D3DSTENCILOP_DECRSAT", "D3DSTENCILOP_INVERT", "D3DSTENCILOP_INCR", "D3DSTENCILOP_DECR", ]) D3DFOGMODE = Enum("D3DFOGMODE", [ "D3DFOG_NONE", "D3DFOG_EXP", "D3DFOG_EXP2", "D3DFOG_LINEAR", ]) D3DZBUFFERTYPE = Enum("D3DZBUFFERTYPE", [ "D3DZB_FALSE", "D3DZB_TRUE", "D3DZB_USEW", ]) D3DPRIMITIVETYPE = Enum("D3DPRIMITIVETYPE", [ "D3DPT_POINTLIST", "D3DPT_LINELIST", "D3DPT_LINESTRIP", "D3DPT_TRIANGLELIST", "D3DPT_TRIANGLESTRIP", "D3DPT_TRIANGLEFAN", ]) D3DTRANSFORMSTATETYPE = Enum("D3DTRANSFORMSTATETYPE", [ "D3DTS_VIEW", "D3DTS_PROJECTION", "D3DTS_TEXTURE0", "D3DTS_TEXTURE1", "D3DTS_TEXTURE2", "D3DTS_TEXTURE3", "D3DTS_TEXTURE4", "D3DTS_TEXTURE5", "D3DTS_TEXTURE6", "D3DTS_TEXTURE7", "D3DTS_WORLD", "D3DTS_WORLD1", "D3DTS_WORLD2", "D3DTS_WORLD3", ]) D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [ "D3DMCS_MATERIAL", "D3DMCS_COLOR1", "D3DMCS_COLOR2", ]) D3DWRAPCOORD = Flags(DWORD, [ "D3DWRAPCOORD_0", "D3DWRAPCOORD_1", "D3DWRAPCOORD_2", "D3DWRAPCOORD_3", ]) D3DCOLORWRITEENABLE = Flags(DWORD, [ "D3DCOLORWRITEENABLE_RED", "D3DCOLORWRITEENABLE_GREEN", "D3DCOLORWRITEENABLE_BLUE", "D3DCOLORWRITEENABLE_ALPHA", ]) D3DORDERTYPE = Enum("D3DORDERTYPE", [ "D3DORDER_LINEAR", "D3DORDER_QUADRATIC", "D3DORDER_CUBIC", "D3DORDER_QUINTIC", ]) D3DPATCHEDGESTYLE = Enum("D3DPATCHEDGESTYLE", [ "D3DPATCHEDGE_DISCRETE", "D3DPATCHEDGE_CONTINUOUS", ]) D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [ "D3DVBF_DISABLE", "D3DVBF_1WEIGHTS", "D3DVBF_2WEIGHTS", "D3DVBF_3WEIGHTS", "D3DVBF_TWEENING", "D3DVBF_0WEIGHTS", ]) D3DDEBUGMONITORTOKENS = Enum("D3DDEBUGMONITORTOKENS", [ "D3DDMT_ENABLE", "D3DDMT_DISABLE", ]) # TODO: Convert these to/from actual floats FLOAT_AS_DWORD = DWORD D3DRENDERSTATETYPE, D3DRENDERSTATEVALUE = EnumPolymorphic("D3DRENDERSTATETYPE", "State", [ ("D3DRS_ZENABLE", D3DZBUFFERTYPE), ("D3DRS_FILLMODE", D3DFILLMODE), ("D3DRS_SHADEMODE", D3DSHADEMODE), ("D3DRS_LINEPATTERN", DWORD), # D3DLINEPATTERN ("D3DRS_ZWRITEENABLE", BOOL), ("D3DRS_ALPHATESTENABLE", BOOL), ("D3DRS_LASTPIXEL", BOOL), ("D3DRS_SRCBLEND", D3DBLEND), ("D3DRS_DESTBLEND", D3DBLEND), ("D3DRS_CULLMODE", D3DCULL), ("D3DRS_ZFUNC", D3DCMPFUNC), ("D3DRS_ALPHAREF", DWORD), ("D3DRS_ALPHAFUNC", D3DCMPFUNC), ("D3DRS_DITHERENABLE", BOOL), ("D3DRS_ALPHABLENDENABLE", BOOL), ("D3DRS_FOGENABLE", BOOL), ("D3DRS_SPECULARENABLE", BOOL), ("D3DRS_ZVISIBLE", BOOL), ("D3DRS_FOGCOLOR", D3DCOLOR), ("D3DRS_FOGTABLEMODE", D3DFOGMODE), ("D3DRS_FOGSTART", FLOAT_AS_DWORD), ("D3DRS_FOGEND", FLOAT_AS_DWORD), ("D3DRS_FOGDENSITY", FLOAT_AS_DWORD), ("D3DRS_EDGEANTIALIAS", BOOL), ("D3DRS_ZBIAS", LONG), ("D3DRS_RANGEFOGENABLE", BOOL), ("D3DRS_STENCILENABLE", BOOL), ("D3DRS_STENCILFAIL", D3DSTENCILOP), ("D3DRS_STENCILZFAIL", D3DSTENCILOP), ("D3DRS_STENCILPASS", D3DSTENCILOP), ("D3DRS_STENCILFUNC", D3DCMPFUNC), ("D3DRS_STENCILREF", DWORD), ("D3DRS_STENCILMASK", DWORD), ("D3DRS_STENCILWRITEMASK", DWORD), ("D3DRS_TEXTUREFACTOR", D3DCOLOR), ("D3DRS_WRAP0", D3DWRAPCOORD), ("D3DRS_WRAP1", D3DWRAPCOORD), ("D3DRS_WRAP2", D3DWRAPCOORD), ("D3DRS_WRAP3", D3DWRAPCOORD), ("D3DRS_WRAP4", D3DWRAPCOORD), ("D3DRS_WRAP5", D3DWRAPCOORD), ("D3DRS_WRAP6", D3DWRAPCOORD), ("D3DRS_WRAP7", D3DWRAPCOORD), ("D3DRS_CLIPPING", BOOL), ("D3DRS_LIGHTING", BOOL), ("D3DRS_AMBIENT", D3DCOLOR), ("D3DRS_FOGVERTEXMODE", D3DFOGMODE), ("D3DRS_COLORVERTEX", BOOL), ("D3DRS_LOCALVIEWER", BOOL), ("D3DRS_NORMALIZENORMALS", BOOL), ("D3DRS_DIFFUSEMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_SPECULARMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_AMBIENTMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_EMISSIVEMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_VERTEXBLEND", D3DVERTEXBLENDFLAGS), ("D3DRS_CLIPPLANEENABLE", D3DCLIPPLANE), ("D3DRS_SOFTWAREVERTEXPROCESSING", BOOL), ("D3DRS_POINTSIZE", FLOAT_AS_DWORD), ("D3DRS_POINTSIZE_MIN", FLOAT_AS_DWORD), ("D3DRS_POINTSPRITEENABLE", BOOL), ("D3DRS_POINTSCALEENABLE", BOOL), ("D3DRS_POINTSCALE_A", FLOAT_AS_DWORD), ("D3DRS_POINTSCALE_B", FLOAT_AS_DWORD), ("D3DRS_POINTSCALE_C", FLOAT_AS_DWORD), ("D3DRS_MULTISAMPLEANTIALIAS", BOOL), ("D3DRS_MULTISAMPLEMASK", DWORD), ("D3DRS_PATCHEDGESTYLE", D3DPATCHEDGESTYLE), ("D3DRS_PATCHSEGMENTS", DWORD), ("D3DRS_DEBUGMONITORTOKEN", D3DDEBUGMONITORTOKENS), ("D3DRS_POINTSIZE_MAX", FLOAT_AS_DWORD), ("D3DRS_INDEXEDVERTEXBLENDENABLE", BOOL), ("D3DRS_COLORWRITEENABLE", DWORD), ("D3DRS_TWEENFACTOR", FLOAT_AS_DWORD), ("D3DRS_BLENDOP", D3DBLENDOP), ("D3DRS_POSITIONORDER", D3DORDERTYPE), ("D3DRS_NORMALORDER", D3DORDERTYPE), # XXX: D3DRENDERSTATE_WRAPBIAS + n ], DWORD) D3DTSS_TCI = Flags(DWORD, [ #"D3DTSS_TCI_PASSTHRU", # 0 "D3DTSS_TCI_CAMERASPACENORMAL", "D3DTSS_TCI_CAMERASPACEPOSITION", "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR", ]) D3DTEXTUREOP = Enum("D3DTEXTUREOP", [ "D3DTOP_DISABLE", "D3DTOP_SELECTARG1", "D3DTOP_SELECTARG2", "D3DTOP_MODULATE", "D3DTOP_MODULATE2X", "D3DTOP_MODULATE4X", "D3DTOP_ADD", "D3DTOP_ADDSIGNED", "D3DTOP_ADDSIGNED2X", "D3DTOP_SUBTRACT", "D3DTOP_ADDSMOOTH", "D3DTOP_BLENDDIFFUSEALPHA", "D3DTOP_BLENDTEXTUREALPHA", "D3DTOP_BLENDFACTORALPHA", "D3DTOP_BLENDTEXTUREALPHAPM", "D3DTOP_BLENDCURRENTALPHA", "D3DTOP_PREMODULATE", "D3DTOP_MODULATEALPHA_ADDCOLOR", "D3DTOP_MODULATECOLOR_ADDALPHA", "D3DTOP_MODULATEINVALPHA_ADDCOLOR", "D3DTOP_MODULATEINVCOLOR_ADDALPHA", "D3DTOP_BUMPENVMAP", "D3DTOP_BUMPENVMAPLUMINANCE", "D3DTOP_DOTPRODUCT3", "D3DTOP_MULTIPLYADD", "D3DTOP_LERP", ]) # XXX: Actually a mixture of enums and flags D3DTA = FakeEnum(DWORD, [ "D3DTA_DIFFUSE", "D3DTA_CURRENT", "D3DTA_TEXTURE", "D3DTA_TFACTOR", "D3DTA_SPECULAR", "D3DTA_TEMP", #"D3DTA_COMPLEMENT", #"D3DTA_ALPHAREPLICATE", ]) D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [ "D3DTTFF_DISABLE", "D3DTTFF_COUNT1", "D3DTTFF_COUNT2", "D3DTTFF_COUNT3", "D3DTTFF_COUNT4", "D3DTTFF_PROJECTED", ]) D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [ "D3DTEXF_NONE", "D3DTEXF_POINT", "D3DTEXF_LINEAR", "D3DTEXF_ANISOTROPIC", "D3DTEXF_FLATCUBIC", "D3DTEXF_GAUSSIANCUBIC", ]) D3DTEXTURESTAGESTATETYPE, D3DTEXTURESTAGESTATEVALUE = EnumPolymorphic("D3DTEXTURESTAGESTATETYPE", "Type", [ ("D3DTSS_COLOROP", D3DTEXTUREOP), ("D3DTSS_COLORARG1", D3DTA), ("D3DTSS_COLORARG2", D3DTA), ("D3DTSS_ALPHAOP", D3DTEXTUREOP), ("D3DTSS_ALPHAARG1", D3DTA), ("D3DTSS_ALPHAARG2", D3DTA), ("D3DTSS_BUMPENVMAT00", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT01", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT10", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT11", FLOAT_AS_DWORD), ("D3DTSS_TEXCOORDINDEX", D3DTSS_TCI), ("D3DTSS_ADDRESSU", D3DTEXTUREADDRESS), ("D3DTSS_ADDRESSV", D3DTEXTUREADDRESS), ("D3DTSS_BORDERCOLOR", D3DCOLOR), ("D3DTSS_MAGFILTER", D3DTEXTUREFILTERTYPE), ("D3DTSS_MINFILTER", D3DTEXTUREFILTERTYPE), ("D3DTSS_MIPFILTER", D3DTEXTUREFILTERTYPE), ("D3DTSS_MIPMAPLODBIAS", FLOAT_AS_DWORD), ("D3DTSS_MAXMIPLEVEL", DWORD), ("D3DTSS_MAXANISOTROPY", DWORD), ("D3DTSS_BUMPENVLSCALE", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVLOFFSET", FLOAT_AS_DWORD), ("D3DTSS_TEXTURETRANSFORMFLAGS", D3DTEXTURETRANSFORMFLAGS), ("D3DTSS_ADDRESSW", D3DTEXTUREADDRESS), ("D3DTSS_COLORARG0", D3DTA), ("D3DTSS_ALPHAARG0", D3DTA), ("D3DTSS_RESULTARG", D3DTA), ], DWORD) D3DPV = Flags(DWORD, [ "D3DPV_DONOTCOPYDATA", ]) # XXX: Actually a mixture of enums and flags D3DFVF = Flags(DWORD, [ "D3DFVF_RESERVED0", "D3DFVF_XYZ", "D3DFVF_XYZRHW", "D3DFVF_XYZB1", "D3DFVF_XYZB2", "D3DFVF_XYZB3", "D3DFVF_XYZB4", "D3DFVF_XYZB5", "D3DFVF_NORMAL", "D3DFVF_PSIZE", "D3DFVF_DIFFUSE", "D3DFVF_SPECULAR", #"D3DFVF_TEX0", #"D3DFVF_TEX1", #"D3DFVF_TEX2", #"D3DFVF_TEX3", #"D3DFVF_TEX4", #"D3DFVF_TEX5", #"D3DFVF_TEX6", #"D3DFVF_TEX7", #"D3DFVF_TEX8", "D3DFVF_LASTBETA_UBYTE4", "D3DFVF_RESERVED2", #"D3DFVF_TEXCOORDSIZE1(0)", #"D3DFVF_TEXCOORDSIZE2(0)", #"D3DFVF_TEXCOORDSIZE3(0)", #"D3DFVF_TEXCOORDSIZE4(0)", #"D3DFVF_TEXCOORDSIZE1(1)", #"D3DFVF_TEXCOORDSIZE2(1)", #"D3DFVF_TEXCOORDSIZE3(1)", #"D3DFVF_TEXCOORDSIZE4(1)", #"D3DFVF_TEXCOORDSIZE1(2)", #"D3DFVF_TEXCOORDSIZE2(2)", #"D3DFVF_TEXCOORDSIZE3(2)", #"D3DFVF_TEXCOORDSIZE4(2)", #"D3DFVF_TEXCOORDSIZE1(3)", #"D3DFVF_TEXCOORDSIZE2(3)", #"D3DFVF_TEXCOORDSIZE3(3)", #"D3DFVF_TEXCOORDSIZE4(3)", ]) # XXX D3DVSD_TOKENTYPE = Enum("D3DVSD_TOKENTYPE", [ "D3DVSD_TOKEN_NOP", "D3DVSD_TOKEN_STREAM", "D3DVSD_TOKEN_STREAMDATA", "D3DVSD_TOKEN_TESSELLATOR", "D3DVSD_TOKEN_CONSTMEM", "D3DVSD_TOKEN_EXT", "D3DVSD_TOKEN_END", ]) # XXX D3DVSDT = FakeEnum(DWORD, [ "D3DVSDT_FLOAT1", "D3DVSDT_FLOAT2", "D3DVSDT_FLOAT3", "D3DVSDT_FLOAT4", "D3DVSDT_D3DCOLOR", "D3DVSDT_UBYTE4", "D3DVSDT_SHORT2", "D3DVSDT_SHORT4", "D3DVSDE_POSITION", "D3DVSDE_BLENDWEIGHT", "D3DVSDE_BLENDINDICES", "D3DVSDE_NORMAL", "D3DVSDE_PSIZE", "D3DVSDE_DIFFUSE", "D3DVSDE_SPECULAR", "D3DVSDE_TEXCOORD0", "D3DVSDE_TEXCOORD1", "D3DVSDE_TEXCOORD2", "D3DVSDE_TEXCOORD3", "D3DVSDE_TEXCOORD4", "D3DVSDE_TEXCOORD5", "D3DVSDE_TEXCOORD6", "D3DVSDE_TEXCOORD7", "D3DVSDE_POSITION2", "D3DVSDE_NORMAL2", "D3DDP_MAXTEXCOORD", "D3DSI_OPCODE_MASK", ]) D3DBASISTYPE = Enum("D3DBASISTYPE", [ "D3DBASIS_BEZIER", "D3DBASIS_BSPLINE", "D3DBASIS_INTERPOLATE", ]) D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [ "D3DSBT_ALL", "D3DSBT_PIXELSTATE", "D3DSBT_VERTEXSTATE", ]) D3DDEVTYPE = Enum("D3DDEVTYPE", [ "D3DDEVTYPE_HAL", "D3DDEVTYPE_REF", "D3DDEVTYPE_SW", ]) D3DMULTISAMPLE_TYPE = Enum("D3DMULTISAMPLE_TYPE", [ "D3DMULTISAMPLE_NONE", "D3DMULTISAMPLE_2_SAMPLES", "D3DMULTISAMPLE_3_SAMPLES", "D3DMULTISAMPLE_4_SAMPLES", "D3DMULTISAMPLE_5_SAMPLES", "D3DMULTISAMPLE_6_SAMPLES", "D3DMULTISAMPLE_7_SAMPLES", "D3DMULTISAMPLE_8_SAMPLES", "D3DMULTISAMPLE_9_SAMPLES", "D3DMULTISAMPLE_10_SAMPLES", "D3DMULTISAMPLE_11_SAMPLES", "D3DMULTISAMPLE_12_SAMPLES", "D3DMULTISAMPLE_13_SAMPLES", "D3DMULTISAMPLE_14_SAMPLES", "D3DMULTISAMPLE_15_SAMPLES", "D3DMULTISAMPLE_16_SAMPLES", ]) D3DFORMAT = Enum("D3DFORMAT", [ "D3DFMT_UNKNOWN", "D3DFMT_R8G8B8", "D3DFMT_A8R8G8B8", "D3DFMT_X8R8G8B8", "D3DFMT_R5G6B5", "D3DFMT_X1R5G5B5", "D3DFMT_A1R5G5B5", "D3DFMT_A4R4G4B4", "D3DFMT_R3G3B2", "D3DFMT_A8", "D3DFMT_A8R3G3B2", "D3DFMT_X4R4G4B4", "D3DFMT_A2B10G10R10", "D3DFMT_G16R16", "D3DFMT_A8P8", "D3DFMT_P8", "D3DFMT_L8", "D3DFMT_A8L8", "D3DFMT_A4L4", "D3DFMT_V8U8", "D3DFMT_L6V5U5", "D3DFMT_X8L8V8U8", "D3DFMT_Q8W8V8U8", "D3DFMT_V16U16", "D3DFMT_W11V11U10", "D3DFMT_A2W10V10U10", "D3DFMT_UYVY", "D3DFMT_YUY2", "D3DFMT_DXT1", "D3DFMT_DXT2", "D3DFMT_DXT3", "D3DFMT_DXT4", "D3DFMT_DXT5", "D3DFMT_D16_LOCKABLE", "D3DFMT_D32", "D3DFMT_D15S1", "D3DFMT_D24S8", "D3DFMT_D16", "D3DFMT_D24X8", "D3DFMT_D24X4S4", "D3DFMT_VERTEXDATA", "D3DFMT_INDEX16", "D3DFMT_INDEX32", ]) D3DDISPLAYMODE = Struct("D3DDISPLAYMODE", [ (UINT, "Width"), (UINT, "Height"), (UINT, "RefreshRate"), (D3DFORMAT, "Format"), ]) D3DCREATE = Flags(DWORD, [ "D3DCREATE_FPU_PRESERVE", "D3DCREATE_MULTITHREADED", "D3DCREATE_PUREDEVICE", "D3DCREATE_SOFTWARE_VERTEXPROCESSING", "D3DCREATE_HARDWARE_VERTEXPROCESSING", "D3DCREATE_MIXED_VERTEXPROCESSING", "D3DCREATE_DISABLE_DRIVER_MANAGEMENT", ]) D3DDEVICE_CREATION_PARAMETERS = Struct("D3DDEVICE_CREATION_PARAMETERS", [ (UINT, "AdapterOrdinal"), (D3DDEVTYPE, "DeviceType"), (HWND, "hFocusWindow"), (D3DCREATE, "BehaviorFlags"), ]) D3DSWAPEFFECT = Enum("D3DSWAPEFFECT", [ "D3DSWAPEFFECT_DISCARD", "D3DSWAPEFFECT_FLIP", "D3DSWAPEFFECT_COPY", "D3DSWAPEFFECT_COPY_VSYNC", ]) D3DPOOL = Enum("D3DPOOL", [ "D3DPOOL_DEFAULT", "D3DPOOL_MANAGED", "D3DPOOL_SYSTEMMEM", "D3DPOOL_SCRATCH", ]) D3DPRESENT = FakeEnum(DWORD, [ "D3DPRESENT_RATE_DEFAULT", "D3DPRESENT_RATE_UNLIMITED", ]) D3DPRESENTFLAG = Flags(DWORD, [ "D3DPRESENTFLAG_LOCKABLE_BACKBUFFER", ]) D3DPRESENT_INTERVAL = Flags(DWORD, [ "D3DPRESENT_INTERVAL_DEFAULT", # 0 "D3DPRESENT_INTERVAL_ONE", "D3DPRESENT_INTERVAL_TWO", "D3DPRESENT_INTERVAL_THREE", "D3DPRESENT_INTERVAL_FOUR", "D3DPRESENT_INTERVAL_IMMEDIATE", ]) D3DPRESENT_PARAMETERS = Struct("D3DPRESENT_PARAMETERS", [ (UINT, "BackBufferWidth"), (UINT, "BackBufferHeight"), (D3DFORMAT, "BackBufferFormat"), (UINT, "BackBufferCount"), (D3DMULTISAMPLE_TYPE, "MultiSampleType"), (D3DSWAPEFFECT, "SwapEffect"), (HWND, "hDeviceWindow"), (BOOL, "Windowed"), (BOOL, "EnableAutoDepthStencil"), (D3DFORMAT, "AutoDepthStencilFormat"), (D3DPRESENTFLAG, "Flags"), (UINT, "FullScreen_RefreshRateInHz"), (D3DPRESENT_INTERVAL, "FullScreen_PresentationInterval"), ]) D3DGAMMARAMP = Struct("D3DGAMMARAMP", [ (Array(WORD, 256), "red"), (Array(WORD, 256), "green"), (Array(WORD, 256), "blue"), ]) D3DBACKBUFFER_TYPE = Enum("D3DBACKBUFFER_TYPE", [ "D3DBACKBUFFER_TYPE_MONO", "D3DBACKBUFFER_TYPE_LEFT", "D3DBACKBUFFER_TYPE_RIGHT", ]) D3DRESOURCETYPE = Enum("D3DRESOURCETYPE", [ "D3DRTYPE_SURFACE", "D3DRTYPE_VOLUME", "D3DRTYPE_TEXTURE", "D3DRTYPE_VOLUMETEXTURE", "D3DRTYPE_CUBETEXTURE", "D3DRTYPE_VERTEXBUFFER", "D3DRTYPE_INDEXBUFFER", ]) D3DUSAGE = Flags(DWORD, [ "D3DUSAGE_RENDERTARGET", "D3DUSAGE_DEPTHSTENCIL", "D3DUSAGE_WRITEONLY", "D3DUSAGE_SOFTWAREPROCESSING", "D3DUSAGE_DONOTCLIP", "D3DUSAGE_POINTS", "D3DUSAGE_RTPATCHES", "D3DUSAGE_NPATCHES", "D3DUSAGE_DYNAMIC", ]) D3DCUBEMAP_FACES = Enum("D3DCUBEMAP_FACES", [ "D3DCUBEMAP_FACE_POSITIVE_X", "D3DCUBEMAP_FACE_NEGATIVE_X", "D3DCUBEMAP_FACE_POSITIVE_Y", "D3DCUBEMAP_FACE_NEGATIVE_Y", "D3DCUBEMAP_FACE_POSITIVE_Z", "D3DCUBEMAP_FACE_NEGATIVE_Z", ]) D3DLOCK = Flags(DWORD, [ "D3DLOCK_READONLY", "D3DLOCK_DISCARD", "D3DLOCK_NOOVERWRITE", "D3DLOCK_NOSYSLOCK", "D3DLOCK_NO_DIRTY_UPDATE", ]) D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), (DWORD, "FVF"), ]) D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), ]) D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), (D3DMULTISAMPLE_TYPE, "MultiSampleType"), (UINT, "Width"), (UINT, "Height"), ]) D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), (UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), ]) D3DLOCKED_RECT = Struct("D3DLOCKED_RECT", [ (INT, "Pitch"), (LinearPointer(Void, "_MappedSize"), "pBits"), ]) D3DBOX = Struct("D3DBOX", [ (UINT, "Left"), (UINT, "Top"), (UINT, "Right"), (UINT, "Bottom"), (UINT, "Front"), (UINT, "Back"), ]) D3DLOCKED_BOX = Struct("D3DLOCKED_BOX", [ (INT, "RowPitch"), (INT, "SlicePitch"), (LinearPointer(Void, "_MappedSize"), "pBits"), ]) D3DRANGE = Struct("D3DRANGE", [ (UINT, "Offset"), (UINT, "Size"), ]) D3DRECTPATCH_INFO = Struct("D3DRECTPATCH_INFO", [ (UINT, "StartVertexOffsetWidth"), (UINT, "StartVertexOffsetHeight"), (UINT, "Width"), (UINT, "Height"), (UINT, "Stride"), (D3DBASISTYPE, "Basis"), (D3DORDERTYPE, "Order"), ]) D3DTRIPATCH_INFO = Struct("D3DTRIPATCH_INFO", [ (UINT, "StartVertexOffset"), (UINT, "NumVertices"), (D3DBASISTYPE, "Basis"), (D3DORDERTYPE, "Order"), ]) D3DADAPTER_IDENTIFIER8 = Struct("D3DADAPTER_IDENTIFIER8", [ (CString, "Driver"), (CString, "Description"), (LARGE_INTEGER, "DriverVersion"), (DWORD, "VendorId"), (DWORD, "DeviceId"), (DWORD, "SubSysId"), (DWORD, "Revision"), (GUID, "DeviceIdentifier"), (DWORD, "WHQLLevel"), ]) D3DRASTER_STATUS = Struct("D3DRASTER_STATUS", [ (BOOL, "InVBlank"), (UINT, "ScanLine"), ]) D3DDEVINFOID = FakeEnum(DWORD, [ "D3DDEVINFOID_RESOURCEMANAGER", "D3DDEVINFOID_VERTEXSTATS", ]) D3DRESOURCESTATS = Struct("D3DRESOURCESTATS", [ (BOOL, "bThrashing"), (DWORD, "ApproxBytesDownloaded"), (DWORD, "NumEvicts"), (DWORD, "NumVidCreates"), (DWORD, "LastPri"), (DWORD, "NumUsed"), (DWORD, "NumUsedInVidMem"), (DWORD, "WorkingSet"), (DWORD, "WorkingSetBytes"), (DWORD, "TotalManaged"), (DWORD, "TotalBytes"), ]) D3DDEVINFO_RESOURCEMANAGER = Struct("D3DDEVINFO_RESOURCEMANAGER", [ (Array(D3DRESOURCESTATS, "D3DRTYPECOUNT"), "stats"), ]) D3DDEVINFO_D3DVERTEXSTATS = Struct("D3DDEVINFO_D3DVERTEXSTATS", [ (DWORD, "NumRenderedTriangles"), (DWORD, "NumExtraClippingTriangles"), ]) tmpNnpnZF/specs/cglapi.py0000664000175000017500000003622212543167424014717 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """CGL API description. http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGL_OpenGL/Reference/reference.html """ from stdapi import * from glapi import * from glapi import glapi IOSurfaceRef = Opaque("IOSurfaceRef") CGLContextObj = Opaque("CGLContextObj") CGLPixelFormatObj = Opaque("CGLPixelFormatObj") CGLRendererInfoObj = Opaque("CGLRendererInfoObj") CGLPBufferObj = Opaque("CGLPBufferObj") CGLShareGroup = Opaque("CGLShareGroup") CGLShareGroupObj = Opaque("CGLShareGroupObj") CGSConnectionID = Opaque("CGSConnectionID") CGSWindowID = Alias("CGSWindowID", Int) CGSSurfaceID = Alias("CGSSurfaceID", Int) CGLOpenGLProfile = Enum("CGLOpenGLProfile", [ 'kCGLOGLPVersion_Legacy', 'kCGLOGLPVersion_3_2_Core', #'kCGLOGLPVersion_GL3_Core', # Same as kCGLOGLPVersion_3_2_Core 'kCGLOGLPVersion_GL4_Core', ]) CGLPixelFormatAttributes = [ ("kCGLPFAAllRenderers", None), ("kCGLPFATripleBuffer", None), ("kCGLPFADoubleBuffer", None), ("kCGLPFAStereo", None), ("kCGLPFAColorSize", Int), ("kCGLPFAAlphaSize", Int), ("kCGLPFADepthSize", Int), ("kCGLPFAStencilSize", Int), ("kCGLPFAMinimumPolicy", None), ("kCGLPFAMaximumPolicy", None), ("kCGLPFASampleBuffers", Int), ("kCGLPFASamples", Int), ("kCGLPFAColorFloat", None), ("kCGLPFAMultisample", None), ("kCGLPFASupersample", None), ("kCGLPFASampleAlpha", None), ("kCGLPFARendererID", Int), ("kCGLPFANoRecovery", None), ("kCGLPFAAccelerated", None), ("kCGLPFAClosestPolicy", None), ("kCGLPFABackingStore", None), ("kCGLPFABackingVolatile", None), ("kCGLPFADisplayMask", Int), ("kCGLPFAAllowOfflineRenderers", None), ("kCGLPFAAcceleratedCompute", None), ("kCGLPFAOpenGLProfile", CGLOpenGLProfile), ("kCGLPFASupportsAutomaticGraphicsSwitching", None), ("kCGLPFAVirtualScreenCount", Int), ("kCGLPFAAuxBuffers", Int), ("kCGLPFAAccumSize", Int), ("kCGLPFAAuxDepthStencil", None), ("kCGLPFAOffScreen", None), ("kCGLPFAWindow", None), ("kCGLPFACompliant", None), ("kCGLPFAPBuffer", None), ("kCGLPFARemotePBuffer", None), ("kCGLPFASingleRenderer", None), ("kCGLPFARobust", None), ("kCGLPFAMPSafe", None), ("kCGLPFAMultiScreen", None), ("kCGLPFAFullScreen", None), ] CGLPixelFormatAttribute = Enum("CGLPixelFormatAttribute", [attrib for attrib, _ in CGLPixelFormatAttributes] ) CGLPixelFormatAttribs = AttribArray( Const(CGLPixelFormatAttribute), CGLPixelFormatAttributes ) CGLRendererProperty = Enum("CGLRendererProperty", [ "kCGLRPOffScreen", "kCGLRPFullScreen", "kCGLRPRendererID", "kCGLRPAccelerated", "kCGLRPRobust", "kCGLRPBackingStore", "kCGLRPMPSafe", "kCGLRPWindow", "kCGLRPMultiScreen", "kCGLRPCompliant", "kCGLRPDisplayMask", "kCGLRPBufferModes", "kCGLRPColorModes", "kCGLRPAccumModes", "kCGLRPDepthModes", "kCGLRPStencilModes", "kCGLRPMaxAuxBuffers", "kCGLRPMaxSampleBuffers", "kCGLRPMaxSamples", "kCGLRPSampleModes", "kCGLRPSampleAlpha", "kCGLRPVideoMemory", "kCGLRPTextureMemory", "kCGLRPGPUVertProcCapable", "kCGLRPGPUFragProcCapable", "kCGLRPRendererCount", "kCGLRPOnline", "kCGLRPAcceleratedCompute", "kCGLRPVideoMemoryMegabytes", "kCGLRPTextureMemoryMegabytes", "kCGLRPMajorGLVersion", ]) CGLContextEnable = Enum("CGLContextEnable", [ "kCGLCESwapRectangle", "kCGLCESwapLimit", "kCGLCERasterization", "kCGLCEStateValidation", "kCGLCESurfaceBackingSize", "kCGLCEDisplayListOptimization", "kCGLCEMPEngine", "kCGLCECrashOnRemovedFunctions", ]) CGLContextParameter = Enum("CGLContextParameter", [ "kCGLCPSwapRectangle", "kCGLCPSwapInterval", "kCGLCPDispatchTableSize", "kCGLCPClientStorage", "kCGLCPSurfaceTexture", "kCGLCPSurfaceOrder", "kCGLCPSurfaceOpacity", "kCGLCPSurfaceBackingSize", "kCGLCPSurfaceSurfaceVolatile", "kCGLCPReclaimResources", "kCGLCPCurrentRendererID", "kCGLCPGPUVertexProcessing", "kCGLCPGPUFragmentProcessing", "kCGLCPHasDrawable", "kCGLCPMPSwapsInFlight", # CGLProfiler.h "kCGLCPComment", "kCGLCPDumpState", "kCGLCPEnableForceFlush", ]) CGLGlobalOption = Enum("CGLGlobalOption", [ "kCGLGOFormatCacheSize", "kCGLGOClearFormatCache", "kCGLGORetainRenderers", "kCGLGOResetLibrary", "kCGLGOUseErrorHandler", "kCGLGOUseBuildCache", # CGLProfiler.h "kCGLGOComment", "kCGLGOEnableFunctionTrace", "kCGLGOEnableFunctionStatistics", "kCGLGOResetFunctionTrace", "kCGLGOPageBreak", "kCGLGOResetFunctionStatistics", "kCGLGOEnableDebugAttach", "kCGLGOHideObjects", "kCGLGOEnableBreakpoint", "kCGLGOForceSlowRenderingPath", "kCGLGODisableImmediateRenderPath", "kCGLGODisableCVARenderPath", "kCGLGODisableVARRenderPath", "kCGLGOForceWireframeRendering", "kCGLGOSubmitOnImmediateRenderCommand", "kCGLGOSubmitOnCVARenderCommand", "kCGLGOSubmitOnVAORenderCommand", "kCGLGOSubmitOnClearCommand", "kCGLGOForceSoftwareTransformLighting", "kCGLGOForceSoftwareTexgen", "kCGLGOForceSoftwareTRUFORM_ATI", "kCGLGOForceSoftwareVertexShaders", "kCGLGODisableFragmentShaders_ATI", "kCGLGODisableTexturing", "kCGLGOOutlineTexture", "kCGLGOOutlineTextureColor", "kCGLGOForceSlowBitmapPath", "kCGLGODisableBitmap", "kCGLGOForceSlowReadPixelsPath", "kCGLGODisableReadPixels", "kCGLGOOutlineReadPixelsBuffer", "kCGLGOOutlineReadPixelsBufferColor", "kCGLGOForceSlowDrawPixelsPath", "kCGLGODisableDrawPixels", "kCGLGOOutlineDrawPixelsBuffer", "kCGLGOOutlineDrawPixelsBufferColor", "kCGLGOForceSlowCopyPixelsPath", "kCGLGODisableCopyPixels", "kCGLGOOutlineCopyPixelsBuffer", "kCGLGOOutlineCopyPixelsBufferColor", "kCGLGOMakeAllGLObjectsRequireUpdate", "kCGLGOMakeAllGLStateRequireUpdate", ]) CGLError = Enum("CGLError", [ "kCGLNoError", "kCGLBadAttribute", "kCGLBadProperty", "kCGLBadPixelFormat", "kCGLBadRendererInfo", "kCGLBadContext", "kCGLBadDrawable", "kCGLBadDisplay", "kCGLBadState", "kCGLBadValue", "kCGLBadMatch", "kCGLBadEnumeration", "kCGLBadOffScreen", "kCGLBadFullScreen", "kCGLBadWindow", "kCGLBadAddress", "kCGLBadCodeModule", "kCGLBadAlloc", "kCGLBadConnection", ]) CGLContextObj = Opaque("CGLContextObj") cglapi = Module("CGL") cglapi.addFunctions([ # CGLCurrent.h, libGL.dylib Function(CGLError, "CGLSetCurrentContext", [(CGLContextObj, "ctx")]), Function(CGLContextObj, "CGLGetCurrentContext", []), # OpenGL.h, OpenGL framework Function(CGLError, "CGLChoosePixelFormat", [(CGLPixelFormatAttribs, "attribs"), Out(Pointer(CGLPixelFormatObj), "pix"), Out(Pointer(GLint), "npix")]), Function(CGLError, "CGLDestroyPixelFormat", [(CGLPixelFormatObj, "pix")]), Function(CGLError, "CGLDescribePixelFormat", [(CGLPixelFormatObj, "pix"), (GLint, "pix_num"), (CGLPixelFormatAttribute, "attrib"), Out(Pointer(GLint), "value")], sideeffects=False), Function(Void, "CGLReleasePixelFormat", [(CGLPixelFormatObj, "pix")]), Function(CGLPixelFormatObj, "CGLRetainPixelFormat", [(CGLPixelFormatObj, "pix")]), Function(GLuint, "CGLGetPixelFormatRetainCount", [(CGLPixelFormatObj, "pix")]), Function(CGLError, "CGLQueryRendererInfo", [(GLuint, "display_mask"), Out(Pointer(CGLRendererInfoObj), "rend"), Out(Pointer(GLint), "nrend")]), Function(CGLError, "CGLDestroyRendererInfo", [(CGLRendererInfoObj, "rend")]), Function(CGLError, "CGLDescribeRenderer", [(CGLRendererInfoObj, "rend"), (GLint, "rend_num"), (CGLRendererProperty, "prop"), Out(Pointer(GLint), "value")], sideeffects=False), Function(CGLError, "CGLCreateContext", [(CGLPixelFormatObj, "pix"), (CGLContextObj, "share"), Out(Pointer(CGLContextObj), "ctx")]), Function(CGLError, "CGLDestroyContext", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLCopyContext", [(CGLContextObj, "src"), (CGLContextObj, "dst"), (GLbitfield, "mask")]), Function(CGLContextObj, "CGLRetainContext", [(CGLContextObj, "ctx")]), Function(Void, "CGLReleaseContext", [(CGLContextObj, "ctx")]), Function(GLuint, "CGLGetContextRetainCount", [(CGLContextObj, "ctx")]), Function(CGLPixelFormatObj, "CGLGetPixelFormat", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLCreatePBuffer", [(GLsizei, "width"), (GLsizei, "height"), (GLenum, "target"), (GLenum, "internalFormat"), (GLint, "max_level"), Out(Pointer(CGLPBufferObj), "pbuffer")]), Function(CGLError, "CGLDestroyPBuffer", [(CGLPBufferObj, "pbuffer")]), Function(CGLError, "CGLDescribePBuffer", [(CGLPBufferObj, "obj"), Out(Pointer(GLsizei), "width"), Out(Pointer(GLsizei), "height"), Out(Pointer(GLenum), "target"), Out(Pointer(GLenum), "internalFormat"), Out(Pointer(GLint), "mipmap")]), Function(CGLError, "CGLTexImagePBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "source")]), Function(CGLPBufferObj, "CGLRetainPBuffer", [(CGLPBufferObj, "pbuffer")]), Function(Void, "CGLReleasePBuffer", [(CGLPBufferObj, "pbuffer")]), Function(GLuint, "CGLGetPBufferRetainCount", [(CGLPBufferObj, "pbuffer")]), Function(CGLError, "CGLSetOffScreen", [(CGLContextObj, "ctx"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "rowbytes"), (OpaquePointer(Void), "baseaddr")]), Function(CGLError, "CGLGetOffScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLsizei), "width"), Out(Pointer(GLsizei), "height"), Out(Pointer(GLint), "rowbytes"), Out(Pointer(OpaquePointer(Void)), "baseaddr")]), Function(CGLError, "CGLSetFullScreen", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLSetFullScreenOnDisplay", [(CGLContextObj, "ctx"), (GLuint, "display_mask")]), Function(CGLError, "CGLSetPBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "face"), (GLint, "level"), (GLint, "screen")]), Function(CGLError, "CGLGetPBuffer", [(CGLContextObj, "ctx"), Out(Pointer(CGLPBufferObj), "pbuffer"), Out(Pointer(GLenum), "face"), Out(Pointer(GLint), "level"), Out(Pointer(GLint), "screen")]), Function(CGLError, "CGLClearDrawable", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLFlushDrawable", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLEnable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]), Function(CGLError, "CGLDisable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]), Function(CGLError, "CGLIsEnabled", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname"), Out(Pointer(GLint), "enable")], sideeffects=False), Function(CGLError, "CGLSetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), (Array(Const(GLint), 1), "params")]), Function(CGLError, "CGLGetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), Out(Array(GLint, 1), "params")], sideeffects=False), Function(CGLError, "CGLSetVirtualScreen", [(CGLContextObj, "ctx"), (GLint, "screen")]), Function(CGLError, "CGLGetVirtualScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLint), "screen")], sideeffects=False), Function(CGLError, "CGLSetGlobalOption", [(CGLGlobalOption, "pname"), (OpaquePointer(Const(GLint)), "params")]), Function(CGLError, "CGLGetGlobalOption", [(CGLGlobalOption, "pname"), Out(OpaquePointer(GLint), "params")], sideeffects=False), Function(CGLError, "CGLSetOption", [(CGLGlobalOption, "pname"), (GLint, "param")]), Function(CGLError, "CGLGetOption", [(CGLGlobalOption, "pname"), Out(Pointer(GLint), "param")], sideeffects=False), Function(CGLError, "CGLLockContext", [(CGLContextObj, "ctx")]), Function(CGLError, "CGLUnlockContext", [(CGLContextObj, "ctx")]), Function(Void, "CGLGetVersion", [Out(Pointer(GLint), "majorvers"), Out(Pointer(GLint), "minorvers")], sideeffects=False), Function(ConstCString, "CGLErrorString", [(CGLError, "error")], sideeffects=False), # CGLIOSurface.h, OpenGL framework Function(CGLError, "CGLTexImageIOSurface2D", [(CGLContextObj, "ctx"), (GLenum, "target"), (GLenum, "internal_format"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (IOSurfaceRef, "ioSurface"), (GLuint, "plane")]), # CGLDevice.h, OpenGL framework Function(CGLShareGroupObj, "CGLGetShareGroup", [(CGLContextObj, "ctx")]), # Undocumented, OpenGL framework Function(CGLError, "CGLSetSurface", [(CGLContextObj, "ctx"), (CGSConnectionID, "cid"), (CGSWindowID, "wid"), (CGSSurfaceID, "sid")]), Function(CGLError, "CGLGetSurface", [(CGLContextObj, "ctx"), Out(Pointer(CGSConnectionID), "cid"), Out(Pointer(CGSWindowID), "wid"), Out(Pointer(CGSSurfaceID), "sid")]), Function(CGLError, "CGLUpdateContext", [(CGLContextObj, "ctx")]), # XXX: All the following prototypes are little more than guesses # TODO: A potentially simpler alternative would be to use the # DYLD_INTERPOSE mechanism and only intercept the calls that we # really care about Function(CGLError, "CGLOpenCLMuxLockDown", [], internal=True), Function(GLboolean, "CGLAreContextsShared", [(CGLContextObj, "ctx1"), (CGLContextObj, "ctx2")], internal=True), Function(CGLContextObj, "CGLGetNextContext", [(CGLContextObj, "ctx")], internal=True), Function(OpaquePointer(Void), "CGLFrontDispatch", [(CGLContextObj, "ctx")], internal=True), Function(OpaquePointer(Void), "CGLBackDispatch", [(CGLContextObj, "ctx")], internal=True), Function(Void, "CGLSelectDispatch", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch")], internal=True), Function(Void, "CGLSelectDispatchBounded", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch"), (GLint, "size")], internal=True), Function(Void, "CGLSelectDispatchFunction", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "functionPtr"), (GLint, "functionId")], internal=True), Function(Void, "CGLRestoreDispatch", [(CGLContextObj, "ctx")], internal=True), Function(Void, "CGLRestoreDispatchFunction", [(CGLContextObj, "ctx"), (GLint, "functionId")], internal=True), Function(CGLError, "CGLSetPBufferVolatileState", [(CGLPBufferObj, "pbuffer"), (OpaquePointer(Void), "state")], internal=True), ]) tmpNnpnZF/specs/gltypes.py0000664000175000017500000003270412543167424015150 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Describe GL types.''' import platform from stdapi import * GLboolean = Enum("GLboolean", [ "GL_TRUE", "GL_FALSE", ]) GLvoid = Alias("GLvoid", Void) GLbyte = Alias("GLbyte", SChar) GLshort = Alias("GLshort", Short) GLint = Alias("GLint", Int) GLint64 = Alias("GLint64", Int64) GLubyte = Alias("GLubyte", UChar) GLushort = Alias("GLushort", UShort) GLuint = Alias("GLuint", UInt) GLuint64 = Alias("GLuint64", UInt64) GLsizei = Alias("GLsizei", Int) GLintptr = Alias("GLintptr", Int) GLsizeiptr = Alias("GLsizeiptr", Int) GLfloat = Alias("GLfloat", Float) GLclampf = Alias("GLclampf", Float) GLdouble = Alias("GLdouble", Double) GLclampd = Alias("GLclampd", Double) GLchar = Alias("GLchar", Char) GLfixed = Alias("GLfixed", Int32) GLclampx = Alias("GLclampx", Int32) GLcharARB = Alias("GLcharARB", SChar) GLintptrARB = Alias("GLintptrARB", Int) GLsizeiptrARB = Alias("GLsizeiptrARB", Int) GLhandleARB = Handle("handleARB", Alias("GLhandleARB", UInt)) GLhalfARB = Alias("GLhalfARB", UShort) GLhalfNV = Alias("GLhalfNV", UShort) GLint64EXT = Alias("GLint64EXT", Int64) GLuint64EXT = Alias("GLuint64EXT", UInt64) GLDEBUGPROC = Opaque("GLDEBUGPROC") GLDEBUGPROCARB = Opaque("GLDEBUGPROCARB") GLDEBUGPROCAMD = Opaque("GLDEBUGPROCAMD") GLstring = String(GLchar) GLstringConst = String(Const(GLchar)) GLstringARB = String(GLcharARB) GLstringConstARB = String(Const(GLcharARB)) GLpointer = OpaquePointer(GLvoid) GLpointerConst = OpaquePointer(Const(GLvoid)) GLlist = Handle("list", GLuint) GLtexture = Handle("texture", GLuint) GLbuffer = Handle("buffer", GLuint) GLquery = Handle("query", GLuint) GLfenceNV = Handle("fenceNV", GLuint) GLprogram = Handle("program", GLuint) GLshader = Handle("shader", GLuint) # Share the same mapping table for uniform locations of both core and # GL_ARB_shader_objects programs. For a combination of reasons: # # - all OpenGL implementations appear to alias the names for both kind of # programs; # # - most applications will use only one kind of shader programs; # # - some applications actually mix glUniformXxx calls with # GL_ARB_shader_objects programs and glUniformXxxARB calls with core # programs, and therefore, rely on a joint implementation. # # We use GLhandleARB as program key, since it is wider (void *) on MacOSX. # GLlocation = Handle("location", GLint, key=('program', GLhandleARB)) GLlocationARB = Handle("location", GLint, key=('programObj', GLhandleARB)) # TODO: Symbolic representation of GL_INVALID_INDEX GLuniformBlock = Handle("uniformBlock", GLuint, key=('program', GLprogram)) contextKey = ('reinterpret_cast(glretrace::getCurrentContext())', UIntPtr) GLprogramARB = Handle("programARB", GLuint) GLframebuffer = Handle("framebuffer", GLuint) GLrenderbuffer = Handle("renderbuffer", GLuint) GLfragmentShaderATI = Handle("fragmentShaderATI", GLuint) GLarray = Handle("array", GLuint, key=contextKey) # per-context GLarrayAPPLE = Handle("arrayAPPLE", GLuint) # shared GLregion = Handle("region", GLuint) GLpipeline = Handle("pipeline", GLuint) GLsampler = Handle("sampler", GLuint) GLfeedback = Handle("feedback", GLuint) GLfence = Handle("fence", GLuint) GLtextureHandle = Handle("textureHandle", GLuint64) GLsubroutine = Handle("subroutine", GLuint, key=('program', GLhandleARB)) # GL mappings are pointers to linear memory regions. # # The map length is not always available in the function prototype, and must be # reconstructed from other state. GLmap = LinearPointer(GLvoid, "length") GLsync = Handle("sync", IntPointer("GLsync")) GLenum = Enum("GLenum", [ # Parameters are added later from glparams.py's parameter table ]) # Some functions take GLenum disguised as GLint, and need special treatment so # that symbolic names are traced correctly. GLenum_int = Alias("GLint", GLenum) GLenum_mode = FakeEnum(GLenum, [ "GL_POINTS", # 0x0000 "GL_LINES", # 0x0001 "GL_LINE_LOOP", # 0x0002 "GL_LINE_STRIP", # 0x0003 "GL_TRIANGLES", # 0x0004 "GL_TRIANGLE_STRIP", # 0x0005 "GL_TRIANGLE_FAN", # 0x0006 "GL_QUADS", # 0x0007 "GL_QUAD_STRIP", # 0x0008 "GL_POLYGON", # 0x0009 "GL_LINES_ADJACENCY", # 0x000A "GL_LINE_STRIP_ADJACENCY", # 0x000B "GL_TRIANGLES_ADJACENCY", # 0x000C "GL_TRIANGLE_STRIP_ADJACENCY", # 0x000D "GL_PATCHES", # 0x000E ]) GLenum_error = FakeEnum(GLenum, [ "GL_NO_ERROR", # 0x0 "GL_INVALID_ENUM", # 0x0500 "GL_INVALID_VALUE", # 0x0501 "GL_INVALID_OPERATION", # 0x0502 "GL_STACK_OVERFLOW", # 0x0503 "GL_STACK_UNDERFLOW", # 0x0504 "GL_OUT_OF_MEMORY", # 0x0505 "GL_INVALID_FRAMEBUFFER_OPERATION", # 0x0506 "GL_TABLE_TOO_LARGE", # 0x8031 ]) GLbitfield = Alias("GLbitfield", UInt) GLbitfield_attrib = Flags(GLbitfield, [ "GL_ALL_ATTRIB_BITS", # 0x000FFFFF "GL_CURRENT_BIT", # 0x00000001 "GL_POINT_BIT", # 0x00000002 "GL_LINE_BIT", # 0x00000004 "GL_POLYGON_BIT", # 0x00000008 "GL_POLYGON_STIPPLE_BIT", # 0x00000010 "GL_PIXEL_MODE_BIT", # 0x00000020 "GL_LIGHTING_BIT", # 0x00000040 "GL_FOG_BIT", # 0x00000080 "GL_DEPTH_BUFFER_BIT", # 0x00000100 "GL_ACCUM_BUFFER_BIT", # 0x00000200 "GL_STENCIL_BUFFER_BIT", # 0x00000400 "GL_VIEWPORT_BIT", # 0x00000800 "GL_TRANSFORM_BIT", # 0x00001000 "GL_ENABLE_BIT", # 0x00002000 "GL_COLOR_BUFFER_BIT", # 0x00004000 "GL_HINT_BIT", # 0x00008000 "GL_EVAL_BIT", # 0x00010000 "GL_LIST_BIT", # 0x00020000 "GL_TEXTURE_BIT", # 0x00040000 "GL_SCISSOR_BIT", # 0x00080000 "GL_MULTISAMPLE_BIT", # 0x20000000 ]) GLbitfield_client_attrib = Flags(GLbitfield, [ "GL_CLIENT_ALL_ATTRIB_BITS", # 0xFFFFFFFF "GL_CLIENT_PIXEL_STORE_BIT", # 0x00000001 "GL_CLIENT_VERTEX_ARRAY_BIT", # 0x00000002 ]) GLbitfield_shader = Flags(GLbitfield, [ "GL_ALL_SHADER_BITS", # 0xFFFFFFFF "GL_VERTEX_SHADER_BIT", # 0x00000001 "GL_FRAGMENT_SHADER_BIT", # 0x00000002 "GL_GEOMETRY_SHADER_BIT", # 0x00000004 "GL_TESS_CONTROL_SHADER_BIT", # 0x00000008 "GL_TESS_EVALUATION_SHADER_BIT", # 0x00000010 "GL_COMPUTE_SHADER_BIT", # 0x00000020 ]) GLbitfield_access = Flags(GLbitfield, [ "GL_MAP_READ_BIT", # 0x0001 "GL_MAP_WRITE_BIT", # 0x0002 "GL_MAP_INVALIDATE_RANGE_BIT", # 0x0004 "GL_MAP_INVALIDATE_BUFFER_BIT", # 0x0008 "GL_MAP_FLUSH_EXPLICIT_BIT", # 0x0010 "GL_MAP_UNSYNCHRONIZED_BIT", # 0x0020 "GL_MAP_PERSISTENT_BIT", # 0x0040 "GL_MAP_COHERENT_BIT", # 0x0080 ]) GLbitfield_storage = Flags(GLbitfield, [ "GL_MAP_READ_BIT", # 0x0001 (existing) "GL_MAP_WRITE_BIT", # 0x0002 (existing) "GL_MAP_PERSISTENT_BIT", # 0x0040 "GL_MAP_COHERENT_BIT", # 0x0080 "GL_DYNAMIC_STORAGE_BIT", # 0x0100 "GL_CLIENT_STORAGE_BIT", # 0x0200 ]) GLbitfield_sync_flush = Flags(GLbitfield, [ "GL_SYNC_FLUSH_COMMANDS_BIT", # 0x00000001 ]) GLbitfield_barrier = Flags(GLbitfield, [ "GL_ALL_BARRIER_BITS", # 0xFFFFFFFF "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT", # 0x00000001 "GL_ELEMENT_ARRAY_BARRIER_BIT", # 0x00000002 "GL_UNIFORM_BARRIER_BIT", # 0x00000004 "GL_TEXTURE_FETCH_BARRIER_BIT", # 0x00000008 "GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV", # 0x00000010 "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT", # 0x00000020 "GL_COMMAND_BARRIER_BIT", # 0x00000040 "GL_PIXEL_BUFFER_BARRIER_BIT", # 0x00000080 "GL_TEXTURE_UPDATE_BARRIER_BIT", # 0x00000100 "GL_BUFFER_UPDATE_BARRIER_BIT", # 0x00000200 "GL_FRAMEBUFFER_BARRIER_BIT", # 0x00000400 "GL_TRANSFORM_FEEDBACK_BARRIER_BIT", # 0x00000800 "GL_ATOMIC_COUNTER_BARRIER_BIT", # 0x00001000 "GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT", # 0x00004000 "GL_QUERY_BUFFER_BARRIER_BIT", # 0x00008000 ]) GLbitfield_metricQueryMask = Flags(GLbitfield, [ "GL_GLYPH_WIDTH_BIT_NV", # 0x01 "GL_GLYPH_HEIGHT_BIT_NV", # 0x02 "GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV", # 0x04 "GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV", # 0x08 "GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV", # 0x10 "GL_GLYPH_VERTICAL_BEARING_X_BIT_NV", # 0x20 "GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV", # 0x40 "GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV", # 0x80 "GL_GLYPH_HAS_KERNING_BIT_NV", # 0x100 "GL_FONT_X_MIN_BOUNDS_BIT_NV", # 0x00010000 "GL_FONT_Y_MIN_BOUNDS_BIT_NV", # 0x00020000 "GL_FONT_X_MAX_BOUNDS_BIT_NV", # 0x00040000 "GL_FONT_Y_MAX_BOUNDS_BIT_NV", # 0x00080000 "GL_FONT_UNITS_PER_EM_BIT_NV", # 0x00100000 "GL_FONT_ASCENDER_BIT_NV", # 0x00200000 "GL_FONT_DESCENDER_BIT_NV", # 0x00400000 "GL_FONT_HEIGHT_BIT_NV", # 0x00800000 "GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV", # 0x01000000 "GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV", # 0x02000000 "GL_FONT_UNDERLINE_POSITION_BIT_NV", # 0x04000000 "GL_FONT_UNDERLINE_THICKNESS_BIT_NV", # 0x08000000 "GL_FONT_HAS_KERNING_BIT_NV", # 0x10000000 ]) GLbitfield_fontStyle = Flags(GLbitfield, [ "GL_BOLD_BIT_NV", # 0x01 "GL_ITALIC_BIT_NV", # 0x02 ]) # GL_ARB_vertex_array_bgra size_bgra = FakeEnum(GLint, [ "GL_BGRA", ]) def GLindexBuffer(countExpr, typeExpr): # Indices arguments are polymorphic: # - offsets when element array buffer is bound # - or a blob otherwise. sizeExpr = '%s*_gl_type_size(%s)' % (countExpr, typeExpr) return Polymorphic('_element_array_buffer_binding()', [ ('0', Blob(Const(GLvoid), sizeExpr)), ], IntPointer("const GLvoid *"), contextLess=False, ) # Polymorphic object name def GLname(targetExpr): return Polymorphic(targetExpr, [ ('GL_BUFFER', GLbuffer), ('GL_SHADER', GLshader), ('GL_PROGRAM', GLprogram), ('GL_VERTEX_ARRAY', GLarray), ('GL_QUERY', GLquery), ('GL_PROGRAM_PIPELINE', GLpipeline), ('GL_TRANSFORM_FEEDBACK', GLuint), ('GL_SAMPLER', GLsampler), ('GL_TEXTURE', GLtexture), ('GL_TEXTURE_1D', GLtexture), ('GL_TEXTURE_1D_ARRAY', GLtexture), ('GL_TEXTURE_2D', GLtexture), ('GL_TEXTURE_2D_MULTISAMPLE', GLtexture), ('GL_TEXTURE_2D_ARRAY', GLtexture), ('GL_TEXTURE_RECTANGLE', GLtexture), ('GL_TEXTURE_CUBE_MAP', GLtexture), ('GL_TEXTURE_CUBE_MAP_POSITIVE_X', GLtexture), ('GL_TEXTURE_CUBE_MAP_NEGATIVE_X', GLtexture), ('GL_TEXTURE_CUBE_MAP_POSITIVE_Y', GLtexture), ('GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', GLtexture), ('GL_TEXTURE_CUBE_MAP_POSITIVE_Z', GLtexture), ('GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', GLtexture), ('GL_TEXTURE_CUBE_MAP_ARRAY', GLtexture), ('GL_TEXTURE_3D', GLtexture), ('GL_RENDERBUFFER', GLrenderbuffer), ('GL_FRAMEBUFFER', GLframebuffer), ('GL_DISPLAY_LIST', GLlist), ('GL_FENCE_APPLE', GLfence), ('GL_DRAW_PIXELS_APPLE', GLuint), # GL_APPLE_fence ], GLuint) # GL_AMD_performance_monitor GLperfMonitorCounterInfoAMD = Polymorphic('pname', [ ('GL_COUNTER_TYPE_AMD', Pointer(GLenum)), ('GL_PERCENTAGE_AMD', Pointer(Float)), ('GL_COUNTER_RANGE_AMD', Array(Float, 2)), ], OpaquePointer(GLvoid), ) # GL_AMD_sparse_texture GLbitfield_texStorageSparse = Flags(GLbitfield, [ 'GL_TEXTURE_STORAGE_SPARSE_BIT_AMD', # 0x00000001 ]) # GL_NV_vdpau_interop GLvdpauSurfaceNV = Alias('GLvdpauSurfaceNV', GLintptr) tmpNnpnZF/specs/stdapi.py0000664000175000017500000007050312543167424014744 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """C basic types""" import debug class Type: """Base class for all types.""" __tags = set() def __init__(self, expr, tag = None): self.expr = expr # Generate a default tag, used when naming functions that will operate # on this type, so it should preferrably be something representative of # the type. if tag is None: if expr is not None: tag = ''.join([c for c in expr if c.isalnum() or c in '_']) else: tag = 'anonynoums' else: for c in tag: assert c.isalnum() or c in '_' # Ensure it is unique. if tag in Type.__tags: suffix = 1 while tag + str(suffix) in Type.__tags: suffix += 1 tag += str(suffix) assert tag not in Type.__tags Type.__tags.add(tag) self.tag = tag def __str__(self): """Return the C/C++ type expression for this type.""" return self.expr def visit(self, visitor, *args, **kwargs): raise NotImplementedError def mutable(self): '''Return a mutable version of this type. Convenience wrapper around MutableRebuilder.''' visitor = MutableRebuilder() return visitor.visit(self) def depends(self, other): '''Whether this type depends on another.''' collector = Collector() collector.visit(self) return other in collector.types class _Void(Type): """Singleton void type.""" def __init__(self): Type.__init__(self, "void") def visit(self, visitor, *args, **kwargs): return visitor.visitVoid(self, *args, **kwargs) Void = _Void() class Literal(Type): """Class to describe literal types. Types which are not defined in terms of other types, such as integers and floats.""" def __init__(self, expr, kind): Type.__init__(self, expr) self.kind = kind def visit(self, visitor, *args, **kwargs): return visitor.visitLiteral(self, *args, **kwargs) Bool = Literal("bool", "Bool") SChar = Literal("signed char", "SInt") UChar = Literal("unsigned char", "UInt") Short = Literal("short", "SInt") Int = Literal("int", "SInt") Long = Literal("long", "SInt") LongLong = Literal("long long", "SInt") UShort = Literal("unsigned short", "UInt") UInt = Literal("unsigned int", "UInt") ULong = Literal("unsigned long", "UInt") ULongLong = Literal("unsigned long long", "UInt") Float = Literal("float", "Float") Double = Literal("double", "Double") SizeT = Literal("size_t", "UInt") Char = Literal("char", "SInt") WChar = Literal("wchar_t", "SInt") Int8 = Literal("int8_t", "SInt") UInt8 = Literal("uint8_t", "UInt") Int16 = Literal("int16_t", "SInt") UInt16 = Literal("uint16_t", "UInt") Int32 = Literal("int32_t", "SInt") UInt32 = Literal("uint32_t", "UInt") Int64 = Literal("int64_t", "SInt") UInt64 = Literal("uint64_t", "UInt") IntPtr = Literal("intptr_t", "SInt") UIntPtr = Literal("uintptr_t", "UInt") class Const(Type): def __init__(self, type): # While "const foo" and "foo const" are synonymous, "const foo *" and # "foo * const" are not quite the same, and some compilers do enforce # strict const correctness. if type.expr.startswith("const ") or '*' in type.expr: expr = type.expr + " const" else: # The most legible expr = "const " + type.expr Type.__init__(self, expr, 'C' + type.tag) self.type = type def visit(self, visitor, *args, **kwargs): return visitor.visitConst(self, *args, **kwargs) class Pointer(Type): def __init__(self, type): Type.__init__(self, type.expr + " *", 'P' + type.tag) self.type = type def visit(self, visitor, *args, **kwargs): return visitor.visitPointer(self, *args, **kwargs) class IntPointer(Type): '''Integer encoded as a pointer.''' def visit(self, visitor, *args, **kwargs): return visitor.visitIntPointer(self, *args, **kwargs) class ObjPointer(Type): '''Pointer to an object.''' def __init__(self, type): Type.__init__(self, type.expr + " *", 'P' + type.tag) self.type = type def visit(self, visitor, *args, **kwargs): return visitor.visitObjPointer(self, *args, **kwargs) class LinearPointer(Type): '''Pointer to a linear range of memory.''' def __init__(self, type, size = None): Type.__init__(self, type.expr + " *", 'P' + type.tag) self.type = type self.size = size def visit(self, visitor, *args, **kwargs): return visitor.visitLinearPointer(self, *args, **kwargs) class Reference(Type): '''C++ references.''' def __init__(self, type): Type.__init__(self, type.expr + " &", 'R' + type.tag) self.type = type def visit(self, visitor, *args, **kwargs): return visitor.visitReference(self, *args, **kwargs) class Handle(Type): def __init__(self, name, type, range=None, key=None): Type.__init__(self, type.expr, 'P' + type.tag) self.name = name self.type = type self.range = range self.key = key def visit(self, visitor, *args, **kwargs): return visitor.visitHandle(self, *args, **kwargs) def ConstPointer(type): return Pointer(Const(type)) class Enum(Type): __id = 0 def __init__(self, name, values): Type.__init__(self, name) self.id = Enum.__id Enum.__id += 1 self.values = list(values) def visit(self, visitor, *args, **kwargs): return visitor.visitEnum(self, *args, **kwargs) def FakeEnum(type, values): return Enum(type.expr, values) class Bitmask(Type): __id = 0 def __init__(self, type, values): Type.__init__(self, type.expr) self.id = Bitmask.__id Bitmask.__id += 1 self.type = type self.values = values def visit(self, visitor, *args, **kwargs): return visitor.visitBitmask(self, *args, **kwargs) Flags = Bitmask class Array(Type): def __init__(self, type_, length): Type.__init__(self, type_.expr + " *") self.type = type_ self.length = length if not isinstance(length, int): assert isinstance(length, basestring) # Check if length is actually a valid constant expression try: eval(length, {}, {}) except: pass else: raise ValueError("length %r should be an integer" % length) def visit(self, visitor, *args, **kwargs): return visitor.visitArray(self, *args, **kwargs) class AttribArray(Type): def __init__(self, baseType, valueTypes, terminator = '0'): self.baseType = baseType Type.__init__(self, (Pointer(self.baseType)).expr) self.valueTypes = valueTypes self.terminator = terminator self.hasKeysWithoutValues = False for key, value in valueTypes: if value is None: self.hasKeysWithoutValues = True def visit(self, visitor, *args, **kwargs): return visitor.visitAttribArray(self, *args, **kwargs) class Blob(Type): def __init__(self, type, size): Type.__init__(self, type.expr + ' *') self.type = type self.size = size def visit(self, visitor, *args, **kwargs): return visitor.visitBlob(self, *args, **kwargs) class Struct(Type): __id = 0 def __init__(self, name, members): Type.__init__(self, name) self.id = Struct.__id Struct.__id += 1 self.name = name self.members = members def visit(self, visitor, *args, **kwargs): return visitor.visitStruct(self, *args, **kwargs) def Union(kindExpr, kindTypes, contextLess=True): switchTypes = [] for kindCase, kindType, kindMemberName in kindTypes: switchType = Struct(None, [(kindType, kindMemberName)]) switchTypes.append((kindCase, switchType)) return Polymorphic(kindExpr, switchTypes, contextLess=contextLess) class Alias(Type): def __init__(self, expr, type): Type.__init__(self, expr) self.type = type def visit(self, visitor, *args, **kwargs): return visitor.visitAlias(self, *args, **kwargs) class Arg: def __init__(self, type, name, input=True, output=False): self.type = type self.name = name self.input = input self.output = output self.index = None def __str__(self): return '%s %s' % (self.type, self.name) def In(type, name): return Arg(type, name, input=True, output=False) def Out(type, name): return Arg(type, name, input=False, output=True) def InOut(type, name): return Arg(type, name, input=True, output=True) class Function: def __init__(self, type, name, args, call = '', fail = None, sideeffects=True, internal=False): self.type = type self.name = name self.args = [] index = 0 for arg in args: if not isinstance(arg, Arg): if isinstance(arg, tuple): arg_type, arg_name = arg else: arg_type = arg arg_name = "arg%u" % index arg = Arg(arg_type, arg_name) arg.index = index index += 1 self.args.append(arg) self.call = call self.fail = fail self.sideeffects = sideeffects self.internal = internal def prototype(self, name=None): if name is not None: name = name.strip() else: name = self.name s = name if self.call: s = self.call + ' ' + s if name.startswith('*'): s = '(' + s + ')' s = self.type.expr + ' ' + s s += "(" if self.args: s += ", ".join(["%s %s" % (arg.type, arg.name) for arg in self.args]) else: s += "void" s += ")" return s def argNames(self): return [arg.name for arg in self.args] def getArgByName(self, name): for arg in self.args: if arg.name == name: return arg return None def getArgByType(self, type): for arg in self.args: if arg.type is type: return arg return None def StdFunction(*args, **kwargs): kwargs.setdefault('call', '__stdcall') return Function(*args, **kwargs) def FunctionPointer(type, name, args, **kwargs): # XXX: We should probably treat function pointers (callbacks or not) in a generic fashion return Opaque(name) class Interface(Type): def __init__(self, name, base=None): Type.__init__(self, name) self.name = name self.base = base self.methods = [] def visit(self, visitor, *args, **kwargs): return visitor.visitInterface(self, *args, **kwargs) def getMethodByName(self, name): for method in self.iterMethods(): if method.name == name: return method return None def iterMethods(self): if self.base is not None: for method in self.base.iterMethods(): yield method for method in self.methods: yield method raise StopIteration def iterBases(self): iface = self while iface is not None: yield iface iface = iface.base raise StopIteration def hasBase(self, *bases): for iface in self.iterBases(): if iface in bases: return True return False def iterBaseMethods(self): if self.base is not None: for iface, method in self.base.iterBaseMethods(): yield iface, method for method in self.methods: yield self, method raise StopIteration class Method(Function): def __init__(self, type, name, args, call = '', const=False, sideeffects=True): assert call == '__stdcall' Function.__init__(self, type, name, args, call = call, sideeffects=sideeffects) for index in range(len(self.args)): self.args[index].index = index + 1 self.const = const def prototype(self, name=None): s = Function.prototype(self, name) if self.const: s += ' const' return s def StdMethod(*args, **kwargs): kwargs.setdefault('call', '__stdcall') return Method(*args, **kwargs) class String(Type): '''Human-legible character string.''' def __init__(self, type = Char, length = None, wide = False): assert isinstance(type, Type) Type.__init__(self, type.expr + ' *') self.type = type self.length = length self.wide = wide def visit(self, visitor, *args, **kwargs): return visitor.visitString(self, *args, **kwargs) class Opaque(Type): '''Opaque pointer.''' def __init__(self, expr): Type.__init__(self, expr) def visit(self, visitor, *args, **kwargs): return visitor.visitOpaque(self, *args, **kwargs) def OpaquePointer(type, *args): return Opaque(type.expr + ' *') def OpaqueArray(type, size): return Opaque(type.expr + ' *') def OpaqueBlob(type, size): return Opaque(type.expr + ' *') class Polymorphic(Type): def __init__(self, switchExpr, switchTypes, defaultType=None, contextLess=True): if defaultType is None: Type.__init__(self, None) contextLess = False else: Type.__init__(self, defaultType.expr) self.switchExpr = switchExpr self.switchTypes = switchTypes self.defaultType = defaultType self.contextLess = contextLess def visit(self, visitor, *args, **kwargs): return visitor.visitPolymorphic(self, *args, **kwargs) def iterSwitch(self): cases = [] types = [] if self.defaultType is not None: cases.append(['default']) types.append(self.defaultType) for expr, type in self.switchTypes: case = 'case %s' % expr try: i = types.index(type) except ValueError: cases.append([case]) types.append(type) else: cases[i].append(case) return zip(cases, types) def EnumPolymorphic(enumName, switchExpr, switchTypes, defaultType, contextLess=True): enumValues = [expr for expr, type in switchTypes] enum = Enum(enumName, enumValues) polymorphic = Polymorphic(switchExpr, switchTypes, defaultType, contextLess) return enum, polymorphic class Visitor: '''Abstract visitor for the type hierarchy.''' def visit(self, type, *args, **kwargs): return type.visit(self, *args, **kwargs) def visitVoid(self, void, *args, **kwargs): raise NotImplementedError def visitLiteral(self, literal, *args, **kwargs): raise NotImplementedError def visitString(self, string, *args, **kwargs): raise NotImplementedError def visitConst(self, const, *args, **kwargs): raise NotImplementedError def visitStruct(self, struct, *args, **kwargs): raise NotImplementedError def visitArray(self, array, *args, **kwargs): raise NotImplementedError def visitAttribArray(self, array, *args, **kwargs): raise NotImplementedError def visitBlob(self, blob, *args, **kwargs): raise NotImplementedError def visitEnum(self, enum, *args, **kwargs): raise NotImplementedError def visitBitmask(self, bitmask, *args, **kwargs): raise NotImplementedError def visitPointer(self, pointer, *args, **kwargs): raise NotImplementedError def visitIntPointer(self, pointer, *args, **kwargs): raise NotImplementedError def visitObjPointer(self, pointer, *args, **kwargs): raise NotImplementedError def visitLinearPointer(self, pointer, *args, **kwargs): raise NotImplementedError def visitReference(self, reference, *args, **kwargs): raise NotImplementedError def visitHandle(self, handle, *args, **kwargs): raise NotImplementedError def visitAlias(self, alias, *args, **kwargs): raise NotImplementedError def visitOpaque(self, opaque, *args, **kwargs): raise NotImplementedError def visitInterface(self, interface, *args, **kwargs): raise NotImplementedError def visitPolymorphic(self, polymorphic, *args, **kwargs): raise NotImplementedError #return self.visit(polymorphic.defaultType, *args, **kwargs) class OnceVisitor(Visitor): '''Visitor that guarantees that each type is visited only once.''' def __init__(self): self.__visited = set() def visit(self, type, *args, **kwargs): if type not in self.__visited: self.__visited.add(type) return type.visit(self, *args, **kwargs) return None class Rebuilder(Visitor): '''Visitor which rebuild types as it visits them. By itself it is a no-op -- it is intended to be overwritten. ''' def visitVoid(self, void): return void def visitLiteral(self, literal): return literal def visitString(self, string): string_type = self.visit(string.type) if string_type is string.type: return string else: return String(string_type, string.length, string.wide) def visitConst(self, const): const_type = self.visit(const.type) if const_type is const.type: return const else: return Const(const_type) def visitStruct(self, struct): members = [(self.visit(type), name) for type, name in struct.members] return Struct(struct.name, members) def visitArray(self, array): type = self.visit(array.type) return Array(type, array.length) def visitBlob(self, blob): type = self.visit(blob.type) return Blob(type, blob.size) def visitEnum(self, enum): return enum def visitBitmask(self, bitmask): type = self.visit(bitmask.type) return Bitmask(type, bitmask.values) def visitPointer(self, pointer): pointer_type = self.visit(pointer.type) if pointer_type is pointer.type: return pointer else: return Pointer(pointer_type) def visitIntPointer(self, pointer): return pointer def visitObjPointer(self, pointer): pointer_type = self.visit(pointer.type) if pointer_type is pointer.type: return pointer else: return ObjPointer(pointer_type) def visitLinearPointer(self, pointer): pointer_type = self.visit(pointer.type) if pointer_type is pointer.type: return pointer else: return LinearPointer(pointer_type) def visitReference(self, reference): reference_type = self.visit(reference.type) if reference_type is reference.type: return reference else: return Reference(reference_type) def visitHandle(self, handle): handle_type = self.visit(handle.type) if handle_type is handle.type: return handle else: return Handle(handle.name, handle_type, range=handle.range, key=handle.key) def visitAlias(self, alias): alias_type = self.visit(alias.type) if alias_type is alias.type: return alias else: return Alias(alias.expr, alias_type) def visitOpaque(self, opaque): return opaque def visitInterface(self, interface, *args, **kwargs): return interface def visitPolymorphic(self, polymorphic): switchExpr = polymorphic.switchExpr switchTypes = [(expr, self.visit(type)) for expr, type in polymorphic.switchTypes] if polymorphic.defaultType is None: defaultType = None else: defaultType = self.visit(polymorphic.defaultType) return Polymorphic(switchExpr, switchTypes, defaultType, polymorphic.contextLess) class MutableRebuilder(Rebuilder): '''Type visitor which derives a mutable type.''' def visitString(self, string): return string def visitConst(self, const): # Strip out const qualifier return const.type def visitAlias(self, alias): # Tear the alias on type changes type = self.visit(alias.type) if type is alias.type: return alias return type def visitReference(self, reference): # Strip out references return reference.type class Traverser(Visitor): '''Visitor which all types.''' def visitVoid(self, void, *args, **kwargs): pass def visitLiteral(self, literal, *args, **kwargs): pass def visitString(self, string, *args, **kwargs): pass def visitConst(self, const, *args, **kwargs): self.visit(const.type, *args, **kwargs) def visitStruct(self, struct, *args, **kwargs): for type, name in struct.members: self.visit(type, *args, **kwargs) def visitArray(self, array, *args, **kwargs): self.visit(array.type, *args, **kwargs) def visitAttribArray(self, attribs, *args, **kwargs): for key, valueType in attribs.valueTypes: if valueType is not None: self.visit(valueType, *args, **kwargs) def visitBlob(self, array, *args, **kwargs): pass def visitEnum(self, enum, *args, **kwargs): pass def visitBitmask(self, bitmask, *args, **kwargs): self.visit(bitmask.type, *args, **kwargs) def visitPointer(self, pointer, *args, **kwargs): self.visit(pointer.type, *args, **kwargs) def visitIntPointer(self, pointer, *args, **kwargs): pass def visitObjPointer(self, pointer, *args, **kwargs): self.visit(pointer.type, *args, **kwargs) def visitLinearPointer(self, pointer, *args, **kwargs): self.visit(pointer.type, *args, **kwargs) def visitReference(self, reference, *args, **kwargs): self.visit(reference.type, *args, **kwargs) def visitHandle(self, handle, *args, **kwargs): self.visit(handle.type, *args, **kwargs) def visitAlias(self, alias, *args, **kwargs): self.visit(alias.type, *args, **kwargs) def visitOpaque(self, opaque, *args, **kwargs): pass def visitInterface(self, interface, *args, **kwargs): if interface.base is not None: self.visit(interface.base, *args, **kwargs) for method in interface.iterMethods(): for arg in method.args: self.visit(arg.type, *args, **kwargs) self.visit(method.type, *args, **kwargs) def visitPolymorphic(self, polymorphic, *args, **kwargs): for expr, type in polymorphic.switchTypes: self.visit(type, *args, **kwargs) if polymorphic.defaultType is not None: self.visit(polymorphic.defaultType, *args, **kwargs) class Collector(Traverser): '''Visitor which collects all unique types as it traverses them.''' def __init__(self): self.__visited = set() self.types = [] def visit(self, type): if type in self.__visited: return self.__visited.add(type) Visitor.visit(self, type) self.types.append(type) class ExpanderMixin: '''Mixin class that provides a bunch of methods to expand C expressions from the specifications.''' __structs = None __indices = None def expand(self, expr): # Expand a C expression, replacing certain variables if not isinstance(expr, basestring): return expr variables = {} if self.__structs is not None: variables['self'] = '(%s)' % self.__structs[0] if self.__indices is not None: variables['i'] = self.__indices[0] expandedExpr = expr.format(**variables) if expandedExpr != expr and 0: sys.stderr.write(" %r -> %r\n" % (expr, expandedExpr)) return expandedExpr def visitMember(self, member, structInstance, *args, **kwargs): memberType, memberName = member if memberName is None: # Anonymous structure/union member memberInstance = structInstance else: memberInstance = '(%s).%s' % (structInstance, memberName) self.__structs = (structInstance, self.__structs) try: return self.visit(memberType, memberInstance, *args, **kwargs) finally: _, self.__structs = self.__structs def visitElement(self, elementIndex, elementType, *args, **kwargs): self.__indices = (elementIndex, self.__indices) try: return self.visit(elementType, *args, **kwargs) finally: _, self.__indices = self.__indices class Module: '''A collection of functions.''' def __init__(self, name = None): self.name = name self.headers = [] self.functions = [] self.interfaces = [] def addFunctions(self, functions): self.functions.extend(functions) def addInterfaces(self, interfaces): self.interfaces.extend(interfaces) def mergeModule(self, module): self.headers.extend(module.headers) self.functions.extend(module.functions) self.interfaces.extend(module.interfaces) def getFunctionByName(self, name): for function in self.functions: if function.name == name: return function return None class API: '''API abstraction. Essentially, a collection of types, functions, and interfaces. ''' def __init__(self, modules = None): self.modules = [] if modules is not None: self.modules.extend(modules) def getAllTypes(self): collector = Collector() for module in self.modules: for function in module.functions: for arg in function.args: collector.visit(arg.type) collector.visit(function.type) for interface in module.interfaces: collector.visit(interface) for method in interface.iterMethods(): for arg in method.args: collector.visit(arg.type) collector.visit(method.type) return collector.types def getAllFunctions(self): functions = [] for module in self.modules: functions.extend(module.functions) return functions def getAllInterfaces(self): types = self.getAllTypes() interfaces = [type for type in types if isinstance(type, Interface)] for module in self.modules: for interface in module.interfaces: if interface not in interfaces: interfaces.append(interface) return interfaces def addModule(self, module): self.modules.append(module) def getFunctionByName(self, name): for module in self.modules: for function in module.functions: if function.name == name: return function return None # C string (i.e., zero terminated) CString = String(Char) WString = String(WChar, wide=True) ConstCString = String(Const(Char)) ConstWString = String(Const(WChar), wide=True) tmpNnpnZF/specs/d3d10.py0000664000175000017500000014047612543167424014302 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dxgi import * from d3dcommon import * from d3d10sdklayers import * HRESULT = MAKE_HRESULT([ "D3D10_ERROR_FILE_NOT_FOUND", "D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS", "D3DERR_INVALIDCALL", "D3DERR_WASSTILLDRAWING", ]) D3D10_BLEND = Enum("D3D10_BLEND", [ "D3D10_BLEND_ZERO", "D3D10_BLEND_ONE", "D3D10_BLEND_SRC_COLOR", "D3D10_BLEND_INV_SRC_COLOR", "D3D10_BLEND_SRC_ALPHA", "D3D10_BLEND_INV_SRC_ALPHA", "D3D10_BLEND_DEST_ALPHA", "D3D10_BLEND_INV_DEST_ALPHA", "D3D10_BLEND_DEST_COLOR", "D3D10_BLEND_INV_DEST_COLOR", "D3D10_BLEND_SRC_ALPHA_SAT", "D3D10_BLEND_BLEND_FACTOR", "D3D10_BLEND_INV_BLEND_FACTOR", "D3D10_BLEND_SRC1_COLOR", "D3D10_BLEND_INV_SRC1_COLOR", "D3D10_BLEND_SRC1_ALPHA", "D3D10_BLEND_INV_SRC1_ALPHA", ]) D3D10_BLEND_OP = Enum("D3D10_BLEND_OP", [ "D3D10_BLEND_OP_ADD", "D3D10_BLEND_OP_SUBTRACT", "D3D10_BLEND_OP_REV_SUBTRACT", "D3D10_BLEND_OP_MIN", "D3D10_BLEND_OP_MAX", ]) D3D10_BLEND_DESC = Struct("D3D10_BLEND_DESC", [ (BOOL, "AlphaToCoverageEnable"), (Array(BOOL, 8), "BlendEnable"), (D3D10_BLEND, "SrcBlend"), (D3D10_BLEND, "DestBlend"), (D3D10_BLEND_OP, "BlendOp"), (D3D10_BLEND, "SrcBlendAlpha"), (D3D10_BLEND, "DestBlendAlpha"), (D3D10_BLEND_OP, "BlendOpAlpha"), (Array(UINT8, 8), "RenderTargetWriteMask"), ]) D3D10_DEPTH_WRITE_MASK = Enum("D3D10_DEPTH_WRITE_MASK", [ "D3D10_DEPTH_WRITE_MASK_ZERO", "D3D10_DEPTH_WRITE_MASK_ALL", ]) D3D10_COMPARISON_FUNC = Enum("D3D10_COMPARISON_FUNC", [ "D3D10_COMPARISON_NEVER", "D3D10_COMPARISON_LESS", "D3D10_COMPARISON_EQUAL", "D3D10_COMPARISON_LESS_EQUAL", "D3D10_COMPARISON_GREATER", "D3D10_COMPARISON_NOT_EQUAL", "D3D10_COMPARISON_GREATER_EQUAL", "D3D10_COMPARISON_ALWAYS", ]) D3D10_STENCIL_OP = Enum("D3D10_STENCIL_OP", [ "D3D10_STENCIL_OP_KEEP", "D3D10_STENCIL_OP_ZERO", "D3D10_STENCIL_OP_REPLACE", "D3D10_STENCIL_OP_INCR_SAT", "D3D10_STENCIL_OP_DECR_SAT", "D3D10_STENCIL_OP_INVERT", "D3D10_STENCIL_OP_INCR", "D3D10_STENCIL_OP_DECR", ]) D3D10_DEPTH_STENCILOP_DESC = Struct("D3D10_DEPTH_STENCILOP_DESC", [ (D3D10_STENCIL_OP, "StencilFailOp"), (D3D10_STENCIL_OP, "StencilDepthFailOp"), (D3D10_STENCIL_OP, "StencilPassOp"), (D3D10_COMPARISON_FUNC, "StencilFunc"), ]) D3D10_DEPTH_STENCIL_DESC = Struct("D3D10_DEPTH_STENCIL_DESC", [ (BOOL, "DepthEnable"), (D3D10_DEPTH_WRITE_MASK, "DepthWriteMask"), (D3D10_COMPARISON_FUNC, "DepthFunc"), (BOOL, "StencilEnable"), (UINT8, "StencilReadMask"), (UINT8, "StencilWriteMask"), (D3D10_DEPTH_STENCILOP_DESC, "FrontFace"), (D3D10_DEPTH_STENCILOP_DESC, "BackFace"), ]) D3D10_FILL_MODE = Enum("D3D10_FILL_MODE", [ "D3D10_FILL_WIREFRAME", "D3D10_FILL_SOLID", ]) D3D10_CULL_MODE = Enum("D3D10_CULL_MODE", [ "D3D10_CULL_NONE", "D3D10_CULL_FRONT", "D3D10_CULL_BACK", ]) D3D10_RASTERIZER_DESC = Struct("D3D10_RASTERIZER_DESC", [ (D3D10_FILL_MODE, "FillMode"), (D3D10_CULL_MODE, "CullMode"), (BOOL, "FrontCounterClockwise"), (INT, "DepthBias"), (FLOAT, "DepthBiasClamp"), (FLOAT, "SlopeScaledDepthBias"), (BOOL, "DepthClipEnable"), (BOOL, "ScissorEnable"), (BOOL, "MultisampleEnable"), (BOOL, "AntialiasedLineEnable"), ]) D3D10_FILTER = Enum("D3D10_FILTER", [ "D3D10_FILTER_MIN_MAG_MIP_POINT", "D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR", "D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT", "D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR", "D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT", "D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR", "D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT", "D3D10_FILTER_MIN_MAG_MIP_LINEAR", "D3D10_FILTER_ANISOTROPIC", "D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT", "D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR", "D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT", "D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR", "D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT", "D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR", "D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT", "D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR", "D3D10_FILTER_COMPARISON_ANISOTROPIC", "D3D10_FILTER_TEXT_1BIT", ]) D3D10_TEXTURE_ADDRESS_MODE = Enum("D3D10_TEXTURE_ADDRESS_MODE", [ "D3D10_TEXTURE_ADDRESS_WRAP", "D3D10_TEXTURE_ADDRESS_MIRROR", "D3D10_TEXTURE_ADDRESS_CLAMP", "D3D10_TEXTURE_ADDRESS_BORDER", "D3D10_TEXTURE_ADDRESS_MIRROR_ONCE", ]) D3D10_SAMPLER_DESC = Struct("D3D10_SAMPLER_DESC", [ (D3D10_FILTER, "Filter"), (D3D10_TEXTURE_ADDRESS_MODE, "AddressU"), (D3D10_TEXTURE_ADDRESS_MODE, "AddressV"), (D3D10_TEXTURE_ADDRESS_MODE, "AddressW"), (FLOAT, "MipLODBias"), (UINT, "MaxAnisotropy"), (D3D10_COMPARISON_FUNC, "ComparisonFunc"), (Array(FLOAT, 4), "BorderColor"), (FLOAT, "MinLOD"), (FLOAT, "MaxLOD"), ]) D3D10_FORMAT_SUPPORT = Flags(UINT, [ "D3D10_FORMAT_SUPPORT_BUFFER", "D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER", "D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER", "D3D10_FORMAT_SUPPORT_SO_BUFFER", "D3D10_FORMAT_SUPPORT_TEXTURE1D", "D3D10_FORMAT_SUPPORT_TEXTURE2D", "D3D10_FORMAT_SUPPORT_TEXTURE3D", "D3D10_FORMAT_SUPPORT_TEXTURECUBE", "D3D10_FORMAT_SUPPORT_SHADER_LOAD", "D3D10_FORMAT_SUPPORT_SHADER_SAMPLE", "D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON", "D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT", "D3D10_FORMAT_SUPPORT_MIP", "D3D10_FORMAT_SUPPORT_MIP_AUTOGEN", "D3D10_FORMAT_SUPPORT_RENDER_TARGET", "D3D10_FORMAT_SUPPORT_BLENDABLE", "D3D10_FORMAT_SUPPORT_DEPTH_STENCIL", "D3D10_FORMAT_SUPPORT_CPU_LOCKABLE", "D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE", "D3D10_FORMAT_SUPPORT_DISPLAY", "D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT", "D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET", "D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD", "D3D10_FORMAT_SUPPORT_SHADER_GATHER", "D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST", ]) D3D10_COUNTER = Enum("D3D10_COUNTER", [ "D3D10_COUNTER_GPU_IDLE", "D3D10_COUNTER_VERTEX_PROCESSING", "D3D10_COUNTER_GEOMETRY_PROCESSING", "D3D10_COUNTER_PIXEL_PROCESSING", "D3D10_COUNTER_OTHER_GPU_PROCESSING", "D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION", "D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION", "D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION", "D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION", "D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION", "D3D10_COUNTER_VS_MEMORY_LIMITED", "D3D10_COUNTER_VS_COMPUTATION_LIMITED", "D3D10_COUNTER_GS_MEMORY_LIMITED", "D3D10_COUNTER_GS_COMPUTATION_LIMITED", "D3D10_COUNTER_PS_MEMORY_LIMITED", "D3D10_COUNTER_PS_COMPUTATION_LIMITED", "D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE", "D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE", "D3D10_COUNTER_DEVICE_DEPENDENT_0", ]) D3D10_COUNTER_DESC = Struct("D3D10_COUNTER_DESC", [ (D3D10_COUNTER, "Counter"), (UINT, "MiscFlags"), ]) D3D10_COUNTER_TYPE = Enum("D3D10_COUNTER_TYPE", [ "D3D10_COUNTER_TYPE_FLOAT32", "D3D10_COUNTER_TYPE_UINT16", "D3D10_COUNTER_TYPE_UINT32", "D3D10_COUNTER_TYPE_UINT64", ]) D3D10_COUNTER_INFO = Struct("D3D10_COUNTER_INFO", [ (D3D10_COUNTER, "LastDeviceDependentCounter"), (UINT, "NumSimultaneousCounters"), (UINT8, "NumDetectableParallelUnits"), ]) D3D10_RESOURCE_DIMENSION = Enum("D3D10_RESOURCE_DIMENSION", [ "D3D10_RESOURCE_DIMENSION_UNKNOWN", "D3D10_RESOURCE_DIMENSION_BUFFER", "D3D10_RESOURCE_DIMENSION_TEXTURE1D", "D3D10_RESOURCE_DIMENSION_TEXTURE2D", "D3D10_RESOURCE_DIMENSION_TEXTURE3D", ]) D3D10_USAGE = Enum("D3D10_USAGE", [ "D3D10_USAGE_DEFAULT", "D3D10_USAGE_IMMUTABLE", "D3D10_USAGE_DYNAMIC", "D3D10_USAGE_STAGING", ]) D3D10_BIND_FLAG = Flags(UINT, [ "D3D10_BIND_VERTEX_BUFFER", "D3D10_BIND_INDEX_BUFFER", "D3D10_BIND_CONSTANT_BUFFER", "D3D10_BIND_SHADER_RESOURCE", "D3D10_BIND_STREAM_OUTPUT", "D3D10_BIND_RENDER_TARGET", "D3D10_BIND_DEPTH_STENCIL", ]) D3D10_CPU_ACCESS_FLAG = Flags(UINT, [ "D3D10_CPU_ACCESS_WRITE", "D3D10_CPU_ACCESS_READ", ]) D3D10_RESOURCE_MISC_FLAG = Flags(UINT, [ "D3D10_RESOURCE_MISC_GENERATE_MIPS", "D3D10_RESOURCE_MISC_SHARED", "D3D10_RESOURCE_MISC_TEXTURECUBE", "D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX", "D3D10_RESOURCE_MISC_GDI_COMPATIBLE", ]) D3D10_BUFFER_DESC = Struct("D3D10_BUFFER_DESC", [ (UINT, "ByteWidth"), (D3D10_USAGE, "Usage"), (D3D10_BIND_FLAG, "BindFlags"), (D3D10_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D10_RESOURCE_MISC_FLAG, "MiscFlags"), ]) D3D10_MAP = Enum("D3D10_MAP", [ "D3D10_MAP_READ", "D3D10_MAP_WRITE", "D3D10_MAP_READ_WRITE", "D3D10_MAP_WRITE_DISCARD", "D3D10_MAP_WRITE_NO_OVERWRITE", ]) D3D10_TEXTURE1D_DESC = Struct("D3D10_TEXTURE1D_DESC", [ (UINT, "Width"), (UINT, "MipLevels"), (UINT, "ArraySize"), (DXGI_FORMAT, "Format"), (D3D10_USAGE, "Usage"), (D3D10_BIND_FLAG, "BindFlags"), (D3D10_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D10_RESOURCE_MISC_FLAG, "MiscFlags"), ]) D3D10_TEXTURE2D_DESC = Struct("D3D10_TEXTURE2D_DESC", [ (UINT, "Width"), (UINT, "Height"), (UINT, "MipLevels"), (UINT, "ArraySize"), (DXGI_FORMAT, "Format"), (DXGI_SAMPLE_DESC, "SampleDesc"), (D3D10_USAGE, "Usage"), (D3D10_BIND_FLAG, "BindFlags"), (D3D10_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D10_RESOURCE_MISC_FLAG, "MiscFlags"), ]) D3D10_TEXTURE3D_DESC = Struct("D3D10_TEXTURE3D_DESC", [ (UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), (UINT, "MipLevels"), (DXGI_FORMAT, "Format"), (D3D10_USAGE, "Usage"), (D3D10_BIND_FLAG, "BindFlags"), (D3D10_CPU_ACCESS_FLAG, "CPUAccessFlags"), (D3D10_RESOURCE_MISC_FLAG, "MiscFlags"), ]) D3D10_DSV_DIMENSION = Enum("D3D10_DSV_DIMENSION", [ "D3D10_DSV_DIMENSION_UNKNOWN", "D3D10_DSV_DIMENSION_TEXTURE1D", "D3D10_DSV_DIMENSION_TEXTURE1DARRAY", "D3D10_DSV_DIMENSION_TEXTURE2D", "D3D10_DSV_DIMENSION_TEXTURE2DARRAY", "D3D10_DSV_DIMENSION_TEXTURE2DMS", "D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY", ]) D3D10_TEX1D_DSV = Struct("D3D10_TEX1D_DSV", [ (UINT, "MipSlice"), ]) D3D10_TEX1D_ARRAY_DSV = Struct("D3D10_TEX1D_ARRAY_DSV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2D_DSV = Struct("D3D10_TEX2D_DSV", [ (UINT, "MipSlice"), ]) D3D10_TEX2D_ARRAY_DSV = Struct("D3D10_TEX2D_ARRAY_DSV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2DMS_DSV = Struct("D3D10_TEX2DMS_DSV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D10_TEX2DMS_ARRAY_DSV = Struct("D3D10_TEX2DMS_ARRAY_DSV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_DEPTH_STENCIL_VIEW_DESC = Struct("D3D10_DEPTH_STENCIL_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D10_DSV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D10_DSV_DIMENSION_TEXTURE1D", D3D10_TEX1D_DSV, "Texture1D"), ("D3D10_DSV_DIMENSION_TEXTURE1DARRAY", D3D10_TEX1D_ARRAY_DSV, "Texture1DArray"), ("D3D10_DSV_DIMENSION_TEXTURE2D", D3D10_TEX2D_DSV, "Texture2D"), ("D3D10_DSV_DIMENSION_TEXTURE2DARRAY", D3D10_TEX2D_ARRAY_DSV, "Texture2DArray"), ("D3D10_DSV_DIMENSION_TEXTURE2DMS", D3D10_TEX2DMS_DSV, "Texture2DMS"), ("D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY", D3D10_TEX2DMS_ARRAY_DSV, "Texture2DMSArray"), ]), None), ]) D3D10_RTV_DIMENSION = Enum("D3D10_RTV_DIMENSION", [ "D3D10_RTV_DIMENSION_UNKNOWN", "D3D10_RTV_DIMENSION_BUFFER", "D3D10_RTV_DIMENSION_TEXTURE1D", "D3D10_RTV_DIMENSION_TEXTURE1DARRAY", "D3D10_RTV_DIMENSION_TEXTURE2D", "D3D10_RTV_DIMENSION_TEXTURE2DARRAY", "D3D10_RTV_DIMENSION_TEXTURE2DMS", "D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY", "D3D10_RTV_DIMENSION_TEXTURE3D", ]) D3D10_BUFFER_RTV = Struct("D3D10_BUFFER_RTV", [ (UINT, "FirstElement"), (UINT, "NumElements"), ]) D3D10_TEX1D_RTV = Struct("D3D10_TEX1D_RTV", [ (UINT, "MipSlice"), ]) D3D10_TEX1D_ARRAY_RTV = Struct("D3D10_TEX1D_ARRAY_RTV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2D_RTV = Struct("D3D10_TEX2D_RTV", [ (UINT, "MipSlice"), ]) D3D10_TEX2D_ARRAY_RTV = Struct("D3D10_TEX2D_ARRAY_RTV", [ (UINT, "MipSlice"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2DMS_RTV = Struct("D3D10_TEX2DMS_RTV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D10_TEX2DMS_ARRAY_RTV = Struct("D3D10_TEX2DMS_ARRAY_RTV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX3D_RTV = Struct("D3D10_TEX3D_RTV", [ (UINT, "MipSlice"), (UINT, "FirstWSlice"), (UINT, "WSize"), ]) D3D10_RENDER_TARGET_VIEW_DESC = Struct("D3D10_RENDER_TARGET_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D10_RTV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D10_RTV_DIMENSION_BUFFER", D3D10_BUFFER_RTV, "Buffer"), ("D3D10_RTV_DIMENSION_TEXTURE1D", D3D10_TEX1D_RTV, "Texture1D"), ("D3D10_RTV_DIMENSION_TEXTURE1DARRAY", D3D10_TEX1D_ARRAY_RTV, "Texture1DArray"), ("D3D10_RTV_DIMENSION_TEXTURE2D", D3D10_TEX2D_RTV, "Texture2D"), ("D3D10_RTV_DIMENSION_TEXTURE2DARRAY", D3D10_TEX2D_ARRAY_RTV, "Texture2DArray"), ("D3D10_RTV_DIMENSION_TEXTURE2DMS", D3D10_TEX2DMS_RTV, "Texture2DMS"), ("D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY", D3D10_TEX2DMS_ARRAY_RTV, "Texture2DMSArray"), ("D3D10_RTV_DIMENSION_TEXTURE3D", D3D10_TEX3D_RTV, "Texture3D"), ]), None), ]) D3D10_SRV_DIMENSION = Enum("D3D10_SRV_DIMENSION", [ "D3D10_SRV_DIMENSION_UNKNOWN", "D3D10_SRV_DIMENSION_BUFFER", "D3D10_SRV_DIMENSION_TEXTURE1D", "D3D10_SRV_DIMENSION_TEXTURE1DARRAY", "D3D10_SRV_DIMENSION_TEXTURE2D", "D3D10_SRV_DIMENSION_TEXTURE2DARRAY", "D3D10_SRV_DIMENSION_TEXTURE2DMS", "D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY", "D3D10_SRV_DIMENSION_TEXTURE3D", "D3D10_SRV_DIMENSION_TEXTURECUBE", ]) D3D10_BUFFER_SRV = Struct("D3D10_BUFFER_SRV", [ (UINT, "FirstElement"), (UINT, "NumElements"), ]) D3D10_TEX1D_SRV = Struct("D3D10_TEX1D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D10_TEX1D_ARRAY_SRV = Struct("D3D10_TEX1D_ARRAY_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2D_SRV = Struct("D3D10_TEX2D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D10_TEX2D_ARRAY_SRV = Struct("D3D10_TEX2D_ARRAY_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX2DMS_SRV = Struct("D3D10_TEX2DMS_SRV", [ (UINT, "UnusedField_NothingToDefine"), ]) D3D10_TEX2DMS_ARRAY_SRV = Struct("D3D10_TEX2DMS_ARRAY_SRV", [ (UINT, "FirstArraySlice"), (UINT, "ArraySize"), ]) D3D10_TEX3D_SRV = Struct("D3D10_TEX3D_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D10_TEXCUBE_SRV = Struct("D3D10_TEXCUBE_SRV", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), ]) D3D10_SHADER_RESOURCE_VIEW_DESC = Struct("D3D10_SHADER_RESOURCE_VIEW_DESC", [ (DXGI_FORMAT, "Format"), (D3D10_SRV_DIMENSION, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D10_SRV_DIMENSION_BUFFER", D3D10_BUFFER_SRV, "Buffer"), ("D3D10_SRV_DIMENSION_TEXTURE1D", D3D10_TEX1D_SRV, "Texture1D"), ("D3D10_SRV_DIMENSION_TEXTURE1DARRAY", D3D10_TEX1D_ARRAY_SRV, "Texture1DArray"), ("D3D10_SRV_DIMENSION_TEXTURE2D", D3D10_TEX2D_SRV, "Texture2D"), ("D3D10_SRV_DIMENSION_TEXTURE2DARRAY", D3D10_TEX2D_ARRAY_SRV, "Texture2DArray"), ("D3D10_SRV_DIMENSION_TEXTURE2DMS", D3D10_TEX2DMS_SRV, "Texture2DMS"), ("D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY", D3D10_TEX2DMS_ARRAY_SRV, "Texture2DMSArray"), ("D3D10_SRV_DIMENSION_TEXTURE3D", D3D10_TEX3D_SRV, "Texture3D"), ("D3D10_SRV_DIMENSION_TEXTURECUBE", D3D10_TEXCUBE_SRV, "TextureCube"), ]), None), ]) D3D10_BOX = Struct("D3D10_BOX", [ (UINT, "left"), (UINT, "top"), (UINT, "front"), (UINT, "right"), (UINT, "bottom"), (UINT, "back"), ]) D3D10_SUBRESOURCE_DATA = Struct("D3D10_SUBRESOURCE_DATA", [ (Blob(Const(Void), "_calcSubresourceSize(pDesc, {i}, {self}.SysMemPitch, {self}.SysMemSlicePitch)"), "pSysMem"), (UINT, "SysMemPitch"), (UINT, "SysMemSlicePitch"), ]) D3D10_SO_DECLARATION_ENTRY = Struct("D3D10_SO_DECLARATION_ENTRY", [ (LPCSTR, "SemanticName"), (UINT, "SemanticIndex"), (BYTE, "StartComponent"), (BYTE, "ComponentCount"), (BYTE, "OutputSlot"), ]) D3D10_INPUT_CLASSIFICATION = Enum("D3D10_INPUT_CLASSIFICATION", [ "D3D10_INPUT_PER_VERTEX_DATA", "D3D10_INPUT_PER_INSTANCE_DATA", ]) D3D10_INPUT_ELEMENT_DESC = Struct("D3D10_INPUT_ELEMENT_DESC", [ (LPCSTR, "SemanticName"), (UINT, "SemanticIndex"), (DXGI_FORMAT, "Format"), (UINT, "InputSlot"), (UINT, "AlignedByteOffset"), (D3D10_INPUT_CLASSIFICATION, "InputSlotClass"), (UINT, "InstanceDataStepRate"), ]) D3D10_QUERY = Enum("D3D10_QUERY", [ "D3D10_QUERY_EVENT", "D3D10_QUERY_OCCLUSION", "D3D10_QUERY_TIMESTAMP", "D3D10_QUERY_TIMESTAMP_DISJOINT", "D3D10_QUERY_PIPELINE_STATISTICS", "D3D10_QUERY_OCCLUSION_PREDICATE", "D3D10_QUERY_SO_STATISTICS", "D3D10_QUERY_SO_OVERFLOW_PREDICATE", ]) D3D10_QUERY_MISC_FLAG = Flags(UINT, [ "D3D10_QUERY_MISC_PREDICATEHINT", ]) D3D10_QUERY_DESC = Struct("D3D10_QUERY_DESC", [ (D3D10_QUERY, "Query"), (D3D10_QUERY_MISC_FLAG, "MiscFlags"), ]) D3D10_RECT = Alias("D3D10_RECT", RECT) D3D10_VIEWPORT = Struct("D3D10_VIEWPORT", [ (INT, "TopLeftX"), (INT, "TopLeftY"), (UINT, "Width"), (UINT, "Height"), (FLOAT, "MinDepth"), (FLOAT, "MaxDepth"), ]) D3D10_MAPPED_TEXTURE2D = Struct("D3D10_MAPPED_TEXTURE2D", [ (LinearPointer(Void, "_MappedSize"), "pData"), (UINT, "RowPitch"), ]) D3D10_MAPPED_TEXTURE3D = Struct("D3D10_MAPPED_TEXTURE3D", [ (LinearPointer(Void, "_MappedSize"), "pData"), (UINT, "RowPitch"), (UINT, "DepthPitch"), ]) D3D10_MAP_FLAG = Flags(UINT, [ "D3D10_MAP_FLAG_DO_NOT_WAIT", ]) D3D10_CLEAR_FLAG = Flags(UINT, [ "D3D10_CLEAR_DEPTH", "D3D10_CLEAR_STENCIL", ]) D3D10_COLOR_WRITE_ENABLE = Flags(UINT, [ "D3D10_COLOR_WRITE_ENABLE_ALL", "D3D10_COLOR_WRITE_ENABLE_RED", "D3D10_COLOR_WRITE_ENABLE_GREEN", "D3D10_COLOR_WRITE_ENABLE_BLUE", "D3D10_COLOR_WRITE_ENABLE_ALPHA", ]) D3D10_TEXTURECUBE_FACE = Enum("D3D10_TEXTURECUBE_FACE", [ "D3D10_TEXTURECUBE_FACE_POSITIVE_X", "D3D10_TEXTURECUBE_FACE_NEGATIVE_X", "D3D10_TEXTURECUBE_FACE_POSITIVE_Y", "D3D10_TEXTURECUBE_FACE_NEGATIVE_Y", "D3D10_TEXTURECUBE_FACE_POSITIVE_Z", "D3D10_TEXTURECUBE_FACE_NEGATIVE_Z", ]) D3D10_ASYNC_GETDATA_FLAG = Flags(UINT, [ "D3D10_ASYNC_GETDATA_DONOTFLUSH", ]) D3D10_FILTER_TYPE = Enum("D3D10_FILTER_TYPE", [ "D3D10_FILTER_TYPE_POINT", "D3D10_FILTER_TYPE_LINEAR", ]) D3D10_QUERY_DATA_TIMESTAMP_DISJOINT = Struct("D3D10_QUERY_DATA_TIMESTAMP_DISJOINT", [ (UINT64, "Frequency"), (BOOL, "Disjoint"), ]) D3D10_QUERY_DATA_PIPELINE_STATISTICS = Struct("D3D10_QUERY_DATA_PIPELINE_STATISTICS", [ (UINT64, "IAVertices"), (UINT64, "IAPrimitives"), (UINT64, "VSInvocations"), (UINT64, "GSInvocations"), (UINT64, "GSPrimitives"), (UINT64, "CInvocations"), (UINT64, "CPrimitives"), (UINT64, "PSInvocations"), ]) D3D10_QUERY_DATA_SO_STATISTICS = Struct("D3D10_QUERY_DATA_SO_STATISTICS", [ (UINT64, "NumPrimitivesWritten"), (UINT64, "PrimitivesStorageNeeded"), ]) D3D10_QUERY_DATA = Polymorphic("_getQueryType(_this)", [ ("D3D10_QUERY_EVENT", Pointer(BOOL)), ("D3D10_QUERY_OCCLUSION", Pointer(UINT64)), ("D3D10_QUERY_TIMESTAMP", Pointer(UINT64)), ("D3D10_QUERY_TIMESTAMP_DISJOINT", Pointer(D3D10_QUERY_DATA_TIMESTAMP_DISJOINT)), ("D3D10_QUERY_PIPELINE_STATISTICS", Pointer(D3D10_QUERY_DATA_PIPELINE_STATISTICS)), ("D3D10_QUERY_OCCLUSION_PREDICATE", Pointer(BOOL)), ("D3D10_QUERY_SO_STATISTICS", Pointer(D3D10_QUERY_DATA_SO_STATISTICS)), ("D3D10_QUERY_SO_OVERFLOW_PREDICATE", Pointer(BOOL)), ], Blob(Void, "DataSize"), contextLess=False) # TODO: Handle ID3D10Counter::GetData too. D3D10_COUNTER_DATA = Polymorphic("_getCounterType(_this)", [ ("D3D10_COUNTER_GPU_IDLE", Pointer(FLOAT32)), ("D3D10_COUNTER_VERTEX_PROCESSING", Pointer(FLOAT32)), ("D3D10_COUNTER_GEOMETRY_PROCESSING", Pointer(FLOAT32)), ("D3D10_COUNTER_PIXEL_PROCESSING", Pointer(FLOAT32)), ("D3D10_COUNTER_OTHER_GPU_PROCESSING", Pointer(FLOAT32)), ("D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION", Pointer(FLOAT32)), ("D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION", Pointer(FLOAT32)), ("D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION", Pointer(FLOAT32)), ("D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION", Pointer(FLOAT32)), ("D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION", Pointer(FLOAT32)), ("D3D10_COUNTER_VS_MEMORY_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_VS_COMPUTATION_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_GS_MEMORY_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_GS_COMPUTATION_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_PS_MEMORY_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_PS_COMPUTATION_LIMITED", Pointer(FLOAT32)), ("D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE", Pointer(FLOAT32)), ("D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE", Pointer(FLOAT32)), ], Blob(Void, "DataSize"), contextLess=False) D3D10_CREATE_DEVICE_FLAG = Flags(UINT, [ "D3D10_CREATE_DEVICE_SINGLETHREADED", "D3D10_CREATE_DEVICE_DEBUG", "D3D10_CREATE_DEVICE_SWITCH_TO_REF", "D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS", "D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP", "D3D10_CREATE_DEVICE_BGRA_SUPPORT", "D3D10_CREATE_DEVICE_STRICT_VALIDATION", "D3D10_CREATE_DEVICE_BGRA_SUPPORT", "D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY", "D3D10_CREATE_DEVICE_STRICT_VALIDATION", "D3D10_CREATE_DEVICE_DEBUGGABLE", ]) D3D10_RAISE_FLAG = Flags(UINT, [ "D3D10_RAISE_FLAG_DRIVER_INTERNAL_ERROR", ]) ID3D10DeviceChild = Interface("ID3D10DeviceChild", IUnknown) ID3D10Resource = Interface("ID3D10Resource", ID3D10DeviceChild) ID3D10Buffer = Interface("ID3D10Buffer", ID3D10Resource) ID3D10Texture1D = Interface("ID3D10Texture1D", ID3D10Resource) ID3D10Texture2D = Interface("ID3D10Texture2D", ID3D10Resource) ID3D10Texture3D = Interface("ID3D10Texture3D", ID3D10Resource) ID3D10View = Interface("ID3D10View", ID3D10DeviceChild) ID3D10DepthStencilView = Interface("ID3D10DepthStencilView", ID3D10View) ID3D10RenderTargetView = Interface("ID3D10RenderTargetView", ID3D10View) ID3D10ShaderResourceView = Interface("ID3D10ShaderResourceView", ID3D10View) ID3D10BlendState = Interface("ID3D10BlendState", ID3D10DeviceChild) ID3D10DepthStencilState = Interface("ID3D10DepthStencilState", ID3D10DeviceChild) ID3D10GeometryShader = Interface("ID3D10GeometryShader", ID3D10DeviceChild) ID3D10InputLayout = Interface("ID3D10InputLayout", ID3D10DeviceChild) ID3D10PixelShader = Interface("ID3D10PixelShader", ID3D10DeviceChild) ID3D10RasterizerState = Interface("ID3D10RasterizerState", ID3D10DeviceChild) ID3D10SamplerState = Interface("ID3D10SamplerState", ID3D10DeviceChild) ID3D10VertexShader = Interface("ID3D10VertexShader", ID3D10DeviceChild) ID3D10Asynchronous = Interface("ID3D10Asynchronous", ID3D10DeviceChild) ID3D10Counter = Interface("ID3D10Counter", ID3D10Asynchronous) ID3D10Query = Interface("ID3D10Query", ID3D10Asynchronous) ID3D10Predicate = Interface("ID3D10Predicate", ID3D10Query) ID3D10Device = Interface("ID3D10Device", IUnknown) ID3D10Multithread = Interface("ID3D10Multithread", IUnknown) ID3D10DeviceChild.methods += [ StdMethod(Void, "GetDevice", [Out(Pointer(ObjPointer(ID3D10Device)), "ppDevice")]), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "guid"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "pData")], sideeffects=False), ] ID3D10Resource.methods += [ StdMethod(Void, "GetType", [Out(Pointer(D3D10_RESOURCE_DIMENSION), "rType")], sideeffects=False), StdMethod(Void, "SetEvictionPriority", [(UINT, "EvictionPriority")]), StdMethod(UINT, "GetEvictionPriority", [], sideeffects=False), ] ID3D10Buffer.methods += [ StdMethod(HRESULT, "Map", [(D3D10_MAP, "MapType"), (D3D10_MAP_FLAG, "MapFlags"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppData")]), StdMethod(Void, "Unmap", []), StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_BUFFER_DESC), "pDesc")], sideeffects=False), ] ID3D10Texture1D.methods += [ StdMethod(HRESULT, "Map", [(UINT, "Subresource"), (D3D10_MAP, "MapType"), (D3D10_MAP_FLAG, "MapFlags"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppData")]), StdMethod(Void, "Unmap", [(UINT, "Subresource")]), StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_TEXTURE1D_DESC), "pDesc")], sideeffects=False), ] ID3D10Texture2D.methods += [ StdMethod(HRESULT, "Map", [(UINT, "Subresource"), (D3D10_MAP, "MapType"), (D3D10_MAP_FLAG, "MapFlags"), Out(Pointer(D3D10_MAPPED_TEXTURE2D), "pMappedTex2D")]), StdMethod(Void, "Unmap", [(UINT, "Subresource")]), StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_TEXTURE2D_DESC), "pDesc")], sideeffects=False), ] ID3D10Texture3D.methods += [ StdMethod(HRESULT, "Map", [(UINT, "Subresource"), (D3D10_MAP, "MapType"), (D3D10_MAP_FLAG, "MapFlags"), Out(Pointer(D3D10_MAPPED_TEXTURE3D), "pMappedTex3D")]), StdMethod(Void, "Unmap", [(UINT, "Subresource")]), StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_TEXTURE3D_DESC), "pDesc")], sideeffects=False), ] ID3D10View.methods += [ StdMethod(Void, "GetResource", [Out(Pointer(ObjPointer(ID3D10Resource)), "ppResource")]), ] ID3D10DepthStencilView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_DEPTH_STENCIL_VIEW_DESC), "pDesc")], sideeffects=False), ] ID3D10RenderTargetView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_RENDER_TARGET_VIEW_DESC), "pDesc")], sideeffects=False), ] ID3D10ShaderResourceView.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_SHADER_RESOURCE_VIEW_DESC), "pDesc")], sideeffects=False), ] ID3D10BlendState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_BLEND_DESC), "pDesc")], sideeffects=False), ] ID3D10DepthStencilState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_DEPTH_STENCIL_DESC), "pDesc")], sideeffects=False), ] ID3D10RasterizerState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_RASTERIZER_DESC), "pDesc")], sideeffects=False), ] ID3D10SamplerState.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_SAMPLER_DESC), "pDesc")], sideeffects=False), ] ID3D10Asynchronous.methods += [ StdMethod(Void, "Begin", []), StdMethod(Void, "End", []), StdMethod(HRESULT, "GetData", [Out(D3D10_QUERY_DATA, "pData"), (UINT, "DataSize"), (D3D10_ASYNC_GETDATA_FLAG, "GetDataFlags")], sideeffects=False), StdMethod(UINT, "GetDataSize", [], sideeffects=False), ] ID3D10Counter.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_COUNTER_DESC), "pDesc")], sideeffects=False), ] ID3D10Query.methods += [ StdMethod(Void, "GetDesc", [Out(Pointer(D3D10_QUERY_DESC), "pDesc")], sideeffects=False), ] ID3D10Device.methods += [ StdMethod(Void, "VSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D10Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "PSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D10ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "PSSetShader", [(ObjPointer(ID3D10PixelShader), "pPixelShader")]), StdMethod(Void, "PSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D10SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "VSSetShader", [(ObjPointer(ID3D10VertexShader), "pVertexShader")]), StdMethod(Void, "DrawIndexed", [(UINT, "IndexCount"), (UINT, "StartIndexLocation"), (INT, "BaseVertexLocation")]), StdMethod(Void, "Draw", [(UINT, "VertexCount"), (UINT, "StartVertexLocation")]), StdMethod(Void, "PSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D10Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "IASetInputLayout", [(ObjPointer(ID3D10InputLayout), "pInputLayout")]), StdMethod(Void, "IASetVertexBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D10Buffer)), "NumBuffers"), "ppVertexBuffers"), (Array(Const(UINT), "NumBuffers"), "pStrides"), (Array(Const(UINT), "NumBuffers"), "pOffsets")]), StdMethod(Void, "IASetIndexBuffer", [(ObjPointer(ID3D10Buffer), "pIndexBuffer"), (DXGI_FORMAT, "Format"), (UINT, "Offset")]), StdMethod(Void, "DrawIndexedInstanced", [(UINT, "IndexCountPerInstance"), (UINT, "InstanceCount"), (UINT, "StartIndexLocation"), (INT, "BaseVertexLocation"), (UINT, "StartInstanceLocation")]), StdMethod(Void, "DrawInstanced", [(UINT, "VertexCountPerInstance"), (UINT, "InstanceCount"), (UINT, "StartVertexLocation"), (UINT, "StartInstanceLocation")]), StdMethod(Void, "GSSetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D10Buffer)), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "GSSetShader", [(ObjPointer(ID3D10GeometryShader), "pShader")]), StdMethod(Void, "IASetPrimitiveTopology", [(D3D10_PRIMITIVE_TOPOLOGY, "Topology")]), StdMethod(Void, "VSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D10ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "VSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D10SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "SetPredication", [(ObjPointer(ID3D10Predicate), "pPredicate"), (BOOL, "PredicateValue")]), StdMethod(Void, "GSSetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), (Array(Const(ObjPointer(ID3D10ShaderResourceView)), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "GSSetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), (Array(Const(ObjPointer(ID3D10SamplerState)), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "OMSetRenderTargets", [(UINT, "NumViews"), (Array(Const(ObjPointer(ID3D10RenderTargetView)), "NumViews"), "ppRenderTargetViews"), (ObjPointer(ID3D10DepthStencilView), "pDepthStencilView")]), StdMethod(Void, "OMSetBlendState", [(ObjPointer(ID3D10BlendState), "pBlendState"), (Array(Const(FLOAT), 4), "BlendFactor"), (UINT, "SampleMask")]), StdMethod(Void, "OMSetDepthStencilState", [(ObjPointer(ID3D10DepthStencilState), "pDepthStencilState"), (UINT, "StencilRef")]), StdMethod(Void, "SOSetTargets", [(UINT, "NumBuffers"), (Array(Const(ObjPointer(ID3D10Buffer)), "NumBuffers"), "ppSOTargets"), (Array(Const(UINT), "NumBuffers"), "pOffsets")]), StdMethod(Void, "DrawAuto", []), StdMethod(Void, "RSSetState", [(ObjPointer(ID3D10RasterizerState), "pRasterizerState")]), StdMethod(Void, "RSSetViewports", [(UINT, "NumViewports"), (Array(Const(D3D10_VIEWPORT), "NumViewports"), "pViewports")]), StdMethod(Void, "RSSetScissorRects", [(UINT, "NumRects"), (Array(Const(D3D10_RECT), "NumRects"), "pRects")]), StdMethod(Void, "CopySubresourceRegion", [(ObjPointer(ID3D10Resource), "pDstResource"), (UINT, "DstSubresource"), (UINT, "DstX"), (UINT, "DstY"), (UINT, "DstZ"), (ObjPointer(ID3D10Resource), "pSrcResource"), (UINT, "SrcSubresource"), (Pointer(Const(D3D10_BOX)), "pSrcBox")]), StdMethod(Void, "CopyResource", [(ObjPointer(ID3D10Resource), "pDstResource"), (ObjPointer(ID3D10Resource), "pSrcResource")]), StdMethod(Void, "UpdateSubresource", [(ObjPointer(ID3D10Resource), "pDstResource"), (UINT, "DstSubresource"), (Pointer(Const(D3D10_BOX)), "pDstBox"), (Blob(Const(Void), "_calcSubresourceSize(pDstResource, DstSubresource, pDstBox, SrcRowPitch, SrcDepthPitch)"), "pSrcData"), (UINT, "SrcRowPitch"), (UINT, "SrcDepthPitch")]), StdMethod(Void, "ClearRenderTargetView", [(ObjPointer(ID3D10RenderTargetView), "pRenderTargetView"), (Array(Const(FLOAT), 4), "ColorRGBA")]), StdMethod(Void, "ClearDepthStencilView", [(ObjPointer(ID3D10DepthStencilView), "pDepthStencilView"), (D3D10_CLEAR_FLAG, "ClearFlags"), (FLOAT, "Depth"), (UINT8, "Stencil")]), StdMethod(Void, "GenerateMips", [(ObjPointer(ID3D10ShaderResourceView), "pShaderResourceView")]), StdMethod(Void, "ResolveSubresource", [(ObjPointer(ID3D10Resource), "pDstResource"), (UINT, "DstSubresource"), (ObjPointer(ID3D10Resource), "pSrcResource"), (UINT, "SrcSubresource"), (DXGI_FORMAT, "Format")]), StdMethod(Void, "VSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D10Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "PSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D10ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "PSGetShader", [Out(Pointer(ObjPointer(ID3D10PixelShader)), "ppPixelShader")]), StdMethod(Void, "PSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D10SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "VSGetShader", [Out(Pointer(ObjPointer(ID3D10VertexShader)), "ppVertexShader")]), StdMethod(Void, "PSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D10Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "IAGetInputLayout", [Out(Pointer(ObjPointer(ID3D10InputLayout)), "ppInputLayout")]), StdMethod(Void, "IAGetVertexBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D10Buffer), "NumBuffers"), "ppVertexBuffers"), Out(Array(UINT, "NumBuffers"), "pStrides"), Out(Array(UINT, "NumBuffers"), "pOffsets")]), StdMethod(Void, "IAGetIndexBuffer", [Out(Pointer(ObjPointer(ID3D10Buffer)), "pIndexBuffer"), Out(Pointer(DXGI_FORMAT), "Format"), Out(Pointer(UINT), "Offset")]), StdMethod(Void, "GSGetConstantBuffers", [(UINT, "StartSlot"), (UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D10Buffer), "NumBuffers"), "ppConstantBuffers")]), StdMethod(Void, "GSGetShader", [Out(Pointer(ObjPointer(ID3D10GeometryShader)), "ppGeometryShader")]), StdMethod(Void, "IAGetPrimitiveTopology", [Out(Pointer(D3D10_PRIMITIVE_TOPOLOGY), "pTopology")], sideeffects=False), StdMethod(Void, "VSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D10ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "VSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D10SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "GetPredication", [Out(Pointer(ObjPointer(ID3D10Predicate)), "ppPredicate"), Out(Pointer(BOOL), "pPredicateValue")]), StdMethod(Void, "GSGetShaderResources", [(UINT, "StartSlot"), (UINT, "NumViews"), Out(Array(ObjPointer(ID3D10ShaderResourceView), "NumViews"), "ppShaderResourceViews")]), StdMethod(Void, "GSGetSamplers", [(UINT, "StartSlot"), (UINT, "NumSamplers"), Out(Array(ObjPointer(ID3D10SamplerState), "NumSamplers"), "ppSamplers")]), StdMethod(Void, "OMGetRenderTargets", [(UINT, "NumViews"), Out(Array(ObjPointer(ID3D10RenderTargetView), "NumViews"), "ppRenderTargetViews"), Out(Pointer(ObjPointer(ID3D10DepthStencilView)), "ppDepthStencilView")]), StdMethod(Void, "OMGetBlendState", [Out(Pointer(ObjPointer(ID3D10BlendState)), "ppBlendState"), Out(Array(FLOAT, 4), "BlendFactor"), Out(Pointer(UINT), "pSampleMask")]), StdMethod(Void, "OMGetDepthStencilState", [Out(Pointer(ObjPointer(ID3D10DepthStencilState)), "ppDepthStencilState"), Out(Pointer(UINT), "pStencilRef")]), StdMethod(Void, "SOGetTargets", [(UINT, "NumBuffers"), Out(Array(ObjPointer(ID3D10Buffer), "NumBuffers"), "ppSOTargets"), Out(Array(UINT, "NumBuffers"), "pOffsets")]), StdMethod(Void, "RSGetState", [Out(Pointer(ObjPointer(ID3D10RasterizerState)), "ppRasterizerState")]), StdMethod(Void, "RSGetViewports", [InOut(Pointer(UINT), "pNumViewports"), Out(Array(D3D10_VIEWPORT, "*pNumViewports"), "pViewports")], sideeffects=False), StdMethod(Void, "RSGetScissorRects", [InOut(Pointer(UINT), "pNumRects"), Out(Array(D3D10_RECT, "*pNumRects"), "pRects")], sideeffects=False), StdMethod(HRESULT, "GetDeviceRemovedReason", [], sideeffects=False), StdMethod(HRESULT, "SetExceptionMode", [(D3D10_RAISE_FLAG, "RaiseFlags")]), StdMethod(D3D10_RAISE_FLAG, "GetExceptionMode", [], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "guid"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False), StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "pData")], sideeffects=False), StdMethod(Void, "ClearState", []), StdMethod(Void, "Flush", []), StdMethod(HRESULT, "CreateBuffer", [(Pointer(Const(D3D10_BUFFER_DESC)), "pDesc"), (Array(Const(D3D10_SUBRESOURCE_DATA), 1), "pInitialData"), Out(Pointer(ObjPointer(ID3D10Buffer)), "ppBuffer")]), StdMethod(HRESULT, "CreateTexture1D", [(Pointer(Const(D3D10_TEXTURE1D_DESC)), "pDesc"), (Array(Const(D3D10_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D10Texture1D)), "ppTexture1D")]), StdMethod(HRESULT, "CreateTexture2D", [(Pointer(Const(D3D10_TEXTURE2D_DESC)), "pDesc"), (Array(Const(D3D10_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D10Texture2D)), "ppTexture2D")]), StdMethod(HRESULT, "CreateTexture3D", [(Pointer(Const(D3D10_TEXTURE3D_DESC)), "pDesc"), (Array(Const(D3D10_SUBRESOURCE_DATA), "_getNumSubResources(pDesc)"), "pInitialData"), Out(Pointer(ObjPointer(ID3D10Texture3D)), "ppTexture3D")]), StdMethod(HRESULT, "CreateShaderResourceView", [(ObjPointer(ID3D10Resource), "pResource"), (Pointer(Const(D3D10_SHADER_RESOURCE_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D10ShaderResourceView)), "ppSRView")]), StdMethod(HRESULT, "CreateRenderTargetView", [(ObjPointer(ID3D10Resource), "pResource"), (Pointer(Const(D3D10_RENDER_TARGET_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D10RenderTargetView)), "ppRTView")]), StdMethod(HRESULT, "CreateDepthStencilView", [(ObjPointer(ID3D10Resource), "pResource"), (Pointer(Const(D3D10_DEPTH_STENCIL_VIEW_DESC)), "pDesc"), Out(Pointer(ObjPointer(ID3D10DepthStencilView)), "ppDepthStencilView")]), StdMethod(HRESULT, "CreateInputLayout", [(Array(Const(D3D10_INPUT_ELEMENT_DESC), "NumElements"), "pInputElementDescs"), (UINT, "NumElements"), (Blob(Const(Void), "BytecodeLength"), "pShaderBytecodeWithInputSignature"), (SIZE_T, "BytecodeLength"), Out(Pointer(ObjPointer(ID3D10InputLayout)), "ppInputLayout")]), StdMethod(HRESULT, "CreateVertexShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), Out(Pointer(ObjPointer(ID3D10VertexShader)), "ppVertexShader")]), StdMethod(HRESULT, "CreateGeometryShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), Out(Pointer(ObjPointer(ID3D10GeometryShader)), "ppGeometryShader")]), StdMethod(HRESULT, "CreateGeometryShaderWithStreamOutput", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), (Array(Const(D3D10_SO_DECLARATION_ENTRY), "NumEntries"), "pSODeclaration"), (UINT, "NumEntries"), (UINT, "OutputStreamStride"), Out(Pointer(ObjPointer(ID3D10GeometryShader)), "ppGeometryShader")]), StdMethod(HRESULT, "CreatePixelShader", [(Blob(Const(Void), "BytecodeLength"), "pShaderBytecode"), (SIZE_T, "BytecodeLength"), Out(Pointer(ObjPointer(ID3D10PixelShader)), "ppPixelShader")]), StdMethod(HRESULT, "CreateBlendState", [(Pointer(Const(D3D10_BLEND_DESC)), "pBlendStateDesc"), Out(Pointer(ObjPointer(ID3D10BlendState)), "ppBlendState")]), StdMethod(HRESULT, "CreateDepthStencilState", [(Pointer(Const(D3D10_DEPTH_STENCIL_DESC)), "pDepthStencilDesc"), Out(Pointer(ObjPointer(ID3D10DepthStencilState)), "ppDepthStencilState")]), StdMethod(HRESULT, "CreateRasterizerState", [(Pointer(Const(D3D10_RASTERIZER_DESC)), "pRasterizerDesc"), Out(Pointer(ObjPointer(ID3D10RasterizerState)), "ppRasterizerState")]), StdMethod(HRESULT, "CreateSamplerState", [(Pointer(Const(D3D10_SAMPLER_DESC)), "pSamplerDesc"), Out(Pointer(ObjPointer(ID3D10SamplerState)), "ppSamplerState")]), StdMethod(HRESULT, "CreateQuery", [(Pointer(Const(D3D10_QUERY_DESC)), "pQueryDesc"), Out(Pointer(ObjPointer(ID3D10Query)), "ppQuery")]), StdMethod(HRESULT, "CreatePredicate", [(Pointer(Const(D3D10_QUERY_DESC)), "pPredicateDesc"), Out(Pointer(ObjPointer(ID3D10Predicate)), "ppPredicate")]), StdMethod(HRESULT, "CreateCounter", [(Pointer(Const(D3D10_COUNTER_DESC)), "pCounterDesc"), Out(Pointer(ObjPointer(ID3D10Counter)), "ppCounter")]), StdMethod(HRESULT, "CheckFormatSupport", [(DXGI_FORMAT, "Format"), Out(Pointer(D3D10_FORMAT_SUPPORT), "pFormatSupport")], sideeffects=False), StdMethod(HRESULT, "CheckMultisampleQualityLevels", [(DXGI_FORMAT, "Format"), (UINT, "SampleCount"), Out(Pointer(UINT), "pNumQualityLevels")], sideeffects=False), StdMethod(Void, "CheckCounterInfo", [Out(Pointer(D3D10_COUNTER_INFO), "pCounterInfo")], sideeffects=False), StdMethod(HRESULT, "CheckCounter", [(Pointer(Const(D3D10_COUNTER_DESC)), "pDesc"), Out(Pointer(D3D10_COUNTER_TYPE), "pType"), Out(Pointer(UINT), "pActiveCounters"), Out(LPSTR, "szName"), Out(Pointer(UINT), "pNameLength"), Out(LPSTR, "szUnits"), Out(Pointer(UINT), "pUnitsLength"), Out(LPSTR, "szDescription"), Out(Pointer(UINT), "pDescriptionLength")], sideeffects=False), StdMethod(D3D10_CREATE_DEVICE_FLAG, "GetCreationFlags", [], sideeffects=False), StdMethod(HRESULT, "OpenSharedResource", [(HANDLE, "hResource"), (REFIID, "ReturnedInterface"), Out(Pointer(ObjPointer(Void)), "ppResource")]), StdMethod(Void, "SetTextFilterSize", [(UINT, "Width"), (UINT, "Height")]), StdMethod(Void, "GetTextFilterSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False), ] ID3D10Multithread.methods += [ StdMethod(Void, "Enter", []), StdMethod(Void, "Leave", []), StdMethod(BOOL, "SetMultithreadProtected", [(BOOL, "bMTProtect")]), StdMethod(BOOL, "GetMultithreadProtected", [], sideeffects=False), ] D3D10_DRIVER_TYPE = Enum("D3D10_DRIVER_TYPE", [ "D3D10_DRIVER_TYPE_HARDWARE", "D3D10_DRIVER_TYPE_REFERENCE", "D3D10_DRIVER_TYPE_NULL", "D3D10_DRIVER_TYPE_SOFTWARE", "D3D10_DRIVER_TYPE_WARP", ]) d3d10 = Module("d3d10") d3d10.addFunctions([ StdFunction(HRESULT, "D3D10CreateDevice", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D10Device)), "ppDevice")]), StdFunction(HRESULT, "D3D10CreateDeviceAndSwapChain", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (UINT, "SDKVersion"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pSwapChainDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain"), Out(Pointer(ObjPointer(ID3D10Device)), "ppDevice")]), ]) d3d10.addInterfaces([ ID3D10Debug, ID3D10InfoQueue, ID3D10Multithread, ID3D10SwitchToRef, ]) # # D3D10.1 # D3D10_FEATURE_LEVEL1 = Enum("D3D10_FEATURE_LEVEL1", [ "D3D10_FEATURE_LEVEL_10_0", "D3D10_FEATURE_LEVEL_10_1", "D3D10_FEATURE_LEVEL_9_1", "D3D10_FEATURE_LEVEL_9_2", "D3D10_FEATURE_LEVEL_9_3", ]) D3D10_RENDER_TARGET_BLEND_DESC1 = Struct("D3D10_RENDER_TARGET_BLEND_DESC1", [ (BOOL, "BlendEnable"), (D3D10_BLEND, "SrcBlend"), (D3D10_BLEND, "DestBlend"), (D3D10_BLEND_OP, "BlendOp"), (D3D10_BLEND, "SrcBlendAlpha"), (D3D10_BLEND, "DestBlendAlpha"), (D3D10_BLEND_OP, "BlendOpAlpha"), (UINT8, "RenderTargetWriteMask"), ]) D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT = 8 D3D10_BLEND_DESC1 = Struct("D3D10_BLEND_DESC1", [ (BOOL, "AlphaToCoverageEnable"), (BOOL, "IndependentBlendEnable"), (Array(D3D10_RENDER_TARGET_BLEND_DESC1, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT), "RenderTarget"), ]) ID3D10BlendState1 = Interface("ID3D10BlendState1", ID3D10BlendState) ID3D10BlendState1.methods += [ StdMethod(Void, "GetDesc1", [Out(Pointer(D3D10_BLEND_DESC1), "pDesc")], sideeffects=False), ] D3D10_TEXCUBE_ARRAY_SRV1 = Struct("D3D10_TEXCUBE_ARRAY_SRV1", [ (UINT, "MostDetailedMip"), (UINT, "MipLevels"), (UINT, "First2DArrayFace"), (UINT, "NumCubes"), ]) D3D10_SHADER_RESOURCE_VIEW_DESC1 = Struct("D3D10_SHADER_RESOURCE_VIEW_DESC1", [ (DXGI_FORMAT, "Format"), (D3D10_SRV_DIMENSION1, "ViewDimension"), (Union("{self}.ViewDimension", [ ("D3D10_1_SRV_DIMENSION_BUFFER", D3D10_BUFFER_SRV, "Buffer"), ("D3D10_1_SRV_DIMENSION_TEXTURE1D", D3D10_TEX1D_SRV, "Texture1D"), ("D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY", D3D10_TEX1D_ARRAY_SRV, "Texture1DArray"), ("D3D10_1_SRV_DIMENSION_TEXTURE2D", D3D10_TEX2D_SRV, "Texture2D"), ("D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY", D3D10_TEX2D_ARRAY_SRV, "Texture2DArray"), ("D3D10_1_SRV_DIMENSION_TEXTURE2DMS", D3D10_TEX2DMS_SRV, "Texture2DMS"), ("D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY", D3D10_TEX2DMS_ARRAY_SRV, "Texture2DMSArray"), ("D3D10_1_SRV_DIMENSION_TEXTURE3D", D3D10_TEX3D_SRV, "Texture3D"), ("D3D10_1_SRV_DIMENSION_TEXTURECUBE", D3D10_TEXCUBE_SRV, "TextureCube"), ("D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY", D3D10_TEXCUBE_ARRAY_SRV1, "TextureCubeArray"), ]), None), ]) ID3D10ShaderResourceView1 = Interface("ID3D10ShaderResourceView1", ID3D10ShaderResourceView) ID3D10ShaderResourceView1.methods += [ StdMethod(Void, "GetDesc1", [Out(Pointer(D3D10_SHADER_RESOURCE_VIEW_DESC1), "pDesc")], sideeffects=False), ] ID3D10Device1 = Interface("ID3D10Device1", ID3D10Device) ID3D10Device1.methods += [ StdMethod(HRESULT, "CreateShaderResourceView1", [(ObjPointer(ID3D10Resource), "pResource"), (Pointer(Const(D3D10_SHADER_RESOURCE_VIEW_DESC1)), "pDesc"), Out(Pointer(ObjPointer(ID3D10ShaderResourceView1)), "ppSRView")]), StdMethod(HRESULT, "CreateBlendState1", [(Pointer(Const(D3D10_BLEND_DESC1)), "pBlendStateDesc"), Out(Pointer(ObjPointer(ID3D10BlendState1)), "ppBlendState")]), StdMethod(D3D10_FEATURE_LEVEL1, "GetFeatureLevel", [], sideeffects=False), ] d3d10_1 = Module("d3d10_1") d3d10_1.addFunctions([ StdFunction(HRESULT, "D3D10CreateDevice1", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (D3D10_FEATURE_LEVEL1, "HardwareLevel"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D10Device1)), "ppDevice")]), StdFunction(HRESULT, "D3D10CreateDeviceAndSwapChain1", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (D3D10_FEATURE_LEVEL1, "HardwareLevel"), (UINT, "SDKVersion"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pSwapChainDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain"), Out(Pointer(ObjPointer(ID3D10Device1)), "ppDevice")]), ]) d3d10_1.addInterfaces([ ID3D10Debug, ID3D10InfoQueue, ID3D10Multithread, ID3D10SwitchToRef, ]) tmpNnpnZF/specs/d3d.py0000664000175000017500000010007112543167424014124 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d.h""" from winapi import * from ddraw import * from d3dtypes import * from d3dcaps import * d3dnextFlags = Flags(DWORD, [ "D3DNEXT_NEXT", "D3DNEXT_HEAD", "D3DNEXT_TAIL", ]) direct3dFlags = Flags(DWORD, [ "DIRECT3D_VERSION", ]) d3ddpFlags = Flags(DWORD, [ "D3DDP_WAIT", "D3DDP_OUTOFORDER", "D3DDP_DONOTCLIP", "D3DDP_DONOTUPDATEEXTENTS", "D3DDP_DONOTLIGHT", ]) HRESULT = MAKE_HRESULT(ok = "D3D_OK", errors = [ "D3DERR_BADMAJORVERSION", "D3DERR_BADMINORVERSION", "D3DERR_INVALID_DEVICE", "D3DERR_INITFAILED", "D3DERR_DEVICEAGGREGATED", "D3DERR_EXECUTE_CREATE_FAILED", "D3DERR_EXECUTE_DESTROY_FAILED", "D3DERR_EXECUTE_LOCK_FAILED", "D3DERR_EXECUTE_UNLOCK_FAILED", "D3DERR_EXECUTE_LOCKED", "D3DERR_EXECUTE_NOT_LOCKED", "D3DERR_EXECUTE_FAILED", "D3DERR_EXECUTE_CLIPPED_FAILED", "D3DERR_TEXTURE_NO_SUPPORT", "D3DERR_TEXTURE_CREATE_FAILED", "D3DERR_TEXTURE_DESTROY_FAILED", "D3DERR_TEXTURE_LOCK_FAILED", "D3DERR_TEXTURE_UNLOCK_FAILED", "D3DERR_TEXTURE_LOAD_FAILED", "D3DERR_TEXTURE_SWAP_FAILED", "D3DERR_TEXTURE_LOCKED", "D3DERR_TEXTURE_NOT_LOCKED", "D3DERR_TEXTURE_GETSURF_FAILED", "D3DERR_MATRIX_CREATE_FAILED", "D3DERR_MATRIX_DESTROY_FAILED", "D3DERR_MATRIX_SETDATA_FAILED", "D3DERR_MATRIX_GETDATA_FAILED", "D3DERR_SETVIEWPORTDATA_FAILED", "D3DERR_INVALIDCURRENTVIEWPORT", "D3DERR_INVALIDPRIMITIVETYPE", "D3DERR_INVALIDVERTEXTYPE", "D3DERR_TEXTURE_BADSIZE", "D3DERR_INVALIDRAMPTEXTURE", "D3DERR_MATERIAL_CREATE_FAILED", "D3DERR_MATERIAL_DESTROY_FAILED", "D3DERR_MATERIAL_SETDATA_FAILED", "D3DERR_MATERIAL_GETDATA_FAILED", "D3DERR_INVALIDPALETTE", "D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY", "D3DERR_ZBUFF_NEEDS_VIDEOMEMORY", "D3DERR_SURFACENOTINVIDMEM", "D3DERR_LIGHT_SET_FAILED", "D3DERR_LIGHTHASVIEWPORT", "D3DERR_LIGHTNOTINTHISVIEWPORT", "D3DERR_SCENE_IN_SCENE", "D3DERR_SCENE_NOT_IN_SCENE", "D3DERR_SCENE_BEGIN_FAILED", "D3DERR_SCENE_END_FAILED", "D3DERR_INBEGIN", "D3DERR_NOTINBEGIN", "D3DERR_NOVIEWPORTS", "D3DERR_VIEWPORTDATANOTSET", "D3DERR_VIEWPORTHASNODEVICE", "D3DERR_NOCURRENTVIEWPORT", "D3DERR_INVALIDVERTEXFORMAT", "D3DERR_COLORKEYATTACHED", "D3DERR_VERTEXBUFFEROPTIMIZED", "D3DERR_VBUF_CREATE_FAILED", "D3DERR_VERTEXBUFFERLOCKED", "D3DERR_VERTEXBUFFERUNLOCKFAILED", "D3DERR_ZBUFFER_NOTPRESENT", "D3DERR_STENCILBUFFER_NOTPRESENT", "D3DERR_WRONGTEXTUREFORMAT", "D3DERR_UNSUPPORTEDCOLOROPERATION", "D3DERR_UNSUPPORTEDCOLORARG", "D3DERR_UNSUPPORTEDALPHAOPERATION", "D3DERR_UNSUPPORTEDALPHAARG", "D3DERR_TOOMANYOPERATIONS", "D3DERR_CONFLICTINGTEXTUREFILTER", "D3DERR_UNSUPPORTEDFACTORVALUE", "D3DERR_CONFLICTINGRENDERSTATE", "D3DERR_UNSUPPORTEDTEXTUREFILTER", "D3DERR_TOOMANYPRIMITIVES", "D3DERR_INVALIDMATRIX", "D3DERR_TOOMANYVERTICES", "D3DERR_CONFLICTINGTEXTUREPALETTE", "D3DERR_INVALIDSTATEBLOCK", "D3DERR_INBEGINSTATEBLOCK", "D3DERR_NOTINBEGINSTATEBLOCK", ]) IDirect3D = Interface("IDirect3D", IUnknown) IDirect3D2 = Interface("IDirect3D2", IUnknown) IDirect3D3 = Interface("IDirect3D3", IUnknown) IDirect3D7 = Interface("IDirect3D7", IUnknown) IDirect3DDevice = Interface("IDirect3DDevice", IUnknown) IDirect3DDevice2 = Interface("IDirect3DDevice2", IUnknown) IDirect3DDevice3 = Interface("IDirect3DDevice3", IUnknown) IDirect3DDevice7 = Interface("IDirect3DDevice7", IUnknown) IDirect3DExecuteBuffer = Interface("IDirect3DExecuteBuffer", IUnknown) IDirect3DLight = Interface("IDirect3DLight", IUnknown) IDirect3DMaterial = Interface("IDirect3DMaterial", IUnknown) IDirect3DMaterial2 = Interface("IDirect3DMaterial2", IUnknown) IDirect3DMaterial3 = Interface("IDirect3DMaterial3", IUnknown) IDirect3DTexture = Interface("IDirect3DTexture", IUnknown) IDirect3DTexture2 = Interface("IDirect3DTexture2", IUnknown) IDirect3DViewport = Interface("IDirect3DViewport", IUnknown) IDirect3DViewport2 = Interface("IDirect3DViewport2", IDirect3DViewport) IDirect3DViewport3 = Interface("IDirect3DViewport3", IDirect3DViewport2) IDirect3DVertexBuffer = Interface("IDirect3DVertexBuffer", IUnknown) IDirect3DVertexBuffer7 = Interface("IDirect3DVertexBuffer7", IUnknown) LPUNKNOWN = ObjPointer(IUnknown) LPDIRECT3D = ObjPointer(IDirect3D) LPDIRECT3DDEVICE = ObjPointer(IDirect3DDevice) LPDIRECT3DEXECUTEBUFFER = ObjPointer(IDirect3DExecuteBuffer) LPDIRECT3DLIGHT = ObjPointer(IDirect3DLight) LPDIRECT3DMATERIAL = ObjPointer(IDirect3DMaterial) LPDIRECT3DTEXTURE = ObjPointer(IDirect3DTexture) LPDIRECT3DVIEWPORT = ObjPointer(IDirect3DViewport) LPDIRECT3D2 = ObjPointer(IDirect3D2) LPDIRECT3DDEVICE2 = ObjPointer(IDirect3DDevice2) LPDIRECT3DMATERIAL2 = ObjPointer(IDirect3DMaterial2) LPDIRECT3DTEXTURE2 = ObjPointer(IDirect3DTexture2) LPDIRECT3DVIEWPORT2 = ObjPointer(IDirect3DViewport2) LPDIRECT3D3 = ObjPointer(IDirect3D3) LPDIRECT3DDEVICE3 = ObjPointer(IDirect3DDevice3) LPDIRECT3DMATERIAL3 = ObjPointer(IDirect3DMaterial3) LPDIRECT3DVIEWPORT3 = ObjPointer(IDirect3DViewport3) LPDIRECT3DVERTEXBUFFER = ObjPointer(IDirect3DVertexBuffer) LPDIRECT3D7 = ObjPointer(IDirect3D7) LPDIRECT3DDEVICE7 = ObjPointer(IDirect3DDevice7) LPDIRECT3DVERTEXBUFFER7 = ObjPointer(IDirect3DVertexBuffer7) IDirect3D.methods += [ StdMethod(HRESULT, "Initialize", [(REFCLSID, "riid")]), StdMethod(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "lpEnumDevicesCallback"), (LPVOID, "lpUserArg")], sideeffects=False), StdMethod(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "lplpDirect3DLight"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL), "lplpDirect3DMaterial"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT), "lplpD3DViewport"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "lpD3DDFS"), (LPD3DFINDDEVICERESULT, "lplpD3DDevice")]), ] IDirect3D2.methods += [ StdMethod(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "lpEnumDevicesCallback"), (LPVOID, "lpUserArg")], sideeffects=False), StdMethod(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "lplpDirect3DLight"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL2), "lplpDirect3DMaterial2"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT2), "lplpD3DViewport2"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "lpD3DDFS"), (LPD3DFINDDEVICERESULT, "lpD3DFDR")]), StdMethod(HRESULT, "CreateDevice", [(REFCLSID, "rclsid"), (LPDIRECTDRAWSURFACE, "lpDDS"), Out(Pointer(LPDIRECT3DDEVICE2), "lplpD3DDevice2")]), ] IDirect3D3.methods += [ StdMethod(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "lpEnumDevicesCallback"), (LPVOID, "lpUserArg")], sideeffects=False), StdMethod(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "lplpDirect3DLight"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL3), "lplpDirect3DMaterial3"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT3), "lplpD3DViewport3"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "lpD3DDFS"), Out(LPD3DFINDDEVICERESULT, "lpD3DFDR")]), StdMethod(HRESULT, "CreateDevice", [(REFCLSID, "rclsid"), (LPDIRECTDRAWSURFACE4, "lpDDS"), Out(Pointer(LPDIRECT3DDEVICE3), "lplpD3DDevice3"), (LPUNKNOWN, "lpUnk")]), StdMethod(HRESULT, "CreateVertexBuffer", [(LPD3DVERTEXBUFFERDESC, "lpD3DVertBufDesc"), Out(Pointer(LPDIRECT3DVERTEXBUFFER), "lplpD3DVertBuf"), (DWORD, "dwFlags"), (LPUNKNOWN, "lpUnk")]), StdMethod(HRESULT, "EnumZBufferFormats", [(REFCLSID, "riidDevice"), (LPD3DENUMPIXELFORMATSCALLBACK, "lpEnumCallback"), (LPVOID, "lpContext")], sideeffects=False), StdMethod(HRESULT, "EvictManagedTextures", []), ] IDirect3D7.methods += [ StdMethod(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK7, "lpEnumDevicesCallback"), (LPVOID, "lpUserArg")], sideeffects=False), StdMethod(HRESULT, "CreateDevice", [(REFCLSID, "rclsid"), (LPDIRECTDRAWSURFACE7, "lpDDS"), Out(Pointer(LPDIRECT3DDEVICE7), "lplpD3DDevice")]), StdMethod(HRESULT, "CreateVertexBuffer", [(LPD3DVERTEXBUFFERDESC, "lpD3DVertBufDesc"), Out(Pointer(LPDIRECT3DVERTEXBUFFER7), "lplpD3DVertBuf"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "EnumZBufferFormats", [(REFCLSID, "riidDevice"), (LPD3DENUMPIXELFORMATSCALLBACK, "lpEnumCallback"), (LPVOID, "lpContext")], sideeffects=False), StdMethod(HRESULT, "EvictManagedTextures", []), ] IDirect3DDevice.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3D, "lpDirect3D"), (LPGUID, "lpGUID"), (LPD3DDEVICEDESC, "lpD3DDVDesc")]), StdMethod(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "lpD3DHWDevDesc"), Out(LPD3DDEVICEDESC, "lpD3DHELDevDesc")], sideeffects=False), StdMethod(HRESULT, "SwapTextureHandles", [(LPDIRECT3DTEXTURE, "lpD3Dtex1"), (LPDIRECT3DTEXTURE, "lpD3DTex2")]), StdMethod(HRESULT, "CreateExecuteBuffer", [(LPD3DEXECUTEBUFFERDESC, "lpDesc"), Out(Pointer(LPDIRECT3DEXECUTEBUFFER), "lplpDirect3DExecuteBuffer"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(HRESULT, "GetStats", [(LPD3DSTATS, "lpD3DStats")], sideeffects=False), StdMethod(HRESULT, "Execute", [(LPDIRECT3DEXECUTEBUFFER, "lpDirect3DExecuteBuffer"), (LPDIRECT3DVIEWPORT, "lpDirect3DViewport"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT, "lpDirect3DViewport")]), StdMethod(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT, "lpDirect3DViewport")]), StdMethod(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT, "lpDirect3DViewport"), Out(Pointer(LPDIRECT3DVIEWPORT), "lplpDirect3DViewport"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "Pick", [(LPDIRECT3DEXECUTEBUFFER, "lpDirect3DExecuteBuffer"), (LPDIRECT3DVIEWPORT, "lpDirect3DViewport"), (DWORD, "dwFlags"), (LPD3DRECT, "lpRect")]), StdMethod(HRESULT, "GetPickRecords", [(LPDWORD, "lpCount"), (LPD3DPICKRECORD, "lpD3DPickRec")], sideeffects=False), StdMethod(HRESULT, "EnumTextureFormats", [(LPD3DENUMTEXTUREFORMATSCALLBACK, "lpD3DEnumTextureProc"), (LPVOID, "lpArg")], sideeffects=False), StdMethod(HRESULT, "CreateMatrix", [Out(LPD3DMATRIXHANDLE, "lpD3DMatHandle")]), StdMethod(HRESULT, "SetMatrix", [(D3DMATRIXHANDLE, "D3DMatHandle"), (Const(LPD3DMATRIX), "lpD3DMatrix")]), StdMethod(HRESULT, "GetMatrix", [(D3DMATRIXHANDLE, "D3DMatHandle"), Out(LPD3DMATRIX, "lpD3DMatrix")], sideeffects=False), StdMethod(HRESULT, "DeleteMatrix", [(D3DMATRIXHANDLE, "D3DMatHandle")]), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D), "lplpDirect3D")]), ] IDirect3DDevice2.methods += [ StdMethod(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "lpD3DHWDevDesc"), Out(LPD3DDEVICEDESC, "lpD3DHELDevDesc")], sideeffects=False), StdMethod(HRESULT, "SwapTextureHandles", [(LPDIRECT3DTEXTURE2, "lpD3DTex1"), (LPDIRECT3DTEXTURE2, "lpD3DTex2")]), StdMethod(HRESULT, "GetStats", [Out(LPD3DSTATS, "lpD3DStats")], sideeffects=False), StdMethod(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT2, "lpDirect3DViewport2")]), StdMethod(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT2, "lpDirect3DViewport2")]), StdMethod(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT2, "lpDirect3DViewport2"), Out(Pointer(LPDIRECT3DVIEWPORT2), "lplpDirect3DViewport2"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "EnumTextureFormats", [(LPD3DENUMTEXTUREFORMATSCALLBACK, "lpD3DEnumTextureProc"), (LPVOID, "lpArg")], sideeffects=False), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D2), "lplpDirect3D2")]), StdMethod(HRESULT, "SetCurrentViewport", [(LPDIRECT3DVIEWPORT2, "lpDirect3DViewport2")]), StdMethod(HRESULT, "GetCurrentViewport", [Out(Pointer(LPDIRECT3DVIEWPORT2), "lplpDirect3DViewport2")], sideeffects=False), StdMethod(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE, "lpNewRenderTarget"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpRenderTarget")]), StdMethod(HRESULT, "Begin", [(D3DPRIMITIVETYPE, "d3dpt"), (D3DVERTEXTYPE, "dwVertexTypeDesc"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "BeginIndexed", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DVERTEXTYPE, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwNumVertices"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "Vertex", [(LPVOID, "lpVertexType")]), StdMethod(HRESULT, "Index", [(WORD, "wVertexIndex")]), StdMethod(HRESULT, "End", [(DWORD, "dwFlags")]), StdMethod(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), Out(LPDWORD, "lpdwRenderState")], sideeffects=False), StdMethod(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), (DWORD, "dwRenderState")]), StdMethod(HRESULT, "GetLightState", [(D3DLIGHTSTATETYPE, "dwLightStateType"), Out(LPDWORD, "lpdwLightState")], sideeffects=False), StdMethod(HRESULT, "SetLightState", [(D3DLIGHTSTATETYPE, "dwLightStateType"), (DWORD, "dwLightState")]), StdMethod(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), Out(LPD3DMATRIX, "lpD3DMatrix")], sideeffects=False), StdMethod(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DVERTEXTYPE, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwVertexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DVERTEXTYPE, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwVertexCount"), (LPWORD, "dwIndices"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "lpD3DClipStatus")]), StdMethod(HRESULT, "GetClipStatus", [(LPD3DCLIPSTATUS, "lpD3DClipStatus")], sideeffects=False), ] IDirect3DDevice3.methods += [ StdMethod(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "lpD3DHWDevDesc"), Out(LPD3DDEVICEDESC, "lpD3DHELDevDesc")], sideeffects=False), StdMethod(HRESULT, "GetStats", [Out(LPD3DSTATS, "lpD3DStats")], sideeffects=False), StdMethod(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT3, "lpDirect3DViewport3")]), StdMethod(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT3, "lpDirect3DViewport3")]), StdMethod(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT3, "lpDirect3DViewport3"), Out(Pointer(LPDIRECT3DVIEWPORT3), "lplpDirect3DViewport3"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "EnumTextureFormats", [(LPD3DENUMPIXELFORMATSCALLBACK, "lpD3DEnumPixelProc"), (LPVOID, "lpArg")], sideeffects=False), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D3), "lplpDirect3D3")]), StdMethod(HRESULT, "SetCurrentViewport", [(LPDIRECT3DVIEWPORT3, "lpDirect3DViewport3")]), StdMethod(HRESULT, "GetCurrentViewport", [Out(Pointer(LPDIRECT3DVIEWPORT3), "lplpDirect3DViewport3")], sideeffects=False), StdMethod(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE4, "lpNewRenderTarget"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpRenderTarget")]), StdMethod(HRESULT, "Begin", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "dwVertexTypeDesc"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "BeginIndexed", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwNumVertices"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "Vertex", [(LPVOID, "lpVertexType")]), StdMethod(HRESULT, "Index", [(WORD, "wVertexIndex")]), StdMethod(HRESULT, "End", [(DWORD, "dwFlags")]), StdMethod(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), Out(LPDWORD, "lpdwRenderState")], sideeffects=False), StdMethod(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), (DWORD, "dwRenderState")]), StdMethod(HRESULT, "GetLightState", [(D3DLIGHTSTATETYPE, "dwLightStateType"), Out(LPDWORD, "lpdwLightState")], sideeffects=False), StdMethod(HRESULT, "SetLightState", [(D3DLIGHTSTATETYPE, "dwLightStateType"), (DWORD, "dwLightState")]), StdMethod(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), Out(LPD3DMATRIX, "lpD3DMatrix")], sideeffects=False), StdMethod(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwVertexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "d3dvtVertexType"), (LPVOID, "lpvVertices"), (DWORD, "dwVertexCount"), (LPWORD, "dwIndices"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "lpD3DClipStatus")]), StdMethod(HRESULT, "GetClipStatus", [Out(LPD3DCLIPSTATUS, "lpD3DClipStatus")], sideeffects=False), StdMethod(HRESULT, "DrawPrimitiveStrided", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "dwVertexType"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "lpD3DDrawPrimStrideData"), (DWORD, "dwVertexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitiveStrided", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (DWORD, "dwVertexType"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "lpD3DDrawPrimStrideData"), (DWORD, "dwVertexCount"), (LPWORD, "lpIndex"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawPrimitiveVB", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (LPDIRECT3DVERTEXBUFFER, "lpD3DVertexBuf"), (DWORD, "dwStartVertex"), (DWORD, "dwNumVertices"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitiveVB", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (LPDIRECT3DVERTEXBUFFER, "lpD3DVertexBuf"), (LPWORD, "lpwIndices"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "ComputeSphereVisibility", [(LPD3DVECTOR, "lpCenters"), (LPD3DVALUE, "lpRadii"), (DWORD, "dwNumSpheres"), (DWORD, "dwFlags"), (LPDWORD, "lpdwReturnValues")]), StdMethod(HRESULT, "GetTexture", [(DWORD, "dwStage"), Out(Pointer(LPDIRECT3DTEXTURE2), "lplpTexture2")]), StdMethod(HRESULT, "SetTexture", [(DWORD, "dwStage"), (LPDIRECT3DTEXTURE2, "lpTexture2")]), StdMethod(HRESULT, "GetTextureStageState", [(DWORD, "dwStage"), (D3DTEXTURESTAGESTATETYPE, "d3dTexStageStateType"), Out(LPDWORD, "lpdwState")], sideeffects=False), StdMethod(HRESULT, "SetTextureStageState", [(DWORD, "dwStage"), (D3DTEXTURESTAGESTATETYPE, "d3dTexStageStateType"), (DWORD, "dwState")]), StdMethod(HRESULT, "ValidateDevice", [(LPDWORD, "lpdwPasses")]), ] IDirect3DDevice7.methods += [ StdMethod(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC7, "lpD3DHELDevDesc")], sideeffects=False), StdMethod(HRESULT, "EnumTextureFormats", [(LPD3DENUMPIXELFORMATSCALLBACK, "lpD3DEnumPixelProc"), (LPVOID, "lpArg")], sideeffects=False), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D7), "lplpDirect3D3")]), StdMethod(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE7, "lpNewRenderTarget"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpRenderTarget")]), StdMethod(HRESULT, "Clear", [(DWORD, "dwCount"), (Array(D3DRECT, "dwCount"), "lpRects"), (D3DCLEAR, "dwFlags"), (D3DCOLOR, "dwColor"), (D3DVALUE, "dvZ"), (DWORD, "dwStencil")]), StdMethod(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), Out(LPD3DMATRIX, "lpD3DMatrix")], sideeffects=False), StdMethod(HRESULT, "SetViewport", [(LPD3DVIEWPORT7, "lpData")]), StdMethod(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (LPD3DMATRIX, "lpD3DMatrix")]), StdMethod(HRESULT, "GetViewport", [Out(LPD3DVIEWPORT7, "lpData")], sideeffects=False), StdMethod(HRESULT, "SetMaterial", [(LPD3DMATERIAL7, "lpMat")]), StdMethod(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL7, "lpMat")], sideeffects=False), StdMethod(HRESULT, "SetLight", [(DWORD, "dwLightIndex"), (LPD3DLIGHT7, "lpLight")]), StdMethod(HRESULT, "GetLight", [(DWORD, "dwLightIndex"), (LPD3DLIGHT7, "lpLight")], sideeffects=False), StdMethod(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), (DWORD, "dwRenderState")]), StdMethod(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "dwRenderStateType"), Out(LPDWORD, "lpdwRenderState")], sideeffects=False), StdMethod(HRESULT, "BeginStateBlock", []), StdMethod(HRESULT, "EndStateBlock", [Out(LPDWORD, "lpdwBlockHandle")]), StdMethod(HRESULT, "PreLoad", [(LPDIRECTDRAWSURFACE7, "lpddsTexture")]), StdMethod(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DFVF, "d3dvtVertexType"), (Blob(VOID, "dwVertexCount * _getVertexSize(d3dvtVertexType)"), "lpvVertices"), (DWORD, "dwVertexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DFVF, "d3dvtVertexType"), (Blob(VOID, "dwVertexCount * _getVertexSize(d3dvtVertexType)"), "lpvVertices"), (DWORD, "dwVertexCount"), (LPWORD, "dwIndices"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "lpD3DClipStatus")]), StdMethod(HRESULT, "GetClipStatus", [Out(LPD3DCLIPSTATUS, "lpD3DClipStatus")], sideeffects=False), StdMethod(HRESULT, "DrawPrimitiveStrided", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DFVF, "dwVertexType"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "lpD3DDrawPrimStrideData"), (DWORD, "dwVertexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitiveStrided", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (D3DFVF, "dwVertexType"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "lpD3DDrawPrimStrideData"), (DWORD, "dwVertexCount"), (LPWORD, "lpIndex"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawPrimitiveVB", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (LPDIRECT3DVERTEXBUFFER7, "lpD3DVertexBuf"), (DWORD, "dwStartVertex"), (DWORD, "dwNumVertices"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "DrawIndexedPrimitiveVB", [(D3DPRIMITIVETYPE, "d3dptPrimitiveType"), (LPDIRECT3DVERTEXBUFFER7, "lpD3DVertexBuf"), (DWORD, "dwStartVertex"), (DWORD, "dwNumVertices"), (LPWORD, "lpwIndices"), (DWORD, "dwIndexCount"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "ComputeSphereVisibility", [(LPD3DVECTOR, "lpCenters"), (LPD3DVALUE, "lpRadii"), (DWORD, "dwNumSpheres"), (DWORD, "dwFlags"), (LPDWORD, "lpdwReturnValues")]), StdMethod(HRESULT, "GetTexture", [(DWORD, "dwStage"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lpTexture")]), StdMethod(HRESULT, "SetTexture", [(DWORD, "dwStage"), (LPDIRECTDRAWSURFACE7, "lpTexture")]), StdMethod(HRESULT, "GetTextureStageState", [(DWORD, "dwStage"), (D3DTEXTURESTAGESTATETYPE, "d3dTexStageStateType"), Out(LPDWORD, "lpdwState")], sideeffects=False), StdMethod(HRESULT, "SetTextureStageState", [(DWORD, "dwStage"), (D3DTEXTURESTAGESTATETYPE, "d3dTexStageStateType"), (DWORD, "dwState")]), StdMethod(HRESULT, "ValidateDevice", [Out(LPDWORD, "lpdwPasses")]), StdMethod(HRESULT, "ApplyStateBlock", [(DWORD, "dwBlockHandle")]), StdMethod(HRESULT, "CaptureStateBlock", [(DWORD, "dwBlockHandle")]), StdMethod(HRESULT, "DeleteStateBlock", [(DWORD, "dwBlockHandle")]), StdMethod(HRESULT, "CreateStateBlock", [(D3DSTATEBLOCKTYPE, "d3dsbType"), Out(LPDWORD, "lpdwBlockHandle")]), StdMethod(HRESULT, "Load", [(LPDIRECTDRAWSURFACE7, "lpDestTex"), (LPPOINT, "lpDestPoint"), (LPDIRECTDRAWSURFACE7, "lpSrcTex"), (LPRECT, "lprcSrcRect"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "LightEnable", [(DWORD, "dwLightIndex"), (BOOL, "bEnable")]), StdMethod(HRESULT, "GetLightEnable", [(DWORD, "dwLightIndex"), Out(Pointer(BOOL), "pbEnable")], sideeffects=False), StdMethod(HRESULT, "SetClipPlane", [(DWORD, "dwIndex"), (Array(D3DVALUE, 4), "pPlaneEquation")]), StdMethod(HRESULT, "GetClipPlane", [(DWORD, "dwIndex"), Out(Array(D3DVALUE, 4), "pPlaneEquation")], sideeffects=False), StdMethod(HRESULT, "GetInfo", [(DWORD, "dwDevInfoID"), Out(LPVOID, "pDevInfoStruct"), (DWORD, "dwSize")], sideeffects=False), ] IDirect3DExecuteBuffer.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3DDEVICE, "lpDirect3DDevice"), (LPD3DEXECUTEBUFFERDESC, "lpDesc")]), StdMethod(HRESULT, "Lock", [(LPD3DEXECUTEBUFFERDESC, "lpDesc")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "SetExecuteData", [(LPD3DEXECUTEDATA, "lpData")]), StdMethod(HRESULT, "GetExecuteData", [Out(LPD3DEXECUTEDATA, "lpData")], sideeffects=False), StdMethod(HRESULT, "Validate", [(LPDWORD, "lpdwOffset"), (LPD3DVALIDATECALLBACK, "lpFunc"), (LPVOID, "lpUserArg"), (DWORD, "dwReserved")]), StdMethod(HRESULT, "Optimize", [(DWORD, "dwDummy")]), ] IDirect3DLight.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3D, "lpDirect3D")]), StdMethod(HRESULT, "SetLight", [(LPD3DLIGHT, "lpLight")]), StdMethod(HRESULT, "GetLight", [Out(LPD3DLIGHT, "lpLight")], sideeffects=False), ] IDirect3DMaterial.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3D, "lpDirect3D")]), StdMethod(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "lpMat")]), StdMethod(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "lpMat")], sideeffects=False), StdMethod(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE, "lpDirect3DDevice"), Out(LPD3DMATERIALHANDLE, "lpHandle")]), StdMethod(HRESULT, "Reserve", []), StdMethod(HRESULT, "Unreserve", []), ] IDirect3DMaterial2.methods += [ StdMethod(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "lpMat")]), StdMethod(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "lpMat")], sideeffects=False), StdMethod(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE2, "lpDirect3DDevice2"), Out(LPD3DMATERIALHANDLE, "lpHandle")]), ] IDirect3DMaterial3.methods += [ StdMethod(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "lpMat")]), StdMethod(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "lpMat")], sideeffects=False), StdMethod(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE3, "lpDirect3DDevice3"), Out(LPD3DMATERIALHANDLE, "lpHandle")]), ] IDirect3DTexture.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3DDEVICE, "lpDirect3DDevice"), (LPDIRECTDRAWSURFACE, "lpDDSurface")]), StdMethod(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE, "lpDirect3DDevice"), Out(LPD3DTEXTUREHANDLE, "lpHandle")]), StdMethod(HRESULT, "PaletteChanged", [(DWORD, "dwStart"), (DWORD, "dwCount")]), StdMethod(HRESULT, "Load", [(LPDIRECT3DTEXTURE, "lpD3DTexture")]), StdMethod(HRESULT, "Unload", []), ] IDirect3DTexture2.methods += [ StdMethod(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE2, "lpDirect3DDevice2"), Out(LPD3DTEXTUREHANDLE, "lpHandle")]), StdMethod(HRESULT, "PaletteChanged", [(DWORD, "dwStart"), (DWORD, "dwCount")]), StdMethod(HRESULT, "Load", [(LPDIRECT3DTEXTURE2, "lpD3DTexture2")]), ] IDirect3DViewport.methods += [ StdMethod(HRESULT, "Initialize", [(LPDIRECT3D, "lpDirect3D")]), StdMethod(HRESULT, "GetViewport", [Out(LPD3DVIEWPORT, "lpData")], sideeffects=False), StdMethod(HRESULT, "SetViewport", [(LPD3DVIEWPORT, "lpData")]), StdMethod(HRESULT, "TransformVertices", [(DWORD, "dwVertexCount"), (LPD3DTRANSFORMDATA, "lpData"), (DWORD, "dwFlags"), (LPDWORD, "lpOffScreen")]), StdMethod(HRESULT, "LightElements", [(DWORD, "dwElementCount"), (LPD3DLIGHTDATA, "lpData")]), StdMethod(HRESULT, "SetBackground", [(D3DMATERIALHANDLE, "hMat")]), StdMethod(HRESULT, "GetBackground", [Out(LPD3DMATERIALHANDLE, "lphMat"), Out(LPBOOL, "lpValid")], sideeffects=False), StdMethod(HRESULT, "SetBackgroundDepth", [(LPDIRECTDRAWSURFACE, "lpDDSurface")]), StdMethod(HRESULT, "GetBackgroundDepth", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), Out(LPBOOL, "lpValid")]), StdMethod(HRESULT, "Clear", [(DWORD, "dwCount"), (Array(D3DRECT, "dwCount"), "lpRects"), (D3DCLEAR, "dwFlags")]), StdMethod(HRESULT, "AddLight", [(LPDIRECT3DLIGHT, "lpDirect3DLight")]), StdMethod(HRESULT, "DeleteLight", [(LPDIRECT3DLIGHT, "lpDirect3DLight")]), StdMethod(HRESULT, "NextLight", [(LPDIRECT3DLIGHT, "lpDirect3DLight"), Out(Pointer(LPDIRECT3DLIGHT), "lplpDirect3DLight"), (DWORD, "dwFlags")]), ] IDirect3DViewport2.methods += [ StdMethod(HRESULT, "GetViewport2", [Out(LPD3DVIEWPORT2, "lpData")], sideeffects=False), StdMethod(HRESULT, "SetViewport2", [(LPD3DVIEWPORT2, "lpData")]), ] IDirect3DViewport3.methods += [ StdMethod(HRESULT, "SetBackgroundDepth2", [(LPDIRECTDRAWSURFACE4, "lpDDS")]), StdMethod(HRESULT, "GetBackgroundDepth2", [Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDS"), (LPBOOL, "lpValid")]), StdMethod(HRESULT, "Clear2", [(DWORD, "dwCount"), (Array(D3DRECT, "dwCount"), "lpRects"), (D3DCLEAR, "dwFlags"), (D3DCOLOR, "dwColor"), (D3DVALUE, "dvZ"), (DWORD, "dwStencil")]), ] IDirect3DVertexBuffer.methods += [ StdMethod(HRESULT, "Lock", [(DirectDrawSurfaceLockFlags, "dwFlags"), Out(Pointer(LPVOID), "lplpData"), (LPDWORD, "lpdwSize")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "ProcessVertices", [(DWORD, "dwVertexOp"), (DWORD, "dwDestIndex"), (DWORD, "dwCount"), (LPDIRECT3DVERTEXBUFFER, "lpSrcBuffer"), (DWORD, "dwSrcIndex"), (LPDIRECT3DDEVICE3, "lpD3DDevice"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "GetVertexBufferDesc", [Out(LPD3DVERTEXBUFFERDESC, "lpD3DVertexBufferDesc")], sideeffects=False), StdMethod(HRESULT, "Optimize", [(LPDIRECT3DDEVICE3, "lpD3DDevice"), (DWORD, "dwFlags")]), ] IDirect3DVertexBuffer7.methods += [ StdMethod(HRESULT, "Lock", [(DirectDrawSurfaceLockFlags, "dwFlags"), Out(Pointer(LPVOID), "lplpData"), (LPDWORD, "lpdwSize")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "ProcessVertices", [(DWORD, "dwVertexOp"), (DWORD, "dwDestIndex"), (DWORD, "dwCount"), (LPDIRECT3DVERTEXBUFFER7, "lpSrcBuffer"), (DWORD, "dwSrcIndex"), (LPDIRECT3DDEVICE7, "lpD3DDevice"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "GetVertexBufferDesc", [Out(LPD3DVERTEXBUFFERDESC, "lpD3DVertexBufferDesc")], sideeffects=False), StdMethod(HRESULT, "Optimize", [(LPDIRECT3DDEVICE7, "lpD3DDevice"), (DWORD, "dwFlags")]), StdMethod(HRESULT, "ProcessVerticesStrided", [(DWORD, "dwVertexOp"), (DWORD, "dwDestIndex"), (DWORD, "dwCount"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "lpStrideData"), (DWORD, "dwVertexTypeDesc"), (LPDIRECT3DDEVICE7, "lpD3DDevice"), (DWORD, "dwFlags")]), ] interfaces = [ IDirectDraw, IDirectDraw2, IDirectDraw4, IDirectDraw7, IDirect3D, IDirect3D2, IDirect3D3, IDirect3D7, ] ddraw.addInterfaces(interfaces) tmpNnpnZF/specs/winapi.py0000664000175000017500000001333712543167424014751 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Win32 API type description.""" from stdapi import * SHORT = Alias("SHORT", Short) USHORT = Alias("USHORT", UShort) INT = Alias("INT", Int) UINT = Alias("UINT", UInt) LONG = Alias("LONG", Long) ULONG = Alias("ULONG", ULong) LONGLONG = Alias("LONGLONG", LongLong) FLOAT = Alias("FLOAT", Float) INT8 = Alias("INT8", Int8) UINT8 = Alias("UINT8", UInt8) INT16 = Alias("INT16", Int16) UINT16 = Alias("UINT16", UInt16) INT32 = Alias("INT32", Int32) UINT32 = Alias("UINT32", UInt32) INT64 = Alias("INT64", Int64) UINT64 = Alias("UINT64", UInt64) FLOAT32 = Alias("FLOAT32", Float) BYTE = Alias("BYTE", UInt8) WORD = Alias("WORD", UInt16) DWORD = Alias("DWORD", UInt32) UCHAR = Alias("UCHAR", UChar) WCHAR = Alias("WCHAR", Short) BOOL = Enum("BOOL", [ "FALSE", "TRUE", ]) LPLONG = Pointer(LONG) LPWORD = Pointer(WORD) LPDWORD = Pointer(DWORD) LPBOOL = Pointer(BOOL) LPSTR = CString LPCSTR = ConstCString LPWSTR = WString LPCWSTR = ConstWString LARGE_INTEGER = Struct("LARGE_INTEGER", [ (LONGLONG, 'QuadPart'), ]) SIZE_T = Alias("SIZE_T", SizeT) VOID = Void PVOID = OpaquePointer(VOID) LPVOID = PVOID LPCVOID = OpaquePointer(Const(VOID)) def DECLARE_HANDLE(expr): return Handle(expr, IntPointer(expr)) HANDLE = DECLARE_HANDLE("HANDLE") HWND = DECLARE_HANDLE("HWND") HDC = DECLARE_HANDLE("HDC") HMONITOR = DECLARE_HANDLE("HMONITOR") GUID = Struct("GUID", [ (DWORD, "Data1"), (WORD, "Data2"), (WORD, "Data3"), (Array(BYTE, 8), "Data4"), ]) LPGUID = Pointer(GUID) REFGUID = Alias("REFGUID", Reference(GUID)) IID = Alias("IID", GUID) REFIID = Alias("REFIID", Reference(IID)) CLSID = Alias("CLSID", GUID) REFCLSID = Alias("REFCLSID", Reference(CLSID)) LUID = Struct("LUID", [ (DWORD, "LowPart"), (LONG, "HighPart"), ]) POINT = Struct("POINT", ( (LONG, "x"), (LONG, "y"), )) LPPOINT = Pointer(POINT) SIZE = Struct("SIZE", ( (LONG, "cx"), (LONG, "cy"), )) LPSIZE = Pointer(SIZE) RECT = Struct("RECT", ( (LONG, "left"), (LONG, "top"), (LONG, "right"), (LONG, "bottom"), )) LPRECT = Pointer(RECT) PALETTEENTRY = Struct("PALETTEENTRY", ( (BYTE, "peRed"), (BYTE, "peGreen"), (BYTE, "peBlue"), (BYTE, "peFlags"), )) LPPALETTEENTRY = Pointer(PALETTEENTRY) RGNDATAHEADER = Struct("RGNDATAHEADER", [ (DWORD, "dwSize"), (DWORD, "iType"), (DWORD, "nCount"), (DWORD, "nRgnSize"), (RECT, "rcBound"), ]) RGNDATA = Struct("RGNDATA", [ (RGNDATAHEADER, "rdh"), #(Char, "Buffer[1]"), ]) LPRGNDATA = Pointer(RGNDATA) HMODULE = IntPointer("HMODULE") FILETIME = Struct("FILETIME", [ (DWORD, "dwLowDateTime"), (DWORD, "dwHighDateTime"), ]) COLORREF = Alias("COLORREF", DWORD) LOGFONTW = Struct("LOGFONTW", [ (LONG, "lfHeight"), (LONG, "lfWidth"), (LONG, "lfEscapement"), (LONG, "lfOrientation"), (LONG, "lfWeight"), (BYTE, "lfItalic"), (BYTE, "lfUnderline"), (BYTE, "lfStrikeOut"), (BYTE, "lfCharSet"), (BYTE, "lfOutPrecision"), (BYTE, "lfClipPrecision"), (BYTE, "lfQuality"), (BYTE, "lfPitchAndFamily"), (WString, "lfFaceName"), ]) SECURITY_ATTRIBUTES = Struct("SECURITY_ATTRIBUTES", [ (DWORD, "nLength"), (LPVOID, "lpSecurityDescriptor"), (BOOL, "bInheritHandle"), ]) # http://msdn.microsoft.com/en-us/library/ff485842.aspx # http://blogs.msdn.com/b/kirillosenkov/archive/2012/05/14/a-list-of-common-hresult-error-codes.aspx HRESULT = Enum("HRESULT", [ "S_OK", # 0x00000000 "S_FALSE", # 0x00000001 "E_PENDING", # 0x8000000A "E_NOTIMPL", # 0x80004001 "E_NOINTERFACE", # 0x80004002 "E_POINTER", # 0x80004003 "E_ABORT", # 0x80004004 "E_FAIL", # 0x80004005 "E_UNEXPECTED", # 0x8000FFFF "E_ACCESSDENIED", # 0x80070005 "E_HANDLE", # 0x80070006 "E_OUTOFMEMORY", # 0x8007000E "E_INVALIDARG", # 0x80070057 ]) def MAKE_HRESULT(errors, ok = "S_OK", false = "S_FALSE"): # Always update global HRESULT HRESULT.values.extend(errors) if ok == "S_OK" and false == "S_FALSE": # Just return global HRESULT return HRESULT else: # Return a variation values = [ok, false] assert HRESULT.values[0] == "S_OK" assert HRESULT.values[1] == "S_FALSE" values.extend(HRESULT.values[2:]) return Enum("HRESULT", values) IUnknown = Interface("IUnknown") IUnknown.methods = ( StdMethod(HRESULT, "QueryInterface", ((REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppvObj"))), StdMethod(ULONG, "AddRef", ()), StdMethod(ULONG, "Release", ()), ) tmpNnpnZF/specs/ddraw.py0000664000175000017500000021730012543167424014557 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """ddraw.h""" from winapi import * DirectDrawOptSurfaceDescFlags = Flags(DWORD, [ "DDOSD_GUID", "DDOSD_COMPRESSION_RATIO", "DDOSD_SCAPS", "DDOSD_OSCAPS", "DDOSD_ALL", ]) DirectDrawOptSurfaceDescCapsFlags = Flags(DWORD, [ "DDOSDCAPS_OPTCOMPRESSED", "DDOSDCAPS_OPTREORDERED", "DDOSDCAPS_MONOLITHICMIPMAP", ]) DirectDrawGetDeviceIdentifierFlags = Flags(DWORD, [ "DDGDI_GETHOSTIDENTIFIER", ]) IDirectDraw = Interface("IDirectDraw", IUnknown) IDirectDraw2 = Interface("IDirectDraw2", IUnknown) IDirectDraw4 = Interface("IDirectDraw4", IUnknown) IDirectDraw7 = Interface("IDirectDraw7", IUnknown) IDirectDrawPalette = Interface("IDirectDrawPalette", IUnknown) IDirectDrawClipper = Interface("IDirectDrawClipper", IUnknown) IDirectDrawSurface = Interface("IDirectDrawSurface", IUnknown) IDirectDrawSurface2 = Interface("IDirectDrawSurface2", IUnknown) IDirectDrawSurface3 = Interface("IDirectDrawSurface3", IUnknown) IDirectDrawSurface4 = Interface("IDirectDrawSurface4", IUnknown) IDirectDrawSurface7 = Interface("IDirectDrawSurface7", IUnknown) IDirectDrawColorControl = Interface("IDirectDrawColorControl", IUnknown) IDirectDrawGammaControl = Interface("IDirectDrawGammaControl", IUnknown) LPUNKNOWN = ObjPointer(IUnknown) LPDIRECTDRAW = ObjPointer(IDirectDraw) LPDIRECTDRAW2 = ObjPointer(IDirectDraw2) LPDIRECTDRAW4 = ObjPointer(IDirectDraw4) LPDIRECTDRAW7 = ObjPointer(IDirectDraw7) LPDIRECTDRAWSURFACE = ObjPointer(IDirectDrawSurface) LPDIRECTDRAWSURFACE2 = ObjPointer(IDirectDrawSurface2) LPDIRECTDRAWSURFACE3 = ObjPointer(IDirectDrawSurface3) LPDIRECTDRAWSURFACE4 = ObjPointer(IDirectDrawSurface4) LPDIRECTDRAWSURFACE7 = ObjPointer(IDirectDrawSurface7) LPDIRECTDRAWPALETTE = ObjPointer(IDirectDrawPalette) LPDIRECTDRAWCLIPPER = ObjPointer(IDirectDrawClipper) LPDIRECTDRAWCOLORCONTROL = ObjPointer(IDirectDrawColorControl) LPDIRECTDRAWGAMMACONTROL = ObjPointer(IDirectDrawGammaControl) DDARGB = Struct("DDARGB", [ (BYTE, "blue"), (BYTE, "green"), (BYTE, "red"), (BYTE, "alpha"), ]) LPDDARGB = Pointer(DDARGB) DDRGBA = Struct("DDRGBA", [ (BYTE, "red"), (BYTE, "green"), (BYTE, "blue"), (BYTE, "alpha"), ]) LPDDRGBA = Pointer(DDRGBA) DDCOLORKEY = Struct("DDCOLORKEY", [ (DWORD, "dwColorSpaceLowValue"), (DWORD, "dwColorSpaceHighValue"), ]) LPDDCOLORKEY = Pointer(DDCOLORKEY) DDBLTFX = Struct("DDBLTFX", [ (DWORD, "dwSize"), (DWORD, "dwDDFX"), (DWORD, "dwROP"), (DWORD, "dwDDROP"), (DWORD, "dwRotationAngle"), (DWORD, "dwZBufferOpCode"), (DWORD, "dwZBufferLow"), (DWORD, "dwZBufferHigh"), (DWORD, "dwZBufferBaseDest"), (DWORD, "dwZDestConstBitDepth"), (DWORD, "dwZDestConst"), (LPDIRECTDRAWSURFACE, "lpDDSZBufferDest"), (DWORD, "dwZSrcConstBitDepth"), (DWORD, "dwZSrcConst"), (LPDIRECTDRAWSURFACE, "lpDDSZBufferSrc"), (DWORD, "dwAlphaEdgeBlendBitDepth"), (DWORD, "dwAlphaEdgeBlend"), (DWORD, "dwReserved"), (DWORD, "dwAlphaDestConstBitDepth"), (DWORD, "dwAlphaDestConst"), (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"), (DWORD, "dwAlphaSrcConstBitDepth"), (DWORD, "dwAlphaSrcConst"), (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"), (DWORD, "dwFillColor"), (DWORD, "dwFillDepth"), (DWORD, "dwFillPixel"), (LPDIRECTDRAWSURFACE, "lpDDSPattern"), (DDCOLORKEY, "ddckDestColorkey"), (DDCOLORKEY, "ddckSrcColorkey"), ]) LPDDBLTFX = Pointer(DDBLTFX) DirectDrawCapsFlags = Flags(DWORD, [ "DDSCAPS_RESERVED1", "DDSCAPS_ALPHA", "DDSCAPS_BACKBUFFER", "DDSCAPS_COMPLEX", "DDSCAPS_FLIP", "DDSCAPS_FRONTBUFFER", "DDSCAPS_OFFSCREENPLAIN", "DDSCAPS_OVERLAY", "DDSCAPS_PALETTE", "DDSCAPS_PRIMARYSURFACE", "DDSCAPS_RESERVED3", # was DDSCAPS_PRIMARYSURFACELEFT "DDSCAPS_SYSTEMMEMORY", "DDSCAPS_TEXTURE", "DDSCAPS_3DDEVICE", "DDSCAPS_VIDEOMEMORY", "DDSCAPS_VISIBLE", "DDSCAPS_WRITEONLY", "DDSCAPS_ZBUFFER", "DDSCAPS_OWNDC", "DDSCAPS_LIVEVIDEO", "DDSCAPS_HWCODEC", "DDSCAPS_MODEX", "DDSCAPS_MIPMAP", "DDSCAPS_RESERVED2", "DDSCAPS_ALLOCONLOAD", "DDSCAPS_VIDEOPORT", "DDSCAPS_LOCALVIDMEM", "DDSCAPS_NONLOCALVIDMEM", "DDSCAPS_STANDARDVGAMODE", "DDSCAPS_OPTIMIZED", ]) DirectDrawCapabilityFlags2 = Flags(DWORD, [ "DDSCAPS2_RESERVED4", # was DDSCAPS2_HARDWAREDEINTERLACE "DDSCAPS2_HINTDYNAMIC", "DDSCAPS2_HINTSTATIC", "DDSCAPS2_TEXTUREMANAGE", "DDSCAPS2_RESERVED1", "DDSCAPS2_RESERVED2", "DDSCAPS2_OPAQUE", "DDSCAPS2_HINTANTIALIASING", "DDSCAPS2_CUBEMAP", "DDSCAPS2_CUBEMAP_ALLFACES", "DDSCAPS2_CUBEMAP_POSITIVEX", "DDSCAPS2_CUBEMAP_NEGATIVEX", "DDSCAPS2_CUBEMAP_POSITIVEY", "DDSCAPS2_CUBEMAP_NEGATIVEY", "DDSCAPS2_CUBEMAP_POSITIVEZ", "DDSCAPS2_CUBEMAP_NEGATIVEZ", "DDSCAPS2_MIPMAPSUBLEVEL", "DDSCAPS2_D3DTEXTUREMANAGE", "DDSCAPS2_DONOTPERSIST", "DDSCAPS2_STEREOSURFACELEFT", "DDSCAPS2_VOLUME", "DDSCAPS2_NOTUSERLOCKABLE", "DDSCAPS2_POINTS", "DDSCAPS2_RTPATCHES", "DDSCAPS2_NPATCHES", "DDSCAPS2_RESERVED3", "DDSCAPS2_DISCARDBACKBUFFER", "DDSCAPS2_ENABLEALPHACHANNEL", "DDSCAPS2_EXTENDEDFORMATPRIMARY", "DDSCAPS2_ADDITIONALPRIMARY", ]) DirectDrawCapabilityFlags3 = Flags(DWORD, [ "DDSCAPS3_MULTISAMPLE_MASK", "DDSCAPS3_MULTISAMPLE_QUALITY_MASK", "DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT", "DDSCAPS3_RESERVED1", "DDSCAPS3_RESERVED2", "DDSCAPS3_LIGHTWEIGHTMIPMAP", "DDSCAPS3_AUTOGENMIPMAP", "DDSCAPS3_DMAP", "DDSCAPS3_CREATESHAREDRESOURCE", "DDSCAPS3_READONLYRESOURCE", "DDSCAPS3_OPENSHAREDRESOURCE", ]) DDSCAPS = Struct("DDSCAPS", [ (DirectDrawCapsFlags, "dwCaps"), ]) LPDDSCAPS = Pointer(DDSCAPS) DDOSDCAPSFlags = Flags(DWORD, [ "DDOSDCAPS_OPTCOMPRESSED", "DDOSDCAPS_OPTREORDERED", "DDOSDCAPS_MONOLITHICMIPMAP", "DDOSDCAPS_VALIDSCAPS", "DDOSDCAPS_VALIDOSCAPS", ]) DDOSCAPS = Struct("DDOSCAPS", [ (DDOSDCAPSFlags, "dwCaps"), ]) LPDDOSCAPS = Pointer(DDOSCAPS) DDSCAPSEX = Struct("DDSCAPSEX", [ (DirectDrawCapabilityFlags2, "dwCaps2"), (DirectDrawCapabilityFlags3, "dwCaps3"), (DWORD, "dwCaps4"), ]) DDSCAPS2 = Struct("DDSCAPS2", [ (DirectDrawCapsFlags, "dwCaps"), (DirectDrawCapabilityFlags2, "dwCaps2"), (DirectDrawCapabilityFlags3, "dwCaps3"), (DWORD, "dwCaps4"), ]) LPDDSCAPS2 = Pointer(DDSCAPS2) DDCAPS_DX1 = Struct("DDCAPS_DX1", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwCaps2"), (DWORD, "dwCKeyCaps"), (DWORD, "dwFXCaps"), (DWORD, "dwFXAlphaCaps"), (DWORD, "dwPalCaps"), (DWORD, "dwSVCaps"), (DWORD, "dwAlphaBltConstBitDepths"), (DWORD, "dwAlphaBltPixelBitDepths"), (DWORD, "dwAlphaBltSurfaceBitDepths"), (DWORD, "dwAlphaOverlayConstBitDepths"), (DWORD, "dwAlphaOverlayPixelBitDepths"), (DWORD, "dwAlphaOverlaySurfaceBitDepths"), (DWORD, "dwZBufferBitDepths"), (DWORD, "dwVidMemTotal"), (DWORD, "dwVidMemFree"), (DWORD, "dwMaxVisibleOverlays"), (DWORD, "dwCurrVisibleOverlays"), (DWORD, "dwNumFourCCCodes"), (DWORD, "dwAlignBoundarySrc"), (DWORD, "dwAlignSizeSrc"), (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), (DWORD, "dwMinLiveVideoStretch"), (DWORD, "dwMaxLiveVideoStretch"), (DWORD, "dwMinHwCodecStretch"), (DWORD, "dwMaxHwCodecStretch"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), ]) LPDDCAPS_DX1 = Pointer(DDCAPS_DX1) DDCAPS_DX3 = Struct("DDCAPS_DX3", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwCaps2"), (DWORD, "dwCKeyCaps"), (DWORD, "dwFXCaps"), (DWORD, "dwFXAlphaCaps"), (DWORD, "dwPalCaps"), (DWORD, "dwSVCaps"), (DWORD, "dwAlphaBltConstBitDepths"), (DWORD, "dwAlphaBltPixelBitDepths"), (DWORD, "dwAlphaBltSurfaceBitDepths"), (DWORD, "dwAlphaOverlayConstBitDepths"), (DWORD, "dwAlphaOverlayPixelBitDepths"), (DWORD, "dwAlphaOverlaySurfaceBitDepths"), (DWORD, "dwZBufferBitDepths"), (DWORD, "dwVidMemTotal"), (DWORD, "dwVidMemFree"), (DWORD, "dwMaxVisibleOverlays"), (DWORD, "dwCurrVisibleOverlays"), (DWORD, "dwNumFourCCCodes"), (DWORD, "dwAlignBoundarySrc"), (DWORD, "dwAlignSizeSrc"), (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), (DWORD, "dwMinLiveVideoStretch"), (DWORD, "dwMaxLiveVideoStretch"), (DWORD, "dwMinHwCodecStretch"), (DWORD, "dwMaxHwCodecStretch"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwReserved4"), (DWORD, "dwReserved5"), (DWORD, "dwReserved6"), ]) LPDDCAPS_DX3 = Pointer(DDCAPS_DX3) DDCAPS_DX5 = Struct("DDCAPS_DX5", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwCaps2"), (DWORD, "dwCKeyCaps"), (DWORD, "dwFXCaps"), (DWORD, "dwFXAlphaCaps"), (DWORD, "dwPalCaps"), (DWORD, "dwSVCaps"), (DWORD, "dwAlphaBltConstBitDepths"), (DWORD, "dwAlphaBltPixelBitDepths"), (DWORD, "dwAlphaBltSurfaceBitDepths"), (DWORD, "dwAlphaOverlayConstBitDepths"), (DWORD, "dwAlphaOverlayPixelBitDepths"), (DWORD, "dwAlphaOverlaySurfaceBitDepths"), (DWORD, "dwZBufferBitDepths"), (DWORD, "dwVidMemTotal"), (DWORD, "dwVidMemFree"), (DWORD, "dwMaxVisibleOverlays"), (DWORD, "dwCurrVisibleOverlays"), (DWORD, "dwNumFourCCCodes"), (DWORD, "dwAlignBoundarySrc"), (DWORD, "dwAlignSizeSrc"), (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), (DWORD, "dwMinLiveVideoStretch"), (DWORD, "dwMaxLiveVideoStretch"), (DWORD, "dwMinHwCodecStretch"), (DWORD, "dwMaxHwCodecStretch"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), (DWORD, "dwNLVBCaps"), (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), ]) LPDDCAPS_DX5 = Pointer(DDCAPS_DX5) DDCAPS_DX6 = Struct("DDCAPS_DX6", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwCaps2"), (DWORD, "dwCKeyCaps"), (DWORD, "dwFXCaps"), (DWORD, "dwFXAlphaCaps"), (DWORD, "dwPalCaps"), (DWORD, "dwSVCaps"), (DWORD, "dwAlphaBltConstBitDepths"), (DWORD, "dwAlphaBltPixelBitDepths"), (DWORD, "dwAlphaBltSurfaceBitDepths"), (DWORD, "dwAlphaOverlayConstBitDepths"), (DWORD, "dwAlphaOverlayPixelBitDepths"), (DWORD, "dwAlphaOverlaySurfaceBitDepths"), (DWORD, "dwZBufferBitDepths"), (DWORD, "dwVidMemTotal"), (DWORD, "dwVidMemFree"), (DWORD, "dwMaxVisibleOverlays"), (DWORD, "dwCurrVisibleOverlays"), (DWORD, "dwNumFourCCCodes"), (DWORD, "dwAlignBoundarySrc"), (DWORD, "dwAlignSizeSrc"), (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsOldCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), (DWORD, "dwMinLiveVideoStretch"), (DWORD, "dwMaxLiveVideoStretch"), (DWORD, "dwMinHwCodecStretch"), (DWORD, "dwMaxHwCodecStretch"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), (DWORD, "dwNLVBCaps"), (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), (DDSCAPS2, "ddsCaps"), ]) LPDDCAPS_DX6 = Pointer(DDCAPS_DX6) DDCAPS_DX7 = Struct("DDCAPS_DX7", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwCaps2"), (DWORD, "dwCKeyCaps"), (DWORD, "dwFXCaps"), (DWORD, "dwFXAlphaCaps"), (DWORD, "dwPalCaps"), (DWORD, "dwSVCaps"), (DWORD, "dwAlphaBltConstBitDepths"), (DWORD, "dwAlphaBltPixelBitDepths"), (DWORD, "dwAlphaBltSurfaceBitDepths"), (DWORD, "dwAlphaOverlayConstBitDepths"), (DWORD, "dwAlphaOverlayPixelBitDepths"), (DWORD, "dwAlphaOverlaySurfaceBitDepths"), (DWORD, "dwZBufferBitDepths"), (DWORD, "dwVidMemTotal"), (DWORD, "dwVidMemFree"), (DWORD, "dwMaxVisibleOverlays"), (DWORD, "dwCurrVisibleOverlays"), (DWORD, "dwNumFourCCCodes"), (DWORD, "dwAlignBoundarySrc"), (DWORD, "dwAlignSizeSrc"), (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsOldCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), (DWORD, "dwMinLiveVideoStretch"), (DWORD, "dwMaxLiveVideoStretch"), (DWORD, "dwMinHwCodecStretch"), (DWORD, "dwMaxHwCodecStretch"), (DWORD, "dwReserved1"), (DWORD, "dwReserved2"), (DWORD, "dwReserved3"), (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), (DWORD, "dwNLVBCaps"), (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), (DDSCAPS2, "ddsCaps"), ]) LPDDCAPS_DX7 = Pointer(DDCAPS_DX7) DDCAPS = DDCAPS_DX7 LPDDCAPS = Pointer(DDCAPS) DirectDrawPixelFormatFlags = Flags(DWORD, [ "DDPF_ALPHAPIXELS", "DDPF_ALPHA", "DDPF_FOURCC", "DDPF_PALETTEINDEXED4", "DDPF_PALETTEINDEXEDTO8", "DDPF_PALETTEINDEXED8", "DDPF_RGB", "DDPF_COMPRESSED", "DDPF_RGBTOYUV", "DDPF_YUV", "DDPF_ZBUFFER", "DDPF_PALETTEINDEXED1", "DDPF_PALETTEINDEXED2", "DDPF_ZPIXELS", "DDPF_STENCILBUFFER", "DDPF_ALPHAPREMULT", "DDPF_LUMINANCE", "DDPF_BUMPLUMINANCE", "DDPF_BUMPDUDV", ]) DDPIXELFORMAT = Struct("DDPIXELFORMAT", [ (DWORD, "dwSize"), (DirectDrawPixelFormatFlags, "dwFlags"), (DWORD, "dwFourCC"), (DWORD, "dwRGBBitCount"), (DWORD, "dwYUVBitCount"), (DWORD, "dwZBufferBitDepth"), (DWORD, "dwAlphaBitDepth"), (DWORD, "dwLuminanceBitCount"), (DWORD, "dwBumpBitCount"), (DWORD, "dwPrivateFormatBitCount"), (DWORD, "dwRBitMask"), (DWORD, "dwYBitMask"), (DWORD, "dwStencilBitDepth"), (DWORD, "dwLuminanceBitMask"), (DWORD, "dwBumpDuBitMask"), (DWORD, "dwOperations"), (DWORD, "dwGBitMask"), (DWORD, "dwUBitMask"), (DWORD, "dwZBitMask"), (DWORD, "dwBumpDvBitMask"), (Struct(None, [ (WORD, "wFlipMSTypes"), (WORD, "wBltMSTypes"), ]), "MultiSampleCaps"), (DWORD, "dwBBitMask"), (DWORD, "dwVBitMask"), (DWORD, "dwStencilBitMask"), (DWORD, "dwBumpLuminanceBitMask"), (DWORD, "dwRGBAlphaBitMask"), (DWORD, "dwYUVAlphaBitMask"), (DWORD, "dwLuminanceAlphaBitMask"), (DWORD, "dwRGBZBitMask"), (DWORD, "dwYUVZBitMask"), ]) LPDDPIXELFORMAT = Pointer(DDPIXELFORMAT) DDOVERLAYFX = Struct("DDOVERLAYFX", [ (DWORD, "dwSize"), (DWORD, "dwAlphaEdgeBlendBitDepth"), (DWORD, "dwAlphaEdgeBlend"), (DWORD, "dwReserved"), (DWORD, "dwAlphaDestConstBitDepth"), (DWORD, "dwAlphaDestConst"), (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"), (DWORD, "dwAlphaSrcConstBitDepth"), (DWORD, "dwAlphaSrcConst"), (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"), (DDCOLORKEY, "dckDestColorkey"), (DDCOLORKEY, "dckSrcColorkey"), (DWORD, "dwDDFX"), (DWORD, "dwFlags"), ]) LPDDOVERLAYFX = Pointer(DDOVERLAYFX) DDBLTBATCH = Struct("DDBLTBATCH", [ (LPRECT, "lprDest"), (LPDIRECTDRAWSURFACE, "lpDDSSrc"), (LPRECT, "lprSrc"), (DWORD, "dwFlags"), (LPDDBLTFX, "lpDDBltFx"), ]) LPDDBLTBATCH = Pointer(DDBLTBATCH) DDGAMMARAMP = Struct("DDGAMMARAMP", [ (Array(WORD, 256), "red"), (Array(WORD, 256), "green"), (Array(WORD, 256), "blue"), ]) LPDDGAMMARAMP = Pointer(DDGAMMARAMP) DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [ (CString, "szDriver"), (CString, "szDescription"), (LARGE_INTEGER, "liDriverVersion"), (DWORD, "dwVendorId"), (DWORD, "dwDeviceId"), (DWORD, "dwSubSysId"), (DWORD, "dwRevision"), (GUID, "guidDeviceIdentifier"), ]) LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER) DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [ (CString, "szDriver"), (CString, "szDescription"), (LARGE_INTEGER, "liDriverVersion"), (DWORD, "dwVendorId"), (DWORD, "dwDeviceId"), (DWORD, "dwSubSysId"), (DWORD, "dwRevision"), (GUID, "guidDeviceIdentifier"), (DWORD, "dwWHQLLevel"), ]) LPDDDEVICEIDENTIFIER2 = Pointer(DDDEVICEIDENTIFIER2) LPCLIPPERCALLBACK = FunctionPointer(DWORD, "LPCLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")]) LPSURFACESTREAMINGCALLBACK = FunctionPointer(DWORD, "LPSURFACESTREAMINGCALLBACK", [DWORD]) DirectDrawSurfaceDescFlags = Flags(DWORD, [ "DDSD_CAPS", "DDSD_HEIGHT", "DDSD_WIDTH", "DDSD_PITCH", "DDSD_BACKBUFFERCOUNT", "DDSD_ZBUFFERBITDEPTH", "DDSD_ALPHABITDEPTH", "DDSD_LPSURFACE", "DDSD_PIXELFORMAT", "DDSD_CKDESTOVERLAY", "DDSD_CKDESTBLT", "DDSD_CKSRCOVERLAY", "DDSD_CKSRCBLT", "DDSD_MIPMAPCOUNT", "DDSD_REFRESHRATE", "DDSD_LINEARSIZE", "DDSD_TEXTURESTAGE", "DDSD_FVF", "DDSD_SRCVBHANDLE", "DDSD_DEPTH", "DDSD_ALL", ]) DDSURFACEDESC = Struct("DDSURFACEDESC", [ (DWORD, "dwSize"), (DirectDrawSurfaceDescFlags, "dwFlags"), (DWORD, "dwHeight"), (DWORD, "dwWidth"), (LONG, "lPitch"), (DWORD, "dwLinearSize"), (DWORD, "dwBackBufferCount"), (DWORD, "dwMipMapCount"), (DWORD, "dwZBufferBitDepth"), (DWORD, "dwRefreshRate"), (DWORD, "dwAlphaBitDepth"), (DWORD, "dwReserved"), (IntPointer("LPVOID"), "lpSurface"), (DDCOLORKEY, "ddckCKDestOverlay"), (DDCOLORKEY, "ddckCKDestBlt"), (DDCOLORKEY, "ddckCKSrcOverlay"), (DDCOLORKEY, "ddckCKSrcBlt"), (DDPIXELFORMAT, "ddpfPixelFormat"), (DDSCAPS, "ddsCaps"), ]) LPDDSURFACEDESC = Pointer(DDSURFACEDESC) DDSURFACEDESC2 = Struct("DDSURFACEDESC2", [ (DWORD, "dwSize"), (DirectDrawSurfaceDescFlags, "dwFlags"), (DWORD, "dwHeight"), (DWORD, "dwWidth"), (LONG, "lPitch"), (DWORD, "dwLinearSize"), (DWORD, "dwBackBufferCount"), (DWORD, "dwDepth"), (DWORD, "dwMipMapCount"), (DWORD, "dwRefreshRate"), (DWORD, "dwSrcVBHandle"), (DWORD, "dwAlphaBitDepth"), (DWORD, "dwReserved"), (IntPointer("LPVOID"), "lpSurface"), (DDCOLORKEY, "ddckCKDestOverlay"), (DWORD, "dwEmptyFaceColor"), (DDCOLORKEY, "ddckCKDestBlt"), (DDCOLORKEY, "ddckCKSrcOverlay"), (DDCOLORKEY, "ddckCKSrcBlt"), (DDPIXELFORMAT, "ddpfPixelFormat"), (DWORD, "dwFVF"), (DDSCAPS2, "ddsCaps"), (DWORD, "dwTextureStage"), ]) LPDDSURFACEDESC2 = Pointer(DDSURFACEDESC2) DDOSD = Flags(DWORD, [ "DDOSD_GUID", "DDOSD_COMPRESSION_RATIO", "DDOSD_SCAPS", "DDOSD_OSCAPS", "DDOSD_ALL", ]) DDOPTSURFACEDESC = Struct("DDOPTSURFACEDESC", [ (DWORD, "dwSize"), (DDOSD, "dwFlags"), (DDSCAPS2, "ddSCaps"), (DDOSCAPS, "ddOSCaps"), (GUID, "guid"), (DWORD, "dwCompressionRatio"), ]) DDCOLORCONTROL = Struct("DDCOLORCONTROL", [ (DWORD, "dwSize"), (DWORD, "dwFlags"), (LONG, "lBrightness"), (LONG, "lContrast"), (LONG, "lHue"), (LONG, "lSaturation"), (LONG, "lSharpness"), (LONG, "lGamma"), (LONG, "lColorEnable"), (DWORD, "dwReserved1"), ]) LPDDCOLORCONTROL = Pointer(DDCOLORCONTROL) DirectDrawEnumerateExFlags = Flags(DWORD, [ "DDENUM_ATTACHEDSECONDARYDEVICES", "DDENUM_DETACHEDSECONDARYDEVICES", "DDENUM_NONDISPLAYDEVICES", ]) DirectDrawCreateFlags = FakeEnum(DWORD, [ "DDCREATE_HARDWAREONLY", "DDCREATE_EMULATIONONLY", ]) DirectDrawColorControlFlags = Flags(DWORD, [ "DDCOLOR_BRIGHTNESS", "DDCOLOR_CONTRAST", "DDCOLOR_HUE", "DDCOLOR_SATURATION", "DDCOLOR_SHARPNESS", "DDCOLOR_GAMMA", "DDCOLOR_COLORENABLE", ]) DirectDrawDriverCapsFlags = Flags(DWORD, [ "DDCAPS_3D", "DDCAPS_ALIGNBOUNDARYDEST", "DDCAPS_ALIGNSIZEDEST", "DDCAPS_ALIGNBOUNDARYSRC", "DDCAPS_ALIGNSIZESRC", "DDCAPS_ALIGNSTRIDE", "DDCAPS_BLT", "DDCAPS_BLTQUEUE", "DDCAPS_BLTFOURCC", "DDCAPS_BLTSTRETCH", "DDCAPS_GDI", "DDCAPS_OVERLAY", "DDCAPS_OVERLAYCANTCLIP", "DDCAPS_OVERLAYFOURCC", "DDCAPS_OVERLAYSTRETCH", "DDCAPS_PALETTE", "DDCAPS_PALETTEVSYNC", "DDCAPS_READSCANLINE", "DDCAPS_RESERVED1", "DDCAPS_VBI", "DDCAPS_ZBLTS", "DDCAPS_ZOVERLAYS", "DDCAPS_COLORKEY", "DDCAPS_ALPHA", "DDCAPS_COLORKEYHWASSIST", "DDCAPS_NOHARDWARE", "DDCAPS_BLTCOLORFILL", "DDCAPS_BANKSWITCHED", "DDCAPS_BLTDEPTHFILL", "DDCAPS_CANCLIP", "DDCAPS_CANCLIPSTRETCHED", "DDCAPS_CANBLTSYSMEM", ]) DirectDrawDriverCapsFlags2 = Flags(DWORD, [ "DDCAPS2_CERTIFIED", "DDCAPS2_NO2DDURING3DSCENE", "DDCAPS2_VIDEOPORT", "DDCAPS2_AUTOFLIPOVERLAY", "DDCAPS2_CANBOBINTERLEAVED", "DDCAPS2_CANBOBNONINTERLEAVED", "DDCAPS2_COLORCONTROLOVERLAY", "DDCAPS2_COLORCONTROLPRIMARY", "DDCAPS2_CANDROPZ16BIT", "DDCAPS2_NONLOCALVIDMEM", "DDCAPS2_NONLOCALVIDMEMCAPS", "DDCAPS2_NOPAGELOCKREQUIRED", "DDCAPS2_WIDESURFACES", "DDCAPS2_CANFLIPODDEVEN", "DDCAPS2_CANBOBHARDWARE", "DDCAPS2_COPYFOURCC", "DDCAPS2_PRIMARYGAMMA", "DDCAPS2_CANRENDERWINDOWED", "DDCAPS2_CANCALIBRATEGAMMA", "DDCAPS2_FLIPINTERVAL", "DDCAPS2_FLIPNOVSYNC", "DDCAPS2_CANMANAGETEXTURE", "DDCAPS2_TEXMANINNONLOCALVIDMEM", "DDCAPS2_STEREO", "DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL", "DDCAPS2_RESERVED1", "DDCAPS2_CANMANAGERESOURCE", "DDCAPS2_DYNAMICTEXTURES", "DDCAPS2_CANAUTOGENMIPMAP", "DDCAPS2_CANSHARERESOURCE", ]) DirectDrawFxAlphaCapsFlags = Flags(DWORD, [ "DDFXALPHACAPS_BLTALPHAEDGEBLEND", "DDFXALPHACAPS_BLTALPHAPIXELS", "DDFXALPHACAPS_BLTALPHAPIXELSNEG", "DDFXALPHACAPS_BLTALPHASURFACES", "DDFXALPHACAPS_BLTALPHASURFACESNEG", "DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND", "DDFXALPHACAPS_OVERLAYALPHAPIXELS", "DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG", "DDFXALPHACAPS_OVERLAYALPHASURFACES", "DDFXALPHACAPS_OVERLAYALPHASURFACESNEG", ]) DirectDrawFxCapsFlags = Flags(DWORD, [ "DDFXCAPS_BLTARITHSTRETCHY", "DDFXCAPS_BLTARITHSTRETCHYN", "DDFXCAPS_BLTMIRRORLEFTRIGHT", "DDFXCAPS_BLTMIRRORUPDOWN", "DDFXCAPS_BLTROTATION", "DDFXCAPS_BLTROTATION90", "DDFXCAPS_BLTSHRINKX", "DDFXCAPS_BLTSHRINKXN", "DDFXCAPS_BLTSHRINKY", "DDFXCAPS_BLTSHRINKYN", "DDFXCAPS_BLTSTRETCHX", "DDFXCAPS_BLTSTRETCHXN", "DDFXCAPS_BLTSTRETCHY", "DDFXCAPS_BLTSTRETCHYN", "DDFXCAPS_OVERLAYARITHSTRETCHY", "DDFXCAPS_OVERLAYARITHSTRETCHYN", "DDFXCAPS_OVERLAYSHRINKX", "DDFXCAPS_OVERLAYSHRINKXN", "DDFXCAPS_OVERLAYSHRINKY", "DDFXCAPS_OVERLAYSHRINKYN", "DDFXCAPS_OVERLAYSTRETCHX", "DDFXCAPS_OVERLAYSTRETCHXN", "DDFXCAPS_OVERLAYSTRETCHY", "DDFXCAPS_OVERLAYSTRETCHYN", "DDFXCAPS_OVERLAYMIRRORLEFTRIGHT", "DDFXCAPS_OVERLAYMIRRORUPDOWN", "DDFXCAPS_OVERLAYDEINTERLACE", "DDFXCAPS_BLTALPHA", "DDFXCAPS_BLTFILTER", "DDFXCAPS_OVERLAYALPHA", "DDFXCAPS_OVERLAYFILTER", ]) DirectDrawStereoViewCapsFlags = Flags(DWORD, [ "DDSVCAPS_RESERVED1", "DDSVCAPS_RESERVED2", "DDSVCAPS_RESERVED3", "DDSVCAPS_RESERVED4", "DDSVCAPS_STEREOSEQUENTIAL", ]) DirectDrawPaletteCapsFlags = Flags(DWORD, [ "DDPCAPS_4BIT", "DDPCAPS_8BITENTRIES", "DDPCAPS_8BIT", "DDPCAPS_INITIALIZE", "DDPCAPS_PRIMARYSURFACE", "DDPCAPS_PRIMARYSURFACELEFT", "DDPCAPS_ALLOW256", "DDPCAPS_VSYNC", "DDPCAPS_1BIT", "DDPCAPS_2BIT", "DDPCAPS_ALPHA", ]) DirectDrawSurfaceSetPrivateDataConstants = FakeEnum(DWORD, [ "DDSPD_IUNKNOWNPOINTER", "DDSPD_VOLATILE", ]) DirectDrawSurfaceSetPaletteConstants = FakeEnum(DWORD, [ "DDBD_1", "DDBD_2", "DDBD_4", "DDBD_8", "DDBD_16", "DDBD_24", "DDBD_32", ]) DirectDrawSurfaceSetGetColorKeyFlags = Flags(DWORD, [ "DDCKEY_COLORSPACE", "DDCKEY_DESTBLT", "DDCKEY_DESTOVERLAY", "DDCKEY_SRCBLT", "DDCKEY_SRCOVERLAY", ]) DirectDrawColorKeyCapsFlags = Flags(DWORD, [ "DDCKEYCAPS_DESTBLT", "DDCKEYCAPS_DESTBLTCLRSPACE", "DDCKEYCAPS_DESTBLTCLRSPACEYUV", "DDCKEYCAPS_DESTBLTYUV", "DDCKEYCAPS_DESTOVERLAY", "DDCKEYCAPS_DESTOVERLAYCLRSPACE", "DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV", "DDCKEYCAPS_DESTOVERLAYONEACTIVE", "DDCKEYCAPS_DESTOVERLAYYUV", "DDCKEYCAPS_SRCBLT", "DDCKEYCAPS_SRCBLTCLRSPACE", "DDCKEYCAPS_SRCBLTCLRSPACEYUV", "DDCKEYCAPS_SRCBLTYUV", "DDCKEYCAPS_SRCOVERLAY", "DDCKEYCAPS_SRCOVERLAYCLRSPACE", "DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV", "DDCKEYCAPS_SRCOVERLAYONEACTIVE", "DDCKEYCAPS_SRCOVERLAYYUV", "DDCKEYCAPS_NOCOSTOVERLAY", ]) DirectDrawEnumSurfacesFlags = Flags(DWORD, [ "DDENUMSURFACES_ALL", "DDENUMSURFACES_MATCH", "DDENUMSURFACES_NOMATCH", "DDENUMSURFACES_CANBECREATED", "DDENUMSURFACES_DOESEXIST", ]) DirectDrawSetDisplayModeFlags = Flags(DWORD, [ "DDSDM_STANDARDVGAMODE", ]) DirectDrawEnumDisplayModesFlags = Flags(DWORD, [ "DDEDM_REFRESHRATES", "DDEDM_STANDARDVGAMODES", ]) DirectDrawSetCooperativeLevelFlags = Flags(DWORD, [ "DDSCL_FULLSCREEN", "DDSCL_ALLOWREBOOT", "DDSCL_NOWINDOWCHANGES", "DDSCL_NORMAL", "DDSCL_EXCLUSIVE", "DDSCL_ALLOWMODEX", "DDSCL_SETFOCUSWINDOW", "DDSCL_SETDEVICEWINDOW", "DDSCL_CREATEDEVICEWINDOW", "DDSCL_MULTITHREADED", "DDSCL_FPUSETUP", "DDSCL_FPUPRESERVE", ]) DirectDrawBltFlags = Flags(DWORD, [ "DDBLT_ALPHADEST", "DDBLT_ALPHADESTCONSTOVERRIDE", "DDBLT_ALPHADESTNEG", "DDBLT_ALPHADESTSURFACEOVERRIDE", "DDBLT_ALPHAEDGEBLEND", "DDBLT_ALPHASRC", "DDBLT_ALPHASRCCONSTOVERRIDE", "DDBLT_ALPHASRCNEG", "DDBLT_ALPHASRCSURFACEOVERRIDE", "DDBLT_ASYNC", "DDBLT_COLORFILL", "DDBLT_DDFX", "DDBLT_DDROPS", "DDBLT_KEYDEST", "DDBLT_KEYDESTOVERRIDE", "DDBLT_KEYSRC", "DDBLT_KEYSRCOVERRIDE", "DDBLT_ROP", "DDBLT_ROTATIONANGLE", "DDBLT_ZBUFFER", "DDBLT_ZBUFFERDESTCONSTOVERRIDE", "DDBLT_ZBUFFERDESTOVERRIDE", "DDBLT_ZBUFFERSRCCONSTOVERRIDE", "DDBLT_ZBUFFERSRCOVERRIDE", "DDBLT_WAIT", "DDBLT_DEPTHFILL", "DDBLT_DONOTWAIT", "DDBLT_PRESENTATION", "DDBLT_LAST_PRESENTATION", "DDBLT_EXTENDED_FLAGS", "DDBLT_EXTENDED_LINEAR_CONTENT", ]) DirectDrawBltFastFlags = Flags(DWORD, [ "DDBLTFAST_NOCOLORKEY", "DDBLTFAST_SRCCOLORKEY", "DDBLTFAST_DESTCOLORKEY", "DDBLTFAST_WAIT", "DDBLTFAST_DONOTWAIT", ]) DirectDrawFlipFlags = Flags(DWORD, [ "DDFLIP_WAIT", "DDFLIP_EVEN", "DDFLIP_ODD", "DDFLIP_NOVSYNC", "DDFLIP_INTERVAL2", "DDFLIP_INTERVAL3", "DDFLIP_INTERVAL4", "DDFLIP_STEREO", "DDFLIP_DONOTWAIT", ]) DirectDrawSurfaceOverlayFlags = Flags(DWORD, [ "DDOVER_ALPHADEST", "DDOVER_ALPHADESTCONSTOVERRIDE", "DDOVER_ALPHADESTNEG", "DDOVER_ALPHADESTSURFACEOVERRIDE", "DDOVER_ALPHAEDGEBLEND", "DDOVER_ALPHASRC", "DDOVER_ALPHASRCCONSTOVERRIDE", "DDOVER_ALPHASRCNEG", "DDOVER_ALPHASRCSURFACEOVERRIDE", "DDOVER_HIDE", "DDOVER_KEYDEST", "DDOVER_KEYDESTOVERRIDE", "DDOVER_KEYSRC", "DDOVER_KEYSRCOVERRIDE", "DDOVER_SHOW", "DDOVER_ADDDIRTYRECT", "DDOVER_REFRESHDIRTYRECTS", "DDOVER_REFRESHALL", "DDOVER_DDFX", "DDOVER_AUTOFLIP", "DDOVER_BOB", "DDOVER_OVERRIDEBOBWEAVE", "DDOVER_INTERLEAVED", "DDOVER_BOBHARDWARE", "DDOVER_ARGBSCALEFACTORS", "DDOVER_DEGRADEARGBSCALING", ]) DDSETSURFACEDESC = Flags(DWORD, [ #"DDSETSURFACEDESC_RECREATEDC", #"DDSETSURFACEDESC_PRESERVEDC", ]) DirectDrawSurfaceLockFlags = Flags(DWORD, [ "DDLOCK_SURFACEMEMORYPTR", "DDLOCK_WAIT", "DDLOCK_EVENT", "DDLOCK_READONLY", "DDLOCK_WRITEONLY", "DDLOCK_NOSYSLOCK", "DDLOCK_NOOVERWRITE", "DDLOCK_DISCARDCONTENTS", "DDLOCK_OKTOSWAP", "DDLOCK_DONOTWAIT", "DDLOCK_HASVOLUMETEXTUREBOXRECT", "DDLOCK_NODIRTYUPDATE", ]) DirectDrawSurfaceBltFxFlags = Flags(DWORD, [ "DDBLTFX_ARITHSTRETCHY", "DDBLTFX_MIRRORLEFTRIGHT", "DDBLTFX_MIRRORUPDOWN", "DDBLTFX_NOTEARING", "DDBLTFX_ROTATE180", "DDBLTFX_ROTATE270", "DDBLTFX_ROTATE90", "DDBLTFX_ZBUFFERRANGE", "DDBLTFX_ZBUFFERBASEDEST", ]) DirectDrawOverlayFxFlags = Flags(DWORD, [ "DDOVERFX_ARITHSTRETCHY", "DDOVERFX_MIRRORLEFTRIGHT", "DDOVERFX_MIRRORUPDOWN", "DDOVERFX_DEINTERLACE", ]) DirectDrawWaitForVerticalBlankFlags = Flags(DWORD, [ "DDWAITVB_BLOCKBEGIN", "DDWAITVB_BLOCKBEGINEVENT", "DDWAITVB_BLOCKEND", ]) DirectDrawGetFlipStatusFlags = Flags(DWORD, [ "DDGFS_CANFLIP", "DDGFS_ISFLIPDONE", ]) DirectDrawGetBltStatusFlags = Flags(DWORD, [ "DDGBS_CANBLT", "DDGBS_ISBLTDONE", ]) DirectDrawEnumOverlayZOrderFlags = Flags(DWORD, [ "DDENUMOVERLAYZ_BACKTOFRONT", "DDENUMOVERLAYZ_FRONTTOBACK", ]) DirectDrawUpdateOverlayZOrderFlags = Flags(DWORD, [ "DDOVERZ_SENDTOFRONT", "DDOVERZ_SENDTOBACK", "DDOVERZ_MOVEFORWARD", "DDOVERZ_MOVEBACKWARD", "DDOVERZ_INSERTINFRONTOF", "DDOVERZ_INSERTINBACKOF", ]) DirectDrawSetGammaRampFlags = Flags(DWORD, [ "DDSGR_CALIBRATE", ]) DirectDrawStartModeTestFlags = Flags(DWORD, [ "DDSMT_ISTESTREQUIRED", ]) DirectDrawEvaluateModeFlags = Flags(DWORD, [ "DDEM_MODEPASSED", "DDEM_MODEFAILED", ]) DDRESULT = MAKE_HRESULT(ok = "DD_OK", false = "DD_FALSE", errors = [ "DDERR_ALREADYINITIALIZED", "DDERR_CANNOTATTACHSURFACE", "DDERR_CANNOTDETACHSURFACE", "DDERR_CURRENTLYNOTAVAIL", "DDERR_EXCEPTION", "DDERR_GENERIC", "DDERR_HEIGHTALIGN", "DDERR_INCOMPATIBLEPRIMARY", "DDERR_INVALIDCAPS", "DDERR_INVALIDCLIPLIST", "DDERR_INVALIDMODE", "DDERR_INVALIDOBJECT", "DDERR_INVALIDPARAMS", "DDERR_INVALIDPIXELFORMAT", "DDERR_INVALIDRECT", "DDERR_LOCKEDSURFACES", "DDERR_NO3D", "DDERR_NOALPHAHW", "DDERR_NOSTEREOHARDWARE", "DDERR_NOSURFACELEFT", "DDERR_NOCLIPLIST", "DDERR_NOCOLORCONVHW", "DDERR_NOCOOPERATIVELEVELSET", "DDERR_NOCOLORKEY", "DDERR_NOCOLORKEYHW", "DDERR_NODIRECTDRAWSUPPORT", "DDERR_NOEXCLUSIVEMODE", "DDERR_NOFLIPHW", "DDERR_NOGDI", "DDERR_NOMIRRORHW", "DDERR_NOTFOUND", "DDERR_NOOVERLAYHW", "DDERR_OVERLAPPINGRECTS", "DDERR_NORASTEROPHW", "DDERR_NOROTATIONHW", "DDERR_NOSTRETCHHW", "DDERR_NOT4BITCOLOR", "DDERR_NOT4BITCOLORINDEX", "DDERR_NOT8BITCOLOR", "DDERR_NOTEXTUREHW", "DDERR_NOVSYNCHW", "DDERR_NOZBUFFERHW", "DDERR_NOZOVERLAYHW", "DDERR_OUTOFCAPS", "DDERR_OUTOFMEMORY", "DDERR_OUTOFVIDEOMEMORY", "DDERR_OVERLAYCANTCLIP", "DDERR_OVERLAYCOLORKEYONLYONEACTIVE", "DDERR_PALETTEBUSY", "DDERR_COLORKEYNOTSET", "DDERR_SURFACEALREADYATTACHED", "DDERR_SURFACEALREADYDEPENDENT", "DDERR_SURFACEBUSY", "DDERR_CANTLOCKSURFACE", "DDERR_SURFACEISOBSCURED", "DDERR_SURFACELOST", "DDERR_SURFACENOTATTACHED", "DDERR_TOOBIGHEIGHT", "DDERR_TOOBIGSIZE", "DDERR_TOOBIGWIDTH", "DDERR_UNSUPPORTED", "DDERR_UNSUPPORTEDFORMAT", "DDERR_UNSUPPORTEDMASK", "DDERR_INVALIDSTREAM", "DDERR_VERTICALBLANKINPROGRESS", "DDERR_WASSTILLDRAWING", "DDERR_DDSCAPSCOMPLEXREQUIRED", "DDERR_XALIGN", "DDERR_INVALIDDIRECTDRAWGUID", "DDERR_DIRECTDRAWALREADYCREATED", "DDERR_NODIRECTDRAWHW", "DDERR_PRIMARYSURFACEALREADYEXISTS", "DDERR_NOEMULATION", "DDERR_REGIONTOOSMALL", "DDERR_CLIPPERISUSINGHWND", "DDERR_NOCLIPPERATTACHED", "DDERR_NOHWND", "DDERR_HWNDSUBCLASSED", "DDERR_HWNDALREADYSET", "DDERR_NOPALETTEATTACHED", "DDERR_NOPALETTEHW", "DDERR_BLTFASTCANTCLIP", "DDERR_NOBLTHW", "DDERR_NODDROPSHW", "DDERR_OVERLAYNOTVISIBLE", "DDERR_NOOVERLAYDEST", "DDERR_INVALIDPOSITION", "DDERR_NOTAOVERLAYSURFACE", "DDERR_EXCLUSIVEMODEALREADYSET", "DDERR_NOTFLIPPABLE", "DDERR_CANTDUPLICATE", "DDERR_NOTLOCKED", "DDERR_CANTCREATEDC", "DDERR_NODC", "DDERR_WRONGMODE", "DDERR_IMPLICITLYCREATED", "DDERR_NOTPALETTIZED", "DDERR_UNSUPPORTEDMODE", "DDERR_NOMIPMAPHW", "DDERR_INVALIDSURFACETYPE", "DDERR_NOOPTIMIZEHW", "DDERR_NOTLOADED", "DDERR_NOFOCUSWINDOW", "DDERR_NOTONMIPMAPSUBLEVEL", "DDERR_DCALREADYCREATED", "DDERR_NONONLOCALVIDMEM", "DDERR_CANTPAGELOCK", "DDERR_CANTPAGEUNLOCK", "DDERR_NOTPAGELOCKED", "DDERR_MOREDATA", "DDERR_EXPIRED", "DDERR_TESTFINISHED", "DDERR_NEWMODE", "DDERR_D3DNOTINITIALIZED", "DDERR_VIDEONOTACTIVE", "DDERR_NOMONITORINFORMATION", "DDERR_NODRIVERSUPPORT", "DDERR_DEVICEDOESNTOWNSURFACE", "DDERR_NOTINITIALIZED", ]) LPDDENUMMODESCALLBACK = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID]) LPDDENUMMODESCALLBACK2 = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID]) LPDDENUMSURFACESCALLBACK = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID]) LPDDENUMSURFACESCALLBACK2 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID]) LPDDENUMSURFACESCALLBACK7 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID]) IDirectDraw.methods += [ StdMethod(DDRESULT, "Compact", []), StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]), StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]), StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "FlipToGDISurface", []), StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")], sideeffects=False), StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")], sideeffects=False), StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]), StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")], sideeffects=False), StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")], sideeffects=False), StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]), StdMethod(DDRESULT, "RestoreDisplayMode", []), StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]), StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP")]), StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]), ] IDirectDraw2.methods += [ StdMethod(DDRESULT, "Compact", []), StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]), StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "FlipToGDISurface", []), StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")], sideeffects=False), StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")], sideeffects=False), StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]), StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")], sideeffects=False), StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")], sideeffects=False), StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]), StdMethod(DDRESULT, "RestoreDisplayMode", []), StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]), StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]), StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")], sideeffects=False), ] IDirectDraw4.methods += [ StdMethod(DDRESULT, "Compact", []), StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]), StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDupDDSurface")]), StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "FlipToGDISurface", []), StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")], sideeffects=False), StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")], sideeffects=False), StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpGDIDDSSurface")]), StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")], sideeffects=False), StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")], sideeffects=False), StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]), StdMethod(DDRESULT, "RestoreDisplayMode", []), StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]), StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]), StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lpDDSurface")]), StdMethod(DDRESULT, "RestoreAllSurfaces", []), StdMethod(DDRESULT, "TestCooperativeLevel", []), StdMethod(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")], sideeffects=False), ] IDirectDraw7.methods += [ StdMethod(DDRESULT, "Compact", []), StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]), StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDupDDSurface")]), StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "FlipToGDISurface", []), StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")], sideeffects=False), StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")], sideeffects=False), StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpGDIDDSSurface")]), StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")], sideeffects=False), StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")], sideeffects=False), StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]), StdMethod(DDRESULT, "RestoreDisplayMode", []), StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]), StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]), StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lpDDSurface")]), StdMethod(DDRESULT, "RestoreAllSurfaces", []), StdMethod(DDRESULT, "TestCooperativeLevel", []), StdMethod(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER2, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "StartModeTest", [(LPSIZE, "lpModesToTest"), (DWORD, "dwNumEntries"), (DirectDrawStartModeTestFlags, "dwFlags")]), StdMethod(DDRESULT, "EvaluateMode", [(DirectDrawEvaluateModeFlags, "dwFlags"), Out(Pointer(DWORD), "pSecondsUntilTimeout")]), ] IDirectDrawPalette.methods += [ StdMethod(DDRESULT, "GetCaps", [Out(Pointer(DirectDrawPaletteCapsFlags), "lpdwCaps")], sideeffects=False), StdMethod(DDRESULT, "GetEntries", [(DWORD, "dwFlags"), (DWORD, "dwBase"), (DWORD, "dwNumEntries"), Out(Array(PALETTEENTRY, "dwNumEntries"), "lpEntries")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags"), (LPPALETTEENTRY, "lpDDColorTable")]), StdMethod(DDRESULT, "SetEntries", [(DWORD, "dwFlags"), (DWORD, "dwStartingEntry"), (DWORD, "dwCount"), (Array(PALETTEENTRY, "dwCount"), "lpEntries")]), ] IDirectDrawClipper.methods += [ StdMethod(DDRESULT, "GetClipList", [(LPRECT, "lpRect"), (LPRGNDATA, "lpClipList"), Out(LPDWORD, "lpdwSize")], sideeffects=False), StdMethod(DDRESULT, "GetHWnd", [Out(Pointer(HWND), "hWnd")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "IsClipListChanged", [Out(Pointer(BOOL), "lpbChanged")]), StdMethod(DDRESULT, "SetClipList", [(LPRGNDATA, "lpClipList"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetHWnd", [(DWORD, "dwFlags"), (HWND, "hWnd")]), ] IDirectDrawSurface.methods += [ StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE, "lpDDSAttachedSurface")]), StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]), StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]), StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSurface")]), StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")], sideeffects=False), StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]), StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDAttachedSurface")]), StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]), StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")], sideeffects=False), StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]), StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")], sideeffects=False), StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")], sideeffects=False), StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")], sideeffects=False), StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]), StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]), StdMethod(DDRESULT, "IsLost", []), StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), InOut(LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")], sideeffects=False), StdMethod(DDRESULT, "Restore", []), StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]), StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]), StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]), StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]), StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]), StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSReference")]), ] IDirectDrawSurface2.methods += [ StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE2, "lpDDSAttachedSurface")]), StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]), StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]), StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSurface")]), StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")], sideeffects=False), StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE2, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]), StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE2), "lplpDDAttachedSurface")]), StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")], sideeffects=False), StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]), StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")], sideeffects=False), StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")], sideeffects=False), StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")], sideeffects=False), StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]), StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]), StdMethod(DDRESULT, "IsLost", []), StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), InOut(LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")], sideeffects=False), StdMethod(DDRESULT, "Restore", []), StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]), StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]), StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]), StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]), StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE2, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]), StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSReference")]), StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(ObjPointer(VOID)), "lplpDD")]), StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]), ] IDirectDrawSurface3.methods += [ StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE3, "lpDDSAttachedSurface")]), StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]), StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]), StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSurface")]), StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")], sideeffects=False), StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE3, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]), StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE3), "lplpDDAttachedSurface")]), StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")], sideeffects=False), StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]), StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")], sideeffects=False), StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")], sideeffects=False), StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")], sideeffects=False), StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]), StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]), StdMethod(DDRESULT, "IsLost", []), StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), InOut(LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")], sideeffects=False), StdMethod(DDRESULT, "Restore", []), StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]), StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]), StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]), StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]), StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE3, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]), StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSReference")]), StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(ObjPointer(VOID)), "lplpDD")]), StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC, "lpDDSD"), (DWORD, "dwFlags")]), ] IDirectDrawSurface4.methods += [ StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSAttachedSurface")]), StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]), StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]), StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSurface")]), StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpfnCallback")], sideeffects=False), StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE4, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]), StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDAttachedSurface")]), StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")], sideeffects=False), StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]), StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")], sideeffects=False), StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")], sideeffects=False), StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")], sideeffects=False), StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]), StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]), StdMethod(DDRESULT, "IsLost", []), StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), InOut(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")], sideeffects=False), StdMethod(DDRESULT, "Restore", []), StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]), StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]), StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]), StdMethod(DDRESULT, "Unlock", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE4, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]), StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSReference")]), StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(ObjPointer(VOID)), "lplpDD")]), StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), InOut(LPDWORD, "lpcbBufferSize")], sideeffects=False), StdMethod(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")], sideeffects=False), StdMethod(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")]), StdMethod(DDRESULT, "ChangeUniquenessValue", []), ] IDirectDrawSurface7.methods += [ StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSAttachedSurface")]), StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]), StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]), StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSurface")]), StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")], sideeffects=False), StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpfnCallback")], sideeffects=False), StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE7, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]), StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDAttachedSurface")]), StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]), StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")]), StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]), StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")], sideeffects=False), StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")], sideeffects=False), StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]), StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")], sideeffects=False), StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")], sideeffects=False), StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]), StdMethod(DDRESULT, "IsLost", [], sideeffects=False), StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), InOut(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]), StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")], sideeffects=False), StdMethod(DDRESULT, "Restore", []), StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]), StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]), StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]), StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]), StdMethod(DDRESULT, "Unlock", [(LPRECT, "lpRect")]), StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE7, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]), StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSReference")]), StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(ObjPointer(VOID)), "lplpDD")]), StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]), StdMethod(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")], sideeffects=False), StdMethod(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), InOut(LPDWORD, "lpcbBufferSize")], sideeffects=False), StdMethod(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")], sideeffects=False), StdMethod(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")], sideeffects=False), StdMethod(DDRESULT, "ChangeUniquenessValue", []), StdMethod(DDRESULT, "SetPriority", [(DWORD, "dwPriority")]), StdMethod(DDRESULT, "GetPriority", [Out(LPDWORD, "lpdwPriority")], sideeffects=False), StdMethod(DDRESULT, "SetLOD", [(DWORD, "dwMaxLOD")]), StdMethod(DDRESULT, "GetLOD", [Out(LPDWORD, "lpdwMaxLOD")], sideeffects=False), ] IDirectDrawColorControl.methods += [ StdMethod(DDRESULT, "GetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]), StdMethod(DDRESULT, "SetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]), ] IDirectDrawGammaControl.methods += [ StdMethod(DDRESULT, "GetGammaRamp", [(DWORD, "dwFlags"), Out(LPDDGAMMARAMP, "lpRampData")]), StdMethod(DDRESULT, "SetGammaRamp", [(DirectDrawSetGammaRampFlags, "dwFlags"), (LPDDGAMMARAMP, "lpRampData")]), ] LPDDENUMCALLBACKA = FunctionPointer(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID]) LPDDENUMCALLBACKW = FunctionPointer(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID]) LPDDENUMCALLBACKEXA = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR]) LPDDENUMCALLBACKEXW = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR]) DDENUM = Flags(DWORD, [ "DDENUM_ATTACHEDSECONDARYDEVICES", "DDENUM_DETACHEDSECONDARYDEVICES", "DDENUM_NONDISPLAYDEVICES", ]) DDCREATE = Flags(DWORD, [ "DDCREATE_HARDWAREONLY", "DDCREATE_EMULATIONONLY", ]) ddraw = Module("ddraw") ddraw.addFunctions([ StdFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")], sideeffects=False), StdFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")], sideeffects=False), StdFunction(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")], sideeffects=False), StdFunction(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")], sideeffects=False), StdFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), Out(Pointer(LPDIRECTDRAW), "lplpDD"), (LPUNKNOWN, "pUnkOuter")]), StdFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), Out(Pointer(ObjPointer(Void)), "lplpDD"), (REFIID, "iid"), (LPUNKNOWN, "pUnkOuter")]), StdFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]), StdFunction(Void, "AcquireDDThreadLock", [], internal=True), StdFunction(Void, "ReleaseDDThreadLock", [], internal=True), StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")], internal=True), StdFunction(HRESULT, "DllCanUnloadNow", [], internal=True), StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppv")], sideeffects=False), # XXX StdFunction(HRESULT, "CompleteCreateSysmemSurface", [Int, Int], internal=True), #StdFunction(HRESULT, "GetSurfaceFromDC", [Int, Int, Int], internal=True), StdFunction(HRESULT, "DDInternalLock", [Int, Int], internal=True), StdFunction(HRESULT, "DDInternalUnlock", [Int], internal=True), StdFunction(HRESULT, "DSoundHelp", [HWND, Int, Int], internal=True), StdFunction(HRESULT, "GetDDSurfaceLocal", [Int, Int, Int], internal=True), StdFunction(HANDLE, "GetOLEThunkData", [Int], internal=True), StdFunction(HRESULT, "RegisterSpecialCase", [Int, Int, Int, Int], internal=True), StdFunction(HRESULT, "DDGetAttachedSurfaceLcl", [Int, Int, Int], internal=True), # TODO: SetAppCompatData ]) # Add otherwise unreferenced interfaces ddraw.addInterfaces([ IDirectDrawSurface2, IDirectDrawSurface3, IDirectDrawColorControl, IDirectDrawGammaControl, ]) tmpNnpnZF/specs/d3d9caps.py0000664000175000017500000003021112543167424015062 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d9caps.h""" from winapi import * from d3d9types import * D3DVS20CAPS = Flags(DWORD, [ "D3DVS20CAPS_PREDICATION", ]) D3DVSHADERCAPS2_0 = Struct("D3DVSHADERCAPS2_0", [ (D3DVS20CAPS, "Caps"), (INT, "DynamicFlowControlDepth"), (INT, "NumTemps"), (INT, "StaticFlowControlDepth"), ]) D3DPS20CAPS = Flags(DWORD, [ "D3DPS20CAPS_ARBITRARYSWIZZLE", "D3DPS20CAPS_GRADIENTINSTRUCTIONS", "D3DPS20CAPS_PREDICATION", "D3DPS20CAPS_NODEPENDENTREADLIMIT", "D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT", ]) D3DPSHADERCAPS2_0 = Struct("D3DPSHADERCAPS2_0", [ (D3DPS20CAPS, "Caps"), (INT, "DynamicFlowControlDepth"), (INT, "NumTemps"), (INT, "StaticFlowControlDepth"), (INT, "NumInstructionSlots"), ]) D3DCAPS = Flags(DWORD, [ "D3DCAPS_READ_SCANLINE", ]) D3DCAPS2 = Flags(DWORD, [ "D3DCAPS2_FULLSCREENGAMMA", "D3DCAPS2_CANCALIBRATEGAMMA", "D3DCAPS2_RESERVED", "D3DCAPS2_CANMANAGERESOURCE", "D3DCAPS2_DYNAMICTEXTURES", "D3DCAPS2_CANAUTOGENMIPMAP", "D3DCAPS2_CANSHARERESOURCE", ]) D3DCAPS3 = Flags(DWORD, [ "D3DCAPS3_RESERVED", "D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD", "D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION", "D3DCAPS3_COPY_TO_VIDMEM", "D3DCAPS3_COPY_TO_SYSTEMMEM", "D3DCAPS3_DXVAHD", ]) D3DCURSORCAPS = Flags(DWORD, [ "D3DCURSORCAPS_COLOR", "D3DCURSORCAPS_LOWRES", ]) D3DDEVCAPS = Flags(DWORD, [ "D3DDEVCAPS_EXECUTESYSTEMMEMORY", "D3DDEVCAPS_EXECUTEVIDEOMEMORY", "D3DDEVCAPS_TLVERTEXSYSTEMMEMORY", "D3DDEVCAPS_TLVERTEXVIDEOMEMORY", "D3DDEVCAPS_TEXTURESYSTEMMEMORY", "D3DDEVCAPS_TEXTUREVIDEOMEMORY", "D3DDEVCAPS_DRAWPRIMTLVERTEX", "D3DDEVCAPS_CANRENDERAFTERFLIP", "D3DDEVCAPS_TEXTURENONLOCALVIDMEM", "D3DDEVCAPS_DRAWPRIMITIVES2", "D3DDEVCAPS_SEPARATETEXTUREMEMORIES", "D3DDEVCAPS_DRAWPRIMITIVES2EX", "D3DDEVCAPS_HWTRANSFORMANDLIGHT", "D3DDEVCAPS_CANBLTSYSTONONLOCAL", "D3DDEVCAPS_HWRASTERIZATION", "D3DDEVCAPS_PUREDEVICE", "D3DDEVCAPS_QUINTICRTPATCHES", "D3DDEVCAPS_RTPATCHES", "D3DDEVCAPS_RTPATCHHANDLEZERO", "D3DDEVCAPS_NPATCHES", ]) D3DPMISCCAPS = Flags(DWORD, [ "D3DPMISCCAPS_MASKZ", "D3DPMISCCAPS_CULLNONE", "D3DPMISCCAPS_CULLCW", "D3DPMISCCAPS_CULLCCW", "D3DPMISCCAPS_COLORWRITEENABLE", "D3DPMISCCAPS_CLIPPLANESCALEDPOINTS", "D3DPMISCCAPS_CLIPTLVERTS", "D3DPMISCCAPS_TSSARGTEMP", "D3DPMISCCAPS_BLENDOP", "D3DPMISCCAPS_NULLREFERENCE", "D3DPMISCCAPS_INDEPENDENTWRITEMASKS", "D3DPMISCCAPS_PERSTAGECONSTANT", "D3DPMISCCAPS_FOGANDSPECULARALPHA", "D3DPMISCCAPS_SEPARATEALPHABLEND", "D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS", "D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING", "D3DPMISCCAPS_FOGVERTEXCLAMPED", "D3DPMISCCAPS_POSTBLENDSRGBCONVERT", ]) D3DLINECAPS = Flags(DWORD, [ "D3DLINECAPS_TEXTURE", "D3DLINECAPS_ZTEST", "D3DLINECAPS_BLEND", "D3DLINECAPS_ALPHACMP", "D3DLINECAPS_FOG", "D3DLINECAPS_ANTIALIAS", ]) D3DPRASTERCAPS = Flags(DWORD, [ "D3DPRASTERCAPS_DITHER", "D3DPRASTERCAPS_ZTEST", "D3DPRASTERCAPS_FOGVERTEX", "D3DPRASTERCAPS_FOGTABLE", "D3DPRASTERCAPS_MIPMAPLODBIAS", "D3DPRASTERCAPS_ZBUFFERLESSHSR", "D3DPRASTERCAPS_FOGRANGE", "D3DPRASTERCAPS_ANISOTROPY", "D3DPRASTERCAPS_WBUFFER", "D3DPRASTERCAPS_WFOG", "D3DPRASTERCAPS_ZFOG", "D3DPRASTERCAPS_COLORPERSPECTIVE", "D3DPRASTERCAPS_SCISSORTEST", "D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS", "D3DPRASTERCAPS_DEPTHBIAS", "D3DPRASTERCAPS_MULTISAMPLE_TOGGLE", ]) D3DPCMPCAPS = Flags(DWORD, [ "D3DPCMPCAPS_NEVER", "D3DPCMPCAPS_LESS", "D3DPCMPCAPS_EQUAL", "D3DPCMPCAPS_LESSEQUAL", "D3DPCMPCAPS_GREATER", "D3DPCMPCAPS_NOTEQUAL", "D3DPCMPCAPS_GREATEREQUAL", "D3DPCMPCAPS_ALWAYS", ]) D3DPBLENDCAPS = Flags(DWORD, [ "D3DPBLENDCAPS_ZERO", "D3DPBLENDCAPS_ONE", "D3DPBLENDCAPS_SRCCOLOR", "D3DPBLENDCAPS_INVSRCCOLOR", "D3DPBLENDCAPS_SRCALPHA", "D3DPBLENDCAPS_INVSRCALPHA", "D3DPBLENDCAPS_DESTALPHA", "D3DPBLENDCAPS_INVDESTALPHA", "D3DPBLENDCAPS_DESTCOLOR", "D3DPBLENDCAPS_INVDESTCOLOR", "D3DPBLENDCAPS_SRCALPHASAT", "D3DPBLENDCAPS_BOTHSRCALPHA", "D3DPBLENDCAPS_BOTHINVSRCALPHA", "D3DPBLENDCAPS_BLENDFACTOR", "D3DPBLENDCAPS_SRCCOLOR2", "D3DPBLENDCAPS_INVSRCCOLOR2", ]) D3DPSHADECAPS = Flags(DWORD, [ "D3DPSHADECAPS_COLORGOURAUDRGB", "D3DPSHADECAPS_SPECULARGOURAUDRGB", "D3DPSHADECAPS_ALPHAGOURAUDBLEND", "D3DPSHADECAPS_FOGGOURAUD", ]) D3DPTEXTURECAPS = Flags(DWORD, [ "D3DPTEXTURECAPS_PERSPECTIVE", "D3DPTEXTURECAPS_POW2", "D3DPTEXTURECAPS_ALPHA", "D3DPTEXTURECAPS_SQUAREONLY", "D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE", "D3DPTEXTURECAPS_ALPHAPALETTE", "D3DPTEXTURECAPS_NONPOW2CONDITIONAL", "D3DPTEXTURECAPS_PROJECTED", "D3DPTEXTURECAPS_CUBEMAP", "D3DPTEXTURECAPS_VOLUMEMAP", "D3DPTEXTURECAPS_MIPMAP", "D3DPTEXTURECAPS_MIPVOLUMEMAP", "D3DPTEXTURECAPS_MIPCUBEMAP", "D3DPTEXTURECAPS_CUBEMAP_POW2", "D3DPTEXTURECAPS_VOLUMEMAP_POW2", "D3DPTEXTURECAPS_NOPROJECTEDBUMPENV", ]) D3DPTFILTERCAPS = Flags(DWORD, [ "D3DPTFILTERCAPS_MINFPOINT", "D3DPTFILTERCAPS_MINFLINEAR", "D3DPTFILTERCAPS_MINFANISOTROPIC", "D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", "D3DPTFILTERCAPS_MINFGAUSSIANQUAD", "D3DPTFILTERCAPS_MIPFPOINT", "D3DPTFILTERCAPS_MIPFLINEAR", "D3DPTFILTERCAPS_CONVOLUTIONMONO", "D3DPTFILTERCAPS_MAGFPOINT", "D3DPTFILTERCAPS_MAGFLINEAR", "D3DPTFILTERCAPS_MAGFANISOTROPIC", "D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", "D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", ]) D3DPTADDRESSCAPS = Flags(DWORD, [ "D3DPTADDRESSCAPS_WRAP", "D3DPTADDRESSCAPS_MIRROR", "D3DPTADDRESSCAPS_CLAMP", "D3DPTADDRESSCAPS_BORDER", "D3DPTADDRESSCAPS_INDEPENDENTUV", "D3DPTADDRESSCAPS_MIRRORONCE", ]) D3DSTENCILCAPS = Flags(DWORD, [ "D3DSTENCILCAPS_KEEP", "D3DSTENCILCAPS_ZERO", "D3DSTENCILCAPS_REPLACE", "D3DSTENCILCAPS_INCRSAT", "D3DSTENCILCAPS_DECRSAT", "D3DSTENCILCAPS_INVERT", "D3DSTENCILCAPS_INCR", "D3DSTENCILCAPS_DECR", "D3DSTENCILCAPS_TWOSIDED", ]) D3DTEXOPCAPS = Flags(DWORD, [ "D3DTEXOPCAPS_DISABLE", "D3DTEXOPCAPS_SELECTARG1", "D3DTEXOPCAPS_SELECTARG2", "D3DTEXOPCAPS_MODULATE", "D3DTEXOPCAPS_MODULATE2X", "D3DTEXOPCAPS_MODULATE4X", "D3DTEXOPCAPS_ADD", "D3DTEXOPCAPS_ADDSIGNED", "D3DTEXOPCAPS_ADDSIGNED2X", "D3DTEXOPCAPS_SUBTRACT", "D3DTEXOPCAPS_ADDSMOOTH", "D3DTEXOPCAPS_BLENDDIFFUSEALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHA", "D3DTEXOPCAPS_BLENDFACTORALPHA", "D3DTEXOPCAPS_BLENDTEXTUREALPHAPM", "D3DTEXOPCAPS_BLENDCURRENTALPHA", "D3DTEXOPCAPS_PREMODULATE", "D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA", "D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR", "D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA", "D3DTEXOPCAPS_BUMPENVMAP", "D3DTEXOPCAPS_BUMPENVMAPLUMINANCE", "D3DTEXOPCAPS_DOTPRODUCT3", "D3DTEXOPCAPS_MULTIPLYADD", "D3DTEXOPCAPS_LERP", ]) D3DFVFCAPS = Flags(DWORD, [ "D3DFVFCAPS_TEXCOORDCOUNTMASK", "D3DFVFCAPS_DONOTSTRIPELEMENTS", "D3DFVFCAPS_PSIZE", ]) D3DVTXPCAPS = Flags(DWORD, [ "D3DVTXPCAPS_TEXGEN", "D3DVTXPCAPS_MATERIALSOURCE7", "D3DVTXPCAPS_DIRECTIONALLIGHTS", "D3DVTXPCAPS_POSITIONALLIGHTS", "D3DVTXPCAPS_LOCALVIEWER", "D3DVTXPCAPS_TWEENING", "D3DVTXPCAPS_TEXGEN_SPHEREMAP", "D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER", ]) D3DDEVCAPS2 = Flags(DWORD, [ "D3DDEVCAPS2_STREAMOFFSET", "D3DDEVCAPS2_DMAPNPATCH", "D3DDEVCAPS2_ADAPTIVETESSRTPATCH", "D3DDEVCAPS2_ADAPTIVETESSNPATCH", "D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES", "D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH", "D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET", ]) D3DDTCAPS = Flags(DWORD, [ "D3DDTCAPS_UBYTE4", "D3DDTCAPS_UBYTE4N", "D3DDTCAPS_SHORT2N", "D3DDTCAPS_SHORT4N", "D3DDTCAPS_USHORT2N", "D3DDTCAPS_USHORT4N", "D3DDTCAPS_UDEC3", "D3DDTCAPS_DEC3N", "D3DDTCAPS_FLOAT16_2", "D3DDTCAPS_FLOAT16_4", ]) #D3DPS_VERSION = Enum("DWORD", [ # "D3DPS_VERSION(0,0)", # "D3DPS_VERSION(1,0)", # "D3DPS_VERSION(1,1)", # "D3DPS_VERSION(1,2)", # "D3DPS_VERSION(1,3)", # "D3DPS_VERSION(1,4)", # "D3DPS_VERSION(2,0)", # "D3DPS_VERSION(3,0)", #]) D3DPS_VERSION = DWORD #D3DVS_VERSION = Enum("DWORD", [ # "D3DVS_VERSION(0,0)", # "D3DVS_VERSION(1,0)", # "D3DVS_VERSION(1,1)", # "D3DVS_VERSION(2,0)", # "D3DVS_VERSION(3,0)", #]) D3DVS_VERSION = DWORD D3DCAPS9 = Struct("D3DCAPS9", [ (D3DDEVTYPE, "DeviceType"), (UINT, "AdapterOrdinal"), (D3DCAPS, "Caps"), (D3DCAPS2, "Caps2"), (D3DCAPS3, "Caps3"), (D3DPRESENT_INTERVAL, "PresentationIntervals"), (D3DCURSORCAPS, "CursorCaps"), (D3DDEVCAPS, "DevCaps"), (D3DPMISCCAPS, "PrimitiveMiscCaps"), (D3DPRASTERCAPS, "RasterCaps"), (D3DPCMPCAPS, "ZCmpCaps"), (D3DPBLENDCAPS, "SrcBlendCaps"), (D3DPBLENDCAPS, "DestBlendCaps"), (D3DPCMPCAPS, "AlphaCmpCaps"), (D3DPSHADECAPS, "ShadeCaps"), (D3DPTEXTURECAPS, "TextureCaps"), (D3DPTFILTERCAPS, "TextureFilterCaps"), (D3DPTFILTERCAPS, "CubeTextureFilterCaps"), (D3DPTFILTERCAPS, "VolumeTextureFilterCaps"), (D3DPTADDRESSCAPS, "TextureAddressCaps"), (D3DPTADDRESSCAPS, "VolumeTextureAddressCaps"), (D3DLINECAPS, "LineCaps"), (DWORD, "MaxTextureWidth"), (DWORD, "MaxTextureHeight"), (DWORD, "MaxVolumeExtent"), (DWORD, "MaxTextureRepeat"), (DWORD, "MaxTextureAspectRatio"), (DWORD, "MaxAnisotropy"), (Float, "MaxVertexW"), (Float, "GuardBandLeft"), (Float, "GuardBandTop"), (Float, "GuardBandRight"), (Float, "GuardBandBottom"), (Float, "ExtentsAdjust"), (D3DSTENCILCAPS, "StencilCaps"), (D3DFVFCAPS, "FVFCaps"), (D3DTEXOPCAPS, "TextureOpCaps"), (DWORD, "MaxTextureBlendStages"), (DWORD, "MaxSimultaneousTextures"), (D3DVTXPCAPS, "VertexProcessingCaps"), (DWORD, "MaxActiveLights"), (DWORD, "MaxUserClipPlanes"), (DWORD, "MaxVertexBlendMatrices"), (DWORD, "MaxVertexBlendMatrixIndex"), (Float, "MaxPointSize"), (DWORD, "MaxPrimitiveCount"), (DWORD, "MaxVertexIndex"), (DWORD, "MaxStreams"), (DWORD, "MaxStreamStride"), (D3DVS_VERSION, "VertexShaderVersion"), (DWORD, "MaxVertexShaderConst"), (D3DPS_VERSION, "PixelShaderVersion"), (Float, "PixelShader1xMaxValue"), (D3DDEVCAPS2, "DevCaps2"), (Float, "MaxNpatchTessellationLevel"), (DWORD, "Reserved5"), (UINT, "MasterAdapterOrdinal"), (UINT, "AdapterOrdinalInGroup"), (UINT, "NumberOfAdaptersInGroup"), (D3DDTCAPS, "DeclTypes"), (DWORD, "NumSimultaneousRTs"), (D3DPTFILTERCAPS, "StretchRectFilterCaps"), (D3DVSHADERCAPS2_0, "VS20Caps"), (D3DPSHADERCAPS2_0, "PS20Caps"), (D3DPTFILTERCAPS, "VertexTextureFilterCaps"), (DWORD, "MaxVShaderInstructionsExecuted"), (DWORD, "MaxPShaderInstructionsExecuted"), (DWORD, "MaxVertexShader30InstructionSlots"), (DWORD, "MaxPixelShader30InstructionSlots"), ]) tmpNnpnZF/specs/wglapi.py0000664000175000017500000006530312543167424014745 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """WGL API description""" from glapi import * from winapi import * from wglenum import * wglapi = Module("WGL") HGLRC = Alias("HGLRC", HANDLE) PROC = Opaque("PROC") PFD_FLAGS = Flags(DWORD, [ "PFD_DOUBLEBUFFER", "PFD_STEREO", "PFD_DRAW_TO_WINDOW", "PFD_DRAW_TO_BITMAP", "PFD_SUPPORT_GDI", "PFD_SUPPORT_OPENGL", "PFD_GENERIC_FORMAT", "PFD_NEED_PALETTE", "PFD_NEED_SYSTEM_PALETTE", "PFD_SWAP_EXCHANGE", "PFD_SWAP_COPY", "PFD_SWAP_LAYER_BUFFERS", "PFD_GENERIC_ACCELERATED", "PFD_SUPPORT_DIRECTDRAW", "PFD_DIRECT3D_ACCELERATED", "PFD_SUPPORT_COMPOSITION", "PFD_DEPTH_DONTCARE", "PFD_DOUBLEBUFFER_DONTCARE", "PFD_STEREO_DONTCARE", ]) PFD_TYPE = FakeEnum(BYTE, [ "PFD_TYPE_RGBA", "PFD_TYPE_COLORINDEX", ]) PFD_PLANE = FakeEnum(BYTE, [ "PFD_MAIN_PLANE", "PFD_OVERLAY_PLANE", "PFD_UNDERLAY_PLANE", ]) PIXELFORMATDESCRIPTOR = Struct("PIXELFORMATDESCRIPTOR", [ (WORD, "nSize"), (WORD, "nVersion"), (PFD_FLAGS, "dwFlags"), (PFD_TYPE, "iPixelType"), (BYTE, "cColorBits"), (BYTE, "cRedBits"), (BYTE, "cRedShift"), (BYTE, "cGreenBits"), (BYTE, "cGreenShift"), (BYTE, "cBlueBits"), (BYTE, "cBlueShift"), (BYTE, "cAlphaBits"), (BYTE, "cAlphaShift"), (BYTE, "cAccumBits"), (BYTE, "cAccumRedBits"), (BYTE, "cAccumGreenBits"), (BYTE, "cAccumBlueBits"), (BYTE, "cAccumAlphaBits"), (BYTE, "cDepthBits"), (BYTE, "cStencilBits"), (BYTE, "cAuxBuffers"), (PFD_PLANE, "iLayerType"), (BYTE, "bReserved"), (DWORD, "dwLayerMask"), (DWORD, "dwVisibleMask"), (DWORD, "dwDamageMask"), ]) POINTFLOAT = Struct("POINTFLOAT", [ (FLOAT, "x"), (FLOAT, "y"), ]) GLYPHMETRICSFLOAT = Struct("GLYPHMETRICSFLOAT", [ (FLOAT, "gmfBlackBoxX"), (FLOAT, "gmfBlackBoxY"), (POINTFLOAT, "gmfptGlyphOrigin"), (FLOAT, "gmfCellIncX"), (FLOAT, "gmfCellIncY"), ]) LPGLYPHMETRICSFLOAT = Pointer(GLYPHMETRICSFLOAT) WGLFontFormat = FakeEnum(Int, [ 'WGL_FONT_LINES', 'WGL_FONT_POLYGONS', ]) COLORREF = Alias("COLORREF", DWORD) LAYERPLANEDESCRIPTOR = Struct("LAYERPLANEDESCRIPTOR", [ (WORD, "nSize"), (WORD, "nVersion"), (PFD_FLAGS, "dwFlags"), (PFD_TYPE, "iPixelType"), (BYTE, "cColorBits"), (BYTE, "cRedBits"), (BYTE, "cRedShift"), (BYTE, "cGreenBits"), (BYTE, "cGreenShift"), (BYTE, "cBlueBits"), (BYTE, "cBlueShift"), (BYTE, "cAlphaBits"), (BYTE, "cAlphaShift"), (BYTE, "cAccumBits"), (BYTE, "cAccumRedBits"), (BYTE, "cAccumGreenBits"), (BYTE, "cAccumBlueBits"), (BYTE, "cAccumAlphaBits"), (BYTE, "cDepthBits"), (BYTE, "cStencilBits"), (BYTE, "cAuxBuffers"), (PFD_PLANE, "iLayerPlane"), (BYTE, "bReserved"), (COLORREF, "crTransparent"), ]) LPLAYERPLANEDESCRIPTOR = Pointer(LAYERPLANEDESCRIPTOR) WGLSWAP = Struct("WGLSWAP", [ (HDC, "hdc"), (UINT, "uiFlags"), ]) WGLContextAttribs = AttribArray(Const(WGLenum), [ ('WGL_CONTEXT_MAJOR_VERSION_ARB', Int), ('WGL_CONTEXT_MINOR_VERSION_ARB', Int), ('WGL_CONTEXT_LAYER_PLANE_ARB', Int), ('WGL_CONTEXT_FLAGS_ARB', Flags(Int, [ "WGL_CONTEXT_DEBUG_BIT_ARB", "WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB", "WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB", "WGL_CONTEXT_RESET_ISOLATION_BIT_ARB", ])), ('WGL_CONTEXT_PROFILE_MASK_ARB', Flags(Int, [ "WGL_CONTEXT_CORE_PROFILE_BIT_ARB", "WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB", "WGL_CONTEXT_ES_PROFILE_BIT_EXT", ])), ('WGL_CONTEXT_RELEASE_BEHAVIOR_ARB', FakeEnum(Int, [ 'WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB', 'WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB', ])), ]) WGLPixelFormatAttribsList = [ # WGL_ARB_pixel_format/WGL_EXT_pixel_format ('WGL_DRAW_TO_WINDOW_ARB', BOOL), ('WGL_DRAW_TO_BITMAP_ARB', BOOL), ('WGL_ACCELERATION_ARB', FakeEnum(Int, ['WGL_NO_ACCELERATION_ARB', 'WGL_GENERIC_ACCELERATION_ARB', 'WGL_FULL_ACCELERATION_ARB'])), ('WGL_NEED_PALETTE_ARB', BOOL), ('WGL_NEED_SYSTEM_PALETTE_ARB', BOOL), ('WGL_SWAP_LAYER_BUFFERS_ARB', BOOL), ('WGL_SWAP_METHOD_ARB', FakeEnum(Int, ['WGL_SWAP_EXCHANGE_ARB', 'WGL_SWAP_COPY_ARB', 'WGL_SWAP_UNDEFINED_ARB'])), ('WGL_NUMBER_OVERLAYS_ARB', Int), ('WGL_NUMBER_UNDERLAYS_ARB', Int), ('WGL_TRANSPARENT_EXT', BOOL), ('WGL_TRANSPARENT_VALUE_EXT', Int), ('WGL_SHARE_DEPTH_ARB', BOOL), ('WGL_SHARE_STENCIL_ARB', BOOL), ('WGL_SHARE_ACCUM_ARB', BOOL), ('WGL_SUPPORT_GDI_ARB', BOOL), ('WGL_SUPPORT_OPENGL_ARB', BOOL), ('WGL_DOUBLE_BUFFER_ARB', BOOL), ('WGL_STEREO_ARB', BOOL), ('WGL_PIXEL_TYPE_ARB', FakeEnum(Int, ['WGL_TYPE_RGBA_ARB', 'WGL_TYPE_COLORINDEX_ARB'])), ('WGL_COLOR_BITS_ARB', Int), ('WGL_RED_BITS_ARB', Int), ('WGL_RED_SHIFT_EXT', Int), ('WGL_GREEN_BITS_ARB', Int), ('WGL_GREEN_SHIFT_EXT', Int), ('WGL_BLUE_BITS_ARB', Int), ('WGL_BLUE_SHIFT_EXT', Int), ('WGL_ALPHA_BITS_ARB', Int), ('WGL_ALPHA_SHIFT_EXT', Int), ('WGL_ACCUM_BITS_ARB', Int), ('WGL_ACCUM_RED_BITS_ARB', Int), ('WGL_ACCUM_GREEN_BITS_ARB', Int), ('WGL_ACCUM_BLUE_BITS_ARB', Int), ('WGL_ACCUM_ALPHA_BITS_ARB', Int), ('WGL_DEPTH_BITS_ARB', Int), ('WGL_STENCIL_BITS_ARB', Int), ('WGL_AUX_BUFFERS_ARB', Int), ('WGL_SAMPLE_BUFFERS_ARB', Int), ('WGL_SAMPLES_ARB', Int), # WGL_ARB_pbuffer ('WGL_DRAW_TO_PBUFFER_ARB', BOOL), # WGL_ARB_render_texture ('WGL_BIND_TO_TEXTURE_RGB_ARB', BOOL), ('WGL_BIND_TO_TEXTURE_RGBA_ARB', BOOL), # WGL_NV_video_output ('WGL_BIND_TO_VIDEO_RGB_NV', BOOL), ('WGL_BIND_TO_VIDEO_RGBA_NV', BOOL), ('WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV', BOOL), ] WGLPixelFormatAttribs = AttribArray(Const(WGLenum), WGLPixelFormatAttribsList) WGLPixelFormatFloatAttribs = AttribArray(Const(FLOAT), WGLPixelFormatAttribsList) WGLCreatePbufferARBAttribs = AttribArray(Const(WGLenum), [ ('WGL_PBUFFER_LARGEST_ARB', Int), # WGL_ARB_render_texture ('WGL_TEXTURE_FORMAT_ARB', WGLenum), ('WGL_TEXTURE_TARGET_ARB', WGLenum), ('WGL_MIPMAP_TEXTURE_ARB', BOOL), # WGL_NV_render_depth_texture ('WGL_DEPTH_TEXTURE_FORMAT_NV', WGLenum), ]) CubeFaceEnum = FakeEnum(Int, [ 'WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB', 'WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB', 'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB', 'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB' ]) WGLSetPbufferARBAttribs = AttribArray(Const(WGLenum), [ ('WGL_MIPMAP_LEVEL_ARB', Int), ('WGL_CUBE_MAP_FACE_ARB', CubeFaceEnum) ]) HPBUFFERARB = Alias("HPBUFFERARB", HANDLE) HPBUFFEREXT = Alias("HPBUFFEREXT", HANDLE) HPVIDEODEV = Alias("HPVIDEODEV", HANDLE) HVIDEOOUTPUTDEVICENV = Alias("HVIDEOOUTPUTDEVICENV", HANDLE) HVIDEOINPUTDEVICENV = Alias("HVIDEOINPUTDEVICENV", HANDLE) HGPUNV = Alias("HGPUNV", HANDLE) GPU_DEVICE = Struct("_GPU_DEVICE", [ (DWORD, "cb"), (CString, "DeviceName"), (CString, "DeviceString"), (DWORD, "Flags"), (RECT, "rcVirtualScreen"), ]) WGLlist = Handle("list", DWORD) wglapi.addFunctions([ # WGL StdFunction(HGLRC, "wglCreateContext", [(HDC, "hdc")]), StdFunction(BOOL, "wglDeleteContext", [(HGLRC, "hglrc")]), StdFunction(HGLRC, "wglGetCurrentContext", [], sideeffects=False), StdFunction(BOOL, "wglMakeCurrent", [(HDC, "hdc"), (HGLRC, "hglrc")]), StdFunction(BOOL, "wglCopyContext", [(HGLRC, "hglrcSrc"), (HGLRC, "hglrcDst"), (Flags(UINT, GLbitfield_attrib.values), "mask")]), StdFunction(Int, "wglChoosePixelFormat", [(HDC, "hdc"), (Pointer(Const(PIXELFORMATDESCRIPTOR)), "ppfd")]), StdFunction(Int, "wglDescribePixelFormat", [(HDC, "hdc"), (Int, "iPixelFormat"), (UINT, "nBytes"), Out(Pointer(PIXELFORMATDESCRIPTOR), "ppfd")]), StdFunction(HDC, "wglGetCurrentDC", [], sideeffects=False), StdFunction(PROC, "wglGetDefaultProcAddress", [(LPCSTR, "lpszProc")], sideeffects=False), StdFunction(Int, "wglGetPixelFormat", [(HDC, "hdc")], sideeffects=False), StdFunction(BOOL, "wglSetPixelFormat", [(HDC, "hdc"), (Int, "iPixelFormat"), (Pointer(Const(PIXELFORMATDESCRIPTOR)), "ppfd")]), StdFunction(BOOL, "wglSwapBuffers", [(HDC, "hdc")]), StdFunction(BOOL, "wglShareLists", [(HGLRC, "hglrc1"), (HGLRC, "hglrc2")]), StdFunction(HGLRC, "wglCreateLayerContext", [(HDC, "hdc"), (Int, "iLayerPlane")]), StdFunction(BOOL, "wglDescribeLayerPlane", [(HDC, "hdc"), (Int, "iPixelFormat"), (Int, "iLayerPlane"), (UINT, "nBytes"), Out(Pointer(LAYERPLANEDESCRIPTOR), "plpd")]), StdFunction(Int, "wglSetLayerPaletteEntries", [(HDC, "hdc"), (Int, "iLayerPlane"), (Int, "iStart"), (Int, "cEntries"), (Array(Const(COLORREF), "cEntries"), "pcr")]), StdFunction(Int, "wglGetLayerPaletteEntries", [(HDC, "hdc"), (Int, "iLayerPlane"), (Int, "iStart"), (Int, "cEntries"), Out(Array(COLORREF, "cEntries"), "pcr")], sideeffects=False), StdFunction(BOOL, "wglRealizeLayerPalette", [(HDC, "hdc"), (Int, "iLayerPlane"), (BOOL, "bRealize")]), StdFunction(BOOL, "wglSwapLayerBuffers", [(HDC, "hdc"), (UINT, "fuPlanes")]), StdFunction(BOOL, "wglUseFontBitmapsA", [(HDC, "hdc"), (DWORD, "first"), (DWORD, "count"), (WGLlist, "listBase")]), StdFunction(BOOL, "wglUseFontBitmapsW", [(HDC, "hdc"), (DWORD, "first"), (DWORD, "count"), (WGLlist, "listBase")]), StdFunction(DWORD, "wglSwapMultipleBuffers", [(UINT, "n"), (Array(Const(WGLSWAP), "n"), "ps")]), StdFunction(BOOL, "wglUseFontOutlinesA", [(HDC, "hdc"), (DWORD, "first"), (DWORD, "count"), (WGLlist, "listBase"), (FLOAT, "deviation"), (FLOAT, "extrusion"), (WGLFontFormat, "format"), Out(Array(GLYPHMETRICSFLOAT, "count"), "lpgmf")]), StdFunction(BOOL, "wglUseFontOutlinesW", [(HDC, "hdc"), (DWORD, "first"), (DWORD, "count"), (WGLlist, "listBase"), (FLOAT, "deviation"), (FLOAT, "extrusion"), (WGLFontFormat, "format"), Out(Array(GLYPHMETRICSFLOAT, "count"), "lpgmf")]), # WGL_ARB_buffer_region StdFunction(HANDLE, "wglCreateBufferRegionARB", [(HDC, "hDC"), (Int, "iLayerPlane"), (UINT, "uType")]), StdFunction(VOID, "wglDeleteBufferRegionARB", [(HANDLE, "hRegion")]), StdFunction(BOOL, "wglSaveBufferRegionARB", [(HANDLE, "hRegion"), (Int, "x"), (Int, "y"), (Int, "width"), (Int, "height")]), StdFunction(BOOL, "wglRestoreBufferRegionARB", [(HANDLE, "hRegion"), (Int, "x"), (Int, "y"), (Int, "width"), (Int, "height"), (Int, "xSrc"), (Int, "ySrc")]), # WGL_ARB_extensions_string StdFunction(ConstCString, "wglGetExtensionsStringARB", [(HDC, "hdc")], sideeffects=False), # WGL_ARB_pixel_format StdFunction(BOOL, "wglGetPixelFormatAttribivARB", [(HDC, "hdc"), (Int, "iPixelFormat"), (Int, "iLayerPlane"), (UINT, "nAttributes"), (Array(WGLenum, "nAttributes"), "piAttributes"), Out(Array(Int, "nAttributes"), "piValues")], sideeffects=False), StdFunction(BOOL, "wglGetPixelFormatAttribfvARB", [(HDC, "hdc"), (Int, "iPixelFormat"), (Int, "iLayerPlane"), (UINT, "nAttributes"), (Array(WGLenum, "nAttributes"), "piAttributes"), Out(Array(FLOAT, "nAttributes"), "pfValues")], sideeffects=False), StdFunction(BOOL, "wglChoosePixelFormatARB", [(HDC, "hdc"), (WGLPixelFormatAttribs, "piAttribIList"), (WGLPixelFormatFloatAttribs, "pfAttribFList"), (UINT, "nMaxFormats"), Out(Array(Int, "std::min(nMaxFormats, *nNumFormats)"), "piFormats"), Out(Pointer(UINT), "nNumFormats")]), # WGL_ARB_make_current_read StdFunction(BOOL, "wglMakeContextCurrentARB", [(HDC, "hDrawDC"), (HDC, "hReadDC"), (HGLRC, "hglrc")]), StdFunction(HDC, "wglGetCurrentReadDCARB", [], sideeffects=False), # WGL_ARB_pbuffer StdFunction(HPBUFFERARB, "wglCreatePbufferARB", [(HDC, "hDC"), (Int, "iPixelFormat"), (Int, "iWidth"), (Int, "iHeight"), (WGLCreatePbufferARBAttribs, "piAttribList")]), StdFunction(HDC, "wglGetPbufferDCARB", [(HPBUFFERARB, "hPbuffer")]), StdFunction(Int, "wglReleasePbufferDCARB", [(HPBUFFERARB, "hPbuffer"), (HDC, "hDC")]), StdFunction(BOOL, "wglDestroyPbufferARB", [(HPBUFFERARB, "hPbuffer")]), StdFunction(BOOL, "wglQueryPbufferARB", [(HPBUFFERARB, "hPbuffer"), (WGLenum, "iAttribute"), Out(Pointer(Int), "piValue")], sideeffects=False), # WGL_ARB_render_texture StdFunction(BOOL, "wglBindTexImageARB", [(HPBUFFERARB, "hPbuffer"), (Int, "iBuffer")]), StdFunction(BOOL, "wglReleaseTexImageARB", [(HPBUFFERARB, "hPbuffer"), (Int, "iBuffer")]), StdFunction(BOOL, "wglSetPbufferAttribARB", [(HPBUFFERARB, "hPbuffer"), (WGLSetPbufferARBAttribs, "piAttribList")]), # WGL_ARB_create_context StdFunction(HGLRC, "wglCreateContextAttribsARB", [(HDC, "hDC"), (HGLRC, "hShareContext"), (WGLContextAttribs, "attribList")]), # WGL_EXT_display_color_table StdFunction(GLboolean, "wglCreateDisplayColorTableEXT", [(GLushort, "id")]), StdFunction(GLboolean, "wglLoadDisplayColorTableEXT", [(Array(Const(GLushort), "length"), "table"), (GLuint, "length")]), StdFunction(GLboolean, "wglBindDisplayColorTableEXT", [(GLushort, "id")]), StdFunction(VOID, "wglDestroyDisplayColorTableEXT", [(GLushort, "id")]), # WGL_EXT_extensions_string StdFunction(ConstCString, "wglGetExtensionsStringEXT", [], sideeffects=False), # WGL_EXT_make_current_read StdFunction(BOOL, "wglMakeContextCurrentEXT", [(HDC, "hDrawDC"), (HDC, "hReadDC"), (HGLRC, "hglrc")]), StdFunction(HDC, "wglGetCurrentReadDCEXT", [], sideeffects=False), # WGL_EXT_pbuffer StdFunction(HPBUFFEREXT, "wglCreatePbufferEXT", [(HDC, "hDC"), (Int, "iPixelFormat"), (Int, "iWidth"), (Int, "iHeight"), (WGLCreatePbufferARBAttribs, "piAttribList")]), StdFunction(HDC, "wglGetPbufferDCEXT", [(HPBUFFEREXT, "hPbuffer")], sideeffects=False), StdFunction(Int, "wglReleasePbufferDCEXT", [(HPBUFFEREXT, "hPbuffer"), (HDC, "hDC")]), StdFunction(BOOL, "wglDestroyPbufferEXT", [(HPBUFFEREXT, "hPbuffer")]), StdFunction(BOOL, "wglQueryPbufferEXT", [(HPBUFFEREXT, "hPbuffer"), (WGLenum, "iAttribute"), Out(Pointer(Int), "piValue")], sideeffects=False), # WGL_EXT_pixel_format StdFunction(BOOL, "wglGetPixelFormatAttribivEXT", [(HDC, "hdc"), (Int, "iPixelFormat"), (Int, "iLayerPlane"), (UINT, "nAttributes"), (Array(WGLenum, "nAttributes"), "piAttributes"), Out(Array(Int, "nAttributes"), "piValues")], sideeffects=False), StdFunction(BOOL, "wglGetPixelFormatAttribfvEXT", [(HDC, "hdc"), (Int, "iPixelFormat"), (Int, "iLayerPlane"), (UINT, "nAttributes"), (Array(WGLenum, "nAttributes"), "piAttributes"), Out(Array(FLOAT, "nAttributes"), "pfValues")], sideeffects=False), StdFunction(BOOL, "wglChoosePixelFormatEXT", [(HDC, "hdc"), (WGLPixelFormatAttribs, "piAttribIList"), (WGLPixelFormatFloatAttribs, "pfAttribFList"), (UINT, "nMaxFormats"), Out(Array(Int, "std::min(nMaxFormats, *nNumFormats)"), "piFormats"), Out(Pointer(UINT), "nNumFormats")]), # WGL_EXT_swap_control StdFunction(BOOL, "wglSwapIntervalEXT", [(Int, "interval")]), StdFunction(Int, "wglGetSwapIntervalEXT", [], sideeffects=False), # WGL_NV_vertex_array_range StdFunction(OpaquePointer(Void), "wglAllocateMemoryNV", [(GLsizei, "size"), (GLfloat, "readfreq"), (GLfloat, "writefreq"), (GLfloat, "priority")]), StdFunction(Void, "wglFreeMemoryNV", [(OpaquePointer(Void), "pointer")]), # WGL_OML_sync_control StdFunction(BOOL, "wglGetSyncValuesOML", [(HDC, "hdc"), Out(Pointer(INT64), "ust"), Out(Pointer(INT64), "msc"), Out(Pointer(INT64), "sbc")], sideeffects=False), StdFunction(BOOL, "wglGetMscRateOML", [(HDC, "hdc"), Out(Pointer(INT32), "numerator"), Out(Pointer(INT32), "denominator")], sideeffects=False), StdFunction(INT64, "wglSwapBuffersMscOML", [(HDC, "hdc"), (INT64, "target_msc"), (INT64, "divisor"), (INT64, "remainder")]), StdFunction(INT64, "wglSwapLayerBuffersMscOML", [(HDC, "hdc"), (Int, "fuPlanes"), (INT64, "target_msc"), (INT64, "divisor"), (INT64, "remainder")]), StdFunction(BOOL, "wglWaitForMscOML", [(HDC, "hdc"), (INT64, "target_msc"), (INT64, "divisor"), (INT64, "remainder"), Out(Pointer(INT64), "ust"), Out(Pointer(INT64), "msc"), Out(Pointer(INT64), "sbc")]), StdFunction(BOOL, "wglWaitForSbcOML", [(HDC, "hdc"), (INT64, "target_sbc"), Out(Pointer(INT64), "ust"), Out(Pointer(INT64), "msc"), Out(Pointer(INT64), "sbc")]), # WGL_I3D_digital_video_control StdFunction(BOOL, "wglGetDigitalVideoParametersI3D", [(HDC, "hDC"), (Int, "iAttribute"), Out(OpaqueArray(Int, "_wglGetDigitalVideoParametersI3D_size(iAttribute)"), "piValue")], sideeffects=False), StdFunction(BOOL, "wglSetDigitalVideoParametersI3D", [(HDC, "hDC"), (Int, "iAttribute"), (OpaqueArray(Const(Int), "_wglSetDigitalVideoParametersI3D_size(iAttribute)"), "piValue")]), # WGL_I3D_gamma StdFunction(BOOL, "wglGetGammaTableParametersI3D", [(HDC, "hDC"), (Int, "iAttribute"), Out(OpaqueArray(Int, "_wglGetGammaTableParametersI3D_size(iAttribute)"), "piValue")], sideeffects=False), StdFunction(BOOL, "wglSetGammaTableParametersI3D", [(HDC, "hDC"), (Int, "iAttribute"), (OpaqueArray(Const(Int), "_wglSetGammaTableParametersI3D_size(iAttribute)"), "piValue")]), StdFunction(BOOL, "wglGetGammaTableI3D", [(HDC, "hDC"), (Int, "iEntries"), Out(Array(USHORT, "iEntries"), "puRed"), Out(Array(USHORT, "iEntries"), "puGreen"), Out(Array(USHORT, "iEntries"), "puBlue")], sideeffects=False), StdFunction(BOOL, "wglSetGammaTableI3D", [(HDC, "hDC"), (Int, "iEntries"), (Array(Const(USHORT), "iEntries"), "puRed"), (Array(Const(USHORT), "iEntries"), "puGreen"), (Array(Const(USHORT), "iEntries"), "puBlue")]), # WGL_I3D_genlock StdFunction(BOOL, "wglEnableGenlockI3D", [(HDC, "hDC")]), StdFunction(BOOL, "wglDisableGenlockI3D", [(HDC, "hDC")]), StdFunction(BOOL, "wglIsEnabledGenlockI3D", [(HDC, "hDC"), Out(Pointer(BOOL), "pFlag")], sideeffects=False), StdFunction(BOOL, "wglGenlockSourceI3D", [(HDC, "hDC"), (UINT, "uSource")]), StdFunction(BOOL, "wglGetGenlockSourceI3D", [(HDC, "hDC"), Out(Pointer(UINT), "uSource")], sideeffects=False), StdFunction(BOOL, "wglGenlockSourceEdgeI3D", [(HDC, "hDC"), (UINT, "uEdge")]), StdFunction(BOOL, "wglGetGenlockSourceEdgeI3D", [(HDC, "hDC"), Out(Pointer(UINT), "uEdge")], sideeffects=False), StdFunction(BOOL, "wglGenlockSampleRateI3D", [(HDC, "hDC"), (UINT, "uRate")]), StdFunction(BOOL, "wglGetGenlockSampleRateI3D", [(HDC, "hDC"), Out(Pointer(UINT), "uRate")], sideeffects=False), StdFunction(BOOL, "wglGenlockSourceDelayI3D", [(HDC, "hDC"), (UINT, "uDelay")]), StdFunction(BOOL, "wglGetGenlockSourceDelayI3D", [(HDC, "hDC"), Out(Pointer(UINT), "uDelay")], sideeffects=False), StdFunction(BOOL, "wglQueryGenlockMaxSourceDelayI3D", [(HDC, "hDC"), Out(Pointer(UINT), "uMaxLineDelay"), Out(Pointer(UINT), "uMaxPixelDelay")]), # WGL_I3D_image_buffer StdFunction(LPVOID, "wglCreateImageBufferI3D", [(HDC, "hDC"), (DWORD, "dwSize"), (UINT, "uFlags")]), StdFunction(BOOL, "wglDestroyImageBufferI3D", [(HDC, "hDC"), (LPVOID, "pAddress")]), StdFunction(BOOL, "wglAssociateImageBufferEventsI3D", [(HDC, "hDC"), (Array(Const(HANDLE), "count"), "pEvent"), (Array(Const(LPVOID), "count"), "pAddress"), (Array(Const(DWORD), "count"), "pSize"), (UINT, "count")]), StdFunction(BOOL, "wglReleaseImageBufferEventsI3D", [(HDC, "hDC"), (Array(Const(LPVOID), "count"), "pAddress"), (UINT, "count")]), # WGL_I3D_swap_frame_lock StdFunction(BOOL, "wglEnableFrameLockI3D", []), StdFunction(BOOL, "wglDisableFrameLockI3D", []), StdFunction(BOOL, "wglIsEnabledFrameLockI3D", [Out(Pointer(BOOL), "pFlag")], sideeffects=False), StdFunction(BOOL, "wglQueryFrameLockMasterI3D", [Out(Pointer(BOOL), "pFlag")]), # WGL_I3D_swap_frame_usage StdFunction(BOOL, "wglGetFrameUsageI3D", [Out(Pointer(Float), "pUsage")], sideeffects=False), StdFunction(BOOL, "wglBeginFrameTrackingI3D", []), StdFunction(BOOL, "wglEndFrameTrackingI3D", []), StdFunction(BOOL, "wglQueryFrameTrackingI3D", [Out(Pointer(DWORD), "pFrameCount"), Out(Pointer(DWORD), "pMissedFrames"), Out(Pointer(Float), "pLastMissedUsage")]), # WGL_3DL_stereo_control StdFunction(BOOL, "wglSetStereoEmitterState3DL", [(HDC, "hDC"), (UINT, "uState")]), # WGL_NV_present_video StdFunction(Int, "wglEnumerateVideoDevicesNV", [(HDC, "hDC"), Out(OpaquePointer(HVIDEOOUTPUTDEVICENV), "phDeviceList")]), StdFunction(BOOL, "wglBindVideoDeviceNV", [(HDC, "hDC"), (UInt, "uVideoSlot"), (HVIDEOOUTPUTDEVICENV, "hVideoDevice"), (OpaqueArray(Const(Int), "_wglBindVideoDeviceNV_size()"), "piAttribList")]), StdFunction(BOOL, "wglQueryCurrentContextNV", [(Int, "iAttribute"), Out(OpaqueArray(Int, "_wglQueryCurrentContextNV_size()"), "piValue")]), # WGL_NV_video_output StdFunction(BOOL, "wglGetVideoDeviceNV", [(HDC, "hDC"), (Int, "numDevices"), Out(Pointer(HPVIDEODEV), "hVideoDevice")], sideeffects=False), StdFunction(BOOL, "wglReleaseVideoDeviceNV", [(HPVIDEODEV, "hVideoDevice")]), StdFunction(BOOL, "wglBindVideoImageNV", [(HPVIDEODEV, "hVideoDevice"), (HPBUFFERARB, "hPbuffer"), (Int, "iVideoBuffer")]), StdFunction(BOOL, "wglReleaseVideoImageNV", [(HPBUFFERARB, "hPbuffer"), (Int, "iVideoBuffer")]), StdFunction(BOOL, "wglSendPbufferToVideoNV", [(HPBUFFERARB, "hPbuffer"), (Int, "iBufferType"), Out(Pointer(ULong), "pulCounterPbuffer"), (BOOL, "bBlock")]), StdFunction(BOOL, "wglGetVideoInfoNV", [(HPVIDEODEV, "hpVideoDevice"), Out(Pointer(ULong), "pulCounterOutputPbuffer"), Out(Pointer(ULong), "pulCounterOutputVideo")], sideeffects=False), # WGL_NV_swap_group StdFunction(BOOL, "wglJoinSwapGroupNV", [(HDC, "hDC"), (GLuint, "group")]), StdFunction(BOOL, "wglBindSwapBarrierNV", [(GLuint, "group"), (GLuint, "barrier")]), StdFunction(BOOL, "wglQuerySwapGroupNV", [(HDC, "hDC"), Out(Pointer(GLuint), "group"), Out(Pointer(GLuint), "barrier")]), StdFunction(BOOL, "wglQueryMaxSwapGroupsNV", [(HDC, "hDC"), Out(Pointer(GLuint), "maxGroups"), Out(Pointer(GLuint), "maxBarriers")]), StdFunction(BOOL, "wglQueryFrameCountNV", [(HDC, "hDC"), Out(Pointer(GLuint), "count")]), StdFunction(BOOL, "wglResetFrameCountNV", [(HDC, "hDC")]), # WGL_NV_gpu_affinity StdFunction(BOOL, "wglEnumGpusNV", [(UINT, "iGpuIndex"), Out(Pointer(HGPUNV), "phGpu")]), StdFunction(BOOL, "wglEnumGpuDevicesNV", [(HGPUNV, "hGpu"), (UINT, "iDeviceIndex"), Out(Pointer(GPU_DEVICE), "lpGpuDevice")]), StdFunction(HDC, "wglCreateAffinityDCNV", [(OpaqueArray(Const(HGPUNV), "_wglCreateAffinityDCNV_size()"), "phGpuList")]), StdFunction(BOOL, "wglEnumGpusFromAffinityDCNV", [(HDC, "hAffinityDC"), (UINT, "iGpuIndex"), Out(Pointer(HGPUNV), "hGpu")]), StdFunction(BOOL, "wglDeleteDCNV", [(HDC, "hdc")]), # WGL_AMD_gpu_association StdFunction(UINT, "wglGetGPUIDsAMD", [(UINT, "maxCount"), Out(Array(UINT, "maxCount"), "ids")], sideeffects=False), StdFunction(INT, "wglGetGPUInfoAMD", [(UINT, "id"), (Int, "property"), (GLenum, "dataType"), (UINT, "size"), Out(OpaqueBlob(Void, "_wglGetGPUInfoAMD_size(dataType,size)"), "data")], sideeffects=False), StdFunction(UINT, "wglGetContextGPUIDAMD", [(HGLRC, "hglrc")], sideeffects=False), StdFunction(HGLRC, "wglCreateAssociatedContextAMD", [(UINT, "id")]), StdFunction(HGLRC, "wglCreateAssociatedContextAttribsAMD", [(UINT, "id"), (HGLRC, "hShareContext"), (OpaqueArray(Const(Int), "_wglCreateAssociatedContextAttribsAMD_size()"), "attribList")]), StdFunction(BOOL, "wglDeleteAssociatedContextAMD", [(HGLRC, "hglrc")]), StdFunction(BOOL, "wglMakeAssociatedContextCurrentAMD", [(HGLRC, "hglrc")]), StdFunction(HGLRC, "wglGetCurrentAssociatedContextAMD", [], sideeffects=False), StdFunction(VOID, "wglBlitContextFramebufferAMD", [(HGLRC, "dstCtx"), (GLint, "srcX0"), (GLint, "srcY0"), (GLint, "srcX1"), (GLint, "srcY1"), (GLint, "dstX0"), (GLint, "dstY0"), (GLint, "dstX1"), (GLint, "dstY1"), (GLbitfield, "mask"), (GLenum, "filter")]), # WGL_NV_video_capture StdFunction(BOOL, "wglBindVideoCaptureDeviceNV", [(UINT, "uVideoSlot"), (HVIDEOINPUTDEVICENV, "hDevice")]), StdFunction(UINT, "wglEnumerateVideoCaptureDevicesNV", [(HDC, "hDc"), Out(Pointer(HVIDEOINPUTDEVICENV), "phDeviceList")]), StdFunction(BOOL, "wglLockVideoCaptureDeviceNV", [(HDC, "hDc"), (HVIDEOINPUTDEVICENV, "hDevice")]), StdFunction(BOOL, "wglQueryVideoCaptureDeviceNV", [(HDC, "hDc"), (HVIDEOINPUTDEVICENV, "hDevice"), (Int, "iAttribute"), Out(Pointer(Int), "piValue")]), StdFunction(BOOL, "wglReleaseVideoCaptureDeviceNV", [(HDC, "hDc"), (HVIDEOINPUTDEVICENV, "hDevice")]), # WGL_NV_copy_image StdFunction(BOOL, "wglCopyImageSubDataNV", [(HGLRC, "hSrcRC"), (GLuint, "srcName"), (GLenum, "srcTarget"), (GLint, "srcLevel"), (GLint, "srcX"), (GLint, "srcY"), (GLint, "srcZ"), (HGLRC, "hDstRC"), (GLuint, "dstName"), (GLenum, "dstTarget"), (GLint, "dstLevel"), (GLint, "dstX"), (GLint, "dstY"), (GLint, "dstZ"), (GLsizei, "width"), (GLsizei, "height"), (GLsizei, "depth")]), # WGL_NV_DX_interop StdFunction(BOOL, "wglDXSetResourceShareHandleNV", [(OpaquePointer(Void), "dxObject"), (HANDLE, "shareHandle")]), StdFunction(HANDLE, "wglDXOpenDeviceNV", [(OpaquePointer(Void), "dxDevice")]), StdFunction(BOOL, "wglDXCloseDeviceNV", [(HANDLE, "hDevice")]), StdFunction(HANDLE, "wglDXRegisterObjectNV", [(HANDLE, "hDevice"), (OpaquePointer(Void), "dxObject"), (GLuint, "name"), (GLenum, "type"), (GLenum, "access")]), StdFunction(BOOL, "wglDXUnregisterObjectNV", [(HANDLE, "hDevice"), (HANDLE, "hObject")]), StdFunction(BOOL, "wglDXObjectAccessNV", [(HANDLE, "hObject"), (GLenum, "access")]), StdFunction(BOOL, "wglDXLockObjectsNV", [(HANDLE, "hDevice"), (GLint, "count"), Out(Array(HANDLE, "count"), "hObjects")]), StdFunction(BOOL, "wglDXUnlockObjectsNV", [(HANDLE, "hDevice"), (GLint, "count"), Out(Array(HANDLE, "count"), "hObjects")]), # WGL_NV_delay_before_swap StdFunction(BOOL, "wglDelayBeforeSwapNV", [(HDC, "hDC"), (GLfloat, "seconds")]), # must be last StdFunction(PROC, "wglGetProcAddress", [(LPCSTR, "lpszProc")]), ]) tmpNnpnZF/specs/eglenum.py0000664000175000017500000002632012543167424015112 0ustar chrischris########################################################################## # # Copyright 2013 VMware, Inc. # Copyright 2011 LunarG, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """EGL enum description""" from stdapi import * # Most of the following content was produced in a semi-automated fashion by # the scripts/eglenum.sed sed script. EGLenum = Enum("EGLenum", [ "EGL_DISPLAY_SCALING", # 0x2710 "EGL_SUCCESS", # 0x3000 "EGL_NOT_INITIALIZED", # 0x3001 "EGL_BAD_ACCESS", # 0x3002 "EGL_BAD_ALLOC", # 0x3003 "EGL_BAD_ATTRIBUTE", # 0x3004 "EGL_BAD_CONFIG", # 0x3005 "EGL_BAD_CONTEXT", # 0x3006 "EGL_BAD_CURRENT_SURFACE", # 0x3007 "EGL_BAD_DISPLAY", # 0x3008 "EGL_BAD_MATCH", # 0x3009 "EGL_BAD_NATIVE_PIXMAP", # 0x300A "EGL_BAD_NATIVE_WINDOW", # 0x300B "EGL_BAD_PARAMETER", # 0x300C "EGL_BAD_SURFACE", # 0x300D "EGL_CONTEXT_LOST", # 0x300E "EGL_BUFFER_SIZE", # 0x3020 "EGL_ALPHA_SIZE", # 0x3021 "EGL_BLUE_SIZE", # 0x3022 "EGL_GREEN_SIZE", # 0x3023 "EGL_RED_SIZE", # 0x3024 "EGL_DEPTH_SIZE", # 0x3025 "EGL_STENCIL_SIZE", # 0x3026 "EGL_CONFIG_CAVEAT", # 0x3027 "EGL_CONFIG_ID", # 0x3028 "EGL_LEVEL", # 0x3029 "EGL_MAX_PBUFFER_HEIGHT", # 0x302A "EGL_MAX_PBUFFER_PIXELS", # 0x302B "EGL_MAX_PBUFFER_WIDTH", # 0x302C "EGL_NATIVE_RENDERABLE", # 0x302D "EGL_NATIVE_VISUAL_ID", # 0x302E "EGL_NATIVE_VISUAL_TYPE", # 0x302F "EGL_SAMPLES", # 0x3031 "EGL_SAMPLE_BUFFERS", # 0x3032 "EGL_SURFACE_TYPE", # 0x3033 "EGL_TRANSPARENT_TYPE", # 0x3034 "EGL_TRANSPARENT_BLUE_VALUE", # 0x3035 "EGL_TRANSPARENT_GREEN_VALUE", # 0x3036 "EGL_TRANSPARENT_RED_VALUE", # 0x3037 "EGL_NONE", # 0x3038 "EGL_BIND_TO_TEXTURE_RGB", # 0x3039 "EGL_BIND_TO_TEXTURE_RGBA", # 0x303A "EGL_MIN_SWAP_INTERVAL", # 0x303B "EGL_MAX_SWAP_INTERVAL", # 0x303C "EGL_LUMINANCE_SIZE", # 0x303D "EGL_ALPHA_MASK_SIZE", # 0x303E "EGL_COLOR_BUFFER_TYPE", # 0x303F "EGL_RENDERABLE_TYPE", # 0x3040 "EGL_MATCH_NATIVE_PIXMAP", # 0x3041 "EGL_CONFORMANT", # 0x3042 "EGL_MATCH_FORMAT_KHR", # 0x3043 "EGL_SLOW_CONFIG", # 0x3050 "EGL_NON_CONFORMANT_CONFIG", # 0x3051 "EGL_TRANSPARENT_RGB", # 0x3052 "EGL_VENDOR", # 0x3053 "EGL_VERSION", # 0x3054 "EGL_EXTENSIONS", # 0x3055 "EGL_HEIGHT", # 0x3056 "EGL_WIDTH", # 0x3057 "EGL_LARGEST_PBUFFER", # 0x3058 "EGL_DRAW", # 0x3059 "EGL_READ", # 0x305A "EGL_CORE_NATIVE_ENGINE", # 0x305B "EGL_NO_TEXTURE", # 0x305C "EGL_TEXTURE_RGB", # 0x305D "EGL_TEXTURE_RGBA", # 0x305E "EGL_TEXTURE_2D", # 0x305F "EGL_Y_INVERTED_NOK", # 0x307F "EGL_TEXTURE_FORMAT", # 0x3080 "EGL_TEXTURE_TARGET", # 0x3081 "EGL_MIPMAP_TEXTURE", # 0x3082 "EGL_MIPMAP_LEVEL", # 0x3083 "EGL_BACK_BUFFER", # 0x3084 "EGL_SINGLE_BUFFER", # 0x3085 "EGL_RENDER_BUFFER", # 0x3086 "EGL_COLORSPACE", # 0x3087 "EGL_ALPHA_FORMAT", # 0x3088 "EGL_COLORSPACE_sRGB", # 0x3089 "EGL_COLORSPACE_LINEAR", # 0x308A "EGL_ALPHA_FORMAT_NONPRE", # 0x308B "EGL_ALPHA_FORMAT_PRE", # 0x308C "EGL_CLIENT_APIS", # 0x308D "EGL_RGB_BUFFER", # 0x308E "EGL_LUMINANCE_BUFFER", # 0x308F "EGL_HORIZONTAL_RESOLUTION", # 0x3090 "EGL_VERTICAL_RESOLUTION", # 0x3091 "EGL_PIXEL_ASPECT_RATIO", # 0x3092 "EGL_SWAP_BEHAVIOR", # 0x3093 "EGL_BUFFER_PRESERVED", # 0x3094 "EGL_BUFFER_DESTROYED", # 0x3095 "EGL_OPENVG_IMAGE", # 0x3096 "EGL_CONTEXT_CLIENT_TYPE", # 0x3097 "EGL_CONTEXT_MAJOR_VERSION", # 0x3098 "EGL_MULTISAMPLE_RESOLVE", # 0x3099 "EGL_MULTISAMPLE_RESOLVE_DEFAULT", # 0x309A "EGL_MULTISAMPLE_RESOLVE_BOX", # 0x309B "EGL_CL_EVENT_HANDLE", # 0x309C "EGL_GL_COLORSPACE", # 0x309D "EGL_OPENGL_ES_API", # 0x30A0 "EGL_OPENVG_API", # 0x30A1 "EGL_OPENGL_API", # 0x30A2 "EGL_NATIVE_PIXMAP_KHR", # 0x30B0 "EGL_GL_TEXTURE_2D", # 0x30B1 "EGL_GL_TEXTURE_3D", # 0x30B2 "EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X", # 0x30B3 "EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X", # 0x30B4 "EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y", # 0x30B5 "EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y", # 0x30B6 "EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z", # 0x30B7 "EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z", # 0x30B8 "EGL_GL_RENDERBUFFER", # 0x30B9 "EGL_VG_PARENT_IMAGE_KHR", # 0x30BA "EGL_GL_TEXTURE_LEVEL", # 0x30BC "EGL_GL_TEXTURE_ZOFFSET", # 0x30BD "EGL_POST_SUB_BUFFER_SUPPORTED_NV", # 0x30BE "EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT", # 0x30BF "EGL_FORMAT_RGB_565_EXACT_KHR", # 0x30C0 "EGL_FORMAT_RGB_565_KHR", # 0x30C1 "EGL_FORMAT_RGBA_8888_EXACT_KHR", # 0x30C2 "EGL_FORMAT_RGBA_8888_KHR", # 0x30C3 "EGL_MAP_PRESERVE_PIXELS_KHR", # 0x30C4 "EGL_LOCK_USAGE_HINT_KHR", # 0x30C5 "EGL_BITMAP_POINTER_KHR", # 0x30C6 "EGL_BITMAP_PITCH_KHR", # 0x30C7 "EGL_BITMAP_ORIGIN_KHR", # 0x30C8 "EGL_BITMAP_PIXEL_RED_OFFSET_KHR", # 0x30C9 "EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR", # 0x30CA "EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR", # 0x30CB "EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR", # 0x30CC "EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR", # 0x30CD "EGL_LOWER_LEFT_KHR", # 0x30CE "EGL_UPPER_LEFT_KHR", # 0x30CF "EGL_IMAGE_PRESERVED_KHR", # 0x30D2 #"EGL_SHARED_IMAGE_NOK", # 0x30DA "EGL_COVERAGE_BUFFERS_NV", # 0x30E0 "EGL_COVERAGE_SAMPLES_NV", # 0x30E1 "EGL_DEPTH_ENCODING_NV", # 0x30E2 "EGL_DEPTH_ENCODING_NONLINEAR_NV", # 0x30E3 "EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV", # 0x30E6 "EGL_SYNC_STATUS_NV", # 0x30E7 "EGL_SIGNALED_NV", # 0x30E8 "EGL_UNSIGNALED_NV", # 0x30E9 "EGL_ALREADY_SIGNALED_NV", # 0x30EA "EGL_TIMEOUT_EXPIRED_NV", # 0x30EB "EGL_CONDITION_SATISFIED_NV", # 0x30EC "EGL_SYNC_TYPE_NV", # 0x30ED "EGL_SYNC_CONDITION_NV", # 0x30EE "EGL_SYNC_FENCE_NV", # 0x30EF "EGL_SYNC_PRIOR_COMMANDS_COMPLETE", # 0x30F0 "EGL_SYNC_STATUS", # 0x30F1 "EGL_SIGNALED", # 0x30F2 "EGL_UNSIGNALED", # 0x30F3 "EGL_TIMEOUT_EXPIRED", # 0x30F5 "EGL_CONDITION_SATISFIED", # 0x30F6 "EGL_SYNC_TYPE", # 0x30F7 "EGL_SYNC_CONDITION", # 0x30F8 "EGL_SYNC_FENCE", # 0x30F9 "EGL_SYNC_REUSABLE_KHR", # 0x30FA "EGL_CONTEXT_MINOR_VERSION", # 0x30FB "EGL_CONTEXT_FLAGS_KHR", # 0x30FC "EGL_CONTEXT_OPENGL_PROFILE_MASK", # 0x30FD "EGL_SYNC_CL_EVENT", # 0x30FE "EGL_SYNC_CL_EVENT_COMPLETE", # 0x30FF "EGL_CONTEXT_PRIORITY_LEVEL_IMG", # 0x3100 "EGL_CONTEXT_PRIORITY_HIGH_IMG", # 0x3101 "EGL_CONTEXT_PRIORITY_MEDIUM_IMG", # 0x3102 "EGL_CONTEXT_PRIORITY_LOW_IMG", # 0x3103 "EGL_BITMAP_PIXEL_SIZE_KHR", # 0x3110 "EGL_COVERAGE_SAMPLE_RESOLVE_NV", # 0x3131 "EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV", # 0x3132 "EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV", # 0x3133 "EGL_MULTIVIEW_VIEW_COUNT_EXT", # 0x3134 "EGL_AUTO_STEREO_NV", # 0x3136 "EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT", # 0x3138 "EGL_BUFFER_AGE_EXT", # 0x313D "EGL_NATIVE_BUFFER_ANDROID", # 0x3140 "EGL_PLATFORM_ANDROID_KHR", # 0x3141 "EGL_RECORDABLE_ANDROID", # 0x3142 "EGL_SYNC_NATIVE_FENCE_ANDROID", # 0x3144 "EGL_SYNC_NATIVE_FENCE_FD_ANDROID", # 0x3145 "EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID", # 0x3146 "EGL_FRAMEBUFFER_TARGET_ANDROID", # 0x3147 "EGL_CONTEXT_OPENGL_DEBUG", # 0x31B0 "EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE", # 0x31B1 "EGL_CONTEXT_OPENGL_ROBUST_ACCESS", # 0x31B2 "EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR", # 0x31BD "EGL_NO_RESET_NOTIFICATION", # 0x31BE "EGL_LOSE_CONTEXT_ON_RESET", # 0x31BF "EGL_DRM_BUFFER_FORMAT_MESA", # 0x31D0 "EGL_DRM_BUFFER_USE_MESA", # 0x31D1 "EGL_DRM_BUFFER_FORMAT_ARGB32_MESA", # 0x31D2 "EGL_DRM_BUFFER_MESA", # 0x31D3 "EGL_DRM_BUFFER_STRIDE_MESA", # 0x31D4 "EGL_PLATFORM_X11_KHR", # 0x31D5 "EGL_PLATFORM_X11_SCREEN_KHR", # 0x31D6 "EGL_PLATFORM_GBM_KHR", # 0x31D7 "EGL_PLATFORM_WAYLAND_KHR", # 0x31D8 "EGL_STREAM_FIFO_LENGTH_KHR", # 0x31FC "EGL_STREAM_TIME_NOW_KHR", # 0x31FD "EGL_STREAM_TIME_CONSUMER_KHR", # 0x31FE "EGL_STREAM_TIME_PRODUCER_KHR", # 0x31FF "EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE", # 0x3200 "EGL_CONSUMER_LATENCY_USEC_KHR", # 0x3210 "EGL_PRODUCER_FRAME_KHR", # 0x3212 "EGL_CONSUMER_FRAME_KHR", # 0x3213 "EGL_STREAM_STATE_KHR", # 0x3214 "EGL_STREAM_STATE_CREATED_KHR", # 0x3215 "EGL_STREAM_STATE_CONNECTING_KHR", # 0x3216 "EGL_STREAM_STATE_EMPTY_KHR", # 0x3217 "EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR", # 0x3218 "EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR", # 0x3219 "EGL_STREAM_STATE_DISCONNECTED_KHR", # 0x321A "EGL_BAD_STREAM_KHR", # 0x321B "EGL_BAD_STATE_KHR", # 0x321C #"EGL_BUFFER_COUNT_NV", # 0x321D "EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR", # 0x321E "EGL_SYNC_NEW_FRAME_NV", # 0x321F "EGL_LINUX_DMA_BUF_EXT", # 0x3270 "EGL_LINUX_DRM_FOURCC_EXT", # 0x3271 "EGL_DMA_BUF_PLANE0_FD_EXT", # 0x3272 "EGL_DMA_BUF_PLANE0_OFFSET_EXT", # 0x3273 "EGL_DMA_BUF_PLANE0_PITCH_EXT", # 0x3274 "EGL_DMA_BUF_PLANE1_FD_EXT", # 0x3275 "EGL_DMA_BUF_PLANE1_OFFSET_EXT", # 0x3276 "EGL_DMA_BUF_PLANE1_PITCH_EXT", # 0x3277 "EGL_DMA_BUF_PLANE2_FD_EXT", # 0x3278 "EGL_DMA_BUF_PLANE2_OFFSET_EXT", # 0x3279 "EGL_DMA_BUF_PLANE2_PITCH_EXT", # 0x327A "EGL_YUV_COLOR_SPACE_HINT_EXT", # 0x327B "EGL_SAMPLE_RANGE_HINT_EXT", # 0x327C "EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT", # 0x327D "EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT", # 0x327E "EGL_ITU_REC601_EXT", # 0x327F "EGL_ITU_REC709_EXT", # 0x3280 "EGL_ITU_REC2020_EXT", # 0x3281 "EGL_YUV_FULL_RANGE_EXT", # 0x3282 "EGL_YUV_NARROW_RANGE_EXT", # 0x3283 "EGL_YUV_CHROMA_SITING_0_EXT", # 0x3284 "EGL_YUV_CHROMA_SITING_0_5_EXT", # 0x3285 "EGL_DISCARD_SAMPLES_ARM", # 0x3286 "EGL_PROTECTED_CONTENT_EXT", # 0x32C0 "EGL_COLOR_FORMAT_HI", # 0x8F70 "EGL_COLOR_RGB_HI", # 0x8F71 "EGL_COLOR_RGBA_HI", # 0x8F72 "EGL_COLOR_ARGB_HI", # 0x8F73 "EGL_CLIENT_PIXMAP_POINTER_HI", # 0x8F74 #"EGL_FOREVER", # 0xFFFFFFFFFFFFFFFF ]) tmpNnpnZF/specs/scripts/0000775000175000017500000000000012543167424014570 5ustar chrischristmpNnpnZF/specs/scripts/xml2api.py0000775000175000017500000001334112543167424016523 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2014 VMware, Inc # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ # # Script to half-generate *api.py based on Khronos' *.xml # import optparse import sys import xml.etree.ElementTree as ET import c2api def appendToken(tokens, text): for token in text.split(): if token.startswith('*'): for c in token: tokens.append(c) else: tokens.append(token) def getType(node): tokens = [] if node.text is not None: appendToken(tokens, node.text) ptype = node.find('ptype') if ptype is not None: appendToken(tokens, ptype.text) appendToken(tokens, ptype.tail) # Array lenExpr = node.get('len') if lenExpr is not None: assert tokens[-1] == '*' tokens = tokens[:-1] if lenExpr == "COMPSIZE(pname)": lenExpr = "_gl_param_size(pname)" typeText = ' '.join(tokens) parser = c2api.DeclParser() parser.tokenize(typeText + ';') typeExpr = parser.parse_type() if lenExpr is not None: if lenExpr == "1": typeExpr = 'Pointer(%s)' % (typeExpr) else: if not lenExpr.isdigit(): lenExpr = '"' + lenExpr + '"' typeExpr = 'Array(%s, %s)' % (typeExpr, lenExpr) return typeExpr def processCommand(prototypes, command): proto = command.find('proto') functionName = proto.find('name').text retType = getType(proto) args = [] for param in command.findall('param'): argName = param.find('name').text #print argName, param.text argType = getType(param) if argName.lower() == 'hdc': argName = 'hDC' arg = '(%s, "%s")' % (argType, argName) args.append(arg) if namespace == 'WGL': constructor = 'StdFunction' else: constructor = 'GlFunction' prototype = '%s(%s, "%s", [%s])' % (constructor, retType, functionName, ', '.join(args)) prototypes[functionName] = prototype def processRequire(node, filterName): nodeName = node.get('name') if filterName is not None and nodeName != filterName: return commands = [] for requireNode in node.findall('require'): commands.extend(requireNode.findall('command')) if not commands: return functionNames = [command.get('name') for command in commands] return nodeName, functionNames def printPrototypes(prototypes, extensionName, functionNames, skip=set()): print ' # %s' % extensionName if extensionName == 'GL_EXT_direct_state_access': functionNames.sort() for functionName in functionNames: if functionName not in skip: prototype = prototypes[functionName] print ' %s,' % prototype print def main(): optparser = optparse.OptionParser( usage='\n\t%prog [options] ...', version='%%prog') optparser.add_option( '--filter', metavar='NAME', type='string', dest='filter', help='filter feature/extension') (options, args) = optparser.parse_args(sys.argv[1:]) global prototypes global namespace for arg in args: tree = ET.parse(arg) root = tree.getroot() prototypes = {} for commands in root.findall('commands'): namespace = commands.get('namespace') for command in commands.findall('command'): processCommand(prototypes, command) # Extract features features = [] for feature in root.findall('feature'): ret = processRequire(feature, options.filter) if ret is not None: features.append(ret) # Extract extensions extensions = [] for extension in root.find('extensions').findall('extension'): ret = processRequire(extension, options.filter) if ret is not None: extensions.append(ret) # Eliminate the functions from features that are in extensions for extensionName, extensionFunctionNames in extensions: for featureName, featureFunctionNames in features: for functionName in extensionFunctionNames: try: featureFunctionNames.remove(functionName) except ValueError: pass # Print all skip = set() for extensionName, functionNames in features + extensions: printPrototypes(prototypes, extensionName, functionNames, skip) skip.update(functionNames) if __name__ == '__main__': main() tmpNnpnZF/specs/scripts/Makefile0000664000175000017500000000202412543167424016226 0ustar chrischris all: \ download \ glapi.py \ glparams.py \ glxapi.py \ wglapi.py \ eglapi.py \ glxenum.py \ wglenum.py \ eglenum.py download: \ gl.xml \ glx.xml \ wgl.xml \ egl.xml \ gl.spec \ gl.tm \ glxenum.spec \ glx.spec \ glxext.spec \ glx.tm \ wglenum.spec \ wgl.spec \ wglext.spec \ wgl.tm %.xml: wget -N https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/$@ %.spec: wget -N https://www.opengl.org/registry/oldspecs/$@ %.tm: wget -N https://www.opengl.org/registry/oldspecs/$@ glapi.py: xml2api.py gl.xml python $^ > $@ glxapi.py: xml2api.py glx.xml python $^ > $@ wglapi.py: xml2api.py wgl.xml python $^ > $@ eglapi.py: xml2api.py egl.xml python $^ > $@ glparams.py: xml2glparams.py gl.xml python $^ > $@ glxenum.py: xml2enum.py glx.xml python $^ > $@ wglenum.py: xml2enum.py wgl.xml python $^ > $@ eglenum.py: xml2enum.py egl.xml python $^ > $@ clean: rm -f \ glapi.py glxapi.py wglapi.py \ glparams.py wglenum.py .PRECIOUS: %.xml %.spec %.tm .PHONY: download clean tmpNnpnZF/specs/scripts/spec2api.py0000775000175000017500000002137012543167424016656 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Parser for OpenGL .spec files in http://www.opengl.org/registry/.""" import sys import re import optparse def stderr(x): sys.stderr.write(str(x) + '\n') class Parser: def __init__(self, stream): pass class LineParser: """Base class for parsers that read line-based formats.""" def __init__(self, stream): self._stream = stream self._line = None self._eof = False # read lookahead self.readline() def parse(self): raise NotImplementedError def readline(self): line = self._stream.readline() if not line: self._line = '' self._eof = True self._line = line.rstrip('\r\n') def lookahead(self): assert self._line is not None return self._line def consume(self): assert self._line is not None line = self._line self.readline() return line def eof(self): assert self._line is not None return self._eof def skip_whitespace(self): while not self.eof() and self.match_whitespace() or self.match_comment(): self.consume() def match_whitespace(self): line = self.lookahead() return not line.strip() def match_comment(self): return False class TypemapParser(LineParser): def parse(self): typemap = {} self.skip_whitespace() while not self.eof(): line = self.consume() fields = [field.strip() for field in line.split(',')] src = fields[0] dst = fields[3] if dst != '*': typemap[src] = dst self.skip_whitespace() return typemap def match_comment(self): line = self.lookahead() return line.startswith('#') class SpecParser(LineParser): property_re = re.compile(r'^\w+:') prototype_re = re.compile(r'^(\w+)\((.*)\)$') def __init__(self, stream, prefix='', typemap = None): LineParser.__init__(self, stream) if typemap is None: self.typemap = {} else: self.typemap = typemap self.prefix = prefix self.category = None def parse(self): self.skip_whitespace() while not self.eof(): line = self.lookahead() if self.property_re.match(line): self.parse_property() elif self.prototype_re.match(line): self.parse_prototype() else: self.consume() self.skip_whitespace() def parse_property(self): line = self.consume() name, value = line.split(':', 1) if name == 'category': values = value.split() #self.prefix = values[0] get_function_re = re.compile(r'^(Get|Is|Are)[A-Z]\w+') def parse_prototype(self): line = self.consume() mo = self.prototype_re.match(line) function_name, arg_names = mo.groups() arg_names = [arg_name.strip() for arg_name in arg_names.split(',') if arg_name.strip()] extra = '' if self.get_function_re.match(function_name): extra += ', sideeffects=False' function_name = self.prefix + function_name ret_type = 'Void' arg_types = {} category = None line = self.lookahead() while line.startswith('\t'): fields = line.split(None, 2) if fields[0] == 'return': ret_type = self.parse_type(fields[1]) elif fields[0] == 'param': arg_name, arg_type = fields[1:3] arg_types[fields[1]] = self.parse_arg(function_name, arg_name, arg_type) elif fields[0] == 'category': category = fields[1] else: pass self.consume() line = self.lookahead() self.consume() args = [arg_types[arg_name] for arg_name in arg_names] if category is not None: if category == self.prefix: category = self.prefix.upper() else: category = self.prefix.upper() + '_' + category if category != self.category: if self.category is not None: print print ' # %s' % category self.category = category if self.prefix == 'wgl': constructor = 'StdFunction' else: constructor = 'GlFunction' print ' %s(%s, "%s", [%s]%s),' % (constructor, ret_type, function_name, ', '.join(args), extra) array_re = re.compile(r'^array\s+\[(.*)\]$') string_typemap = { 'GLchar': 'GLstring', 'GLcharARB': 'GLstringARB', } def parse_arg(self, function_name, arg_name, arg_type): orig_type, inout, kind = arg_type.split(' ', 2) base_type = self.parse_type(orig_type) if kind == 'value': arg_type = base_type elif kind == 'reference': if inout == 'in': base_type = 'Const(%s)' % base_type arg_type = 'Pointer(%s)' % base_type elif kind.startswith("array"): if inout == 'in': base_type = 'Const(%s)' % base_type arg_type = 'OpaquePointer(%s)' % base_type if base_type in ('Void', 'void', 'GLvoid'): constructor = 'Blob' else: constructor = 'Array' mo = self.array_re.match(kind) if mo: length = mo.group(1).strip() if length == '': try: arg_type = self.string_typemap[base_type] except KeyError: pass elif length == '1': arg_type = 'Pointer(%s)' % base_type elif length.find("COMPSIZE") == -1: try: int(length) except ValueError: length = '"%s"' % length arg_type = '%s(%s, %s)' % (constructor, base_type, length) else: if length == "COMPSIZE(pname)": length = "_gl_param_size(pname)" arg_type = '%s(%s, "%s")' % (constructor, base_type, length) else: length = length.replace("COMPSIZE", "_%s_size" % function_name) length = length.replace("/", ", ") arg_type = 'Opaque%s(%s, "%s")' % (constructor, base_type, length) else: assert False arg = '(%s, "%s")' % (arg_type, arg_name) if inout == 'out': arg = 'Out' + arg return arg semantic_typemap = { 'String': 'CString', 'Texture': 'GLtexture', } post_typemap = { 'void': 'Void', 'int': 'Int', 'float': 'Float', } def parse_type(self, type): try: return self.semantic_typemap[type] except KeyError: pass type = self.typemap.get(type, type) type = self.post_typemap.get(type, type) return type def match_comment(self): line = self.lookahead() return line.startswith('#') def main(): prefix = sys.argv[1] parser = TypemapParser(open(sys.argv[2], 'rt')) typemap = parser.parse() for arg in sys.argv[3:]: parser = SpecParser(open(arg, 'rt'), prefix=prefix, typemap=typemap) parser.parse() if __name__ == '__main__': main() tmpNnpnZF/specs/scripts/README.markdown0000664000175000017500000000327312543167424017276 0ustar chrischrisThis directory contains several helper scripts that facilitate the generation of the API descriptions from specs and/or header files. The specs/headers are not expressive enough, which is why we can't just code generate everything from them directly. However the scripts in this directory usually get 90% of the work done automatically. OpenGL ====== For OpenGL the typical procedure is to run make -B which will generate several python scripts with prototypes and defines from the Khronos `.spec` files: * glapi.py * glparams.py * glxapi.py * wglapi.py * wglenum.py and then manually crossport new functions / enums to the identically named files in the parent dir via a side-by-side diff tool, such as gvimdiff. OpenGL ES ========= Khronos doesn't provide `.spec` files for OpenGL ES. But the `txt2api.py` script can extract and convert prototypes for the `.txt` extension specifications: $ ./txt2api.py http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt # GL_OES_mapbuffer GlFunction(Void, "glGetBufferPointervOES", [(GLenum, "target"), (GLenum, "pname"), (OpaquePointer(OpaquePointer(Void)), "params")], sideeffects=False), GlFunction(OpaquePointer(Void), "glMapBufferOES", [(GLenum, "target"), (GLenum, "access")]), GlFunction(GLboolean, "glUnmapBufferOES", [(GLenum, "target")]), Generic ======= When the domain specific scripts don't work the fallback solution is `c2api.py`, which can parse most C declarations: $ echo 'void *memcpy(void *dest, const void *src, size_t n);' | ./c2api.py Function(OpaquePointer(Void), "memcpy", [(OpaquePointer(Void), "dest"), (OpaquePointer(Const(Void)), "src"), (size_t, "n")]), tmpNnpnZF/specs/scripts/txt2api.py0000775000175000017500000001605512543167424016547 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Parser for OpenGL .txt extensions specification.""" import sys import re import optparse from urllib2 import urlopen def stderr(x): sys.stderr.write(str(x) + '\n') class Parser: def __init__(self, stream): pass class LineParser: """Base class for parsers that read line-based formats.""" def __init__(self, stream): self._stream = stream self._line = None self._eof = False # read lookahead self.readline() def parse(self): raise NotImplementedError def readline(self): line = self._stream.readline() if not line: self._line = '' self._eof = True self._line = line.rstrip('\r\n') def lookahead(self): assert self._line is not None return self._line def consume(self): assert self._line is not None line = self._line self.readline() return line def eof(self): assert self._line is not None return self._eof def skip_whitespace(self): while not self.eof() and self.match_whitespace() or self.match_comment(): self.consume() def match_whitespace(self): line = self.lookahead() return not line.strip() def match_comment(self): return False class TxtParser(LineParser): section_re = re.compile(r'^([A-Z]\w+)( \w+)*$') property_re = re.compile(r'^\w+:') prototype_re = re.compile(r'^(\w+)\((.*)\)$') comment_start_re = re.compile(r'^/\*') comment_end_re = re.compile(r'.*\*/$') def __init__(self, stream, prefix=''): LineParser.__init__(self, stream) self.prefix = prefix def parse(self): while not self.eof(): while not self.eof(): line = self.lookahead() if self.eof(): return mo = self.section_re.match(line) if mo: break self.consume() line = self.consume() self.parse_section(line) print def parse_section(self, name): if name == 'Name Strings': self.parse_strings() if name == 'New Procedures and Functions': self.parse_procs() def parse_strings(self): while not self.eof(): line = self.lookahead() if not line.strip(): self.consume() continue if not line.startswith(' '): break self.consume() name = line.strip() if name.startswith('EGL_'): self.prefix = '' print ' # %s' % name def skip_c_comments(self): while not self.eof(): line = self.lookahead().strip() mo = self.comment_start_re.match(line) if not mo: return while not self.eof(): self.consume() mo = self.comment_end_re.match(line) if mo: return line = self.lookahead().strip() def parse_procs(self): lines = [] while not self.eof(): self.skip_c_comments() line = self.lookahead() if not line.strip(): self.consume() continue if not line[0].isspace(): break self.consume() lines.append(line.strip()) if line[-1] in (';', ')'): prototype = ' '.join(lines) self.parse_proc(prototype) lines = [] token_re = re.compile(r'(\w+|\s+|.)') get_function_re = re.compile(r'^Get[A-Z]\w+') def parse_proc(self, prototype): #print prototype tokens = self.token_re.split(prototype) self.tokens = [token for token in tokens if token.strip()] #print self.tokens ret = self.parse_type() name = self.tokens.pop(0) extra = '' if self.get_function_re.match(name): extra += ', sideeffects=False' name = self.prefix + name assert self.tokens.pop(0) == '(' args = [] while self.tokens[0] != ')': arg = self.parse_arg() args.append(arg) if self.tokens[0] == ',': self.tokens.pop(0) print ' GlFunction(%s, "%s", [%s]%s),' % (ret, name, ', '.join(args), extra) def parse_arg(self): type = self.parse_type() if self.tokens[0] == ')': assert type == 'Void' return '' name = self.tokens.pop(0) if self.tokens[0] == '[': self.tokens.pop(0) n = int(self.tokens.pop(0)) assert self.tokens.pop(0) == ']' type = 'Array(%s, %d)' % (type, n) return '(%s, "%s")' % (type, name) def parse_type(self): token = self.tokens.pop(0) if token == 'const': return 'Const(%s)' % self.parse_type() if token == 'void': type = 'Void' else: type = self.prefix.upper() + token while self.tokens[0] == '*': type = 'OpaquePointer(%s)' % type self.tokens.pop(0) return type def main(): optparser = optparse.OptionParser( usage="\n\t%prog [options] [URL|TXT] ...") optparser.add_option( '-p', '--prefix', metavar='STRING', type="string", dest="prefix", default='gl', help="function prefix [default: %default]") (options, args) = optparser.parse_args(sys.argv[1:]) for arg in args: if arg.startswith('http://') or arg.startswith('https://'): stream = urlopen(arg, 'rt') else: stream = open(arg, 'rt') parser = TxtParser(stream, prefix = options.prefix) parser.parse() if __name__ == '__main__': main() tmpNnpnZF/specs/scripts/xml2glparams.py0000775000175000017500000000413112543167424017555 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2014 VMware, Inc # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ # # Script to half-generate glparams.py based on Khronos' gl.xml # import sys import xml.etree.ElementTree as ET for arg in sys.argv[1:]: tree = ET.parse(arg) root = tree.getroot() params = {} for enums in root.findall('enums'): if enums.attrib.get('type') == 'bitmask': continue for enum in enums.findall('enum'): name = enum.attrib['name'] value = enum.attrib['value'] if value.isdigit(): value = int(value) elif value.startswith('0x'): value = int(value, 16) else: continue params.setdefault(value, name) values = params.keys() values.sort() for value in values: name = params[value] print ' ("",\tX,\t1,\t"%s"),\t# 0x%04X' % (name, value) tmpNnpnZF/specs/scripts/xml2enum.py0000775000175000017500000000411012543167424016710 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2014 VMware, Inc # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ # # Script to half-generate *enum.py based on Khronos' *.xml # import sys import xml.etree.ElementTree as ET for arg in sys.argv[1:]: tree = ET.parse(arg) root = tree.getroot() params = {} for enums in root.findall('enums'): if enums.attrib.get('type') == 'bitmask': continue for enum in enums.findall('enum'): name = enum.attrib['name'] value = enum.attrib['value'] if value.isdigit(): value = int(value) elif value.startswith('0x'): value = int(value, 16) else: continue params.setdefault(value, name) values = params.keys() values.sort() for value in values: name = params[value] print ' "%s",\t\t# 0x%04X' % (name, value) tmpNnpnZF/specs/scripts/.gitignore0000664000175000017500000000011612543167424016556 0ustar chrischris*.spec *.tm *.xml *api.py *enum.py !*2api.py !*2enum.py glparams.py !Makefile tmpNnpnZF/specs/scripts/c2api.py0000775000175000017500000003142512543167424016150 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Script to parse C declarations and spew API definitions. ''' import sys import re import optparse class DeclParser: token_re = re.compile(r'(\d[x0-9a-fA-F.UL]*|\w+|\s+|"[^"]*"|.)') multi_comment_re = re.compile(r'/\*.*?\*/', flags = re.DOTALL) single_comment_re = re.compile(r'//.*',) def __init__(self): self.tokens = [] def has_side_effects(self, name): return True def tokenize(self, s): s = self.multi_comment_re.sub('', s) s = self.single_comment_re.sub('', s) self.tokens = self.token_re.split(s) self.tokens = [token for token in self.tokens if self.filter_token(token)] def filter_token(self, token): if not token or token.isspace(): return False if token.startswith('AVAILABLE_') or token.startswith('DEPRECATED_'): return False if token in ['FAR']: return False return True def lookahead(self, index = 0): try: return self.tokens[index] except KeyError: return None def match(self, *ref_tokens): return self.lookahead() in ref_tokens def consume(self, *ref_tokens): if not self.tokens: raise Exception('unexpected EOF') token = self.tokens.pop(0) if ref_tokens and token not in ref_tokens: raise Exception('token mismatch', token, ref_tokens) return token def eof(self): return not self.tokens def parse(self, s): self.tokenize(s) while not self.eof(): #print self.tokens[0:10] self.parse_declaration() def parse_declaration(self): self.parse_tags() if self.match('#'): self.parse_define() elif self.match('enum'): self.parse_enum() elif self.match('class', 'interface'): self.parse_interface(self.lookahead()) elif self.match('mask'): self.parse_value('mask', 'Flags') elif self.match('struct'): self.parse_struct() elif self.match('value'): self.parse_value('value', 'FakeEnum') elif self.match('typedef'): self.parse_typedef() else: self.parse_prototype() if not self.eof() and self.match(';'): self.consume(';') def parse_typedef(self): self.consume('typedef') if self.lookahead(2) in (';', ','): base_type = self.consume() while True: type = base_type if self.match('*'): self.consume() type = 'Pointer(%s)' % type name = self.consume() print '%s = Alias("%s", %s)' % (name, name, type) if self.match(','): self.consume() else: break else: self.parse_declaration() self.consume() def parse_enum(self): self.consume('enum') name = self.consume() self.consume('{') print '%s = Enum("%s", [' % (name, name) #value = 0 while self.lookahead() != '}': name = self.consume() if self.match('='): self.consume('=') value = self.consume() if self.match(','): self.consume(',') tags = self.parse_tags() #print ' "%s",\t# %s' % (name, value) print ' "%s",' % (name,) #value += 1 self.consume('}') print '])' print def parse_value(self, ref_token, constructor): self.consume(ref_token) type = self.consume() name = self.consume() self.consume('{') print '%s = %s(%s, [' % (name, constructor, type) while self.lookahead() != '}': name, value = self.parse_define() self.consume('}') print '])' print def parse_define(self): self.consume('#') self.consume('define') name = self.consume() value = self.consume() #print ' "%s",\t# %s' % (name, value) print ' "%s",' % (name,) return name, value def parse_struct(self): self.consume('struct') name = self.consume() print '%s = Struct("%s", [' % (name, name) for type, name in self.parse_members(): print ' (%s, "%s"),' % (type, name) print '])' print def parse_union(self): self.consume('union') if not self.match('{'): name = self.consume() else: name = None members = self.parse_members() return 'Union("%s", [%s])' % (name, ', '.join('%s, "%s"' % member for member in members)) def parse_members(self): members = [] self.consume('{') while self.lookahead() != '}': type, name = self.parse_named_type() if self.match(':'): self.consume() self.consume() if self.match(','): self.consume(',') self.consume(';') members.append((type, name)) self.consume('}') return members def parse_interface(self, ref_token): self.consume(ref_token) name = self.consume() if self.match(';'): return self.consume(':') if self.lookahead() in ('public', 'protected'): self.consume() base = self.consume() self.consume('{') print '%s = Interface("%s", %s)' % (name, name, base) print '%s.methods += [' % (name,) while self.lookahead() != '}': if self.lookahead() in ('public', 'private'): self.consume() self.consume(':') else: self.parse_prototype('Method') self.consume(';') self.consume('}') print ']' print def parse_prototype(self, creator = 'Function'): if self.match('extern', 'virtual'): self.consume() ret = self.parse_type() if self.match('__stdcall', 'WINAPI', 'STDMETHODCALLTYPE'): self.consume() creator = 'Std' + creator name = self.consume() extra = '' if not self.has_side_effects(name): extra += ', sideeffects=False' name = name self.consume('(') args = [] if self.match('void') and self.tokens[1] == ')': self.consume() while self.lookahead() != ')': arg = self.parse_arg() args.append(arg) if self.match(','): self.consume() self.consume(')') if self.match('const', 'CONST'): self.consume() extra = ', const=True' + extra if self.lookahead() == '=': self.consume() self.consume('0') print ' %s(%s, "%s", [%s]%s),' % (creator, ret, name, ', '.join(args), extra) def parse_arg(self): tags = self.parse_tags() type, name = self.parse_named_type() arg = '(%s, "%s")' % (type, name) if 'out' in tags or 'inout' in tags: arg = 'Out' + arg if self.match('='): self.consume() while not self.match(',', ')'): self.consume() return arg def parse_tags(self): tags = [] if self.match('['): self.consume() while not self.match(']'): tag = self.consume() tags.append(tag) self.consume(']') if tags[0] == 'annotation': assert tags[1] == '(' assert tags[3] == ')' tags = tags[2] assert tags[0] == '"' assert tags[-1] == '"' tags = tags[1:-1] tags = parse_sal_annotation(tags) token = self.lookahead() if token[0] == '_' and (token[1] == '_' or token[-1] == '_'): # Parse __in, __out, etc tags tag = self.consume() if self.match('('): tag += self.consume() while not self.match(')'): tag += self.consume() tag += self.consume(')') tags.extend(self.parse_sal_annotation(tag)) return tags def parse_sal_annotation(self, tags): try: tags, args = tags.split('(') except ValueError: pass assert tags[0] == '_' if tags[1] == '_': tags = tags[2:] if tags[-1] == '_': tags = tags[1:-1] tags = tags.lower() tags = tags.split('_') return tags def parse_named_type(self): type = self.parse_type() if self.match(',', ';', '}', ')'): name = None else: name = self.consume() if self.match('['): self.consume() length = '' while not self.match(']'): length += self.consume() self.consume(']') try: int(length) except ValueError: length = '"%s"' % length type = 'Array(%s, %s)' % (type, length) return type, name int_tokens = ('unsigned', 'signed', 'int', 'long', 'short', 'char') type_table = { 'float': 'Float', 'double': 'Double', 'int8_t': 'Int8', 'uint8_t': 'UInt8', 'int16_t': 'Int16', 'uint16_t': 'UInt16', 'int32_t': 'Int32', 'uint32_t': 'UInt32', 'int64_t' : 'Int64', 'uint64_t': 'UInt64', } def parse_type(self): const = False if self.match('const', 'CONST'): self.consume() const = True if self.match('void'): self.consume() type = 'Void' elif self.match('union'): type = self.parse_union() elif self.match(*self.int_tokens): unsigned = False signed = False long = 0 short = 0 char = False while self.match(*self.int_tokens): token = self.consume() if token == 'unsigned': unsigned = True if token == 'signed': signed = True if token == 'long': long += 1 if token == 'short': short += 1 if token == 'char': char = False if char: type = 'Char' if signed: type = 'S' + type elif short: type = 'Short' elif long: type = 'Long' * long else: type = 'Int' if unsigned: type = 'U' + type else: token = self.consume() type = self.type_table.get(token, token) if const: type = 'Const(%s)' % type while True: if self.match('*'): self.consume('*') type = 'Pointer(%s)' % type elif self.match('const', 'CONST'): self.consume() type = 'Const(%s)' % type else: break return type def main(): args = sys.argv[1:] parser = DeclParser() if args: for arg in args: parser.parse(open(arg, 'rt').read()) else: parser.parse(sys.stdin.read()) if __name__ == '__main__': main() tmpNnpnZF/specs/dwrite.py0000664000175000017500000013517612543167424014766 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * from dcommon import * ID2D1SimplifiedGeometrySink = Interface("ID2D1SimplifiedGeometrySink", IUnknown) IDWriteGeometrySink = Alias("IDWriteGeometrySink", ID2D1SimplifiedGeometrySink) IDWriteFontFileLoader = Interface("IDWriteFontFileLoader", IUnknown) IDWriteLocalFontFileLoader = Interface("IDWriteLocalFontFileLoader", IDWriteFontFileLoader) IDWriteFontFileStream = Interface("IDWriteFontFileStream", IUnknown) IDWriteFontFile = Interface("IDWriteFontFile", IUnknown) IDWriteRenderingParams = Interface("IDWriteRenderingParams", IUnknown) IDWriteFontFace = Interface("IDWriteFontFace", IUnknown) IDWriteFontCollectionLoader = Interface("IDWriteFontCollectionLoader", IUnknown) IDWriteFontFileEnumerator = Interface("IDWriteFontFileEnumerator", IUnknown) IDWriteLocalizedStrings = Interface("IDWriteLocalizedStrings", IUnknown) IDWriteFontCollection = Interface("IDWriteFontCollection", IUnknown) IDWriteFontList = Interface("IDWriteFontList", IUnknown) IDWriteFontFamily = Interface("IDWriteFontFamily", IDWriteFontList) IDWriteFont = Interface("IDWriteFont", IUnknown) IDWriteTextFormat = Interface("IDWriteTextFormat", IUnknown) IDWriteTypography = Interface("IDWriteTypography", IUnknown) IDWriteNumberSubstitution = Interface("IDWriteNumberSubstitution", IUnknown) IDWriteTextAnalysisSource = Interface("IDWriteTextAnalysisSource", IUnknown) IDWriteTextAnalysisSink = Interface("IDWriteTextAnalysisSink", IUnknown) IDWriteTextAnalyzer = Interface("IDWriteTextAnalyzer", IUnknown) IDWriteInlineObject = Interface("IDWriteInlineObject", IUnknown) IDWritePixelSnapping = Interface("IDWritePixelSnapping", IUnknown) IDWriteTextRenderer = Interface("IDWriteTextRenderer", IDWritePixelSnapping) IDWriteTextLayout = Interface("IDWriteTextLayout", IDWriteTextFormat) IDWriteBitmapRenderTarget = Interface("IDWriteBitmapRenderTarget", IUnknown) IDWriteGdiInterop = Interface("IDWriteGdiInterop", IUnknown) IDWriteGlyphRunAnalysis = Interface("IDWriteGlyphRunAnalysis", IUnknown) IDWriteFactory = Interface("IDWriteFactory", IUnknown) def EnumFlag(expr, values): return Flags(Alias(expr, DWORD), values) DWRITE_FONT_FILE_TYPE = Enum("DWRITE_FONT_FILE_TYPE", [ "DWRITE_FONT_FILE_TYPE_UNKNOWN", "DWRITE_FONT_FILE_TYPE_CFF", "DWRITE_FONT_FILE_TYPE_TRUETYPE", "DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION", "DWRITE_FONT_FILE_TYPE_TYPE1_PFM", "DWRITE_FONT_FILE_TYPE_TYPE1_PFB", "DWRITE_FONT_FILE_TYPE_VECTOR", "DWRITE_FONT_FILE_TYPE_BITMAP", ]) DWRITE_FONT_FACE_TYPE = Enum("DWRITE_FONT_FACE_TYPE", [ "DWRITE_FONT_FACE_TYPE_CFF", "DWRITE_FONT_FACE_TYPE_TRUETYPE", "DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION", "DWRITE_FONT_FACE_TYPE_TYPE1", "DWRITE_FONT_FACE_TYPE_VECTOR", "DWRITE_FONT_FACE_TYPE_BITMAP", "DWRITE_FONT_FACE_TYPE_UNKNOWN", ]) DWRITE_FONT_SIMULATIONS = EnumFlag("DWRITE_FONT_SIMULATIONS", [ "DWRITE_FONT_SIMULATIONS_NONE", "DWRITE_FONT_SIMULATIONS_BOLD", "DWRITE_FONT_SIMULATIONS_OBLIQUE", ]) DWRITE_FONT_WEIGHT = Enum("DWRITE_FONT_WEIGHT", [ "DWRITE_FONT_WEIGHT_THIN", "DWRITE_FONT_WEIGHT_EXTRA_LIGHT", #"DWRITE_FONT_WEIGHT_ULTRA_LIGHT", "DWRITE_FONT_WEIGHT_LIGHT", "DWRITE_FONT_WEIGHT_NORMAL", #"DWRITE_FONT_WEIGHT_REGULAR", "DWRITE_FONT_WEIGHT_MEDIUM", "DWRITE_FONT_WEIGHT_DEMI_BOLD", #"DWRITE_FONT_WEIGHT_SEMI_BOLD", "DWRITE_FONT_WEIGHT_BOLD", "DWRITE_FONT_WEIGHT_EXTRA_BOLD", #"DWRITE_FONT_WEIGHT_ULTRA_BOLD", "DWRITE_FONT_WEIGHT_BLACK", #"DWRITE_FONT_WEIGHT_HEAVY", "DWRITE_FONT_WEIGHT_EXTRA_BLACK", #"DWRITE_FONT_WEIGHT_ULTRA_BLACK", ]) DWRITE_FONT_STRETCH = Enum("DWRITE_FONT_STRETCH", [ "DWRITE_FONT_STRETCH_UNDEFINED", "DWRITE_FONT_STRETCH_ULTRA_CONDENSED", "DWRITE_FONT_STRETCH_EXTRA_CONDENSED", "DWRITE_FONT_STRETCH_CONDENSED", "DWRITE_FONT_STRETCH_SEMI_CONDENSED", "DWRITE_FONT_STRETCH_NORMAL", #"DWRITE_FONT_STRETCH_MEDIUM", "DWRITE_FONT_STRETCH_SEMI_EXPANDED", "DWRITE_FONT_STRETCH_EXPANDED", "DWRITE_FONT_STRETCH_EXTRA_EXPANDED", "DWRITE_FONT_STRETCH_ULTRA_EXPANDED", ]) DWRITE_FONT_STYLE = Enum("DWRITE_FONT_STYLE", [ "DWRITE_FONT_STYLE_NORMAL", "DWRITE_FONT_STYLE_OBLIQUE", "DWRITE_FONT_STYLE_ITALIC", ]) DWRITE_INFORMATIONAL_STRING_ID = Enum("DWRITE_INFORMATIONAL_STRING_ID", [ "DWRITE_INFORMATIONAL_STRING_NONE", "DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE", "DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS", "DWRITE_INFORMATIONAL_STRING_TRADEMARK", "DWRITE_INFORMATIONAL_STRING_MANUFACTURER", "DWRITE_INFORMATIONAL_STRING_DESIGNER", "DWRITE_INFORMATIONAL_STRING_DESIGNER_URL", "DWRITE_INFORMATIONAL_STRING_DESCRIPTION", "DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL", "DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION", "DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL", "DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES", "DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES", "DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES", "DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES", "DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT", ]) DWRITE_FONT_METRICS = Struct("DWRITE_FONT_METRICS", [ (UINT16, "designUnitsPerEm"), (UINT16, "ascent"), (UINT16, "descent"), (INT16, "lineGap"), (UINT16, "capHeight"), (UINT16, "xHeight"), (INT16, "underlinePosition"), (UINT16, "underlineThickness"), (INT16, "strikethroughPosition"), (UINT16, "strikethroughThickness"), ]) DWRITE_GLYPH_METRICS = Struct("DWRITE_GLYPH_METRICS", [ (INT32, "leftSideBearing"), (UINT32, "advanceWidth"), (INT32, "rightSideBearing"), (INT32, "topSideBearing"), (UINT32, "advanceHeight"), (INT32, "bottomSideBearing"), (INT32, "verticalOriginY"), ]) DWRITE_GLYPH_OFFSET = Struct("DWRITE_GLYPH_OFFSET", [ (FLOAT, "advanceOffset"), (FLOAT, "ascenderOffset"), ]) DWRITE_FACTORY_TYPE = Enum("DWRITE_FACTORY_TYPE", [ "DWRITE_FACTORY_TYPE_SHARED", "DWRITE_FACTORY_TYPE_ISOLATED", ]) IDWriteFontFileLoader.methods += [ StdMethod(HRESULT, "CreateStreamFromKey", [(OpaquePointer(Const(Void)), "fontFileReferenceKey"), (UINT32, "fontFileReferenceKeySize"), Out(Pointer(ObjPointer(IDWriteFontFileStream)), "fontFileStream")]), ] IDWriteLocalFontFileLoader.methods += [ StdMethod(HRESULT, "GetFilePathLengthFromKey", [(OpaquePointer(Const(Void)), "fontFileReferenceKey"), (UINT32, "fontFileReferenceKeySize"), Out(Pointer(UINT32), "filePathLength")]), StdMethod(HRESULT, "GetFilePathFromKey", [(OpaquePointer(Const(Void)), "fontFileReferenceKey"), (UINT32, "fontFileReferenceKeySize"), Out(Pointer(WCHAR), "filePath"), (UINT32, "filePathSize")]), StdMethod(HRESULT, "GetLastWriteTimeFromKey", [(OpaquePointer(Const(Void)), "fontFileReferenceKey"), (UINT32, "fontFileReferenceKeySize"), Out(Pointer(FILETIME), "lastWriteTime")]), ] IDWriteFontFileStream.methods += [ StdMethod(HRESULT, "ReadFileFragment", [Out(Pointer(OpaquePointer(Const(Void))), "fragmentStart"), (UINT64, "fileOffset"), (UINT64, "fragmentSize"), Out(Pointer(OpaquePointer(Void)), "fragmentContext")]), StdMethod(Void, "ReleaseFileFragment", [(OpaquePointer(Void), "fragmentContext")]), StdMethod(HRESULT, "GetFileSize", [Out(Pointer(UINT64), "fileSize")]), StdMethod(HRESULT, "GetLastWriteTime", [Out(Pointer(UINT64), "lastWriteTime")]), ] IDWriteFontFile.methods += [ StdMethod(HRESULT, "GetReferenceKey", [Out(Pointer(OpaquePointer(Const(Void))), "fontFileReferenceKey"), Out(Pointer(UINT32), "fontFileReferenceKeySize")]), StdMethod(HRESULT, "GetLoader", [Out(Pointer(ObjPointer(IDWriteFontFileLoader)), "fontFileLoader")]), StdMethod(HRESULT, "Analyze", [Out(Pointer(BOOL), "isSupportedFontType"), Out(Pointer(DWRITE_FONT_FILE_TYPE), "fontFileType"), Out(Pointer(DWRITE_FONT_FACE_TYPE), "fontFaceType"), Out(Pointer(UINT32), "numberOfFaces")]), ] DWRITE_PIXEL_GEOMETRY = Enum("DWRITE_PIXEL_GEOMETRY", [ "DWRITE_PIXEL_GEOMETRY_FLAT", "DWRITE_PIXEL_GEOMETRY_RGB", "DWRITE_PIXEL_GEOMETRY_BGR", ]) DWRITE_RENDERING_MODE = Enum("DWRITE_RENDERING_MODE", [ "DWRITE_RENDERING_MODE_DEFAULT", "DWRITE_RENDERING_MODE_ALIASED", "DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC", "DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL", "DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL", "DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC", "DWRITE_RENDERING_MODE_OUTLINE", ]) DWRITE_MATRIX = Struct("DWRITE_MATRIX", [ (FLOAT, "m11"), (FLOAT, "m12"), (FLOAT, "m21"), (FLOAT, "m22"), (FLOAT, "dx"), (FLOAT, "dy"), ]) IDWriteRenderingParams.methods += [ StdMethod(FLOAT, "GetGamma", []), StdMethod(FLOAT, "GetEnhancedContrast", []), StdMethod(FLOAT, "GetClearTypeLevel", []), StdMethod(DWRITE_PIXEL_GEOMETRY, "GetPixelGeometry", []), StdMethod(DWRITE_RENDERING_MODE, "GetRenderingMode", []), ] IDWriteFontFace.methods += [ StdMethod(DWRITE_FONT_FACE_TYPE, "GetType", []), StdMethod(HRESULT, "GetFiles", [(OpaquePointer(UINT32), "numberOfFiles"), Out(Pointer(ObjPointer(IDWriteFontFile)), "fontFiles")]), StdMethod(UINT32, "GetIndex", []), StdMethod(DWRITE_FONT_SIMULATIONS, "GetSimulations", []), StdMethod(BOOL, "IsSymbolFont", []), StdMethod(Void, "GetMetrics", [Out(Pointer(DWRITE_FONT_METRICS), "fontFaceMetrics")]), StdMethod(UINT16, "GetGlyphCount", []), StdMethod(HRESULT, "GetDesignGlyphMetrics", [(Pointer(Const(UINT16)), "glyphIndices"), (UINT32, "glyphCount"), Out(Pointer(DWRITE_GLYPH_METRICS), "glyphMetrics"), (BOOL, "isSideways")]), StdMethod(HRESULT, "GetGlyphIndices", [(Pointer(Const(UINT32)), "codePoints"), (UINT32, "codePointCount"), Out(Pointer(UINT16), "glyphIndices")]), StdMethod(HRESULT, "TryGetFontTable", [(UINT32, "openTypeTableTag"), Out(Pointer(OpaquePointer(Const(Void))), "tableData"), Out(Pointer(UINT32), "tableSize"), Out(Pointer(OpaquePointer(Void)), "tableContext"), Out(Pointer(BOOL), "exists")]), StdMethod(Void, "ReleaseFontTable", [(OpaquePointer(Void), "tableContext")]), StdMethod(HRESULT, "GetGlyphRunOutline", [(FLOAT, "emSize"), (Pointer(Const(UINT16)), "glyphIndices"), (Pointer(Const(FLOAT)), "glyphAdvances"), (Pointer(Const(DWRITE_GLYPH_OFFSET)), "glyphOffsets"), (UINT32, "glyphCount"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (ObjPointer(IDWriteGeometrySink), "geometrySink")]), StdMethod(HRESULT, "GetRecommendedRenderingMode", [(FLOAT, "emSize"), (FLOAT, "pixelsPerDip"), (DWRITE_MEASURING_MODE, "measuringMode"), (ObjPointer(IDWriteRenderingParams), "renderingParams"), Out(Pointer(DWRITE_RENDERING_MODE), "renderingMode")]), StdMethod(HRESULT, "GetGdiCompatibleMetrics", [(FLOAT, "emSize"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), Out(Pointer(DWRITE_FONT_METRICS), "fontFaceMetrics")]), StdMethod(HRESULT, "GetGdiCompatibleGlyphMetrics", [(FLOAT, "emSize"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), (BOOL, "useGdiNatural"), (Array(Const(UINT16), "glyphCount"), "glyphIndices"), (UINT32, "glyphCount"), Out(Array(DWRITE_GLYPH_METRICS, "glyphCount"), "glyphMetrics"), (BOOL, "isSideways")]), ] IDWriteFontCollectionLoader.methods += [ StdMethod(HRESULT, "CreateEnumeratorFromKey", [(ObjPointer(IDWriteFactory), "factory"), (OpaquePointer(Const(Void)), "collectionKey"), (UINT32, "collectionKeySize"), Out(Pointer(ObjPointer(IDWriteFontFileEnumerator)), "fontFileEnumerator")]), ] IDWriteFontFileEnumerator.methods += [ StdMethod(HRESULT, "MoveNext", [Out(Pointer(BOOL), "hasCurrentFile")]), StdMethod(HRESULT, "GetCurrentFontFile", [Out(Pointer(ObjPointer(IDWriteFontFile)), "fontFile")]), ] IDWriteLocalizedStrings.methods += [ StdMethod(UINT32, "GetCount", []), StdMethod(HRESULT, "FindLocaleName", [(Pointer(Const(WCHAR)), "localeName"), Out(Pointer(UINT32), "index"), Out(Pointer(BOOL), "exists")]), StdMethod(HRESULT, "GetLocaleNameLength", [(UINT32, "index"), Out(Pointer(UINT32), "length")]), StdMethod(HRESULT, "GetLocaleName", [(UINT32, "index"), Out(Pointer(WCHAR), "localeName"), (UINT32, "size")]), StdMethod(HRESULT, "GetStringLength", [(UINT32, "index"), Out(Pointer(UINT32), "length")]), StdMethod(HRESULT, "GetString", [(UINT32, "index"), Out(Pointer(WCHAR), "stringBuffer"), (UINT32, "size")]), ] IDWriteFontCollection.methods += [ StdMethod(UINT32, "GetFontFamilyCount", []), StdMethod(HRESULT, "GetFontFamily", [(UINT32, "index"), Out(Pointer(ObjPointer(IDWriteFontFamily)), "fontFamily")]), StdMethod(HRESULT, "FindFamilyName", [(Pointer(Const(WCHAR)), "familyName"), Out(Pointer(UINT32), "index"), Out(Pointer(BOOL), "exists")]), StdMethod(HRESULT, "GetFontFromFontFace", [(ObjPointer(IDWriteFontFace), "fontFace"), Out(Pointer(ObjPointer(IDWriteFont)), "font")]), ] IDWriteFontList.methods += [ StdMethod(HRESULT, "GetFontCollection", [Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection")]), StdMethod(UINT32, "GetFontCount", []), StdMethod(HRESULT, "GetFont", [(UINT32, "index"), Out(Pointer(ObjPointer(IDWriteFont)), "font")]), ] IDWriteFontFamily.methods += [ StdMethod(HRESULT, "GetFamilyNames", [Out(Pointer(ObjPointer(IDWriteLocalizedStrings)), "names")]), StdMethod(HRESULT, "GetFirstMatchingFont", [(DWRITE_FONT_WEIGHT, "weight"), (DWRITE_FONT_STRETCH, "stretch"), (DWRITE_FONT_STYLE, "style"), Out(Pointer(ObjPointer(IDWriteFont)), "matchingFont")]), StdMethod(HRESULT, "GetMatchingFonts", [(DWRITE_FONT_WEIGHT, "weight"), (DWRITE_FONT_STRETCH, "stretch"), (DWRITE_FONT_STYLE, "style"), Out(Pointer(ObjPointer(IDWriteFontList)), "matchingFonts")]), ] IDWriteFont.methods += [ StdMethod(HRESULT, "GetFontFamily", [Out(Pointer(ObjPointer(IDWriteFontFamily)), "fontFamily")]), StdMethod(DWRITE_FONT_WEIGHT, "GetWeight", []), StdMethod(DWRITE_FONT_STRETCH, "GetStretch", []), StdMethod(DWRITE_FONT_STYLE, "GetStyle", []), StdMethod(BOOL, "IsSymbolFont", []), StdMethod(HRESULT, "GetFaceNames", [Out(Pointer(ObjPointer(IDWriteLocalizedStrings)), "names")]), StdMethod(HRESULT, "GetInformationalStrings", [(DWRITE_INFORMATIONAL_STRING_ID, "informationalStringID"), Out(Pointer(ObjPointer(IDWriteLocalizedStrings)), "informationalStrings"), Out(Pointer(BOOL), "exists")]), StdMethod(DWRITE_FONT_SIMULATIONS, "GetSimulations", []), StdMethod(Void, "GetMetrics", [Out(Pointer(DWRITE_FONT_METRICS), "fontMetrics")]), StdMethod(HRESULT, "HasCharacter", [(UINT32, "unicodeValue"), Out(Pointer(BOOL), "exists")]), StdMethod(HRESULT, "CreateFontFace", [Out(Pointer(ObjPointer(IDWriteFontFace)), "fontFace")]), ] DWRITE_READING_DIRECTION = Enum("DWRITE_READING_DIRECTION", [ "DWRITE_READING_DIRECTION_LEFT_TO_RIGHT", "DWRITE_READING_DIRECTION_RIGHT_TO_LEFT", ]) DWRITE_FLOW_DIRECTION = Enum("DWRITE_FLOW_DIRECTION", [ "DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM", ]) DWRITE_TEXT_ALIGNMENT = Enum("DWRITE_TEXT_ALIGNMENT", [ "DWRITE_TEXT_ALIGNMENT_LEADING", "DWRITE_TEXT_ALIGNMENT_TRAILING", "DWRITE_TEXT_ALIGNMENT_CENTER", ]) DWRITE_PARAGRAPH_ALIGNMENT = Enum("DWRITE_PARAGRAPH_ALIGNMENT", [ "DWRITE_PARAGRAPH_ALIGNMENT_NEAR", "DWRITE_PARAGRAPH_ALIGNMENT_FAR", "DWRITE_PARAGRAPH_ALIGNMENT_CENTER", ]) DWRITE_WORD_WRAPPING = Enum("DWRITE_WORD_WRAPPING", [ "DWRITE_WORD_WRAPPING_WRAP", "DWRITE_WORD_WRAPPING_NO_WRAP", ]) DWRITE_LINE_SPACING_METHOD = Enum("DWRITE_LINE_SPACING_METHOD", [ "DWRITE_LINE_SPACING_METHOD_DEFAULT", "DWRITE_LINE_SPACING_METHOD_UNIFORM", ]) DWRITE_TRIMMING_GRANULARITY = Enum("DWRITE_TRIMMING_GRANULARITY", [ "DWRITE_TRIMMING_GRANULARITY_NONE", "DWRITE_TRIMMING_GRANULARITY_CHARACTER", "DWRITE_TRIMMING_GRANULARITY_WORD", ]) DWRITE_FONT_FEATURE_TAG = Enum("DWRITE_FONT_FEATURE_TAG", [ "DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS", "DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS", "DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS", "DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES", "DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS", "DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION", "DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES", "DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING", "DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH", "DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING", "DWRITE_FONT_FEATURE_TAG_DEFAULT", "DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES", "DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS", "DWRITE_FONT_FEATURE_TAG_FRACTIONS", "DWRITE_FONT_FEATURE_TAG_FULL_WIDTH", "DWRITE_FONT_FEATURE_TAG_HALF_FORMS", "DWRITE_FONT_FEATURE_TAG_HALANT_FORMS", "DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH", "DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS", "DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES", "DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES", "DWRITE_FONT_FEATURE_TAG_HALF_WIDTH", "DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS", "DWRITE_FONT_FEATURE_TAG_JIS04_FORMS", "DWRITE_FONT_FEATURE_TAG_JIS78_FORMS", "DWRITE_FONT_FEATURE_TAG_JIS83_FORMS", "DWRITE_FONT_FEATURE_TAG_JIS90_FORMS", "DWRITE_FONT_FEATURE_TAG_KERNING", "DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES", "DWRITE_FONT_FEATURE_TAG_LINING_FIGURES", "DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS", "DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING", "DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK", "DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING", "DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS", "DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS", "DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES", "DWRITE_FONT_FEATURE_TAG_ORDINALS", "DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH", "DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS", "DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES", "DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS", "DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS", "DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES", "DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES", "DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS", "DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS", "DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19", "DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20", "DWRITE_FONT_FEATURE_TAG_SUBSCRIPT", "DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT", "DWRITE_FONT_FEATURE_TAG_SWASH", "DWRITE_FONT_FEATURE_TAG_TITLING", "DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS", "DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES", "DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS", "DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS", "DWRITE_FONT_FEATURE_TAG_UNICASE", "DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO", ]) DWRITE_TEXT_RANGE = Struct("DWRITE_TEXT_RANGE", [ (UINT32, "startPosition"), (UINT32, "length"), ]) DWRITE_FONT_FEATURE = Struct("DWRITE_FONT_FEATURE", [ (DWRITE_FONT_FEATURE_TAG, "nameTag"), (UINT32, "parameter"), ]) DWRITE_TYPOGRAPHIC_FEATURES = Struct("DWRITE_TYPOGRAPHIC_FEATURES", [ (OpaquePointer(DWRITE_FONT_FEATURE), "features"), (UINT32, "featureCount"), ]) DWRITE_TRIMMING = Struct("DWRITE_TRIMMING", [ (DWRITE_TRIMMING_GRANULARITY, "granularity"), (UINT32, "delimiter"), (UINT32, "delimiterCount"), ]) IDWriteTextFormat.methods += [ StdMethod(HRESULT, "SetTextAlignment", [(DWRITE_TEXT_ALIGNMENT, "textAlignment")]), StdMethod(HRESULT, "SetParagraphAlignment", [(DWRITE_PARAGRAPH_ALIGNMENT, "paragraphAlignment")]), StdMethod(HRESULT, "SetWordWrapping", [(DWRITE_WORD_WRAPPING, "wordWrapping")]), StdMethod(HRESULT, "SetReadingDirection", [(DWRITE_READING_DIRECTION, "readingDirection")]), StdMethod(HRESULT, "SetFlowDirection", [(DWRITE_FLOW_DIRECTION, "flowDirection")]), StdMethod(HRESULT, "SetIncrementalTabStop", [(FLOAT, "incrementalTabStop")]), StdMethod(HRESULT, "SetTrimming", [(Pointer(Const(DWRITE_TRIMMING)), "trimmingOptions"), (OpaquePointer(IDWriteInlineObject), "trimmingSign")]), StdMethod(HRESULT, "SetLineSpacing", [(DWRITE_LINE_SPACING_METHOD, "lineSpacingMethod"), (FLOAT, "lineSpacing"), (FLOAT, "baseline")]), StdMethod(DWRITE_TEXT_ALIGNMENT, "GetTextAlignment", []), StdMethod(DWRITE_PARAGRAPH_ALIGNMENT, "GetParagraphAlignment", []), StdMethod(DWRITE_WORD_WRAPPING, "GetWordWrapping", []), StdMethod(DWRITE_READING_DIRECTION, "GetReadingDirection", []), StdMethod(DWRITE_FLOW_DIRECTION, "GetFlowDirection", []), StdMethod(FLOAT, "GetIncrementalTabStop", []), StdMethod(HRESULT, "GetTrimming", [Out(Pointer(DWRITE_TRIMMING), "trimmingOptions"), Out(Pointer(OpaquePointer(IDWriteInlineObject)), "trimmingSign")]), StdMethod(HRESULT, "GetLineSpacing", [Out(Pointer(DWRITE_LINE_SPACING_METHOD), "lineSpacingMethod"), Out(Pointer(FLOAT), "lineSpacing"), Out(Pointer(FLOAT), "baseline")]), StdMethod(HRESULT, "GetFontCollection", [Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection")]), StdMethod(UINT32, "GetFontFamilyNameLength", []), StdMethod(HRESULT, "GetFontFamilyName", [Out(Pointer(WCHAR), "fontFamilyName"), (UINT32, "nameSize")]), StdMethod(DWRITE_FONT_WEIGHT, "GetFontWeight", []), StdMethod(DWRITE_FONT_STYLE, "GetFontStyle", []), StdMethod(DWRITE_FONT_STRETCH, "GetFontStretch", []), StdMethod(FLOAT, "GetFontSize", []), StdMethod(UINT32, "GetLocaleNameLength", []), StdMethod(HRESULT, "GetLocaleName", [Out(Pointer(WCHAR), "localeName"), (UINT32, "nameSize")]), ] IDWriteTypography.methods += [ StdMethod(HRESULT, "AddFontFeature", [(DWRITE_FONT_FEATURE, "fontFeature")]), StdMethod(UINT32, "GetFontFeatureCount", []), StdMethod(HRESULT, "GetFontFeature", [(UINT32, "fontFeatureIndex"), Out(Pointer(DWRITE_FONT_FEATURE), "fontFeature")]), ] DWRITE_SCRIPT_SHAPES = EnumFlag("DWRITE_SCRIPT_SHAPES", [ "DWRITE_SCRIPT_SHAPES_DEFAULT", "DWRITE_SCRIPT_SHAPES_NO_VISUAL", ]) DWRITE_SCRIPT_ANALYSIS = Struct("DWRITE_SCRIPT_ANALYSIS", [ (UINT16, "script"), (DWRITE_SCRIPT_SHAPES, "shapes"), ]) DWRITE_BREAK_CONDITION = Enum("DWRITE_BREAK_CONDITION", [ "DWRITE_BREAK_CONDITION_NEUTRAL", "DWRITE_BREAK_CONDITION_CAN_BREAK", "DWRITE_BREAK_CONDITION_MAY_NOT_BREAK", "DWRITE_BREAK_CONDITION_MUST_BREAK", ]) DWRITE_LINE_BREAKPOINT = Struct("DWRITE_LINE_BREAKPOINT", [ (UINT8, "breakConditionBefore"), (UINT8, "breakConditionAfter"), (UINT8, "isWhitespace"), (UINT8, "isSoftHyphen"), (UINT8, "padding"), ]) DWRITE_NUMBER_SUBSTITUTION_METHOD = Enum("DWRITE_NUMBER_SUBSTITUTION_METHOD", [ "DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE", "DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL", "DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE", "DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL", "DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL", ]) IDWriteNumberSubstitution.methods += [ ] DWRITE_SHAPING_TEXT_PROPERTIES = Struct("DWRITE_SHAPING_TEXT_PROPERTIES", [ (UINT16, "isShapedAlone"), (UINT16, "reserved"), ]) DWRITE_SHAPING_GLYPH_PROPERTIES = Struct("DWRITE_SHAPING_GLYPH_PROPERTIES", [ (UINT16, "justification"), (UINT16, "isClusterStart"), (UINT16, "isDiacritic"), (UINT16, "isZeroWidthSpace"), (UINT16, "reserved"), ]) IDWriteTextAnalysisSource.methods += [ StdMethod(HRESULT, "GetTextAtPosition", [(UINT32, "textPosition"), Out(Pointer(Pointer(Const(WCHAR))), "textString"), Out(Pointer(UINT32), "textLength")]), StdMethod(HRESULT, "GetTextBeforePosition", [(UINT32, "textPosition"), Out(Pointer(Pointer(Const(WCHAR))), "textString"), Out(Pointer(UINT32), "textLength")]), StdMethod(DWRITE_READING_DIRECTION, "GetParagraphReadingDirection", []), StdMethod(HRESULT, "GetLocaleName", [(UINT32, "textPosition"), Out(Pointer(UINT32), "textLength"), Out(Pointer(Pointer(Const(WCHAR))), "localeName")]), StdMethod(HRESULT, "GetNumberSubstitution", [(UINT32, "textPosition"), Out(Pointer(UINT32), "textLength"), Out(Pointer(ObjPointer(IDWriteNumberSubstitution)), "numberSubstitution")]), ] IDWriteTextAnalysisSink.methods += [ StdMethod(HRESULT, "SetScriptAnalysis", [(UINT32, "textPosition"), (UINT32, "textLength"), (Pointer(Const(DWRITE_SCRIPT_ANALYSIS)), "scriptAnalysis")]), StdMethod(HRESULT, "SetLineBreakpoints", [(UINT32, "textPosition"), (UINT32, "textLength"), (Pointer(Const(DWRITE_LINE_BREAKPOINT)), "lineBreakpoints")]), StdMethod(HRESULT, "SetBidiLevel", [(UINT32, "textPosition"), (UINT32, "textLength"), (UINT8, "explicitLevel"), (UINT8, "resolvedLevel")]), StdMethod(HRESULT, "SetNumberSubstitution", [(UINT32, "textPosition"), (UINT32, "textLength"), (ObjPointer(IDWriteNumberSubstitution), "numberSubstitution")]), ] IDWriteTextAnalyzer.methods += [ StdMethod(HRESULT, "AnalyzeScript", [(ObjPointer(IDWriteTextAnalysisSource), "analysisSource"), (UINT32, "textPosition"), (UINT32, "textLength"), (ObjPointer(IDWriteTextAnalysisSink), "analysisSink")]), StdMethod(HRESULT, "AnalyzeBidi", [(ObjPointer(IDWriteTextAnalysisSource), "analysisSource"), (UINT32, "textPosition"), (UINT32, "textLength"), (ObjPointer(IDWriteTextAnalysisSink), "analysisSink")]), StdMethod(HRESULT, "AnalyzeNumberSubstitution", [(ObjPointer(IDWriteTextAnalysisSource), "analysisSource"), (UINT32, "textPosition"), (UINT32, "textLength"), (ObjPointer(IDWriteTextAnalysisSink), "analysisSink")]), StdMethod(HRESULT, "AnalyzeLineBreakpoints", [(ObjPointer(IDWriteTextAnalysisSource), "analysisSource"), (UINT32, "textPosition"), (UINT32, "textLength"), (ObjPointer(IDWriteTextAnalysisSink), "analysisSink")]), StdMethod(HRESULT, "GetGlyphs", [(Pointer(Const(WCHAR)), "textString"), (UINT32, "textLength"), (ObjPointer(IDWriteFontFace), "fontFace"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (Pointer(Const(DWRITE_SCRIPT_ANALYSIS)), "scriptAnalysis"), (Pointer(Const(WCHAR)), "localeName"), (ObjPointer(IDWriteNumberSubstitution), "numberSubstitution"), (OpaquePointer(Pointer(Const(DWRITE_TYPOGRAPHIC_FEATURES))), "features"), (Pointer(Const(UINT32)), "featureRangeLengths"), (UINT32, "featureRanges"), (UINT32, "maxGlyphCount"), Out(Pointer(UINT16), "clusterMap"), Out(Pointer(DWRITE_SHAPING_TEXT_PROPERTIES), "textProps"), Out(Pointer(UINT16), "glyphIndices"), Out(Pointer(DWRITE_SHAPING_GLYPH_PROPERTIES), "glyphProps"), Out(Pointer(UINT32), "actualGlyphCount")]), StdMethod(HRESULT, "GetGlyphPlacements", [(Array(Const(WCHAR), "textLength"), "textString"), (Array(Const(UINT16), "textLength"), "clusterMap"), (Array(DWRITE_SHAPING_TEXT_PROPERTIES, "textLength"), "textProps"), (UINT32, "textLength"), (Array(Const(UINT16), "glyphCount"), "glyphIndices"), (Array(Const(DWRITE_SHAPING_GLYPH_PROPERTIES), "glyphCount"), "glyphProps"), (UINT32, "glyphCount"), (ObjPointer(IDWriteFontFace), "fontFace"), (FLOAT, "fontEmSize"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (Pointer(Const(DWRITE_SCRIPT_ANALYSIS)), "scriptAnalysis"), (LPCWSTR, "localeName"), (Array(Pointer(Const(DWRITE_TYPOGRAPHIC_FEATURES)), "featureRanges"), "features"), (Array(Const(UINT32), "featureRanges"), "featureRangeLengths"), (UINT32, "featureRanges"), Out(Array(FLOAT, "glyphCount"), "glyphAdvances"), Out(Array(DWRITE_GLYPH_OFFSET, "glyphCount"), "glyphOffsets")]), StdMethod(HRESULT, "GetGdiCompatibleGlyphPlacements", [(Array(Const(WCHAR), "textLength"), "textString"), (Array(Const(UINT16), "textLength"), "clusterMap"), (Array(DWRITE_SHAPING_TEXT_PROPERTIES, "textLength"), "textProps"), (UINT32, "textLength"), (Array(Const(UINT16), "glyphCount"), "glyphIndices"), (Array(Const(DWRITE_SHAPING_GLYPH_PROPERTIES), "glyphCount"), "glyphProps"), (UINT32, "glyphCount"), (ObjPointer(IDWriteFontFace), "fontFace"), (FLOAT, "fontEmSize"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), (BOOL, "useGdiNatural"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (Pointer(Const(DWRITE_SCRIPT_ANALYSIS)), "scriptAnalysis"), (LPCWSTR, "localeName"), (Array(Pointer(Const(DWRITE_TYPOGRAPHIC_FEATURES)), "featureRanges"), "features"), (Array(Const(UINT32), "featureRanges"), "featureRangeLengths"), (UINT32, "featureRanges"), Out(Array(FLOAT, "glyphCount"), "glyphAdvances"), Out(Array(DWRITE_GLYPH_OFFSET, "glyphCount"), "glyphOffsets")]), ] DWRITE_GLYPH_RUN = Struct("DWRITE_GLYPH_RUN", [ (ObjPointer(IDWriteFontFace), "fontFace"), (FLOAT, "fontEmSize"), (UINT32, "glyphCount"), (Pointer(Const(UINT16)), "glyphIndices"), (Pointer(Const(FLOAT)), "glyphAdvances"), (Pointer(Const(DWRITE_GLYPH_OFFSET)), "glyphOffsets"), (BOOL, "isSideways"), (UINT32, "bidiLevel"), ]) DWRITE_GLYPH_RUN_DESCRIPTION = Struct("DWRITE_GLYPH_RUN_DESCRIPTION", [ (Pointer(Const(WCHAR)), "localeName"), (Pointer(Const(WCHAR)), "string"), (UINT32, "stringLength"), (Pointer(Const(UINT16)), "clusterMap"), (UINT32, "textPosition"), ]) DWRITE_UNDERLINE = Struct("DWRITE_UNDERLINE", [ (FLOAT, "width"), (FLOAT, "thickness"), (FLOAT, "offset"), (FLOAT, "runHeight"), (DWRITE_READING_DIRECTION, "readingDirection"), (DWRITE_FLOW_DIRECTION, "flowDirection"), (Pointer(Const(WCHAR)), "localeName"), (DWRITE_MEASURING_MODE, "measuringMode"), ]) DWRITE_STRIKETHROUGH = Struct("DWRITE_STRIKETHROUGH", [ (FLOAT, "width"), (FLOAT, "thickness"), (FLOAT, "offset"), (DWRITE_READING_DIRECTION, "readingDirection"), (DWRITE_FLOW_DIRECTION, "flowDirection"), (Pointer(Const(WCHAR)), "localeName"), (DWRITE_MEASURING_MODE, "measuringMode"), ]) DWRITE_LINE_METRICS = Struct("DWRITE_LINE_METRICS", [ (UINT32, "length"), (UINT32, "trailingWhitespaceLength"), (UINT32, "newlineLength"), (FLOAT, "height"), (FLOAT, "baseline"), (BOOL, "isTrimmed"), ]) DWRITE_CLUSTER_METRICS = Struct("DWRITE_CLUSTER_METRICS", [ (FLOAT, "width"), (UINT16, "length"), (UINT16, "canWrapLineAfter"), (UINT16, "isWhitespace"), (UINT16, "isNewline"), (UINT16, "isSoftHyphen"), (UINT16, "isRightToLeft"), (UINT16, "padding"), ]) DWRITE_TEXT_METRICS = Struct("DWRITE_TEXT_METRICS", [ (FLOAT, "left"), (FLOAT, "top"), (FLOAT, "width"), (FLOAT, "widthIncludingTrailingWhitespace"), (FLOAT, "height"), (FLOAT, "layoutWidth"), (FLOAT, "layoutHeight"), (UINT32, "maxBidiReorderingDepth"), (UINT32, "lineCount"), ]) DWRITE_INLINE_OBJECT_METRICS = Struct("DWRITE_INLINE_OBJECT_METRICS", [ (FLOAT, "width"), (FLOAT, "height"), (FLOAT, "baseline"), (BOOL, "supportsSideways"), ]) DWRITE_OVERHANG_METRICS = Struct("DWRITE_OVERHANG_METRICS", [ (FLOAT, "left"), (FLOAT, "top"), (FLOAT, "right"), (FLOAT, "bottom"), ]) DWRITE_HIT_TEST_METRICS = Struct("DWRITE_HIT_TEST_METRICS", [ (UINT32, "textPosition"), (UINT32, "length"), (FLOAT, "left"), (FLOAT, "top"), (FLOAT, "width"), (FLOAT, "height"), (UINT32, "bidiLevel"), (BOOL, "isText"), (BOOL, "isTrimmed"), ]) IDWriteInlineObject.methods += [ StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (OpaquePointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (ObjPointer(IUnknown), "clientDrawingEffect")]), StdMethod(HRESULT, "GetMetrics", [Out(Pointer(DWRITE_INLINE_OBJECT_METRICS), "metrics")]), StdMethod(HRESULT, "GetOverhangMetrics", [Out(Pointer(DWRITE_OVERHANG_METRICS), "overhangs")]), StdMethod(HRESULT, "GetBreakConditions", [Out(Pointer(DWRITE_BREAK_CONDITION), "breakConditionBefore"), Out(Pointer(DWRITE_BREAK_CONDITION), "breakConditionAfter")]), ] IDWritePixelSnapping.methods += [ StdMethod(HRESULT, "IsPixelSnappingDisabled", [(OpaquePointer(Void), "clientDrawingContext"), Out(Pointer(BOOL), "isDisabled")]), StdMethod(HRESULT, "GetCurrentTransform", [(OpaquePointer(Void), "clientDrawingContext"), Out(Pointer(DWRITE_MATRIX), "transform")]), StdMethod(HRESULT, "GetPixelsPerDip", [(OpaquePointer(Void), "clientDrawingContext"), Out(Pointer(FLOAT), "pixelsPerDip")]), ] IDWriteTextRenderer.methods += [ StdMethod(HRESULT, "DrawGlyphRun", [(OpaquePointer(Void), "clientDrawingContext"), (FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), (DWRITE_MEASURING_MODE, "measuringMode"), (Pointer(Const(DWRITE_GLYPH_RUN)), "glyphRun"), (Pointer(Const(DWRITE_GLYPH_RUN_DESCRIPTION)), "glyphRunDescription"), (ObjPointer(IUnknown), "clientDrawingEffect")]), StdMethod(HRESULT, "DrawUnderline", [(OpaquePointer(Void), "clientDrawingContext"), (FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), (Pointer(Const(DWRITE_UNDERLINE)), "underline"), (ObjPointer(IUnknown), "clientDrawingEffect")]), StdMethod(HRESULT, "DrawStrikethrough", [(OpaquePointer(Void), "clientDrawingContext"), (FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), (Pointer(Const(DWRITE_STRIKETHROUGH)), "strikethrough"), (ObjPointer(IUnknown), "clientDrawingEffect")]), StdMethod(HRESULT, "DrawInlineObject", [(OpaquePointer(Void), "clientDrawingContext"), (FLOAT, "originX"), (FLOAT, "originY"), (ObjPointer(IDWriteInlineObject), "inlineObject"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (ObjPointer(IUnknown), "clientDrawingEffect")]), ] IDWriteTextLayout.methods += [ StdMethod(HRESULT, "SetMaxWidth", [(FLOAT, "maxWidth")]), StdMethod(HRESULT, "SetMaxHeight", [(FLOAT, "maxHeight")]), StdMethod(HRESULT, "SetFontCollection", [(ObjPointer(IDWriteFontCollection), "fontCollection"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetFontFamilyName", [(Pointer(Const(WCHAR)), "fontFamilyName"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetFontWeight", [(DWRITE_FONT_WEIGHT, "fontWeight"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetFontStyle", [(DWRITE_FONT_STYLE, "fontStyle"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetFontStretch", [(DWRITE_FONT_STRETCH, "fontStretch"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetFontSize", [(FLOAT, "fontSize"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetUnderline", [(BOOL, "hasUnderline"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetStrikethrough", [(BOOL, "hasStrikethrough"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetDrawingEffect", [(ObjPointer(IUnknown), "drawingEffect"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetInlineObject", [(ObjPointer(IDWriteInlineObject), "inlineObject"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetTypography", [(ObjPointer(IDWriteTypography), "typography"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(HRESULT, "SetLocaleName", [(Pointer(Const(WCHAR)), "localeName"), (DWRITE_TEXT_RANGE, "textRange")]), StdMethod(FLOAT, "GetMaxWidth", []), StdMethod(FLOAT, "GetMaxHeight", []), StdMethod(HRESULT, "GetFontCollection", [(UINT32, "currentPosition"), Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontFamilyNameLength", [(UINT32, "currentPosition"), Out(Pointer(UINT32), "nameLength"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontFamilyName", [(UINT32, "currentPosition"), Out(Pointer(WCHAR), "fontFamilyName"), (UINT32, "nameSize"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontWeight", [(UINT32, "currentPosition"), Out(Pointer(DWRITE_FONT_WEIGHT), "fontWeight"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontStyle", [(UINT32, "currentPosition"), Out(Pointer(DWRITE_FONT_STYLE), "fontStyle"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontStretch", [(UINT32, "currentPosition"), Out(Pointer(DWRITE_FONT_STRETCH), "fontStretch"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetFontSize", [(UINT32, "currentPosition"), Out(Pointer(FLOAT), "fontSize"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetUnderline", [(UINT32, "currentPosition"), Out(Pointer(BOOL), "hasUnderline"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetStrikethrough", [(UINT32, "currentPosition"), Out(Pointer(BOOL), "hasStrikethrough"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetDrawingEffect", [(UINT32, "currentPosition"), Out(Pointer(ObjPointer(IUnknown)), "drawingEffect"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetInlineObject", [(UINT32, "currentPosition"), Out(Pointer(ObjPointer(IDWriteInlineObject)), "inlineObject"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetTypography", [(UINT32, "currentPosition"), Out(Pointer(ObjPointer(IDWriteTypography)), "typography"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetLocaleNameLength", [(UINT32, "currentPosition"), Out(Pointer(UINT32), "nameLength"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "GetLocaleName", [(UINT32, "currentPosition"), Out(Pointer(WCHAR), "localeName"), (UINT32, "nameSize"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]), StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (OpaquePointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY")]), StdMethod(HRESULT, "GetLineMetrics", [Out(Pointer(DWRITE_LINE_METRICS), "lineMetrics"), (UINT32, "maxLineCount"), Out(Pointer(UINT32), "actualLineCount")]), StdMethod(HRESULT, "GetMetrics", [Out(Pointer(DWRITE_TEXT_METRICS), "textMetrics")]), StdMethod(HRESULT, "GetOverhangMetrics", [Out(Pointer(DWRITE_OVERHANG_METRICS), "overhangs")]), StdMethod(HRESULT, "GetClusterMetrics", [Out(Pointer(DWRITE_CLUSTER_METRICS), "clusterMetrics"), (UINT32, "maxClusterCount"), Out(Pointer(UINT32), "actualClusterCount")]), StdMethod(HRESULT, "DetermineMinWidth", [Out(Pointer(FLOAT), "minWidth")]), StdMethod(HRESULT, "HitTestPoint", [(FLOAT, "pointX"), (FLOAT, "pointY"), Out(Pointer(BOOL), "isTrailingHit"), Out(Pointer(BOOL), "isInside"), Out(Pointer(DWRITE_HIT_TEST_METRICS), "hitTestMetrics")]), StdMethod(HRESULT, "HitTestTextPosition", [(UINT32, "textPosition"), (BOOL, "isTrailingHit"), Out(Pointer(FLOAT), "pointX"), Out(Pointer(FLOAT), "pointY"), Out(Pointer(DWRITE_HIT_TEST_METRICS), "hitTestMetrics")]), StdMethod(HRESULT, "HitTestTextRange", [(UINT32, "textPosition"), (UINT32, "textLength"), (FLOAT, "originX"), (FLOAT, "originY"), Out(Pointer(DWRITE_HIT_TEST_METRICS), "hitTestMetrics"), (UINT32, "maxHitTestMetricsCount"), Out(Pointer(UINT32), "actualHitTestMetricsCount")]), ] IDWriteBitmapRenderTarget.methods += [ StdMethod(HRESULT, "DrawGlyphRun", [(FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), (DWRITE_MEASURING_MODE, "measuringMode"), (Pointer(Const(DWRITE_GLYPH_RUN)), "glyphRun"), (ObjPointer(IDWriteRenderingParams), "renderingParams"), (COLORREF, "textColor"), Out(Pointer(RECT), "blackBoxRect")]), StdMethod(HDC, "GetMemoryDC", []), StdMethod(FLOAT, "GetPixelsPerDip", []), StdMethod(HRESULT, "SetPixelsPerDip", [(FLOAT, "pixelsPerDip")]), StdMethod(HRESULT, "GetCurrentTransform", [Out(Pointer(DWRITE_MATRIX), "transform")]), StdMethod(HRESULT, "SetCurrentTransform", [(Pointer(Const(DWRITE_MATRIX)), "transform")]), StdMethod(HRESULT, "GetSize", [Out(Pointer(SIZE), "size")]), StdMethod(HRESULT, "Resize", [(UINT32, "width"), (UINT32, "height")]), ] IDWriteGdiInterop.methods += [ StdMethod(HRESULT, "CreateFontFromLOGFONT", [(Pointer(Const(LOGFONTW)), "logFont"), Out(Pointer(ObjPointer(IDWriteFont)), "font")]), StdMethod(HRESULT, "ConvertFontToLOGFONT", [(ObjPointer(IDWriteFont), "font"), Out(Pointer(LOGFONTW), "logFont"), Out(Pointer(BOOL), "isSystemFont")]), StdMethod(HRESULT, "ConvertFontFaceToLOGFONT", [(ObjPointer(IDWriteFontFace), "font"), Out(Pointer(LOGFONTW), "logFont")]), StdMethod(HRESULT, "CreateFontFaceFromHdc", [(HDC, "hdc"), Out(Pointer(ObjPointer(IDWriteFontFace)), "fontFace")]), StdMethod(HRESULT, "CreateBitmapRenderTarget", [(HDC, "hdc"), (UINT32, "width"), (UINT32, "height"), Out(Pointer(ObjPointer(IDWriteBitmapRenderTarget)), "renderTarget")]), ] DWRITE_TEXTURE_TYPE = Enum("DWRITE_TEXTURE_TYPE", [ "DWRITE_TEXTURE_ALIASED_1x1", "DWRITE_TEXTURE_CLEARTYPE_3x1", ]) IDWriteGlyphRunAnalysis.methods += [ StdMethod(HRESULT, "GetAlphaTextureBounds", [(DWRITE_TEXTURE_TYPE, "textureType"), Out(Pointer(RECT), "textureBounds")]), StdMethod(HRESULT, "CreateAlphaTexture", [(DWRITE_TEXTURE_TYPE, "textureType"), (Pointer(Const(RECT)), "textureBounds"), Out(Pointer(BYTE), "alphaValues"), (UINT32, "bufferSize")]), StdMethod(HRESULT, "GetAlphaBlendParams", [(ObjPointer(IDWriteRenderingParams), "renderingParams"), Out(Pointer(FLOAT), "blendGamma"), Out(Pointer(FLOAT), "blendEnhancedContrast"), Out(Pointer(FLOAT), "blendClearTypeLevel")]), ] IDWriteFactory.methods += [ StdMethod(HRESULT, "GetSystemFontCollection", [Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection"), (BOOL, "checkForUpdates")]), StdMethod(HRESULT, "CreateCustomFontCollection", [(ObjPointer(IDWriteFontCollectionLoader), "collectionLoader"), (OpaquePointer(Const(Void)), "collectionKey"), (UINT32, "collectionKeySize"), Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection")]), StdMethod(HRESULT, "RegisterFontCollectionLoader", [(ObjPointer(IDWriteFontCollectionLoader), "fontCollectionLoader")]), StdMethod(HRESULT, "UnregisterFontCollectionLoader", [(ObjPointer(IDWriteFontCollectionLoader), "fontCollectionLoader")]), StdMethod(HRESULT, "CreateFontFileReference", [(Pointer(Const(WCHAR)), "filePath"), (Pointer(Const(FILETIME)), "lastWriteTime"), Out(Pointer(ObjPointer(IDWriteFontFile)), "fontFile")]), StdMethod(HRESULT, "CreateCustomFontFileReference", [(OpaquePointer(Const(Void)), "fontFileReferenceKey"), (UINT32, "fontFileReferenceKeySize"), (ObjPointer(IDWriteFontFileLoader), "fontFileLoader"), Out(Pointer(ObjPointer(IDWriteFontFile)), "fontFile")]), StdMethod(HRESULT, "CreateFontFace", [(DWRITE_FONT_FACE_TYPE, "fontFaceType"), (UINT32, "numberOfFiles"), (Array(Const(ObjPointer(IDWriteFontFile)), "numberOfFiles"), "fontFiles"), (UINT32, "faceIndex"), (DWRITE_FONT_SIMULATIONS, "fontFaceSimulationFlags"), Out(Pointer(ObjPointer(IDWriteFontFace)), "fontFace")]), StdMethod(HRESULT, "CreateRenderingParams", [Out(Pointer(ObjPointer(IDWriteRenderingParams)), "renderingParams")]), StdMethod(HRESULT, "CreateMonitorRenderingParams", [(HMONITOR, "monitor"), Out(Pointer(ObjPointer(IDWriteRenderingParams)), "renderingParams")]), StdMethod(HRESULT, "CreateCustomRenderingParams", [(FLOAT, "gamma"), (FLOAT, "enhancedContrast"), (FLOAT, "clearTypeLevel"), (DWRITE_PIXEL_GEOMETRY, "pixelGeometry"), (DWRITE_RENDERING_MODE, "renderingMode"), Out(Pointer(ObjPointer(IDWriteRenderingParams)), "renderingParams")]), StdMethod(HRESULT, "RegisterFontFileLoader", [(ObjPointer(IDWriteFontFileLoader), "fontFileLoader")]), StdMethod(HRESULT, "UnregisterFontFileLoader", [(ObjPointer(IDWriteFontFileLoader), "fontFileLoader")]), StdMethod(HRESULT, "CreateTextFormat", [(Pointer(Const(WCHAR)), "fontFamilyName"), (ObjPointer(IDWriteFontCollection), "fontCollection"), (DWRITE_FONT_WEIGHT, "fontWeight"), (DWRITE_FONT_STYLE, "fontStyle"), (DWRITE_FONT_STRETCH, "fontStretch"), (FLOAT, "fontSize"), (Pointer(Const(WCHAR)), "localeName"), Out(Pointer(ObjPointer(IDWriteTextFormat)), "textFormat")]), StdMethod(HRESULT, "CreateTypography", [Out(Pointer(ObjPointer(IDWriteTypography)), "typography")]), StdMethod(HRESULT, "GetGdiInterop", [Out(Pointer(ObjPointer(IDWriteGdiInterop)), "gdiInterop")]), StdMethod(HRESULT, "CreateTextLayout", [(Pointer(Const(WCHAR)), "string"), (UINT32, "stringLength"), (ObjPointer(IDWriteTextFormat), "textFormat"), (FLOAT, "maxWidth"), (FLOAT, "maxHeight"), Out(Pointer(ObjPointer(IDWriteTextLayout)), "textLayout")]), StdMethod(HRESULT, "CreateGdiCompatibleTextLayout", [(Pointer(Const(WCHAR)), "string"), (UINT32, "stringLength"), (ObjPointer(IDWriteTextFormat), "textFormat"), (FLOAT, "layoutWidth"), (FLOAT, "layoutHeight"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), (BOOL, "useGdiNatural"), Out(Pointer(ObjPointer(IDWriteTextLayout)), "textLayout")]), StdMethod(HRESULT, "CreateEllipsisTrimmingSign", [(ObjPointer(IDWriteTextFormat), "textFormat"), Out(Pointer(ObjPointer(IDWriteInlineObject)), "trimmingSign")]), StdMethod(HRESULT, "CreateTextAnalyzer", [Out(Pointer(ObjPointer(IDWriteTextAnalyzer)), "textAnalyzer")]), StdMethod(HRESULT, "CreateNumberSubstitution", [(DWRITE_NUMBER_SUBSTITUTION_METHOD, "substitutionMethod"), (Pointer(Const(WCHAR)), "localeName"), (BOOL, "ignoreUserOverride"), Out(Pointer(ObjPointer(IDWriteNumberSubstitution)), "numberSubstitution")]), StdMethod(HRESULT, "CreateGlyphRunAnalysis", [(Pointer(Const(DWRITE_GLYPH_RUN)), "glyphRun"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), (DWRITE_RENDERING_MODE, "renderingMode"), (DWRITE_MEASURING_MODE, "measuringMode"), (FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), Out(Pointer(ObjPointer(IDWriteGlyphRunAnalysis)), "glyphRunAnalysis")]), ] dwrite = Module("dwrite") dwrite.addInterfaces([ IDWriteFactory ]) dwrite.addFunctions([ StdFunction(HRESULT, "DWriteCreateFactory", [(DWRITE_FACTORY_TYPE, "factoryType"), (REFIID, "iid"), Out(Pointer(ObjPointer(IUnknown)), "factory")]), ]) tmpNnpnZF/specs/debug.py0000664000175000017500000000412112543167424014537 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Debugging utilities.''' import sys import traceback import inspect def excepthook(type, value, tb): """ Automatically start the debugger on an exception. See also: - http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65287 """ if hasattr(sys, 'ps1') \ or not (sys.stdin.isatty() and sys.stdout.isatty() and sys.stderr.isatty()) \ or type == SyntaxError or type == KeyboardInterrupt: # we are in interactive mode or we don't have a tty-like # device, so we call the default hook oldexcepthook(type, value, tb) else: import traceback, pdb # we are NOT in interactive mode, print the exception... traceback.print_exception(type, value, tb) print # ...then start the debugger in post-mortem mode. pdb.pm() oldexcepthook, sys.excepthook = sys.excepthook, excepthook def dump(var): sys.stderr.write(repr(var) + '\n') tmpNnpnZF/specs/d3d9types.py0000664000175000017500000007353512543167424015320 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d9types.h""" from winapi import * D3DCOLOR = Alias("D3DCOLOR", DWORD) D3DVECTOR = Struct("D3DVECTOR", [ (Float, "x"), (Float, "y"), (Float, "z"), ]) D3DCOLORVALUE = Struct("D3DCOLORVALUE", [ (Float, "r"), (Float, "g"), (Float, "b"), (Float, "a"), ]) D3DRECT = Struct("D3DRECT", [ (LONG, "x1"), (LONG, "y1"), (LONG, "x2"), (LONG, "y2"), ]) D3DMATRIX = Struct("D3DMATRIX", [ (Array(Array(Float, 4), 4), "m"), ]) D3DVIEWPORT9 = Struct("D3DVIEWPORT9", [ (DWORD, "X"), (DWORD, "Y"), (DWORD, "Width"), (DWORD, "Height"), (Float, "MinZ"), (Float, "MaxZ"), ]) D3DCLIPPLANE = Flags(DWORD, [ "D3DCLIPPLANE0", "D3DCLIPPLANE1", "D3DCLIPPLANE2", "D3DCLIPPLANE3", "D3DCLIPPLANE4", "D3DCLIPPLANE5", ]) D3DCS = Flags(DWORD, [ "D3DCS_ALL", "D3DCS_LEFT", "D3DCS_RIGHT", "D3DCS_TOP", "D3DCS_BOTTOM", "D3DCS_FRONT", "D3DCS_BACK", "D3DCS_PLANE0", "D3DCS_PLANE1", "D3DCS_PLANE2", "D3DCS_PLANE3", "D3DCS_PLANE4", "D3DCS_PLANE5", ]) D3DCLIPSTATUS9 = Struct("D3DCLIPSTATUS9", [ (DWORD, "ClipUnion"), (DWORD, "ClipIntersection"), ]) D3DMATERIAL9 = Struct("D3DMATERIAL9", [ (D3DCOLORVALUE, "Diffuse"), (D3DCOLORVALUE, "Ambient"), (D3DCOLORVALUE, "Specular"), (D3DCOLORVALUE, "Emissive"), (Float, "Power"), ]) D3DLIGHTTYPE = Enum("D3DLIGHTTYPE", [ "D3DLIGHT_POINT", "D3DLIGHT_SPOT", "D3DLIGHT_DIRECTIONAL", ]) D3DLIGHT9 = Struct("D3DLIGHT9", [ (D3DLIGHTTYPE, "Type"), (D3DCOLORVALUE, "Diffuse"), (D3DCOLORVALUE, "Specular"), (D3DCOLORVALUE, "Ambient"), (D3DVECTOR, "Position"), (D3DVECTOR, "Direction"), (Float, "Range"), (Float, "Falloff"), (Float, "Attenuation0"), (Float, "Attenuation1"), (Float, "Attenuation2"), (Float, "Theta"), (Float, "Phi"), ]) D3DCLEAR = Flags(DWORD, [ "D3DCLEAR_TARGET", "D3DCLEAR_ZBUFFER", "D3DCLEAR_STENCIL", ]) D3DSHADEMODE = Enum("D3DSHADEMODE", [ "D3DSHADE_FLAT", "D3DSHADE_GOURAUD", "D3DSHADE_PHONG", ]) D3DFILLMODE = Enum("D3DFILLMODE", [ "D3DFILL_POINT", "D3DFILL_WIREFRAME", "D3DFILL_SOLID", ]) D3DBLEND = Enum("D3DBLEND", [ "D3DBLEND_ZERO", "D3DBLEND_ONE", "D3DBLEND_SRCCOLOR", "D3DBLEND_INVSRCCOLOR", "D3DBLEND_SRCALPHA", "D3DBLEND_INVSRCALPHA", "D3DBLEND_DESTALPHA", "D3DBLEND_INVDESTALPHA", "D3DBLEND_DESTCOLOR", "D3DBLEND_INVDESTCOLOR", "D3DBLEND_SRCALPHASAT", "D3DBLEND_BOTHSRCALPHA", "D3DBLEND_BOTHINVSRCALPHA", "D3DBLEND_BLENDFACTOR", "D3DBLEND_INVBLENDFACTOR", "D3DBLEND_SRCCOLOR2", "D3DBLEND_INVSRCCOLOR2", ]) D3DBLENDOP = Enum("D3DBLENDOP", [ "D3DBLENDOP_ADD", "D3DBLENDOP_SUBTRACT", "D3DBLENDOP_REVSUBTRACT", "D3DBLENDOP_MIN", "D3DBLENDOP_MAX", ]) D3DTEXTUREADDRESS = Enum("D3DTEXTUREADDRESS", [ "D3DTADDRESS_WRAP", "D3DTADDRESS_MIRROR", "D3DTADDRESS_CLAMP", "D3DTADDRESS_BORDER", "D3DTADDRESS_MIRRORONCE", ]) D3DCULL = Enum("D3DCULL", [ "D3DCULL_NONE", "D3DCULL_CW", "D3DCULL_CCW", ]) D3DCMPFUNC = Enum("D3DCMPFUNC", [ "D3DCMP_NEVER", "D3DCMP_LESS", "D3DCMP_EQUAL", "D3DCMP_LESSEQUAL", "D3DCMP_GREATER", "D3DCMP_NOTEQUAL", "D3DCMP_GREATEREQUAL", "D3DCMP_ALWAYS", ]) D3DSTENCILOP = Enum("D3DSTENCILOP", [ "D3DSTENCILOP_KEEP", "D3DSTENCILOP_ZERO", "D3DSTENCILOP_REPLACE", "D3DSTENCILOP_INCRSAT", "D3DSTENCILOP_DECRSAT", "D3DSTENCILOP_INVERT", "D3DSTENCILOP_INCR", "D3DSTENCILOP_DECR", ]) D3DFOGMODE = Enum("D3DFOGMODE", [ "D3DFOG_NONE", "D3DFOG_EXP", "D3DFOG_EXP2", "D3DFOG_LINEAR", ]) D3DZBUFFERTYPE = Enum("D3DZBUFFERTYPE", [ "D3DZB_FALSE", "D3DZB_TRUE", "D3DZB_USEW", ]) D3DPRIMITIVETYPE = Enum("D3DPRIMITIVETYPE", [ "D3DPT_POINTLIST", "D3DPT_LINELIST", "D3DPT_LINESTRIP", "D3DPT_TRIANGLELIST", "D3DPT_TRIANGLESTRIP", "D3DPT_TRIANGLEFAN", ]) D3DTRANSFORMSTATETYPE = Enum("D3DTRANSFORMSTATETYPE", [ "D3DTS_VIEW", "D3DTS_PROJECTION", "D3DTS_TEXTURE0", "D3DTS_TEXTURE1", "D3DTS_TEXTURE2", "D3DTS_TEXTURE3", "D3DTS_TEXTURE4", "D3DTS_TEXTURE5", "D3DTS_TEXTURE6", "D3DTS_TEXTURE7", "D3DTS_WORLD", "D3DTS_WORLD1", "D3DTS_WORLD2", "D3DTS_WORLD3", ]) D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [ "D3DMCS_MATERIAL", "D3DMCS_COLOR1", "D3DMCS_COLOR2", ]) D3DWRAPCOORD = Flags(DWORD, [ "D3DWRAPCOORD_0", "D3DWRAPCOORD_1", "D3DWRAPCOORD_2", "D3DWRAPCOORD_3", ]) D3DCOLORWRITEENABLE = Flags(DWORD, [ "D3DCOLORWRITEENABLE_RED", "D3DCOLORWRITEENABLE_GREEN", "D3DCOLORWRITEENABLE_BLUE", "D3DCOLORWRITEENABLE_ALPHA", ]) D3DDEGREETYPE = Enum("D3DDEGREETYPE", [ "D3DDEGREE_LINEAR", "D3DDEGREE_QUADRATIC", "D3DDEGREE_CUBIC", "D3DDEGREE_QUINTIC", ]) D3DPATCHEDGESTYLE = Enum("D3DPATCHEDGESTYLE", [ "D3DPATCHEDGE_DISCRETE", "D3DPATCHEDGE_CONTINUOUS", ]) D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [ "D3DVBF_DISABLE", "D3DVBF_1WEIGHTS", "D3DVBF_2WEIGHTS", "D3DVBF_3WEIGHTS", "D3DVBF_TWEENING", "D3DVBF_0WEIGHTS", ]) D3DDEBUGMONITORTOKENS = Enum("D3DDEBUGMONITORTOKENS", [ "D3DDMT_ENABLE", "D3DDMT_DISABLE", ]) # TODO: Convert these to/from actual floats FLOAT_AS_DWORD = DWORD D3DRENDERSTATETYPE, D3DRENDERSTATEVALUE = EnumPolymorphic("D3DRENDERSTATETYPE", "State", [ ("D3DRS_ZENABLE", D3DZBUFFERTYPE), ("D3DRS_FILLMODE", D3DFILLMODE), ("D3DRS_SHADEMODE", D3DSHADEMODE), ("D3DRS_ZWRITEENABLE", BOOL), ("D3DRS_ALPHATESTENABLE", BOOL), ("D3DRS_LASTPIXEL", BOOL), ("D3DRS_SRCBLEND", D3DBLEND), ("D3DRS_DESTBLEND", D3DBLEND), ("D3DRS_CULLMODE", D3DCULL), ("D3DRS_ZFUNC", D3DCMPFUNC), ("D3DRS_ALPHAREF", DWORD), ("D3DRS_ALPHAFUNC", D3DCMPFUNC), ("D3DRS_DITHERENABLE", BOOL), ("D3DRS_ALPHABLENDENABLE", BOOL), ("D3DRS_FOGENABLE", BOOL), ("D3DRS_SPECULARENABLE", BOOL), ("D3DRS_FOGCOLOR", D3DCOLOR), ("D3DRS_FOGTABLEMODE", D3DFOGMODE), ("D3DRS_FOGSTART", FLOAT_AS_DWORD), ("D3DRS_FOGEND", FLOAT_AS_DWORD), ("D3DRS_FOGDENSITY", FLOAT_AS_DWORD), ("D3DRS_RANGEFOGENABLE", BOOL), ("D3DRS_STENCILENABLE", BOOL), ("D3DRS_STENCILFAIL", D3DSTENCILOP), ("D3DRS_STENCILZFAIL", D3DSTENCILOP), ("D3DRS_STENCILPASS", D3DSTENCILOP), ("D3DRS_STENCILFUNC", D3DCMPFUNC), ("D3DRS_STENCILREF", DWORD), ("D3DRS_STENCILMASK", DWORD), ("D3DRS_STENCILWRITEMASK", DWORD), ("D3DRS_TEXTUREFACTOR", D3DCOLOR), ("D3DRS_WRAP0", D3DWRAPCOORD), ("D3DRS_WRAP1", D3DWRAPCOORD), ("D3DRS_WRAP2", D3DWRAPCOORD), ("D3DRS_WRAP3", D3DWRAPCOORD), ("D3DRS_WRAP4", D3DWRAPCOORD), ("D3DRS_WRAP5", D3DWRAPCOORD), ("D3DRS_WRAP6", D3DWRAPCOORD), ("D3DRS_WRAP7", D3DWRAPCOORD), ("D3DRS_CLIPPING", BOOL), ("D3DRS_LIGHTING", BOOL), ("D3DRS_AMBIENT", D3DCOLOR), ("D3DRS_FOGVERTEXMODE", D3DFOGMODE), ("D3DRS_COLORVERTEX", BOOL), ("D3DRS_LOCALVIEWER", BOOL), ("D3DRS_NORMALIZENORMALS", BOOL), ("D3DRS_DIFFUSEMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_SPECULARMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_AMBIENTMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_EMISSIVEMATERIALSOURCE", D3DMATERIALCOLORSOURCE), ("D3DRS_VERTEXBLEND", D3DVERTEXBLENDFLAGS), ("D3DRS_CLIPPLANEENABLE", D3DCLIPPLANE), ("D3DRS_POINTSIZE", FLOAT_AS_DWORD), ("D3DRS_POINTSIZE_MIN", FLOAT_AS_DWORD), ("D3DRS_POINTSPRITEENABLE", BOOL), ("D3DRS_POINTSCALEENABLE", BOOL), ("D3DRS_POINTSCALE_A", FLOAT_AS_DWORD), ("D3DRS_POINTSCALE_B", FLOAT_AS_DWORD), ("D3DRS_POINTSCALE_C", FLOAT_AS_DWORD), ("D3DRS_MULTISAMPLEANTIALIAS", BOOL), ("D3DRS_MULTISAMPLEMASK", DWORD), ("D3DRS_PATCHEDGESTYLE", D3DPATCHEDGESTYLE), ("D3DRS_DEBUGMONITORTOKEN", D3DDEBUGMONITORTOKENS), ("D3DRS_POINTSIZE_MAX", FLOAT_AS_DWORD), ("D3DRS_INDEXEDVERTEXBLENDENABLE", BOOL), ("D3DRS_COLORWRITEENABLE", DWORD), ("D3DRS_TWEENFACTOR", FLOAT_AS_DWORD), ("D3DRS_BLENDOP", D3DBLENDOP), ("D3DRS_POSITIONDEGREE", D3DDEGREETYPE), ("D3DRS_NORMALDEGREE", D3DDEGREETYPE), ("D3DRS_SCISSORTESTENABLE", BOOL), ("D3DRS_SLOPESCALEDEPTHBIAS", FLOAT_AS_DWORD), ("D3DRS_ANTIALIASEDLINEENABLE", BOOL), ("D3DRS_MINTESSELLATIONLEVEL", FLOAT_AS_DWORD), ("D3DRS_MAXTESSELLATIONLEVEL", FLOAT_AS_DWORD), ("D3DRS_ADAPTIVETESS_X", FLOAT_AS_DWORD), ("D3DRS_ADAPTIVETESS_Y", FLOAT_AS_DWORD), ("D3DRS_ADAPTIVETESS_Z", FLOAT_AS_DWORD), ("D3DRS_ADAPTIVETESS_W", FLOAT_AS_DWORD), ("D3DRS_ENABLEADAPTIVETESSELLATION", BOOL), ("D3DRS_TWOSIDEDSTENCILMODE", BOOL), ("D3DRS_CCW_STENCILFAIL", D3DSTENCILOP), ("D3DRS_CCW_STENCILZFAIL", D3DSTENCILOP), ("D3DRS_CCW_STENCILPASS", D3DSTENCILOP), ("D3DRS_CCW_STENCILFUNC", D3DCMPFUNC), ("D3DRS_COLORWRITEENABLE1", D3DCOLORWRITEENABLE), ("D3DRS_COLORWRITEENABLE2", D3DCOLORWRITEENABLE), ("D3DRS_COLORWRITEENABLE3", D3DCOLORWRITEENABLE), ("D3DRS_BLENDFACTOR", D3DCOLOR), ("D3DRS_SRGBWRITEENABLE", BOOL), ("D3DRS_DEPTHBIAS", FLOAT_AS_DWORD), ("D3DRS_WRAP8", D3DWRAPCOORD), ("D3DRS_WRAP9", D3DWRAPCOORD), ("D3DRS_WRAP10", D3DWRAPCOORD), ("D3DRS_WRAP11", D3DWRAPCOORD), ("D3DRS_WRAP12", D3DWRAPCOORD), ("D3DRS_WRAP13", D3DWRAPCOORD), ("D3DRS_WRAP14", D3DWRAPCOORD), ("D3DRS_WRAP15", D3DWRAPCOORD), ("D3DRS_SEPARATEALPHABLENDENABLE", BOOL), ("D3DRS_SRCBLENDALPHA", D3DBLEND), ("D3DRS_DESTBLENDALPHA", D3DBLEND), ("D3DRS_BLENDOPALPHA", D3DBLENDOP), # XXX: D3DRENDERSTATE_WRAPBIAS + n ], DWORD) D3DTSS_TCI = Flags(DWORD, [ #"D3DTSS_TCI_PASSTHRU", # 0 "D3DTSS_TCI_CAMERASPACENORMAL", "D3DTSS_TCI_CAMERASPACEPOSITION", "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR", "D3DTSS_TCI_SPHEREMAP", ]) D3DTEXTUREOP = Enum("D3DTEXTUREOP", [ "D3DTOP_DISABLE", "D3DTOP_SELECTARG1", "D3DTOP_SELECTARG2", "D3DTOP_MODULATE", "D3DTOP_MODULATE2X", "D3DTOP_MODULATE4X", "D3DTOP_ADD", "D3DTOP_ADDSIGNED", "D3DTOP_ADDSIGNED2X", "D3DTOP_SUBTRACT", "D3DTOP_ADDSMOOTH", "D3DTOP_BLENDDIFFUSEALPHA", "D3DTOP_BLENDTEXTUREALPHA", "D3DTOP_BLENDFACTORALPHA", "D3DTOP_BLENDTEXTUREALPHAPM", "D3DTOP_BLENDCURRENTALPHA", "D3DTOP_PREMODULATE", "D3DTOP_MODULATEALPHA_ADDCOLOR", "D3DTOP_MODULATECOLOR_ADDALPHA", "D3DTOP_MODULATEINVALPHA_ADDCOLOR", "D3DTOP_MODULATEINVCOLOR_ADDALPHA", "D3DTOP_BUMPENVMAP", "D3DTOP_BUMPENVMAPLUMINANCE", "D3DTOP_DOTPRODUCT3", "D3DTOP_MULTIPLYADD", "D3DTOP_LERP", ]) # XXX: Actually a mixture of enums and flags D3DTA = FakeEnum(DWORD, [ "D3DTA_DIFFUSE", "D3DTA_CURRENT", "D3DTA_TEXTURE", "D3DTA_TFACTOR", "D3DTA_SPECULAR", "D3DTA_TEMP", "D3DTA_CONSTANT", #"D3DTA_COMPLEMENT", #"D3DTA_ALPHAREPLICATE", ]) D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [ "D3DTTFF_DISABLE", "D3DTTFF_COUNT1", "D3DTTFF_COUNT2", "D3DTTFF_COUNT3", "D3DTTFF_COUNT4", "D3DTTFF_PROJECTED", ]) D3DTEXTUREFILTERTYPE = Enum("D3DTEXTUREFILTERTYPE", [ "D3DTEXF_NONE", "D3DTEXF_POINT", "D3DTEXF_LINEAR", "D3DTEXF_ANISOTROPIC", "D3DTEXF_PYRAMIDALQUAD", "D3DTEXF_GAUSSIANQUAD", "D3DTEXF_CONVOLUTIONMONO", ]) D3DTEXTURESTAGESTATETYPE, D3DTEXTURESTAGESTATEVALUE = EnumPolymorphic("D3DTEXTURESTAGESTATETYPE", "Type", [ ("D3DTSS_COLOROP", D3DTEXTUREOP), ("D3DTSS_COLORARG1", D3DTA), ("D3DTSS_COLORARG2", D3DTA), ("D3DTSS_ALPHAOP", D3DTEXTUREOP), ("D3DTSS_ALPHAARG1", D3DTA), ("D3DTSS_ALPHAARG2", D3DTA), ("D3DTSS_BUMPENVMAT00", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT01", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT10", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVMAT11", FLOAT_AS_DWORD), ("D3DTSS_TEXCOORDINDEX", D3DTSS_TCI), ("D3DTSS_BUMPENVLSCALE", FLOAT_AS_DWORD), ("D3DTSS_BUMPENVLOFFSET", FLOAT_AS_DWORD), ("D3DTSS_TEXTURETRANSFORMFLAGS", D3DTEXTURETRANSFORMFLAGS), ("D3DTSS_COLORARG0", D3DTA,), ("D3DTSS_ALPHAARG0", D3DTA,), ("D3DTSS_RESULTARG", D3DTA,), ("D3DTSS_CONSTANT", D3DCOLOR), ], DWORD) D3DSAMPLERSTATETYPE, D3DSAMPLERSTATEVALUE = EnumPolymorphic("D3DSAMPLERSTATETYPE", "Type", [ ("D3DSAMP_ADDRESSU", D3DTEXTUREADDRESS), ("D3DSAMP_ADDRESSV", D3DTEXTUREADDRESS), ("D3DSAMP_ADDRESSW", D3DTEXTUREADDRESS), ("D3DSAMP_BORDERCOLOR", D3DCOLOR), ("D3DSAMP_MAGFILTER", D3DTEXTUREFILTERTYPE), ("D3DSAMP_MINFILTER", D3DTEXTUREFILTERTYPE), ("D3DSAMP_MIPFILTER", D3DTEXTUREFILTERTYPE), ("D3DSAMP_MIPMAPLODBIAS", FLOAT_AS_DWORD), ("D3DSAMP_MAXMIPLEVEL", DWORD), ("D3DSAMP_MAXANISOTROPY", DWORD), ("D3DSAMP_SRGBTEXTURE", BOOL), ("D3DSAMP_ELEMENTINDEX", DWORD), ("D3DSAMP_DMAPOFFSET", DWORD), ], DWORD) D3DPV = Flags(DWORD, [ "D3DPV_DONOTCOPYDATA", ]) # XXX: Actually a mixture of enums and flags D3DFVF = Flags(DWORD, [ "D3DFVF_RESERVED0", "D3DFVF_XYZ", "D3DFVF_XYZRHW", "D3DFVF_XYZB1", "D3DFVF_XYZB2", "D3DFVF_XYZB3", "D3DFVF_XYZB4", "D3DFVF_XYZB5", "D3DFVF_XYZW", "D3DFVF_NORMAL", "D3DFVF_PSIZE", "D3DFVF_DIFFUSE", "D3DFVF_SPECULAR", #"D3DFVF_TEX0", #"D3DFVF_TEX1", #"D3DFVF_TEX2", #"D3DFVF_TEX3", #"D3DFVF_TEX4", #"D3DFVF_TEX5", #"D3DFVF_TEX6", #"D3DFVF_TEX7", #"D3DFVF_TEX8", "D3DFVF_LASTBETA_UBYTE4", "D3DFVF_LASTBETA_D3DCOLOR", "D3DFVF_RESERVED2", #"D3DFVF_TEXCOORDSIZE1(0)", #"D3DFVF_TEXCOORDSIZE2(0)", #"D3DFVF_TEXCOORDSIZE3(0)", #"D3DFVF_TEXCOORDSIZE4(0)", #"D3DFVF_TEXCOORDSIZE1(1)", #"D3DFVF_TEXCOORDSIZE2(1)", #"D3DFVF_TEXCOORDSIZE3(1)", #"D3DFVF_TEXCOORDSIZE4(1)", #"D3DFVF_TEXCOORDSIZE1(2)", #"D3DFVF_TEXCOORDSIZE2(2)", #"D3DFVF_TEXCOORDSIZE3(2)", #"D3DFVF_TEXCOORDSIZE4(2)", #"D3DFVF_TEXCOORDSIZE1(3)", #"D3DFVF_TEXCOORDSIZE2(3)", #"D3DFVF_TEXCOORDSIZE3(3)", #"D3DFVF_TEXCOORDSIZE4(3)", ]) D3DDECLUSAGE = FakeEnum(BYTE, [ "D3DDECLUSAGE_POSITION", "D3DDECLUSAGE_BLENDWEIGHT", "D3DDECLUSAGE_BLENDINDICES", "D3DDECLUSAGE_NORMAL", "D3DDECLUSAGE_PSIZE", "D3DDECLUSAGE_TEXCOORD", "D3DDECLUSAGE_TANGENT", "D3DDECLUSAGE_BINORMAL", "D3DDECLUSAGE_TESSFACTOR", "D3DDECLUSAGE_POSITIONT", "D3DDECLUSAGE_COLOR", "D3DDECLUSAGE_FOG", "D3DDECLUSAGE_DEPTH", "D3DDECLUSAGE_SAMPLE", ]) D3DDECLMETHOD = FakeEnum(BYTE, [ "D3DDECLMETHOD_DEFAULT", "D3DDECLMETHOD_PARTIALU", "D3DDECLMETHOD_PARTIALV", "D3DDECLMETHOD_CROSSUV", "D3DDECLMETHOD_UV", "D3DDECLMETHOD_LOOKUP", "D3DDECLMETHOD_LOOKUPPRESAMPLED", ]) D3DDECLTYPE = FakeEnum(BYTE, [ "D3DDECLTYPE_FLOAT1", "D3DDECLTYPE_FLOAT2", "D3DDECLTYPE_FLOAT3", "D3DDECLTYPE_FLOAT4", "D3DDECLTYPE_D3DCOLOR", "D3DDECLTYPE_UBYTE4", "D3DDECLTYPE_SHORT2", "D3DDECLTYPE_SHORT4", "D3DDECLTYPE_UBYTE4N", "D3DDECLTYPE_SHORT2N", "D3DDECLTYPE_SHORT4N", "D3DDECLTYPE_USHORT2N", "D3DDECLTYPE_USHORT4N", "D3DDECLTYPE_UDEC3", "D3DDECLTYPE_DEC3N", "D3DDECLTYPE_FLOAT16_2", "D3DDECLTYPE_FLOAT16_4", "D3DDECLTYPE_UNUSED", ]) D3DVERTEXELEMENT9 = Struct("D3DVERTEXELEMENT9", [ (WORD, "Stream"), (WORD, "Offset"), (D3DDECLTYPE, "Type"), # BYTE (D3DDECLMETHOD, "Method"), # BYTE (D3DDECLUSAGE, "Usage"), # BYTE (BYTE, "UsageIndex"), ]) D3DBASISTYPE = Enum("D3DBASISTYPE", [ "D3DBASIS_BEZIER", "D3DBASIS_BSPLINE", "D3DBASIS_CATMULL_ROM", ]) D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [ "D3DSBT_ALL", "D3DSBT_PIXELSTATE", "D3DSBT_VERTEXSTATE", ]) D3DDEVTYPE = Enum("D3DDEVTYPE", [ "D3DDEVTYPE_HAL", "D3DDEVTYPE_REF", "D3DDEVTYPE_SW", "D3DDEVTYPE_NULLREF", ]) D3DMULTISAMPLE_TYPE = Enum("D3DMULTISAMPLE_TYPE", [ "D3DMULTISAMPLE_NONE", "D3DMULTISAMPLE_NONMASKABLE", "D3DMULTISAMPLE_2_SAMPLES", "D3DMULTISAMPLE_3_SAMPLES", "D3DMULTISAMPLE_4_SAMPLES", "D3DMULTISAMPLE_5_SAMPLES", "D3DMULTISAMPLE_6_SAMPLES", "D3DMULTISAMPLE_7_SAMPLES", "D3DMULTISAMPLE_8_SAMPLES", "D3DMULTISAMPLE_9_SAMPLES", "D3DMULTISAMPLE_10_SAMPLES", "D3DMULTISAMPLE_11_SAMPLES", "D3DMULTISAMPLE_12_SAMPLES", "D3DMULTISAMPLE_13_SAMPLES", "D3DMULTISAMPLE_14_SAMPLES", "D3DMULTISAMPLE_15_SAMPLES", "D3DMULTISAMPLE_16_SAMPLES", ]) D3DFORMAT = Enum("D3DFORMAT", [ "D3DFMT_UNKNOWN", "D3DFMT_R8G8B8", "D3DFMT_A8R8G8B8", "D3DFMT_X8R8G8B8", "D3DFMT_R5G6B5", "D3DFMT_X1R5G5B5", "D3DFMT_A1R5G5B5", "D3DFMT_A4R4G4B4", "D3DFMT_R3G3B2", "D3DFMT_A8", "D3DFMT_A8R3G3B2", "D3DFMT_X4R4G4B4", "D3DFMT_A2B10G10R10", "D3DFMT_A8B8G8R8", "D3DFMT_X8B8G8R8", "D3DFMT_G16R16", "D3DFMT_A2R10G10B10", "D3DFMT_A16B16G16R16", "D3DFMT_A8P8", "D3DFMT_P8", "D3DFMT_L8", "D3DFMT_A8L8", "D3DFMT_A4L4", "D3DFMT_V8U8", "D3DFMT_L6V5U5", "D3DFMT_X8L8V8U8", "D3DFMT_Q8W8V8U8", "D3DFMT_V16U16", "D3DFMT_A2W10V10U10", "D3DFMT_UYVY", "D3DFMT_R8G8_B8G8", "D3DFMT_YUY2", "D3DFMT_G8R8_G8B8", "D3DFMT_DXT1", "D3DFMT_DXT2", "D3DFMT_DXT3", "D3DFMT_DXT4", "D3DFMT_DXT5", "D3DFMT_D16_LOCKABLE", "D3DFMT_D32", "D3DFMT_D15S1", "D3DFMT_D24S8", "D3DFMT_D24X8", "D3DFMT_D24X4S4", "D3DFMT_D16", "D3DFMT_D32F_LOCKABLE", "D3DFMT_D24FS8", "D3DFMT_D32_LOCKABLE", "D3DFMT_S8_LOCKABLE", "D3DFMT_L16", "D3DFMT_VERTEXDATA", "D3DFMT_INDEX16", "D3DFMT_INDEX32", "D3DFMT_Q16W16V16U16", "D3DFMT_MULTI2_ARGB8", "D3DFMT_R16F", "D3DFMT_G16R16F", "D3DFMT_A16B16G16R16F", "D3DFMT_R32F", "D3DFMT_G32R32F", "D3DFMT_A32B32G32R32F", "D3DFMT_CxV8U8", "D3DFMT_A1", "D3DFMT_A2B10G10R10_XR_BIAS", "D3DFMT_BINARYBUFFER", # Unofficial formats "D3DFMT_ATI1N", "D3DFMT_ATI2N", "D3DFMT_AYUV", "D3DFMT_DF16", "D3DFMT_DF24", "D3DFMT_INTZ", "D3DFMT_NULL", "D3DFMT_NV12", "D3DFMT_YV12", "D3DFMT_RAWZ", ]) D3DDISPLAYMODE = Struct("D3DDISPLAYMODE", [ (UINT, "Width"), (UINT, "Height"), (UINT, "RefreshRate"), (D3DFORMAT, "Format"), ]) D3DCREATE = Flags(DWORD, [ "D3DCREATE_FPU_PRESERVE", "D3DCREATE_MULTITHREADED", "D3DCREATE_PUREDEVICE", "D3DCREATE_SOFTWARE_VERTEXPROCESSING", "D3DCREATE_HARDWARE_VERTEXPROCESSING", "D3DCREATE_MIXED_VERTEXPROCESSING", "D3DCREATE_DISABLE_DRIVER_MANAGEMENT", "D3DCREATE_ADAPTERGROUP_DEVICE", "D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX", "D3DCREATE_NOWINDOWCHANGES", "D3DCREATE_DISABLE_PSGP_THREADING", "D3DCREATE_ENABLE_PRESENTSTATS", "D3DCREATE_DISABLE_PRINTSCREEN", "D3DCREATE_SCREENSAVER", ]) D3DDEVICE_CREATION_PARAMETERS = Struct("D3DDEVICE_CREATION_PARAMETERS", [ (UINT, "AdapterOrdinal"), (D3DDEVTYPE, "DeviceType"), (HWND, "hFocusWindow"), (D3DCREATE, "BehaviorFlags"), ]) D3DSWAPEFFECT = Enum("D3DSWAPEFFECT", [ "D3DSWAPEFFECT_DISCARD", "D3DSWAPEFFECT_FLIP", "D3DSWAPEFFECT_COPY", ]) D3DPOOL = Enum("D3DPOOL", [ "D3DPOOL_DEFAULT", "D3DPOOL_MANAGED", "D3DPOOL_SYSTEMMEM", "D3DPOOL_SCRATCH", ]) D3DPRESENT = FakeEnum(DWORD, [ "D3DPRESENT_RATE_DEFAULT", ]) D3DPRESENTFLAG = Flags(DWORD, [ "D3DPRESENTFLAG_LOCKABLE_BACKBUFFER", "D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL", "D3DPRESENTFLAG_DEVICECLIP", "D3DPRESENTFLAG_VIDEO", "D3DPRESENTFLAG_NOAUTOROTATE", "D3DPRESENTFLAG_UNPRUNEDMODE", ]) D3DPRESENT_INTERVAL = Flags(DWORD, [ "D3DPRESENT_INTERVAL_DEFAULT", # 0 "D3DPRESENT_INTERVAL_ONE", "D3DPRESENT_INTERVAL_TWO", "D3DPRESENT_INTERVAL_THREE", "D3DPRESENT_INTERVAL_FOUR", "D3DPRESENT_INTERVAL_IMMEDIATE", ]) D3DPRESENT_PARAMETERS = Struct("D3DPRESENT_PARAMETERS", [ (UINT, "BackBufferWidth"), (UINT, "BackBufferHeight"), (D3DFORMAT, "BackBufferFormat"), (UINT, "BackBufferCount"), (D3DMULTISAMPLE_TYPE, "MultiSampleType"), (DWORD, "MultiSampleQuality"), (D3DSWAPEFFECT, "SwapEffect"), (HWND, "hDeviceWindow"), (BOOL, "Windowed"), (BOOL, "EnableAutoDepthStencil"), (D3DFORMAT, "AutoDepthStencilFormat"), (D3DPRESENTFLAG, "Flags"), (UINT, "FullScreen_RefreshRateInHz"), (D3DPRESENT_INTERVAL, "PresentationInterval"), ]) D3DGAMMARAMP = Struct("D3DGAMMARAMP", [ (Array(WORD, 256), "red"), (Array(WORD, 256), "green"), (Array(WORD, 256), "blue"), ]) D3DBACKBUFFER_TYPE = Enum("D3DBACKBUFFER_TYPE", [ "D3DBACKBUFFER_TYPE_MONO", "D3DBACKBUFFER_TYPE_LEFT", "D3DBACKBUFFER_TYPE_RIGHT", ]) D3DRESOURCETYPE = Enum("D3DRESOURCETYPE", [ "D3DRTYPE_SURFACE", "D3DRTYPE_VOLUME", "D3DRTYPE_TEXTURE", "D3DRTYPE_VOLUMETEXTURE", "D3DRTYPE_CUBETEXTURE", "D3DRTYPE_VERTEXBUFFER", "D3DRTYPE_INDEXBUFFER", ]) D3DUSAGE = Flags(DWORD, [ "D3DUSAGE_RENDERTARGET", "D3DUSAGE_DEPTHSTENCIL", "D3DUSAGE_WRITEONLY", "D3DUSAGE_SOFTWAREPROCESSING", "D3DUSAGE_DONOTCLIP", "D3DUSAGE_POINTS", "D3DUSAGE_RTPATCHES", "D3DUSAGE_NPATCHES", "D3DUSAGE_DYNAMIC", "D3DUSAGE_AUTOGENMIPMAP", "D3DUSAGE_RESTRICTED_CONTENT", "D3DUSAGE_RESTRICT_SHARED_RESOURCE", "D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER", "D3DUSAGE_DMAP", "D3DUSAGE_QUERY_LEGACYBUMPMAP", "D3DUSAGE_QUERY_SRGBREAD", "D3DUSAGE_QUERY_FILTER", "D3DUSAGE_QUERY_SRGBWRITE", "D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING", "D3DUSAGE_QUERY_VERTEXTEXTURE", "D3DUSAGE_QUERY_WRAPANDMIP", "D3DUSAGE_NONSECURE", "D3DUSAGE_TEXTAPI", ]) D3DCUBEMAP_FACES = Enum("D3DCUBEMAP_FACES", [ "D3DCUBEMAP_FACE_POSITIVE_X", "D3DCUBEMAP_FACE_NEGATIVE_X", "D3DCUBEMAP_FACE_POSITIVE_Y", "D3DCUBEMAP_FACE_NEGATIVE_Y", "D3DCUBEMAP_FACE_POSITIVE_Z", "D3DCUBEMAP_FACE_NEGATIVE_Z", ]) D3DLOCK = Flags(DWORD, [ "D3DLOCK_READONLY", "D3DLOCK_DISCARD", "D3DLOCK_NOOVERWRITE", "D3DLOCK_NOSYSLOCK", "D3DLOCK_DONOTWAIT", "D3DLOCK_NO_DIRTY_UPDATE", ]) D3DVERTEXBUFFER_DESC = Struct("D3DVERTEXBUFFER_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), (DWORD, "FVF"), ]) D3DINDEXBUFFER_DESC = Struct("D3DINDEXBUFFER_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Size"), ]) D3DSURFACE_DESC = Struct("D3DSURFACE_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (D3DMULTISAMPLE_TYPE, "MultiSampleType"), (DWORD, "MultiSampleQuality"), (UINT, "Width"), (UINT, "Height"), ]) D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [ (D3DFORMAT, "Format"), (D3DRESOURCETYPE, "Type"), (D3DUSAGE, "Usage"), (D3DPOOL, "Pool"), (UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), ]) D3DLOCKED_RECT = Struct("D3DLOCKED_RECT", [ (INT, "Pitch"), (LinearPointer(Void, "_MappedSize"), "pBits"), ]) D3DBOX = Struct("D3DBOX", [ (UINT, "Left"), (UINT, "Top"), (UINT, "Right"), (UINT, "Bottom"), (UINT, "Front"), (UINT, "Back"), ]) D3DLOCKED_BOX = Struct("D3DLOCKED_BOX", [ (INT, "RowPitch"), (INT, "SlicePitch"), (LinearPointer(Void, "_MappedSize"), "pBits"), ]) D3DRANGE = Struct("D3DRANGE", [ (UINT, "Offset"), (UINT, "Size"), ]) D3DRECTPATCH_INFO = Struct("D3DRECTPATCH_INFO", [ (UINT, "StartVertexOffsetWidth"), (UINT, "StartVertexOffsetHeight"), (UINT, "Width"), (UINT, "Height"), (UINT, "Stride"), (D3DBASISTYPE, "Basis"), (D3DDEGREETYPE, "Degree"), ]) D3DTRIPATCH_INFO = Struct("D3DTRIPATCH_INFO", [ (UINT, "StartVertexOffset"), (UINT, "NumVertices"), (D3DBASISTYPE, "Basis"), (D3DDEGREETYPE, "Degree"), ]) D3DADAPTER_IDENTIFIER9 = Struct("D3DADAPTER_IDENTIFIER9", [ (CString, "Driver"), (CString, "Description"), (CString, "DeviceName"), (LARGE_INTEGER, "DriverVersion"), (DWORD, "VendorId"), (DWORD, "DeviceId"), (DWORD, "SubSysId"), (DWORD, "Revision"), (GUID, "DeviceIdentifier"), (DWORD, "WHQLLevel"), ]) D3DRASTER_STATUS = Struct("D3DRASTER_STATUS", [ (BOOL, "InVBlank"), (UINT, "ScanLine"), ]) D3DISSUE = Flags(DWORD, [ "D3DISSUE_END", "D3DISSUE_BEGIN", ]) D3DGETDATA = Flags(DWORD, [ "D3DGETDATA_FLUSH", ]) D3DRESOURCESTATS = Struct("D3DRESOURCESTATS", [ (BOOL, "bThrashing"), (DWORD, "ApproxBytesDownloaded"), (DWORD, "NumEvicts"), (DWORD, "NumVidCreates"), (DWORD, "LastPri"), (DWORD, "NumUsed"), (DWORD, "NumUsedInVidMem"), (DWORD, "WorkingSet"), (DWORD, "WorkingSetBytes"), (DWORD, "TotalManaged"), (DWORD, "TotalBytes"), ]) D3DDEVINFO_RESOURCEMANAGER = Struct("D3DDEVINFO_RESOURCEMANAGER", [ (Array(D3DRESOURCESTATS, "D3DRTYPECOUNT"), "stats"), ]) D3DDEVINFO_D3DVERTEXSTATS = Struct("D3DDEVINFO_D3DVERTEXSTATS", [ (DWORD, "NumRenderedTriangles"), (DWORD, "NumExtraClippingTriangles"), ]) D3DDEVINFO_VCACHE = Struct("D3DDEVINFO_VCACHE", [ (DWORD, "Pattern"), (DWORD, "OptMethod"), (DWORD, "CacheSize"), (DWORD, "MagicNumber"), ]) D3DDEVINFO_D3D9PIPELINETIMINGS = Struct("D3DDEVINFO_D3D9PIPELINETIMINGS", [ (FLOAT, "VertexProcessingTimePercent"), (FLOAT, "PixelProcessingTimePercent"), (FLOAT, "OtherGPUProcessingTimePercent"), (FLOAT, "GPUIdleTimePercent"), ]) D3DDEVINFO_D3D9INTERFACETIMINGS = Struct("D3DDEVINFO_D3D9INTERFACETIMINGS", [ (FLOAT, "WaitingForGPUToUseApplicationResourceTimePercent"), (FLOAT, "WaitingForGPUToAcceptMoreCommandsTimePercent"), (FLOAT, "WaitingForGPUToStayWithinLatencyTimePercent"), (FLOAT, "WaitingForGPUExclusiveResourceTimePercent"), (FLOAT, "WaitingForGPUOtherTimePercent"), ]) D3DDEVINFO_D3D9STAGETIMINGS = Struct("D3DDEVINFO_D3D9STAGETIMINGS", [ (FLOAT, "MemoryProcessingPercent"), (FLOAT, "ComputationProcessingPercent"), ]) D3DDEVINFO_D3D9BANDWIDTHTIMINGS = Struct("D3DDEVINFO_D3D9BANDWIDTHTIMINGS", [ (FLOAT, "MaxBandwidthUtilized"), (FLOAT, "FrontEndUploadMemoryUtilizedPercent"), (FLOAT, "VertexRateUtilizedPercent"), (FLOAT, "TriangleSetupRateUtilizedPercent"), (FLOAT, "FillRateUtilizedPercent"), ]) D3DDEVINFO_D3D9CACHEUTILIZATION = Struct("D3DDEVINFO_D3D9CACHEUTILIZATION", [ (FLOAT, "TextureCacheHitRate"), (FLOAT, "PostTransformVertexCacheHitRate"), ]) D3DQUERYTYPE, D3DQUERYDATA = EnumPolymorphic("D3DQUERYTYPE", "_this->GetType()", [ ("D3DQUERYTYPE_VCACHE", Pointer(D3DDEVINFO_VCACHE)), ("D3DQUERYTYPE_RESOURCEMANAGER", Pointer(D3DDEVINFO_RESOURCEMANAGER)), ("D3DQUERYTYPE_VERTEXSTATS", Pointer(D3DDEVINFO_D3DVERTEXSTATS)), ("D3DQUERYTYPE_EVENT", Pointer(BOOL)), ("D3DQUERYTYPE_OCCLUSION", Pointer(DWORD)), ("D3DQUERYTYPE_TIMESTAMP", Pointer(UINT64)), ("D3DQUERYTYPE_TIMESTAMPDISJOINT", Pointer(BOOL)), ("D3DQUERYTYPE_TIMESTAMPFREQ", Pointer(UINT64)), ("D3DQUERYTYPE_PIPELINETIMINGS", Pointer(D3DDEVINFO_D3D9PIPELINETIMINGS)), ("D3DQUERYTYPE_INTERFACETIMINGS", Pointer(D3DDEVINFO_D3D9INTERFACETIMINGS)), ("D3DQUERYTYPE_VERTEXTIMINGS", Pointer(D3DDEVINFO_D3D9STAGETIMINGS)), ("D3DQUERYTYPE_PIXELTIMINGS", Pointer(D3DDEVINFO_D3D9STAGETIMINGS)), ("D3DQUERYTYPE_BANDWIDTHTIMINGS", Pointer(D3DDEVINFO_D3D9BANDWIDTHTIMINGS)), ("D3DQUERYTYPE_CACHEUTILIZATION", Pointer(D3DDEVINFO_D3D9CACHEUTILIZATION)), ], Blob(Void, "dwSize"), False) D3DCOMPOSERECTSOP = Enum("D3DCOMPOSERECTSOP", [ "D3DCOMPOSERECTS_COPY", "D3DCOMPOSERECTS_OR", "D3DCOMPOSERECTS_AND", "D3DCOMPOSERECTS_NEG", ]) D3DCOMPOSERECTDESC = Struct("D3DCOMPOSERECTDESC", [ (USHORT, "X"), (USHORT, "Y"), (USHORT, "Width"), (USHORT, "Height"), ]) D3DCOMPOSERECTDESTINATION = Struct("D3DCOMPOSERECTDESTINATION", [ (USHORT, "SrcRectIndex"), (USHORT, "Reserved"), (Short, "X"), (Short, "Y"), ]) D3DPRESENTSTATS = Struct("D3DPRESENTSTATS", [ (UINT, "PresentCount"), (UINT, "PresentRefreshCount"), (UINT, "SyncRefreshCount"), (LARGE_INTEGER, "SyncQPCTime"), (LARGE_INTEGER, "SyncGPUTime"), ]) D3DSCANLINEORDERING = Enum("D3DSCANLINEORDERING", [ "D3DSCANLINEORDERING_UNKNOWN", "D3DSCANLINEORDERING_PROGRESSIVE", "D3DSCANLINEORDERING_INTERLACED", ]) D3DDISPLAYMODEEX = Struct("D3DDISPLAYMODEEX", [ (UINT, "Size"), (UINT, "Width"), (UINT, "Height"), (UINT, "RefreshRate"), (D3DFORMAT, "Format"), (D3DSCANLINEORDERING, "ScanLineOrdering"), ]) D3DDISPLAYMODEFILTER = Struct("D3DDISPLAYMODEFILTER", [ (UINT, "Size"), (D3DFORMAT, "Format"), (D3DSCANLINEORDERING, "ScanLineOrdering"), ]) D3DDISPLAYROTATION = Enum("D3DDISPLAYROTATION", [ "D3DDISPLAYROTATION_IDENTITY", "D3DDISPLAYROTATION_90", "D3DDISPLAYROTATION_180", "D3DDISPLAYROTATION_270", ]) D3D9_RESOURCE_PRIORITY = FakeEnum(DWORD, [ "D3D9_RESOURCE_PRIORITY_MINIMUM", "D3D9_RESOURCE_PRIORITY_LOW", "D3D9_RESOURCE_PRIORITY_NORMAL", "D3D9_RESOURCE_PRIORITY_HIGH", "D3D9_RESOURCE_PRIORITY_MAXIMUM", ]) tmpNnpnZF/specs/d3dtypes.py0000664000175000017500000006264012543167424015222 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3dtypes.h""" from winapi import * D3DVALUE = Float LPD3DVALUE = Pointer(D3DVALUE) D3DFIXED = LONG LPD3DVALIDATECALLBACK = Opaque("LPD3DVALIDATECALLBACK") LPD3DENUMTEXTUREFORMATSCALLBACK = Opaque("LPD3DENUMTEXTUREFORMATSCALLBACK") LPD3DENUMPIXELFORMATSCALLBACK = Opaque("LPD3DENUMPIXELFORMATSCALLBACK") D3DCOLOR = Alias("D3DCOLOR", DWORD) D3DVECTOR = Struct("D3DVECTOR", [ (D3DVALUE, "x"), (D3DVALUE, "y"), (D3DVALUE, "z"), ]) LPD3DVECTOR = Pointer(D3DVECTOR) D3DCOLORVALUE = Struct("D3DCOLORVALUE", [ (D3DVALUE, "r"), (D3DVALUE, "g"), (D3DVALUE, "b"), (D3DVALUE, "a"), ]) LPD3DCOLORVALUE = Pointer(D3DCOLORVALUE) D3DRECT = Struct("D3DRECT", [ (LONG, "x1"), (LONG, "y1"), (LONG, "x2"), (LONG, "y2"), ]) LPD3DRECT = Pointer(D3DRECT) D3DMATERIALHANDLE = DWORD LPD3DMATERIALHANDLE = Pointer(D3DMATERIALHANDLE) D3DTEXTUREHANDLE = DWORD LPD3DTEXTUREHANDLE = Pointer(D3DTEXTUREHANDLE) D3DMATRIXHANDLE = DWORD LPD3DMATRIXHANDLE = Pointer(D3DMATRIXHANDLE) D3DHVERTEX = Struct("D3DHVERTEX", [ (DWORD, "dwFlags"), (D3DVALUE, "hx"), (D3DVALUE, "hy"), (D3DVALUE, "hz"), ]) LPD3DHVERTEX = Pointer(D3DHVERTEX) D3DTLVERTEX = Struct("D3DTLVERTEX", [ (D3DVALUE, "sx"), (D3DVALUE, "sy"), (D3DVALUE, "sz"), (D3DVALUE, "rhw"), (D3DCOLOR, "color"), (D3DCOLOR, "specular"), (D3DVALUE, "tu"), (D3DVALUE, "tv"), ]) LPD3DTLVERTEX = Pointer(D3DTLVERTEX) D3DLVERTEX = Struct("D3DLVERTEX", [ (D3DVALUE, "x"), (D3DVALUE, "y"), (D3DVALUE, "z"), (DWORD, "dwReserved"), (D3DCOLOR, "color"), (D3DCOLOR, "specular"), (D3DVALUE, "tu"), (D3DVALUE, "tv"), ]) LPD3DLVERTEX = Pointer(D3DLVERTEX) D3DVERTEX = Struct("D3DVERTEX", [ (D3DVALUE, "x"), (D3DVALUE, "y"), (D3DVALUE, "z"), (D3DVALUE, "nx"), (D3DVALUE, "ny"), (D3DVALUE, "nz"), (D3DVALUE, "tu"), (D3DVALUE, "tv"), ]) LPD3DVERTEX = Pointer(D3DVERTEX) D3DMATRIX = Struct("D3DMATRIX", [ (D3DVALUE, "_%u" % index) for index in [ 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44 ] ]) LPD3DMATRIX = Alias("LPD3DMATRIX", Pointer(D3DMATRIX)) D3DVIEWPORT = Struct("D3DVIEWPORT", [ (DWORD, "dwSize"), (DWORD, "dwX"), (DWORD, "dwY"), (DWORD, "dwWidth"), (DWORD, "dwHeight"), (D3DVALUE, "dvScaleX"), (D3DVALUE, "dvScaleY"), (D3DVALUE, "dvMaxX"), (D3DVALUE, "dvMaxY"), (D3DVALUE, "dvMinZ"), (D3DVALUE, "dvMaxZ"), ]) LPD3DVIEWPORT = Pointer(D3DVIEWPORT) D3DVIEWPORT2 = Struct("D3DVIEWPORT2", [ (DWORD, "dwSize"), (DWORD, "dwX"), (DWORD, "dwY"), (DWORD, "dwWidth"), (DWORD, "dwHeight"), (D3DVALUE, "dvClipX"), (D3DVALUE, "dvClipY"), (D3DVALUE, "dvClipWidth"), (D3DVALUE, "dvClipHeight"), (D3DVALUE, "dvMinZ"), (D3DVALUE, "dvMaxZ"), ]) LPD3DVIEWPORT2 = Pointer(D3DVIEWPORT2) D3DVIEWPORT7 = Struct("D3DVIEWPORT7", [ (DWORD, "dwX"), (DWORD, "dwY"), (DWORD, "dwWidth"), (DWORD, "dwHeight"), (D3DVALUE, "dvMinZ"), (D3DVALUE, "dvMaxZ"), ]) LPD3DVIEWPORT7 = Pointer(D3DVIEWPORT7) D3DCLIP = Flags(DWORD, [ "D3DCLIP_LEFT", "D3DCLIP_RIGHT", "D3DCLIP_TOP", "D3DCLIP_BOTTOM", "D3DCLIP_FRONT", "D3DCLIP_BACK", "D3DCLIP_GEN0", "D3DCLIP_GEN1", "D3DCLIP_GEN2", "D3DCLIP_GEN3", "D3DCLIP_GEN4", "D3DCLIP_GEN5", ]) D3DSTATUS = Flags(DWORD, [ "D3DSTATUS_DEFAULT", "D3DSTATUS_CLIPUNIONALL", "D3DSTATUS_CLIPUNIONLEFT", "D3DSTATUS_CLIPUNIONRIGHT", "D3DSTATUS_CLIPUNIONTOP", "D3DSTATUS_CLIPUNIONBOTTOM", "D3DSTATUS_CLIPUNIONFRONT", "D3DSTATUS_CLIPUNIONBACK", "D3DSTATUS_CLIPUNIONGEN0", "D3DSTATUS_CLIPUNIONGEN1", "D3DSTATUS_CLIPUNIONGEN2", "D3DSTATUS_CLIPUNIONGEN3", "D3DSTATUS_CLIPUNIONGEN4", "D3DSTATUS_CLIPUNIONGEN5", "D3DSTATUS_CLIPINTERSECTIONALL", "D3DSTATUS_CLIPINTERSECTIONLEFT", "D3DSTATUS_CLIPINTERSECTIONRIGHT", "D3DSTATUS_CLIPINTERSECTIONTOP", "D3DSTATUS_CLIPINTERSECTIONBOTTOM", "D3DSTATUS_CLIPINTERSECTIONFRONT", "D3DSTATUS_CLIPINTERSECTIONBACK", "D3DSTATUS_CLIPINTERSECTIONGEN0", "D3DSTATUS_CLIPINTERSECTIONGEN1", "D3DSTATUS_CLIPINTERSECTIONGEN2", "D3DSTATUS_CLIPINTERSECTIONGEN3", "D3DSTATUS_CLIPINTERSECTIONGEN4", "D3DSTATUS_CLIPINTERSECTIONGEN5", "D3DSTATUS_ZNOTVISIBLE", ]) D3DTRANSFORM = Flags(DWORD, [ "D3DTRANSFORM_CLIPPED", "D3DTRANSFORM_UNCLIPPED", ]) D3DTRANSFORMDATA = Struct("D3DTRANSFORMDATA", [ (DWORD, "dwSize"), (LPVOID, "lpIn"), (DWORD, "dwInSize"), (LPVOID, "lpOut"), (DWORD, "dwOutSize"), (LPD3DHVERTEX, "lpHOut"), (DWORD, "dwClip"), (DWORD, "dwClipIntersection"), (DWORD, "dwClipUnion"), (D3DRECT, "drExtent"), ]) LPD3DTRANSFORMDATA = Pointer(D3DTRANSFORMDATA) D3DLIGHTINGELEMENT = Struct("D3DLIGHTINGELEMENT", [ (D3DVECTOR, "dvPosition"), (D3DVECTOR, "dvNormal"), ]) LPD3DLIGHTINGELEMENT = Pointer(D3DLIGHTINGELEMENT) D3DMATERIAL = Struct("D3DMATERIAL", [ (DWORD, "dwSize"), (D3DCOLORVALUE, "diffuse"), (D3DCOLORVALUE, "ambient"), (D3DCOLORVALUE, "specular"), (D3DCOLORVALUE, "emissive"), (D3DVALUE, "power"), (D3DTEXTUREHANDLE, "hTexture"), (DWORD, "dwRampSize"), ]) LPD3DMATERIAL = Pointer(D3DMATERIAL) D3DMATERIAL7 = Struct("D3DMATERIAL7", [ (D3DCOLORVALUE, "diffuse"), (D3DCOLORVALUE, "ambient"), (D3DCOLORVALUE, "specular"), (D3DCOLORVALUE, "emissive"), (D3DVALUE, "power"), ]) LPD3DMATERIAL7 = Pointer(D3DMATERIAL7) D3DLIGHTTYPE = Enum("D3DLIGHTTYPE", [ "D3DLIGHT_POINT", "D3DLIGHT_SPOT", "D3DLIGHT_DIRECTIONAL", "D3DLIGHT_PARALLELPOINT", "D3DLIGHT_GLSPOT", ]) D3DLIGHT = Struct("D3DLIGHT", [ (DWORD, "dwSize"), (D3DLIGHTTYPE, "dltType"), (D3DCOLORVALUE, "dcvColor"), (D3DVECTOR, "dvPosition"), (D3DVECTOR, "dvDirection"), (D3DVALUE, "dvRange"), (D3DVALUE, "dvFalloff"), (D3DVALUE, "dvAttenuation0"), (D3DVALUE, "dvAttenuation1"), (D3DVALUE, "dvAttenuation2"), (D3DVALUE, "dvTheta"), (D3DVALUE, "dvPhi"), ]) LPD3DLIGHT = Pointer(D3DLIGHT) D3DLIGHT7 = Struct("D3DLIGHT7", [ (D3DLIGHTTYPE, "dltType"), (D3DCOLORVALUE, "dcvDiffuse"), (D3DCOLORVALUE, "dcvSpecular"), (D3DCOLORVALUE, "dcvAmbient"), (D3DVECTOR, "dvPosition"), (D3DVECTOR, "dvDirection"), (D3DVALUE, "dvRange"), (D3DVALUE, "dvFalloff"), (D3DVALUE, "dvAttenuation0"), (D3DVALUE, "dvAttenuation1"), (D3DVALUE, "dvAttenuation2"), (D3DVALUE, "dvTheta"), (D3DVALUE, "dvPhi"), ]) LPD3DLIGHT7 = Pointer(D3DLIGHT7) D3DLIGHTFLAGS = Flags(DWORD, [ "D3DLIGHT_ACTIVE", "D3DLIGHT_NO_SPECULAR", "D3DLIGHT_ALL", ]) D3DLIGHT2 = Struct("D3DLIGHT2", [ (DWORD, "dwSize"), (D3DLIGHTTYPE, "dltType"), (D3DCOLORVALUE, "dcvColor"), (D3DVECTOR, "dvPosition"), (D3DVECTOR, "dvDirection"), (D3DVALUE, "dvRange"), (D3DVALUE, "dvFalloff"), (D3DVALUE, "dvAttenuation0"), (D3DVALUE, "dvAttenuation1"), (D3DVALUE, "dvAttenuation2"), (D3DVALUE, "dvTheta"), (D3DVALUE, "dvPhi"), (DWORD, "dwFlags"), ]) LPD3DLIGHT2 = Pointer(D3DLIGHT2) D3DLIGHTDATA = Struct("D3DLIGHTDATA", [ (DWORD, "dwSize"), (LPD3DLIGHTINGELEMENT, "lpIn"), (DWORD, "dwInSize"), (LPD3DTLVERTEX, "lpOut"), (DWORD, "dwOutSize"), ]) LPD3DLIGHTDATA = Pointer(D3DLIGHTDATA) D3DCOLORMODEL = FakeEnum(DWORD, [ "D3DCOLOR_MONO", "D3DCOLOR_RGB", ]) D3DCLEAR = Flags(DWORD, [ "D3DCLEAR_TARGET", "D3DCLEAR_ZBUFFER", "D3DCLEAR_STENCIL", ]) D3DOPCODE = Enum("D3DOPCODE", [ "D3DOP_POINT", "D3DOP_LINE", "D3DOP_TRIANGLE", "D3DOP_MATRIXLOAD", "D3DOP_MATRIXMULTIPLY", "D3DOP_STATETRANSFORM", "D3DOP_STATELIGHT", "D3DOP_STATERENDER", "D3DOP_PROCESSVERTICES", "D3DOP_TEXTURELOAD", "D3DOP_EXIT", "D3DOP_BRANCHFORWARD", "D3DOP_SPAN", "D3DOP_SETSTATUS", ]) D3DINSTRUCTION = Struct("D3DINSTRUCTION", [ (BYTE, "bOpcode"), (BYTE, "bSize"), (WORD, "wCount"), ]) D3DTEXTURELOAD = Struct("D3DTEXTURELOAD", [ (D3DTEXTUREHANDLE, "hDestTexture"), (D3DTEXTUREHANDLE, "hSrcTexture"), ]) D3DPICKRECORD = Struct("D3DPICKRECORD", [ (BYTE, "bOpcode"), (BYTE, "bPad"), (DWORD, "dwOffset"), (D3DVALUE, "dvZ"), ]) LPD3DPICKRECORD = Pointer(D3DPICKRECORD) D3DSHADEMODE = Enum("D3DSHADEMODE", [ "D3DSHADE_FLAT", "D3DSHADE_GOURAUD", "D3DSHADE_PHONG", ]) D3DFILLMODE = Enum("D3DFILLMODE", [ "D3DFILL_POINT", "D3DFILL_WIREFRAME", "D3DFILL_SOLID", ]) D3DLINEPATTERN = Struct("D3DLINEPATTERN", [ (WORD, "wRepeatFactor"), (WORD, "wLinePattern"), ]) D3DTEXTUREFILTER = Enum("D3DTEXTUREFILTER", [ "D3DFILTER_NEAREST", "D3DFILTER_LINEAR", "D3DFILTER_MIPNEAREST", "D3DFILTER_MIPLINEAR", "D3DFILTER_LINEARMIPNEAREST", "D3DFILTER_LINEARMIPLINEAR", ]) D3DBLEND = Enum("D3DBLEND", [ "D3DBLEND_ZERO", "D3DBLEND_ONE", "D3DBLEND_SRCCOLOR", "D3DBLEND_INVSRCCOLOR", "D3DBLEND_SRCALPHA", "D3DBLEND_INVSRCALPHA", "D3DBLEND_DESTALPHA", "D3DBLEND_INVDESTALPHA", "D3DBLEND_DESTCOLOR", "D3DBLEND_INVDESTCOLOR", "D3DBLEND_SRCALPHASAT", "D3DBLEND_BOTHSRCALPHA", "D3DBLEND_BOTHINVSRCALPHA", ]) D3DTEXTUREBLEND = Enum("D3DTEXTUREBLEND", [ "D3DTBLEND_DECAL", "D3DTBLEND_MODULATE", "D3DTBLEND_DECALALPHA", "D3DTBLEND_MODULATEALPHA", "D3DTBLEND_DECALMASK", "D3DTBLEND_MODULATEMASK", "D3DTBLEND_COPY", "D3DTBLEND_ADD", ]) D3DTEXTUREADDRESS = Enum("D3DTEXTUREADDRESS", [ "D3DTADDRESS_WRAP", "D3DTADDRESS_MIRROR", "D3DTADDRESS_CLAMP", "D3DTADDRESS_BORDER", ]) D3DCULL = Enum("D3DCULL", [ "D3DCULL_NONE", "D3DCULL_CW", "D3DCULL_CCW", ]) D3DCMPFUNC = Enum("D3DCMPFUNC", [ "D3DCMP_NEVER", "D3DCMP_LESS", "D3DCMP_EQUAL", "D3DCMP_LESSEQUAL", "D3DCMP_GREATER", "D3DCMP_NOTEQUAL", "D3DCMP_GREATEREQUAL", "D3DCMP_ALWAYS", ]) D3DSTENCILOP = Enum("D3DSTENCILOP", [ "D3DSTENCILOP_KEEP", "D3DSTENCILOP_ZERO", "D3DSTENCILOP_REPLACE", "D3DSTENCILOP_INCRSAT", "D3DSTENCILOP_DECRSAT", "D3DSTENCILOP_INVERT", "D3DSTENCILOP_INCR", "D3DSTENCILOP_DECR", ]) D3DFOGMODE = Enum("D3DFOGMODE", [ "D3DFOG_NONE", "D3DFOG_EXP", "D3DFOG_EXP2", "D3DFOG_LINEAR", ]) D3DZBUFFERTYPE = Enum("D3DZBUFFERTYPE", [ "D3DZB_FALSE", "D3DZB_TRUE", "D3DZB_USEW", ]) D3DANTIALIASMODE = Enum("D3DANTIALIASMODE", [ "D3DANTIALIAS_NONE", "D3DANTIALIAS_SORTDEPENDENT", "D3DANTIALIAS_SORTINDEPENDENT", ]) D3DVERTEXTYPE = Enum("D3DVERTEXTYPE", [ "D3DVT_VERTEX", "D3DVT_LVERTEX", "D3DVT_TLVERTEX", ]) D3DPRIMITIVETYPE = Enum("D3DPRIMITIVETYPE", [ "D3DPT_POINTLIST", "D3DPT_LINELIST", "D3DPT_LINESTRIP", "D3DPT_TRIANGLELIST", "D3DPT_TRIANGLESTRIP", "D3DPT_TRIANGLEFAN", ]) D3DTRANSFORMSTATETYPE = Enum("D3DTRANSFORMSTATETYPE", [ "D3DTRANSFORMSTATE_WORLD", "D3DTRANSFORMSTATE_VIEW", "D3DTRANSFORMSTATE_PROJECTION", "D3DTRANSFORMSTATE_WORLD1", "D3DTRANSFORMSTATE_WORLD2", "D3DTRANSFORMSTATE_WORLD3", "D3DTRANSFORMSTATE_TEXTURE0", "D3DTRANSFORMSTATE_TEXTURE1", "D3DTRANSFORMSTATE_TEXTURE2", "D3DTRANSFORMSTATE_TEXTURE3", "D3DTRANSFORMSTATE_TEXTURE4", "D3DTRANSFORMSTATE_TEXTURE5", "D3DTRANSFORMSTATE_TEXTURE6", "D3DTRANSFORMSTATE_TEXTURE7", ]) D3DLIGHTSTATETYPE = Enum("D3DLIGHTSTATETYPE", [ "D3DLIGHTSTATE_MATERIAL", "D3DLIGHTSTATE_AMBIENT", "D3DLIGHTSTATE_COLORMODEL", "D3DLIGHTSTATE_FOGMODE", "D3DLIGHTSTATE_FOGSTART", "D3DLIGHTSTATE_FOGEND", "D3DLIGHTSTATE_FOGDENSITY", "D3DLIGHTSTATE_COLORVERTEX", ]) D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [ "D3DMCS_MATERIAL", "D3DMCS_COLOR1", "D3DMCS_COLOR2", ]) D3DWRAPCOORD = Flags(DWORD, [ "D3DWRAPCOORD_0", "D3DWRAPCOORD_1", "D3DWRAPCOORD_2", "D3DWRAPCOORD_3", ]) D3DRENDERSTATETYPE = Enum("D3DRENDERSTATETYPE", [ "D3DRENDERSTATE_ANTIALIAS", "D3DRENDERSTATE_TEXTUREPERSPECTIVE", "D3DRENDERSTATE_ZENABLE", "D3DRENDERSTATE_FILLMODE", "D3DRENDERSTATE_SHADEMODE", "D3DRENDERSTATE_LINEPATTERN", "D3DRENDERSTATE_ZWRITEENABLE", "D3DRENDERSTATE_ALPHATESTENABLE", "D3DRENDERSTATE_LASTPIXEL", "D3DRENDERSTATE_SRCBLEND", "D3DRENDERSTATE_DESTBLEND", "D3DRENDERSTATE_CULLMODE", "D3DRENDERSTATE_ZFUNC", "D3DRENDERSTATE_ALPHAREF", "D3DRENDERSTATE_ALPHAFUNC", "D3DRENDERSTATE_DITHERENABLE", "D3DRENDERSTATE_ALPHABLENDENABLE", "D3DRENDERSTATE_FOGENABLE", "D3DRENDERSTATE_SPECULARENABLE", "D3DRENDERSTATE_ZVISIBLE", "D3DRENDERSTATE_STIPPLEDALPHA", "D3DRENDERSTATE_FOGCOLOR", "D3DRENDERSTATE_FOGTABLEMODE", "D3DRENDERSTATE_FOGSTART", "D3DRENDERSTATE_FOGEND", "D3DRENDERSTATE_FOGDENSITY", "D3DRENDERSTATE_EDGEANTIALIAS", "D3DRENDERSTATE_COLORKEYENABLE", "D3DRENDERSTATE_ZBIAS", "D3DRENDERSTATE_RANGEFOGENABLE", "D3DRENDERSTATE_STENCILENABLE", "D3DRENDERSTATE_STENCILFAIL", "D3DRENDERSTATE_STENCILZFAIL", "D3DRENDERSTATE_STENCILPASS", "D3DRENDERSTATE_STENCILFUNC", "D3DRENDERSTATE_STENCILREF", "D3DRENDERSTATE_STENCILMASK", "D3DRENDERSTATE_STENCILWRITEMASK", "D3DRENDERSTATE_TEXTUREFACTOR", "D3DRENDERSTATE_WRAP0", "D3DRENDERSTATE_WRAP1", "D3DRENDERSTATE_WRAP2", "D3DRENDERSTATE_WRAP3", "D3DRENDERSTATE_WRAP4", "D3DRENDERSTATE_WRAP5", "D3DRENDERSTATE_WRAP6", "D3DRENDERSTATE_WRAP7", "D3DRENDERSTATE_CLIPPING", "D3DRENDERSTATE_LIGHTING", "D3DRENDERSTATE_EXTENTS", "D3DRENDERSTATE_AMBIENT", "D3DRENDERSTATE_FOGVERTEXMODE", "D3DRENDERSTATE_COLORVERTEX", "D3DRENDERSTATE_LOCALVIEWER", "D3DRENDERSTATE_NORMALIZENORMALS", "D3DRENDERSTATE_COLORKEYBLENDENABLE", "D3DRENDERSTATE_DIFFUSEMATERIALSOURCE", "D3DRENDERSTATE_SPECULARMATERIALSOURCE", "D3DRENDERSTATE_AMBIENTMATERIALSOURCE", "D3DRENDERSTATE_EMISSIVEMATERIALSOURCE", "D3DRENDERSTATE_VERTEXBLEND", "D3DRENDERSTATE_CLIPPLANEENABLE", "D3DRENDERSTATE_TEXTUREHANDLE", "D3DRENDERSTATE_TEXTUREADDRESS", "D3DRENDERSTATE_WRAPU", "D3DRENDERSTATE_WRAPV", "D3DRENDERSTATE_MONOENABLE", "D3DRENDERSTATE_ROP2", "D3DRENDERSTATE_PLANEMASK", "D3DRENDERSTATE_TEXTUREMAG", "D3DRENDERSTATE_TEXTUREMIN", "D3DRENDERSTATE_TEXTUREMAPBLEND", "D3DRENDERSTATE_SUBPIXEL", "D3DRENDERSTATE_SUBPIXELX", "D3DRENDERSTATE_STIPPLEENABLE", "D3DRENDERSTATE_BORDERCOLOR", "D3DRENDERSTATE_TEXTUREADDRESSU", "D3DRENDERSTATE_TEXTUREADDRESSV", "D3DRENDERSTATE_MIPMAPLODBIAS", "D3DRENDERSTATE_ANISOTROPY", "D3DRENDERSTATE_FLUSHBATCH", "D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT", "D3DRENDERSTATE_STIPPLEPATTERN00", "D3DRENDERSTATE_STIPPLEPATTERN01", "D3DRENDERSTATE_STIPPLEPATTERN02", "D3DRENDERSTATE_STIPPLEPATTERN03", "D3DRENDERSTATE_STIPPLEPATTERN04", "D3DRENDERSTATE_STIPPLEPATTERN05", "D3DRENDERSTATE_STIPPLEPATTERN06", "D3DRENDERSTATE_STIPPLEPATTERN07", "D3DRENDERSTATE_STIPPLEPATTERN08", "D3DRENDERSTATE_STIPPLEPATTERN09", "D3DRENDERSTATE_STIPPLEPATTERN10", "D3DRENDERSTATE_STIPPLEPATTERN11", "D3DRENDERSTATE_STIPPLEPATTERN12", "D3DRENDERSTATE_STIPPLEPATTERN13", "D3DRENDERSTATE_STIPPLEPATTERN14", "D3DRENDERSTATE_STIPPLEPATTERN15", "D3DRENDERSTATE_STIPPLEPATTERN16", "D3DRENDERSTATE_STIPPLEPATTERN17", "D3DRENDERSTATE_STIPPLEPATTERN18", "D3DRENDERSTATE_STIPPLEPATTERN19", "D3DRENDERSTATE_STIPPLEPATTERN20", "D3DRENDERSTATE_STIPPLEPATTERN21", "D3DRENDERSTATE_STIPPLEPATTERN22", "D3DRENDERSTATE_STIPPLEPATTERN23", "D3DRENDERSTATE_STIPPLEPATTERN24", "D3DRENDERSTATE_STIPPLEPATTERN25", "D3DRENDERSTATE_STIPPLEPATTERN26", "D3DRENDERSTATE_STIPPLEPATTERN27", "D3DRENDERSTATE_STIPPLEPATTERN28", "D3DRENDERSTATE_STIPPLEPATTERN29", "D3DRENDERSTATE_STIPPLEPATTERN30", "D3DRENDERSTATE_STIPPLEPATTERN31", ]) D3DSTATE = Struct("D3DSTATE", [ (D3DTRANSFORMSTATETYPE, "dtstTransformStateType"), (D3DLIGHTSTATETYPE, "dlstLightStateType"), (D3DRENDERSTATETYPE, "drstRenderStateType"), (Array(DWORD, 1), "dwArg"), (Array(D3DVALUE, 1), "dvArg"), ]) D3DMATRIXLOAD = Struct("D3DMATRIXLOAD", [ (D3DMATRIXHANDLE, "hDestMatrix"), (D3DMATRIXHANDLE, "hSrcMatrix"), ]) D3DMATRIXMULTIPLY = Struct("D3DMATRIXMULTIPLY", [ (D3DMATRIXHANDLE, "hDestMatrix"), (D3DMATRIXHANDLE, "hSrcMatrix1"), (D3DMATRIXHANDLE, "hSrcMatrix2"), ]) D3DPROCESSVERTICES = Struct("D3DPROCESSVERTICES", [ (DWORD, "dwFlags"), (WORD, "wStart"), (WORD, "wDest"), (DWORD, "dwCount"), (DWORD, "dwReserved"), ]) D3DPROCESSVERTICES = Flags(DWORD, [ "D3DPROCESSVERTICES_TRANSFORMLIGHT", "D3DPROCESSVERTICES_TRANSFORM", "D3DPROCESSVERTICES_COPY", "D3DPROCESSVERTICES_OPMASK", "D3DPROCESSVERTICES_UPDATEEXTENTS", "D3DPROCESSVERTICES_NOCOLOR", ]) D3DTEXTURESTAGESTATETYPE = Enum("D3DTEXTURESTAGESTATETYPE", [ "D3DTSS_COLOROP", "D3DTSS_COLORARG1", "D3DTSS_COLORARG2", "D3DTSS_ALPHAOP", "D3DTSS_ALPHAARG1", "D3DTSS_ALPHAARG2", "D3DTSS_BUMPENVMAT00", "D3DTSS_BUMPENVMAT01", "D3DTSS_BUMPENVMAT10", "D3DTSS_BUMPENVMAT11", "D3DTSS_TEXCOORDINDEX", "D3DTSS_ADDRESS", "D3DTSS_ADDRESSU", "D3DTSS_ADDRESSV", "D3DTSS_BORDERCOLOR", "D3DTSS_MAGFILTER", "D3DTSS_MINFILTER", "D3DTSS_MIPFILTER", "D3DTSS_MIPMAPLODBIAS", "D3DTSS_MAXMIPLEVEL", "D3DTSS_MAXANISOTROPY", "D3DTSS_BUMPENVLSCALE", "D3DTSS_BUMPENVLOFFSET", "D3DTSS_TEXTURETRANSFORMFLAGS", ]) D3DTSS_TCI = Flags(DWORD, [ "D3DTSS_TCI_PASSTHRU", "D3DTSS_TCI_CAMERASPACENORMAL", "D3DTSS_TCI_CAMERASPACEPOSITION", "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR", ]) D3DTEXTUREOP = Enum("D3DTEXTUREOP", [ "D3DTOP_DISABLE", "D3DTOP_SELECTARG1", "D3DTOP_SELECTARG2", "D3DTOP_MODULATE", "D3DTOP_MODULATE2X", "D3DTOP_MODULATE4X", "D3DTOP_ADD", "D3DTOP_ADDSIGNED", "D3DTOP_ADDSIGNED2X", "D3DTOP_SUBTRACT", "D3DTOP_ADDSMOOTH", "D3DTOP_BLENDDIFFUSEALPHA", "D3DTOP_BLENDTEXTUREALPHA", "D3DTOP_BLENDFACTORALPHA", "D3DTOP_BLENDTEXTUREALPHAPM", "D3DTOP_BLENDCURRENTALPHA", "D3DTOP_PREMODULATE", "D3DTOP_MODULATEALPHA_ADDCOLOR", "D3DTOP_MODULATECOLOR_ADDALPHA", "D3DTOP_MODULATEINVALPHA_ADDCOLOR", "D3DTOP_MODULATEINVCOLOR_ADDALPHA", "D3DTOP_BUMPENVMAP", "D3DTOP_BUMPENVMAPLUMINANCE", "D3DTOP_DOTPRODUCT3", ]) # XXX: Actually a mixture of enums and flags D3DTA = FakeEnum(DWORD, [ "D3DTA_DIFFUSE", "D3DTA_CURRENT", "D3DTA_TEXTURE", "D3DTA_TFACTOR", "D3DTA_SPECULAR", #"D3DTA_COMPLEMENT", #"D3DTA_ALPHAREPLICATE", ]) D3DTEXTUREMAGFILTER = Enum("D3DTEXTUREMAGFILTER", [ "D3DTFG_POINT", "D3DTFG_LINEAR", "D3DTFG_FLATCUBIC", "D3DTFG_GAUSSIANCUBIC", "D3DTFG_ANISOTROPIC", ]) D3DTEXTUREMINFILTER = Enum("D3DTEXTUREMINFILTER", [ "D3DTFN_POINT", "D3DTFN_LINEAR", "D3DTFN_ANISOTROPIC", ]) D3DTEXTUREMIPFILTER = Enum("D3DTEXTUREMIPFILTER", [ "D3DTFP_NONE", "D3DTFP_POINT", "D3DTFP_LINEAR", ]) D3DTRIFLAG = Flags(DWORD, [ "D3DTRIFLAG_START", "D3DTRIFLAG_STARTFLAT(len)", "D3DTRIFLAG_ODD", "D3DTRIFLAG_EVEN", "D3DTRIFLAG_EDGEENABLETRIANGLE", "D3DTRIFLAG_EDGEENABLE1", "D3DTRIFLAG_EDGEENABLE2", "D3DTRIFLAG_EDGEENABLE3", ]) D3DTRIANGLE = Struct("D3DTRIANGLE", [ (WORD, "v1"), (WORD, "v2"), (WORD, "v3"), (WORD, "wFlags"), ]) D3DLINE = Struct("D3DLINE", [ (WORD, "v1"), (WORD, "v2"), ]) D3DSPAN = Struct("D3DSPAN", [ (WORD, "wCount"), (WORD, "wFirst"), ]) D3DPOINT = Struct("D3DPOINT", [ (WORD, "wCount"), (WORD, "wFirst"), ]) D3DBRANCH = Struct("D3DBRANCH", [ (DWORD, "dwMask"), (DWORD, "dwValue"), (BOOL, "bNegate"), (DWORD, "dwOffset"), ]) D3DSTATUS = Struct("D3DSTATUS", [ (DWORD, "dwFlags"), (DWORD, "dwStatus"), (D3DRECT, "drExtent"), ]) D3DSETSTATUS = Flags(DWORD, [ "D3DSETSTATUS_STATUS", "D3DSETSTATUS_EXTENTS", "D3DSETSTATUS_ALL", ]) D3DCLIPSTATUS = Struct("D3DCLIPSTATUS", [ (DWORD, "dwFlags"), (DWORD, "dwStatus"), (Float, "minx"), (Float, "maxx"), (Float, "miny"), (Float, "maxy"), (Float, "minz"), (Float, "maxz"), ]) LPD3DCLIPSTATUS = Pointer(D3DCLIPSTATUS) D3DCLIPSTATUS = Flags(DWORD, [ "D3DCLIPSTATUS_STATUS", "D3DCLIPSTATUS_EXTENTS2", "D3DCLIPSTATUS_EXTENTS3", ]) D3DSTATS = Struct("D3DSTATS", [ (DWORD, "dwSize"), (DWORD, "dwTrianglesDrawn"), (DWORD, "dwLinesDrawn"), (DWORD, "dwPointsDrawn"), (DWORD, "dwSpansDrawn"), (DWORD, "dwVerticesProcessed"), ]) LPD3DSTATS = Pointer(D3DSTATS) D3DEXECUTE = Flags(DWORD, [ "D3DEXECUTE_CLIPPED", "D3DEXECUTE_UNCLIPPED", ]) D3DEXECUTEDATA = Struct("D3DEXECUTEDATA", [ (DWORD, "dwSize"), (DWORD, "dwVertexOffset"), (DWORD, "dwVertexCount"), (DWORD, "dwInstructionOffset"), (DWORD, "dwInstructionLength"), (DWORD, "dwHVertexOffset"), (D3DSTATUS, "dsStatus"), ]) LPD3DEXECUTEDATA = Pointer(D3DEXECUTEDATA) D3DPAL = Flags(DWORD, [ "D3DPAL_FREE", "D3DPAL_READONLY", "D3DPAL_RESERVED", ]) D3DVERTEXBUFFERDESC = Struct("D3DVERTEXBUFFERDESC", [ (DWORD, "dwSize"), (DWORD, "dwCaps"), (DWORD, "dwFVF"), (DWORD, "dwNumVertices"), ]) LPD3DVERTEXBUFFERDESC = Pointer(D3DVERTEXBUFFERDESC) D3DVBCAPS = Flags(DWORD, [ "D3DVBCAPS_SYSTEMMEMORY", "D3DVBCAPS_WRITEONLY", "D3DVBCAPS_OPTIMIZED", "D3DVBCAPS_DONOTCLIP", ]) D3DVOP = Flags(DWORD, [ "D3DVOP_LIGHT", "D3DVOP_TRANSFORM", "D3DVOP_CLIP", "D3DVOP_EXTENTS", ]) D3DPV = Flags(DWORD, [ "D3DPV_DONOTCOPYDATA", ]) D3DFVF = Flags(DWORD, [ "D3DFVF_RESERVED0", "D3DFVF_XYZ", "D3DFVF_XYZRHW", "D3DFVF_XYZB1", "D3DFVF_XYZB2", "D3DFVF_XYZB3", "D3DFVF_XYZB4", "D3DFVF_XYZB5", "D3DFVF_NORMAL", "D3DFVF_RESERVED1", "D3DFVF_DIFFUSE", "D3DFVF_SPECULAR", #"D3DFVF_TEX0", #"D3DFVF_TEX1", #"D3DFVF_TEX2", #"D3DFVF_TEX3", #"D3DFVF_TEX4", #"D3DFVF_TEX5", #"D3DFVF_TEX6", #"D3DFVF_TEX7", #"D3DFVF_TEX8", "D3DFVF_RESERVED2", #"D3DFVF_TEXCOORDSIZE1(0)", #"D3DFVF_TEXCOORDSIZE2(0)", #"D3DFVF_TEXCOORDSIZE3(0)", #"D3DFVF_TEXCOORDSIZE4(0)", #"D3DFVF_TEXCOORDSIZE1(1)", #"D3DFVF_TEXCOORDSIZE2(1)", #"D3DFVF_TEXCOORDSIZE3(1)", #"D3DFVF_TEXCOORDSIZE4(1)", #"D3DFVF_TEXCOORDSIZE1(2)", #"D3DFVF_TEXCOORDSIZE2(2)", #"D3DFVF_TEXCOORDSIZE3(2)", #"D3DFVF_TEXCOORDSIZE4(2)", #"D3DFVF_TEXCOORDSIZE1(3)", #"D3DFVF_TEXCOORDSIZE2(3)", #"D3DFVF_TEXCOORDSIZE3(3)", #"D3DFVF_TEXCOORDSIZE4(3)", ]) D3DDP_PTRSTRIDE = Struct("D3DDP_PTRSTRIDE", [ (LPVOID, "lpvData"), (DWORD, "dwStride"), ]) D3DDRAWPRIMITIVESTRIDEDDATA = Struct("D3DDRAWPRIMITIVESTRIDEDDATA", [ (D3DDP_PTRSTRIDE, "position"), (D3DDP_PTRSTRIDE, "normal"), (D3DDP_PTRSTRIDE, "diffuse"), (D3DDP_PTRSTRIDE, "specular"), (Array(D3DDP_PTRSTRIDE, "D3DDP_MAXTEXCOORD"), "textureCoords"), ]) LPD3DDRAWPRIMITIVESTRIDEDDATA = Pointer(D3DDRAWPRIMITIVESTRIDEDDATA) D3DVIS = Flags(DWORD, [ "D3DVIS_INSIDE_FRUSTUM", "D3DVIS_INTERSECT_FRUSTUM", "D3DVIS_OUTSIDE_FRUSTUM", "D3DVIS_INSIDE_LEFT", "D3DVIS_INTERSECT_LEFT", "D3DVIS_OUTSIDE_LEFT", "D3DVIS_INSIDE_RIGHT", "D3DVIS_INTERSECT_RIGHT", "D3DVIS_OUTSIDE_RIGHT", "D3DVIS_INSIDE_TOP", "D3DVIS_INTERSECT_TOP", "D3DVIS_OUTSIDE_TOP", "D3DVIS_INSIDE_BOTTOM", "D3DVIS_INTERSECT_BOTTOM", "D3DVIS_OUTSIDE_BOTTOM", "D3DVIS_INSIDE_NEAR", "D3DVIS_INTERSECT_NEAR", "D3DVIS_OUTSIDE_NEAR", "D3DVIS_INSIDE_FAR", "D3DVIS_INTERSECT_FAR", "D3DVIS_OUTSIDE_FAR", "D3DVIS_MASK_FRUSTUM", "D3DVIS_MASK_LEFT", "D3DVIS_MASK_RIGHT", "D3DVIS_MASK_TOP", "D3DVIS_MASK_BOTTOM", "D3DVIS_MASK_NEAR", "D3DVIS_MASK_FAR", ]) D3DDEVINFOID = Flags(DWORD, [ "D3DDEVINFOID_TEXTUREMANAGER", "D3DDEVINFOID_D3DTEXTUREMANAGER", "D3DDEVINFOID_TEXTURING", ]) D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [ "D3DSBT_ALL", "D3DSBT_PIXELSTATE", "D3DSBT_VERTEXSTATE", ]) D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [ "D3DVBLEND_DISABLE", "D3DVBLEND_1WEIGHT", "D3DVBLEND_2WEIGHTS", "D3DVBLEND_3WEIGHTS", ]) D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [ "D3DTTFF_DISABLE", "D3DTTFF_COUNT1", "D3DTTFF_COUNT2", "D3DTTFF_COUNT3", "D3DTTFF_COUNT4", "D3DTTFF_PROJECTED", ]) tmpNnpnZF/specs/d3d9dxva2.py0000664000175000017500000004014012543167424015162 0ustar chrischris########################################################################## # # Copyright 2012 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from d3d9 import * REFERENCE_TIME = Alias("REFERENCE_TIME", LONGLONG) DXVA2_ProcAmp = Flags(UINT, [ "DXVA2_ProcAmp_None", "DXVA2_ProcAmp_Brightness", "DXVA2_ProcAmp_Contrast", "DXVA2_ProcAmp_Hue", "DXVA2_ProcAmp_Saturation", ]) HRESULT = FakeEnum(HRESULT, [ "DXVA2_E_NOT_INITIALIZED", "DXVA2_E_NEW_VIDEO_DEVICE", "DXVA2_E_VIDEO_DEVICE_LOCKED", "DXVA2_E_NOT_AVAILABLE", ]) DXVA2_SampleFormat = Enum("DXVA2_SampleFormat", [ "DXVA2_SampleFormatMask", "DXVA2_SampleUnknown", "DXVA2_SampleProgressiveFrame", "DXVA2_SampleFieldInterleavedEvenFirst", "DXVA2_SampleFieldInterleavedOddFirst", "DXVA2_SampleFieldSingleEven", "DXVA2_SampleFieldSingleOdd", "DXVA2_SampleSubStream", ]) DXVA2_VideoChromaSubSampling = Enum("DXVA2_VideoChromaSubSampling", [ "DXVA2_VideoChromaSubsamplingMask", "DXVA2_VideoChromaSubsampling_Unknown", "DXVA2_VideoChromaSubsampling_ProgressiveChroma", "DXVA2_VideoChromaSubsampling_Horizontally_Cosited", "DXVA2_VideoChromaSubsampling_Vertically_Cosited", "DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes", "DXVA2_VideoChromaSubsampling_MPEG2", "DXVA2_VideoChromaSubsampling_MPEG1", "DXVA2_VideoChromaSubsampling_DV_PAL", "DXVA2_VideoChromaSubsampling_Cosited", ]) DXVA2_NominalRange = Enum("DXVA2_NominalRange", [ "DXVA2_NominalRangeMask", "DXVA2_NominalRange_Unknown", "DXVA2_NominalRange_Normal", "DXVA2_NominalRange_Wide", "DXVA2_NominalRange_0_255", "DXVA2_NominalRange_16_235", "DXVA2_NominalRange_48_208", ]) DXVA2_VideoLighting = Enum("DXVA2_VideoLighting", [ "DXVA2_VideoLightingMask", "DXVA2_VideoLighting_Unknown", "DXVA2_VideoLighting_bright", "DXVA2_VideoLighting_office", "DXVA2_VideoLighting_dim", "DXVA2_VideoLighting_dark", ]) DXVA2_VideoPrimaries = Enum("DXVA2_VideoPrimaries", [ "DXVA2_VideoPrimariesMask", "DXVA2_VideoPrimaries_Unknown", "DXVA2_VideoPrimaries_reserved", "DXVA2_VideoPrimaries_BT709", "DXVA2_VideoPrimaries_BT470_2_SysM", "DXVA2_VideoPrimaries_BT470_2_SysBG", "DXVA2_VideoPrimaries_SMPTE170M", "DXVA2_VideoPrimaries_SMPTE240M", "DXVA2_VideoPrimaries_EBU3213", "DXVA2_VideoPrimaries_SMPTE_C", ]) DXVA2_VideoTransferFunction = Enum("DXVA2_VideoTransferFunction", [ "DXVA2_VideoTransFuncMask", "DXVA2_VideoTransFunc_Unknown", "DXVA2_VideoTransFunc_10", "DXVA2_VideoTransFunc_18", "DXVA2_VideoTransFunc_20", "DXVA2_VideoTransFunc_22", "DXVA2_VideoTransFunc_709", "DXVA2_VideoTransFunc_240M", "DXVA2_VideoTransFunc_sRGB", "DXVA2_VideoTransFunc_28", ]) DXVA2_SurfaceType = FakeEnum(DWORD, [ "DXVA2_SurfaceType_DecoderRenderTarget", "DXVA2_SurfaceType_ProcessorRenderTarget", "DXVA2_SurfaceType_D3DRenderTargetTexture", ]) DXVA2_VideoTransferMatrix = Enum("DXVA2_VideoTransferMatrix", [ "DXVA2_VideoTransferMatrixMask", "DXVA2_VideoTransferMatrix_Unknown", "DXVA2_VideoTransferMatrix_BT709", "DXVA2_VideoTransferMatrix_BT601", "DXVA2_VideoTransferMatrix_SMPTE240M", ]) DXVA2_AYUVSample16 = Struct("DXVA2_AYUVSample16", [ (USHORT, "Cr"), (USHORT, "Cb"), (USHORT, "Y"), (USHORT, "Alpha"), ]) DXVA2_AYUVSample8 = Struct("DXVA2_AYUVSample8", [ (UCHAR, "Cr"), (UCHAR, "Cb"), (UCHAR, "Y"), (UCHAR, "Alpha"), ]) DXVA2_ConfigPictureDecode = Struct("DXVA2_ConfigPictureDecode", [ (GUID, "guidConfigBitstreamEncryption"), (GUID, "guidConfigMBcontrolEncryption"), (GUID, "guidConfigResidDiffEncryption"), (UINT, "ConfigBitstreamRaw"), (UINT, "ConfigMBcontrolRasterOrder"), (UINT, "ConfigResidDiffHost"), (UINT, "ConfigSpatialResid8"), (UINT, "ConfigResid8Subtraction"), (UINT, "ConfigSpatialHost8or9Clipping"), (UINT, "ConfigSpatialResidInterleaved"), (UINT, "ConfigIntraResidUnsigned"), (UINT, "ConfigResidDiffAccelerator"), (UINT, "ConfigHostInverseScan"), (UINT, "ConfigSpecificIDCT"), (UINT, "Config4GroupedCoefs"), (USHORT, "ConfigMinRenderTargetBuffCount"), (USHORT, "ConfigDecoderSpecific"), ]) DXVA2_DecodeBufferDesc = Struct("DXVA2_DecodeBufferDesc", [ (DWORD, "CompressedBufferType"), (UINT, "BufferIndex"), (UINT, "DataOffset"), (UINT, "DataSize"), (UINT, "FirstMBaddress"), (UINT, "NumMBsInBuffer"), (UINT, "Width"), (UINT, "Height"), (UINT, "Stride"), (UINT, "ReservedBits"), (PVOID, "pvPVPState"), ]) DXVA2_DecodeExtensionData = Struct("DXVA2_DecodeExtensionData", [ (UINT, "Function"), (PVOID, "pPrivateInputData"), (UINT, "PrivateInputDataSize"), (PVOID, "pPrivateOutputData"), (UINT, "PrivateOutputDataSize"), ]) DXVA2_DecodeExecuteParams = Struct("DXVA2_DecodeExecuteParams", [ (UINT, "NumCompBuffers"), (Array(DXVA2_DecodeBufferDesc, "{self}.NumCompBuffers"), "pCompressedBuffers"), (Pointer(DXVA2_DecodeExtensionData), "pExtensionData"), ]) DXVA2_ExtendedFormat = Struct("DXVA2_ExtendedFormat", [ (UINT, "value"), ]) DXVA2_Fixed32 = Struct("DXVA2_Fixed32", [ (USHORT, "Fraction"), (SHORT, "Value"), ]) DXVA2_FilterValues = Struct("DXVA2_FilterValues", [ (DXVA2_Fixed32, "Level"), (DXVA2_Fixed32, "Threshold"), (DXVA2_Fixed32, "Radius"), ]) DXVA2_Frequency = Struct("DXVA2_Frequency", [ (UINT, "Numerator"), (UINT, "Denominator"), ]) DXVA2_ProcAmpValues = Struct("DXVA2_ProcAmpValues", [ (DXVA2_Fixed32, "Brightness"), (DXVA2_Fixed32, "Contrast"), (DXVA2_Fixed32, "Hue"), (DXVA2_Fixed32, "Saturation"), ]) DXVA2_ValueRange = Struct("DXVA2_ValueRange", [ (DXVA2_Fixed32, "MinValue"), (DXVA2_Fixed32, "MaxValue"), (DXVA2_Fixed32, "DefaultValue"), (DXVA2_Fixed32, "StepSize"), ]) DXVA2_VideoDesc = Struct("DXVA2_VideoDesc", [ (UINT, "SampleWidth"), (UINT, "SampleHeight"), (DXVA2_ExtendedFormat, "SampleFormat"), (D3DFORMAT, "Format"), (DXVA2_Frequency, "InputSampleFreq"), (DXVA2_Frequency, "OutputFrameFreq"), (UINT, "UABProtectionLevel"), (UINT, "Reserved"), ]) DXVA2_VideoProcessBltParams = Struct("DXVA2_VideoProcessBltParams", [ (REFERENCE_TIME, "TargetFrame"), (RECT, "TargetRect"), (SIZE, "ConstrictionSize"), (UINT, "StreamingFlags"), (DXVA2_AYUVSample16, "BackgroundColor"), (DXVA2_ExtendedFormat, "DestFormat"), (DXVA2_ProcAmpValues, "ProcAmpValues"), (DXVA2_Fixed32, "Alpha"), (DXVA2_FilterValues, "NoiseFilterLuma"), (DXVA2_FilterValues, "NoiseFilterChroma"), (DXVA2_FilterValues, "DetailFilterLuma"), (DXVA2_FilterValues, "DetailFilterChroma"), (DWORD, "DestData"), ]) DXVA2_VideoProcessorCaps = Struct("DXVA2_VideoProcessorCaps", [ (UINT, "DeviceCaps"), (D3DPOOL, "InputPool"), (UINT, "NumForwardRefSamples"), (UINT, "NumBackwardRefSamples"), (UINT, "Reserved"), (UINT, "DeinterlaceTechnology"), (UINT, "ProcAmpControlCaps"), (UINT, "VideoProcessorOperations"), (UINT, "NoiseFilterTechnology"), (UINT, "DetailFilterTechnology"), ]) # See also DXVADDI_PVP_KEY128 DXVA2_PVP_KEY128 = Struct('DXVA2_PVP_KEY128', [ (Array(BYTE, 16), 'Data'), ]) # See also DXVADDI_PVP_SETKEY DXVA2_PVP_SETKEY = Struct('DXVA2_PVP_SETKEY', [ (DXVA2_PVP_KEY128, 'ContentKey'), ]) DXVA2_DECODEBUFFERDESC = Struct("DXVA2_DECODEBUFFERDESC", [ (ObjPointer(IDirect3DSurface9), "pRenderTarget"), (DWORD, "CompressedBufferType"), (DWORD, "BufferIndex"), (DWORD, "DataOffset"), (DWORD, "DataSize"), (DWORD, "FirstMBaddress"), (DWORD, "NumMBsInBuffer"), (DWORD, "Width"), (DWORD, "Height"), (DWORD, "Stride"), (DWORD, "ReservedBits"), (PVOID, "pCipherCounter"), ]) DXVA2_DECODEEXECUTE = Struct("DXVA2_DECODEEXECUTE", [ (UINT, "NumCompBuffers"), (Array(DXVA2_DECODEBUFFERDESC, "{self}.NumCompBuffers"), "pCompressedBuffers"), ]) DXVA2_VIDEOSAMPLE = Struct("DXVA2_VIDEOSAMPLE", [ (REFERENCE_TIME, "Start"), (REFERENCE_TIME, "End"), (DXVA2_ExtendedFormat, "SampleFormat"), (DWORD, "SampleFlags"), (ObjPointer(IDirect3DSurface9), "SrcSurface"), (RECT, "SrcRect"), (RECT, "DstRect"), #(Array(DXVA2_AYUVSample8, 16), "Pal"), (DXVA2_Fixed32, "PlanarAlpha"), ]) DXVA2_VIDEOPROCESSBLT = Struct("DXVA2_VIDEOPROCESSBLT", [ (REFERENCE_TIME, "TargetFrame"), (RECT, "TargetRect"), (SIZE, "ConstrictionSize"), (DWORD, "StreamingFlags"), (DXVA2_AYUVSample16, "BackgroundColor"), (DXVA2_ExtendedFormat, "DestFormat"), (DWORD, "DestFlags"), (DXVA2_ProcAmpValues, "ProcAmpValues"), (DXVA2_Fixed32, "Alpha"), (DXVA2_FilterValues, "NoiseFilterLuma"), (DXVA2_FilterValues, "NoiseFilterChroma"), (DXVA2_FilterValues, "DetailFilterLuma"), (DXVA2_FilterValues, "DetailFilterChroma"), (Array(DXVA2_VIDEOSAMPLE, "{self}.NumSrcSurfaces"), "pSrcSurfaces"), (UINT, "NumSrcSurfaces"), ]) DXVA2_EXTENSIONEXECUTE = Opaque('DXVA2_EXTENSIONEXECUTE') DXVA2_DECODEBUFFERINFO = Opaque('DXVA2_DECODEBUFFERINFO') IDirect3DDecodeDevice9 = Interface("IDirect3DDecodeDevice9", IUnknown) IDirect3DDecodeDevice9.methods += [ StdMethod(HRESULT, "DecodeBeginFrame", [(Pointer(DXVA2_PVP_SETKEY), "pPVPSetKey")]), StdMethod(HRESULT, "DecodeEndFrame", [(Pointer(HANDLE), "pHandleComplete")]), StdMethod(HRESULT, "DecodeSetRenderTarget", [(ObjPointer(IDirect3DSurface9), "pRenderTarget")]), StdMethod(HRESULT, "DecodeExecute", [(Pointer(DXVA2_DECODEEXECUTE), "pExecuteParams")]), ] IDirect3DVideoProcessDevice9 = Interface("IDirect3DVideoProcessDevice9", IUnknown) IDirect3DVideoProcessDevice9.methods += [ StdMethod(HRESULT, "VideoProcessBeginFrame", []), StdMethod(HRESULT, "VideoProcessEndFrame", [(Pointer(HANDLE), "pHandleComplete")]), StdMethod(HRESULT, "VideoProcessSetRenderTarget", [(ObjPointer(IDirect3DSurface9), "pRenderTarget")]), StdMethod(HRESULT, "VideoProcessBlt", [(Pointer(DXVA2_VIDEOPROCESSBLT), "pData")]), ] IDirect3DDXVAExtensionDevice9 = Interface("IDirect3DDXVAExtensionDevice9", IUnknown) IDirect3DDXVAExtensionDevice9.methods += [ StdMethod(HRESULT, "ExtensionExecute", [(OpaquePointer(DXVA2_EXTENSIONEXECUTE), "pData")]), ] IDirect3DDxva2Container9 = Interface("IDirect3DDxva2Container9", IUnknown) IDirect3DDxva2Container9.methods += [ StdMethod(HRESULT, "CreateSurface", [(UINT, "Width"), (UINT, "Height"), (UINT, "BackBuffers"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), (DWORD, "Usage"), (DXVA2_SurfaceType, "DxvaType"), Out(Array(ObjPointer(IDirect3DSurface9), "1 + BackBuffers"), "ppSurface"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "VidToSysBlt", [(ObjPointer(IDirect3DSurface9), "pSourceSurface"), (Pointer(RECT), "pSourceRect"), (ObjPointer(IDirect3DSurface9), "pDestSurface"), (Pointer(RECT), "pDestRect")]), StdMethod(HRESULT, "GetDecodeGuidCount", [Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetDecodeGuids", [(UINT, "Count"), Out(Array(GUID, "Count"), "pGuids")], sideeffects=False), StdMethod(HRESULT, "GetDecodeRenderTargetFormatCount", [(REFGUID, "Guid"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetDecodeRenderTargets", [(REFGUID, "Guid"), (UINT, "Count"), Out(Array(D3DFORMAT, "Count"), "pFormats")], sideeffects=False), StdMethod(HRESULT, "GetDecodeCompressedBufferCount", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetDecodeCompressedBuffers", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (UINT, "Count"), Out(OpaquePointer(DXVA2_DECODEBUFFERINFO), "pBufferInfo")], sideeffects=False), StdMethod(HRESULT, "GetDecodeConfigurationCount", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetDecodeConfigurations", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (UINT, "Count"), Out(Array(DXVA2_ConfigPictureDecode, "Count"), "pConfigs")], sideeffects=False), StdMethod(HRESULT, "CreateDecodeDevice", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (Pointer(Const(DXVA2_ConfigPictureDecode)), "pConfig"), (Array(ObjPointer(IDirect3DSurface9), "NumSurfaces"), "ppDecoderRenderTargets"), (UINT, "NumSurfaces"), Out(Pointer(ObjPointer(IDirect3DDecodeDevice9)), "ppDecode")]), StdMethod(HRESULT, "GetVideoProcessorDeviceGuidCount", [(Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorDeviceGuids", [(Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (UINT, "Count"), Out(Pointer(GUID), "pGuids")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorCaps", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), Out(Pointer(DXVA2_VideoProcessorCaps), "pCaps")], sideeffects=False), StdMethod(HRESULT, "GetProcAmpRange", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), (UINT, "ProcAmpCap"), Out(Pointer(DXVA2_ValueRange), "pRange")]), StdMethod(HRESULT, "GetFilterPropertyRange", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), (UINT, "FilterSetting"), Out(Pointer(DXVA2_ValueRange), "pRange")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorRenderTargetCount", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorRenderTargets", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (UINT, "Count"), Out(Array(D3DFORMAT, "Count"), "pFormats")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorSubStreamFormatCount", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetVideoProcessorSubStreamFormats", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), (UINT, "Count"), Out(Array(D3DFORMAT, "Count"), "pFormats")], sideeffects=False), StdMethod(HRESULT, "CreateVideoProcessDevice", [(REFGUID, "Guid"), (Pointer(Const(DXVA2_VideoDesc)), "pVideoDesc"), (D3DFORMAT, "Format"), (UINT, "MaxSubStreams"), Out(Pointer(ObjPointer(IDirect3DVideoProcessDevice9)), "ppVideoProcessDevice")]), StdMethod(HRESULT, "GetExtensionGuidCount", [(DWORD, "Extension"), Out(Pointer(UINT), "pCount")], sideeffects=False), StdMethod(HRESULT, "GetExtensionGuids", [(DWORD, "Extension"), (UINT, "Count"), Out(Array(GUID, "Count"), "pGuids")], sideeffects=False), StdMethod(HRESULT, "GetExtensionCaps", [(REFGUID, "Guid"), (UINT, "arg2"), (OpaquePointer(Void), "arg3"), (UINT, "arg4"), (OpaquePointer(Void), "arg5"), (UINT, "arg6")], sideeffects=False), StdMethod(HRESULT, "CreateExtensionDevice", [(REFGUID, "Guid"), (OpaquePointer(Void), "arg2"), (UINT, "arg3"), Out(Pointer(ObjPointer(IDirect3DDXVAExtensionDevice9)), "ppExtension")]), ] d3d9.addInterfaces([ IDirect3DDxva2Container9, ]) tmpNnpnZF/specs/dcommon.py0000664000175000017500000000267412543167424015120 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * DWRITE_MEASURING_MODE = Enum("DWRITE_MEASURING_MODE", [ "DWRITE_MEASURING_MODE_NATURAL", "DWRITE_MEASURING_MODE_GDI_CLASSIC", "DWRITE_MEASURING_MODE_GDI_NATURAL", ]) tmpNnpnZF/specs/d2dbasetypes.py0000664000175000017500000000425412543167424016051 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from winapi import * D3DCOLORVALUE = Struct("D3DCOLORVALUE", [ (FLOAT, "r"), (FLOAT, "g"), (FLOAT, "b"), (FLOAT, "a"), ]) D2D_POINT_2U = Struct("D2D_POINT_2U", [ (UINT32, "x"), (UINT32, "y"), ]) D2D_POINT_2F = Struct("D2D_POINT_2F", [ (FLOAT, "x"), (FLOAT, "y"), ]) D2D_RECT_F = Struct("D2D_RECT_F", [ (FLOAT, "left"), (FLOAT, "top"), (FLOAT, "right"), (FLOAT, "bottom"), ]) D2D_RECT_U = Struct("D2D_RECT_U", [ (UINT32, "left"), (UINT32, "top"), (UINT32, "right"), (UINT32, "bottom"), ]) D2D_SIZE_F = Struct("D2D_SIZE_F", [ (FLOAT, "width"), (FLOAT, "height"), ]) D2D_SIZE_U = Struct("D2D_SIZE_U", [ (UINT32, "width"), (UINT32, "height"), ]) D2D_COLOR_F = Alias("D2D_COLOR_F", D3DCOLORVALUE) D2D_MATRIX_3X2_F = Struct("D2D_MATRIX_3X2_F", [ (FLOAT, "_11"), (FLOAT, "_12"), (FLOAT, "_21"), (FLOAT, "_22"), (FLOAT, "_31"), (FLOAT, "_32"), ]) tmpNnpnZF/specs/d3d9.py0000664000175000017500000010535312543167424014225 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """d3d9.h""" from winapi import * from d3d9types import * from d3d9caps import * D3DSHADER9 = Blob(Const(DWORD), "_shaderSize(pFunction)") D3DSPD = Flags(DWORD, [ "D3DSPD_IUNKNOWN", ]) D3DADAPTER = FakeEnum(UINT, [ "D3DADAPTER_DEFAULT", ]) D3DENUM = FakeEnum(DWORD, [ "D3DENUM_WHQL_LEVEL", ]) D3DSGR = Flags(DWORD, [ "D3DSGR_NO_CALIBRATION", "D3DSGR_CALIBRATE", ]) D3DCURSOR = Flags(DWORD, [ "D3DCURSOR_IMMEDIATE_UPDATE", ]) D3DPRESENT = Flags(DWORD, [ "D3DPRESENT_DONOTWAIT", "D3DPRESENT_LINEAR_CONTENT", "D3DPRESENT_DONOTFLIP", "D3DPRESENT_FLIPRESTART", "D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR", ]) HRESULT = MAKE_HRESULT(ok = "D3D_OK", errors = [ "D3DERR_WRONGTEXTUREFORMAT", "D3DERR_UNSUPPORTEDCOLOROPERATION", "D3DERR_UNSUPPORTEDCOLORARG", "D3DERR_UNSUPPORTEDALPHAOPERATION", "D3DERR_UNSUPPORTEDALPHAARG", "D3DERR_TOOMANYOPERATIONS", "D3DERR_CONFLICTINGTEXTUREFILTER", "D3DERR_UNSUPPORTEDFACTORVALUE", "D3DERR_CONFLICTINGRENDERSTATE", "D3DERR_UNSUPPORTEDTEXTUREFILTER", "D3DERR_CONFLICTINGTEXTUREPALETTE", "D3DERR_DRIVERINTERNALERROR", "D3DERR_NOTFOUND", "D3DERR_MOREDATA", "D3DERR_DEVICELOST", "D3DERR_DEVICENOTRESET", "D3DERR_NOTAVAILABLE", "D3DERR_OUTOFVIDEOMEMORY", "D3DERR_INVALIDDEVICE", "D3DERR_INVALIDCALL", "D3DERR_DRIVERINVALIDCALL", "D3DERR_WASSTILLDRAWING", "D3DOK_NOAUTOGEN", "D3DERR_DEVICEREMOVED", "S_NOT_RESIDENT", "S_RESIDENT_IN_SHARED_MEMORY", "S_PRESENT_MODE_CHANGED", "S_PRESENT_OCCLUDED", "D3DERR_DEVICEHUNG", ]) IDirect3D9 = Interface("IDirect3D9", IUnknown) IDirect3DDevice9 = Interface("IDirect3DDevice9", IUnknown) IDirect3DStateBlock9 = Interface("IDirect3DStateBlock9", IUnknown) IDirect3DSwapChain9 = Interface("IDirect3DSwapChain9", IUnknown) IDirect3DResource9 = Interface("IDirect3DResource9", IUnknown) IDirect3DVertexDeclaration9 = Interface("IDirect3DVertexDeclaration9", IUnknown) IDirect3DVertexShader9 = Interface("IDirect3DVertexShader9", IUnknown) IDirect3DPixelShader9 = Interface("IDirect3DPixelShader9", IUnknown) IDirect3DBaseTexture9 = Interface("IDirect3DBaseTexture9", IDirect3DResource9) IDirect3DTexture9 = Interface("IDirect3DTexture9", IDirect3DBaseTexture9) IDirect3DVolumeTexture9 = Interface("IDirect3DVolumeTexture9", IDirect3DBaseTexture9) IDirect3DCubeTexture9 = Interface("IDirect3DCubeTexture9", IDirect3DBaseTexture9) IDirect3DVertexBuffer9 = Interface("IDirect3DVertexBuffer9", IDirect3DResource9) IDirect3DIndexBuffer9 = Interface("IDirect3DIndexBuffer9", IDirect3DResource9) IDirect3DSurface9 = Interface("IDirect3DSurface9", IDirect3DResource9) IDirect3DVolume9 = Interface("IDirect3DVolume9", IUnknown) IDirect3DQuery9 = Interface("IDirect3DQuery9", IUnknown) IDirect3D9Ex = Interface("IDirect3D9Ex", IDirect3D9) IDirect3DDevice9Ex = Interface("IDirect3DDevice9Ex", IDirect3DDevice9) IDirect3DSwapChain9Ex = Interface("IDirect3DSwapChain9Ex", IDirect3DSwapChain9) PDIRECT3D9 = ObjPointer(IDirect3D9) PDIRECT3DDEVICE9 = ObjPointer(IDirect3DDevice9) PDIRECT3DSTATEBLOCK9 = ObjPointer(IDirect3DStateBlock9) PDIRECT3DSWAPCHAIN9 = ObjPointer(IDirect3DSwapChain9) PDIRECT3DRESOURCE9 = ObjPointer(IDirect3DResource9) PDIRECT3DVERTEXDECLARATION9 = ObjPointer(IDirect3DVertexDeclaration9) PDIRECT3DVERTEXSHADER9 = ObjPointer(IDirect3DVertexShader9) PDIRECT3DPIXELSHADER9 = ObjPointer(IDirect3DPixelShader9) PDIRECT3DBASETEXTURE9 = ObjPointer(IDirect3DBaseTexture9) PDIRECT3DTEXTURE9 = ObjPointer(IDirect3DTexture9) PDIRECT3DVOLUMETEXTURE9 = ObjPointer(IDirect3DVolumeTexture9) PDIRECT3DCUBETEXTURE9 = ObjPointer(IDirect3DCubeTexture9) PDIRECT3DVERTEXBUFFER9 = ObjPointer(IDirect3DVertexBuffer9) PDIRECT3DINDEXBUFFER9 = ObjPointer(IDirect3DIndexBuffer9) PDIRECT3DSURFACE9 = ObjPointer(IDirect3DSurface9) PDIRECT3DVOLUME9 = ObjPointer(IDirect3DVolume9) PDIRECT3DQUERY9 = ObjPointer(IDirect3DQuery9) PDIRECT3D9EX = ObjPointer(IDirect3D9Ex) PDIRECT3DDEVICE9EX = ObjPointer(IDirect3DDevice9Ex) PDIRECT3DSWAPCHAIN9EX = ObjPointer(IDirect3DSwapChain9Ex) IDirect3D9.methods += [ StdMethod(HRESULT, "RegisterSoftwareDevice", [(OpaquePointer(Void), "pInitializeFunction")], sideeffects=False), StdMethod(UINT, "GetAdapterCount", [], sideeffects=False), StdMethod(HRESULT, "GetAdapterIdentifier", [(D3DADAPTER, "Adapter"), (D3DENUM, "Flags"), Out(Pointer(D3DADAPTER_IDENTIFIER9), "pIdentifier")], sideeffects=False), StdMethod(UINT, "GetAdapterModeCount", [(D3DADAPTER, "Adapter"), (D3DFORMAT, "Format")], sideeffects=False), StdMethod(HRESULT, "EnumAdapterModes", [(D3DADAPTER, "Adapter"), (D3DFORMAT, "Format"), (UINT, "Mode"), Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetAdapterDisplayMode", [(D3DADAPTER, "Adapter"), Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceType", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DevType"), (D3DFORMAT, "AdapterFormat"), (D3DFORMAT, "BackBufferFormat"), (BOOL, "bWindowed")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceFormat", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "AdapterFormat"), (D3DUSAGE, "Usage"), (D3DRESOURCETYPE, "RType"), (D3DFORMAT, "CheckFormat")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceMultiSampleType", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "SurfaceFormat"), (BOOL, "Windowed"), (D3DMULTISAMPLE_TYPE, "MultiSampleType"), Out(Pointer(DWORD), "pQualityLevels")], sideeffects=False), StdMethod(HRESULT, "CheckDepthStencilMatch", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "AdapterFormat"), (D3DFORMAT, "RenderTargetFormat"), (D3DFORMAT, "DepthStencilFormat")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceFormatConversion", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (D3DFORMAT, "SourceFormat"), (D3DFORMAT, "TargetFormat")], sideeffects=False), StdMethod(HRESULT, "GetDeviceCaps", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), Out(Pointer(D3DCAPS9), "pCaps")], sideeffects=False), StdMethod(HMONITOR, "GetAdapterMonitor", [(D3DADAPTER, "Adapter")], sideeffects=False), StdMethod(HRESULT, "CreateDevice", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (HWND, "hFocusWindow"), (D3DCREATE, "BehaviorFlags"), InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(PDIRECT3DDEVICE9), "ppReturnedDeviceInterface")]), ] IDirect3DDevice9.methods += [ StdMethod(HRESULT, "TestCooperativeLevel", []), StdMethod(UINT, "GetAvailableTextureMem", [], sideeffects=False), StdMethod(HRESULT, "EvictManagedResources", []), StdMethod(HRESULT, "GetDirect3D", [Out(Pointer(PDIRECT3D9), "ppD3D9")]), StdMethod(HRESULT, "GetDeviceCaps", [Out(Pointer(D3DCAPS9), "pCaps")], sideeffects=False), StdMethod(HRESULT, "GetDisplayMode", [(UINT, "iSwapChain"), Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetCreationParameters", [Out(Pointer(D3DDEVICE_CREATION_PARAMETERS), "pParameters")], sideeffects=False), StdMethod(HRESULT, "SetCursorProperties", [(UINT, "XHotSpot"), (UINT, "YHotSpot"), (PDIRECT3DSURFACE9, "pCursorBitmap")]), StdMethod(Void, "SetCursorPosition", [(Int, "X"), (Int, "Y"), (D3DCURSOR, "Flags")]), StdMethod(BOOL, "ShowCursor", [(BOOL, "bShow")]), StdMethod(HRESULT, "CreateAdditionalSwapChain", [InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(PDIRECT3DSWAPCHAIN9), "pSwapChain")]), StdMethod(HRESULT, "GetSwapChain", [(UINT, "iSwapChain"), Out(Pointer(PDIRECT3DSWAPCHAIN9), "pSwapChain")]), StdMethod(UINT, "GetNumberOfSwapChains", [], sideeffects=False), StdMethod(HRESULT, "Reset", [InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters")]), StdMethod(HRESULT, "Present", [(ConstPointer(RECT), "pSourceRect"), (ConstPointer(RECT), "pDestRect"), (HWND, "hDestWindowOverride"), (ConstPointer(RGNDATA), "pDirtyRegion")]), StdMethod(HRESULT, "GetBackBuffer", [(UINT, "iSwapChain"), (UINT, "iBackBuffer"), (D3DBACKBUFFER_TYPE, "Type"), Out(Pointer(PDIRECT3DSURFACE9), "ppBackBuffer")]), StdMethod(HRESULT, "GetRasterStatus", [(UINT, "iSwapChain"), Out(Pointer(D3DRASTER_STATUS), "pRasterStatus")], sideeffects=False), StdMethod(HRESULT, "SetDialogBoxMode", [(BOOL, "bEnableDialogs")]), StdMethod(Void, "SetGammaRamp", [(UINT, "iSwapChain"), (D3DSGR, "Flags"), (ConstPointer(D3DGAMMARAMP), "pRamp")]), StdMethod(Void, "GetGammaRamp", [(UINT, "iSwapChain"), Out(Pointer(D3DGAMMARAMP), "pRamp")], sideeffects=False), StdMethod(HRESULT, "CreateTexture", [(UINT, "Width"), (UINT, "Height"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DTEXTURE9), "ppTexture"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateVolumeTexture", [(UINT, "Width"), (UINT, "Height"), (UINT, "Depth"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DVOLUMETEXTURE9), "ppVolumeTexture"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateCubeTexture", [(UINT, "EdgeLength"), (UINT, "Levels"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DCUBETEXTURE9), "ppCubeTexture"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateVertexBuffer", [(UINT, "Length"), (D3DUSAGE, "Usage"), (D3DFVF, "FVF"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DVERTEXBUFFER9), "ppVertexBuffer"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateIndexBuffer", [(UINT, "Length"), (D3DUSAGE, "Usage"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DINDEXBUFFER9), "ppIndexBuffer"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateRenderTarget", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), (DWORD, "MultisampleQuality"), (BOOL, "Lockable"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "CreateDepthStencilSurface", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), (DWORD, "MultisampleQuality"), (BOOL, "Discard"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "UpdateSurface", [(PDIRECT3DSURFACE9, "pSourceSurface"), (ConstPointer(RECT), "pSourceRect"), (PDIRECT3DSURFACE9, "pDestinationSurface"), (ConstPointer(POINT), "pDestPoint")]), StdMethod(HRESULT, "UpdateTexture", [(PDIRECT3DBASETEXTURE9, "pSourceTexture"), (PDIRECT3DBASETEXTURE9, "pDestinationTexture")]), StdMethod(HRESULT, "GetRenderTargetData", [(PDIRECT3DSURFACE9, "pRenderTarget"), (PDIRECT3DSURFACE9, "pDestSurface")]), StdMethod(HRESULT, "GetFrontBufferData", [(UINT, "iSwapChain"), (PDIRECT3DSURFACE9, "pDestSurface")]), StdMethod(HRESULT, "StretchRect", [(PDIRECT3DSURFACE9, "pSourceSurface"), (ConstPointer(RECT), "pSourceRect"), (PDIRECT3DSURFACE9, "pDestSurface"), (ConstPointer(RECT), "pDestRect"), (D3DTEXTUREFILTERTYPE, "Filter")]), StdMethod(HRESULT, "ColorFill", [(PDIRECT3DSURFACE9, "pSurface"), (ConstPointer(RECT), "pRect"), (D3DCOLOR, "color")]), StdMethod(HRESULT, "CreateOffscreenPlainSurface", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), (Pointer(HANDLE), "pSharedHandle")]), StdMethod(HRESULT, "SetRenderTarget", [(DWORD, "RenderTargetIndex"), (PDIRECT3DSURFACE9, "pRenderTarget")]), StdMethod(HRESULT, "GetRenderTarget", [(DWORD, "RenderTargetIndex"), Out(Pointer(PDIRECT3DSURFACE9), "ppRenderTarget")]), StdMethod(HRESULT, "SetDepthStencilSurface", [(PDIRECT3DSURFACE9, "pNewZStencil")]), StdMethod(HRESULT, "GetDepthStencilSurface", [Out(Pointer(PDIRECT3DSURFACE9), "ppZStencilSurface")]), StdMethod(HRESULT, "BeginScene", []), StdMethod(HRESULT, "EndScene", []), StdMethod(HRESULT, "Clear", [(DWORD, "Count"), (Array(Const(D3DRECT), "Count"), "pRects"), (D3DCLEAR, "Flags"), (D3DCOLOR, "Color"), (Float, "Z"), (DWORD, "Stencil")]), StdMethod(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "State"), (ConstPointer(D3DMATRIX), "pMatrix")]), StdMethod(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "State"), Out(Pointer(D3DMATRIX), "pMatrix")], sideeffects=False), StdMethod(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "State"), (ConstPointer(D3DMATRIX), "pMatrix")]), StdMethod(HRESULT, "SetViewport", [(ConstPointer(D3DVIEWPORT9), "pViewport")]), StdMethod(HRESULT, "GetViewport", [Out(Pointer(D3DVIEWPORT9), "pViewport")], sideeffects=False), StdMethod(HRESULT, "SetMaterial", [(ConstPointer(D3DMATERIAL9), "pMaterial")]), StdMethod(HRESULT, "GetMaterial", [Out(Pointer(D3DMATERIAL9), "pMaterial")], sideeffects=False), StdMethod(HRESULT, "SetLight", [(DWORD, "Index"), (ConstPointer(D3DLIGHT9), "pLight")]), StdMethod(HRESULT, "GetLight", [(DWORD, "Index"), Out(Pointer(D3DLIGHT9), "pLight")], sideeffects=False), StdMethod(HRESULT, "LightEnable", [(DWORD, "Index"), (BOOL, "Enable")]), StdMethod(HRESULT, "GetLightEnable", [(DWORD, "Index"), Out(Pointer(BOOL), "pEnable")], sideeffects=False), StdMethod(HRESULT, "SetClipPlane", [(DWORD, "Index"), (Array(Const(Float), 4), "pPlane")]), StdMethod(HRESULT, "GetClipPlane", [(DWORD, "Index"), Out(Array(Float, 4), "pPlane")], sideeffects=False), StdMethod(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "State"), (D3DRENDERSTATEVALUE, "Value")]), StdMethod(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "State"), Out(Pointer(D3DRENDERSTATEVALUE), "pValue")], sideeffects=False), StdMethod(HRESULT, "CreateStateBlock", [(D3DSTATEBLOCKTYPE, "Type"), Out(Pointer(PDIRECT3DSTATEBLOCK9), "ppSB")]), StdMethod(HRESULT, "BeginStateBlock", []), StdMethod(HRESULT, "EndStateBlock", [Out(Pointer(PDIRECT3DSTATEBLOCK9), "ppSB")]), StdMethod(HRESULT, "SetClipStatus", [(ConstPointer(D3DCLIPSTATUS9), "pClipStatus")]), StdMethod(HRESULT, "GetClipStatus", [Out(Pointer(D3DCLIPSTATUS9), "pClipStatus")], sideeffects=False), StdMethod(HRESULT, "GetTexture", [(DWORD, "Stage"), Out(Pointer(PDIRECT3DBASETEXTURE9), "ppTexture")]), StdMethod(HRESULT, "SetTexture", [(DWORD, "Stage"), (PDIRECT3DBASETEXTURE9, "pTexture")]), StdMethod(HRESULT, "GetTextureStageState", [(DWORD, "Stage"), (D3DTEXTURESTAGESTATETYPE, "Type"), Out(Pointer(D3DTEXTURESTAGESTATEVALUE), "pValue")], sideeffects=False), StdMethod(HRESULT, "SetTextureStageState", [(DWORD, "Stage"), (D3DTEXTURESTAGESTATETYPE, "Type"), (D3DTEXTURESTAGESTATEVALUE, "Value")]), StdMethod(HRESULT, "GetSamplerState", [(DWORD, "Sampler"), (D3DSAMPLERSTATETYPE, "Type"), Out(Pointer(D3DSAMPLERSTATEVALUE), "pValue")], sideeffects=False), StdMethod(HRESULT, "SetSamplerState", [(DWORD, "Sampler"), (D3DSAMPLERSTATETYPE, "Type"), (D3DSAMPLERSTATEVALUE, "Value")]), StdMethod(HRESULT, "ValidateDevice", [Out(Pointer(DWORD), "pNumPasses")]), StdMethod(HRESULT, "SetPaletteEntries", [(UINT, "PaletteNumber"), (Array(Const(PALETTEENTRY), 256), "pEntries")]), StdMethod(HRESULT, "GetPaletteEntries", [(UINT, "PaletteNumber"), Out(Array(PALETTEENTRY, 256), "pEntries")], sideeffects=False), StdMethod(HRESULT, "SetCurrentTexturePalette", [(UINT, "PaletteNumber")]), StdMethod(HRESULT, "GetCurrentTexturePalette", [Out(Pointer(UINT), "PaletteNumber")], sideeffects=False), StdMethod(HRESULT, "SetScissorRect", [(ConstPointer(RECT), "pRect")]), StdMethod(HRESULT, "GetScissorRect", [Out(Pointer(RECT), "pRect")]), StdMethod(HRESULT, "SetSoftwareVertexProcessing", [(BOOL, "bSoftware")]), StdMethod(BOOL, "GetSoftwareVertexProcessing", [], sideeffects=False), StdMethod(HRESULT, "SetNPatchMode", [(Float, "nSegments")]), StdMethod(Float, "GetNPatchMode", [], sideeffects=False), StdMethod(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "StartVertex"), (UINT, "PrimitiveCount")]), StdMethod(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "PrimitiveType"), (INT, "BaseVertexIndex"), (UINT, "MinVertexIndex"), (UINT, "NumVertices"), (UINT, "startIndex"), (UINT, "primCount")]), StdMethod(HRESULT, "DrawPrimitiveUP", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "PrimitiveCount"), (Blob(Const(Void), "_vertexDataSize(PrimitiveType, PrimitiveCount, VertexStreamZeroStride)"), "pVertexStreamZeroData"), (UINT, "VertexStreamZeroStride")]), StdMethod(HRESULT, "DrawIndexedPrimitiveUP", [(D3DPRIMITIVETYPE, "PrimitiveType"), (UINT, "MinVertexIndex"), (UINT, "NumVertices"), (UINT, "PrimitiveCount"), (Blob(Const(Void), "_indexDataSize(PrimitiveType, PrimitiveCount, IndexDataFormat)"), "pIndexData"), (D3DFORMAT, "IndexDataFormat"), (Blob(Const(Void), "NumVertices*VertexStreamZeroStride"), "pVertexStreamZeroData"), (UINT, "VertexStreamZeroStride")]), StdMethod(HRESULT, "ProcessVertices", [(UINT, "SrcStartIndex"), (UINT, "DestIndex"), (UINT, "VertexCount"), (PDIRECT3DVERTEXBUFFER9, "pDestBuffer"), (PDIRECT3DVERTEXDECLARATION9, "pVertexDecl"), (D3DPV, "Flags")]), StdMethod(HRESULT, "CreateVertexDeclaration", [(Array(Const(D3DVERTEXELEMENT9), "_declCount(pVertexElements)"), "pVertexElements"), Out(Pointer(PDIRECT3DVERTEXDECLARATION9), "ppDecl")]), StdMethod(HRESULT, "SetVertexDeclaration", [(PDIRECT3DVERTEXDECLARATION9, "pDecl")]), StdMethod(HRESULT, "GetVertexDeclaration", [Out(Pointer(PDIRECT3DVERTEXDECLARATION9), "ppDecl")]), StdMethod(HRESULT, "SetFVF", [(D3DFVF, "FVF")]), StdMethod(HRESULT, "GetFVF", [Out(Pointer(D3DFVF), "pFVF")], sideeffects=False), StdMethod(HRESULT, "CreateVertexShader", [(D3DSHADER9, "pFunction"), Out(Pointer(PDIRECT3DVERTEXSHADER9), "ppShader")]), StdMethod(HRESULT, "SetVertexShader", [(PDIRECT3DVERTEXSHADER9, "pShader")]), StdMethod(HRESULT, "GetVertexShader", [Out(Pointer(PDIRECT3DVERTEXSHADER9), "ppShader")]), StdMethod(HRESULT, "SetVertexShaderConstantF", [(UINT, "StartRegister"), (Array(Const(Float), "4*Vector4fCount"), "pConstantData"), (UINT, "Vector4fCount")]), StdMethod(HRESULT, "GetVertexShaderConstantF", [(UINT, "StartRegister"), Out(Array(Float, "4*Vector4fCount"), "pConstantData"), (UINT, "Vector4fCount")], sideeffects=False), StdMethod(HRESULT, "SetVertexShaderConstantI", [(UINT, "StartRegister"), (Array(Const(Int), "4*Vector4iCount"), "pConstantData"), (UINT, "Vector4iCount")]), StdMethod(HRESULT, "GetVertexShaderConstantI", [(UINT, "StartRegister"), Out(Array(Int, "4*Vector4iCount"), "pConstantData"), (UINT, "Vector4iCount")], sideeffects=False), StdMethod(HRESULT, "SetVertexShaderConstantB", [(UINT, "StartRegister"), (Array(Const(BOOL), "BoolCount"), "pConstantData"), (UINT, "BoolCount")]), StdMethod(HRESULT, "GetVertexShaderConstantB", [(UINT, "StartRegister"), Out(Array(BOOL, "BoolCount"), "pConstantData"), (UINT, "BoolCount")], sideeffects=False), StdMethod(HRESULT, "SetStreamSource", [(UINT, "StreamNumber"), (PDIRECT3DVERTEXBUFFER9, "pStreamData"), (UINT, "OffsetInBytes"), (UINT, "Stride")]), StdMethod(HRESULT, "GetStreamSource", [(UINT, "StreamNumber"), Out(Pointer(PDIRECT3DVERTEXBUFFER9), "ppStreamData"), Out(Pointer(UINT), "pOffsetInBytes"), Out(Pointer(UINT), "pStride")]), StdMethod(HRESULT, "SetStreamSourceFreq", [(UINT, "StreamNumber"), (UINT, "Setting")]), StdMethod(HRESULT, "GetStreamSourceFreq", [(UINT, "StreamNumber"), Out(Pointer(UINT), "pSetting")], sideeffects=False), StdMethod(HRESULT, "SetIndices", [(PDIRECT3DINDEXBUFFER9, "pIndexData")]), StdMethod(HRESULT, "GetIndices", [Out(Pointer(PDIRECT3DINDEXBUFFER9), "ppIndexData")]), StdMethod(HRESULT, "CreatePixelShader", [(D3DSHADER9, "pFunction"), Out(Pointer(PDIRECT3DPIXELSHADER9), "ppShader")]), StdMethod(HRESULT, "SetPixelShader", [(PDIRECT3DPIXELSHADER9, "pShader")]), StdMethod(HRESULT, "GetPixelShader", [Out(Pointer(PDIRECT3DPIXELSHADER9), "ppShader")]), StdMethod(HRESULT, "SetPixelShaderConstantF", [(UINT, "StartRegister"), (Array(Const(Float), "4*Vector4fCount"), "pConstantData"), (UINT, "Vector4fCount")]), StdMethod(HRESULT, "GetPixelShaderConstantF", [(UINT, "StartRegister"), Out(Array(Float, "4*Vector4fCount"), "pConstantData"), (UINT, "Vector4fCount")], sideeffects=False), StdMethod(HRESULT, "SetPixelShaderConstantI", [(UINT, "StartRegister"), (Array(Const(Int), "4*Vector4iCount"), "pConstantData"), (UINT, "Vector4iCount")]), StdMethod(HRESULT, "GetPixelShaderConstantI", [(UINT, "StartRegister"), Out(Array(Int, "4*Vector4iCount"), "pConstantData"), (UINT, "Vector4iCount")], sideeffects=False), StdMethod(HRESULT, "SetPixelShaderConstantB", [(UINT, "StartRegister"), (Array(Const(BOOL), "BoolCount"), "pConstantData"), (UINT, "BoolCount")]), StdMethod(HRESULT, "GetPixelShaderConstantB", [(UINT, "StartRegister"), Out(Array(BOOL, "BoolCount"), "pConstantData"), (UINT, "BoolCount")], sideeffects=False), StdMethod(HRESULT, "DrawRectPatch", [(UINT, "Handle"), (ConstPointer(Float), "pNumSegs"), (ConstPointer(D3DRECTPATCH_INFO), "pRectPatchInfo")]), StdMethod(HRESULT, "DrawTriPatch", [(UINT, "Handle"), (ConstPointer(Float), "pNumSegs"), (ConstPointer(D3DTRIPATCH_INFO), "pTriPatchInfo")]), StdMethod(HRESULT, "DeletePatch", [(UINT, "Handle")]), StdMethod(HRESULT, "CreateQuery", [(D3DQUERYTYPE, "Type"), Out(Pointer(PDIRECT3DQUERY9), "ppQuery")]), ] IDirect3DStateBlock9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "Capture", []), StdMethod(HRESULT, "Apply", []), ] IDirect3DSwapChain9.methods += [ StdMethod(HRESULT, "Present", [(ConstPointer(RECT), "pSourceRect"), (ConstPointer(RECT), "pDestRect"), (HWND, "hDestWindowOverride"), (ConstPointer(RGNDATA), "pDirtyRegion"), (D3DPRESENT, "dwFlags")]), StdMethod(HRESULT, "GetFrontBufferData", [(PDIRECT3DSURFACE9, "pDestSurface")]), StdMethod(HRESULT, "GetBackBuffer", [(UINT, "iBackBuffer"), (D3DBACKBUFFER_TYPE, "Type"), Out(Pointer(PDIRECT3DSURFACE9), "ppBackBuffer")]), StdMethod(HRESULT, "GetRasterStatus", [Out(Pointer(D3DRASTER_STATUS), "pRasterStatus")], sideeffects=False), StdMethod(HRESULT, "GetDisplayMode", [Out(Pointer(D3DDISPLAYMODE), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "GetPresentParameters", [Out(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters")], sideeffects=False), ] IDirect3DResource9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "refguid"), (OpaqueBlob(Const(Void), "SizeOfData"), "pData"), (DWORD, "SizeOfData"), (D3DSPD, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "refguid"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), InOut(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "FreePrivateData", [(REFGUID, "refguid")], sideeffects=False), StdMethod(D3D9_RESOURCE_PRIORITY, "SetPriority", [(D3D9_RESOURCE_PRIORITY, "PriorityNew")]), StdMethod(D3D9_RESOURCE_PRIORITY, "GetPriority", [], sideeffects=False), StdMethod(Void, "PreLoad", []), StdMethod(D3DRESOURCETYPE, "GetType", [], sideeffects=False), ] IDirect3DVertexDeclaration9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "GetDeclaration", [Out(Array(D3DVERTEXELEMENT9, "*pNumElements"), "pElement"), InOut(Pointer(UINT), "pNumElements")], sideeffects=False), ] IDirect3DVertexShader9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "GetFunction", [Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), Out(Pointer(UINT), "pSizeOfData")], sideeffects=False), ] IDirect3DPixelShader9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "GetFunction", [Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), Out(Pointer(UINT), "pSizeOfData")], sideeffects=False), ] IDirect3DBaseTexture9.methods += [ StdMethod(DWORD, "SetLOD", [(DWORD, "LODNew")]), StdMethod(DWORD, "GetLOD", [], sideeffects=False), StdMethod(DWORD, "GetLevelCount", [], sideeffects=False), StdMethod(HRESULT, "SetAutoGenFilterType", [(D3DTEXTUREFILTERTYPE, "FilterType")]), StdMethod(D3DTEXTUREFILTERTYPE, "GetAutoGenFilterType", [], sideeffects=False), StdMethod(Void, "GenerateMipSubLevels", []), ] IDirect3DTexture9.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetSurfaceLevel", [(UINT, "Level"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurfaceLevel")]), StdMethod(HRESULT, "LockRect", [(UINT, "Level"), Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", [(UINT, "Level")]), StdMethod(HRESULT, "AddDirtyRect", [(ConstPointer(RECT), "pDirtyRect")]), ] IDirect3DVolumeTexture9.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DVOLUME_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetVolumeLevel", [(UINT, "Level"), Out(Pointer(PDIRECT3DVOLUME9), "ppVolumeLevel")]), StdMethod(HRESULT, "LockBox", [(UINT, "Level"), Out(Pointer(D3DLOCKED_BOX), "pLockedVolume"), (ConstPointer(D3DBOX), "pBox"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockBox", [(UINT, "Level")]), StdMethod(HRESULT, "AddDirtyBox", [(ConstPointer(D3DBOX), "pDirtyBox")]), ] IDirect3DCubeTexture9.methods += [ StdMethod(HRESULT, "GetLevelDesc", [(UINT, "Level"), Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "GetCubeMapSurface", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level"), Out(Pointer(PDIRECT3DSURFACE9), "ppCubeMapSurface")]), StdMethod(HRESULT, "LockRect", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level"), Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", [(D3DCUBEMAP_FACES, "FaceType"), (UINT, "Level")]), StdMethod(HRESULT, "AddDirtyRect", [(D3DCUBEMAP_FACES, "FaceType"), (ConstPointer(RECT), "pDirtyRect")]), ] IDirect3DVertexBuffer9.methods += [ StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DVERTEXBUFFER_DESC), "pDesc")], sideeffects=False), ] IDirect3DIndexBuffer9.methods += [ StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "Unlock", []), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DINDEXBUFFER_DESC), "pDesc")], sideeffects=False), ] IDirect3DSurface9.methods += [ StdMethod(HRESULT, "GetContainer", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppContainer")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DSURFACE_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "LockRect", [Out(Pointer(D3DLOCKED_RECT), "pLockedRect"), (ConstPointer(RECT), "pRect"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockRect", []), StdMethod(HRESULT, "GetDC", [Out(Pointer(HDC), "phdc")], sideeffects=False), StdMethod(HRESULT, "ReleaseDC", [(HDC, "hdc")], sideeffects=False), ] IDirect3DVolume9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "refguid"), (OpaqueBlob(Const(Void), "SizeOfData"), "pData"), (DWORD, "SizeOfData"), (D3DSPD, "Flags")], sideeffects=False), StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "refguid"), Out(OpaqueBlob(Void, "*pSizeOfData"), "pData"), InOut(Pointer(DWORD), "pSizeOfData")], sideeffects=False), StdMethod(HRESULT, "FreePrivateData", [(REFGUID, "refguid")], sideeffects=False), StdMethod(HRESULT, "GetContainer", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppContainer")]), StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DVOLUME_DESC), "pDesc")], sideeffects=False), StdMethod(HRESULT, "LockBox", [Out(Pointer(D3DLOCKED_BOX), "pLockedVolume"), (ConstPointer(D3DBOX), "pBox"), (D3DLOCK, "Flags")]), StdMethod(HRESULT, "UnlockBox", []), ] IDirect3DQuery9.methods += [ StdMethod(HRESULT, "GetDevice", [Out(Pointer(PDIRECT3DDEVICE9), "ppDevice")]), StdMethod(D3DQUERYTYPE, "GetType", [], sideeffects=False), StdMethod(DWORD, "GetDataSize", [], sideeffects=False), StdMethod(HRESULT, "Issue", [(D3DISSUE, "dwIssueFlags")]), StdMethod(HRESULT, "GetData", [Out(D3DQUERYDATA, "pData"), (DWORD, "dwSize"), (D3DGETDATA, "dwGetDataFlags")], sideeffects=False), ] IDirect3D9Ex.methods += [ StdMethod(UINT, "GetAdapterModeCountEx", [(D3DADAPTER, "Adapter"), (ConstPointer(D3DDISPLAYMODEFILTER), "pFilter") ], sideeffects=False), StdMethod(HRESULT, "EnumAdapterModesEx", [(D3DADAPTER, "Adapter"), (ConstPointer(D3DDISPLAYMODEFILTER), "pFilter"), (UINT, "Mode"), Out(Pointer(D3DDISPLAYMODEEX), "pMode")], sideeffects=False), StdMethod(HRESULT, "GetAdapterDisplayModeEx", [(D3DADAPTER, "Adapter"), Out(Pointer(D3DDISPLAYMODEEX), "pMode"), Out(Pointer(D3DDISPLAYROTATION), "pRotation")], sideeffects=False), StdMethod(HRESULT, "CreateDeviceEx", [(D3DADAPTER, "Adapter"), (D3DDEVTYPE, "DeviceType"), (HWND, "hFocusWindow"), (D3DCREATE, "BehaviorFlags"), InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(D3DDISPLAYMODEEX), "pFullscreenDisplayMode"), Out(Pointer(PDIRECT3DDEVICE9EX), "ppReturnedDeviceInterface")]), StdMethod(HRESULT, "GetAdapterLUID", [(D3DADAPTER, "Adapter"), Out(Pointer(LUID), "pLUID")], sideeffects=False), ] IDirect3DDevice9Ex.methods += [ StdMethod(HRESULT, "SetConvolutionMonoKernel", [(UINT, "width"), (UINT, "height"), (Array(Float, "width"), "rows"), (Array(Float, "height"), "columns")]), StdMethod(HRESULT, "ComposeRects", [(PDIRECT3DSURFACE9, "pSrc"), (PDIRECT3DSURFACE9, "pDst"), (PDIRECT3DVERTEXBUFFER9, "pSrcRectDescs"), (UINT, "NumRects"), (PDIRECT3DVERTEXBUFFER9, "pDstRectDescs"), (D3DCOMPOSERECTSOP, "Operation"), (Int, "Xoffset"), (Int, "Yoffset")]), StdMethod(HRESULT, "PresentEx", [(ConstPointer(RECT), "pSourceRect"), (ConstPointer(RECT), "pDestRect"), (HWND, "hDestWindowOverride"), (ConstPointer(RGNDATA), "pDirtyRegion"), (D3DPRESENT, "dwFlags")]), StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False), StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]), StdMethod(HRESULT, "WaitForVBlank", [(UINT, "iSwapChain")]), StdMethod(HRESULT, "CheckResourceResidency", [(Array(PDIRECT3DRESOURCE9, "NumResources"), "pResourceArray"), (UINT32, "NumResources")]), StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]), StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False), StdMethod(HRESULT, "CheckDeviceState", [(HWND, "hDestinationWindow")], sideeffects=False), StdMethod(HRESULT, "CreateRenderTargetEx", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), (DWORD, "MultisampleQuality"), (BOOL, "Lockable"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), (Pointer(HANDLE), "pSharedHandle"), (D3DUSAGE, "Usage")]), StdMethod(HRESULT, "CreateOffscreenPlainSurfaceEx", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DPOOL, "Pool"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), Out(Pointer(HANDLE), "pSharedHandle"), (D3DUSAGE, "Usage")]), StdMethod(HRESULT, "CreateDepthStencilSurfaceEx", [(UINT, "Width"), (UINT, "Height"), (D3DFORMAT, "Format"), (D3DMULTISAMPLE_TYPE, "MultiSample"), (DWORD, "MultisampleQuality"), (BOOL, "Discard"), Out(Pointer(PDIRECT3DSURFACE9), "ppSurface"), (Pointer(HANDLE), "pSharedHandle"), (D3DUSAGE, "Usage")]), StdMethod(HRESULT, "ResetEx", [InOut(Pointer(D3DPRESENT_PARAMETERS), "pPresentationParameters"), Out(Pointer(D3DDISPLAYMODEEX), "pFullscreenDisplayMode")]), StdMethod(HRESULT, "GetDisplayModeEx", [(UINT, "iSwapChain"), Out(Pointer(D3DDISPLAYMODEEX), "pMode"), Out(Pointer(D3DDISPLAYROTATION), "pRotation")], sideeffects=False), ] IDirect3DSwapChain9Ex.methods += [ StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False), StdMethod(HRESULT, "GetPresentStats", [Out(Pointer(D3DPRESENTSTATS), "pPresentationStatistics")], sideeffects=False), StdMethod(HRESULT, "GetDisplayModeEx", [Out(Pointer(D3DDISPLAYMODEEX), "pMode"), Out(Pointer(D3DDISPLAYROTATION), "pRotation")], sideeffects=False), ] d3d9 = Module("d3d9") d3d9.addFunctions([ StdFunction(PDIRECT3D9, "Direct3DCreate9", [(UINT, "SDKVersion")], fail='NULL'), StdFunction(HRESULT, "Direct3DCreate9Ex", [(UINT, "SDKVersion"), Out(Pointer(PDIRECT3D9EX), "ppD3D")], fail='D3DERR_NOTAVAILABLE'), ]) d3d9.addInterfaces([ IDirect3DSwapChain9Ex, ]) # D3DPERF_* functions can also be used by D3D10 applications, so keep them in a # separate module to be merged as necessary # See http://web.archive.org/web/20110510070258/http://msdn.microsoft.com/en-us/library/ee417071%28v=VS.85%29.aspx d3dperf = Module("d3d9") d3dperf.addFunctions([ StdFunction(Int, "D3DPERF_BeginEvent", [(D3DCOLOR, "col"), (LPCWSTR, "wszName")], fail='-1', sideeffects=False), StdFunction(Int, "D3DPERF_EndEvent", [], fail='-1', sideeffects=False), StdFunction(Void, "D3DPERF_SetMarker", [(D3DCOLOR, "col"), (LPCWSTR, "wszName")], sideeffects=False), StdFunction(Void, "D3DPERF_SetRegion", [(D3DCOLOR, "col"), (LPCWSTR, "wszName")], sideeffects=False), StdFunction(BOOL, "D3DPERF_QueryRepeatFrame", [], fail='FALSE', sideeffects=False), StdFunction(Void, "D3DPERF_SetOptions", [(DWORD, "dwOptions")], sideeffects=False), StdFunction(DWORD, "D3DPERF_GetStatus", [], fail='0', sideeffects=False), ]) tmpNnpnZF/.dir-locals.el0000664000175000017500000000031412543167424014413 0ustar chrischris((nil (indent-tabs-mode . nil) (tab-width . 8) (c-basic-offset . 4) (c-file-style . "stroustrup") (eval . (progn (c-set-offset 'innamespace '0) (c-set-offset 'inline-open '0))) ) ) tmpNnpnZF/wrappers/0000775000175000017500000000000012543167424013627 5ustar chrischristmpNnpnZF/wrappers/d3d9shader.cpp0000664000175000017500000000366712543167424016301 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "os.hpp" #include "d3dshader.hpp" #include "d3d9shader.hpp" #include "d3d9imports.hpp" #include "d3d9size.hpp" void DumpShader(trace::Writer &writer, const DWORD *tokens) { IDisassemblyBuffer *pDisassembly = NULL; HRESULT hr = DisassembleShader(tokens, &pDisassembly); if (SUCCEEDED(hr)) { writer.beginRepr(); writer.writeString((const char *)pDisassembly->GetBufferPointer(), pDisassembly->GetBufferSize()); pDisassembly->Release(); } writer.writeBlob(tokens, _shaderSize(tokens)); if (SUCCEEDED(hr)) { writer.endRepr(); } } tmpNnpnZF/wrappers/assert.cpp0000664000175000017500000000405412543167424015637 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * It's convenient to just use the standard assert() macro, but on Windows we * want to ensure the messages go to somewhere we can actually see. */ #if defined(_WIN32) && !defined(NDEBUG) #include #include "os.hpp" extern "C" void _assert(const char *_Message, const char *_File, unsigned _Line) { os::log("XAssertion failed: %s, file %s, line %u\n", _Message, _File, _Line); os::abort(); } extern "C" void _wassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Line) { os::log("XAssertion failed: %S, file %S, line %u\n", _Message, _File, _Line); os::abort(); } // Hack to force this module to be linked on MinGW #ifdef __GNUC__ __attribute__ ((constructor)) static void force_link(void) {} #endif /* __GNUC__ */ #endif /* _WIN32 && !NDEBUG */ tmpNnpnZF/wrappers/dxgitrace.def0000664000175000017500000000060512543167424016262 0ustar chrischrisEXPORTS CreateDXGIFactory CreateDXGIFactory1 D3D10CreateDevice D3D10CreateDeviceAndSwapChain D3D10CreateDevice1 D3D10CreateDeviceAndSwapChain1 D3D11CreateDevice D3D11CreateDeviceAndSwapChain D3DPERF_BeginEvent D3DPERF_EndEvent D3DPERF_SetMarker D3DPERF_SetRegion D3DPERF_QueryRepeatFrame D3DPERF_SetOptions D3DPERF_GetStatus tmpNnpnZF/wrappers/d2d1trace.py0000664000175000017500000000334212543167424015754 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dlltrace import DllTracer from specs.stdapi import API from specs.dwrite import dwrite from specs.d2d1 import d2d1 if __name__ == '__main__': print '#define INITGUID' print print '#include "trace_writer_local.hpp"' print '#include "os.hpp"' print print '#define DWRITE_EXPORT WINAPI' print print '#include "d2dimports.hpp"' print api = API() api.addModule(d2d1) api.addModule(dwrite) tracer = DllTracer() tracer.traceApi(api) tmpNnpnZF/wrappers/dlsym.cpp0000664000175000017500000000534612543167424015473 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "os.hpp" #ifdef __GLIBC__ #include extern "C" void * __libc_dlopen_mode(const char * filename, int flag); extern "C" void * __libc_dlsym(void * handle, const char * symbol); /* * Protect against dlsym interception. * * We implement the whole API, so we don't need to intercept dlsym -- dlopen is * enough. However we need to protect against other dynamic libraries * intercepting dlsym, to prevent infinite recursion, * * In particular the Steam Community Overlay exports dlsym. See also * http://lists.freedesktop.org/archives/apitrace/2013-March/000573.html */ PRIVATE void * dlsym(void * handle, const char * symbol) { /* * We rely on glibc's internal __libc_dlsym. See also * http://www.linuxforu.com/2011/08/lets-hook-a-library-function/ * * Use use it to obtain the true dlsym. We don't use __libc_dlsym directly * because it does not support things such as RTLD_NEXT. */ typedef void * (*PFN_DLSYM)(void *, const char *); static PFN_DLSYM dlsym_ptr = NULL; if (!dlsym_ptr) { void *libdl_handle = __libc_dlopen_mode("libdl.so.2", RTLD_LOCAL | RTLD_NOW); if (libdl_handle) { dlsym_ptr = (PFN_DLSYM)__libc_dlsym(libdl_handle, "dlsym"); } if (!dlsym_ptr) { os::log("apitrace: error: failed to look up real dlsym\n"); return NULL; } } return dlsym_ptr(handle, symbol); } #endif /* __GLIBC__ */ tmpNnpnZF/wrappers/wgltrace.py0000664000175000017500000001137512543167424016020 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """WGL tracing code generator.""" from gltrace import GlTracer from specs.stdapi import Module, API, Void from specs.glapi import glapi from specs.wglapi import wglapi class WglTracer(GlTracer): getProcAddressFunctionNames = [ "wglGetProcAddress", ] createContextFunctionNames = [ 'wglCreateContext', 'wglCreateContextAttribsARB', 'wglCreateLayerContext', ] destroyContextFunctionNames = [ 'wglDeleteContext', ] makeCurrentFunctionNames = [ 'wglMakeCurrent', 'wglMakeContextCurrentARB', 'wglMakeContextCurrentEXT', ] def traceFunctionImplBody(self, function): if function.name.startswith('wgl'): # When implementing WGL extensions OpenGL ICDs often have no # alternative to calling back into OPENGL32.DLL's wgl* entry points # due to lack of extensibility in the ICD interface. These # internal calls are not only visually confusing but can actually # cause problems when tracing, and replaying. A particularly nasty # case is wglCreateContextAttribsARB which ends up calling # wglCreateContext/wglCreateLayerContext to obtain a HGLRC that's # recognizable by OPENGL32.DLL. Therefore we need to detect and # dispatch internal calls, without further ado. print r' if (_reentrant) {' self.invokeFunction(function) if function.type is not Void: print ' return _result;' print r' }' print r' ReentryScope _reentry;' print r' (void)_reentry;' print if function.name in self.destroyContextFunctionNames: # Unlike other GL APIs like EGL or GLX, WGL will make the context # inactive if it's currently the active context. print ' if (_wglGetCurrentContext() == hglrc) {' print ' gltrace::clearContext();' print ' }' print ' gltrace::releaseContext((uintptr_t)hglrc);' GlTracer.traceFunctionImplBody(self, function) if function.name in self.createContextFunctionNames: print ' if (_result)' print ' gltrace::createContext((uintptr_t)_result);' if function.name in self.makeCurrentFunctionNames: print ' if (_result) {' print ' if (hglrc != NULL)' print ' gltrace::setContext((uintptr_t)hglrc);' print ' else' print ' gltrace::clearContext();' print ' }' if __name__ == '__main__': print print '#define _GDI32_' print print '#include ' print '#include ' print print '#include "trace_writer_local.hpp"' print '#include "os.hpp"' print print '// To validate our prototypes' print '#define GL_GLEXT_PROTOTYPES' print '#define WGL_GLXEXT_PROTOTYPES' print print '#include "glproc.hpp"' print '#include "glsize.hpp"' print print 'static OS_THREAD_SPECIFIC(uintptr_t) _reentrant;' print print '// Helper class to track reentries in function scope.' print 'struct ReentryScope {' print 'inline ReentryScope() { _reentrant = 1; }' print 'inline ~ReentryScope() { _reentrant = 0; }' print '};' print module = Module() module.mergeModule(glapi) module.mergeModule(wglapi) api = API() api.addModule(module) tracer = WglTracer() tracer.traceApi(api) tmpNnpnZF/wrappers/gltrace.py0000664000175000017500000015112312543167424015625 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """GL tracing generator.""" import re import sys from trace import Tracer from dispatch import function_pointer_type, function_pointer_value import specs.stdapi as stdapi import specs.glapi as glapi import specs.glparams as glparams from specs.glxapi import glxapi class TypeGetter(stdapi.Visitor): '''Determine which glGet*v function that matches the specified type.''' def __init__(self, prefix = 'glGet', long_suffix = True, ext_suffix = ''): self.prefix = prefix self.long_suffix = long_suffix self.ext_suffix = ext_suffix def visitConst(self, const): return self.visit(const.type) def visitAlias(self, alias): if alias.expr == 'GLboolean': if self.long_suffix: suffix = 'Booleanv' arg_type = alias.expr else: suffix = 'iv' arg_type = 'GLint' elif alias.expr == 'GLdouble': if self.long_suffix: suffix = 'Doublev' arg_type = alias.expr else: suffix = 'dv' arg_type = alias.expr elif alias.expr == 'GLfloat': if self.long_suffix: suffix = 'Floatv' arg_type = alias.expr else: suffix = 'fv' arg_type = alias.expr elif alias.expr in ('GLint', 'GLuint', 'GLsizei'): if self.long_suffix: suffix = 'Integerv' arg_type = 'GLint' else: suffix = 'iv' arg_type = 'GLint' else: print alias.expr assert False function_name = self.prefix + suffix + self.ext_suffix return function_name, arg_type def visitEnum(self, enum): return self.visit(glapi.GLint) def visitBitmask(self, bitmask): return self.visit(glapi.GLint) def visitOpaque(self, pointer): return self.prefix + 'Pointerv' + self.ext_suffix, 'GLvoid *' class GlTracer(Tracer): arrays = [ ("Vertex", "VERTEX"), ("Normal", "NORMAL"), ("Color", "COLOR"), ("Index", "INDEX"), ("TexCoord", "TEXTURE_COORD"), ("EdgeFlag", "EDGE_FLAG"), ("FogCoord", "FOG_COORD"), ("SecondaryColor", "SECONDARY_COLOR"), ] arrays.reverse() # arrays available in ES1 arrays_es1 = ("Vertex", "Normal", "Color", "TexCoord") def header(self, api): Tracer.header(self, api) print '#include ' print print '#include "gltrace.hpp"' print # Which glVertexAttrib* variant to use print 'enum vertex_attrib {' print ' VERTEX_ATTRIB,' print ' VERTEX_ATTRIB_NV,' print '};' print print 'static vertex_attrib _get_vertex_attrib(void) {' print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (ctx->user_arrays_nv) {' print ' GLboolean _vertex_program = GL_FALSE;' print ' _glGetBooleanv(GL_VERTEX_PROGRAM_ARB, &_vertex_program);' print ' if (_vertex_program) {' print ' if (ctx->user_arrays_nv) {' print ' GLint _vertex_program_binding_nv = _glGetInteger(GL_VERTEX_PROGRAM_BINDING_NV);' print ' if (_vertex_program_binding_nv) {' print ' return VERTEX_ATTRIB_NV;' print ' }' print ' }' print ' }' print ' }' print ' return VERTEX_ATTRIB;' print '}' print self.defineShadowBufferHelper() # Whether we need user arrays print 'static inline bool _need_user_arrays(void)' print '{' print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (!ctx->user_arrays) {' print ' return false;' print ' }' print print ' glprofile::Profile profile = ctx->profile;' print ' bool es1 = profile.es() && profile.major == 1;' print for camelcase_name, uppercase_name in self.arrays: # in which profile is the array available? profile_check = 'profile.desktop()' if camelcase_name in self.arrays_es1: profile_check = '(' + profile_check + ' || es1)'; function_name = 'gl%sPointer' % camelcase_name enable_name = 'GL_%s_ARRAY' % uppercase_name binding_name = 'GL_%s_ARRAY_BUFFER_BINDING' % uppercase_name print ' // %s' % function_name print ' if (%s) {' % profile_check self.array_prolog(api, uppercase_name) print ' if (_glIsEnabled(%s) &&' % enable_name print ' _glGetInteger(%s) == 0) {' % binding_name self.array_cleanup(api, uppercase_name) print ' return true;' print ' }' self.array_epilog(api, uppercase_name) print ' }' print print ' // ES1 does not support generic vertex attributes' print ' if (es1)' print ' return false;' print print ' vertex_attrib _vertex_attrib = _get_vertex_attrib();' print print ' // glVertexAttribPointer' print ' if (_vertex_attrib == VERTEX_ATTRIB) {' print ' GLint _max_vertex_attribs = _glGetInteger(GL_MAX_VERTEX_ATTRIBS);' print ' for (GLint index = 0; index < _max_vertex_attribs; ++index) {' print ' if (_glGetVertexAttribi(index, GL_VERTEX_ATTRIB_ARRAY_ENABLED) &&' print ' _glGetVertexAttribi(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) == 0) {' print ' return true;' print ' }' print ' }' print ' }' print print ' // glVertexAttribPointerNV' print ' if (_vertex_attrib == VERTEX_ATTRIB_NV) {' print ' for (GLint index = 0; index < 16; ++index) {' print ' if (_glIsEnabled(GL_VERTEX_ATTRIB_ARRAY0_NV + index)) {' print ' return true;' print ' }' print ' }' print ' }' print print ' return false;' print '}' print print 'static void _trace_user_arrays(GLuint count);' print print '// whether glLockArraysEXT() has ever been called' print 'static bool _checkLockArraysEXT = false;' print # Buffer mappings print '// whether glMapBufferRange(GL_MAP_WRITE_BIT) has ever been called' print 'static bool _checkBufferMapRange = false;' print print '// whether glBufferParameteriAPPLE(GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE) has ever been called' print 'static bool _checkBufferFlushingUnmapAPPLE = false;' print # Generate a helper function to determine whether a parameter name # refers to a symbolic value or not print 'static bool' print 'is_symbolic_pname(GLenum pname) {' print ' switch (pname) {' for function, type, count, name in glparams.parameters: if type is glapi.GLenum: print ' case %s:' % name print ' return true;' print ' default:' print ' return false;' print ' }' print '}' print # Generate a helper function to determine whether a parameter value is # potentially symbolic or not; i.e., if the value can be represented in # an enum or not print 'template' print 'static inline bool' print 'is_symbolic_param(T param) {' print ' return static_cast(static_cast(param)) == param;' print '}' print # Generate a helper function to know how many elements a parameter has print 'static size_t' print '_gl_param_size(GLenum pname) {' print ' switch (pname) {' for function, type, count, name in glparams.parameters: if type is not None: print ' case %s: return %s;' % (name, count) print ' default:' print r' os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname);' print ' return 1;' print ' }' print '}' print # states such as GL_UNPACK_ROW_LENGTH are not available in GLES print 'static inline bool' print 'can_unpack_subimage(void) {' print ' gltrace::Context *ctx = gltrace::getContext();' print ' return ctx->profile.desktop();' print '}' print # VMWX_map_buffer_debug print r'extern "C" PUBLIC' print r'void APIENTRY' print r'glNotifyMappedBufferRangeVMWX(const void * start, GLsizeiptr length) {' self.emit_memcpy('start', 'length') print r'}' print getProcAddressFunctionNames = [] def traceApi(self, api): if self.getProcAddressFunctionNames: # Generate a function to wrap proc addresses getProcAddressFunction = api.getFunctionByName(self.getProcAddressFunctionNames[0]) argType = getProcAddressFunction.args[0].type retType = getProcAddressFunction.type print 'static %s _wrapProcAddress(%s procName, %s procPtr);' % (retType, argType, retType) print Tracer.traceApi(self, api) print 'static %s _wrapProcAddress(%s procName, %s procPtr) {' % (retType, argType, retType) # Provide fallback functions to missing debug functions print ' if (!procPtr) {' else_ = '' for function_name in self.debug_functions: if self.api.getFunctionByName(function_name): print ' %sif (strcmp("%s", (const char *)procName) == 0) {' % (else_, function_name) print ' return (%s)&%s;' % (retType, function_name) print ' }' else_ = 'else ' print ' %s{' % else_ print ' return NULL;' print ' }' print ' }' for function in api.getAllFunctions(): ptype = function_pointer_type(function) pvalue = function_pointer_value(function) print ' if (strcmp("%s", (const char *)procName) == 0) {' % function.name print ' %s = (%s)procPtr;' % (pvalue, ptype) print ' return (%s)&%s;' % (retType, function.name,) print ' }' print ' os::log("apitrace: warning: unknown function \\"%s\\"\\n", (const char *)procName);' print ' return procPtr;' print '}' print else: Tracer.traceApi(self, api) def defineShadowBufferHelper(self): print 'void _shadow_glGetBufferSubData(GLenum target, GLintptr offset,' print ' GLsizeiptr size, GLvoid *data)' print '{' print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (!ctx->needsShadowBuffers() || target != GL_ELEMENT_ARRAY_BUFFER) {' print ' _glGetBufferSubData(target, offset, size, data);' print ' return;' print ' }' print print ' GLint buffer_binding = _glGetInteger(GL_ELEMENT_ARRAY_BUFFER_BINDING);' print ' if (buffer_binding > 0) {' print ' gltrace::Buffer & buf = ctx->buffers[buffer_binding];' print ' buf.getSubData(offset, size, data);' print ' }' print '}' def shadowBufferMethod(self, method): # Emit code to fetch the shadow buffer, and invoke a method print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (ctx->needsShadowBuffers() && target == GL_ELEMENT_ARRAY_BUFFER) {' print ' GLint buffer_binding = _glGetInteger(GL_ELEMENT_ARRAY_BUFFER_BINDING);' print ' if (buffer_binding > 0) {' print ' gltrace::Buffer & buf = ctx->buffers[buffer_binding];' print ' buf.' + method + ';' print ' }' print ' }' print def shadowBufferProlog(self, function): if function.name == 'glBufferData': self.shadowBufferMethod('bufferData(size, data)') if function.name == 'glBufferSubData': self.shadowBufferMethod('bufferSubData(offset, size, data)') if function.name == 'glDeleteBuffers': print ' gltrace::Context *ctx = gltrace::getContext();' print ' if (ctx->needsShadowBuffers()) {' print ' for (GLsizei i = 0; i < n; i++) {' print ' ctx->buffers.erase(buffer[i]);' print ' }' print ' }' array_pointer_function_names = set(( "glVertexPointer", "glNormalPointer", "glColorPointer", "glIndexPointer", "glTexCoordPointer", "glEdgeFlagPointer", "glFogCoordPointer", "glSecondaryColorPointer", "glInterleavedArrays", "glVertexPointerEXT", "glNormalPointerEXT", "glColorPointerEXT", "glIndexPointerEXT", "glTexCoordPointerEXT", "glEdgeFlagPointerEXT", "glFogCoordPointerEXT", "glSecondaryColorPointerEXT", "glVertexAttribPointer", "glVertexAttribPointerARB", "glVertexAttribPointerNV", "glVertexAttribIPointer", "glVertexAttribIPointerEXT", "glVertexAttribLPointer", "glVertexAttribLPointerEXT", #"glMatrixIndexPointerARB", )) # XXX: We currently ignore the gl*Draw*ElementArray* functions draw_function_regex = re.compile(r'^gl([A-Z][a-z]+)*Draw(Range)?(Arrays|Elements)([A-Z][a-zA-Z]*)?$' ) interleaved_formats = [ 'GL_V2F', 'GL_V3F', 'GL_C4UB_V2F', 'GL_C4UB_V3F', 'GL_C3F_V3F', 'GL_N3F_V3F', 'GL_C4F_N3F_V3F', 'GL_T2F_V3F', 'GL_T4F_V4F', 'GL_T2F_C4UB_V3F', 'GL_T2F_C3F_V3F', 'GL_T2F_N3F_V3F', 'GL_T2F_C4F_N3F_V3F', 'GL_T4F_C4F_N3F_V4F', ] def traceFunctionImplBody(self, function): # Defer tracing of user array pointers... if function.name in self.array_pointer_function_names: print ' GLint _array_buffer = _glGetInteger(GL_ARRAY_BUFFER_BINDING);' print ' if (!_array_buffer) {' print ' static bool warned = false;' print ' if (!warned) {' print ' warned = true;' print ' os::log("apitrace: warning: %s: call will be faked due to pointer to user memory (https://github.com/apitrace/apitrace/blob/master/docs/BUGS.markdown#tracing)\\n", __FUNCTION__);' print ' }' print ' gltrace::Context *ctx = gltrace::getContext();' print ' ctx->user_arrays = true;' if function.name == "glVertexAttribPointerNV": print ' ctx->user_arrays_nv = true;' self.invokeFunction(function) # And also break down glInterleavedArrays into the individual calls if function.name == 'glInterleavedArrays': print # Initialize the enable flags for camelcase_name, uppercase_name in self.arrays: flag_name = '_' + uppercase_name.lower() print ' GLboolean %s = GL_FALSE;' % flag_name print # Switch for the interleaved formats print ' switch (format) {' for format in self.interleaved_formats: print ' case %s:' % format for camelcase_name, uppercase_name in self.arrays: flag_name = '_' + uppercase_name.lower() if format.find('_' + uppercase_name[0]) >= 0: print ' %s = GL_TRUE;' % flag_name print ' break;' print ' default:' print ' return;' print ' }' print # Emit fake glEnableClientState/glDisableClientState flags for camelcase_name, uppercase_name in self.arrays: flag_name = '_' + uppercase_name.lower() enable_name = 'GL_%s_ARRAY' % uppercase_name # Emit a fake function print ' {' print ' static const trace::FunctionSig &_sig = %s ? _glEnableClientState_sig : _glDisableClientState_sig;' % flag_name print ' unsigned _call = trace::localWriter.beginEnter(&_sig, true);' print ' trace::localWriter.beginArg(0);' self.serializeValue(glapi.GLenum, enable_name) print ' trace::localWriter.endArg();' print ' trace::localWriter.endEnter();' print ' trace::localWriter.beginLeave(_call);' print ' trace::localWriter.endLeave();' print ' }' # Warn about buggy glGet(GL_*ARRAY_SIZE) not returning GL_BGRA buggyFunctions = { 'glColorPointer': ('glGetIntegerv', '', 'GL_COLOR_ARRAY_SIZE'), 'glSecondaryColorPointer': ('glGetIntegerv', '', 'GL_SECONDARY_COLOR_ARRAY_SIZE'), 'glVertexAttribPointer': ('glGetVertexAttribiv', 'index, ', 'GL_VERTEX_ATTRIB_ARRAY_SIZE'), 'glVertexAttribPointerARB': ('glGetVertexAttribivARB', 'index, ', 'GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB'), } if function.name in buggyFunctions: getter, extraArg, pname = buggyFunctions[function.name] print r' static bool _checked = false;' print r' if (!_checked && size == GL_BGRA) {' print r' GLint _size = 0;' print r' _%s(%s%s, &_size);' % (getter, extraArg, pname) print r' if (_size != GL_BGRA) {' print r' os::log("apitrace: warning: %s(%s) does not return GL_BGRA; trace will be incorrect (https://github.com/apitrace/apitrace/issues/261)\n");' % (getter, pname) print r' }' print r' _checked = true;' print r' }' print ' return;' print ' }' # ... to the draw calls if self.draw_function_regex.match(function.name): print ' if (_need_user_arrays()) {' if 'Indirect' in function.name: print r' os::log("apitrace: warning: %s: indirect user arrays not supported\n");' % (function.name,) else: arg_names = ', '.join([arg.name for arg in function.args[1:]]) print ' GLuint _count = _%s_count(%s);' % (function.name, arg_names) # Some apps, in particular Quake3, can tell the driver to lock more # vertices than those actually required for the draw call. print ' if (_checkLockArraysEXT) {' print ' GLuint _locked_count = _glGetInteger(GL_ARRAY_ELEMENT_LOCK_FIRST_EXT)' print ' + _glGetInteger(GL_ARRAY_ELEMENT_LOCK_COUNT_EXT);' print ' _count = std::max(_count, _locked_count);' print ' }' print ' _trace_user_arrays(_count);' print ' }' if function.name == 'glLockArraysEXT': print ' _checkLockArraysEXT = true;' # Warn if user arrays are used with glBegin/glArrayElement/glEnd. if function.name == 'glBegin': print r' gltrace::Context *ctx = gltrace::getContext();' print r' ctx->userArraysOnBegin = _need_user_arrays();' if function.name.startswith('glArrayElement'): print r' gltrace::Context *ctx = gltrace::getContext();' print r' if (ctx->userArraysOnBegin) {' print r' os::log("apitrace: warning: user arrays with glArrayElement not supported (https://github.com/apitrace/apitrace/issues/276)\n");' print r' ctx->userArraysOnBegin = false;' print r' }' # Emit a fake memcpy on buffer uploads if function.name == 'glBufferParameteriAPPLE': print ' if (pname == GL_BUFFER_FLUSHING_UNMAP_APPLE && param == GL_FALSE) {' print ' _checkBufferFlushingUnmapAPPLE = true;' print ' }' if function.name in ('glUnmapBuffer', 'glUnmapBufferARB'): if function.name.endswith('ARB'): suffix = 'ARB' else: suffix = '' print ' GLint access_flags = 0;' print ' GLint access = 0;' print ' bool flush;' print ' // GLES3 does not have GL_BUFFER_ACCESS;' print ' if (_checkBufferMapRange) {' print ' _glGetBufferParameteriv%s(target, GL_BUFFER_ACCESS_FLAGS, &access_flags);' % suffix print ' flush = (access_flags & GL_MAP_WRITE_BIT) && !(access_flags & (GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_PERSISTENT_BIT));' print ' } else {' print ' _glGetBufferParameteriv%s(target, GL_BUFFER_ACCESS, &access);' % suffix print ' flush = access != GL_READ_ONLY;' print ' }' print ' if (flush) {' print ' GLvoid *map = NULL;' print ' _glGetBufferPointerv%s(target, GL_BUFFER_MAP_POINTER, &map);' % suffix print ' if (map) {' print ' GLint length = -1;' print ' if (_checkBufferMapRange) {' print ' _glGetBufferParameteriv%s(target, GL_BUFFER_MAP_LENGTH, &length);' % suffix print ' if (length == -1) {' print ' // Mesa drivers refuse GL_BUFFER_MAP_LENGTH without GL 3.0 up-to' print ' // http://cgit.freedesktop.org/mesa/mesa/commit/?id=ffee498fb848b253a7833373fe5430f8c7ca0c5f' print ' static bool warned = false;' print ' if (!warned) {' print ' os::log("apitrace: warning: glGetBufferParameteriv%s(GL_BUFFER_MAP_LENGTH) failed\\n");' % suffix print ' warned = true;' print ' }' print ' }' print ' } else {' print ' length = 0;' print ' _glGetBufferParameteriv%s(target, GL_BUFFER_SIZE, &length);' % suffix print ' }' print ' if (_checkBufferFlushingUnmapAPPLE) {' print ' GLint flushing_unmap = GL_TRUE;' print ' _glGetBufferParameteriv%s(target, GL_BUFFER_FLUSHING_UNMAP_APPLE, &flushing_unmap);' % suffix print ' flush = flush && flushing_unmap;' print ' }' print ' if (flush && length > 0) {' self.emit_memcpy('map', 'length') print ' }' print ' }' print ' }' if function.name == 'glUnmapBufferOES': print ' GLint access_flags = 0;' print ' GLint access = 0;' print ' bool flush;' print ' // GLES3 does not have GL_BUFFER_ACCESS;' print ' if (_checkBufferMapRange) {' print ' _glGetBufferParameteriv(target, GL_BUFFER_ACCESS_FLAGS, &access_flags);' print ' flush = (access_flags & GL_MAP_WRITE_BIT) && !(access_flags & (GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_PERSISTENT_BIT));' print ' } else {' print ' _glGetBufferParameteriv(target, GL_BUFFER_ACCESS, &access);' print ' flush = access != GL_READ_ONLY;' print ' }' print ' if (flush) {' print ' GLvoid *map = NULL;' print ' _glGetBufferPointervOES(target, GL_BUFFER_MAP_POINTER, &map);' print ' if (map) {' print ' GLint length = 0;' print ' GLint offset = 0;' print ' if (_checkBufferMapRange) {' print ' _glGetBufferParameteriv(target, GL_BUFFER_MAP_LENGTH, &length);' print ' _glGetBufferParameteriv(target, GL_BUFFER_MAP_OFFSET, &offset);' print ' } else {' print ' _glGetBufferParameteriv(target, GL_BUFFER_SIZE, &length);' print ' }' print ' if (flush && length > 0) {' self.emit_memcpy('map', 'length') self.shadowBufferMethod('bufferSubData(offset, length, map)') print ' }' print ' }' print ' }' if function.name == 'glUnmapNamedBuffer': print ' GLint access_flags = 0;' print ' _glGetNamedBufferParameteriv(buffer, GL_BUFFER_ACCESS_FLAGS, &access_flags);' print ' if ((access_flags & GL_MAP_WRITE_BIT) &&' print ' !(access_flags & (GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_PERSISTENT_BIT))) {' print ' GLvoid *map = NULL;' print ' _glGetNamedBufferPointerv(buffer, GL_BUFFER_MAP_POINTER, &map);' print ' GLint length = 0;' print ' _glGetNamedBufferParameteriv(buffer, GL_BUFFER_MAP_LENGTH, &length);' print ' if (map && length > 0) {' self.emit_memcpy('map', 'length') print ' }' print ' }' if function.name == 'glUnmapNamedBufferEXT': print ' GLint access_flags = 0;' print ' _glGetNamedBufferParameterivEXT(buffer, GL_BUFFER_ACCESS_FLAGS, &access_flags);' print ' if ((access_flags & GL_MAP_WRITE_BIT) &&' print ' !(access_flags & (GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_PERSISTENT_BIT))) {' print ' GLvoid *map = NULL;' print ' _glGetNamedBufferPointervEXT(buffer, GL_BUFFER_MAP_POINTER, &map);' print ' GLint length = 0;' print ' _glGetNamedBufferParameterivEXT(buffer, GL_BUFFER_MAP_LENGTH, &length);' print ' if (map && length > 0) {' self.emit_memcpy('map', 'length') print ' }' print ' }' if function.name == 'glFlushMappedBufferRange': print ' GLvoid *map = NULL;' print ' _glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &map);' print ' if (map && length > 0) {' self.emit_memcpy('(const char *)map + offset', 'length') print ' }' if function.name == 'glFlushMappedBufferRangeEXT': print ' GLvoid *map = NULL;' print ' _glGetBufferPointervOES(target, GL_BUFFER_MAP_POINTER_OES, &map);' print ' if (map && length > 0) {' self.emit_memcpy('(const char *)map + offset', 'length') print ' }' if function.name == 'glFlushMappedBufferRangeAPPLE': print ' GLvoid *map = NULL;' print ' _glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &map);' print ' if (map && size > 0) {' self.emit_memcpy('(const char *)map + offset', 'size') print ' }' if function.name == 'glFlushMappedNamedBufferRange': print ' GLvoid *map = NULL;' print ' _glGetNamedBufferPointerv(buffer, GL_BUFFER_MAP_POINTER, &map);' print ' if (map && length > 0) {' self.emit_memcpy('(const char *)map + offset', 'length') print ' }' if function.name == 'glFlushMappedNamedBufferRangeEXT': print ' GLvoid *map = NULL;' print ' _glGetNamedBufferPointervEXT(buffer, GL_BUFFER_MAP_POINTER, &map);' print ' if (map && length > 0) {' self.emit_memcpy('(const char *)map + offset', 'length') print ' }' # FIXME: We don't support coherent/pinned memory mappings if function.name in ('glBufferStorage', 'glNamedBufferStorage', 'glNamedBufferStorageEXT'): print r' if (!(flags & GL_MAP_PERSISTENT_BIT)) {' print r' os::log("apitrace: warning: %s: MAP_NOTIFY_EXPLICIT_BIT_VMWX set w/o MAP_PERSISTENT_BIT\n", __FUNCTION__);' print r' }' print r' flags &= ~GL_MAP_NOTIFY_EXPLICIT_BIT_VMWX;' if function.name in ('glMapBufferRange', 'glMapBufferRangeEXT', 'glMapNamedBufferRange', 'glMapNamedBufferRangeEXT'): print r' if (access & GL_MAP_NOTIFY_EXPLICIT_BIT_VMWX) {' print r' if (!(access & GL_MAP_PERSISTENT_BIT)) {' print r' os::log("apitrace: warning: %s: MAP_NOTIFY_EXPLICIT_BIT_VMWX set w/o MAP_PERSISTENT_BIT\n", __FUNCTION__);' print r' }' print r' if (access & GL_MAP_FLUSH_EXPLICIT_BIT) {' print r' os::log("apitrace: warning: %s: MAP_NOTIFY_EXPLICIT_BIT_VMWX set w/ MAP_FLUSH_EXPLICIT_BIT\n", __FUNCTION__);' print r' }' print r' access &= ~GL_MAP_NOTIFY_EXPLICIT_BIT_VMWX;' print r' } else if (access & GL_MAP_COHERENT_BIT) {' print r' os::log("apitrace: warning: %s: MAP_COHERENT_BIT unsupported (https://github.com/apitrace/apitrace/issues/232)\n", __FUNCTION__);' print r' } else if ((access & GL_MAP_PERSISTENT_BIT) &&' print r' !(access & GL_MAP_FLUSH_EXPLICIT_BIT)) {' print r' os::log("apitrace: warning: %s: MAP_PERSISTENT_BIT w/o FLUSH_EXPLICIT_BIT unsupported (https://github.com/apitrace/apitrace/issues/232)\n", __FUNCTION__);' print r' }' if function.name in ('glBufferData', 'glBufferDataARB'): print r' if (target == GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD) {' print r' os::log("apitrace: warning: GL_AMD_pinned_memory not fully supported\n");' print r' }' # TODO: We don't track GL_INTEL_map_texture mappings if function.name == 'glMapTexture2DINTEL': print r' if (access & GL_MAP_WRITE_BIT) {' print r' os::log("apitrace: warning: GL_INTEL_map_texture not fully supported\n");' print r' }' # Don't leave vertex attrib locations to chance. Instead emit fake # glBindAttribLocation calls to ensure that the same locations will be # used when retracing. Trying to remap locations after the fact would # be an herculian task given that vertex attrib locations appear in # many entry-points, including non-shader related ones. if function.name == 'glLinkProgram': Tracer.invokeFunction(self, function) print ' GLint active_attributes = 0;' print ' _glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &active_attributes);' print ' for (GLint attrib = 0; attrib < active_attributes; ++attrib) {' print ' GLint size = 0;' print ' GLenum type = 0;' print ' GLchar name[256];' # TODO: Use ACTIVE_ATTRIBUTE_MAX_LENGTH instead of 256 print ' _glGetActiveAttrib(program, attrib, sizeof name, NULL, &size, &type, name);' print " if (name[0] != 'g' || name[1] != 'l' || name[2] != '_') {" print ' GLint location = _glGetAttribLocation(program, name);' print ' if (location >= 0) {' bind_function = glapi.glapi.getFunctionByName('glBindAttribLocation') self.fake_call(bind_function, ['program', 'location', 'name']) print ' }' print ' }' print ' }' if function.name == 'glLinkProgramARB': Tracer.invokeFunction(self, function) print ' GLint active_attributes = 0;' print ' _glGetObjectParameterivARB(programObj, GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, &active_attributes);' print ' for (GLint attrib = 0; attrib < active_attributes; ++attrib) {' print ' GLint size = 0;' print ' GLenum type = 0;' print ' GLcharARB name[256];' # TODO: Use ACTIVE_ATTRIBUTE_MAX_LENGTH instead of 256 print ' _glGetActiveAttribARB(programObj, attrib, sizeof name, NULL, &size, &type, name);' print " if (name[0] != 'g' || name[1] != 'l' || name[2] != '_') {" print ' GLint location = _glGetAttribLocationARB(programObj, name);' print ' if (location >= 0) {' bind_function = glapi.glapi.getFunctionByName('glBindAttribLocationARB') self.fake_call(bind_function, ['programObj', 'location', 'name']) print ' }' print ' }' print ' }' self.shadowBufferProlog(function) Tracer.traceFunctionImplBody(self, function) # These entrypoints are only expected to be implemented by tools; # drivers will probably not implement them. marker_functions = [ # GL_GREMEDY_string_marker 'glStringMarkerGREMEDY', # GL_GREMEDY_frame_terminator 'glFrameTerminatorGREMEDY', ] # These entrypoints may be implemented by drivers, but are also very useful # for debugging / analysis tools. debug_functions = [ # GL_KHR_debug 'glDebugMessageControl', 'glDebugMessageInsert', 'glDebugMessageCallback', 'glGetDebugMessageLog', 'glPushDebugGroup', 'glPopDebugGroup', 'glObjectLabel', 'glGetObjectLabel', 'glObjectPtrLabel', 'glGetObjectPtrLabel', # GL_ARB_debug_output 'glDebugMessageControlARB', 'glDebugMessageInsertARB', 'glDebugMessageCallbackARB', 'glGetDebugMessageLogARB', # GL_AMD_debug_output 'glDebugMessageEnableAMD', 'glDebugMessageInsertAMD', 'glDebugMessageCallbackAMD', 'glGetDebugMessageLogAMD', # GL_EXT_debug_label 'glLabelObjectEXT', 'glGetObjectLabelEXT', # GL_EXT_debug_marker 'glInsertEventMarkerEXT', 'glPushGroupMarkerEXT', 'glPopGroupMarkerEXT', ] def invokeFunction(self, function): if function.name in ('glLinkProgram', 'glLinkProgramARB'): # These functions have been dispatched already return # Force glProgramBinary to fail. Per ARB_get_program_binary this # should signal the app that it needs to recompile. if function.name in ('glProgramBinary', 'glProgramBinaryOES'): print r' binaryFormat = 0xDEADDEAD;' print r' binary = &binaryFormat;' print r' length = sizeof binaryFormat;' Tracer.invokeFunction(self, function) def doInvokeFunction(self, function): # Same as invokeFunction() but called both when trace is enabled or disabled. # # Used to modify the behavior of GL entry-points. # Override GL extensions if function.name in ('glGetString', 'glGetIntegerv', 'glGetStringi'): Tracer.doInvokeFunction(self, function, prefix = 'gltrace::_', suffix = '_override') return # We implement GL_GREMEDY_*, etc., and not the driver if function.name in self.marker_functions: return # We may be faking KHR_debug, so ensure the pointer queries result is # always zeroed to prevent dereference of unitialized pointers if function.name == 'glGetPointerv': print ' if (params &&' print ' (pname == GL_DEBUG_CALLBACK_FUNCTION ||' print ' pname == GL_DEBUG_CALLBACK_USER_PARAM)) {' print ' *params = NULL;' print ' }' if function.name in self.getProcAddressFunctionNames: nameArg = function.args[0].name print ' if (strcmp("glNotifyMappedBufferRangeVMWX", (const char *)%s) == 0) {' % (nameArg,) print ' _result = (%s)&glNotifyMappedBufferRangeVMWX;' % (function.type,) for marker_function in self.marker_functions: if self.api.getFunctionByName(marker_function): print ' } else if (strcmp("%s", (const char *)%s) == 0) {' % (marker_function, nameArg) print ' _result = (%s)&%s;' % (function.type, marker_function) print ' } else {' Tracer.doInvokeFunction(self, function) # Replace function addresses with ours # XXX: Doing this here instead of wrapRet means that the trace will # contain the addresses of the wrapper functions, and not the real # functions, but in practice this should make no difference. if function.name in self.getProcAddressFunctionNames: print ' _result = _wrapProcAddress(%s, _result);' % (nameArg,) print ' }' return if function.name in ('glGetProgramBinary', 'glGetProgramBinaryOES'): print r' bufSize = 0;' Tracer.doInvokeFunction(self, function) if function.name == 'glGetProgramiv': print r' if (params && pname == GL_PROGRAM_BINARY_LENGTH) {' print r' *params = 0;' print r' }' if function.name in ('glGetProgramBinary', 'glGetProgramBinaryOES'): print r' if (length) {' print r' *length = 0;' print r' }' buffer_targets = [ 'ARRAY_BUFFER', 'ELEMENT_ARRAY_BUFFER', 'PIXEL_PACK_BUFFER', 'PIXEL_UNPACK_BUFFER', 'UNIFORM_BUFFER', 'TEXTURE_BUFFER', 'TRANSFORM_FEEDBACK_BUFFER', 'COPY_READ_BUFFER', 'COPY_WRITE_BUFFER', 'DRAW_INDIRECT_BUFFER', 'ATOMIC_COUNTER_BUFFER', ] def wrapRet(self, function, instance): Tracer.wrapRet(self, function, instance) # Keep track of buffer mappings if function.name in ('glMapBufferRange', 'glMapBufferRangeEXT'): print ' if (access & GL_MAP_WRITE_BIT) {' print ' _checkBufferMapRange = true;' print ' }' boolean_names = [ 'GL_FALSE', 'GL_TRUE', ] def gl_boolean(self, value): return self.boolean_names[int(bool(value))] # Regular expression for the names of the functions that unpack from a # pixel buffer object. See the ARB_pixel_buffer_object specification. unpack_function_regex = re.compile(r'^gl(' + r'|'.join([ r'Bitmap', r'PolygonStipple', r'PixelMap[a-z]+v', r'DrawPixels', r'Color(Sub)?Table', r'(Convolution|Separable)Filter[12]D', r'(Compressed)?(Multi)?Tex(ture)?(Sub)?Image[1-4]D', ]) + r')[0-9A-Z]*$') def serializeArgValue(self, function, arg): # Recognize offsets instead of blobs when a PBO is bound if self.unpack_function_regex.match(function.name) \ and (isinstance(arg.type, stdapi.Blob) \ or (isinstance(arg.type, stdapi.Const) \ and isinstance(arg.type.type, stdapi.Blob))): print ' {' print ' gltrace::Context *ctx = gltrace::getContext();' print ' GLint _unpack_buffer = 0;' print ' if (ctx->profile.desktop())' print ' _glGetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &_unpack_buffer);' print ' if (_unpack_buffer) {' print ' trace::localWriter.writePointer((uintptr_t)%s);' % arg.name print ' } else {' Tracer.serializeArgValue(self, function, arg) print ' }' print ' }' return # Several GL state functions take GLenum symbolic names as # integer/floats; so dump the symbolic name whenever possible if function.name.startswith('gl') \ and arg.type in (glapi.GLint, glapi.GLfloat, glapi.GLdouble) \ and arg.name == 'param': assert arg.index > 0 assert function.args[arg.index - 1].name == 'pname' assert function.args[arg.index - 1].type == glapi.GLenum print ' if (is_symbolic_pname(pname) && is_symbolic_param(%s)) {' % arg.name self.serializeValue(glapi.GLenum, arg.name) print ' } else {' Tracer.serializeArgValue(self, function, arg) print ' }' return Tracer.serializeArgValue(self, function, arg) def footer(self, api): Tracer.footer(self, api) # A simple state tracker to track the pointer values # update the state print 'static void _trace_user_arrays(GLuint count)' print '{' print ' gltrace::Context *ctx = gltrace::getContext();' print print ' glprofile::Profile profile = ctx->profile;' print ' bool es1 = profile.es() && profile.major == 1;' print # Temporarily unbind the array buffer print ' GLint _array_buffer = _glGetInteger(GL_ARRAY_BUFFER_BINDING);' print ' if (_array_buffer) {' self.fake_glBindBuffer(api, 'GL_ARRAY_BUFFER', '0') print ' }' print for camelcase_name, uppercase_name in self.arrays: # in which profile is the array available? profile_check = 'profile.desktop()' if camelcase_name in self.arrays_es1: profile_check = '(' + profile_check + ' || es1)'; function_name = 'gl%sPointer' % camelcase_name enable_name = 'GL_%s_ARRAY' % uppercase_name binding_name = 'GL_%s_ARRAY_BUFFER_BINDING' % uppercase_name function = api.getFunctionByName(function_name) print ' // %s' % function.prototype() print ' if (%s) {' % profile_check self.array_trace_prolog(api, uppercase_name) self.array_prolog(api, uppercase_name) print ' if (_glIsEnabled(%s)) {' % enable_name print ' GLint _binding = _glGetInteger(%s);' % binding_name print ' if (!_binding) {' # Get the arguments via glGet* for arg in function.args: arg_get_enum = 'GL_%s_ARRAY_%s' % (uppercase_name, arg.name.upper()) arg_get_function, arg_type = TypeGetter().visit(arg.type) print ' %s %s = 0;' % (arg_type, arg.name) print ' _%s(%s, &%s);' % (arg_get_function, arg_get_enum, arg.name) arg_names = ', '.join([arg.name for arg in function.args[:-1]]) print ' size_t _size = _%s_size(%s, count);' % (function.name, arg_names) # Emit a fake function self.array_trace_intermezzo(api, uppercase_name) print ' unsigned _call = trace::localWriter.beginEnter(&_%s_sig, true);' % (function.name,) for arg in function.args: assert not arg.output print ' trace::localWriter.beginArg(%u);' % (arg.index,) if arg.name != 'pointer': self.serializeValue(arg.type, arg.name) else: print ' trace::localWriter.writeBlob((const void *)%s, _size);' % (arg.name) print ' trace::localWriter.endArg();' print ' trace::localWriter.endEnter();' print ' trace::localWriter.beginLeave(_call);' print ' trace::localWriter.endLeave();' print ' }' print ' }' self.array_epilog(api, uppercase_name) self.array_trace_epilog(api, uppercase_name) print ' }' print # Samething, but for glVertexAttribPointer* # # Some variants of glVertexAttribPointer alias conventional and generic attributes: # - glVertexAttribPointer: no # - glVertexAttribPointerARB: implementation dependent # - glVertexAttribPointerNV: yes # # This means that the implementations of these functions do not always # alias, and they need to be considered independently. # print ' // ES1 does not support generic vertex attributes' print ' if (es1)' print ' return;' print print ' vertex_attrib _vertex_attrib = _get_vertex_attrib();' print for suffix in ['', 'NV']: if suffix: SUFFIX = '_' + suffix else: SUFFIX = suffix function_name = 'glVertexAttribPointer' + suffix function = api.getFunctionByName(function_name) print ' // %s' % function.prototype() print ' if (_vertex_attrib == VERTEX_ATTRIB%s) {' % SUFFIX if suffix == 'NV': print ' GLint _max_vertex_attribs = 16;' else: print ' GLint _max_vertex_attribs = _glGetInteger(GL_MAX_VERTEX_ATTRIBS);' print ' for (GLint index = 0; index < _max_vertex_attribs; ++index) {' print ' GLint _enabled = 0;' if suffix == 'NV': print ' _glGetIntegerv(GL_VERTEX_ATTRIB_ARRAY0_NV + index, &_enabled);' else: print ' _glGetVertexAttribiv%s(index, GL_VERTEX_ATTRIB_ARRAY_ENABLED%s, &_enabled);' % (suffix, SUFFIX) print ' if (_enabled) {' print ' GLint _binding = 0;' if suffix != 'NV': # It doesn't seem possible to use VBOs with NV_vertex_program. print ' _glGetVertexAttribiv%s(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING%s, &_binding);' % (suffix, SUFFIX) print ' if (!_binding) {' # Get the arguments via glGet* for arg in function.args[1:]: if suffix == 'NV': arg_get_enum = 'GL_ATTRIB_ARRAY_%s%s' % (arg.name.upper(), SUFFIX) else: arg_get_enum = 'GL_VERTEX_ATTRIB_ARRAY_%s%s' % (arg.name.upper(), SUFFIX) arg_get_function, arg_type = TypeGetter('glGetVertexAttrib', False, suffix).visit(arg.type) print ' %s %s = 0;' % (arg_type, arg.name) print ' _%s(index, %s, &%s);' % (arg_get_function, arg_get_enum, arg.name) arg_names = ', '.join([arg.name for arg in function.args[1:-1]]) print ' size_t _size = _%s_size(%s, count);' % (function.name, arg_names) # Emit a fake function print ' unsigned _call = trace::localWriter.beginEnter(&_%s_sig, true);' % (function.name,) for arg in function.args: assert not arg.output print ' trace::localWriter.beginArg(%u);' % (arg.index,) if arg.name != 'pointer': self.serializeValue(arg.type, arg.name) else: print ' trace::localWriter.writeBlob((const void *)%s, _size);' % (arg.name) print ' trace::localWriter.endArg();' print ' trace::localWriter.endEnter();' print ' trace::localWriter.beginLeave(_call);' print ' trace::localWriter.endLeave();' print ' }' print ' }' print ' }' print ' }' print # Restore the original array_buffer print ' if (_array_buffer) {' self.fake_glBindBuffer(api, 'GL_ARRAY_BUFFER', '_array_buffer') print ' }' print print '}' print # # Hooks for glTexCoordPointer, which is identical to the other array # pointers except the fact that it is indexed by glClientActiveTexture. # def array_prolog(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' GLint client_active_texture = _glGetInteger(GL_CLIENT_ACTIVE_TEXTURE);' print ' GLint max_texture_coords = 0;' print ' if (ctx->profile.desktop())' print ' _glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords);' print ' else' print ' _glGetIntegerv(GL_MAX_TEXTURE_UNITS, &max_texture_coords);' print ' for (GLint unit = 0; unit < max_texture_coords; ++unit) {' print ' GLint texture = GL_TEXTURE0 + unit;' print ' _glClientActiveTexture(texture);' def array_trace_prolog(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' bool client_active_texture_dirty = false;' def array_epilog(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' }' self.array_cleanup(api, uppercase_name) def array_cleanup(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' _glClientActiveTexture(client_active_texture);' def array_trace_intermezzo(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' if (texture != client_active_texture || client_active_texture_dirty) {' print ' client_active_texture_dirty = true;' self.fake_glClientActiveTexture_call(api, "texture"); print ' }' def array_trace_epilog(self, api, uppercase_name): if uppercase_name == 'TEXTURE_COORD': print ' if (client_active_texture_dirty) {' self.fake_glClientActiveTexture_call(api, "client_active_texture"); print ' }' def fake_glBindBuffer(self, api, target, buffer): function = api.getFunctionByName('glBindBuffer') self.fake_call(function, [target, buffer]) def fake_glClientActiveTexture_call(self, api, texture): function = api.getFunctionByName('glClientActiveTexture') self.fake_call(function, [texture]) def emitFakeTexture2D(self): function = glapi.glapi.getFunctionByName('glTexImage2D') instances = function.argNames() print ' unsigned _fake_call = trace::localWriter.beginEnter(&_%s_sig, true);' % (function.name,) for arg in function.args: assert not arg.output self.serializeArg(function, arg) print ' trace::localWriter.endEnter();' print ' trace::localWriter.beginLeave(_fake_call);' print ' trace::localWriter.endLeave();' tmpNnpnZF/wrappers/dxgitrace.py0000664000175000017500000001513612543167424016161 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ import sys from dlltrace import DllTracer from trace import getWrapperInterfaceName from specs import stdapi from specs.stdapi import API from specs import dxgi from specs import d3d10 from specs import d3d11 from specs import d3d9 class D3DCommonTracer(DllTracer): def serializeArgValue(self, function, arg): # Dump shaders as strings if isinstance(arg.type, stdapi.Blob) and arg.name.startswith('pShaderBytecode'): print ' DumpShader(trace::localWriter, %s, %s);' % (arg.name, arg.type.size) return # Serialize the swapchain dimensions if function.name == 'CreateSwapChain' and arg.name == 'pDesc' \ or arg.name == 'pSwapChainDesc': print r' DXGI_SWAP_CHAIN_DESC *_pSwapChainDesc = NULL;' print r' DXGI_SWAP_CHAIN_DESC _SwapChainDesc;' print r' if (%s) {' % arg.name print r' _SwapChainDesc = *%s;' % arg.name if function.name != 'CreateSwapChain' or not self.interface.name.endswith('DWM'): # Obtain size from the window print r' RECT _rect;' print r' if (GetClientRect(%s->OutputWindow, &_rect)) {' % arg.name print r' if (%s->BufferDesc.Width == 0) {' % arg.name print r' _SwapChainDesc.BufferDesc.Width = _rect.right - _rect.left;' print r' }' print r' if (%s->BufferDesc.Height == 0) {' % arg.name print r' _SwapChainDesc.BufferDesc.Height = _rect.bottom - _rect.top;' print r' }' print r' }' else: # Obtain size from the output print r' DXGI_OUTPUT_DESC _OutputDesc;' print r' if (SUCCEEDED(pOutput->GetDesc(&_OutputDesc))) {' print r' _SwapChainDesc.BufferDesc.Width = _OutputDesc.DesktopCoordinates.right - _OutputDesc.DesktopCoordinates.left;' print r' _SwapChainDesc.BufferDesc.Height = _OutputDesc.DesktopCoordinates.bottom - _OutputDesc.DesktopCoordinates.top;' print r' }' print r' _pSwapChainDesc = &_SwapChainDesc;' print r' }' self.serializeValue(arg.type, '_pSwapChainDesc') return # Serialize object names if function.name == 'SetPrivateData' and arg.name == 'pData': iid = function.args[0].name print r' if (%s == WKPDID_D3DDebugObjectName) {' % iid print r' trace::localWriter.writeString(static_cast(pData), DataSize);' print r' } else {' DllTracer.serializeArgValue(self, function, arg) print r' }' return DllTracer.serializeArgValue(self, function, arg) # Interfaces that need book-keeping for maps mapInterfaces = ( dxgi.IDXGISurface, d3d10.ID3D10Resource, ) def enumWrapperInterfaceVariables(self, interface): variables = DllTracer.enumWrapperInterfaceVariables(self, interface) # Add additional members to track maps if interface.hasBase(*self.mapInterfaces): variables += [ ('_MAP_DESC', 'm_MapDesc', None), ] if interface.hasBase(d3d11.ID3D11DeviceContext): variables += [ ('std::map< std::pair, _MAP_DESC >', 'm_MapDescs', None), ] return variables def implementWrapperInterfaceMethodBody(self, interface, base, method): if method.name in ('Map', 'Unmap'): # On D3D11 Map/Unmap is not a resource method, but a context method instead. resourceArg = method.getArgByName('pResource') if resourceArg is None: print ' _MAP_DESC & _MapDesc = m_MapDesc;' else: print ' _MAP_DESC & _MapDesc = m_MapDescs[std::pair<%s, UINT>(pResource, Subresource)];' % resourceArg.type if method.name == 'Unmap': print ' if (_MapDesc.Size && _MapDesc.pData) {' self.emit_memcpy('_MapDesc.pData', '_MapDesc.Size') print ' }' DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method) if method.name == 'Map': # NOTE: recursive locks are explicitely forbidden print ' if (SUCCEEDED(_result)) {' print ' _getMapDesc(_this, %s, _MapDesc);' % ', '.join(method.argNames()) print ' } else {' print ' _MapDesc.pData = NULL;' print ' _MapDesc.Size = 0;' print ' }' if __name__ == '__main__': print r'#define INITGUID' print print r'#include "trace_writer_local.hpp"' print r'#include "os.hpp"' print print r'#include "d3dcommonshader.hpp"' print print r'#include "d3d10imports.hpp"' print r'#include "d3d10size.hpp"' print r'#include "d3d11imports.hpp"' print r'#include "d3d11size.hpp"' print r'#include "d3d9imports.hpp" // D3DPERF_*' print api = API() api.addModule(dxgi.dxgi) api.addModule(d3d10.d3d10) api.addModule(d3d10.d3d10_1) api.addModule(d3d11.d3d11) api.addModule(d3d9.d3dperf) tracer = D3DCommonTracer() tracer.traceApi(api) tmpNnpnZF/wrappers/glxtrace.py0000664000175000017500000002040412543167424016012 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """GLX tracing generator.""" from gltrace import GlTracer from specs.stdapi import Module, API from specs.glapi import glapi from specs.glxapi import glxapi class GlxTracer(GlTracer): def isFunctionPublic(self, function): # The symbols visible in libGL.so can vary, so expose them all return True getProcAddressFunctionNames = [ "glXGetProcAddress", "glXGetProcAddressARB", ] createContextFunctionNames = [ 'glXCreateContext', 'glXCreateContextAttribsARB', 'glXCreateContextWithConfigSGIX', 'glXCreateNewContext', ] destroyContextFunctionNames = [ 'glXDestroyContext', ] makeCurrentFunctionNames = [ 'glXMakeCurrent', 'glXMakeContextCurrent', 'glXMakeCurrentReadSGI', ] def traceFunctionImplBody(self, function): if function.name in self.destroyContextFunctionNames: print ' gltrace::releaseContext((uintptr_t)ctx);' GlTracer.traceFunctionImplBody(self, function) if function.name in self.createContextFunctionNames: print ' if (_result != NULL)' print ' gltrace::createContext((uintptr_t)_result);' if function.name in self.makeCurrentFunctionNames: print ' if (_result) {' print ' if (ctx != NULL)' print ' gltrace::setContext((uintptr_t)ctx);' print ' else' print ' gltrace::clearContext();' print ' }' if function.name == 'glXBindTexImageEXT': # FIXME: glXBindTexImageEXT gets called frequently, so we should # avoid recording the same data over and over again somehow, e.g.: # - get the pixels before and after glXBindTexImageEXT, and only # emit emitFakeTexture2D when it changes # - keep a global hash of the pixels # FIXME: Handle mipmaps print r''' unsigned glx_target = 0; _glXQueryDrawable(display, drawable, GLX_TEXTURE_TARGET_EXT, &glx_target); GLenum target; switch (glx_target) { // FIXME //case GLX_TEXTURE_1D_EXT: // target = GL_TEXTURE_1D; // break; case GLX_TEXTURE_2D_EXT: target = GL_TEXTURE_2D; break; case GLX_TEXTURE_RECTANGLE_EXT: target = GL_TEXTURE_RECTANGLE; break; default: os::log("apitrace: warning: %s: unsupported GLX_TEXTURE_TARGET_EXT 0x%u\n", __FUNCTION__, glx_target); target = GL_NONE; break; } GLint level = 0; GLint internalformat = GL_NONE; _glGetTexLevelParameteriv(target, level, GL_TEXTURE_INTERNAL_FORMAT, &internalformat); // XXX: GL_TEXTURE_INTERNAL_FORMAT cannot be trusted on NVIDIA // -- it sometimes returns GL_BGRA, even though GL_BGR/BGRA is // not a valid internal format. switch (internalformat) { case GL_BGR: internalformat = GL_RGB; break; case GL_BGRA: internalformat = GL_RGBA; break; } GLint width = 0; _glGetTexLevelParameteriv(target, level, GL_TEXTURE_WIDTH, &width); GLint height = 0; _glGetTexLevelParameteriv(target, level, GL_TEXTURE_HEIGHT, &height); GLint border = 0; // XXX: We always use GL_RGBA format to read the pixels because: // - some implementations (Mesa) seem to return bogus results // for GLX_TEXTURE_FORMAT_EXT // - hardware usually stores GL_RGB with 32bpp, so it should be // faster to read/write // - it is more robust against GL_(UN)PACK_ALIGNMENT state // changes // The drawback is that traces will be slightly bigger. GLenum format = GL_RGBA; GLenum type = GL_UNSIGNED_BYTE; if (target && internalformat && height && width) { // FIXME: This assumes (UN)PACK state (in particular // GL_(UN)PACK_ROW_LENGTH) is set to its defaults. We // really should temporarily reset the state here (and emit // according fake calls) to cope when its not. At very // least we need a heads up warning that this will cause // problems. GLint alignment = 4; GLint row_stride = _align(width * 4, alignment); GLvoid * pixels = malloc(height * row_stride); _glGetTexImage(target, level, format, type, pixels); ''' self.emitFakeTexture2D() print r''' free(pixels); } ''' if __name__ == '__main__': print print '#include ' print '#include ' print print '#include "trace_writer_local.hpp"' print print '// To validate our prototypes' print '#define GL_GLEXT_PROTOTYPES' print '#define GLX_GLXEXT_PROTOTYPES' print print '#include "dlopen.hpp"' print '#include "glproc.hpp"' print '#include "glsize.hpp"' print module = Module() module.mergeModule(glxapi) module.mergeModule(glapi) api = API() api.addModule(module) tracer = GlxTracer() tracer.traceApi(api) print r''' /* * Several applications, such as Quake3, use dlopen("libGL.so.1"), but * LD_PRELOAD does not intercept symbols obtained via dlopen/dlsym, therefore * we need to intercept the dlopen() call here, and redirect to our wrapper * shared object. */ extern "C" PUBLIC void * dlopen(const char *filename, int flag) { void *handle; handle = _dlopen(filename, flag); const char * libgl_filename = getenv("TRACE_LIBGL"); if (filename && handle && !libgl_filename) { if (0) { os::log("apitrace: warning: dlopen(\"%s\", 0x%x)\n", filename, flag); } // FIXME: handle absolute paths and other versions if (strcmp(filename, "libGL.so") == 0 || strcmp(filename, "libGL.so.1") == 0) { // Use the true libGL.so handle instead of RTLD_NEXT from now on _libGlHandle = handle; // Get the file path for our shared object, and use it instead static int dummy = 0xdeedbeef; Dl_info info; if (dladdr(&dummy, &info)) { os::log("apitrace: redirecting dlopen(\"%s\", 0x%x)\n", filename, flag); handle = _dlopen(info.dli_fname, flag); } else { os::log("apitrace: warning: dladdr() failed\n"); } } } return handle; } ''' tmpNnpnZF/wrappers/README.markdown0000664000175000017500000000035312543167424016331 0ustar chrischrisThis directory contains the source for the generation of wrapper DLLs or preload shared-objects. The cmake targets have names different from the true DLLs/shared-objects to prevent collision when trying to link against the true ones. tmpNnpnZF/wrappers/cgltrace.py0000664000175000017500000001102612543167424015765 0ustar chrischris########################################################################## # # Copyright 2011 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """CGL tracing generator.""" from gltrace import GlTracer from specs.stdapi import Module, API from specs.glapi import glapi from specs.cglapi import cglapi class CglTracer(GlTracer): def isFunctionPublic(self, function): # all OpenGL symbols are visible on MacOSX return True def traceFunctionImplBody(self, function): if function.name == 'CGLReleaseContext': # Unlike other GL APIs like EGL or GLX, CGL will make the context # not current if it's the current context. print ' if (_CGLGetContextRetainCount(ctx) == 1) {' print ' if (gltrace::releaseContext((uintptr_t)ctx)) {' print ' if (_CGLGetCurrentContext() == ctx) {' print ' gltrace::clearContext();' print ' }' print ' }' print ' }' if function.name == 'CGLDestroyContext': # The same rule applies here about the as for CGLReleaseContext. print ' if (gltrace::releaseContext((uintptr_t)ctx)) {' print ' if (_CGLGetCurrentContext() == ctx) {' print ' gltrace::clearContext();' print ' }' print ' }' GlTracer.traceFunctionImplBody(self, function) if function.name == 'CGLCreateContext': print ' if (_result == kCGLNoError) {' print ' gltrace::createContext((uintptr_t)*ctx);' print ' }' if function.name == 'CGLSetCurrentContext': print ' if (_result == kCGLNoError) {' print ' if (ctx != NULL) {' print ' gltrace::setContext((uintptr_t)ctx);' print ' } else {' print ' gltrace::clearContext();' print ' }' print ' }' if function.name == 'CGLRetainContext': print ' gltrace::retainContext((uintptr_t)ctx);' if __name__ == '__main__': print print '#include ' print '#include ' print print '#include "trace_writer_local.hpp"' print print '// To validate our prototypes' print '#define GL_GLEXT_PROTOTYPES' print print '#include "glproc.hpp"' print '#include "glsize.hpp"' print module = Module() module.mergeModule(cglapi) module.mergeModule(glapi) api = API() api.addModule(module) tracer = CglTracer() tracer.traceApi(api) print r''' PUBLIC void * gll_noop = 0; __attribute__((constructor)) static void _init(void) { /* * XXX: Setting DYLD_IMAGE_SUFFIX to anything (even an empty string) * changes dlopen behavior causing our trick of symlinking a temporary file * to the real OpenGL framework to stop working, leading to infinite * recursion. */ if (getenv("DYLD_IMAGE_SUFFIX")) { os::log("error: tracing with DYLD_IMAGE_SUFFIX not supported.\n"); os::abort(); } /* * XXX: Temporary workaround for * https://github.com/apitrace/apitrace/issues/278#issuecomment-46889575 * until we have a better way of intercepting applications that * dlopen("libGL.dylib") directly. */ setenv("SDL_OPENGL_LIBRARY", "/System/Library/Frameworks/OpenGL.framework/OpenGL", 1); } ''' tmpNnpnZF/wrappers/ddraw.def0000664000175000017500000000116612543167424015414 0ustar chrischrisEXPORTS AcquireDDThreadLock CompleteCreateSysmemSurface D3DParseUnknownCommand DDGetAttachedSurfaceLcl DDInternalLock DDInternalUnlock DirectDrawCreate DirectDrawCreateClipper DirectDrawCreateEx DirectDrawEnumerateA DirectDrawEnumerateExA DirectDrawEnumerateExW DirectDrawEnumerateW DllCanUnloadNow PRIVATE DllGetClassObject PRIVATE DSoundHelp GetDDSurfaceLocal GetOLEThunkData ;GetSurfaceFromDC RegisterSpecialCase ReleaseDDThreadLock ;SetAppCompatData tmpNnpnZF/wrappers/CMakeLists.txt0000664000175000017500000003410612543167424016373 0ustar chrischris############################################################################## # API tracers if (ENABLE_STATIC_LIBGCC) add_linker_flags (-static-libgcc) endif () if (ENABLE_STATIC_LIBSTDCXX) # Unfortunately for a long time static libstdcxx didn't built with -fPIC # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=28811 include (CheckCXXSourceCompiles) set (CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) set (CMAKE_REQUIRED_LIBRARIES -shared -static-libgcc -static-libstdc++) check_cxx_source_compiles ( " #include std::string s; " STATIC_LIBSTDCXX_PIC ) unset (CMAKE_REQUIRED_LIBRARIES) unset (CMAKE_REQUIRED_FLAGS) if (STATIC_LIBSTDCXX_PIC) add_linker_flags (-static-libstdc++) endif () endif () macro (target_linker_version_script target version_script) if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID) # https://sourceware.org/binutils/docs/ld/VERSION.html set_property ( TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${version_script}" ) # XXX: Unfortunately LINK_DEPENDS is ignored in non-Makefile generators # See also http://www.cmake.org/pipermail/cmake/2010-May/037206.html add_custom_target (${target}_version_script DEPENDS ${version_script} VERBATIM ) #set_property ( # TARGET ${target} # PROPERTY LINK_DEPENDS ${version_script} #) add_dependencies (${target} ${target}_version_script) endif () endmacro () set (CMAKE_INCLUDE_CURRENT_DIR ON) include_directories ( ${CMAKE_SOURCE_DIR}/helpers ${CMAKE_BINARY_DIR}/dispatch ${CMAKE_SOURCE_DIR}/dispatch ) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_convenience_library (trace assert.cpp ) target_link_libraries (trace common ${SNAPPY_LIBRARIES} ) if (WIN32) if (MINGW) # Silence warnings about @nn suffix mismatch set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup") set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--enable-stdcall-fixup") endif () # ddraw.dll if (DirectX_D3D_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D_INCLUDE_DIR}) add_custom_command ( OUTPUT ddrawtrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ddrawtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/ddrawtrace.cpp DEPENDS ddrawtrace.py dlltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d.py ${CMAKE_SOURCE_DIR}/specs/d3dtypes.py ${CMAKE_SOURCE_DIR}/specs/d3dcaps.py ${CMAKE_SOURCE_DIR}/specs/ddraw.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (ddrawtrace MODULE ddraw.def ddrawtrace.cpp) target_link_libraries (ddrawtrace trace ) set_target_properties (ddrawtrace PROPERTIES PREFIX "" OUTPUT_NAME ddraw ) install (TARGETS ddrawtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (ddrawtrace DESTINATION ${WRAPPER_INSTALL_DIR}) endif () # d3d8.dll if (DirectX_D3D8_INCLUDE_FOUND AND DirectX_D3D9_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D9_INCLUDE_DIR} ${DirectX_D3D8_INCLUDE_DIR}) add_custom_command ( OUTPUT d3d8trace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d8trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d8trace.cpp DEPENDS d3d8trace.py dlltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d8.py ${CMAKE_SOURCE_DIR}/specs/d3d8types.py ${CMAKE_SOURCE_DIR}/specs/d3d8caps.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (d3d8trace MODULE d3d8.def d3d8trace.cpp d3d9shader.cpp ) target_link_libraries (d3d8trace d3dhelpers trace ) set_target_properties (d3d8trace PROPERTIES PREFIX "" OUTPUT_NAME d3d8 ) install (TARGETS d3d8trace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (d3d8trace DESTINATION ${WRAPPER_INSTALL_DIR}) endif () # d3d9.dll if (DirectX_D3D9_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D9_INCLUDE_DIR}) add_custom_command ( OUTPUT d3d9trace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d9trace.cpp DEPENDS d3d9trace.py dlltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d9.py ${CMAKE_SOURCE_DIR}/specs/d3d9types.py ${CMAKE_SOURCE_DIR}/specs/d3d9caps.py ${CMAKE_SOURCE_DIR}/specs/d3d9dxva2.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (d3d9trace MODULE d3d9.def d3d9trace.cpp d3d9shader.cpp ) target_link_libraries (d3d9trace d3dhelpers trace ) set_target_properties (d3d9trace PROPERTIES PREFIX "" OUTPUT_NAME d3d9 ) install (TARGETS d3d9trace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (d3d9trace DESTINATION ${WRAPPER_INSTALL_DIR}) endif () # dxgi.dll, d3d10.dll, d3d10_1.dll, d3d11.dll if (DirectX_D3D11_2_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D11_2_INCLUDE_DIR}) add_custom_command ( OUTPUT dxgitrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dxgitrace.py > ${CMAKE_CURRENT_BINARY_DIR}/dxgitrace.cpp DEPENDS dxgitrace.py dlltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d11.py ${CMAKE_SOURCE_DIR}/specs/d3d11sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3d10.py ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py ${CMAKE_SOURCE_DIR}/specs/dxgi.py ${CMAKE_SOURCE_DIR}/specs/d3d9.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (dxgitrace MODULE dxgitrace.def dxgitrace.cpp d3dcommonshader.cpp ) target_link_libraries (dxgitrace d3dhelpers trace ) set_target_properties (dxgitrace PROPERTIES PREFIX "" ) install (TARGETS dxgitrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (dxgitrace DESTINATION ${WRAPPER_INSTALL_DIR}) endif () # d2d1.dll, dwrite.dll if (DirectX_D2D1_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D2D1_INCLUDE_DIR}) add_custom_command ( OUTPUT d2d1trace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d2d1trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d2d1trace.cpp DEPENDS d2d1trace.py trace.py ${CMAKE_SOURCE_DIR}/specs/d2d1.py ${CMAKE_SOURCE_DIR}/specs/d2d1.py ${CMAKE_SOURCE_DIR}/specs/d2dbasetypes.py ${CMAKE_SOURCE_DIR}/specs/d2derr.py ${CMAKE_SOURCE_DIR}/specs/dwrite.py ${CMAKE_SOURCE_DIR}/specs/dcommon.py ${CMAKE_SOURCE_DIR}/specs/dxgi.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (d2d1trace MODULE d2d1trace.def d2d1trace.cpp) target_link_libraries (d2d1trace trace ) set_target_properties (d2d1trace PROPERTIES PREFIX "" ) install (TARGETS d2d1trace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (d2d1trace DESTINATION ${WRAPPER_INSTALL_DIR}) endif (DirectX_D2D1_INCLUDE_FOUND) # opengl32.dll add_custom_command ( OUTPUT wgltrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/wgltrace.cpp DEPENDS wgltrace.py gltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/wglapi.py ${CMAKE_SOURCE_DIR}/specs/wglenum.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/glparams.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (wgltrace MODULE opengl32.def wgltrace.cpp glcaps.cpp config.cpp gltrace_state.cpp ) add_dependencies (wgltrace glproc) target_link_libraries (wgltrace glhelpers glproc_gl trace ) set_target_properties (wgltrace PROPERTIES PREFIX "" OUTPUT_NAME opengl32 ) install (TARGETS wgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) install_pdb (wgltrace DESTINATION ${WRAPPER_INSTALL_DIR}) elseif (APPLE) # OpenGL framework add_custom_command ( OUTPUT cgltrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/cgltrace.cpp DEPENDS cgltrace.py gltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/cglapi.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/glparams.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (cgltrace SHARED cgltrace.cpp glcaps.cpp config.cpp gltrace_state.cpp ) add_dependencies (cgltrace glproc) set_target_properties (cgltrace PROPERTIES # OpenGL framework name OUTPUT_NAME "OpenGL" # Mac framework FRAMEWORK true # Specificy the version and reexport GLU symbols LINK_FLAGS "-compatibility_version 1 -current_version 1.0.0 -Wl,-reexport_library,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib" ) target_link_libraries (cgltrace glhelpers glproc_gl trace ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) install (TARGETS cgltrace FRAMEWORK DESTINATION ${WRAPPER_INSTALL_DIR}) elseif (X11_FOUND) # libGL.so add_custom_command ( OUTPUT glxtrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glxtrace.cpp DEPENDS glxtrace.py gltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/glxapi.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/glparams.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (glxtrace SHARED glxtrace.cpp glcaps.cpp config.cpp gltrace_state.cpp dlsym.cpp ) add_dependencies (glxtrace glproc) set_target_properties (glxtrace PROPERTIES # avoid the default "lib" prefix PREFIX "" # Prevent symbol relocations internal to our wrapper library to be # overwritten by the application. And fail if there are missing # symbols. LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions -Wl,-z,defs" ) target_link_libraries (glxtrace glhelpers glproc_gl trace ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) target_linker_version_script (glxtrace ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.version) install (TARGETS glxtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) endif () if (ENABLE_EGL AND NOT WIN32 AND NOT APPLE) # libEGL.so/libGL.so add_custom_command ( OUTPUT egltrace.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/egltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/egltrace.cpp DEPENDS egltrace.py gltrace.py trace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/eglapi.py ${CMAKE_SOURCE_DIR}/specs/eglenum.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/glparams.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (egltrace SHARED egltrace.cpp glcaps.cpp config.cpp gltrace_state.cpp dlsym.cpp ) add_dependencies (egltrace glproc) set_target_properties (egltrace PROPERTIES # avoid the default "lib" prefix PREFIX "" # Prevent symbol relocations internal to our wrapper library to be # overwritten by the application. And fail if there are missing # symbols. LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions -Wl,-z,defs" ) target_link_libraries (egltrace glhelpers glproc_egl trace ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) target_linker_version_script (egltrace ${CMAKE_CURRENT_SOURCE_DIR}/egltrace.version) install (TARGETS egltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR}) endif () tmpNnpnZF/wrappers/egltrace.py0000664000175000017500000002231212543167424015767 0ustar chrischris########################################################################## # # Copyright 2011 LunarG, Inc. # All Rights Reserved. # # Based on glxtrace.py, which has # # Copyright 2011 Jose Fonseca # Copyright 2008-2010 VMware, Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """EGL tracing generator.""" from gltrace import GlTracer from specs.stdapi import Module, API from specs.glapi import glapi from specs.eglapi import eglapi class EglTracer(GlTracer): def isFunctionPublic(self, function): # The symbols visible in libEGL.so can vary, so expose them all return True getProcAddressFunctionNames = [ "eglGetProcAddress", ] def traceFunctionImplBody(self, function): GlTracer.traceFunctionImplBody(self, function) if function.name == 'eglCreateContext': print ' if (_result != EGL_NO_CONTEXT)' print ' gltrace::createContext((uintptr_t)_result);' if function.name == 'eglMakeCurrent': print r' if (_result) {' print r' // update the profile' print r' if (ctx != EGL_NO_CONTEXT) {' print r' gltrace::setContext((uintptr_t)ctx);' print r' gltrace::Context *tr = gltrace::getContext();' print r' EGLint api = EGL_OPENGL_ES_API;' print r' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_TYPE, &api);' print r' if (api == EGL_OPENGL_API) {' print r' assert(tr->profile.api == glprofile::API_GL);' print r' } else if (api == EGL_OPENGL_ES_API) {' print r' EGLint client_version = 1;' print r' _eglQueryContext(dpy, ctx, EGL_CONTEXT_CLIENT_VERSION, &client_version);' print r' if (tr->profile.api != glprofile::API_GLES ||' print r' tr->profile.major < client_version) {' print r' std::string version = tr->profile.str();' print r' os::log("apitrace: warning: eglMakeCurrent: expected OpenGL ES %i.x context, but got %s\n",' print r' client_version, version.c_str());' print r' }' print r' } else {' print r' assert(0);' print r' }' print r' } else {' print r' gltrace::clearContext();' print r' }' print r' }' if function.name == 'eglDestroyContext': print ' if (_result) {' print ' gltrace::releaseContext((uintptr_t)ctx);' print ' }' if function.name == 'glEGLImageTargetTexture2DOES': print ' image_info *info = _EGLImageKHR_get_image_info(target, image);' print ' if (info) {' print ' GLint level = 0;' print ' GLint internalformat = info->internalformat;' print ' GLsizei width = info->width;' print ' GLsizei height = info->height;' print ' GLint border = 0;' print ' GLenum format = info->format;' print ' GLenum type = info->type;' print ' const GLvoid * pixels = info->pixels;' self.emitFakeTexture2D() print ' _EGLImageKHR_free_image_info(info);' print ' }' if __name__ == '__main__': print '#include ' print '#include ' print print '#include "trace_writer_local.hpp"' print print '// To validate our prototypes' print '#define GL_GLEXT_PROTOTYPES' print '#define EGL_EGLEXT_PROTOTYPES' print print '#include "dlopen.hpp"' print '#include "glproc.hpp"' print '#include "glsize.hpp"' print '#include "eglsize.hpp"' print module = Module() module.mergeModule(eglapi) module.mergeModule(glapi) api = API() api.addModule(module) tracer = EglTracer() tracer.traceApi(api) print r''' /* * Several applications, such as Quake3, use dlopen("libGL.so.1"), but * LD_PRELOAD does not intercept symbols obtained via dlopen/dlsym, therefore * we need to intercept the dlopen() call here, and redirect to our wrapper * shared object. */ extern "C" PUBLIC void * dlopen(const char *filename, int flag) { bool intercept = false; if (filename) { intercept = strcmp(filename, "libEGL.so") == 0 || strcmp(filename, "libEGL.so.1") == 0 || strcmp(filename, "libGLESv1_CM.so") == 0 || strcmp(filename, "libGLESv1_CM.so.1") == 0 || strcmp(filename, "libGLESv2.so") == 0 || strcmp(filename, "libGLESv2.so.2") == 0 || strcmp(filename, "libGL.so") == 0 || strcmp(filename, "libGL.so.1") == 0; if (intercept) { os::log("apitrace: redirecting dlopen(\"%s\", 0x%x)\n", filename, flag); /* The current dispatch implementation relies on core entry-points to be globally available, so force this. * * TODO: A better approach would be note down the entry points here and * use them latter. Another alternative would be to reopen the library * with RTLD_NOLOAD | RTLD_GLOBAL. */ flag &= ~RTLD_LOCAL; flag |= RTLD_GLOBAL; } } void *handle = _dlopen(filename, flag); if (intercept) { // Get the file path for our shared object, and use it instead static int dummy = 0xdeedbeef; Dl_info info; if (dladdr(&dummy, &info)) { handle = _dlopen(info.dli_fname, flag); } else { os::log("apitrace: warning: dladdr() failed\n"); } // SDL will skip dlopen'ing libEGL.so after it spots EGL symbols on our // wrapper, so force loading it here. // (https://github.com/apitrace/apitrace/issues/291#issuecomment-59734022) if (strcmp(filename, "libEGL.so") != 0 && strcmp(filename, "libEGL.so.1") != 0) { _dlopen("libEGL.so.1", RTLD_GLOBAL | RTLD_LAZY); } } return handle; } #if defined(ANDROID) /* * Undocumented Android extensions used by Dalvik which have bound information * passed to it, but is currently ignored, so probably unreliable. * * See: * https://github.com/android/platform_frameworks_base/blob/master/opengl/libs/GLES_CM/gl.cpp */ extern "C" PUBLIC void APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { (void)count; glColorPointer(size, type, stride, pointer); } extern "C" PUBLIC void APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { (void)count; glNormalPointer(type, stride, pointer); } extern "C" PUBLIC void APIENTRY glTexCoordPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { (void)count; glTexCoordPointer(size, type, stride, pointer); } extern "C" PUBLIC void APIENTRY glVertexPointerBounds(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer, GLsizei count) { (void)count; glVertexPointer(size, type, stride, pointer); } extern "C" PUBLIC void GL_APIENTRY glPointSizePointerOESBounds(GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { (void)count; glPointSizePointerOES(type, stride, pointer); } extern "C" PUBLIC void APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { (void)count; glMatrixIndexPointerOES(size, type, stride, pointer); } extern "C" PUBLIC void APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer, GLsizei count) { (void)count; glWeightPointerOES(size, type, stride, pointer); } /* * There is also a glVertexAttribPointerBounds in * https://github.com/android/platform_frameworks_base/blob/master/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp * but is it not exported. */ #endif /* ANDROID */ ''' tmpNnpnZF/wrappers/d3d8trace.py0000664000175000017500000000650612543167424015771 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dlltrace import DllTracer from specs.stdapi import API from specs.d3d8 import d3d8, D3DSHADER8 class D3D8Tracer(DllTracer): def serializeArgValue(self, function, arg): # Dump shaders as strings if arg.type is D3DSHADER8: print ' DumpShader(trace::localWriter, %s);' % (arg.name) return DllTracer.serializeArgValue(self, function, arg) def enumWrapperInterfaceVariables(self, interface): variables = DllTracer.enumWrapperInterfaceVariables(self, interface) # Add additional members to track locks if interface.getMethodByName('Lock') is not None or \ interface.getMethodByName('LockRect') is not None or \ interface.getMethodByName('LockBox') is not None: variables += [ ('size_t', '_MappedSize', '0'), ('VOID *', 'm_pbData', '0'), ] return variables def implementWrapperInterfaceMethodBody(self, interface, base, method): if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'): print ' if (_MappedSize && m_pbData) {' self.emit_memcpy('(LPBYTE)m_pbData', '_MappedSize') print ' }' DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method) if method.name in ('Lock', 'LockRect', 'LockBox'): # FIXME: handle recursive locks print ' if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {' print ' _getMapInfo(_this, %s, m_pbData, _MappedSize);' % ', '.join(method.argNames()[:-1]) print ' } else {' print ' m_pbData = NULL;' print ' _MappedSize = 0;' print ' }' if __name__ == '__main__': print '#define INITGUID' print print '#include "trace_writer_local.hpp"' print '#include "os.hpp"' print print '#include "d3d8imports.hpp"' print '#include "d3d8size.hpp"' print '#include "d3d9shader.hpp"' print api = API() api.addModule(d3d8) tracer = D3D8Tracer() tracer.traceApi(api) tmpNnpnZF/wrappers/d3d8.def0000664000175000017500000000006312543167424015050 0ustar chrischrisLIBRARY "d3d8" EXPORTS Direct3DCreate8 @1 tmpNnpnZF/wrappers/opengl32.def0000664000175000017500000001435212543167424015745 0ustar chrischrisLIBRARY opengl32 EXPORTS ;GlmfBeginGlsBlock ;GlmfCloseMetaFile ;GlmfEndGlsBlock ;GlmfEndPlayback ;GlmfInitPlayback ;GlmfPlayGlsRecord glAccum glAlphaFunc glAreTexturesResident glArrayElement glBegin glBindTexture glBitmap glBlendFunc glCallList glCallLists glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane glColor3b glColor3bv glColor3d glColor3dv glColor3f glColor3fv glColor3i glColor3iv glColor3s glColor3sv glColor3ub glColor3ubv glColor3ui glColor3uiv glColor3us glColor3usv glColor4b glColor4bv glColor4d glColor4dv glColor4f glColor4fv glColor4i glColor4iv glColor4s glColor4sv glColor4ub glColor4ubv glColor4ui glColor4uiv glColor4us glColor4usv glColorMask glColorMaterial glColorPointer glCopyPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTexSubImage2D glCullFace ;glDebugEntry glDeleteLists glDeleteTextures glDepthFunc glDepthMask glDepthRange glDisable glDisableClientState glDrawArrays glDrawBuffer glDrawElements glDrawPixels glEdgeFlag glEdgeFlagPointer glEdgeFlagv glEnable glEnableClientState glEnd glEndList glEvalCoord1d glEvalCoord1dv glEvalCoord1f glEvalCoord1fv glEvalCoord2d glEvalCoord2dv glEvalCoord2f glEvalCoord2fv glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer glFinish glFlush glFogf glFogfv glFogi glFogiv glFrontFace glFrustum glGenLists glGenTextures glGetBooleanv glGetClipPlane glGetDoublev glGetError glGetFloatv glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPointerv glGetPolygonStipple glGetString glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glHint glIndexMask glIndexPointer glIndexd glIndexdv glIndexf glIndexfv glIndexi glIndexiv glIndexs glIndexsv glIndexub glIndexubv glInitNames glInterleavedArrays glIsEnabled glIsList glIsTexture glLightModelf glLightModelfv glLightModeli glLightModeliv glLightf glLightfv glLighti glLightiv glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd glLoadMatrixf glLoadName glLogicOp glMap1d glMap1f glMap2d glMap2f glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv glMateriali glMaterialiv glMatrixMode glMultMatrixd glMultMatrixf glNewList glNormal3b glNormal3bv glNormal3d glNormal3dv glNormal3f glNormal3fv glNormal3i glNormal3iv glNormal3s glNormal3sv glNormalPointer glOrtho glPassThrough glPixelMapfv glPixelMapuiv glPixelMapusv glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffset glPolygonStipple glPopAttrib glPopClientAttrib glPopMatrix glPopName glPrioritizeTextures glPushAttrib glPushClientAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv glRasterPos2f glRasterPos2fv glRasterPos2i glRasterPos2iv glRasterPos2s glRasterPos2sv glRasterPos3d glRasterPos3dv glRasterPos3f glRasterPos3fv glRasterPos3i glRasterPos3iv glRasterPos3s glRasterPos3sv glRasterPos4d glRasterPos4dv glRasterPos4f glRasterPos4fv glRasterPos4i glRasterPos4iv glRasterPos4s glRasterPos4sv glReadBuffer glReadPixels glRectd glRectdv glRectf glRectfv glRecti glRectiv glRects glRectsv glRenderMode glRotated glRotatef glScaled glScalef glScissor glSelectBuffer glShadeModel glStencilFunc glStencilMask glStencilOp glTexCoord1d glTexCoord1dv glTexCoord1f glTexCoord1fv glTexCoord1i glTexCoord1iv glTexCoord1s glTexCoord1sv glTexCoord2d glTexCoord2dv glTexCoord2f glTexCoord2fv glTexCoord2i glTexCoord2iv glTexCoord2s glTexCoord2sv glTexCoord3d glTexCoord3dv glTexCoord3f glTexCoord3fv glTexCoord3i glTexCoord3iv glTexCoord3s glTexCoord3sv glTexCoord4d glTexCoord4dv glTexCoord4f glTexCoord4fv glTexCoord4i glTexCoord4iv glTexCoord4s glTexCoord4sv glTexCoordPointer glTexEnvf glTexEnvfv glTexEnvi glTexEnviv glTexGend glTexGendv glTexGenf glTexGenfv glTexGeni glTexGeniv glTexImage1D glTexImage2D glTexParameterf glTexParameterfv glTexParameteri glTexParameteriv glTexSubImage1D glTexSubImage2D glTranslated glTranslatef glVertex2d glVertex2dv glVertex2f glVertex2fv glVertex2i glVertex2iv glVertex2s glVertex2sv glVertex3d glVertex3dv glVertex3f glVertex3fv glVertex3i glVertex3iv glVertex3s glVertex3sv glVertex4d glVertex4dv glVertex4f glVertex4fv glVertex4i glVertex4iv glVertex4s glVertex4sv glVertexPointer glViewport wglChoosePixelFormat wglCopyContext wglCreateContext wglCreateLayerContext wglDeleteContext wglDescribeLayerPlane wglDescribePixelFormat wglGetCurrentContext wglGetCurrentDC wglGetDefaultProcAddress wglGetLayerPaletteEntries wglGetPixelFormat wglGetProcAddress wglMakeCurrent wglRealizeLayerPalette wglSetLayerPaletteEntries wglSetPixelFormat wglShareLists wglSwapBuffers wglSwapLayerBuffers wglSwapMultipleBuffers wglUseFontBitmapsA wglUseFontBitmapsW wglUseFontOutlinesA wglUseFontOutlinesW tmpNnpnZF/wrappers/config.hpp0000664000175000017500000000420512543167424015606 0ustar chrischris/************************************************************************** * * Copyright 2015 Brian Paul * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "glimports.hpp" #include namespace gltrace { struct configuration { int versionMajor; int versionMinor; std::string version; std::string vendor; std::string extensions; std::string renderer; std::string glslVersion; GLbitfield profileMask; int maxTextureSize; // 2D texture size int numExtensions; char **extensionsList; inline configuration() : versionMajor(0), versionMinor(0), profileMask(0), maxTextureSize(0), numExtensions(0), extensionsList(0) {} }; const configuration * getConfig(void); const GLubyte * getConfigString(const configuration *config, GLenum pname); const GLubyte * getConfigStringi(const configuration *config, GLenum pname, GLuint index); GLint getConfigInteger(const configuration *config, GLenum pname); } /* namespace gltrace */ tmpNnpnZF/wrappers/d2d1trace.def0000664000175000017500000000024612543167424016062 0ustar chrischrisEXPORTS D2D1CreateFactory @1 D2D1MakeRotateMatrix @2 D2D1MakeSkewMatrix @3 D2D1IsMatrixInvertible @4 D2D1InvertMatrix @5 DWriteCreateFactory tmpNnpnZF/wrappers/glxtrace.version0000664000175000017500000000014712543167424017051 0ustar chrischris{ global: _init; _fini; gl[A-Z]*; dlopen; local: *; }; tmpNnpnZF/wrappers/egltrace.version0000664000175000017500000000017212543167424017024 0ustar chrischris{ global: _init; _fini; egl[A-Z]*; gl[A-Z]*; dlopen; local: *; }; tmpNnpnZF/wrappers/config.cpp0000664000175000017500000002726212543167424015611 0ustar chrischris/************************************************************************** * * Copyright 2015 Brian Paul * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Configuration file support. * * Used to override glGetString/Integer/etc queries. */ /* * The format of the file is extremely simple. An example is given in * docs/USAGE.markdown . * * Future improvements: * - An option to simply turn off specific extensions * */ #include #include #include #include #include #include "os.hpp" #include "os_string.hpp" #include "config.hpp" namespace gltrace { /** * Parse the conf->extensions string to generate an array of individual * extension strings which can be queried with glGetStringi(). */ static void create_extensions_list(configuration *conf) { // count extensions const char *ext = conf->extensions.c_str(); conf->numExtensions = 0; while (1) { ext = strstr(ext, "GL_"); if (!ext) break; conf->numExtensions++; // advance extensions pointer while (*ext && *ext != ' ') ext++; } conf->extensionsList = (char **) malloc(conf->numExtensions * sizeof(char *)); // extract individual extension names int count = 0; const char *extStart = conf->extensions.c_str(), *extEnd; while (1) { extStart = strstr(extStart, "GL_"); if (!extStart) break; // find end of the name extEnd = extStart; while (*extEnd && *extEnd != ' ') extEnd++; // copy extension string name int extLen = extEnd - extStart; conf->extensionsList[count] = (char *) malloc(extLen + 1); memcpy(conf->extensionsList[count], extStart, extLen); conf->extensionsList[count][extLen] = 0; count++; // advance to next extStart = extEnd; } assert(count == conf->numExtensions); } static bool matchKeyword(const char *string, const char *keyword) { if (strncmp(string, keyword, strlen(keyword)) == 0) return true; else return false; } static char buffer[10*1000]; static char getChar(FILE *f, const char **buf) { if (feof(f)) return 0; if (buf[0][0]) { char c = buf[0][0]; (*buf)++; return c; } while (1) { // read another line *buf = fgets(buffer, sizeof(buffer), f); if (!buf || !buf[0]) { return 0; } else if (buf[0][0]) { char c = buf[0][0]; (*buf)++; return c; } else if (feof(f)) { return 0; } } } // Scan 'buf' for a string value of the form: "string" (double-quoted string) // Return the string in newly malloc'd memory static std::string stringValue(FILE *f, const char *buf) { std::string result; char c; // look for = do { c = getChar(f, &buf); } while (c && c != '='); if (!c) return result; // look for opening " do { c = getChar(f, &buf); } while (c && c != '\"'); if (!c) return result; // scan characters in the string while (1) { c = getChar(f, &buf); if (!c) { std::cerr << "Error: didn't find closing \" in config file!\n"; return result; } if (c == '\n') { // convert newlines inside a string into spaces c = ' '; } if (c == '\"') { // end of string return result; } else { result.push_back(c); } } } // Scan integer value of the form: 12345 static int intValue(FILE *f, const char *buf) { char valBuf[100]; int valLen = 0; char c; // look for = do { c = getChar(f, &buf); } while (c && c != '='); if (!c) return 0; // scan digits while (1) { c = getChar(f, &buf); if (isdigit(c)) { valBuf[valLen++] = c; } else if (c != ' ') { break; } } valBuf[valLen] = 0; return atoi(valBuf); } static void parse_file(FILE *f, configuration *conf) { do { // read a line char *b = fgets(buffer, sizeof(buffer), f); if (!b) { break; } else if (b[0] == '#') { // comment - skip line } else if (b[0] == '\n') { // empty line } else if (matchKeyword(b, "GL_VENDOR")) { conf->vendor = stringValue(f, b + 10); } else if (matchKeyword(b, "GL_VERSION")) { conf->version = stringValue(f, b + 11); } else if (matchKeyword(b, "GL_EXTENSIONS")) { conf->extensions = stringValue(f, b + 14); } else if (matchKeyword(b, "GL_RENDERER")) { conf->renderer = stringValue(f, b + 12); } else if (matchKeyword(b, "GL_SHADING_LANGUAGE_VERSION")) { conf->glslVersion = stringValue(f, b + 28); } else if (matchKeyword(b, "GL_MAX_TEXTURE_SIZE")) { conf->maxTextureSize = intValue(f, b + 20); } else if (matchKeyword(b, "GL_MAJOR_VERSION")) { conf->versionMajor = intValue(f, b + 17); } else if (matchKeyword(b, "GL_MINOR_VERSION")) { conf->versionMinor = intValue(f, b + 17); } else if (matchKeyword(b, "GL_CONTEXT_PROFILE_MASK")) { std::string maskStr = stringValue(f, b + 24); conf->profileMask = 0x0; if (maskStr.find("GL_CONTEXT_CORE_PROFILE_BIT") != std::string::npos) conf->profileMask |= GL_CONTEXT_CORE_PROFILE_BIT; if (maskStr.find("GL_CONTEXT_COMPATIBILITY_PROFILE_BIT") != std::string::npos) conf->profileMask |= GL_CONTEXT_COMPATIBILITY_PROFILE_BIT; } else { std::cerr << "Unexpected config variable: " << b << ".\n"; break; } } while (!feof(f)); if (!conf->version.empty()) { // String version was specified, compute integer major/minor versions conf->versionMajor = conf->version[0] - '0'; conf->versionMinor = conf->version[2] - '0'; assert(conf->versionMajor >= 1 && conf->versionMajor <= 4); assert(conf->versionMinor >= 0 && conf->versionMinor <= 9); } else if (conf->versionMajor) { // Numeric version was specified, update the string if (!conf->version.empty()) { // if version string was specified too, override it conf->version[0] = '0' + conf->versionMajor; conf->version[2] = '0' + conf->versionMinor; } else { // allocate new version string conf->version.clear(); conf->version.push_back('0' + conf->versionMajor); conf->version.push_back('.'); conf->version.push_back('0' + conf->versionMinor); } } if (!conf->extensions.empty()) { create_extensions_list(conf); } } // Read the given configuration file and return a new configuration object. // Return NULL if anything goes wrong static configuration * readConfigFile(const char *filename) { #ifndef NDEBUG os::log("apitrace: attempting to read configuration file: %s\n", filename); #endif FILE *f = fopen(filename, "r"); if (!f) return NULL; os::log("apitrace: using configuration file: %s\n", filename); configuration *conf = new configuration; parse_file(f, conf); fclose(f); if (1) { // debug os::log("apitrace: config GL_VENDOR = %s\n", conf->vendor.c_str()); os::log("apitrace: config GL_VERSION = %s\n", conf->version.c_str()); os::log("apitrace: config GL_EXTENSIONS = %s\n", conf->extensions.c_str()); os::log("apitrace: config GL_NUM_EXTENSIONS = %d\n", conf->numExtensions); os::log("apitrace: config GL_RENDERER = %s\n", conf->renderer.c_str()); os::log("apitrace: config GL_SHADING_LANGUAGE_VERSION = %s\n", conf->glslVersion.c_str()); os::log("apitrace: config GL_MAX_TEXTURE_SIZE = %d\n", conf->maxTextureSize); os::log("apitrace: config GL_MAJOR_VERSION = %d\n", conf->versionMajor); os::log("apitrace: config GL_MINOR_VERSION = %d\n", conf->versionMinor); os::log("apitrace: config GL_CONTEXT_PROFILE_MASK = 0x%x\n", conf->profileMask); } return conf; } // Get pointer to configuration object or NULL if there was no config file. const configuration * getConfig(void) { static bool configured = false; static configuration *config = NULL; if (!configured) { os::String configPath; const char *envConfigPath = getenv("GLTRACE_CONF"); if (envConfigPath) { configPath = envConfigPath; } else { configPath = os::getConfigDir(); configPath.join("apitrace"); configPath.join("gltrace.conf"); } config = gltrace::readConfigFile(configPath); configured = true; } return config; } // Return the named string value in the config object, or NULL. const GLubyte * getConfigString(const configuration *config, GLenum pname) { if (!config) return NULL; switch (pname) { case GL_VERSION: return (const GLubyte *) config->version.c_str(); case GL_VENDOR: return (const GLubyte *) config->vendor.c_str(); case GL_EXTENSIONS: return (const GLubyte *) config->extensions.c_str(); case GL_RENDERER: return (const GLubyte *) config->renderer.c_str(); case GL_SHADING_LANGUAGE_VERSION: return (const GLubyte *) config->glslVersion.c_str(); default: return NULL; } } // Return named indexed string value from config object, or NULL. const GLubyte * getConfigStringi(const configuration *config, GLenum pname, GLuint index) { if (!config || pname != GL_EXTENSIONS || config->extensions.empty() || index >= config->numExtensions) { return NULL; } return (const GLubyte *) config->extensionsList[index]; } // Return named integer value from config object, or 0. GLint getConfigInteger(const configuration *config, GLenum pname) { if (!config) return 0; switch (pname) { case GL_MAJOR_VERSION: return config->versionMajor; case GL_MINOR_VERSION: return config->versionMinor; case GL_CONTEXT_PROFILE_MASK: return config->profileMask; case GL_MAX_TEXTURE_SIZE: return config->maxTextureSize; case GL_NUM_EXTENSIONS: return config->numExtensions; default: return 0; } } } /* namespace gltrace */ tmpNnpnZF/wrappers/.gitignore0000664000175000017500000000022412543167424015615 0ustar chrischriscgltrace.cpp d2d1trace.cpp d3d8trace.cpp d3d9trace.cpp dxgitrace.cpp ddrawtrace.cpp dlltrace.cpp egltrace.cpp gltrace.cpp glxtrace.cpp wgltrace.cpp tmpNnpnZF/wrappers/d3d9.def0000664000175000017500000000041012543167424015045 0ustar chrischrisLIBRARY "d3d9" EXPORTS Direct3DCreate9 Direct3DCreate9Ex D3DPERF_BeginEvent D3DPERF_EndEvent D3DPERF_SetMarker D3DPERF_SetRegion D3DPERF_QueryRepeatFrame D3DPERF_SetOptions D3DPERF_GetStatus tmpNnpnZF/wrappers/d3d9trace.py0000664000175000017500000001230012543167424015757 0ustar chrischris########################################################################## # # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dlltrace import DllTracer from specs.stdapi import API, Pointer, ObjPointer from specs.d3d9 import d3d9, D3DSHADER9, IDirect3DSwapChain9Ex, d3dperf import specs.d3d9dxva2 class D3D9Tracer(DllTracer): def serializeArgValue(self, function, arg): # Dump shaders as strings if arg.type is D3DSHADER9: print ' DumpShader(trace::localWriter, %s);' % (arg.name) return DllTracer.serializeArgValue(self, function, arg) def wrapArg(self, function, arg): # Correctly handle the wrapping of IDirect3DSwapChain9Ex objects if function.name in ('GetSwapChain', 'CreateAdditionalSwapChain') \ and self.interface.name == 'IDirect3DDevice9Ex' \ and arg.name == 'pSwapChain': self.wrapValue(Pointer(ObjPointer(IDirect3DSwapChain9Ex)), '((IDirect3DSwapChain9Ex**)pSwapChain)') return DllTracer.wrapArg(self, function, arg) def enumWrapperInterfaceVariables(self, interface): variables = DllTracer.enumWrapperInterfaceVariables(self, interface) # Add additional members to track locks if interface.getMethodByName('Lock') is not None or \ interface.getMethodByName('LockRect') is not None or \ interface.getMethodByName('LockBox') is not None: if interface.name in ['IDirect3DTexture9']: variables += [ ('std::map >', '_MappedData', 'std::map >()'), ] else: variables += [ ('size_t', '_MappedSize', '0'), ('VOID *', 'm_pbData', '0'), ] return variables def implementWrapperInterfaceMethodBody(self, interface, base, method): if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'): if interface.name in ['IDirect3DTexture9']: print ' std::map >::iterator it = _MappedData.find(Level);' print ' if (it != _MappedData.end()) {' self.emit_memcpy('(LPBYTE)it->second.second', 'it->second.first') print ' _MappedData.erase(it);' print ' }' else: print ' if (_MappedSize && m_pbData) {' self.emit_memcpy('(LPBYTE)m_pbData', '_MappedSize') print ' }' DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method) if method.name in ('Lock', 'LockRect', 'LockBox'): if interface.name in ['IDirect3DTexture9']: print ' if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {' print ' size_t mappedSize;' print ' VOID * pbData;' print ' _getMapInfo(_this, %s, pbData, mappedSize);' % ', '.join(method.argNames()[:-1]) print ' _MappedData[Level] = std::make_pair(mappedSize, pbData);' print ' } else {' print ' _MappedData.erase(Level);' print ' }' else: # FIXME: handle recursive locks print ' if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {' print ' _getMapInfo(_this, %s, m_pbData, _MappedSize);' % ', '.join(method.argNames()[:-1]) print ' } else {' print ' m_pbData = NULL;' print ' _MappedSize = 0;' print ' }' if __name__ == '__main__': print '#define INITGUID' print print '#include "trace_writer_local.hpp"' print '#include "os.hpp"' print print '#include "d3d9imports.hpp"' print '#include "d3d9size.hpp"' print '#include "d3d9shader.hpp"' print '#include "dxvaint.h"' print d3d9.mergeModule(d3dperf) api = API() api.addModule(d3d9) tracer = D3D9Tracer() tracer.traceApi(api) tmpNnpnZF/wrappers/d3dcommonshader.hpp0000664000175000017500000000271612543167424017420 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "trace_writer.hpp" void DumpShader(trace::Writer &writer, const void *pShaderBytecode, SIZE_T BytecodeLength); tmpNnpnZF/wrappers/glcaps.cpp0000664000175000017500000002041512543167424015606 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Manipulation of GL extensions. * * So far we insert GREMEDY extensions, but in the future we could also clamp * the GL extensions to core GL versions here. */ #include #include #include #include #include #include #include "glproc.hpp" #include "gltrace.hpp" #include "os.hpp" #include "config.hpp" namespace gltrace { typedef std::map ExtensionsMap; // Cache of the translated extensions strings static ExtensionsMap extensionsMap; // Additional extensions to be advertised static const char * extraExtension_stringsFull[] = { "GL_GREMEDY_string_marker", "GL_GREMEDY_frame_terminator", "GL_ARB_debug_output", "GL_AMD_debug_output", "GL_KHR_debug", "GL_EXT_debug_marker", "GL_EXT_debug_label", "GL_VMWX_map_buffer_debug", }; static const char * extraExtension_stringsES[] = { "GL_KHR_debug", "GL_EXT_debug_marker", "GL_EXT_debug_label", }; // Description of additional extensions we want to advertise struct ExtensionsDesc { unsigned numStrings; const char **strings; }; #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) const struct ExtensionsDesc extraExtensionsFull = { ARRAY_SIZE(extraExtension_stringsFull), extraExtension_stringsFull }; const struct ExtensionsDesc extraExtensionsES = { ARRAY_SIZE(extraExtension_stringsES), extraExtension_stringsES }; const struct ExtensionsDesc * getExtraExtensions(const Context *ctx) { switch (ctx->profile.api) { case glprofile::API_GL: return &extraExtensionsFull; case glprofile::API_GLES: return &extraExtensionsES; default: assert(0); return &extraExtensionsFull; } } /** * Translate the GL extensions string, adding new extensions. */ static const char * overrideExtensionsString(const char *extensions) { const Context *ctx = getContext(); const ExtensionsDesc *desc = getExtraExtensions(ctx); size_t i; ExtensionsMap::const_iterator it = extensionsMap.find(extensions); if (it != extensionsMap.end()) { return it->second; } size_t extensionsLen = strlen(extensions); size_t extraExtensionsLen = 0; for (i = 0; i < desc->numStrings; ++i) { const char * extraExtension = desc->strings[i]; size_t extraExtensionLen = strlen(extraExtension); extraExtensionsLen += extraExtensionLen + 1; } // We use malloc memory instead of a std::string because we need to ensure // that extensions strings will not move in memory as the extensionsMap is // updated. size_t newExtensionsLen = extensionsLen + 1 + extraExtensionsLen + 1; char *newExtensions = (char *)malloc(newExtensionsLen); if (!newExtensions) { return extensions; } if (extensionsLen) { memcpy(newExtensions, extensions, extensionsLen); // Add space separator if necessary if (newExtensions[extensionsLen - 1] != ' ') { newExtensions[extensionsLen++] = ' '; } } for (i = 0; i < desc->numStrings; ++i) { const char * extraExtension = desc->strings[i]; size_t extraExtensionLen = strlen(extraExtension); memcpy(newExtensions + extensionsLen, extraExtension, extraExtensionLen); extensionsLen += extraExtensionLen; newExtensions[extensionsLen++] = ' '; } newExtensions[extensionsLen++] = '\0'; assert(extensionsLen <= newExtensionsLen); extensionsMap[extensions] = newExtensions; return newExtensions; } const GLubyte * _glGetString_override(GLenum name) { const configuration *config = getConfig(); const GLubyte *result; // Try getting the override string value first result = getConfigString(config, name); if (!result) { // Ask the real GL library result = _glGetString(name); } if (result) { switch (name) { case GL_EXTENSIONS: result = (const GLubyte *)overrideExtensionsString((const char *)result); break; default: break; } } return result; } static void getInteger(const configuration *config, GLenum pname, GLint *params) { // Disable ARB_get_program_binary switch (pname) { case GL_NUM_PROGRAM_BINARY_FORMATS: if (params) { if (params[0] > 0) { os::log("apitrace: warning: hiding program binary formats (https://github.com/apitrace/apitrace/issues/316)\n"); params[0] = 0; } } return; case GL_PROGRAM_BINARY_FORMATS: // params might be NULL here, as we returned 0 for // GL_NUM_PROGRAM_BINARY_FORMATS. return; } if (params) { *params = getConfigInteger(config, pname); if (*params != 0) { return; } } // Ask the real GL library _glGetIntegerv(pname, params); } /** * TODO: To be thorough, we should override all glGet*v. */ void _glGetIntegerv_override(GLenum pname, GLint *params) { const configuration *config = getConfig(); /* * It's important to handle params==NULL correctly here, which can and does * happen, particularly when pname is GL_COMPRESSED_TEXTURE_FORMATS or * GL_PROGRAM_BINARY_FORMATS and the implementation returns 0 for * GL_NUM_COMPRESSED_TEXTURE_FORMATS or GL_NUM_PROGRAM_BINARY_FORMATS, as * the application ends up calling `params = malloc(0)` or `param = new * GLint[0]` which can yield NULL. */ getInteger(config, pname, params); if (params) { const Context *ctx; switch (pname) { case GL_NUM_EXTENSIONS: ctx = getContext(); if (ctx->profile.major >= 3) { const ExtensionsDesc *desc = getExtraExtensions(ctx); *params += desc->numStrings; } break; case GL_MAX_LABEL_LENGTH: /* We provide our default implementation of KHR_debug when the * driver does not. So return something sensible here. */ if (params[0] == 0) { params[0] = 256; } break; } } } const GLubyte * _glGetStringi_override(GLenum name, GLuint index) { const configuration *config = getConfig(); const Context *ctx = getContext(); const GLubyte *retVal; if (ctx->profile.major >= 3) { switch (name) { case GL_EXTENSIONS: { const ExtensionsDesc *desc = getExtraExtensions(ctx); GLint numExtensions = 0; getInteger(config, GL_NUM_EXTENSIONS, &numExtensions); if ((GLuint)numExtensions <= index && index < (GLuint)numExtensions + desc->numStrings) { return (const GLubyte *)desc->strings[index - (GLuint)numExtensions]; } } break; default: break; } } retVal = getConfigStringi(config, name, index); if (retVal) return retVal; return _glGetStringi(name, index); } } /* namespace gltrace */ tmpNnpnZF/wrappers/trace.py0000664000175000017500000011304612543167424015304 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Common trace code generation.""" # Adjust path import os.path import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import itertools import specs.stdapi as stdapi def getWrapperInterfaceName(interface): return "Wrap" + interface.expr debug = False class ComplexValueSerializer(stdapi.OnceVisitor): '''Type visitors which generates serialization functions for complex types. Simple types are serialized inline. ''' def __init__(self, serializer): stdapi.OnceVisitor.__init__(self) self.serializer = serializer def visitVoid(self, literal): pass def visitLiteral(self, literal): pass def visitString(self, string): pass def visitConst(self, const): self.visit(const.type) def visitStruct(self, struct): print 'static const char * _struct%s_members[%u] = {' % (struct.tag, len(struct.members)) for type, name, in struct.members: if name is None: print ' "",' else: print ' "%s",' % (name,) print '};' print 'static const trace::StructSig _struct%s_sig = {' % (struct.tag,) if struct.name is None: structName = '""' else: structName = '"%s"' % struct.name print ' %u, %s, %u, _struct%s_members' % (struct.id, structName, len(struct.members), struct.tag) print '};' print def visitArray(self, array): self.visit(array.type) def visitAttribArray(self, array): pass def visitBlob(self, array): pass def visitEnum(self, enum): print 'static const trace::EnumValue _enum%s_values[] = {' % (enum.tag) for value in enum.values: print ' {"%s", %s},' % (value, value) print '};' print print 'static const trace::EnumSig _enum%s_sig = {' % (enum.tag) print ' %u, %u, _enum%s_values' % (enum.id, len(enum.values), enum.tag) print '};' print def visitBitmask(self, bitmask): print 'static const trace::BitmaskFlag _bitmask%s_flags[] = {' % (bitmask.tag) for value in bitmask.values: print ' {"%s", %s},' % (value, value) print '};' print print 'static const trace::BitmaskSig _bitmask%s_sig = {' % (bitmask.tag) print ' %u, %u, _bitmask%s_flags' % (bitmask.id, len(bitmask.values), bitmask.tag) print '};' print def visitPointer(self, pointer): self.visit(pointer.type) def visitIntPointer(self, pointer): pass def visitObjPointer(self, pointer): self.visit(pointer.type) def visitLinearPointer(self, pointer): self.visit(pointer.type) def visitHandle(self, handle): self.visit(handle.type) def visitReference(self, reference): self.visit(reference.type) def visitAlias(self, alias): self.visit(alias.type) def visitOpaque(self, opaque): pass def visitInterface(self, interface): pass def visitPolymorphic(self, polymorphic): if not polymorphic.contextLess: return print 'static void _write__%s(int selector, %s const & value) {' % (polymorphic.tag, polymorphic.expr) print ' switch (selector) {' for cases, type in polymorphic.iterSwitch(): for case in cases: print ' %s:' % case self.serializer.visit(type, '(%s)(value)' % (type,)) print ' break;' print ' }' print '}' print class ValueSerializer(stdapi.Visitor, stdapi.ExpanderMixin): '''Visitor which generates code to serialize any type. Simple types are serialized inline here, whereas the serialization of complex types is dispatched to the serialization functions generated by ComplexValueSerializer visitor above. ''' def visitLiteral(self, literal, instance): print ' trace::localWriter.write%s(%s);' % (literal.kind, instance) def visitString(self, string, instance): if not string.wide: cast = 'const char *' suffix = 'String' else: cast = 'const wchar_t *' suffix = 'WString' if cast != string.expr: # reinterpret_cast is necessary for GLubyte * <=> char * instance = 'reinterpret_cast<%s>(%s)' % (cast, instance) if string.length is not None: length = ', %s' % self.expand(string.length) else: length = '' print ' trace::localWriter.write%s(%s%s);' % (suffix, instance, length) def visitConst(self, const, instance): self.visit(const.type, instance) def visitStruct(self, struct, instance): print ' trace::localWriter.beginStruct(&_struct%s_sig);' % (struct.tag,) for member in struct.members: self.visitMember(member, instance) print ' trace::localWriter.endStruct();' def visitArray(self, array, instance): length = '_c' + array.type.tag index = '_i' + array.type.tag array_length = self.expand(array.length) print ' if (%s) {' % instance print ' size_t %s = %s > 0 ? %s : 0;' % (length, array_length, array_length) print ' trace::localWriter.beginArray(%s);' % length print ' for (size_t %s = 0; %s < %s; ++%s) {' % (index, index, length, index) print ' trace::localWriter.beginElement();' self.visitElement(index, array.type, '(%s)[%s]' % (instance, index)) print ' trace::localWriter.endElement();' print ' }' print ' trace::localWriter.endArray();' print ' } else {' print ' trace::localWriter.writeNull();' print ' }' def visitAttribArray(self, array, instance): # For each element, decide if it is a key or a value (which depends on the previous key). # If it is a value, store it as the right type - usually int, some bitfield, or some enum. # It is currently assumed that an unknown key means that it is followed by an int value. # determine the array length which must be passed to writeArray() up front count = '_c' + array.baseType.tag print ' {' print ' int %s;' % count print ' for (%(c)s = 0; %(array)s && %(array)s[%(c)s] != %(terminator)s; %(c)s += 2) {' \ % {'c': count, 'array': instance, 'terminator': array.terminator} if array.hasKeysWithoutValues: print ' switch (int(%(array)s[%(c)s])) {' % {'array': instance, 'c': count} for key, valueType in array.valueTypes: if valueType is None: print ' case %s:' % key print ' %s--;' % count # the next value is a key again and checked if it's the terminator print ' break;' print ' }' print ' }' print ' %(c)s += %(array)s ? 1 : 0;' % {'c': count, 'array': instance} print ' trace::localWriter.beginArray(%s);' % count # for each key / key-value pair write the key and the value, if the key requires one index = '_i' + array.baseType.tag print ' for (int %(i)s = 0; %(i)s < %(count)s; %(i)s++) {' % {'i': index, 'count': count} print ' trace::localWriter.beginElement();' self.visit(array.baseType, "%(array)s[%(i)s]" % {'array': instance, 'i': index}) print ' trace::localWriter.endElement();' print ' if (%(i)s + 1 >= %(count)s) {' % {'i': index, 'count': count} print ' break;' print ' }' print ' switch (int(%(array)s[%(i)s++])) {' % {'array': instance, 'i': index} # write generic value the usual way for key, valueType in array.valueTypes: if valueType is not None: print ' case %s:' % key print ' trace::localWriter.beginElement();' self.visitElement(index, valueType, '(%(array)s)[%(i)s]' % {'array': instance, 'i': index}) print ' trace::localWriter.endElement();' print ' break;' # known key with no value, just decrease the index so we treat the next value as a key if array.hasKeysWithoutValues: for key, valueType in array.valueTypes: if valueType is None: print ' case %s:' % key print ' %s--;' % index print ' break;' # unknown key, write an int value print ' default:' print ' trace::localWriter.beginElement();' print ' os::log("apitrace: warning: %s: unknown key 0x%04X, interpreting value as int\\n", ' + \ '__FUNCTION__, int(%(array)s[%(i)s - 1]));' % {'array': instance, 'i': index} print ' trace::localWriter.writeSInt(%(array)s[%(i)s]);' % {'array': instance, 'i': index} print ' trace::localWriter.endElement();' print ' break;' print ' }' print ' }' print ' trace::localWriter.endArray();' print ' }' def visitBlob(self, blob, instance): print ' trace::localWriter.writeBlob(%s, %s);' % (instance, self.expand(blob.size)) def visitEnum(self, enum, instance): print ' trace::localWriter.writeEnum(&_enum%s_sig, %s);' % (enum.tag, instance) def visitBitmask(self, bitmask, instance): print ' trace::localWriter.writeBitmask(&_bitmask%s_sig, %s);' % (bitmask.tag, instance) def visitPointer(self, pointer, instance): print ' if (%s) {' % instance print ' trace::localWriter.beginArray(1);' print ' trace::localWriter.beginElement();' self.visit(pointer.type, "*" + instance) print ' trace::localWriter.endElement();' print ' trace::localWriter.endArray();' print ' } else {' print ' trace::localWriter.writeNull();' print ' }' def visitIntPointer(self, pointer, instance): print ' trace::localWriter.writePointer((uintptr_t)%s);' % instance def visitObjPointer(self, pointer, instance): print ' trace::localWriter.writePointer((uintptr_t)%s);' % instance def visitLinearPointer(self, pointer, instance): print ' trace::localWriter.writePointer((uintptr_t)%s);' % instance def visitReference(self, reference, instance): self.visit(reference.type, instance) def visitHandle(self, handle, instance): self.visit(handle.type, instance) def visitAlias(self, alias, instance): self.visit(alias.type, instance) def visitOpaque(self, opaque, instance): print ' trace::localWriter.writePointer((uintptr_t)%s);' % instance def visitInterface(self, interface, instance): assert False def visitPolymorphic(self, polymorphic, instance): if polymorphic.contextLess: print ' _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance) else: switchExpr = self.expand(polymorphic.switchExpr) print ' switch (%s) {' % switchExpr for cases, type in polymorphic.iterSwitch(): for case in cases: print ' %s:' % case caseInstance = instance if type.expr is not None: caseInstance = 'static_cast<%s>(%s)' % (type, caseInstance) self.visit(type, caseInstance) print ' break;' if polymorphic.defaultType is None: print r' default:' print r' os::log("apitrace: warning: %%s: unexpected polymorphic case %%i\n", __FUNCTION__, (int)%s);' % (switchExpr,) print r' trace::localWriter.writeNull();' print r' break;' print ' }' class WrapDecider(stdapi.Traverser): '''Type visitor which will decide wheter this type will need wrapping or not. For complex types (arrays, structures), we need to know this before hand. ''' def __init__(self): self.needsWrapping = False def visitLinearPointer(self, void): pass def visitInterface(self, interface): self.needsWrapping = True class ValueWrapper(stdapi.Traverser, stdapi.ExpanderMixin): '''Type visitor which will generate the code to wrap an instance. Wrapping is necessary mostly for interfaces, however interface pointers can appear anywhere inside complex types. ''' def visitStruct(self, struct, instance): for member in struct.members: self.visitMember(member, instance) def visitArray(self, array, instance): array_length = self.expand(array.length) print " if (%s) {" % instance print " for (size_t _i = 0, _s = %s; _i < _s; ++_i) {" % array_length self.visitElement('_i', array.type, instance + "[_i]") print " }" print " }" def visitPointer(self, pointer, instance): print " if (%s) {" % instance self.visit(pointer.type, "*" + instance) print " }" def visitObjPointer(self, pointer, instance): elem_type = pointer.type.mutable() if isinstance(elem_type, stdapi.Interface): self.visitInterfacePointer(elem_type, instance) elif isinstance(elem_type, stdapi.Alias) and isinstance(elem_type.type, stdapi.Interface): self.visitInterfacePointer(elem_type.type, instance) else: self.visitPointer(pointer, instance) def visitInterface(self, interface, instance): raise NotImplementedError def visitInterfacePointer(self, interface, instance): print " Wrap%s::_wrap(__FUNCTION__, &%s);" % (interface.name, instance) def visitPolymorphic(self, type, instance): # XXX: There might be polymorphic values that need wrapping in the future raise NotImplementedError class ValueUnwrapper(ValueWrapper): '''Reverse of ValueWrapper.''' allocated = False def visitStruct(self, struct, instance): if not self.allocated: # Argument is constant. We need to create a non const print ' {' print " %s * _t = static_cast<%s *>(alloca(sizeof *_t));" % (struct, struct) print ' *_t = %s;' % (instance,) assert instance.startswith('*') print ' %s = _t;' % (instance[1:],) instance = '*_t' self.allocated = True try: return ValueWrapper.visitStruct(self, struct, instance) finally: print ' }' else: return ValueWrapper.visitStruct(self, struct, instance) def visitArray(self, array, instance): if self.allocated or isinstance(instance, stdapi.Interface): return ValueWrapper.visitArray(self, array, instance) array_length = self.expand(array.length) elem_type = array.type.mutable() print " if (%s && %s) {" % (instance, array_length) print " %s * _t = static_cast<%s *>(alloca(%s * sizeof *_t));" % (elem_type, elem_type, array_length) print " for (size_t _i = 0, _s = %s; _i < _s; ++_i) {" % array_length print " _t[_i] = %s[_i];" % instance self.allocated = True self.visit(array.type, "_t[_i]") print " }" print " %s = _t;" % instance print " }" def visitInterfacePointer(self, interface, instance): print r' Wrap%s::_unwrap(__FUNCTION__, &%s);' % (interface.name, instance) def _getInterfaceHierarchy(allIfaces, baseIface, result): for iface in allIfaces: if iface.base is baseIface: _getInterfaceHierarchy(allIfaces, iface, result) result.append(iface) def getInterfaceHierarchy(allIfaces, baseIface): result = [] _getInterfaceHierarchy(allIfaces, baseIface, result) return result class Tracer: '''Base class to orchestrate the code generation of API tracing.''' # 0-3 are reserved to memcpy, malloc, free, and realloc __id = 4 def __init__(self): self.api = None def serializerFactory(self): '''Create a serializer. Can be overriden by derived classes to inject their own serialzer. ''' return ValueSerializer() def traceApi(self, api): self.api = api self.header(api) # Includes for module in api.modules: for header in module.headers: print header print # Generate the serializer functions types = api.getAllTypes() visitor = ComplexValueSerializer(self.serializerFactory()) map(visitor.visit, types) print # Interfaces wrapers self.traceInterfaces(api) # Function wrappers self.interface = None self.base = None for function in api.getAllFunctions(): self.traceFunctionDecl(function) for function in api.getAllFunctions(): self.traceFunctionImpl(function) print self.footer(api) def header(self, api): print '#ifdef _WIN32' print '# include // alloca' print '# ifndef alloca' print '# define alloca _alloca' print '# endif' print '#else' print '# include // alloca' print '#endif' print print print 'static std::map g_WrappedObjects;' def footer(self, api): pass def traceFunctionDecl(self, function): # Per-function declarations if not function.internal: if function.args: print 'static const char * _%s_args[%u] = {%s};' % (function.name, len(function.args), ', '.join(['"%s"' % arg.name for arg in function.args])) else: print 'static const char ** _%s_args = NULL;' % (function.name,) print 'static const trace::FunctionSig _%s_sig = {%u, "%s", %u, _%s_args};' % (function.name, self.getFunctionSigId(), function.name, len(function.args), function.name) print def getFunctionSigId(self): id = Tracer.__id Tracer.__id += 1 return id def isFunctionPublic(self, function): return True def traceFunctionImpl(self, function): if self.isFunctionPublic(function): print 'extern "C" PUBLIC' else: print 'extern "C" PRIVATE' print function.prototype() + ' {' if function.type is not stdapi.Void: print ' %s _result;' % function.type for arg in function.args: if not arg.output: self.unwrapArg(function, arg) self.traceFunctionImplBody(function) # XXX: wrapping should go here, but before we can do that we'll need to protect g_WrappedObjects with its own mutex if function.type is not stdapi.Void: print ' return _result;' print '}' print def traceFunctionImplBody(self, function): if not function.internal: print ' unsigned _call = trace::localWriter.beginEnter(&_%s_sig);' % (function.name,) for arg in function.args: if not arg.output: self.serializeArg(function, arg) print ' trace::localWriter.endEnter();' self.invokeFunction(function) if not function.internal: print ' trace::localWriter.beginLeave(_call);' print ' if (%s) {' % self.wasFunctionSuccessful(function) for arg in function.args: if arg.output: self.serializeArg(function, arg) self.wrapArg(function, arg) print ' }' if function.type is not stdapi.Void: self.serializeRet(function, "_result") if function.type is not stdapi.Void: self.wrapRet(function, "_result") print ' trace::localWriter.endLeave();' def invokeFunction(self, function): self.doInvokeFunction(function) def doInvokeFunction(self, function, prefix='_', suffix=''): # Same as invokeFunction() but called both when trace is enabled or disabled. if function.type is stdapi.Void: result = '' else: result = '_result = ' dispatch = prefix + function.name + suffix print ' %s%s(%s);' % (result, dispatch, ', '.join([str(arg.name) for arg in function.args])) def wasFunctionSuccessful(self, function): if function.type is stdapi.Void: return 'true' if str(function.type) == 'HRESULT': return 'SUCCEEDED(_result)' return 'true' def serializeArg(self, function, arg): print ' trace::localWriter.beginArg(%u);' % (arg.index,) self.serializeArgValue(function, arg) print ' trace::localWriter.endArg();' def serializeArgValue(self, function, arg): self.serializeValue(arg.type, arg.name) def wrapArg(self, function, arg): assert not isinstance(arg.type, stdapi.ObjPointer) from specs.winapi import REFIID riid = None for other_arg in function.args: if not other_arg.output and other_arg.type is REFIID: riid = other_arg if riid is not None \ and riid.name != 'EmulatedInterface' \ and isinstance(arg.type, stdapi.Pointer) \ and isinstance(arg.type.type, stdapi.ObjPointer): self.wrapIid(function, riid, arg) return self.wrapValue(arg.type, arg.name) def unwrapArg(self, function, arg): self.unwrapValue(arg.type, arg.name) def serializeRet(self, function, instance): print ' trace::localWriter.beginReturn();' self.serializeValue(function.type, instance) print ' trace::localWriter.endReturn();' def serializeValue(self, type, instance): serializer = self.serializerFactory() serializer.visit(type, instance) def wrapRet(self, function, instance): self.wrapValue(function.type, instance) def needsWrapping(self, type): visitor = WrapDecider() visitor.visit(type) return visitor.needsWrapping def wrapValue(self, type, instance): if self.needsWrapping(type): visitor = ValueWrapper() visitor.visit(type, instance) def unwrapValue(self, type, instance): if self.needsWrapping(type): visitor = ValueUnwrapper() visitor.visit(type, instance) def traceInterfaces(self, api): interfaces = api.getAllInterfaces() if not interfaces: return map(self.declareWrapperInterface, interfaces) # Helper functions to wrap/unwrap interface pointers print r'static inline bool' print r'hasChildInterface(REFIID riid, IUnknown *pUnknown) {' print r' IUnknown *pObj = NULL;' print r' HRESULT hr = pUnknown->QueryInterface(riid, (VOID **)&pObj);' print r' if (FAILED(hr)) {' print r' return false;' print r' }' print r' assert(pObj);' print r' pObj->Release();' print r' return pUnknown == pObj;' print r'}' print print r'static inline const void *' print r'getVtbl(const void *pvObj) {' print r' return pvObj ? *(const void **)pvObj : NULL;' print r'}' print self.implementIidWrapper(api) map(self.implementWrapperInterface, interfaces) print def declareWrapperInterface(self, interface): wrapperInterfaceName = getWrapperInterfaceName(interface) print "class %s : public %s " % (wrapperInterfaceName, interface.name) print "{" print "private:" print " %s(%s * pInstance);" % (wrapperInterfaceName, interface.name) print " virtual ~%s();" % wrapperInterfaceName print "public:" print " static %s* _create(const char *entryName, %s * pInstance);" % (wrapperInterfaceName, interface.name) print " static void _wrap(const char *entryName, %s ** ppInstance);" % (interface.name,) print " static void _unwrap(const char *entryName, %s ** pInstance);" % (interface.name,) print methods = list(interface.iterMethods()) for method in methods: print " " + method.prototype() + ";" print for type, name, value in self.enumWrapperInterfaceVariables(interface): print ' %s %s;' % (type, name) print print r'private:' print r' void _dummy(unsigned i) const {' print r' os::log("error: %%s: unexpected virtual method %%i of instance pWrapper=%%p pvObj=%%p pVtbl=%%p\n", "%s", i, this, m_pInstance, m_pVtbl);' % interface.name print r' trace::localWriter.flush();' print r' os::abort();' print r' }' print for i in range(len(methods), 64): print r' virtual void _dummy%i(void) const { _dummy(%i); }' % (i, i) print print "};" print def enumWrapperInterfaceVariables(self, interface): return [ ("DWORD", "m_dwMagic", "0xd8365d6c"), ("%s *" % interface.name, "m_pInstance", "pInstance"), ("const void *", "m_pVtbl", "getVtbl(pInstance)"), ("UINT", "m_NumMethods", len(list(interface.iterBaseMethods()))), ] def implementWrapperInterface(self, iface): self.interface = iface wrapperInterfaceName = getWrapperInterfaceName(iface) # Private constructor print '%s::%s(%s * pInstance) {' % (wrapperInterfaceName, wrapperInterfaceName, iface.name) for type, name, value in self.enumWrapperInterfaceVariables(iface): if value is not None: print ' %s = %s;' % (name, value) print '}' print # Public constructor print '%s *%s::_create(const char *entryName, %s * pInstance) {' % (wrapperInterfaceName, wrapperInterfaceName, iface.name) print r' Wrap%s *pWrapper = new Wrap%s(pInstance);' % (iface.name, iface.name) if debug: print r' os::log("%%s: created %s pvObj=%%p pWrapper=%%p pVtbl=%%p\n", entryName, pInstance, pWrapper, pWrapper->m_pVtbl);' % iface.name print r' g_WrappedObjects[pInstance] = pWrapper;' print r' return pWrapper;' print '}' print # Destructor print '%s::~%s() {' % (wrapperInterfaceName, wrapperInterfaceName) if debug: print r' os::log("%s::Release: deleted pvObj=%%p pWrapper=%%p pVtbl=%%p\n", m_pInstance, this, m_pVtbl);' % iface.name print r' g_WrappedObjects.erase(m_pInstance);' print '}' print baseMethods = list(iface.iterBaseMethods()) for base, method in baseMethods: self.base = base self.implementWrapperInterfaceMethod(iface, base, method) print # Wrap pointer ifaces = self.api.getAllInterfaces() print r'void' print r'%s::_wrap(const char *entryName, %s **ppObj) {' % (wrapperInterfaceName, iface.name) print r' if (!ppObj) {' print r' return;' print r' }' print r' %s *pObj = *ppObj;' % (iface.name,) print r' if (!pObj) {' print r' return;' print r' }' print r' assert(hasChildInterface(IID_%s, pObj));' % iface.name print r' std::map::const_iterator it = g_WrappedObjects.find(pObj);' print r' if (it != g_WrappedObjects.end()) {' print r' Wrap%s *pWrapper = (Wrap%s *)it->second;' % (iface.name, iface.name) print r' assert(pWrapper);' print r' assert(pWrapper->m_dwMagic == 0xd8365d6c);' print r' assert(pWrapper->m_pInstance == pObj);' print r' if (pWrapper->m_pVtbl == getVtbl(pObj) &&' print r' pWrapper->m_NumMethods >= %s) {' % len(baseMethods) if debug: print r' os::log("%s: fetched pvObj=%p pWrapper=%p pVtbl=%p\n", entryName, pObj, pWrapper, pWrapper->m_pVtbl);' print r' *ppObj = pWrapper;' print r' return;' print r' }' print r' }' else_ = '' for childIface in getInterfaceHierarchy(ifaces, iface): print r' %sif (hasChildInterface(IID_%s, pObj)) {' % (else_, childIface.name) print r' pObj = Wrap%s::_create(entryName, static_cast<%s *>(pObj));' % (childIface.name, childIface.name) print r' }' else_ = 'else ' print r' %s{' % else_ print r' pObj = Wrap%s::_create(entryName, pObj);' % iface.name print r' }' print r' *ppObj = pObj;' print r'}' print # Unwrap pointer print r'void' print r'%s::_unwrap(const char *entryName, %s **ppObj) {' % (wrapperInterfaceName, iface.name) print r' if (!ppObj || !*ppObj) {' print r' return;' print r' }' print r' const %s *pWrapper = static_cast(*ppObj);' % (wrapperInterfaceName, getWrapperInterfaceName(iface)) print r' if (pWrapper && pWrapper->m_dwMagic == 0xd8365d6c) {' print r' *ppObj = pWrapper->m_pInstance;' print r' } else {' print r' os::log("apitrace: warning: %%s: unexpected %%s pointer %%p\n", entryName, "%s", *ppObj);' % iface.name print r' }' print r'}' print def implementWrapperInterfaceMethod(self, interface, base, method): wrapperInterfaceName = getWrapperInterfaceName(interface) print method.prototype(wrapperInterfaceName + '::' + method.name) + ' {' if False: print r' os::log("%%s(%%p -> %%p)\n", "%s", this, m_pInstance);' % (wrapperInterfaceName + '::' + method.name) if method.type is not stdapi.Void: print ' %s _result;' % method.type print ' %s *_this = static_cast<%s *>(m_pInstance);' % (base, base) for arg in method.args: if not arg.output: self.unwrapArg(method, arg) self.implementWrapperInterfaceMethodBody(interface, base, method) # XXX: wrapping should go here, but before we can do that we'll need to protect g_WrappedObjects with its own mutex if method.type is not stdapi.Void: print ' return _result;' print '}' print def implementWrapperInterfaceMethodBody(self, interface, base, method): assert not method.internal print ' static const char * _args[%u] = {%s};' % (len(method.args) + 1, ', '.join(['"this"'] + ['"%s"' % arg.name for arg in method.args])) print ' static const trace::FunctionSig _sig = {%u, "%s", %u, _args};' % (self.getFunctionSigId(), interface.name + '::' + method.name, len(method.args) + 1) print ' unsigned _call = trace::localWriter.beginEnter(&_sig);' print ' trace::localWriter.beginArg(0);' print ' trace::localWriter.writePointer((uintptr_t)m_pInstance);' print ' trace::localWriter.endArg();' for arg in method.args: if not arg.output: self.serializeArg(method, arg) print ' trace::localWriter.endEnter();' self.invokeMethod(interface, base, method) print ' trace::localWriter.beginLeave(_call);' print ' if (%s) {' % self.wasFunctionSuccessful(method) for arg in method.args: if arg.output: self.serializeArg(method, arg) self.wrapArg(method, arg) print ' }' if method.type is not stdapi.Void: self.serializeRet(method, '_result') if method.type is not stdapi.Void: self.wrapRet(method, '_result') if method.name == 'Release': assert method.type is not stdapi.Void print r' if (!_result) {' print r' delete this;' print r' }' print ' trace::localWriter.endLeave();' def implementIidWrapper(self, api): ifaces = api.getAllInterfaces() print r'static void' print r'warnIID(const char *entryName, REFIID riid, void *pvObj, const char *reason) {' print r' os::log("apitrace: warning: %s: %s IID %08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",' print r' entryName, reason,' print r' riid.Data1, riid.Data2, riid.Data3,' print r' riid.Data4[0], riid.Data4[1], riid.Data4[2], riid.Data4[3], riid.Data4[4], riid.Data4[5], riid.Data4[6], riid.Data4[7]);' print r' void * pVtbl = *(void **)pvObj;' print r' HMODULE hModule = 0;' print r' BOOL bRet = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,' print r' (LPCTSTR)pVtbl,' print r' &hModule);' print r' assert(bRet);' print r' if (bRet) {' print r' char szModule[MAX_PATH];' print r' DWORD dwRet = GetModuleFileNameA(hModule, szModule, sizeof szModule);' print r' assert(dwRet);' print r' if (dwRet) {' print r' DWORD dwOffset = (UINT_PTR)pVtbl - (UINT_PTR)hModule;' print r' os::log("apitrace: warning: pVtbl = %p (%s!+0x%0lx)\n", pVtbl, szModule, dwOffset);' print r' }' print r' }' print r'}' print print r'static void' print r'wrapIID(const char *entryName, REFIID riid, void * * ppvObj) {' print r' if (!ppvObj || !*ppvObj) {' print r' return;' print r' }' else_ = '' for iface in ifaces: print r' %sif (riid == IID_%s) {' % (else_, iface.name) print r' Wrap%s::_wrap(entryName, (%s **) ppvObj);' % (iface.name, iface.name) print r' }' else_ = 'else ' print r' %s{' % else_ print r' warnIID(entryName, riid, *ppvObj, "unknown");' print r' }' print r'}' print def wrapIid(self, function, riid, out): # Cast output arg to `void **` if necessary out_name = out.name obj_type = out.type.type.type if not obj_type is stdapi.Void: assert isinstance(obj_type, stdapi.Interface) out_name = 'reinterpret_cast(%s)' % out_name print r' if (%s && *%s) {' % (out.name, out.name) functionName = function.name else_ = '' if self.interface is not None: functionName = self.interface.name + '::' + functionName print r' if (*%s == m_pInstance &&' % (out_name,) print r' (%s)) {' % ' || '.join('%s == IID_%s' % (riid.name, iface.name) for iface in self.interface.iterBases()) print r' *%s = this;' % (out_name,) print r' }' else_ = 'else ' print r' %s{' % else_ print r' wrapIID("%s", %s, %s);' % (functionName, riid.name, out_name) print r' }' print r' }' def invokeMethod(self, interface, base, method): if method.type is stdapi.Void: result = '' else: result = '_result = ' print ' %s_this->%s(%s);' % (result, method.name, ', '.join([str(arg.name) for arg in method.args])) def emit_memcpy(self, ptr, size): print ' trace::fakeMemcpy(%s, %s);' % (ptr, size) def fake_call(self, function, args): print ' unsigned _fake_call = trace::localWriter.beginEnter(&_%s_sig, true);' % (function.name,) for arg, instance in zip(function.args, args): assert not arg.output print ' trace::localWriter.beginArg(%u);' % (arg.index,) self.serializeValue(arg.type, instance) print ' trace::localWriter.endArg();' print ' trace::localWriter.endEnter();' print ' trace::localWriter.beginLeave(_fake_call);' print ' trace::localWriter.endLeave();' tmpNnpnZF/wrappers/ddrawtrace.py0000664000175000017500000000374312543167424016330 0ustar chrischris########################################################################## # # Copyright 2008-2015 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from dlltrace import DllTracer from specs.stdapi import API from specs.d3d import ddraw, interfaces class DDrawTracer(DllTracer): pass # FIXME: emit fake memcpy calls for IDirectDrawSurface7::EnumAttachedSurfaces # FIXME: wrap objects passed to IDirectDrawSurface7::EnumAttachedSurfaces # callback -- we don't really care for tracing these calls, but we do want # to trace everything done inside the callback. if __name__ == '__main__': print '#define INITGUID' print '#include "d3dimports.hpp"' print '#include "trace_writer_local.hpp"' print '#include "d3d7size.hpp"' print '#include "os.hpp"' print api = API() api.addModule(ddraw) tracer = DDrawTracer() tracer.traceApi(api) tmpNnpnZF/wrappers/d3d9shader.hpp0000664000175000017500000000265712543167424016304 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "trace_writer.hpp" void DumpShader(trace::Writer &writer, const DWORD *tokens); tmpNnpnZF/wrappers/gltrace.hpp0000664000175000017500000000700312543167424015761 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include #include "glimports.hpp" #include "glprofile.hpp" namespace gltrace { /** * OpenGL ES buffers cannot be read. This class is used to track index buffer * contents. */ class Buffer { public: GLsizeiptr size; GLvoid *data; Buffer() : size(0), data(0) {} ~Buffer() { free(data); } void bufferData(GLsizeiptr new_size, const void *new_data) { if (new_size < 0) { new_size = 0; } size = new_size; data = realloc(data, new_size); if (new_size && new_data) { memcpy(data, new_data, size); } } void bufferSubData(GLsizeiptr offset, GLsizeiptr length, const void *new_data) { if (offset >= 0 && offset < size && length > 0 && offset + length <= size && new_data) { memcpy((GLubyte *)data + offset, new_data, length); } } void getSubData(GLsizeiptr offset, GLsizeiptr length, void *out_data) { if (offset >= 0 && offset < size && length > 0 && offset + length <= size && out_data) { memcpy(out_data, (GLubyte *)data + offset, length); } } }; class Context { public: glprofile::Profile profile; bool user_arrays; bool user_arrays_nv; bool userArraysOnBegin; unsigned retain_count; // Whether it has been bound before bool bound; // TODO: This will fail for buffers shared by multiple contexts. std::map buffers; Context(void) : profile(glprofile::API_GL, 1, 0), user_arrays(false), user_arrays_nv(false), userArraysOnBegin(false), retain_count(0), bound(false) { } inline bool needsShadowBuffers(void) { return profile.es(); } }; void createContext(uintptr_t context_id); void retainContext(uintptr_t context_id); bool releaseContext(uintptr_t context_id); void setContext(uintptr_t context_id); void clearContext(void); gltrace::Context * getContext(void); const GLubyte * _glGetString_override(GLenum name); void _glGetIntegerv_override(GLenum pname, GLint *params); const GLubyte * _glGetStringi_override(GLenum name, GLuint index); } /* namespace gltrace */ tmpNnpnZF/wrappers/dlltrace.py0000664000175000017500000000520212543167424015772 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Trace code generation for Windows DLLs.""" import ntpath from trace import Tracer from dispatch import Dispatcher from specs.stdapi import API class DllDispatcher(Dispatcher): def dispatchModule(self, module): tag = module.name.upper() print r'HMODULE g_h%sModule = NULL;' % (tag,) print r'' print r'static PROC' print r'_get%sProcAddress(LPCSTR lpProcName) {' % tag print r' if (!g_h%sModule) {' % tag print r' char szDll[MAX_PATH] = {0};' print r' if (!GetSystemDirectoryA(szDll, MAX_PATH)) {' print r' return NULL;' print r' }' print r' strcat(szDll, "\\%s.dll");' % module.name print r' g_h%sModule = LoadLibraryA(szDll);' % tag print r' if (!g_h%sModule) {' % tag print r' return NULL;' print r' }' print r' }' print r' return GetProcAddress(g_h%sModule, lpProcName);' % tag print r'}' print r'' Dispatcher.dispatchModule(self, module) def getProcAddressName(self, module, function): return '_get%sProcAddress' % (module.name.upper()) class DllTracer(Tracer): def header(self, api): for module in api.modules: dispatcher = DllDispatcher() dispatcher.dispatchModule(module) Tracer.header(self, api) tmpNnpnZF/wrappers/gltrace_state.cpp0000664000175000017500000001256012543167424017160 0ustar chrischris/********************************************************************* * * Copyright 2012 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include #include #include #include namespace gltrace { typedef std::shared_ptr context_ptr_t; static std::map context_map; static os::recursive_mutex context_map_mutex; class ThreadState { public: context_ptr_t current_context; context_ptr_t dummy_context; /* * For cases when there is no current * context, but the app still calls some * GL function that expects one. */ ThreadState() : dummy_context(new Context) { current_context = dummy_context; } }; static OS_THREAD_SPECIFIC_PTR(ThreadState) thread_state; static ThreadState *get_ts(void) { ThreadState *ts = thread_state; if (!ts) { thread_state = ts = new ThreadState; } return ts; } static void _retainContext(context_ptr_t ctx) { ctx->retain_count++; } void retainContext(uintptr_t context_id) { context_map_mutex.lock(); if (context_map.find(context_id) != context_map.end()) _retainContext(context_map[context_id]); context_map_mutex.unlock(); } static bool _releaseContext(context_ptr_t ctx) { return !(--ctx->retain_count); } /* * return true if the context was destroyed, false if only its refcount * got decreased. Note that even if the context was destroyed it may * still live, if it's the currently selected context (by setContext). */ bool releaseContext(uintptr_t context_id) { bool res = false; context_map_mutex.lock(); /* * This can potentially called (from glX) with an invalid context_id, * so don't assert on it being valid. */ if (context_map.find(context_id) != context_map.end()) { res = _releaseContext(context_map[context_id]); if (res) context_map.erase(context_id); } context_map_mutex.unlock(); return res; } void createContext(uintptr_t context_id) { // wglCreateContextAttribsARB causes internal calls to wglCreateContext to be // traced, causing context to be defined twice. if (context_map.find(context_id) != context_map.end()) { return; } context_ptr_t ctx(new Context); context_map_mutex.lock(); _retainContext(ctx); context_map[context_id] = ctx; context_map_mutex.unlock(); } void setContext(uintptr_t context_id) { ThreadState *ts = get_ts(); context_ptr_t ctx; context_map_mutex.lock(); assert(context_map.find(context_id) != context_map.end()); ctx = context_map[context_id]; context_map_mutex.unlock(); ts->current_context = ctx; if (!ctx->bound) { ctx->profile = glprofile::getCurrentContextProfile(); /* * The default viewport and scissor state is set when a context is * first made current, with values matching the bound drawable. Many * applications never thouch the default state ever again. * * Since we currently don't trace window sizes, and rely on viewport * calls to deduct, emit fake calls here so that viewport/scissor state * can be deducated. * * FIXME: don't call the real functions here -- just emit the fake * calls. */ GLint viewport[4] = {0, 0, 0, 0}; GLint scissor[4] = {0, 0, 0, 0}; _glGetIntegerv(GL_VIEWPORT, viewport); _glGetIntegerv(GL_SCISSOR_BOX, scissor); /* * On MacOSX the current context and surface are set independently, and * we might be called before both are set, so ignore empty boxes. */ if (viewport[2] && viewport[3] && scissor[2] && scissor[3]) { glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); ctx->bound = true; } } } void clearContext(void) { ThreadState *ts = get_ts(); ts->current_context = ts->dummy_context; } Context *getContext(void) { return get_ts()->current_context.get(); } } tmpNnpnZF/wrappers/d3dcommonshader.cpp0000664000175000017500000000366212543167424017414 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "d3dshader.hpp" #include "d3dcommonshader.hpp" void DumpShader(trace::Writer &writer, const void *pShaderBytecode, SIZE_T BytecodeLength) { IDisassemblyBuffer *pDisassembly = NULL; HRESULT hr = DisassembleShader(pShaderBytecode, BytecodeLength, &pDisassembly); if (SUCCEEDED(hr)) { writer.beginRepr(); writer.writeString((const char *)pDisassembly->GetBufferPointer(), pDisassembly->GetBufferSize()); pDisassembly->Release(); } writer.writeBlob(pShaderBytecode, BytecodeLength); if (SUCCEEDED(hr)) { writer.endRepr(); } } tmpNnpnZF/helpers/0000775000175000017500000000000012543167424013426 5ustar chrischristmpNnpnZF/helpers/d3dcommonsize.hpp0000664000175000017500000001205612543167424016721 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once /* We purposedly don't include any D3D header, so that this header can be used * with all D3D versions. */ #include #include "os.hpp" static inline size_t _vertexCount(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount) { switch (PrimitiveType) { case D3DPT_POINTLIST: return PrimitiveCount; case D3DPT_LINELIST: return PrimitiveCount*2; case D3DPT_LINESTRIP: return PrimitiveCount + 1; case D3DPT_TRIANGLELIST: return PrimitiveCount * 3; case D3DPT_TRIANGLESTRIP: return PrimitiveCount + 2; case D3DPT_TRIANGLEFAN: return PrimitiveCount + 2; default: os::log("apitrace: warning: %s: unknown D3DPRIMITIVETYPE %u\n", __FUNCTION__, PrimitiveType); return 0; } } static inline size_t _vertexDataSize(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, UINT VertexStride) { return _vertexCount(PrimitiveType, PrimitiveCount) * VertexStride; } static inline size_t _indexDataSize(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, D3DFORMAT IndexDataFormat) { UINT IndexStride; switch (IndexDataFormat) { case D3DFMT_INDEX16: IndexStride = 2; break; case D3DFMT_INDEX32: IndexStride = 4; break; default: os::log("apitrace: warning: %s: unexpected index D3DFORMAT %u\n", __FUNCTION__, IndexDataFormat); return 0; } return _vertexCount(PrimitiveType, PrimitiveCount) * IndexStride; } /* * Return the number of tokens for a given shader. */ static inline size_t _shaderSize(const DWORD *pFunction) { DWORD dwLength = 0; while (true) { DWORD dwToken = pFunction[dwLength++]; switch (dwToken & D3DSI_OPCODE_MASK) { case D3DSIO_COMMENT: dwLength += (dwToken & D3DSI_COMMENTSIZE_MASK) >> D3DSI_COMMENTSIZE_SHIFT; break; case D3DSIO_END: if (dwToken == D3DSIO_END) { return dwLength * sizeof *pFunction; } break; } } } static inline size_t _getLockSize(D3DFORMAT Format, UINT Width, UINT Height, INT RowPitch, UINT Depth = 1, INT SlicePitch = 0) { if (Width == 0 || Height == 0 || Depth == 0) { return 0; } if (RowPitch < 0) { os::log("apitrace: warning: %s: negative row pitch %i\n", __FUNCTION__, RowPitch); return 0; } if (SlicePitch < 0) { os::log("apitrace: warning: %s: negative slice pitch %i\n", __FUNCTION__, SlicePitch); return 0; } switch ((DWORD)Format) { case D3DFMT_DXT1: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: Width = (Width + 3) / 4; Height = (Height + 3) / 4; break; #if DIRECT3D_VERSION >= 0x900 case D3DFMT_ATI1N: case D3DFMT_ATI2N: /* * Because these are unsupported formats, RowPitch is not set to the * number of bytes between row of blocks, but instead in such way that * Height * RowPitch will match the expected size. */ break; #endif /* DIRECT3D_VERSION >= 0x900 */ case D3DFMT_UYVY: case D3DFMT_YUY2: #if DIRECT3D_VERSION >= 0x900 case D3DFMT_R8G8_B8G8: case D3DFMT_G8R8_G8B8: #endif /* DIRECT3D_VERSION >= 0x900 */ Width = (Width + 1) / 2; break; #if DIRECT3D_VERSION >= 0x900 case D3DFMT_NV12: case D3DFMT_YV12: return (Height + ((Height + 1) / 2)) * RowPitch; case D3DFMT_NULL: return 0; #endif /* DIRECT3D_VERSION >= 0x900 */ default: break; } (void)Width; size_t size = Height * RowPitch; if (Depth > 1) { size += (Depth - 1) * SlicePitch; } return size; } tmpNnpnZF/helpers/dxgisize.hpp0000664000175000017500000001734112543167424015773 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once /* We purposedly don't include any D3D header, so that this header can be used * with all D3D versions. */ #include #include #include "os.hpp" /** * Information about active sub-resource maps */ struct _MAP_DESC { VOID * pData; size_t Size; _MAP_DESC(void) : pData(0), Size(0) {} }; static size_t _calcDataSize(DXGI_FORMAT Format, UINT Width, UINT Height, UINT RowPitch, UINT Depth = 1, UINT DepthPitch = 0) { if (Width == 0 || Height == 0 || Depth == 0) { return 0; } size_t BlockSize = 0; UINT BlockWidth = 1; UINT BlockHeight = 1; switch (Format) { case DXGI_FORMAT_UNKNOWN: return 0; case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: BlockSize = 128; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: BlockSize = 96; break; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: BlockSize = 64; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: BlockSize = 32; break; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: BlockSize = 16; break; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: BlockSize = 8; break; case DXGI_FORMAT_R1_UNORM: BlockSize = 1; break; case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: BlockSize = 32; BlockWidth = 2; break; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: BlockSize = 64; BlockWidth = 4; BlockHeight = 4; break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: BlockSize = 128; BlockWidth = 4; BlockHeight = 4; break; default: os::log("apitrace: warning: %s: unknown format 0x%04X\n", __FUNCTION__, Format); return 0; } Width = (Width + BlockWidth - 1) / BlockWidth; Height = (Height + BlockHeight - 1) / BlockHeight; size_t size = (Width * BlockSize + 7)/ 8; if (Height > 1) { size += (Height - 1) * RowPitch; } if (Depth > 1) { size += (Depth - 1) * DepthPitch; } return size; } static size_t _calcMipDataSize(UINT MipLevel, DXGI_FORMAT Format, UINT Width, UINT Height, UINT RowPitch, UINT Depth = 1, UINT DepthPitch = 0) { if (Width == 0 || Height == 0 || Depth == 0) { return 0; } Width = std::max(Width >> MipLevel, UINT(1)); Height = std::max(Height >> MipLevel, UINT(1)); Depth = std::max(Depth >> MipLevel, UINT(1)); return _calcDataSize(Format, Width, Height, RowPitch, Depth, DepthPitch); } inline UINT _getNumMipLevels(UINT Width, UINT Height = 1, UINT Depth = 1) { UINT MipLevels = 0; do { ++MipLevels; Width >>= 1; Height >>= 1; Depth >>= 1; } while (Width || Height || Depth); return MipLevels; } static inline void _getMapDesc(IDXGISurface *pResource, DXGI_MAPPED_RECT * pLockedRect, UINT MapFlags, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (!(MapFlags & DXGI_MAP_WRITE)) { return; } DXGI_SURFACE_DESC Desc; HRESULT hr = pResource->GetDesc(&Desc); if (FAILED(hr)) { return; } MapDesc.pData = pLockedRect->pBits; MapDesc.Size = _calcDataSize(Desc.Format, Desc.Width, Desc.Height, pLockedRect->Pitch); } tmpNnpnZF/helpers/d3d8size.hpp0000664000175000017500000001413412543167424015577 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once #include "d3dcommonsize.hpp" static inline size_t _declCount(const DWORD *pDeclaration) { size_t count = 0; while (pDeclaration[count++] != D3DVSD_END()) ; return count; } static inline void _getMapInfo(IDirect3DVertexBuffer8 *pBuffer, UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; MappedSize = 0; if (SizeToLock == 0) { D3DVERTEXBUFFER_DESC Desc; HRESULT hr = pBuffer->GetDesc(&Desc); if (FAILED(hr)) { return; } MappedSize = Desc.Size; } else { MappedSize = SizeToLock; } } static inline void _getMapInfo(IDirect3DIndexBuffer8 *pBuffer, UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; MappedSize = 0; if (SizeToLock == 0) { D3DINDEXBUFFER_DESC Desc; HRESULT hr = pBuffer->GetDesc(&Desc); if (FAILED(hr)) { return; } MappedSize = Desc.Size; } else { MappedSize = SizeToLock; } } static inline void _getMapInfo(IDirect3DSurface8 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DTexture8 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; D3DSURFACE_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DCubeTexture8 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; (void)FaceType; D3DSURFACE_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DVolume8 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; MappedSize = 0; HRESULT hr; D3DVOLUME_DESC Desc; hr = pVolume->GetDesc(&Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; UINT Depth; if (pBox) { Width = pBox->Right - pBox->Left; Height = pBox->Bottom - pBox->Top; Depth = pBox->Back - pBox->Front; } else { Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } static inline void _getMapInfo(IDirect3DVolumeTexture8 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; MappedSize = 0; HRESULT hr; D3DVOLUME_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; UINT Depth; if (pBox) { Width = pBox->Right - pBox->Left; Height = pBox->Bottom - pBox->Top; Depth = pBox->Back - pBox->Front; } else { Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } tmpNnpnZF/helpers/d3d7size.hpp0000664000175000017500000000576212543167424015605 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once static inline size_t _getVertexSize(DWORD dwFVF) { size_t size = 0; assert((dwFVF & D3DFVF_RESERVED0) == 0); switch (dwFVF & D3DFVF_POSITION_MASK) { case D3DFVF_XYZ: size += 3 * sizeof(FLOAT); break; case D3DFVF_XYZRHW: size += 4 * sizeof(FLOAT); break; case D3DFVF_XYZB1: size += (3 + 1) * sizeof(FLOAT); break; case D3DFVF_XYZB2: size += (3 + 2) * sizeof(FLOAT); break; case D3DFVF_XYZB3: size += (3 + 3) * sizeof(FLOAT); break; case D3DFVF_XYZB4: size += (3 + 4) * sizeof(FLOAT); break; case D3DFVF_XYZB5: size += (3 + 5) * sizeof(FLOAT); break; #if DIRECT3D_VERSION >= 0x0900 case D3DFVF_XYZW: size += 4 * sizeof(FLOAT); break; #endif } if (dwFVF & D3DFVF_NORMAL) { size += 3 * sizeof(FLOAT); } #if DIRECT3D_VERSION >= 0x0800 if (dwFVF & D3DFVF_PSIZE) { size += sizeof(FLOAT); } #else if (dwFVF & D3DFVF_RESERVED1) { // D3DLVERTEX size += sizeof(DWORD); } #endif if (dwFVF & D3DFVF_DIFFUSE) { size += sizeof(D3DCOLOR); } if (dwFVF & D3DFVF_SPECULAR) { size += sizeof(D3DCOLOR); } DWORD dwNumTextures = (dwFVF & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT; for (DWORD CoordIndex = 0; CoordIndex < dwNumTextures; ++CoordIndex) { // See D3DFVF_TEXCOORDSIZE* DWORD dwTexCoordSize = (dwFVF >> (CoordIndex*2 + 16)) & 3; size += dwTexCoordSize * sizeof(FLOAT); } assert((dwFVF & D3DFVF_RESERVED2) == 0); return size; } tmpNnpnZF/helpers/d3dshader.hpp0000664000175000017500000000353612543167424016007 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include // Matches ID3DXBuffer, ID3D10Blob, ID3DBlob struct IDisassemblyBuffer : public IUnknown { virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; // XXX: ID3D10Blob, ID3DBlob actually return SIZE_T but DWORD should give // the same results virtual DWORD STDMETHODCALLTYPE GetBufferSize(void) = 0; }; // D3D9 and earlier HRESULT DisassembleShader(const DWORD *tokens, IDisassemblyBuffer **ppDisassembly); // D3D10 and higher HRESULT DisassembleShader(const void *pShader, SIZE_T BytecodeLength, IDisassemblyBuffer **ppDisassembly); tmpNnpnZF/helpers/glprofile.cpp0000664000175000017500000002075512543167424016126 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "glprofile.hpp" #include #include #include "os.hpp" #include "glproc.hpp" namespace glprofile { bool Profile::matches(const Profile expected) const { if (api != expected.api) { return false; } if (!versionGreaterOrEqual(expected.major, expected.minor)) { return false; } /* * GLX_ARB_create_context/WGL_ARB_create_context specs state that * * "If version 3.1 is requested, the context returned may implement * any of the following versions: * * * Version 3.1. The GL_ARB_compatibility extension may or may not * be implemented, as determined by the implementation. * * * The core profile of version 3.2 or greater." */ if (core != expected.core && (expected.major != 3 || expected.minor != 1)) { return false; } /* * Only check forward-compatible flag prior to 3.2 contexts. * * Note that on MacOSX all 3.2+ context must be forward-compatible. */ #ifndef __APPLE__ if (forwardCompatible > expected.forwardCompatible) { return false; } #endif return true; } std::string Profile::str(void) const { std::stringstream ss; ss << *this; return ss.str(); } std::ostream & operator << (std::ostream &os, const Profile & profile) { os << "OpenGL"; if (profile.api == API_GLES) { os << " ES"; } os << " " << profile.major << "." << profile.minor; if (profile.api == API_GL) { if (profile.versionGreaterOrEqual(3, 2)) { os << " " << (profile.core ? "core" : "compat"); } if (profile.forwardCompatible) { os << " forward-compatible"; } } return os; } static inline bool isDigit(char c) { return c >= '0' && c <= '9'; } static unsigned parseNumber(const char * & p) { unsigned n = 0; char c = *p; while (isDigit(c)) { unsigned digit = c - '0'; n *= 10; n += digit; ++p; c = *p; } return n; } /* * Parse API and version numbers from a GL_VERSION string. * * OpenGL 2.1 specification states that GL_VERSION string is laid out as * * * * Where is either of the form . * or .., where the numbers all * have one or more digits. The release number and vendor specific * information are optional. * * OpenGL ES 1.x specification states that GL_VERSION is laid out as * * "OpenGL ES-XX 1.x" XX={CM,CL} * * OpenGL ES 2 and 3 specifications state that GL_VERSION is laid out as * * "OpenGL ES N.M vendor-specific information" */ static Profile parseVersion(const char *version) { Profile profile(API_GL, 0, 0, false); const char *p = version; if (p[0] == 'O' && p[1] == 'p' && p[2] == 'e' && p[3] == 'n' && p[4] == 'G' && p[5] == 'L' && p[6] == ' ' && p[7] == 'E' && p[8] == 'S') { p += 9; profile.api = API_GLES; // skip `-{CM,CL}` if (*p == '-') { ++p; while (*p != ' ') { if (*p == '\0') { goto malformed; } ++p; } } // skip white-space while (*p == ' ') { if (*p == '\0') { goto malformed; } ++p; } } if (!isDigit(*p)) { goto malformed; } profile.major = parseNumber(p); if (*p++ == '.' && isDigit(*p)) { profile.minor = parseNumber(p); } else { goto malformed; } return profile; malformed: os::log("warning: malformed GL_VERSION (\"%s\")\n", version); return profile; } /* * Get the profile of the current context. */ Profile getCurrentContextProfile(void) { Profile profile(API_GL, 0, 0, false); assert(parseVersion("3.0 Mesa 10.3.2") == Profile(API_GL, 3, 0)); assert(parseVersion("3.3 (Core Profile) Mesa 10.3.2") == Profile(API_GL, 3, 3)); assert(parseVersion("4.4.0 NVIDIA 331.89") == Profile(API_GL, 4, 4)); assert(parseVersion("OpenGL ES 3.0 Mesa 10.3.2") == Profile(API_GLES, 3, 0)); const char *version = (const char *)_glGetString(GL_VERSION); if (!version) { os::log("apitrace: warning: got null GL_VERSION\n"); return profile; } // Parse the version string. profile = parseVersion(version); if (profile.major >= 3) { /* * From OpenGL and OpenGL ES version 3 onwards, the GL version may also * be queried via GL_MAJOR VERSION and GL_MINOR_VERSION, which should * match the major number and minor number in GL_VERSION string, so use * it to check we parsed the versions correcly. */ GLint majorVersion = 0; _glGetIntegerv(GL_MAJOR_VERSION, &majorVersion); GLint minorVersion = 0; _glGetIntegerv(GL_MINOR_VERSION, &minorVersion); if (majorVersion != profile.major || minorVersion != profile.minor) { os::log("apitrace: warning: OpenGL context version mismatch (GL_VERSION=\"%s\", but GL_MAJOR/MINOR_VERSION=%u.%u)\n", version, majorVersion, minorVersion); } } if (profile.api == API_GL) { if (profile.versionGreaterOrEqual(3, 0)) { GLint contextFlags = 0; _glGetIntegerv(GL_CONTEXT_FLAGS, &contextFlags); if (contextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) { profile.forwardCompatible = true; } } if (profile.versionGreaterOrEqual(3, 2)) { GLint profileMask = 0; _glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profileMask); if (profileMask & GL_CONTEXT_CORE_PROFILE_BIT) { profile.core = true; } } } return profile; } void Extensions::getCurrentContextExtensions(const Profile & profile) { assert(strings.empty()); if (profile.major >= 3) { // Use glGetStringi GLint num_strings = 0; _glGetIntegerv(GL_NUM_EXTENSIONS, &num_strings); assert(num_strings); for (int i = 0; i < num_strings; ++i) { const char *extension = reinterpret_cast(_glGetStringi(GL_EXTENSIONS, i)); assert(extension); if (extension) { strings.insert(extension); } } } else { // Use glGetString const char *begin = reinterpret_cast(_glGetString(GL_EXTENSIONS)); assert(begin); if (begin) { do { const char *end = begin; char c = *end; while (c != '\0' && c != ' ') { ++end; c = *end; } if (end != begin) { strings.insert(std::string(begin, end)); } if (c == '\0') { break; } begin = end + 1; } while(true); } } } bool Extensions::has(const char *string) const { return strings.find(string) != strings.end(); } } /* namespace glprofile */ tmpNnpnZF/helpers/glprofile.hpp0000664000175000017500000000701712543167424016127 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Representation and manipulation of OpenGL context profiles. */ #pragma once #include #include #include namespace glprofile { enum Api { API_GL = 0, API_GLES }; struct Profile { unsigned major:8; unsigned minor:8; unsigned api:1; unsigned core:1; unsigned forwardCompatible:1; inline Profile( Api _api = API_GL, unsigned _major = 1, unsigned _minor = 0, bool _core = false, bool _forwardCompatible = false ) { api = _api; major = _major; minor = _minor; core = _core; forwardCompatible = _forwardCompatible; } inline bool desktop(void) { return api == API_GL; } inline bool es(void) const { return api == API_GLES; } inline bool versionGreaterOrEqual(unsigned refMajor, unsigned refMinor) const { return major > refMajor || (major == refMajor && minor >= refMinor); } inline bool versionGreaterOrEqual(Api refApi, unsigned refMajor, unsigned refMinor) const { return api == refApi && versionGreaterOrEqual(refMajor, refMinor); } bool matches(const Profile expected) const; // Comparison operator, mainly for use in std::map inline bool operator == (const Profile & other) const { return major == other.major && minor == other.minor && api == other.api && core == other.core && forwardCompatible == other.forwardCompatible; } // Comparison operator, mainly for use in std::map inline bool operator < (const Profile & other) const { return major < other.major || minor < other.minor || api < other.api || core < other.core || forwardCompatible < other.forwardCompatible; } std::string str(void) const; }; std::ostream & operator << (std::ostream &os, const Profile & profile); Profile getCurrentContextProfile(void); struct Extensions { std::set strings; void getCurrentContextExtensions(const Profile & profile); bool has(const char *string) const; }; } /* namespace glprofile */ tmpNnpnZF/helpers/glsize.hpp0000664000175000017500000012042112543167424015434 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2010 VMware, Inc. * Copyright 2004 IBM Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments, depending. */ #pragma once #include #include #include #include "os.hpp" #include "glimports.hpp" // Vertex/element formats static inline size_t _gl_type_size(GLenum type, GLint size = 1) { switch (type) { case GL_BOOL: case GL_BYTE: case GL_UNSIGNED_BYTE: return size * 1; case GL_SHORT: case GL_UNSIGNED_SHORT: case GL_2_BYTES: case GL_HALF_FLOAT: return size * 2; case GL_3_BYTES: return size * 3; case GL_INT: case GL_UNSIGNED_INT: case GL_FLOAT: case GL_4_BYTES: case GL_FIXED: return size * 4; case GL_DOUBLE: return size * 8; case GL_INT_2_10_10_10_REV: case GL_INT_10_10_10_2_OES: case GL_UNSIGNED_INT_2_10_10_10_REV: case GL_UNSIGNED_INT_10_10_10_2_OES: case GL_UNSIGNED_INT_10F_11F_11F_REV: // packed return 4; default: os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, type); return 0; } } static inline void _gl_uniform_size(GLenum type, GLenum &elemType, GLint &numCols, GLint &numRows) { numCols = 1; numRows = 1; switch (type) { case GL_FLOAT: elemType = GL_FLOAT; break; case GL_FLOAT_VEC2: elemType = GL_FLOAT; numCols = 2; break; case GL_FLOAT_VEC3: elemType = GL_FLOAT; numCols = 3; break; case GL_FLOAT_VEC4: elemType = GL_FLOAT; numCols = 4; break; case GL_DOUBLE: elemType = GL_DOUBLE; break; case GL_DOUBLE_VEC2: elemType = GL_DOUBLE; numCols = 2; break; case GL_DOUBLE_VEC3: elemType = GL_DOUBLE; numCols = 3; break; case GL_DOUBLE_VEC4: elemType = GL_DOUBLE; numCols = 4; break; case GL_INT: elemType = GL_INT; break; case GL_INT_VEC2: elemType = GL_INT; numCols = 2; break; case GL_INT_VEC3: elemType = GL_INT; numCols = 3; break; case GL_INT_VEC4: elemType = GL_INT; numCols = 4; break; case GL_UNSIGNED_INT: elemType = GL_UNSIGNED_INT; break; case GL_UNSIGNED_INT_VEC2: elemType = GL_UNSIGNED_INT; numCols = 2; break; case GL_UNSIGNED_INT_VEC3: elemType = GL_UNSIGNED_INT; numCols = 3; break; case GL_UNSIGNED_INT_VEC4: elemType = GL_UNSIGNED_INT; numCols = 4; break; case GL_BOOL: elemType = GL_BOOL; break; case GL_BOOL_VEC2: elemType = GL_BOOL; numCols = 2; break; case GL_BOOL_VEC3: elemType = GL_BOOL; numCols = 3; break; case GL_BOOL_VEC4: elemType = GL_BOOL; numCols = 4; break; case GL_FLOAT_MAT2: elemType = GL_FLOAT; numCols = 2; numRows = 2; break; case GL_FLOAT_MAT3: elemType = GL_FLOAT; numCols = 3; numRows = 3; break; case GL_FLOAT_MAT4: elemType = GL_FLOAT; numCols = 4; numRows = 4; break; case GL_FLOAT_MAT2x3: elemType = GL_FLOAT; numCols = 2; numRows = 3; break; case GL_FLOAT_MAT2x4: elemType = GL_FLOAT; numCols = 2; numRows = 4; break; case GL_FLOAT_MAT3x2: elemType = GL_FLOAT; numCols = 3; numRows = 2; break; case GL_FLOAT_MAT3x4: elemType = GL_FLOAT; numCols = 3; numRows = 4; break; case GL_FLOAT_MAT4x2: elemType = GL_FLOAT; numCols = 4; numRows = 2; break; case GL_FLOAT_MAT4x3: elemType = GL_FLOAT; numCols = 4; numRows = 3; break; case GL_DOUBLE_MAT2: elemType = GL_DOUBLE; numCols = 2; numRows = 2; break; case GL_DOUBLE_MAT3: elemType = GL_DOUBLE; numCols = 3; numRows = 3; break; case GL_DOUBLE_MAT4: elemType = GL_DOUBLE; numCols = 4; numRows = 4; break; case GL_DOUBLE_MAT2x3: elemType = GL_DOUBLE; numCols = 2; numRows = 3; break; case GL_DOUBLE_MAT2x4: elemType = GL_DOUBLE; numCols = 2; numRows = 4; break; case GL_DOUBLE_MAT3x2: elemType = GL_DOUBLE; numCols = 3; numRows = 2; break; case GL_DOUBLE_MAT3x4: elemType = GL_DOUBLE; numCols = 3; numRows = 4; break; case GL_DOUBLE_MAT4x2: elemType = GL_DOUBLE; numCols = 4; numRows = 2; break; case GL_DOUBLE_MAT4x3: elemType = GL_DOUBLE; numCols = 4; numRows = 3; break; case GL_SAMPLER_1D: case GL_SAMPLER_2D: case GL_SAMPLER_3D: case GL_SAMPLER_CUBE: case GL_SAMPLER_1D_SHADOW: case GL_SAMPLER_2D_SHADOW: case GL_SAMPLER_1D_ARRAY: case GL_SAMPLER_2D_ARRAY: case GL_SAMPLER_CUBE_MAP_ARRAY: case GL_SAMPLER_1D_ARRAY_SHADOW: case GL_SAMPLER_2D_ARRAY_SHADOW: case GL_SAMPLER_2D_MULTISAMPLE: case GL_SAMPLER_2D_MULTISAMPLE_ARRAY: case GL_SAMPLER_CUBE_SHADOW: case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: case GL_SAMPLER_BUFFER: case GL_SAMPLER_2D_RECT: case GL_SAMPLER_2D_RECT_SHADOW: case GL_INT_SAMPLER_1D: case GL_INT_SAMPLER_2D: case GL_INT_SAMPLER_3D: case GL_INT_SAMPLER_CUBE: case GL_INT_SAMPLER_1D_ARRAY: case GL_INT_SAMPLER_2D_ARRAY: case GL_INT_SAMPLER_CUBE_MAP_ARRAY: case GL_INT_SAMPLER_2D_MULTISAMPLE: case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: case GL_INT_SAMPLER_BUFFER: case GL_INT_SAMPLER_2D_RECT: case GL_UNSIGNED_INT_SAMPLER_1D: case GL_UNSIGNED_INT_SAMPLER_2D: case GL_UNSIGNED_INT_SAMPLER_3D: case GL_UNSIGNED_INT_SAMPLER_CUBE: case GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: case GL_UNSIGNED_INT_SAMPLER_BUFFER: case GL_UNSIGNED_INT_SAMPLER_2D_RECT: elemType = GL_INT; break; default: os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, type); elemType = GL_NONE; numCols = 0; numRows = 0; return; } } static inline size_t _glArrayPointer_size(GLint size, GLenum type, GLsizei stride, GLsizei count) { if (!count) { return 0; } if (size == GL_BGRA) { size = 4; } if (size > 4) { os::log("apitrace: warning: %s: unexpected size 0x%04X\n", __FUNCTION__, size); } size_t elementSize = _gl_type_size(type, size); if (!stride) { stride = (GLsizei)elementSize; } return stride*(count - 1) + elementSize; } #define _glVertexPointer_size(size, type, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glNormalPointer_size(type, stride, count) _glArrayPointer_size(3, type, stride, count) #define _glColorPointer_size(size, type, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glIndexPointer_size(type, stride, count) _glArrayPointer_size(1, type, stride, count) #define _glTexCoordPointer_size(size, type, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glEdgeFlagPointer_size(stride, count) _glArrayPointer_size(1, GL_BOOL, stride, count) #define _glFogCoordPointer_size(type, stride, count) _glArrayPointer_size(1, type, stride, count) #define _glSecondaryColorPointer_size(size, type, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glVertexAttribPointer_size(size, type, normalized, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glVertexAttribPointerARB_size(size, type, normalized, stride, count) _glArrayPointer_size(size, type, stride, count) #define _glVertexAttribPointerNV_size(size, type, stride, count) _glArrayPointer_size(size, type, stride, count) /** * Same as glGetIntegerv, but passing the result in the return value. */ static inline GLint _glGetInteger(GLenum pname) { GLint param = 0; _glGetIntegerv(pname, ¶m); return param; } static inline GLint _element_array_buffer_binding(void) { return _glGetInteger(GL_ELEMENT_ARRAY_BUFFER_BINDING); } /** * Same as glGetVertexAttribiv, but passing the result in the return value. */ static inline GLint _glGetVertexAttribi(GLuint index, GLenum pname) { GLint param = 0; _glGetVertexAttribiv(index, pname, ¶m); return param; } static inline GLuint _glDrawArrays_count(GLint first, GLsizei count) { if (!count) { return 0; } return first + count; } #define _glDrawArraysEXT_count _glDrawArrays_count /* Forward declaration for definition in gltrace.py */ void _shadow_glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); static inline GLuint _glDrawElementsBaseVertex_count(GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) { GLvoid *temp = 0; if (!count) { return 0; } GLint element_array_buffer = _element_array_buffer_binding(); if (element_array_buffer) { // Read indices from index buffer object GLintptr offset = (GLintptr)indices; GLsizeiptr size = count*_gl_type_size(type); temp = malloc(size); if (!temp) { return 0; } memset(temp, 0, size); _shadow_glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, offset, size, temp); indices = temp; } else { if (!indices) { return 0; } } GLuint maxindex = 0; GLboolean restart_enabled = _glIsEnabled(GL_PRIMITIVE_RESTART); while ((_glGetError() == GL_INVALID_ENUM)) ; GLuint restart_index = 0; if (restart_enabled) { restart_index = (GLuint)_glGetInteger(GL_PRIMITIVE_RESTART_INDEX); } GLsizei i; if (type == GL_UNSIGNED_BYTE) { const GLubyte *p = (const GLubyte *)indices; for (i = 0; i < count; ++i) { GLuint index = p[i]; if (restart_enabled && index == restart_index) { continue; } if (index > maxindex) { maxindex = index; } } } else if (type == GL_UNSIGNED_SHORT) { const GLushort *p = (const GLushort *)indices; for (i = 0; i < count; ++i) { GLuint index = p[i]; if (restart_enabled && index == restart_index) { continue; } if (index > maxindex) { maxindex = index; } } } else if (type == GL_UNSIGNED_INT) { const GLuint *p = (const GLuint *)indices; for (i = 0; i < count; ++i) { GLuint index = p[i]; if (restart_enabled && index == restart_index) { continue; } if (index > maxindex) { maxindex = index; } } } else { os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, type); } if (element_array_buffer) { free(temp); } maxindex += basevertex; return maxindex + 1; } #define _glDrawRangeElementsBaseVertex_count(start, end, count, type, indices, basevertex) _glDrawElementsBaseVertex_count(count, type, indices, basevertex) #define _glDrawElements_count(count, type, indices) _glDrawElementsBaseVertex_count(count, type, indices, 0); #define _glDrawRangeElements_count(start, end, count, type, indices) _glDrawElements_count(count, type, indices) #define _glDrawRangeElementsEXT_count _glDrawRangeElements_count /* FIXME take in consideration instancing */ #define _glDrawArraysInstanced_count(first, count, primcount) _glDrawArrays_count(first, count) #define _glDrawElementsInstanced_count(count, type, indices, primcount) _glDrawElements_count(count, type, indices) #define _glDrawElementsInstancedBaseVertex_count(count, type, indices, primcount, basevertex) _glDrawElementsBaseVertex_count(count, type, indices, basevertex) #define _glDrawRangeElementsInstanced_count(start, end, count, type, indices, primcount) _glDrawRangeElements_count(start, end, count, type, indices) #define _glDrawRangeElementsInstancedBaseVertex_count(start, end, count, type, indices, primcount, basevertex) _glDrawRangeElementsBaseVertex_count(start, end, count, type, indices, basevertex) #define _glDrawArraysInstancedBaseInstance_count(first, count, primcount, baseinstance) _glDrawArrays_count(first, count) #define _glDrawElementsInstancedBaseInstance_count(count, type, indices, primcount, baseinstance) _glDrawElements_count(count, type, indices) #define _glDrawElementsInstancedBaseVertexBaseInstance_count(count, type, indices, primcount, basevertex, baseinstance) _glDrawElementsBaseVertex_count(count, type, indices, basevertex) #define _glDrawArraysInstancedARB_count _glDrawArraysInstanced_count #define _glDrawArraysInstancedEXT_count _glDrawArraysInstanced_count #define _glDrawArraysInstancedANGLE_count _glDrawArraysInstanced_count #define _glDrawElementsInstancedARB_count _glDrawElementsInstanced_count #define _glDrawElementsInstancedEXT_count _glDrawElementsInstanced_count #define _glDrawElementsInstancedANGLE_count _glDrawElementsInstanced_count static inline GLuint _glMultiDrawArrays_count(const GLint *first, const GLsizei *count, GLsizei drawcount) { GLuint _count = 0; for (GLsizei draw = 0; draw < drawcount; ++draw) { GLuint _count_draw = _glDrawArrays_count(first[draw], count[draw]); _count = std::max(_count, _count_draw); } return _count; } static inline GLuint _glMultiDrawElements_count(const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount) { GLuint _count = 0; for (GLsizei draw = 0; draw < drawcount; ++draw) { GLuint _count_draw = _glDrawElements_count(count[draw], type, indices[draw]); _count = std::max(_count, _count_draw); } return _count; } static inline GLuint _glMultiDrawElementsBaseVertex_count(const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint * basevertex) { GLuint _count = 0; for (GLsizei draw = 0; draw < drawcount; ++draw) { GLuint _count_draw = _glDrawElementsBaseVertex_count(count[draw], type, indices[draw], basevertex[draw]); _count = std::max(_count, _count_draw); } return _count; } #define _glMultiDrawArraysEXT_count _glMultiDrawArrays_count #define _glMultiDrawElementsEXT_count _glMultiDrawElements_count #define _glMultiModeDrawArraysIBM_count(first, count, drawcount, modestride) _glMultiDrawArrays_count(first, count, drawcount) #define _glMultiModeDrawElementsIBM_count(count, type, indices, drawcount, modestride) _glMultiDrawElements_count(count, type, (const GLvoid **)indices, drawcount) static inline size_t _glCallLists_size(GLsizei n, GLenum type) { return n*_gl_type_size(type); } static inline size_t _glMap1d_size(GLenum target, GLint stride, GLint order) { if (order < 1) { return 0; } GLint channels; switch (target) { case GL_MAP1_INDEX: case GL_MAP1_TEXTURE_COORD_1: channels = 1; break; case GL_MAP1_TEXTURE_COORD_2: channels = 2; break; case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_3: case GL_MAP1_VERTEX_3: channels = 3; break; case GL_MAP1_COLOR_4: case GL_MAP1_TEXTURE_COORD_4: case GL_MAP1_VERTEX_4: channels = 4; break; default: os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, target); return 0; } if (stride < channels) { return 0; } return channels + stride * (order - 1); } #define _glMap1f_size _glMap1d_size static inline size_t _glMap2d_size(GLenum target, GLint ustride, GLint uorder, GLint vstride, GLint vorder) { if (uorder < 1 || vorder < 1) { return 0; } GLint channels; switch (target) { case GL_MAP2_INDEX: case GL_MAP2_TEXTURE_COORD_1: channels = 1; break; case GL_MAP2_TEXTURE_COORD_2: channels = 2; break; case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_3: case GL_MAP2_VERTEX_3: channels = 3; break; case GL_MAP2_COLOR_4: case GL_MAP2_TEXTURE_COORD_4: case GL_MAP2_VERTEX_4: channels = 4; break; default: os::log("apitrace: warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, target); return 0; } if (ustride < channels || vstride < channels) { return 0; } return channels + ustride * (uorder - 1) + vstride * (vorder - 1); } #define _glMap2f_size _glMap2d_size /** * Number of channels in this format. * * That is, the number of elements per pixel when this format is passed with a * to DrawPixels, ReadPixels, TexImage*, TexSubImage*, GetTexImage, etc. */ static inline unsigned _gl_format_channels(GLenum format) { switch (format) { case GL_COLOR_INDEX: case GL_RED: case GL_RED_INTEGER: case GL_GREEN: case GL_GREEN_INTEGER: case GL_BLUE: case GL_BLUE_INTEGER: case GL_ALPHA: case GL_ALPHA_INTEGER: case GL_INTENSITY: case GL_LUMINANCE: case GL_LUMINANCE_INTEGER_EXT: case GL_DEPTH_COMPONENT: case GL_STENCIL_INDEX: return 1; case GL_DEPTH_STENCIL: case GL_LUMINANCE_ALPHA: case GL_LUMINANCE_ALPHA_INTEGER_EXT: case GL_RG: case GL_RG_INTEGER: case GL_422_EXT: // (luminance, chrominance) case GL_422_REV_EXT: // (luminance, chrominance) case GL_422_AVERAGE_EXT: // (luminance, chrominance) case GL_422_REV_AVERAGE_EXT: // (luminance, chrominance) case GL_HILO_NV: // (hi, lo) case GL_DSDT_NV: // (ds, dt) case GL_YCBCR_422_APPLE: // (luminance, chroma) case GL_RGB_422_APPLE: // (G, B) on even pixels, (G, R) on odd pixels case GL_YCRCB_422_SGIX: // (Y, [Cb,Cr]) return 2; case GL_RGB: case GL_RGB_INTEGER: case GL_BGR: case GL_BGR_INTEGER: case GL_DSDT_MAG_NV: // (ds, dt, magnitude) case GL_YCRCB_444_SGIX: // (Cb, Y, Cr) return 3; case GL_RGBA: case GL_RGBA_INTEGER: case GL_BGRA: case GL_BGRA_INTEGER: case GL_ABGR_EXT: case GL_CMYK_EXT: case GL_DSDT_MAG_VIB_NV: // (ds, dt, magnitude, vibrance) return 4; case GL_CMYKA_EXT: return 5; case GL_FORMAT_SUBSAMPLE_24_24_OML: case GL_FORMAT_SUBSAMPLE_244_244_OML: // requires UNSIGNED_INT_10_10_10_2, so this value will be ignored return 0; default: os::log("apitrace: warning: %s: unexpected format GLenum 0x%04X\n", __FUNCTION__, format); return 0; } } template static inline bool _is_pot(X x) { return (x & (x - 1)) == 0; } template static inline X _align(X x, Y y) { return (x + (y - 1)) & ~(y - 1); } static inline void _gl_format_size(GLenum format, GLenum type, unsigned & bits_per_element, unsigned & bits_per_pixel) { unsigned num_channels = _gl_format_channels(format); switch (type) { case GL_BITMAP: bits_per_pixel = bits_per_element = 1; break; case GL_BYTE: case GL_UNSIGNED_BYTE: bits_per_element = 8; bits_per_pixel = bits_per_element * num_channels; break; case GL_SHORT: case GL_UNSIGNED_SHORT: case GL_HALF_FLOAT: bits_per_element = 16; bits_per_pixel = bits_per_element * num_channels; break; case GL_INT: case GL_UNSIGNED_INT: case GL_FLOAT: bits_per_element = 32; bits_per_pixel = bits_per_element * num_channels; break; case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: bits_per_pixel = bits_per_element = 8; break; case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_8_8_MESA: case GL_UNSIGNED_SHORT_8_8_REV_MESA: bits_per_pixel = bits_per_element = 16; break; case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: case GL_UNSIGNED_INT_24_8: case GL_UNSIGNED_INT_10F_11F_11F_REV: case GL_UNSIGNED_INT_5_9_9_9_REV: case GL_UNSIGNED_INT_S8_S8_8_8_NV: case GL_UNSIGNED_INT_8_8_S8_S8_REV_NV: bits_per_pixel = bits_per_element = 32; break; case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: bits_per_pixel = bits_per_element = 64; break; default: os::log("apitrace: warning: %s: unexpected type GLenum 0x%04X\n", __FUNCTION__, type); bits_per_pixel = bits_per_element = 0; break; } } static inline size_t _glClearBufferData_size(GLenum format, GLenum type) { unsigned bits_per_element; unsigned bits_per_pixel; _gl_format_size(format, type, bits_per_element, bits_per_pixel); return (bits_per_pixel + 7)/8; } static inline size_t _gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth, GLboolean has_unpack_subimage) { unsigned bits_per_element; unsigned bits_per_pixel; _gl_format_size(format, type, bits_per_element, bits_per_pixel); GLint alignment = 4; GLint row_length = 0; GLint image_height = 0; GLint skip_rows = 0; GLint skip_pixels = 0; GLint skip_images = 0; _glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); if (has_unpack_subimage) { _glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length); _glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &image_height); _glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows); _glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels); _glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &skip_images); } if (row_length <= 0) { row_length = width; } size_t row_stride = (row_length*bits_per_pixel + 7)/8; if ((bits_per_element == 1*8 || bits_per_element == 2*8 || bits_per_element == 4*8 || bits_per_element == 8*8) && (GLint)bits_per_element < alignment*8) { row_stride = _align(row_stride, alignment); } if (image_height <= 0) { image_height = height; } size_t image_stride = image_height*row_stride; /* * We can't just do * * size = depth*image_stride * * here as that could result in reading beyond the end of the buffer when * selecting sub-rectangles via GL_UNPACK_SKIP_*. */ size_t size = (width*bits_per_pixel + 7)/8; if (height > 1) { size += (height - 1)*row_stride; } if (depth > 1) { size += (depth - 1)*image_stride; } /* XXX: GL_UNPACK_IMAGE_HEIGHT and GL_UNPACK_SKIP_IMAGES should probably * not be considered for pixel rectangles. */ size += (skip_pixels*bits_per_pixel + 7)/8; size += skip_rows*row_stride; size += skip_images*image_stride; return size; } // note that can_unpack_subimage() is generated by gltrace.py #define _glTexImage3D_size(format, type, width, height, depth) _gl_image_size(format, type, width, height, depth, can_unpack_subimage()) #define _glTexImage2D_size(format, type, width, height) _gl_image_size(format, type, width, height, 1, can_unpack_subimage()) #define _glTexImage1D_size(format, type, width) _gl_image_size(format, type, width, 1, 1, can_unpack_subimage()) #define _glDrawPixels_size(format, type, width, height) _glTexImage2D_size(format, type, width, height) #define _glConvolutionFilter1D_size(format, type, width) _glTexImage1D_size(format, type, width) #define _glConvolutionFilter2D_size(format, type, width, height) _glTexImage2D_size(format, type, width, height) #define _glColorTable_size(format, type, width) _glTexImage1D_size(format, type, width) #define _glColorSubTable_size(format, type, count) _glColorTable_size(format, type, count) #define _glBitmap_size(width, height) _glTexImage2D_size(GL_COLOR_INDEX, GL_BITMAP, width, height) #define _glPolygonStipple_size() _glBitmap_size(32, 32) static inline size_t _glClearBuffer_size(GLenum buffer) { switch (buffer) { case GL_COLOR: case GL_FRONT: case GL_BACK: case GL_LEFT: case GL_RIGHT: case GL_FRONT_AND_BACK: return 4; case GL_DEPTH: case GL_STENCIL: return 1; default: os::log("apitrace: warning: %s: unexpected buffer GLenum 0x%04X\n", __FUNCTION__, buffer); return 0; } } static inline size_t _glPath_coords_size(GLsizei numCoords, GLenum coordType) { switch (coordType) { case GL_BYTE: return numCoords * sizeof(GLbyte); case GL_UNSIGNED_BYTE: return numCoords * sizeof(GLubyte); case GL_SHORT: return numCoords * sizeof(GLshort); case GL_UNSIGNED_SHORT: return numCoords * sizeof(GLushort); case GL_FLOAT: return numCoords * sizeof(GLfloat); default: return 0; } } static inline size_t _glPath_fontName_size(GLenum fontTarget, const void *fontName) { switch (fontTarget) { case GL_STANDARD_FONT_NAME_NV: case GL_SYSTEM_FONT_NAME_NV: case GL_FILE_NAME_NV: { // Include +1 to copy nul terminator. GLsizei size = GLsizei(strlen(reinterpret_cast(fontName))+1); return size; } default: return 0; } } static inline size_t _glPath_chardcodes_size(GLsizei numGlyphs, GLenum type) { GLsizei bytes_per_glyph; switch (type) { case GL_FLOAT: case GL_INT: bytes_per_glyph = 4; break; case GL_BYTE: bytes_per_glyph = 1; break; case GL_SHORT: bytes_per_glyph = 2; break; default: return 0; } return bytes_per_glyph*numGlyphs; } static GLsizei floatPerTransformList(GLenum transformType) { switch (transformType) { case GL_NONE: return 0; case GL_TRANSLATE_X_NV: case GL_TRANSLATE_Y_NV: return 1; case GL_TRANSLATE_2D_NV: return 2; case GL_TRANSLATE_3D_NV: return 3; case GL_AFFINE_2D_NV: case GL_TRANSPOSE_AFFINE_2D_NV: return 6; case GL_PROJECTIVE_2D_NV: case GL_TRANSPOSE_PROJECTIVE_2D_NV: return 9; case GL_AFFINE_3D_NV: case GL_TRANSPOSE_AFFINE_3D_NV: return 12; case GL_PROJECTIVE_3D_NV: case GL_TRANSPOSE_PROJECTIVE_3D_NV: return 16; default: return 0; } } static inline size_t _gl_transformType_size(GLenum transformType) { return floatPerTransformList(transformType)*sizeof(GLfloat); } static inline size_t _gl_transformType_size(GLsizei numPaths, GLenum transformType) { return numPaths*floatPerTransformList(transformType)*sizeof(GLfloat); } static size_t valuesPerPathParameter(GLenum pname) { switch (pname) { case GL_PATH_FILL_MODE_NV: case GL_PATH_FILL_MASK_NV: case GL_PATH_FILL_COVER_MODE_NV: case GL_PATH_STROKE_WIDTH_NV: case GL_PATH_INITIAL_END_CAP_NV: case GL_PATH_TERMINAL_END_CAP_NV: case GL_PATH_JOIN_STYLE_NV: case GL_PATH_MITER_LIMIT_NV: case GL_PATH_INITIAL_DASH_CAP_NV: case GL_PATH_TERMINAL_DASH_CAP_NV: case GL_PATH_DASH_OFFSET_NV: case GL_PATH_DASH_OFFSET_RESET_NV: case GL_PATH_CLIENT_LENGTH_NV: case GL_PATH_STROKE_COVER_MODE_NV: case GL_PATH_STROKE_MASK_NV: case GL_PATH_STROKE_OVERSAMPLE_COUNT_NV: case GL_PATH_SAMPLE_QUALITY_NV: case GL_PATH_END_CAPS_NV: // not valid for glGetPathParameter case GL_PATH_DASH_CAPS_NV: // not valid for glGetPathParameter return 1; default: return 0; } } static inline size_t _gl_PathParameter_size(GLenum pname) { return valuesPerPathParameter(pname); } // See RFC-3629 "UTF-8, a transformation format of ISO 10646" // http://www.rfc-editor.org/rfc/rfc3629.txt // http://rfc-ref.org/RFC-TEXTS/3629/index.html static bool __glPathGetCodePointUTF8(const void *&utf_string, GLuint &code_point) { const GLubyte *p = reinterpret_cast(utf_string); GLubyte c0 = p[0]; if ((c0 & 0x80) == 0x00) { // Zero continuation (0 to 127) code_point = c0; assert(code_point <= 127); p += 1; } else { GLubyte c1 = p[1]; if ((c1 & 0xC0) != 0x80) { // Stop processing the UTF byte sequence early. return false; } if ((c0 & 0xE0) == 0xC0) { // One contination (128 to 2047) code_point = ((c0 & 0x1F) << 6) | (c1 & 0x3F); if (code_point < 128) { return false; } assert(code_point >= 128 && code_point <= 2047); p += 2; } else { GLubyte c2 = p[2]; if ((c2 & 0xC0) != 0x80) { // Stop processing the UTF byte sequence early. return false; } if ((c0 & 0xF0) == 0xE0) { // Two continuation (2048 to 55295 and 57344 to 65535) code_point = ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F); // "The definition of UTF-8 prohibits encoding character numbers between // U+D800 and U+DFFF, which are reserved for use with the UTF-16 // encoding form (as surrogate pairs) and do not directly represent // characters." // 0xD800 = 55,296 // 0xDFFF = 57,343 if ((code_point >= 55296) && (code_point <= 57343)) { // Stop processing the UTF byte sequence early. return false; } if (code_point < 2048) { return false; } assert(code_point >= 2048 && code_point <= 65535); assert(code_point < 55296 || code_point > 57343); p += 3; } else { GLubyte c3 = p[3]; if ((c3 & 0xC0) != 0x80) { // Stop processing the UTF byte sequence early. return false; } if ((c0 & 0xF8) == 0xF0) { // Three continuation (65536 to 1114111) code_point = ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F); if (code_point < 65536 && code_point > 1114111) { return false; } assert(code_point >= 65536 && code_point <= 1114111); p += 4; } else { // Skip invalid or restricted encodings. // Stop processing the UTF byte sequence early. return false; } } } } utf_string = p; return true; } // See RFC-2781 "UTF-16, a transformation format of ISO 10646" // http://rfc-ref.org/RFC-TEXTS/2781/index.html // http://www.rfc-editor.org/rfc/rfc2781.txt static bool __glPathGetCodePointUTF16(const void *&utf_string, GLuint &code_point) { // Section 2.2 (Decoding UTF-16) of http://www.rfc-editor.org/rfc/rfc2781.txt // "Decoding of a single character from UTF-16 to an ISO 10646 character // value proceeds as follows." const GLushort *p = reinterpret_cast(utf_string); // "Let W1 be the next 16-bit integer in the // sequence of integers representing the text." GLushort W1 = p[0]; // "1) If W1 < 0xD800 or W1 > 0xDFFF, the character value U is the value // of W1. Terminate." if ((W1 < 0xDB00) || (W1 > 0xDFFF)) { code_point = W1; p += 1; } else { // "2) Determine if W1 is between 0xD800 and 0xDBFF." bool between1 = (W1 >= 0xDB00) && (W1 <= 0xDBFF); if (!between1) { // "If not, the sequence // is in error and no valid character can be obtained using W1. // Terminate." return false; } // "Let W2 be the (eventual) next integer following W1." GLushort W2 = p[1]; // DOES NOT APPLY because API provides character (not byte) count. // "3) If there is no W2 (that is, the sequence ends with W1), [Terminate]" // "... or if W2 is not between 0xDC00 and 0xDFFF, the sequence // is in error. Terminate." bool between2 = (W2 >= 0xDC00) && (W2 <= 0xDFFF); if (!between2) { return false; } // "4) Construct a 20-bit unsigned integer U', taking the 10 low-order // bits of W1 as its 10 high-order bits and the 10 low-order bits of // W2 as its 10 low-order bits." code_point = ((W1 & 0x3FF) << 10) | (W2 & 0x3FF); // "5) Add 0x10000 to U' to obtain the character value U. Terminate." code_point += 0x10000; p += 2; } utf_string = p; return true; } static size_t bytesOfSequence(GLsizei count, GLenum type, const GLvoid *sequence) { GLsizei bytes_per_element; switch (type) { case GL_BYTE: bytes_per_element = sizeof(GLbyte); break; case GL_UNSIGNED_BYTE: bytes_per_element = sizeof(GLubyte); break; case GL_SHORT: bytes_per_element = sizeof(GLshort); break; case GL_UNSIGNED_SHORT: bytes_per_element = sizeof(GLushort); break; case GL_INT: bytes_per_element = sizeof(GLint); break; case GL_UNSIGNED_INT: bytes_per_element = sizeof(GLuint); break; case GL_FLOAT: bytes_per_element = sizeof(GLfloat); break; case GL_2_BYTES: bytes_per_element = 2*sizeof(GLubyte); break; case GL_3_BYTES: bytes_per_element = 3*sizeof(GLubyte); break; case GL_4_BYTES: bytes_per_element = 4*sizeof(GLubyte); break; case GL_UTF8_NV: { const void *utf_string = sequence; for (GLsizei i=0; i(sequence); const char *end = reinterpret_cast(utf_string); return end - start; } case GL_UTF16_NV: { const void *utf_string = sequence; for (GLsizei i=0; i(sequence); const char *end = reinterpret_cast(utf_string); return end - start; } default: // generate INVALID_ENUM return 0; } if (count > 0) { return count * bytes_per_element; } else { return 0; } } static inline size_t _gl_Paths_size(GLsizei numPaths, GLenum pathNameType, const GLvoid *paths) { return bytesOfSequence(numPaths, pathNameType, paths); } static inline size_t _gl_PathColorGen_size(GLenum genMode, GLenum colorFormat) { GLsizei coeffsPerComponent; switch (genMode) { case GL_NONE: coeffsPerComponent = 0; break; case GL_CONSTANT: coeffsPerComponent = 1; break; case GL_OBJECT_LINEAR: case GL_PATH_OBJECT_BOUNDING_BOX_NV: coeffsPerComponent = 3; break; case GL_EYE_LINEAR: coeffsPerComponent = 4; break; default: return 0; } GLsizei components; switch (colorFormat) { case GL_LUMINANCE: case GL_ALPHA: case GL_INTENSITY: components = 1; break; case GL_LUMINANCE_ALPHA: components = 2; break; case GL_RGB: components = 3; break; case GL_RGBA: components = 4; break; default: return 0; } GLsizei numCoeffs = components * coeffsPerComponent; return numCoeffs*sizeof(GLfloat); } static inline size_t _gl_PathTexGen_size(GLenum genMode, GLsizei components) { GLsizei coeffsPerComponent; switch (genMode) { case GL_NONE: return 0; case GL_CONSTANT: coeffsPerComponent = 1; break; case GL_OBJECT_LINEAR: case GL_PATH_OBJECT_BOUNDING_BOX_NV: coeffsPerComponent = 3; break; case GL_EYE_LINEAR: coeffsPerComponent = 4; break; default: return 0; } if (components < 1 || components > 4) { return 0; } GLsizei numCoeffs = components * coeffsPerComponent; return numCoeffs*sizeof(GLfloat); } static size_t valuesPerGetPathParameter(GLenum pname) { switch (pname) { case GL_PATH_FILL_MODE_NV: case GL_PATH_FILL_MASK_NV: case GL_PATH_FILL_COVER_MODE_NV: case GL_PATH_STROKE_WIDTH_NV: case GL_PATH_INITIAL_END_CAP_NV: case GL_PATH_TERMINAL_END_CAP_NV: case GL_PATH_JOIN_STYLE_NV: case GL_PATH_MITER_LIMIT_NV: case GL_PATH_INITIAL_DASH_CAP_NV: case GL_PATH_TERMINAL_DASH_CAP_NV: case GL_PATH_DASH_OFFSET_NV: case GL_PATH_DASH_OFFSET_RESET_NV: case GL_PATH_CLIENT_LENGTH_NV: case GL_PATH_STROKE_COVER_MODE_NV: case GL_PATH_STROKE_MASK_NV: case GL_PATH_STROKE_BOUND_NV: case GL_PATH_STROKE_OVERSAMPLE_COUNT_NV: case GL_PATH_SAMPLE_QUALITY_NV: return 1; default: return 0; } } static inline size_t _gl_GetPathParameter_size(GLenum pname) { return valuesPerGetPathParameter(pname); } static inline size_t _gl_GetPathSpacing(GLsizei numPaths, GLenum transformType) { switch (transformType) { case GL_TRANSLATE_X_NV: return (numPaths-1)*1; case GL_TRANSLATE_2D_NV: return (numPaths-1)*2; default: return 0; } } /** * Helper function for determining the string lengths for glShaderSource and * glShaderSourceARB, which is a tad too complex to inline in the specs. */ template static inline size_t _glShaderSource_length(const Char * const * string, const GLint *length, GLsizei index) { if (length != NULL && length[index] >= 0) { return (size_t)length[index]; } else { return strlen(string[index]); } } /** * Helper function for determining the string lengths for glGetDebugMessageLog*. */ template static inline size_t _glGetDebugMessageLog_length(const Char * string, const GLsizei *lengths, GLuint count) { size_t size = 0; GLuint index; if (lengths) { for (index = 0; index < count; ++index) { size += lengths[index]; } } else { for (index = 0; index < count; ++index) { size += strlen(&string[size]) + 1; } } if (size) { // Remove the last null terminator --size; } return size; } tmpNnpnZF/helpers/README.markdown0000664000175000017500000000036312543167424016131 0ustar chrischrisThis directory contains several headers with inline functions that are referred by the specs for determining sizes to array, blobs, etc. These are relied upon both when tracing and replaying so care must be taken to not make any assumptions. tmpNnpnZF/helpers/d3dshader.cpp0000664000175000017500000001402712543167424015777 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "d3dshader.hpp" #include "os.hpp" struct ID3DXBuffer : public IUnknown { virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; virtual DWORD STDMETHODCALLTYPE GetBufferSize(void) = 0; }; typedef HRESULT (WINAPI *PD3DXDISASSEMBLESHADER)( CONST DWORD *pShader, BOOL EnableColorCode, LPCSTR pComments, ID3DXBuffer **ppDisassembly ); HRESULT DisassembleShader(const DWORD *tokens, IDisassemblyBuffer **ppDisassembly) { static BOOL firsttime = TRUE; /* * TODO: Consider using d3dcompile_xx.dll per * http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx */ static HMODULE hD3DXModule = NULL; static PD3DXDISASSEMBLESHADER pfnD3DXDisassembleShader = NULL; if (firsttime) { if (!hD3DXModule) { unsigned release; int version; for (release = 0; release <= 1; ++release) { /* Version 41 corresponds to Mar 2009 version of DirectX Runtime / SDK */ for (version = 41; version >= 0; --version) { char filename[256]; _snprintf(filename, sizeof(filename), "d3dx9%s%s%u.dll", release ? "" : "d", version ? "_" : "", version); hD3DXModule = LoadLibraryA(filename); if (hD3DXModule) goto found; } } found: ; } if (hD3DXModule) { if (!pfnD3DXDisassembleShader) { pfnD3DXDisassembleShader = (PD3DXDISASSEMBLESHADER)GetProcAddress(hD3DXModule, "D3DXDisassembleShader"); } } firsttime = FALSE; } HRESULT hr = E_FAIL; if (pfnD3DXDisassembleShader) { hr = pfnD3DXDisassembleShader(tokens, FALSE, NULL, reinterpret_cast(ppDisassembly)); } return hr; } struct ID3D10Blob : public IUnknown { virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; virtual SIZE_T STDMETHODCALLTYPE GetBufferSize(void) = 0; }; typedef ID3D10Blob ID3DBlob; #define D3D_DISASM_ENABLE_COLOR_CODE 0x00000001 #define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS 0x00000002 #define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING 0x00000004 #define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE 0x00000008 #define D3D_DISASM_DISABLE_DEBUG_INFO 0x00000010 #define D3D_DISASM_ENABLE_INSTRUCTION_OFFSET 0x00000020 #define D3D_DISASM_INSTRUCTION_ONLY 0x00000040 typedef HRESULT (WINAPI *PFND3DDISASSEMBLE)( LPCVOID pSrcData, SIZE_T SrcDataSize, UINT Flags, LPCSTR szComments, ID3DBlob **ppDisassembly ); static PFND3DDISASSEMBLE pfnD3DDisassemble = NULL; typedef HRESULT (WINAPI *PFND3D10DISASSEMBLESHADER)( const void *pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob **ppDisassembly ); static PFND3D10DISASSEMBLESHADER pfnD3D10DisassembleShader = NULL; HRESULT DisassembleShader(const void *pShaderBytecode, SIZE_T BytecodeLength, IDisassemblyBuffer **ppDisassembly) { static bool firsttime = true; if (firsttime) { char szFilename[MAX_PATH]; HMODULE hModule = NULL; int version; for (version = 47; version >= 33; --version) { _snprintf(szFilename, sizeof(szFilename), "d3dcompiler_%i.dll", version); hModule = LoadLibraryA(szFilename); if (hModule) { pfnD3DDisassemble = (PFND3DDISASSEMBLE) GetProcAddress(hModule, "D3DDisassemble"); if (pfnD3DDisassemble) { break; } } } if (!pfnD3DDisassemble) { os::log("apitrace: warning: failed to load d3dcompiler_xx.dll\n"); /* * Fallback to D3D10DisassembleShader, which should be always present. */ if (GetSystemDirectoryA(szFilename, MAX_PATH)) { strcat(szFilename, "\\d3d10.dll"); hModule = LoadLibraryA(szFilename); if (hModule) { pfnD3D10DisassembleShader = (PFND3D10DISASSEMBLESHADER) GetProcAddress(hModule, "D3D10DisassembleShader"); } } } firsttime = false; } HRESULT hr = E_FAIL; if (pfnD3DDisassemble) { hr = pfnD3DDisassemble(pShaderBytecode, BytecodeLength, 0, NULL, reinterpret_cast(ppDisassembly)); } else if (pfnD3D10DisassembleShader) { hr = pfnD3D10DisassembleShader(pShaderBytecode, BytecodeLength, 0, NULL, reinterpret_cast(ppDisassembly)); } return hr; } tmpNnpnZF/helpers/d3d11size.hpp0000664000175000017500000001600412543167424015647 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once /* We purposedly don't include any D3D header, so that this header can be used * with all D3D versions. */ #include #include #include "dxgisize.hpp" #include "com_ptr.hpp" inline UINT _getNumMipLevels(const D3D11_BUFFER_DESC *pDesc) { return 1; } inline UINT _getNumMipLevels(const D3D11_TEXTURE1D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width); } inline UINT _getNumMipLevels(const D3D11_TEXTURE2D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width, pDesc->Height); } inline UINT _getNumMipLevels(const D3D11_TEXTURE3D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width, pDesc->Height, pDesc->Depth); } inline UINT _getNumSubResources(const D3D11_BUFFER_DESC *pDesc) { return 1; } inline UINT _getNumSubResources(const D3D11_TEXTURE1D_DESC *pDesc) { return _getNumMipLevels(pDesc) * pDesc->ArraySize; } inline UINT _getNumSubResources(const D3D11_TEXTURE2D_DESC *pDesc) { return _getNumMipLevels(pDesc) * pDesc->ArraySize; } inline UINT _getNumSubResources(const D3D11_TEXTURE3D_DESC *pDesc) { return _getNumMipLevels(pDesc); } static inline size_t _calcSubresourceSize(const D3D11_BUFFER_DESC *pDesc, UINT Subresource, UINT RowPitch = 0, UINT SlicePitch = 0) { return pDesc->ByteWidth; } static inline size_t _calcSubresourceSize(const D3D11_TEXTURE1D_DESC *pDesc, UINT Subresource, UINT RowPitch = 0, UINT SlicePitch = 0) { UINT MipLevel = Subresource % _getNumMipLevels(pDesc); return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, 1, RowPitch, 1, SlicePitch); } static inline size_t _calcSubresourceSize(const D3D11_TEXTURE2D_DESC *pDesc, UINT Subresource, UINT RowPitch, UINT SlicePitch = 0) { UINT MipLevel = Subresource % _getNumMipLevels(pDesc); return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, pDesc->Height, RowPitch, 1, SlicePitch); } static inline size_t _calcSubresourceSize(const D3D11_TEXTURE3D_DESC *pDesc, UINT Subresource, UINT RowPitch, UINT SlicePitch) { UINT MipLevel = Subresource; return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, pDesc->Height, RowPitch, pDesc->Depth, SlicePitch); } static inline size_t _calcSubresourceSize(ID3D11Resource *pDstResource, UINT DstSubresource, const D3D11_BOX *pDstBox, UINT SrcRowPitch, UINT SrcDepthPitch) { if (pDstBox && (pDstBox->left >= pDstBox->right || pDstBox->top >= pDstBox->bottom || pDstBox->front >= pDstBox->back)) { return 0; } D3D11_RESOURCE_DIMENSION Type = D3D11_RESOURCE_DIMENSION_UNKNOWN; pDstResource->GetType(&Type); DXGI_FORMAT Format; UINT Width; UINT Height = 1; UINT Depth = 1; UINT MipLevels = 1; switch (Type) { case D3D11_RESOURCE_DIMENSION_BUFFER: if (pDstBox) { return pDstBox->right - pDstBox->left; } else { D3D11_BUFFER_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); return Desc.ByteWidth; } case D3D11_RESOURCE_DIMENSION_TEXTURE1D: { D3D11_TEXTURE1D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; MipLevels = Desc.MipLevels; } break; case D3D11_RESOURCE_DIMENSION_TEXTURE2D: { D3D11_TEXTURE2D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; Height = Desc.Height; MipLevels = Desc.MipLevels; } break; case D3D11_RESOURCE_DIMENSION_TEXTURE3D: { D3D11_TEXTURE3D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; MipLevels = Desc.MipLevels; } break; case D3D11_RESOURCE_DIMENSION_UNKNOWN: default: assert(0); return 0; } if (pDstBox) { Width = pDstBox->right - pDstBox->left; Height = pDstBox->bottom - pDstBox->top; Depth = pDstBox->back - pDstBox->front; } else { assert(Width > 0); assert(Height > 0); assert(Depth > 0); UINT MipLevel = DstSubresource % MipLevels; Width = std::max(Width >> MipLevel, UINT(1)); Height = std::max(Height >> MipLevel, UINT(1)); Depth = std::max(Depth >> MipLevel, UINT(1)); } return _calcDataSize(Format, Width, Height, SrcRowPitch, Depth, SrcDepthPitch); } static inline void _getMapDesc(ID3D11DeviceContext* pContext, ID3D11Resource * pResource, UINT Subresource, D3D11_MAP MapType, UINT MapFlags, D3D11_MAPPED_SUBRESOURCE * pMappedResource, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (MapType == D3D11_MAP_READ) { return; } MapDesc.pData = pMappedResource->pData; MapDesc.Size = _calcSubresourceSize(pResource, Subresource, NULL, pMappedResource->RowPitch, pMappedResource->DepthPitch); } static inline D3D11_QUERY _getQueryType(ID3D11Query *pQuery) { D3D11_QUERY_DESC Desc; pQuery->GetDesc(&Desc); return Desc.Query; } static inline D3D11_QUERY _getQueryType(ID3D11Asynchronous *pAsync) { com_ptr pQuery; HRESULT hr; hr = pAsync->QueryInterface(IID_ID3D11Query, (void **)&pQuery); if (FAILED(hr)) { return (D3D11_QUERY)-1; } return _getQueryType(pQuery); } tmpNnpnZF/helpers/CMakeLists.txt0000664000175000017500000000057712543167424016177 0ustar chrischris############################################################################## # API helpers include_directories ( ${CMAKE_BINARY_DIR}/dispatch ${CMAKE_SOURCE_DIR}/dispatch ) add_convenience_library (glhelpers glprofile.cpp eglsize.cpp ) add_dependencies (glhelpers glproc) if (WIN32) add_convenience_library (d3dhelpers d3dshader.cpp ) endif () tmpNnpnZF/helpers/eglsize.cpp0000664000175000017500000001332212543167424015575 0ustar chrischris/********************************************************************* * * Copyright 2012 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #ifndef _WIN32 #include #include "os_thread.hpp" #include "glimports.hpp" #include "glproc.hpp" #include "glsize.hpp" #include "eglsize.hpp" #include "assert.h" static int bisect_val(int min, int max, bool is_valid_val(int val)) { bool valid; while (1) { int try_val = min + (max - min + 1) / 2; valid = is_valid_val(try_val); if (min == max) break; if (valid) min = try_val; else max = try_val - 1; } return valid ? min : -1; } static bool is_valid_width(int val) { _glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, val, 1); return _glGetError() == GL_NO_ERROR; } static bool is_valid_height(int val) { _glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, val); return _glGetError() == GL_NO_ERROR; } static int detect_size(int *width_ret, int *height_ret) { GLint max_tex_size; int width; int height; max_tex_size = 0; _glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size); width = bisect_val(1, max_tex_size, is_valid_width); if (width < 0) return -1; height = bisect_val(1, max_tex_size, is_valid_height); if (height < 0) return -1; *width_ret = width; *height_ret = height; return 0; } /* XXX */ static inline bool can_unpack_subimage(void) { return false; } static void _eglCreateImageKHR_get_image_size(EGLImageKHR image, image_info *info) { GLuint fbo = 0; GLuint orig_fbo = 0; GLuint texture = 0; GLuint orig_texture; GLenum status; _glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint *)&orig_fbo); _glGenFramebuffers(1, &fbo); _glBindFramebuffer(GL_FRAMEBUFFER, fbo); _glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint *)&orig_texture); _glGenTextures(1, &texture); _glBindTexture(GL_TEXTURE_2D, texture); _glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image); info->width = 0; info->height = 0; _glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); status = _glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status == GL_FRAMEBUFFER_COMPLETE) { if (detect_size(&info->width, &info->height) != 0) os::log("%s: can't detect image size\n", __func__); } else { os::log("%s: error: %x\n", __func__, status); } /* Don't leak errors to the traced application. */ (void)_glGetError(); _glBindTexture(GL_TEXTURE_2D, orig_texture); _glDeleteTextures(1, &texture); _glBindFramebuffer(GL_FRAMEBUFFER, orig_fbo); _glDeleteFramebuffers(1, &fbo); } static void get_texture_2d_image(image_info *info) { GLuint fbo = 0; GLint prev_fbo = 0; GLint texture; GLenum status; _glGetIntegerv(GL_TEXTURE_BINDING_2D, &texture); if (!texture) return; _glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prev_fbo); _glGenFramebuffers(1, &fbo); _glBindFramebuffer(GL_FRAMEBUFFER, fbo); _glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); status = _glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) os::log("%s: error: %d\n", __func__, status); _glReadPixels(0, 0, info->width, info->height, info->format, info->type, info->pixels); /* Don't leak errors to the traced application. */ (void)_glGetError(); _glBindFramebuffer(GL_FRAMEBUFFER, prev_fbo); _glDeleteFramebuffers(1, &fbo); } struct image_info * _EGLImageKHR_get_image_info(GLenum target, EGLImageKHR image) { GLuint tex; GLint bound_tex = 0; struct image_info *info; info = new image_info; memset(info, 0, sizeof *info); info->internalformat = GL_RGBA; info->format = GL_RGBA; info->type = GL_UNSIGNED_BYTE; _eglCreateImageKHR_get_image_size(image, info); _glGenTextures(1, &tex); _glGetIntegerv(GL_TEXTURE_BINDING_2D, &bound_tex); _glBindTexture(GL_TEXTURE_2D, tex); _glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image); info->size = _glTexImage2D_size(info->format, info->type, info->width, info->height); info->pixels = malloc(info->size); get_texture_2d_image(info); _glBindTexture(GL_TEXTURE_2D, bound_tex); _glDeleteBuffers(1, &tex); return info; } void _EGLImageKHR_free_image_info(struct image_info *info) { free(info->pixels); delete info; } #endif // !defined(_WIN32) tmpNnpnZF/helpers/eglsize.hpp0000664000175000017500000000334012543167424015601 0ustar chrischris /********************************************************************* * * Copyright 2012 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once #ifndef _WIN32 #include "glimports.hpp" struct image_info { GLint internalformat; GLsizei width; GLsizei height; GLenum format; GLenum type; GLsizei size; GLvoid * pixels; }; struct image_info * _EGLImageKHR_get_image_info(GLenum target, EGLImageKHR image); void _EGLImageKHR_free_image_info(struct image_info *info); #endif // !defined(_WIN32) tmpNnpnZF/helpers/com_ptr.hpp0000664000175000017500000000405612543167424015607 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include /** * Simple smart pointer template for COM interfaces. */ template< class T > class com_ptr { private: T *p; public: com_ptr(void) { p = NULL; } ~com_ptr() { if (p) { p->Release(); } } // Used when initializing T ** operator & () { assert(p == NULL); return &p; } // Implict cast to T* operator T * () const { return p; } // Methods T * operator -> () const { return p; } T * operator = (T *q) { if (p) { p->Release(); } if (q) { q->AddRef(); } return p = q; } private: com_ptr(const com_ptr &); com_ptr & operator= (const com_ptr &); }; tmpNnpnZF/helpers/d3d10size.hpp0000664000175000017500000002041712543167424015651 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once /* We purposedly don't include any D3D header, so that this header can be used * with all D3D versions. */ #include #include #include "dxgisize.hpp" #include "com_ptr.hpp" inline UINT _getNumMipLevels(const D3D10_BUFFER_DESC *pDesc) { return 1; } inline UINT _getNumMipLevels(const D3D10_TEXTURE1D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width); } inline UINT _getNumMipLevels(const D3D10_TEXTURE2D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width, pDesc->Height); } inline UINT _getNumMipLevels(const D3D10_TEXTURE3D_DESC *pDesc) { return pDesc->MipLevels != 0 ? pDesc->MipLevels : _getNumMipLevels(pDesc->Width, pDesc->Height, pDesc->Depth); } inline UINT _getNumSubResources(const D3D10_BUFFER_DESC *pDesc) { return 1; } inline UINT _getNumSubResources(const D3D10_TEXTURE1D_DESC *pDesc) { return _getNumMipLevels(pDesc) * pDesc->ArraySize; } inline UINT _getNumSubResources(const D3D10_TEXTURE2D_DESC *pDesc) { return _getNumMipLevels(pDesc) * pDesc->ArraySize; } inline UINT _getNumSubResources(const D3D10_TEXTURE3D_DESC *pDesc) { return _getNumMipLevels(pDesc); } static inline size_t _calcSubresourceSize(const D3D10_BUFFER_DESC *pDesc, UINT Subresource, UINT RowPitch = 0, UINT SlicePitch = 0) { return pDesc->ByteWidth; } static inline size_t _calcSubresourceSize(const D3D10_TEXTURE1D_DESC *pDesc, UINT Subresource, UINT RowPitch = 0, UINT SlicePitch = 0) { UINT MipLevel = Subresource % _getNumMipLevels(pDesc); return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, 1, RowPitch, 1, SlicePitch); } static inline size_t _calcSubresourceSize(const D3D10_TEXTURE2D_DESC *pDesc, UINT Subresource, UINT RowPitch, UINT SlicePitch = 0) { UINT MipLevel = Subresource % _getNumMipLevels(pDesc); return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, pDesc->Height, RowPitch, 1, SlicePitch); } static inline size_t _calcSubresourceSize(const D3D10_TEXTURE3D_DESC *pDesc, UINT Subresource, UINT RowPitch, UINT SlicePitch) { UINT MipLevel = Subresource; return _calcMipDataSize(MipLevel, pDesc->Format, pDesc->Width, pDesc->Height, RowPitch, pDesc->Depth, SlicePitch); } static inline void _getMapDesc(ID3D10Buffer *pResource, D3D10_MAP MapType, UINT MapFlags, void * * ppData, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (MapType == D3D10_MAP_READ) { return; } D3D10_BUFFER_DESC Desc; pResource->GetDesc(&Desc); MapDesc.pData = *ppData; MapDesc.Size = Desc.ByteWidth; } static inline void _getMapDesc(ID3D10Texture1D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, void * * ppData, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (MapType == D3D10_MAP_READ) { return; } D3D10_TEXTURE1D_DESC Desc; pResource->GetDesc(&Desc); MapDesc.pData = *ppData; MapDesc.Size = _calcSubresourceSize(&Desc, Subresource); } static inline void _getMapDesc(ID3D10Texture2D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE2D * pMappedTex2D, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (MapType == D3D10_MAP_READ) { return; } D3D10_TEXTURE2D_DESC Desc; pResource->GetDesc(&Desc); MapDesc.pData = pMappedTex2D->pData; MapDesc.Size = _calcSubresourceSize(&Desc, Subresource, pMappedTex2D->RowPitch); } static inline void _getMapDesc(ID3D10Texture3D *pResource, UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE3D * pMappedTex3D, _MAP_DESC & MapDesc) { MapDesc.pData = 0; MapDesc.Size = 0; if (MapType == D3D10_MAP_READ) { return; } D3D10_TEXTURE3D_DESC Desc; pResource->GetDesc(&Desc); MapDesc.pData = pMappedTex3D->pData; MapDesc.Size = _calcSubresourceSize(&Desc, Subresource, pMappedTex3D->RowPitch, pMappedTex3D->DepthPitch); } static inline size_t _calcSubresourceSize(ID3D10Resource *pDstResource, UINT DstSubresource, const D3D10_BOX *pDstBox, UINT SrcRowPitch, UINT SrcDepthPitch) { if (pDstBox && (pDstBox->left >= pDstBox->right || pDstBox->top >= pDstBox->bottom || pDstBox->front >= pDstBox->back)) { return 0; } D3D10_RESOURCE_DIMENSION Type = D3D10_RESOURCE_DIMENSION_UNKNOWN; pDstResource->GetType(&Type); DXGI_FORMAT Format; UINT Width; UINT Height = 1; UINT Depth = 1; UINT MipLevels = 1; switch (Type) { case D3D10_RESOURCE_DIMENSION_BUFFER: if (pDstBox) { return pDstBox->right - pDstBox->left; } else { D3D10_BUFFER_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); return Desc.ByteWidth; } case D3D10_RESOURCE_DIMENSION_TEXTURE1D: { D3D10_TEXTURE1D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; MipLevels = Desc.MipLevels; } break; case D3D10_RESOURCE_DIMENSION_TEXTURE2D: { D3D10_TEXTURE2D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; Height = Desc.Height; MipLevels = Desc.MipLevels; } break; case D3D10_RESOURCE_DIMENSION_TEXTURE3D: { D3D10_TEXTURE3D_DESC Desc; static_cast(pDstResource)->GetDesc(&Desc); Format = Desc.Format; Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; MipLevels = Desc.MipLevels; } break; case D3D10_RESOURCE_DIMENSION_UNKNOWN: default: assert(0); return 0; } if (pDstBox) { Width = pDstBox->right - pDstBox->left; Height = pDstBox->bottom - pDstBox->top; Depth = pDstBox->back - pDstBox->front; } else { assert(Width > 0); assert(Height > 0); assert(Depth > 0); UINT MipLevel = DstSubresource % MipLevels; Width = std::max(Width >> MipLevel, UINT(1)); Height = std::max(Height >> MipLevel, UINT(1)); Depth = std::max(Depth >> MipLevel, UINT(1)); } return _calcDataSize(Format, Width, Height, SrcRowPitch, Depth, SrcDepthPitch); } static inline D3D10_QUERY _getQueryType(ID3D10Query *pQuery) { D3D10_QUERY_DESC Desc; pQuery->GetDesc(&Desc); return Desc.Query; } static inline D3D10_QUERY _getQueryType(ID3D10Asynchronous *pAsync) { com_ptr pQuery; HRESULT hr; hr = pAsync->QueryInterface(IID_ID3D10Query, (void **)&pQuery); if (FAILED(hr)) { return (D3D10_QUERY)-1; } return _getQueryType(pQuery); } tmpNnpnZF/helpers/d3d9size.hpp0000664000175000017500000001422512543167424015601 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * AUTHORS, * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **************************************************************************/ /* * Auxiliary functions to compute the size of array/blob arguments. */ #pragma once #include "d3dcommonsize.hpp" static inline size_t _declCount(const D3DVERTEXELEMENT9 *pVertexElements) { size_t count = 0; if (pVertexElements) { while (pVertexElements[count++].Stream != 0xff) ; } return count; } static inline void _getMapInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; MappedSize = 0; if (SizeToLock == 0) { D3DVERTEXBUFFER_DESC Desc; HRESULT hr = pBuffer->GetDesc(&Desc); if (FAILED(hr)) { return; } MappedSize = Desc.Size; } else { MappedSize = SizeToLock; } } static inline void _getMapInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData, void * & pLockedData, size_t & MappedSize) { pLockedData = *ppbData; MappedSize = 0; if (SizeToLock == 0) { D3DINDEXBUFFER_DESC Desc; HRESULT hr = pBuffer->GetDesc(&Desc); if (FAILED(hr)) { return; } MappedSize = Desc.Size; } else { MappedSize = SizeToLock; } } static inline void _getMapInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; D3DSURFACE_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedRect->pBits; MappedSize = 0; HRESULT hr; (void)FaceType; D3DSURFACE_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; if (pRect) { Width = pRect->right - pRect->left; Height = pRect->bottom - pRect->top; } else { Width = Desc.Width; Height = Desc.Height; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch); } static inline void _getMapInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; MappedSize = 0; HRESULT hr; D3DVOLUME_DESC Desc; hr = pVolume->GetDesc(&Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; UINT Depth; if (pBox) { Width = pBox->Right - pBox->Left; Height = pBox->Bottom - pBox->Top; Depth = pBox->Back - pBox->Front; } else { Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } static inline void _getMapInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, void * & pLockedData, size_t & MappedSize) { pLockedData = pLockedVolume->pBits; MappedSize = 0; HRESULT hr; D3DVOLUME_DESC Desc; hr = pTexture->GetLevelDesc(Level, &Desc); if (FAILED(hr)) { return; } UINT Width; UINT Height; UINT Depth; if (pBox) { Width = pBox->Right - pBox->Left; Height = pBox->Bottom - pBox->Top; Depth = pBox->Back - pBox->Front; } else { Width = Desc.Width; Height = Desc.Height; Depth = Desc.Depth; } MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch); } tmpNnpnZF/LICENSE0000664000175000017500000000226012543167424012771 0ustar chrischrisCopyright 2007-2012 VMware, Inc. Copyright 2011 Intel Corporation Copyright 2011 LunarG, Inc. Copyright 2011 Zack Rusin Copyright 2011-2012 Jose Fonseca All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. tmpNnpnZF/cli/0000775000175000017500000000000012543167424012533 5ustar chrischristmpNnpnZF/cli/cli_diff.cpp0000664000175000017500000000457012543167424015004 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include "cli.hpp" #include "os_string.hpp" #include "os_process.hpp" #include "cli_resources.hpp" static const char *synopsis = "Identify differences between two traces."; static os::String find_command(void) { return findScript("tracediff.py"); } static void usage(void) { os::String command = find_command(); char *args[4]; args[0] = (char *) APITRACE_PYTHON_EXECUTABLE; args[1] = (char *) command.str(); args[2] = (char *) "--help"; args[3] = NULL; os::execute(args); } static int command(int argc, char *argv[]) { int i; os::String command = find_command(); os::String apitracePath = os::getProcessName(); std::vector args; args.push_back(APITRACE_PYTHON_EXECUTABLE); args.push_back(command.str()); args.push_back("--apitrace"); args.push_back(apitracePath.str()); for (i = 1; i < argc; i++) { args.push_back(argv[i]); } args.push_back(NULL); return os::execute((char * const *)&args[0]); } const Command diff_command = { "diff", synopsis, usage, command }; tmpNnpnZF/cli/cli_sed.cpp0000664000175000017500000002104612543167424014644 0ustar chrischris/************************************************************************** * * Copyright 2013 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include // for CHAR_MAX #include #include "cli.hpp" #include "os_string.hpp" #include "trace_parser.hpp" #include "trace_writer.hpp" static const char *synopsis = "Stream editing of a trace."; static void usage(void) { std::cout << "usage: apitrace sed [OPTIONS] TRACE_FILE...\n" << synopsis << "\n" "\n" " -h, --help Show detailed help for sed options and exit\n" " -e s/SEARCH/REPLACE/ Search and replace a symbol. Use @file()\n" " to read SEARCH or REPLACE from a file.\n" " Any character (not just /) can be used as \n" " separator.\n" " XXX: Only works for enums and strings.\n" " -o, --output=TRACE_FILE Output trace file\n" ; } const static char * shortOptions = "ho:e:"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"output", required_argument, 0, 'o'}, {0, 0, 0, 0} }; using namespace trace; /** * A visitor that replaces symbol constants. */ class Replacer : public Visitor { protected: std::string searchName; std::string replaceName; public: Replacer(const std::string & _searchName, const std::string & _replaceName) : searchName(_searchName), replaceName(_replaceName) { } ~Replacer() { } void visit(Null *) { } void visit(Bool *node) { } void visit(SInt *node) { } void visit(UInt *node) { } void visit(Float *node) { } void visit(Double *node) { } void visit(String *node) { if (!searchName.compare(node->value)) { size_t len = replaceName.length() + 1; delete [] node->value; char *str = new char [len]; memcpy(str, replaceName.c_str(), len); node->value = str; } } void visit(WString *node) { } void visit(Enum *node) { const EnumValue *it = node->lookup(); if (it) { if (searchName.compare(it->name) == 0) { const EnumSig *sig = node->sig; for (unsigned i = 0; i < sig->num_values; ++i) { if (replaceName.compare(sig->values[i].name) == 0) { node->value = sig->values[i].value; break; } } } } } void visit(Bitmask *bitmask) { } void visit(Struct *s) { for (unsigned i = 0; i < s->members.size(); ++i) { Value *memberValue = s->members[i]; _visit(memberValue); } } void visit(Array *array) { for (std::vector::iterator it = array->values.begin(); it != array->values.end(); ++it) { _visit(*it); } } void visit(Blob *blob) { } void visit(Pointer *p) { } void visit(Repr *r) { _visit(r->humanValue); } void visit(Call *call) { for (unsigned i = 0; i < call->args.size(); ++i) { if (call->args[i].value) { _visit(call->args[i].value); } } if (call->ret) { _visit(call->ret); } } }; typedef std::list Replacements; static int sed_trace(Replacements &replacements, const char *inFileName, std::string &outFileName) { trace::Parser p; if (!p.open(inFileName)) { std::cerr << "error: failed to open " << inFileName << "\n"; return 1; } /* Prepare outFileName file and writer for outFileName. */ if (outFileName.empty()) { os::String base(inFileName); base.trimExtension(); outFileName = std::string(base.str()) + std::string("-sed.trace"); } trace::Writer writer; if (!writer.open(outFileName.c_str())) { std::cerr << "error: failed to create " << outFileName << "\n"; return 1; } trace::Call *call; while ((call = p.parse_call())) { for (Replacements::iterator it = replacements.begin(); it != replacements.end(); ++it) { it->visit(call); } writer.writeCall(call); delete call; } std::cerr << "Edited trace is available as " << outFileName << "\n"; return 0; } /** * Parse a string in the format "s/SEARCH/REPLACE/". */ static bool parseSubstOpt(Replacements &replacements, const char *opt) { char separator; if (*opt++ != 's') { return false; } separator = *opt++; // Parse the search pattern const char *search_begin = opt; while (*opt != separator) { if (*opt == 0) { return false; } ++opt; } const char *search_end = opt++; // Parse the replace pattern const char *replace_begin = opt; while (*opt != separator) { if (*opt == 0) { return false; } ++opt; } const char *replace_end = opt++; if (*opt != 0) { return false; } std::string search(search_begin, search_end); std::string replace(replace_begin, replace_end); // If search or replace strings are taken from a file, read the file std::string file_subst = "@file("; for (int i = 0; i < 2; i++) { std::string *str = i ? &search : &replace; if (!str->compare(0, file_subst.length(), file_subst)) { if ((*str)[str->length()-1] != ')') { return false; } std::string fname = str->substr(file_subst.length()); fname[fname.length()-1] = 0; FILE *f = fopen(fname.c_str(), "rt"); if (!f) { std::cerr << "error: cannot open file " << fname << "\n"; return false; } char buf[1024]; (*str) = ""; while (!feof(f)) { if (fgets(buf, 1024, f)) { str->append(buf); } } fclose(f); } } replacements.push_back(Replacer(search, replace)); return true; } static int command(int argc, char *argv[]) { Replacements replacements; std::string outFileName; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; case 'o': outFileName = optarg; break; case 'e': if (!parseSubstOpt(replacements, optarg)) { std::cerr << "error: invalid replacement pattern `" << optarg << "`\n"; } break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } if (optind >= argc) { std::cerr << "error: apitrace sed requires a trace file as an argument.\n"; usage(); return 1; } if (argc > optind + 1) { std::cerr << "error: extraneous arguments:"; for (int i = optind + 1; i < argc; i++) { std::cerr << " " << argv[i]; } std::cerr << "\n"; usage(); return 1; } return sed_trace(replacements, argv[optind], outFileName); } const Command sed_command = { "sed", synopsis, usage, command }; tmpNnpnZF/cli/cli_repack.cpp0000664000175000017500000000616212543167424015340 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "cli.hpp" #include "trace_file.hpp" static const char *synopsis = "Repack a trace file with Snappy compression."; static void usage(void) { std::cout << "usage: apitrace repack \n" << synopsis << "\n" << "\n" << "Snappy compression allows for faster replay and smaller memory footprint,\n" << "at the expense of a slightly smaller compression ratio than zlib\n" << "\n"; } const static char * shortOptions = "h"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; static int repack(const char *inFileName, const char *outFileName) { trace::File *inFile = trace::File::createForRead(inFileName); if (!inFile) { return 1; } trace::File *outFile = trace::File::createForWrite(outFileName); if (!outFile) { delete inFile; return 1; } size_t size = 8192; char *buf = new char[size]; size_t read; while ((read = inFile->read(buf, size)) != 0) { outFile->write(buf, read); } delete [] buf; delete outFile; delete inFile; return 0; } static int command(int argc, char *argv[]) { int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } if (argc != optind + 2) { std::cerr << "error: insufficient number of arguments\n"; usage(); return 1; } return repack(argv[optind], argv[optind + 1]); } const Command repack_command = { "repack", synopsis, usage, command }; tmpNnpnZF/cli/cli_resources.cpp0000664000175000017500000001250512543167424016103 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include "os_string.hpp" #include "cli_resources.hpp" #ifdef __GLIBC__ #include static bool tryLib(const os::String &path, bool verbose) { void *handle = dlopen(path.str(), RTLD_LAZY); bool exists = (handle != NULL); if (verbose) { if (exists) { std::cerr << "info: found " << path.str() << "\n"; } else { std::cerr << "info: did not find " << dlerror() << "\n"; } } if (exists) dlclose(handle); return exists; } #endif static bool tryPath(const os::String &path, bool verbose) { bool exists = path.exists(); if (verbose) { std::cerr << "info: " << (exists ? "found" : "did not find") << " " << path.str() << "\n"; } return exists; } os::String findProgram(const char *programFilename, bool verbose) { os::String programPath; os::String processDir = os::getProcessName(); processDir.trimFilename(); programPath = processDir; programPath.join(programFilename); if (tryPath(programPath, verbose)) { return programPath; } #ifndef _WIN32 // Try absolute install directory programPath = APITRACE_PROGRAMS_INSTALL_DIR; programPath.join(programFilename); if (tryPath(programPath, verbose)) { return programPath; } #endif return ""; } os::String findWrapper(const char *wrapperFilename, bool verbose) { os::String wrapperPath; os::String processDir = os::getProcessName(); processDir.trimFilename(); // Try relative build directory // XXX: Just make build and install directory layout match wrapperPath = processDir; #if defined(CMAKE_INTDIR) // Go from `Debug\apitrace.exe` to `wrappers\Debug\foo.dll` on MSVC builds. wrapperPath.join(".."); wrapperPath.join("wrappers"); wrapperPath.join(CMAKE_INTDIR); #else wrapperPath.join("wrappers"); #endif wrapperPath.join(wrapperFilename); if (tryPath(wrapperPath, verbose)) { return wrapperPath; } #ifdef __GLIBC__ // We want to take advantage of $LIB dynamic string token expansion in // glibc dynamic linker to handle multilib layout for us wrapperPath = processDir; wrapperPath.join("../$LIB/apitrace/wrappers"); wrapperPath.join(wrapperFilename); if (tryLib(wrapperPath, verbose)) { return wrapperPath; } #endif // Try relative install directory wrapperPath = processDir; #if defined(_WIN32) wrapperPath.join("..\\lib\\wrappers"); #elif defined(__APPLE__) wrapperPath.join("../lib/wrappers"); #else wrapperPath.join("../lib/apitrace/wrappers"); #endif wrapperPath.join(wrapperFilename); if (tryPath(wrapperPath, verbose)) { return wrapperPath; } #ifndef _WIN32 // Try absolute install directory wrapperPath = APITRACE_WRAPPERS_INSTALL_DIR; wrapperPath.join(wrapperFilename); if (tryPath(wrapperPath, verbose)) { return wrapperPath; } #endif return ""; } os::String findScript(const char *scriptFilename, bool verbose) { os::String scriptPath; os::String processDir = os::getProcessName(); processDir.trimFilename(); // Try relative build directory // XXX: Just make build and install directory layout match #if defined(APITRACE_SOURCE_DIR) scriptPath = APITRACE_SOURCE_DIR; scriptPath.join("scripts"); scriptPath.join(scriptFilename); if (tryPath(scriptPath, verbose)) { return scriptPath; } #endif // Try relative install directory scriptPath = processDir; #if defined(_WIN32) scriptPath.join("..\\lib\\scripts"); #elif defined(__APPLE__) scriptPath.join("../lib/scripts"); #else scriptPath.join("../lib/apitrace/scripts"); #endif scriptPath.join(scriptFilename); if (tryPath(scriptPath, verbose)) { return scriptPath; } #ifndef _WIN32 // Try absolute install directory scriptPath = APITRACE_SCRIPTS_INSTALL_DIR; scriptPath.join(scriptFilename); if (tryPath(scriptPath, verbose)) { return scriptPath; } #endif std::cerr << "error: cannot find " << scriptFilename << " script\n"; exit(1); } tmpNnpnZF/cli/cli_trim.cpp0000664000175000017500000004100312543167424015037 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * Copyright 2011 Intel corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include // for CHAR_MAX #include #include #include "cli.hpp" #include "os_string.hpp" #include "trace_analyzer.hpp" #include "trace_callset.hpp" #include "trace_parser.hpp" #include "trace_writer.hpp" static const char *synopsis = "Create a new trace by trimming an existing trace."; static void usage(void) { std::cout << "usage: apitrace trim [OPTIONS] TRACE_FILE...\n" << synopsis << "\n" "\n" " -h, --help Show detailed help for trim options and exit\n" " --calls=CALLSET Include specified calls in the trimmed output.\n" " --frames=FRAMESET Include specified frames in the trimmed output.\n" " --deps Include additional calls to satisfy dependencies\n" " --no-deps Do not include any more calls than requestd\n" " --prune Omit calls without side effects from the output\n" " --no-prune Do not omit any requested calls\n" " -a, --auto Trim automatically to calls specified in --calls/--frames\n" " Equivalent to both --deps and --prune\n" " --exact Trim to exactly the calls specified in --calls/--frames\n" " Equivalent to both --no-deps and --no-prune\n" " --print-callset Print the final set of calls included in output\n" " --trim-spec=SPEC Only performing trimming as described in SPEC\n" " --thread=THREAD_ID Only retain calls from specified thread\n" " -o, --output=TRACE_FILE Output trace file\n" ; } static void help() { std::cout << "usage: apitrace trim [OPTIONS] TRACE_FILE...\n" << synopsis << "\n" "\n" " -h, --help Show this help message and exit\n" "\n" " --calls=CALLSET Include specified calls in the trimmed output.\n" " --frames=FRAMESET Include specified frames in the trimmed output.\n" "\n" " --deps Perform dependency analysis and include dependent\n" " calls as needed, (even if those calls were not\n" " explicitly requested with --calls or --frames).\n" " (On by default. See --no-deps or --exact)\n" "\n" " --no-deps Do not perform dependency analysis. Output will\n" " not include any additional calls beyond those\n" " explicitly requested with --calls or --frames).\n" "\n" " --prune Omit calls with no side effects, even if the call\n" " is within the range specified by --calls/--frames.\n" " (On by default. See --no-prune or --exact)\n" "\n" " --no-prune Never omit any calls from the range specified\n" " --calls/--frames.\n" "\n" " -a, --auto Use dependency analysis and pruning\n" " of uninteresting calls the resulting trace may\n" " include more and less calls than specified.\n" " This option is equivalent\n" " to passing both --deps and --prune and is on by\n" " default (see --no-deps, --no-prune and --exact)\n" "\n" " --exact Trim output to exact the calls or frames\n" " specified with --calls or --frames.\n" " This option is equivalent\n" " to passing both --no-deps and --no-prune.\n" "\n" " --print-callset Print to stdout the final set of calls included\n" " in the trim output. This can be useful for\n" " tweaking the trimmed callset from --auto on the\n" " command-line.\n" " Use --calls=@FILE to read callset from a file.\n" "\n" " --trim-spec=SPEC Specifies which classes of calls will be trimmed.\n" " This option only has an effect if dependency\n" " analysis is enabled. The argument is a comma-\n" " separated list of names from the following:\n" "\n" " no-side-effects Calls with no side effects\n" " textures Calls to setup unused textures\n" " shaders Calls to setup unused shaders\n" " drawing Calls that draw\n" "\n" " The default trim specification includes all of\n" " the above, (as much as possible will be trimmed).\n" "\n" " --thread=THREAD_ID Only retain calls from specified thread\n" "\n" " -o, --output=TRACE_FILE Output trace file\n" "\n" ; } enum { CALLS_OPT = CHAR_MAX + 1, FRAMES_OPT, DEPS_OPT, NO_DEPS_OPT, PRUNE_OPT, NO_PRUNE_OPT, THREAD_OPT, PRINT_CALLSET_OPT, TRIM_SPEC_OPT, EXACT_OPT }; const static char * shortOptions = "aho:x"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"calls", required_argument, 0, CALLS_OPT}, {"frames", required_argument, 0, FRAMES_OPT}, {"deps", no_argument, 0, DEPS_OPT}, {"no-deps", no_argument, 0, NO_DEPS_OPT}, {"prune", no_argument, 0, PRUNE_OPT}, {"no-prune", no_argument, 0, NO_PRUNE_OPT}, {"auto", no_argument, 0, 'a'}, {"exact", no_argument, 0, EXACT_OPT}, {"thread", required_argument, 0, THREAD_OPT}, {"output", required_argument, 0, 'o'}, {"print-callset", no_argument, 0, PRINT_CALLSET_OPT}, {"trim-spec", required_argument, 0, TRIM_SPEC_OPT}, {0, 0, 0, 0} }; struct stringCompare { bool operator() (const char *a, const char *b) const { return strcmp(a, b) < 0; } }; struct trim_options { /* Calls to be included in trace. */ trace::CallSet calls; /* Frames to be included in trace. */ trace::CallSet frames; /* Whether dependency analysis should be performed. */ bool dependency_analysis; /* Whether uninteresting calls should be pruned.. */ bool prune_uninteresting; /* Output filename */ std::string output; /* Emit only calls from this thread (-1 == all threads) */ int thread; /* Print resulting callset */ int print_callset; /* What kind of trimming to perform. */ TrimFlags trim_flags; }; static int trim_trace(const char *filename, struct trim_options *options) { trace::ParseBookmark beginning; trace::Parser p; TraceAnalyzer analyzer(options->trim_flags); trace::FastCallSet *required; unsigned frame; int call_range_first, call_range_last; if (!p.open(filename)) { std::cerr << "error: failed to open " << filename << "\n"; return 1; } /* Mark the beginning so we can return here for pass 2. */ p.getBookmark(beginning); /* In pass 1, analyze which calls are needed. */ frame = 0; trace::Call *call; while ((call = p.parse_call())) { /* There's no use doing any work past the last call and frame * requested by the user. */ if ((options->calls.empty() || call->no > options->calls.getLast()) && (options->frames.empty() || frame > options->frames.getLast())) { delete call; break; } /* If requested, ignore all calls not belonging to the specified thread. */ if (options->thread != -1 && call->thread_id != options->thread) { goto NEXT; } /* Also, prune if no side effects (unless the user asked for no pruning. */ if (options->prune_uninteresting && call->flags & trace::CALL_FLAG_NO_SIDE_EFFECTS) { goto NEXT; } /* If this call is included in the user-specified call set, * then require it (and all dependencies) in the trimmed * output. */ if (options->calls.contains(*call) || options->frames.contains(frame, call->flags)) { analyzer.require(call); } /* Regardless of whether we include this call or not, we do * some dependency tracking (unless disabled by the user). We * do this even for calls we have included in the output so * that any state updates get performed. */ if (options->dependency_analysis) { analyzer.analyze(call); } NEXT: if (call->flags & trace::CALL_FLAG_END_FRAME) frame++; delete call; } /* Prepare output file and writer for output. */ if (options->output.empty()) { os::String base(filename); base.trimExtension(); options->output = std::string(base.str()) + std::string("-trim.trace"); } trace::Writer writer; if (!writer.open(options->output.c_str())) { std::cerr << "error: failed to create " << options->output << "\n"; return 1; } /* Reset bookmark for pass 2. */ p.setBookmark(beginning); /* In pass 2, emit the calls that are required. */ required = analyzer.get_required(); frame = 0; call_range_first = -1; call_range_last = -1; while ((call = p.parse_call())) { /* There's no use doing any work past the last call and frame * requested by the user. */ if ((options->calls.empty() || call->no > options->calls.getLast()) && (options->frames.empty() || frame > options->frames.getLast())) { delete call; break; } if (required->contains(call->no)) { writer.writeCall(call); if (options->print_callset) { if (call_range_first < 0) { call_range_first = call->no; printf ("%d", call_range_first); } else if (call->no != call_range_last + 1) { if (call_range_last != call_range_first) printf ("-%d", call_range_last); call_range_first = call->no; printf (",%d", call_range_first); } call_range_last = call->no; } } if (call->flags & trace::CALL_FLAG_END_FRAME) { frame++; } delete call; } if (options->print_callset) { if (call_range_last != call_range_first) printf ("-%d\n", call_range_last); } std::cerr << "Trimmed trace is available as " << options->output << "\n"; return 0; } static int parse_trim_spec(const char *trim_spec, TrimFlags *flags) { std::string spec(trim_spec), word; size_t start = 0, comma = 0; *flags = 0; while (start < spec.size()) { comma = spec.find(',', start); if (comma == std::string::npos) word = std::string(spec, start); else word = std::string(spec, start, comma - start); if (strcmp(word.c_str(), "no-side-effects") == 0) *flags |= TRIM_FLAG_NO_SIDE_EFFECTS; else if (strcmp(word.c_str(), "textures") == 0) *flags |= TRIM_FLAG_TEXTURES; else if (strcmp(word.c_str(), "shaders") == 0) *flags |= TRIM_FLAG_SHADERS; else if (strcmp(word.c_str(), "drawing") == 0) *flags |= TRIM_FLAG_DRAWING; else { return 1; } if (comma == std::string::npos) break; start = comma + 1; } return 0; } static int command(int argc, char *argv[]) { struct trim_options options; options.calls = trace::CallSet(trace::FREQUENCY_NONE); options.frames = trace::CallSet(trace::FREQUENCY_NONE); options.dependency_analysis = true; options.prune_uninteresting = true; options.output = ""; options.thread = -1; options.print_callset = 0; options.trim_flags = -1; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': help(); return 0; case CALLS_OPT: options.calls.merge(optarg); break; case FRAMES_OPT: options.frames.merge(optarg); break; case DEPS_OPT: options.dependency_analysis = true; break; case NO_DEPS_OPT: options.dependency_analysis = false; break; case PRUNE_OPT: options.prune_uninteresting = true; break; case NO_PRUNE_OPT: options.prune_uninteresting = false; break; case 'a': options.dependency_analysis = true; options.prune_uninteresting = true; break; case EXACT_OPT: options.dependency_analysis = false; options.prune_uninteresting = false; break; case THREAD_OPT: options.thread = atoi(optarg); break; case 'o': options.output = optarg; break; case PRINT_CALLSET_OPT: options.print_callset = 1; break; case TRIM_SPEC_OPT: if (parse_trim_spec(optarg, &options.trim_flags)) { std::cerr << "error: illegal value for trim-spec: " << optarg << "\n"; std::cerr << "See \"apitrace help trim\" for help.\n"; return 1; } break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } /* If neither of --calls nor --frames was set, default to the * entire set of calls. */ if (options.calls.empty() && options.frames.empty()) { options.calls = trace::CallSet(trace::FREQUENCY_ALL); } if (optind >= argc) { std::cerr << "error: apitrace trim requires a trace file as an argument.\n"; usage(); return 1; } if (argc > optind + 1) { std::cerr << "error: extraneous arguments:"; for (int i = optind + 1; i < argc; i++) { std::cerr << " " << argv[i]; } std::cerr << "\n"; usage(); return 1; } if (options.dependency_analysis) { std::cerr << "Note: The dependency analysis in \"apitrace trim\" is still experimental.\n" " We hope that it will be useful, but it may lead to incorrect results.\n" " If you find a trace that misbehaves while trimming, please share that\n" " by sending email to apitrace@lists.freedesktop.org, cworth@cworth.org\n"; } return trim_trace(argv[optind], &options); } const Command trim_command = { "trim", synopsis, help, command }; tmpNnpnZF/cli/cli_diff_images.cpp0000664000175000017500000000441312543167424016325 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include "cli.hpp" #include "os_string.hpp" #include "os_process.hpp" #include "cli_resources.hpp" static const char *synopsis = "Identify differences between two image dumps."; static os::String find_command(void) { return findScript("snapdiff.py"); } static void usage(void) { os::String command = find_command(); char *args[4]; args[0] = (char *) APITRACE_PYTHON_EXECUTABLE; args[1] = (char *) command.str(); args[2] = (char *) "--help"; args[3] = NULL; os::execute(args); } static int command(int argc, char *argv[]) { int i; os::String command = find_command(); std::vector args; args.push_back(APITRACE_PYTHON_EXECUTABLE); args.push_back(command.str()); for (i = 1; i < argc; i++) { args.push_back(argv[i]); } args.push_back(NULL); return os::execute((char * const *)&args[0]); } const Command diff_images_command = { "diff-images", synopsis, usage, command }; tmpNnpnZF/cli/pickle.hpp0000664000175000017500000002173412543167424014522 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Python pickle writer */ #pragma once #include #include #include #include #include #include class PickleWriter { private: std::ostream &os; /* * Python pickle opcodes. See pickle.py and pickletools.py from Python * standard library for details. */ enum Opcode { MARK = '(', STOP = '.', POP = '0', POP_MARK = '1', DUP = '2', FLOAT = 'F', INT = 'I', BININT = 'J', BININT1 = 'K', LONG = 'L', BININT2 = 'M', NONE = 'N', PERSID = 'P', BINPERSID = 'Q', REDUCE = 'R', STRING = 'S', BINSTRING = 'T', SHORT_BINSTRING = 'U', UNICODE = 'V', BINUNICODE = 'X', APPEND = 'a', BUILD = 'b', GLOBAL = 'c', DICT = 'd', EMPTY_DICT = '}', APPENDS = 'e', GET = 'g', BINGET = 'h', INST = 'i', LONG_BINGET = 'j', LIST = 'l', EMPTY_LIST = ']', OBJ = 'o', PUT = 'p', BINPUT = 'q', LONG_BINPUT = 'r', SETITEM = 's', TUPLE = 't', EMPTY_TUPLE = ')', SETITEMS = 'u', BINFLOAT = 'G', PROTO = '\x80', NEWOBJ = '\x81', EXT1 = '\x82', EXT2 = '\x83', EXT4 = '\x84', TUPLE1 = '\x85', TUPLE2 = '\x86', TUPLE3 = '\x87', NEWTRUE = '\x88', NEWFALSE = '\x89', LONG1 = '\x8a', LONG4 = '\x8b', }; public: PickleWriter(std::ostream &_os) : os(_os) { } inline void begin() { os.put(PROTO); os.put(2); } inline void end() { os.put(STOP); } inline void beginDict() { os.put(EMPTY_DICT); os.put(BINPUT); os.put(1); } inline void endDict() { } inline void beginItem() { } inline void beginItem(const char * name) { writeString(name); } inline void beginItem(const std::string &name) { beginItem(name.c_str()); } inline void endItem(void) { os.put(SETITEM); } inline void beginList() { os.put(EMPTY_LIST); os.put(BINPUT); os.put(1); os.put(MARK); } inline void endList(void) { os.put(APPENDS); } inline void beginTuple() { os.put(MARK); } inline void endTuple(void) { os.put(TUPLE); } inline void beginTuple(unsigned length) { if (length >= 4) { os.put(MARK); } } inline void endTuple(unsigned length) { static const Opcode ops[4] = { EMPTY_TUPLE, TUPLE1, TUPLE2, TUPLE3, }; Opcode op = length < 4 ? ops[length] : TUPLE; os.put(op); } inline void writeString(const char *s, size_t length) { if (!s) { writeNone(); return; } if (length < 256) { os.put(SHORT_BINSTRING); os.put(length); } else { os.put(BINSTRING); putInt32(length); } os.write(s, length); os.put(BINPUT); os.put(1); } inline void writeString(const char *s) { if (!s) { writeNone(); return; } writeString(s, strlen(s)); } inline void writeString(const std::string &s) { writeString(s.c_str(), s.size()); } inline void writeWString(const wchar_t *s, size_t length) { if (!s) { writeNone(); return; } /* FIXME: emit UTF-8 */ os.put(BINUNICODE); putInt32(length); for (size_t i = 0; i < length; ++i) { wchar_t wc = s[i]; char c = wc >= 0 && wc < 0x80 ? (char)wc : '?'; os.put(c); } os.put(BINPUT); os.put(1); } inline void writeWString(const wchar_t *s) { if (!s) { writeNone(); return; } writeWString(s, wcslen(s)); } inline void writeNone(void) { os.put(NONE); } inline void writeBool(bool b) { os.put(b ? NEWTRUE : NEWFALSE); } inline void writeInt(uint8_t i) { os.put(BININT1); os.put(i); } inline void writeInt(uint16_t i) { if (i < 0x100) { writeInt((uint8_t)i); } else { os.put(BININT2); putInt16(i); } } inline void writeInt(int32_t i) { if (0 <= i && i < 0x10000) { writeInt((uint16_t)i); } else { os.put(BININT); putInt32(i); } } inline void writeInt(uint32_t i) { if (i < 0x8000000) { writeInt((int32_t)i); } else { writeLong(i); } } inline void writeInt(long long i) { if (-0x8000000 <= i && i < 0x8000000) { writeInt((int32_t)i); } else { writeLong(i); } } inline void writeInt(unsigned long long i) { if (i < 0x8000000) { writeInt((int32_t)i); } else { writeLong(i); } } inline void writeFloat(double f) { union { double f; char c[8]; } u; static_assert(sizeof u.f == sizeof u.c, "double is not 8 bytes"); u.f = f; os.put(BINFLOAT); os.put(u.c[7]); os.put(u.c[6]); os.put(u.c[5]); os.put(u.c[4]); os.put(u.c[3]); os.put(u.c[2]); os.put(u.c[1]); os.put(u.c[0]); } inline void writeByteArray(const void *buf, size_t length) { os.put(GLOBAL); os << "__builtin__\nbytearray\n"; os.put(BINPUT); os.put(1); writeString(static_cast(buf), length); os.put(TUPLE1); os.put(REDUCE); } inline void writePointer(unsigned long long addr) { os.put(GLOBAL); os << "unpickle\nPointer\n"; os.put(BINPUT); os.put(1); writeInt(addr); os.put(TUPLE1); os.put(REDUCE); } protected: inline void putInt16(uint16_t i) { os.put( i & 0xff); os.put( i >> 8 ); } inline void putInt32(uint32_t i) { os.put( i & 0xff); os.put((i >> 8) & 0xff); os.put((i >> 16) & 0xff); os.put( i >> 24 ); } template< class T > inline void writeLong(T l) { os.put(LONG1); if (l == 0) { os.put(0); return; } // Same as l >> (8 * sizeof l), but without the warnings T sign; if (std::numeric_limits::is_signed) { sign = l < 0 ? ~0 : 0; } else { sign = 0; } // Count how many bytes we need to represent the long integer. T sl = l; unsigned c = 0; do { ++c; sl >>= 8; } while (sl != sign); // Add an extra byte if sign bit doesn't match if (((l >> (8 * c - 1)) & 1) != ((l >> (8 * sizeof l - 1)) & 1)) { ++c; } os.put(c); for (unsigned i = 0; i < c; ++ i) { os.put(l & 0xff); l >>= 8; } } }; tmpNnpnZF/cli/trace_analyzer.cpp0000664000175000017500000005453312543167424016254 0ustar chrischris/************************************************************************** * Copyright 2012 Intel corporation * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "trace_analyzer.hpp" #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define STRNCMP_LITERAL(var, literal) strncmp((var), (literal), sizeof (literal) -1) /* Rendering often has no side effects, but it can in some cases, * (such as when transform feedback is active, or when rendering * targets a framebuffer object). */ bool TraceAnalyzer::renderingHasSideEffect(void) { return transformFeedbackActive || framebufferObjectActive; } /* Provide: Record that the given call affects the given resource * as a side effect. */ void TraceAnalyzer::provide(std::string resource, trace::CallNo call_no) { resources[resource].insert(call_no); } /* Like provide, but with a simply-formatted string, (appending an * integer to the given string). */ void TraceAnalyzer::providef(std::string resource, int resource_no, trace::CallNo call_no) { std::stringstream ss; ss << resource << resource_no; provide(ss.str(), call_no); } /* Link: Establish a dependency between resource 'resource' and * resource 'dependency'. This dependency is captured by name so * that if the list of calls that provide 'dependency' grows * before 'resource' is consumed, those calls will still be * captured. */ void TraceAnalyzer::link(std::string resource, std::string dependency) { dependencies[resource].insert(dependency); } /* Like link, but with a simply-formatted string, (appending an * integer to the given string). */ void TraceAnalyzer::linkf(std::string resource, std::string dependency, int dep_no) { std::stringstream ss; ss << dependency << dep_no; link(resource, ss.str()); } /* Unlink: Remove dependency from 'resource' on 'dependency'. */ void TraceAnalyzer::unlink(std::string resource, std::string dependency) { dependencies[resource].erase(dependency); if (dependencies[resource].size() == 0) { dependencies.erase(resource); } } /* Like unlink, but with a simply-formated string, (appending an * integer to the given string). */ void TraceAnalyzer::unlinkf(std::string resource, std::string dependency, int dep_no) { std::stringstream ss; ss << dependency << dep_no; unlink(resource, ss.str()); } /* Unlink all: Remove dependencies from 'resource' to all other * resources. */ void TraceAnalyzer::unlinkAll(std::string resource) { dependencies.erase(resource); } /* Resolve: Recursively compute all calls providing 'resource', * (including linked dependencies of 'resource' on other * resources). */ std::set TraceAnalyzer::resolve(std::string resource) { std::set *deps; std::set::iterator dep; std::set *calls; std::set::iterator call; std::set result, deps_set; /* Recursively chase dependencies. */ if (dependencies.count(resource)) { deps = &dependencies[resource]; for (dep = deps->begin(); dep != deps->end(); dep++) { deps_set = resolve(*dep); for (call = deps_set.begin(); call != deps_set.end(); call++) { result.insert(*call); } } } /* Also look for calls that directly provide 'resource' */ if (resources.count(resource)) { calls = &resources[resource]; for (call = calls->begin(); call != calls->end(); call++) { result.insert(*call); } } return result; } /* Consume: Resolve all calls that provide the given resource, and * add them to the required list. Then clear the call list for * 'resource' along with any dependencies. */ void TraceAnalyzer::consume(std::string resource) { std::set calls; std::set::iterator call; calls = resolve(resource); dependencies.erase(resource); resources.erase(resource); for (call = calls.begin(); call != calls.end(); call++) { required.add(*call); } } void TraceAnalyzer::stateTrackPreCall(trace::Call *call) { const char *name = call->name(); if (strcmp(name, "glBegin") == 0) { insideBeginEnd = true; return; } if (strcmp(name, "glBeginTransformFeedback") == 0) { transformFeedbackActive = true; return; } if (strcmp(name, "glActiveTexture") == 0) { activeTextureUnit = static_cast(call->arg(0).toSInt()); return; } if (strcmp(name, "glBindTexture") == 0) { GLenum target; GLuint texture; target = static_cast(call->arg(0).toSInt()); texture = call->arg(1).toUInt(); if (texture == 0) { texture_map.erase(target); } else { texture_map[target] = texture; } return; } if (strcmp(name, "glUseProgram") == 0) { activeProgram = call->arg(0).toUInt(); } if (strcmp(name, "glBindFramebuffer") == 0) { GLenum target; GLuint framebuffer; target = static_cast(call->arg(0).toSInt()); framebuffer = call->arg(1).toUInt(); if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER) { if (framebuffer == 0) { framebufferObjectActive = false; } else { framebufferObjectActive = true; } } return; } if (strcmp(name, "glNewList") == 0) { GLuint list = call->arg(0).toUInt(); insideNewEndList = list; } } void TraceAnalyzer::stateTrackPostCall(trace::Call *call) { const char *name = call->name(); if (strcmp(name, "glEnd") == 0) { insideBeginEnd = false; return; } if (strcmp(name, "glEndTransformFeedback") == 0) { transformFeedbackActive = false; return; } /* If this swapbuffers was included in the trace then it will * have already consumed all framebuffer dependencies. If not, * then clear them now so that they don't carry over into the * next frame. */ if (call->flags & trace::CALL_FLAG_SWAP_RENDERTARGET && call->flags & trace::CALL_FLAG_END_FRAME) { dependencies.erase("framebuffer"); resources.erase("framebuffer"); return; } if (strcmp(name, "glEndList") == 0) { insideNewEndList = 0; } } bool TraceAnalyzer::callHasNoSideEffects(trace::Call *call, const char *name) { /* If call is flagged as no side effects, then we are done here. */ if (call->flags & trace::CALL_FLAG_NO_SIDE_EFFECTS) { return true; } /* Not known as a no-side-effect call. Return false for more analysis. */ return false; } bool TraceAnalyzer::recordTextureSideEffects(trace::Call *call, const char *name) { if (strcmp(name, "glGenTextures") == 0) { const trace::Array *textures = call->arg(1).toArray(); size_t i; GLuint texture; if (textures) { for (i = 0; i < textures->size(); i++) { texture = textures->values[i]->toUInt(); providef("texture-", texture, call->no); } } return true; } /* FIXME: When we start tracking framebuffer objects as their own * resources, we will want to link the FBO to the given texture * resource, (and to this call). For now, just link render state * to the texture, and force this call to be required. */ if (strcmp(name, "glFramebufferTexture2D") == 0) { GLuint texture; texture = call->arg(3).toUInt(); linkf("render-state", "texture-", texture); provide("state", call->no); } if (strcmp(name, "glBindTexture") == 0) { GLenum target; GLuint texture; std::stringstream ss_target, ss_texture; target = static_cast(call->arg(0).toSInt()); texture = call->arg(1).toUInt(); ss_target << "texture-unit-" << activeTextureUnit << "-target-" << target; ss_texture << "texture-" << texture; resources.erase(ss_target.str()); provide(ss_target.str(), call->no); unlinkAll(ss_target.str()); link(ss_target.str(), ss_texture.str()); /* FIXME: This really shouldn't be necessary. The effect * this provide() has is that all glBindTexture calls will * be preserved in the output trace (never trimmed). Carl * has a trace ("btr") where a glBindTexture call should * not be necessary at all, (it's immediately followed * with a glBindTexture to a different texture and no * intervening texture-related calls), yet this 'provide' * makes the difference between a trim_stress test failing * and passing. * * More investigation is necessary, but for now, be * conservative and don't trim. */ provide("state", call->no); return true; } /* FIXME: Need to handle glMultiTexImage and friends. */ if (STRNCMP_LITERAL(name, "glTexImage") == 0 || STRNCMP_LITERAL(name, "glTexSubImage") == 0 || STRNCMP_LITERAL(name, "glCopyTexImage") == 0 || STRNCMP_LITERAL(name, "glCopyTexSubImage") == 0 || STRNCMP_LITERAL(name, "glCompressedTexImage") == 0 || STRNCMP_LITERAL(name, "glCompressedTexSubImage") == 0 || strcmp(name, "glInvalidateTexImage") == 0 || strcmp(name, "glInvalidateTexSubImage") == 0) { std::set *calls; std::set::iterator c; std::stringstream ss_target, ss_texture; GLenum target = static_cast(call->arg(0).toSInt()); ss_target << "texture-unit-" << activeTextureUnit << "-target-" << target; ss_texture << "texture-" << texture_map[target]; /* The texture resource depends on this call and any calls * providing the given texture target. */ provide(ss_texture.str(), call->no); if (resources.count(ss_target.str())) { calls = &resources[ss_target.str()]; for (c = calls->begin(); c != calls->end(); c++) { provide(ss_texture.str(), *c); } } return true; } if (strcmp(name, "glEnable") == 0) { GLenum cap; cap = static_cast(call->arg(0).toSInt()); if (cap == GL_TEXTURE_1D || cap == GL_TEXTURE_2D || cap == GL_TEXTURE_3D || cap == GL_TEXTURE_CUBE_MAP) { std::stringstream ss; ss << "texture-unit-" << activeTextureUnit << "-target-" << cap; link("render-state", ss.str()); } provide("state", call->no); return true; } if (strcmp(name, "glDisable") == 0) { GLenum cap; cap = static_cast(call->arg(0).toSInt()); if (cap == GL_TEXTURE_1D || cap == GL_TEXTURE_2D || cap == GL_TEXTURE_3D || cap == GL_TEXTURE_CUBE_MAP) { std::stringstream ss; ss << "texture-unit-" << activeTextureUnit << "-target-" << cap; unlink("render-state", ss.str()); } provide("state", call->no); return true; } /* No known texture-related side effects. Return false for more analysis. */ return false; } bool TraceAnalyzer::recordShaderSideEffects(trace::Call *call, const char *name) { if (strcmp(name, "glCreateShader") == 0 || strcmp(name, "glCreateShaderObjectARB") == 0) { GLuint shader = call->ret->toUInt(); providef("shader-", shader, call->no); return true; } if (strcmp(name, "glShaderSource") == 0 || strcmp(name, "glShaderSourceARB") == 0 || strcmp(name, "glCompileShader") == 0 || strcmp(name, "glCompileShaderARB") == 0 || strcmp(name, "glGetShaderiv") == 0 || strcmp(name, "glGetShaderInfoLog") == 0) { GLuint shader = call->arg(0).toUInt(); providef("shader-", shader, call->no); return true; } if (strcmp(name, "glCreateProgram") == 0 || strcmp(name, "glCreateProgramObjectARB") == 0) { GLuint program = call->ret->toUInt(); providef("program-", program, call->no); return true; } if (strcmp(name, "glAttachShader") == 0 || strcmp(name, "glAttachObjectARB") == 0) { GLuint program, shader; std::stringstream ss_program, ss_shader; program = call->arg(0).toUInt(); shader = call->arg(1).toUInt(); ss_program << "program-" << program; ss_shader << "shader-" << shader; link(ss_program.str(), ss_shader.str()); provide(ss_program.str(), call->no); return true; } if (strcmp(name, "glDetachShader") == 0 || strcmp(name, "glDetachObjectARB") == 0) { GLuint program, shader; std::stringstream ss_program, ss_shader; program = call->arg(0).toUInt(); shader = call->arg(1).toUInt(); ss_program << "program-" << program; ss_shader << "shader-" << shader; unlink(ss_program.str(), ss_shader.str()); return true; } if (strcmp(name, "glUseProgram") == 0 || strcmp(name, "glUseProgramObjectARB") == 0) { GLuint program; program = call->arg(0).toUInt(); unlinkAll("render-program-state"); if (program == 0) { unlink("render-state", "render-program-state"); provide("state", call->no); } else { std::stringstream ss; ss << "program-" << program; link("render-state", "render-program-state"); link("render-program-state", ss.str()); provide(ss.str(), call->no); } return true; } if (strcmp(name, "glGetUniformLocation") == 0 || strcmp(name, "glGetUniformLocationARB") == 0 || strcmp(name, "glGetFragDataLocation") == 0 || strcmp(name, "glGetFragDataLocationEXT") == 0 || strcmp(name, "glGetSubroutineUniformLocation") == 0 || strcmp(name, "glGetProgramResourceLocation") == 0 || strcmp(name, "glGetProgramResourceLocationIndex") == 0 || strcmp(name, "glGetVaryingLocationNV") == 0) { GLuint program = call->arg(0).toUInt(); providef("program-", program, call->no); return true; } /* For any call that accepts 'location' as its first argument, * perform a lookup in our location->program map and add a * dependence on the program we find there. */ if (call->sig->num_args > 0 && strcmp(call->sig->arg_names[0], "location") == 0) { providef("program-", activeProgram, call->no); /* We can't easily tell if this uniform is being used to * associate a sampler in the shader with a texture * unit. The conservative option is to assume that it is * and create a link from the active program to any bound * textures for the given unit number. * * FIXME: We should be doing the same thing for calls to * glUniform1iv. */ if (strcmp(name, "glUniform1i") == 0 || strcmp(name, "glUniform1iARB") == 0) { GLint max_unit = MAX(GL_MAX_TEXTURE_COORDS, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS); GLint unit = call->arg(1).toSInt(); std::stringstream ss_program; std::stringstream ss_texture; if (unit < max_unit) { ss_program << "program-" << activeProgram; ss_texture << "texture-unit-" << GL_TEXTURE0 + unit << "-target-"; /* We don't know what target(s) might get bound to * this texture unit, so conservatively link to * all. Only bound textures will actually get inserted * into the output call stream. */ linkf(ss_program.str(), ss_texture.str(), GL_TEXTURE_1D); linkf(ss_program.str(), ss_texture.str(), GL_TEXTURE_2D); linkf(ss_program.str(), ss_texture.str(), GL_TEXTURE_3D); linkf(ss_program.str(), ss_texture.str(), GL_TEXTURE_CUBE_MAP); } } return true; } /* FIXME: We cut a huge swath by assuming that any unhandled * call that has a first argument named "program" should not * be included in the trimmed output unless the program of * that number is also included. * * This heuristic is correct for many cases, but we should * actually carefully verify if this includes some calls * inappropriately, or if it misses some. */ if (strcmp(name, "glLinkProgram") == 0 || strcmp(name, "glLinkProgramARB") == 0 || (call->sig->num_args > 0 && (strcmp(call->sig->arg_names[0], "program") == 0 || strcmp(call->sig->arg_names[0], "programObj") == 0))) { GLuint program = call->arg(0).toUInt(); providef("program-", program, call->no); return true; } /* No known shader-related side effects. Return false for more analysis. */ return false; } bool TraceAnalyzer::recordDrawingSideEffects(trace::Call *call, const char *name) { /* Handle all rendering operations, (even though only glEnd is * flagged as a rendering operation we treat everything from * glBegin through glEnd as a rendering operation). */ if (call->flags & trace::CALL_FLAG_RENDER || insideBeginEnd) { std::set calls; std::set::iterator c; provide("framebuffer", call->no); calls = resolve("render-state"); for (c = calls.begin(); c != calls.end(); c++) { provide("framebuffer", *c); } /* In some cases, rendering has side effects beyond the * framebuffer update. */ if (renderingHasSideEffect()) { provide("state", call->no); for (c = calls.begin(); c != calls.end(); c++) { provide("state", *c); } } return true; } /* Though it's not flagged as a "RENDER" operation, we also want * to trim swapbuffers calls when trimming drawing operations. */ if (call->flags & trace::CALL_FLAG_SWAP_RENDERTARGET && call->flags & trace::CALL_FLAG_END_FRAME) { return true; } /* No known drawing-related side effects. Return false for more analysis. */ return false; } void TraceAnalyzer::recordSideEffects(trace::Call *call) { const char *name = call->name(); /* FIXME: If we encode the list of commands that are executed * immediately (as opposed to those that are compiled into a * display list) then we could generate a "display-list-X" * resource just as we do for "texture-X" resources and only * emit it in the trace if a glCallList(X) is emitted. For * now, simply punt and include anything within glNewList and * glEndList in the trim output. This guarantees that display * lists will work, but does not trim out unused display * lists. */ if (insideNewEndList != 0) { provide("state", call->no); /* Also, any texture bound inside a display list is * conservatively considered required. */ if (strcmp(name, "glBindTexture") == 0) { GLuint texture = call->arg(1).toUInt(); linkf("state", "texture-", texture); } return; } if (trimFlags & TRIM_FLAG_NO_SIDE_EFFECTS) { if (callHasNoSideEffects(call, name)) { return; } } if (trimFlags & TRIM_FLAG_TEXTURES) { if (recordTextureSideEffects(call, name)) { return; } } if (trimFlags & TRIM_FLAG_SHADERS) { if (recordShaderSideEffects(call, name)) { return; } } if (trimFlags & TRIM_FLAG_DRAWING) { if (recordDrawingSideEffects(call, name)) { return; } } /* By default, assume this call affects the state somehow. */ resources["state"].insert(call->no); } void TraceAnalyzer::requireDependencies(trace::Call *call) { /* Swap-buffers calls depend on framebuffer state. */ if (call->flags & trace::CALL_FLAG_SWAP_RENDERTARGET && call->flags & trace::CALL_FLAG_END_FRAME) { consume("framebuffer"); } /* By default, just assume this call depends on generic state. */ consume("state"); } TraceAnalyzer::TraceAnalyzer(TrimFlags trimFlagsOpt): transformFeedbackActive(false), framebufferObjectActive(false), insideBeginEnd(false), insideNewEndList(0), activeTextureUnit(GL_TEXTURE0), trimFlags(trimFlagsOpt) { /* Nothing needed. */ } TraceAnalyzer::~TraceAnalyzer() { /* Nothing needed. */ } /* Analyze this call by tracking state and recording all the * resources provided by this call as side effects.. */ void TraceAnalyzer::analyze(trace::Call *call) { stateTrackPreCall(call); recordSideEffects(call); stateTrackPostCall(call); } /* Require this call and all of its dependencies to be included in * the final trace. */ void TraceAnalyzer::require(trace::Call *call) { /* First, find and insert all calls that this call depends on. */ requireDependencies(call); /* Then insert this call itself. */ required.add(call->no); } /* Return a set of all the required calls, (both those calls added * explicitly with require() and those implicitly depended * upon. */ trace::FastCallSet * TraceAnalyzer::get_required(void) { return &required; } tmpNnpnZF/cli/cli_main.cpp0000664000175000017500000001200412543167424015007 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ /* * Top-level application for accessing almost all of apitrace * functionality. */ #include #include #include #include "cli.hpp" #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0])) static const char *help_synopsis = "Print detailed help for the given command."; static void list_commands(void); static void help_usage() { std::cout << "usage: apitrace help []\n" << help_synopsis << "\n" "\n"; list_commands(); } static int do_help_command(int argc, char *argv[]); const Command help_command = { "help", help_synopsis, help_usage, do_help_command }; static const Command * commands[] = { &diff_command, &diff_state_command, &diff_images_command, &dump_command, &dump_images_command, &pickle_command, &sed_command, &repack_command, &retrace_command, &trace_command, &trim_command, &help_command }; /* Aliases provide a mechanism to allow compatibility with old command * names (such as "retrace") for current commands (such as the replay * command). */ typedef struct { const char *name; const Command *command; } Alias; static const Alias aliases[] = { { "retrace", &retrace_command } }; static void usage(void) { std::cout << "Usage: apitrace [ ...]\n" "Top-level command line frontend to apitrace.\n" "\n"; list_commands(); } static void list_commands(void) { const Command *command; int i, max_width = 0; std::cout << "The available commands are as follows:\n\n"; std::cout << std::setiosflags(std::ios::left); for (i = 0; i < ARRAY_SIZE(commands); i++) { command = commands[i]; if (strlen(command->name) > max_width) { max_width = strlen(command->name); } } for (i = 0; i < ARRAY_SIZE(commands); i++) { command = commands[i]; std::cout << " " << std::setw(max_width + 2) << command->name << " " << command->synopsis << "\n"; } std::cout << "\n" "Use \"apitrace help \" for more details on each command.\n"; } static int do_help_command(int argc, char *argv[]) { const Command *command; int i; if (argc != 2) { help_usage(); return 0; } char *command_name = argv[1]; for (i = 0; i < ARRAY_SIZE(commands); i++) { command = commands[i]; if (strcmp(command_name, command->name) == 0) { (command->usage) (); return 0; } } std::cerr << "Error: Unknown command: " << command_name << " (see \"apitrace help\").\n"; return 1; } int main(int argc, char **argv) { const char *command_name; const Command *command; const Alias *alias; int i; for (i = 1; i < argc; ++i) { const char *arg = argv[i]; if (arg[0] != '-') { break; } if (strcmp(arg, "--help") == 0) { return do_help_command(0, NULL); } else { std::cerr << "Error: unknown option " << arg << "\n"; usage(); return 1; } } if (i == argc) { usage(); return 1; } command_name = argv[i]; argc -= i; argv = &argv[i]; for (i = 0; i < ARRAY_SIZE(commands); i++) { command = commands[i]; if (strcmp(command_name, command->name) == 0) return (command->function) (argc, argv); } for (i = 0; i < ARRAY_SIZE(aliases); i++) { alias = &aliases[i]; if (strcmp(command_name, alias->name) == 0) return (alias->command->function) (argc, argv); } std::cerr << "Error: unknown command " << command_name << " (see \"apitrace help\").\n"; return 1; } tmpNnpnZF/cli/cli_retrace.hpp0000664000175000017500000000305012543167424015516 0ustar chrischris/********************************************************************* * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #pragma once #include #include "trace_api.hpp" int executeRetrace(const std::vector & opts, const char *traceName, trace::API api); int executeRetrace(const std::vector & opts, const char *traceName); tmpNnpnZF/cli/README.markdown0000664000175000017500000000007112543167424015232 0ustar chrischrisImplementation of the `apitrace` command line interface. tmpNnpnZF/cli/cli_dump.cpp0000664000175000017500000001344712543167424015044 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include // for CHAR_MAX #include #ifndef _WIN32 #include // for isatty() #endif #include "cli.hpp" #include "cli_pager.hpp" #include "trace_parser.hpp" #include "trace_dump.hpp" #include "trace_callset.hpp" #include "trace_option.hpp" enum ColorOption { COLOR_OPTION_NEVER = 0, COLOR_OPTION_ALWAYS = 1, COLOR_OPTION_AUTO = -1 }; static ColorOption color = COLOR_OPTION_AUTO; static bool verbose = false; static trace::CallSet calls(trace::FREQUENCY_ALL); static const char *synopsis = "Dump given trace(s) to standard output."; static void usage(void) { std::cout << "usage: apitrace dump [OPTIONS] TRACE_FILE...\n" << synopsis << "\n" "\n" " -h, --help show this help message and exit\n" " -v, --verbose verbose output\n" " --calls=CALLSET only dump specified calls\n" " --color[=WHEN]\n" " --colour[=WHEN] colored syntax highlighting\n" " WHEN is 'auto', 'always', or 'never'\n" " --thread-ids=[=BOOL] dump thread ids [default: no]\n" " --call-nos[=BOOL] dump call numbers[default: yes]\n" " --arg-names[=BOOL] dump argument names [default: yes]\n" "\n" ; } enum { CALLS_OPT = CHAR_MAX + 1, COLOR_OPT, THREAD_IDS_OPT, CALL_NOS_OPT, ARG_NAMES_OPT, }; const static char * shortOptions = "hv"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"verbose", no_argument, 0, 'v'}, {"calls", required_argument, 0, CALLS_OPT}, {"colour", optional_argument, 0, COLOR_OPT}, {"color", optional_argument, 0, COLOR_OPT}, {"thread-ids", optional_argument, 0, THREAD_IDS_OPT}, {"call-nos", optional_argument, 0, CALL_NOS_OPT}, {"arg-names", optional_argument, 0, ARG_NAMES_OPT}, {0, 0, 0, 0} }; static int command(int argc, char *argv[]) { trace::DumpFlags dumpFlags = 0; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; case 'v': verbose = true; break; case CALLS_OPT: calls.merge(optarg); break; case COLOR_OPT: if (!optarg || !strcmp(optarg, "always")) { color = COLOR_OPTION_ALWAYS; } else if (!strcmp(optarg, "auto")) { color = COLOR_OPTION_AUTO; } else if (!strcmp(optarg, "never")) { color = COLOR_OPTION_NEVER; } else { std::cerr << "error: unknown color argument " << optarg << "\n"; return 1; } break; case THREAD_IDS_OPT: if (trace::boolOption(optarg)) { dumpFlags |= trace::DUMP_FLAG_THREAD_IDS; } else { dumpFlags &= ~trace::DUMP_FLAG_THREAD_IDS; } break; case CALL_NOS_OPT: if (trace::boolOption(optarg)) { dumpFlags &= ~trace::DUMP_FLAG_NO_CALL_NO; } else { dumpFlags |= trace::DUMP_FLAG_NO_CALL_NO; } break; case ARG_NAMES_OPT: if (trace::boolOption(optarg)) { dumpFlags &= ~trace::DUMP_FLAG_NO_ARG_NAMES; } else { dumpFlags |= trace::DUMP_FLAG_NO_ARG_NAMES; } break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } if (color == COLOR_OPTION_AUTO) { #ifdef _WIN32 color = COLOR_OPTION_ALWAYS; #else color = isatty(STDOUT_FILENO) ? COLOR_OPTION_ALWAYS : COLOR_OPTION_NEVER; pipepager(); #endif } if (color == COLOR_OPTION_NEVER) { dumpFlags |= trace::DUMP_FLAG_NO_COLOR; } for (int i = optind; i < argc; ++i) { trace::Parser p; if (!p.open(argv[i])) { return 1; } trace::Call *call; while ((call = p.parse_call())) { if (calls.contains(*call)) { if (verbose || !(call->flags & trace::CALL_FLAG_VERBOSE)) { trace::dump(*call, std::cout, dumpFlags); } } delete call; } } return 0; } const Command dump_command = { "dump", synopsis, usage, command }; tmpNnpnZF/cli/trace_analyzer.hpp0000664000175000017500000000770312543167424016256 0ustar chrischris/************************************************************************** * Copyright 2012 Intel corporation * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "trace_callset.hpp" #include "trace_fast_callset.hpp" #include "trace_parser.hpp" typedef unsigned TrimFlags; /** * Trim flags */ enum { /* Whether to trim calls that have no side effects. */ TRIM_FLAG_NO_SIDE_EFFECTS = (1 << 0), /* Whether to trim calls to setup textures that are never used. */ TRIM_FLAG_TEXTURES = (1 << 1), /* Whether to trim calls to setup shaders that are never used. */ TRIM_FLAG_SHADERS = (1 << 2), /* Whether to trim drawing operations outside of the desired call-set. */ TRIM_FLAG_DRAWING = (1 << 3), }; class TraceAnalyzer { private: std::map > resources; std::map > dependencies; std::map texture_map; trace::FastCallSet required; bool transformFeedbackActive; bool framebufferObjectActive; bool insideBeginEnd; GLuint insideNewEndList; GLenum activeTextureUnit; GLuint activeProgram; unsigned int trimFlags; void provide(std::string resource, trace::CallNo call_no); void providef(std::string resource, int resource_no, trace::CallNo call_no); void link(std::string resource, std::string dependency); void linkf(std::string resource, std::string dependency, int dep_no); void unlink(std::string resource, std::string dependency); void unlinkf(std::string resource, std::string dependency, int dep_no); void unlinkAll(std::string resource); void stateTrackPreCall(trace::Call *call); void recordSideEffects(trace::Call *call); bool callHasNoSideEffects(trace::Call *call, const char *name); bool recordTextureSideEffects(trace::Call *call, const char *name); bool recordShaderSideEffects(trace::Call *call, const char *name); bool recordDrawingSideEffects(trace::Call *call, const char *name); void stateTrackPostCall(trace::Call *call); bool renderingHasSideEffect(void); std::set resolve(std::string resource); void consume(std::string resource); void requireDependencies(trace::Call *call); public: TraceAnalyzer(TrimFlags trimFlags = -1); ~TraceAnalyzer(); /* Analyze this call by tracking state and recording all the * resources provided by this call as side effects.. */ void analyze(trace::Call *call); /* Require this call and all of its dependencies to be included in * the final trace. */ void require(trace::Call *call); /* Return a set of all the required calls, (both those calls added * explicitly with require() and those implicitly depended * upon. */ trace::FastCallSet *get_required(void); }; tmpNnpnZF/cli/cli.hpp0000664000175000017500000000357612543167424014026 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #pragma once struct Command { const char *name; const char *synopsis; typedef void (*Usage) (void); Usage usage; typedef int (*Function) (int argc, char *argv[]); Function function; }; extern const Command diff_command; extern const Command diff_state_command; extern const Command diff_images_command; extern const Command dump_command; extern const Command dump_images_command; extern const Command pickle_command; extern const Command repack_command; extern const Command retrace_command; extern const Command sed_command; extern const Command trace_command; extern const Command trim_command; tmpNnpnZF/cli/CMakeLists.txt0000664000175000017500000000272612543167424015302 0ustar chrischris# Expose the binary/install directories to source # # TODO: Use the same directory layout, for both build and install directories, # so that binaries can find each other using just relative paths. # add_definitions( -DAPITRACE_PROGRAMS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/bin" -DAPITRACE_SCRIPTS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${SCRIPTS_INSTALL_DIR}" -DAPITRACE_WRAPPERS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${WRAPPER_INSTALL_DIR}" ) if (WIN32) add_definitions (-DAPITRACE_PYTHON_EXECUTABLE="python") else () add_definitions (-DAPITRACE_PYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}") endif () add_executable (apitrace cli_main.cpp cli_diff.cpp cli_diff_state.cpp cli_diff_images.cpp cli_dump.cpp cli_dump_images.cpp cli_pager.cpp cli_pickle.cpp cli_repack.cpp cli_retrace.cpp cli_sed.cpp cli_trace.cpp cli_trim.cpp cli_resources.cpp trace_analyzer.cpp ) target_link_libraries (apitrace common ${ZLIB_LIBRARIES} ${SNAPPY_LIBRARIES} ${GETOPT_LIBRARIES} ${CMAKE_DL_LIBS} ) if (NOT CMAKE_CROSSCOMPILING) # On debug builds tell where the source is so that scripts can be found # http://www.cmake.org/cmake/help/v3.0/policy/CMP0043.html set_target_properties (apitrace PROPERTIES COMPILE_DEFINITIONS $<$:APITRACE_SOURCE_DIR="${CMAKE_SOURCE_DIR}"> ) endif () install (TARGETS apitrace RUNTIME DESTINATION bin) install_pdb (apitrace RUNTIME DESTINATION bin) tmpNnpnZF/cli/cli_pager.cpp0000664000175000017500000000655212543167424015174 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Pager abstraction. */ #include "cli.hpp" #if defined(_WIN32) void pipepager(void) { /* no-op */ } #else /* !defined(_WIN32) */ #include #include #include #include #include #include #include #include #include static pid_t pid = -1; /* * Wait for pager process on exit. */ static void on_exit(void) { fflush(stdout); fflush(stderr); close(STDOUT_FILENO); close(STDERR_FILENO); waitpid(pid, NULL, 0); } /* * Wait for page process on signal. */ static void on_signal(int sig) { fprintf(stderr, "on_signal\n"); on_exit(); signal(sig, SIG_DFL); raise(sig); } /* * Spawn a pager process and pipe standard output into it. */ void pipepager(void) { if (!isatty(STDOUT_FILENO)) { return; } union { int pipe[2]; struct { int read; int write; }; } fd; int ret; const char *pager; ret = pipe(fd.pipe); assert(ret == 0); if (ret != 0) { return; } pid = fork(); switch (pid) { case -1: // failed to fork close(fd.read); close(fd.write); return; case 0: // child close(fd.write); dup2(fd.read, STDIN_FILENO); pager = getenv("PAGER"); if (!pager) { pager = "less"; } if (!getenv("PAGER")) { putenv((char *)"LESS=FRXn"); } execlp(pager, pager, NULL); // This line should never be reached abort(); default: // parent close(fd.read); dup2(fd.write, STDOUT_FILENO); if (isatty(STDERR_FILENO)) { dup2(fd.write, STDERR_FILENO); } close(fd.write); // Ensure we wait for the pager before terminating signal(SIGINT, on_signal); signal(SIGHUP, on_signal); signal(SIGTERM, on_signal); signal(SIGQUIT, on_signal); signal(SIGPIPE, on_signal); atexit(on_exit); } } #endif /* !defined(_WIN32) */ tmpNnpnZF/cli/cli_pickle.cpp0000664000175000017500000001656212543167424015347 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include // for CHAR_MAX #include #include "pickle.hpp" #include "os_binary.hpp" #include "cli.hpp" #include "cli_pager.hpp" #include "trace_parser.hpp" #include "trace_model.hpp" #include "trace_callset.hpp" using namespace trace; class PickleVisitor : public trace::Visitor { protected: PickleWriter &writer; bool symbolic; public: PickleVisitor(PickleWriter &_writer, bool _symbolic) : writer(_writer), symbolic(_symbolic) { } void visit(Null *node) { writer.writeInt(0); } void visit(Bool *node) { writer.writeBool(node->value); } void visit(SInt *node) { writer.writeInt(node->value); } void visit(UInt *node) { writer.writeInt(node->value); } void visit(Float *node) { writer.writeFloat(node->value); } void visit(Double *node) { writer.writeFloat(node->value); } void visit(String *node) { writer.writeString(node->value); } void visit(WString *node) { writer.writeWString(node->value); } void visit(Enum *node) { if (symbolic) { const EnumValue *it = node->lookup(); if (it) { writer.writeString(it->name); return; } } writer.writeInt(node->value); } void visit(Bitmask *node) { if (symbolic) { unsigned long long value = node->value; const BitmaskSig *sig = node->sig; writer.beginTuple(); for (const BitmaskFlag *it = sig->flags; it != sig->flags + sig->num_flags; ++it) { if ((it->value && (value & it->value) == it->value) || (!it->value && value == 0)) { writer.writeString(it->name); value &= ~it->value; } if (value == 0) { break; } } if (value) { writer.writeInt(value); } writer.endTuple(); } else { writer.writeInt(node->value); } } void visit(Struct *node) { if (true) { // Structures as dictionaries writer.beginDict(); for (unsigned i = 0; i < node->sig->num_members; ++i) { writer.beginItem(node->sig->member_names[i]); _visit(node->members[i]); writer.endItem(); } writer.endDict(); } else { // Structures as tuples unsigned num_members = node->sig->num_members; writer.beginTuple(num_members); for (unsigned i = 0; i < num_members; ++i) { _visit(node->members[i]); } writer.endTuple(num_members); } } void visit(Array *node) { writer.beginList(); for (std::vector::iterator it = node->values.begin(); it != node->values.end(); ++it) { _visit(*it); } writer.endList(); } void visit(Blob *node) { writer.writeByteArray(node->buf, node->size); } void visit(Pointer *node) { writer.writePointer(node->value); } void visit(Repr *r) { if (symbolic) { _visit(r->humanValue); } else { _visit(r->machineValue); } } void visit(Call *call) { writer.beginTuple(); writer.writeInt(call->no); writer.writeString(call->name()); writer.beginList(); for (unsigned i = 0; i < call->args.size(); ++i) { writer.beginTuple(2); if (i < call->sig->num_args) { writer.writeString(call->sig->arg_names[i]); } else { writer.writeNone(); } if (call->args[i].value) { _visit(call->args[i].value); } else { writer.writeNone(); } writer.endTuple(2); } writer.endList(); if (call->ret) { _visit(call->ret); } else { writer.writeNone(); } writer.writeInt(call->flags); writer.endTuple(); } }; static trace::CallSet calls(trace::FREQUENCY_ALL); static const char *synopsis = "Pickle given trace(s) to standard output."; static void usage(void) { std::cout << "usage: apitrace pickle [OPTIONS] TRACE_FILE...\n" << synopsis << "\n" "\n" " -h, --help show this help message and exit\n" " -s, --symbolic dump symbolic names\n" " --calls=CALLSET only dump specified calls\n" ; } enum { CALLS_OPT = CHAR_MAX + 1, }; const static char * shortOptions = "hs"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"symbolic", no_argument, 0, 's'}, {"calls", required_argument, 0, CALLS_OPT}, {0, 0, 0, 0} }; static int command(int argc, char *argv[]) { bool symbolic = false; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; case 's': symbolic = true; break; case CALLS_OPT: calls.merge(optarg); break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } os::setBinaryMode(stdout); std::cout.sync_with_stdio(false); PickleWriter writer(std::cout); PickleVisitor visitor(writer, symbolic); for (int i = optind; i < argc; ++i) { trace::Parser parser; if (!parser.open(argv[i])) { return 1; } trace::Call *call; while ((call = parser.parse_call())) { if (calls.contains(*call)) { writer.begin(); visitor.visit(call); writer.end(); } delete call; } } return 0; } const Command pickle_command = { "pickle", synopsis, usage, command }; tmpNnpnZF/cli/cli_resources.hpp0000664000175000017500000000307312543167424016110 0ustar chrischris/************************************************************************** * * Copyright 2011 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "os_string.hpp" #include "trace_api.hpp" os::String findProgram(const char *programFilename, bool verbose = false); os::String findScript(const char *name, bool verbose = false); os::String findWrapper(const char *wrapperFilename, bool verbose = false); tmpNnpnZF/cli/cli_dump_images.cpp0000664000175000017500000001057212543167424016365 0ustar chrischris/********************************************************************* * * Copyright 2011 Jose Fonseca * Copyright 2012 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include // for CHAR_MAX #include #include #include #include "os_string.hpp" #include "cli.hpp" #include "cli_retrace.hpp" static const char *synopsis = "Dump frame images obtained from a trace."; static void usage(void) { std::cout << "usage apitrace dump-images [OPTIONS] TRACE_FILE\n" << synopsis << "\n" "\n" " -h, --help show this help message and exit\n" " --calls=CALLSET dump images only for specified calls\n" " (default value is \"*/frame\" which\n" " which dumps an image for each frame)\n" " --call-nos[=BOOL] use call numbers in image filenames,\n" " otherwise use sequental numbers (default=yes)\n" " -o, --output=PREFIX prefix to use in naming output files\n" " (default is trace filename without extension)\n" "\n"; } enum { CALLS_OPT = CHAR_MAX + 1, CALL_NOS_OPT, }; const static char * shortOptions = "ho:"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"calls", required_argument, 0, CALLS_OPT}, {"call-nos", optional_argument, 0, CALL_NOS_OPT}, {"output", required_argument, 0, 'o'}, {0, 0, 0, 0} }; static int command(int argc, char *argv[]) { os::String prefix; const char *calls = NULL; const char *traceName = NULL; const char *output = NULL; std::string call_nos; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; case CALLS_OPT: calls = optarg; break; case CALL_NOS_OPT: call_nos = "--call-nos="; call_nos.append(optarg); break; case 'o': output = optarg; break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } if (optind >= argc) { std::cerr << "error: apitrace dump-images requires a trace file as an argument.\n"; usage(); return 1; } if (optind < argc - 1) { std::cerr << "error: apitrace dump-images can accept only a single trace file argument.\n"; usage(); return 1; } traceName = argv[optind]; if (output == NULL) { prefix = traceName; prefix.trimDirectory(); prefix.trimExtension(); prefix.append('.'); output = prefix.str(); } std::vector opts; opts.push_back("-s"); opts.push_back(output); opts.push_back("-S"); if (calls) opts.push_back(calls); else opts.push_back("*/frame"); if (!call_nos.empty()) { opts.push_back(call_nos.c_str()); } return executeRetrace(opts, traceName); } const Command dump_images_command = { "dump-images", synopsis, usage, command }; tmpNnpnZF/cli/cli_pager.hpp0000664000175000017500000000246212543167424015175 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once void pipepager(void); tmpNnpnZF/cli/cli_diff_state.cpp0000664000175000017500000000441112543167424016176 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include "cli.hpp" #include "os_string.hpp" #include "os_process.hpp" #include "cli_resources.hpp" static const char *synopsis = "Identify differences between two state dumps."; static os::String find_command(void) { return findScript("jsondiff.py"); } static void usage(void) { os::String command = find_command(); char *args[4]; args[0] = (char *) APITRACE_PYTHON_EXECUTABLE; args[1] = (char *) command.str(); args[2] = (char *) "--help"; args[3] = NULL; os::execute(args); } static int command(int argc, char *argv[]) { int i; os::String command = find_command(); std::vector args; args.push_back(APITRACE_PYTHON_EXECUTABLE); args.push_back(command.str()); for (i = 1; i < argc; i++) { args.push_back(argv[i]); } args.push_back(NULL); return os::execute((char * const *)&args[0]); } const Command diff_state_command = { "diff-state", synopsis, usage, command }; tmpNnpnZF/cli/cli_trace.cpp0000664000175000017500000002663712543167424015202 0ustar chrischris/********************************************************************* * * Copyright 2011 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include #include #include #include #include "os_string.hpp" #include "os_process.hpp" #include "os_version.hpp" #include "cli.hpp" #include "cli_resources.hpp" #if defined(__APPLE__) #define TRACE_VARIABLE "DYLD_FRAMEWORK_PATH" #define GL_TRACE_WRAPPER "OpenGL.framework/OpenGL" #elif defined(_WIN32) #define GL_TRACE_WRAPPER "opengl32.dll" #else #define TRACE_VARIABLE "LD_PRELOAD" #define GL_TRACE_WRAPPER "glxtrace.so" #define EGL_TRACE_WRAPPER "egltrace.so" #endif #ifdef _WIN32 static inline bool copyWrapper(const os::String & wrapperPath, const char *programPath, bool verbose) { os::String wrapperFilename(wrapperPath); wrapperFilename.trimDirectory(); os::String tmpWrapper(programPath); tmpWrapper.trimFilename(); tmpWrapper.join(wrapperFilename); if (verbose) { std::cerr << wrapperPath << " -> " << tmpWrapper << "\n"; } if (tmpWrapper.exists()) { std::cerr << "error: not overwriting " << tmpWrapper << "\n"; return false; } if (!os::copyFile(wrapperPath, tmpWrapper, false)) { std::cerr << "error: failed to copy " << wrapperPath << " into " << tmpWrapper << "\n"; return false; } return true; } #endif /* _WIN32 */ static int traceProgram(trace::API api, char * const *argv, const char *output, bool verbose, bool debug) { const char *wrapperFilename; std::vector args; int status = 1; /* * TODO: simplify code */ bool useInject = false; switch (api) { case trace::API_GL: wrapperFilename = GL_TRACE_WRAPPER; break; #ifdef EGL_TRACE_WRAPPER case trace::API_EGL: wrapperFilename = EGL_TRACE_WRAPPER; break; #endif #ifdef _WIN32 case trace::API_D3D7: wrapperFilename = "ddraw.dll"; break; case trace::API_D3D8: wrapperFilename = "d3d8.dll"; break; case trace::API_D3D9: wrapperFilename = "d3d9.dll"; break; case trace::API_DXGI: wrapperFilename = "dxgitrace.dll"; useInject = true; break; case trace::API_D2D1: wrapperFilename = "d2d1trace.dll"; useInject = true; break; #endif default: std::cerr << "error: unsupported API\n"; return 1; } os::String wrapperPath = findWrapper(wrapperFilename, verbose); if (!wrapperPath.length()) { std::cerr << "error: failed to find " << wrapperFilename << " wrapper (rerun with -v option for more details)\n"; goto exit; } #if defined(_WIN32) /* * Use DLL injection method on Windows, even for APIs that don't stricly * need it. */ useInject = true; if (useInject) { args.push_back("inject"); if (debug) { args.push_back("-d"); } args.push_back("-D"); args.push_back(wrapperPath); args.push_back("--"); } else { /* On Windows copy the wrapper to the program directory. */ if (!copyWrapper(wrapperPath, argv[0], verbose)) { goto exit; } } #else /* !_WIN32 */ (void)useInject; #endif /* !_WIN32 */ #if defined(__APPLE__) /* On Mac OS X, using DYLD_LIBRARY_PATH, we actually set the * parent directory, not the file. */ wrapperPath.trimFilename(); wrapperPath.trimFilename(); #endif /* * Spawn child process. */ { #if defined(TRACE_VARIABLE) const char *oldEnvVarValue = getenv(TRACE_VARIABLE); if (oldEnvVarValue) { wrapperPath.append(OS_PATH_SEP); wrapperPath.append(oldEnvVarValue); } std::string ex; if (debug) { #if defined(__APPLE__) bool lldb = true; #else bool lldb = false; #endif if (lldb) { /* * Debug with LLDB. * * See also http://lldb.llvm.org/lldb-gdb.html */ char scriptFileName[] = "/tmp/apitrace.XXXXXX"; int scriptFD = mkstemp(scriptFileName); if (scriptFD < 0) { std::cerr << "error: failed to create temporary lldb script file\n"; exit(1); } FILE *scriptStream = fdopen(scriptFD, "w"); fprintf(scriptStream, "env " TRACE_VARIABLE "='%s'\n", wrapperPath.str()); fclose(scriptStream); args.push_back("lldb"); args.push_back("-s"); args.push_back(scriptFileName); args.push_back("--"); } else { /* * Debug with GDB. */ ex = "set exec-wrapper env " TRACE_VARIABLE "='"; ex.append(wrapperPath.str()); ex.append("'"); args.push_back("gdb"); args.push_back("--ex"); args.push_back(ex.c_str()); args.push_back("--args"); } os::unsetEnvironment(TRACE_VARIABLE); } else { /* FIXME: Don't modify our (ie parent) environment */ os::setEnvironment(TRACE_VARIABLE, wrapperPath.str()); } if (verbose) { std::cerr << TRACE_VARIABLE << "=" << wrapperPath.str() << "\n"; } #endif /* TRACE_VARIABLE */ if (output) { os::setEnvironment("TRACE_FILE", output); } for (char * const * arg = argv; *arg; ++arg) { args.push_back(*arg); } if (verbose) { const char *sep = ""; for (unsigned i = 0; i < args.size(); ++i) { const char *quote; if (strchr(args[i], ' ') != NULL) { quote = "\""; } else { quote = ""; } std::cerr << sep << quote << args[i] << quote; sep = " "; } std::cerr << "\n"; } args.push_back(NULL); status = os::execute((char * const *)&args[0]); #if defined(TRACE_VARIABLE) if (oldEnvVarValue) { os::setEnvironment(TRACE_VARIABLE, oldEnvVarValue); } else { os::unsetEnvironment(TRACE_VARIABLE); } #endif } exit: #if defined(_WIN32) if (!useInject) { os::String tmpWrapper(argv[0]); tmpWrapper.trimFilename(); tmpWrapper.join(wrapperFilename); os::removeFile(tmpWrapper); } #endif if (output) { os::unsetEnvironment("TRACE_FILE"); } return status; } static const char *synopsis = "Generate a new trace by executing the given program."; static void usage(void) { std::cout << "usage: apitrace trace [OPTIONS] PROGRAM [ARGS ...]\n" << synopsis << "\n" "\n" " The given program will be executed with the given arguments.\n" " During execution, all OpenGL calls will be captured to a trace\n" " file. That trace file can then be used\n" " with other apitrace utilities for replay or analysis.\n" "\n" " -v, --verbose verbose output\n" " -a, --api=API specify API to trace (" #ifdef _WIN32 "gl, d3d7, d3d8, d3d9, or dxgi (for d3d10 and higher) " #else "gl or egl" #endif ");\n" " default is `gl`\n" " -o, --output=TRACE specify output trace file;\n" " default is `PROGRAM.trace`\n" #ifdef TRACE_VARIABLE " -d, --debug run inside debugger (gdb/lldb)\n" #endif ; } const static char * shortOptions = "+hva:o:d"; const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"verbose", no_argument, 0, 'v'}, {"api", required_argument, 0, 'a'}, {"output", required_argument, 0, 'o'}, {"debug", no_argument, 0, 'd'}, {0, 0, 0, 0} }; static int command(int argc, char *argv[]) { bool verbose = false; trace::API api = trace::API_GL; const char *output = NULL; bool debug = false; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { case 'h': usage(); return 0; case 'v': verbose = true; break; case 'a': if (strcmp(optarg, "gl") == 0) { api = trace::API_GL; } else if (strcmp(optarg, "egl") == 0) { api = trace::API_EGL; } else if (strcmp(optarg, "d3d7") == 0) { api = trace::API_D3D7; } else if (strcmp(optarg, "d3d8") == 0) { api = trace::API_D3D8; } else if (strcmp(optarg, "d3d9") == 0) { api = trace::API_D3D9; } else if (strcmp(optarg, "dxgi") == 0 || strcmp(optarg, "d3d10") == 0 || strcmp(optarg, "d3d10_1") == 0 || strcmp(optarg, "d3d11") == 0 || strcmp(optarg, "d3d11_1") == 0) { api = trace::API_DXGI; } else if (strcmp(optarg, "d2d") == 0 || strcmp(optarg, "d2d1") == 0) { api = trace::API_D2D1; } else { std::cerr << "error: unknown API `" << optarg << "`\n"; usage(); return 1; } break; case 'o': output = optarg; break; case 'd': debug = true; break; default: std::cerr << "error: unexpected option `" << (char)opt << "`\n"; usage(); return 1; } } if (optind == argc) { std::cerr << "error: no command specified\n"; usage(); return 1; } assert(argv[argc] == 0); return traceProgram(api, argv + optind, output, verbose, debug); } const Command trace_command = { "trace", synopsis, usage, command }; tmpNnpnZF/cli/cli_retrace.cpp0000664000175000017500000000760212543167424015520 0ustar chrischris/********************************************************************* * * Copyright 2011 Jose Fonseca * Copyright 2012 Intel Corporation * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include // for CHAR_MAX #include #include #include "os_string.hpp" #include "os_process.hpp" #include "trace_parser.hpp" #include "cli_resources.hpp" #include "cli.hpp" #include "cli_retrace.hpp" static trace::API guessApi(const char *filename) { trace::Parser p; if (!p.open(filename)) { exit(1); return trace::API_UNKNOWN; } trace::Call *call; while ((call = p.parse_call())) { delete call; if (p.api != trace::API_UNKNOWN) { return p.api; } } return trace::API_UNKNOWN; } int executeRetrace(const std::vector & opts, const char *traceName, trace::API api) { const char *retraceName; switch (api) { case trace::API_GL: retraceName = "glretrace"; break; case trace::API_EGL: retraceName = "eglretrace"; break; case trace::API_DX: case trace::API_D3D7: case trace::API_D3D8: case trace::API_D3D9: case trace::API_DXGI: // Use prefix so that it can be used with WINE retraceName = "d3dretrace.exe"; break; default: std::cerr << "warning: could not guess trace's API\n"; retraceName = "glretrace"; break; } std::vector command; os::String retracePath = findProgram(retraceName); if (retracePath.length()) { command.push_back(retracePath); } else { command.push_back(retraceName); } command.insert(command.end(), opts.begin(), opts.end()); if (traceName) { command.push_back(traceName); } command.push_back(NULL); return os::execute((char * const *)&command[0]); } int executeRetrace(const std::vector & opts, const char *traceName) { trace::API api = guessApi(traceName); return executeRetrace(opts, traceName, api); } static const char *synopsis = "Replay a trace."; static void usage(void) { std::vectoropts; opts.push_back("--help"); trace::API api = trace::API_GL; executeRetrace(opts, NULL, api); } static int command(int argc, char *argv[]) { std::vector opts; for (int i = 1; i < argc; ++i) { opts.push_back(argv[i]); } trace::API api = trace::API_GL; if (argc >= 1) { const char *lastArg = argv[argc -1]; if (lastArg[0] != '-') { api = guessApi(lastArg); } } return executeRetrace(opts, NULL, api); } const Command retrace_command = { "replay", synopsis, usage, command }; tmpNnpnZF/docs/0000775000175000017500000000000012543167424012714 5ustar chrischristmpNnpnZF/docs/Dalvik.markdown0000664000175000017500000000405612543167424015677 0ustar chrischris# Tracing Dalvik VM (Java) applications on Android # Android's Java virtual machine, Dalvik, runs as a system service (started at bootup by `init`) and Java applications are run by forks of the initial resident process. Thus, injecting apitrace's tracing library is different from other operating systems. The following discussion assumes that tracing library is copied to '/data': adb push /path/to/apitrace/build/wrappers/egltrace.so /data ## Tracing on Android 4.0 and newer ## Starting from Android 4.0 (Ice Cream Sandwich) release, Dalvik supports running designated processes with wrappers, in which case a new Java VM is started with 'system()' library call for that process. Obtain the process name of the application to be traced (the one reported in `ps` output, such as `com.android.settings`), and set two system properties: PROCNAME=com.android.settings adb root adb shell setprop wrap.$PROCNAME LD_PRELOAD=/data/egltrace.so adb shell setprop debug.apitrace.procname $PROCNAME (the former is read by Dalvik and specifies wrapping prefix, the latter is read by apitrace itself and used in case apitrace is preloaded into Java VM globally to specify which process should be traced). Elevating priviliges via `adb root` is required to set the first property. Make sure the process is not loaded before starting to trace it, for example use `-S` flag to `am start`: adb shell am start -S $PROCNAME Use `adb logcat \*:S apitrace` to examine apitrace debug output. Trace files are saved into '/data/data/$PROCNAME' directory by default: adb pull /data/data/$PROCNAME/$PROCNAME.trace adb shell rm /data/data/$PROCNAME/$PROCNAME.trace ## Tracing on Android pre-4.0 ## `LD_PRELOAD` is supported since Android 2.3 "Gingerbread" and newer, but injecting tracing library globally is no longer supported, as the `debug.apitrace.procname` system propery is no longer honored. Consider checking out an [older commit](https://github.com/apitrace/apitrace/commit/888112983ef9564b3a9d15699faa17c337d3942b) if you need to trace on Android pre-4.0. tmpNnpnZF/docs/VMWX_map_buffer_debug.txt0000664000175000017500000000654412543167424017623 0ustar chrischrisName VMWX_map_buffer_debug Name Strings GL_VMWX_map_buffer_debug Contact Jose Fonseca, VMware (jfonseca 'at' vmware.com) IP Status No known IP claims. Status Implemented by Apitrace Version Last Modified Date: December 14, 2014 Version: 1 Number TBD. Dependencies GL_ARB_buffer_storage is required. Overview This extension provides a mechanism for the application to notify OpenGL debugging tools that it modified ranges of persistent buffer mappings, without explicitly flushing buffer ranges. New Procedures and Functions void NotifyMappedBufferRangeVMWX(const void * start, sizeiptr length); New Tokens Accepted in the parameter of BufferStorage: MAP_NOTIFY_EXPLICIT_BIT_VMWX 0x80000000 Accepted as part of the parameter to MapBufferRange and MapNamedBufferRange: MAP_NOTIFY_EXPLICIT_BIT_VMWX 0x80000000 Additions to Chapter 6 of the OpenGL Core Profile Specification, Version 4.3, "Buffer Objects" Modify Section 6.2, "Creating and Modifying Buffer Object Data Stores" Add to the bulleted list describing flags that modify buffer storage flags, p.57. * MAP_NOTIFY_EXPLICIT_BIT_VMWX indicates that the application will notify whenever discrete subranges of coherent mappings are notified. This flag may only be used in conjunction with MAP_PERSISTENT_BIT. Modify Section 6.3, "Mapping and Unmapping Buffer Data" Add to the bulleted list describing flags that modify buffer mappings, p.62. * MAP_NOTIFY_EXPLICIT_BIT_VMWX indicates that discrete subranges of the mapping will be notified explicitly when modified. When this flag is set, modifications to each subrange must be explicitly flushed by calling NotifyMappedBufferRangeVMWX. This flag may only be used in conjunction with MAP_PERSISTENT_BIT. If this bit is set, the value of BUFFER_STORAGE_FLAGS for the buffer being mapped must include MAP_NOTIFY_EXPLICIT_BIT_VMWX. Issues 1) Why is this extension necessary? It is true that an application may be friendly towards OpenGL debugging tools that intercept calls by ensuring that MAP_PERSISTENT_BIT is always set with MAP_FLUSH_EXPLICIT_BIT, and never with MAP_COHERENT_BIT. But this restricts/deviates from intended behavior. This extensions provides a mechanism for applications to notify debugging tools without affecting behavior. 2) Why the new MAP_NOTIFY_EXPLICIT_BIT_VMWX token? To be future-proof. In order to record complete traces, OpenGL tracing tools may choose to mask out support for coherent mappings by failing BufferStorage calls with OUT_OF_MEMORY when MAP_COHERENT_BIT is set without MAP_NOTIFY_EXPLICIT_BIT_VMWX; or use techniques to approximately detect writes to coherent mappings if the application calls MapBufferRange with MAP_COHERENT_BIT and MAP_NOTIFY_EXPLICIT_BIT_VMWX. It is therefore crucial that applications that want to explicitily notify modified subranges with calls NotifyMappedBufferRangeVMWX set the MAP_NOTIFY_EXPLICIT_BIT_VMWX bit both on BufferStorage and MapBufferRange calls, to opt-out of further interference from debugging tools. Revision History Version 1, 2014/12/14 - Initial version tmpNnpnZF/docs/BUGS.markdown0000664000175000017500000001605112543167424015223 0ustar chrischris# Reporting bugs # Before reporting, please skim through the known issues below. Report any issues on [github](https://github.com/apitrace/apitrace/issues), always including the following information: * operating system name and version * OpenGL/D3D driver name and version # Known issues # These are issues that the developers are already aware of, but for which there is no immediate plan to address them, because either: * they stem from architectural limitations that are difficult to overcome and/or time-consuming; * they are corners cases that are thought to be of very little practical use; * merely lack of time/opportunity. That said, feel free to file an issue and/or send an email to the mailing list if: * you want discuss the rationale, propose your ideas on how to address it, or volunteer to work on it; * a known issue is important for you and you would like to see it addressed sooner rather than later. ## Tracing ## * Fake calls may be emitted in the trace, in order to provide complete information for retracing. The typical case is OpenGL vertex arrays in user memory (as opposed to VBOs): where glXxxPointer calls will be deferred, glInterleavedArrays will be decomposed, etc. This should not affect the rendered output, but it may use different paths in the OpenGL driver, exercising different paths and with different performance characteristics. There is no way to distinguish the fake calls from those actually made by the application yet. * Huge traces will be generated for applications that make extensive use of immediate mode drawing (ie., glBegin/glEnd), use vertex/element arrays in user memory, or generate a lot of dynamic vertex data per frame. This is because large quantities of (often redundant) data will be recorded over and over; and although the traces are compressed, the compression algorithms used aim a good performance/compression balance, hence fail to identify and remove the redundancy at this scale. However, this should not be a problem for modern OpenGL applications that make an efficient use of VBOs and vertex shaders. * On MacOSX, the internal OpenGL calls done by GLU are not traced yet. ## Retracing ## * Replaying can take substantially more CPU due to the overhead of reading the trace file from disk. However, the overhead should not be significant for modern 3D applications that do efficient use of VBOs and vertex shaders. The communication between CPU to GPU can easily be a bottleneck on the powerful discrete GPUs of nowadays, and trace overhead tend to be propotional so it is not a coincidence that applications that are optimized for modern GPUs will also be traced and replayed efficiently. * glretrace needs to infer window sizes from glViewport calls, because calls that create/resize windows happen outside of OpenGL and are not traced. Therefore window will be missing if the application relies on the default viewport instead of explicitly invoking glViewport; or it will to too big if the window is shrunk. Most apps call glViewport before rendering. * OS specific OpenGL APIs (WGL, GLX, CGL, etc), are not retraced literally, but instead partially emulated. This is by design, to allow traces to be retraced on any OS, as the focus is on the OS-independent parts of OpenGL API. * There is no guarantee that the same visual that was used on tracing will be used for retracing OpenGL. Actually currently, glretrace will always choose a standard 32bit RGBA, 24bit depth, 8bit alpha, double buffer visual. Unless overridden on command line. * OpenGL context sharing is not fully respected -- all contexts are assumed to share state. This is by far the most common case though. ## GUI ## * Not all types of arguments can be edited. # Proprietary/confidential applications # Issues should be preferably filed on github to facilitate collaborative development and for future reference. Access to applications source code is not required -- binaries are sufficient. If the bug happens with a proprietary application, and you don't want to publicly release the application and/or any data collected from it, then alternatively you can provide the necessary application and/or data via e-mail, to *jose dot r dot fonseca at gmail dot com*. If it is not technically/legally feasible for you to provide application and/or data at all, then you must be either: * develop and provide a test application, stripped-down of all proprietary/confidential data, but that can reproduce the issue; * be willing/able to do the investigation of the issue, namely to identify the root cause of the issue (e.g., which OpenGL call is not properly handled and why), using all necessary tools (such as debuggers). Failure to do so will render the apitrace authors powerless to address the issue. # Attachments # github issue tracker doesn't support attachments. Please attach long logs to https://gist.github.com/ and paste the URL into the issue description. For big attachments, such as traces, please upload them temporarily to a web server you control, or use a file upload service such as [Google Drive](https://www.google.com/drive/) or [Dropbox](https://dropbox.com/) and paste the URL into the issue description. Trace files are only slightly compressed (for performance reasons). You can further reduce their size when attaching/uploading by compressing with [XZ](http://tukaani.org/xz/) or [7-Zip](http://www.7-zip.org/). # Bugs on tracing # For bugs that happen while tracing (e.g., crashes while tracing the application, or incorrect traces) please: * provide information on how to obtain the application; * describe how you were using it when the issue happened. # Bugs on retracing/GUI # For bugs on retracing (e.g. crashes when retracing the application, incorrect inconsistent rendering, or viewing with the GUI) please: * provide the trace file; * describe the results you got, and what results you were expecting. # Obtaining stack back-traces # Please rebuild apitrace with debugging information, by passing `-DCMAKE_BUILD_TYPE=Debug` to cmake, or editing its value in `CMakeCache.txt` and rebuilding. ## Linux ## To obtain a stack back-trace, run the application with gdb from a terminal: $ gdb --args application arg1 arg2 ... (gdb) run ... (gdb) bt ... (gdb) quit To trace an application inside GDB invoke apitrace as: apitrace trace --verbose --debug application arg1 ... See also more detailed and Distro specific instructions: * http://wiki.debian.org/HowToGetABacktrace * https://wiki.ubuntu.com/Backtrace * http://fedoraproject.org/wiki/StackTraces * http://live.gnome.org/GettingTraces ## Mac OS X ## Before you can debug you must first enable developer mode on the machine if you haven't done so before: sudo /usr/sbin/DevToolsSecurity --enable To trace an application inside LLDB and obtain a stack backtrace invoke apitrace as: $ apitrace trace --verbose --debug application arg1 ... ... (lldb) bt ... (lldb) quit ## Windows ## See: * tmpNnpnZF/docs/NEWS.markdown0000664000175000017500000000322412543167424015235 0ustar chrischrisThis file lists the major user visible improvements. For a full list of changes and their authors see the git history. # Version 7 # * OpenGL ES 3 support * GUI ported to Qt5 * Thumbnails per draw call in GUI * Rudimentary D3D7 retrace support # Version 6 # * OpenGL 4.5 support * DXGI 1.3 support * Support exporting buffers to disk from GUI # Version 5 # * OpenGL 4.4 support * Stack backtraces on Linux * Better tracing of enums in attribute arrays * MD5 snapshots * Better surface viewer # Version 4 # * Support tracing in Android, both native and Dalvik applications * Show frame thumbnails in the GUI * Basic D3D 10.1, 11, and 11.1 trace support * Basic D3D retrace support * Multi-threaded trace/retrace support * Several OpenGL ES state dump fixes * GPU profiling * Thumbnails in GUI * Trim improvements # Version 3 # * Top-level `apitrace` command * Trace and replay support for EGL, GLES1, and GLES2 APIs on Linux * Ability to trim traces * Basic CPU profiling when retracing * Basic D3D10 trace support # Version 2 # * Flush/sync trace file only when there is an uncaught signal/exception, yielding a 5x speed up while tracing * Employ snappy compression library instead of zlib, yielding a 2x speed up while tracing * Implement and advertise `GL_GREMEDY_string_marker` and `GL_GREMEDY_frame_terminator` extensions * Mac OS X support * Support up-to OpenGL 4.2 calls * Better GUI performance with very large traces, by loading frames from disk on demand # Version 1 # * Qt GUI, capable of visualizing the calls, the state, and editing the state # Version 0 # * D3D8 and D3D9 trace support * OpenGL replay support tmpNnpnZF/docs/INSTALL.markdown0000664000175000017500000001337712543167424015601 0ustar chrischris# Requirements # Requirements common for all platforms: * Python version 2.7 * Python Image Library * CMake version 2.8.11 or higher (tested with version 2.8.12.2) Optional requirements: * zlib 1.2.6 or higher * libpng The GUI also dependends on: * Qt version 5.2.1 or higher (tested with version 5.4.0 and 5.3.0; use the [6.1 release](https://github.com/apitrace/apitrace/releases/tag/6.1), if you must build with Qt4) Qt will be required if `-DENABLE_GUI=TRUE` is passed to CMake, and never used if `-DENABLE_GUI=FALSE` is passed instead. The implicit default is `-DENABLE_GUI=AUTO`, which will build the GUI if Qt is available. The code also depends on snappy libraries, but the bundled sources are always used regardless of system availability, to make the wrapper shared-objects/DLL self contained, and to prevent symbol collisions when tracing. # Linux # Additional optional dependencies: * libprocps (procps development libraries) * libdwarf Build as: cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo make -C build Other possible values for `CMAKE_BUILD_TYPE` `Debug`, `Release`, `RelWithDebInfo`, and `MinSizeRel`. You can also build the 32-bits GL wrapper on a 64-bits distribution, provided you have a multilib gcc and 32-bits X11 libraries, by doing: cmake \ -H. -Bbuild32 \ -DCMAKE_C_FLAGS=-m32 \ -DCMAKE_CXX_FLAGS=-m32 \ -DCMAKE_SYSTEM_LIBRARY_PATH=/usr/lib32 \ -DENABLE_GUI=FALSE make -C build32 glxtrace The `/usr/lib32` refers to the path where the 32-bits shared objects are may differ depending on the actual Linux distribution. # Mac OS X # Build as: cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=~/QtX.Y.Z/X.Y/clang_64 make -C build # Android # Additional requirements: * [Android NDK](http://developer.android.com/sdk/ndk/index.html) * [Android SDK](http://developer.android.com/sdk/index.html#Other). **Make sure you have Android 4.4.2 (API 19) platform SDK installed and Android build tools "21.1.2". API 19 is needed only to build the APK, but it will still run on lower API versions (with works starting with API 12).** Build as: cmake \ -H. -Bbuild \ -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/android.toolchain.cmake \ -DANDROID_NDK=/path/to/your/ndk \ -DANDROID_API_LEVEL=9 \ -DANDROID_STL=gnustl_shared \ [-DANDROID_SDK=/path/to/your/sdk] make -C build [make -C build retraceAPK] will build Android retrace APK. [make -C build installRetraceAPK] will build & install Android retrace APK on the connected device. You can also choose a particular ABI by passing `ANDROID_ABI` variable to cmake, e.g., `-DANDROID_ABI=x86`. Currently, when targeting AArch64 you [must build with GCC](https://github.com/apitrace/apitrace/issues/312), by invoking CMake as: cmake \ -H. -Bbuild \ -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/android.toolchain.cmake \ -DANDROID_API_LEVEL=9 \ -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-4.9 \ -DANDROID_ABI=arm64-v8a ** You'll need Android SDK only to build the retrace APK. ** # FirefoxOS # Put Apitrace source tree into `B2GROOT/external/apitrace/` and the `Android.mk` file (`B2GROOT/external/apitrace/Android.mk`) will do the needful to compile and install apitrace appropriately into the system image as part of FirefoxOS build process. It expects a linaro-type of Android NDK to be present in `../../prebuilt/ndk/android-ndk-r7` (ie `B2GROOT/prebuilt/ndk/android-ndk-r7`). # Windows # ## Microsoft Visual Studio ## Additional requirements: * Microsoft Visual Studio 2013 or newer (tested with 2013) * [Windows 8.1 SDK](http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx) for D3D11.2 headers. * Microsoft DirectX SDK is now part of Microsoft Visual Studio (from version 2012), but D3D8 headers are not included, so if you want D3D8 support you'll need to donwload and install the [August 2007 release of DirectX SDK](http://www.microsoft.com/downloads/details.aspx?familyid=529F03BE-1339-48C4-BD5A-8506E5ACF571) To build with Visual Studio first invoke CMake GUI as: cmake-gui -H. -Bbuild -DCMAKE_PREFIX_PATH=C:\Qt\QtX.Y.Z\X.Y\msvc2013 and press the _Configure_ button. It will try to detect most required/optional dependencies automatically. When not found automatically, you can manually specify the location of the dependencies from the CMake GUI. If the source/build/compiler/tools are spread across multiple drives, you might need to [use absolute paths](https://github.com/apitrace/apitrace/issues/352). After you've successfully configured, you can start the build by opening the generated `build\apitrace.sln` solution file, or invoking CMake as: cmake --build build --config MinSizeRel The steps to build 64-bits version are similar, but choosing _Visual Studio xx Win64_ instead of _Visual Studio xx_. By default, binaries generated by recent builds of Visual Studio will not work on Windows XP. If you want to obtain binaries that on Windows XP then pass the `-T v110_xp` or `-T v120_xp` options to cmake when building with Visual Studio 2012 or 2013 respectively. To run qapitrace, either you ensure that `C:\Qt\QtX.Y.Z\X.Y\msvc2013\bin` is in the system path, or you can use [Qt's Windows deployment tool](http://doc.qt.io/qt-5/windows-deployment.html#the-windows-deployment-tool) to copy all necessary DLLs, like: set Path=C:\Qt\QtX.Y.Z\X.Y\msvc2013\bin;%Path% windeployqt build\qapitrace.exe ## MinGW ## Additional requirements: * [MinGW-w64](http://mingw-w64.sourceforge.net/) (tested with mingw-w64's gcc version 4.6.3) * [https://github.com/apitrace/dxsdk](DirectX headers) It's also possible to cross-compile Windows binaries from Linux with [MinGW cross compilers](http://www.cmake.org/Wiki/CmakeMingw). tmpNnpnZF/docs/USAGE.markdown0000664000175000017500000004551212543167424015333 0ustar chrischris# Basic usage # Run the application you want to trace as apitrace trace --api API /path/to/application [args...] and it will generate a trace named `application.trace` in the current directory. You can specify the written trace filename by passing the `--output` command line option. Problems while tracing (e.g, if the application uses calls/parameters unsupported by apitrace) will be reported via stderr output on Unices. On Windows you'll need to run [DebugView](http://technet.microsoft.com/en-us/sysinternals/bb896647) to view these messages. If you cannot obtain a trace, check the [application specific instructions on the wiki](https://github.com/apitrace/apitrace/wiki/Applications), or the [manual tracing instructions below](#tracing-manually). View the trace with apitrace dump application.trace Replay an OpenGL trace with apitrace replay application.trace Pass the `--sb` option to use a single buffered visual. Pass `--help` to `apitrace replay` for more options. If you run into problems [check if it is a known issue and file an issue if not](BUGS.markdown). # Basic GUI usage # Start the GUI as qapitrace application.trace You can also tell the GUI to go directly to a specific call qapitrace application.trace 12345 Press `Ctrl-T` to see per-frame thumbnails. And while inspecting frame calls, press again `Ctrl-T` to see per-draw call thumbnails. # Backtrace Capturing # apitrace now has the ability to capture the call stack to an OpenGL call on certain OSes (only Android and Linux at the moment). This can be helpful in determing which piece of code made that glDrawArrays call. To use the feature you need to set an environment variable with the list of GL call prefixes you wish to capture stack traces to. export APITRACE_BACKTRACE="glDraw* glUniform*" The backtrace data will show up in qapitrace in the bottom section as a new tab. # Advanced command line usage # ## Call sets ## Several tools take `CALLSET` arguments, e.g: apitrace dump --calls=CALLSET foo.trace apitrace dump-images --calls=CALLSET foo.trace apitrace trim --calls=CALLSET1 --calls=CALLSET2 foo.trace The call syntax is very flexible. Here are a few examples: * `4` one call * `0,2,4,5` set of calls * `"0 2 4 5"` set of calls (commas are optional and can be replaced with whitespace) * `0-100/2` calls 1, 3, 5, ..., 99 * `0-1000/draw` all draw calls between 0 and 1000 * `0-1000/fbo` all fbo changes between calls 0 and 1000 * `frame` all calls at end of frames * `@foo.txt` read call numbers from `foo.txt`, using the same syntax as above ## Tracing manually ## ### Linux ### On 64 bits systems, you'll need to determine whether the application is 64 bits or 32 bits. This can be done by doing file /path/to/application But beware of wrapper shell scripts -- what matters is the architecture of the main process. Run the GLX application you want to trace as LD_PRELOAD=/path/to/apitrace/wrappers/glxtrace.so /path/to/application and it will generate a trace named `application.trace` in the current directory. You can specify the written trace filename by setting the `TRACE_FILE` environment variable before running. For EGL applications you will need to use `egltrace.so` instead of `glxtrace.so`. The `LD_PRELOAD` mechanism should work with the majority of applications. There are some applications (e.g., Unigine Heaven, Android GPU emulator, etc.), that have global function pointers with the same name as OpenGL entrypoints, living in a shared object that wasn't linked with `-Bsymbolic` flag, so relocations to those global function pointers get overwritten with the address to our wrapper library, and the application will segfault when trying to write to them. For these applications it is possible to trace by using `glxtrace.so` as an ordinary `libGL.so` and injecting it via `LD_LIBRARY_PATH`: ln -s glxtrace.so wrappers/libGL.so ln -s glxtrace.so wrappers/libGL.so.1 ln -s glxtrace.so wrappers/libGL.so.1.2 export LD_LIBRARY_PATH=/path/to/apitrace/wrappers:$LD_LIBRARY_PATH export TRACE_LIBGL=/path/to/real/libGL.so.1 /path/to/application If you are an application developer, you can avoid this either by linking with `-Bsymbolic` flag, or by using some unique prefix for your function pointers. See the `ld.so` man page for more information about `LD_PRELOAD` and `LD_LIBRARY_PATH` environment flags. ### Android ### To trace standalone native OpenGL ES applications, use `LD_PRELOAD=/path/to/egltrace.so /path/to/application` as described in the previous section. To trace Java applications, refer to Dalvik.markdown. ### Mac OS X ### Run the application you want to trace as DYLD_FRAMEWORK_PATH=/path/to/apitrace/wrappers /path/to/application Note that although Mac OS X has an `LD_PRELOAD` equivalent, `DYLD_INSERT_LIBRARIES`, it is mostly useless because it only works with `DYLD_FORCE_FLAT_NAMESPACE=1` which breaks most applications. See the `dyld` man page for more details about these environment flags. ### Windows ### When tracing third-party applications, you can identify the target application's main executable, either by: * right clicking on the application's icon in the _Start Menu_, choose _Properties_, and see the _Target_ field; * or by starting the application, run Windows Task Manager (taskmgr.exe), right click on the application name in the _Applications_ tab, choose _Go To Process_, note the highlighted _Image Name_, and search it on `C:\Program Files` or `C:\Program Files (x86)`. On 64 bits Windows, you'll need to determine ether the application is a 64 bits or 32 bits. 32 bits applications will have a `*32` suffix in the _Image Name_ column of the _Processes_ tab of _Windows Task Manager_ window. You also need to know which graphics API is being used. If you are unsure, the simplest way to determine what API an application uses is to: * download and run [Process Explorer](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) * search and select the application's process in _Process Explorer_ * list the DLLs by pressing `Ctrl + D` * sort DLLs alphabetically, and look for the DLLs such as `opengl32.dll`, `d3d9.dll`, `d3d10.dll`, etc. Copy the appropriate `opengl32.dll`, `d3d8.dll`, or `d3d9.dll` from the wrappers directory to the directory with the application you want to trace. Then run the application as usual. You can specify the written trace filename by setting the `TRACE_FILE` environment variable before running. For D3D10 and higher you really must use `apitrace trace -a DXGI ...`. This is because D3D10-11 API span many DLLs which depend on each other, and once a DLL with a given name is loaded Windows will reuse it for LoadLibrary calls of the same name, causing internal calls to be traced erroneously. `apitrace trace` solves this issue by injecting a DLL `dxgitrace.dll` and patching all modules to hook only the APIs of interest. ## Emitting annotations to the trace ## ### OpenGL annotations ### From within OpenGL applications you can embed annotations in the trace file through the following extensions: * [`GL_KHR_debug`](http://www.opengl.org/registry/specs/KHR/debug.txt) * [`GL_ARB_debug_output`](http://www.opengl.org/registry/specs/ARB/debug_output.txt) * [`GL_EXT_debug_marker`](http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt) * [`GL_EXT_debug_label`](http://www.opengl.org/registry/specs/EXT/EXT_debug_label.txt) * [`GL_AMD_debug_output`](http://www.opengl.org/registry/specs/AMD/debug_output.txt) * [`GL_GREMEDY_string_marker`](http://www.opengl.org/registry/specs/GREMEDY/string_marker.txt) * [`GL_GREMEDY_frame_terminator`](http://www.opengl.org/registry/specs/GREMEDY/frame_terminator.txt) **apitrace** will advertise and intercept these OpenGL extensions regardless of whether the OpenGL implementation supports them or not. So all you have to do is to use these extensions when available, and you can be sure they will be available when tracing inside **apitrace**. For example, if you use [GLEW](http://glew.sourceforge.net/) to dynamically detect and use OpenGL extensions, you could easily accomplish this by doing: void foo() { if (GLEW_KHR_debug) { glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, __FUNCTION__); } ... if (GLEW_KHR_debug) { glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_OTHER, 0, GL_DEBUG_SEVERITY_MEDIUM, -1, "bla bla"); } ... if (GLEW_KHR_debug) { glPopDebugGroup(); } } This has the added advantage of working equally well with other OpenGL debugging tools. Also, provided that the OpenGL implementation supports `GL_KHR_debug`, labels defined via glObjectLabel() , and the labels of several objects (textures, framebuffers, samplers, etc. ) will appear in the GUI state dumps, in the parameters tab. For OpenGL ES applications you can embed annotations in the trace file through the [`GL_KHR_debug`](http://www.khronos.org/registry/gles/extensions/KHR/debug.txt) or [`GL_EXT_debug_marker`](http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt) extensions. ### Direct3D annotations ### For Direct3D applications you can follow the standard procedure for [adding user defined events to Visual Studio Graphics Debugger / PIX](http://msdn.microsoft.com/en-us/library/vstudio/hh873200.aspx): - `D3DPERF_BeginEvent`, `D3DPERF_EndEvent`, and `D3DPERF_SetMarker` for D3D9, D3D10, and D3D11.0 applications. - `ID3DUserDefinedAnnotation::BeginEvent`, `ID3DUserDefinedAnnotation::EndEvent`, and `ID3DUserDefinedAnnotation::SetMarker` for D3D11.1 applications. And for [naming objects](http://blogs.msdn.com/b/chuckw/archive/2010/04/15/object-naming.aspx) which support `SetPrivateData` method: pObject->SetPrivateData(WKPDID_D3DDebugObjectName, strlen(szName), szName); Note that [programmatic capture interfaces](https://msdn.microsoft.com/en-us/library/hh780905.aspx) are currently _not_ supported. See also: * * ## Mask OpenGL features ## It's now possible to mask some of OpenGL features while tracing via a configuration file: * `$XDG_CONFIG_HOME/apitrace/gltrace.conf` or `$HOME/.config/apitrace/gltrace.conf` on Linux * `$HOME/Library/Preferences/apitrace/gltrace.conf` on MacOS X * `%LOCALAPPDATA%\apitrace\gltrace.conf` on Windows Here's an example `gltrace.conf` config file showing some variables: # comment line GL_VERSION = "2.0" GL_VENDOR = "Acme, Inc." GL_EXTENSIONS = "GL_EXT_texture_swizzle GL_ARB_multitexture" GL_RENDERER = "Acme rasterizer" GL_SHADING_LANGUAGE_VERSION = "1.30" GL_MAX_TEXTURE_SIZE = 1024 This basically overrides the respective `glGetString()` and `glGetIntegerv()` parameters. String values are contained inside `""` pairs and may span multiple lines. Integer values are given without quotes. ## Dump OpenGL state at a particular call ## You can get a dump of the bound OpenGL state at call 12345 by doing: apitrace replay -D 12345 application.trace > 12345.json This is precisely the mechanism the GUI uses to obtain its own state. You can compare two state dumps by doing: apitrace diff-state 12345.json 67890.json ## Comparing two traces side by side ## apitrace diff trace1.trace trace2.trace This works only on Unices, and it will truncate the traces due to performance limitations. ## Recording a video with FFmpeg/Libav ## You can make a video of the output with FFmpeg by doing apitrace dump-images -o - application.trace \ | ffmpeg -r 30 -f image2pipe -vcodec ppm -i pipe: -vcodec mpeg4 -y output.mp4 or Libav (which replaces FFmpeg on recent Debian/Ubuntu distros) doing apitrace dump-images -o - application.trace \ | avconv -r 30 -f image2pipe -vcodec ppm -i - -vcodec mpeg4 -y output.mp4 ## Recording a video with gstreamer ## You can make a video of the output with gstreamer by doing glretrace --snapshot-format=RGB -s - smokinguns.trace | gst-launch-0.10 fdsrc blocksize=409600 ! queue \ ! videoparse format=rgb width=1920 height=1080 ! queue ! ffmpegcolorspace ! queue \ ! vaapiupload direct-rendering=0 ! queue ! vaapiencodeh264 ! filesink location=xxx.264 ## Trimming a trace ## You can truncate a trace by doing: apitrace trim --exact --calls 0-12345 -o trimed.trace application.trace If you need precise control over which calls to trim you can specify the individual call numbers in a plain text file, as described in the 'Call sets' section above. There is also experimental support for automatically trimming the calls necessary for a given frame or call: apitrace trim --auto --calls=12345 -o trimed.trace application.trace apitrace trim --auto --frames=12345 -o trimed.trace application.trace ## Profiling a trace ## You can perform gpu and cpu profiling with the command line options: * `--pgpu` record gpu times for frames and draw calls. * `--pcpu` record cpu times for frames and draw calls. * `--ppd` record pixels drawn for each draw call. The results from these can then be read by hand or analyzed with a script. `scripts/profileshader.py` will read the profile results and format them into a table which displays profiling results per shader. For example, to record all profiling data and utilise the per shader script: apitrace replay --pgpu --pcpu --ppd foo.trace | ./scripts/profileshader.py # Advanced usage for OpenGL implementers # There are several advanced usage examples meant for OpenGL implementors. ## Regression testing ## These are the steps to create a regression test-suite around **apitrace**: * obtain a trace * obtain reference snapshots, by doing on a reference system: mkdir /path/to/reference/snapshots/ apitrace dump-images -o /path/to/reference/snapshots/ application.trace * prune the snapshots which are not interesting * to do a regression test, use `apitrace diff-images`: apitrace dump-images -o /path/to/test/snapshots/ application.trace apitrace diff-images --output summary.html /path/to/reference/snapshots/ /path/to/test/snapshots/ ## Automated git-bisection ## With tracecheck.py it is possible to automate git bisect and pinpoint the commit responsible for a regression. Below is an example of using tracecheck.py to bisect a regression in the Mesa-based Intel 965 driver. But the procedure could be applied to any OpenGL driver hosted on a git repository. First, create a build script, named build-script.sh, containing: #!/bin/sh set -e export PATH=/usr/lib/ccache:$PATH export CFLAGS='-g' export CXXFLAGS='-g' ./autogen.sh --disable-egl --disable-gallium --disable-glut --disable-glu --disable-glw --with-dri-drivers=i965 make clean make "$@" It is important that builds are both robust, and efficient. Due to broken dependency discovery in Mesa's makefile system, it was necessary to invoke `make clean` in every iteration step. `ccache` should be installed to avoid recompiling unchanged source files. Then do: cd /path/to/mesa export LIBGL_DEBUG=verbose export LD_LIBRARY_PATH=$PWD/lib export LIBGL_DRIVERS_DIR=$PWD/lib git bisect start \ 6491e9593d5cbc5644eb02593a2f562447efdcbb 71acbb54f49089b03d3498b6f88c1681d3f649ac \ -- src/mesa/drivers/dri/intel src/mesa/drivers/dri/i965/ git bisect run /path/to/tracecheck.py \ --precision-threshold 8.0 \ --build /path/to/build-script.sh \ --gl-renderer '.*Mesa.*Intel.*' \ --retrace=/path/to/glretrace \ -c /path/to/reference/snapshots/ \ topogun-1.06-orc-84k.trace The trace-check.py script will skip automatically when there are build failures. The `--gl-renderer` option will also cause a commit to be skipped if the `GL_RENDERER` is unexpected (e.g., when a software renderer or another OpenGL driver is unintentionally loaded due to a missing symbol in the DRI driver, or another runtime fault). ## Side by side retracing ## In order to determine which draw call a regression first manifests one could generate snapshots for every draw call, using the `-S` option. That is, however, very inefficient for big traces with many draw calls. A faster approach is to run both the bad and a good OpenGL driver side-by-side. The latter can be either a previously known good build of the OpenGL driver, or a reference software renderer. This can be achieved with retracediff.py script, which invokes glretrace with different environments, allowing to choose the desired OpenGL driver by manipulating variables such as `LD_LIBRARY_PATH`, `LIBGL_DRIVERS_DIR`, or `TRACE_LIBGL`. For example, on Linux: ./scripts/retracediff.py \ --ref-env LD_LIBRARY_PATH=/path/to/reference/OpenGL/implementation \ --retrace /path/to/glretrace \ --diff-prefix=/path/to/output/diffs \ application.trace Or on Windows: python scripts\retracediff.py --retrace \path\to\glretrace.exe --ref-env TRACE_LIBGL=\path\to\reference\opengl32.dll application.trace # Advanced GUI usage # qapitrace has rudimentary support for replaying traces on a remote target device. This can be useful, for example, when developing for an embedded system. The primary GUI will run on the local host, while any replays will be performed on the target device. In order to target a remote device, use the command-line: qapitrace --remote-target In order for this to work, the following must be available in the system configuration: 1. It must be possible for the current user to initiate an ssh session that has access to the target's window system. The command to be exectuted by qapitrace will be: ssh glretrace For example, if the target device is using the X window system, one can test whether an ssh session has access to the target X server with: ssh xdpyinfo If this command fails with something like "cannot open display" then the user will have to configure the target to set the DISPLAY environment variable, (for example, setting DISPLAY=:0 in the .bashrc file on the target or similar). Also, note that if the ssh session requires a custom username, then this must be configured on the host side so that ssh can be initiated without a username. For example, if you normally connect with `ssh user@192.168.0.2` you could configure ~/.ssh/config on the host with a block such as: Host target HostName 192.168.0.2 User user And after this you should be able to connect with `ssh target` so that you can also use `qapitrace --remote-target target`. 2. The target host must have a functional glretrace binary available 3. The target host must have access to at the same path in the filesystem as the path on the host system being passed to the qapitrace command line. tmpNnpnZF/docs/FORMAT.markdown0000664000175000017500000001132512543167424015452 0ustar chrischris# Trace binary format specification # This document specifies the binary format of trace streams. Trace streams are not written verbatim to file, but compressed, nowadays with snappy (see `common/trace_file_snappy.cpp` for details). Previously they used to be compressed with gzip. ## Versions ## We keep backwards compatability reading old traces, i.e., it should always be possible to parse and retrace old trace files. The trace version number refers not only to changes in the binary format representation, but also semantic changes in the way certain functions should be retraced. | `version_no` | Changes | | ------------ | ------- | | 0 | initial implementation | | 1 | support for OpenGL user arrays as blobs (whereas before calls that operated with user memory instead of VBOs should be ignored) | | 2 | malloc/free memory calls | | 3 | enums signatures with the whole set of name/value pairs | | 4 | call enter events include thread no | | 5 | support for call backtraces | Writing/editing old traces is not supported however. An older version of apitrace should be used in such circunstances. ## Basic types ## | Type | Description | | ---- | ----------- | | `byte` | Raw byte. | | `uint` | Variable-length unsigned integer, where the most significative bit is zero for last byte or non-zero if more bytes follow; the 7 least significant bits of each byte are used for the integer's bits, in little-endian order. | | `float` | 32 bits single precision floating point number | | `double` | 64 bits single precision floating point number | Strings are length-prefixed. The trailing zero is implied, not appearing neither in the length prefix nor in the raw bytes. string = count byte* count = uint ## Grammar ## The trace consists of a small header with version information, followed by an arbitrary number of events. trace = version_no event* version_no = uint ### Calls ### Calls consist of an enter and leave event pair. Calls are numbered from zero, and the call number is implied for the enter event. event = 0x00 thread_no call_sig call_detail+ // enter call (version_no >= 4) | 0x00 call_sig call_detail+ // enter call (version_no < 4) | 0x01 call_no call_detail+ // leave call call_sig = id function_name count arg_name* // first occurrence | id // follow-on occurrences call_detail = 0x00 // terminator | 0x01 arg_no value // argument value | 0x02 value // return value | 0x03 thread_no // thread number (version_no < 4) | 0x04 count frame* // stack backtrace arg_name = string function_name = string arg_no = uint call_no = uint thread_no = uint id = uint ### Values ### value = 0x00 // null pointer | 0x01 // false value | 0x02 // true | 0x03 uint // negative integer | 0x04 uint // positive integer value | 0x05 float // single-precision floating point value | 0x06 double // double-precision floating point value | 0x07 string // character string value (zero terminator implied) | 0x08 string // binary blob | 0x09 enum_sig value // enumeration (version_no >= 3) | 0x09 string value // enumeration (version_no < 3) | 0x0a bitmask_sig value // integer bitmask | 0x0b count value* // array | 0x0c struct_sig value* // structure | 0x0d uint // opaque pointer | 0x0e value value // human-machine representation | 0x0f wstring // wide character string value (zero terminator implied) enum_sig = id count (name value)+ // first occurrence | id // follow-on occurrences bitmask_sig = id count (name value)+ // first occurrence | id // follow-on occurrences struct_sig = id count member_name* // first occurrence | id // follow-on occurrences name = string member_name = string wstring = count uint* ### Backtraces ### frame = id frame_detail+ // first occurrence | id // follow-on occurrences frame_detail = 0x00 // terminator | 0x01 string // module name | 0x02 string // function name | 0x03 string // source file name | 0x04 uint // source line number | 0x05 uint // byte offset from module start tmpNnpnZF/docs/HACKING.markdown0000664000175000017500000001772012543167424015533 0ustar chrischris# Overview # Although focus was and still is on graphical APIs, apitrace has a generic infrastructure to trace any kind of API: * the API's types and calls are specified in Python files in specs sub-directory; * there is a type hierarchy in `specs/stdapi.py`, capable of representing most types in C language, and additional semantic metadata * Python scripts generate C++ code to trace and serialize calls parameters to a file, and vice-versa. * The _Visitor_ design pattern is used to navigate over the types. * The _Template_ design pattern is used to enable any step of code generation to be overriden by derived classes, allowing to handle cases that need special treatment without sacrifycing code reuse. apitrace's architecture is composed of several layers/components. There are too many to show in a single graph, so only those relevant for OpenGL API are illustrated below: specs ^ | glproc ^ ^ ^ | | | /------/ | \--\ | | | helpers | | ^ ^ ^ | | | | | | | /--------/ | \----\ | | | | | | | | | | | | trace retrace glstate glws ^ ^ ^ ^ | | | | | \-----\ | /---/ | | | | | | | | gltrace glretrace ^ ^ ^ ^ | | | | /------/ | \-----\ | | | | | | | | | glxtrace wgltrace cgltrace qapitrace Here is a quick synopsis of what the layers do: * `specs` -- specifies the types, functions, and interfaces of the API, expressed as a hierarchy of Python objects * `dispatch` -- runtime dispatch of calls to DLLs (open the DLL, get the symbol address, and call it passing all arguments as-is) * `glproc` -- specialization of the dispatch generation for GL APIs * `helpers` -- helper functions to determine sizes of arrays, blobs, etc. It often needs to dispatch calls to give the answers. * `trace` -- generate C++ code for tracing an API based on its spec * `gltrace` -- specialization of the tracing generation for GL API, with extra code to generate * `glxtrace`,` wgltrace`, `cgltrace` -- specialization of the tracing code for the GLX, WGL, and CGL APIs. * `retrace` -- generate C++ code to interpret calls from trace, based on the API's spec * `glretrace` -- specialization of the retrace code for the GL API * `glstate` -- code to dump OpenGL state to a JSON file * `glws` -- abstraction of the window system specific APIs (GXL, WGL, CGL), to enable cross-platform portability of `glretrace` * `qapitrace` -- the GUI; it reads traces directly, and gets JSON state by invoking `glretrace` The architecture for Direct3D APIs is similar, with the exception that, because it's not cross platform, there are less specialized variations. # Coding Style # These are guidelines for new code. Admittedly some of the existing code hasn't been updated to follow these conventions yet. Whitespace (all languages): * indentation is 4 spaces * never use tabs as indents, except on Makefiles * otherwise tab equals to 8 spaces * separate classes with two empty lines Naming convention: * `camelCase` for functions/methods * `UpperCase` for structures/classes * `lowercase` for namespaces/modules * `UPPER_CASE` for #defines * single underscore prefix for variables/functions in automatically generated code C++: * enclose single statement `if` clauses in `{` `}`, specially for automatically generated code * `} else {` * use `inline` keyword for functions/methods which are called with high-frequency CMake: * `lower_case` commands * space between `(` and precedent name And when in doubt, be consistent with the existing code. # Commit policy # Feature development: * Existing features in master branch should not degrade at any time, for any platform. Unless they are seldom used or redundant, and there is agreement. * In particular, new features / changes must not introduce any sort of instability when tracing. While application developers and driver developers may be able to workaround quirks in apitrace, we want to be able to obtain traces from non-technical end-users with minimal intervention. This implies that tracing should not make any non-standard assumptions, and care must be taken to ensure the tracing code is robust against invalid parameters, multiple threads, etc. * It's fine to add new features for only some platforms or APIs. * Non-trivial changes should be staged in a branch, to allow review and regression testing. Feature branches should be deleted once they have been merged. * Releases are tagged commits from master. There are no stable branches. Backwards compatibility: * Backwards binary compatibility with old traces must be always maintained: all tools, including `glretrace`, must handle old traces without regressions. * No backwards compatibility guarantees for derived data (ASCII dumps, state, images, etc). * There should be no gratuitous changes to command line tool interfaces, but no guarantees are given. # Regression testing # There is a regression test suite under development in https://github.com/apitrace/apitrace-tests . # Further reading # * [Intercepting and Instrumenting COM Applications](https://www.usenix.org/legacy/events/coots99/full_papers/hunt/hunt_html) * [Proxy-Dll: Intercept Calls to DirectX](http://www.mikoweb.eu/index.php?node=21) # How to's # ## How to support a new OpenGL extension ## All OpenGL (and OpenGL ES) function prototypes live in `specs/glapi.py`. This file is semi-automatically derived from Khronos XML description of OpenGL / OpenGL ES. To refresh do $ make -C specs/scripts/ glapi.py $ meld specs/glapi.py specs/scripts/glapi.py and then port over new prototypes. See also `specs/scripts/README.markdown`. The upstream XML description is not rich enough to describe all semantic details that apitrace needs, therefore one needs to manually tweak the specifications: * Fix-up the types of array, blob, and pointer arguments. * For `glGet*` you can use `"_gl_param_size(pname)"` for automatically determining the number of parameters written, e.g. GlFunction(Void, "glGetIntegerv", [(GLenum, "pname"), Out(Array(GLint, "_gl_param_size(pname)"), "params")], sideeffects=False), * Add the `sideeffects=False` keyword argument where appropriate, so that those calls can be merely ignored by `glretrace`. * Replace generically type `GLuint` object IDs with typed ones, (e.g., replace `(GLuint, "texture")` into `(GLtexture, "texture")`, so that `glretrace` can swizzle the objects IDs, when replaying on a different OpenGL implementation. ## Dump more OpenGL state ## TBD. ## Dump more D3D10/D3D11 parameter state ## In short, to dump another piece of state (e.g., `D3DXX_FOO_STATE`) you need to: * declare a void dumpStateObject(JSONWriter &, const D3DXX_FOO_STATE &); in `retrace/dxgistate_so.hpp` * add d3dxx.D3DXX_FOO_STATE, to the bottom of `retrace/dxgistate_so.py` so that C++ code to dump that structure is generated. * add a new `dumpFooState` function to `retrace/d3d10state.cpp` or `retrace/d3d11state.cpp`, similar to the existing `dumpBlendState` function, which gets the state object, and then calls `dumpStateObjectDesc` template and the generated `dumpStateObject` functions to do the grunt work. * update `dumpParameters` to call `dumpFooState` tmpNnpnZF/docs/TODO.markdown0000664000175000017500000000011512543167424015222 0ustar chrischrisContent moved to the [wiki](https://github.com/apitrace/apitrace/wiki/ToDo). tmpNnpnZF/image/0000775000175000017500000000000012543167424013046 5ustar chrischristmpNnpnZF/image/image_md5.cpp0000664000175000017500000000410412543167424015400 0ustar chrischris/************************************************************************** * * Copyright (C) 2013 Intel Corporation. All rights reversed. * Author: Meng Mengmeng * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "image.hpp" #include "md5.h" using namespace std; namespace image { void Image::writeMD5(std::ostream &os) const { struct MD5Context md5c; MD5Init(&md5c); const unsigned char *row; unsigned len = width*bytesPerPixel; for (row = start(); row != end(); row += stride()) { MD5Update(&md5c, (unsigned char *)row, len); } unsigned char signature[16]; MD5Final(signature, &md5c); const char hex[] = "0123456789ABCDEF"; char csig[33]; for(int i = 0; i < sizeof signature; i++){ csig[2*i ] = hex[signature[i] >> 4]; csig[2*i + 1] = hex[signature[i] & 0xf]; } csig[32] = '\0'; os << csig; os << "\n"; } } /* namespace image */ tmpNnpnZF/image/image_bmp.cpp0000664000175000017500000000746712543167424015510 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "image.hpp" namespace image { #pragma pack(push,2) struct FileHeader { uint16_t bfType; uint32_t bfSize; uint16_t bfReserved1; uint16_t bfReserved2; uint32_t bfOffBits; }; #pragma pack(pop) struct InfoHeader { uint32_t biSize; int32_t biWidth; int32_t biHeight; uint16_t biPlanes; uint16_t biBitCount; uint32_t biCompression; uint32_t biSizeImage; int32_t biXPelsPerMeter; int32_t biYPelsPerMeter; uint32_t biClrUsed; uint32_t biClrImportant; }; struct Pixel { uint8_t rgbBlue; uint8_t rgbGreen; uint8_t rgbRed; uint8_t rgbAlpha; }; bool Image::writeBMP(const char *filename) const { assert(channels == 4); assert(channelType == TYPE_UNORM8); struct FileHeader bmfh; struct InfoHeader bmih; unsigned x, y; bmfh.bfType = 0x4d42; bmfh.bfSize = 14 + 40 + height*width*4; bmfh.bfReserved1 = 0; bmfh.bfReserved2 = 0; bmfh.bfOffBits = 14 + 40; bmih.biSize = 40; bmih.biWidth = width; bmih.biHeight = height; bmih.biPlanes = 1; bmih.biBitCount = 32; bmih.biCompression = 0; bmih.biSizeImage = height*width*4; bmih.biXPelsPerMeter = 0; bmih.biYPelsPerMeter = 0; bmih.biClrUsed = 0; bmih.biClrImportant = 0; std::ofstream stream(filename, std::ofstream::binary); if (!stream) { return false; } stream.write((const char *)&bmfh, 14); stream.write((const char *)&bmih, 40); unsigned stride = width*4; if (flipped) { for (y = 0; y < height; ++y) { const unsigned char *ptr = pixels + y * stride; for (x = 0; x < width; ++x) { struct Pixel pixel; pixel.rgbRed = ptr[x*4 + 0]; pixel.rgbGreen = ptr[x*4 + 1]; pixel.rgbBlue = ptr[x*4 + 2]; pixel.rgbAlpha = ptr[x*4 + 3]; stream.write((const char *)&pixel, 4); } } } else { y = height; while (y--) { const unsigned char *ptr = pixels + y * stride; for (x = 0; x < width; ++x) { struct Pixel pixel; pixel.rgbRed = ptr[x*4 + 0]; pixel.rgbGreen = ptr[x*4 + 1]; pixel.rgbBlue = ptr[x*4 + 2]; pixel.rgbAlpha = ptr[x*4 + 3]; stream.write((const char *)&pixel, 4); } } } stream.close(); return true; } } /* namespace image */ tmpNnpnZF/image/README.markdown0000664000175000017500000000012712543167424015547 0ustar chrischrisThis directory contains a class to represent and manipulate images, in memory or disk. tmpNnpnZF/image/CMakeLists.txt0000664000175000017500000000040712543167424015607 0ustar chrischrisinclude_directories ( ${PNG_INCLUDE_DIR} ${MD5_INCLUDE_DIR} ) add_library (image STATIC image_bmp.cpp image_png.cpp image_pnm.cpp image_raw.cpp image_md5.cpp ) target_link_libraries (image ${PNG_LIBRARIES} ${MD5_LIBRARIES} ) tmpNnpnZF/image/image_pnm.cpp0000664000175000017500000002254412543167424015515 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include #include "image.hpp" namespace image { /** * http://en.wikipedia.org/wiki/Netpbm_format * http://netpbm.sourceforge.net/doc/ppm.html * http://netpbm.sourceforge.net/doc/pfm.html */ void Image::writePNM(std::ostream &os, const char *comment) const { const char *identifier; unsigned outChannels; switch (channelType) { case TYPE_UNORM8: if (channels == 1) { identifier = "P5"; outChannels = 1; } else { identifier = "P6"; outChannels = 3; } break; case TYPE_FLOAT: if (channels == 1) { identifier = "Pf"; outChannels = 1; } else if (channels <= 3) { identifier = "PF"; outChannels = 3; } else { // Non-standard extension for 4 floats identifier = "PX"; outChannels = 4; } break; default: assert(0); return; } os << identifier << "\n"; if (comment) { os << "#" << comment << "\n"; } os << width << " " << height << "\n"; if (channelType == TYPE_UNORM8) { os << "255" << "\n"; } else { os << "1" << "\n"; } const unsigned char *row; if (channels == outChannels) { /* * Write whole pixel spans straight from the image buffer. */ for (row = start(); row != end(); row += stride()) { os.write((const char *)row, width*bytesPerPixel); } } else { /* * Need to add/remove channels, one pixel at a time. */ unsigned char *tmp = new unsigned char[width*outChannels*bytesPerChannel]; if (channelType == TYPE_UNORM8) { /* * Optimized path for 8bit unorms. */ if (channels == 4) { for (row = start(); row != end(); row += stride()) { const uint32_t *src = (const uint32_t *)row; uint32_t *dst = (uint32_t *)tmp; unsigned x; for (x = 0; x + 4 <= width; x += 4) { /* * It's much faster to access dwords than bytes. * * FIXME: Big-endian version. */ uint32_t rgba0 = *src++ & 0xffffff; uint32_t rgba1 = *src++ & 0xffffff; uint32_t rgba2 = *src++ & 0xffffff; uint32_t rgba3 = *src++ & 0xffffff; uint32_t rgb0 = rgba0 | (rgba1 << 24); uint32_t rgb1 = (rgba1 >> 8) | (rgba2 << 16); uint32_t rgb2 = (rgba2 >> 16) | (rgba3 << 8); *dst++ = rgb0; *dst++ = rgb1; *dst++ = rgb2; } for (; x < width; ++x) { tmp[x*3 + 0] = row[x*4 + 0]; tmp[x*3 + 1] = row[x*4 + 1]; tmp[x*3 + 2] = row[x*4 + 2]; } os.write((const char *)tmp, width*3); } } else if (channels == 2) { for (row = start(); row != end(); row += stride()) { const unsigned char *src = row; unsigned char *dst = tmp; for (unsigned x = 0; x < width; ++x) { *dst++ = *src++; *dst++ = *src++; *dst++ = 0; } os.write((const char *)tmp, width*3); } } else { assert(0); } } else { /* * General path for float images. */ unsigned copyChannels = std::min(channels, outChannels); assert(channelType == TYPE_FLOAT); for (row = start(); row != end(); row += stride()) { const float *src = (const float *)row; float *dst = (float *)tmp; for (unsigned x = 0; x < width; ++x) { unsigned channel = 0; for (; channel < copyChannels; ++channel) { *dst++ = *src++; } for (; channel < outChannels; ++channel) { *dst++ = 0; } } os.write((const char *)tmp, width*outChannels*bytesPerChannel); } } delete [] tmp; } } bool Image::writePNM(const char *filename, const char *comment) const { std::ofstream os(filename, std::ofstream::binary); if (!os) { return false; } writePNM(os, comment); return true; } /** * Parse PNM header. * * Returns pointer to data start, or NULL on failure. */ const char * readPNMHeader(const char *buffer, size_t bufferSize, PNMInfo &info) { info.channels = 0; info.width = 0; info.height = 0; info.commentNumber = -1; const char *currentBuffer = buffer; const char *nextBuffer; // parse number of channels char c; int scannedChannels = sscanf(currentBuffer, "P%c\n", &c); if (scannedChannels != 1) { // validate scanning of channels // invalid channel line return NULL; } // convert channel token to number of channels switch (c) { case '5': info.channels = 1; info.channelType = TYPE_UNORM8; break; case '6': info.channels = 3; info.channelType = TYPE_UNORM8; break; case 'f': info.channels = 1; info.channelType = TYPE_FLOAT; break; case 'F': info.channels = 3; info.channelType = TYPE_FLOAT; break; case 'X': info.channels = 4; info.channelType = TYPE_FLOAT; break; default: return NULL; } // advance past channel line nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1; bufferSize -= nextBuffer - currentBuffer; currentBuffer = nextBuffer; // skip over optional comment if (*currentBuffer == '#') { // advance past '#' currentBuffer += 1; bufferSize += 1; // actually try to read a number sscanf(currentBuffer, "%d", &info.commentNumber); // advance past comment line nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1; bufferSize -= nextBuffer - currentBuffer; currentBuffer = nextBuffer; } // parse dimensions of image int scannedDimensions = sscanf(currentBuffer, "%u %u\n", &info.width, &info.height); if (scannedDimensions != 2) { // validate scanning of dimensions // invalid dimension line return NULL; } // advance past dimension line nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1; bufferSize -= nextBuffer - currentBuffer; currentBuffer = nextBuffer; // skip scale factor / endianness line nextBuffer = (const char *) memchr((const void *) currentBuffer, '\n', bufferSize) + 1; // return start of image data return nextBuffer; } Image * readPNM(const char *buffer, size_t bufferSize) { PNMInfo info; const char *headerEnd = readPNMHeader(buffer, bufferSize, info); // if invalid PNM header was encountered, ... if (headerEnd == NULL) { std::cerr << "error: invalid PNM header"; return NULL; } Image *image = new Image(info.width, info.height, info.channels, false, info.channelType); size_t rowBytes = info.width * image->bytesPerPixel; for (unsigned char *row = image->start(); row != image->end(); row += image->stride()) { memcpy(row, headerEnd, rowBytes); headerEnd += rowBytes; } return image; } } /* namespace image */ tmpNnpnZF/image/image_png.cpp0000664000175000017500000001621012543167424015500 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2008-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include #include #include "image.hpp" namespace image { static const int png_compression_level = Z_BEST_SPEED; static void pngWriteCallback(png_structp png_ptr, png_bytep data, png_size_t length) { std::ostream *os = (std::ostream *) png_get_io_ptr(png_ptr); os->write((const char *)data, length); } static inline uint8_t floatToUnorm8(float c) { if (c <= 0.0f) { return 0; } if (c >= 1.0f) { return 255; } return c * 255.0f + 0.5f; } static inline uint8_t floatToSRGB(float c) { if (c <= 0.0f) { return 0; } if (c >= 1.0f) { return 255; } if (c <= 0.0031308f) { c *= 12.92f; } else { c = 1.055f * powf(c, 1.0f/2.4f) - 0.055f; } return c * 255.0f + 0.5f; } bool Image::writePNG(std::ostream &os, bool strip_alpha) const { png_structp png_ptr; png_infop info_ptr; int color_type; switch (channels) { case 4: color_type = strip_alpha ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGB_ALPHA; break; case 3: color_type = PNG_COLOR_TYPE_RGB; break; case 2: color_type = PNG_COLOR_TYPE_GRAY_ALPHA; break; case 1: color_type = PNG_COLOR_TYPE_GRAY; break; default: assert(0); goto no_png; } png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) goto no_png; info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, NULL); goto no_png; } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); goto no_png; } png_set_write_fn(png_ptr, &os, pngWriteCallback, NULL); png_set_IHDR(png_ptr, info_ptr, width, height, 8, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_set_compression_level(png_ptr, png_compression_level); png_write_info(png_ptr, info_ptr); if (channels == 4 && strip_alpha) { png_set_filler(png_ptr, 0, PNG_FILLER_AFTER); } switch (channelType) { case TYPE_UNORM8: for (const unsigned char *row = start(); row != end(); row += stride()) { png_write_rows(png_ptr, (png_bytepp) &row, 1); } break; case TYPE_FLOAT: png_bytep rowUnorm8 = new png_byte[width * channels]; for (const unsigned char *row = start(); row != end(); row += stride()) { const float *rowFloat = (const float *)row; for (unsigned x = 0, i = 0; x < width; ++x) { for (unsigned channel = 0; channel < channels; ++channel, ++i) { float c = rowFloat[i]; bool srgb = channels >= 3 && channel < 3; rowUnorm8[i] = srgb ? floatToSRGB(c) : floatToUnorm8(c); } } png_write_rows(png_ptr, (png_bytepp) &rowUnorm8, 1); } delete [] rowUnorm8; break; } png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); return true; no_png: return false; } bool Image::writePNG(const char *filename, bool strip_alpha) const { std::ofstream os(filename, std::ofstream::binary); if (!os) { return false; } return writePNG(os, strip_alpha); } static void pngReadCallback(png_structp png_ptr, png_bytep data, png_size_t length) { std::istream *os = (std::istream *) png_get_io_ptr(png_ptr); os->read((char *)data, length); } Image * readPNG(std::istream &is) { png_structp png_ptr; png_infop info_ptr; png_infop end_info; unsigned channels; Image *image; png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) goto no_png; info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, NULL, NULL); goto no_png; } end_info = png_create_info_struct(png_ptr); if (!end_info) { png_destroy_read_struct(&png_ptr, &info_ptr, NULL); goto no_png; } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); goto no_png; } png_set_read_fn(png_ptr, &is, pngReadCallback); png_read_info(png_ptr, info_ptr); png_uint_32 width, height; int bit_depth, color_type, interlace_type, compression_type, filter_method; png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, &compression_type, &filter_method); /* Convert to RGBA8 */ if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr); if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); if (bit_depth == 16) png_set_strip_16(png_ptr); channels = png_get_channels(png_ptr, info_ptr); image = new Image(width, height, channels); if (!image) goto no_image; assert(png_get_rowbytes(png_ptr, info_ptr) == width*channels); for (unsigned y = 0; y < height; ++y) { png_bytep row = (png_bytep)(image->pixels + y*width*channels); png_read_row(png_ptr, row, NULL); } png_read_end(png_ptr, info_ptr); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return image; no_image: png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); no_png: return NULL; } Image * readPNG(const char *filename) { std::ifstream is(filename, std::ifstream::binary); if (!is) { return NULL; } return readPNG(filename); } } /* namespace image */ tmpNnpnZF/image/image.hpp0000664000175000017500000000727112543167424014650 0ustar chrischris/************************************************************************** * * Copyright 2008-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Image I/O. */ #pragma once #include #include namespace image { enum ChannelType { TYPE_UNORM8 = 0, TYPE_FLOAT }; class Image { public: unsigned width; unsigned height; unsigned channels; ChannelType channelType; unsigned bytesPerChannel; unsigned bytesPerPixel; // Flipped vertically or not bool flipped; // Pixels in RGBA format unsigned char *pixels; std::string label; inline Image(unsigned w, unsigned h, unsigned c = 4, bool f = false, ChannelType t = TYPE_UNORM8) : width(w), height(h), channels(c), channelType(t), bytesPerChannel(t == TYPE_FLOAT ? 4 : 1), bytesPerPixel(channels * bytesPerChannel), flipped(f), pixels(new unsigned char[h*w*bytesPerPixel]) {} inline ~Image() { delete [] pixels; } // Absolute stride inline unsigned _stride() const { return width*bytesPerPixel; } inline unsigned char *start(void) { return flipped ? pixels + (height - 1)*_stride() : pixels; } inline const unsigned char *start(void) const { return flipped ? pixels + (height - 1)*_stride() : pixels; } inline unsigned char *end(void) { return flipped ? pixels - _stride() : pixels + height*_stride(); } inline const unsigned char *end(void) const { return flipped ? pixels - _stride() : pixels + height*_stride(); } inline signed stride(void) const { return flipped ? -(signed)_stride() : _stride(); } bool writeBMP(const char *filename) const; void writePNM(std::ostream &os, const char *comment = NULL) const; bool writePNM(const char *filename, const char *comment = NULL) const; void writeMD5(std::ostream &os) const; bool writePNG(std::ostream &os, bool strip_alpha = false) const; bool writePNG(const char *filename, bool strip_alpha = false) const; void writeRAW(std::ostream &os) const; bool writeRAW(const char *filename) const; }; Image * readPNG(std::istream &is); Image * readPNG(const char *filename); struct PNMInfo { unsigned width; unsigned height; unsigned channels; ChannelType channelType; int commentNumber; }; const char * readPNMHeader(const char *buffer, size_t size, PNMInfo &info); Image * readPNM(const char *buffer, size_t bufferSize); } /* namespace image */ tmpNnpnZF/image/image_raw.cpp0000664000175000017500000000365412543167424015515 0ustar chrischris/************************************************************************** * * Copyright (C) 2013 Intel Corporation. All rights reversed. * Author: Shuang He * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include "image.hpp" namespace image { void Image::writeRAW(std::ostream &os) const { assert(channelType == TYPE_UNORM8); const unsigned char *row; for (row = start(); row != end(); row += stride()) { os.write((const char *)row, width*bytesPerPixel); } } bool Image::writeRAW(const char *filename) const { std::ofstream os(filename, std::ofstream::binary); if (!os) { return false; } writeRAW(os); return true; } } /* namespace image */ tmpNnpnZF/.travis.yml0000664000175000017500000000406312543167424014100 0ustar chrischrisbranches: except: - /^appveyor.*$/ language: cpp env: global: - MAKEFLAGS=-j2 matrix: include: - compiler: gcc env: - APT_REPOS="ppa:ubuntu-sdk-team/ppa" - APT_PACKAGES="libdwarf-dev libproc-dev qtbase5-dev qtdeclarative5-dev libqt5webkit5-dev" - CMAKE_OPTIONS="-DENABLE_GUI=1" - compiler: gcc env: - APT_PACKAGES="gcc-multilib g++-multilib" - CMAKE_OPTIONS="-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_SYSTEM_LIBRARY_PATH=/usr/lib32 -DENABLE_GUI=0" - compiler: clang env: - APT_PACKAGES="libdwarf-dev libproc-dev" - CMAKE_OPTIONS="-DENABLE_GUI=0" - compiler: ": mingw32" env: - APT_REPOS="ppa:tobydox/mingw-x-precise" - APT_PACKAGES="mingw32-x-gcc" - MINGW_ROOT=/opt/mingw32 - MINGW_PREFIX=i686-w64-mingw32 - CMAKE_OPTIONS="-DCMAKE_TOOLCHAIN_FILE=Toolchain.cmake -Cdxsdk-master/Cache-mingw32.cmake -DENABLE_GUI=0" before_install: - sudo add-apt-repository -y ppa:kalakris/cmake - for APT_REPO in $APT_REPOS; do sudo add-apt-repository -y $APT_REPO; done - sudo apt-get update -qq - sudo apt-get install -qq -y cmake - if [ "$APT_PACKAGES" ]; then sudo apt-get install -qq -y $APT_PACKAGES; fi - if [ "$MINGW_ROOT" ]; then export PATH=$MINGW_ROOT/bin:$PATH; fi script: - | if [ "$MINGW_PREFIX" ] then echo "set (CMAKE_SYSTEM_NAME Windows)" >> Toolchain.cmake echo "set (CMAKE_C_COMPILER $MINGW_PREFIX-gcc)" >> Toolchain.cmake echo "set (CMAKE_CXX_COMPILER $MINGW_PREFIX-g++)" >> Toolchain.cmake echo "set (CMAKE_RC_COMPILER $MINGW_PREFIX-windres)" >> Toolchain.cmake echo "set (CMAKE_FIND_ROOT_PATH $MINGW_ROOT)" >> Toolchain.cmake echo "set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> Toolchain.cmake echo "set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> Toolchain.cmake echo "set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> Toolchain.cmake wget -q -O - https://github.com/apitrace/dxsdk/archive/master.tar.gz | tar -xz fi - cmake -H. -Bbuild $CMAKE_OPTIONS - cmake --build build --use-stderr -- -k all package # vim: set sw=2 et : tmpNnpnZF/README.markdown0000664000175000017500000000154512543167424014472 0ustar chrischrisAbout **apitrace** ================== **apitrace** consists of a set of tools to: * trace OpenGL, OpenGL ES, Direct3D, and DirectDraw APIs calls to a file; * replay OpenGL and OpenGL ES calls from a file; * inspect OpenGL state at any call while retracing; * visualize and edit trace files. See the [apitrace homepage](http://apitrace.github.io/) for more details. Obtaining **apitrace** ====================== To obtain apitrace either [download the latest binaries](http://apitrace.github.io/#download) for your platform if available, or follow [these instructions](docs/INSTALL.markdown) to build and install it yourself. On 64bits Linux and Windows platforms you'll need apitrace binaries that match the architecture (32bits or 64bits) of the application being traced. Usage ===== Detailed usage instructions are available [here](docs/USAGE.markdown). tmpNnpnZF/CMakeLists.txt0000664000175000017500000005060412543167424014531 0ustar chrischriscmake_minimum_required (VERSION 2.8.11) # Use clang on MacOSX. gcc doesn't support __thread key, and Apple has # abandoned it for clang. This must be done before the project is defined. # But DONT force clang if we are cross-compiling to Android. if (APPLE AND NOT ANDROID_NDK) set (CMAKE_C_COMPILER "clang") set (CMAKE_CXX_COMPILER "clang++") endif () if (CMAKE_GENERATOR STREQUAL "Xcode") message (FATAL_ERROR "Xcode generator is not supported. Please build with \"Unix Makefiles\" or \"Ninja\" generators.") endif () # http://www.cmake.org/cmake/help/v3.0/policy/CMP0042.html if (POLICY CMP0042) cmake_policy (SET CMP0042 NEW) endif() project (apitrace) ############################################################################## # Options # On Mac OS X build fat binaries with i386 and x86_64 architectures by default. if (APPLE AND NOT CMAKE_OSX_ARCHITECTURES) set (CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING "Build architectures for OSX" FORCE) endif () # We use a cached string variable instead of the standard (boolean) OPTION # command so that we can default to auto-detecting optional depencies, while # still providing a mechanism to force/disable these optional dependencies, as # prescribed in http://www.gentoo.org/proj/en/qa/automagic.xml set (ENABLE_GUI "AUTO" CACHE STRING "Enable Qt GUI.") option (ENABLE_CLI "Enable command Line interface." ON) option (ENABLE_EGL "Enable EGL support." ON) option (ENABLE_WAFFLE "Enable WAFFLE support." OFF) option (ENABLE_FRAME_POINTER "Disable frame pointer omission" ON) # Proprietary Linux games often ship their own libraries (zlib, libstdc++, # etc.) in order to ship a single set of binaries across multiple # distributions. Given that apitrace wrapper modules will be loaded into those # processes, they must not depend on any shared object that could also be # provided by such applications. See also # http://lists.freedesktop.org/archives/mesa-dev/2015-March/079121.html if (NOT ANDROID) option (ENABLE_STATIC_SNAPPY "Statically link against snappy" ON) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") option (ENABLE_STATIC_LIBGCC "Statically link LD_PRELOAD wrappers against libgcc" ON) option (ENABLE_STATIC_LIBSTDCXX "Statically link LD_PRELOAD wrappers against libstdc++" ON) if (NOT (ENABLE_STATIC_LIBGCC AND ENABLE_STATIC_LIBSTDCXX AND ENABLE_STATIC_SNAPPY)) # XXX: Should probably throw a run-time too. message (WARNING "LD_PRELOAD wrappers not statically linked against all " "dependencies, therefore will fail to work with many " "third-party applications built on different Linux " "distributions and that ship their own shared-object " "dependencies." ) endif () endif () endif () ############################################################################## # Find dependencies # Check for compiler TLS support. We don't use compiler TLS support on Windows # because, even if the compiler supports it, Windows XP does not support TLS on # DLLs. if (NOT WIN32) include (CheckCXXSourceCompiles) check_cxx_source_compiles ("__thread int i; int main() { return 0; }" HAVE_COMPILER_TLS) if (NOT HAVE_COMPILER_TLS) message (FATAL_ERROR "C++ compiler does not support __thread keyword.") endif () endif () set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include (ConvenienceLibrary) include (InstallPDB) if (ANDROID) set (ENABLE_GUI false) else () macro (find_host_package) find_package (${ARGN}) endmacro() endif () find_host_package (PythonInterp 2.7 REQUIRED) if (NOT PYTHON_VERSION_MAJOR EQUAL 2) message (FATAL_ERROR "Python 2.x required and requested, but Python ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} found.") endif () find_package (Threads) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") find_package (procps) if (PROCPS_FOUND) add_definitions (-DHAVE_READPROC_H) endif () endif () if (ENABLE_GUI) if (NOT (ENABLE_GUI STREQUAL "AUTO")) set (REQUIRE_GUI REQUIRED) endif () if (POLICY CMP0020) cmake_policy (SET CMP0020 NEW) endif() find_package (Qt5Widgets ${REQUIRE_GUI}) find_package (Qt5WebKitWidgets ${REQUIRE_GUI}) endif () if (WIN32) find_package (DirectX) set (ENABLE_EGL false) elseif (APPLE) set (ENABLE_EGL false) else () find_package (X11) if (X11_FOUND) include_directories (${X11_INCLUDE_DIR}) add_definitions (-DHAVE_X11) else () # Print a clear message when X11 is not found include (FindPackageMessage) find_package_message (X11 "Could not find X11" "") endif () endif () if (ENABLE_EGL AND (ANDROID OR ENABLE_WAFFLE)) # if waffle is found eglretrace will be built for Android. find_package (Waffle) endif () ############################################################################## # Set global build options include (CheckCXXCompilerFlag) include (CheckIncludeFileCXX) macro (add_compiler_flags) string (REPLACE ";" " " _FLAGS "${ARGV}") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAGS}") endmacro () macro (add_linker_flags) string (REPLACE ";" " " _FLAGS "${ARGV}") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_FLAGS}") set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_FLAGS}") set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_FLAGS}") endmacro () add_definitions ( -D__STDC_LIMIT_MACROS ) if (WIN32) # http://msdn.microsoft.com/en-us/library/aa383745.aspx if (MINGW OR CMAKE_GENERATOR_TOOLSET MATCHES "_xp$") # Windows XP add_definitions (-D_WIN32_WINNT=0x0501 -DWINVER=0x0501) else () # Windows 7 add_definitions (-D_WIN32_WINNT=0x0601 -DWINVER=0x0601) endif () else (WIN32) CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" CXX_COMPILER_FLAG_VISIBILITY) if (CXX_COMPILER_FLAG_VISIBILITY) add_compiler_flags (-fvisibility=hidden) endif () endif () if (MSVC) if (${MSVC_VERSION} LESS 1800) message (FATAL_ERROR "Visual Studio 2013 or later required") endif () # No RTTI required string (REGEX REPLACE "/GR *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-") # Disable C++ exceptions add_definitions (-D_HAS_EXCEPTIONS=0) string (REGEX REPLACE "/EHsc *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-") # Enable math constants defines add_definitions (-D_USE_MATH_DEFINES) # No min/max macros add_definitions (-DNOMINMAX) # Adjust warnings add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS) add_compiler_flags (-W3) # XXX: it's safer to use ssize_t everywhere instead of disabling warning add_compiler_flags (-wd4018) # signed/unsigned mismatch add_compiler_flags (-wd4063) # not a valid value for switch of enum add_compiler_flags (-wd4100) # unreferenced formal parameter add_compiler_flags (-wd4127) # conditional expression is constant add_compiler_flags (-wd4244) # conversion from 'type1' to 'type2', possible loss of data add_compiler_flags (-wd4267) # conversion from 'type1' to 'type2', possible loss of data add_compiler_flags (-wd4505) # unreferenced local function has been removed add_compiler_flags (-wd4512) # assignment operator could not be generated add_compiler_flags (-wd4800) # forcing value to bool 'true' or 'false' (performance warning) # Use static runtime # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO ) if (${flag_var} MATCHES "/MD") string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif () endforeach (flag_var) else () # Enable and require C++11 # # We must use `-std=gnu++11` instead `-std=c++11` as the latter defines # __STRICT_ANSI__ which prevents _isnan from being declared with MinGW. # # See also: # - https://gcc.gnu.org/projects/cxx0x.html # - http://clang.llvm.org/cxx_status.html check_cxx_compiler_flag ("-std=gnu++11" CXX_COMPILER_FLAG_STD_GNUXX11) if (CXX_COMPILER_FLAG_STD_GNUXX11) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") check_cxx_compiler_flag ("-std=gnu++0x" CXX_COMPILER_FLAG_STD_GNUXX0X) if (NOT CXX_COMPILER_FLAG_STD_GNUXX0X OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.6") message (FATAL_ERROR "GCC 4.6 or later required for adequate C++11 support") else () set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") endif () else () message (FATAL_ERROR "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} compiler does not support C++11") endif () # Adjust warnings add_compiler_flags (-Wall) # XXX: it's safer to use ssize_t everywhere instead of disabling warning add_compiler_flags (-Wno-sign-compare) # comparison between signed and unsigned integer expressions # Disable strict aliasing assumptions. We generate a lot of C++ code, and # it's not always easy to guarantee or spot when strict aliasing # assumptions are violated. Above all, the benefit is not worth the risk. add_compiler_flags (-fno-strict-aliasing) # No RTTI required # XXX: there's a dynamic_cast in Android if (NOT ANDROID) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") endif () # Disable C++ exceptions #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") # Enable stack protection if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX) set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fstack-protector-all") set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fstack-protector-all") if (MINGW) # MinGW doesn't link against libssp automatically, and furthermore # we want static linking. set (SSP_LIBRARY "-Wl,-Bstatic -lssp -Wl,-Bdynamic") set (CMAKE_C_STANDARD_LIBRARIES "${SSP_LIBRARY} ${CMAKE_C_STANDARD_LIBRARIES}") set (CMAKE_CXX_STANDARD_LIBRARIES "${SSP_LIBRARY} ${CMAKE_CXX_STANDARD_LIBRARIES}") endif () endif () # Enable SSE2 intrinsics on x86 if (CMAKE_SIZEOF_VOID_P EQUAL 4) check_cxx_compiler_flag ("-msse2" CXX_COMPILER_FLAG_MSSE2) if (CXX_COMPILER_FLAG_MSSE2) add_compiler_flags (-msse2 -mfpmath=sse) # And tell GCC to assume 4 bytes alignment, many Linux/Windows # applications only guarantee that, but not on systems where ABI # clearly states otherwise. # # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496 if (NOT ANDROID) check_cxx_compiler_flag (-mincoming-stack-boundary=2 CXX_COMPILER_FLAG_MINCOMING_STACK_BOUNDARY) if (CXX_COMPILER_FLAG_MINCOMING_STACK_BOUNDARY) add_compiler_flags (-mincoming-stack-boundary=2) endif () endif () endif () endif () # Be nice to Eclipse add_compiler_flags (-fmessage-length=0) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL Clang AND CMAKE_BUILD_TYPE MATCHES Rel) message (WARNING "\n" " WARNING: NON-DEBUG BUILDS ON CLANG CAN TAKE UP TO 45MIN!\n" " See https://github.com/apitrace/apitrace/issues/346\n" "" ) execute_process (COMMAND ${CMAKE_COMMAND} -E sleep 5) endif () if (MINGW) # Avoid depending on MinGW runtime DLLs add_linker_flags (-static-libgcc -static-libstdc++) endif () if (ENABLE_FRAME_POINTER) # disable frame pointer omission if (MSVC) add_compiler_flags (/Oy-) else () add_compiler_flags (-fno-omit-frame-pointer) endif () endif () # Enable Data Execution Prevention and Address Space Layout Randomization if (WIN32) if (MSVC) add_linker_flags (/NXCOMPAT /DYNAMICBASE) else () add_linker_flags (-Wl,--nxcompat -Wl,--dynamicbase) endif () endif () if (CMAKE_SYSTEM_NAME STREQUAL "Linux") # For RTLD_DEFAULT and RTLD_NEXT add_definitions (-D_GNU_SOURCE) endif () include (TestBigEndian) test_big_endian (HAVE_BIGENDIAN) if (HAVE_BIGENDIAN) add_definitions (-DHAVE_BIGENDIAN) endif () # Put all executables into the same top level build directory, regardless of # which subdirectory they are declared set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) ############################################################################## # Installation directories if (CMAKE_SYSTEM_NAME STREQUAL "Linux") # Debian multiarch support execute_process(COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH OUTPUT_VARIABLE ARCH_SUBDIR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() if (WIN32 OR APPLE) # On Windows/MacOSX, applications are usually installed on a directory of # their own set (DOC_INSTALL_DIR doc) set (LIB_INSTALL_DIR lib) set (LIB_ARCH_INSTALL_DIR lib) else () set (DOC_INSTALL_DIR share/doc/${CMAKE_PROJECT_NAME}) set (LIB_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) if (ARCH_SUBDIR) set (LIB_ARCH_INSTALL_DIR lib/${ARCH_SUBDIR}/${CMAKE_PROJECT_NAME}) else () set (LIB_ARCH_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) endif () endif () set (SCRIPTS_INSTALL_DIR ${LIB_INSTALL_DIR}/scripts) set (WRAPPER_INSTALL_DIR ${LIB_ARCH_INSTALL_DIR}/wrappers) ############################################################################## # Bundled dependencies # # We prefer to bundle and statically link against many dependencies: # - on Windows to make it easy to deploy the wrappers DLLs # - on unices to prevent symbol collisions when tracing applications that link # against other versions of these libraries if (NOT ENABLE_STATIC_SNAPPY) find_package (SNAPPY) endif () if (ENABLE_STATIC_SNAPPY OR NOT SNAPPY_FOUND) set (SNAPPY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/snappy) set (SNAPPY_LIBRARIES snappy_bundled) add_subdirectory (thirdparty/snappy) endif () include_directories (${SNAPPY_INCLUDE_DIRS}) if (NOT WIN32) # zlib 1.2.4-1.2.5 made it impossible to read the last block of incomplete # gzip traces (e.g., apitrace-tests/traces/zlib-no-eof.trace). find_package (ZLIB 1.2.6) endif () if (NOT ZLIB_FOUND) set (ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/zlib) set (ZLIB_LIBRARIES z_bundled) add_subdirectory (thirdparty/zlib) endif () include_directories (${ZLIB_INCLUDE_DIRS}) # FindPNG.cmake will search ZLIB internally (without requiring any particular # version), adding its include dirs and libraries, and overwriting ZLIB_FOUND. # So if the system's ZLIB was did not meet the our requirements, then there's # no safe way to use the system's PNG library. if (NOT WIN32 AND ZLIB_FOUND) find_package (PNG) endif () if (NOT PNG_FOUND) set (PNG_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libpng) set (PNG_DEFINITIONS "") set (PNG_LIBRARIES png_bundled) add_subdirectory (thirdparty/libpng) endif () if (MSVC) add_subdirectory (thirdparty/getopt) include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/getopt) set (GETOPT_LIBRARIES getopt_bundled) endif () if (WIN32) add_subdirectory (thirdparty/dxerr) add_subdirectory (thirdparty/directxtex) add_subdirectory (thirdparty/devcon) endif () if (CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF") add_subdirectory (thirdparty/libbacktrace) include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libbacktrace) set (LIBBACKTRACE_LIBRARIES ${CMAKE_DL_LIBS} backtrace) add_definitions (-DHAVE_BACKTRACE=1) endif () add_subdirectory (thirdparty/md5) set (MD5_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/md5) set (MD5_LIBRARIES md5_bundled) # We use bundled headers for all Khronos APIs, to guarantee support for both # OpenGL and OpenGL ES at build time, because the OpenGL and OpenGL ES 1 APIs # are so intertwined that conditional compilation extremely difficult. This # also avoids missing/inconsistent declarations in system headers. include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/khronos) # We use non-standard C++ flags, so we can't just use GTest's CMakeLists.txt include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/include) add_library (gtest ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/src/gtest-all.cc) set_property (TARGET gtest APPEND PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest) target_link_libraries (gtest ${CMAKE_THREAD_LIBS_INIT}) enable_testing () add_custom_target (check COMMAND ${CMAKE_CTEST_COMMAND}) ############################################################################## # Common libraries / utilities include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/common ) if (WIN32) set (os os_win32.cpp) else () set (os os_posix.cpp) endif () add_convenience_library (common common/trace_callset.cpp common/trace_dump.cpp common/trace_fast_callset.cpp common/trace_file.cpp common/trace_file_read.cpp common/trace_file_write.cpp common/trace_file_zlib.cpp common/trace_file_snappy.cpp common/trace_model.cpp common/trace_parser.cpp common/trace_parser_flags.cpp common/trace_writer.cpp common/trace_writer_local.cpp common/trace_writer_model.cpp common/trace_loader.cpp common/trace_profiler.cpp common/trace_option.cpp common/${os} common/os_backtrace.cpp common/highlight.cpp ) target_link_libraries (common ${LIBBACKTRACE_LIBRARIES} ) if (WIN32) target_link_libraries (common shell32 ) endif () if (ANDROID) target_link_libraries (common log ) endif () ############################################################################## # Sub-directories add_subdirectory (dispatch) add_subdirectory (helpers) add_subdirectory (wrappers) add_subdirectory (image) add_subdirectory (retrace) ############################################################################## # CLI if (ENABLE_CLI) if (WIN32) add_subdirectory (inject) endif () add_subdirectory (cli) endif () ############################################################################## # Scripts (to support the CLI) install ( PROGRAMS scripts/highlight.py scripts/jsondiff.py scripts/profileshader.py scripts/retracediff.py scripts/snapdiff.py scripts/tracecheck.py scripts/tracediff.py scripts/unpickle.py DESTINATION ${SCRIPTS_INSTALL_DIR} ) if (WIN32) install ( PROGRAMS scripts/convert.py DESTINATION ${SCRIPTS_INSTALL_DIR} ) install ( FILES scripts/apitrace.PIXExp DESTINATION ${SCRIPTS_INSTALL_DIR} ) endif () ############################################################################## # GUI if (ENABLE_GUI AND Qt5Widgets_FOUND AND Qt5WebKitWidgets_FOUND) add_subdirectory(gui) endif () ############################################################################## # Packaging install ( FILES README.markdown docs/BUGS.markdown docs/NEWS.markdown docs/USAGE.markdown DESTINATION ${DOC_INSTALL_DIR} ) install ( FILES LICENSE DESTINATION ${DOC_INSTALL_DIR} RENAME LICENSE.txt ) set (CPACK_PACKAGE_VERSION_MAJOR "7") set (CPACK_PACKAGE_VERSION_MINOR "0") # Use current date in YYYYMMDD format as patch number execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "import time, sys; sys.stdout.write(time.strftime('%Y%m%d'))" OUTPUT_VARIABLE CPACK_PACKAGE_VERSION_PATCH ) # cpack mistakenly detects Mingw-w64 as win32 if (MINGW) if (CMAKE_SIZEOF_VOID_P EQUAL 8) set (CPACK_SYSTEM_NAME win64) endif () endif () # See http://www.vtk.org/Wiki/CMake:CPackPackageGenerators if (WIN32) if (CMAKE_VERSION VERSION_LESS 3.1) set (CPACK_GENERATOR "ZIP") else () set (CPACK_GENERATOR "7Z") endif () elseif (APPLE) set (CPACK_GENERATOR "DragNDrop") else () set (CPACK_GENERATOR "TBZ2") endif () include(CPack) tmpNnpnZF/dispatch/0000775000175000017500000000000012543167424013563 5ustar chrischristmpNnpnZF/dispatch/d2dimports.hpp0000664000175000017500000001602212543167424016364 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all D2D/DWRITE includes, and respective OS dependent headers. */ #pragma once #include #include #include "compat.h" #include #include DEFINE_GUID(IID_ID2D1Resource,0x2cd90691,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1Bitmap,0xa2296057,0xea42,0x4099,0x98,0x3b,0x53,0x9f,0xb6,0x50,0x54,0x26); DEFINE_GUID(IID_ID2D1GradientStopCollection,0x2cd906a7,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1Brush,0x2cd906a8,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1BitmapBrush,0x2cd906aa,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1SolidColorBrush,0x2cd906a9,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1LinearGradientBrush,0x2cd906ab,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1RadialGradientBrush,0x2cd906ac,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1StrokeStyle,0x2cd9069d,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1Geometry,0x2cd906a1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1RectangleGeometry,0x2cd906a2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1RoundedRectangleGeometry,0x2cd906a3,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1EllipseGeometry,0x2cd906a4,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1GeometryGroup,0x2cd906a6,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1TransformedGeometry,0x2cd906bb,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1SimplifiedGeometrySink,0x2cd9069e,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1GeometrySink,0x2cd9069f,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1TessellationSink,0x2cd906c1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1PathGeometry,0x2cd906a5,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1Mesh,0x2cd906c2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1Layer,0x2cd9069b,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1DrawingStateBlock,0x28506e39,0xebf6,0x46a1,0xbb,0x47,0xfd,0x85,0x56,0x5a,0xb9,0x57); DEFINE_GUID(IID_ID2D1RenderTarget,0x2cd90694,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1BitmapRenderTarget,0x2cd90695,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1HwndRenderTarget,0x2cd90698,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9); DEFINE_GUID(IID_ID2D1GdiInteropRenderTarget,0xe0db51c3,0x6f77,0x4bae,0xb3,0xd5,0xe4,0x75,0x09,0xb3,0x58,0x38); DEFINE_GUID(IID_ID2D1DCRenderTarget,0x1c51bc64,0xde61,0x46fd,0x98,0x99,0x63,0xa5,0xd8,0xf0,0x39,0x50); DEFINE_GUID(IID_ID2D1Factory,0x06152247,0x6f50,0x465a,0x92,0x45,0x11,0x8b,0xfd,0x3b,0x60,0x07); DEFINE_GUID(IID_IDWriteFontFileLoader,0x727cad4e,0xd6af,0x4c9e,0x8a,0x08,0xd6,0x95,0xb1,0x1c,0xaa,0x49); DEFINE_GUID(IID_IDWriteLocalFontFileLoader,0xb2d9f3ec,0xc9fe,0x4a11,0xa2,0xec,0xd8,0x62,0x08,0xf7,0xc0,0xa2); DEFINE_GUID(IID_IDWriteFontFileStream,0x6d4865fe,0x0ab8,0x4d91,0x8f,0x62,0x5d,0xd6,0xbe,0x34,0xa3,0xe0); DEFINE_GUID(IID_IDWriteFontFile,0x739d886a,0xcef5,0x47dc,0x87,0x69,0x1a,0x8b,0x41,0xbe,0xbb,0xb0); DEFINE_GUID(IID_IDWriteRenderingParams,0x2f0da53a,0x2add,0x47cd,0x82,0xee,0xd9,0xec,0x34,0x68,0x8e,0x75); DEFINE_GUID(IID_IDWriteFontFace,0x5f49804d,0x7024,0x4d43,0xbf,0xa9,0xd2,0x59,0x84,0xf5,0x38,0x49); DEFINE_GUID(IID_IDWriteFontCollectionLoader,0xcca920e4,0x52f0,0x492b,0xbf,0xa8,0x29,0xc7,0x2e,0xe0,0xa4,0x68); DEFINE_GUID(IID_IDWriteFontFileEnumerator,0x72755049,0x5ff7,0x435d,0x83,0x48,0x4b,0xe9,0x7c,0xfa,0x6c,0x7c); DEFINE_GUID(IID_IDWriteLocalizedStrings,0x08256209,0x099a,0x4b34,0xb8,0x6d,0xc2,0x2b,0x11,0x0e,0x77,0x71); DEFINE_GUID(IID_IDWriteFontCollection,0xa84cee02,0x3eea,0x4eee,0xa8,0x27,0x87,0xc1,0xa0,0x2a,0x0f,0xcc); DEFINE_GUID(IID_IDWriteFontList,0x1a0d8438,0x1d97,0x4ec1,0xae,0xf9,0xa2,0xfb,0x86,0xed,0x6a,0xcb); DEFINE_GUID(IID_IDWriteFontFamily,0xda20d8ef,0x812a,0x4c43,0x98,0x02,0x62,0xec,0x4a,0xbd,0x7a,0xdd); DEFINE_GUID(IID_IDWriteFont,0xacd16696,0x8c14,0x4f5d,0x87,0x7e,0xfe,0x3f,0xc1,0xd3,0x27,0x37); DEFINE_GUID(IID_IDWriteTextFormat,0x9c906818,0x31d7,0x4fd3,0xa1,0x51,0x7c,0x5e,0x22,0x5d,0xb5,0x5a); DEFINE_GUID(IID_IDWriteTypography,0x55f1112b,0x1dc2,0x4b3c,0x95,0x41,0xf4,0x68,0x94,0xed,0x85,0xb6); DEFINE_GUID(IID_IDWriteNumberSubstitution,0x14885CC9,0xBAB0,0x4f90,0xB6,0xED,0x5C,0x36,0x6A,0x2C,0xD0,0x3D); DEFINE_GUID(IID_IDWriteTextAnalysisSource,0x688e1a58,0x5094,0x47c8,0xad,0xc8,0xfb,0xce,0xa6,0x0a,0xe9,0x2b); DEFINE_GUID(IID_IDWriteTextAnalysisSink,0x5810cd44,0x0ca0,0x4701,0xb3,0xfa,0xbe,0xc5,0x18,0x2a,0xe4,0xf6); DEFINE_GUID(IID_IDWriteTextAnalyzer,0xb7e6163e,0x7f46,0x43b4,0x84,0xb3,0xe4,0xe6,0x24,0x9c,0x36,0x5d); DEFINE_GUID(IID_IDWriteInlineObject,0x8339FDE3,0x106F,0x47ab,0x83,0x73,0x1C,0x62,0x95,0xEB,0x10,0xB3); DEFINE_GUID(IID_IDWritePixelSnapping,0xeaf3a2da,0xecf4,0x4d24,0xb6,0x44,0xb3,0x4f,0x68,0x42,0x02,0x4b); DEFINE_GUID(IID_IDWriteTextRenderer,0xef8a8135,0x5cc6,0x45fe,0x88,0x25,0xc5,0xa0,0x72,0x4e,0xb8,0x19); DEFINE_GUID(IID_IDWriteTextLayout,0x53737037,0x6d14,0x410b,0x9b,0xfe,0x0b,0x18,0x2b,0xb7,0x09,0x61); DEFINE_GUID(IID_IDWriteBitmapRenderTarget,0x5e5a32a3,0x8dff,0x4773,0x9f,0xf6,0x06,0x96,0xea,0xb7,0x72,0x67); DEFINE_GUID(IID_IDWriteGdiInterop,0x1edd9491,0x9853,0x4299,0x89,0x8f,0x64,0x32,0x98,0x3b,0x6f,0x3a); DEFINE_GUID(IID_IDWriteGlyphRunAnalysis,0x7d97dbf7,0xe085,0x42d4,0x81,0xe3,0x6a,0x88,0x3b,0xde,0xd1,0x18); DEFINE_GUID(IID_IDWriteFactory,0xb859ee5a,0xd838,0x4b5b,0xa2,0xe8,0x1a,0xdc,0x7d,0x93,0xdb,0x48); tmpNnpnZF/dispatch/d3d8imports.hpp0000664000175000017500000000265312543167424016462 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all D3D8 includes, and respective OS dependent headers. */ #pragma once #include #include "compat.h" #include tmpNnpnZF/dispatch/dispatch.py0000664000175000017500000001111612543167424015734 0ustar chrischris########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Generate DLL/SO dispatching functions. """ # Adjust path import os.path import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import specs.stdapi as stdapi def function_pointer_type(function): return 'PFN_' + function.name.upper() def function_pointer_value(function): return '_' + function.name class Dispatcher: def dispatchModule(self, module): self.dispatchModuleDecl(module) self.dispatchModuleImpl(module) def dispatchModuleDecl(self, module): for function in module.functions: self.dispatchFunctionDecl(module, function) # define standard name aliases for convenience, but only when not # tracing, as that would cause symbol clashing with the tracing # functions print '#ifdef RETRACE' for function in module.functions: print '#define %s _%s' % (function.name, function.name) print '#endif /* RETRACE */' print def dispatchFunctionDecl(self, module, function): ptype = function_pointer_type(function) pvalue = function_pointer_value(function) print 'typedef ' + function.prototype('* %s' % ptype) + ';' print 'extern %s %s;' % (ptype, pvalue) print def dispatchModuleImpl(self, module): for function in module.functions: self.dispatchFunctionImpl(module, function) def dispatchFunctionImpl(self, module, function): ptype = function_pointer_type(function) pvalue = function_pointer_value(function) if function.type is stdapi.Void: ret = '' else: ret = 'return ' print 'static ' + function.prototype('_fail_' + function.name) + ' {' self.failFunction(function) print '}' print print 'static ' + function.prototype('_get_' + function.name) + ' {' self.invokeGetProcAddress(module, function) print ' %s%s(%s);' % (ret, pvalue, ', '.join([str(arg.name) for arg in function.args])) print '}' print print '%s %s = &%s;' % (ptype, pvalue, '_get_' + function.name) print def getProcAddressName(self, module, function): raise NotImplementedError def invokeGetProcAddress(self, module, function): ptype = function_pointer_type(function) pvalue = function_pointer_value(function) getProcAddressName = self.getProcAddressName(module, function) print ' %s _ptr;' % (ptype,) print ' _ptr = (%s)%s("%s");' % (ptype, getProcAddressName, function.name) print ' if (!_ptr) {' print ' _ptr = &%s;' % ('_fail_' + function.name) print ' }' print ' %s = _ptr;' % (pvalue,) def failFunction(self, function): print r' const char *_name = "%s";' % function.name if function.type is stdapi.Void or function.fail is not None: print r' os::log("warning: ignoring call to unavailable function %s\n", _name);' if function.type is stdapi.Void: assert function.fail is None print ' return;' else: assert function.fail is not None print ' return %s;' % function.fail else: print r' os::log("error: unavailable function %s\n", _name);' print r' os::abort();' tmpNnpnZF/dispatch/glproc_egl.cpp0000664000175000017500000001232012543167424016402 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "glproc.hpp" #if !defined(_WIN32) #include "dlopen.hpp" #endif /* * Handle to the true OpenGL library. * XXX: Not really used yet. */ #if defined(_WIN32) HMODULE _libGlHandle = NULL; #else void *_libGlHandle = NULL; #endif #if defined(_WIN32) #error Unsupported #elif defined(__APPLE__) #error Unsupported #else /* * Lookup a public EGL/GL/GLES symbol * * The spec states that eglGetProcAddress should only be used for non-core * (extensions) entry-points. Core entry-points should be taken directly from * the API specific libraries. * * We cannot tell here which API a symbol is meant for here (as some are * exported by many). So this code assumes that the appropriate shared * libraries have been loaded previously (either dlopened with RTLD_GLOBAL, or * as part of the executable dependencies), and that their symbols available * for quering via dlsym(RTLD_NEXT, ...). */ void * _getPublicProcAddress(const char *procName) { #if defined(ANDROID) /* * Android does not support LD_PRELOAD. It is assumed that applications * are explicitely loading egltrace.so. */ if (procName[0] == 'e' && procName[1] == 'g' && procName[2] == 'l') { static void *libEGL = NULL; if (!libEGL) { libEGL = _dlopen("libEGL.so", RTLD_LOCAL | RTLD_LAZY); if (!libEGL) { return NULL; } } return dlsym(libEGL, procName); } if (procName[0] == 'g' && procName[1] == 'l') { /* TODO: Use GLESv1/GLESv2 on a per-context basis. */ static void *sym = NULL; static void *libGLESv2 = NULL; if (!libGLESv2) { libGLESv2 = _dlopen("libGLESv2.so", RTLD_LOCAL | RTLD_LAZY); } if (libGLESv2) { sym = dlsym(libGLESv2, procName); } if (sym) { return sym; } static void *libGLESv1 = NULL; if (!libGLESv1) { libGLESv1 = _dlopen("libGLESv1_CM.so", RTLD_LOCAL | RTLD_LAZY); } if (libGLESv1) { sym = dlsym(libGLESv1, procName); } if (sym) { return sym; } } return NULL; #else void *proc; proc = dlsym(RTLD_NEXT, procName); if (!proc && strcmp(procName, "eglGetProcAddress") != 0) { /* * This might happen when: * * - the application is querying non-extensions functions via * eglGetProcAddress (either because EGL_KHR_get_all_proc_addresses * is advertised, or merely because the EGL implementation supports * it regardless, like Mesa does) * * - libGLES*.so nor libGL*.so was ever loaded. * * - we need to resolve entrypoints that application never asked (e.g., * glGetIntegerv), for internal purposes * * Therefore, we try to fallback to eglGetProcAddress. * * Another alternative would be to dlopen libGL/libGLES ourselves. * * See https://github.com/apitrace/apitrace/issues/301#issuecomment-68532248 */ proc = (void *) _eglGetProcAddress(procName); } return proc; #endif } /* * Lookup a private EGL/GL/GLES symbol * * Private symbols should always be available through eglGetProcAddress, and * they are guaranteed to work with any context bound (regardless of the API). * * However, per issue#57, eglGetProcAddress returns garbage on some * implementations, and the spec states that implementations may choose to also * export extension functions publicly, so we always attempt dlsym before * eglGetProcAddress to mitigate that. */ void * _getPrivateProcAddress(const char *procName) { void *proc; proc = _getPublicProcAddress(procName); if (!proc && ((procName[0] == 'e' && procName[1] == 'g' && procName[2] == 'l') || (procName[0] == 'g' && procName[1] == 'l'))) { proc = (void *) _eglGetProcAddress(procName); } return proc; } #endif tmpNnpnZF/dispatch/__init__.py0000664000175000017500000000002712543167424015673 0ustar chrischrisfrom dispatch import * tmpNnpnZF/dispatch/glimports.hpp0000664000175000017500000002165512543167424016325 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all GL includes, and respective OS dependent headers. */ #pragma once #if defined(_WIN32) # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN 1 # endif # include #elif defined(__APPLE__) #elif defined(HAVE_X11) # include #endif /* !_WIN32 */ #include #include // Windows 8 GL headers define GL_EXT_paletted_texture but not // GL_TEXTURE_INDEX_SIZE_EXT, and due to the way we include DirectX headers, it // ends up taking precedence over the ones we bundle... #if defined(GL_EXT_paletted_texture) && !defined(GL_TEXTURE_INDEX_SIZE_EXT) #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #endif // GL_NVX_gpu_memory_info #define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 #define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 #define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 #define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A #define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B // Stuff that got removed from official Khronos headers. // XXX: Consider removing all our references to it too. #define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 #define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 #define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 #define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 #define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 #define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 #define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A #define GL_FOG_SCALE_SGIX 0x81FC #define GL_FOG_SCALE_VALUE_SGIX 0x81FD #define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 #define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 #define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 #define GL_PATH_SAMPLE_QUALITY_NV 0x9085 #define GL_PATH_STROKE_BOUND_NV 0x9086 #define GL_PATH_STROKE_OVERSAMPLE_COUNT_NV 0x9087 #define GL_MULTI_HULLS_NV 0x908C #define GL_PROJECTIVE_2D_NV 0x9093 #define GL_PROJECTIVE_3D_NV 0x9095 #define GL_TRANSPOSE_PROJECTIVE_2D_NV 0x9097 #define GL_TRANSPOSE_PROJECTIVE_3D_NV 0x9099 // GL_VMWX_map_buffer_debug #define GL_MAP_NOTIFY_EXPLICIT_BIT_VMWX 0x80000000 #if defined(_WIN32) #include #ifndef PFD_SUPPORT_DIRECTDRAW #define PFD_SUPPORT_DIRECTDRAW 0x00002000 #endif #ifndef PFD_DIRECT3D_ACCELERATED #define PFD_DIRECT3D_ACCELERATED 0x00004000 #endif #ifndef PFD_SUPPORT_COMPOSITION #define PFD_SUPPORT_COMPOSITION 0x00008000 #endif #ifndef WGL_SWAPMULTIPLE_MAX extern "C" typedef struct _WGLSWAP { HDC hdc; UINT uiFlags; } WGLSWAP, *PWGLSWAP, FAR *LPWGLSWAP; #define WGL_SWAPMULTIPLE_MAX 16 #endif /* !WGL_SWAPMULTIPLE_MAX */ #elif defined(__APPLE__) #include #if TARGET_OS_IPHONE #elif TARGET_OS_MAC #include /* Silence deprecated OpenGL warnings. */ #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 #include #undef OPENGL_DEPRECATED #undef OPENGL_DEPRECATED_MSG #define OPENGL_DEPRECATED(from, to) #define OPENGL_DEPRECATED_MSG(from, to, msg) #endif #include #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 #include #include #else #define kCGLPFAAcceleratedCompute 97 #define kCGLRPAcceleratedCompute 130 typedef void *CGLShareGroupObj; typedef struct __IOSurface *IOSurfaceRef; #endif #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 #define kCGLPFATripleBuffer 3 #define kCGLPFAOpenGLProfile 99 #define kCGLRPVideoMemoryMegabytes 131 #define kCGLRPTextureMemoryMegabytes 132 #define kCGLCECrashOnRemovedFunctions 316 #define kCGLOGLPVersion_Legacy 0x1000 #define kCGLOGLPVersion_3_2_Core 0x3200 #define kCGLOGLPVersion_GL3_Core 0x3200 #endif #if MAC_OS_X_VERSION_MIN_REQUIRED < 1080 #define kCGLPFABackingVolatile 77 #define kCGLPFASupportsAutomaticGraphicsSwitching 101 #endif #if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 #define kCGLOGLPVersion_GL3_Core 0x3200 #define kCGLOGLPVersion_GL4_Core 0x4100 #define kCGLRPMajorGLVersion 133 #endif // OpenGL/CGLProfiler.h seems to no longer be included with XCode #define kCGLCPComment ((CGLContextParameter)1232) #define kCGLCPDumpState ((CGLContextParameter)1233) #define kCGLCPEnableForceFlush ((CGLContextParameter)1234) #define kCGLGOComment ((CGLGlobalOption)1506) #define kCGLGOEnableFunctionTrace ((CGLGlobalOption)1507) #define kCGLGOEnableFunctionStatistics ((CGLGlobalOption)1508) #define kCGLGOResetFunctionTrace ((CGLGlobalOption)1509) #define kCGLGOPageBreak ((CGLGlobalOption)1510) #define kCGLGOResetFunctionStatistics ((CGLGlobalOption)1511) #define kCGLGOEnableDebugAttach ((CGLGlobalOption)1512) #define kCGLGOHideObjects ((CGLGlobalOption)1513) #define kCGLGOEnableBreakpoint ((CGLGlobalOption)1514) #define kCGLGOForceSlowRenderingPath ((CGLGlobalOption)1609) #define kCGLGODisableImmediateRenderPath ((CGLGlobalOption)1610) #define kCGLGODisableCVARenderPath ((CGLGlobalOption)1611) #define kCGLGODisableVARRenderPath ((CGLGlobalOption)1612) #define kCGLGOForceWireframeRendering ((CGLGlobalOption)1613) #define kCGLGOSubmitOnImmediateRenderCommand ((CGLGlobalOption)1614) #define kCGLGOSubmitOnCVARenderCommand ((CGLGlobalOption)1615) #define kCGLGOSubmitOnVAORenderCommand ((CGLGlobalOption)1616) #define kCGLGOSubmitOnClearCommand ((CGLGlobalOption)1617) #define kCGLGOForceSoftwareTransformLighting ((CGLGlobalOption)1618) #define kCGLGOForceSoftwareTexgen ((CGLGlobalOption)1619) #define kCGLGOForceSoftwareTRUFORM_ATI ((CGLGlobalOption)1620) #define kCGLGOForceSoftwareVertexShaders ((CGLGlobalOption)1621) #define kCGLGODisableFragmentShaders_ATI ((CGLGlobalOption)1622) #define kCGLGODisableTexturing ((CGLGlobalOption)1623) #define kCGLGOOutlineTexture ((CGLGlobalOption)1624) #define kCGLGOOutlineTextureColor ((CGLGlobalOption)1625) #define kCGLGOForceSlowBitmapPath ((CGLGlobalOption)1626) #define kCGLGODisableBitmap ((CGLGlobalOption)1627) #define kCGLGOForceSlowReadPixelsPath ((CGLGlobalOption)1630) #define kCGLGODisableReadPixels ((CGLGlobalOption)1631) #define kCGLGOOutlineReadPixelsBuffer ((CGLGlobalOption)1632) #define kCGLGOOutlineReadPixelsBufferColor ((CGLGlobalOption)1633) #define kCGLGOForceSlowDrawPixelsPath ((CGLGlobalOption)1634) #define kCGLGODisableDrawPixels ((CGLGlobalOption)1635) #define kCGLGOOutlineDrawPixelsBuffer ((CGLGlobalOption)1636) #define kCGLGOOutlineDrawPixelsBufferColor ((CGLGlobalOption)1637) #define kCGLGOForceSlowCopyPixelsPath ((CGLGlobalOption)1638) #define kCGLGODisableCopyPixels ((CGLGlobalOption)1639) #define kCGLGOOutlineCopyPixelsBuffer ((CGLGlobalOption)1640) #define kCGLGOOutlineCopyPixelsBufferColor ((CGLGlobalOption)1641) #define kCGLGOMakeAllGLObjectsRequireUpdate ((CGLGlobalOption)1642) #define kCGLGOMakeAllGLStateRequireUpdate ((CGLGlobalOption)1643) extern "C" { // From http://www.opensource.apple.com/source/gdb/gdb-954/libcheckpoint/cpcg.c typedef void * CGSConnectionID; typedef int CGSWindowID; typedef int CGSSurfaceID; CGLError CGLSetSurface(CGLContextObj ctx, CGSConnectionID cid, CGSWindowID wid, CGSSurfaceID sid); CGLError CGLGetSurface(CGLContextObj ctx, CGSConnectionID* cid, CGSWindowID* wid, CGSSurfaceID* sid); CGLError CGLUpdateContext(CGLContextObj ctx); } #endif #else #ifdef HAVE_X11 #include #include #endif /* Prevent collision with trace::Bool */ #undef Bool #endif #include "eglimports.hpp" tmpNnpnZF/dispatch/d3derr.hpp0000664000175000017500000000577712543167424015477 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Direct3D error codes. * * These were defined in d3dx10.h/d3dx11.h on DirectX SDK, and moved to * winerror.h on Windows 8 SDK. * * See also: * - http://msdn.microsoft.com/en-us/library/windows/desktop/ff476174.aspx * - http://msdn.microsoft.com/en-us/library/windows/desktop/bb205278.aspx * - http://msdn.microsoft.com/en-us/library/windows/desktop/bb172554.aspx */ #pragma once #ifndef _FACD3D #define _FACD3D 0x876 #endif #ifndef MAKE_D3DHRESULT #define MAKE_D3DHRESULT(code) MAKE_HRESULT(1, _FACD3D, code) #endif #ifndef MAKE_D3DSTATUS #define MAKE_D3DSTATUS(code) MAKE_HRESULT(0, _FACD3D, code) #endif #ifndef D3DERR_INVALIDCALL #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #endif #ifndef D3DERR_WASSTILLDRAWING #define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) #endif #ifndef DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED #define DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED MAKE_DXGI_HRESULT(35) #endif #ifndef DXGI_ERROR_REMOTE_OUTOFMEMORY #define DXGI_ERROR_REMOTE_OUTOFMEMORY MAKE_DXGI_HRESULT(36) #endif #ifndef D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS #define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D10_HRESULT(1) #endif #ifndef D3D10_ERROR_FILE_NOT_FOUND #define D3D10_ERROR_FILE_NOT_FOUND MAKE_D3D10_HRESULT(2) #endif #ifndef D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS #define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D11_HRESULT(1) #endif #ifndef D3D11_ERROR_FILE_NOT_FOUND #define D3D11_ERROR_FILE_NOT_FOUND MAKE_D3D11_HRESULT(2) #endif #ifndef D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS #define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS MAKE_D3D11_HRESULT(3) #endif #ifndef D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD #define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD MAKE_D3D11_HRESULT(4) #endif tmpNnpnZF/dispatch/compat.h0000664000175000017500000006053212543167424015225 0ustar chrischris/************************************************************************** * * Copyright 2008-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * MinGW compatability macros to allow using recent's DXSDK headers. */ #ifdef __MINGW32__ #include /* * Several of the defines below clash with libstdc++ internal variables, * so include the headers now, before they are re-defined. */ #ifdef __cplusplus #include #include #include #include #endif /* * Dummy definitions Standard Annotation Language (SAL) definitions * * These are typically defined in sal.h. * * http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/sal.h?view=markup */ #define _Always_(annos) #define _Analysis_noreturn_ #define _At_(target, annos) #define _At_buffer_(target, iter, bound, annos) #define _COM_Outptr_ #define _COM_Outptr_opt_ #define _COM_Outptr_opt_result_maybenull_ #define _COM_Outptr_result_maybenull_ #define _Check_return_ #define _Const_ #define _Deref2_pre_readonly_ #define _Deref_in_bound_ #define _Deref_in_range_(lb,ub) #define _Deref_inout_bound_ #define _Deref_inout_z_ #define _Deref_inout_z_bytecap_c_(size) #define _Deref_inout_z_cap_c_(size) #define _Deref_opt_out_ #define _Deref_opt_out_opt_ #define _Deref_opt_out_opt_z_ #define _Deref_opt_out_z_ #define _Deref_out_ #define _Deref_out_bound_ #define _Deref_out_opt_ #define _Deref_out_opt_z_ #define _Deref_out_range_(lb,ub) #define _Deref_out_z_ #define _Deref_out_z_bytecap_c_(size) #define _Deref_out_z_cap_c_(size) #define _Deref_post_bytecap_(size) #define _Deref_post_bytecap_c_(size) #define _Deref_post_bytecap_x_(size) #define _Deref_post_bytecount_(size) #define _Deref_post_bytecount_c_(size) #define _Deref_post_bytecount_x_(size) #define _Deref_post_cap_(size) #define _Deref_post_cap_c_(size) #define _Deref_post_cap_x_(size) #define _Deref_post_count_(size) #define _Deref_post_count_c_(size) #define _Deref_post_count_x_(size) #define _Deref_post_maybenull_ #define _Deref_post_notnull_ #define _Deref_post_null_ #define _Deref_post_opt_bytecap_(size) #define _Deref_post_opt_bytecap_c_(size) #define _Deref_post_opt_bytecap_x_(size) #define _Deref_post_opt_bytecount_(size) #define _Deref_post_opt_bytecount_c_(size) #define _Deref_post_opt_bytecount_x_(size) #define _Deref_post_opt_cap_(size) #define _Deref_post_opt_cap_c_(size) #define _Deref_post_opt_cap_x_(size) #define _Deref_post_opt_count_(size) #define _Deref_post_opt_count_c_(size) #define _Deref_post_opt_count_x_(size) #define _Deref_post_opt_valid_ #define _Deref_post_opt_valid_bytecap_(size) #define _Deref_post_opt_valid_bytecap_c_(size) #define _Deref_post_opt_valid_bytecap_x_(size) #define _Deref_post_opt_valid_cap_(size) #define _Deref_post_opt_valid_cap_c_(size) #define _Deref_post_opt_valid_cap_x_(size) #define _Deref_post_opt_z_ #define _Deref_post_opt_z_bytecap_(size) #define _Deref_post_opt_z_bytecap_c_(size) #define _Deref_post_opt_z_bytecap_x_(size) #define _Deref_post_opt_z_cap_(size) #define _Deref_post_opt_z_cap_c_(size) #define _Deref_post_opt_z_cap_x_(size) #define _Deref_post_valid_ #define _Deref_post_valid_bytecap_(size) #define _Deref_post_valid_bytecap_c_(size) #define _Deref_post_valid_bytecap_x_(size) #define _Deref_post_valid_cap_(size) #define _Deref_post_valid_cap_c_(size) #define _Deref_post_valid_cap_x_(size) #define _Deref_post_z_ #define _Deref_post_z_bytecap_(size) #define _Deref_post_z_bytecap_c_(size) #define _Deref_post_z_bytecap_x_(size) #define _Deref_post_z_cap_(size) #define _Deref_post_z_cap_c_(size) #define _Deref_post_z_cap_x_(size) #define _Deref_pre_bytecap_(size) #define _Deref_pre_bytecap_c_(size) #define _Deref_pre_bytecap_x_(size) #define _Deref_pre_bytecount_(size) #define _Deref_pre_bytecount_c_(size) #define _Deref_pre_bytecount_x_(size) #define _Deref_pre_cap_(size) #define _Deref_pre_cap_c_(size) #define _Deref_pre_cap_x_(size) #define _Deref_pre_count_(size) #define _Deref_pre_count_c_(size) #define _Deref_pre_count_x_(size) #define _Deref_pre_invalid_ #define _Deref_pre_maybenull_ #define _Deref_pre_notnull_ #define _Deref_pre_null_ #define _Deref_pre_opt_bytecap_(size) #define _Deref_pre_opt_bytecap_c_(size) #define _Deref_pre_opt_bytecap_x_(size) #define _Deref_pre_opt_bytecount_(size) #define _Deref_pre_opt_bytecount_c_(size) #define _Deref_pre_opt_bytecount_x_(size) #define _Deref_pre_opt_cap_(size) #define _Deref_pre_opt_cap_c_(size) #define _Deref_pre_opt_cap_x_(size) #define _Deref_pre_opt_count_(size) #define _Deref_pre_opt_count_c_(size) #define _Deref_pre_opt_count_x_(size) #define _Deref_pre_opt_valid_ #define _Deref_pre_opt_valid_bytecap_(size) #define _Deref_pre_opt_valid_bytecap_c_(size) #define _Deref_pre_opt_valid_bytecap_x_(size) #define _Deref_pre_opt_valid_cap_(size) #define _Deref_pre_opt_valid_cap_c_(size) #define _Deref_pre_opt_valid_cap_x_(size) #define _Deref_pre_opt_z_ #define _Deref_pre_opt_z_bytecap_(size) #define _Deref_pre_opt_z_bytecap_c_(size) #define _Deref_pre_opt_z_bytecap_x_(size) #define _Deref_pre_opt_z_cap_(size) #define _Deref_pre_opt_z_cap_c_(size) #define _Deref_pre_opt_z_cap_x_(size) #define _Deref_pre_readonly_ #define _Deref_pre_valid_ #define _Deref_pre_valid_bytecap_(size) #define _Deref_pre_valid_bytecap_c_(size) #define _Deref_pre_valid_bytecap_x_(size) #define _Deref_pre_valid_cap_(size) #define _Deref_pre_valid_cap_c_(size) #define _Deref_pre_valid_cap_x_(size) #define _Deref_pre_writeonly_ #define _Deref_pre_z_ #define _Deref_pre_z_bytecap_(size) #define _Deref_pre_z_bytecap_c_(size) #define _Deref_pre_z_bytecap_x_(size) #define _Deref_pre_z_cap_(size) #define _Deref_pre_z_cap_c_(size) #define _Deref_pre_z_cap_x_(size) #define _Deref_prepost_bytecap_(size) #define _Deref_prepost_bytecap_x_(size) #define _Deref_prepost_bytecount_(size) #define _Deref_prepost_bytecount_x_(size) #define _Deref_prepost_cap_(size) #define _Deref_prepost_cap_x_(size) #define _Deref_prepost_count_(size) #define _Deref_prepost_count_x_(size) #define _Deref_prepost_opt_bytecap_(size) #define _Deref_prepost_opt_bytecap_x_(size) #define _Deref_prepost_opt_bytecount_(size) #define _Deref_prepost_opt_bytecount_x_(size) #define _Deref_prepost_opt_cap_(size) #define _Deref_prepost_opt_cap_x_(size) #define _Deref_prepost_opt_count_(size) #define _Deref_prepost_opt_count_x_(size) #define _Deref_prepost_opt_valid_ #define _Deref_prepost_opt_valid_bytecap_(size) #define _Deref_prepost_opt_valid_bytecap_x_(size) #define _Deref_prepost_opt_valid_cap_(size) #define _Deref_prepost_opt_valid_cap_x_(size) #define _Deref_prepost_opt_z_ #define _Deref_prepost_opt_z_bytecap_(size) #define _Deref_prepost_opt_z_cap_(size) #define _Deref_prepost_valid_ #define _Deref_prepost_valid_bytecap_(size) #define _Deref_prepost_valid_bytecap_x_(size) #define _Deref_prepost_valid_cap_(size) #define _Deref_prepost_valid_cap_x_(size) #define _Deref_prepost_z_ #define _Deref_prepost_z_bytecap_(size) #define _Deref_prepost_z_cap_(size) #define _Deref_ret_bound_ #define _Deref_ret_opt_z_ #define _Deref_ret_range_(lb,ub) #define _Deref_ret_z_ #define _Field_range_(min,max) #define _Field_size_(size) #define _Field_size_bytes_(size) #define _Field_size_bytes_full_(size) #define _Field_size_bytes_full_opt_(size) #define _Field_size_bytes_opt_(size) #define _Field_size_bytes_part_(size, count) #define _Field_size_bytes_part_opt_(size, count) #define _Field_size_full_(size) #define _Field_size_full_opt_(size) #define _Field_size_opt_(size) #define _Field_size_part_(size, count) #define _Field_size_part_opt_(size, count) #define _Field_z_ #define _Function_class_(x) #define _Group_(annos) #define _In_ #define _In_bound_ #define _In_bytecount_(size) #define _In_bytecount_c_(size) #define _In_bytecount_x_(size) #define _In_count_(size) #define _In_count_c_(size) #define _In_count_x_(size) #define _In_defensive_(annotes) #define _In_opt_ #define _In_opt_bytecount_(size) #define _In_opt_bytecount_c_(size) #define _In_opt_bytecount_x_(size) #define _In_opt_count_(size) #define _In_opt_count_c_(size) #define _In_opt_count_x_(size) #define _In_opt_ptrdiff_count_(size) #define _In_opt_z_ #define _In_opt_z_bytecount_(size) #define _In_opt_z_bytecount_c_(size) #define _In_opt_z_count_(size) #define _In_opt_z_count_c_(size) #define _In_ptrdiff_count_(size) #define _In_range_(lb,ub) #define _In_reads_(size) #define _In_reads_bytes_(size) #define _In_reads_bytes_opt_(size) #define _In_reads_opt_(size) #define _In_reads_opt_z_(size) #define _In_reads_or_z_(size) #define _In_reads_to_ptr_(ptr) #define _In_reads_to_ptr_opt_(ptr) #define _In_reads_to_ptr_opt_z_(ptr) #define _In_reads_to_ptr_z_(ptr) #define _In_reads_z_(size) #define _In_z_ #define _In_z_bytecount_(size) #define _In_z_bytecount_c_(size) #define _In_z_count_(size) #define _In_z_count_c_(size) #define _Inout_ #define _Inout_bytecap_(size) #define _Inout_bytecap_c_(size) #define _Inout_bytecap_x_(size) #define _Inout_bytecount_(size) #define _Inout_bytecount_c_(size) #define _Inout_bytecount_x_(size) #define _Inout_cap_(size) #define _Inout_cap_c_(size) #define _Inout_cap_x_(size) #define _Inout_count_(size) #define _Inout_count_c_(size) #define _Inout_count_x_(size) #define _Inout_defensive_(annotes) #define _Inout_opt_ #define _Inout_opt_bytecap_(size) #define _Inout_opt_bytecap_c_(size) #define _Inout_opt_bytecap_x_(size) #define _Inout_opt_bytecount_(size) #define _Inout_opt_bytecount_c_(size) #define _Inout_opt_bytecount_x_(size) #define _Inout_opt_cap_(size) #define _Inout_opt_cap_c_(size) #define _Inout_opt_cap_x_(size) #define _Inout_opt_count_(size) #define _Inout_opt_count_c_(size) #define _Inout_opt_count_x_(size) #define _Inout_opt_ptrdiff_count_(size) #define _Inout_opt_z_ #define _Inout_opt_z_bytecap_(size) #define _Inout_opt_z_bytecap_c_(size) #define _Inout_opt_z_bytecap_x_(size) #define _Inout_opt_z_bytecount_(size) #define _Inout_opt_z_bytecount_c_(size) #define _Inout_opt_z_cap_(size) #define _Inout_opt_z_cap_c_(size) #define _Inout_opt_z_cap_x_(size) #define _Inout_opt_z_count_(size) #define _Inout_opt_z_count_c_(size) #define _Inout_ptrdiff_count_(size) #define _Inout_updates_(size) #define _Inout_updates_all_(size) #define _Inout_updates_all_opt_(size) #define _Inout_updates_bytes_(size) #define _Inout_updates_bytes_all_(size) #define _Inout_updates_bytes_all_opt_(size) #define _Inout_updates_bytes_opt_(size) #define _Inout_updates_bytes_to_(size,count) #define _Inout_updates_bytes_to_opt_(size,count) #define _Inout_updates_opt_(size) #define _Inout_updates_opt_z_(size) #define _Inout_updates_to_(size,count) #define _Inout_updates_to_opt_(size,count) #define _Inout_updates_z_(size) #define _Inout_z_ #define _Inout_z_bytecap_(size) #define _Inout_z_bytecap_c_(size) #define _Inout_z_bytecap_x_(size) #define _Inout_z_bytecount_(size) #define _Inout_z_bytecount_c_(size) #define _Inout_z_cap_(size) #define _Inout_z_cap_c_(size) #define _Inout_z_cap_x_(size) #define _Inout_z_count_(size) #define _Inout_z_count_c_(size) #define _Interlocked_operand_ #define _Literal_ #define _Maybe_raises_SEH_exception #define _Maybe_raises_SEH_exception_ #define _Maybenull_ #define _Maybevalid_ #define _Must_inspect_result_ #define _Notliteral_ #define _Notnull_ #define _Notref_ #define _Notvalid_ #define _NullNull_terminated_ #define _Null_ #define _Null_terminated_ #define _On_failure_(annos) #define _Out_ #define _Out_bound_ #define _Out_bytecap_(size) #define _Out_bytecap_c_(size) #define _Out_bytecap_post_bytecount_(cap,count) #define _Out_bytecap_x_(size) #define _Out_bytecapcount_(capcount) #define _Out_bytecapcount_x_(capcount) #define _Out_cap_(size) #define _Out_cap_c_(size) #define _Out_cap_m_(mult,size) #define _Out_cap_post_count_(cap,count) #define _Out_cap_x_(size) #define _Out_capcount_(capcount) #define _Out_capcount_x_(capcount) #define _Out_defensive_(annotes) #define _Out_opt_ #define _Out_opt_bytecap_(size) #define _Out_opt_bytecap_c_(size) #define _Out_opt_bytecap_post_bytecount_(cap,count) #define _Out_opt_bytecap_x_(size) #define _Out_opt_bytecapcount_(capcount) #define _Out_opt_bytecapcount_x_(capcount) #define _Out_opt_cap_(size) #define _Out_opt_cap_c_(size) #define _Out_opt_cap_m_(mult,size) #define _Out_opt_cap_post_count_(cap,count) #define _Out_opt_cap_x_(size) #define _Out_opt_capcount_(capcount) #define _Out_opt_capcount_x_(capcount) #define _Out_opt_ptrdiff_cap_(size) #define _Out_opt_z_bytecap_(size) #define _Out_opt_z_bytecap_c_(size) #define _Out_opt_z_bytecap_post_bytecount_(cap,count) #define _Out_opt_z_bytecap_x_(size) #define _Out_opt_z_bytecapcount_(capcount) #define _Out_opt_z_cap_(size) #define _Out_opt_z_cap_c_(size) #define _Out_opt_z_cap_m_(mult,size) #define _Out_opt_z_cap_post_count_(cap,count) #define _Out_opt_z_cap_x_(size) #define _Out_opt_z_capcount_(capcount) #define _Out_ptrdiff_cap_(size) #define _Out_range_(lb,ub) #define _Out_writes_(size) #define _Out_writes_all_(size) #define _Out_writes_all_opt_(size) #define _Out_writes_bytes_(size) #define _Out_writes_bytes_all_(size) #define _Out_writes_bytes_all_opt_(size) #define _Out_writes_bytes_opt_(size) #define _Out_writes_bytes_to_(size,count) #define _Out_writes_bytes_to_opt_(size,count) #define _Out_writes_opt_(size) #define _Out_writes_opt_z_(size) #define _Out_writes_to_(size,count) #define _Out_writes_to_opt_(size,count) #define _Out_writes_to_ptr_(ptr) #define _Out_writes_to_ptr_opt_(ptr) #define _Out_writes_to_ptr_opt_z_(ptr) #define _Out_writes_to_ptr_z_(ptr) #define _Out_writes_z_(size) #define _Out_z_bytecap_(size) #define _Out_z_bytecap_c_(size) #define _Out_z_bytecap_post_bytecount_(cap,count) #define _Out_z_bytecap_x_(size) #define _Out_z_bytecapcount_(capcount) #define _Out_z_cap_(size) #define _Out_z_cap_c_(size) #define _Out_z_cap_m_(mult,size) #define _Out_z_cap_post_count_(cap,count) #define _Out_z_cap_x_(size) #define _Out_z_capcount_(capcount) #define _Outptr_ #define _Outptr_opt_ #define _Outptr_opt_result_buffer_(size) #define _Outptr_opt_result_buffer_all_(size) #define _Outptr_opt_result_buffer_all_maybenull_(size) #define _Outptr_opt_result_buffer_maybenull_(size) #define _Outptr_opt_result_buffer_to_(size, count) #define _Outptr_opt_result_buffer_to_maybenull_(size, count) #define _Outptr_opt_result_bytebuffer_(size) #define _Outptr_opt_result_bytebuffer_all_(size) #define _Outptr_opt_result_bytebuffer_all_maybenull_(size) #define _Outptr_opt_result_bytebuffer_maybenull_(size) #define _Outptr_opt_result_bytebuffer_to_(size, count) #define _Outptr_opt_result_bytebuffer_to_maybenull_(size, count) #define _Outptr_opt_result_maybenull_ #define _Outptr_opt_result_maybenull_z_ #define _Outptr_opt_result_nullonfailure_ #define _Outptr_opt_result_z_ #define _Outptr_result_buffer_(size) #define _Outptr_result_buffer_all_(size) #define _Outptr_result_buffer_all_maybenull_(size) #define _Outptr_result_buffer_maybenull_(size) #define _Outptr_result_buffer_to_(size, count) #define _Outptr_result_buffer_to_maybenull_(size, count) #define _Outptr_result_bytebuffer_(size) #define _Outptr_result_bytebuffer_all_(size) #define _Outptr_result_bytebuffer_all_maybenull_(size) #define _Outptr_result_bytebuffer_maybenull_(size) #define _Outptr_result_bytebuffer_to_(size, count) #define _Outptr_result_bytebuffer_to_maybenull_(size, count) #define _Outptr_result_maybenull_ #define _Outptr_result_maybenull_z_ #define _Outptr_result_nullonfailure_ #define _Outptr_result_z_ #define _Outref_ #define _Outref_result_buffer_(size) #define _Outref_result_buffer_all_(size) #define _Outref_result_buffer_all_maybenull_(size) #define _Outref_result_buffer_maybenull_(size) #define _Outref_result_buffer_to_(size, count) #define _Outref_result_buffer_to_maybenull_(size, count) #define _Outref_result_bytebuffer_(size) #define _Outref_result_bytebuffer_all_(size) #define _Outref_result_bytebuffer_all_maybenull_(size) #define _Outref_result_bytebuffer_maybenull_(size) #define _Outref_result_bytebuffer_to_(size, count) #define _Outref_result_bytebuffer_to_maybenull_(size, count) #define _Outref_result_maybenull_ #define _Outref_result_nullonfailure_ #define _Points_to_data_ #define _Post_ #define _Post_bytecap_(size) #define _Post_bytecount_(size) #define _Post_bytecount_c_(size) #define _Post_bytecount_x_(size) #define _Post_cap_(size) #define _Post_count_(size) #define _Post_count_c_(size) #define _Post_count_x_(size) #define _Post_defensive_ #define _Post_equal_to_(expr) #define _Post_invalid_ #define _Post_maybenull_ #define _Post_maybez_ #define _Post_notnull_ #define _Post_null_ #define _Post_ptr_invalid_ #define _Post_readable_byte_size_(size) #define _Post_readable_size_(size) #define _Post_satisfies_(cond) #define _Post_valid_ #define _Post_writable_byte_size_(size) #define _Post_writable_size_(size) #define _Post_z_ #define _Post_z_bytecount_(size) #define _Post_z_bytecount_c_(size) #define _Post_z_bytecount_x_(size) #define _Post_z_count_(size) #define _Post_z_count_c_(size) #define _Post_z_count_x_(size) #define _Pre_ #define _Pre_bytecap_(size) #define _Pre_bytecap_c_(size) #define _Pre_bytecap_x_(size) #define _Pre_bytecount_(size) #define _Pre_bytecount_c_(size) #define _Pre_bytecount_x_(size) #define _Pre_cap_(size) #define _Pre_cap_c_(size) #define _Pre_cap_c_one_ #define _Pre_cap_for_(param) #define _Pre_cap_m_(mult,size) #define _Pre_cap_x_(size) #define _Pre_count_(size) #define _Pre_count_c_(size) #define _Pre_count_x_(size) #define _Pre_defensive_ #define _Pre_equal_to_(expr) #define _Pre_invalid_ #define _Pre_maybenull_ #define _Pre_notnull_ #define _Pre_null_ #define _Pre_opt_bytecap_(size) #define _Pre_opt_bytecap_c_(size) #define _Pre_opt_bytecap_x_(size) #define _Pre_opt_bytecount_(size) #define _Pre_opt_bytecount_c_(size) #define _Pre_opt_bytecount_x_(size) #define _Pre_opt_cap_(size) #define _Pre_opt_cap_c_(size) #define _Pre_opt_cap_c_one_ #define _Pre_opt_cap_for_(param) #define _Pre_opt_cap_m_(mult,size) #define _Pre_opt_cap_x_(size) #define _Pre_opt_count_(size) #define _Pre_opt_count_c_(size) #define _Pre_opt_count_x_(size) #define _Pre_opt_ptrdiff_cap_(ptr) #define _Pre_opt_ptrdiff_count_(ptr) #define _Pre_opt_valid_ #define _Pre_opt_valid_bytecap_(size) #define _Pre_opt_valid_bytecap_c_(size) #define _Pre_opt_valid_bytecap_x_(size) #define _Pre_opt_valid_cap_(size) #define _Pre_opt_valid_cap_c_(size) #define _Pre_opt_valid_cap_x_(size) #define _Pre_opt_z_ #define _Pre_opt_z_bytecap_(size) #define _Pre_opt_z_bytecap_c_(size) #define _Pre_opt_z_bytecap_x_(size) #define _Pre_opt_z_cap_(size) #define _Pre_opt_z_cap_c_(size) #define _Pre_opt_z_cap_x_(size) #define _Pre_ptrdiff_cap_(ptr) #define _Pre_ptrdiff_count_(ptr) #define _Pre_readable_byte_size_(size) #define _Pre_readable_size_(size) #define _Pre_readonly_ #define _Pre_satisfies_(cond) #define _Pre_valid_ #define _Pre_valid_bytecap_(size) #define _Pre_valid_bytecap_c_(size) #define _Pre_valid_bytecap_x_(size) #define _Pre_valid_cap_(size) #define _Pre_valid_cap_c_(size) #define _Pre_valid_cap_x_(size) #define _Pre_writable_byte_size_(size) #define _Pre_writable_size_(size) #define _Pre_writeonly_ #define _Pre_z_ #define _Pre_z_bytecap_(size) #define _Pre_z_bytecap_c_(size) #define _Pre_z_bytecap_x_(size) #define _Pre_z_cap_(size) #define _Pre_z_cap_c_(size) #define _Pre_z_cap_x_(size) #define _Prepost_bytecount_(size) #define _Prepost_bytecount_c_(size) #define _Prepost_bytecount_x_(size) #define _Prepost_count_(size) #define _Prepost_count_c_(size) #define _Prepost_count_x_(size) #define _Prepost_opt_bytecount_(size) #define _Prepost_opt_bytecount_c_(size) #define _Prepost_opt_bytecount_x_(size) #define _Prepost_opt_count_(size) #define _Prepost_opt_count_c_(size) #define _Prepost_opt_count_x_(size) #define _Prepost_opt_valid_ #define _Prepost_opt_z_ #define _Prepost_valid_ #define _Prepost_z_ #define _Printf_format_string_ #define _Raises_SEH_exception_ #define _Readable_bytes_(size) #define _Readable_elements_(size) #define _Reserved_ #define _Result_nullonfailure_ #define _Result_zeroonfailure_ #define _Ret_ #define _Ret_bound_ #define _Ret_bytecap_(size) #define _Ret_bytecap_c_(size) #define _Ret_bytecap_x_(size) #define _Ret_bytecount_(size) #define _Ret_bytecount_c_(size) #define _Ret_bytecount_x_(size) #define _Ret_cap_(size) #define _Ret_cap_c_(size) #define _Ret_cap_x_(size) #define _Ret_count_(size) #define _Ret_count_c_(size) #define _Ret_count_x_(size) #define _Ret_maybenull_ #define _Ret_maybenull_z_ #define _Ret_notnull_ #define _Ret_null_ #define _Ret_opt_ #define _Ret_opt_bytecap_(size) #define _Ret_opt_bytecap_c_(size) #define _Ret_opt_bytecap_x_(size) #define _Ret_opt_bytecount_(size) #define _Ret_opt_bytecount_c_(size) #define _Ret_opt_bytecount_x_(size) #define _Ret_opt_cap_(size) #define _Ret_opt_cap_c_(size) #define _Ret_opt_cap_x_(size) #define _Ret_opt_count_(size) #define _Ret_opt_count_c_(size) #define _Ret_opt_count_x_(size) #define _Ret_opt_valid_ #define _Ret_opt_z_ #define _Ret_opt_z_bytecap_(size) #define _Ret_opt_z_bytecount_(size) #define _Ret_opt_z_cap_(size) #define _Ret_opt_z_count_(size) #define _Ret_range_(lb,ub) #define _Ret_valid_ #define _Ret_writes_(size) #define _Ret_writes_bytes_(size) #define _Ret_writes_bytes_maybenull_(size) #define _Ret_writes_bytes_to_(size,count) #define _Ret_writes_bytes_to_maybenull_(size,count) #define _Ret_writes_maybenull_(size) #define _Ret_writes_maybenull_z_(size) #define _Ret_writes_to_(size,count) #define _Ret_writes_to_maybenull_(size,count) #define _Ret_writes_z_(size) #define _Ret_z_ #define _Ret_z_bytecap_(size) #define _Ret_z_bytecount_(size) #define _Ret_z_cap_(size) #define _Ret_z_count_(size) #define _Return_type_success_(expr) #define _Scanf_format_string_ #define _Scanf_s_format_string_ #define _Struct_size_bytes_(size) #define _Success_(expr) #define _Unchanged_(e) #define _Use_decl_annotations_ #define _Valid_ #define _When_(expr, annos) #define _Writable_bytes_(size) #define _Writable_elements_(size) #define __inner_callback #define __inner_exceptthat #define __inner_typefix(ctype) /* * Dummy header annotations. * * These are typically defined in specstrings.h. * * Unfortunately these defines tend to clash with libstdc++ internal symbols. A solution is to ensure * that all needed libstdc++ headers are included before this one. * * See also: * - http://msdn.microsoft.com/en-us/library/aa383701.aspx * - http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/specstrings.h?view=markup */ #define __deref_out #define __deref_out_bcount(x) #define __deref_out_opt #define __ecount(x) #define __field_bcount(x) #define __field_ecount(x) #define __field_ecount_full(x) #define __field_ecount_opt(x) #define __in #define __in_bcount(x) #define __in_bcount_opt(x) #define __in_ecount(x) #define __in_ecount_opt(x) #define __in_opt #define __in_range(x,y) #define __in_z #define __in_z_opt #define __inout #define __inout_opt #define __maybenull #define __notnull #define __nullterminated #define __out #define __out_bcount(x) #define __out_bcount_full_opt(x) #define __out_bcount_opt(x) #define __out_ecount(x) #define __out_ecount_opt(x) #define __out_ecount_part_opt(x,y) #define __out_ecount_part_z_opt(x,y) #define __out_ecount_z(x) #define __out_opt #define __out_z #define __range(x,y) #define __success(x) #ifndef __inline #define __inline __inline__ #endif #ifndef DECLSPEC_DEPRECATED #define DECLSPEC_DEPRECATED #endif #ifndef DECLSPEC_NOVTABLE #define DECLSPEC_NOVTABLE #endif #ifndef DECLSPEC_NOTHROW #define DECLSPEC_NOTHROW #endif #ifndef COM_DECLSPEC_NOTHROW #define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW #endif #ifndef __MINGW64_VERSION_MAJOR #define INT8 signed char #define UINT8 unsigned char #define INT16 signed short #define UINT16 unsigned short #endif #endif /* __MINGW32__ */ tmpNnpnZF/dispatch/eglimports.hpp0000664000175000017500000000613212543167424016463 0ustar chrischris/************************************************************************** * * Copyright 2011 LunarG, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all EGL and client API includes. It can be included * directly, or indirectly through glimports.h. */ #pragma once #include #ifdef _GDI32_ /* Prevent __declspec(dllimport) attribute */ #undef KHRONOS_APICALL #define KHRONOS_APICALL #endif // EGL #include #include /* Prevent collision with Trace::Bool */ #undef Bool // OpenGL ES #include #include // OpenGL ES 2.0 // avoid conflicting with GL_NV_multisample_coverage #define GL_NV_coverage_sample #include "GLES2/gl2ext.h" // OpenGL ES 1.1 typedef int32_t GLfixed; typedef int32_t GLclampx; #ifndef GL_OES_compressed_paletted_texture #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif #ifndef GL_OES_point_size_array #define GL_POINT_SIZE_ARRAY_OES 0x8B9C #define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A #define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B #define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C #define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F #endif #undef _glext_h_ #include "GLES/glext.h" tmpNnpnZF/dispatch/dlopen.hpp0000664000175000017500000000432112543167424015555 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Provides access to real dlopen, as tracing libraries interpose it. */ #pragma once #include #include "os.hpp" /* * Invoke the true dlopen() function. */ static inline void * _dlopen(const char *filename, int flag) { typedef void * (*PFN_DLOPEN)(const char *, int); static PFN_DLOPEN dlopen_ptr = NULL; if (!dlopen_ptr) { #ifdef ANDROID /* Android does not have dlopen in libdl.so; instead, the * implementation is available in the dynamic linker itself. * Oddly enough, we still can interpose it, but need to use * RTLD_DEFAULT to get pointer to the original function. */ dlopen_ptr = (PFN_DLOPEN)dlsym(RTLD_DEFAULT, "dlopen"); #else dlopen_ptr = (PFN_DLOPEN)dlsym(RTLD_NEXT, "dlopen"); #endif if (!dlopen_ptr) { os::log("apitrace: error: failed to look up real dlopen\n"); return NULL; } } return dlopen_ptr(filename, flag); } tmpNnpnZF/dispatch/dxvaint.h0000664000175000017500000002144112543167424015413 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #ifndef DXVA2_E_NOT_INITIALIZED #define DXVA2_E_NOT_INITIALIZED ((HRESULT)0x80041000L) #endif #ifndef DXVA2_E_NEW_VIDEO_DEVICE #define DXVA2_E_NEW_VIDEO_DEVICE ((HRESULT)0x80041001L) #endif #ifndef DXVA2_E_VIDEO_DEVICE_LOCKED #define DXVA2_E_VIDEO_DEVICE_LOCKED ((HRESULT)0x80041002L) #endif #ifndef DXVA2_E_NOT_AVAILABLE #define DXVA2_E_NOT_AVAILABLE ((HRESULT)0x80041003L) #endif typedef struct _DXVA2_DECODEBUFFERDESC { IDirect3DSurface9 *pRenderTarget; DWORD CompressedBufferType; DWORD BufferIndex; DWORD DataOffset; DWORD DataSize; DWORD FirstMBaddress; DWORD NumMBsInBuffer; DWORD Width; DWORD Height; DWORD Stride; DWORD ReservedBits; PVOID pCipherCounter; } DXVA2_DECODEBUFFERDESC; typedef struct _DXVA2_DECODEEXECUTE { UINT NumCompBuffers; DXVA2_DECODEBUFFERDESC *pCompressedBuffers; } DXVA2_DECODEEXECUTE; typedef struct _DXVA2_VIDEOSAMPLE { REFERENCE_TIME Start; REFERENCE_TIME End; DXVA2_ExtendedFormat SampleFormat; DWORD SampleFlags; IDirect3DSurface9* SrcSurface; RECT SrcRect; RECT DstRect; DXVA2_AYUVSample8 Pal[16]; DXVA2_Fixed32 PlanarAlpha; } DXVA2_VIDEOSAMPLE; /** * See also: * - D3DDDIARG_VIDEOPROCESSBLT * - DXVA2_VideoProcessBltParams */ typedef struct _DXVA2_VIDEOPROCESSBLT { REFERENCE_TIME TargetFrame; RECT TargetRect; SIZE ConstrictionSize; DWORD StreamingFlags; DXVA2_AYUVSample16 BackgroundColor; DXVA2_ExtendedFormat DestFormat; DWORD DestFlags; DXVA2_ProcAmpValues ProcAmpValues; DXVA2_Fixed32 Alpha; DXVA2_FilterValues NoiseFilterLuma; DXVA2_FilterValues NoiseFilterChroma; DXVA2_FilterValues DetailFilterLuma; DXVA2_FilterValues DetailFilterChroma; DXVA2_VIDEOSAMPLE *pSrcSurfaces; UINT NumSrcSurfaces; } DXVA2_VIDEOPROCESSBLT; typedef struct _DXVA2_DECODEBUFFERINFO DXVA2_DECODEBUFFERINFO; /* XXX */ typedef struct _DXVA2_EXTENSIONEXECUTE DXVA2_EXTENSIONEXECUTE; /* XXX */ static const GUID IID_IDirect3DDecodeDevice9 = {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; /* XXX */ static const GUID IID_IDirect3DVideoProcessDevice9 = {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} /* XXX */; static const GUID IID_IDirect3DDXVAExtensionDevice9 = {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; /* XXX */ static const GUID IID_IDirect3DDxva2Container9 = {0x126D0349,0x4787,0x4AA6,{0x8E,0x1B,0x40,0xC1,0x77,0xC6,0x0A,0x01}}; typedef struct DECLSPEC_ALIGN(16) _DXVA2_PVP_KEY128 { BYTE Data[16]; } DXVA2_PVP_KEY128; typedef struct _DXVA2_PVP_SETKEY { DXVA2_PVP_KEY128 ContentKey; } DXVA2_PVP_SETKEY; class IDirect3DDecodeDevice9 : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE DecodeBeginFrame(DXVA2_PVP_SETKEY *pPVPSetKey) = 0; virtual HRESULT STDMETHODCALLTYPE DecodeEndFrame(HANDLE *pHandleComplete) = 0; virtual HRESULT STDMETHODCALLTYPE DecodeSetRenderTarget(IDirect3DSurface9 *pRenderTarget) = 0; virtual HRESULT STDMETHODCALLTYPE DecodeExecute(DXVA2_DECODEEXECUTE /* const */ *pExecuteParams) = 0; }; class IDirect3DVideoProcessDevice9 : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE VideoProcessBeginFrame(void) = 0; virtual HRESULT STDMETHODCALLTYPE VideoProcessEndFrame(HANDLE *pHandleComplete) = 0; virtual HRESULT STDMETHODCALLTYPE VideoProcessSetRenderTarget(IDirect3DSurface9 *pRenderTarget) = 0; virtual HRESULT STDMETHODCALLTYPE VideoProcessBlt(DXVA2_VIDEOPROCESSBLT /* const */ *pData) = 0; }; class IDirect3DDXVAExtensionDevice9 : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE ExtensionExecute(DXVA2_EXTENSIONEXECUTE *pData) = 0; }; class IDirect3DDxva2Container9 : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE CreateSurface(UINT Width, UINT Height, UINT BackBuffers, D3DFORMAT Format, D3DPOOL Pool, DWORD Usage, DWORD DxvaType, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle) = 0; virtual HRESULT STDMETHODCALLTYPE VidToSysBlt(IDirect3DSurface9 *pSourceSurface, RECT *pSourceRect, IDirect3DSurface9 *pDestSurface, RECT *pDestRect) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeGuidCount(UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeGuids(UINT Count, GUID *pGuids) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeRenderTargetFormatCount(REFGUID Guid, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeRenderTargets(REFGUID Guid, UINT Count, D3DFORMAT *pFormats) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeCompressedBufferCount(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeCompressedBuffers(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT Count, DXVA2_DECODEBUFFERINFO *pBufferInfo) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeConfigurationCount(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetDecodeConfigurations(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT Count, DXVA2_ConfigPictureDecode *pConfigs) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDecodeDevice(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, DXVA2_ConfigPictureDecode const *pConfig, IDirect3DSurface9 * *ppDecoderRenderTargets, UINT NumSurfaces, IDirect3DDecodeDevice9 ** ppDecode) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorDeviceGuidCount(const DXVA2_VideoDesc *pVideoDesc, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorDeviceGuids(const DXVA2_VideoDesc *pVideoDesc, UINT Count, GUID *pGuids) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorCaps(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, DXVA2_VideoProcessorCaps *pCaps) = 0; virtual HRESULT STDMETHODCALLTYPE GetProcAmpRange(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, UINT ProcAmpCap, DXVA2_ValueRange *pRange) = 0; virtual HRESULT STDMETHODCALLTYPE GetFilterPropertyRange(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, UINT FilterSetting, DXVA2_ValueRange *pRange) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorRenderTargetCount(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorRenderTargets(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, UINT Count, D3DFORMAT *pFormats) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorSubStreamFormatCount(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetVideoProcessorSubStreamFormats(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, UINT Count, D3DFORMAT *pFormats) = 0; virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessDevice(REFGUID Guid, const DXVA2_VideoDesc *pVideoDesc, D3DFORMAT Format, UINT, IDirect3DVideoProcessDevice9 * * ppVideoProcessDevice) = 0; virtual HRESULT STDMETHODCALLTYPE GetExtensionGuidCount(DWORD Extension, UINT *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetExtensionGuids(DWORD Extension, UINT Count, GUID *pGuids) = 0; virtual HRESULT STDMETHODCALLTYPE GetExtensionCaps(REFGUID Guid, UINT, void *, UINT, void *, UINT) = 0; virtual HRESULT STDMETHODCALLTYPE CreateExtensionDevice(REFGUID Guid, void *, UINT, IDirect3DDXVAExtensionDevice9 ** ppExtension) = 0; }; tmpNnpnZF/dispatch/README.markdown0000664000175000017500000000063612543167424016271 0ustar chrischrisThe dispatch layer objective is to resolve the addresses of public and private symbols from DLLs / shared objects and dispatch calls to them. It used both by the tracing wrappers (to dispatch the intercepted calls to their true counterparts) and when replaying traces (to dispatch the calls recorded on the file). Most of the code is generated from dispatch.py script, which is then derived for particular APIs. tmpNnpnZF/dispatch/d3d10imports.hpp0000664000175000017500000000273612543167424016535 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all D3D10 includes, and respective OS dependent headers. */ #pragma once #include #include "compat.h" #include #include "d3derr.hpp" #include "dxgiint.h" tmpNnpnZF/dispatch/glproc.py0000664000175000017500000004075212543167424015433 0ustar chrischris########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Generated an header, glproc.hpp, which does pretty much what GLEW does, but covers all the functions we support. """ import sys from dispatch import Dispatcher import specs.stdapi as stdapi from specs.glapi import glapi from specs.glxapi import glxapi from specs.wglapi import wglapi from specs.cglapi import cglapi from specs.eglapi import eglapi # See http://www.opengl.org/registry/ABI/ public_symbols = set([ # GL 1.2 and ARB_multitexture "glAccum", "glAlphaFunc", "glAreTexturesResident", "glArrayElement", "glBegin", "glBindTexture", "glBitmap", "glBlendFunc", "glCallList", "glCallLists", "glClear", "glClearAccum", "glClearColor", "glClearDepth", "glClearIndex", "glClearStencil", "glClipPlane", "glColor3b", "glColor3bv", "glColor3d", "glColor3dv", "glColor3f", "glColor3fv", "glColor3i", "glColor3iv", "glColor3s", "glColor3sv", "glColor3ub", "glColor3ubv", "glColor3ui", "glColor3uiv", "glColor3us", "glColor3usv", "glColor4b", "glColor4bv", "glColor4d", "glColor4dv", "glColor4f", "glColor4fv", "glColor4i", "glColor4iv", "glColor4s", "glColor4sv", "glColor4ub", "glColor4ubv", "glColor4ui", "glColor4uiv", "glColor4us", "glColor4usv", "glColorMask", "glColorMaterial", "glColorPointer", "glCopyPixels", "glCopyTexImage1D", "glCopyTexImage2D", "glCopyTexSubImage1D", "glCopyTexSubImage2D", "glCullFace", "glDeleteLists", "glDeleteTextures", "glDepthFunc", "glDepthMask", "glDepthRange", "glDisable", "glDisableClientState", "glDrawArrays", "glDrawBuffer", "glDrawElements", "glDrawPixels", "glEdgeFlag", "glEdgeFlagPointer", "glEdgeFlagv", "glEnable", "glEnableClientState", "glEnd", "glEndList", "glEvalCoord1d", "glEvalCoord1dv", "glEvalCoord1f", "glEvalCoord1fv", "glEvalCoord2d", "glEvalCoord2dv", "glEvalCoord2f", "glEvalCoord2fv", "glEvalMesh1", "glEvalMesh2", "glEvalPoint1", "glEvalPoint2", "glFeedbackBuffer", "glFinish", "glFlush", "glFogf", "glFogfv", "glFogi", "glFogiv", "glFrontFace", "glFrustum", "glGenLists", "glGenTextures", "glGetBooleanv", "glGetClipPlane", "glGetDoublev", "glGetError", "glGetFloatv", "glGetIntegerv", "glGetLightfv", "glGetLightiv", "glGetMapdv", "glGetMapfv", "glGetMapiv", "glGetMaterialfv", "glGetMaterialiv", "glGetPixelMapfv", "glGetPixelMapuiv", "glGetPixelMapusv", "glGetPointerv", "glGetPolygonStipple", "glGetString", "glGetTexEnvfv", "glGetTexEnviv", "glGetTexGendv", "glGetTexGenfv", "glGetTexGeniv", "glGetTexImage", "glGetTexLevelParameterfv", "glGetTexLevelParameteriv", "glGetTexParameterfv", "glGetTexParameteriv", "glHint", "glIndexMask", "glIndexPointer", "glIndexd", "glIndexdv", "glIndexf", "glIndexfv", "glIndexi", "glIndexiv", "glIndexs", "glIndexsv", "glIndexub", "glIndexubv", "glInitNames", "glInterleavedArrays", "glIsEnabled", "glIsList", "glIsTexture", "glLightModelf", "glLightModelfv", "glLightModeli", "glLightModeliv", "glLightf", "glLightfv", "glLighti", "glLightiv", "glLineStipple", "glLineWidth", "glListBase", "glLoadIdentity", "glLoadMatrixd", "glLoadMatrixf", "glLoadName", "glLogicOp", "glMap1d", "glMap1f", "glMap2d", "glMap2f", "glMapGrid1d", "glMapGrid1f", "glMapGrid2d", "glMapGrid2f", "glMaterialf", "glMaterialfv", "glMateriali", "glMaterialiv", "glMatrixMode", "glMultMatrixd", "glMultMatrixf", "glNewList", "glNormal3b", "glNormal3bv", "glNormal3d", "glNormal3dv", "glNormal3f", "glNormal3fv", "glNormal3i", "glNormal3iv", "glNormal3s", "glNormal3sv", "glNormalPointer", "glOrtho", "glPassThrough", "glPixelMapfv", "glPixelMapuiv", "glPixelMapusv", "glPixelStoref", "glPixelStorei", "glPixelTransferf", "glPixelTransferi", "glPixelZoom", "glPointSize", "glPolygonMode", "glPolygonOffset", "glPolygonStipple", "glPopAttrib", "glPopClientAttrib", "glPopMatrix", "glPopName", "glPrioritizeTextures", "glPushAttrib", "glPushClientAttrib", "glPushMatrix", "glPushName", "glRasterPos2d", "glRasterPos2dv", "glRasterPos2f", "glRasterPos2fv", "glRasterPos2i", "glRasterPos2iv", "glRasterPos2s", "glRasterPos2sv", "glRasterPos3d", "glRasterPos3dv", "glRasterPos3f", "glRasterPos3fv", "glRasterPos3i", "glRasterPos3iv", "glRasterPos3s", "glRasterPos3sv", "glRasterPos4d", "glRasterPos4dv", "glRasterPos4f", "glRasterPos4fv", "glRasterPos4i", "glRasterPos4iv", "glRasterPos4s", "glRasterPos4sv", "glReadBuffer", "glReadPixels", "glRectd", "glRectdv", "glRectf", "glRectfv", "glRecti", "glRectiv", "glRects", "glRectsv", "glRenderMode", "glRotated", "glRotatef", "glScaled", "glScalef", "glScissor", "glSelectBuffer", "glShadeModel", "glStencilFunc", "glStencilMask", "glStencilOp", "glTexCoord1d", "glTexCoord1dv", "glTexCoord1f", "glTexCoord1fv", "glTexCoord1i", "glTexCoord1iv", "glTexCoord1s", "glTexCoord1sv", "glTexCoord2d", "glTexCoord2dv", "glTexCoord2f", "glTexCoord2fv", "glTexCoord2i", "glTexCoord2iv", "glTexCoord2s", "glTexCoord2sv", "glTexCoord3d", "glTexCoord3dv", "glTexCoord3f", "glTexCoord3fv", "glTexCoord3i", "glTexCoord3iv", "glTexCoord3s", "glTexCoord3sv", "glTexCoord4d", "glTexCoord4dv", "glTexCoord4f", "glTexCoord4fv", "glTexCoord4i", "glTexCoord4iv", "glTexCoord4s", "glTexCoord4sv", "glTexCoordPointer", "glTexEnvf", "glTexEnvfv", "glTexEnvi", "glTexEnviv", "glTexGend", "glTexGendv", "glTexGenf", "glTexGenfv", "glTexGeni", "glTexGeniv", "glTexImage1D", "glTexImage2D", "glTexParameterf", "glTexParameterfv", "glTexParameteri", "glTexParameteriv", "glTexSubImage1D", "glTexSubImage2D", "glTranslated", "glTranslatef", "glVertex2d", "glVertex2dv", "glVertex2f", "glVertex2fv", "glVertex2i", "glVertex2iv", "glVertex2s", "glVertex2sv", "glVertex3d", "glVertex3dv", "glVertex3f", "glVertex3fv", "glVertex3i", "glVertex3iv", "glVertex3s", "glVertex3sv", "glVertex4d", "glVertex4dv", "glVertex4f", "glVertex4fv", "glVertex4i", "glVertex4iv", "glVertex4s", "glVertex4sv", "glVertexPointer", "glViewport", # GLX 1.3 and GLX_ARB_get_proc_address "glXChooseVisual", "glXCreateContext", "glXDestroyContext", "glXMakeCurrent", "glXCopyContext", "glXSwapBuffers", "glXCreateGLXPixmap", "glXDestroyGLXPixmap", "glXQueryExtension", "glXQueryVersion", "glXIsDirect", "glXGetConfig", "glXGetCurrentContext", "glXGetCurrentDrawable", "glXWaitGL", "glXWaitX", "glXUseXFont", "glXQueryExtensionsString", "glXQueryServerString", "glXGetClientString", "glXGetCurrentDisplay", "glXChooseFBConfig", "glXGetFBConfigAttrib", "glXGetFBConfigs", "glXGetVisualFromFBConfig", "glXCreateWindow", "glXDestroyWindow", "glXCreatePixmap", "glXDestroyPixmap", "glXCreatePbuffer", "glXDestroyPbuffer", "glXQueryDrawable", "glXCreateNewContext", "glXMakeContextCurrent", "glXGetCurrentReadDrawable", "glXQueryContext", "glXSelectEvent", "glXGetSelectedEvent", "glXGetProcAddressARB", "glXGetProcAddress", # WGL #"glDebugEntry", "wglChoosePixelFormat", "wglCopyContext", "wglCreateContext", "wglCreateLayerContext", "wglDeleteContext", "wglDescribeLayerPlane", "wglDescribePixelFormat", "wglGetCurrentContext", "wglGetCurrentDC", "wglGetDefaultProcAddress", "wglGetLayerPaletteEntries", "wglGetPixelFormat", "wglGetProcAddress", "wglMakeCurrent", "wglRealizeLayerPalette", "wglSetLayerPaletteEntries", "wglSetPixelFormat", "wglShareLists", "wglSwapBuffers", "wglSwapLayerBuffers", "wglSwapMultipleBuffers", "wglUseFontBitmapsA", "wglUseFontBitmapsW", "wglUseFontOutlinesA", "wglUseFontOutlinesW", ]) # EGL 1.4 public_symbols.update([ "eglBindAPI", "eglBindTexImage", "eglChooseConfig", "eglCopyBuffers", "eglCreateContext", "eglCreatePbufferFromClientBuffer", "eglCreatePbufferSurface", "eglCreatePixmapSurface", "eglCreateWindowSurface", "eglDestroyContext", "eglDestroySurface", "eglGetConfigAttrib", "eglGetConfigs", "eglGetCurrentContext", "eglGetCurrentDisplay", "eglGetCurrentSurface", "eglGetDisplay", "eglGetError", "eglGetProcAddress", "eglInitialize", "eglMakeCurrent", "eglQueryAPI", "eglQueryContext", "eglQueryString", "eglQuerySurface", "eglReleaseTexImage", "eglReleaseThread", "eglSurfaceAttrib", "eglSwapBuffers", "eglSwapInterval", "eglTerminate", "eglWaitClient", "eglWaitGL", "eglWaitNative", ]) class GlDispatcher(Dispatcher): def isFunctionPublic(self, module, function): return function.name in public_symbols or function.name.startswith('CGL') def getProcAddressName(self, module, function): if self.isFunctionPublic(module, function): return '_getPublicProcAddress' else: return '_getPrivateProcAddress' def failFunction(self, function): # We fake these when they are not available if sys.platform == 'darwin': # Fallback to EXT_debug_label on MacOSX, some enums need to be translated. if function.name == 'glObjectLabel': print r' if (translateDebugLabelIdentifier(identifier)) {' print r' _glLabelObjectEXT(identifier, name, length < 0 ? 0 : length, length == 0 ? "" : label);' print r' return;' print r' }' if function.name == 'glGetObjectLabel': print r' if (translateDebugLabelIdentifier(identifier)) {' print r' _glGetObjectLabelEXT(identifier, name, bufSize, length, label);' print r' return;' print r' }' if function.name in ( # GL_KHR_debug 'glDebugMessageControl', 'glDebugMessageInsert', 'glDebugMessageCallback', 'glPushDebugGroup', 'glPopDebugGroup', 'glObjectLabel', 'glObjectPtrLabel', # GL_ARB_debug_output 'glDebugMessageControlARB', 'glDebugMessageInsertARB', 'glDebugMessageCallbackARB', # GL_AMD_debug_output 'glDebugMessageEnableAMD', 'glDebugMessageInsertAMD', 'glDebugMessageCallbackAMD', # GL_EXT_debug_label 'glLabelObjectEXT', # GL_EXT_debug_marker 'glInsertEventMarkerEXT', 'glPushGroupMarkerEXT', 'glPopGroupMarkerEXT', ): return if function.name in ('glGetObjectLabel', 'glGetObjectPtrLabel', 'glGetObjectLabelEXT'): print r' if (length != 0) *length = 0;' print r' if (label != 0 && bufSize > 0) *label = 0;' return if function.name in ('glGetDebugMessageLog', 'glGetDebugMessageLogARB'): print r' if (sources != 0) *sources = 0;' print r' if (types != 0) *types = 0;' print r' if (ids != 0) *ids = 0;' print r' if (severities != 0) *severities = 0;' print r' if (lengths != 0) *lengths = 0;' print r' if (messageLog != 0 && bufsize > 0) *messageLog = 0;' print r' return 0;' return if function.name in ('glGetDebugMessageLogAMD'): print r' if (categories != 0) *categories = 0;' print r' if (ids != 0) *ids = 0;' print r' if (severities != 0) *severities = 0;' print r' if (lengths != 0) *lengths = 0;' print r' if (message != 0 && bufsize > 0) *message = 0;' print r' return 0;' return Dispatcher.failFunction(self, function) if __name__ == '__main__': decl, impl = sys.argv[1:] sys.stdout = open(decl, 'wt') print print '#pragma once' print print '#include "glimports.hpp"' print print '#if defined(_WIN32)' print 'extern HMODULE _libGlHandle;' print '#else' print 'extern void * _libGlHandle;' print '#endif' print print 'void * _getPublicProcAddress(const char *procName);' print 'void * _getPrivateProcAddress(const char *procName);' print dispatcher = GlDispatcher() print dispatcher.dispatchModuleDecl(eglapi) print print '#if defined(_WIN32)' print dispatcher.dispatchModuleDecl(wglapi) print print '#elif defined(__APPLE__)' print dispatcher.dispatchModuleDecl(cglapi) print print '#elif defined(HAVE_X11)' print dispatcher.dispatchModuleDecl(glxapi) print print '#endif' print dispatcher.dispatchModuleDecl(glapi) print sys.stdout = open(impl, 'wt') print print '#include "glproc.hpp"' print '#include "os.hpp"' print dispatcher = GlDispatcher() print dispatcher.dispatchModuleImpl(eglapi) print print '#if defined(_WIN32)' print dispatcher.dispatchModuleImpl(wglapi) print print '#elif defined(__APPLE__)' print print 'static inline bool' print 'translateDebugLabelIdentifier(GLenum & identifier)' print '{' print ' switch (identifier) {' print ' case GL_TEXTURE:' print ' case GL_FRAMEBUFFER:' print ' case GL_RENDERBUFFER:' print ' case GL_SAMPLER:' print ' case GL_TRANSFORM_FEEDBACK:' print ' return true;' print ' case GL_BUFFER:' print ' identifier = GL_BUFFER_OBJECT_EXT;' print ' return true;' print ' case GL_SHADER:' print ' identifier = GL_SHADER_OBJECT_EXT;' print ' return true;' print ' case GL_PROGRAM:' print ' identifier = GL_PROGRAM_OBJECT_EXT;' print ' return true;' print ' case GL_VERTEX_ARRAY:' print ' identifier = GL_VERTEX_ARRAY_OBJECT_EXT;' print ' return true;' print ' case GL_QUERY:' print ' identifier = GL_QUERY_OBJECT_EXT;' print ' return true;' print ' case GL_PROGRAM_PIPELINE:' print ' identifier = GL_PROGRAM_PIPELINE_OBJECT_EXT;' print ' return true;' print ' default:' print ' return false;' print ' }' print '}' print dispatcher.dispatchModuleImpl(cglapi) print print '#elif defined(HAVE_X11)' print dispatcher.dispatchModuleImpl(glxapi) print print '#endif' print dispatcher.dispatchModuleImpl(glapi) print tmpNnpnZF/dispatch/CMakeLists.txt0000664000175000017500000000263012543167424016324 0ustar chrischris############################################################################## # Dispatch set (CMAKE_INCLUDE_CURRENT_DIR ON) add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glproc.py ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.cpp DEPENDS glproc.py dispatch.py ${CMAKE_SOURCE_DIR}/specs/wglapi.py ${CMAKE_SOURCE_DIR}/specs/glxapi.py ${CMAKE_SOURCE_DIR}/specs/cglapi.py ${CMAKE_SOURCE_DIR}/specs/eglapi.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) # Wrap glproc.hpp as a target to prevent the command from being executed # multiple times simulatenously, when the targets that depend on it are built # in parallel. add_custom_target (glproc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.cpp ) add_convenience_library (glproc_gl EXCLUDE_FROM_ALL glproc_gl.cpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.cpp ) add_dependencies (glproc_gl glproc) if (ENABLE_EGL) add_convenience_library (glproc_egl EXCLUDE_FROM_ALL glproc_egl.cpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.cpp ) add_dependencies (glproc_egl glproc) endif () tmpNnpnZF/dispatch/dxgiint.h0000664000175000017500000000510612543167424015404 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "compat.h" #include static const GUID IID_IDXGISwapChainDWM = {0xF69F223B,0x45D3,0x4AA0,{0x98,0xC8,0xC4,0x0C,0x2B,0x23,0x10,0x29}}; struct IDXGISwapChainDWM: public IDXGIDeviceSubObject { virtual HRESULT STDMETHODCALLTYPE Present(UINT SyncInterval, UINT Flags) = 0; virtual HRESULT STDMETHODCALLTYPE GetBuffer(UINT Buffer, REFIID riid, void **ppSurface) = 0; virtual HRESULT STDMETHODCALLTYPE GetDesc(DXGI_SWAP_CHAIN_DESC *pDesc) = 0; virtual HRESULT STDMETHODCALLTYPE ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags) = 0; virtual HRESULT STDMETHODCALLTYPE ResizeTarget(const DXGI_MODE_DESC *pNewTargetParameters) = 0; virtual HRESULT STDMETHODCALLTYPE GetContainingOutput(IDXGIOutput **ppOutput) = 0; virtual HRESULT STDMETHODCALLTYPE GetFrameStatistics(DXGI_FRAME_STATISTICS *pStats) = 0; virtual HRESULT STDMETHODCALLTYPE GetLastPresentCount(UINT *pLastPresentCount) = 0; }; static const GUID IID_IDXGIFactoryDWM = {0x713F394E,0x92CA,0x47E7,{0xAB,0x81,0x11,0x59,0xC2,0x79,0x1E,0x54}}; struct IDXGIFactoryDWM: public IUnknown { virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(IUnknown *pDevice, DXGI_SWAP_CHAIN_DESC *pDesc, IDXGIOutput *pOutput, IDXGISwapChainDWM **ppSwapChain) = 0; }; tmpNnpnZF/dispatch/d3d11imports.hpp0000664000175000017500000000273612543167424016536 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all D3D11 includes, and respective OS dependent headers. */ #pragma once #include #include "compat.h" #include #include "d3derr.hpp" #include "dxgiint.h" tmpNnpnZF/dispatch/d3d9imports.hpp0000664000175000017500000000537612543167424016470 0ustar chrischris/************************************************************************** * * Copyright 2011 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all D3D9 includes, and respective OS dependent headers. */ #pragma once #include #include "compat.h" #include #ifndef D3DFMT_A2B10G10R10_XR_BIAS #define D3DFMT_A2B10G10R10_XR_BIAS 119 #endif #ifndef D3DFMT_ATI1N #define D3DFMT_ATI1N ((D3DFORMAT)MAKEFOURCC('A','T','I','1')) #endif #ifndef D3DFMT_ATI2N #define D3DFMT_ATI2N ((D3DFORMAT)MAKEFOURCC('A','T','I','2')) #endif #ifndef D3DFMT_AYUV #define D3DFMT_AYUV ((D3DFORMAT)MAKEFOURCC('A','Y','U','V')) #endif #ifndef D3DFMT_DF16 #define D3DFMT_DF16 ((D3DFORMAT)MAKEFOURCC('D','F','1','6')) #endif #ifndef D3DFMT_DF24 #define D3DFMT_DF24 ((D3DFORMAT)MAKEFOURCC('D','F','2','4')) #endif #ifndef D3DFMT_INTZ #define D3DFMT_INTZ ((D3DFORMAT)MAKEFOURCC('I','N','T','Z')) #endif #ifndef D3DFMT_NULL #define D3DFMT_NULL ((D3DFORMAT)MAKEFOURCC('N','U','L','L')) #endif #ifndef D3DFMT_NV12 #define D3DFMT_NV12 ((D3DFORMAT)MAKEFOURCC('N','V','1','2')) #endif #ifndef D3DFMT_YV12 #define D3DFMT_YV12 ((D3DFORMAT)MAKEFOURCC('Y','V','1','2')) #endif #ifndef D3DFMT_RAWZ #define D3DFMT_RAWZ ((D3DFORMAT)MAKEFOURCC('R','A','W','Z')) #endif #ifndef D3DUSAGE_TEXTAPI #define D3DUSAGE_TEXTAPI 0x10000000L #endif #ifndef D3DUSAGE_RESTRICTED_CONTENT #define D3DUSAGE_RESTRICTED_CONTENT 0x00000800L #endif #ifndef D3DUSAGE_RESTRICT_SHARED_RESOURCE #define D3DUSAGE_RESTRICT_SHARED_RESOURCE 0x00002000L #endif #ifndef D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER #define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER 0x00001000L #endif tmpNnpnZF/dispatch/.gitignore0000664000175000017500000000002612543167424015551 0ustar chrischrisglproc.hpp glproc.cpp tmpNnpnZF/dispatch/d3dimports.hpp0000664000175000017500000000342112543167424016364 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Central place for all DDraw/D3D includes, and respective OS dependent headers. */ #pragma once #include #include "compat.h" #include #include #ifndef DDBLT_EXTENDED_FLAGS #define DDBLT_EXTENDED_FLAGS 0x40000000l #endif #ifndef DDBLT_EXTENDED_LINEAR_CONTENT #define DDBLT_EXTENDED_LINEAR_CONTENT 0x00000004l #endif #ifndef D3DLIGHT_PARALLELPOINT #define D3DLIGHT_PARALLELPOINT (D3DLIGHTTYPE)4 #endif #ifndef D3DLIGHT_GLSPOT #define D3DLIGHT_GLSPOT (D3DLIGHTTYPE)5 #endif tmpNnpnZF/dispatch/glproc_gl.cpp0000664000175000017500000001264112543167424016243 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "glproc.hpp" #include "os.hpp" #if !defined(_WIN32) #include // for symlink #include "dlopen.hpp" #endif /* * Handle to the true OpenGL library. */ #if defined(_WIN32) HMODULE _libGlHandle = NULL; #else void *_libGlHandle = NULL; #endif #if defined(_WIN32) void * _getPublicProcAddress(const char *procName) { if (!_libGlHandle) { char szDll[MAX_PATH] = {0}; if (!GetSystemDirectoryA(szDll, MAX_PATH)) { return NULL; } strcat(szDll, "\\opengl32.dll"); _libGlHandle = LoadLibraryA(szDll); if (!_libGlHandle) { os::log("apitrace: error: couldn't load %s\n", szDll); return NULL; } } return (void *)GetProcAddress(_libGlHandle, procName); } void * _getPrivateProcAddress(const char *procName) { return (void *)_wglGetProcAddress(procName); } #elif defined(__APPLE__) /* * Path to the true OpenGL framework */ static const char *libgl_filename = "/System/Library/Frameworks/OpenGL.framework/OpenGL"; /* * Lookup a libGL symbol */ void * _libgl_sym(const char *symbol) { void *result; if (!_libGlHandle) { /* * Unfortunately we can't just dlopen the true dynamic library because * DYLD_LIBRARY_PATH/DYLD_FRAMEWORK_PATH take precedence, even for * absolute paths. So we create a temporary symlink, and dlopen that * instead. */ char temp_filename[] = "/tmp/tmp.XXXXXX"; if (mktemp(temp_filename) != NULL) { if (symlink(libgl_filename, temp_filename) == 0) { _libGlHandle = dlopen(temp_filename, RTLD_LOCAL | RTLD_NOW | RTLD_FIRST); remove(temp_filename); } } if (!_libGlHandle) { os::log("apitrace: error: couldn't load %s\n", libgl_filename); os::abort(); return NULL; } } result = dlsym(_libGlHandle, symbol); #if 0 if (result && result == dlsym(RTLD_SELF, symbol)) { os::log("apitrace: error: symbol lookup recursion\n"); os::abort(); return NULL; } #endif return result; } void * _getPublicProcAddress(const char *procName) { return _libgl_sym(procName); } void * _getPrivateProcAddress(const char *procName) { return _libgl_sym(procName); } #else static inline void logSymbol(const char *name, void *ptr) { if (0) { if (ptr) { Dl_info info; if (ptr && dladdr(ptr, &info)) { os::log("apitrace: %s -> \"%s\"\n", name, info.dli_fname); } } else { os::log("apitrace: %s -> NULL\n", name); } } } /* * Lookup a libGL symbol */ void * _libgl_sym(const char *symbol) { void *result; if (!_libGlHandle) { /* * The app doesn't directly link against libGL.so, nor does it directly * dlopen it. So we have to load it ourselves. */ const char * libgl_filename = getenv("TRACE_LIBGL"); if (!libgl_filename) { /* * Try to use whatever libGL.so the library is linked against. */ result = dlsym(RTLD_NEXT, symbol); if (result) { _libGlHandle = RTLD_NEXT; return result; } libgl_filename = "libGL.so.1"; } /* * It would have been preferable to use RTLD_LOCAL to ensure that the * application can never access libGL.so symbols directly, but this * won't work, given libGL.so often loads a driver specific SO and * exposes symbols to it. */ _libGlHandle = _dlopen(libgl_filename, RTLD_GLOBAL | RTLD_LAZY); if (!_libGlHandle) { os::log("apitrace: error: couldn't find libGL.so\n"); return NULL; } } result = dlsym(_libGlHandle, symbol); logSymbol(symbol, result); return result; } void * _getPublicProcAddress(const char *procName) { return _libgl_sym(procName); } void * _getPrivateProcAddress(const char *procName) { return (void *)_glXGetProcAddressARB((const GLubyte *)procName); } #endif tmpNnpnZF/gui/0000775000175000017500000000000012543167424012550 5ustar chrischristmpNnpnZF/gui/trimprocess.cpp0000664000175000017500000000473112543167424015633 0ustar chrischris#include "trimprocess.h" #include "apitrace.h" #include #include #include #include TrimProcess::TrimProcess(QObject *parent) : QObject(parent) { m_process = new QProcess(this); connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(trimFinished())); connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(trimError(QProcess::ProcessError))); } TrimProcess::~TrimProcess() { } void TrimProcess::trimFinished() { // consume verbose output spew QByteArray outputStrings = m_process->readAllStandardOutput(); QByteArray errorStrings = m_process->readAllStandardError(); #if 0 qDebug()<<"trim finished on " << m_trimPath; qDebug()<<"\terr = "<start(QLatin1String("apitrace"), arguments); } int TrimProcess::trimIndex() { return m_trimIndex; } void TrimProcess::setTrimIndex(int trimIndex) { m_trimIndex = trimIndex; updateTrimPath(); } void TrimProcess::setTracePath(const QString &str) { m_tracePath = str; updateTrimPath(); } QString TrimProcess::tracePath() const { return m_tracePath; } void TrimProcess::updateTrimPath() { QFileInfo fi(m_tracePath); QString baseName = fi.baseName(); QString path = fi.path(); QString format = QString::fromLatin1("%1/%2.%3.trim.trace"); m_trimPath = format .arg(path) .arg(baseName) .arg(m_trimIndex); } #include "trimprocess.moc" tmpNnpnZF/gui/jumpwidget.cpp0000664000175000017500000000201412543167424015430 0ustar chrischris#include "jumpwidget.h" #include #include JumpWidget::JumpWidget(QWidget *parent ) : QWidget(parent) { m_ui.setupUi(this); connect(m_ui.jumpButton, SIGNAL(clicked()), SLOT(slotJump())); connect(m_ui.spinBox, SIGNAL(editingFinished()), SLOT(slotJump())); connect(m_ui.cancelButton, SIGNAL(clicked()), SLOT(slotCancel())); installEventFilter(this); } void JumpWidget::slotJump() { if (isVisible()) { emit jumpTo(m_ui.spinBox->value()); } hide(); } void JumpWidget::slotCancel() { hide(); } void JumpWidget::showEvent(QShowEvent *event) { m_ui.spinBox->setFocus(Qt::ShortcutFocusReason); return QWidget::showEvent(event); } bool JumpWidget::eventFilter(QObject *object, QEvent* event) { if (event->type() == QEvent::KeyPress) { if ((static_cast(event))->key() == Qt::Key_Escape) { hide(); } } return QWidget::eventFilter(object, event); } #include "jumpwidget.moc" tmpNnpnZF/gui/qubjson.cpp0000664000175000017500000001543612543167424014746 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "qubjson.h" #include #include #include #include "ubjson.hpp" using namespace ubjson; static Marker readMarker(QDataStream &stream) { if (stream.atEnd()) { return MARKER_EOF; } quint8 byte; stream >> byte; return static_cast(byte); } static int8_t readInt8(QDataStream &stream) { qint8 i; stream >> i; return i; } static uint8_t readUInt8(QDataStream &stream) { quint8 u; stream >> u; return u; } static int16_t readInt16(QDataStream &stream) { qint16 i; stream >> i; return i; } static int32_t readInt32(QDataStream &stream) { qint32 i; stream >> i; return i; } static int64_t readInt64(QDataStream &stream) { qint64 i; stream >> i; return i; } static float readFloat32(QDataStream &stream) { float f; stream.setFloatingPointPrecision(QDataStream::SinglePrecision); stream >> f; return f; } static double readFloat64(QDataStream &stream) { double f; stream.setFloatingPointPrecision(QDataStream::DoublePrecision); stream >> f; return f; } static int readSize(QDataStream &stream, Marker type) { switch (type) { case MARKER_INT8: { int8_t size = readInt8(stream); Q_ASSERT(size >= 0); return size; } case MARKER_UINT8: return readUInt8(stream); case MARKER_INT16: { int16_t size = readInt16(stream); Q_ASSERT(size >= 0); return size; } case MARKER_INT32: { int32_t size = readInt32(stream); Q_ASSERT(size >= 0); return size; } case MARKER_INT64: { int64_t size = readInt64(stream); Q_ASSERT(size >= 0); Q_ASSERT_X(size <= INT_MAX, "qubjson::readSize", "size too large (https://github.com/apitrace/apitrace/issues/343)"); return size; } default: Q_UNIMPLEMENTED(); case MARKER_EOF: return 0; } } static QString readChar(QDataStream &stream) { qint8 c; stream >> c; Q_ASSERT(c >= 0); return QChar(c); } static int readSize(QDataStream &stream) { Marker type = readMarker(stream); return readSize(stream, type); } static QString readString(QDataStream &stream, int size) { char *buf = new char [size]; stream.readRawData(buf, size); QString str = QString::fromUtf8(buf, size); delete [] buf; return str; } static QString readString(QDataStream &stream) { int size = readSize(stream); return readString(stream, size); } static QVariant readVariant(QDataStream &stream, Marker type); static QVariant readArray(QDataStream &stream) { Marker marker = readMarker(stream); if (marker == MARKER_TYPE) { Marker type = readMarker(stream); Q_ASSERT(type == MARKER_UINT8); Q_UNUSED(type); marker = readMarker(stream); Q_ASSERT(marker == MARKER_COUNT); int count = readSize(stream); QByteArray array(count, Qt::Uninitialized); int read = stream.readRawData(array.data(), count); Q_ASSERT(read == count); Q_UNUSED(read); return array; } else if (marker == MARKER_COUNT) { int count = readSize(stream); QVariantList array; for (int i = 0; i < count; ++i) { marker = readMarker(stream); QVariant value = readVariant(stream, marker); array.append(value); } return array; } else { QVariantList array; while (marker != MARKER_ARRAY_END && marker != MARKER_EOF) { QVariant value = readVariant(stream, marker); array.append(value); marker = readMarker(stream); } return array; } } static QVariantMap readObject(QDataStream &stream) { QVariantMap object; Marker marker = readMarker(stream); while (marker != MARKER_OBJECT_END && marker != MARKER_EOF) { int nameSize = readSize(stream, marker); QString name = readString(stream, nameSize); marker = readMarker(stream); QVariant value = readVariant(stream, marker); object[name] = value; marker = readMarker(stream); } return object; } static QVariant readVariant(QDataStream &stream, Marker type) { switch (type) { case MARKER_NULL: return QVariant(); case MARKER_NOOP: return QVariant(); case MARKER_TRUE: return true; case MARKER_FALSE: return false; case MARKER_INT8: return readInt8(stream); case MARKER_UINT8: return readUInt8(stream); case MARKER_INT16: return readInt16(stream); case MARKER_INT32: return readInt32(stream); case MARKER_INT64: return (qlonglong)readInt64(stream); case MARKER_FLOAT32: return readFloat32(stream); case MARKER_FLOAT64: return readFloat64(stream); case MARKER_HIGH_PRECISION: Q_UNIMPLEMENTED(); return QVariant(); case MARKER_CHAR: return readChar(stream); case MARKER_STRING: return readString(stream); case MARKER_ARRAY_BEGIN: return readArray(stream); case MARKER_OBJECT_BEGIN: return readObject(stream); case MARKER_ARRAY_END: case MARKER_OBJECT_END: case MARKER_TYPE: case MARKER_COUNT: default: Q_ASSERT(0); case MARKER_EOF: return QVariant(); } } QVariant decodeUBJSONObject(QIODevice *io) { QDataStream stream(io); stream.setByteOrder(QDataStream::BigEndian); Marker marker = readMarker(stream); return readVariant(stream, marker); } tmpNnpnZF/gui/androidfiledialog.cpp0000664000175000017500000001745112543167424016724 0ustar chrischris#include "androidfiledialog.h" #include "androidutils.h" #include "ui_androidfiledialog.h" #include #include #include typedef QLatin1String _; static bool androidFileLessThan(const AndroidUtils::FileInfo &file1, const AndroidUtils::FileInfo &file2) { if (file1.type != file2.type) return file1.type == AndroidUtils::FileInfo::Directory; return file1.name < file2.name; } const int FileInfoRole = Qt::UserRole + 1; static QString humanSize(double size) { QStringList list; list << " KB" << " MB" << " GB"; QStringListIterator i(list); QString unit("bytes"); while(size >= 1024.0 && i.hasNext()) { unit = i.next(); size /= 1024.0; } return QString::number(size, 'f', 2) + unit; } class AndroidFileDialogModel : public QAbstractTableModel { public: AndroidFileDialogModel(QObject * parent = 0) : QAbstractTableModel(parent) {} void setDir(const QString &dir) { m_fileList = m_androidUtils.ls(dir + _("/")); setFilterSuffix(m_suffix); } void setFilterSuffix(const QString &suffix) { m_suffix = suffix; beginResetModel(); if (!m_suffix.isEmpty()) { AndroidUtils::FileInfoList::iterator it = m_fileList.begin(); while(it != m_fileList.end()) { if (it->type == AndroidUtils::FileInfo::File && !it->name.endsWith(m_suffix)) { it = m_fileList.erase(it); } else { ++it; } } } std::sort(m_fileList.begin(), m_fileList.end(), androidFileLessThan); endResetModel(); } virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const { if (!index.isValid() || index.row() >= m_fileList.size()) return QVariant(); QVariant ret; switch (role) { case Qt::DisplayRole: switch (index.column()) { case 0: ret = m_fileList.at(index.row()).name; break; case 1: { const AndroidUtils::FileInfo &file = m_fileList.at(index.row()); if (file.type == AndroidUtils::FileInfo::File) ret = humanSize(file.size); } break; default: break; } break; case Qt::DecorationRole: if (index.column() == 0) { if (m_fileList.at(index.row()).type == AndroidUtils::FileInfo::File) ret = qApp->style()->standardIcon(QStyle::SP_FileIcon); else ret = qApp->style()->standardIcon(QStyle::SP_DirIcon); } break; case Qt::TextAlignmentRole: ret = int(index.column() == 1 ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignVCenter; break; case FileInfoRole: ret = QVariant::fromValue(m_fileList.at(index.row())); break; default: break; } return ret; } virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const { if (orientation != Qt::Horizontal || role != Qt::DisplayRole) return QVariant(); QVariant ret; switch (section) { case 0: ret = tr("Name"); break; case 1: ret = tr("Size"); break; } return ret; } virtual int columnCount(const QModelIndex &parent = QModelIndex()) const { return 2; } virtual int rowCount(const QModelIndex &parent = QModelIndex()) const { if (parent.isValid()) return 0; return m_fileList.size(); } private: AndroidUtils m_androidUtils; QString m_suffix; AndroidUtils::FileInfoList m_fileList; }; AndroidFileDialog::AndroidFileDialog(Mode mode, QWidget *parent) : QDialog(parent), m_ui(new Ui::AndroidFileDialog), m_model(new AndroidFileDialogModel(this)), m_mode(mode) { m_ui->setupUi(this); m_ui->pathComboBox->setModel(&m_pathModel); m_ui->filesView->setModel(m_model); m_ui->upButton->setIcon(qApp->style()->standardIcon(QStyle::SP_ArrowUp)); m_ui->buttonBox->setStandardButtons(QDialogButtonBox::StandardButton(m_mode) | QDialogButtonBox::Cancel); connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(accept())); connect(m_ui->upButton, SIGNAL(clicked()), SLOT(upFolder())); connect(m_ui->pathComboBox, SIGNAL(activated(QString)), SLOT(setDir(QString))); QHeaderView *hv = m_ui->filesView->horizontalHeader(); hv->setSectionResizeMode(0, QHeaderView::Stretch); hv->setSectionResizeMode(1, QHeaderView::ResizeToContents); connect(m_ui->filesView, SIGNAL(activated(QModelIndex)), SLOT(itemActivated(QModelIndex))); } AndroidFileDialog::~AndroidFileDialog() { delete m_model; } void AndroidFileDialog::setInitialPath(const QString &path) { AndroidUtils::FileInfoList files = AndroidUtils().ls(path); if (files.size() == 1 && files.at(0).type == AndroidUtils::FileInfo::File) { QFileInfo fi(path); m_ui->fileLineEdit->setText(fi.fileName()); setDir(fi.absolutePath()); } else { if (files.isEmpty() && m_mode == SaveFile) { QFileInfo fi(path); m_ui->fileLineEdit->setText(fi.fileName()); setDir(fi.absolutePath()); } else { m_ui->fileLineEdit->setText(QString()); setDir(path); } } } void AndroidFileDialog::setSuffix(const QString &suffix) { m_model->setFilterSuffix(suffix); } QString AndroidFileDialog::filePath() const { return m_dir + _("/") + m_ui->fileLineEdit->text(); } QString AndroidFileDialog::getOpenFileName(QWidget *parent, const QString &caption, const QString &path, const QString &filter) { AndroidFileDialog d(OpenFile, parent); d.setWindowTitle(caption); d.setSuffix(filter); d.setInitialPath(path); if (d.exec() == QDialog::Accepted) return d.filePath(); return QString(); } QString AndroidFileDialog::getSaveFileName(QWidget *parent, const QString &caption, const QString &path, const QString &filter) { AndroidFileDialog d(SaveFile, parent); d.setWindowTitle(caption); d.setSuffix(filter); d.setInitialPath(path); if (d.exec() == QDialog::Accepted) return d.filePath(); return QString(); } void AndroidFileDialog::accept() { if (m_mode == SaveFile) { QDialog::accept(); return; } AndroidUtils::FileInfoList files = AndroidUtils().ls(filePath()); if (files.size() == 1 && files.at(0).type == AndroidUtils::FileInfo::File) QDialog::accept(); } void AndroidFileDialog::upFolder() { setDir(QFileInfo(m_dir).absolutePath()); } void AndroidFileDialog::itemActivated(QModelIndex index) { QVariant file = index.data(FileInfoRole); if (file.isNull()) return; AndroidUtils::FileInfo f = file.value(); if (f.type == AndroidUtils::FileInfo::Directory) { setDir(m_dir + _("/") + f.name); } else { m_ui->fileLineEdit->setText(f.name); accept(); } } void AndroidFileDialog::setDir(const QString &dir) { m_dir = dir; while (m_dir.endsWith(QLatin1Char('/'))) m_dir.chop(1); if (m_dir.isEmpty()) m_dir = _("/"); QStringList paths; QString dirname = m_dir; paths << dirname; while (dirname != _("/")) { dirname = QFileInfo(dirname).absolutePath(); paths << dirname; } m_pathModel.setStringList(paths); m_ui->pathComboBox->setCurrentIndex(0); m_ui->upButton->setEnabled(paths.size() > 1); m_model->setDir(dir); } Q_DECLARE_METATYPE(AndroidUtils::FileInfo); tmpNnpnZF/gui/apisurface.h0000664000175000017500000000236612543167424015052 0ustar chrischris#pragma once #include #include #include namespace image { class Image; } class ApiSurface { public: ApiSurface(); QSize size() const; void setSize(const QSize &size); int depth() const; void setDepth(int depth); QString formatName() const; void setFormatName(const QString &str); void setData(const QByteArray &data); QByteArray data() const; QImage thumb() const; static image::Image *imageFromData(const QByteArray &data); static QImage qimageFromRawImage(const image::Image *img, float lowerValue = 0.0f, float upperValue = 1.0f, bool opaque = false, bool alpha = false); private: QSize m_size; QByteArray m_data; QImage m_thumb; int m_depth; QString m_formatName; }; class ApiTexture : public ApiSurface { public: ApiTexture(); QString label() const; void setLabel(const QString &str); private: QString m_label; }; class ApiFramebuffer : public ApiSurface { public: ApiFramebuffer(); QString type() const; void setType(const QString &str); private: QString m_type; }; tmpNnpnZF/gui/argumentseditor.cpp0000664000175000017500000003275012543167424016477 0ustar chrischris#include "argumentseditor.h" #include "apitracecall.h" #include #include #include #include #include #include static bool isVariantEditable(const QVariant &var) { if (var.canConvert()) { ApiArray array = var.value(); QVector vals = array.values(); if (vals.isEmpty()) return false; else return isVariantEditable(vals.first()); } switch (var.userType()) { case QVariant::Bool: case QVariant::Int: case QVariant::UInt: case QVariant::LongLong: case QVariant::ULongLong: case QMetaType::Float: case QVariant::Double: case QVariant::String: return true; default: return false; } } static bool isVariantStringArray(const QVariant &var) { if (var.isNull() || var.userType() != QMetaType::type("ApiArray")) return false; ApiArray array = var.value(); QVector origValues = array.values(); if (origValues.isEmpty() || origValues.first().userType() != QVariant::String) return false; return true; } void setArgumentsItemEditorFactory () { QItemEditorCreatorBase *booleanComboBoxEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *uIntEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *intEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *uLongLongEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *longLongEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *pixmapEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *floatEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *doubleEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *stringEditorCreator = new QStandardItemEditorCreator(); QItemEditorCreatorBase *invalidEditorCreator = new QStandardItemEditorCreator(); QItemEditorFactory *factory = new QItemEditorFactory(); QVariant::Type typeFloat = static_cast (qMetaTypeId()); factory->registerEditor(QVariant::Bool, booleanComboBoxEditorCreator); factory->registerEditor(QVariant::UInt, uIntEditorCreator); factory->registerEditor(QVariant::Int, intEditorCreator); factory->registerEditor(QVariant::ULongLong, uLongLongEditorCreator); factory->registerEditor(QVariant::LongLong, longLongEditorCreator); factory->registerEditor(QVariant::Pixmap, pixmapEditorCreator); factory->registerEditor(typeFloat, floatEditorCreator); factory->registerEditor(QVariant::Double, doubleEditorCreator); factory->registerEditor(QVariant::String, stringEditorCreator); factory->registerEditor(QVariant::Invalid, invalidEditorCreator); QItemEditorFactory::setDefaultFactory(factory); } BooleanComboBox::BooleanComboBox(QWidget *parent) : QComboBox(parent) { addItem(tr("False")); addItem(tr("True")); } void BooleanComboBox::setValue(bool value) { setCurrentIndex(value ? 1 : 0); } bool BooleanComboBox::value() const { return (currentIndex() == 1); } ArgumentsEditor::ArgumentsEditor(QWidget *parent) : QDialog(parent), m_model(new QStandardItemModel()), m_call(0) { init(); } ArgumentsEditor::~ArgumentsEditor() { delete m_model; } void ArgumentsEditor::setCall(ApiTraceCall *call) { m_call = call; setupCall(); } ApiTraceCall * ArgumentsEditor::call() const { return m_call; } void ArgumentsEditor::init() { m_ui.setupUi(this); connect(m_ui.selectStringCB, SIGNAL(currentIndexChanged(int)), SLOT(currentSourceChanged(int))); connect(m_ui.glslEdit, SIGNAL(textChanged()), SLOT(sourceChanged())); connect(m_ui.revertButton, SIGNAL(clicked()), SLOT(revert())); setArgumentsItemEditorFactory (); m_ui.argsTree->setModel(m_model); } void ArgumentsEditor::setupCall() { m_model->clear(); QStringList headers; headers.append(tr("Argument")); headers.append(tr("Value")); m_model->setColumnCount(2); m_model->setHorizontalHeaderLabels(headers); m_ui.argsTabWidget->removeTab( m_ui.argsTabWidget->indexOf(m_ui.shaderTab)); if (!m_call) return; m_ui.callLabel->setText(m_call->name()); QStandardItem *rootItem = m_model->invisibleRootItem(); for (int i = 0; i < m_call->argNames().count(); ++i) { QString argName = m_call->argNames()[i]; QVariant val = m_call->arguments()[i]; QStandardItem *nameItem = new QStandardItem(argName); nameItem->setFlags(nameItem->flags() ^ Qt::ItemIsEditable); QList topRow; topRow.append(nameItem); if (val.canConvert()) { ApiArray array = val.value(); QVector vals = array.values(); QVariant firstVal = vals.value(0); if (firstVal.userType() == QVariant::String) { m_ui.argsTabWidget->addTab( m_ui.shaderTab, argName); setupShaderEditor(vals); delete nameItem; continue; } else if (isVariantEditable(firstVal)) { for (int i = 0; i < vals.count(); ++i) { QList row; QStandardItem *idx = new QStandardItem(); idx->setFlags(idx->flags() ^ Qt::ItemIsEditable); idx->setText(tr("%1)").arg(i)); QStandardItem *col = new QStandardItem(); col->setFlags(col->flags() | Qt::ItemIsEditable); col->setData(vals[i], Qt::EditRole); row.append(idx); row.append(col); nameItem->appendRow(row); } } else { qDebug()<<"\tUnsupported array = "<()) { ApiPointer ptr = val.value(); QStandardItem *item = new QStandardItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setText(ptr.toString()); QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); } else if (val.canConvert()) { ApiEnum en = val.value(); QStandardItem *item = new QStandardItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setText(en.toString()); QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); } else if (val.canConvert()) { ApiBitmask mask = val.value(); QStandardItem *item = new QStandardItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setText(mask.toString()); QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); } else if (val.canConvert()) { ApiStruct str = val.value(); QStandardItem *item = new QStandardItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setText(str.toString()); QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); } else if (val.userType() == QVariant::ByteArray) { QByteArray ba = val.value(); QStandardItem *item = new QStandardItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setText( tr("").arg(ba.size())); QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setToolTip(tr("Argument is read-only")); topRow.append(item); } else { QStandardItem *item = new QStandardItem(); if (isVariantEditable(val)) { item->setFlags(item->flags() | Qt::ItemIsEditable); } else { QIcon icon(":/resources/emblem-locked.png"); item->setIcon(icon); item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setToolTip(tr("Argument is read-only")); } item->setData(val, Qt::EditRole); topRow.append(item); } rootItem->appendRow(topRow); } } void ArgumentsEditor::setupShaderEditor(const QVector &sources) { m_ui.selectStringCB->clear(); m_ui.glslEdit->clear(); for (int i = 0; i < sources.count(); ++i) { m_ui.selectStringCB->addItem( tr("Shader string: %1").arg(i), sources[i]); } m_ui.selectStringCB->setCurrentIndex(0); } void ArgumentsEditor::currentSourceChanged(int idx) { QVariant source = m_ui.selectStringCB->itemData(idx); QString str = source.toString(); m_ui.glslEdit->setPlainText(source.toString()); m_ui.lengthLabel->setText( tr("%1").arg(str.length())); } void ArgumentsEditor::sourceChanged() { QString str = m_ui.glslEdit->toPlainText(); m_ui.lengthLabel->setText( tr("%1").arg(str.length())); m_ui.selectStringCB->setItemData( m_ui.selectStringCB->currentIndex(), str); } void ArgumentsEditor::accept() { QStringList argNames = m_call->argNames(); QVector originalValues = m_call->arguments(); QVector newValues; bool changed = false; for (int i = 0; i < argNames.count(); ++i) { bool valChanged = false; QString argName = argNames[i]; QVariant argValue = originalValues[i]; QVariant editorValue = valueForName(argName, argValue, &valChanged); newValues.append(editorValue); #if 0 qDebug()<<"Arg = "<(); val = arrayFromIndex(nameIdx, array, changed); } else { QModelIndex valIdx = m_model->index(topRow, 1, QModelIndex()); val = valIdx.data(); if (val != originalValue) *changed = true; } } } return val; } QVariant ArgumentsEditor::arrayFromIndex(const QModelIndex &parentIndex, const ApiArray &origArray, bool *changed) const { QVector origValues = origArray.values(); *changed = false; if (origValues.isEmpty()) return QVariant::fromValue(ApiArray()); QVector lst; for (int i = 0; i < origValues.count(); ++i) { QModelIndex valIdx = m_model->index(i, 1, parentIndex); QVariant var = valIdx.data(); QVariant origValue = origValues[i]; if (var != origValue) *changed = true; //qDebug()<<"\t\tarray "< vals; QVector origValues = origArray.values(); Q_ASSERT(isVariantStringArray(QVariant::fromValue(origArray))); *changed = false; //shaders for (int i = 0; i < m_ui.selectStringCB->count(); ++i) { QVariant val = m_ui.selectStringCB->itemData(i); QVariant origValue = origValues[i]; if (origValue != val) *changed = true; vals.append(val); } return QVariant::fromValue(ApiArray(vals)); } void ArgumentsEditor::revert() { m_call->revert(); setupCall(); } #include "argumentseditor.moc" tmpNnpnZF/gui/searchwidget.cpp0000664000175000017500000000416612543167424015734 0ustar chrischris#include "searchwidget.h" #include #include #include SearchWidget::SearchWidget(QWidget *parent) : QWidget(parent) { m_ui.setupUi(this); m_ui.notFoundLabel->hide(); m_origPalette = m_ui.lineEdit->palette(); connect(m_ui.nextButton, SIGNAL(clicked()), SLOT(slotSearchNext())); connect(m_ui.prevButton, SIGNAL(clicked()), SLOT(slotSearchPrev())); connect(m_ui.closeButton, SIGNAL(clicked()), SLOT(slotCancel())); connect(m_ui.lineEdit, SIGNAL(returnPressed()), SLOT(slotSearchNext())); m_ui.nextButton->setShortcut( QKeySequence::FindNext); m_ui.prevButton->setShortcut( QKeySequence::FindPrevious); installEventFilter(this); } void SearchWidget::slotSearchNext() { QString txt = m_ui.lineEdit->text(); if (!txt.isEmpty()) emit searchNext(txt, caseSensitivity()); } void SearchWidget::slotSearchPrev() { QString txt = m_ui.lineEdit->text(); if (!txt.isEmpty()) emit searchPrev(txt, caseSensitivity()); } void SearchWidget::slotCancel() { hide(); } void SearchWidget::showEvent(QShowEvent *event) { return QWidget::showEvent(event); } Qt::CaseSensitivity SearchWidget::caseSensitivity() const { if (m_ui.caseSensitiveBox->isChecked()) return Qt::CaseSensitive; else return Qt::CaseInsensitive; } bool SearchWidget::eventFilter(QObject *object, QEvent* event) { if (event->type() == QEvent::KeyPress) { if ((static_cast(event))->key() == Qt::Key_Escape) { hide(); } } return QWidget::eventFilter(object, event); } void SearchWidget::setFound(bool found) { QPalette pal = m_origPalette; pal.setColor(QPalette::Active, QPalette::Base, found ? Qt::white : QColor(255, 102, 102)); m_ui.lineEdit->setPalette(pal); m_ui.notFoundLabel->setVisible(!found); } void SearchWidget::show() { QWidget::show(); m_ui.lineEdit->selectAll(); m_ui.lineEdit->setFocus(Qt::ShortcutFocusReason); m_ui.lineEdit->setPalette(m_origPalette); } #include "searchwidget.moc" tmpNnpnZF/gui/imageviewer.h0000664000175000017500000000114012543167424015221 0ustar chrischris#pragma once #include "ui_imageviewer.h" #include class PixelWidget; class QLabel; namespace image { class Image; } class ImageViewer : public QDialog, public Ui_ImageViewer { Q_OBJECT public: ImageViewer(QWidget *parent = 0); ~ImageViewer(); void setData(const QByteArray &data); QSize sizeHint() const; protected: void resizeEvent(QResizeEvent *event); private slots: void slotUpdate(); void showPixel(int, int); void showGrid(const QRect &rect); private: image::Image *m_image; QImage m_convertedImage; PixelWidget *m_pixelWidget; }; tmpNnpnZF/gui/qapitrace.qrc0000664000175000017500000000205612543167424015233 0ustar chrischris resources/application-exit.png resources/dialog-close.png resources/dialog-information.png resources/document-edit.png resources/document-new.png resources/document-open.png resources/edit-find.png resources/edit-undo.png resources/emblem-locked.png resources/go-bottom.png resources/go-down-search.png resources/go-jump.png resources/go-top.png resources/go-up-search.png resources/media-playback-start.png resources/media-playback-stop.png resources/media-record.png resources/script-error.png resources/glreference.tsv resources/android.png resources/android-setup.png tmpNnpnZF/gui/settingsdialog.cpp0000664000175000017500000001455112543167424016302 0ustar chrischris#include "settingsdialog.h" #include #include #include SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), m_filter(0) { setupUi(this); m_showFilters.insert( tr("Draw events"), QRegExp("glDraw|glVertex|glBegin|glEnd")); m_showFilters.insert( tr("Texture events"), QRegExp("glTex|glBindTex|glBegin|glEnd")); QMap::const_iterator itr; for (itr = m_showFilters.constBegin(); itr != m_showFilters.constEnd(); ++itr) { showFilterCB->addItem(itr.key(), itr.value()); } showFilterCB->addItem(tr("Custom"), QRegExp()); connect(showFilterCB, SIGNAL(currentIndexChanged(const QString &)), SLOT(changeRegexp(const QString&))); connect(showFilterEdit, SIGNAL(textEdited(const QString &)), SLOT(regexpChanged(const QString&))); connect(adbPathEdit, SIGNAL(textEdited(const QString &)), SLOT(adbPathChanged(const QString&))); { QSettings s; s.beginGroup(QLatin1String("android")); adbPathEdit->setText(s.value(QLatin1String("adbPath"), adbPathEdit->text()).toString()); stdoutPort->setValue(s.value(QLatin1String("stdoutPort"), stdoutPort->value()).toInt()); stderrPort->setValue(s.value(QLatin1String("stderrPort"), stderrPort->value()).toInt()); s.endGroup(); } connect(chooseAdbPath, SIGNAL(clicked()), SLOT(chooseAdbPathPushed())); connect(stdoutPort, SIGNAL(valueChanged(int)), SLOT(stdoutPortChanged(int))); connect(stderrPort, SIGNAL(valueChanged(int)), SLOT(stderrPortChanged(int))); showFilterCB->setCurrentIndex(0); showFilterEdit->setText(m_showFilters.constBegin().value().pattern()); } void SettingsDialog::filtersFromModel(const ApiTraceFilter *model) { ApiTraceFilter::FilterOptions opts = model->filterOptions(); extensionsBox->setChecked(opts & ApiTraceFilter::ExtensionsFilter); functionsBox->setChecked(opts & ApiTraceFilter::ResolutionsFilter); errorsBox->setChecked(opts & ApiTraceFilter::ErrorsQueryFilter); statesBox->setChecked(opts & ApiTraceFilter::ExtraStateFilter); customBox->setChecked(opts & ApiTraceFilter::CustomFilter); QString customFilter = model->customFilterRegexp(); if (!customFilter.isEmpty()) { customEdit->setText(customFilter); } else { //Add a common default QLatin1String str("glXMakeContextCurrent"); customEdit->setText(str); } QRegExp regexp = model->filterRegexp(); if (regexp.isEmpty()) { showFilterBox->setChecked(false); } else { showFilterBox->setChecked(true); QMap::const_iterator itr; int i = 0; for (itr = m_showFilters.constBegin(); itr != m_showFilters.constEnd(); ++itr, ++i) { if (itr.value() == regexp) { showFilterCB->setCurrentIndex(i); showFilterEdit->setText(itr.value().pattern()); return; } } /* custom filter */ showFilterCB->setCurrentIndex(m_showFilters.count()); showFilterEdit->setText(regexp.pattern()); } } void SettingsDialog::filtersToModel(ApiTraceFilter *model) { ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter; if (extensionsBox->isChecked()) { opts |= ApiTraceFilter::ExtensionsFilter; } if (functionsBox->isChecked()) { opts |= ApiTraceFilter::ResolutionsFilter; } if (errorsBox->isChecked()) { opts |= ApiTraceFilter::ErrorsQueryFilter; } if (statesBox->isChecked()) { opts |= ApiTraceFilter::ExtraStateFilter; } if (customBox->isChecked()) { opts |= ApiTraceFilter::CustomFilter; m_filter->setCustomFilterRegexp(customEdit->text()); } m_filter->setFilterOptions(opts); if (showFilterBox->isChecked()) { m_filter->setFilterRegexp(QRegExp(showFilterEdit->text())); } else { m_filter->setFilterRegexp(QRegExp()); } } void SettingsDialog::accept() { if (showFilterBox->isChecked()) { QRegExp regexp(showFilterEdit->text()); if (!regexp.isValid()) { QMessageBox::warning( this, tr("Invalid Regexp"), tr("The currently set regular expression " "for filtering events is invalid.")); return; } } if (customBox->isChecked()) { QRegExp regexp(customEdit->text()); if (!regexp.isValid()) { QMessageBox::warning( this, tr("Invalid Regexp"), tr("The currently set regular expression " "for custom events is invalid.")); return; } } filtersToModel(m_filter); QDialog::accept(); } void SettingsDialog::changeRegexp(const QString &name) { showFilterEdit->setText(m_showFilters[name].pattern()); } void SettingsDialog::regexpChanged(const QString &pattern) { int customIndex = m_showFilters.count(); if (showFilterCB->currentIndex() != customIndex) { showFilterCB->blockSignals(true); showFilterCB->setCurrentIndex(customIndex); showFilterCB->blockSignals(false); } } void SettingsDialog::adbPathChanged(const QString &adbPath) { QSettings s; s.beginGroup(QLatin1String("android")); s.setValue(QLatin1String("adbPath"), adbPath); s.endGroup(); } void SettingsDialog::chooseAdbPathPushed() { QString fileName = QFileDialog::getOpenFileName(this, tr("Choose adb path"), adbPathEdit->text(), QLatin1String("ADB (adb" #ifdef Q_OS_WIN ".exe" #endif ")")); if (!fileName.isEmpty()) { adbPathEdit->setText(fileName); adbPathChanged(fileName); } } void SettingsDialog::stdoutPortChanged(int port) { QSettings s; s.beginGroup(QLatin1String("android")); s.setValue(QLatin1String("stdoutPort"), port); s.endGroup(); } void SettingsDialog::stderrPortChanged(int port) { QSettings s; s.beginGroup(QLatin1String("android")); s.setValue(QLatin1String("stderrPort"), port); s.endGroup(); } void SettingsDialog::setFilterModel(ApiTraceFilter *filter) { m_filter = filter; filtersFromModel(m_filter); } #include "settingsdialog.moc" tmpNnpnZF/gui/calldurationgraph.h0000664000175000017500000001137012543167424016426 0ustar chrischris#pragma once #include "graphing/graphwidget.h" #include "trace_profiler.hpp" #include "profiling.h" /** * Wrapper for call duration graphs. * * This implements the transformSelectionIn and transformSelectionOut to * allow sharing the selection between the graphs and the heatmap as they * are using different scales. The duration graphs have call.no on the X-axis * whereas the heatmap has time on the X axis. */ class CallDurationGraph : public GraphWidget { public: CallDurationGraph(QWidget* parent = 0) : GraphWidget(parent), m_profile(NULL) { } void setProfile(const trace::Profile* profile) { m_profile = profile; } protected: /* Transform from time-based horizontal selection to call no based. */ virtual SelectionState transformSelectionIn(SelectionState state) { if (!m_profile || state.type != SelectionState::Horizontal) { return state; } qint64 timeStart = state.start; qint64 timeEnd = state.end; std::vector::const_iterator itr; itr = Profiling::binarySearchTimespan< trace::Profile::Call, &trace::Profile::Call::cpuStart, &trace::Profile::Call::cpuDuration> (m_profile->calls.begin(), m_profile->calls.end(), timeStart, true); state.start = itr - m_profile->calls.begin(); itr = Profiling::binarySearchTimespan< trace::Profile::Call, &trace::Profile::Call::cpuStart, &trace::Profile::Call::cpuDuration> (m_profile->calls.begin(), m_profile->calls.end(), timeEnd, true); state.end = itr - m_profile->calls.begin(); return state; } virtual SelectionState transformSelectionOut(SelectionState state) { if (!m_profile || state.type != SelectionState::Horizontal) { return state; } qint64 start = qMax(0, state.start); qint64 end = qMin(state.end, m_profile->calls.size()); /* Call based -> time based */ state.start = m_profile->calls[start].cpuStart; state.end = m_profile->calls[end].cpuStart + m_profile->calls[end].cpuDuration; return state; } private: const trace::Profile* m_profile; }; /* Data provider for call duration graphs */ class CallDurationDataProvider : public GraphDataProvider { public: CallDurationDataProvider(const trace::Profile* profile, bool gpu) : m_gpu(gpu), m_profile(profile), m_selectionState(NULL) { } virtual qint64 size() const { return m_profile ? m_profile->calls.size() : 0; } virtual bool selected(qint64 index) const { if (m_selectionState) { if (m_selectionState->type == SelectionState::Horizontal) { if (m_selectionState->start <= index && index < m_selectionState->end) { return true; } } else if (m_selectionState->type == SelectionState::Vertical) { return m_profile->calls[index].program == m_selectionState->start; } } return false; } virtual void setSelectionState(SelectionState* state) { m_selectionState = state; } virtual qint64 value(qint64 index) const { if (m_gpu) { return m_profile->calls[index].gpuDuration; } else { return m_profile->calls[index].cpuDuration; } } virtual void itemDoubleClicked(qint64 index) const { if (!m_profile) { return; } if (index < 0 || index >= m_profile->calls.size()) { return; } const trace::Profile::Call& call = m_profile->calls[index]; Profiling::jumpToCall(call.no); } virtual QString itemTooltip(qint64 index) const { if (!m_profile) { return QString(); } if (index < 0 || index >= m_profile->calls.size()) { return QString(); } const trace::Profile::Call& call = m_profile->calls[index]; QString text; text = QString::fromStdString(call.name); text += QString("\nCall: %1").arg(call.no); text += QString("\nCPU Duration: %1").arg(Profiling::getTimeString(call.cpuDuration)); if (call.pixels >= 0) { text += QString("\nGPU Duration: %1").arg(Profiling::getTimeString(call.gpuDuration)); text += QString("\nPixels Drawn: %1").arg(QLocale::system().toString((qlonglong)call.pixels)); text += QString("\nProgram: %1").arg(call.program); } return text; } private: bool m_gpu; const trace::Profile* m_profile; SelectionState* m_selectionState; }; tmpNnpnZF/gui/traceloader.h0000664000175000017500000000664712543167424015223 0ustar chrischris#pragma once #include "apitrace.h" #include "trace_file.hpp" #include "trace_parser.hpp" #include #include #include #include class TraceLoader : public QObject { Q_OBJECT public: TraceLoader(QObject *parent=0); ~TraceLoader(); ApiTraceCallSignature *signature(unsigned id); void addSignature(unsigned id, ApiTraceCallSignature *signature); trace::EnumSig *enumSignature(unsigned id); private: class FrameContents { public: FrameContents(int numOfCalls=0); bool load(TraceLoader *loader, ApiTraceFrame* frame, QHash helpHash, trace::Parser &parser); void reset(); int topLevelCount() const; int allCallsCount() const; QVector topLevelCalls() const; QVector allCalls() const; quint64 binaryDataSize() const; bool isEmpty(); private: QStack m_groups; QVector m_topLevelItems; QVector m_allCalls; quint64 m_binaryDataSize; int m_parsedCalls; }; public slots: void loadTrace(const QString &filename); void loadFrame(ApiTraceFrame *frame); void findFrameStart(ApiTraceFrame *frame); void findFrameEnd(ApiTraceFrame *frame); void findCallIndex(int index); void search(const ApiTrace::SearchRequest &request); signals: void startedParsing(); void parsed(int percent); void guessedApi(int api); void finishedParsing(); void framesLoaded(const QList &frames); void frameContentsLoaded(ApiTraceFrame *frame, const QVector &topLevelItems, const QVector &calls, quint64 binaryDataSize); void searchResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call); void foundFrameStart(ApiTraceFrame *frame); void foundFrameEnd(ApiTraceFrame *frame); void foundCallIndex(ApiTraceCall *call); private: struct FrameBookmark { FrameBookmark() : numberOfCalls(0) {} FrameBookmark(const trace::ParseBookmark &s) : start(s), numberOfCalls(0) {} trace::ParseBookmark start; int numberOfCalls; }; int numberOfFrames() const; int numberOfCallsInFrame(int frameIdx) const; void loadHelpFile(); void guessApi(const trace::Call *call); void scanTrace(); void parseTrace(); void searchNext(const ApiTrace::SearchRequest &request); void searchPrev(const ApiTrace::SearchRequest &request); int callInFrame(int callIdx) const; bool callContains(trace::Call *call, const QString &str, Qt::CaseSensitivity sensitivity); QVector fetchFrameContents(ApiTraceFrame *frame); bool searchCallsBackwards(const QList &calls, int frameIdx, const ApiTrace::SearchRequest &request); private: trace::Parser m_parser; typedef QMap FrameBookmarks; FrameBookmarks m_frameBookmarks; QList m_createdFrames; QHash m_helpHash; QVector m_signatures; }; tmpNnpnZF/gui/qubjson_test.cpp0000664000175000017500000001160712543167424016001 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "qubjson.h" #include #include #include "gtest/gtest.h" static inline std::ostream & operator << (std::ostream &os, const QVariant &var) { QString buf; QDebug debug(&buf); debug << var; os << buf.trimmed().toLocal8Bit().constData(); return os; } static ::testing::AssertionResult check(const char *buf_expr, const char *exp_expr, QByteArray & bytearray, const QVariant & expected) { QBuffer buffer(&bytearray); buffer.open(QIODevice::ReadOnly); QVariant actual = decodeUBJSONObject(&buffer); if (!buffer.atEnd()) { return ::testing::AssertionFailure() << "Trailing bytes"; } if (actual != expected) { return ::testing::AssertionFailure() << "Expected " << expected << " but got " << actual; } return ::testing::AssertionSuccess(); } #define BYTEARRAY(...) { __VA_ARGS__ } #define CHECK( x , y ) \ { \ static const unsigned char X[] = x; \ QByteArray bytearray((const char *)X, sizeof X); \ EXPECT_PRED_FORMAT2(check, bytearray, y); \ } TEST(qubjson, null) { CHECK(BYTEARRAY('Z'), QVariant()); } TEST(qubjson, boolean) { CHECK(BYTEARRAY('T'), true); CHECK(BYTEARRAY('F'), false); } TEST(qubjson, integral) { CHECK(BYTEARRAY('i', 0x00), +0x00); CHECK(BYTEARRAY('i', 0x7f), +0x7f); CHECK(BYTEARRAY('i', 0x80), -0x80); CHECK(BYTEARRAY('U', 0x00), +0x00); CHECK(BYTEARRAY('U', 0x80), +0x80); CHECK(BYTEARRAY('U', 0xff), +0xff); CHECK(BYTEARRAY('I', 0x01, 0x23), +0x0123); CHECK(BYTEARRAY('I', 0x80, 0x00), -0x8000); CHECK(BYTEARRAY('l', 0x01, 0x23, 0x45, 0x67), +0x01234567); CHECK(BYTEARRAY('l', 0x80, 0x00, 0x00, 0x00), -0x7fffffff - 1); // -0x80000000 causes signed warnings CHECK(BYTEARRAY('L', 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF), qlonglong(+0x0123456789ABCDEFLL)); CHECK(BYTEARRAY('L', 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), qlonglong(-0x8000000000000000LL)); } TEST(qubjson, float) { CHECK(BYTEARRAY('d', 0x3f, 0x80, 0x00, 0x00), 1.0f); CHECK(BYTEARRAY('d', 0x00, 0x00, 0x00, 0x01), 1.40129846e-45f); CHECK(BYTEARRAY('d', 0xff, 0x7f, 0xff, 0xff), -3.4028234e38f); CHECK(BYTEARRAY('D', 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), 1.0); CHECK(BYTEARRAY('D', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01), 4.9406564584124654e-324); CHECK(BYTEARRAY('D', 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff), -1.7976931348623157e308); } TEST(qubjson, string) { CHECK(BYTEARRAY('C', 'A'), "A"); CHECK(BYTEARRAY('S', 'U', 0), ""); CHECK(BYTEARRAY('S', 'U', 5, 'A', 'B', 'C', 'D', 'E'), "ABCDE"); } TEST(qubjson, array) { QVariantList list; CHECK(BYTEARRAY('[', ']'), list); list.append(1); CHECK(BYTEARRAY('[', 'i', 1, ']'), list); CHECK(BYTEARRAY('[', '#', 'i', 1, 'i', 1), list); list.append(2); CHECK(BYTEARRAY('[', 'U', 1, 'i', 2, ']'), list); CHECK(BYTEARRAY('[', '#', 'U', 2, 'i', 1, 'i', 2), list); } TEST(qubjson, object) { QVariantMap map; CHECK(BYTEARRAY('{', '}'), map); map["A"] = 1; CHECK(BYTEARRAY('{', 'U', 1, 'A', 'i', 1, '}'), map); map["B"] = 2; CHECK(BYTEARRAY('{', 'U', 1, 'A', 'i', 1, 'U', 1, 'B', 'i', 2, '}'), map); } TEST(qubjson, binary_data) { CHECK(BYTEARRAY('[', '$', 'U', '#', 'U', 0), QByteArray()); CHECK(BYTEARRAY('[', '$', 'U', '#', 'U', 1, 'A'), QByteArray("A")); CHECK(BYTEARRAY('[', '$', 'U', '#', 'U', 2, 'A', 'B'), QByteArray("AB")); CHECK(BYTEARRAY('[', '$', 'U', '#', 'U', 3, 'A', 'B', 'C'), QByteArray("ABC")); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } tmpNnpnZF/gui/traceprocess.cpp0000664000175000017500000000441312543167424015753 0ustar chrischris#include "traceprocess.h" #include #include #include #include TraceProcess::TraceProcess(QObject *parent) : QObject(parent), m_canTrace(true) { m_process = new QProcess(this); connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(traceFinished())); connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(traceError(QProcess::ProcessError))); } TraceProcess::~TraceProcess() { } void TraceProcess::setApi(const QString &str) { m_api = str; } void TraceProcess::setExecutablePath(const QString &str) { m_execPath = str; QFileInfo fi(m_execPath); QString baseName = fi.baseName(); QString format = QString::fromLatin1("%1.trace"); m_tracePath = format .arg(baseName); int i = 1; while (QFile::exists(m_tracePath)) { format = QString::fromLatin1("%1.%2.trace"); m_tracePath = format .arg(baseName) .arg(i++); } } QString TraceProcess::executablePath() const { return m_execPath; } void TraceProcess::setArguments(const QStringList &args) { m_args = args; } QStringList TraceProcess::arguments() const { return m_args; } void TraceProcess::traceFinished() { #if 0 qDebug()<<"trace finished on " << m_tracePath; qDebug()<<"\terr = "<readAllStandardError(); qDebug()<<"\tout = "<readAllStandardOutput(); #endif emit tracedFile(m_tracePath); } void TraceProcess::traceError(QProcess::ProcessError err) { #if 1 qDebug()<<"trace error = "<start(QLatin1String("apitrace"), arguments); } bool TraceProcess::canTrace() const { return m_canTrace; } #include "traceprocess.moc" tmpNnpnZF/gui/traceprocess.h0000664000175000017500000000140612543167424015417 0ustar chrischris#pragma once #include #include class TraceProcess : public QObject { Q_OBJECT public: TraceProcess(QObject *parent=0); ~TraceProcess(); bool canTrace() const; void setApi(const QString &str); void setExecutablePath(const QString &str); QString executablePath() const; void setArguments(const QStringList &args); QStringList arguments() const; public slots: void start(); signals: void tracedFile(const QString &tracePath); void error(const QString &msg); private slots: void traceFinished(); void traceError(QProcess::ProcessError err); private: QString m_api; QString m_execPath; QStringList m_args; QString m_tracePath; QProcess *m_process; bool m_canTrace; }; tmpNnpnZF/gui/vertexdatainterpreter.cpp0000664000175000017500000001323712543167424017715 0ustar chrischris#include "vertexdatainterpreter.h" #include #include #include #include static int sizeForType(int type) { switch(type) { case DT_INT8: case DT_UINT8: return 1; case DT_INT16: case DT_UINT16: return 2; case DT_INT32: case DT_UINT32: return 4; case DT_FLOAT: return sizeof(float); case DT_DOUBLE: return sizeof(double); default: return sizeof(int); } } template static QStringList convertData(const QByteArray &dataArray, int type, int stride, int numComponents, int startingOffset) { QStringList strings; int dataSize = dataArray.size() - startingOffset; const char *data = dataArray.constData() + startingOffset; int typeSize = sizeForType(type); int elementSize = numComponents * typeSize; if (!stride) stride = elementSize; int numElements = dataSize / stride; if ((numElements % numComponents) != 0) { int temp = qFloor(dataSize / (float)stride); int fullElemSize = temp * stride; if (fullElemSize + numComponents * typeSize <= dataSize) { /* num full elements plus the part of the buffer in which we fit */ numElements = temp + 1; } else { numElements = temp; } } #if 0 qDebug() << "numElements = "<clear(); } QByteArray VertexDataInterpreter::data() const { return m_data; } void VertexDataInterpreter::setType(int type) { m_type = type; } int VertexDataInterpreter::type() const { return m_type; } void VertexDataInterpreter::setStride(int stride) { m_stride = stride; } int VertexDataInterpreter::stride() const { return m_stride; } void VertexDataInterpreter::setComponents(int num) { m_components = num; } int VertexDataInterpreter::components() const { return m_components; } void VertexDataInterpreter::setListWidget(QListWidget *listWidget) { m_listWidget = listWidget; } void VertexDataInterpreter::interpretData() { if (!m_listWidget) return; m_listWidget->clear(); if (m_data.isEmpty() || !m_components) return; QStringList lst; switch(m_type) { case DT_INT8: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_UINT8: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_INT16: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_UINT16: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_INT32: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_UINT32: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_FLOAT: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; case DT_DOUBLE: lst = convertData(m_data, m_type, m_stride, m_components, m_startingOffset); break; default: qDebug()<<"unkown gltype = "<addItems(lst); } void VertexDataInterpreter::setTypeFromString(const QString &str) { if (str == QLatin1String("GL_FLOAT")) { setType(DT_FLOAT); } else if (str == QLatin1String("GL_INT")) { setType(DT_INT32); } else if (str == QLatin1String("GL_UNSIGNED_INT")) { setType(DT_UINT32); } else if (str == QLatin1String("GL_SHORT")) { setType(DT_INT16); } else if (str == QLatin1String("GL_UNSIGNED_SHORT")) { setType(DT_UINT16); } else if (str == QLatin1String("GL_BYTE")) { setType(DT_INT8); } else if (str == QLatin1String("GL_UNSIGNED_BYTE")) { setType(DT_UINT8); } else if (str == QLatin1String("GL_DOUBLE")) { setType(DT_DOUBLE); } else { qDebug()<<"unknown vertex data type"; } } int VertexDataInterpreter::startingOffset() const { return m_startingOffset; } void VertexDataInterpreter::setStartingOffset(int offset) { m_startingOffset = offset; } #include "vertexdatainterpreter.moc" tmpNnpnZF/gui/ui/0000775000175000017500000000000012543167424013165 5ustar chrischristmpNnpnZF/gui/ui/shaderssourcewidget.ui0000664000175000017500000000146212543167424017605 0ustar chrischris ShadersSourceWidget 0 0 400 300 Form Select a shader: tmpNnpnZF/gui/ui/retracerdialog.ui0000664000175000017500000001312212543167424016512 0ustar chrischris RetracerDialog Qt::ApplicationModal 0 0 286 125 Retracer Configuration Allows setting options on the retracing process. true Qt::Horizontal 40 20 Use double buffering Qt::Horizontal 48 20 Qt::Horizontal 40 20 Use core profile Qt::Horizontal 48 20 Qt::Horizontal 68 20 Error checking true Qt::Horizontal 78 20 Qt::Horizontal 40 20 0 0 Singlethread Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() RetracerDialog accept() 248 254 157 274 buttonBox rejected() RetracerDialog reject() 316 260 286 274 tmpNnpnZF/gui/ui/imageviewer.ui0000664000175000017500000001442212543167424016033 0ustar chrischris ImageViewer 0 0 825 629 ApiTrace Surface Viewer false true Qt::AlignCenter 0 0 811 561 true X: xSpinBox false true QAbstractSpinBox::NoButtons false 16000 Y: xSpinBox false true QAbstractSpinBox::NoButtons false 16000 TextLabel TextLabel Qt::Horizontal 40 20 Lower 3 -999.999000000000024 999.999000000000024 0.050000000000000 Upper 3 -999.999000000000024 999.999000000000024 0.050000000000000 1.000000000000000 Flip Opaque Alpha Zoom: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter x 1 15 1 1 tmpNnpnZF/gui/ui/jumpwidget.ui0000664000175000017500000000405412543167424015706 0ustar chrischris JumpWidget 0 0 345 35 0 0 Form false :/resources/dialog-close.png:/resources/dialog-close.png true Jump to call: 0 0 9999999 Jump true tmpNnpnZF/gui/ui/searchwidget.ui0000664000175000017500000000766212543167424016210 0ustar chrischris SearchWidget 0 0 547 33 0 0 Form ... :/resources/dialog-close.png:/resources/dialog-close.png true Qt::NoArrow 0 0 170 0 Find previous occurance of the string ... :/resources/go-up-search.png:/resources/go-up-search.png Find next occurance of the text ... :/resources/go-down-search.png:/resources/go-down-search.png Case Sensitive 0 0 50 0 130 25 <b>Text not found</b> Qt::RichText true 0 30 Qt::Horizontal QSizePolicy::Expanding 20 20 tmpNnpnZF/gui/ui/settings.ui0000664000175000017500000002065312543167424015372 0ustar chrischris Settings true 0 0 571 465 QApiTrace Settings 0 0 Hidden Events Extension queries Function resolution Error queries Extra state queries Custom false Only show the following events true false You can specify one of the predefined categories or create a custom regexp to show only a specific set of events. true 0 0 Android <html><head/><body><p>ADB (Android Debugger Bridge) is located in &lt;Android SDK&gt;/platform-tools/adb</p></body></html> &adb path: adbPathEdit true adb ... <html><head/><body><p>ADB (Android Debugger Bridge) is located in &lt;Android SDK&gt;/platform-tools/adb</p></body></html> std&out port: stdoutPort 1024 65535 52341 Qt::Horizontal 40 20 <html><head/><body><p>ADB (Android Debugger Bridge) is located in &lt;Android SDK&gt;/platform-tools/adb</p></body></html> std&err port: stderrPort 1024 65535 52342 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Settings accept() 260 456 157 274 buttonBox rejected() Settings reject() 328 456 286 274 customBox toggled(bool) customEdit setEnabled(bool) 83 147 216 148 tmpNnpnZF/gui/ui/profiledialog.ui0000664000175000017500000001246012543167424016347 0ustar chrischris ProfileDialog Qt::NonModal 0 0 1105 804 Profile Results 0 Qt::Vertical false 0 1 Qt::WheelFocus 0 0 0 0 0 200 0 0 0 0 0 0 Qt::WheelFocus 0 0 0 0 0 0 QAbstractItemView::NoEditTriggers QAbstractItemView::SingleSelection QAbstractItemView::SelectRows QAbstractItemView::ScrollPerPixel QAbstractItemView::ScrollPerPixel true false false GraphWidget QWidget
graphing/graphwidget.h
1
CallDurationGraph QWidget
calldurationgraph.h
1
m_table doubleClicked(QModelIndex) ProfileDialog tableDoubleClicked(QModelIndex) 895 220 511 383 jumpToCall(int) setVerticalScrollMax(int) setHorizontalScrollMax(int) tableDoubleClicked(QModelIndex) selectTime(int64_t,int64_t) selectProgram(unsigned) selectNone()
tmpNnpnZF/gui/ui/androidfiledialog.ui0000664000175000017500000000736212543167424017174 0ustar chrischris AndroidFileDialog 0 0 501 325 Dialog 0 0 Look in: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 true 16 20 QAbstractItemView::NoEditTriggers QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false false false false File name: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox rejected() AndroidFileDialog reject() 294 311 286 274 fileLineEdit returnPressed() AndroidFileDialog accept() 164 262 4 282 tmpNnpnZF/gui/ui/profilereplaydialog.ui0000664000175000017500000000574212543167424017571 0ustar chrischris ProfileReplayDialog Qt::ApplicationModal 0 0 353 202 Profile Configuration Allows setting options on the profiling process. true Profiling GPU times true CPU times true Pixels drawn per call true Memory usage true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ProfileReplayDialog accept() 176 142 176 82 buttonBox rejected() ProfileReplayDialog reject() 176 142 176 82 tmpNnpnZF/gui/ui/mainwindow.ui0000664000175000017500000005510212543167424015703 0ustar chrischris MainWindow 0 0 787 756 ApiTrace false false QMainWindow::AnimatedDocks|QMainWindow::ForceTabbedDocks true Qt::ElideMiddle true 0 0 787 24 &File &Android :/resources/android.png:/resources/android.png &Edit &Trace &View 0 0 77 100 false Call Details 8 0 0 about:blank QDockWidget::AllDockWidgetFeatures Current State 2 0 Parameters Only show non-defaults QAbstractItemView::NoEditTriggers true true true Variable Value Shaders Surfaces Thumbnail Description Uniforms QAbstractItemView::NoEditTriggers true true true Name Value Buffers QAbstractItemView::NoEditTriggers true false true Name Value Qt::AllDockWidgetAreas Vertex Data 2 QFormLayout::ExpandingFieldsGrow Type 6 GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE Stride 1000 8 Components 1 256 4 Starting Offset Qt::Horizontal 40 20 Interpret Qt::Horizontal 40 20 Export Qt::Horizontal 40 20 QDockWidget::AllDockWidgetFeatures Errors 8 Qt::LeftToRight Index Type Error Backtrace 8 Exit Exit :/resources/document-open.png:/resources/document-open.png &Open... Ctrl+O :/resources/document-edit.png:/resources/document-edit.png &Save As... Ctrl+S :/resources/application-exit.png:/resources/application-exit.png &Quit Ctrl+Q Qt::ApplicationShortcut QAction::QuitRole :/resources/media-playback-start.png:/resources/media-playback-start.png &Replay Ctrl+R :/resources/media-playback-stop.png:/resources/media-playback-stop.png &Stop :/resources/media-record.png:/resources/media-record.png Lookup State Ctrl+L Show &Thumbnails Ctrl+T Tr&im Ctrl+I Options :/resources/document-new.png:/resources/document-new.png &New... Ctrl+N :/resources/edit-find.png:/resources/edit-find.png &Find Ctrl+F :/resources/go-jump.png:/resources/go-jump.png Go to Call Ctrl+G :/resources/go-top.png:/resources/go-top.png Go to Frame Start Ctrl+A :/resources/go-bottom.png:/resources/go-bottom.png Go to Frame End Ctrl+E true false Show &Errors Dock false Show &Profile Results &Profile Ctrl+P :/resources/go-bottom.png:/resources/go-bottom.png Pull trace :/resources/go-top.png:/resources/go-top.png Push trace :/resources/android-setup.png:/resources/android-setup.png Link trace :/resources/document-new.png:/resources/document-new.png Setup true Retrace on Android stateDock vertexDataDock errorsDock backtraceDock QWebView QWidget
QtWebKitWidgets/QWebView
tmpNnpnZF/gui/ui/argumentseditor.ui0000664000175000017500000001315312543167424016743 0ustar chrischris ArgumentsEditor 0 0 481 615 Trace Arguments Editor false true Qt::Horizontal 40 20 16 50 false TextLabel Qt::Horizontal 40 20 Qt::Horizontal 128 20 true Revert :/resources/edit-undo.png:/resources/edit-undo.png 0 Arguments false Shader Qt::Horizontal 40 20 Length: 100 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok GLSLEdit QPlainTextEdit
glsledit.h
buttonBox accepted() ArgumentsEditor accept() 248 254 157 274 buttonBox rejected() ArgumentsEditor reject() 316 260 286 274
tmpNnpnZF/gui/ui/androiddevicedialog.ui0000664000175000017500000000745112543167424017513 0ustar chrischris AndroidDeviceDialog 0 0 636 448 Select Android Device Always use this device for architecture %1 true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Refresh Device List 0 600 300 <html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">My device is missing</span></a></p></body></html> Qt::RichText <html><head/><body><p><br/></p></body></html> Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true buttonBox accepted() AndroidDeviceDialog accept() 248 254 157 274 buttonBox rejected() AndroidDeviceDialog reject() 316 260 286 274 tmpNnpnZF/gui/ui/tracedialog.ui0000664000175000017500000000562312543167424016010 0ustar chrischris TraceDialog 0 0 401 95 Dialog API: Application: Application to trace Browse... false Arguments: Separate arguments with ";" Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() TraceDialog accept() 248 254 157 274 buttonBox rejected() TraceDialog reject() 316 260 286 274 tmpNnpnZF/gui/vertexdatainterpreter.h0000664000175000017500000000160712543167424017360 0ustar chrischris#pragma once #include class QListWidget; enum DataType { DT_INT8, DT_UINT8, DT_INT16, DT_UINT16, DT_INT32, DT_UINT32, DT_FLOAT, DT_DOUBLE, }; class VertexDataInterpreter : public QObject { Q_OBJECT public: VertexDataInterpreter(QObject *parent=0); QByteArray data() const; int type() const; int stride() const; int components() const; int startingOffset() const; void setListWidget(QListWidget *listWidget); public slots: void interpretData(); void setData(const QByteArray &data); void setTypeFromString(const QString &str); void setStride(int stride); void setComponents(int num); void setType(int type); void setStartingOffset(int offset); private: QListWidget *m_listWidget; QByteArray m_data; int m_type; int m_stride; int m_components; int m_startingOffset; }; tmpNnpnZF/gui/shaderssourcewidget.h0000664000175000017500000000066512543167424017006 0ustar chrischris#pragma once #include "ui_shaderssourcewidget.h" #include class GLSLEdit; class ShadersSourceWidget : public QWidget { Q_OBJECT public: ShadersSourceWidget(QWidget *parent=0); public slots: void setShaders(const QMap &sources); private slots: void changeShader(const QString &key); private: Ui::ShadersSourceWidget m_ui; QMap m_sources; GLSLEdit *m_edit; }; tmpNnpnZF/gui/profiletablemodel.h0000664000175000017500000000321512543167424016413 0ustar chrischris#pragma once #include #include "trace_profiler.hpp" struct ProfileTableRow { ProfileTableRow(unsigned no) : program(no), uses(0), gpuTime(0), cpuTime(0), pixels(0), longestGpu(0), longestCpu(0), longestPixel(0) { } unsigned program; qulonglong uses; qulonglong gpuTime; qulonglong cpuTime; qulonglong pixels; const trace::Profile::Call* longestGpu; const trace::Profile::Call* longestCpu; const trace::Profile::Call* longestPixel; }; class ProfileTableModel : public QAbstractTableModel { Q_OBJECT public: ProfileTableModel(QObject *parent = NULL); void setProfile(trace::Profile* profile); void selectNone(); void selectProgram(unsigned program); void selectTime(int64_t start, int64_t end); int getRowIndex(unsigned program) const; unsigned getProgram(const QModelIndex & index) const; const trace::Profile::Call* getJumpCall(const QModelIndex & index) const; virtual int rowCount(const QModelIndex & parent) const; virtual int columnCount(const QModelIndex & parent) const; virtual QVariant data(const QModelIndex &index, int role) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); private: void updateModel(); ProfileTableRow* getRow(unsigned program); private: QList m_rowData; trace::Profile *m_profile; int64_t m_timeMin; int64_t m_timeMax; int m_sortColumn; Qt::SortOrder m_sortOrder; }; tmpNnpnZF/gui/apisurface.cpp0000664000175000017500000001114012543167424015373 0ustar chrischris#include "apisurface.h" #include "thumbnail.h" #include #include #include #include "image/image.hpp" ApiSurface::ApiSurface() { } QSize ApiSurface::size() const { return m_size; } void ApiSurface::setSize(const QSize &size) { m_size = size; } struct ByteArrayBuf : public std::streambuf { ByteArrayBuf(const QByteArray & a) { setg((char *)a.data(), (char *)a.data(), (char *)a.data() + a.size()); } }; void ApiSurface::setData(const QByteArray &data) { m_data = data; /* * We need to do the conversion to create the thumbnail */ image::Image *image = imageFromData(data); Q_ASSERT(image); QImage img = qimageFromRawImage(image); m_thumb = thumbnail(img); delete image; } QByteArray ApiSurface::data() const { return m_data; } QImage ApiSurface::thumb() const { return m_thumb; } int ApiSurface::depth() const { return m_depth; } void ApiSurface::setDepth(int depth) { m_depth = depth; } QString ApiSurface::formatName() const { return m_formatName; } void ApiSurface::setFormatName(const QString &str) { m_formatName = str; } ApiTexture::ApiTexture() : ApiSurface() { } QString ApiTexture::label() const { return m_label; } void ApiTexture::setLabel(const QString &str) { m_label = str; } ApiFramebuffer::ApiFramebuffer() : ApiSurface() { } QString ApiFramebuffer::type() const { return m_type; } void ApiFramebuffer::setType(const QString &str) { m_type = str; } image::Image * ApiSurface::imageFromData(const QByteArray &dataArray) { image::Image *image; /* * Detect the PNG vs PFM images. */ const char pngSignature[] = {(char)0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0}; if (dataArray.startsWith(pngSignature)) { ByteArrayBuf buf(dataArray); std::istream istr(&buf); image = image::readPNG(istr); } else { image = image::readPNM(dataArray.data(), dataArray.size()); } return image; } static inline unsigned char clamp(int x) { if (x <= 0) { return 0; } if (x > 255) { return 255; } return (unsigned char) x; } static inline unsigned char clamp(float x) { if (x <= 0.0f) { return 0; } if (x > 255.0f) { return 255; } return (unsigned char) (x + 0.5f); } QImage ApiSurface::qimageFromRawImage(const image::Image *image, float lowerValue, float upperValue, bool opaque, bool alpha) { QImage img; int width = image->width; int height = image->height; img = QImage(width, height, QImage::Format_ARGB32); int offset = - lowerValue * 255; int scale = 256 / (upperValue - lowerValue); float offset_f = - lowerValue; float scale_f = 255.0f / (upperValue - lowerValue); int aMask = (opaque || alpha) ? 0xff : 0; const unsigned char *srcRow = image->start(); for (int y = 0; y < height; ++y) { QRgb *dst = (QRgb *)img.scanLine(y); if (image->channelType == image::TYPE_UNORM8) { const unsigned char *src = srcRow; for (int x = 0; x < width; ++x) { unsigned char rgba[4] = {0, 0, 0, 0xff}; for (int c = 0; c < image->channels; ++c) { rgba[c] = clamp(((*src++ + offset) * scale) >> 8); } if (image->channels == 1) { // Use gray-scale instead of red rgba[1] = rgba[0]; rgba[2] = rgba[0]; } if (alpha) { rgba[2] = rgba[1] = rgba[0] = rgba[3]; } rgba[3] |= aMask; dst[x] = qRgba(rgba[0], rgba[1], rgba[2], rgba[3]); } } else { const float *src = (const float *)srcRow; for (int x = 0; x < width; ++x) { unsigned char rgba[4] = {0, 0, 0, 0xff}; for (int c = 0; c < image->channels; ++c) { rgba[c] = clamp((*src++ + offset_f)*scale_f); } if (image->channels == 1) { // Use gray-scale instead of red rgba[1] = rgba[0]; rgba[2] = rgba[0]; } if (alpha) { rgba[2] = rgba[1] = rgba[0] = rgba[3]; } rgba[3] |= aMask; dst[x] = qRgba(rgba[0], rgba[1], rgba[2], rgba[3]); } } srcRow += image->stride(); } return img; } tmpNnpnZF/gui/tracedialog.cpp0000664000175000017500000000353012543167424015533 0ustar chrischris#include "tracedialog.h" #include #include #include TraceDialog::TraceDialog(QWidget *parent) : QDialog(parent) { setupUi(this); apiComboBox->addItem("GL"); #ifdef Q_OS_WIN apiComboBox->addItem("D3D7"); apiComboBox->addItem("D3D8"); apiComboBox->addItem("D3D9"); apiComboBox->addItem("D3D10"); apiComboBox->addItem("D3D10_1"); apiComboBox->addItem("D3D11"); #else apiComboBox->addItem("EGL"); #endif connect(browseButton, SIGNAL(clicked()), this, SLOT(browse())); } QString TraceDialog::api() const { return apiComboBox->currentText().toLower(); } QString TraceDialog::applicationPath() const { return applicationEdit->text(); } QStringList TraceDialog::arguments() const { QStringList args = argumentsEdit->text().split(';', QString::SkipEmptyParts); return args; } void TraceDialog::browse() { QString fileName = QFileDialog::getOpenFileName( this, tr("Find the application"), QDir::currentPath()); if (!fileName.isEmpty() && isFileOk(fileName)) { applicationEdit->setText(fileName); } } void TraceDialog::accept() { if (isFileOk(applicationEdit->text())) { QDialog::accept(); } } bool TraceDialog::isFileOk(const QString &fileName) { QFileInfo fi(fileName); if (!fi.exists()) { QMessageBox::warning(this, tr("File Missing"), tr("File '%1' doesn't exist.") .arg(fi.fileName())); return false; } if (!fi.isExecutable()) { QMessageBox::warning(this, tr("Application Not Runnable"), tr("File '%1' can't be executed.") .arg(fi.fileName())); return false; } return true; } #include "tracedialog.moc" tmpNnpnZF/gui/tracedialog.h0000664000175000017500000000060712543167424015202 0ustar chrischris#pragma once #include "ui_tracedialog.h" #include class TraceDialog : public QDialog, public Ui_TraceDialog { Q_OBJECT public: TraceDialog(QWidget *parent = 0); void accept(); QString api() const; QString applicationPath() const; QStringList arguments() const; private slots: void browse(); private: bool isFileOk(const QString &fileName); }; tmpNnpnZF/gui/androiddevicedialog.cpp0000664000175000017500000004631512543167424017245 0ustar chrischris/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://www.qt.io/licensing. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #include "androiddevicedialog.h" #include "ui_androiddevicedialog.h" #include #include #include #include #include #include // yeah, writing tree models is fun! class AndroidDeviceModelNode { public: AndroidDeviceModelNode(AndroidDeviceModelNode *parent, const AndroidDeviceInfo &info, const QString &incompatibleReason = QString()) : m_parent(parent), m_info(info), m_incompatibleReason(incompatibleReason) { if (m_parent) m_parent->m_children.append(this); } AndroidDeviceModelNode(AndroidDeviceModelNode *parent, const QString &displayName) : m_parent(parent), m_displayName(displayName) { if (m_parent) m_parent->m_children.append(this); } ~AndroidDeviceModelNode() { if (m_parent) m_parent->m_children.removeOne(this); QList children = m_children; qDeleteAll(children); } AndroidDeviceModelNode *parent() const { return m_parent; } QList children() const { return m_children; } AndroidDeviceInfo deviceInfo() const { return m_info; } QString displayName() const { return m_displayName; } QString incompatibleReason() const { return m_incompatibleReason; } private: AndroidDeviceModelNode *m_parent; AndroidDeviceInfo m_info; QString m_incompatibleReason; QString m_displayName; QList m_children; }; class AndroidDeviceModelDelegate : public QStyledItemDelegate { public: AndroidDeviceModelDelegate(QObject * parent = 0) : QStyledItemDelegate(parent) { } ~AndroidDeviceModelDelegate() { } QString getProductModel(const QString &device) const { if (m_serialNumberToDeviceName.contains(device)) return m_serialNumberToDeviceName.value(device); // workaround for '????????????' serial numbers QStringList arguments = AndroidDeviceInfo::adbSelector(device); arguments << QLatin1String("shell") << QLatin1String("getprop") << QLatin1String("ro.product.model"); QProcess adbProc; adbProc.start(AndroidDeviceInfo::adbPath(), arguments); if (!adbProc.waitForFinished(10000)) { adbProc.kill(); return device; } QString model = QString::fromLocal8Bit(adbProc.readAll().trimmed()); if (model.isEmpty()) return device; if (!device.startsWith(QLatin1String("????"))) m_serialNumberToDeviceName.insert(device, model); return model; } void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 opt = option; initStyleOption(&opt, index); painter->save(); AndroidDeviceModelNode *node = static_cast(index.internalPointer()); AndroidDeviceInfo device = node->deviceInfo(); painter->setPen(Qt::NoPen); // Paint Background QPalette palette = opt.palette; // we always draw enabled palette.setCurrentColorGroup(QPalette::Active); bool selected = opt.state & QStyle::State_Selected; QColor backgroundColor = selected ? palette.highlight().color() : palette.background().color(); painter->setBrush(backgroundColor); painter->drawRect(0, opt.rect.top(), opt.rect.width() + opt.rect.left(), opt.rect.height()); QColor textColor; // Set Text Color if (opt.state & QStyle::State_Selected) textColor = palette.highlightedText().color(); else textColor = palette.text().color(); painter->setPen(textColor); if (!node->displayName().isEmpty()) { // Title // We have a top level node QFont font = opt.font; font.setPointSizeF(font.pointSizeF() * 1.2); font.setBold(true); QFontMetrics fm(font); painter->setFont(font); int top = (opt.rect.bottom() + opt.rect.top() - fm.height()) / 2 + fm.ascent(); painter->drawText(6, top, node->displayName()); } else { QIcon icon(QLatin1String(":/resources/android.png")); int size = opt.rect.bottom() - opt.rect.top() - 12; QPixmap pixmap = icon.pixmap(size, size); painter->drawPixmap(6 + (size - pixmap.width()) / 2, opt.rect.top() + 6 + (size - pixmap.width()) / 2, pixmap); QFontMetrics fm(opt.font); // TopLeft QString topLeft = device.serialNumber; if (device.type == AndroidDeviceInfo::Hardware) topLeft = getProductModel(device.serialNumber); painter->drawText(size + 12, 2 + opt.rect.top() + fm.ascent(), topLeft); QString topRight = device.serialNumber; // topRight if (device.type == AndroidDeviceInfo::Hardware) // otherwise it's not very informative painter->drawText(opt.rect.right() - fm.width(topRight) - 6 , 2 + opt.rect.top() + fm.ascent(), topRight); // Directory QColor mix; mix.setRgbF(0.7 * textColor.redF() + 0.3 * backgroundColor.redF(), 0.7 * textColor.greenF() + 0.3 * backgroundColor.greenF(), 0.7 * textColor.blueF() + 0.3 * backgroundColor.blueF()); painter->setPen(mix); QString lineText; if (node->incompatibleReason().isEmpty()) lineText = device.serialNumber; else lineText = node->incompatibleReason(); painter->drawText(size + 12, opt.rect.top() + fm.ascent() + fm.height() + 6, lineText); } // Separator lines painter->setPen(QColor::fromRgb(150,150,150)); painter->drawLine(0, opt.rect.bottom(), opt.rect.right(), opt.rect.bottom()); painter->restore(); } QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 opt = option; initStyleOption(&opt, index); QFontMetrics fm(option.font); QSize s; s.setWidth(option.rect.width()); s.setHeight(fm.height() * 2 + 10); return s; } private: mutable QHash m_serialNumberToDeviceName; }; class AndroidDeviceModel : public QAbstractItemModel { public: AndroidDeviceModel(); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &child) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; Qt::ItemFlags flags(const QModelIndex &index) const; AndroidDeviceInfo device(QModelIndex index); void setDevices(const QVector &devices); QModelIndex indexFor(const QString &serial); private: AndroidDeviceModelNode *m_root; }; bool androidDevicesLessThan(const AndroidDeviceInfo &dev1, const AndroidDeviceInfo &dev2) { // shamelessly stolen from qtcreator :) if (dev1.serialNumber.contains(QLatin1String("????")) != dev2.serialNumber.contains(QLatin1String("????"))) return !dev1.serialNumber.contains(QLatin1String("????")); if (dev1.type != dev2.type) return dev1.type == AndroidDeviceInfo::Hardware; return dev1.serialNumber < dev2.serialNumber; } ///////////////// // AndroidDeviceModel ///////////////// AndroidDeviceModel::AndroidDeviceModel() : m_root(0) { } QModelIndex AndroidDeviceModel::index(int row, int column, const QModelIndex &parent) const { if (column != 0) return QModelIndex(); if (!m_root) return QModelIndex(); if (!parent.isValid()) { if (row < 0 || row >= m_root->children().count()) return QModelIndex(); return createIndex(row, column, m_root->children().at(row)); } AndroidDeviceModelNode *node = static_cast(parent.internalPointer()); if (row < node->children().count()) return createIndex(row, column, node->children().at(row)); return QModelIndex(); } QModelIndex AndroidDeviceModel::parent(const QModelIndex &child) const { if (!child.isValid()) return QModelIndex(); if (!m_root) return QModelIndex(); AndroidDeviceModelNode *node = static_cast(child.internalPointer()); if (node == m_root) return QModelIndex(); AndroidDeviceModelNode *parent = node->parent(); if (parent == m_root) return QModelIndex(); AndroidDeviceModelNode *grandParent = parent->parent(); return createIndex(grandParent->children().indexOf(parent), 0, parent); } int AndroidDeviceModel::rowCount(const QModelIndex &parent) const { if (!m_root) return 0; if (!parent.isValid()) return m_root->children().count(); AndroidDeviceModelNode *node = static_cast(parent.internalPointer()); return node->children().count(); } int AndroidDeviceModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 1; } QVariant AndroidDeviceModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole) return QVariant(); AndroidDeviceModelNode *node = static_cast(index.internalPointer()); if (!node) return QVariant(); return node->deviceInfo().serialNumber; } Qt::ItemFlags AndroidDeviceModel::flags(const QModelIndex &index) const { AndroidDeviceModelNode *node = static_cast(index.internalPointer()); if (node) if (node->displayName().isEmpty() && node->incompatibleReason().isEmpty()) return Qt::ItemIsSelectable | Qt::ItemIsEnabled; return Qt::NoItemFlags; } AndroidDeviceInfo AndroidDeviceModel::device(QModelIndex index) { AndroidDeviceModelNode *node = static_cast(index.internalPointer()); if (!node) return AndroidDeviceInfo(); return node->deviceInfo(); } void AndroidDeviceModel::setDevices(const QVector &devices) { beginResetModel(); delete m_root; m_root = new AndroidDeviceModelNode(0, QString()); AndroidDeviceModelNode *compatibleDevices = new AndroidDeviceModelNode(m_root, AndroidDeviceDialog::tr("Compatible devices")); AndroidDeviceModelNode *incompatibleDevices = 0; // created on demand foreach (const AndroidDeviceInfo &device, devices) { QString error; if (device.state == AndroidDeviceInfo::UnAuthorizedState) { error = AndroidDeviceDialog::tr("Unauthorized. Please check the confirmation dialog on your device %1.") .arg(device.serialNumber); }else if (device.state == AndroidDeviceInfo::OfflineState) { error = AndroidDeviceDialog::tr("Offline. Please check the state of your device %1.") .arg(device.serialNumber); } else { new AndroidDeviceModelNode(compatibleDevices, device); continue; } if (!incompatibleDevices) incompatibleDevices = new AndroidDeviceModelNode(m_root, AndroidDeviceDialog::tr("Incompatible devices")); new AndroidDeviceModelNode(incompatibleDevices, device, error); } endResetModel(); } QModelIndex AndroidDeviceModel::indexFor(const QString &serial) { foreach (AndroidDeviceModelNode *topLevelNode, m_root->children()) { QList deviceNodes = topLevelNode->children(); for (int i = 0; i < deviceNodes.size(); ++i) { if (deviceNodes.at(i)->deviceInfo().serialNumber == serial) return createIndex(i, 0, deviceNodes.at(i)); } } return QModelIndex(); } ///////////////// // AndroidDeviceDialog ///////////////// static inline QString msgConnect() { return AndroidDeviceDialog::tr("

Connect an Android device via USB and activate developer mode on it. " "Some devices require the installation of a USB driver.

"); } static inline QString msgAdbListDevices() { return AndroidDeviceDialog::tr("

The adb tool in the Android SDK lists all connected devices if run via "adb devices".

"); } AndroidDeviceDialog::AndroidDeviceDialog(QWidget *parent) : QDialog(parent), m_model(new AndroidDeviceModel()), m_ui(new Ui::AndroidDeviceDialog) { m_ui->setupUi(this); m_ui->deviceView->setModel(m_model); m_ui->deviceView->setItemDelegate(new AndroidDeviceModelDelegate(m_ui->deviceView)); m_ui->deviceView->setHeaderHidden(true); m_ui->deviceView->setRootIsDecorated(false); m_ui->deviceView->setUniformRowHeights(true); m_ui->deviceView->setExpandsOnDoubleClick(false); m_ui->defaultDeviceCheckBox->setText(tr("Always use this device for this session")); m_ui->noDeviceFoundLabel->setText(QLatin1String("

") + tr("No Device Found") + QLatin1String("


") + msgConnect() + QLatin1String("
") + msgAdbListDevices()); connect(m_ui->missingLabel, SIGNAL(linkActivated(QString)), this, SLOT(showHelp())); connect(m_ui->refreshDevicesButton, SIGNAL(clicked()), this, SLOT(refreshDeviceList())); connect(m_ui->deviceView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept())); refreshDeviceList(); } AndroidDeviceDialog::~AndroidDeviceDialog() { delete m_ui; } AndroidDeviceInfo AndroidDeviceDialog::device() { if (result() == QDialog::Accepted) return m_model->device(m_ui->deviceView->currentIndex()); return AndroidDeviceInfo(); } void AndroidDeviceDialog::accept() { QDialog::accept(); } bool AndroidDeviceDialog::saveDeviceSelection() { return m_ui->defaultDeviceCheckBox->isChecked(); } void AndroidDeviceDialog::refreshDeviceList() { QString serialNumber; QModelIndex currentIndex = m_ui->deviceView->currentIndex(); if (currentIndex.isValid()) serialNumber = m_model->device(currentIndex).serialNumber; QVector devices; foreach (const AndroidDeviceInfo &info, connectedDevices()) if (info.type == AndroidDeviceInfo::Hardware) devices << info; m_model->setDevices(devices); m_ui->deviceView->expand(m_model->index(0, 0)); if (m_model->rowCount() > 1) // we have a incompatible device node m_ui->deviceView->expand(m_model->index(1, 0)); // Smartly select a index QModelIndex newIndex; if (!serialNumber.isEmpty()) newIndex = m_model->indexFor(serialNumber); if (!newIndex.isValid() && !devices.isEmpty()) newIndex = m_model->indexFor(devices.first().serialNumber); m_ui->deviceView->setCurrentIndex(newIndex); m_ui->stackedWidget->setCurrentIndex(devices.isEmpty() ? 1 : 0); } // Does not work. void AndroidDeviceDialog::clickedOnView(const QModelIndex &idx) { if (idx.isValid()) { AndroidDeviceModelNode *node = static_cast(idx.internalPointer()); if (!node->displayName().isEmpty()) { if (m_ui->deviceView->isExpanded(idx)) m_ui->deviceView->collapse(idx); else m_ui->deviceView->expand(idx); } } } void AndroidDeviceDialog::showHelp() { QPoint pos = m_ui->missingLabel->pos(); pos = m_ui->missingLabel->parentWidget()->mapToGlobal(pos); QToolTip::showText(pos, msgConnect() + msgAdbListDevices(), this); } QVector AndroidDeviceDialog::connectedDevices(QString *error) { // shamelessly stolen from qtcreator :) // Well, not exactly shamelessly, because is more or leass my work though :) QVector devices; QProcess adbProc; QString adbPath = AndroidDeviceInfo::adbPath(); adbProc.start(adbPath, QStringList() << QLatin1String("devices")); if (!adbProc.waitForFinished(10000)) { adbProc.kill(); if (error) *error = tr("Could not run: %1").arg(adbPath + QLatin1String(" devices")); return devices; } QList adbDevs = adbProc.readAll().trimmed().split('\n'); if (adbDevs.empty()) return devices; while (adbDevs.first().startsWith("* daemon")) adbDevs.removeFirst(); // remove the daemon logs adbDevs.removeFirst(); // remove "List of devices attached" header line // workaround for '????????????' serial numbers: // can use "adb -d" when only one usb device attached foreach (const QByteArray &device, adbDevs) { const QString serialNo = QString::fromLatin1(device.left(device.indexOf('\t')).trimmed()); const QString deviceType = QString::fromLatin1(device.mid(device.indexOf('\t'))).trimmed(); AndroidDeviceInfo dev; dev.serialNumber = serialNo; dev.type = serialNo.startsWith(QLatin1String("emulator")) ? AndroidDeviceInfo::Emulator : AndroidDeviceInfo::Hardware; if (deviceType == QLatin1String("unauthorized")) dev.state = AndroidDeviceInfo::UnAuthorizedState; else if (deviceType == QLatin1String("offline")) dev.state = AndroidDeviceInfo::OfflineState; else dev.state = AndroidDeviceInfo::OkState; devices.push_back(dev); } std::sort(devices.begin(), devices.end(), androidDevicesLessThan); if (devices.isEmpty() && error) *error = tr("No devices found in output of: %1").arg(adbPath + QLatin1String(" devices")); return devices; } tmpNnpnZF/gui/resources/0000775000175000017500000000000012543167424014562 5ustar chrischristmpNnpnZF/gui/resources/go-bottom.png0000664000175000017500000000310712543167424017200 0ustar chrischris‰PNG  IHDR szzô pHYs¯¯^‘tIME×  ‹½ÆbKGDÿÿÿ ½§“ÔIDATxÚÅ‘yLTWÆ …" ãŠ:€Je…²©hA–ÖÙd˜aPR@öaesA´P ±+­Ví’¸Ôú‡š&¶‘5¦mäë½ï6 VôK~ÉyçÜsÎ÷îeþ‹^ÿö‡Fuß­>ûÚ&¹>…åßxLZ°äOZx)&7Ê'K»®] ÁL—#«´\â» h:‹ü¦ÏÞJQÛ0²'?ÈÊ”<ùS­Õá=ˆÏo'¢¢NØDvO¾Ï|V^¢î-nÉê—«‚°" –Á-X)hǪ¬ë/²2"eõÊ ÌnDTN‹0§‘|7 ‚Ô¢I¼&ºö°½+ùm° jÂò€zX á‘¢¾T§¾¬=Å€ORsL°´Qdøžìú)Äæ6A ©EH¦ aY —5"BÞD¡1ͱ5¾¸1Ä퉖ÿ“ä‚ä¶|iõ9—),\÷.°ÿÙIïØÂ¿Ø¶·;“Já/ª@`Z ‚%õdQ#B³šÉÒ iŽÖèr¶’ö°½ìœ¤(ZáÀ/x°_eÊü›æ®Þé3ßæ“Ig¾›CbkDèܢ˰#Y…q;³ՈQœFbñ0D¥c•}å0‚åýð“¨á›Ú ïäV¸ÅÖÁ)¼ ë•Xã+ÃG–n¿sÌí˜÷‡ë’hn—Èr2P…m)íðŸ ËN#ôÐ"#Œ²D’˜æh¡gÝâTp&½KÈÕ/Ú”Mg¾¯ò.ü$ì@ÿŒ^rÏ"2±Eç_r‰¥Yâ?½À愤FÏг´Ç>0 zö_št懘0ž»ÂíñQ=9gU0Æ.N9:ŽÔš«H¯ûšÂÆ)ãl-J9ƚؙÚî¿’å̇‹špö4·ó#,ÂÞ#ç!ª¼ ‰ê:dÍ·‘Óö‹¼å6$õ×Ií kB¨üœ\½?tLlý™éÇÌ®dS@*R*Ç!&ËéREת¤ø.ÍQcìMl“Bgu3]Ò1µÕÑ5[w#XÞŒ¬æ[PtÞÁ‘¾‡8zæ1Ë‘SYC2R Ï넞©Õ÷ÚÆ«õ˜é”¶1ÏÊÈÒþUZÃ%({î£|ðTc¿PHüÊ÷‘Ñ|&VN¯ç.]ÇÌ„Èàžù½÷PvúêFž¢nô)k¦ ÷>ÖÖ\33C¢·ÀÌ™·h`{j1ŠÉPf×b޾ñm#K f&EþÐXw>÷I|íyŠ{,¢æ‹Ð7á>ÑÔ5ZÈ̆4õæ{™¬ux#>~™ß‚ëàþFC[ß‹™M‘¿-Ù—Û$hr Š™Ù} s焌¯¸kÏké›i3ÿ‡Êz¦©|ðLsÖ¯ 9Î[¿G=p¸ûÖËÂÁ^:&ô Ðܬ,_î_Ããñ'ö•¡f`µ„åÃà 'HmæM,ÙQÒ iEZ™â£'‘^Þ‹ý%Ýàg¶ƒÖfÞ€÷áçAiUˆSt"½rˆ0ŒX‡HjaîqðùÌpO{¾Â3~é×]´áÂrOaKT1:&ͼC›Ýý›"•’õãPÏ]ä÷=@¸bÃò``½{æŸ@™ÏÈÚ{Â=C…„·‘ ¾­éU˜»Ìu‚Ö˜ÙÇtÏç:°Ø+ôÅŸðFkÜ8¦¶´üO_GÆ9££IEND®B`‚tmpNnpnZF/gui/resources/dialog-information.png0000664000175000017500000000314412543167424021054 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<áIDATxÚÅW[lTEþæÜv·»Ýv±-´¥ÑŠ‚HIÅH4‰<`Œñ¥òà b ˜(1á’(>Œâ-.±4b#¡.*ˆ”;”éîvwÏmÆz&)Ëîv /~É·3;;s¾ï¿äœ³LÛ#jŠLQB(ò¡qd00(A“!VcÄ µÆˆ1KL“Ä Ñ‰c[J°fëOœ»¾PÓôÉ•V¼2 kCÆvíTÖM ÁO47&v.Ÿ×¼@2cK¦y¸h*âšÖMí/õ¥•“šêjëU0t¨Á44h`à"¨À@ÎEO2“çû®WGÍͽ8k«2’!ú#6 Ä+Ö}pÚ¾Ãç·L¼»ö¾©Æû }i¥èXZÔ#@ÓÖÎmy©ŒÛ-ÍþŒ‹Ç/ Ž]B’Ö†;ÓÛïà‰–`ûXCJ¬ ØôÕ3jê:Ÿy|8GYØ”ò¦š0$Î\Ë!²Pñˆ‰éÂÙÓݳÄoë:ó¿xtmÕÒÇp‚"x üsÍ–!(C˜Æ0zS>î߈³Ýç¸Åc³âñ8¥ËC)pŸã»5óP ÚöB7u”C¬""µf{Ô™¦>ص¥à{¥ó8LÝ)"–~ ZÚ`áëòšÀ0JÓÈ€Ë é} O¾·³ßÝUØ÷8\Rͽ¼ë8É1w1­`9GÀ>ò0xHD]~'¿Ð‰‚QD-a¸‘Îmt]MáÆ€  {¬5™Êf£1F †@XH,0"×H¬Hj-áˆ.Pé¬Óúq±7 ø.”¨*‘—„ü qãxwO=3LèŒÁ´,˜f:Ea™4§1 A3;ËaÛ¶4N‚|pì<†oy …@ŒÓÜ'ê‚u!ýÅšðwøv³ÐMÈ^óè#+7ûDÇr Ðhôa»Èd2ù *KjXJ\“  J˜èå­‚[±'¶ÃNÌ !Yk#Ó ¢yÓhëùP{-E3ÿœ¦®g„; pl/4pï¥]È%û(תÙòXpÑHÓFžxá5¨¼ƒM*0 vìð!ø'è;„cAªƒ*A íÁÚÀul2¨½f染4+€Þ?!>•ZEߨ¢E:ÎŽ=º õˆÕ: Rj(º6®¯oÁpµšÊоxвþý€+'¯àž c•¡ äe‹Eè=eƒq•"“T•ƒª¹Ü¯Îzþràû‹¤FÙ—R6}ÕJD*6"Þ ¡¾9ðiXÊ%”QWBÜ'º e˜ EÞ™ª÷sd³oŠC>é[1™h}†Ø€†)&j' A«r ÍMsUºm5:©«Tó‹‡]xh‡>ÞXöµ¼ÐÄÛs˜¦íѪjŒŒD§›R|(ÝRÌ÷¤‘ êý×€ªŸ¡eSýÜ E׆öÛÿc¢Àæ¶F.¹:[áÅF‡Ð0p²@¤ ¨ˆ†ri Ód嘹^‡q±Ù1c«DûZ„2ʃµ¬0­pb¹b¯pàAsÏ×…l5ÓðuÆrðwø&gàú6ѵɅBYw Ææª‡YûpQ–7ðâ? 6ïeéO6IEND®B`‚tmpNnpnZF/gui/resources/edit-find.png0000664000175000017500000000325112543167424017134 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<&IDATxÚíVYLTgF¥­„VPYg€f˜}¹³oÌ0‹²Ã°ˆà‚ZW¨‚(‹  -jÝ[—"u©ÚTmjmÒ¤OíKŸêC—ø‚Öj]æë¹7ÖÔ´E[›´œäËܹ÷Üs¾ÿ;çüÿ ðŸb„ÀÏu %x»®ðW* ~¨—&ÀãñNìÞ¹+ؽi3âⲇI^&àóõ瑩®`xxøþ—"@æ[´`aÐçõBœ.B²@aªðâ_ùk5šÏ§%%A”žQª««ƒlŒ¿E€l,aa­P(ü¡·g lV+$P*PÈ?þÎw"!òÉu˜Ža*H%°¤×·¯EBBÂ-z¶˜`"¼2,²×G³2÷Ћй;`6™àt8iw@&•!âÈë|¾àÛ´4 $éÍȈˆ/Ùä“™ós:7lD{[sÈt8~¢Ø¯G`Û‚ù ïêÛ‰²ÒR4Ô×Ãå†ÅlFa^¼n"1 l6<**ª ""zFŸÇ‹¼œ\tzd9hjlÄ–îœ>y ³ÊËÙ’´ý)2~UeÕƒKƒ1ÐoÕ7p«1ê l0v«ûÕ¨5ÈË-Àšæf4®X 7“Iå0Œ°š-Г½Çþç”Ø·g/.œ;+_F~~þÏ”KúQ¢ú?8>€æUÍ,S¸2DO¥ÐRB È­QkaµØQW·'pîÌYÔTσŽÑsêè´ ëû”ø ¯U••Ü‚º::1xþBCC/=C€,vn pŸ­wWgV‘lþb?4*5¦ð¦ ij"ä29”pr{IúåË–›šVÁn³C­T?“\"Î ¢°#ypÿœ9ý!®’‡DaaáÊ)|J`ܸqý»¾o£µ¥• ?5b|\<"##¹”Keìª8%Ô*b&Ç Q—±D-ÃÝçH2 ”rWÂöÖ6l¦EõnÝŠÃヌ«W®¢‡z‚öˆ³²èºÚº_²³³©~&dû0§ÌÒ‚\¶s‘ŸÀ©!#‘”pØí0S`¶ãÓøCé´;µª½ÃfãT¨œUÁ‘IMI…Éh€Ëf?wò|^z®E.5imÍÔÒå ¸gK„H¤ ìû0oOçkª0,QÍñãs9Œ}ð;Μ+ó=î¿!Þø®Ý´ßÑ [Ht¯}žÄÛÓÂvdÝTàPÿ2‰W>9[¹†¯Ýµ}®¿¼½T-¸þ+Û¹Õo[BŸžLcv©Œgwl„e׎ •·ðòÔYÌ&K^n÷ÝqËÕë°j>ÉHx°T*’«„æš™:±L•± F{k Ù¢ )ý©u¬iF¾jsÚ¹­Þغ¿úQ2D¹#+w bÀ7…¶^B-µñÞ×q.]09 †¦y9Æc·­çklÛvϽŽemx ECàÈñsPá8ð0ÔßGnî‚alÀqÏ€nÙ…|°à]ã®»z©u@UDZóΔËe躎L&‹b©Èµ­]댌îyÀw+ßÙž¹ï2~ýiÕØ¾¥Oß»ÄKH¥RXX\DKs ººâ<Ö=cc‡ÞŸœÜGó_V „ˆ+Ð(=2ØÇÙÌ/ÎÝ~M'm4›`™ … ¸u`€Úo#™\ {G§NLŒøbÈ>°º—I,ªáÀ£›ÑUsÿð€0M©tM±˜'þÒý3ßÀ¨rå‘0XÖuI3”:EZH’n*-ËbÒ¢bÒÂb !*äU.‰„œžùJÎÎÎÊùùyùÄl%j®†Ê†×@`dºnT E£x~ttjrœ+?E¿‹ï0„›$~äÖÅã´Ú÷z÷‰‘JÛ%ÂG°#—Ïë!­WGÀçd²9yê×9ýáááWôº÷ ¥º¯§p±U¨)Œ0}Hw“ù‘¸Ltˆv-/ÿK„]ܛƈÍnlrÙìÆþŸ¨äQ%fº´8ú´<úÇNÅÄߺ:¢jî†{ÓIEND®B`‚tmpNnpnZF/gui/resources/document-open.png0000664000175000017500000000210012543167424020036 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<½IDATxÚÅ–M‹\E†Ï9Uu?º{1a‚âç•„ì„0½;Eô¸ö'¸v‚‚KW#âJ!¬² H .i™d:=™é¾·NyNÝî)¹Ý×;Ýhæ4Å©š†÷yï[g憠](¥ þÛ a L ¬ƒ_ÝÛÛ{ÍM0óÖfˆ(xïÃþþþC9>R}¬´ëÓãã_LJŽždíSO¥ß¯FÙ4Îóü#Ùþ&¼ •í0ns2·NX¿KÐ6¼mUsyè3€q!j<*”èH#ž[à.ÝNŸ{ð¸ñÉ7᯷¨ß@ì[V2 ð›ï—àë îc®€.]à^3½W0«‚Pù 6„â/¿ûùå7>„ÏnÀ° ßo}ñÊÛk °`¨êpøFFÞ{ÕÁ›ï80ÖÁ¯÷ço­O n˜§ú¢?×U„5£¾©ºXþªµá[' šªo÷ð:œ†p¾ÕÔþÝÀ¼Àb NWÐî=?ë.ÕÔ|è¹ö¬FÚ¢ÁC©§‡‹úÄš­70>š‰žWÐÔ»À̼րjf¢OÆË©LÚ×¾º{4¯ý%¸€Ê¬™X$}ýé»Ï ‘˜CR<™Ý\1¬ÝÆ>­j 4‹äÀËšýxg¼cË<«¾¿=fÎɬj ®à¥Kåܰؤ}ÛÁÓg¿u°¸" 2•- ˜ÇÖ JbW-„|÷¬þÅ‹à³y`‰]á™N]B·"Pfd—…=d*3B˜i4PdÔ7 4¶îEèH²Í‹,>yW¡.$* :´ÎšñÉŒ)ÄìT²Y‡O&°y q*®"%$䀔[Û̘?OˆõM¹tH@Öv…ìö)Ûî^¶Wv''µõââEÕë»–Œ3vgdî]v¾š{,Õý‹*GŸÖæê#âÇð¬æ­øÿ:јuÀî û‡¥„ ¨  \dý 9Êú„_ɪÂIEND®B`‚tmpNnpnZF/gui/resources/go-jump.png0000664000175000017500000000133612543167424016651 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<[IDATxÚí–ÏkQÇgÖm©MK<jMÓ“Þ¡J¡¡]J¤Ú’SЇ\úx/xðA$)ZÈI/zSêE XÈ¥âA¨“Ö†´æ½7ãlXÂB !fv?̼Dzó}³o‹Ì ÿÒ,¡/àÿ`·šÌçóBáûÄ_»ã¥âîÙò~i\k5¢ ¥¿£?V*{ï³Ù¬ñ£ßGfŠPO Ð#ˆÈz ‘C€„gC'G>/..ß躀r¹l[Ñ!bF”c@çbbg|žž/Äng‰Ä@W÷€±L}ž‘Ýälѹe\cî–^ÍÌćº²,1P⠋㗠ѲÈ"Y%]À;€pš=BÄf£åâW"‘ȘRô0—{½Ð‘€`0øÇ˜ƒíXìúQ‹ç Édrý jnIüX†Æ·D4zuŸ— ¨íÍÙñQ¼´*­_h­m­ˆo ´Ú~›{sÁ×s “yòã6­€Ê=9ˆq€•wS: ´/À†LÚn¸zX{ŠÌ7½ÉÅ@Ÿ+J¥ªÒ}`|Ä ¡¹4þ‚t:ýicc=¡j‡gàç= ö|î‚Ö6?í²ÒµáûÍÍ´aý?"ß ât8<¹577»%]3Ýavn¡ÉÐÚÎÎ׋îpM¸ÔSSá xQ÷¾¡s«îÊ«ý.è è 8¶ ÑqƒÂ€ã=q3¶ËÈE{P-¨¹(f®ÕHàˆÐž÷aÛ“Ü+Üp“OÕÝ“µz+=iD8¢IEND®B`‚tmpNnpnZF/gui/resources/document-new.png0000664000175000017500000000260212543167424017675 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<ÿIDATxÚ½•[hTW†¿=sæ–Ic“ TBÓHÌ“ØV¥ )B…<ߤD)Ø"Ú‚¤­ÆK DQÛZ¤ˆÐ¡O-A¼Tm!¥7”zÉäb.“¹ž9gfwÜ8=™L¡ôƒÅÞûp˜ÿ_kíuF“Rò_"zÅ2*ØA &•8)Ccœ$¨¢Kn’P@ƒBˆz ž…àGc7»(g]km«kËh¨hƒÓƒ‹úô5\¼üž8,~àWÚå÷2c1 ¨×uýB*¥ƒ°¬Ê%j¥°Ïd3´ýÔF¼Ÿí¯n§é…&õìqò1¨­¨eóŠÍ¬­[+zþìy[_§_'Är‹44,<Æb8!ŠÀÓ}ž®¾ÏÕÄU65mÂëõòÀ1=6ÎÁ×zøô·© TSæ÷Ò¾¼³Ÿm‘yFñÎ,B@AÜñdUg o¢°nEnsîþ9‚Ë‚håátˆ &££ä™Š⩎|eÁº "6ÒAƒ†•§Â³*`Ùù½镸ûy¨‡Xâ·â‰qò$“È’@—Ê]~X„ ÉÞÙ@/?€ål˜&Ã!c<ÿCÐ[FµK ðŠÐ­ûD¢a& IXO0R› dx½X æê½Z)œÉd2DQHƒ¼#ß•¢—>žæY^8$à%`ÿ-ó›Mj¶q Àøñiö ¨ËéÀãó€h„êã‚€0‡á—€7{AIØÎ& 8I,¤*xj`…gcƘÊH¼ ~?,õág†šX¼dI¸7…zŸQn.¨ùÐ4­‹¶r-u 3k‰Á„_´,3LñŒèð(iÉ%NÚ­@Qc‡–æV^YÉõªë˜ žÒP–a†Q2S0¤Ãh ðwèçG~.Rk”®Jee%Õl‹nãnÅ]R)¸? ~ugÀtÂTÒ xÈ ;ù˜Ð˜…³n·›Õ¯¬¦ûJ7{&÷pcÉ ²ˆNä 8ò³æMs€v`rHm ›ˆååå´¶´rèÆ!úþèã|à<·kn£gu\NnÓMýh=céØÙq ¸ÄeŽ’—âÅL¬Y³†ÆÆFÚîµ …ˆÇãªB>Ÿº`ÍÍÍtléø ˆÊÅ[PˆY&,SÕȉ©Ìí0ç(Š—¾¤ +*Ù ó° Ã|¢ñ‚h6›}n§=Â2޳(a,“É(Ñt:aOÎ*âi3$íVÀ¶hžœÕu]M@$É­ õ{•UÆ—û;{€þ’”ø‚%PY›¦I*•"fddÇËÒš¥8NÙ¹oßñÓ_ŸúLJ™-e ¨xé ä2WY ±~ý:2S™Ù{ ëô7'ޤÄm]B˜wæ­ÙçË?>>Ûí™?ÐsäÜÉÞ£ïægßöØGÝzUþX,Æôô4Á`pF¼÷pw»EÜ^°× K Òd—Û%;»öŸþêè±b™ÛC›æTr¡Ê¨©3?ß·ÿØ·ªçyqûÔgTM‚¥ç¥>:ÂᇆápÇv}qä»Sê¶Ë…|ŠC9ëY8  ß"n×€Ê&„øùg“$jHõ+IEND®B`‚tmpNnpnZF/gui/resources/media-record.png0000664000175000017500000000346312543167424017631 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<°IDATxÚW_L“W?ýZ( ŽQùcf¦³Ùfˆ}ÁnâžææxÑh@’md™¼,îÉèDA!dÙÔ-Y¶‘ˆ!d#™º,ÀôAf˜(MH4Û¤56Aþ•h»ó»éùr©qozrïw{ïùýιçÞ{®%‹ÑjJss³=î²X,{øÓÍ⊠Š/.c¬¯Ï0Œþ#GŽ„W£wEMMM.SÇÍJ&àÄx®)q#–z†»:¹ÝpôèQßKhllLáÿ¾âæat,--Ñââ"…B!UãDPl³Ù())‰RRRPãýA":ËDN;v,´j§NÊåþ_X<‘HDÎÎÎ*ë\.­_¿žœN'¥¥¥ÊÜÜÍÌÌÐÄÄù|>åôôtEÆjµbÞM–ŠãÇûW$P__ÿ6÷]fëò”òùùy*))¡Í›7Sffæ2+Q@c!{çΡÔÔTE299Þø—I¼âĉ»/$pòäIX> p(šžžV€^¯— iÍš5d·Ûa‘)(Ð, Hûý~ºzõ*MMMQFFȉRÆñ?G ®®kþ'ƒ{—oݺ•¶mÛF¹¹¹P‹áRˆI@æó<âCy"+†††èöíÛX!åx·¡¡AÅ|( pL뢢"Ú¾};åååÁj¸\À¡D Š/H0 Yxc†‡‡ñ ]žxp³Ä=ÀŠ­6Îîs€5ÖmïÞ½p»¾ÞnZ¯è‘#1mmmð*–º‚<ÿuÞi>#DuÇ`DüÎ;)??à €Hô‹`<,…ÀíÊýJ70€L`[¹Óά;¸Ó¦¥¥¥Êýk×®¸¸Ô†ÝS—¯P ¥•ügÎQ íÍñ:GffÉñÖ›dÑ<‘c#ããã ]oô÷÷Ÿ±qg9‹A-[¶PVV–n‘©,:ùŒ|_CA^O »×/PŒç…'|4÷ûô¬§— øž’r_€xVKâñxTP2þw²” þ@'N¶šœdË,÷ŸýŽB¼ÇmL& bX(ÙŠ6×Ü^økˆþþì„å„„(o:Ú°aƒÂ&°AÀ- DØÇ¨Í€C™¤Ð訷ÀY ˆPíð¸Ð.;#ÌÚ´i“NÀ .q".Ã$ô„( Þ!øÁ Ø¿âQ"ýD3¿]I$`zsݺuÀ.ƒ¸ä†C´ŠëÅz)ö²Á38LR9ˆ˜h’Ç¢´Äñåè¶Ì‡ˆBa ß")BBt"¾ä6¶MN0éÔ£W'áÃ)öä V¶Ä€U¼¾\c9"¸£1Ä‚6D+‰útLƒA},k/®G-%­¤*]<ÚÄ ³ÔøæŸú?µ¸HÇ×õá”ÕOObÀ'‡?垇èd2?ü€"X*X¼Ä²À¨aÔøF?þwòX":°¤OÃ@È£GôAm*x¥ær¼ã¥%n/2§Å8p8¢ˆà[õÛ½;(ûÓuðeúîß¿¯°P€mpý+ ‚d‹À:, ½ös;¥x½ 5ÁÉäeTÐÑ®Æêt}<0ó`[‹‹‹ÿáA_“G àÀÀ=€í˜¸#¬NÊ®®"ƒ3"µ |üÆÒ8óa«³¾¡%( ===¸BÁZR-q¡çÿcœX.Ö·¶¶*òÀ01G8þ¼'"{UÖ>~ü˜®_¿ŽûìaDTDßÏz?ÆÉ5``€>|h¦sÀ¦dDRN³¼ÇêÁ¥188¨———ë/LËóB±à}}}¸ˆ$úoƱžOJ«««Í¤ ‚Á  Ȫª*Ü”P%zpJO8ö;¯1,¸ž—^¼xÑÿ´üàÁƒ*-gɇ2XÅ»w零²2±DOÏôµ‡¨åëííÅ8F[¥åwW|˜TVVær%yaG¨„ÅívSNNegg+ÉÉIzúô)ѽ{÷à9É%e©àöŠÎÎNÿªŸf0Ÿf\;ôÓkY-}`óiÖÕÕz©ÇéþýûÍÇ)×΄Ë*ñ¶1§ÝÝÝ/÷8M,ûöíCòº‹›{X±›ÛËžç܇K ÷J·û/]º´ªçù!‘0FíúÜIEND®B`‚tmpNnpnZF/gui/resources/script-error.png0000664000175000017500000000325512543167424017730 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<*IDATxÚÅW{L“W¿´¥ïwéƒR mi)S@[¦t:”IÔ ãL¦Ä͡Ӆ)Y²Í‘:#›nf‚ÙÔD¸80Ý+¾u¢,nÎI4:ÔLQ9ûÝFþY›ØäÇýîýνçwÏùÝs?=S<Ò?‘\.ÐF>î¢øiøœph4šЪž€@4æ¬ ³Ù< .ÄØ"¾»ì²dl”V«Ý¬T*ÓÃF?ƒËåªÏXqcåèËú±Ñ-`l«™1Ollìô¥á$ 1 ëT*•?‹±‘e E¹‰±R›Í–¬Óé\)ŒÍÎØÂ •ʆHMEVaND8 ¨AèÄâ|§2iÄžÒBãI‡=ê_`ê.ÎQžÄx µÛíËÇn.Ú°0±>Ÿ¯ ‹šš¶çþh¥p'+`%…BNj•œR½Q´z¡¸{Sð-l™™™íœtØDEEE{½Þµ[ëìz»†Ó¦Z#9΢££I¯×Ó’"1ýñ‹–VWÆ4æææÖ€2œ)C ïÏ÷¦ùôOõõõT]]zADCA1£·KØ=¿ß¿†×pˆ6Ëd22™L!§555TUUEqqq¡1n؇5ᬄRˆ¯¬B¡Þ^j2÷XmT˜&Д¬a4Ò›H#¼.Ê:)7ÉNF#½¦7Þ/—)?Y÷Sàa„óŠ jÝõÃ"Mo'Óߘr#^M¿šJc34& ÖÏ^ ìzºÊÞ‹è4Sö޲žÆqÌxÔqÌy$ÎýD‹År³U¤½| _‚ù5à:ržç÷Sjj*eddP&ÚBÝP©© ï/Ê´_¤9—’’rk¤<r”ÑÉ(0Õn·ûÓwdºËñ´ÉbÁî๾»ì-z£¤„’’’‚£áho¥¥ÓÍh{ˆ`£ÛM»b]*¤ÚU111kë • $ÀCÎCTïñ3(jÔ¦S8‚4Îå¢?%꺿s'ulÙBS=430Šj³2©glÝv tZ&§äädZMÍ*Ó>^ŠÑ(Pë±î<%ƒFâqñÒû¾ÒdþËãñPÔ~…ç_­¦;ùteÜ8jNñÒÑâiÔS8•z‚™t+.ž®ŠD”[.úÎ3ü×¾[?;`{RZWÅ ·ŸÃ‚_âœ_†y—XB7±t)q5'$ЙœêÉ~žº’}Ô mp!nI‘jMñ_ÄÆ!Ÿ‚4Æ\?ºÝ½g#"¨52’òqÌâÌfši0RÚÝf uøSi;Bƒ~:p»ãˆBŸ¸QC&0×`H9…¯xFpétT MÈ÷ ˆÓRŒJz—€¢Ô‰e;as*;»ÇƘùiꀡeDÚµ6†!@^ó!RJDˆ—J¥´ ÓÏ¡:F£¡…ÞÙ€ ? Ý´‚\„OC@Ùàói¶Ûé LÙÎfÁùDå+ŒÁX ú8ïdV¢ã?´ÓçÛÃõ à‚ ÎŽ‹û¾»ÁnC$Ž瀣@#ð^àÏÈû6²§½À>ˆó«uh‡B ¯&lÈSj«*¡ƒì²»nÁ”vàМchöu 1c YÙ÷£±º˜?TrF´Æ§p™çØ…×bÊ×À`=íÆXÓñ%œ[p"*ÏܹÕjåkˆ‡B@òy­¢ˆÉÊýG(Ï9Øá:L›ç¯ã¹– _ÌÀX$úyNçƒb±²•ïE|žñ5¤C!àÀEÄUläEÒö8œ'UÜ0Ïn8œƒç¥@1úAžf‰M¼šb÷óðí°w°ïÜËPÏßÅçõbK`L7E)Ô7Àb8\m,àJQæ‹XdkßÑÃWs° Uqâ@ièϹßz«ÿ_Fèç2qû&º·S_^FÎ_B›ÏDws˜¸¥ÏyŸÕjµ·á縚g÷—ŠþŽÞ4Lš1 cD'ÈØ$„ÿ`¾HÔ1Z"9–ÊØ7±Œ¥óP4Wûr\͉QŸóÁÀm Çãü2ÿóLñ¢’—×€'IEND®B`‚tmpNnpnZF/gui/resources/dialog-close.png0000664000175000017500000000404512543167424017635 0ustar chrischris‰PNG  IHDR szzô pHYs × ×B(›xtIME×  ÙÜûbKGDÿÿÿ ½§“²IDATxÚ¥—}lUgÇ?çœû~ûr[Ê»-”+¯" “`†Ø Šl:4F'Æe7]f²˜ ”MçËÆâ’‘)SP,3†eI‰… cŽ%3`7„µƒñºÞÒÞööí¶÷í¼ûÜ>çBKÀþ’o~÷Üsîó}yÎyîyn¯”Q]–+qku+ÔßÀ|Uƒ/ÌR¡ P]È:ÐfÃÞ2àÍÍиÿ·€y }P`“s@>À£…Bè©¶ã``AΆ?›ðÜ3и·#@ùÔ‡awÁq(d5÷Üøe˨œ?_4*³äÙxœäñãÄ yö,y@—BžÝ [ÿö­PŸƒ{ƒðZJK…Ú•+™¶n²2”üÐõÐÛÜLëŽô&“dÞì…u/ÂÐÍ(=‰‚¯ÜïgΣ2fáÂëß@ˆ™Ëqzûv:>úˆA95G»à+/Aú Pž%18…p…¦Q¿~=±ú™¨êè¸.P^/~U8©(ؖŹݻéøä唼±¾8x¥$gÊká`ÆÅ€)+VP1»ÇÊ`êi,3kfÁÖÁÒqű£‹ïò¢ ˜Ù,ù¡! áÞÎdP„€ÒiÓÈŠ,ÃÀ„Ù+ qšñJý|Ø€º VYIÅœ;Ä`ݤú.Sv×—ÿHu‘Mw ½¸Fß0#d û2NÕêž|’¬ãêèÀ¢&.]J)‘„[ž‚±×& <ã'Âk¥(G,Z€V©Ñ;”dÒ×¾Ãä»ï#X5žÀÄÉ|úî>T7‡_5ö1òizûzЦNgþS?Å_ZJåâÅœ;x½«‹¨¸qxK×1 ìë0\µè¾Ö $ „4•ð¸(¹|p4ŽšUk)Ö˜¹‹™ùÈfÚ»"¹l’Îî8NõTþä—¨þA‘àŒ H&}}DÇŽexlÀëApdÁÕðBªK)¨PRWŠÔéŽ_ ÙÙAõÒE dB5‘êéœøÛúúÑj°ü¯ ‚+y¦•Ã?B¹¡2mœT sp ˆNƒ÷ŽÀy PæAl l€V„ƒ6þH’`Ä!RªréäqºÚ;©ýâÊ+"Ê&M%Z3‹®D7«Ÿß5мët {ZËX3E%f[;F"‰ X€8ÿ¼ã”F˜ã¿à‹‚ªY8C„3Æh9´ƒý†ÁšŸo»"¢V¤RÀÈêüø{\M­2ÀXÕ†pQ êàC"Ÿùt«A˜¨yäj¡AV"…”…²Ì™’#~è÷¼ñôcò9¿Nµ·žb÷ºªC—©®Ì åE¤.¾ІMIÏèx)@ª))ºWPTpa£ŠSYsgÀ±=;8¼k;×–©çÙúÍ5T“LŸ‘r9Ÿ’\BUŠd- Pl0¤Y®8^÷ÌfòЖ€ºe,ÿÞÃ\[þ`ˆ‡÷'Íý-â!,ê%,¡#½â¦¡W$¡“0ÁµDȤ¡õ<¸ŸidÃΦa²ëÕ܆FÖnmâãÎÉœŒV-P´«f<®ž+ëÀÛpVi#–.‡tζƒRÛÈ··5áAÞsá$ïíÜ4Ꞹã®FV½ÐÄ…Þ}yp|@PtlË›ZÀ‚Ó€£·0`ÂÛ‚LÚ’à¯oäþ—G“÷_:É»[H}‘c;#DLÓ´â×M´…H`)r<Ë•U`޶†,m9ÔVÀ àzf}ÀŒÏsﮃ£ÈùûÏ70)ÖCÍdè¿ÐLª+Á„k¼;ÊÅBUZ=‹‹‡^'‡ÌE™€g2½6& ¥z3£„×U°Š)äE/¤Ðr‚ËGP¬ÔÅ“{¶1j±„€I•þ÷i}õjv>C|ÿ6‚* µ‘¿ö~ý€«áÕ9Ðr˜ `»ò øÚßi¢¼~8Ç656{ˆAqÀ6AÝ_ :ßL®7A¬þKœØr¹Ö¢$¤{ÅŸŒßø+•ÎèAÌ \ê†Þ†¯Ê•. zzÛÝœ F¼tË }ÄæÁX?hIj†„%çwÐC¦H|ë{Ã_«I1Þ1‰5öÍn×ÿ ü5çýµ¼IEND®B`‚tmpNnpnZF/gui/resources/application-exit.png0000664000175000017500000000334012543167424020542 0ustar chrischris‰PNG  IHDR szzô pHYs¯¯^‘tIME× Žk°ÝbKGDÿÿÿ ½§“mIDATxÚÍW[lTU]÷Þ™¹óèôŠR>JUb¦Ć¢"HH0¡¼ ‚ÜûôæÜ["ÝÉê9=gŸ½ÖÞûÌ™ þkSàY+Í‹ÃáëAMS•ÇLä¬hÔU:;3½}}f9-I½4Zuu eÔ¨}½'O&²÷ï«Þ¡ü rzMβ›0Á^]Ýh65­Œ<ØXLËvHëº(-ݘ={²VUUQgð8Ê­RäÂÂÊ̵k{]¯†ad„€¬ªFn9’ˆWTÀ4M ˜P’¿Ñˆ§n6ò\¶ƒß‰D]=Rµ |ÖÃP!|uh²‘Aé§®'òÍœ9“38S"? û‹ep¶¯Àè;MüJ29ï‰g{Ê[à®ØÄ1òb*”¡;”VÅ›_@ h`#‘obrVÎ$ÅWO ò°j (_®À˜{燥žO}»‘úE,“¡)Ä…!ïøbë6£ºþ=IΙqàXÛ)d>[‚ kBaB&²Û–SUþ,bÕz {w‹ˆ ðð;ÀÿùU‹ëD2Ilù½/²&™e"ùÉRD[Oq X·Kœ«¬Y(ÝUàa—ò£sze Ðß'ŸWû÷ã¸ýQ-lßç¬ÐÏmâ%½»e1pîgùUÎ1ÎP,Ž †w׆h ’zZÎã̲yP“½HŸüí›Â"¶¬ ùȤ !@À´@{RÕA¾|†Ïž­›G±šDLÇõ²÷ùÈop:>øÓôñˆ„ ú­¼ö ?Í“Ïþ–Å"¼‘*ÑÜðæ€8ƒcù1!Ío¯ÙjÁ07:²,ÛGÖbˆÌ /pÚC†ÁëÞ>ûZ2†ŒYDëŠÃœ².ЭÇâ—â“ÆWhÑ4ÇâWÌ{ÉüQ#(®–E™pÛø™%¨„ Ms‹ÎШÓõ°µ ¬x ” ÷.1§ =¡‹6tôölïéê,ϦÓê£ÿ {t E¢NX½qit²ÿæDîu8>ÐŽÂ0n/ž€yeçÌ{fþö7ƒvÒDâhIEND®B`‚tmpNnpnZF/gui/resources/emblem-locked.png0000664000175000017500000000155512543167424017776 0ustar chrischris‰PNG  IHDR D¤ŠÆsRGB®Îé pHYs × ×B(›xtIMEÙ  žì‘onPLTEúúûûûûûûüüüüýüýýýýýýþþþþÿÿÿ±±±òòòòòóôôôíííûûûZZZyzx  !! "#"$$#$%#&&%(('()&()')*')*(*+*,-+,.+--,//./0./1.01.1203413424425636757868979:8:;9;<9<>:=>;>?@B?AB?AC?BC@CDADEADEBEFCFGDGHFGIFHIFJKHKLILMILNJMOKNPLPQMQSOSTQSUQTUQUVRVWSXZU[]Xxywƒ„˜™—›œš›œ›¬­«ÖÖÕÚÛÚþþþÿÿÿ¯)rtRNS 3RVW­­­­­­­­­®°°°²Äßß[bKGDy¡ÜÔÐRIDATxÚ¥ÓÍJcAàsúç^ƒˆ É[¸qå#¸ò}ŸÀáj ±º«JIr¡;qPfµëjú§¾È÷IÆÝw ñ3á©@žd|–²¤oAv-pßn*Ç̰á*ŽCL)®µª¼éC‰Ó)ÊåQN)¦à1’±\ÜG`4¦\Ÿ &« fjlïAµågŽÒï U-0…ç ²ÂqNg‹RÕZ@Ý_çxû•ð|>/IUº-ju{x*þ4«™iEŠÅ5ðxJøbŽuÖCPÀ!| ,ÆýE˜n×ÛWÀÍÝÌKd ‚؆€d—¾C D­ï`Ò³haª¸vP´1 ØÁZÀiÿú«}· ˜lA8Ú(in .7'Ì·ÀKæ€ÃŸÀò/ƒ³¨_Üÿcºßð÷¶?{ÅIEND®B`‚tmpNnpnZF/gui/resources/android.png0000664000175000017500000001216512543167424016715 0ustar chrischris‰PNG  IHDR00Wù‡bKGDùC» pHYsgŸÒR vpAg00ÎîŒWžIDAThÞµYi´U•þö9§êŽoÈ{^&I˜B A& ˆÊ ‚( Ò "¨­`«¤— b *H£QédÅZTše†f !aJÈKHÞ”7Þ{ëVÕ9gïþQ÷¾€vK²ZÏZµÖ}µ^Uíïìý}ß>çvq<Öó8¢ëcx%~ÖUOè|¾TÌo«ÒÂ=î•V|› Šb0@@°°R—„Ç\UŠA'£T¤¼X¸½º¶Ì}M'1ûx8øVi‚Z"]J¼03Ÿ¼êo `Mz6 ºŠ4ÊhQ1“G°eZ­¿ª,b§H¤ Ó(Ä$Fñð:,,K’Ô9NØÔ©hL\eX–œuð߸õ…cT·‘j%€Àø×³W¿c\zg‚tðÃp DiáD(ðmšÙBSˆhû^ GT¥Ú!GUôS[QCê‡ÀpÌäœ(—²r)À rÞùÔú_N;ââ]#±.ˆµuØTðȽŸ¸p.SÆÄ¶VZA×Ë–dCi/óþ»ªèß?Aì*èÓBD)ÆÐƒ,RXİðp`Xöp©‡M=œeÔ“Õ¢Q@´³©üüs5‚¨‡™­ž{àymí?n*žüSß_Mí €8r \?ÊØC‡aApú·#‰°›mÍzÓâ>¶S1âûˆG‡±XÄœ"±iì&6Äq‚Vµó:Î'åÛ àX‘º´küÞ‘íÎ?ÿø°*u ‰ÒwŒí}àŽ—N"Ò¢ÚXÆ{¶ûv¶ÍþçÈ÷c¤Úgæ–?‰ù“°=Y…ú³ðA" @A`ÏðÞÃ9k-\ʈ¢ûL9³;ŽGˆItÿºKX©²"Rß>ÿ죎*@Ë×Ý kßÙÞ€K  cwR¨[Û±ÏU*£¹zÒçRçͨôb²®cãð]ˆa!&iH5Ø3œs‹á­Âúžßabálظiu ˆ…éÈË—Üó~<„F+êgæã¶ÿogþ ê–Ax!¼ðê&ÅT­ ‹o™Ø±ÛZ¡x–õQ¤É{|¢"äseR D€9“EïvdÂYFœÔ`cêXˆ3~d8Òƒ}•난\`ŒÖ¶Öê/ûêp`¼4ü Ö=·ÝÑkxßþ'âØw¼=›åta:\€º\ƒ”ê”c¿=&båºÇT ;<@ «Õ±YP‰BŠ<ˆ‚äÄqš•›oÐá=¼c8çðȤ ÃYK›Ê7^V5“º´»åþcT‚1µ_!ø6?#Üõ(²»Å—>´"ËÀKî|T„`qd)QÔ×øâ¶Q¸Z…t:+Ð*Ÿ™Ï%vûO…¯”Ò¤ŠD (»D‰€E Mžá›—c8'°©‡M<ÒD¤VqÔ»¹Zí~ÅÍõù¡ÍÇž>M}øÜ)üÚ jcù¢R•Q/JAØgÏøáUfÌlÇ!톹ïRþx?+WÜm^©=¸plÉ]øéó ¬'9(LEQ€à= ÂY5ÊŽª/!ˆ„fsÈ{†ˆ€H  @Ž¡´ M1 xÂÇÏ»ù+‹ÏÜ3(ÄÇ-س§Ü_ë_yë«ÞZí–Ï|êƒ8vÆ];8°:ýö ¡Ž ÒÛqÏW̧«2ÚöæÈoöoµWµMhÿÍæµmmÝÛVÿ<®ùSƒ|"…¡R«A¾hæ´!h£ Ôj‰"fd÷L›]>¬TjI£j]UF+ªwK]½¶vì0€VÊJµLPl ê›…Õ«nÆ” %ƒ Ò 1Ê%’ôÕBçö_ùäÆÉ…–T-:M¹£NÛÍıCõ*WõšG ÒÄÃ¥çÞ;xq€0””LhC0!€Òï™êQŠí=ɾûþäý¶E!à‘+ÔŒw¢ÒÄñð€ÇÈvß∩P,fȨ‚DIN¥I¬„SrNt3’˜‹C}l“ž~äòš‚œBj¡F®¤Ql30Æ@)¥4´2ð>…óŠÂ·H¨‡³iê‘ÆÙ×q¤^ («û4µžY‚¦Ÿdäj–%qö[!Nê"‚ÖD¤þ¬»HFN&—*挸B‰À;¸îÇ'S" ÏQ}9=¡nÁpôra.fDöÜP%sgÞ,Ù·”0M –LŽI²ßÜS­Df× eÊ™…3¼ã~è­ˆ#†q@SV䈜O¤£È›N,Üíl´çÙh-NÆóoÇš·b{åUh ÐÅl^ŃϔŠÁŒÌ­Ù‹HææÀ!xïSCD#©ä2í»!´BˆHMHöDÈy/1«L‰ò€Ò iRGT¯¢£< w? w? íåiÍ´àÝsÎÂÂ=NÁúîû°úµ[±¹5X…°uGpÜüop`B-Œœd’KÍà35#¢ÆzÁsÃfÏ\"C™*€ú-f®³ÏîeÙVHmå=qÒ»ÏÇÌÎC[ò™©Å#4y,ÜãdÌŸuúF^ÂÊõ7ãù×ï†Vùlö¥éØâ”ÒBav¿™ ¶ñ^a/Y;ýÒ†¡•Vrãh¥A!(Pd\fHçBSD¥¿ Ý/[äLK6…â&Õph(xÎŒËèéXëW9鄈/œ)C) ïSÉ>Ugø "ìœKs`öð¾±xøÉ›¡U­B@7´)Ê5fBjc´vÇÇ_Žu›îÅ%ßÿ(žXùG4”ÒYÿÃɵÒxsÛ&|ÿ'_Ä~>>pÔGpؼOa¬2Ò ( !°ˆfaÕÌ@“# !rPT${ÊJ¨µ4P#åÍ ›3“Í8gqK“Ü7â$BG[¾|îRl|s þpßRÜÿä/pâ{/ÀA èëÛ†ßüçRt÷®Á1G~þÓ„&»y 6 ßl=ÂÂù\> HnG eH9f‰•ˆ"œho‚ÁÑ ²Œê‚#Sij)œŒ×ä[ëS²ò˜=}|å¼åXÿÆcøí-ÃßŠŽ–wá¹õàýGŸˆÏóMäÃ2œ·ã*çý©Ìă="¢lM!ã\¼òðLnd@ë€jÀTòç$ŠtAD, ¦, ™jH“U„0wָ싋pÛ}?Äc+oÇÕßy¹0sÖ‚7\ìeÒhEÏN˜ÕÛg?+kf+ YËÎ*`tešŠwÌ05´×š`T3+ÂÁ›/Ïj8#­óF˜5mFæoA.ÌùÚP¤À ^$iŒ¦( ù^ØC‰gM/ ¶Î9E™m¸ŒÄJëÆ,*d ZÊR&Íôf Ez|–ÆgæY¶ª)­µ¨×ãìžÒÙ$½e8—Ž‹Åx¹ˆp¡PˆH›KÄ“g ŠÂf+¡¨Æ(i°ž˜ßÚ‹Ä5ÌnGý p2^Í‘YÎ_î5z¨FÛ’Õ¬jòÍ$ÉÛ&‹ Bi-JR£5Xt–éæŒ)¥ADP¤l–²ì}ì!À';rÚl7<”jp`¼¾›‹šñ&ië+ðÞBë€âdDZ*cUôõaÁüƒõÞ³ñcÕáý·½ølÍmc)EDŠR˜µ iš¢§g;Ê4S'Î7¨µc]÷=˜:³Œö m`/ðÞ7d…གྷB‹3~šÙ²iËS7ÿø™ÃÿðÄ¥jõ3ÏÒ•‹ïöW]¹ÛÕ+ºV©²1d‡V˾uÿ‰¸xɱزy¬ dТŒj¡ZT³óm3ú‰]§v컼f»ÏÉ­ Bc@¾!> ò A›µj#ƒ1 ¥*£uLžÜ e2‡'j¸ªxÏâRò¦©ÚXªúú»? ¢;Â0¯;§ÂwL˜FÌÀÐÐVÉ€\؆¡7\±Í¯Ž³¾¼ ­ª¬…M-„,:j6oê¡IÅ£$ß•^ßvÏMNFO/•ËR,´”K ÀÔ”HÍŠt¦A¢É{&¥T&‡œmÇx+°©—4òŽã8®.îhŸòÓ(J”nÙÂ/<áñ»†ðׯ;p|ïgçÛ$QQ-é¦ÁÁ×¹TØûŒJuä—¹|tvtI>_ R€Àg—dþ¢”†R&  ! 03lj¥U©UG=×nNÝØ5â׫£N½¾&âΙ1 áLܾü™ÿøæ¿Ÿ†$­AÄ£T˜¨.ûâÍüâ+[pÍù¶lÙ81Ì¥T.Q¹\F>_D>_–¶òÆ •ÑšD¨5Žãç,ÒÔ¢Õ0::â⌤…›Šù ŸJMÐ2À‰M"‚< ¿ºú¯øíÔ1ëåþ_[r¬Äè˜X’/߉¡¡~Ó1%àØ—P Œ¡Û˜°uRj',8µ¶É]wkj޾úë¯oXw¥û0 µ1…pr¦\‡/!(Gªs¦võ± âÈbù÷ßù´r§Ï‰¯º(ÛÊûñïöbæô…q±¬ÓŽÉ9”[ Q…UõšÀ¥$i¬ì}?M8ú[(˜Éµ\>„2|!‡0 ä`Hƒ$(¦ð.Ç=/•1q·×\ºs|»–ÝòY˜P†AÚSÓÈ4‚@Æ Dј@ þîlK’†9… G(µ„9“íôx ['A‹‚gÁ5ߨùàÂÆê“I=}ßèè¶÷pÈž/‚ ôèýÏqIÏæ ¥Ý‰ÂáÛ†ªëö³í\r\jGçÍš=çêͯÒg¿ó=ùÕo 2Ä»þc¢%.Ù±qo%tEXtdate:create2011-09-22T09:32:32-07:00¨’bÌ%tEXtdate:modify2011-09-16T07:27:36-07:00wjñTIEND®B`‚tmpNnpnZF/gui/resources/go-top.png0000664000175000017500000000301312543167424016472 0ustar chrischris‰PNG  IHDR szzô pHYs¯¯^‘tIME× "Wò„bKGDÿÿÿ ½§“˜IDATxÚ½•YlTUÆ¿sÏÝfë2]è^[)”¥%P (‹†–E@[–ˆJ ‚ /&<´ŠŠbŒ>¸F„‚ÑÅ—ñÁA­–6Ð Th¡ûÌܹÛñœ™Ú`„V†ÿÌ/çÎ=9çûæ;çÜK0†*Y»¿ÔçÑv­­*©öy<ÞTßÕ~¡ùȆ?1Ê’F; ¨æÝ‰’kœš;5PðE|”öù*K½53N‰¾„pÌð®ÉrŠBúq¾­-.ƒÙ=(+TRxß΄€ª’œô‡,0É P?BÔ ÃŽöU%Þ€Õ‹_~½€În¢¡èéˆX:Ú;û`…®!áz;ZëƒÙiP4ü©AøÓ‚܈a+Šhß•ú„°ÃÝu- ß÷\·¯â 1pÉ áRO šNÕ÷8‘î:Œ²Æt µÌ²‰zJÒ®Œ²©ÕŠ×‹+ §¿ _ﮋ^=Û„{Y¯5w“º¿ºðŠŽu`኷”œ°q|àlûºžÔ‡w7~áb %Õsì— Òææ¦.ðâ=M ¯zÛCs¦í]T=MÊËIÆåöÞyvöÒïº~ÿ¼-á d/ØšLÒÔ.¯ á°P«—L¤I>åþŽ&ÔÀ¸·ÌÞûxMe¾ã:0"Žǵ±raQ>ÛWòÄÄ`®ýÌüÊÒ5™)ˆDŒdeh˜Yš¶ ŒmNÈs ½bÓ„œìÌÓ›6®ða®FN÷éWmá®>{Vó‘õwÍ@pÚ:UQÕ7nx¬"9˜ü/Ѱ^úC.Ž~û÷YRÙ|x½qw–€9Ûç=P^¡{u˜Q–iÁ²ìa80-›÷YP©…å`l÷]9†)SÖTååg}0wÞ,â2€€1ŒÀuyË;~á8.‚ =öl½¤¶¡ë·cçÆœ@ò¤Ú4M•?^° R²l19‹ãbÃúíLÓAE‰‡Pâ~ÄfΘ $M|Œ¹û*çÌÈUT}H”‹‘8Œ€ â'f ˆƒ²B9Ý1Ãû‹Wï‘Fk@ˆo.(È]™WXGÄ<$&†Ä `$D ‰Ãû,n"#EFV²[åš‘­£2à»I©®«oOŸYÛÁÍ !&A†¡2˜0Æ$>F‚e3”Þ€NÍW —í®¼#Þ¢*•Ëš1s¦—Põñ˜¨Ä¡ $é&ä8–† ˆ½3­$¨×™P@D.+#9 <B L¥¼›ÜØ4â•Q¼hJÀ¡ÀH!ªž·[/´5žõ[Fdèõ€Ãè O>»SˆÇRÐ5²n[OCl:HÀ—{êx ܔ⃤ù¸!?¨€/)?;Y<VŒ0pfß¶“+Ÿ~>ÐØ"¶e.\#±¼–%ñØ)‘¡paUã&¸‚¨drq–lÃ!.l‡0¦¤Ëެ1¦Ãudøù²~ýæFÆ“ÝÛ0»üJ=ªýÔ–P% ®ÃãáèZÌ€aG œ¨cã‡ÙŽwvÒªdÂp›’ïÄÀ‡'ŽºÛž{éôg{·Ïèã»`‚xCÄ—âŠ@F&&-_úsCwTÿVø{%1DÉIEND®B`‚tmpNnpnZF/gui/resources/.gitignore0000664000175000017500000000000712543167424016547 0ustar chrischris!*.png tmpNnpnZF/gui/resources/glreference-man.sh0000775000175000017500000000053612543167424020157 0ustar chrischris#!/bin/bash # Script to extract reference URLS for functions documented in OpenGL man pages wget -N -r -np https://www.opengl.org/sdk/docs/{man,man2,man3,man4}/ find www.opengl.org -type f -name '*.xml' -o -name '*.xhtml' \ | xargs grep -o '<\(b\|strong\) class="fsfunc">[^<]*' \ | sed -e 's/<[^>]*>//g' -e 's@^\(.*\):\(.*\)$@\2\thttps://\1@' tmpNnpnZF/gui/resources/media-playback-stop.png0000664000175000017500000000221512543167424021116 0ustar chrischris‰PNG  IHDR Ùs²sBITUìF pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î< IDATxÚ}UMh\Uþî}oþ^2Qã30VAu#ÔD¬mV]¤Á_ÜwãB\ˆ2D Qq¡Ù+¸2˜VÛE7šP»B6J)³‰¸°ðñ¯Îdæ½™÷îñó¼KBÉû8̽sÏùÎwÿÎ5‚é;eÑF“b¢'—ìÆ[é´ïÁJS–ðŠ« Þ ´>ÖÌr7>‚`¹*]¼î¢ ¤#'  Œ Ja‡X5+KÉÿ¼Óo¤“#Á>,µ·PÇ À^7ñW%™Ù2gßÝ"è>&—]kŒ! Žã!܆ªæuŒ‰~Â6ÿ‹¨ÆÞ0§W®ÝBðvC¶]+Áß˜Ç Ãí”l€ '2*ÙÅeü9Òâøû»oVåŠëP:göjÌ†Ž˜PEÊ?`[§b·Ì‰ÀÙu7ÞÁ½˜åp…(«±­Và qžÁôLá:y×+x£);Y4@/ᘟy«ù‹O™ªQŧ´Y„CóàG±eþ¥,J`-†—=)(Jª«ÆÐçY”/浊ìMê7ñžEƒá!?c¶T1f+TÅ{úÿûØÄ÷©Ô7w‡î¤«ÔƼÏd•:¤”BŠã¤V"áOâ*GlÝž ó3ެ÷ëÆ…Þ-ã`â)Ƙx‚’ª‰2"<€þ#g¬kçJ اYÍO"UŠö‰‘κ˜J kô0Çs¸vèš9æ”?‡ú[܆D5ä€É¥Ý¥«cš$pl̪ü"?ð#C'^Åf8ZE ð–˜×«æš¡€ðP%ÿŽ¾Ç€äu  x ! +±°3(hÔàsº\uš,B?ï÷WA[÷/»(ÈÓ”t»xŒ™}ŽV¯À‡‹zî)‹­ôÀ¡_0Ñ9åêÀ[àO?åÓfØ®îýzJ(=+…ÍÝ”ÌTtÉ" ŸSŠˆýjAàý®3н‹V6Ñ0Â6†à©#ª>; ³^%«ÇWéM}Ù ?O_^³ç*ø"Ò™Z|L3øÏ§á¹nïoøŠ*-dm-µ€,ËlXç%M0öÈA¦‚3M𠄉d(ËZP¾ˆ±ñW\Á#¤—TáE{¢##jý™ÞL¹ÊH„Åc€… S÷0X(n)j¾*‚Ùþ5j`ø£‹ê‹,ª¢5ù>¼ŠÊDxpx¨BÃ÷X‹v´.Õõâª,ëÒÊÒyO#òU‰ ¼¦ïñ%Œ^z†Ÿ^¿6õ°¼Ð§Bgx]Á=¸“!2óub '’”[8{~úaQ }Ú$*–,+v—‘R±&ú´OŽx\Ÿ×ÇUꇗ˨ú¸^8âq=$©È),š¶øçÝÄÒÃ%³q!öýC ò?Kù` IEND®B`‚tmpNnpnZF/gui/resources/android-setup.png0000664000175000017500000001030112543167424020041 0ustar chrischris‰PNG  IHDR00Wù‡ˆIDAThÍY{PSgÞ~ÎÉÉ…$Ä@ùA(2ê¶è*µ]°’^§ ¶µîv*϶®|mµíŽöb~ЯºÖ[U/UT¼…VÐ-ŠT@ÄT˜œ’œÜNÎùþ´®ÕÖv«î3“a&a~¿çyßßû»¼/ÿƒŸ!ð·ü½-ˆ{FçîA-Z´(<11qšZ=>>‘"xžçl6ÛÉÓÕÕ›ÿêü®[ !>ÄÏÏbJ Š¢@’$@$A‚a466¢²²’=sæL þCÈžyæ™ç""#býüü K –ˆ!¦Ä I--Q}ú´ëTUÕ妦¦ÚöööJÇs·9B @éçç÷ØÈPJLAL‰!‹!vïÞ]»~ýú£,Ë^p € Àq«±&@.—Ç(}}A’$HÂ{=¼ÎNWÁ²l)€nVx‰s·3ö PFA€ àyÇàv»y‡ÃÑ  ƒ_¨äÏýx@¥¤¤$úó§ ´N‡nŽƒËå‚Óå„›s“ZmúXüñ!Üo$yhhè$…BÆÈÀl6ÃírÁårÂétÂåt"6.öåÙY“ÈnâHÍÎÊŒZöÁÒiŒžûB$yHHÈDÇ© .— çáñx Tú?þøŸŠÃÂÂÞú¿ÏVîÀ¿öÚü˜©SÿøºÇãy®µõÒ>Xî·*666D¨ŽøûûC©ôA‘¬;<ïA1b„’ °áý¿½7]«Õª%béã:ŽìììDGGïîXîwIRRRR()Ñh4P©ThkoÇÆÍùXø?ï@à8N8]N(•JÈår2*2ê…Á!©‹…40 ÜéÓ§ë0˜•î§€2>>>M¡TâTõìÝ_ Aà˜ö^DSS3œN'$ |||@Ó4ŒF#h#öööÚÞÞÞ.,þ~ LŸ>=&8XóðØ1cq©µ-MMðóSAˆ¤ PöM8ŽMÓÐë 0›@QŒF#ŒF#º¯w³•••;á-l®¡U¹ øÏž=;gtt´D£ Æ Y³ÑÐp:R© ccÆà»Ê“p:\ÐëõÐëõèéî†N§MÓ¸rå _UUµ«¯¯ï,¼õîO"øñÅ̘1C«Ñh T*ŽãQwö,Ôê@ˆD¤¥¥B×Û †a`6[ÀÚlèîéAgg_]]½¯¾¾¾ÞÇ¿×í4©R©rss?1cÆ«2™ $IÂn·ãĉ¨­­Ãù¦&Lš4 ããba³Z¡×߀Óå‚ËéâL&“IwáÂ…Šžžžo4Ð㦶â^  ÔjuÀ§Ÿ~ºjúôé/Øl6äoÙ N‡7^mmmà86› ,Ë¢¿¿ßÒ××§Óëõº¾¾¾k===6›­O=¼=Ñ5Ü:?8¹WäÂV¬X±199YÛ×ׇÍùq½»œ›Aðx<èêê²4777¶¶¶^èîîîäy^o×ÉÀÛÄYá Þ†î'íŽØ*)))|É’%…'NœÖÞގ­0ô0›-XüÎb8Nœ9sæòÖ­[ ívûEx³ÊiÞ Ã þÙžè÷ÞÉ£>µhÑ¢ãÇO:þçàÁCSÇ‹/ …ÙÌB*C&“@$âéA?~¨S ¡7nü‡Õj þä“O*ššš®i4šÐåË—?.‰ä|ðúûûññÇ#::555]Ë–-[βìç‘@®]›?sÔ¨±8NW*}@€T*ÆØ±£ hZo±Xúw9ösAH åcÆ>åççGZ­6tuõþFívHÒS]WW9oÅŠ.2ùÊ•+ÿ3™LU®°ß<‰ïĸ¸Ä—e2 É0‹F(‰°¬J¥ þþþRÿ€‰Ã‡=<+ `xŒR)'¬V †~‚8ƒÁÀÊd>†1IW­ú߯,“Âà±R©œÀ0 WWWw@¼“’CCi2™2“’’ä¡¡¡hkk3ååå­¹qãF¼éòN+ÿC:´³â¡‡&|ÕÙÙÖ·{÷¶Êµk7/INž’0›­ÉœË} •z#ÚívƒaX¸\d2 $ž/(ØñåöíeÙÙm6›Zº»»®ü°ÅB ‹Ož<éÑjµ/ðüMIQTJII‰­¦¦F(..¶ÅÇÇ/0€ w?‘”¼ï—J¥Éµµ]]=Âõë½BOOŸÐ×§ôzZÐë Boï ¡»»W¸vM'tt\ŠŠöÕ¿ÉŽüfÃÀµ´´\²Z­dvvöl©T:äL–———FQ”üòåËŽU«V}ÙÔÔTà2¼ƒøÝà<~|ë" w¤ æ¯$I ¥¥©‹e­&™L©T ©T‰„âiZßwõj§ž €ÄĤ„E‹r"n²óÃÍ9ø¥cýúõ§Y–Õ¹Ýî§Ž;¶¡¢¢âÏÇŽû,""âíëׯ;6lذ©ºººÞBeúäoåñx"I’àõz}WffƼøøñOlÞ¼yï}àà³²²Þ›0!1mÅŠO–¼Ãívr!!acð3#%˲l×Ê•+W¿ýöÛKúúú´.—Kët:a±X袢¢‚Á*{wñðö pÍ;giFFæ÷Æb±˜Ïà5MAàyž¡J„ ß|SÖµ}û6Õ¾}{/777WÝÎïPŠ­1jµzâóÏ?ÿh@@@@{{{_YYÙ)«ÕzÞ°1áÏ¿C‹Ç ß}÷Ý ¯‰D"LJ~¸´µµµë¦ÿ»ã}ÑÍÙˆ`AðžÞ¥Ç¯‹ùßjÐ'ýÞ•¯ÿñ.€Ì«W IEND®B`‚tmpNnpnZF/gui/resources/media-playback-start.png0000664000175000017500000000223112543167424021264 0ustar chrischris‰PNG  IHDR Ùs²sBITUìF pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<IDATxÚ}•ÍkœUÆ÷}§3“I¦Mk‘ L[¥ âB¡F+ÕÒfU4-~P\‰€ºJHiÁ6(¸±KM[ÛEjkíBD¤D¤ÅE‹‰Ô63óNæ½×‡Ã0Cˆäþ¸$/œç¹ç$çžëk׉œ?à†è§$ "fÃ…èòÑ„5kÁX)ŒpÄž@+ˆíE&ÝèpeƒÑ|æM_h²BBƒÇdɱ Q•q76Rÿ_ƒc}á«0RgY¢eŠtƒ¾¹M¯¯<1nÚ>>·Æ`ø±pÑ—Te°›l"ogBJCÔø•òÈÝvÇ~[eðn_˜ñå: laÛé%‡3 Š&ËÌq‘;l”,v¿7×6x'®ú¥Î:½.2ĉx±Bƒ„¾gÆJ‰¦Ý¾÷ë¤Ã~ ážäl£‡<9‘µ­ßmwÑ-6óO*2Á¤Ã­ Þ.…ÍÂE^e{«ò˜K<+¶‚Ñ´,j,pZ»‡LÕ=|²A:Ò,Ô©3HYòlËàüAdÄÆË«KÒ©‹f!øNκ’[à°YòŒc‰~d‰_ø‹‡È® @ø]qnç×§"¿?-6ôÑÏbÃujTùcüÜéGË#+žÒO5ZÑïÒC) Ûì—±$È@üÍ)>b¡m‘Y àc1Ës«T2(e|É“Òcéw·?I¨[óxbkákÜäã,r ’#ƒ€h%ƒ[Üã®v`“‘1€Å‰`dB%<âXÂllÓ®6Ra¨e¾‡7(â±8™›E%ãÍà.M¼–õCÖ\[9ÊÞvWz1o¾…YˆUñŠ¥˜¶-²vSÝ<Ïgy+nV*³Q8¬qRš»<=’ïàCNÐ ‹».•¾ÎGá ‹15f¨Ò )¬J fðç8m¹·ˆ×Ãb¸M$a2"Ç7ÌÑV A%ŽsŒÞUòÔnä?|!ED˜œH"£¡S,PG&–âÓœd«Å:[Ôù„€ ¨†Qˆàó ã±oq•%j$b…×) \ŒÔX!5åzSÑ1ŒKI€1ã..áÄ«†Zk*¢Ó%ÿ’.$Ÿ–ª3T_ÑP 6“wðe²Âš/$gžÓܰ¹ì4T§:CÕ,4ÖC¹i½?Ä^…Å­«mõ‹ï8‡³K/ùÁ©Õcàå>ô°xK´›]<Êý܇ã_æ¹.–¬'e9Íá3k³°§-ìOÖî'‘ :áìi;S_çq}É×Pì\.g[Øãzvǵc’ rý¡õ¼»J˜å‚»|6aÍúËô9ßъIEND®B`‚tmpNnpnZF/gui/resources/go-up-search.png0000664000175000017500000000231712543167424017565 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<LIDATxÚÅU[hUþæ²³Ùíf›”Ij¥±ÅK_$Ň¢UQ_¤>©T±RA|÷M,¹Ô+}TëC$±M©b°H-Ql Õ¦ZÚˆw¤ÙÒÉ^²ivgv÷øÏáp8Ù³Ë Šø“/ÿœçûþËœ1cø?ÍV†aì$7ˆÿÖ.SÒ¿´ŠÅO|Ï ÔП°aÍ—ª…“¹¿Ù,ËB2‘Ø ­øžϯñU˜¦$šoKnHÒn‚Ì0tÉg¯ÖÀðT–Ç^{r[¢­GM- Éu˜Â7‘žÊáÒ¯k¯~šcD`šê¾`­!T€ˆ’›-E0xkzs¿Ý@Ì69.’ˆ#§s`äª €ÖäòУgÿÂùˈYÆÌ.®âÝ3ËrŸ$mBØ pòF£¡N¾Ä‡ç®cf¡ÄûÝÊÎÎЙ°ðüC}ZRdÑR±ðSß®à³Ëž-„5˜­œ{ú»¤:,<}ïM‚0ÚêŠòϯ”pj. 79º7Å`Qœ ÁAÏALþ>õ‹éïóz Ãèeÿz±Œ/¸4lÇ7'pä™í°MÈþÏo?»»¶%å¾ÉÙ?1óCš… PÉçhºOœ¿.‰¹« Cß‚LÚD<6ºû·Èýã_åpá§R”!ÔÌ_«àجKÙˆÇL¼¿{vvÊß㶦¿’Ï=ØOUJù2ª~c39$ ƒ)EÂ3W‹üRêïvðÂýèër”L¸¨¶vÏí]èIà½/²Èå«4.vßÚ^õ°ÇîîÆ®‡v¥Ñ³š‡‰bÚa* ãÐÛñå|;z“â·hߎÛú¸ck²Ý$k-qõ™ ß·;Í¢ÞhM.*`¶¯€‹.@’„öu8!Ð-z˜–½~xw*)[ÆØ?¨c2{U€êÓ [‹©Fß2é ÓŒX…¸mNÚjæ±ïû¨Õj¨×ëR@ůUÉ­¶ÒOݧ“V+rNX©T8 …"Ön¬ñŒRét}hdx ÀÅÑ&xS‡ÚÞk.`}}®ëb)›E܉£§'ÃÛ:<:zò£ÉÉ×i_>D@´I¦O®ÖójµŠr¹ŒkKK¸oï^ªF ¹Ü2™>>11DäÙÈ7a›¸ô[:¬{u¾¦»ž—Þó<¸++ˆÙ¶$åÍ7Îÿ`ü%¿G¿  Ô»Ù‘qÊ>è9/±XB_¯$;úþ‹˜ò>þûÐßu!¢ÊÅ›–…—GF¦'ǃÌ9y#ú=Ý´! ÚЕÉд>yâØÄPPvF¦^‚ìÑÒêj…†‰Q?½Ëô>sÁPÖøžB±Ä®r{)‚Õs#´Ï—ÌBžP'ÔøÒD[`pdâP›àp„‹g§)…Ìð¹W×r]Dü }ýô éƒ@/IEND®B`‚tmpNnpnZF/gui/resources/glreference-registry.sh0000775000175000017500000000125712543167424021255 0ustar chrischris#!/bin/bash # Script to extract reference URLs for functions documented in OpenGL ARB specs extract_urls () { for URL do lynx -dump "$URL" | sed -n -e '/^References$/,$s/^ *[0-9]\+\. \+//p' | sed -e 's/ /%20/g' done } extract_functions () { sed -n -e '/^New Procedures and Functions$/,/^\w/ s/.* \(\w\+\)(.*$/\1/p' "$@" \ | sed -e '/^[A-Z]/s/^/gl/' } extract_urls https://www.opengl.org/registry/ \ | grep '^https://www\.opengl\.org/registry/specs/\w\+/.*\.txt$' \ | sort -u \ | while read URL do wget --quiet -O - $URL \ | extract_functions \ | while read FUNCTION do echo "$FUNCTION $URL" done done tmpNnpnZF/gui/resources/edit-undo.png0000664000175000017500000000374412543167424017170 0ustar chrischris‰PNG  IHDR szzôsBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<aIDATxÚÅ—kl×ÇÿçÎÌîì®ëÇb0&’¶HEMÛ|H¥VQ›„„6<¦„‡6`›5»kö5»;3÷ÞÓwea„>ä'ýtæËÌùßsæÃ 13n "àã?dÖöïßlõ¥î‹Ú-›wþz×íéŽÄtØvþ•bè]ÊHïÒ{~yp_ÆmycÆÈYýÅ]~õLyqïφpGެ‰;Uõm0íHº=‰¸ƒX2 ;–‚o! å‡ÐBP®Á¿‚|æÀU„ê§Ê«î^ñÅŒwÓç¶FµX”+ؽrí¿w AÿÛ«$ðî¶hj^çÂ;a¹ `3B¦Å‹ç|kŒX~wÙ¦áWf pìð½Å¥=GŽ¢"3O­Xwø±ãï®~ÒÕö÷çu-F´5 €ñÿ! «Í;}Åìгw»£b«8~h]1=o}‹ÖÀåÌxáØ™¤Û›îììY5ÜœÀÈÉS8uøo±Rö ;§†°ÚW`ò17µ a°4‰¬«F`†•å€ ¬ë3L¨‚îtŠ¥ÚÆSùc/Ø:5@¥Ôä –THMm®ÃµÑ‹Ç3ù,d9 ²,DÚ{`·ÎÛµ‘Ž6àºI3ªè[~ÇzáÑ–_Û]zfê þµ¶¸¨yU CD£«)ÜÈÀÆ`|…sïA׫@¨AF¬6K A¬g9šÒkAö fQ’xá—.ω۾±§P¸f %%ˆšÉTD˜%*#?X€oÛ81bá|†) Z«+PÆ» ŸI‡è> ?;„–åá´6ãZ.!Ý—n>rôä^ Ð •„2² ¡µ‘C°±÷$™1•ó|+ZÑŸïêÆÍ8±o¾£-ÑÛlë;vBWÃ0u g:šéÃF€Ó÷=f¶-À¶¨5®Å½K,kxŒÝ—ŸìÂtÚß#ÇZA´Nº^1÷–Ì3ª°D ÀåFâéŒ]hk¦C0ؘ†³ÏF‰-0!ØzEwU‰h’×­½Otëö‡7?r0üý7·‘눈›ˆ¥¯Ô=s_È€C@`*ÃÖÎUßuòž´V/ OÍøQzöù8±m-Àú(„Űª§ÃU(§](ÔESœDg2f%P²Û£1ÕB+”Š“RIå@*ej„¤ŒBJzíì;s%Ÿyê/òý'`"ýpIŸþu'-ÝšãÉ7ü qÏí. ꚬ¨©8ð&°ª†°-ŸˆÀ  E ›™C°óõ6ûüeVÎWý3~–i¹ú*Ò_-2¦á?¯ßN `˜i- t„”ŠA©(I©!•E¡´Ìµ£¤y½?j…åñÌã¿30L;3%ÍÛMó`Lj4ÌZBIB‡lFHš,ay&—”¢>ìM6Ÿ2Iÿ›+ 1˜ ‘91¤$åG'ÂcyÛ85¢Zsa~Ó·`jˆwV´†iN0^Óœ"NŒ¼lUŒœ¿"x¯<ͯÙ-rüà¢pâǪ́DÌŽŠàâ%ŠHÖÏÓ+·ûz–ÿ†·ÎÐki’ÙIßg[yÜûßüßð“Dàæ¿’r*A9rIEND®B`‚tmpNnpnZF/gui/resources/glreference.tsv0000664000175000017500000101572612543167424017615 0ustar chrischrisglAccum https://www.opengl.org/sdk/docs/man/xhtml/glAccum.xml glAccumxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glActiveProgramEXT https://www.opengl.org/registry/specs/EXT/separate_shader_objects.txt glActiveShaderProgram https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glActiveShaderProgram https://www.opengl.org/sdk/docs/man4/html/glActiveShaderProgram.xhtml glActiveStencilFaceEXT https://www.opengl.org/registry/specs/EXT/stencil_two_side.txt glActiveTexture https://www.opengl.org/sdk/docs/man/xhtml/glActiveTexture.xml glActiveTexture https://www.opengl.org/sdk/docs/man3/xhtml/glActiveTexture.xml glActiveTexture https://www.opengl.org/sdk/docs/man4/html/glActiveTexture.xhtml glActiveVaryingNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glAlphaFunc https://www.opengl.org/sdk/docs/man/xhtml/glAlphaFunc.xml glAlphaFuncxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glApplyTextureEXT https://www.opengl.org/registry/specs/EXT/light_texture.txt glAreProgramsResidentNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glAreTexturesResident https://www.opengl.org/sdk/docs/man/xhtml/glAreTexturesResident.xml glAreTexturesResidentEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glArrayElement https://www.opengl.org/sdk/docs/man/xhtml/glArrayElement.xml glArrayElementEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glArrayObjectATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glAsyncMarkerSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glAttachObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glAttachShader https://www.opengl.org/sdk/docs/man/xhtml/glAttachShader.xml glAttachShader https://www.opengl.org/sdk/docs/man3/xhtml/glAttachShader.xml glAttachShader https://www.opengl.org/sdk/docs/man4/html/glAttachShader.xhtml glBegin https://www.opengl.org/sdk/docs/man/xhtml/glBegin.xml glBeginConditionalRender https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml glBeginConditionalRender https://www.opengl.org/sdk/docs/man4/html/glBeginConditionalRender.xhtml glBeginConditionalRenderNV https://www.opengl.org/registry/specs/NV/conditional_render.txt glBeginOcclusionQueryNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glBeginPerfMonitorAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glBeginQuery https://www.opengl.org/sdk/docs/man/xhtml/glBeginQuery.xml glBeginQuery https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml glBeginQuery https://www.opengl.org/sdk/docs/man4/html/glBeginQuery.xhtml glBeginQueryARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glBeginQueryIndexed https://www.opengl.org/registry/specs/ARB/transform_feedback3.txt glBeginQueryIndexed https://www.opengl.org/sdk/docs/man4/html/glBeginQueryIndexed.xhtml glBeginSceneEXT https://www.opengl.org/registry/specs/EXT/scene_marker.txt glBeginTransformFeedback https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml glBeginTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glBeginTransformFeedback.xhtml glBeginTransformFeedbackEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glBeginTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glBeginVideoCaptureNV https://www.opengl.org/registry/specs/NV/video_capture.txt glBindArraySetEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.alt.txt glBindArraySetEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.txt glBindAttribLocation https://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml glBindAttribLocation https://www.opengl.org/sdk/docs/man3/xhtml/glBindAttribLocation.xml glBindAttribLocation https://www.opengl.org/sdk/docs/man4/html/glBindAttribLocation.xhtml glBindAttribLocationARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glBindBuffer https://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml glBindBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glBindBuffer.xml glBindBuffer https://www.opengl.org/sdk/docs/man4/html/glBindBuffer.xhtml glBindBufferARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glBindBufferBase https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glBindBufferBase https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferBase.xml glBindBufferBase https://www.opengl.org/sdk/docs/man4/html/glBindBufferBase.xhtml glBindBufferBaseEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glBindBufferBaseNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glBindBufferBaseNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glBindBufferOffsetEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glBindBufferOffsetNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glBindBufferOffsetNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glBindBufferRange https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glBindBufferRange https://www.opengl.org/sdk/docs/man3/xhtml/glBindBufferRange.xml glBindBufferRange https://www.opengl.org/sdk/docs/man4/html/glBindBufferRange.xhtml glBindBufferRangeEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glBindBufferRangeNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glBindBufferRangeNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glBindFragDataLocation https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocation.xml glBindFragDataLocation https://www.opengl.org/sdk/docs/man4/html/glBindFragDataLocation.xhtml glBindFragDataLocationEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glBindFragDataLocationIndexed https://www.opengl.org/registry/specs/ARB/blend_func_extended.txt glBindFragDataLocationIndexed https://www.opengl.org/sdk/docs/man3/xhtml/glBindFragDataLocationIndexed.xml glBindFragDataLocationIndexed https://www.opengl.org/sdk/docs/man4/html/glBindFragDataLocationIndexed.xhtml glBindFramebuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glBindFramebuffer https://www.opengl.org/sdk/docs/man3/xhtml/glBindFramebuffer.xml glBindFramebuffer https://www.opengl.org/sdk/docs/man4/html/glBindFramebuffer.xhtml glBindFramebufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glBindImageTexture https://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt glBindImageTextureEXT https://www.opengl.org/registry/specs/EXT/shader_image_load_store.txt glBindMultiTextureEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glBindProgramARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glBindProgramARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glBindProgramNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glBindProgramPipeline https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glBindProgramPipeline https://www.opengl.org/sdk/docs/man4/html/glBindProgramPipeline.xhtml glBindRenderbuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glBindRenderbuffer https://www.opengl.org/sdk/docs/man3/xhtml/glBindRenderbuffer.xml glBindRenderbuffer https://www.opengl.org/sdk/docs/man4/html/glBindRenderbuffer.xhtml glBindRenderbufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glBindSampler https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glBindSampler https://www.opengl.org/sdk/docs/man3/xhtml/glBindSampler.xml glBindSampler https://www.opengl.org/sdk/docs/man4/html/glBindSampler.xhtml glBindSwapBarrierSGIX https://www.opengl.org/registry/specs/SGIX/swap_barrier.txt glBindTexture https://www.opengl.org/sdk/docs/man/xhtml/glBindTexture.xml glBindTexture https://www.opengl.org/sdk/docs/man3/xhtml/glBindTexture.xml glBindTexture https://www.opengl.org/sdk/docs/man4/html/glBindTexture.xhtml glBindTextureEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glBindTransformFeedback https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glBindTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glBindTransformFeedback.xhtml glBindTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glBindVertexArray https://www.opengl.org/registry/specs/ARB/vertex_array_object.txt glBindVertexArray https://www.opengl.org/sdk/docs/man3/xhtml/glBindVertexArray.xml glBindVertexArray https://www.opengl.org/sdk/docs/man4/html/glBindVertexArray.xhtml glBindVertexArrayAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_object.txt glBindVideoCaptureStreamBufferNV https://www.opengl.org/registry/specs/NV/video_capture.txt glBindVideoCaptureStreamTextureNV https://www.opengl.org/registry/specs/NV/video_capture.txt glBinormalPointerEXT https://www.opengl.org/registry/specs/EXT/coordinate_frame.txt glBitmap https://www.opengl.org/sdk/docs/man/xhtml/glBitmap.xml glBitmapxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glBlendColor https://www.opengl.org/sdk/docs/man/xhtml/glBlendColor.xml glBlendColor https://www.opengl.org/sdk/docs/man3/xhtml/glBlendColor.xml glBlendColor https://www.opengl.org/sdk/docs/man4/html/glBlendColor.xhtml glBlendColorEXT https://www.opengl.org/registry/specs/EXT/blend_color.txt glBlendColorxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glBlendEquation https://www.opengl.org/sdk/docs/man/xhtml/glBlendEquation.xml glBlendEquation https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquation.xml glBlendEquation https://www.opengl.org/sdk/docs/man4/html/glBlendEquation.xhtml glBlendEquationEXT https://www.opengl.org/registry/specs/EXT/blend_minmax.txt glBlendEquationIndexedAMD https://www.opengl.org/registry/specs/AMD/draw_buffers_blend.txt glBlendEquationSeparate https://www.opengl.org/sdk/docs/man/xhtml/glBlendEquationSeparate.xml glBlendEquationSeparate https://www.opengl.org/sdk/docs/man3/xhtml/glBlendEquationSeparate.xml glBlendEquationSeparate https://www.opengl.org/sdk/docs/man4/html/glBlendEquationSeparate.xhtml glBlendEquationSeparateEXT https://www.opengl.org/registry/specs/EXT/blend_equation_separate.txt glBlendEquationSeparateIndexedAMD https://www.opengl.org/registry/specs/AMD/draw_buffers_blend.txt glBlendEquationSeparatei https://www.opengl.org/sdk/docs/man4/html/glBlendEquationSeparate.xhtml glBlendEquationSeparateiARB https://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt glBlendEquationi https://www.opengl.org/sdk/docs/man4/html/glBlendEquation.xhtml glBlendEquationiARB https://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt glBlendFunc https://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml glBlendFunc https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFunc.xml glBlendFunc https://www.opengl.org/sdk/docs/man4/html/glBlendFunc.xhtml glBlendFuncIndexedAMD https://www.opengl.org/registry/specs/AMD/draw_buffers_blend.txt glBlendFuncSeparate https://www.opengl.org/sdk/docs/man/xhtml/glBlendFuncSeparate.xml glBlendFuncSeparate https://www.opengl.org/sdk/docs/man3/xhtml/glBlendFuncSeparate.xml glBlendFuncSeparate https://www.opengl.org/sdk/docs/man4/html/glBlendFuncSeparate.xhtml glBlendFuncSeparateEXT https://www.opengl.org/registry/specs/EXT/blend_func_separate.txt glBlendFuncSeparateIndexedAMD https://www.opengl.org/registry/specs/AMD/draw_buffers_blend.txt glBlendFuncSeparatei https://www.opengl.org/sdk/docs/man4/html/glBlendFuncSeparate.xhtml glBlendFuncSeparateiARB https://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt glBlendFunci https://www.opengl.org/sdk/docs/man4/html/glBlendFunc.xhtml glBlendFunciARB https://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt glBlitFramebuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glBlitFramebuffer https://www.opengl.org/sdk/docs/man3/xhtml/glBlitFramebuffer.xml glBlitFramebuffer https://www.opengl.org/sdk/docs/man4/html/glBlitFramebuffer.xhtml glBlitFramebufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_blit.txt glBufferAddressRangeNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glBufferData https://www.opengl.org/sdk/docs/man/xhtml/glBufferData.xml glBufferData https://www.opengl.org/sdk/docs/man3/xhtml/glBufferData.xml glBufferData https://www.opengl.org/sdk/docs/man4/html/glBufferData.xhtml glBufferDataARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glBufferParameteriAPPLE https://www.opengl.org/registry/specs/APPLE/flush_buffer_range.txt glBufferSubData https://www.opengl.org/sdk/docs/man/xhtml/glBufferSubData.xml glBufferSubData https://www.opengl.org/sdk/docs/man3/xhtml/glBufferSubData.xml glBufferSubData https://www.opengl.org/sdk/docs/man4/html/glBufferSubData.xhtml glBufferSubDataARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glCallList https://www.opengl.org/sdk/docs/man/xhtml/glCallList.xml glCallLists https://www.opengl.org/sdk/docs/man/xhtml/glCallLists.xml glCheckFramebufferStatus https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glCheckFramebufferStatus https://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml glCheckFramebufferStatus https://www.opengl.org/sdk/docs/man4/html/glCheckFramebufferStatus.xhtml glCheckFramebufferStatusEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glCheckNamedFramebufferStatusEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glClampColor https://www.opengl.org/sdk/docs/man3/xhtml/glClampColor.xml glClampColor https://www.opengl.org/sdk/docs/man4/html/glClampColor.xhtml glClampColorARB https://www.opengl.org/registry/specs/ARB/color_buffer_float.txt glClear https://www.opengl.org/sdk/docs/man/xhtml/glClear.xml glClear https://www.opengl.org/sdk/docs/man3/xhtml/glClear.xml glClear https://www.opengl.org/sdk/docs/man4/html/glClear.xhtml glClearAccum https://www.opengl.org/sdk/docs/man/xhtml/glClearAccum.xml glClearAccumxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glClearBufferfi https://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml glClearBufferfi https://www.opengl.org/sdk/docs/man4/html/glClearBuffer.xhtml glClearBufferfv https://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml glClearBufferfv https://www.opengl.org/sdk/docs/man4/html/glClearBuffer.xhtml glClearBufferiv https://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml glClearBufferiv https://www.opengl.org/sdk/docs/man4/html/glClearBuffer.xhtml glClearBufferuiv https://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml glClearBufferuiv https://www.opengl.org/sdk/docs/man4/html/glClearBuffer.xhtml glClearColor https://www.opengl.org/sdk/docs/man/xhtml/glClearColor.xml glClearColor https://www.opengl.org/sdk/docs/man3/xhtml/glClearColor.xml glClearColor https://www.opengl.org/sdk/docs/man4/html/glClearColor.xhtml glClearColorxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glClearDepth https://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml glClearDepth https://www.opengl.org/sdk/docs/man3/xhtml/glClearDepth.xml glClearDepth https://www.opengl.org/sdk/docs/man4/html/glClearDepth.xhtml glClearDepthdNV https://www.opengl.org/registry/specs/NV/depth_buffer_float.txt glClearDepthf https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt glClearDepthf https://www.opengl.org/sdk/docs/man4/html/glClearDepth.xhtml glClearDepthfOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glClearDepthxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glClearIndex https://www.opengl.org/sdk/docs/man/xhtml/glClearIndex.xml glClearStencil https://www.opengl.org/sdk/docs/man/xhtml/glClearStencil.xml glClearStencil https://www.opengl.org/sdk/docs/man3/xhtml/glClearStencil.xml glClearStencil https://www.opengl.org/sdk/docs/man4/html/glClearStencil.xhtml glClientActiveTexture https://www.opengl.org/sdk/docs/man/xhtml/glClientActiveTexture.xml glClientActiveVertexStream https://www.opengl.org/registry/specs/ATI/vertex_streams.txt glClientAttribDefaultEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glClientWaitSync https://www.opengl.org/registry/specs/ARB/sync.txt glClientWaitSync https://www.opengl.org/sdk/docs/man3/xhtml/glClientWaitSync.xml glClientWaitSync https://www.opengl.org/sdk/docs/man4/html/glClientWaitSync.xhtml glClipPlane https://www.opengl.org/sdk/docs/man/xhtml/glClipPlane.xml glClipPlanefOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glClipPlanexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glColor3b https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3bv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3d https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3dv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3f https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3fVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor3fVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor3fv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glColor3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glColor3i https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3iv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3s https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3sv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3ub https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3ubv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3ui https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3uiv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3us https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor3usv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4b https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4bv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4d https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4dv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4f https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4fNormal3fVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4fNormal3fVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4fv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4hNV https://www.opengl.org/registry/specs/NV/half_float.txt glColor4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glColor4i https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4iv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4s https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4sv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4ub https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4ubVertex2fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4ubVertex2fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4ubVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4ubVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glColor4ubv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4ui https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4uiv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4us https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColor4usv https://www.opengl.org/sdk/docs/man/xhtml/glColor.xml glColorFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glColorMask https://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml glColorMask https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml glColorMask https://www.opengl.org/sdk/docs/man4/html/glColorMask.xhtml glColorMaskIndexedEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glColorMaski https://www.opengl.org/sdk/docs/man4/html/glColorMask.xhtml glColorMaterial https://www.opengl.org/sdk/docs/man/xhtml/glColorMaterial.xml glColorP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glColorP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glColorP4ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glColorP4uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glColorPointer https://www.opengl.org/sdk/docs/man/xhtml/glColorPointer.xml glColorPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glColorPointervINTEL https://www.opengl.org/registry/specs/INTEL/parallel_arrays.txt glColorSubTable https://www.opengl.org/sdk/docs/man/xhtml/glColorSubTable.xml glColorSubTableEXT https://www.opengl.org/registry/specs/EXT/color_subtable.txt glColorSubTableEXT https://www.opengl.org/registry/specs/EXT/paletted_texture.txt glColorTable https://www.opengl.org/sdk/docs/man/xhtml/glColorTable.xml glColorTableEXT https://www.opengl.org/registry/specs/EXT/paletted_texture.txt glColorTableParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glColorTableParameter.xml glColorTableParameterfvSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glColorTableParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glColorTableParameter.xml glColorTableParameterivSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glColorTableSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glCombinerInputNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerOutputNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerParameterfNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerParameteriNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerParameterivNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glCombinerStageParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners2.txt glCompileShader https://www.opengl.org/sdk/docs/man/xhtml/glCompileShader.xml glCompileShader https://www.opengl.org/sdk/docs/man3/xhtml/glCompileShader.xml glCompileShader https://www.opengl.org/sdk/docs/man4/html/glCompileShader.xhtml glCompileShaderARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glCompileShaderIncludeARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glCompressedMultiTexImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedMultiTexImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedMultiTexImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedMultiTexSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedMultiTexSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedMultiTexSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTexImage1D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage1D.xml glCompressedTexImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage1D.xml glCompressedTexImage1D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexImage1D.xhtml glCompressedTexImage1DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTexImage2D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage2D.xml glCompressedTexImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage2D.xml glCompressedTexImage2D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexImage2D.xhtml glCompressedTexImage2DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTexImage3D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage3D.xml glCompressedTexImage3D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexImage3D.xml glCompressedTexImage3D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexImage3D.xhtml glCompressedTexImage3DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTexSubImage1D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage1D.xml glCompressedTexSubImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage1D.xml glCompressedTexSubImage1D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexSubImage1D.xhtml glCompressedTexSubImage1DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTexSubImage2D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage2D.xml glCompressedTexSubImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage2D.xml glCompressedTexSubImage2D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexSubImage2D.xhtml glCompressedTexSubImage2DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTexSubImage3D https://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage3D.xml glCompressedTexSubImage3D https://www.opengl.org/sdk/docs/man3/xhtml/glCompressedTexSubImage3D.xml glCompressedTexSubImage3D https://www.opengl.org/sdk/docs/man4/html/glCompressedTexSubImage3D.xhtml glCompressedTexSubImage3DARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glCompressedTextureImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTextureImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTextureImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTextureSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTextureSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCompressedTextureSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glConvolutionFilter1D https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter1D.xml glConvolutionFilter1DEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glConvolutionFilter2D https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter2D.xml glConvolutionFilter2DEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glConvolutionParameterf https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml glConvolutionParameterfEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glConvolutionParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml glConvolutionParameterfvEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glConvolutionParameteri https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml glConvolutionParameteriEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glConvolutionParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml glConvolutionParameterivEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glCopyBufferSubData https://www.opengl.org/registry/specs/ARB/copy_buffer.txt glCopyBufferSubData https://www.opengl.org/sdk/docs/man3/xhtml/glCopyBufferSubData.xml glCopyBufferSubData https://www.opengl.org/sdk/docs/man4/html/glCopyBufferSubData.xhtml glCopyColorSubTable https://www.opengl.org/sdk/docs/man/xhtml/glCopyColorSubTable.xml glCopyColorSubTableEXT https://www.opengl.org/registry/specs/EXT/color_subtable.txt glCopyColorTable https://www.opengl.org/sdk/docs/man/xhtml/glCopyColorTable.xml glCopyColorTableSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glCopyConvolutionFilter1D https://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter1D.xml glCopyConvolutionFilter1DEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glCopyConvolutionFilter2D https://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter2D.xml glCopyConvolutionFilter2DEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glCopyImageSubDataNV https://www.opengl.org/registry/specs/NV/copy_image.txt glCopyMultiTexImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyMultiTexImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyMultiTexSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyMultiTexSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyMultiTexSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glCopyPixels https://www.opengl.org/sdk/docs/man/xhtml/glCopyPixels.xml glCopyTexImage1D https://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage1D.xml glCopyTexImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage1D.xml glCopyTexImage1D https://www.opengl.org/sdk/docs/man4/html/glCopyTexImage1D.xhtml glCopyTexImage1DEXT https://www.opengl.org/registry/specs/EXT/copy_texture.txt glCopyTexImage2D https://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml glCopyTexImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexImage2D.xml glCopyTexImage2D https://www.opengl.org/sdk/docs/man4/html/glCopyTexImage2D.xhtml glCopyTexImage2DEXT https://www.opengl.org/registry/specs/EXT/copy_texture.txt glCopyTexSubImage1D https://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage1D.xml glCopyTexSubImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage1D.xml glCopyTexSubImage1D https://www.opengl.org/sdk/docs/man4/html/glCopyTexSubImage1D.xhtml glCopyTexSubImage1DEXT https://www.opengl.org/registry/specs/EXT/copy_texture.txt glCopyTexSubImage2D https://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage2D.xml glCopyTexSubImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage2D.xml glCopyTexSubImage2D https://www.opengl.org/sdk/docs/man4/html/glCopyTexSubImage2D.xhtml glCopyTexSubImage2DEXT https://www.opengl.org/registry/specs/EXT/copy_texture.txt glCopyTexSubImage3D https://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage3D.xml glCopyTexSubImage3D https://www.opengl.org/sdk/docs/man3/xhtml/glCopyTexSubImage3D.xml glCopyTexSubImage3D https://www.opengl.org/sdk/docs/man4/html/glCopyTexSubImage3D.xhtml glCopyTexSubImage3DEXT https://www.opengl.org/registry/specs/EXT/copy_texture.txt glCopyTextureImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyTextureImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyTextureSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyTextureSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCopyTextureSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glCoverFillPathInstancedNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glCoverFillPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glCoverStrokePathInstancedNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glCoverStrokePathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glCreateProgram https://www.opengl.org/sdk/docs/man/xhtml/glCreateProgram.xml glCreateProgram https://www.opengl.org/sdk/docs/man3/xhtml/glCreateProgram.xml glCreateProgram https://www.opengl.org/sdk/docs/man4/html/glCreateProgram.xhtml glCreateProgramObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glCreateShader https://www.opengl.org/sdk/docs/man/xhtml/glCreateShader.xml glCreateShader https://www.opengl.org/sdk/docs/man3/xhtml/glCreateShader.xml glCreateShader https://www.opengl.org/sdk/docs/man4/html/glCreateShader.xhtml glCreateShaderObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glCreateShaderProgramEXT https://www.opengl.org/registry/specs/EXT/separate_shader_objects.txt glCreateShaderProgramv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glCreateShaderProgramv https://www.opengl.org/sdk/docs/man4/html/glCreateShaderProgram.xhtml glCreateSyncFromCLeventARB https://www.opengl.org/registry/specs/ARB/cl_event.txt glCullFace https://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml glCullFace https://www.opengl.org/sdk/docs/man3/xhtml/glCullFace.xml glCullFace https://www.opengl.org/sdk/docs/man4/html/glCullFace.xhtml glCurrentPaletteMatrixARB https://www.opengl.org/registry/specs/ARB/matrix_palette.txt glDECLARE_HANDLE https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt glDECLARE_HANDLE https://www.opengl.org/registry/specs/NV/present_video.txt glDebugMessageCallbackAMD https://www.opengl.org/registry/specs/AMD/debug_output.txt glDebugMessageCallbackARB https://www.opengl.org/registry/specs/ARB/debug_output.txt glDebugMessageControlARB https://www.opengl.org/registry/specs/ARB/debug_output.txt glDebugMessageEnableAMD https://www.opengl.org/registry/specs/AMD/debug_output.txt glDebugMessageInsertAMD https://www.opengl.org/registry/specs/AMD/debug_output.txt glDebugMessageInsertARB https://www.opengl.org/registry/specs/ARB/debug_output.txt glDeleteArraySetsEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.alt.txt glDeleteArraySetsEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.txt glDeleteAsyncMarkersSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glDeleteBuffers https://www.opengl.org/sdk/docs/man/xhtml/glDeleteBuffers.xml glDeleteBuffers https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteBuffers.xml glDeleteBuffers https://www.opengl.org/sdk/docs/man4/html/glDeleteBuffers.xhtml glDeleteBuffersARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glDeleteFencesAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glDeleteFencesNV https://www.opengl.org/registry/specs/NV/fence.txt glDeleteFramebuffers https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glDeleteFramebuffers https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteFramebuffers.xml glDeleteFramebuffers https://www.opengl.org/sdk/docs/man4/html/glDeleteFramebuffers.xhtml glDeleteFramebuffersEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glDeleteLists https://www.opengl.org/sdk/docs/man/xhtml/glDeleteLists.xml glDeleteNamedStringARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glDeleteNamesAMD https://www.opengl.org/registry/specs/AMD/name_gen_delete.txt glDeleteObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glDeleteOcclusionQueriesNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glDeletePathsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glDeletePerfMonitorsAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glDeleteProgram https://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml glDeleteProgram https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteProgram.xml glDeleteProgram https://www.opengl.org/sdk/docs/man4/html/glDeleteProgram.xhtml glDeleteProgramPipelines https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glDeleteProgramPipelines https://www.opengl.org/sdk/docs/man4/html/glDeleteProgramPipelines.xhtml glDeleteProgramsARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glDeleteProgramsARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glDeleteProgramsNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glDeleteQueries https://www.opengl.org/sdk/docs/man/xhtml/glDeleteQueries.xml glDeleteQueries https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteQueries.xml glDeleteQueries https://www.opengl.org/sdk/docs/man4/html/glDeleteQueries.xhtml glDeleteQueriesARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glDeleteRenderbuffers https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glDeleteRenderbuffers https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteRenderbuffers.xml glDeleteRenderbuffers https://www.opengl.org/sdk/docs/man4/html/glDeleteRenderbuffers.xhtml glDeleteRenderbuffersEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glDeleteSamplers https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glDeleteSamplers https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSamplers.xml glDeleteSamplers https://www.opengl.org/sdk/docs/man4/html/glDeleteSamplers.xhtml glDeleteShader https://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml glDeleteShader https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteShader.xml glDeleteShader https://www.opengl.org/sdk/docs/man4/html/glDeleteShader.xhtml glDeleteSync https://www.opengl.org/registry/specs/ARB/sync.txt glDeleteSync https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteSync.xml glDeleteSync https://www.opengl.org/sdk/docs/man4/html/glDeleteSync.xhtml glDeleteTextures https://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml glDeleteTextures https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteTextures.xml glDeleteTextures https://www.opengl.org/sdk/docs/man4/html/glDeleteTextures.xhtml glDeleteTexturesEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glDeleteTransformFeedbacks https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glDeleteTransformFeedbacks https://www.opengl.org/sdk/docs/man4/html/glDeleteTransformFeedbacks.xhtml glDeleteTransformFeedbacksNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glDeleteVertexArrays https://www.opengl.org/registry/specs/ARB/vertex_array_object.txt glDeleteVertexArrays https://www.opengl.org/sdk/docs/man3/xhtml/glDeleteVertexArrays.xml glDeleteVertexArrays https://www.opengl.org/sdk/docs/man4/html/glDeleteVertexArrays.xhtml glDeleteVertexArraysAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_object.txt glDepthBoundsEXT https://www.opengl.org/registry/specs/EXT/depth_bounds_test.txt glDepthBoundsdNV https://www.opengl.org/registry/specs/NV/depth_buffer_float.txt glDepthFunc https://www.opengl.org/sdk/docs/man/xhtml/glDepthFunc.xml glDepthFunc https://www.opengl.org/sdk/docs/man3/xhtml/glDepthFunc.xml glDepthFunc https://www.opengl.org/sdk/docs/man4/html/glDepthFunc.xhtml glDepthMask https://www.opengl.org/sdk/docs/man/xhtml/glDepthMask.xml glDepthMask https://www.opengl.org/sdk/docs/man3/xhtml/glDepthMask.xml glDepthMask https://www.opengl.org/sdk/docs/man4/html/glDepthMask.xhtml glDepthRange https://www.opengl.org/sdk/docs/man/xhtml/glDepthRange.xml glDepthRange https://www.opengl.org/sdk/docs/man3/xhtml/glDepthRange.xml glDepthRange https://www.opengl.org/sdk/docs/man4/html/glDepthRange.xhtml glDepthRangeArrayv https://www.opengl.org/registry/specs/ARB/viewport_array.txt glDepthRangeArrayv https://www.opengl.org/sdk/docs/man4/html/glDepthRangeArray.xhtml glDepthRangeIndexed https://www.opengl.org/registry/specs/ARB/viewport_array.txt glDepthRangeIndexed https://www.opengl.org/sdk/docs/man4/html/glDepthRangeIndexed.xhtml glDepthRangedNV https://www.opengl.org/registry/specs/NV/depth_buffer_float.txt glDepthRangef https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt glDepthRangef https://www.opengl.org/sdk/docs/man4/html/glDepthRange.xhtml glDepthRangefOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glDepthRangexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glDetachObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glDetachShader https://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml glDetachShader https://www.opengl.org/sdk/docs/man3/xhtml/glDetachShader.xml glDetachShader https://www.opengl.org/sdk/docs/man4/html/glDetachShader.xhtml glDetailTexFuncSGIS https://www.opengl.org/registry/specs/SGIS/detail_texture.txt glDisable https://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml glDisable https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml glDisable https://www.opengl.org/sdk/docs/man4/html/glEnable.xhtml glDisableClientState https://www.opengl.org/sdk/docs/man/xhtml/glEnableClientState.xml glDisableClientStateIndexedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glDisableClientStateiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glDisableIndexedEXT https://www.opengl.org/registry/specs/ARB/viewport_array.txt glDisableIndexedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glDisableIndexedEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glDisableVertexArrayAttribEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glDisableVertexArrayEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glDisableVertexAttribAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glDisableVertexAttribArray https://www.opengl.org/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml glDisableVertexAttribArray https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml glDisableVertexAttribArray https://www.opengl.org/sdk/docs/man4/html/glEnableVertexAttribArray.xhtml glDisableVertexAttribArrayARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glDisableVertexAttribArrayARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glDisablei https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml glDisablei https://www.opengl.org/sdk/docs/man4/html/glEnable.xhtml glDrawArrays https://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml glDrawArrays https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArrays.xml glDrawArrays https://www.opengl.org/sdk/docs/man4/html/glDrawArrays.xhtml glDrawArraysEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glDrawArraysIndirect https://www.opengl.org/registry/specs/ARB/draw_indirect.txt glDrawArraysIndirect https://www.opengl.org/sdk/docs/man4/html/glDrawArraysIndirect.xhtml glDrawArraysInstanced https://www.opengl.org/sdk/docs/man3/xhtml/glDrawArraysInstanced.xml glDrawArraysInstanced https://www.opengl.org/sdk/docs/man4/html/glDrawArraysInstanced.xhtml glDrawArraysInstancedARB https://www.opengl.org/registry/specs/ARB/draw_instanced.txt glDrawArraysInstancedBaseInstance https://www.opengl.org/registry/specs/ARB/base_instance.txt glDrawArraysInstancedEXT https://www.opengl.org/registry/specs/EXT/draw_instanced.txt glDrawBuffer https://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffer.xml glDrawBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffer.xml glDrawBuffer https://www.opengl.org/sdk/docs/man4/html/glDrawBuffer.xhtml glDrawBuffers https://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml glDrawBuffers https://www.opengl.org/sdk/docs/man3/xhtml/glDrawBuffers.xml glDrawBuffers https://www.opengl.org/sdk/docs/man4/html/glDrawBuffers.xhtml glDrawBuffersARB https://www.opengl.org/registry/specs/ARB/draw_buffers.txt glDrawBuffersATI https://www.opengl.org/registry/specs/ATI/draw_buffers.txt glDrawElementArrayAPPLE https://www.opengl.org/registry/specs/APPLE/element_array.txt glDrawElementArrayATI https://www.opengl.org/registry/specs/ATI/element_array.txt glDrawElements https://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml glDrawElements https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml glDrawElements https://www.opengl.org/sdk/docs/man4/html/glDrawElements.xhtml glDrawElementsBaseVertex https://www.opengl.org/registry/specs/ARB/draw_elements_base_vertex.txt glDrawElementsBaseVertex https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsBaseVertex.xml glDrawElementsBaseVertex https://www.opengl.org/sdk/docs/man4/html/glDrawElementsBaseVertex.xhtml glDrawElementsIndirect https://www.opengl.org/registry/specs/ARB/draw_indirect.txt glDrawElementsIndirect https://www.opengl.org/sdk/docs/man4/html/glDrawElementsIndirect.xhtml glDrawElementsInstanced https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml glDrawElementsInstanced https://www.opengl.org/sdk/docs/man4/html/glDrawElementsInstanced.xhtml glDrawElementsInstancedARB https://www.opengl.org/registry/specs/ARB/draw_instanced.txt glDrawElementsInstancedBaseInstance https://www.opengl.org/registry/specs/ARB/base_instance.txt glDrawElementsInstancedBaseVertex https://www.opengl.org/registry/specs/ARB/draw_elements_base_vertex.txt glDrawElementsInstancedBaseVertex https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstancedBaseVertex.xml glDrawElementsInstancedBaseVertex https://www.opengl.org/sdk/docs/man4/html/glDrawElementsInstancedBaseVertex.xhtml glDrawElementsInstancedBaseVertexBaseInstance https://www.opengl.org/registry/specs/ARB/base_instance.txt glDrawElementsInstancedEXT https://www.opengl.org/registry/specs/EXT/draw_instanced.txt glDrawMeshArraysSUN https://www.opengl.org/registry/specs/SUN/mesh_array.txt glDrawPixels https://www.opengl.org/sdk/docs/man/xhtml/glDrawPixels.xml glDrawRangeElementArrayAPPLE https://www.opengl.org/registry/specs/APPLE/element_array.txt glDrawRangeElementArrayATI https://www.opengl.org/registry/specs/ATI/element_array.txt glDrawRangeElements https://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElements.xml glDrawRangeElements https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElements.xml glDrawRangeElements https://www.opengl.org/sdk/docs/man4/html/glDrawRangeElements.xhtml glDrawRangeElementsBaseVertex https://www.opengl.org/registry/specs/ARB/draw_elements_base_vertex.txt glDrawRangeElementsBaseVertex https://www.opengl.org/sdk/docs/man3/xhtml/glDrawRangeElementsBaseVertex.xml glDrawRangeElementsBaseVertex https://www.opengl.org/sdk/docs/man4/html/glDrawRangeElementsBaseVertex.xhtml glDrawTransformFeedback https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glDrawTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glDrawTransformFeedback.xhtml glDrawTransformFeedbackInstanced https://www.opengl.org/registry/specs/ARB/transform_feedback_instanced.txt glDrawTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glDrawTransformFeedbackStream https://www.opengl.org/registry/specs/ARB/transform_feedback3.txt glDrawTransformFeedbackStream https://www.opengl.org/sdk/docs/man4/html/glDrawTransformFeedbackStream.xhtml glDrawTransformFeedbackStreamInstanced https://www.opengl.org/registry/specs/ARB/transform_feedback_instanced.txt glEdgeFlag https://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlag.xml glEdgeFlagFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glEdgeFlagPointer https://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlagPointer.xml glEdgeFlagPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glEdgeFlagv https://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlag.xml glElementPointerAPPLE https://www.opengl.org/registry/specs/APPLE/element_array.txt glElementPointerATI https://www.opengl.org/registry/specs/ATI/element_array.txt glEnable https://www.opengl.org/registry/specs/SGIX/instruments.txt glEnable https://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml glEnable https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml glEnable https://www.opengl.org/sdk/docs/man4/html/glEnable.xhtml glEnableClientState https://www.opengl.org/sdk/docs/man/xhtml/glEnableClientState.xml glEnableClientStateIndexedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glEnableClientStateiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glEnableIndexedEXT https://www.opengl.org/registry/specs/ARB/viewport_array.txt glEnableIndexedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glEnableIndexedEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glEnableVertexArrayAttribEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glEnableVertexArrayEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glEnableVertexAttribAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glEnableVertexAttribArray https://www.opengl.org/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml glEnableVertexAttribArray https://www.opengl.org/sdk/docs/man3/xhtml/glEnableVertexAttribArray.xml glEnableVertexAttribArray https://www.opengl.org/sdk/docs/man4/html/glEnableVertexAttribArray.xhtml glEnableVertexAttribArrayARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glEnableVertexAttribArrayARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glEnablei https://www.opengl.org/sdk/docs/man3/xhtml/glEnable.xml glEnablei https://www.opengl.org/sdk/docs/man4/html/glEnable.xhtml glEnd https://www.opengl.org/sdk/docs/man/xhtml/glBegin.xml glEndConditionalRender https://www.opengl.org/sdk/docs/man3/xhtml/glBeginConditionalRender.xml glEndConditionalRender https://www.opengl.org/sdk/docs/man4/html/glBeginConditionalRender.xhtml glEndConditionalRenderNV https://www.opengl.org/registry/specs/NV/conditional_render.txt glEndList https://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml glEndOcclusionQueryNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glEndPerfMonitorAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glEndQuery https://www.opengl.org/sdk/docs/man/xhtml/glBeginQuery.xml glEndQuery https://www.opengl.org/sdk/docs/man3/xhtml/glBeginQuery.xml glEndQuery https://www.opengl.org/sdk/docs/man4/html/glBeginQuery.xhtml glEndQueryARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glEndQueryIndexed https://www.opengl.org/registry/specs/ARB/transform_feedback3.txt glEndQueryIndexed https://www.opengl.org/sdk/docs/man4/html/glBeginQueryIndexed.xhtml glEndSceneEXT https://www.opengl.org/registry/specs/EXT/scene_marker.txt glEndTransformFeedback https://www.opengl.org/sdk/docs/man3/xhtml/glBeginTransformFeedback.xml glEndTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glBeginTransformFeedback.xhtml glEndTransformFeedbackEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glEndTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glEndVideoCaptureNV https://www.opengl.org/registry/specs/NV/video_capture.txt glEvalCoord1d https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord1dv https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord1f https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord1fv https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord2d https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord2dv https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord2f https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalCoord2fv https://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml glEvalMapsNV https://www.opengl.org/registry/specs/NV/evaluators.txt glEvalMesh1 https://www.opengl.org/sdk/docs/man/xhtml/glEvalMesh.xml glEvalMesh2 https://www.opengl.org/sdk/docs/man/xhtml/glEvalMesh.xml glEvalPoint1 https://www.opengl.org/sdk/docs/man/xhtml/glEvalPoint.xml glEvalPoint2 https://www.opengl.org/sdk/docs/man/xhtml/glEvalPoint.xml glExecuteProgramNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glFeedbackBuffer https://www.opengl.org/sdk/docs/man/xhtml/glFeedbackBuffer.xml glFeedbackBufferxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glFenceSync https://www.opengl.org/registry/specs/ARB/sync.txt glFenceSync https://www.opengl.org/sdk/docs/man3/xhtml/glFenceSync.xml glFenceSync https://www.opengl.org/sdk/docs/man4/html/glFenceSync.xhtml glFinalCombinerInputNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glFinish https://www.opengl.org/sdk/docs/man/xhtml/glFinish.xml glFinish https://www.opengl.org/sdk/docs/man3/xhtml/glFinish.xml glFinish https://www.opengl.org/sdk/docs/man4/html/glFinish.xhtml glFinishAsyncSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glFinishFenceAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glFinishFenceNV https://www.opengl.org/registry/specs/NV/fence.txt glFinishObjectAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glFinishTextureSUNX https://www.opengl.org/registry/specs/SUNX/constant_data.txt glFlush https://www.opengl.org/sdk/docs/man/xhtml/glFlush.xml glFlush https://www.opengl.org/sdk/docs/man3/xhtml/glFlush.xml glFlush https://www.opengl.org/sdk/docs/man4/html/glFlush.xhtml glFlushMappedBufferRange https://www.opengl.org/registry/specs/ARB/map_buffer_range.txt glFlushMappedBufferRange https://www.opengl.org/sdk/docs/man3/xhtml/glFlushMappedBufferRange.xml glFlushMappedBufferRange https://www.opengl.org/sdk/docs/man4/html/glFlushMappedBufferRange.xhtml glFlushMappedBufferRangeAPPLE https://www.opengl.org/registry/specs/APPLE/flush_buffer_range.txt glFlushMappedNamedBufferRangeEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glFlushPixelDataRangeNV https://www.opengl.org/registry/specs/NV/pixel_data_range.txt glFlushRasterSGIX https://www.opengl.org/registry/specs/SGIX/flush_raster.txt glFlushStaticDataIBM https://www.opengl.org/registry/specs/IBM/static_data.txt glFlushVertexArrayRangeAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_range.txt glFlushVertexArrayRangeNV https://www.opengl.org/registry/specs/NV/vertex_array_range.txt glFogCoordFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glFogCoordPointer https://www.opengl.org/sdk/docs/man/xhtml/glFogCoordPointer.xml glFogCoordPointerEXT https://www.opengl.org/registry/specs/EXT/fog_coord.txt glFogCoordd https://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml glFogCoorddv https://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml glFogCoordf https://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml glFogCoordfv https://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml glFogCoordhNV https://www.opengl.org/registry/specs/NV/half_float.txt glFogCoordhvNV https://www.opengl.org/registry/specs/NV/half_float.txt glFogFuncSGIS https://www.opengl.org/registry/specs/SGIS/fog_func.txt glFogf https://www.opengl.org/sdk/docs/man/xhtml/glFog.xml glFogfv https://www.opengl.org/sdk/docs/man/xhtml/glFog.xml glFogi https://www.opengl.org/sdk/docs/man/xhtml/glFog.xml glFogiv https://www.opengl.org/sdk/docs/man/xhtml/glFog.xml glFragmentColorMaterialEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentColorMaterialSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightModelfEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightModelfSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightModelfvEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightModelfvSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightModeliEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightModeliSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightModelivEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightModelivSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightfEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightfSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightfvEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightfvSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightiEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightiSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentLightivEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentLightivSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentMaterialfEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentMaterialfSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentMaterialfvEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentMaterialfvSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentMaterialiEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentMaterialiSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFragmentMaterialivEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glFragmentMaterialivSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glFrameTerminatorGREMEDY https://www.opengl.org/registry/specs/GREMEDY/frame_terminator.txt glFrameZoomSGIX https://www.opengl.org/registry/specs/SGIX/framezoom.txt glFramebufferDrawBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glFramebufferDrawBuffersEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glFramebufferReadBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glFramebufferRenderbuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glFramebufferRenderbuffer https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferRenderbuffer.xml glFramebufferRenderbuffer https://www.opengl.org/sdk/docs/man4/html/glFramebufferRenderbuffer.xhtml glFramebufferRenderbufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glFramebufferTexture https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml glFramebufferTexture https://www.opengl.org/sdk/docs/man4/html/glFramebufferTexture.xhtml glFramebufferTexture1D https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glFramebufferTexture1D https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml glFramebufferTexture1D https://www.opengl.org/sdk/docs/man4/html/glFramebufferTexture.xhtml glFramebufferTexture1DEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glFramebufferTexture2D https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glFramebufferTexture2D https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml glFramebufferTexture2D https://www.opengl.org/sdk/docs/man4/html/glFramebufferTexture.xhtml glFramebufferTexture2DEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glFramebufferTexture3D https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glFramebufferTexture3D https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTexture.xml glFramebufferTexture3D https://www.opengl.org/sdk/docs/man4/html/glFramebufferTexture.xhtml glFramebufferTexture3DEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glFramebufferTextureARB https://www.opengl.org/registry/specs/ARB/geometry_shader4.txt glFramebufferTextureEXT https://www.opengl.org/registry/specs/EXT/geometry_shader4.txt glFramebufferTextureEXT https://www.opengl.org/registry/specs/NV/geometry_program4.txt glFramebufferTextureFaceARB https://www.opengl.org/registry/specs/ARB/geometry_shader4.txt glFramebufferTextureFaceEXT https://www.opengl.org/registry/specs/EXT/geometry_shader4.txt glFramebufferTextureFaceEXT https://www.opengl.org/registry/specs/NV/geometry_program4.txt glFramebufferTextureLayer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glFramebufferTextureLayer https://www.opengl.org/sdk/docs/man3/xhtml/glFramebufferTextureLayer.xml glFramebufferTextureLayer https://www.opengl.org/sdk/docs/man4/html/glFramebufferTextureLayer.xhtml glFramebufferTextureLayerARB https://www.opengl.org/registry/specs/ARB/geometry_shader4.txt glFramebufferTextureLayerEXT https://www.opengl.org/registry/specs/EXT/geometry_shader4.txt glFramebufferTextureLayerEXT https://www.opengl.org/registry/specs/EXT/texture_array.txt glFramebufferTextureLayerEXT https://www.opengl.org/registry/specs/NV/geometry_program4.txt glFreeObjectBufferATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glFrontFace https://www.opengl.org/sdk/docs/man/xhtml/glFrontFace.xml glFrontFace https://www.opengl.org/sdk/docs/man3/xhtml/glFrontFace.xml glFrontFace https://www.opengl.org/sdk/docs/man4/html/glFrontFace.xhtml glFrustum https://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml glFrustumfOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glFrustumxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGenArraySetsEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.txt glGenAsyncMarkersSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glGenBuffers https://www.opengl.org/sdk/docs/man/xhtml/glGenBuffers.xml glGenBuffers https://www.opengl.org/sdk/docs/man3/xhtml/glGenBuffers.xml glGenBuffers https://www.opengl.org/sdk/docs/man4/html/glGenBuffers.xhtml glGenBuffersARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glGenFencesAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glGenFencesNV https://www.opengl.org/registry/specs/NV/fence.txt glGenFramebuffers https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glGenFramebuffers https://www.opengl.org/sdk/docs/man3/xhtml/glGenFramebuffers.xml glGenFramebuffers https://www.opengl.org/sdk/docs/man4/html/glGenFramebuffers.xhtml glGenFramebuffersEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glGenLists https://www.opengl.org/sdk/docs/man/xhtml/glGenLists.xml glGenNamesAMD https://www.opengl.org/registry/specs/AMD/name_gen_delete.txt glGenOcclusionQueriesNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glGenPathsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGenPerfMonitorsAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGenProgramPipelines https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glGenProgramPipelines https://www.opengl.org/sdk/docs/man4/html/glGenProgramPipelines.xhtml glGenProgramsARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGenProgramsARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGenProgramsNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGenQueries https://www.opengl.org/sdk/docs/man/xhtml/glGenQueries.xml glGenQueries https://www.opengl.org/sdk/docs/man3/xhtml/glGenQueries.xml glGenQueries https://www.opengl.org/sdk/docs/man4/html/glGenQueries.xhtml glGenQueriesARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glGenRenderbuffers https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glGenRenderbuffers https://www.opengl.org/sdk/docs/man3/xhtml/glGenRenderbuffers.xml glGenRenderbuffers https://www.opengl.org/sdk/docs/man4/html/glGenRenderbuffers.xhtml glGenRenderbuffersEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glGenSamplers https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glGenSamplers https://www.opengl.org/sdk/docs/man3/xhtml/glGenSamplers.xml glGenSamplers https://www.opengl.org/sdk/docs/man4/html/glGenSamplers.xhtml glGenTextures https://www.opengl.org/sdk/docs/man/xhtml/glGenTextures.xml glGenTextures https://www.opengl.org/sdk/docs/man3/xhtml/glGenTextures.xml glGenTextures https://www.opengl.org/sdk/docs/man4/html/glGenTextures.xhtml glGenTexturesEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glGenTransformFeedbacks https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glGenTransformFeedbacks https://www.opengl.org/sdk/docs/man4/html/glGenTransformFeedbacks.xhtml glGenTransformFeedbacksNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glGenVertexArrays https://www.opengl.org/registry/specs/ARB/vertex_array_object.txt glGenVertexArrays https://www.opengl.org/sdk/docs/man3/xhtml/glGenVertexArrays.xml glGenVertexArrays https://www.opengl.org/sdk/docs/man4/html/glGenVertexArrays.xhtml glGenVertexArraysAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_object.txt glGenerateMipmap https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glGenerateMipmap https://www.opengl.org/sdk/docs/man3/xhtml/glGenerateMipmap.xml glGenerateMipmap https://www.opengl.org/sdk/docs/man4/html/glGenerateMipmap.xhtml glGenerateMipmapEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glGenerateMultiTexMipmapEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGenerateTextureMipmapEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetActiveAttrib https://www.opengl.org/sdk/docs/man/xhtml/glGetActiveAttrib.xml glGetActiveAttrib https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveAttrib.xml glGetActiveAttrib https://www.opengl.org/sdk/docs/man4/html/glGetActiveAttrib.xhtml glGetActiveAttribARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetActiveSubroutineName https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetActiveSubroutineName https://www.opengl.org/sdk/docs/man4/html/glGetActiveSubroutineName.xhtml glGetActiveSubroutineUniformName https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetActiveSubroutineUniformName https://www.opengl.org/sdk/docs/man4/html/glGetActiveSubroutineUniformName.xhtml glGetActiveSubroutineUniformiv https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetActiveSubroutineUniformiv https://www.opengl.org/sdk/docs/man4/html/glGetActiveSubroutineUniform.xhtml glGetActiveUniform https://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniform.xml glGetActiveUniform https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniform.xml glGetActiveUniform https://www.opengl.org/sdk/docs/man4/html/glGetActiveUniform.xhtml glGetActiveUniformARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetActiveUniformBlockName https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetActiveUniformBlockName https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlockName.xml glGetActiveUniformBlockName https://www.opengl.org/sdk/docs/man4/html/glGetActiveUniformBlockName.xhtml glGetActiveUniformBlockiv https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetActiveUniformBlockiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformBlock.xml glGetActiveUniformBlockiv https://www.opengl.org/sdk/docs/man4/html/glGetActiveUniformBlock.xhtml glGetActiveUniformName https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetActiveUniformName https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformName.xml glGetActiveUniformName https://www.opengl.org/sdk/docs/man4/html/glGetActiveUniformName.xhtml glGetActiveUniformsiv https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetActiveUniformsiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetActiveUniformsiv.xml glGetActiveUniformsiv https://www.opengl.org/sdk/docs/man4/html/glGetActiveUniformsiv.xhtml glGetActiveVaryingNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glGetArrayObjectfvATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetArrayObjectivATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetAttachedObjectsARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetAttachedShaders https://www.opengl.org/sdk/docs/man/xhtml/glGetAttachedShaders.xml glGetAttachedShaders https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttachedShaders.xml glGetAttachedShaders https://www.opengl.org/sdk/docs/man4/html/glGetAttachedShaders.xhtml glGetAttribLocation https://www.opengl.org/sdk/docs/man/xhtml/glGetAttribLocation.xml glGetAttribLocation https://www.opengl.org/sdk/docs/man3/xhtml/glGetAttribLocation.xml glGetAttribLocation https://www.opengl.org/sdk/docs/man4/html/glGetAttribLocation.xhtml glGetAttribLocationARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetBooleanIndexedvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetBooleanIndexedvEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glGetBooleanIndexedvEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glGetBooleanIndexedvEXT https://www.opengl.org/registry/specs/NV/explicit_multisample.txt glGetBooleanIndexedvEXT https://www.opengl.org/registry/specs/NV/transform_feedback.txt glGetBooleani_v https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetBooleani_v https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetBooleanv https://www.opengl.org/sdk/docs/man/xhtml/glGet.xml glGetBooleanv https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetBooleanv https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetBufferParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetBufferParameteriv.xml glGetBufferParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferParameter.xml glGetBufferParameteriv https://www.opengl.org/sdk/docs/man4/html/glGetBufferParameter.xhtml glGetBufferParameterivARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glGetBufferParameterui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glGetBufferPointerv https://www.opengl.org/sdk/docs/man/xhtml/glGetBufferPointerv.xml glGetBufferPointerv https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferPointerv.xml glGetBufferPointerv https://www.opengl.org/sdk/docs/man4/html/glGetBufferPointerv.xhtml glGetBufferPointervARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glGetBufferSubData https://www.opengl.org/sdk/docs/man/xhtml/glGetBufferSubData.xml glGetBufferSubData https://www.opengl.org/sdk/docs/man3/xhtml/glGetBufferSubData.xml glGetBufferSubData https://www.opengl.org/sdk/docs/man4/html/glGetBufferSubData.xhtml glGetBufferSubDataARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glGetClipPlane https://www.opengl.org/sdk/docs/man/xhtml/glGetClipPlane.xml glGetClipPlanefOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glGetClipPlanexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetColorTable https://www.opengl.org/sdk/docs/man/xhtml/glGetColorTable.xml glGetColorTableEXT https://www.opengl.org/registry/specs/EXT/paletted_texture.txt glGetColorTableParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetColorTableParameter.xml glGetColorTableParameterfvEXT https://www.opengl.org/registry/specs/EXT/paletted_texture.txt glGetColorTableParameterfvSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glGetColorTableParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetColorTableParameter.xml glGetColorTableParameterivEXT https://www.opengl.org/registry/specs/EXT/paletted_texture.txt glGetColorTableParameterivSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glGetColorTableSGI https://www.opengl.org/registry/specs/SGI/color_table.txt glGetCombinerInputParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetCombinerInputParameterivNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetCombinerOutputParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetCombinerOutputParameterivNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetCombinerStageParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners2.txt glGetCompressedMultiTexImageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetCompressedTexImage https://www.opengl.org/sdk/docs/man/xhtml/glGetCompressedTexImage.xml glGetCompressedTexImage https://www.opengl.org/sdk/docs/man3/xhtml/glGetCompressedTexImage.xml glGetCompressedTexImage https://www.opengl.org/sdk/docs/man4/html/glGetCompressedTexImage.xhtml glGetCompressedTexImageARB https://www.opengl.org/registry/specs/ARB/texture_compression.txt glGetCompressedTextureImageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetConvolutionFilter https://www.opengl.org/sdk/docs/man/xhtml/glGetConvolutionFilter.xml glGetConvolutionFilterEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glGetConvolutionParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetConvolutionParameter.xml glGetConvolutionParameterfvEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glGetConvolutionParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetConvolutionParameter.xml glGetConvolutionParameterivEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glGetConvolutionParameterxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetDebugMessageLogAMD https://www.opengl.org/registry/specs/AMD/debug_output.txt glGetDebugMessageLogARB https://www.opengl.org/registry/specs/ARB/debug_output.txt glGetDetailTexFuncSGIS https://www.opengl.org/registry/specs/SGIS/detail_texture.txt glGetDoubleIndexedvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetDoublei_v https://www.opengl.org/registry/specs/ARB/viewport_array.txt glGetDoublei_vEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetDoublev https://www.opengl.org/sdk/docs/man/xhtml/glGet.xml glGetDoublev https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetDoublev https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetError https://www.opengl.org/sdk/docs/man/xhtml/glGetError.xml glGetError https://www.opengl.org/sdk/docs/man3/xhtml/glGetError.xml glGetError https://www.opengl.org/sdk/docs/man4/html/glGetError.xhtml glGetFenceivNV https://www.opengl.org/registry/specs/NV/fence.txt glGetFinalCombinerInputParameterfvNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetFinalCombinerInputParameterivNV https://www.opengl.org/registry/specs/NV/register_combiners.txt glGetFixedvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetFloatIndexedvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetFloati_v https://www.opengl.org/registry/specs/ARB/viewport_array.txt glGetFloati_vEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetFloatv https://www.opengl.org/sdk/docs/man/xhtml/glGet.xml glGetFloatv https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetFloatv https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetFogFuncSGIS https://www.opengl.org/registry/specs/SGIS/fog_func.txt glGetFragDataIndex https://www.opengl.org/registry/specs/ARB/blend_func_extended.txt glGetFragDataIndex https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataIndex.xml glGetFragDataIndex https://www.opengl.org/sdk/docs/man4/html/glGetFragDataIndex.xhtml glGetFragDataLocation https://www.opengl.org/sdk/docs/man3/xhtml/glGetFragDataLocation.xml glGetFragDataLocation https://www.opengl.org/sdk/docs/man4/html/glGetFragDataLocation.xhtml glGetFragDataLocationEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glGetFragmentLightfvEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glGetFragmentLightfvSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glGetFragmentLightivEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glGetFragmentLightivSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glGetFragmentMaterialfvEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glGetFragmentMaterialfvSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glGetFragmentMaterialivEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glGetFragmentMaterialivSGIX https://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt glGetFramebufferAttachmentParameter https://www.opengl.org/sdk/docs/man3/xhtml/glGetFramebufferAttachmentParameter.xml glGetFramebufferAttachmentParameter https://www.opengl.org/sdk/docs/man4/html/glGetFramebufferAttachmentParameter.xhtml glGetFramebufferAttachmentParameteriv https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glGetFramebufferAttachmentParameterivEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glGetFramebufferParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetGraphicsResetStatusARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetHandleARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetHistogram https://www.opengl.org/sdk/docs/man/xhtml/glGetHistogram.xml glGetHistogramEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetHistogramParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetHistogramParameter.xml glGetHistogramParameterfvEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetHistogramParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetHistogramParameter.xml glGetHistogramParameterivEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetHistogramParameterxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetImageTransformParameterfvHP https://www.opengl.org/registry/specs/HP/image_transform.txt glGetImageTransformParameterivHP https://www.opengl.org/registry/specs/HP/image_transform.txt glGetInfoLogARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetInstrumentsSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glGetInteger64i_v https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetInteger64i_v https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetInteger64v https://www.opengl.org/registry/specs/ARB/sync.txt glGetInteger64v https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetInteger64v https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetIntegerIndexedivEXT https://www.opengl.org/registry/specs/ARB/viewport_array.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/NV/explicit_multisample.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glGetIntegerIndexedvEXT https://www.opengl.org/registry/specs/NV/transform_feedback.txt glGetIntegeri_v https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetIntegeri_v https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetIntegeri_v https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetIntegerui64i_vNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glGetIntegerui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glGetIntegerv https://www.opengl.org/registry/specs/SGIX/instruments.txt glGetIntegerv https://www.opengl.org/sdk/docs/man/xhtml/glGet.xml glGetIntegerv https://www.opengl.org/sdk/docs/man3/xhtml/glGet.xml glGetIntegerv https://www.opengl.org/sdk/docs/man4/html/glGet.xhtml glGetInternalformativ https://www.opengl.org/registry/specs/ARB/internalformat_query.txt glGetLightfv https://www.opengl.org/sdk/docs/man/xhtml/glGetLight.xml glGetLightiv https://www.opengl.org/sdk/docs/man/xhtml/glGetLight.xml glGetLightxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetListParameterfvSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glGetListParameterivSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glGetMapAttribParameterfvNV https://www.opengl.org/registry/specs/NV/evaluators.txt glGetMapAttribParameterivNV https://www.opengl.org/registry/specs/NV/evaluators.txt glGetMapControlPointsNV https://www.opengl.org/registry/specs/NV/evaluators.txt glGetMapParameterfvNV https://www.opengl.org/registry/specs/NV/evaluators.txt glGetMapParameterivNV https://www.opengl.org/registry/specs/NV/evaluators.txt glGetMapdv https://www.opengl.org/sdk/docs/man/xhtml/glGetMap.xml glGetMapfv https://www.opengl.org/sdk/docs/man/xhtml/glGetMap.xml glGetMapiv https://www.opengl.org/sdk/docs/man/xhtml/glGetMap.xml glGetMapxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetMaterialfv https://www.opengl.org/sdk/docs/man/xhtml/glGetMaterial.xml glGetMaterialiv https://www.opengl.org/sdk/docs/man/xhtml/glGetMaterial.xml glGetMaterialxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetMinmax https://www.opengl.org/sdk/docs/man/xhtml/glGetMinmax.xml glGetMinmaxEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetMinmaxParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetMinmaxParameter.xml glGetMinmaxParameterfvEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetMinmaxParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetMinmaxParameter.xml glGetMinmaxParameterivEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glGetMultiTexEnvfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexEnvivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexGendvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexGenfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexGenivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexImageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexLevelParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexLevelParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexParameterIivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexParameterIuivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultiTexParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetMultisamplefv https://www.opengl.org/registry/specs/ARB/texture_multisample.txt glGetMultisamplefv https://www.opengl.org/sdk/docs/man3/xhtml/glGetMultisample.xml glGetMultisamplefv https://www.opengl.org/sdk/docs/man4/html/glGetMultisample.xhtml glGetMultisamplefvNV https://www.opengl.org/registry/specs/NV/explicit_multisample.txt glGetNamedBufferParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedBufferParameterui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glGetNamedBufferPointervEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedBufferSubDataEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedFramebufferAttachmentParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramLocalParameterIivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramLocalParameterIuivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramLocalParameterdvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramLocalParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramStringEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedProgramivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedRenderbufferParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetNamedStringARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glGetNamedStringivARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glGetObjectBufferfvATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetObjectBufferivATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetObjectParameterfvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetObjectParameterivAPPLE https://www.opengl.org/registry/specs/APPLE/object_purgeable.txt glGetObjectParameterivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetOcclusionQueryivNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glGetOcclusionQueryuivNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glGetPathColorGenfvNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathColorGenivNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathCommandsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathCoordsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathDashArrayNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathLengthNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathMetricRangeNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathMetricsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathParameterfvNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathParameterivNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathSpacingNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathTexGenfvNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPathTexGenivNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glGetPerfMonitorCounterDataAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPerfMonitorCounterInfoAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPerfMonitorCounterStringAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPerfMonitorCountersAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPerfMonitorGroupStringAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPerfMonitorGroupsAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glGetPixelMapfv https://www.opengl.org/sdk/docs/man/xhtml/glGetPixelMap.xml glGetPixelMapuiv https://www.opengl.org/sdk/docs/man/xhtml/glGetPixelMap.xml glGetPixelMapusv https://www.opengl.org/sdk/docs/man/xhtml/glGetPixelMap.xml glGetPixelTransformParameterfvEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glGetPixelTransformParameterivEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glGetPointerIndexedvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetPointeri_vEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetPointerv https://www.opengl.org/registry/specs/ARB/debug_output.txt glGetPointerv https://www.opengl.org/sdk/docs/man/xhtml/glGetPointerv.xml glGetPointervEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glGetPointervEXT https://www.opengl.org/registry/specs/SGIX/instruments.txt glGetPolygonStipple https://www.opengl.org/sdk/docs/man/xhtml/glGetPolygonStipple.xml glGetProgramBinary https://www.opengl.org/registry/specs/ARB/get_program_binary.txt glGetProgramBinary https://www.opengl.org/sdk/docs/man4/html/glGetProgramBinary.xhtml glGetProgramEnvParameterIivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glGetProgramEnvParameterIuivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glGetProgramEnvParameterdvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramEnvParameterdvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramEnvParameterfvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramEnvParameterfvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramInfoLog https://www.opengl.org/sdk/docs/man/xhtml/glGetProgramInfoLog.xml glGetProgramInfoLog https://www.opengl.org/sdk/docs/man3/xhtml/glGetProgramInfoLog.xml glGetProgramInfoLog https://www.opengl.org/sdk/docs/man4/html/glGetProgramInfoLog.xhtml glGetProgramLocalParameterIivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glGetProgramLocalParameterIuivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glGetProgramLocalParameterdvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramLocalParameterdvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramLocalParameterdvARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glGetProgramLocalParameterfvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramLocalParameterfvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramLocalParameterfvARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glGetProgramNamedParameterdvNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glGetProgramNamedParameterfvNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glGetProgramParameterdvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetProgramParameterfvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetProgramPipelineInfoLog https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glGetProgramPipelineInfoLog https://www.opengl.org/sdk/docs/man4/html/glGetProgramPipelineInfoLog.xhtml glGetProgramPipelineiv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glGetProgramPipelineiv https://www.opengl.org/sdk/docs/man4/html/glGetProgramPipeline.xhtml glGetProgramStageiv https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetProgramStageiv https://www.opengl.org/sdk/docs/man4/html/glGetProgramStage.xhtml glGetProgramStringARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramStringARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramStringNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetProgramiv https://www.opengl.org/sdk/docs/man/xhtml/glGetProgram.xml glGetProgramiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetProgram.xml glGetProgramiv https://www.opengl.org/sdk/docs/man4/html/glGetProgram.xhtml glGetProgramivARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glGetProgramivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetProgramivNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetQueryIndexediv https://www.opengl.org/registry/specs/ARB/transform_feedback3.txt glGetQueryIndexediv https://www.opengl.org/sdk/docs/man4/html/glGetQueryIndexed.xhtml glGetQueryObjecti64v https://www.opengl.org/registry/specs/ARB/timer_query.txt glGetQueryObjecti64v https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObject.xml glGetQueryObjecti64v https://www.opengl.org/sdk/docs/man4/html/glGetQueryObject.xhtml glGetQueryObjecti64vEXT https://www.opengl.org/registry/specs/EXT/timer_query.txt glGetQueryObjectiv https://www.opengl.org/sdk/docs/man/xhtml/glGetQueryObject.xml glGetQueryObjectiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObject.xml glGetQueryObjectiv https://www.opengl.org/sdk/docs/man4/html/glGetQueryObject.xhtml glGetQueryObjectivARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glGetQueryObjectui64v https://www.opengl.org/registry/specs/ARB/timer_query.txt glGetQueryObjectui64v https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObject.xml glGetQueryObjectui64v https://www.opengl.org/sdk/docs/man4/html/glGetQueryObject.xhtml glGetQueryObjectui64vEXT https://www.opengl.org/registry/specs/EXT/timer_query.txt glGetQueryObjectuiv https://www.opengl.org/sdk/docs/man/xhtml/glGetQueryObject.xml glGetQueryObjectuiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryObject.xml glGetQueryObjectuiv https://www.opengl.org/sdk/docs/man4/html/glGetQueryObject.xhtml glGetQueryObjectuivARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glGetQueryiv https://www.opengl.org/sdk/docs/man/xhtml/glGetQueryiv.xml glGetQueryiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetQueryiv.xml glGetQueryiv https://www.opengl.org/sdk/docs/man4/html/glGetQueryiv.xhtml glGetQueryivARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glGetRenderbufferParameteriv https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glGetRenderbufferParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameter.xml glGetRenderbufferParameteriv https://www.opengl.org/sdk/docs/man4/html/glGetRenderbufferParameter.xhtml glGetRenderbufferParameterivEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glGetSamplerParameterIiv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glGetSamplerParameterIuiv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glGetSamplerParameterfv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glGetSamplerParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameter.xml glGetSamplerParameterfv https://www.opengl.org/sdk/docs/man4/html/glGetSamplerParameter.xhtml glGetSamplerParameteriv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glGetSamplerParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glGetSamplerParameter.xml glGetSamplerParameteriv https://www.opengl.org/sdk/docs/man4/html/glGetSamplerParameter.xhtml glGetSeparableFilter https://www.opengl.org/sdk/docs/man/xhtml/glGetSeparableFilter.xml glGetSeparableFilterEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glGetShaderInfoLog https://www.opengl.org/sdk/docs/man/xhtml/glGetShaderInfoLog.xml glGetShaderInfoLog https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderInfoLog.xml glGetShaderInfoLog https://www.opengl.org/sdk/docs/man4/html/glGetShaderInfoLog.xhtml glGetShaderPrecisionFormat https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt glGetShaderPrecisionFormat https://www.opengl.org/sdk/docs/man4/html/glGetShaderPrecisionFormat.xhtml glGetShaderSource https://www.opengl.org/sdk/docs/man/xhtml/glGetShaderSource.xml glGetShaderSource https://www.opengl.org/sdk/docs/man3/xhtml/glGetShaderSource.xml glGetShaderSource https://www.opengl.org/sdk/docs/man4/html/glGetShaderSource.xhtml glGetShaderSourceARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetShaderiv https://www.opengl.org/sdk/docs/man/xhtml/glGetShader.xml glGetShaderiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetShader.xml glGetShaderiv https://www.opengl.org/sdk/docs/man4/html/glGetShader.xhtml glGetSharpenTexFuncSGIS https://www.opengl.org/registry/specs/SGIS/sharpen_texture.txt glGetString https://www.opengl.org/sdk/docs/man/xhtml/glGetString.xml glGetString https://www.opengl.org/sdk/docs/man3/xhtml/glGetString.xml glGetString https://www.opengl.org/sdk/docs/man4/html/glGetString.xhtml glGetStringi https://www.opengl.org/sdk/docs/man3/xhtml/glGetString.xml glGetStringi https://www.opengl.org/sdk/docs/man4/html/glGetString.xhtml glGetSubroutineIndex https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetSubroutineIndex https://www.opengl.org/sdk/docs/man4/html/glGetSubroutineIndex.xhtml glGetSubroutineUniformLocation https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetSubroutineUniformLocation https://www.opengl.org/sdk/docs/man4/html/glGetSubroutineUniformLocation.xhtml glGetSynciv https://www.opengl.org/registry/specs/ARB/sync.txt glGetSynciv https://www.opengl.org/sdk/docs/man3/xhtml/glGetSync.xml glGetSynciv https://www.opengl.org/sdk/docs/man4/html/glGetSync.xhtml glGetTexEnvfv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexEnv.xml glGetTexEnviv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexEnv.xml glGetTexEnvxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetTexFilterFuncSGIS https://www.opengl.org/registry/specs/SGIS/texture_filter4.txt glGetTexGendv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexGen.xml glGetTexGenfv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexGen.xml glGetTexGeniv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexGen.xml glGetTexGenxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetTexImage https://www.opengl.org/sdk/docs/man/xhtml/glGetTexImage.xml glGetTexImage https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexImage.xml glGetTexImage https://www.opengl.org/sdk/docs/man4/html/glGetTexImage.xhtml glGetTexLevelParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexLevelParameter.xml glGetTexLevelParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameter.xml glGetTexLevelParameterfv https://www.opengl.org/sdk/docs/man4/html/glGetTexLevelParameter.xhtml glGetTexLevelParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexLevelParameter.xml glGetTexLevelParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexLevelParameter.xml glGetTexLevelParameteriv https://www.opengl.org/sdk/docs/man4/html/glGetTexLevelParameter.xhtml glGetTexLevelParameterxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetTexParameterPointervAPPLE https://www.opengl.org/registry/specs/APPLE/texture_range.txt glGetTexParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexParameter.xml glGetTexParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameter.xml glGetTexParameterfv https://www.opengl.org/sdk/docs/man4/html/glGetTexParameter.xhtml glGetTexParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glGetTexParameter.xml glGetTexParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glGetTexParameter.xml glGetTexParameteriv https://www.opengl.org/sdk/docs/man4/html/glGetTexParameter.xhtml glGetTexParameterxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glGetTextureImageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureLevelParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureLevelParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureParameterIivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureParameterIuivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTextureParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetTrackMatrixivNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetTransformFeedbackVarying https://www.opengl.org/sdk/docs/man3/xhtml/glGetTransformFeedbackVarying.xml glGetTransformFeedbackVarying https://www.opengl.org/sdk/docs/man4/html/glGetTransformFeedbackVarying.xhtml glGetTransformFeedbackVaryingEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glGetTransformFeedbackVaryingNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glGetUniformBlockIndex https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetUniformBlockIndex https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformBlockIndex.xml glGetUniformBlockIndex https://www.opengl.org/sdk/docs/man4/html/glGetUniformBlockIndex.xhtml glGetUniformBufferSizeEXT https://www.opengl.org/registry/specs/EXT/bindable_uniform.txt glGetUniformIndices https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glGetUniformIndices https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformIndices.xml glGetUniformIndices https://www.opengl.org/sdk/docs/man4/html/glGetUniformIndices.xhtml glGetUniformLocation https://www.opengl.org/sdk/docs/man/xhtml/glGetUniformLocation.xml glGetUniformLocation https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniformLocation.xml glGetUniformLocation https://www.opengl.org/sdk/docs/man4/html/glGetUniformLocation.xhtml glGetUniformLocationARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetUniformOffsetEXT https://www.opengl.org/registry/specs/EXT/bindable_uniform.txt glGetUniformSubroutineuiv https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glGetUniformSubroutineuiv https://www.opengl.org/sdk/docs/man4/html/glGetUniformSubroutine.xhtml glGetUniformdv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glGetUniformfv https://www.opengl.org/sdk/docs/man/xhtml/glGetUniform.xml glGetUniformfv https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniform.xml glGetUniformfv https://www.opengl.org/sdk/docs/man4/html/glGetUniform.xhtml glGetUniformfvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetUniformi64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glGetUniformiv https://www.opengl.org/sdk/docs/man/xhtml/glGetUniform.xml glGetUniformiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetUniform.xml glGetUniformiv https://www.opengl.org/sdk/docs/man4/html/glGetUniform.xhtml glGetUniformivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glGetUniformui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glGetUniformui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glGetUniformuivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glGetVariantArrayObjectfvATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetVariantArrayObjectivATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glGetVaryingLocationNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glGetVertexArrayIntegeri_vEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetVertexArrayIntegervEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetVertexArrayPointeri_vEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetVertexArrayPointervEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glGetVertexAttribArrayObjectfvATI https://www.opengl.org/registry/specs/ATI/vertex_attrib_array_object.txt glGetVertexAttribArrayObjectivATI https://www.opengl.org/registry/specs/ATI/vertex_attrib_array_object.txt glGetVertexAttribIiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttrib.xml glGetVertexAttribIiv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribIivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glGetVertexAttribIivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glGetVertexAttribIuiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttrib.xml glGetVertexAttribIuiv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribIuivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glGetVertexAttribIuivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glGetVertexAttribLdv https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glGetVertexAttribLdv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribLdvEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glGetVertexAttribLi64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glGetVertexAttribLui64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glGetVertexAttribPointerv https://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttribPointerv.xml glGetVertexAttribPointerv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttribPointerv.xml glGetVertexAttribPointerv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttribPointerv.xhtml glGetVertexAttribPointervARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetVertexAttribPointervARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetVertexAttribPointervNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetVertexAttribdv https://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttrib.xml glGetVertexAttribdv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttrib.xml glGetVertexAttribdv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribdvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetVertexAttribdvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetVertexAttribdvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetVertexAttribfv https://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttrib.xml glGetVertexAttribfv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttrib.xml glGetVertexAttribfv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribfvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetVertexAttribfvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetVertexAttribfvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetVertexAttribiv https://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttrib.xml glGetVertexAttribiv https://www.opengl.org/sdk/docs/man3/xhtml/glGetVertexAttrib.xml glGetVertexAttribiv https://www.opengl.org/sdk/docs/man4/html/glGetVertexAttrib.xhtml glGetVertexAttribivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glGetVertexAttribivARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glGetVertexAttribivNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glGetVideoCaptureivNV https://www.opengl.org/registry/specs/NV/video_capture.txt glGetVideoi64vNV https://www.opengl.org/registry/specs/NV/present_video.txt glGetVideoivNV https://www.opengl.org/registry/specs/NV/present_video.txt glGetVideoui64vNV https://www.opengl.org/registry/specs/NV/present_video.txt glGetVideouivNV https://www.opengl.org/registry/specs/NV/present_video.txt glGetnColorTableARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnCompressedTexImageARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnConvolutionFilterARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnHistogramARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnMapdvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnMapfvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnMapivARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnMinmaxARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnPixelMapfvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnPixelMapuivARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnPixelMapusvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnPolygonStippleARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnSeparableFilterARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnTexImageARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnUniformdvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnUniformfvARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnUniformivARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGetnUniformuivARB https://www.opengl.org/registry/specs/ARB/robustness.txt glGlobalAlphaFactorbSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactordSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactorfSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactoriSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactorsSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactorubSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactoruiSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glGlobalAlphaFactorusSUN https://www.opengl.org/registry/specs/SUN/global_alpha.txt glHint https://www.opengl.org/sdk/docs/man/xhtml/glHint.xml glHint https://www.opengl.org/sdk/docs/man3/xhtml/glHint.xml glHint https://www.opengl.org/sdk/docs/man4/html/glHint.xhtml glHistogram https://www.opengl.org/sdk/docs/man/xhtml/glHistogram.xml glHistogramEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glImageTransformParameterfHP https://www.opengl.org/registry/specs/HP/image_transform.txt glImageTransformParameterfvHP https://www.opengl.org/registry/specs/HP/image_transform.txt glImageTransformParameteriHP https://www.opengl.org/registry/specs/HP/image_transform.txt glImageTransformParameterivHP https://www.opengl.org/registry/specs/HP/image_transform.txt glImportSyncEXT https://www.opengl.org/registry/specs/EXT/x11_sync_object.txt glIndexFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glIndexMask https://www.opengl.org/sdk/docs/man/xhtml/glIndexMask.xml glIndexPointer https://www.opengl.org/sdk/docs/man/xhtml/glIndexPointer.xml glIndexPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glIndexd https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexdv https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexf https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexfv https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexi https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexiv https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexs https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexsv https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexub https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glIndexubv https://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml glInitNames https://www.opengl.org/sdk/docs/man/xhtml/glInitNames.xml glInstrumentsBufferSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glInterleavedArrays https://www.opengl.org/sdk/docs/man/xhtml/glInterleavedArrays.xml glInterpolatePathsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glIsArraySetEXT https://www.opengl.org/registry/specs/EXT/vertex_array_set.txt glIsAsyncMarkerSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glIsBuffer https://www.opengl.org/sdk/docs/man/xhtml/glIsBuffer.xml glIsBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glIsBuffer.xml glIsBuffer https://www.opengl.org/sdk/docs/man4/html/glIsBuffer.xhtml glIsBufferARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glIsBufferResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glIsEnabled https://www.opengl.org/sdk/docs/man/xhtml/glIsEnabled.xml glIsEnabled https://www.opengl.org/sdk/docs/man3/xhtml/glIsEnabled.xml glIsEnabled https://www.opengl.org/sdk/docs/man4/html/glIsEnabled.xhtml glIsEnabledIndexedEXT https://www.opengl.org/registry/specs/ARB/viewport_array.txt glIsEnabledIndexedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glIsEnabledIndexedEXT https://www.opengl.org/registry/specs/EXT/draw_buffers2.txt glIsFenceAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glIsFenceNV https://www.opengl.org/registry/specs/NV/fence.txt glIsFramebuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glIsFramebuffer https://www.opengl.org/sdk/docs/man3/xhtml/glIsFramebuffer.xml glIsFramebuffer https://www.opengl.org/sdk/docs/man4/html/glIsFramebuffer.xhtml glIsFramebufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glIsList https://www.opengl.org/sdk/docs/man/xhtml/glIsList.xml glIsNameAMD https://www.opengl.org/registry/specs/AMD/name_gen_delete.txt glIsNamedBufferResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glIsNamedStringARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glIsObjectBufferATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glIsOcclusionQueryNV https://www.opengl.org/registry/specs/NV/occlusion_query.txt glIsPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glIsPointInFillPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glIsPointInStrokePathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glIsProgram https://www.opengl.org/sdk/docs/man/xhtml/glIsProgram.xml glIsProgram https://www.opengl.org/sdk/docs/man3/xhtml/glIsProgram.xml glIsProgram https://www.opengl.org/sdk/docs/man4/html/glIsProgram.xhtml glIsProgramARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glIsProgramARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glIsProgramNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glIsProgramPipeline https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glIsProgramPipeline https://www.opengl.org/sdk/docs/man4/html/glIsProgramPipeline.xhtml glIsQuery https://www.opengl.org/sdk/docs/man/xhtml/glIsQuery.xml glIsQuery https://www.opengl.org/sdk/docs/man3/xhtml/glIsQuery.xml glIsQuery https://www.opengl.org/sdk/docs/man4/html/glIsQuery.xhtml glIsQueryARB https://www.opengl.org/registry/specs/ARB/occlusion_query.txt glIsRenderbuffer https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glIsRenderbuffer https://www.opengl.org/sdk/docs/man3/xhtml/glIsRenderbuffer.xml glIsRenderbuffer https://www.opengl.org/sdk/docs/man4/html/glIsRenderbuffer.xhtml glIsRenderbufferEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glIsSampler https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glIsSampler https://www.opengl.org/sdk/docs/man3/xhtml/glIsSampler.xml glIsSampler https://www.opengl.org/sdk/docs/man4/html/glIsSampler.xhtml glIsShader https://www.opengl.org/sdk/docs/man/xhtml/glIsShader.xml glIsShader https://www.opengl.org/sdk/docs/man3/xhtml/glIsShader.xml glIsShader https://www.opengl.org/sdk/docs/man4/html/glIsShader.xhtml glIsSync https://www.opengl.org/registry/specs/ARB/sync.txt glIsSync https://www.opengl.org/sdk/docs/man3/xhtml/glIsSync.xml glIsSync https://www.opengl.org/sdk/docs/man4/html/glIsSync.xhtml glIsTexture https://www.opengl.org/sdk/docs/man/xhtml/glIsTexture.xml glIsTexture https://www.opengl.org/sdk/docs/man3/xhtml/glIsTexture.xml glIsTexture https://www.opengl.org/sdk/docs/man4/html/glIsTexture.xhtml glIsTextureEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glIsTransformFeedback https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glIsTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glIsTransformFeedback.xhtml glIsTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glIsVertexArray https://www.opengl.org/registry/specs/ARB/vertex_array_object.txt glIsVertexArray https://www.opengl.org/sdk/docs/man3/xhtml/glIsVertexArray.xml glIsVertexArray https://www.opengl.org/sdk/docs/man4/html/glIsVertexArray.xhtml glIsVertexArrayAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_object.txt glIsVertexAttribEnabledAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glJoinSwapGroupSGIX https://www.opengl.org/registry/specs/SGIX/swap_group.txt glLightEnviEXT https://www.opengl.org/registry/specs/EXT/fragment_lighting.txt glLightModelf https://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml glLightModelfv https://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml glLightModeli https://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml glLightModeliv https://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml glLightf https://www.opengl.org/sdk/docs/man/xhtml/glLight.xml glLightfv https://www.opengl.org/sdk/docs/man/xhtml/glLight.xml glLighti https://www.opengl.org/sdk/docs/man/xhtml/glLight.xml glLightiv https://www.opengl.org/sdk/docs/man/xhtml/glLight.xml glLineStipple https://www.opengl.org/sdk/docs/man/xhtml/glLineStipple.xml glLineWidth https://www.opengl.org/sdk/docs/man/xhtml/glLineWidth.xml glLineWidth https://www.opengl.org/sdk/docs/man3/xhtml/glLineWidth.xml glLineWidth https://www.opengl.org/sdk/docs/man4/html/glLineWidth.xhtml glLineWidthxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glLinkProgram https://www.opengl.org/sdk/docs/man/xhtml/glLinkProgram.xml glLinkProgram https://www.opengl.org/sdk/docs/man3/xhtml/glLinkProgram.xml glLinkProgram https://www.opengl.org/sdk/docs/man4/html/glLinkProgram.xhtml glLinkProgramARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glListBase https://www.opengl.org/sdk/docs/man/xhtml/glListBase.xml glListParameterfSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glListParameterfvSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glListParameteriSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glListParameterivSGIX https://www.opengl.org/registry/specs/SGIX/list_priority.txt glLoadIdentity https://www.opengl.org/sdk/docs/man/xhtml/glLoadIdentity.xml glLoadMatrixd https://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml glLoadMatrixf https://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml glLoadMatrixxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glLoadName https://www.opengl.org/sdk/docs/man/xhtml/glLoadName.xml glLoadProgramNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glLoadTransposeMatrixd https://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrix.xml glLoadTransposeMatrixf https://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrix.xml glLoadTransposeMatrixxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glLogicOp https://www.opengl.org/sdk/docs/man/xhtml/glLogicOp.xml glLogicOp https://www.opengl.org/sdk/docs/man3/xhtml/glLogicOp.xml glLogicOp https://www.opengl.org/sdk/docs/man4/html/glLogicOp.xhtml glMakeBufferNonResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glMakeBufferResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glMakeNamedBufferNonResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glMakeNamedBufferResidentNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glMap1d https://www.opengl.org/sdk/docs/man/xhtml/glMap1.xml glMap1f https://www.opengl.org/sdk/docs/man/xhtml/glMap1.xml glMap1xOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMap2d https://www.opengl.org/sdk/docs/man/xhtml/glMap2.xml glMap2f https://www.opengl.org/sdk/docs/man/xhtml/glMap2.xml glMap2xOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMapBuffer https://www.opengl.org/sdk/docs/man/xhtml/glMapBuffer.xml glMapBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glMapBuffer.xml glMapBuffer https://www.opengl.org/sdk/docs/man4/html/glMapBuffer.xhtml glMapBufferRange https://www.opengl.org/sdk/docs/man3/xhtml/glMapBufferRange.xml glMapBufferRange https://www.opengl.org/sdk/docs/man4/html/glMapBufferRange.xhtml glMapControlPointsNV https://www.opengl.org/registry/specs/NV/evaluators.txt glMapGrid1d https://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml glMapGrid1f https://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml glMapGrid1xOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMapGrid2d https://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml glMapGrid2f https://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml glMapGrid2xOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMapNamedBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMapParameterfvNV https://www.opengl.org/registry/specs/NV/evaluators.txt glMapParameterivNV https://www.opengl.org/registry/specs/NV/evaluators.txt glMapVertexAttrib1dAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glMapVertexAttrib1fAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glMapVertexAttrib2dAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glMapVertexAttrib2fAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt glMaterialf https://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml glMaterialfv https://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml glMateriali https://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml glMaterialiv https://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml glMatrixFrustumEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixIndexPointerARB https://www.opengl.org/registry/specs/ARB/matrix_palette.txt glMatrixLoadIdentityEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixLoadTransposedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixLoadTransposefEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixLoaddEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixLoadfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixMode https://www.opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml glMatrixMultTransposedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixMultTransposefEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixMultdEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixMultfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixOrthoEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixPopEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixPushEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixRotatedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixRotatefEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixScaledEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixScalefEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixTranslatedEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMatrixTranslatefEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMemoryBarrier https://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt glMemoryBarrierEXT https://www.opengl.org/registry/specs/EXT/shader_image_load_store.txt glMinSampleShading https://www.opengl.org/sdk/docs/man4/html/glMinSampleShading.xhtml glMinSampleShadingARB https://www.opengl.org/registry/specs/ARB/sample_shading.txt glMinmax https://www.opengl.org/sdk/docs/man/xhtml/glMinmax.xml glMinmaxEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glMultMatrixd https://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml glMultMatrixf https://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml glMultMatrixxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMultTransposeMatrixd https://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml glMultTransposeMatrixf https://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml glMultTransposeMatrixxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glMultiDrawArrays https://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml glMultiDrawArrays https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawArrays.xml glMultiDrawArrays https://www.opengl.org/sdk/docs/man4/html/glMultiDrawArrays.xhtml glMultiDrawArraysEXT https://www.opengl.org/registry/specs/EXT/multi_draw_arrays.txt glMultiDrawArraysIndirectAMD https://www.opengl.org/registry/specs/AMD/multi_draw_indirect.txt glMultiDrawElementArrayAPPLE https://www.opengl.org/registry/specs/APPLE/element_array.txt glMultiDrawElements https://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawElements.xml glMultiDrawElements https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawElements.xml glMultiDrawElements https://www.opengl.org/sdk/docs/man4/html/glMultiDrawElements.xhtml glMultiDrawElementsBaseVertex https://www.opengl.org/registry/specs/ARB/draw_elements_base_vertex.txt glMultiDrawElementsBaseVertex https://www.opengl.org/sdk/docs/man3/xhtml/glMultiDrawElementsBaseVertex.xml glMultiDrawElementsBaseVertex https://www.opengl.org/sdk/docs/man4/html/glMultiDrawElementsBaseVertex.xhtml glMultiDrawElementsEXT https://www.opengl.org/registry/specs/EXT/multi_draw_arrays.txt glMultiDrawElementsIndirectAMD https://www.opengl.org/registry/specs/AMD/multi_draw_indirect.txt glMultiDrawRangeElementArrayAPPLE https://www.opengl.org/registry/specs/APPLE/element_array.txt glMultiModeDrawArraysIBM https://www.opengl.org/registry/specs/IBM/multimode_draw_arrays.txt glMultiModeDrawElementsIBM https://www.opengl.org/registry/specs/IBM/multimode_draw_arrays.txt glMultiTexBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexCoord1d https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1dv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1f https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1fv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1hNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord1hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord1i https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1iv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1s https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord1sv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2d https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2dv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2f https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2fv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2hNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord2hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord2i https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2iv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2s https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord2sv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3d https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3dv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3f https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3fv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord3i https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3iv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3s https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord3sv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4d https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4dv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4f https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4fv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4hNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glMultiTexCoord4i https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4iv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4s https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoord4sv https://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml glMultiTexCoordP1ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP1uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP2ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP2uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP4ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordP4uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glMultiTexCoordPointerEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexEnvfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexEnvfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexEnviEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexEnvivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGendEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGendvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGenfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGenfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGeniEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexGenivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameterIivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameterIuivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameterfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameteriEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexRenderbufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glMultiTexSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedBufferDataEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedBufferSubDataEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedCopyBufferSubDataEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferRenderbufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTexture1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTexture2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTexture3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTextureEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTextureFaceEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedFramebufferTextureLayerEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameter4dEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameter4dvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameter4fEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameter4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameterI4iEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameterI4ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameterI4uiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameterI4uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParameters4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParametersI4ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramLocalParametersI4uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedProgramStringEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedRenderbufferStorageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedRenderbufferStorageMultisampleCoverageEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedRenderbufferStorageMultisampleEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glNamedStringARB https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glNewList https://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml glNewObjectBufferATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glNormal3b https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3bv https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3d https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3dv https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3f https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3fVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glNormal3fVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glNormal3fv https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glNormal3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glNormal3i https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3iv https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3s https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormal3sv https://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml glNormalFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glNormalP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glNormalP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glNormalPointer https://www.opengl.org/sdk/docs/man/xhtml/glNormalPointer.xml glNormalPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glNormalPointervINTEL https://www.opengl.org/registry/specs/INTEL/parallel_arrays.txt glObjectPurgeableAPPLE https://www.opengl.org/registry/specs/APPLE/object_purgeable.txt glObjectUnpurgeableAPPLE https://www.opengl.org/registry/specs/APPLE/object_purgeable.txt glOrtho https://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml glOrthofOES https://www.opengl.org/registry/specs/OES/OES_single_precision.txt glOrthoxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPassThrough https://www.opengl.org/sdk/docs/man/xhtml/glPassThrough.xml glPassThroughxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPatchParameterfv https://www.opengl.org/registry/specs/ARB/tessellation_shader.txt glPatchParameterfv https://www.opengl.org/sdk/docs/man4/html/glPatchParameter.xhtml glPatchParameteri https://www.opengl.org/registry/specs/ARB/tessellation_shader.txt glPatchParameteri https://www.opengl.org/sdk/docs/man4/html/glPatchParameter.xhtml glPathColorGenNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathCommandsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathCoordsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathCoverDepthFuncNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathDashArrayNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathFogGenNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathGlyphRangeNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathGlyphsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathParameterfNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathParameterfvNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathParameteriNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathParameterivNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathStencilDepthOffsetNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathStencilFuncNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathStringNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathSubCommandsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathSubCoordsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPathTexGenNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPauseTransformFeedback https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glPauseTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glPauseTransformFeedback.xhtml glPauseTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glPixelDataRangeNV https://www.opengl.org/registry/specs/NV/pixel_data_range.txt glPixelMapfv https://www.opengl.org/sdk/docs/man/xhtml/glPixelMap.xml glPixelMapuiv https://www.opengl.org/sdk/docs/man/xhtml/glPixelMap.xml glPixelMapusv https://www.opengl.org/sdk/docs/man/xhtml/glPixelMap.xml glPixelStoref https://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml glPixelStoref https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStore.xml glPixelStoref https://www.opengl.org/sdk/docs/man4/html/glPixelStore.xhtml glPixelStorei https://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml glPixelStorei https://www.opengl.org/sdk/docs/man3/xhtml/glPixelStore.xml glPixelStorei https://www.opengl.org/sdk/docs/man4/html/glPixelStore.xhtml glPixelTexGenSGIX https://www.opengl.org/registry/specs/SGIX/sgix_pixel_texture.txt glPixelTransferf https://www.opengl.org/sdk/docs/man/xhtml/glPixelTransfer.xml glPixelTransferi https://www.opengl.org/sdk/docs/man/xhtml/glPixelTransfer.xml glPixelTransferxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPixelTransformParameterfEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glPixelTransformParameterfvEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glPixelTransformParameteriEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glPixelTransformParameterivEXT https://www.opengl.org/registry/specs/EXT/pixel_transform.txt glPixelZoom https://www.opengl.org/sdk/docs/man/xhtml/glPixelZoom.xml glPixelZoomxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPointAlongPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glPointParameterf https://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml glPointParameterf https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameter.xml glPointParameterf https://www.opengl.org/sdk/docs/man4/html/glPointParameter.xhtml glPointParameterfARB https://www.opengl.org/registry/specs/ARB/point_parameters.txt glPointParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml glPointParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameter.xml glPointParameterfv https://www.opengl.org/sdk/docs/man4/html/glPointParameter.xhtml glPointParameterfvARB https://www.opengl.org/registry/specs/ARB/point_parameters.txt glPointParameteri https://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml glPointParameteri https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameter.xml glPointParameteri https://www.opengl.org/sdk/docs/man4/html/glPointParameter.xhtml glPointParameteriNV https://www.opengl.org/registry/specs/NV/point_sprite.txt glPointParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml glPointParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glPointParameter.xml glPointParameteriv https://www.opengl.org/sdk/docs/man4/html/glPointParameter.xhtml glPointParameterivNV https://www.opengl.org/registry/specs/NV/point_sprite.txt glPointParameterxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPointSize https://www.opengl.org/sdk/docs/man/xhtml/glPointSize.xml glPointSize https://www.opengl.org/sdk/docs/man3/xhtml/glPointSize.xml glPointSize https://www.opengl.org/sdk/docs/man4/html/glPointSize.xhtml glPointSizexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPollAsyncSGIX https://www.opengl.org/registry/specs/SGIX/async.txt glPollInstrumentsSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glPolygonMode https://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml glPolygonMode https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonMode.xml glPolygonMode https://www.opengl.org/sdk/docs/man4/html/glPolygonMode.xhtml glPolygonOffset https://www.opengl.org/sdk/docs/man/xhtml/glPolygonOffset.xml glPolygonOffset https://www.opengl.org/sdk/docs/man3/xhtml/glPolygonOffset.xml glPolygonOffset https://www.opengl.org/sdk/docs/man4/html/glPolygonOffset.xhtml glPolygonOffsetEXT https://www.opengl.org/registry/specs/EXT/polygon_offset.txt glPolygonOffsetxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glPolygonStipple https://www.opengl.org/sdk/docs/man/xhtml/glPolygonStipple.xml glPopAttrib https://www.opengl.org/sdk/docs/man/xhtml/glPushAttrib.xml glPopClientAttrib https://www.opengl.org/sdk/docs/man/xhtml/glPushClientAttrib.xml glPopMatrix https://www.opengl.org/sdk/docs/man/xhtml/glPushMatrix.xml glPopName https://www.opengl.org/sdk/docs/man/xhtml/glPushName.xml glPresentFrameDualFillNV https://www.opengl.org/registry/specs/NV/present_video.txt glPresentFrameKeyedNV https://www.opengl.org/registry/specs/NV/present_video.txt glPrimitiveRestartIndex https://www.opengl.org/sdk/docs/man3/xhtml/glPrimitiveRestartIndex.xml glPrimitiveRestartIndex https://www.opengl.org/sdk/docs/man4/html/glPrimitiveRestartIndex.xhtml glPrimitiveRestartIndexNV https://www.opengl.org/registry/specs/NV/primitive_restart.txt glPrimitiveRestartNV https://www.opengl.org/registry/specs/NV/primitive_restart.txt glPrioritizeTextures https://www.opengl.org/sdk/docs/man/xhtml/glPrioritizeTextures.xml glPrioritizeTexturesEXT https://www.opengl.org/registry/specs/EXT/texture_object.txt glPrioritizeTexturesxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glProgramBinary https://www.opengl.org/registry/specs/ARB/get_program_binary.txt glProgramBinary https://www.opengl.org/sdk/docs/man4/html/glProgramBinary.xhtml glProgramBufferParametersIivNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glProgramBufferParametersIuivNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glProgramBufferParametersfvNV https://www.opengl.org/registry/specs/NV/parameter_buffer_object.txt glProgramEnvParameter4dARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramEnvParameter4dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramEnvParameter4dvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramEnvParameter4dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramEnvParameter4fARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramEnvParameter4fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramEnvParameter4fvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramEnvParameter4fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramEnvParameterI4iNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramEnvParameterI4ivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramEnvParameterI4uiNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramEnvParameterI4uivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramEnvParametersI4ivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramEnvParametersI4uivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParameter4dARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramLocalParameter4dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramLocalParameter4dARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramLocalParameter4dvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramLocalParameter4dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramLocalParameter4dvARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramLocalParameter4fARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramLocalParameter4fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramLocalParameter4fARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramLocalParameter4fvARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramLocalParameter4fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramLocalParameter4fvARB https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramLocalParameterI4iNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParameterI4ivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParameterI4uiNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParameterI4uivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParametersI4ivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramLocalParametersI4uivNV https://www.opengl.org/registry/specs/NV/gpu_program4.txt glProgramNamedParameter4dNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramNamedParameter4dvNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramNamedParameter4fNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramNamedParameter4fvNV https://www.opengl.org/registry/specs/NV/fragment_program.txt glProgramParameter4dNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramParameter4dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramParameter4fNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramParameter4fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramParameteri https://www.opengl.org/registry/specs/ARB/get_program_binary.txt glProgramParameteri https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramParameteri https://www.opengl.org/sdk/docs/man4/html/glProgramParameter.xhtml glProgramParameteriARB https://www.opengl.org/registry/specs/ARB/geometry_shader4.txt glProgramParameteriEXT https://www.opengl.org/registry/specs/EXT/geometry_shader4.txt glProgramParameters4dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramParameters4fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glProgramStringARB https://www.opengl.org/registry/specs/ARB/fragment_program.txt glProgramStringARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glProgramUniform1d https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1dEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform1dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform1f https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1f https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1fEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform1fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform1i https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1i https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform1i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform1iEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform1iv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1iv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform1ui https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1ui https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform1ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform1uiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform1uiv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform1uiv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform1uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2d https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2dEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform2dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform2f https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2f https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2fEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2i https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2i https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform2i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform2iEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2iv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2iv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2ui https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2ui https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform2ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform2uiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform2uiv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform2uiv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform2uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3d https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3dEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform3dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform3f https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3f https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3fEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3i https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3i https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform3i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform3iEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3iv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3iv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3ui https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3ui https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform3ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform3uiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform3uiv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform3uiv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform3uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4d https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4dEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform4dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniform4f https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4f https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4fEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4i https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4i https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform4i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform4iEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4iv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4iv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4ivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4ui https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4ui https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform4ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glProgramUniform4uiEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniform4uiv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniform4uiv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniform4uivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix2dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix2fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix2fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix2x3dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2x3dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix2x3fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2x3fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix2x3fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix2x4dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2x4dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix2x4fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix2x4fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix2x4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix3dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix3fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix3fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix3x2dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3x2dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix3x2fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3x2fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix3x2fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix3x4dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3x4dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix3x4fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix3x4fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix3x4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix4dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix4fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix4fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix4x2dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4x2dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix4x2fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4x2fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix4x2fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformMatrix4x3dv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4x3dvEXT https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glProgramUniformMatrix4x3fv https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glProgramUniformMatrix4x3fv https://www.opengl.org/sdk/docs/man4/html/glProgramUniform.xhtml glProgramUniformMatrix4x3fvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glProgramUniformui64NV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glProgramUniformui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glProgramVertexLimitNV https://www.opengl.org/registry/specs/NV/geometry_program4.txt glProvokingVertex https://www.opengl.org/registry/specs/ARB/provoking_vertex.txt glProvokingVertex https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml glProvokingVertex https://www.opengl.org/sdk/docs/man4/html/glProvokingVertex.xhtml glProvokingVertexEXT https://www.opengl.org/registry/specs/EXT/provoking_vertex.txt glPushAttrib https://www.opengl.org/sdk/docs/man/xhtml/glPushAttrib.xml glPushClientAttrib https://www.opengl.org/sdk/docs/man/xhtml/glPushClientAttrib.xml glPushClientAttribDefaultEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glPushMatrix https://www.opengl.org/sdk/docs/man/xhtml/glPushMatrix.xml glPushName https://www.opengl.org/sdk/docs/man/xhtml/glPushName.xml glQueryCounter https://www.opengl.org/registry/specs/ARB/timer_query.txt glQueryCounter https://www.opengl.org/sdk/docs/man3/xhtml/glQueryCounter.xml glQueryCounter https://www.opengl.org/sdk/docs/man4/html/glQueryCounter.xhtml glQueryMatrixxOES https://www.opengl.org/registry/specs/OES/OES_query_matrix.txt glQueryMaxSwapBarriersSGIX https://www.opengl.org/registry/specs/SGIX/swap_barrier.txt glRasterPos2d https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2dv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2f https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2fv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2i https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2iv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2s https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos2sv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3d https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3dv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3f https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3fv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3i https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3iv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3s https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos3sv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4d https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4dv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4f https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4fv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4i https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4iv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4s https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glRasterPos4sv https://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml glReadBuffer https://www.opengl.org/sdk/docs/man/xhtml/glReadBuffer.xml glReadBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glReadBuffer.xml glReadBuffer https://www.opengl.org/sdk/docs/man4/html/glReadBuffer.xhtml glReadInstrumentsSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glReadPixels https://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml glReadPixels https://www.opengl.org/sdk/docs/man3/xhtml/glReadPixels.xml glReadPixels https://www.opengl.org/sdk/docs/man4/html/glReadPixels.xhtml glReadnPixelsARB https://www.opengl.org/registry/specs/ARB/robustness.txt glRectd https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectdv https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectf https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectfv https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRecti https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectiv https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRects https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectsv https://www.opengl.org/sdk/docs/man/xhtml/glRect.xml glRectxOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glRectxvOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glReferencePlaneSGIX https://www.opengl.org/registry/specs/SGIX/reference_plane.txt glReleaseShaderCompiler https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt glReleaseShaderCompiler https://www.opengl.org/sdk/docs/man4/html/glReleaseShaderCompiler.xhtml glRenderMode https://www.opengl.org/sdk/docs/man/xhtml/glRenderMode.xml glRenderbufferStorage https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glRenderbufferStorage https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorage.xml glRenderbufferStorage https://www.opengl.org/sdk/docs/man4/html/glRenderbufferStorage.xhtml glRenderbufferStorageEXT https://www.opengl.org/registry/specs/EXT/framebuffer_object.txt glRenderbufferStorageMultisample https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt glRenderbufferStorageMultisample https://www.opengl.org/sdk/docs/man3/xhtml/glRenderbufferStorageMultisample.xml glRenderbufferStorageMultisample https://www.opengl.org/sdk/docs/man4/html/glRenderbufferStorageMultisample.xhtml glRenderbufferStorageMultisampleCoverageNV https://www.opengl.org/registry/specs/NV/framebuffer_multisample_coverage.txt glRenderbufferStorageMultisampleEXT https://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt glReplacementCodePointerSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeubSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeubvSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeuiSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeuivSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeusSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glReplacementCodeusvSUN https://www.opengl.org/registry/specs/SUN/triangle_list.txt glRequestResidentProgramsNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glResetHistogram https://www.opengl.org/sdk/docs/man/xhtml/glResetHistogram.xml glResetHistogramEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glResetMinmax https://www.opengl.org/sdk/docs/man/xhtml/glResetMinmax.xml glResetMinmaxEXT https://www.opengl.org/registry/specs/EXT/histogram.txt glResizeBuffersMESA https://www.opengl.org/registry/specs/MESA/resize_buffers.txt glResumeTransformFeedback https://www.opengl.org/registry/specs/ARB/transform_feedback2.txt glResumeTransformFeedback https://www.opengl.org/sdk/docs/man4/html/glResumeTransformFeedback.xhtml glResumeTransformFeedbackNV https://www.opengl.org/registry/specs/NV/transform_feedback2.txt glRotated https://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml glRotatef https://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml glRotatexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glSampleCoverage https://www.opengl.org/sdk/docs/man/xhtml/glSampleCoverage.xml glSampleCoverage https://www.opengl.org/sdk/docs/man3/xhtml/glSampleCoverage.xml glSampleCoverage https://www.opengl.org/sdk/docs/man4/html/glSampleCoverage.xhtml glSampleCoverageARB https://www.opengl.org/registry/specs/ARB/multisample.txt glSampleCoverageOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glSampleMaskEXT https://www.opengl.org/registry/specs/EXT/wgl_multisample.txt glSampleMaskIndexedNV https://www.opengl.org/registry/specs/NV/explicit_multisample.txt glSampleMaskSGIS https://www.opengl.org/registry/specs/SGIS/multisample.txt glSampleMaski https://www.opengl.org/registry/specs/ARB/texture_multisample.txt glSampleMaski https://www.opengl.org/sdk/docs/man3/xhtml/glSampleMaski.xml glSampleMaski https://www.opengl.org/sdk/docs/man4/html/glSampleMaski.xhtml glSamplePatternEXT https://www.opengl.org/registry/specs/EXT/wgl_multisample.txt glSamplePatternSGIS https://www.opengl.org/registry/specs/SGIS/multisample.txt glSamplerParameterIiv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameterIuiv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameterf https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameterf https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameter.xml glSamplerParameterf https://www.opengl.org/sdk/docs/man4/html/glSamplerParameter.xhtml glSamplerParameterfv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameter.xml glSamplerParameterfv https://www.opengl.org/sdk/docs/man4/html/glSamplerParameter.xhtml glSamplerParameteri https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameteri https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameter.xml glSamplerParameteri https://www.opengl.org/sdk/docs/man4/html/glSamplerParameter.xhtml glSamplerParameteriv https://www.opengl.org/registry/specs/ARB/sampler_objects.txt glSamplerParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glSamplerParameter.xml glSamplerParameteriv https://www.opengl.org/sdk/docs/man4/html/glSamplerParameter.xhtml glScaled https://www.opengl.org/sdk/docs/man/xhtml/glScale.xml glScalef https://www.opengl.org/sdk/docs/man/xhtml/glScale.xml glScalexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glScissor https://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml glScissor https://www.opengl.org/sdk/docs/man3/xhtml/glScissor.xml glScissor https://www.opengl.org/sdk/docs/man4/html/glScissor.xhtml glScissorArrayv https://www.opengl.org/registry/specs/ARB/viewport_array.txt glScissorArrayv https://www.opengl.org/sdk/docs/man4/html/glScissorArray.xhtml glScissorIndexed https://www.opengl.org/registry/specs/ARB/viewport_array.txt glScissorIndexed https://www.opengl.org/sdk/docs/man4/html/glScissorIndexed.xhtml glScissorIndexedv https://www.opengl.org/registry/specs/ARB/viewport_array.txt glScissorIndexedv https://www.opengl.org/sdk/docs/man4/html/glScissorIndexed.xhtml glSecondaryColor3b https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3bv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3d https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3dv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3f https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3fv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glSecondaryColor3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glSecondaryColor3i https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3iv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3s https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3sv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3ub https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3ubv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3ui https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3uiv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3us https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColor3usv https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml glSecondaryColorFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glSecondaryColorP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glSecondaryColorP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glSecondaryColorPointer https://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColorPointer.xml glSecondaryColorPointerEXT https://www.opengl.org/registry/specs/EXT/secondary_color.txt glSelectBuffer https://www.opengl.org/sdk/docs/man/xhtml/glSelectBuffer.xml glSelectPerfMonitorCountersAMD https://www.opengl.org/registry/specs/AMD/performance_monitor.txt glSeparableFilter2D https://www.opengl.org/sdk/docs/man/xhtml/glSeparableFilter2D.xml glSeparableFilter2DEXT https://www.opengl.org/registry/specs/EXT/convolution.txt glSetFenceAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glSetFenceNV https://www.opengl.org/registry/specs/NV/fence.txt glSetMultisamplefvAMD https://www.opengl.org/registry/specs/AMD/sample_positions.txt glShadeModel https://www.opengl.org/sdk/docs/man/xhtml/glShadeModel.xml glShaderBinary https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt glShaderBinary https://www.opengl.org/sdk/docs/man4/html/glShaderBinary.xhtml glShaderSource https://www.opengl.org/sdk/docs/man/xhtml/glShaderSource.xml glShaderSource https://www.opengl.org/sdk/docs/man3/xhtml/glShaderSource.xml glShaderSource https://www.opengl.org/sdk/docs/man4/html/glShaderSource.xhtml glShaderSourceARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glSharpenTexFuncSGIS https://www.opengl.org/registry/specs/SGIS/sharpen_texture.txt glSpriteParameterfSGIX https://www.opengl.org/registry/specs/SGIX/sprite.txt glSpriteParameterfvSGIX https://www.opengl.org/registry/specs/SGIX/sprite.txt glSpriteParameteriSGIX https://www.opengl.org/registry/specs/SGIX/sprite.txt glSpriteParameterivSGIX https://www.opengl.org/registry/specs/SGIX/sprite.txt glStartInstrumentsSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glStencilClearTagEXT https://www.opengl.org/registry/specs/EXT/stencil_clear_tag.txt glStencilFillPathInstancedNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glStencilFillPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glStencilFunc https://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml glStencilFunc https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFunc.xml glStencilFunc https://www.opengl.org/sdk/docs/man4/html/glStencilFunc.xhtml glStencilFuncSeparate https://www.opengl.org/sdk/docs/man/xhtml/glStencilFuncSeparate.xml glStencilFuncSeparate https://www.opengl.org/sdk/docs/man3/xhtml/glStencilFuncSeparate.xml glStencilFuncSeparate https://www.opengl.org/sdk/docs/man4/html/glStencilFuncSeparate.xhtml glStencilMask https://www.opengl.org/sdk/docs/man/xhtml/glStencilMask.xml glStencilMask https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMask.xml glStencilMask https://www.opengl.org/sdk/docs/man4/html/glStencilMask.xhtml glStencilMaskSeparate https://www.opengl.org/sdk/docs/man/xhtml/glStencilMaskSeparate.xml glStencilMaskSeparate https://www.opengl.org/sdk/docs/man3/xhtml/glStencilMaskSeparate.xml glStencilMaskSeparate https://www.opengl.org/sdk/docs/man4/html/glStencilMaskSeparate.xhtml glStencilOp https://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml glStencilOp https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOp.xml glStencilOp https://www.opengl.org/sdk/docs/man4/html/glStencilOp.xhtml glStencilOpSeparate https://www.opengl.org/sdk/docs/man/xhtml/glStencilOpSeparate.xml glStencilOpSeparate https://www.opengl.org/sdk/docs/man3/xhtml/glStencilOpSeparate.xml glStencilOpSeparate https://www.opengl.org/sdk/docs/man4/html/glStencilOpSeparate.xhtml glStencilStrokePathInstancedNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glStencilStrokePathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glStopInstrumentsSGIX https://www.opengl.org/registry/specs/SGIX/instruments.txt glStringMarkerGREMEDY https://www.opengl.org/registry/specs/GREMEDY/string_marker.txt glTagSampleBufferSGIX https://www.opengl.org/registry/specs/SGIX/tag_sample_buffer.txt glTangentPointerEXT https://www.opengl.org/registry/specs/EXT/coordinate_frame.txt glTbufferMask3DFX https://www.opengl.org/registry/specs/3DFX/tbuffer.txt glTessellationFactorAMD https://www.opengl.org/registry/specs/AMD/vertex_shader_tessellator.txt glTessellationModeAMD https://www.opengl.org/registry/specs/AMD/vertex_shader_tessellator.txt glTestFenceAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glTestFenceNV https://www.opengl.org/registry/specs/NV/fence.txt glTestObjectAPPLE https://www.opengl.org/registry/specs/APPLE/fence.txt glTexBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml glTexBuffer https://www.opengl.org/sdk/docs/man4/html/glTexBuffer.xhtml glTexBufferARB https://www.opengl.org/registry/specs/ARB/texture_buffer_object.txt glTexBufferEXT https://www.opengl.org/registry/specs/EXT/texture_buffer_object.txt glTexCoord1d https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1dv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1f https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1fv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1hNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord1hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord1i https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1iv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1s https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord1sv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2d https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2dv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2f https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2fColor4ubVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord2fColor4ubVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord2fVertex3fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord2fVertex3fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord2fv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2hNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord2hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord2i https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2iv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2s https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord2sv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3d https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3dv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3f https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3fv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord3i https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3iv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3s https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord3sv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4d https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4dv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4f https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4fVertex4fSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord4fVertex4fvSUN https://www.opengl.org/registry/specs/SUN/vertex.txt glTexCoord4fv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4hNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glTexCoord4i https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4iv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4s https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoord4sv https://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml glTexCoordFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glTexCoordP1ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP1uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP2ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP2uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP4ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordP4uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glTexCoordPointer https://www.opengl.org/sdk/docs/man/xhtml/glTexCoordPointer.xml glTexCoordPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glTexCoordPointervINTEL https://www.opengl.org/registry/specs/INTEL/parallel_arrays.txt glTexEnvf https://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml glTexEnvfv https://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml glTexEnvi https://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml glTexEnviv https://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml glTexFilterFuncSGIS https://www.opengl.org/registry/specs/SGIS/texture_filter4.txt glTexGend https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexGendv https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexGenf https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexGenfv https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexGeni https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexGeniv https://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml glTexImage1D https://www.opengl.org/sdk/docs/man/xhtml/glTexImage1D.xml glTexImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage1D.xml glTexImage1D https://www.opengl.org/sdk/docs/man4/html/glTexImage1D.xhtml glTexImage2D https://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml glTexImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2D.xml glTexImage2D https://www.opengl.org/sdk/docs/man4/html/glTexImage2D.xhtml glTexImage2DMultisample https://www.opengl.org/registry/specs/ARB/texture_multisample.txt glTexImage2DMultisample https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage2DMultisample.xml glTexImage2DMultisample https://www.opengl.org/sdk/docs/man4/html/glTexImage2DMultisample.xhtml glTexImage2DMultisampleCoverageNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTexImage3D https://www.opengl.org/sdk/docs/man/xhtml/glTexImage3D.xml glTexImage3D https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3D.xml glTexImage3D https://www.opengl.org/sdk/docs/man4/html/glTexImage3D.xhtml glTexImage3DEXT https://www.opengl.org/registry/specs/EXT/texture3D.txt glTexImage3DMultisample https://www.opengl.org/registry/specs/ARB/texture_multisample.txt glTexImage3DMultisample https://www.opengl.org/sdk/docs/man3/xhtml/glTexImage3DMultisample.xml glTexImage3DMultisample https://www.opengl.org/sdk/docs/man4/html/glTexImage3DMultisample.xhtml glTexImage3DMultisampleCoverageNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTexImage4DSGIS https://www.opengl.org/registry/specs/SGIS/texture4D.txt glTexParameterIiv https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameterIiv https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexParameterIivEXT https://www.opengl.org/registry/specs/EXT/texture_integer.txt glTexParameterIuiv https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameterIuiv https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexParameterIuivEXT https://www.opengl.org/registry/specs/EXT/texture_integer.txt glTexParameterf https://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml glTexParameterf https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameterf https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexParameterfv https://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml glTexParameterfv https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameterfv https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexParameteri https://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml glTexParameteri https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameteri https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexParameteriv https://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml glTexParameteriv https://www.opengl.org/sdk/docs/man3/xhtml/glTexParameter.xml glTexParameteriv https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml glTexRenderbufferNV https://www.opengl.org/registry/specs/NV/explicit_multisample.txt glTexStorage1D https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTexStorage2D https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTexStorage3D https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTexSubImage1D https://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage1D.xml glTexSubImage1D https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage1D.xml glTexSubImage1D https://www.opengl.org/sdk/docs/man4/html/glTexSubImage1D.xhtml glTexSubImage1DEXT https://www.opengl.org/registry/specs/EXT/subtexture.txt glTexSubImage2D https://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage2D.xml glTexSubImage2D https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage2D.xml glTexSubImage2D https://www.opengl.org/sdk/docs/man4/html/glTexSubImage2D.xhtml glTexSubImage2DEXT https://www.opengl.org/registry/specs/EXT/subtexture.txt glTexSubImage3D https://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage3D.xml glTexSubImage3D https://www.opengl.org/sdk/docs/man3/xhtml/glTexSubImage3D.xml glTexSubImage3D https://www.opengl.org/sdk/docs/man4/html/glTexSubImage3D.xhtml glTexSubImage3DEXT https://www.opengl.org/registry/specs/EXT/subtexture.txt glTexSubImage4DSGIS https://www.opengl.org/registry/specs/SGIS/texture4D.txt glTextureBarrierNV https://www.opengl.org/registry/specs/NV/texture_barrier.txt glTextureBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureColorMaskSGIS https://www.opengl.org/registry/specs/SGIS/texture_color_mask.txt glTextureFogSGIX https://www.opengl.org/registry/specs/SGIX/fog_texture.txt glTextureImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureImage2DMultisampleCoverageNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTextureImage2DMultisampleNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTextureImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureImage3DMultisampleCoverageNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTextureImage3DMultisampleNV https://www.opengl.org/registry/specs/NV/texture_multisample.txt glTextureLightEXT https://www.opengl.org/registry/specs/EXT/light_texture.txt glTextureMaterialEXT https://www.opengl.org/registry/specs/EXT/light_texture.txt glTextureNormalEXT https://www.opengl.org/registry/specs/EXT/texture_perturb_normal.txt glTextureParameterIivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureParameterIuivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureParameterfEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureParameterfvEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureParameteriEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureParameterivEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureRangeAPPLE https://www.opengl.org/registry/specs/APPLE/texture_range.txt glTextureRenderbufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureStorage1DEXT https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTextureStorage2DEXT https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTextureStorage3DEXT https://www.opengl.org/registry/specs/ARB/texture_storage.txt glTextureSubImage1DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureSubImage2DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTextureSubImage3DEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glTrackMatrixNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glTransformFeedbackAttribsNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glTransformFeedbackVaryings https://www.opengl.org/sdk/docs/man3/xhtml/glTransformFeedbackVaryings.xml glTransformFeedbackVaryings https://www.opengl.org/sdk/docs/man4/html/glTransformFeedbackVaryings.xhtml glTransformFeedbackVaryingsEXT https://www.opengl.org/registry/specs/EXT/transform_feedback.txt glTransformFeedbackVaryingsNV https://www.opengl.org/registry/specs/NV/transform_feedback.txt glTransformPathNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glTranslated https://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml glTranslatef https://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml glTranslatexOES https://www.opengl.org/registry/specs/OES/OES_fixed_point.txt glUniform1d https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform1dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform1f https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform1f https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1f https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1fARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform1fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform1fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform1i https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform1i https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1i https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform1i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform1iARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform1iv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform1iv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1iv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1ivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform1ui https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1ui https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform1ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform1uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform1uiv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform1uiv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform1uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform2d https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform2dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform2f https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform2f https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2f https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2fARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform2fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform2fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform2i https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform2i https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2i https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform2i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform2iARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform2iv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform2iv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2iv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2ivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform2ui https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2ui https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform2ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform2uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform2uiv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform2uiv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform2uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform3d https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform3dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform3f https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform3f https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3f https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3fARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform3fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform3fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform3i https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform3i https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3i https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform3i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform3iARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform3iv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform3iv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3iv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3ivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform3ui https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3ui https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform3ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform3uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform3uiv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform3uiv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform3uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform4d https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform4dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniform4f https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform4f https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4f https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4fARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform4fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform4fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform4i https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform4i https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4i https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4i64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform4i64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform4iARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform4iv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniform4iv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4iv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4ivARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniform4ui https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4ui https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4ui64NV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform4ui64vNV https://www.opengl.org/registry/specs/NV/gpu_shader5.txt glUniform4uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniform4uiv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniform4uiv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniform4uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glUniformBlockBinding https://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt glUniformBlockBinding https://www.opengl.org/sdk/docs/man3/xhtml/glUniformBlockBinding.xml glUniformBlockBinding https://www.opengl.org/sdk/docs/man4/html/glUniformBlockBinding.xhtml glUniformBufferEXT https://www.opengl.org/registry/specs/EXT/bindable_uniform.txt glUniformMatrix2dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix2fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix2fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix2fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix2fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniformMatrix2x3dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix2x3fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix2x3fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix2x3fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix2x4dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix2x4fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix2x4fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix2x4fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix3dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix3fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix3fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix3fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix3fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniformMatrix3x2dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix3x2fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix3x2fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix3x2fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix3x4dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix3x4fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix3x4fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix3x4fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix4dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix4fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix4fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix4fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix4fvARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUniformMatrix4x2dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix4x2fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix4x2fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix4x2fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformMatrix4x3dv https://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt glUniformMatrix4x3fv https://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml glUniformMatrix4x3fv https://www.opengl.org/sdk/docs/man3/xhtml/glUniform.xml glUniformMatrix4x3fv https://www.opengl.org/sdk/docs/man4/html/glUniform.xhtml glUniformSubroutinesuiv https://www.opengl.org/registry/specs/ARB/shader_subroutine.txt glUniformSubroutinesuiv https://www.opengl.org/sdk/docs/man4/html/glUniformSubroutines.xhtml glUniformui64NV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glUniformui64vNV https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt glUnmapBuffer https://www.opengl.org/sdk/docs/man/xhtml/glMapBuffer.xml glUnmapBuffer https://www.opengl.org/sdk/docs/man3/xhtml/glMapBuffer.xml glUnmapBuffer https://www.opengl.org/sdk/docs/man4/html/glMapBuffer.xhtml glUnmapBufferARB https://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt glUnmapNamedBufferEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glUnmapObjectBufferATI https://www.opengl.org/registry/specs/ATI/map_object_buffer.txt glUpdateObjectBufferATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glUseProgram https://www.opengl.org/sdk/docs/man/xhtml/glUseProgram.xml glUseProgram https://www.opengl.org/sdk/docs/man3/xhtml/glUseProgram.xml glUseProgram https://www.opengl.org/sdk/docs/man4/html/glUseProgram.xhtml glUseProgramObjectARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glUseProgramStages https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glUseProgramStages https://www.opengl.org/sdk/docs/man4/html/glUseProgramStages.xhtml glUseShaderProgramEXT https://www.opengl.org/registry/specs/EXT/separate_shader_objects.txt glValidateProgram https://www.opengl.org/sdk/docs/man/xhtml/glValidateProgram.xml glValidateProgram https://www.opengl.org/sdk/docs/man3/xhtml/glValidateProgram.xml glValidateProgram https://www.opengl.org/sdk/docs/man4/html/glValidateProgram.xhtml glValidateProgramARB https://www.opengl.org/registry/specs/ARB/shader_objects.txt glValidateProgramPipeline https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt glValidateProgramPipeline https://www.opengl.org/sdk/docs/man4/html/glValidateProgramPipeline.xhtml glVariantArrayObjectATI https://www.opengl.org/registry/specs/ATI/vertex_array_object.txt glVertex2d https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2dv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2f https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2fv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex2hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex2i https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2iv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2s https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex2sv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3d https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3dv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3f https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3fv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex3i https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3iv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3s https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex3sv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4d https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4dv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4f https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4fv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertex4i https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4iv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4s https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertex4sv https://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml glVertexArrayColorOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayEdgeFlagOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayFogCoordOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayIndexOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayMultiTexCoordOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayNormalOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayParameteriAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_range.txt glVertexArrayRangeAPPLE https://www.opengl.org/registry/specs/APPLE/vertex_array_range.txt glVertexArrayRangeNV https://www.opengl.org/registry/specs/NV/vertex_array_range.txt glVertexArraySecondaryColorOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayTexCoordOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayVertexAttribIOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayVertexAttribLOffsetEXT https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexArrayVertexAttribLOffsetEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexArrayVertexAttribOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexArrayVertexOffsetEXT https://www.opengl.org/registry/specs/EXT/direct_state_access.txt glVertexAttrib1d https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1d https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1dARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1dNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib1dv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1dv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1dvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib1f https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1f https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1f https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1fARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1fNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib1fv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1fv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1fv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1fvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib1hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib1hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib1s https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1s https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1s https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1sARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1sARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1sNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib1sv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib1sv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib1sv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib1svARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib1svARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib1svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2d https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2d https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2dARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2dNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2dv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2dv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2dvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2f https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2f https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2f https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2fARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2fNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2fv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2fv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2fv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2fvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib2hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib2s https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2s https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2s https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2sARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2sARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2sNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib2sv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib2sv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib2sv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib2svARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib2svARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib2svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3d https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3d https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3dARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3dNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3dv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3dv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3dvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3f https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3f https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3f https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3fARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3fNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3fv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3fv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3fv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3fvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib3s https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3s https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3s https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3sARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3sARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3sNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib3sv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib3sv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib3sv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib3svARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib3svARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib3svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4Nbv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nbv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nbv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NbvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NbvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Niv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Niv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Niv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NivARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Nsv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nsv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nsv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NsvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NsvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Nub https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nub https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nub https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NubARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NubARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Nubv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nubv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nubv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NubvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NubvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Nuiv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nuiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nuiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NuivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NuivARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4Nusv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4Nusv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4Nusv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4NusvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4NusvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4bv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4bv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4bv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4bvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4bvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4d https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4d https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4dARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4dARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4dNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4dv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4dv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4dvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4dvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4f https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4f https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4f https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4fARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4fARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4fNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4fv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4fv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4fv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4fvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4fvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4hNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttrib4iv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4iv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4iv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4ivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4ivARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4s https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4s https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4s https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4sARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4sARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4sNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4sv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4sv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4sv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4svARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4svARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4ubNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4ubv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4ubv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4ubv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4ubvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4ubvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4ubvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttrib4uiv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4uiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4uiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4uivARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4uivARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttrib4usv https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml glVertexAttrib4usv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttrib4usv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttrib4usvARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttrib4usvARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttribArrayObjectATI https://www.opengl.org/registry/specs/ATI/vertex_attrib_array_object.txt glVertexAttribDivisor https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribDivisor.xml glVertexAttribDivisor https://www.opengl.org/sdk/docs/man4/html/glVertexAttribDivisor.xhtml glVertexAttribDivisorARB https://www.opengl.org/registry/specs/ARB/instanced_arrays.txt glVertexAttribFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glVertexAttribI1i https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI1i https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI1iEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI1iEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI1iv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI1iv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI1ivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI1ivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI1ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI1ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI1uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI1uiEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI1uiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI1uiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI1uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI1uivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI2i https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI2i https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI2iEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI2iEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI2iv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI2iv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI2ivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI2ivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI2ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI2ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI2uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI2uiEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI2uiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI2uiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI2uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI2uivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI3i https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI3i https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI3iEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI3iEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI3iv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI3iv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI3ivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI3ivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI3ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI3ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI3uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI3uiEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI3uiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI3uiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI3uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI3uivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4bv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4bv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4bvEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4bvEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4i https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4i https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4iEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4iEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4iv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4iv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4ivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4ivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4sv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4sv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4svEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4svEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4ubv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4ubv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4ubvEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4ubvEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4uiEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4uiEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4uiv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4uiv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4uivEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4uivEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribI4usv https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribI4usv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribI4usvEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribI4usvEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribIFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glVertexAttribIPointer https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribPointer.xml glVertexAttribIPointer https://www.opengl.org/sdk/docs/man4/html/glVertexAttribPointer.xhtml glVertexAttribIPointerEXT https://www.opengl.org/registry/specs/EXT/gpu_shader4.txt glVertexAttribIPointerEXT https://www.opengl.org/registry/specs/NV/vertex_program4.txt glVertexAttribL1d https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL1d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL1dEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL1dv https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL1dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL1dvEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL1i64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL1i64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL1ui64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL1ui64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL2d https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL2d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL2dEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL2dv https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL2dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL2dvEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL2i64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL2i64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL2ui64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL2ui64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL3d https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL3d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL3dEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL3dv https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL3dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL3dvEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL3i64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL3i64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL3ui64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL3ui64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL4d https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL4d https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL4dEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL4dv https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribL4dv https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribL4dvEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribL4i64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL4i64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL4ui64NV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribL4ui64vNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribLFormatNV https://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt glVertexAttribLPointer https://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt glVertexAttribLPointer https://www.opengl.org/sdk/docs/man4/html/glVertexAttribPointer.xhtml glVertexAttribLPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt glVertexAttribP1ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP1ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribP1ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribP1uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP2ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP2ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribP2ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribP2uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP3ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribP3ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP4ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribP4ui https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttrib.xml glVertexAttribP4ui https://www.opengl.org/sdk/docs/man4/html/glVertexAttrib.xhtml glVertexAttribP4uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexAttribPointer https://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml glVertexAttribPointer https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribPointer.xml glVertexAttribPointer https://www.opengl.org/sdk/docs/man4/html/glVertexAttribPointer.xhtml glVertexAttribPointerARB https://www.opengl.org/registry/specs/ARB/vertex_program.txt glVertexAttribPointerARB https://www.opengl.org/registry/specs/ARB/vertex_shader.txt glVertexAttribPointerNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs1dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs1fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs1hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttribs1svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs2dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs2fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs2hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttribs2svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs3dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs3fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs3hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttribs3svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs4dvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs4fvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs4hvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexAttribs4svNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexAttribs4ubvNV https://www.opengl.org/registry/specs/NV/vertex_program.txt glVertexBlendARB https://www.opengl.org/registry/specs/ARB/vertex_blend.txt glVertexFormatNV https://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt glVertexP2ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexP2uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexP3ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexP3uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexP4ui https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexP4uiv https://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt glVertexPointer https://www.opengl.org/sdk/docs/man/xhtml/glVertexPointer.xml glVertexPointerEXT https://www.opengl.org/registry/specs/EXT/vertex_array.txt glVertexPointervINTEL https://www.opengl.org/registry/specs/INTEL/parallel_arrays.txt glVertexWeighthNV https://www.opengl.org/registry/specs/NV/half_float.txt glVertexWeighthvNV https://www.opengl.org/registry/specs/NV/half_float.txt glVideoCaptureNV https://www.opengl.org/registry/specs/NV/video_capture.txt glViewport https://www.opengl.org/sdk/docs/man/xhtml/glViewport.xml glViewport https://www.opengl.org/sdk/docs/man3/xhtml/glViewport.xml glViewport https://www.opengl.org/sdk/docs/man4/html/glViewport.xhtml glViewportArrayv https://www.opengl.org/registry/specs/ARB/viewport_array.txt glViewportArrayv https://www.opengl.org/sdk/docs/man4/html/glViewportArray.xhtml glViewportIndexedf https://www.opengl.org/registry/specs/ARB/viewport_array.txt glViewportIndexedf https://www.opengl.org/sdk/docs/man4/html/glViewportIndexed.xhtml glViewportIndexedfv https://www.opengl.org/registry/specs/ARB/viewport_array.txt glViewportIndexedfv https://www.opengl.org/sdk/docs/man4/html/glViewportIndexed.xhtml glWaitSync https://www.opengl.org/registry/specs/ARB/sync.txt glWaitSync https://www.opengl.org/sdk/docs/man3/xhtml/glWaitSync.xml glWaitSync https://www.opengl.org/sdk/docs/man4/html/glWaitSync.xhtml glWeightPathsNV https://www.opengl.org/registry/specs/NV/path_rendering.txt glWeightPointerARB https://www.opengl.org/registry/specs/ARB/vertex_blend.txt glWindowPos2d https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2dARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2dMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2dv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2dvARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2dvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2f https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2fARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2fMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2fv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2fvARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2fvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2i https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2iARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2iMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2iv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2ivARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2ivMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2s https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2sARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2sMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos2sv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos2svARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos2svMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3d https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3dARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3dMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3dv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3dvARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3dvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3f https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3fARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3fMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3fv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3fvARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3fvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3i https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3iARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3iMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3iv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3ivARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3ivMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3s https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3sARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3sMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos3sv https://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml glWindowPos3svARB https://www.opengl.org/registry/specs/ARB/window_pos.txt glWindowPos3svMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4dMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4dvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4fMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4fvMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4iMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4ivMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4sMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glWindowPos4svMESA https://www.opengl.org/registry/specs/MESA/window_pos.txt glXAssociateDMPbufferSGIX https://www.opengl.org/registry/specs/SGIX/dmbuffer.txt glXBindChannelToWindowSGIX https://www.opengl.org/registry/specs/SGIX/video_resize.txt glXBindHyperpipeSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXBindSwapBarrierNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXBindVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt glXBindVideoDeviceNV https://www.opengl.org/registry/specs/NV/present_video.txt glXBlitContextFramebufferAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXChannelRectSGIX https://www.opengl.org/registry/specs/SGIX/video_resize.txt glXChannelRectSyncSGIX https://www.opengl.org/registry/specs/SGIX/video_resize.txt glXChooseFBConfig https://www.opengl.org/sdk/docs/man/xhtml/glXChooseFBConfig.xml glXChooseVisual https://www.opengl.org/sdk/docs/man/xhtml/glXChooseVisual.xml glXCopyContext https://www.opengl.org/sdk/docs/man/xhtml/glXCopyContext.xml glXCopySubBufferMESA https://www.opengl.org/registry/specs/MESA/copy_sub_buffer.txt glXCreateAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXCreateAssociatedContextAttribsAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXCreateContext https://www.opengl.org/sdk/docs/man/xhtml/glXCreateContext.xml glXCreateContextAttribsARB https://www.opengl.org/registry/specs/ARB/glx_create_context.txt glXCreateContextWithConfigSGIX https://www.opengl.org/registry/specs/SGIX/fbconfig.txt glXCreateGLXPbufferSGIX https://www.opengl.org/registry/specs/SGIX/pbuffer.txt glXCreateGLXPixmap https://www.opengl.org/sdk/docs/man/xhtml/glXCreateGLXPixmap.xml glXCreateGLXPixmapMESA https://www.opengl.org/registry/specs/MESA/pixmap_colormap.txt glXCreateGLXPixmapWithConfigSGIX https://www.opengl.org/registry/specs/SGIX/fbconfig.txt glXCreateGLXVideoSourceSGIX https://www.opengl.org/registry/specs/SGIX/video_source.txt glXCreateNewContext https://www.opengl.org/sdk/docs/man/xhtml/glXCreateNewContext.xml glXCreatePbuffer https://www.opengl.org/sdk/docs/man/xhtml/glXCreatePbuffer.xml glXCreatePixmap https://www.opengl.org/sdk/docs/man/xhtml/glXCreatePixmap.xml glXCreateWindow https://www.opengl.org/sdk/docs/man/xhtml/glXCreateWindow.xml glXCushionSGI https://www.opengl.org/registry/specs/SGI/cushion.txt glXDeleteAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXDestroyContext https://www.opengl.org/sdk/docs/man/xhtml/glXDestroyContext.xml glXDestroyGLXPbufferSGIX https://www.opengl.org/registry/specs/SGIX/pbuffer.txt glXDestroyGLXPixmap https://www.opengl.org/sdk/docs/man/xhtml/glXDestroyGLXPixmap.xml glXDestroyGLXVideoSourceSGIX https://www.opengl.org/registry/specs/SGIX/video_source.txt glXDestroyHyperpipeConfigSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXDestroyPbuffer https://www.opengl.org/sdk/docs/man/xhtml/glXDestroyPbuffer.xml glXDestroyPixmap https://www.opengl.org/sdk/docs/man/xhtml/glXDestroyPixmap.xml glXDestroyWindow https://www.opengl.org/sdk/docs/man/xhtml/glXDestroyWindow.xml glXEnumerateVideoCaptureDevicesNV https://www.opengl.org/registry/specs/NV/video_capture.txt glXFreeContextEXT https://www.opengl.org/registry/specs/EXT/import_context.txt glXFreeContextEXT https://www.opengl.org/sdk/docs/man/xhtml/glXFreeContextEXT.xml glXGetAGPOffsetMESA https://www.opengl.org/registry/specs/MESA/agp_offset.txt glXGetClientString https://www.opengl.org/sdk/docs/man/xhtml/glXGetClientString.xml glXGetConfig https://www.opengl.org/sdk/docs/man/xhtml/glXGetConfig.xml glXGetContextGPUIDAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXGetContextIDEXT https://www.opengl.org/registry/specs/EXT/import_context.txt glXGetContextIDEXT https://www.opengl.org/sdk/docs/man/xhtml/glXGetContextIDEXT.xml glXGetCurrentAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXGetCurrentContext https://www.opengl.org/sdk/docs/man/xhtml/glXGetCurrentContext.xml glXGetCurrentDisplay https://www.opengl.org/sdk/docs/man/xhtml/glXGetCurrentDisplay.xml glXGetCurrentDrawable https://www.opengl.org/sdk/docs/man/xhtml/glXGetCurrentDrawable.xml glXGetCurrentReadDrawable https://www.opengl.org/sdk/docs/man/xhtml/glXGetCurrentReadDrawable.xml glXGetCurrentReadDrawableSGI https://www.opengl.org/registry/specs/SGI/make_current_read.txt glXGetFBConfigAttrib https://www.opengl.org/sdk/docs/man/xhtml/glXGetFBConfigAttrib.xml glXGetFBConfigAttribSGIX https://www.opengl.org/registry/specs/SGIX/fbconfig.txt glXGetFBConfigFromVisualSGIX https://www.opengl.org/registry/specs/SGIX/fbconfig.txt glXGetFBConfigs https://www.opengl.org/sdk/docs/man/xhtml/glXGetFBConfigs.xml glXGetGPUIDsAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXGetGPUInfoAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXGetMscRateOML https://www.opengl.org/registry/specs/OML/glx_sync_control.txt glXGetProcAddress https://www.opengl.org/sdk/docs/man/xhtml/glXGetProcAddress.xml glXGetSelectedEvent https://www.opengl.org/sdk/docs/man/xhtml/glXGetSelectedEvent.xml glXGetSelectedEventSGIX https://www.opengl.org/registry/specs/SGIX/pbuffer.txt glXGetSyncValuesOML https://www.opengl.org/registry/specs/OML/glx_sync_control.txt glXGetTransparentIndexSUN https://www.opengl.org/registry/specs/SUN/get_transparent_index.txt glXGetVideoSyncSGI https://www.opengl.org/registry/specs/SGI/video_sync.txt glXGetVisualFromFBConfig https://www.opengl.org/sdk/docs/man/xhtml/glXGetVisualFromFBConfig.xml glXHyperpipeAttribSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXHyperpipeConfigSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXImportContextEXT https://www.opengl.org/registry/specs/EXT/import_context.txt glXImportContextEXT https://www.opengl.org/sdk/docs/man/xhtml/glXImportContextEXT.xml glXIsDirect https://www.opengl.org/sdk/docs/man/xhtml/glXIsDirect.xml glXJoinSwapGroupNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXLockVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt glXMakeAssociatedContextCurrentAMD https://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt glXMakeContextCurrent https://www.opengl.org/sdk/docs/man/xhtml/glXMakeContextCurrent.xml glXMakeCurrent https://www.opengl.org/sdk/docs/man/xhtml/glXMakeCurrent.xml glXMakeCurrentReadSGI https://www.opengl.org/registry/specs/SGI/make_current_read.txt glXQueryChannelDeltasSGIX https://www.opengl.org/registry/specs/SGIX/video_resize.txt glXQueryChannelRectSGIX https://www.opengl.org/registry/specs/SGIX/video_resize.txt glXQueryContext https://www.opengl.org/sdk/docs/man/xhtml/glXQueryContext.xml glXQueryContextInfoEXT https://www.opengl.org/registry/specs/EXT/import_context.txt glXQueryContextInfoEXT https://www.opengl.org/sdk/docs/man/xhtml/glXQueryContextInfoEXT.xml glXQueryDrawable https://www.opengl.org/sdk/docs/man/xhtml/glXQueryDrawable.xml glXQueryExtension https://www.opengl.org/sdk/docs/man/xhtml/glXQueryExtension.xml glXQueryExtensionsString https://www.opengl.org/sdk/docs/man/xhtml/glXQueryExtensionsString.xml glXQueryFrameCountNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXQueryGLXPbufferSGIX https://www.opengl.org/registry/specs/SGIX/pbuffer.txt glXQueryHyperpipeAttribSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXQueryHyperpipeBestAttribSGIX https://www.opengl.org/registry/specs/SGIX/hyperpipe_group.txt glXQueryMaxSwapGroupsNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXQueryServerString https://www.opengl.org/sdk/docs/man/xhtml/glXQueryServerString.xml glXQuerySwapGroupNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXQueryVersion https://www.opengl.org/sdk/docs/man/xhtml/glXQueryVersion.xml glXQueryVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt glXReleaseBuffersMESA https://www.opengl.org/registry/specs/MESA/release_buffers.txt glXReleaseVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt glXResetFrameCountNV https://www.opengl.org/registry/specs/NV/glx_swap_group.txt glXSelectEvent https://www.opengl.org/sdk/docs/man/xhtml/glXSelectEvent.xml glXSelectEventSGIX https://www.opengl.org/registry/specs/SGIX/pbuffer.txt glXSet3DfxModeMESA https://www.opengl.org/registry/specs/MESA/set_3dfx_mode.txt glXSwapBuffers https://www.opengl.org/sdk/docs/man/xhtml/glXSwapBuffers.xml glXSwapBuffersMscOML https://www.opengl.org/registry/specs/OML/glx_sync_control.txt glXSwapIntervalEXT https://www.opengl.org/registry/specs/EXT/swap_control.txt glXSwapIntervalSGI https://www.opengl.org/registry/specs/SGI/swap_control.txt glXUseXFont https://www.opengl.org/sdk/docs/man/xhtml/glXUseXFont.xml glXWaitForMscOML https://www.opengl.org/registry/specs/OML/glx_sync_control.txt glXWaitForSbcOML https://www.opengl.org/registry/specs/OML/glx_sync_control.txt glXWaitGL https://www.opengl.org/sdk/docs/man/xhtml/glXWaitGL.xml glXWaitVideoSyncSGI https://www.opengl.org/registry/specs/SGI/video_sync.txt glXWaitX https://www.opengl.org/sdk/docs/man/xhtml/glXWaitX.xml gluBeginCurve https://www.opengl.org/sdk/docs/man/xhtml/gluBeginCurve.xml gluBeginPolygon https://www.opengl.org/sdk/docs/man/xhtml/gluBeginPolygon.xml gluBeginSurface https://www.opengl.org/sdk/docs/man/xhtml/gluBeginSurface.xml gluBeginTrim https://www.opengl.org/sdk/docs/man/xhtml/gluBeginTrim.xml gluBuild1DMipmapLevels https://www.opengl.org/sdk/docs/man/xhtml/gluBuild1DMipmapLevels.xml gluBuild1DMipmaps https://www.opengl.org/sdk/docs/man/xhtml/gluBuild1DMipmaps.xml gluBuild2DMipmapLevels https://www.opengl.org/sdk/docs/man/xhtml/gluBuild2DMipmapLevels.xml gluBuild2DMipmaps https://www.opengl.org/sdk/docs/man/xhtml/gluBuild2DMipmaps.xml gluBuild3DMipmapLevels https://www.opengl.org/sdk/docs/man/xhtml/gluBuild3DMipmapLevels.xml gluBuild3DMipmaps https://www.opengl.org/sdk/docs/man/xhtml/gluBuild3DMipmaps.xml gluCheckExtension https://www.opengl.org/sdk/docs/man/xhtml/gluCheckExtension.xml gluCylinder https://www.opengl.org/sdk/docs/man/xhtml/gluCylinder.xml gluDeleteNurbsRenderer https://www.opengl.org/sdk/docs/man/xhtml/gluDeleteNurbsRenderer.xml gluDeleteQuadric https://www.opengl.org/sdk/docs/man/xhtml/gluDeleteQuadric.xml gluDeleteTess https://www.opengl.org/sdk/docs/man/xhtml/gluDeleteTess.xml gluDisk https://www.opengl.org/sdk/docs/man/xhtml/gluDisk.xml gluEndCurve https://www.opengl.org/sdk/docs/man/xhtml/gluBeginCurve.xml gluEndPolygon https://www.opengl.org/sdk/docs/man/xhtml/gluBeginPolygon.xml gluEndSurface https://www.opengl.org/sdk/docs/man/xhtml/gluBeginSurface.xml gluEndTrim https://www.opengl.org/sdk/docs/man/xhtml/gluBeginTrim.xml gluErrorString https://www.opengl.org/sdk/docs/man/xhtml/gluErrorString.xml gluGetNurbsProperty https://www.opengl.org/sdk/docs/man/xhtml/gluGetNurbsProperty.xml gluGetString https://www.opengl.org/sdk/docs/man/xhtml/gluGetString.xml gluGetTessProperty https://www.opengl.org/sdk/docs/man/xhtml/gluGetTessProperty.xml gluLoadSamplingMatrices https://www.opengl.org/sdk/docs/man/xhtml/gluLoadSamplingMatrices.xml gluLookAt https://www.opengl.org/sdk/docs/man/xhtml/gluLookAt.xml gluNewNurbsRenderer https://www.opengl.org/sdk/docs/man/xhtml/gluNewNurbsRenderer.xml gluNewQuadric https://www.opengl.org/sdk/docs/man/xhtml/gluNewQuadric.xml gluNewTess https://www.opengl.org/sdk/docs/man/xhtml/gluNewTess.xml gluNextContour https://www.opengl.org/sdk/docs/man/xhtml/gluNextContour.xml gluNurbsCallback https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsCallback.xml gluNurbsCallbackData https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsCallbackData.xml gluNurbsCallbackDataEXT https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsCallbackDataEXT.xml gluNurbsCurve https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsCurve.xml gluNurbsProperty https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsProperty.xml gluNurbsSurface https://www.opengl.org/sdk/docs/man/xhtml/gluNurbsSurface.xml gluOrtho2D https://www.opengl.org/sdk/docs/man/xhtml/gluOrtho2D.xml gluPartialDisk https://www.opengl.org/sdk/docs/man/xhtml/gluPartialDisk.xml gluPerspective https://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml gluPickMatrix https://www.opengl.org/sdk/docs/man/xhtml/gluPickMatrix.xml gluProject https://www.opengl.org/sdk/docs/man/xhtml/gluProject.xml gluPwlCurve https://www.opengl.org/sdk/docs/man/xhtml/gluPwlCurve.xml gluQuadricCallback https://www.opengl.org/sdk/docs/man/xhtml/gluQuadricCallback.xml gluQuadricDrawStyle https://www.opengl.org/sdk/docs/man/xhtml/gluQuadricDrawStyle.xml gluQuadricNormals https://www.opengl.org/sdk/docs/man/xhtml/gluQuadricNormals.xml gluQuadricOrientation https://www.opengl.org/sdk/docs/man/xhtml/gluQuadricOrientation.xml gluQuadricTexture https://www.opengl.org/sdk/docs/man/xhtml/gluQuadricTexture.xml gluScaleImage https://www.opengl.org/sdk/docs/man/xhtml/gluScaleImage.xml gluSphere https://www.opengl.org/sdk/docs/man/xhtml/gluSphere.xml gluTessBeginContour https://www.opengl.org/sdk/docs/man/xhtml/gluTessBeginContour.xml gluTessBeginPolygon https://www.opengl.org/sdk/docs/man/xhtml/gluTessBeginPolygon.xml gluTessCallback https://www.opengl.org/sdk/docs/man/xhtml/gluTessCallback.xml gluTessEndContour https://www.opengl.org/sdk/docs/man/xhtml/gluTessBeginContour.xml gluTessEndPolygon https://www.opengl.org/sdk/docs/man/xhtml/gluTessEndPolygon.xml gluTessNormal https://www.opengl.org/sdk/docs/man/xhtml/gluTessNormal.xml gluTessProperty https://www.opengl.org/sdk/docs/man/xhtml/gluTessProperty.xml gluTessVertex https://www.opengl.org/sdk/docs/man/xhtml/gluTessVertex.xml gluTexFilterFuncSGI https://www.opengl.org/registry/specs/SGI/filter4_parameters.txt gluUnProject https://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml gluUnProject4 https://www.opengl.org/sdk/docs/man/xhtml/gluUnProject4.xml sizeof https://www.opengl.org/registry/specs/IBM/multimode_draw_arrays.txt wglAssociateImageBufferEventsI3D https://www.opengl.org/registry/specs/I3D/wgl_image_buffer.txt wglBeginFrameTrackingI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_usage.txt wglBindDisplayColorTableEXT https://www.opengl.org/registry/specs/EXT/wgl_display_color_table.txt wglBindSwapBarrierNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglBindVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt wglBindVideoDeviceNV https://www.opengl.org/registry/specs/NV/present_video.txt wglBlitContextFramebufferAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglChoosePixelFormat http://msdn.microsoft.com/en-us/library/dd318284.aspx wglChoosePixelFormatARB https://www.opengl.org/registry/specs/ARB/wgl_pixel_format.txt wglChoosePixelFormatEXT https://www.opengl.org/registry/specs/EXT/wgl_pixel_format.txt wglCopyContext http://msdn.microsoft.com/en-us/library/dd374378.aspx wglCreateAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglCreateAssociatedContextAttribsAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglCreateBufferRegionARB https://www.opengl.org/registry/specs/ARB/wgl_buffer_region.txt wglCreateContext http://msdn.microsoft.com/en-us/library/dd374379.aspx wglCreateContextAttribsARB https://www.opengl.org/registry/specs/ARB/wgl_create_context.txt wglCreateDisplayColorTableEXT https://www.opengl.org/registry/specs/EXT/wgl_display_color_table.txt wglCreateImageBufferI3D https://www.opengl.org/registry/specs/I3D/wgl_image_buffer.txt wglCreateLayerContext http://msdn.microsoft.com/en-us/library/dd374380.aspx wglCreatePbufferARB https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt wglCreatePbufferEXT https://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt wglDXCloseDeviceNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXLockObjectsNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXObjectAccessNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXOpenDeviceNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXRegisterObjectNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXSetResourceShareHandleNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXUnlockObjectsNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDXUnregisterObjectNV https://www.opengl.org/registry/specs/NV/DX_interop.txt wglDeleteAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglDeleteBufferRegionARB https://www.opengl.org/registry/specs/ARB/wgl_buffer_region.txt wglDeleteContext http://msdn.microsoft.com/en-us/library/dd374381.aspx wglDescribeLayerPlane http://msdn.microsoft.com/en-us/library/dd374382.aspx wglDescribePixelFormat http://msdn.microsoft.com/en-us/library/dd318302.aspx wglDestroyDisplayColorTableEXT https://www.opengl.org/registry/specs/EXT/wgl_display_color_table.txt wglDestroyImageBufferI3D https://www.opengl.org/registry/specs/I3D/wgl_image_buffer.txt wglDestroyPbufferARB https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt wglDestroyPbufferEXT https://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt wglDisableFrameLockI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_lock.txt wglDisableGenlockI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglEnableFrameLockI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_lock.txt wglEnableGenlockI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglEndFrameTrackingI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_usage.txt wglEnumerateVideoCaptureDevicesNV https://www.opengl.org/registry/specs/NV/video_capture.txt wglEnumerateVideoDevicesNV https://www.opengl.org/registry/specs/NV/present_video.txt wglGenlockSampleRateI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGenlockSourceDelayI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGenlockSourceEdgeI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGenlockSourceI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGetContextGPUIDAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglGetCurrentAssociatedContextAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglGetCurrentContext http://msdn.microsoft.com/en-us/library/dd374383.aspx wglGetCurrentDC http://msdn.microsoft.com/en-us/library/dd374384.aspx wglGetCurrentReadDCARB https://www.opengl.org/registry/specs/ARB/wgl_make_current_read.txt wglGetCurrentReadDCEXT https://www.opengl.org/registry/specs/EXT/wgl_make_current_read.txt wglGetDigitalVideoParametersI3D https://www.opengl.org/registry/specs/I3D/wgl_digital_video_control.txt wglGetFrameUsageI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_usage.txt wglGetGPUIDsAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglGetGPUInfoAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglGetGammaTableI3D https://www.opengl.org/registry/specs/I3D/wgl_gamma.txt wglGetGammaTableParametersI3D https://www.opengl.org/registry/specs/I3D/wgl_gamma.txt wglGetGenlockSampleRateI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGetGenlockSourceDelayI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGetGenlockSourceEdgeI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGetGenlockSourceI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglGetLayerPaletteEntries http://msdn.microsoft.com/en-us/library/dd374385.aspx wglGetMscRateOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt wglGetPbufferDCARB https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt wglGetPbufferDCEXT https://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt wglGetPixelFormat http://msdn.microsoft.com/en-us/library/dd318349.aspx wglGetPixelFormatAttribfvARB https://www.opengl.org/registry/specs/ARB/wgl_pixel_format.txt wglGetPixelFormatAttribfvEXT https://www.opengl.org/registry/specs/EXT/wgl_pixel_format.txt wglGetPixelFormatAttribivARB https://www.opengl.org/registry/specs/ARB/wgl_pixel_format.txt wglGetPixelFormatAttribivEXT https://www.opengl.org/registry/specs/EXT/wgl_pixel_format.txt wglGetProcAddress http://msdn.microsoft.com/en-us/library/dd374386.aspx wglGetSwapIntervalEXT https://www.opengl.org/registry/specs/EXT/wgl_swap_control.txt wglGetSyncValuesOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt wglIsEnabledFrameLockI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_lock.txt wglIsEnabledGenlockI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglJoinSwapGroupNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglLoadDisplayColorTableEXT https://www.opengl.org/registry/specs/EXT/wgl_display_color_table.txt wglLockVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt wglMakeAssociatedContextCurrentAMD https://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt wglMakeContextCurrentARB https://www.opengl.org/registry/specs/ARB/wgl_make_current_read.txt wglMakeContextCurrentEXT https://www.opengl.org/registry/specs/EXT/wgl_make_current_read.txt wglMakeCurrent http://msdn.microsoft.com/en-us/library/dd374387.aspx wglQueryCurrentContextNV https://www.opengl.org/registry/specs/NV/present_video.txt wglQueryFrameCountNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglQueryFrameLockMasterI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_lock.txt wglQueryFrameTrackingI3D https://www.opengl.org/registry/specs/I3D/wgl_swap_frame_usage.txt wglQueryGenlockMaxSourceDelayI3D https://www.opengl.org/registry/specs/I3D/wgl_genlock.txt wglQueryMaxSwapGroupsNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglQueryPbufferARB https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt wglQueryPbufferEXT https://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt wglQuerySwapGroupNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglQueryVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt wglRealizeLayerPalette http://msdn.microsoft.com/en-us/library/dd374388.aspx wglReleaseImageBufferEventsI3D https://www.opengl.org/registry/specs/I3D/wgl_image_buffer.txt wglReleasePbufferDCARB https://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt wglReleasePbufferDCEXT https://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt wglReleaseVideoCaptureDeviceNV https://www.opengl.org/registry/specs/NV/video_capture.txt wglResetFrameCountNV https://www.opengl.org/registry/specs/NV/wgl_swap_group.txt wglRestoreBufferRegionARB https://www.opengl.org/registry/specs/ARB/wgl_buffer_region.txt wglSaveBufferRegionARB https://www.opengl.org/registry/specs/ARB/wgl_buffer_region.txt wglSetDigitalVideoParametersI3D https://www.opengl.org/registry/specs/I3D/wgl_digital_video_control.txt wglSetGammaTableI3D https://www.opengl.org/registry/specs/I3D/wgl_gamma.txt wglSetGammaTableParametersI3D https://www.opengl.org/registry/specs/I3D/wgl_gamma.txt wglSetLayerPaletteEntries http://msdn.microsoft.com/en-us/library/dd374389.aspx wglSetPixelFormat http://msdn.microsoft.com/en-us/library/dd369049.aspx wglSetStereoEmitterState3DL https://www.opengl.org/registry/specs/3DL/stereo_control.txt wglShareLists http://msdn.microsoft.com/en-us/library/dd374390.aspx wglSwapBuffers http://msdn.microsoft.com/en-us/library/dd369060.aspx wglSwapBuffersMscOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt wglSwapIntervalEXT https://www.opengl.org/registry/specs/EXT/wgl_swap_control.txt wglSwapLayerBuffers http://msdn.microsoft.com/en-us/library/dd374391.aspx wglSwapLayerBuffersMscOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt wglUseFontBitmaps http://msdn.microsoft.com/en-us/library/dd374392.aspx wglUseFontOutlines http://msdn.microsoft.com/en-us/library/dd374393.aspx wglWaitForMscOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt wglWaitForSbcOML https://www.opengl.org/registry/specs/OML/wgl_sync_control.txt tmpNnpnZF/gui/resources/document-edit.png0000664000175000017500000000324412543167424020034 0ustar chrischris‰PNG  IHDR szzôsRGB®Îé pHYs × ×B(›xtIMEØ ­Y bKGDÿÿÿ ½§“$IDATxÚ½– l÷Ç?w>¿Ä„<À!N‚!º‡ªIŒubt”ÁP¥i[¤ª‹Ôj­ÖiÐQÑ2 ±²NR ÒV…hZéº5ݦ ¶k ÝÆŠ*™ê™$…ıøßïnÎ Kq.`MýJ?ÝI–üùü¿ß-ñ åêÃoËd2›ª[[ÿ¤g³?^ÚÝ= 0S`Ð üóê3®•RZÛmWbò7ÚÅúú —V¯^ÿÙÓ§/ÌX®iÚeYÁT˜n"”îæf—‹½‹Ñÿ‚|‰‘½µ„¼^¢ÉdÈþẺÏYF + ããã¢PdÎ(€™÷Óä„¢JêCŒ«ásÙx¾»ÀéXš-,N$³Ûƒ¾Tj»E@€p±XÌ*ÜVDÍ¡÷·SíÖ8ú;7Ï{Q…ï¥'èZ*ñþ‚t:k%¬1¡â4 `N]Ð “È—¿CÀá­>c½>t]ctt”-ß.hŸ^#êNôæ¿/aÅ—Á­PS¦¶\ C'÷ï§ð;GùG¿]Ý.tC#Óö€LÛ·Û>ÚÐíB·”µÛ­Ð }u'~Û¸~ÓÁ³Çìäe™t:ÍŠ%iži“ðº…Üëg'÷W¯ª„%·(;¹åÈü÷TÎ2žóñt§ÂXrY– ÆØ÷„Hu•“ΞüËûºÕË€ îVÀ²¹›Æ5ñ bí¿,0¡ë:1ÆÁ͵;éàöuï¸äo è•,BV yüÒH'6gˆý¿9÷÷ˆ.Çyé‡*áz_Y÷z`‡z ®X¦­p«@!7ˆ~}?.Oˆçjx­÷mT9ÍO¿›eÙb;“îUŒØ%ètr œôY¬àÙ @W'P#{ðxƒœºèä'o›'W™­ßL²ò^‰‚k9ž¢ÆåÂU, ¨e–.T(CWÈ_ÛƒÏ[Í¥‘í??K¡P@Ó4Ú×Äùú—l®f®(Oã©öât:©©©)uÀ¸“€ ¸“L^;€Ïãd`PaÓžód2óôk?Ÿà±¯é8½!ÞKmÂî LÜ„¦Ão¿$²‘cxœ*# ؼï}ÆÆÜwOŠ­m2>Ÿ—¾ø“h®&|N'UUU444`³Ù(Ëmw $u$“Ã'q3D*ggóÞ‹D¢7¸§q’]íi‚5úF!-´â/½^/áp‡ÃAYæ´`&;ƒ=wE ±í…>>¸2@½_eÿãIjíüst=7ò÷â÷;q»Ý´´´àóù(K%8c…Ô£]à[ÊŽáì{CT¹õ"nš¦‰D,ð¡á!ãøñ®:ü³¼â‹¨”D<Æ‹Gßä ËlüJu-Pߺ–`}‹ùV+‰—Íœ½ªÊàÃÃCôôœ<Ò±kw‡n°æÌ™3¤S)þ¯ò©û@cS¸ìÿB ¦ëº ,v¡ìäSðçžÝ¶Õ · ”µ®”ºÚ §N¢¶n2%aî@iæSm·œ|®øòªÕÌ%’d3·½óåÎŽƒ/|ÈÌE 4Û©²,¥yµn,† "H&rùìÁÝÏŸW‹ë¸û¤‹À$ÀÝ ˜õ æyv¡`€R, IEND®B`‚tmpNnpnZF/gui/README.markdown0000664000175000017500000000007512543167424015253 0ustar chrischrisImplementation of the `qapitrace` Qt-based GUI for apitrace. tmpNnpnZF/gui/main.cpp0000664000175000017500000000500212543167424014175 0ustar chrischris#include #include "mainwindow.h" #include "apitrace.h" #include "apitracecall.h" #include "os_string.hpp" #include "os_process.hpp" #include #include #include #include Q_DECLARE_METATYPE(QList); Q_DECLARE_METATYPE(QVector); Q_DECLARE_METATYPE(Qt::CaseSensitivity); Q_DECLARE_METATYPE(ApiTrace::SearchResult); Q_DECLARE_METATYPE(ApiTrace::SearchRequest); Q_DECLARE_METATYPE(ImageHash); static void usage(void) { qWarning("usage: qapitrace [options] [TRACE] [CALLNO]\n" "Valid options include:\n" " -h, --help Print this help message\n" " --remote-target HOST Replay trace on remote target HOST\n"); } int main(int argc, char **argv) { QApplication app(argc, argv); qRegisterMetaType >(); qRegisterMetaType >(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); #ifndef Q_OS_WIN os::String currentProcess = os::getProcessName(); currentProcess.trimFilename(); QString path = qgetenv("PATH"); path = QLatin1String(currentProcess.str()) + QLatin1String(":") + path; qputenv("PATH", path.toLatin1()); #endif QStringList args = app.arguments(); QString remoteTarget; int i = 1; while (i < args.count()) { QString arg = args[i]; if (arg[0] != QLatin1Char('-')) { break; } ++i; if (arg == QLatin1String("--")) { break; } else if (arg == QLatin1String("--remote-target")) { if (i == args.count()) { qWarning("Option --remote-target requires an argument.\n"); exit(1); } remoteTarget = args[i]; ++i; } else if (arg == QLatin1String("-h") || arg == QLatin1String("--help")) { usage(); exit(0); } else { usage(); exit(1); } } MainWindow window; window.show(); if (i < args.count()) { QString fileName = args[i++]; int callNum = -1; if (i < args.count()) { callNum = args[i++].toInt(); } window.loadTrace(fileName, callNum); } if (remoteTarget.length()) { window.setRemoteTarget(remoteTarget); } app.exec(); } tmpNnpnZF/gui/apicalldelegate.cpp0000664000175000017500000001132312543167424016354 0ustar chrischris#include "apicalldelegate.h" #include "apitracecall.h" #include "apitracemodel.h" #include "thumbnail.h" #include #include #include #include #include ApiCallDelegate::ApiCallDelegate(QWidget *parent) : QStyledItemDelegate(parent), m_stateEmblem(":/resources/dialog-information.png"), m_editEmblem(":/resources/document-edit.png"), m_errorEmblem(":/resources/script-error.png") { } void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QVariant var = index.data(ApiTraceModel::EventRole); ApiTraceEvent *event = var.value(); Q_ASSERT(index.column() == 0); if (event) { QPoint offset = option.rect.topLeft(); QStaticText text = event->staticText(); QSize textSize = text.size().toSize(); //text.setTextWidth(option.rect.width()); //QStyledItemDelegate::paint(painter, option, index); QStyle *style = QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &option, painter, 0); // draw thumbnail of frame if (event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); const QImage & thumbnail = frame->thumbnail(); if (!thumbnail.isNull()) { painter->drawImage(offset, thumbnail); offset += QPoint(textSize.height() + thumbnail.width(), option.rect.height()/2 - textSize.height()/2); } else { frame->missingThumbnail(); } } if (event->hasState()) { QPixmap px = m_stateEmblem.pixmap(textSize.height(), textSize.height()); painter->drawPixmap(option.rect.topLeft(), px); offset += QPoint(textSize.height() + 5, 0); } if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); const QImage & thumbnail = call->thumbnail(); if (!thumbnail.isNull()) { painter->drawImage(offset, thumbnail); offset += QPoint(textSize.height() + thumbnail.width(), option.rect.height()/2 - textSize.height()/2); } else if (call->flags() & trace::CALL_FLAG_RENDER) { call->missingThumbnail(); } if (call->hasError()) { QPixmap px = m_errorEmblem.pixmap(textSize.height(), textSize.height()); painter->drawPixmap(offset, px); offset += QPoint(textSize.height() + 5, 0); } if (call->edited()) { QPixmap px = m_editEmblem.pixmap(textSize.height(), textSize.height()); painter->drawPixmap(offset, px); offset += QPoint(textSize.height() + 5, 0); } } painter->drawStaticText(offset, text); } else { QStyledItemDelegate::paint(painter, option, index); } } QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QVariant var = index.data(ApiTraceModel::EventRole); ApiTraceEvent *event = var.value(); #ifndef __APPLE__ /* XXX: This fails on MacOSX, but seems safe to ignore */ Q_ASSERT(index.column() == 0); #endif if (event) { QStaticText text = event->staticText(); //text.setTextWidth(option.rect.width()); //qDebug()<<"text size = "<type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); const QImage & thumbnail = frame->thumbnail(); if (!thumbnail.isNull()) { size.rwidth() += thumbnail.width(); if (size.height() < thumbnail.height()) { size.setHeight(thumbnail.height()); } } } else if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); const QImage & thumbnail = call->thumbnail(); if (!thumbnail.isNull()) { size.rwidth() += thumbnail.width(); if (size.height() < thumbnail.height()) { size.setHeight(thumbnail.height()); } } } return size; } return QStyledItemDelegate::sizeHint(option, index); } #include "apicalldelegate.moc" tmpNnpnZF/gui/trimprocess.h0000664000175000017500000000130612543167424015273 0ustar chrischris#pragma once #include "apitrace.h" #include #include class TrimProcess : public QObject { Q_OBJECT public: TrimProcess(QObject *parent=0); ~TrimProcess(); void setTrimIndex(int trimIndex); int trimIndex(); void setTracePath(const QString &str); QString tracePath() const; private: void updateTrimPath(); public slots: void start(); signals: void trimmedFile(const QString &trimPath); void error(const QString &msg); private slots: void trimFinished(); void trimError(QProcess::ProcessError err); private: QStringList m_args; QString m_tracePath; QString m_trimPath; int m_trimIndex; QProcess *m_process; }; tmpNnpnZF/gui/profiledialog.cpp0000664000175000017500000002102112543167424016070 0ustar chrischris#include "profiledialog.h" #include "profiletablemodel.h" #include #include "graphing/histogramview.h" #include "graphing/timeaxiswidget.h" #include "graphing/frameaxiswidget.h" #include "graphing/heatmapverticalaxiswidget.h" #include "profileheatmap.h" /* Handy function to allow selection of a call in main window */ ProfileDialog* g_profileDialog = 0; void Profiling::jumpToCall(int index) { if (g_profileDialog) { g_profileDialog->showCall(index); } } /* Provides frame numbers based off call index */ class FrameCallDataProvider : public FrameDataProvider { public: FrameCallDataProvider(const trace::Profile* profile) { m_profile = profile; } unsigned size() const { return m_profile->frames.size(); } qint64 frameStart(unsigned index) const { return m_profile->frames[index].calls.begin; } qint64 frameEnd(unsigned index) const { return m_profile->frames[index].calls.end; } private: const trace::Profile* m_profile; }; /* Provides frame numbers based off time */ class FrameTimeDataProvider : public FrameDataProvider { public: FrameTimeDataProvider(const trace::Profile* profile) { m_profile = profile; } unsigned size() const { return m_profile->frames.size(); } qint64 frameStart(unsigned index) const { return m_profile->frames[index].cpuStart; } qint64 frameEnd(unsigned index) const { return m_profile->frames[index].cpuStart + m_profile->frames[index].cpuDuration; } private: const trace::Profile* m_profile; }; ProfileDialog::ProfileDialog(QWidget *parent) : QDialog(parent), m_profile(0) { setupUi(this); g_profileDialog = this; /* Gradients for call duration histograms */ QLinearGradient cpuGradient; cpuGradient.setColorAt(0.9, QColor(0, 0, 210)); cpuGradient.setColorAt(0.0, QColor(130, 130, 255)); QLinearGradient gpuGradient; gpuGradient.setColorAt(0.9, QColor(210, 0, 0)); gpuGradient.setColorAt(0.0, QColor(255, 130, 130)); /* Setup heatmap timeline */ m_timeline->setLabel(new GraphLabelWidget("Frames ", m_timeline)); m_timeline->label()->setFlags(Qt::AlignVCenter | Qt::AlignRight); m_timeline->setView(new HeatmapView(m_timeline)); m_timeline->setAxis(GraphWidget::AxisTop, new FrameAxisWidget(m_timeline)); m_timeline->setAxis(GraphWidget::AxisLeft, new HeatmapVerticalAxisWidget(m_timeline)); m_timeline->axis(GraphWidget::AxisLeft)->resize(80, 0); m_timeline->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); m_timeline->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); /* Setup Cpu call duration histogram */ m_cpuGraph->setLabel(new GraphLabelWidget("CPU", m_cpuGraph)); m_cpuGraph->setAxis(GraphWidget::AxisTop, new FrameAxisWidget(m_cpuGraph)); m_cpuGraph->setAxis(GraphWidget::AxisLeft, new TimeAxisWidget(m_cpuGraph)); m_cpuGraph->axis(GraphWidget::AxisLeft)->resize(80, 0); HistogramView* cpuView = new HistogramView(m_cpuGraph); cpuView->setSelectedGradient(cpuGradient); m_cpuGraph->setView(cpuView); /* Setup Gpu call duration histogram */ m_gpuGraph->setLabel(new GraphLabelWidget("GPU", m_gpuGraph)); m_gpuGraph->setAxis(GraphWidget::AxisTop, new FrameAxisWidget(m_gpuGraph)); m_gpuGraph->setAxis(GraphWidget::AxisLeft, new TimeAxisWidget(m_gpuGraph)); m_gpuGraph->axis(GraphWidget::AxisLeft)->resize(80, 0); HistogramView* gpuView = new HistogramView(m_gpuGraph); gpuView->setSelectedGradient(gpuGradient); m_gpuGraph->setView(gpuView); /* Synchronise selections */ connect(m_timeline, SIGNAL(selectionChanged(SelectionState)), m_cpuGraph, SLOT(setSelection(SelectionState))); connect(m_timeline, SIGNAL(selectionChanged(SelectionState)), m_gpuGraph, SLOT(setSelection(SelectionState))); connect(m_cpuGraph, SIGNAL(selectionChanged(SelectionState)), m_timeline, SLOT(setSelection(SelectionState))); connect(m_cpuGraph, SIGNAL(selectionChanged(SelectionState)), m_gpuGraph, SLOT(setSelection(SelectionState))); connect(m_gpuGraph, SIGNAL(selectionChanged(SelectionState)), m_timeline, SLOT(setSelection(SelectionState))); connect(m_gpuGraph, SIGNAL(selectionChanged(SelectionState)), m_cpuGraph, SLOT(setSelection(SelectionState))); connect(m_timeline, SIGNAL(selectionChanged(SelectionState)), this, SLOT(graphSelectionChanged(SelectionState))); connect(m_cpuGraph, SIGNAL(selectionChanged(SelectionState)), this, SLOT(graphSelectionChanged(SelectionState))); connect(m_gpuGraph, SIGNAL(selectionChanged(SelectionState)), this, SLOT(graphSelectionChanged(SelectionState))); /* Synchronise views between cpuGraph and gpuGraph */ connect(m_cpuGraph, SIGNAL(horizontalViewChanged(qint64,qint64)), m_gpuGraph, SLOT(setHorizontalView(qint64,qint64))); connect(m_gpuGraph, SIGNAL(horizontalViewChanged(qint64,qint64)), m_cpuGraph, SLOT(setHorizontalView(qint64,qint64))); } ProfileDialog::~ProfileDialog() { delete m_profile; } void ProfileDialog::showCall(int call) { emit jumpToCall(call); } void ProfileDialog::tableDoubleClicked(const QModelIndex& index) { ProfileTableModel* model = (ProfileTableModel*)m_table->model(); if (!model) { return; } const trace::Profile::Call* call = model->getJumpCall(index); if (call) { emit jumpToCall(call->no); } else { unsigned program = model->getProgram(index); SelectionState state; state.type = SelectionState::Vertical; state.end = state.start = program; m_timeline->setSelection(state); m_cpuGraph->setSelection(state); m_gpuGraph->setSelection(state); } } void ProfileDialog::setProfile(trace::Profile* profile) { if (profile && profile->frames.size()) { HeatmapVerticalAxisWidget* programAxis; FrameAxisWidget* frameAxis; HistogramView* histogram; HeatmapView* heatmap; /* Setup data providers for Cpu graph */ m_cpuGraph->setProfile(profile); histogram = (HistogramView*)m_cpuGraph->view(); frameAxis = (FrameAxisWidget*)m_cpuGraph->axis(GraphWidget::AxisTop); histogram->setDataProvider(new CallDurationDataProvider(profile, false)); frameAxis->setDataProvider(new FrameCallDataProvider(profile)); /* Setup data provider for Gpu graph */ m_gpuGraph->setProfile(profile); histogram = (HistogramView*)m_gpuGraph->view(); frameAxis = (FrameAxisWidget*)m_gpuGraph->axis(GraphWidget::AxisTop); histogram->setDataProvider(new CallDurationDataProvider(profile, true)); frameAxis->setDataProvider(new FrameCallDataProvider(profile)); /* Setup data provider for heatmap timeline */ heatmap = (HeatmapView*)m_timeline->view(); frameAxis = (FrameAxisWidget*)m_timeline->axis(GraphWidget::AxisTop); programAxis = (HeatmapVerticalAxisWidget*)m_timeline->axis(GraphWidget::AxisLeft); heatmap->setDataProvider(new ProfileHeatmapDataProvider(profile)); frameAxis->setDataProvider(new FrameTimeDataProvider(profile)); programAxis->setDataProvider(new ProfileHeatmapDataProvider(profile)); /* Setup data model for table view */ ProfileTableModel* model = new ProfileTableModel(m_table); model->setProfile(profile); delete m_table->model(); m_table->setModel(model); m_table->update(QModelIndex()); m_table->sortByColumn(2, Qt::DescendingOrder); m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); m_table->resizeColumnsToContents(); /* Reset selection */ SelectionState emptySelection; emptySelection.type = SelectionState::None; m_cpuGraph->setSelection(emptySelection); m_gpuGraph->setSelection(emptySelection); m_timeline->setSelection(emptySelection); } delete m_profile; m_profile = profile; } void ProfileDialog::graphSelectionChanged(SelectionState state) { ProfileTableModel* model = (ProfileTableModel*)m_table->model(); if (!model) { return; } if (state.type == SelectionState::None) { model->selectNone(); } else if (state.type == SelectionState::Horizontal) { model->selectTime(state.start, state.end); } else if (state.type == SelectionState::Vertical) { model->selectProgram(state.start); } m_table->reset(); if (state.type == SelectionState::Vertical) { m_table->selectRow(model->getRowIndex(state.start)); } } #include "profiledialog.moc" tmpNnpnZF/gui/pixelwidget.h0000664000175000017500000000707412543167424015256 0ustar chrischris/** * The source code is based on qpixeltool.h. * Original license follows. */ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the tools applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #pragma once #include #include class PixelWidget : public QWidget { Q_OBJECT public: PixelWidget(QWidget *parent = 0); ~PixelWidget(); void setSurface(const QImage &image); QColor colorAtCurrentPosition() const; signals: void zoomChanged(int); void mousePosition(int x, int y); void gridGeometry(const QRect &rect); public: void timerEvent(QTimerEvent *event); void paintEvent(QPaintEvent *event); void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); void resizeEvent(QResizeEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void contextMenuEvent(QContextMenuEvent *event); QSize sizeHint() const; public slots: void setZoom(int zoom); void setGridSize(int gridSize); void toggleGrid(); void copyToClipboard(); void saveToFile(); void increaseGridSize() { setGridSize(m_gridSize + 1); } void decreaseGridSize() { setGridSize(m_gridSize - 1); } void increaseZoom() { setZoom(m_zoom + 1); } void decreaseZoom() { setZoom(m_zoom - 1); } private: void startGridSizeVisibleTimer(); double zoomValue() const { return m_zoom; } bool m_displayGridSize; bool m_mouseDown; int m_gridActive; int m_zoom; int m_gridSize; int m_displayGridSizeId; QPoint m_lastMousePos; QPoint m_dragStart; QPoint m_dragCurrent; QImage m_surface; QSize m_initialSize; QColor m_currentColor; }; tmpNnpnZF/gui/mainwindow.h0000664000175000017500000001102312543167424015072 0ustar chrischris#pragma once #include "ui_mainwindow.h" #include "trace_api.hpp" #include "apitrace.h" #include #include #include #include class ApiTrace; class ApiTraceCall; class ApiTraceEvent; class ApiTraceFilter; class ApiTraceFrame; class ApiTraceModel; class ApiTraceState; class ArgumentsEditor; class JumpWidget; class QModelIndex; class QProgressBar; class QTreeWidgetItem; class QUrl; struct ApiTraceError; class Retracer; class SearchWidget; class ShadersSourceWidget; class TraceProcess; class TrimProcess; class ProfileDialog; class VertexDataInterpreter; namespace trace { struct Profile; } class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); ~MainWindow(); public slots: void loadTrace(const QString &fileName, int callNum = -1); void setRemoteTarget(const QString &host); private slots: void callItemSelected(const QModelIndex &index); void callItemActivated(const QModelIndex &index); void createTrace(); void openTrace(); void saveTrace(); void pullTrace(); void pushTrace(); void linkTrace(); void retraceOnAndroid(bool android); void replayStart(); void replayProfile(); void replayStop(); void replayFinished(const QString &message); void replayStateFound(ApiTraceState *state); void replayProfileFound(trace::Profile *state); void replayThumbnailsFound(const ImageHash &thumbnails); void replayError(const QString &msg); void startedLoadingTrace(); void loadProgess(int percent); void finishedLoadingTrace(); void lookupState(); void showThumbnails(); void trim(); void showSettings(); void openHelp(const QUrl &url); void showSurfacesMenu(const QPoint &pos); void showSelectedSurface(); void saveSelectedSurface(); void exportBufferData(); void slotGoTo(); void slotJumpTo(int callNum); void createdTrace(const QString &path); void traceError(const QString &msg); void createdTrim(const QString &path); void trimError(const QString &msg); void slotSearch(); void slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity); void slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity); void fillState(bool nonDefaults); void customContextMenuRequested(QPoint pos); void editCall(); void slotStartedSaving(); void slotSaved(); void slotGoFrameStart(); void slotGoFrameEnd(); void slotTraceChanged(ApiTraceEvent *event); void slotRetraceErrors(const QList &errors); void slotErrorSelected(QTreeWidgetItem *current); void slotSearchResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call); void slotFoundFrameStart(ApiTraceFrame *frame); void slotFoundFrameEnd(ApiTraceFrame *frame); void slotJumpToResult(ApiTraceCall *call); void replayTrace(bool dumpState, bool dumpThumbnails); private: void initObjects(); void initConnections(); void initRetraceConnections(); void updateActionsState(bool traceLoaded, bool stopped = true); void newTraceFile(const QString &fileName); void trimEvent(); void fillStateForFrame(); /* there's a difference between selected frame/call and * current call/frame. the former implies actual selection * the latter might be just a highlight, e.g. during searching */ ApiTraceFrame *selectedFrame() const; ApiTraceCall *selectedCall() const; ApiTraceFrame *currentFrame() const; ApiTraceCall *currentCall() const; static void thumbnailCallback(void *object, int thumbnailIdx); void linkLocalAndroidTrace(const QString &localFile, const QString &deviceFile); QString linkedAndroidTrace(const QString &localFile); protected: virtual void closeEvent(QCloseEvent * event); private: Ui_MainWindow m_ui; ShadersSourceWidget *m_sourcesWidget; trace::API m_api; ApiTrace *m_trace; ApiTraceModel *m_model; ApiTraceFilter *m_proxyModel; int m_initalCallNum; QProgressBar *m_progressBar; ApiTraceEvent *m_selectedEvent; ApiTraceEvent *m_stateEvent; ApiTraceEvent *m_trimEvent; Retracer *m_retracer; VertexDataInterpreter *m_vdataInterpreter; JumpWidget *m_jumpWidget; SearchWidget *m_searchWidget; TraceProcess *m_traceProcess; TrimProcess *m_trimProcess; ArgumentsEditor *m_argsEditor; ApiTraceEvent *m_nonDefaultsLookupEvent; ProfileDialog* m_profileDialog; QString m_androidFilePath; }; tmpNnpnZF/gui/CMakeLists.txt0000664000175000017500000000653112543167424015315 0ustar chrischrisadd_definitions (-DQT_FORCE_ASSERTS) if (APPLE) # Recent builds of Qt no longer support i386 architecture set (CMAKE_OSX_ARCHITECTURES "x86_64") endif() add_library (qubjson STATIC qubjson.cpp ) add_executable (qubjson_test qubjson_test.cpp) target_link_libraries (qubjson_test qubjson gtest) add_dependencies (check qubjson_test) add_test (NAME qubjson_test COMMAND $) set(qapitrace_SRCS androiddevicedialog.cpp androidfiledialog.cpp androidretracer.cpp androidutils.cpp apisurface.cpp apitrace.cpp apicalldelegate.cpp apitracecall.cpp apitracefilter.cpp apitracemodel.cpp argumentseditor.cpp glsledit.cpp imageviewer.cpp jumpwidget.cpp mainwindow.cpp main.cpp pixelwidget.cpp profiledialog.cpp profiletablemodel.cpp retracer.cpp saverthread.cpp searchwidget.cpp settingsdialog.cpp shaderssourcewidget.cpp tracedialog.cpp traceloader.cpp traceprocess.cpp trimprocess.cpp vertexdatainterpreter.cpp graphing/frameaxiswidget.cpp graphing/graphwidget.cpp graphing/graphaxiswidget.cpp graphing/graphview.cpp graphing/heatmapview.cpp graphing/heatmapverticalaxiswidget.cpp graphing/histogramview.cpp graphing/timeaxiswidget.cpp ) qt5_add_resources(qapitrace_SRCS qapitrace.qrc) set(qapitrace_UIS ui/androidfiledialog.ui ui/androiddevicedialog.ui ui/argumentseditor.ui ui/imageviewer.ui ui/jumpwidget.ui ui/mainwindow.ui ui/profiledialog.ui ui/profilereplaydialog.ui ui/retracerdialog.ui ui/settings.ui ui/tracedialog.ui ui/searchwidget.ui ui/shaderssourcewidget.ui ) set (CMAKE_AUTOMOC ON) # Silence `Note: No relevant classes found. No output generated.` set (CMAKE_AUTOMOC_MOC_OPTIONS "-nn") QT5_WRAP_UI(qapitrace_UIS_H ${qapitrace_UIS}) set(CMAKE_INCLUDE_CURRENT_DIR ON) #add_app_icon(qapitrace_SRCS ../icons/hi*-qapitrace.png) include_directories( ${CMAKE_SOURCE_DIR} # for image/* ) add_executable (qapitrace ${qapitrace_SRCS} ${qapitrace_UIS_H}) # Avoid qt5_use_modules. See also: # - https://bugreports.qt.io/browse/QTBUG-39457 # - http://doc.qt.io/qt-5/cmake-manual.html # - http://www.kdab.com/using-cmake-with-qt-5/ if (Qt5Core_VERSION_STRING VERSION_LESS 5.2.0) qt5_use_modules (qubjson Widgets) qt5_use_modules (qubjson_test Widgets) qt5_use_modules (qapitrace Widgets WebKitWidgets) else () target_link_libraries (qubjson Qt5::Widgets) target_link_libraries (qubjson_test Qt5::Widgets) target_link_libraries (qapitrace Qt5::Widgets Qt5::WebKitWidgets) endif () target_link_libraries (qapitrace qubjson image common ${ZLIB_LIBRARIES} ${SNAPPY_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) if (WIN32 AND NOT (CMAKE_BUILD_TYPE STREQUAL "Debug")) # Use Windows subsystem (i.e., no console). set_target_properties (qapitrace PROPERTIES CMAKE_WIN32_EXECUTABLE TRUE) if (MSVC) # When the Windows subsystem is chosen by default MSVC expects WinMain() # entry point, but we rather use plain old main() everywhere. set_target_properties (qapitrace PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup") endif () endif () ########### install files ############### install (TARGETS qapitrace RUNTIME DESTINATION bin) install_pdb (qapitrace RUNTIME DESTINATION bin) #install (FILES qapitrace.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) tmpNnpnZF/gui/retracer.cpp0000664000175000017500000003365612543167424015100 0ustar chrischris#include "retracer.h" #include "apitracecall.h" #include "thumbnail.h" #include "image/image.hpp" #include "trace_profiler.hpp" #include #include #include #include #include "qubjson.h" /** * Wrapper around a QProcess which enforces IO to block . * * Several QIODevice users (notably QJSON) expect blocking semantics, e.g., * they expect that QIODevice::read() will blocked until the requested ammount * of bytes is read or end of file is reached. But by default QProcess, does * not block. And passing QIODevice::Unbuffered mitigates but does not fully * address the problem either. * * This class wraps around QProcess, providing QIODevice interface, while * ensuring that all reads block. * * This class also works around a bug in QProcess::atEnd() implementation. * * See also: * - http://qt-project.org/wiki/Simple_Crypt_IO_Device * - http://qt-project.org/wiki/Custom_IO_Device */ class BlockingIODevice : public QIODevice { /* We don't use the Q_OBJECT in this class given we don't declare any * signals and slots or use any other services provided by Qt's meta-object * system. */ public: BlockingIODevice(QProcess * io); bool isSequential() const; bool atEnd() const; bool waitForReadyRead(int msecs = -1); protected: qint64 readData(char * data, qint64 maxSize); qint64 writeData(const char * data, qint64 maxSize); private: QProcess *m_device; }; BlockingIODevice::BlockingIODevice(QProcess * io) : m_device(io) { /* * We pass QIODevice::Unbuffered to prevent the base QIODevice class to do * its own buffering on top of the overridden readData() method. * * The only buffering used will be to satisfy QIODevice::peek() and * QIODevice::ungetChar(). */ setOpenMode(ReadOnly | Unbuffered); } bool BlockingIODevice::isSequential() const { return true; } bool BlockingIODevice::atEnd() const { /* * XXX: QProcess::atEnd() documentation is wrong -- it will return true * even when the process is running --, so we try to workaround that here. */ if (m_device->atEnd()) { if (m_device->state() == QProcess::Running) { if (!m_device->waitForReadyRead(-1)) { return true; } } } return false; } bool BlockingIODevice::waitForReadyRead(int msecs) { Q_UNUSED(msecs); return true; } qint64 BlockingIODevice::readData(char * data, qint64 maxSize) { qint64 bytesToRead = maxSize; qint64 readSoFar = 0; do { qint64 chunkSize = m_device->read(data + readSoFar, bytesToRead); if (chunkSize < 0) { if (readSoFar) { return readSoFar; } else { return chunkSize; } } Q_ASSERT(chunkSize <= bytesToRead); bytesToRead -= chunkSize; readSoFar += chunkSize; if (bytesToRead) { if (!m_device->waitForReadyRead(-1)) { qDebug() << "waitForReadyRead failed\n"; break; } } } while(bytesToRead); return readSoFar; } qint64 BlockingIODevice::writeData(const char * data, qint64 maxSize) { Q_ASSERT(false); return -1; } Q_DECLARE_METATYPE(QList); Retracer::Retracer(QObject *parent) : QThread(parent), m_benchmarking(false), m_doubleBuffered(true), m_singlethread(false), m_useCoreProfile(false), m_captureState(false), m_captureThumbnails(false), m_captureCall(0), m_profileGpu(false), m_profileCpu(false), m_profilePixels(false), m_profileMemory(false) { qRegisterMetaType >(); } QString Retracer::fileName() const { return m_fileName; } void Retracer::setFileName(const QString &name) { m_fileName = name; } QString Retracer::remoteTarget() const { return m_remoteTarget; } void Retracer::setRemoteTarget(const QString &host) { m_remoteTarget = host; } void Retracer::setAPI(trace::API api) { m_api = api; } bool Retracer::isBenchmarking() const { return m_benchmarking; } void Retracer::setBenchmarking(bool bench) { m_benchmarking = bench; } bool Retracer::isDoubleBuffered() const { return m_doubleBuffered; } void Retracer::setDoubleBuffered(bool db) { m_doubleBuffered = db; } bool Retracer::isSinglethread() const { return m_singlethread; } void Retracer::setSinglethread(bool singlethread) { m_singlethread = singlethread; } bool Retracer::isCoreProfile() const { return m_useCoreProfile; } void Retracer::setCoreProfile(bool coreprofile) { m_useCoreProfile = coreprofile; } bool Retracer::isProfilingGpu() const { return m_profileGpu; } bool Retracer::isProfilingCpu() const { return m_profileCpu; } bool Retracer::isProfilingPixels() const { return m_profilePixels; } bool Retracer::isProfilingMemory() const { return m_profileMemory; } bool Retracer::isProfiling() const { return m_profileGpu || m_profileCpu || m_profilePixels | m_profileMemory; } void Retracer::setProfiling(bool gpu, bool cpu, bool pixels, bool memory) { m_profileGpu = gpu; m_profileCpu = cpu; m_profilePixels = pixels; m_profileMemory = memory; } void Retracer::setCaptureAtCallNumber(qlonglong num) { m_captureCall = num; } qlonglong Retracer::captureAtCallNumber() const { return m_captureCall; } bool Retracer::captureState() const { return m_captureState; } void Retracer::setCaptureState(bool enable) { m_captureState = enable; } bool Retracer::captureThumbnails() const { return m_captureThumbnails; } void Retracer::setCaptureThumbnails(bool enable) { m_captureThumbnails = enable; } void Retracer::addThumbnailToCapture(qlonglong num) { if (!m_thumbnailsToCapture.contains(num)) { m_thumbnailsToCapture.append(num); } } void Retracer::resetThumbnailsToCapture() { m_thumbnailsToCapture.clear(); } QString Retracer::thumbnailCallSet() const { QString callSet; bool isFirst = true; foreach (qlonglong callIndex, m_thumbnailsToCapture) { // TODO: detect contiguous ranges if (!isFirst) { callSet.append(QLatin1String(",")); } else { isFirst = false; } //emit "callIndex" callSet.append(QString::number(callIndex)); } //qDebug() << QLatin1String("debug: call set to capture: ") << callSet; return callSet; } QStringList Retracer::retraceArguments() const { QStringList arguments; if (m_singlethread) { arguments << QLatin1String("--singlethread"); } if (m_useCoreProfile) { arguments << QLatin1String("--core"); } if (m_captureState) { arguments << QLatin1String("-D"); arguments << QString::number(m_captureCall); arguments << QLatin1String("--dump-format"); arguments << QLatin1String("ubjson"); } else if (m_captureThumbnails) { if (!m_thumbnailsToCapture.isEmpty()) { arguments << QLatin1String("-S"); arguments << thumbnailCallSet(); } arguments << QLatin1String("-s"); // emit snapshots arguments << QLatin1String("-"); // emit to stdout } else if (isProfiling()) { if (m_profileGpu) { arguments << QLatin1String("--pgpu"); } if (m_profileCpu) { arguments << QLatin1String("--pcpu"); } if (m_profilePixels) { arguments << QLatin1String("--ppd"); } if (m_profileMemory) { arguments << QLatin1String("--pmem"); } } else { if (!m_doubleBuffered) { arguments << QLatin1String("--sb"); } if (m_benchmarking) { arguments << QLatin1String("-b"); } else { arguments << QLatin1String("-d"); } } return arguments; } /** * Starting point for the retracing thread. * * Overrides QThread::run(). */ void Retracer::run() { QString msg = QLatin1String("Replay finished!"); /* * Construct command line */ QString prog; QStringList arguments; switch (m_api) { case trace::API_GL: prog = QLatin1String("glretrace"); break; case trace::API_EGL: prog = QLatin1String("eglretrace"); break; case trace::API_DX: case trace::API_D3D7: case trace::API_D3D8: case trace::API_D3D9: case trace::API_DXGI: #ifdef Q_OS_WIN prog = QLatin1String("d3dretrace"); #else prog = QLatin1String("wine"); arguments << QLatin1String("d3dretrace.exe"); #endif break; default: emit finished(QLatin1String("Unsupported API")); return; } arguments << retraceArguments() << m_fileName; /* * Support remote execution on a separate target. */ if (m_remoteTarget.length() != 0) { arguments.prepend(prog); arguments.prepend(m_remoteTarget); prog = QLatin1String("ssh"); } /* * Start the process. */ { QDebug debug(QtDebugMsg); debug << "Running:"; debug << prog; foreach (const QString &argument, arguments) { debug << argument; } } QProcess process; process.start(prog, arguments, QIODevice::ReadOnly); if (!process.waitForStarted(-1)) { emit finished(QLatin1String("Could not start process")); return; } /* * Process standard output */ ImageHash thumbnails; QVariantMap parsedJson; trace::Profile* profile = NULL; process.setReadChannel(QProcess::StandardOutput); if (process.waitForReadyRead(-1)) { BlockingIODevice io(&process); if (m_captureState) { parsedJson = decodeUBJSONObject(&io).toMap(); process.waitForFinished(-1); } else if (m_captureThumbnails) { /* * Parse concatenated PNM images from output. */ while (!io.atEnd()) { image::PNMInfo info; char header[512]; qint64 headerSize = 0; int headerLines = 3; // assume no optional comment line for (int headerLine = 0; headerLine < headerLines; ++headerLine) { qint64 headerRead = io.readLine(&header[headerSize], sizeof(header) - headerSize); // if header actually contains optional comment line, ... if (headerLine == 1 && header[headerSize] == '#') { ++headerLines; } headerSize += headerRead; } const char *headerEnd = image::readPNMHeader(header, headerSize, info); // if invalid PNM header was encountered, ... if (headerEnd == NULL || info.channelType != image::TYPE_UNORM8) { qDebug() << "error: invalid snapshot stream encountered"; break; } unsigned channels = info.channels; unsigned width = info.width; unsigned height = info.height; // qDebug() << "channels: " << channels << ", width: " << width << ", height: " << height"; QImage snapshot = QImage(width, height, channels == 1 ? QImage::Format_Mono : QImage::Format_RGB888); int rowBytes = channels * width; for (int y = 0; y < height; ++y) { unsigned char *scanLine = snapshot.scanLine(y); qint64 readBytes = io.read((char *) scanLine, rowBytes); Q_ASSERT(readBytes == rowBytes); (void)readBytes; } QImage thumb = thumbnail(snapshot); thumbnails.insert(info.commentNumber, thumb); } Q_ASSERT(process.state() != QProcess::Running); } else if (isProfiling()) { profile = new trace::Profile(); while (!io.atEnd()) { char line[256]; qint64 lineLength; lineLength = io.readLine(line, 256); if (lineLength == -1) break; trace::Profiler::parseLine(line, profile); } } else { QByteArray output; output = process.readAllStandardOutput(); if (output.length() < 80) { msg = QString::fromUtf8(output); } } } /* * Wait for process termination */ process.waitForFinished(-1); if (process.exitStatus() != QProcess::NormalExit) { msg = QLatin1String("Process crashed"); } else if (process.exitCode() != 0) { msg = QLatin1String("Process exited with non zero exit code"); } /* * Parse errors. */ QList errors; process.setReadChannel(QProcess::StandardError); QRegExp regexp("(^\\d+): +(\\b\\w+\\b): ([^\\r\\n]+)[\\r\\n]*$"); while (!process.atEnd()) { QString line = process.readLine(); if (regexp.indexIn(line) != -1) { ApiTraceError error; error.callIndex = regexp.cap(1).toInt(); error.type = regexp.cap(2); error.message = regexp.cap(3); errors.append(error); } else if (!errors.isEmpty()) { // Probably a multiligne message ApiTraceError &previous = errors.last(); if (line.endsWith("\n")) { line.chop(1); } previous.message.append('\n'); previous.message.append(line); } } /* * Emit signals */ if (m_captureState) { ApiTraceState *state = new ApiTraceState(parsedJson); emit foundState(state); } if (m_captureThumbnails && !thumbnails.isEmpty()) { emit foundThumbnails(thumbnails); } if (isProfiling() && profile) { emit foundProfile(profile); } if (!errors.isEmpty()) { emit retraceErrors(errors); } emit finished(msg); } #include "retracer.moc" tmpNnpnZF/gui/saverthread.h0000664000175000017500000000105612543167424015233 0ustar chrischris#pragma once #include "apitrace.h" #include #include class ApiTraceCall; class ApiTraceFrame; class SaverThread : public QThread { Q_OBJECT public: SaverThread(QObject *parent=0); public slots: void saveFile(const QString &saveFileName, const QString &readFileName, const QSet &editedCalls); signals: void traceSaved(); protected: virtual void run(); private: QString m_readFileName; QString m_writeFileName; QSet m_editedCalls; }; tmpNnpnZF/gui/profiledialog.h0000664000175000017500000000103212543167424015535 0ustar chrischris#pragma once #include "ui_profiledialog.h" #include namespace trace { struct Profile; } class ProfileDialog : public QDialog, public Ui_ProfileDialog { Q_OBJECT public: ProfileDialog(QWidget *parent = 0); ~ProfileDialog(); void setProfile(trace::Profile* profile); void showCall(int call); public slots: void tableDoubleClicked(const QModelIndex& index); void graphSelectionChanged(SelectionState state); signals: void jumpToCall(int call); private: trace::Profile *m_profile; }; tmpNnpnZF/gui/thumbnail.h0000664000175000017500000000042312543167424014703 0ustar chrischris#pragma once #define THUMBNAIL_SIZE 64 #include inline QImage thumbnail(const QImage &image, Qt::TransformationMode transformationMode = Qt::FastTransformation) { return image.scaled(THUMBNAIL_SIZE, THUMBNAIL_SIZE, Qt::KeepAspectRatio, transformationMode); } tmpNnpnZF/gui/androidretracer.h0000664000175000017500000000104412543167424016070 0ustar chrischris#pragma once #include #include #include "androidutils.h" #include "retracer.h" class AndroidRetracer : public Retracer { Q_OBJECT public: AndroidRetracer(QObject *parent); void setAndroidFileName(const QString &fileName); signals: void statusMessage(const QString &message); protected: void run(); private slots: bool setup(QString *error); private: QString m_androdiFileName; QString m_serialNumber; AndroidUtils m_androidUtils; int m_stdoutPort; int m_stderrPort; }; tmpNnpnZF/gui/profiling.h0000664000175000017500000000671712543167424014725 0ustar chrischris#pragma once #include #include #include "trace_profiler.hpp" class Profiling { public: /** * Select and show the call in main window. */ static void jumpToCall(int index); /** * Convert a CPU / GPU time to a textual representation. * This includes automatic unit selection. */ static QString getTimeString(int64_t time, int64_t unitTime = 0) { QString text; QString unit = " ns"; double unitScale = 1; if (unitTime == 0) { unitTime = time; } if (unitTime >= 60e9) { int64_t mins = time / 60e9; text += QString("%1 m ").arg(mins); time -= mins * 60e9; unit = " s"; unitScale = 1e9; } else if (unitTime >= 1e9) { unit = " s"; unitScale = 1e9; } else if (unitTime >= 1e6) { unit = " ms"; unitScale = 1e6; } else if (unitTime >= 1e3) { unit = QString::fromUtf8(" µs"); unitScale = 1e3; } /* 3 decimal places */ text += QString("%1").arg(time / unitScale, 0, 'f', 3); /* Remove trailing 0 */ while(text.endsWith('0')) text.truncate(text.length() - 1); /* Remove trailing decimal point */ if (text.endsWith(QLocale::system().decimalPoint())) text.truncate(text.length() - 1); return text + unit; } template static typename std::vector::const_iterator binarySearchTimespan( typename std::vector::const_iterator begin, typename std::vector::const_iterator end, int64_t time, bool nearest = false) { int lower = 0; int upper = end - begin; int pos = (lower + upper) / 2; typename std::vector::const_iterator itr = begin + pos; while (!((*itr).*mem_ptr_start <= time && (*itr).*mem_ptr_start + (*itr).*mem_ptr_dura > time) && (lower <= upper)) { if ((*itr).*mem_ptr_start > time) { upper = pos - 1; } else { lower = pos + 1; } pos = (lower + upper) / 2; itr = begin + pos; } if (nearest || lower <= upper) { return itr; } else { return end; } } static std::vector::const_iterator binarySearchTimespanIndexed( const std::vector& calls, std::vector::const_iterator begin, std::vector::const_iterator end, int64_t time, bool nearest = false) { int lower = 0; int upper = end - begin - 1; int pos = (lower + upper) / 2; std::vector::const_iterator itr = begin + pos; while (lower <= upper) { const trace::Profile::Call& call = calls[*itr]; if (call.gpuStart <= time && call.gpuStart + call.gpuDuration > time) { break; } if (call.gpuStart > time) { upper = pos - 1; } else { lower = pos + 1; } pos = (lower + upper) / 2; itr = begin + pos; } if (nearest || lower <= upper) { return itr; } else { return end; } } }; tmpNnpnZF/gui/apitrace.cpp0000664000175000017500000003564012543167424015054 0ustar chrischris#include "apitrace.h" #include "traceloader.h" #include "saverthread.h" #include #include #include #include ApiTrace::ApiTrace() : m_needsSaving(false) { m_loader = new TraceLoader(); connect(this, SIGNAL(loadTrace(QString)), m_loader, SLOT(loadTrace(QString))); connect(this, SIGNAL(requestFrame(ApiTraceFrame*)), m_loader, SLOT(loadFrame(ApiTraceFrame*))); connect(m_loader, SIGNAL(framesLoaded(const QList)), this, SLOT(addFrames(const QList))); connect(m_loader, SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector, QVector,quint64)), this, SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector,QVector,quint64))); connect(m_loader, SIGNAL(guessedApi(int)), this, SLOT(guessedApi(int))); connect(this, SIGNAL(loaderSearch(ApiTrace::SearchRequest)), m_loader, SLOT(search(ApiTrace::SearchRequest))); connect(m_loader, SIGNAL(searchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)), this, SLOT(loaderSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*))); connect(this, SIGNAL(loaderFindFrameStart(ApiTraceFrame*)), m_loader, SLOT(findFrameStart(ApiTraceFrame*))); connect(this, SIGNAL(loaderFindFrameEnd(ApiTraceFrame*)), m_loader, SLOT(findFrameEnd(ApiTraceFrame*))); connect(m_loader, SIGNAL(foundFrameStart(ApiTraceFrame*)), this, SIGNAL(foundFrameStart(ApiTraceFrame*))); connect(m_loader, SIGNAL(foundFrameEnd(ApiTraceFrame*)), this, SIGNAL(foundFrameEnd(ApiTraceFrame*))); connect(this, SIGNAL(loaderFindCallIndex(int)), m_loader, SLOT(findCallIndex(int))); connect(m_loader, SIGNAL(foundCallIndex(ApiTraceCall*)), this, SIGNAL(foundCallIndex(ApiTraceCall*))); connect(m_loader, SIGNAL(startedParsing()), this, SIGNAL(startedLoadingTrace())); connect(m_loader, SIGNAL(parsed(int)), this, SIGNAL(loaded(int))); connect(m_loader, SIGNAL(finishedParsing()), this, SIGNAL(finishedLoadingTrace())); m_saver = new SaverThread(this); connect(m_saver, SIGNAL(traceSaved()), this, SLOT(slotSaved())); connect(m_saver, SIGNAL(traceSaved()), this, SIGNAL(saved())); m_loaderThread = new QThread(); m_loader->moveToThread(m_loaderThread); m_loaderThread->start(); } ApiTrace::~ApiTrace() { m_loaderThread->quit(); m_loaderThread->deleteLater(); qDeleteAll(m_frames); delete m_loader; delete m_saver; } bool ApiTrace::isEmpty() const { return m_frames.isEmpty(); } QString ApiTrace::fileName() const { if (edited()) { return m_tempFileName; } return m_fileName; } const QList & ApiTrace::frames() const { return m_frames; } ApiTraceFrame * ApiTrace::frameAt(int idx) const { return m_frames.value(idx); } int ApiTrace::numFrames() const { return m_frames.count(); } int ApiTrace::numCallsInFrame(int idx) const { const ApiTraceFrame *frame = frameAt(idx); if (frame) { return frame->numTotalCalls(); } else { return 0; } } void ApiTrace::setFileName(const QString &name) { if (m_fileName != name) { m_fileName = name; m_tempFileName = QString(); m_frames.clear(); m_errors.clear(); m_editedCalls.clear(); m_queuedErrors.clear(); m_needsSaving = false; emit invalidated(); emit loadTrace(m_fileName); } } void ApiTrace::addFrames(const QList &frames) { int currentFrames = m_frames.count(); int numNewFrames = frames.count(); emit beginAddingFrames(currentFrames, numNewFrames); m_frames += frames; foreach(ApiTraceFrame *frame, frames) { frame->setParentTrace(this); } emit endAddingFrames(); } ApiTraceCall * ApiTrace::callWithIndex(int idx) const { for (int i = 0; i < m_frames.count(); ++i) { ApiTraceCall *call = m_frames[i]->callWithIndex(idx); if (call) { return call; } } return NULL; } ApiTraceState ApiTrace::defaultState() const { ApiTraceFrame *frame = frameAt(0); if (!frame || !frame->isLoaded() || frame->isEmpty()) { return ApiTraceState(); } ApiTraceCall *firstCall = frame->calls().first(); if (!firstCall->hasState()) { return ApiTraceState(); } return *firstCall->state(); } void ApiTrace::callEdited(ApiTraceCall *call) { if (!m_editedCalls.contains(call)) { // Lets generate a temp filename QFileInfo fileInfo(m_fileName); QString tempPath = QDir::tempPath(); m_tempFileName = QDir::tempPath(); m_tempFileName += QDir::separator(); m_tempFileName += fileInfo.fileName(); m_tempFileName += QString::fromLatin1(".edited"); } m_editedCalls.insert(call); m_needsSaving = true; emit changed(call); } void ApiTrace::callReverted(ApiTraceCall *call) { m_editedCalls.remove(call); if (m_editedCalls.isEmpty()) { m_needsSaving = false; } emit changed(call); } bool ApiTrace::edited() const { return !m_editedCalls.isEmpty(); } bool ApiTrace::needsSaving() const { return m_needsSaving; } void ApiTrace::save() { QFileInfo fi(m_tempFileName); QDir dir; emit startedSaving(); dir.mkpath(fi.absolutePath()); m_saver->saveFile(m_tempFileName, m_fileName, m_editedCalls); } void ApiTrace::slotSaved() { m_needsSaving = false; } bool ApiTrace::isSaving() const { return m_saver->isRunning(); } bool ApiTrace::hasErrors() const { return !m_errors.isEmpty() || !m_queuedErrors.isEmpty(); } void ApiTrace::loadFrame(ApiTraceFrame *frame) { if (!isFrameLoading(frame)) { Q_ASSERT(!frame->isLoaded()); m_loadingFrames.insert(frame); emit requestFrame(frame); } } void ApiTrace::guessedApi(int api) { m_api = static_cast(api); } trace::API ApiTrace::api() const { return m_api; } void ApiTrace::finishedParsing() { if (!m_frames.isEmpty()) { ApiTraceFrame *firstFrame = m_frames[0]; if (firstFrame && !firstFrame->isLoaded()) { loadFrame(firstFrame); } } } void ApiTrace::loaderFrameLoaded(ApiTraceFrame *frame, const QVector &topLevelItems, const QVector &calls, quint64 binaryDataSize) { Q_ASSERT(frame->numChildrenToLoad() >= calls.size()); if (!frame->isLoaded()) { emit beginLoadingFrame(frame, calls.size()); frame->setCalls(topLevelItems, calls, binaryDataSize); emit endLoadingFrame(frame); m_loadingFrames.remove(frame); } if (!m_queuedErrors.isEmpty()) { QList< QPair >::iterator itr; for (itr = m_queuedErrors.begin(); itr != m_queuedErrors.end(); ++itr) { const ApiTraceError &error = (*itr).second; if ((*itr).first == frame) { ApiTraceCall *call = frame->callWithIndex(error.callIndex); if (!call) { continue; } call->setError(error.message); m_queuedErrors.erase(itr); if (call->hasError()) { m_errors.insert(call); } else { m_errors.remove(call); } emit changed(call); } } } } void ApiTrace::findNext(ApiTraceFrame *frame, ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) { ApiTraceCall *foundCall = 0; int frameIdx = m_frames.indexOf(frame); SearchRequest request(SearchRequest::Next, frame, from, str, sensitivity); if (frame->isLoaded()) { foundCall = frame->findNextCall(from, str, sensitivity); if (foundCall) { emit findResult(request, SearchResult_Found, foundCall); return; } //if the frame is loaded we already searched it above // so skip it frameIdx += 1; } //for the rest of the frames we search from beginning request.from = 0; for (int i = frameIdx; i < m_frames.count(); ++i) { ApiTraceFrame *frame = m_frames[i]; request.frame = frame; if (!frame->isLoaded()) { emit loaderSearch(request); return; } else { ApiTraceCall *call = frame->findNextCall(0, str, sensitivity); if (call) { emit findResult(request, SearchResult_Found, call); return; } } } emit findResult(request, SearchResult_Wrapped, 0); } void ApiTrace::findPrev(ApiTraceFrame *frame, ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) { ApiTraceCall *foundCall = 0; int frameIdx = m_frames.indexOf(frame); SearchRequest request(SearchRequest::Prev, frame, from, str, sensitivity); if (frame->isLoaded()) { foundCall = frame->findPrevCall(from, str, sensitivity); if (foundCall) { emit findResult(request, SearchResult_Found, foundCall); return; } //if the frame is loaded we already searched it above // so skip it frameIdx -= 1; } request.from = 0; for (int i = frameIdx; i >= 0; --i) { ApiTraceFrame *frame = m_frames[i]; request.frame = frame; if (!frame->isLoaded()) { emit loaderSearch(request); return; } else { ApiTraceCall *call = frame->findPrevCall(0, str, sensitivity); if (call) { emit findResult(request, SearchResult_Found, call); return; } } } emit findResult(request, SearchResult_Wrapped, 0); } void ApiTrace::loaderSearchResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call) { //qDebug()<<"Search result = "< #include class QShowEvent; class SearchWidget : public QWidget { Q_OBJECT public: SearchWidget(QWidget *parent=0); void setFound(bool f); void show(); signals: void searchNext(const QString &str, Qt::CaseSensitivity cs = Qt::CaseInsensitive); void searchPrev(const QString &str, Qt::CaseSensitivity cs = Qt::CaseInsensitive); private slots: void slotSearchNext(); void slotSearchPrev(); void slotCancel(); protected: virtual bool eventFilter(QObject *object, QEvent* event); virtual void showEvent(QShowEvent *event); private: Qt::CaseSensitivity caseSensitivity() const; private: Ui_SearchWidget m_ui; QPalette m_origPalette; }; tmpNnpnZF/gui/jumpwidget.h0000664000175000017500000000070412543167424015101 0ustar chrischris#pragma once #include "ui_jumpwidget.h" #include class QKeyEvent; class QShowEvent; class JumpWidget : public QWidget { Q_OBJECT public: JumpWidget(QWidget *parent = 0); signals: void jumpTo(int callNumber); private slots: void slotJump(); void slotCancel(); protected: virtual bool eventFilter(QObject *object, QEvent* event); virtual void showEvent(QShowEvent *event); private: Ui_JumpWidget m_ui; }; tmpNnpnZF/gui/qubjson.h0000664000175000017500000000255712543167424014413 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include class QIODevice; QVariant decodeUBJSONObject(QIODevice *io); tmpNnpnZF/gui/androiddevicedialog.h0000664000175000017500000000420212543167424016677 0ustar chrischris/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://www.qt.io/licensing. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #pragma once #include "androidutils.h" #include #include class AndroidDeviceModel; namespace Ui { class AndroidDeviceDialog; } class AndroidDeviceDialog : public QDialog { Q_OBJECT public: explicit AndroidDeviceDialog(QWidget *parent = 0); ~AndroidDeviceDialog(); AndroidDeviceInfo device(); void accept(); bool saveDeviceSelection(); private slots: void refreshDeviceList(); void clickedOnView(const QModelIndex &idx); void showHelp(); private: QVector connectedDevices(QString *error = 0); private: AndroidDeviceModel *m_model; Ui::AndroidDeviceDialog *m_ui; }; tmpNnpnZF/gui/glsledit.cpp0000664000175000017500000007417212543167424015076 0ustar chrischris/* This file is part of the Ofi Labs X2 project. Copyright (C) 2010 Ariya Hidayat Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "glsledit.h" #include class GLSLBlockData: public QTextBlockUserData { public: QList bracketPositions; }; class GLSLHighlighter : public QSyntaxHighlighter { public: GLSLHighlighter(QTextDocument *parent = 0); void setColor(GLSLEdit::ColorComponent component, const QColor &color); void mark(const QString &str, Qt::CaseSensitivity caseSensitivity); protected: void highlightBlock(const QString &text); private: QSet m_keywords; QSet m_types; QSet m_builtins; QHash m_colors; QString m_markString; Qt::CaseSensitivity m_markCaseSensitivity; }; GLSLHighlighter::GLSLHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) , m_markCaseSensitivity(Qt::CaseInsensitive) { // default color scheme m_colors[GLSLEdit::Normal] = QColor("#000000"); m_colors[GLSLEdit::Comment] = QColor("#808080"); m_colors[GLSLEdit::Number] = QColor("#008000"); m_colors[GLSLEdit::String] = QColor("#800000"); m_colors[GLSLEdit::Operator] = QColor("#808000"); m_colors[GLSLEdit::Identifier] = QColor("#000020"); m_colors[GLSLEdit::Keyword] = QColor("#000080"); m_colors[GLSLEdit::BuiltIn] = QColor("#008080"); m_colors[GLSLEdit::Marker] = QColor("#ffff00"); m_keywords << "attribute"; m_keywords << "const"; m_keywords << "uniform"; m_keywords << "varying"; m_keywords << "layout"; m_keywords << "centroid"; m_keywords << "flat"; m_keywords << "smooth"; m_keywords << "noperspective"; m_keywords << "patch"; m_keywords << "sample"; m_keywords << "break"; m_keywords << "continue"; m_keywords << "do"; m_keywords << "for"; m_keywords << "while"; m_keywords << "switch"; m_keywords << "case"; m_keywords << "default"; m_keywords << "if"; m_keywords << "else"; m_keywords << "subroutine"; m_keywords << "in"; m_keywords << "out"; m_keywords << "inout"; m_keywords << "true"; m_keywords << "false"; m_keywords << "invariant"; m_keywords << "discard"; m_keywords << "return"; m_keywords << "lowp"; m_keywords << "mediump"; m_keywords << "highp"; m_keywords << "precision"; m_keywords << "struct"; m_types << "float"; m_types << "double"; m_types << "int"; m_types << "void"; m_types << "bool"; m_types << "mat2"; m_types << "mat3"; m_types << "mat4"; m_types << "dmat2"; m_types << "dmat3"; m_types << "dmat4"; m_types << "mat2x2"; m_types << "mat2x3"; m_types << "mat2x4"; m_types << "dmat2x2"; m_types << "dmat2x3"; m_types << "dmat2x4"; m_types << "mat3x2"; m_types << "mat3x3"; m_types << "mat3x4"; m_types << "dmat3x2"; m_types << "dmat3x3"; m_types << "dmat3x4"; m_types << "mat4x2"; m_types << "mat4x3"; m_types << "mat4x4"; m_types << "dmat4x2"; m_types << "dmat4x3"; m_types << "dmat4x4"; m_types << "vec2"; m_types << "vec3"; m_types << "vec4"; m_types << "ivec2"; m_types << "ivec3"; m_types << "ivec4"; m_types << "bvec2"; m_types << "bvec3"; m_types << "bvec4"; m_types << "dvec2"; m_types << "dvec3"; m_types << "dvec4"; m_types << "uint"; m_types << "uvec2"; m_types << "uvec3"; m_types << "uvec4"; m_types << "sampler1D"; m_types << "sampler2D"; m_types << "sampler3D"; m_types << "samplerCube"; m_types << "sampler1DShadow"; m_types << "sampler2DShadow"; m_types << "samplerCubeShadow"; m_types << "sampler1DArray"; m_types << "sampler2DArray"; m_types << "sampler1DArrayShadow"; m_types << "sampler2DArrayShadow"; m_types << "isampler1D"; m_types << "isampler2D"; m_types << "isampler3D"; m_types << "isamplerCube"; m_types << "isampler1DArray"; m_types << "isampler2DArray"; m_types << "usampler1D"; m_types << "usampler2D"; m_types << "usampler3D"; m_types << "usamplerCube"; m_types << "usampler1DArray"; m_types << "usampler2DArray"; m_types << "sampler2DRect"; m_types << "sampler2DRectShadow"; m_types << "isampler2DRect"; m_types << "usampler2DRect"; m_types << "samplerBuffer"; m_types << "isamplerBuffer"; m_types << "usamplerBuffer"; m_types << "sampler2DMS"; m_types << "isampler2DMS"; m_types << "usampler2DMS"; m_types << "sampler2DMSArray"; m_types << "isampler2DMSArray"; m_types << "usampler2DMSArray"; m_types << "samplerCubeArray"; m_types << "samplerCubeArrayShadow"; m_types << "isamplerCubeArray"; m_types << "usamplerCubeArray"; } void GLSLHighlighter::setColor(GLSLEdit::ColorComponent component, const QColor &color) { m_colors[component] = color; rehighlight(); } void GLSLHighlighter::highlightBlock(const QString &text) { // parsing state enum { Start = 0, Number = 1, Identifier = 2, String = 3, Comment = 4, Regex = 5 }; QList bracketPositions; int blockState = previousBlockState(); int bracketLevel = blockState >> 4; int state = blockState & 15; if (blockState < 0) { bracketLevel = 0; state = Start; } int start = 0; int i = 0; while (i <= text.length()) { QChar ch = (i < text.length()) ? text.at(i) : QChar(); QChar next = (i < text.length() - 1) ? text.at(i + 1) : QChar(); switch (state) { case Start: start = i; if (ch.isSpace()) { ++i; } else if (ch.isDigit()) { ++i; state = Number; } else if (ch.isLetter() || ch == '_') { ++i; state = Identifier; } else if (ch == '\'' || ch == '\"') { ++i; state = String; } else if (ch == '/' && next == '*') { ++i; ++i; state = Comment; } else if (ch == '/' && next == '/') { i = text.length(); setFormat(start, text.length(), m_colors[GLSLEdit::Comment]); } else if (ch == '/' && next != '*') { ++i; state = Regex; } else { if (!QString("(){}[]").contains(ch)) setFormat(start, 1, m_colors[GLSLEdit::Operator]); if (ch =='{' || ch == '}') { bracketPositions += i; if (ch == '{') bracketLevel++; else bracketLevel--; } ++i; state = Start; } break; case Number: if (ch.isSpace() || !ch.isDigit()) { setFormat(start, i - start, m_colors[GLSLEdit::Number]); state = Start; } else { ++i; } break; case Identifier: if (ch.isSpace() || !(ch.isDigit() || ch.isLetter() || ch == '_')) { QString token = text.mid(start, i - start).trimmed(); if (m_keywords.contains(token)) setFormat(start, i - start, m_colors[GLSLEdit::Keyword]); else if (m_types.contains(token) || m_builtins.contains(token)) setFormat(start, i - start, m_colors[GLSLEdit::BuiltIn]); state = Start; } else { ++i; } break; case String: if (ch == text.at(start)) { QChar prev = (i > 0) ? text.at(i - 1) : QChar(); if (prev != '\\') { ++i; setFormat(start, i - start, m_colors[GLSLEdit::String]); state = Start; } else { ++i; } } else { ++i; } break; case Comment: if (ch == '*' && next == '/') { ++i; ++i; setFormat(start, i - start, m_colors[GLSLEdit::Comment]); state = Start; } else { ++i; } break; case Regex: if (ch == '/') { QChar prev = (i > 0) ? text.at(i - 1) : QChar(); if (prev != '\\') { ++i; setFormat(start, i - start, m_colors[GLSLEdit::String]); state = Start; } else { ++i; } } else { ++i; } break; default: state = Start; break; } } if (state == Comment) setFormat(start, text.length(), m_colors[GLSLEdit::Comment]); else state = Start; if (!m_markString.isEmpty()) { int pos = 0; int len = m_markString.length(); QTextCharFormat markerFormat; markerFormat.setBackground(m_colors[GLSLEdit::Marker]); markerFormat.setForeground(m_colors[GLSLEdit::Normal]); for (;;) { pos = text.indexOf(m_markString, pos, m_markCaseSensitivity); if (pos < 0) break; setFormat(pos, len, markerFormat); ++pos; } } if (!bracketPositions.isEmpty()) { GLSLBlockData *blockData = reinterpret_cast(currentBlock().userData()); if (!blockData) { blockData = new GLSLBlockData; currentBlock().setUserData(blockData); } blockData->bracketPositions = bracketPositions; } blockState = (state & 15) | (bracketLevel << 4); setCurrentBlockState(blockState); } void GLSLHighlighter::mark(const QString &str, Qt::CaseSensitivity caseSensitivity) { m_markString = str; m_markCaseSensitivity = caseSensitivity; rehighlight(); } struct BlockInfo { int position; int number; bool foldable: 1; bool folded : 1; }; Q_DECLARE_TYPEINFO(BlockInfo, Q_PRIMITIVE_TYPE); class SidebarWidget : public QWidget { public: SidebarWidget(GLSLEdit *editor); QVector lineNumbers; QColor backgroundColor; QColor lineNumberColor; QColor indicatorColor; QColor foldIndicatorColor; QFont font; int foldIndicatorWidth; QPixmap rightArrowIcon; QPixmap downArrowIcon; protected: void mousePressEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event); }; SidebarWidget::SidebarWidget(GLSLEdit *editor) : QWidget(editor) , foldIndicatorWidth(0) { backgroundColor = Qt::lightGray; lineNumberColor = Qt::black; indicatorColor = Qt::white; foldIndicatorColor = Qt::lightGray; } void SidebarWidget::mousePressEvent(QMouseEvent *event) { if (foldIndicatorWidth > 0) { int xofs = width() - foldIndicatorWidth; int lineNo = -1; int fh = fontMetrics().lineSpacing(); int ys = event->pos().y(); if (event->pos().x() > xofs) { foreach (BlockInfo ln, lineNumbers) if (ln.position < ys && (ln.position + fh) > ys) { if (ln.foldable) lineNo = ln.number; break; } } if (lineNo >= 0) { GLSLEdit *editor = qobject_cast(parent()); if (editor) editor->toggleFold(lineNo); } } } void SidebarWidget::paintEvent(QPaintEvent *event) { QPainter p(this); p.fillRect(event->rect(), backgroundColor); p.setPen(lineNumberColor); p.setFont(font); int fh = QFontMetrics(font).height(); foreach (BlockInfo ln, lineNumbers) p.drawText(0, ln.position, width() - 4 - foldIndicatorWidth, fh, Qt::AlignRight, QString::number(ln.number)); if (foldIndicatorWidth > 0) { int xofs = width() - foldIndicatorWidth; p.fillRect(xofs, 0, foldIndicatorWidth, height(), indicatorColor); // initialize (or recreate) the arrow icons whenever necessary if (foldIndicatorWidth != rightArrowIcon.width()) { QPainter iconPainter; QPolygonF polygon; int dim = foldIndicatorWidth; rightArrowIcon = QPixmap(dim, dim); rightArrowIcon.fill(Qt::transparent); downArrowIcon = rightArrowIcon; polygon << QPointF(dim * 0.4, dim * 0.25); polygon << QPointF(dim * 0.4, dim * 0.75); polygon << QPointF(dim * 0.8, dim * 0.5); iconPainter.begin(&rightArrowIcon); iconPainter.setRenderHint(QPainter::Antialiasing); iconPainter.setPen(Qt::NoPen); iconPainter.setBrush(foldIndicatorColor); iconPainter.drawPolygon(polygon); iconPainter.end(); polygon.clear(); polygon << QPointF(dim * 0.25, dim * 0.4); polygon << QPointF(dim * 0.75, dim * 0.4); polygon << QPointF(dim * 0.5, dim * 0.8); iconPainter.begin(&downArrowIcon); iconPainter.setRenderHint(QPainter::Antialiasing); iconPainter.setPen(Qt::NoPen); iconPainter.setBrush(foldIndicatorColor); iconPainter.drawPolygon(polygon); iconPainter.end(); } foreach (BlockInfo ln, lineNumbers) if (ln.foldable) { if (ln.folded) p.drawPixmap(xofs, ln.position, rightArrowIcon); else p.drawPixmap(xofs, ln.position, downArrowIcon); } } } static int findClosingMatch(const QTextDocument *doc, int cursorPosition) { QTextBlock block = doc->findBlock(cursorPosition); GLSLBlockData *blockData = reinterpret_cast(block.userData()); if (!blockData->bracketPositions.isEmpty()) { int depth = 1; while (block.isValid()) { blockData = reinterpret_cast(block.userData()); if (blockData && !blockData->bracketPositions.isEmpty()) { for (int c = 0; c < blockData->bracketPositions.count(); ++c) { int absPos = block.position() + blockData->bracketPositions.at(c); if (absPos <= cursorPosition) continue; if (doc->characterAt(absPos) == '{') depth++; else depth--; if (depth == 0) return absPos; } } block = block.next(); } } return -1; } static int findOpeningMatch(const QTextDocument *doc, int cursorPosition) { QTextBlock block = doc->findBlock(cursorPosition); GLSLBlockData *blockData = reinterpret_cast(block.userData()); if (!blockData->bracketPositions.isEmpty()) { int depth = 1; while (block.isValid()) { blockData = reinterpret_cast(block.userData()); if (blockData && !blockData->bracketPositions.isEmpty()) { for (int c = blockData->bracketPositions.count() - 1; c >= 0; --c) { int absPos = block.position() + blockData->bracketPositions.at(c); if (absPos >= cursorPosition - 1) continue; if (doc->characterAt(absPos) == '}') depth++; else depth--; if (depth == 0) return absPos; } } block = block.previous(); } } return -1; } class GLSLDocLayout: public QPlainTextDocumentLayout { public: GLSLDocLayout(QTextDocument *doc); void forceUpdate(); }; GLSLDocLayout::GLSLDocLayout(QTextDocument *doc) : QPlainTextDocumentLayout(doc) { } void GLSLDocLayout::forceUpdate() { emit documentSizeChanged(documentSize()); } class GLSLEditPrivate { public: GLSLEdit *editor; GLSLDocLayout *layout; GLSLHighlighter *highlighter; SidebarWidget *sidebar; bool showLineNumbers; bool textWrap; QColor cursorColor; bool bracketsMatching; QList matchPositions; QColor bracketMatchColor; QList errorPositions; QColor bracketErrorColor; bool codeFolding : 1; }; GLSLEdit::GLSLEdit(QWidget *parent) : QPlainTextEdit(parent) , d_ptr(new GLSLEditPrivate) { d_ptr->editor = this; d_ptr->layout = new GLSLDocLayout(document()); d_ptr->highlighter = new GLSLHighlighter(document()); d_ptr->sidebar = new SidebarWidget(this); d_ptr->showLineNumbers = true; d_ptr->textWrap = true; d_ptr->bracketsMatching = true; d_ptr->cursorColor = QColor(255, 255, 192); d_ptr->bracketMatchColor = QColor(180, 238, 180); d_ptr->bracketErrorColor = QColor(224, 128, 128); d_ptr->codeFolding = true; document()->setDocumentLayout(d_ptr->layout); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(updateCursor())); connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateSidebar())); connect(this, SIGNAL(updateRequest(QRect, int)), this, SLOT(updateSidebar(QRect, int))); #if defined(Q_OS_MAC) QFont textFont = font(); textFont.setPointSize(12); textFont.setFamily("Monaco"); setFont(textFont); #elif defined(Q_OS_UNIX) QFont textFont = font(); textFont.setFamily("Monospace"); setFont(textFont); #endif } GLSLEdit::~GLSLEdit() { delete d_ptr->layout; } void GLSLEdit::setColor(ColorComponent component, const QColor &color) { Q_D(GLSLEdit); if (component == Background) { QPalette pal = palette(); pal.setColor(QPalette::Base, color); setPalette(pal); d->sidebar->indicatorColor = color; updateSidebar(); } else if (component == Normal) { QPalette pal = palette(); pal.setColor(QPalette::Text, color); setPalette(pal); } else if (component == Sidebar) { d->sidebar->backgroundColor = color; updateSidebar(); } else if (component == LineNumber) { d->sidebar->lineNumberColor = color; updateSidebar(); } else if (component == Cursor) { d->cursorColor = color; updateCursor(); } else if (component == BracketMatch) { d->bracketMatchColor = color; updateCursor(); } else if (component == BracketError) { d->bracketErrorColor = color; updateCursor(); } else if (component == FoldIndicator) { d->sidebar->foldIndicatorColor = color; updateSidebar(); } else { d->highlighter->setColor(component, color); updateCursor(); } } bool GLSLEdit::isLineNumbersVisible() const { return d_ptr->showLineNumbers; } void GLSLEdit::setLineNumbersVisible(bool visible) { d_ptr->showLineNumbers = visible; updateSidebar(); } bool GLSLEdit::isTextWrapEnabled() const { return d_ptr->textWrap; } void GLSLEdit::setTextWrapEnabled(bool enable) { d_ptr->textWrap = enable; setLineWrapMode(enable ? WidgetWidth : NoWrap); } bool GLSLEdit::isBracketsMatchingEnabled() const { return d_ptr->bracketsMatching; } void GLSLEdit::setBracketsMatchingEnabled(bool enable) { d_ptr->bracketsMatching = enable; updateCursor(); } bool GLSLEdit::isCodeFoldingEnabled() const { return d_ptr->codeFolding; } void GLSLEdit::setCodeFoldingEnabled(bool enable) { d_ptr->codeFolding = enable; updateSidebar(); } static int findClosingConstruct(const QTextBlock &block) { if (!block.isValid()) return -1; GLSLBlockData *blockData = reinterpret_cast(block.userData()); if (!blockData) return -1; if (blockData->bracketPositions.isEmpty()) return -1; const QTextDocument *doc = block.document(); int offset = block.position(); foreach (int pos, blockData->bracketPositions) { int absPos = offset + pos; if (doc->characterAt(absPos) == '{') { int matchPos = findClosingMatch(doc, absPos); if (matchPos >= 0) return matchPos; } } return -1; } bool GLSLEdit::isFoldable(int line) const { int matchPos = findClosingConstruct(document()->findBlockByNumber(line - 1)); if (matchPos >= 0) { QTextBlock matchBlock = document()->findBlock(matchPos); if (matchBlock.isValid() && matchBlock.blockNumber() > line) return true; } return false; } bool GLSLEdit::isFolded(int line) const { QTextBlock block = document()->findBlockByNumber(line - 1); if (!block.isValid()) return false; block = block.next(); if (!block.isValid()) return false; return !block.isVisible(); } void GLSLEdit::fold(int line) { QTextBlock startBlock = document()->findBlockByNumber(line - 1); int endPos = findClosingConstruct(startBlock); if (endPos < 0) return; QTextBlock endBlock = document()->findBlock(endPos); QTextBlock block = startBlock.next(); while (block.isValid() && block != endBlock) { block.setVisible(false); block.setLineCount(0); block = block.next(); } document()->markContentsDirty(startBlock.position(), endPos - startBlock.position() + 1); updateSidebar(); update(); GLSLDocLayout *layout = reinterpret_cast(document()->documentLayout()); layout->forceUpdate(); } void GLSLEdit::unfold(int line) { QTextBlock startBlock = document()->findBlockByNumber(line - 1); int endPos = findClosingConstruct(startBlock); QTextBlock block = startBlock.next(); while (block.isValid() && !block.isVisible()) { block.setVisible(true); block.setLineCount(block.layout()->lineCount()); endPos = block.position() + block.length(); block = block.next(); } document()->markContentsDirty(startBlock.position(), endPos - startBlock.position() + 1); updateSidebar(); update(); GLSLDocLayout *layout = reinterpret_cast(document()->documentLayout()); layout->forceUpdate(); } void GLSLEdit::toggleFold(int line) { if (isFolded(line)) unfold(line); else fold(line); } void GLSLEdit::resizeEvent(QResizeEvent *e) { QPlainTextEdit::resizeEvent(e); updateSidebar(); } void GLSLEdit::wheelEvent(QWheelEvent *e) { if (e->modifiers() == Qt::ControlModifier) { int steps = e->delta() / 20; steps = qBound(-3, steps, 3); QFont textFont = font(); int pointSize = textFont.pointSize() + steps; pointSize = qBound(10, pointSize, 40); textFont.setPointSize(pointSize); setFont(textFont); updateSidebar(); e->accept(); return; } QPlainTextEdit::wheelEvent(e); } void GLSLEdit::updateCursor() { Q_D(GLSLEdit); if (isReadOnly()) { setExtraSelections(QList()); } else { d->matchPositions.clear(); d->errorPositions.clear(); if (d->bracketsMatching && textCursor().block().userData()) { QTextCursor cursor = textCursor(); int cursorPosition = cursor.position(); if (document()->characterAt(cursorPosition) == '{') { int matchPos = findClosingMatch(document(), cursorPosition); if (matchPos < 0) { d->errorPositions += cursorPosition; } else { d->matchPositions += cursorPosition; d->matchPositions += matchPos; } } if (document()->characterAt(cursorPosition - 1) == '}') { int matchPos = findOpeningMatch(document(), cursorPosition); if (matchPos < 0) { d->errorPositions += cursorPosition - 1; } else { d->matchPositions += cursorPosition - 1; d->matchPositions += matchPos; } } } QTextEdit::ExtraSelection highlight; highlight.format.setBackground(d->cursorColor); highlight.format.setProperty(QTextFormat::FullWidthSelection, true); highlight.cursor = textCursor(); highlight.cursor.clearSelection(); QList extraSelections; extraSelections.append(highlight); for (int i = 0; i < d->matchPositions.count(); ++i) { int pos = d->matchPositions.at(i); QTextEdit::ExtraSelection matchHighlight; matchHighlight.format.setBackground(d->bracketMatchColor); matchHighlight.cursor = textCursor(); matchHighlight.cursor.setPosition(pos); matchHighlight.cursor.setPosition(pos + 1, QTextCursor::KeepAnchor); extraSelections.append(matchHighlight); } for (int i = 0; i < d->errorPositions.count(); ++i) { int pos = d->errorPositions.at(i); QTextEdit::ExtraSelection errorHighlight; errorHighlight.format.setBackground(d->bracketErrorColor); errorHighlight.cursor = textCursor(); errorHighlight.cursor.setPosition(pos); errorHighlight.cursor.setPosition(pos + 1, QTextCursor::KeepAnchor); extraSelections.append(errorHighlight); } setExtraSelections(extraSelections); } } void GLSLEdit::updateSidebar(const QRect &rect, int d) { Q_UNUSED(rect) if (d != 0) updateSidebar(); } void GLSLEdit::updateSidebar() { Q_D(GLSLEdit); if (!d->showLineNumbers && !d->codeFolding) { d->sidebar->hide(); setViewportMargins(0, 0, 0, 0); d->sidebar->setGeometry(3, 0, 0, height()); return; } d->sidebar->foldIndicatorWidth = 0; d->sidebar->font = this->font(); d->sidebar->show(); int sw = 0; if (d->showLineNumbers) { int digits = 2; int maxLines = blockCount(); for (int number = 10; number < maxLines; number *= 10) ++digits; sw += fontMetrics().width('w') * digits; } if (d->codeFolding) { int fh = fontMetrics().lineSpacing(); int fw = fontMetrics().width('w'); d->sidebar->foldIndicatorWidth = qMax(fw, fh); sw += d->sidebar->foldIndicatorWidth; } setViewportMargins(sw, 0, 0, 0); d->sidebar->setGeometry(0, 0, sw, height()); QRectF sidebarRect(0, 0, sw, height()); QTextBlock block = firstVisibleBlock(); int index = 0; while (block.isValid()) { if (block.isVisible()) { QRectF rect = blockBoundingGeometry(block).translated(contentOffset()); if (sidebarRect.intersects(rect)) { if (d->sidebar->lineNumbers.count() >= index) d->sidebar->lineNumbers.resize(index + 1); d->sidebar->lineNumbers[index].position = rect.top(); d->sidebar->lineNumbers[index].number = block.blockNumber() + 1; d->sidebar->lineNumbers[index].foldable = d->codeFolding ? isFoldable(block.blockNumber() + 1) : false; d->sidebar->lineNumbers[index].folded = d->codeFolding ? isFolded(block.blockNumber() + 1) : false; ++index; } if (rect.top() > sidebarRect.bottom()) break; } block = block.next(); } d->sidebar->lineNumbers.resize(index); d->sidebar->update(); } void GLSLEdit::mark(const QString &str, Qt::CaseSensitivity sens) { d_ptr->highlighter->mark(str, sens); } void GLSLEdit::indent() { QTemporaryFile file(QLatin1String("shader.glsl")); if (!file.open()) { qDebug()<<"Couldn't create temporary file "<addAction(tr("Indent Code"), this, SLOT(indent())); menu->exec(e->globalPos()); delete menu; } #include "glsledit.moc" tmpNnpnZF/gui/androidfiledialog.h0000664000175000017500000000230412543167424016360 0ustar chrischris#pragma once #include #include #include #include class AndroidFileDialogModel; namespace Ui { class AndroidFileDialog; } class AndroidFileDialog : public QDialog { Q_OBJECT enum Mode { OpenFile = QDialogButtonBox::Open, SaveFile = QDialogButtonBox::Save }; public: explicit AndroidFileDialog(Mode mode, QWidget *parent = 0); ~AndroidFileDialog(); void setInitialPath(const QString &path); void setSuffix(const QString &suffix); QString filePath() const; void setMode(Mode mode); static QString getOpenFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &path = QString(), const QString &suffix = QString()); static QString getSaveFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &path = QString(), const QString &filter = QString()); private slots: virtual void accept(); void upFolder(); void itemActivated(QModelIndex index); void setDir(const QString &dir); private: QString m_dir; QStringListModel m_pathModel; Ui::AndroidFileDialog *m_ui; AndroidFileDialogModel *m_model; Mode m_mode; }; tmpNnpnZF/gui/.gitignore0000664000175000017500000000014112543167424014534 0ustar chrischrismoc_*.cpp qapitrace.qrc.depends qapitrace_automoc.cpp qrc_qapitrace.cpp qrc_qapitrace.cxx ui_*.h tmpNnpnZF/gui/profiletablemodel.cpp0000664000175000017500000002054712543167424016755 0ustar chrischris#include "profiletablemodel.h" #include "profiledialog.h" #include "profiling.h" #include typedef trace::Profile::Call Call; typedef trace::Profile::Frame Frame; typedef trace::Profile::Program Program; enum { COLUMN_PROGRAM, COLUMN_USAGES, COLUMN_GPU_TIME, COLUMN_CPU_TIME, COLUMN_PIXELS_DRAWN, COLUMN_GPU_AVERAGE, COLUMN_CPU_AVERAGE, COLUMN_PIXELS_AVERAGE, MAX_COLUMN }; static QString columnNames[] = { QString("Program"), QString("Calls"), QString("Total GPU Time"), QString("Total CPU Time"), QString("Total Pixels Drawn"), QString("Avg GPU Time"), QString("Avg CPU Time"), QString("Avg Pixels Drawn") }; ProfileTableModel::ProfileTableModel(QObject *parent) : QAbstractTableModel(parent), m_profile(0), m_sortColumn(COLUMN_GPU_TIME), m_sortOrder(Qt::DescendingOrder) { } void ProfileTableModel::setProfile(trace::Profile* profile) { m_profile = profile; m_timeMin = m_profile->frames.front().cpuStart; m_timeMax = m_profile->frames.back().cpuStart + m_profile->frames.back().cpuDuration; updateModel(); } /** * Set selection to nothing */ void ProfileTableModel::selectNone() { m_timeMin = m_timeMax = 0; updateModel(); sort(m_sortColumn, m_sortOrder); } /** * Set selection to program */ void ProfileTableModel::selectProgram(unsigned /*program*/) { /* We have no program based selection for table */ selectNone(); } /** * Set selection to a period of time */ void ProfileTableModel::selectTime(int64_t start, int64_t end) { m_timeMin = start; m_timeMax = end; updateModel(); sort(m_sortColumn, m_sortOrder); } /** * Creates the row data from trace profile */ void ProfileTableModel::updateModel() { if (m_timeMin == m_timeMax) { m_timeMin = m_profile->frames.front().cpuStart; m_timeMax = m_profile->frames.back().cpuStart + m_profile->frames.back().cpuDuration; } for (QList::iterator itr = m_rowData.begin(); itr != m_rowData.end(); ++itr) { ProfileTableRow& row = *itr; row.uses = 0; row.pixels = 0; row.gpuTime = 0; row.cpuTime = 0; row.longestCpu = NULL; row.longestGpu = NULL; row.longestPixel = NULL; } for (std::vector::const_iterator itr = m_profile->programs.begin(); itr != m_profile->programs.end(); ++itr) { ProfileTableRow* row = NULL; const Program& program = *itr; for (std::vector::const_iterator jtr = program.calls.begin(); jtr != program.calls.end(); ++jtr) { const Call& call = m_profile->calls[*jtr]; if (call.cpuStart > m_timeMax) { break; } if (call.cpuStart + call.cpuDuration < m_timeMin) { continue; } if (!row) { row = getRow(itr - m_profile->programs.begin()); } row->uses++; row->pixels += call.pixels; row->gpuTime += call.gpuDuration; row->cpuTime += call.cpuDuration; if (!row->longestGpu || row->longestGpu->gpuDuration < call.gpuDuration) { row->longestGpu = &call; } if (!row->longestCpu || row->longestCpu->cpuDuration < call.cpuDuration) { row->longestCpu = &call; } if (!row->longestPixel || row->longestPixel->pixels < call.pixels) { row->longestPixel = &call; } } } } /** * Get the appropriate call associated with an item in the table */ const trace::Profile::Call *ProfileTableModel::getJumpCall(const QModelIndex & index) const { const ProfileTableRow& row = m_rowData[index.row()]; switch(index.column()) { case COLUMN_GPU_TIME: case COLUMN_GPU_AVERAGE: return row.longestGpu; case COLUMN_CPU_TIME: case COLUMN_CPU_AVERAGE: return row.longestCpu; case COLUMN_PIXELS_DRAWN: case COLUMN_PIXELS_AVERAGE: return row.longestPixel; } return NULL; } /** * Get the shader program associated with an item in the table */ unsigned ProfileTableModel::getProgram(const QModelIndex & index) const { const ProfileTableRow& row = m_rowData[index.row()]; return row.program; } /** * Get the row index for a shader program */ int ProfileTableModel::getRowIndex(unsigned program) const { for (int i = 0; i < m_rowData.size(); ++i) { if (m_rowData[i].program == program) return i; } return -1; } /** * Get the row data for a shader program */ ProfileTableRow* ProfileTableModel::getRow(unsigned program) { for (QList::iterator itr = m_rowData.begin(); itr != m_rowData.end(); ++itr) { if (itr->program == program) return &*itr; } m_rowData.append(ProfileTableRow(program)); return &m_rowData.back(); } int ProfileTableModel::rowCount(const QModelIndex & parent) const { if (!parent.isValid()) { return m_rowData.size(); } else { return 0; } } int ProfileTableModel::columnCount(const QModelIndex & /*parent*/) const { return MAX_COLUMN; } QVariant ProfileTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole) { const ProfileTableRow& row = m_rowData[index.row()]; switch(index.column()) { case COLUMN_PROGRAM: return row.program; case COLUMN_USAGES: return QLocale::system().toString(row.uses); case COLUMN_GPU_TIME: return Profiling::getTimeString(row.gpuTime); case COLUMN_CPU_TIME: return Profiling::getTimeString(row.cpuTime); case COLUMN_PIXELS_DRAWN: return QLocale::system().toString((qlonglong)row.pixels); case COLUMN_GPU_AVERAGE: return Profiling::getTimeString((row.uses <= 0) ? 0 : (row.gpuTime / row.uses)); case COLUMN_CPU_AVERAGE: return Profiling::getTimeString((row.uses <= 0) ? 0 : (row.cpuTime / row.uses)); case COLUMN_PIXELS_AVERAGE: return QLocale::system().toString((row.uses <= 0) ? 0 : (row.pixels / row.uses)); } } else if (role == Qt::TextAlignmentRole) { return Qt::AlignRight; } return QVariant(); } QVariant ProfileTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { if (section >= 0 && section < MAX_COLUMN) { return columnNames[section]; } } return QVariant(); } class ProgramSorter { public: ProgramSorter(int column, Qt::SortOrder order) : mSortColumn(column), mSortOrder(order) { } bool operator()(const ProfileTableRow &p1, const ProfileTableRow &p2) const { bool result = true; switch(mSortColumn) { case COLUMN_PROGRAM: result = p1.program < p2.program; break; case COLUMN_USAGES: result = p1.uses < p2.uses; break; case COLUMN_GPU_TIME: result = p1.gpuTime < p2.gpuTime; break; case COLUMN_CPU_TIME: result = p1.cpuTime < p2.cpuTime; break; case COLUMN_PIXELS_DRAWN: result = p1.pixels < p2.pixels; break; case COLUMN_GPU_AVERAGE: result = ((p1.uses <= 0) ? 0 : (p1.gpuTime / p1.uses)) < ((p2.uses <= 0) ? 0 : (p2.gpuTime / p2.uses)); break; case COLUMN_CPU_AVERAGE: result = ((p1.uses <= 0) ? 0 : (p1.cpuTime / p1.uses)) < ((p2.uses <= 0) ? 0 : (p2.cpuTime / p2.uses)); break; case COLUMN_PIXELS_AVERAGE: result = ((p1.uses <= 0) ? 0 : (p1.pixels / p1.uses)) < ((p2.uses <= 0) ? 0 : (p2.pixels / p2.uses)); break; } if (mSortOrder == Qt::DescendingOrder) { return !result; } else { return result; } } private: int mSortColumn; Qt::SortOrder mSortOrder; }; void ProfileTableModel::sort(int column, Qt::SortOrder order) { m_sortColumn = column; m_sortOrder = order; qSort(m_rowData.begin(), m_rowData.end(), ProgramSorter(column, order)); emit dataChanged(createIndex(0, 0), createIndex(m_rowData.size(), MAX_COLUMN)); } #include "profiletablemodel.moc" tmpNnpnZF/gui/shaderssourcewidget.cpp0000664000175000017500000000223012543167424017327 0ustar chrischris#include "shaderssourcewidget.h" #include "glsledit.h" ShadersSourceWidget::ShadersSourceWidget(QWidget *parent) : QWidget(parent) { m_ui.setupUi(this); m_edit = new GLSLEdit(this); m_edit->setReadOnly(true); m_ui.verticalLayout->addWidget(m_edit); connect(m_ui.shadersCB, SIGNAL(currentIndexChanged(const QString &)), SLOT(changeShader(const QString &))); } void ShadersSourceWidget::setShaders(const QMap &sources) { m_sources = sources; m_ui.shadersCB->clear(); m_edit->clear(); if (m_sources.isEmpty()) { m_ui.shadersCB->setDisabled(true); m_edit->setPlainText(tr("No bound shaders.")); m_edit->setDisabled(true); return; } m_ui.shadersCB->setEnabled(true); m_edit->setEnabled(true); QMap::const_iterator itr; for (itr = m_sources.constBegin(); itr != m_sources.constEnd(); ++itr) { m_ui.shadersCB->addItem(itr.key()); } m_ui.shadersCB->setCurrentIndex(0); } void ShadersSourceWidget::changeShader(const QString &key) { m_edit->setPlainText(m_sources.value(key)); } #include "shaderssourcewidget.moc" tmpNnpnZF/gui/saverthread.cpp0000664000175000017500000002377312543167424015600 0ustar chrischris#include "saverthread.h" #include "trace_writer.hpp" #include "trace_model.hpp" #include "trace_parser.hpp" #include #include #include #include #if 0 static trace::FunctionSig * createFunctionSig(ApiTraceCall *call, unsigned id) { trace::FunctionSig *sig = new trace::FunctionSig(); sig->id = id; sig->name = qstrdup(call->name().toLocal8Bit()); QStringList args = call->argNames(); sig->num_args = args.count(); sig->arg_names = new const char*[args.count()]; for (int i = 0; i < args.count(); ++i) { sig->arg_names[i] = qstrdup(args[i].toLocal8Bit()); } return sig; } static void deleteFunctionSig(trace::FunctionSig *sig) { for (int i = 0; i < sig->num_args; ++i) { delete [] sig->arg_names[i]; } delete [] sig->arg_names; delete [] sig->name; delete sig; } static trace::StructSig * createStructSig(const ApiStruct &str, unsigned id) { ApiStruct::Signature aSig = str.signature(); trace::StructSig *sig = new trace::StructSig(); sig->id = id; sig->name = qstrdup(aSig.name.toLocal8Bit()); sig->num_members = aSig.memberNames.count(); char **member_names = new char*[aSig.memberNames.count()]; sig->member_names = (const char **)member_names; for (int i = 0; i < aSig.memberNames.count(); ++i) { member_names[i] = qstrdup(aSig.memberNames[i].toLocal8Bit()); } return sig; } static void deleteStructSig(trace::StructSig *sig) { for (int i = 0; i < sig->num_members; ++i) { delete [] sig->member_names[i]; } delete [] sig->member_names; delete [] sig->name; delete sig; } static trace::EnumSig * createEnumSig(const ApiEnum &en, unsigned id) { trace::EnumSig *sig = new trace::EnumSig(); sig->id = id; sig->name = qstrdup(en.name().toLocal8Bit()); sig->value = en.value().toLongLong(); return sig; } static void deleteEnumSig(trace::EnumSig *sig) { delete [] sig->name; delete sig; } static trace::BitmaskSig * createBitmaskSig(const ApiBitmask &bt, unsigned id) { ApiBitmask::Signature bsig = bt.signature(); ApiBitmask::Signature::const_iterator itr; trace::BitmaskSig *sig = new trace::BitmaskSig(); trace::BitmaskFlag *flags = new trace::BitmaskFlag[bsig.count()]; sig->id = id; sig->num_flags = bsig.count(); sig->flags = flags; int i = 0; for (itr = bsig.constBegin(); itr != bsig.constEnd(); ++itr, ++i) { flags[i].name = qstrdup(itr->first.toLocal8Bit()); flags[i].value = itr->second; } return sig; } static void deleteBitmaskSig(trace::BitmaskSig *sig) { for (int i = 0; i < sig->num_flags; ++i) { delete [] sig->flags[i].name; } delete [] sig->flags; delete sig; } static void writeValue(trace::Writer &writer, const QVariant &var, unsigned &id) { int arrayType = QMetaType::type("ApiArray"); int bitmaskType = QMetaType::type("ApiBitmask"); int structType = QMetaType::type("ApiStruct"); int pointerType = QMetaType::type("ApiPointer"); int enumType = QMetaType::type("ApiEnum"); int type = var.userType(); switch(type) { case QVariant::Bool: writer.writeBool(var.toBool()); break; case QVariant::ByteArray: { QByteArray ba = var.toByteArray(); writer.writeBlob((const void*)ba.constData(), ba.size()); } break; case QVariant::Double: writer.writeDouble(var.toDouble()); break; case QMetaType::Float: writer.writeFloat(var.toFloat()); break; case QVariant::Int: writer.writeSInt(var.toInt()); break; case QVariant::LongLong: writer.writeSInt(var.toLongLong()); break; case QVariant::String: { QString str = var.toString(); writer.writeString(str.toLocal8Bit().constData(), str.length()); } break; case QVariant::UInt: writer.writeUInt(var.toInt()); break; case QVariant::ULongLong: writer.writeUInt(var.toLongLong()); break; default: if (type == arrayType) { ApiArray array = var.value(); QVector vals = array.values(); writer.beginArray(vals.count()); foreach(QVariant el, vals) { writer.beginElement(); writeValue(writer, el, ++id); writer.endElement(); } writer.endArray(); } else if (type == bitmaskType) { ApiBitmask bm = var.value(); trace::BitmaskSig *sig = createBitmaskSig(bm, ++id); writer.writeBitmask(sig, bm.value()); deleteBitmaskSig(sig); } else if (type == structType) { ApiStruct apiStr = var.value(); QList vals = apiStr.values(); trace::StructSig *str = createStructSig(apiStr, ++id); writer.beginStruct(str); foreach(QVariant val, vals) { writeValue(writer, val, ++id); } writer.endStruct(); deleteStructSig(str); } else if (type == pointerType) { ApiPointer apiPtr = var.value(); writer.writePointer(apiPtr.value()); } else if (type == enumType) { ApiEnum apiEnum = var.value(); trace::EnumSig *sig = createEnumSig(apiEnum, ++id); writer.writeEnum(sig); deleteEnumSig(sig); } else { qWarning()<<"Unsupported write variant : " << QMetaType::typeName(type); } } } #endif class EditVisitor : public trace::Visitor { public: EditVisitor(const QVariant &variant) : m_variant(variant), m_editedValue(0) {} virtual void visit(trace::Null *val) { m_editedValue = val; } virtual void visit(trace::Bool *node) { // Q_ASSERT(m_variant.userType() == QVariant::Bool); bool var = m_variant.toBool(); m_editedValue = new trace::Bool(var); } virtual void visit(trace::SInt *node) { // Q_ASSERT(m_variant.userType() == QVariant::Int); m_editedValue = new trace::SInt(m_variant.toInt()); } virtual void visit(trace::UInt *node) { // Q_ASSERT(m_variant.userType() == QVariant::UInt); m_editedValue = new trace::SInt(m_variant.toUInt()); } virtual void visit(trace::Float *node) { m_editedValue = new trace::Float(m_variant.toFloat()); } virtual void visit(trace::Double *node) { m_editedValue = new trace::Double(m_variant.toDouble()); } virtual void visit(trace::String *node) { QString str = m_variant.toString(); char *newString = new char[str.length() + 1]; QByteArray ba = str.toLocal8Bit(); strcpy(newString, ba.constData()); m_editedValue = new trace::String(newString); } virtual void visit(trace::WString *node) { QString str = m_variant.toString(); size_t len = str.length(); wchar_t *newString = new wchar_t[len + 1]; str.toWCharArray(newString); newString[len] = 0; m_editedValue = new trace::WString(newString); } virtual void visit(trace::Enum *e) { m_editedValue = e; } virtual void visit(trace::Bitmask *bitmask) { m_editedValue = bitmask; } virtual void visit(trace::Struct *str) { m_editedValue = str; } virtual void visit(trace::Array *array) { ApiArray apiArray = m_variant.value(); QVector vals = apiArray.values(); trace::Array *newArray = new trace::Array(vals.count()); for (int i = 0; i < vals.count(); ++i) { EditVisitor visitor(vals[i]); array->values[i]->visit(visitor); if (array->values[i] == visitor.value()) { //non-editabled delete newArray; m_editedValue = array; return; } newArray->values[i] = visitor.value(); } m_editedValue = newArray; } virtual void visit(trace::Blob *blob) { m_editedValue = blob; } virtual void visit(trace::Pointer *ptr) { m_editedValue = ptr; } trace::Value *value() const { return m_editedValue; } private: QVariant m_variant; trace::Value *m_editedValue; }; static void overwriteValue(trace::Call *call, const QVariant &val, int index) { EditVisitor visitor(val); trace::Value *origValue = call->args[index].value; origValue->visit(visitor); if (visitor.value() && origValue != visitor.value()) { delete origValue; call->args[index].value = visitor.value(); } } SaverThread::SaverThread(QObject *parent) : QThread(parent) { } void SaverThread::saveFile(const QString &writeFileName, const QString &readFileName, const QSet &editedCalls) { m_writeFileName = writeFileName; m_readFileName = readFileName; m_editedCalls = editedCalls; start(); } void SaverThread::run() { qDebug() << "Saving " << m_readFileName << ", to " << m_writeFileName; QMap callIndexMap; foreach(ApiTraceCall *call, m_editedCalls) { callIndexMap.insert(call->index(), call); } trace::Writer writer; writer.open(m_writeFileName.toLocal8Bit()); trace::Parser parser; parser.open(m_readFileName.toLocal8Bit()); trace::Call *call; while ((call = parser.parse_call())) { if (callIndexMap.contains(call->no)) { QVector values = callIndexMap[call->no]->editedValues(); for (int i = 0; i < values.count(); ++i) { const QVariant &val = values[i]; overwriteValue(call, val, i); } writer.writeCall(call); } else { writer.writeCall(call); } delete call; } writer.close(); emit traceSaved(); } #include "saverthread.moc" tmpNnpnZF/gui/glsledit.h0000664000175000017500000000713112543167424014532 0ustar chrischris/* This file is part of the Ofi Labs X2 project. Copyright (C) 2010 Ariya Hidayat Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef OFILABS_GLSLEDIT #define OFILABS_GLSLEDIT #include #include #include class GLSLEditPrivate; class GLSLEdit: public QPlainTextEdit { Q_OBJECT Q_PROPERTY(bool bracketsMatchingEnabled READ isBracketsMatchingEnabled WRITE setBracketsMatchingEnabled) Q_PROPERTY(bool codeFoldingEnabled READ isCodeFoldingEnabled WRITE setCodeFoldingEnabled) Q_PROPERTY(bool lineNumbersVisible READ isLineNumbersVisible WRITE setLineNumbersVisible) Q_PROPERTY(bool textWrapEnabled READ isTextWrapEnabled WRITE setTextWrapEnabled) public: typedef enum { Background, Normal, Comment, Number, String, Operator, Identifier, Keyword, BuiltIn, Sidebar, LineNumber, Cursor, Marker, BracketMatch, BracketError, FoldIndicator } ColorComponent; GLSLEdit(QWidget *parent = 0); ~GLSLEdit(); void setColor(ColorComponent component, const QColor &color); bool isBracketsMatchingEnabled() const; bool isCodeFoldingEnabled() const; bool isLineNumbersVisible() const; bool isTextWrapEnabled() const; bool isFoldable(int line) const; bool isFolded(int line) const; public slots: void updateSidebar(); void mark(const QString &str, Qt::CaseSensitivity sens = Qt::CaseInsensitive); void setBracketsMatchingEnabled(bool enable); void setCodeFoldingEnabled(bool enable); void setLineNumbersVisible(bool visible); void setTextWrapEnabled(bool enable); void fold(int line); void unfold(int line); void toggleFold(int line); void indent(); protected: virtual void resizeEvent(QResizeEvent *e); virtual void wheelEvent(QWheelEvent *e); virtual void contextMenuEvent(QContextMenuEvent *e); private slots: void updateCursor(); void updateSidebar(const QRect &rect, int d); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE(GLSLEdit); Q_DISABLE_COPY(GLSLEdit); }; #endif // OFILABS_GLSLEDIT tmpNnpnZF/gui/graphing/0000775000175000017500000000000012543167424014347 5ustar chrischristmpNnpnZF/gui/graphing/graphing.h0000664000175000017500000000167412543167424016327 0ustar chrischris#pragma once #include /** * A simple struct to hold a horizontal or vertical selection */ struct SelectionState { enum SelectionType { None, Horizontal, Vertical }; SelectionType type; qint64 start; qint64 end; }; /** * Fairly generic data provider for graphs */ class GraphDataProvider { public: virtual ~GraphDataProvider(){} /* Number of elements in graph */ virtual qint64 size() const = 0; /* Returns value for index */ virtual qint64 value(qint64 index) const = 0; /* Is the item at index selected */ virtual bool selected(qint64 index) const = 0; /* Get mouse hover tooltip for item */ virtual QString itemTooltip(qint64 index) const = 0; /* Called on item double click */ virtual void itemDoubleClicked(qint64 index) const = 0; /* Set pointer to selection state */ virtual void setSelectionState(SelectionState* state) = 0; }; tmpNnpnZF/gui/graphing/graphview.cpp0000664000175000017500000001132312543167424017047 0ustar chrischris#include "graphview.h" #include #include GraphView::GraphView(QWidget* parent) : QWidget(parent), m_viewLeft(0), m_viewRight(0), m_viewBottom(0), m_viewTop(0), m_graphLeft(0), m_graphRight(0), m_graphBottom(0), m_graphTop(0), m_viewWidth(0), m_viewWidthMin(0), m_viewWidthMax(0), m_viewHeight(0), m_viewHeightMin(0), m_viewHeightMax(0), m_selectionState(NULL) { memset(&m_previous, -1, sizeof(m_previous)); } void GraphView::update() { if (m_graphLeft != m_previous.m_graphLeft || m_graphRight != m_previous.m_graphRight) { m_previous.m_graphLeft = m_graphLeft; m_previous.m_graphRight = m_graphRight; emit horizontalRangeChanged(m_graphLeft, m_graphRight); } if (m_viewLeft != m_previous.m_viewLeft || m_viewRight != m_previous.m_viewRight) { m_previous.m_viewLeft = m_viewLeft; m_previous.m_viewRight = m_viewRight; emit horizontalViewChanged(m_viewLeft, m_viewRight); } if (m_graphBottom != m_previous.m_graphBottom || m_graphTop != m_previous.m_graphTop) { m_previous.m_graphBottom = m_graphBottom; m_previous.m_graphTop = m_graphTop; emit verticalRangeChanged(m_graphBottom, m_graphTop); } if (m_viewBottom != m_previous.m_viewBottom || m_viewTop != m_previous.m_viewTop) { m_previous.m_viewBottom = m_viewBottom; m_previous.m_viewTop = m_viewTop; emit verticalViewChanged(m_viewBottom, m_viewTop); } QWidget::update(); } void GraphView::resizeEvent(QResizeEvent *) { m_viewHeight = height(); m_viewHeightMin = m_viewHeight; m_viewHeightMax = m_viewHeight; m_viewTop = m_viewBottom + m_viewHeight; update(); } void GraphView::wheelEvent(QWheelEvent *e) { int zoomPercent = 10; /* If holding Ctrl key then zoom 2x faster */ if (QApplication::keyboardModifiers() & Qt::ControlModifier) { zoomPercent = 20; } /* Zoom view by adjusting width */ double dt = m_viewWidth; double size = dt; size *= -e->delta(); /* Zoom deltas normally come in increments of 120 */ size /= 120 * (100 / zoomPercent); m_viewWidth += size; m_viewWidth = qBound(m_viewWidthMin, m_viewWidth, m_viewWidthMax); /* Scroll view to zoom around mouse */ dt -= m_viewWidth; dt *= e->x(); dt /= width(); m_viewLeft = dt + m_viewLeft; m_viewLeft = qBound(m_graphLeft, m_viewLeft, m_graphRight - m_viewWidth); m_viewRight = m_viewLeft + m_viewWidth; update(); } void GraphView::mouseMoveEvent(QMouseEvent *e) { if (e->buttons().testFlag(Qt::LeftButton)) { /* Horizontal scroll */ double dvdx = m_viewWidth / (double)width(); dvdx *= m_mousePressPosition.x() - e->pos().x(); m_viewLeft = m_mousePressViewLeft + dvdx; m_viewLeft = qBound(m_graphLeft, m_viewLeft, m_graphRight - m_viewWidth); m_viewRight = m_viewLeft + m_viewWidth; /* Vertical scroll */ double dvdy = m_viewHeight / (double)height(); dvdy *= m_mousePressPosition.y() - e->pos().y(); m_viewBottom = m_mousePressViewBottom + dvdy; m_viewBottom = qBound(m_graphBottom, m_viewBottom, m_graphTop - m_viewHeight); m_viewTop = m_viewBottom + m_viewHeight; update(); } } void GraphView::mousePressEvent(QMouseEvent *e) { m_mousePressPosition = e->pos(); m_mousePressViewLeft = m_viewLeft; m_mousePressViewBottom = m_viewBottom; } void GraphView::mouseDoubleClickEvent(QMouseEvent *e) { if (m_selectionState) { m_selectionState->type = SelectionState::None; emit selectionChanged(); } } void GraphView::setSelectionState(SelectionState* state) { m_selectionState = state; } void GraphView::setHorizontalView(qint64 start, qint64 end) { m_viewLeft = qBound(m_graphLeft, start, m_graphRight - (end - start)); m_viewRight = qBound(m_graphLeft, end, m_graphRight); m_viewWidth = m_viewRight - m_viewLeft; update(); } void GraphView::setVerticalView(qint64 start, qint64 end) { m_viewBottom = qBound(m_graphBottom, start, m_graphTop - (end - start)); m_viewTop = qBound(m_graphBottom, end, m_graphTop); m_viewHeight = m_viewTop - m_viewBottom; update(); } void GraphView::setDefaultView(qint64 min, qint64 max) { m_graphLeft = min; m_graphRight = max; m_viewWidth = max - min; m_viewWidthMin = 1; m_viewWidthMax = m_viewWidth; m_viewLeft = min; m_viewRight = max; m_viewHeight = height(); m_viewHeightMin = m_viewHeight; m_viewHeightMax = m_viewHeight; m_viewBottom = 0; m_viewTop = m_viewHeight; m_graphBottom = 0; m_graphTop = m_viewHeight; update(); } #include "graphview.moc" tmpNnpnZF/gui/graphing/heatmapverticalaxiswidget.h0000664000175000017500000000075212543167424021766 0ustar chrischris#pragma once #include "heatmapview.h" #include "graphaxiswidget.h" /** * Vertical axis specifically for heatmap displaying header and data rows */ class HeatmapVerticalAxisWidget : public GraphAxisWidget { public: HeatmapVerticalAxisWidget(QWidget* parent); void setDataProvider(HeatmapDataProvider* data); virtual void mouseDoubleClickEvent(QMouseEvent *e); virtual void paintEvent(QPaintEvent *); protected: int m_rowHeight; HeatmapDataProvider* m_data; }; tmpNnpnZF/gui/graphing/histogramview.h0000664000175000017500000000202012543167424017402 0ustar chrischris#pragma once #include "graphview.h" /** * Histogram graph view. * * When the view is zoomed such that there is more than one item occupying * a single pixel the one with the highest value will be displayed. */ class HistogramView : public GraphView { public: HistogramView(QWidget* parent); void setDataProvider(GraphDataProvider* data); void setSelectionState(SelectionState* state); /* Gradient colours for selected and unselected items */ void setSelectedGradient(const QLinearGradient& gradient); void setUnelectedGradient(const QLinearGradient& gradient); virtual void mouseMoveEvent(QMouseEvent *e); virtual void mouseDoubleClickEvent(QMouseEvent *e); virtual void update(); virtual void resizeEvent(QResizeEvent *e); virtual void paintEvent(QPaintEvent *e); protected: qint64 itemAtPosition(QPoint pos); qint64 valueAtPosition(QPoint pos); protected: QLinearGradient m_gradientSelected; QLinearGradient m_gradientUnselected; GraphDataProvider* m_data; }; tmpNnpnZF/gui/graphing/timeaxiswidget.h0000664000175000017500000000043012543167424017544 0ustar chrischris#pragma once #include "graphaxiswidget.h" /** * A simple axis that draws text using getTimeString to nicely format time values */ class TimeAxisWidget : public GraphAxisWidget { public: TimeAxisWidget(QWidget* parent = 0); virtual void paintEvent(QPaintEvent *e); }; tmpNnpnZF/gui/graphing/heatmapview.h0000664000175000017500000000644212543167424017040 0ustar chrischris#pragma once #include "graphview.h" /** * The heatmap iterator will only return data when there is something to draw, * this allows much faster access to the data in the case where the view is * zoomed out to the point of where there is multiple calls in one pixel, * it automagically calculates the heat for that pixel. */ class HeatmapRowIterator { public: virtual ~HeatmapRowIterator(){} /* Go to the next visible heat map */ virtual bool next() = 0; /* Is the current value GPU or CPU heat */ virtual bool isGpu() const = 0; /* Current step (normally x coordinate) */ virtual int step() const = 0; /* Current width (in steps) */ virtual int width() const = 0; /* Current heat */ virtual float heat() const = 0; /* Heat value for selected calls */ virtual float selectedHeat() const = 0; /* Label only used when there is a single call in this heat */ virtual QString label() const = 0; }; /** * Data provider for the whole heatmap */ class HeatmapDataProvider { public: virtual ~HeatmapDataProvider(){} /* The start and end values (time on x-axis) for the heatmap */ virtual qint64 start() const = 0; virtual qint64 end() const = 0; /* * Header rows (fixed at top of heatmap view) */ /* Header row count */ virtual unsigned headerRows() const = 0; /* Label to be used in the vertical axis */ virtual QString headerLabel(unsigned row) const = 0; /* Get identifier (program no) for row */ virtual qint64 headerRowAt(unsigned row) const = 0; /* Get item at row and time */ virtual qint64 headerItemAt(unsigned row, qint64 time) const = 0; /* Get iterator for a row between start and end time for steps */ virtual HeatmapRowIterator* headerRowIterator(int row, qint64 start, qint64 end, int steps) const = 0; /* * Data rows (scrollable in heatmap view) */ /* Data row count */ virtual unsigned dataRows() const = 0; /* Label to be used in the vertical axis */ virtual QString dataLabel(unsigned row) const = 0; /* Get identifier (program no) for row */ virtual qint64 dataRowAt(unsigned row) const = 0; /* Get item at row and time */ virtual qint64 dataItemAt(unsigned row, qint64 time) const = 0; /* Get iterator for a row between start and end time for steps */ virtual HeatmapRowIterator* dataRowIterator(int row, qint64 start, qint64 end, int steps) const = 0; /* Handle double click on item */ virtual void itemDoubleClicked(qint64 index) const = 0; /* Get mouse over tooltip for item */ virtual QString itemTooltip(qint64 index) const = 0; /* Set the selection */ virtual void setSelectionState(SelectionState* state) = 0; }; /** * A not very generic heatmap for row based data */ class HeatmapView : public GraphView { public: HeatmapView(QWidget* parent); void setDataProvider(HeatmapDataProvider* data); void setSelectionState(SelectionState* state); virtual void mouseMoveEvent(QMouseEvent *e); virtual void mouseDoubleClickEvent(QMouseEvent *e); virtual void paintEvent(QPaintEvent *e); virtual void paintRow(QPainter& painter, HeatmapRowIterator* itr); protected: qint64 itemAtPosition(QPoint pos); protected: int m_rowHeight; HeatmapDataProvider* m_data; }; tmpNnpnZF/gui/graphing/heatmapview.cpp0000664000175000017500000001755712543167424017404 0ustar chrischris#include "heatmapview.h" #include #include #include #include HeatmapView::HeatmapView(QWidget* parent) : GraphView(parent), m_data(NULL) { m_rowHeight = 20; setMouseTracking(true); } void HeatmapView::setDataProvider(HeatmapDataProvider* data) { delete m_data; m_data = data; if (m_data) { m_data->setSelectionState(m_selectionState); setDefaultView(m_data->start(), m_data->end()); m_viewWidthMin = 1000; m_graphBottom = 0; m_graphTop = (m_data->headerRows() + m_data->dataRows()) * m_rowHeight; } else { setDefaultView(0, 0); m_graphBottom = m_graphTop = 0; } update(); } void HeatmapView::setSelectionState(SelectionState* state) { if (m_data) { m_data->setSelectionState(state); } GraphView::setSelectionState(state); } void HeatmapView::mouseMoveEvent(QMouseEvent *e) { GraphView::mouseMoveEvent(e); if (e->buttons() || !m_data) { QToolTip::hideText(); return; } qint64 index = itemAtPosition(e->pos()); if (index >= 0) { QToolTip::showText(e->globalPos(), m_data->itemTooltip(index)); } else { QToolTip::hideText(); } } void HeatmapView::mouseDoubleClickEvent(QMouseEvent *e) { if (m_data && e->button() == Qt::LeftButton) { qint64 index = itemAtPosition(e->pos()); if (index >= 0) { m_data->itemDoubleClicked(index); return; } } GraphView::mouseDoubleClickEvent(e); } void HeatmapView::paintEvent(QPaintEvent *) { if (!m_data) { return; } QPainter painter(this); painter.fillRect(0, m_data->headerRows() * m_rowHeight, width(), height(), Qt::white); /* Draw data rows */ painter.translate(0, m_data->headerRows() * m_rowHeight - m_viewBottom % m_rowHeight); int rowStart = m_viewBottom / m_rowHeight; int rowEnd = qMin(qCeil(m_viewTop / (double)m_rowHeight), m_data->dataRows()); for (unsigned i = rowStart; i < rowEnd; ++i) { HeatmapRowIterator* itr = m_data->dataRowIterator(i, m_viewLeft, m_viewRight, width()); paintRow(painter, itr); painter.translate(0, m_rowHeight); delete itr; } /* Draw Header */ painter.resetTransform(); painter.fillRect(0, 0, width(), m_data->headerRows() * m_rowHeight, Qt::white); for (unsigned i = 0; i < m_data->headerRows(); ++i) { HeatmapRowIterator* itr = m_data->headerRowIterator(i, m_viewLeft, m_viewRight, width()); paintRow(painter, itr); painter.translate(0, m_rowHeight); delete itr; } /* Draw Axis Lines */ painter.resetTransform(); painter.setPen(Qt::black); painter.drawLine(0, m_rowHeight, width(), m_rowHeight); painter.drawLine(0, m_rowHeight * 2, width(), m_rowHeight * 2); painter.setPen(QColor(240, 240, 240)); painter.translate(0, m_data->headerRows() * m_rowHeight - m_viewBottom % m_rowHeight); for (unsigned i = rowStart; i < rowEnd; ++i) { painter.drawLine(0, m_rowHeight, width(), m_rowHeight); painter.translate(0, m_rowHeight); } /* Draw selection borders */ painter.resetTransform(); painter.setPen(Qt::green); if (m_selectionState->type == SelectionState::Horizontal) { double dxdt = width() / (double)m_viewWidth; double scroll = m_viewLeft * dxdt; double left = (m_selectionState->start * dxdt) - scroll; double right = (m_selectionState->end * dxdt) - scroll; /* Highlight time */ if (left >= 0 && left <= width()) { painter.drawLine(left, 0, left, height()); } if (right >= 0 && right <= width()) { painter.drawLine(right, 0, right, height()); } } else if (m_selectionState->type == SelectionState::Vertical) { /* Highlight row */ int row = m_selectionState->start; for (unsigned i = rowStart; i < rowEnd; ++i) { if (m_data->dataRowAt(i) == row) { row = i - rowStart; painter.translate(0, m_data->headerRows() * m_rowHeight - m_viewBottom % m_rowHeight); painter.drawLine(0, (row + 1) * m_rowHeight, width(), (row + 1) * m_rowHeight); if (row > 0) { painter.drawLine(0, row * m_rowHeight, width(), row * m_rowHeight); } break; } } } } void HeatmapView::paintRow(QPainter& painter, HeatmapRowIterator* itr) { bool selection = m_selectionState ? m_selectionState->type != SelectionState::None : false; while (itr->next()) { double heat = itr->heat(); int width = itr->width(); int x = itr->step(); /* Gamma correction */ heat = qPow(heat, 1.0 / 2.0); if (width == 1) { /* Draw single line */ if (selection) { double selectedHeat = itr->selectedHeat(); if (selectedHeat >= 0.999) { heat = 255.0 - qBound(0.0, heat * 255.0, 255.0); if (itr->isGpu()) { painter.setPen(QColor(255, heat, heat)); } else { painter.setPen(QColor(heat, heat, 255)); } painter.drawLine(x, 0, x, m_rowHeight - 1); } else { heat = 255.0 - qBound(0.0, heat * 100.0, 100.0); painter.setPen(QColor(heat, heat, heat)); painter.drawLine(x, 0, x, m_rowHeight - 1); if (selectedHeat > 0.001) { selectedHeat = qPow(selectedHeat, 1.0 / 2.0); selectedHeat = qBound(0.0, selectedHeat * 255.0, 255.0); if (itr->isGpu()) { painter.setPen(QColor(255, 0, 0, selectedHeat)); } else { painter.setPen(QColor(0, 0, 255, selectedHeat)); } painter.drawLine(x, 0, x, m_rowHeight - 1); } } } else { heat = qBound(0.0, heat * 255.0, 255.0); if (itr->isGpu()) { painter.setPen(QColor(255, 255 - heat, 255 - heat)); } else { painter.setPen(QColor(255 - heat, 255 - heat, 255)); } painter.drawLine(x, 0, x, m_rowHeight - 1); } } else { double selectedHeat = itr->selectedHeat(); if (selection && selectedHeat < 0.9) { painter.fillRect(x, 0, width, m_rowHeight, QColor(255 - 100, 255 - 100, 255 - 100)); } else if (itr->isGpu()) { painter.fillRect(x, 0, width, m_rowHeight, QColor(255, 0, 0)); } else { painter.fillRect(x, 0, width, m_rowHeight, QColor(0, 0, 255)); } if (width > 6) { painter.setPen(Qt::white); QString elided = painter.fontMetrics().elidedText(itr->label(), Qt::ElideRight, width - 1); painter.drawText(x + 1, 0, width - 1, m_rowHeight - 1, Qt::AlignLeft | Qt::AlignVCenter, elided); } } } } qint64 HeatmapView::itemAtPosition(QPoint pos) { if (!m_data) { return -1; } double t = m_viewWidth / (double)width(); t *= pos.x(); t += m_viewLeft; qint64 time = (qint64)t; qint64 index; if (pos.y() < m_data->headerRows() * m_rowHeight) { int row = pos.y() / m_rowHeight; index = m_data->headerItemAt(row, time); } else { int row = pos.y(); row -= m_data->headerRows() * m_rowHeight; row += m_viewBottom; row /= m_rowHeight; index = m_data->dataItemAt(row, time); } return index; } tmpNnpnZF/gui/graphing/frameaxiswidget.cpp0000664000175000017500000000531612543167424020243 0ustar chrischris#include "frameaxiswidget.h" #include FrameAxisWidget::FrameAxisWidget(QWidget* parent) : GraphAxisWidget(parent), m_data(NULL) { setSelectable(GraphAxisWidget::Range); } void FrameAxisWidget::setDataProvider(FrameDataProvider* data) { delete m_data; m_data = data; } void FrameAxisWidget::paintEvent(QPaintEvent *) { if (!m_data || m_orientation != GraphAxisWidget::Horizontal) { /* TODO: Vertical axis support */ return; } QPainter painter(this); painter.setPen(Qt::black); painter.setBrush(Qt::lightGray); painter.drawRect(0, 0, width() - 1, height() - 1); qint64 range = m_valueEnd - m_valueBegin; double dxdv = width() / (double)range; double scroll = dxdv * m_valueBegin; int lastLabel = -9999; /* Iterate over frames, drawing a label when there is space to do so */ for (unsigned i = 0; i < m_data->size(); ++i) { static const int padding = 4; qint64 start = m_data->frameStart(i); qint64 end = m_data->frameEnd(i); bool visible = false; if (start > m_valueEnd) { break; } if (end < m_valueBegin) { visible = false; } double left = dxdv * start; double right = dxdv * end; QString text = QString("%1").arg(i); int width = painter.fontMetrics().width(text) + padding * 2; if (right > scroll) { visible = true; } if (left - lastLabel > width) { lastLabel = left + width; if (visible) { int textX; if (left < scroll && right - left > width) { if (right - scroll > width) { textX = 0; } else { textX = right - scroll - width; } } else { textX = left - scroll; } painter.drawText(textX + padding, 0, width - padding, height() - 5, Qt::AlignLeft | Qt::AlignVCenter, text); painter.drawLine(left - scroll, height() / 2, left - scroll, height() - 1); } } else if (visible) { painter.drawLine(left - scroll, height() * 3/4.0, left - scroll, height() - 1); } } /* Draw selection */ if (hasSelection()) { double left = (dxdv * m_selectionState->start) - scroll; double right = (dxdv * m_selectionState->end) - scroll; painter.setPen(Qt::green); if (left >= 0 && left <= width()) { painter.drawLine(left, 0, left, height()); } if (right >= 0 && right <= width()) { painter.drawLine(right, 0, right, height()); } } } tmpNnpnZF/gui/graphing/graphaxiswidget.h0000664000175000017500000000273512543167424017721 0ustar chrischris#pragma once #include "graphing.h" #include /** * The generic base class of all graph axes. * * Handles orientation, simple selections, and view area. */ class GraphAxisWidget : public QWidget { Q_OBJECT public: enum Orientation { Horizontal, Vertical }; enum SelectionStyle { None, Single, Range }; public: GraphAxisWidget(QWidget* parent = 0); virtual ~GraphAxisWidget(){} /* Is this axis part of the active selection */ bool hasSelection(); void setSelectable(SelectionStyle selectable); void setSelectionState(SelectionState* state); void setOrientation(Orientation v); virtual void mouseMoveEvent(QMouseEvent *e); virtual void mousePressEvent(QMouseEvent *e); virtual void mouseReleaseEvent(QMouseEvent *e); public slots: /* The minimum and maximum values of this axis */ void setRange(qint64 min, qint64 max); /* The currently visible range of values */ void setView(qint64 start, qint64 end); signals: void selectionChanged(); protected: Orientation m_orientation; /* The min/max value of this axis */ qint64 m_valueMin; qint64 m_valueMax; /* The highest and lowest currently visible value */ qint64 m_valueBegin; qint64 m_valueEnd; /* Selection */ SelectionStyle m_selectable; SelectionState* m_selectionState; /* Mouse tracking */ QPoint m_mousePressPosition; qint64 m_mousePressValue; }; tmpNnpnZF/gui/graphing/frameaxiswidget.h0000664000175000017500000000130212543167424017677 0ustar chrischris#pragma once #include "graphaxiswidget.h" class FrameDataProvider { public: virtual ~FrameDataProvider() {} /* Number of frames */ virtual unsigned size() const = 0; /* Start and end values of frame */ virtual qint64 frameStart(unsigned frame) const = 0; virtual qint64 frameEnd(unsigned frame) const = 0; }; /** * A generic axis which will draw frame numbers over a period of values. * Frames designated by start / end values. */ class FrameAxisWidget : public GraphAxisWidget { public: FrameAxisWidget(QWidget* parent = 0); void setDataProvider(FrameDataProvider* data); virtual void paintEvent(QPaintEvent *e); protected: FrameDataProvider* m_data; }; tmpNnpnZF/gui/graphing/graphlabelwidget.h0000664000175000017500000000140312543167424020023 0ustar chrischris#pragma once #include #include /** * A very simple label widget, basically a box with text in. */ class GraphLabelWidget : public QWidget { public: GraphLabelWidget(QString text = QString(), QWidget* parent = 0) : QWidget(parent), m_flags(Qt::AlignHCenter | Qt::AlignVCenter), m_text(text) { } void setText(const QString& text) { m_text = text; } void setFlags(int flags) { m_flags = flags; } virtual void paintEvent(QPaintEvent *) { QPainter painter(this); painter.setPen(Qt::black); painter.fillRect(rect(), Qt::lightGray); painter.drawText(rect(), m_flags, m_text); } protected: int m_flags; QString m_text; }; tmpNnpnZF/gui/graphing/graphview.h0000664000175000017500000000436112543167424016520 0ustar chrischris#pragma once #include "graphing.h" #include /** * The generic base class for a graph's view, this is the component that * displays the actual data for the graph. * * - Stores the view area within the graph * - Simple user interaction such as translating and zooming with mouse * - Selection tracking synchronised with axis */ class GraphView : public QWidget { Q_OBJECT public: GraphView(QWidget* parent = 0); virtual ~GraphView(){} virtual void update(); virtual void resizeEvent(QResizeEvent *); virtual void wheelEvent(QWheelEvent *e); virtual void mouseMoveEvent(QMouseEvent *e); virtual void mousePressEvent(QMouseEvent *e); virtual void mouseDoubleClickEvent(QMouseEvent *e); virtual void setSelectionState(SelectionState* state); void setHorizontalView(qint64 start, qint64 end); void setVerticalView(qint64 start, qint64 end); protected: void setDefaultView(qint64 min, qint64 max); signals: void selectionChanged(); void verticalViewChanged(qint64 start, qint64 end); void verticalRangeChanged(qint64 min, qint64 max); void horizontalRangeChanged(qint64 min, qint64 max); void horizontalViewChanged(qint64 start, qint64 end); protected: /* Viewport area */ qint64 m_viewLeft; qint64 m_viewRight; qint64 m_viewBottom; qint64 m_viewTop; /* Graph limits */ qint64 m_graphLeft; qint64 m_graphRight; qint64 m_graphBottom; qint64 m_graphTop; /* Viewport width (m_viewRight - m_viewLeft), used for zoom */ qint64 m_viewWidth; qint64 m_viewWidthMin; qint64 m_viewWidthMax; /* Viewport height (m_viewTop - m_viewBottom), used for zoom */ qint64 m_viewHeight; qint64 m_viewHeightMin; qint64 m_viewHeightMax; /* Mouse tracking */ QPoint m_mousePressPosition; qint64 m_mousePressViewLeft; qint64 m_mousePressViewBottom; /* Selection */ SelectionState* m_selectionState; /* State from the last update() call */ struct PreviousUpdate { qint64 m_viewLeft; qint64 m_viewRight; qint64 m_viewBottom; qint64 m_viewTop; qint64 m_graphLeft; qint64 m_graphRight; qint64 m_graphBottom; qint64 m_graphTop; } m_previous; }; tmpNnpnZF/gui/graphing/graphwidget.h0000664000175000017500000000571012543167424017030 0ustar chrischris#pragma once #include "graphview.h" #include "graphaxiswidget.h" #include "graphlabelwidget.h" class QScrollBar; /** * The generic GraphWidget class which combines the elements of a graph, * the axis, view, scrollbars and label. */ class GraphWidget : public QWidget { Q_OBJECT public: enum AxisPosition { AxisTop, AxisLeft, AxisRight, AxisBottom }; public: GraphWidget(QWidget* parent = 0); virtual ~GraphWidget(){} GraphView* view(); GraphLabelWidget* label(); GraphAxisWidget* axis(AxisPosition pos); void setView(GraphView* view); void setLabel(GraphLabelWidget* label); void setAxis(AxisPosition pos, GraphAxisWidget* axis); void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy); void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy); virtual void resizeEvent(QResizeEvent *e); protected: /* Used if a selection would be shared between graphs with different axis */ virtual SelectionState transformSelectionIn(SelectionState state); virtual SelectionState transformSelectionOut(SelectionState state); /* Update the scrollbars based on current view */ void updateScrollbars(); /* Update all signal / slot connections */ void updateConnections(); /* Recalculate child widget layout */ void updateLayout(); public slots: void setSelection(SelectionState state); /* Set view areas */ void setHorizontalView(qint64 start, qint64 end); void setVerticalView(qint64 start, qint64 end); protected slots: /* View changed by translation / zooming */ void verticalViewChange(qint64 start, qint64 end); void verticalRangeChange(qint64 start, qint64 end); void horizontalViewChange(qint64 start, qint64 end); void horizontalRangeChange(qint64 start, qint64 end); /* User interaction with scroll bars */ void horizontalScrollAction(int action); void verticalScrollAction(int action); /* Update child elements when selection changes */ void updateSelection(bool emitSignal = true); signals: void selectionChanged(SelectionState state); void verticalViewChanged(qint64 start, qint64 end); void verticalRangeChanged(qint64 start, qint64 end); void horizontalViewChanged(qint64 start, qint64 end); void horizontalRangeChanged(qint64 start, qint64 end); protected: SelectionState m_selection; GraphView* m_view; GraphLabelWidget* m_label; GraphAxisWidget* m_axisTop; GraphAxisWidget* m_axisLeft; GraphAxisWidget* m_axisRight; GraphAxisWidget* m_axisBottom; QScrollBar* m_horizontalScrollbar; qint64 m_horizontalMin; qint64 m_horizontalMax; qint64 m_horizontalStart; qint64 m_horizontalEnd; Qt::ScrollBarPolicy m_horizontalScrollbarPolicy; QScrollBar* m_verticalScrollbar; qint64 m_verticalMin; qint64 m_verticalMax; qint64 m_verticalStart; qint64 m_verticalEnd; Qt::ScrollBarPolicy m_verticalScrollbarPolicy; }; tmpNnpnZF/gui/graphing/timeaxiswidget.cpp0000664000175000017500000000476012543167424020111 0ustar chrischris#include "timeaxiswidget.h" #include "profiling.h" #include #include TimeAxisWidget::TimeAxisWidget(QWidget* parent) : GraphAxisWidget(parent) { } void TimeAxisWidget::paintEvent(QPaintEvent *) { /* TODO: Support selections? */ /* TODO: Vertical scrolling? */ QPainter painter(this); painter.setPen(Qt::black); painter.setBrush(Qt::lightGray); painter.drawRect(0, 0, width() - 1, height() - 1); if (m_orientation == GraphAxisWidget::Vertical) { int axisHeight = height() - 1; int fontHeight = painter.fontMetrics().height(); int ticks = axisHeight / (fontHeight * 2); double range = m_valueMax - m_valueMin; double step = range / (double)ticks; double step10 = qPow(10.0, qFloor(qLn(step) / qLn(10.0))); step = qFloor((step / step10) * 2) * (step10 / 2); if (step <= 0) { return; } painter.resetTransform(); for (double tick = 0; tick <= range; tick += step) { int y = axisHeight - ((tick / range) * axisHeight); painter.drawLine(width() - 8, y, width(), y); painter.drawText(0, qBound(0, y - fontHeight / 2, axisHeight - fontHeight), width() - 10, fontHeight, Qt::AlignRight | Qt::AlignVCenter, Profiling::getTimeString(tick, m_valueMax)); } } else { int axisWidth = width() - 1; int fontWidth = painter.fontMetrics().width("0.000 ns"); int fontHeight= painter.fontMetrics().height(); int ticks = axisWidth / (fontWidth * 2); double range = m_valueMax - m_valueMin; double step = range / (double)ticks; double step10 = qPow(10.0, qFloor(qLn(step) / qLn(10.0))); step = qFloor((step / step10) * 2) * (step10 / 2); if (step <= 0) { return; } painter.resetTransform(); for (double tick = 0; tick <= range; tick += step) { int x = (tick / range) * axisWidth; painter.drawLine(x, 0, x, 8); painter.drawText(qBound(0, x - fontWidth / 2, axisWidth - fontWidth), 8, fontWidth, fontHeight, Qt::AlignHCenter | Qt::AlignTop, Profiling::getTimeString(tick, m_valueMax)); } } } tmpNnpnZF/gui/graphing/graphaxiswidget.cpp0000664000175000017500000000537212543167424020254 0ustar chrischris#include "graphaxiswidget.h" #include GraphAxisWidget::GraphAxisWidget(QWidget* parent) : QWidget(parent), m_selectable(None), m_selectionState(NULL) { } bool GraphAxisWidget::hasSelection() { if (!m_selectionState) { return false; } if (m_selectionState->type == SelectionState::Horizontal && m_orientation == GraphAxisWidget::Horizontal) { return true; } if (m_selectionState->type == SelectionState::Vertical && m_orientation == GraphAxisWidget::Vertical) { return true; } return false; } void GraphAxisWidget::setSelectable(SelectionStyle selectable) { m_selectable = selectable; } void GraphAxisWidget::setSelectionState(SelectionState* state) { m_selectionState = state; } void GraphAxisWidget::setOrientation(Orientation v) { m_orientation = v; if (m_orientation == Horizontal) { setMinimumWidth(60); } else { setMinimumHeight(60); } } void GraphAxisWidget::mouseMoveEvent(QMouseEvent *e) { if (m_selectable == None) { return; } int pos, max; if (m_orientation == Horizontal) { pos = e->x(); max = width(); } else { pos = e->y(); max = height(); } double value = m_valueEnd - m_valueBegin; value *= pos / (double)max; value += m_valueBegin; if (e->buttons().testFlag(Qt::LeftButton)) { m_selectionState->start = qMin(m_mousePressValue, value); m_selectionState->end = qMax(m_mousePressValue, value); m_selectionState->type = m_orientation == Horizontal ? SelectionState::Horizontal : SelectionState::Vertical; emit selectionChanged(); update(); } } void GraphAxisWidget::mousePressEvent(QMouseEvent *e) { if (m_selectable == None) { return; } int pos, max; if (m_orientation == Horizontal) { pos = e->x(); max = width(); } else { pos = e->y(); max = height(); } double value = m_valueEnd - m_valueBegin; value *= pos / (double)max; value += m_valueBegin; m_mousePressPosition = e->pos(); m_mousePressValue = value; } void GraphAxisWidget::mouseReleaseEvent(QMouseEvent *e) { if (m_selectable == None) { return; } int dx = qAbs(m_mousePressPosition.x() - e->x()); int dy = qAbs(m_mousePressPosition.y() - e->y()); if (dx + dy < 2) { m_selectionState->type = SelectionState::None; emit selectionChanged(); } } void GraphAxisWidget::setRange(qint64 min, qint64 max) { m_valueMin = min; m_valueMax = max; update(); } void GraphAxisWidget::setView(qint64 start, qint64 end) { m_valueBegin = start; m_valueEnd = end; update(); } #include "graphaxiswidget.moc" tmpNnpnZF/gui/graphing/graphwidget.cpp0000664000175000017500000004012412543167424017361 0ustar chrischris#include "graphwidget.h" #include GraphWidget::GraphWidget(QWidget* parent) : QWidget(parent), m_view(NULL), m_label(NULL), m_axisTop(NULL), m_axisLeft(NULL), m_axisRight(NULL), m_axisBottom(NULL), m_horizontalScrollbar(NULL), m_horizontalMin(0), m_horizontalMax(0), m_horizontalStart(0), m_horizontalEnd(0), m_horizontalScrollbarPolicy(Qt::ScrollBarAlwaysOff), m_verticalScrollbar(NULL), m_verticalMin(0), m_verticalMax(0), m_verticalStart(0), m_verticalEnd(0), m_verticalScrollbarPolicy(Qt::ScrollBarAlwaysOff) { m_selection.type = SelectionState::None; m_verticalScrollbar = new QScrollBar(this); m_verticalScrollbar->setOrientation(Qt::Vertical); m_verticalScrollbar->hide(); m_verticalScrollbar->resize(m_verticalScrollbar->sizeHint()); m_horizontalScrollbar = new QScrollBar(this); m_horizontalScrollbar->setOrientation(Qt::Horizontal); m_horizontalScrollbar->hide(); m_horizontalScrollbar->resize(m_horizontalScrollbar->sizeHint()); updateLayout(); setAutoFillBackground(true); } GraphView* GraphWidget::view() { return m_view; } GraphLabelWidget* GraphWidget::label() { return m_label; } GraphAxisWidget* GraphWidget::axis(AxisPosition pos) { switch(pos) { case AxisTop: return m_axisTop; case AxisLeft: return m_axisLeft; case AxisRight: return m_axisRight; case AxisBottom: return m_axisBottom; default: return NULL; } } void GraphWidget::setView(GraphView* view) { delete m_view; m_view = view; updateConnections(); m_view->setSelectionState(&m_selection); m_view->show(); m_view->update(); } void GraphWidget::setLabel(GraphLabelWidget* label) { delete m_label; m_label = label; } void GraphWidget::setAxis(AxisPosition pos, GraphAxisWidget* axis) { switch(pos) { case AxisTop: delete m_axisTop; m_axisTop = axis; m_axisTop->setOrientation(GraphAxisWidget::Horizontal); m_axisTop->setSelectionState(&m_selection); break; case AxisLeft: delete m_axisLeft; m_axisLeft = axis; m_axisLeft->setOrientation(GraphAxisWidget::Vertical); m_axisLeft->setSelectionState(&m_selection); break; case AxisRight: delete m_axisRight; m_axisRight = axis; m_axisRight->setOrientation(GraphAxisWidget::Vertical); m_axisRight->setSelectionState(&m_selection); break; case AxisBottom: delete m_axisBottom; m_axisBottom = axis; m_axisBottom->setOrientation(GraphAxisWidget::Horizontal); m_axisBottom->setSelectionState(&m_selection); break; } updateConnections(); updateSelection(); axis->show(); } void GraphWidget::setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy) { m_horizontalScrollbarPolicy = policy; updateScrollbars(); } void GraphWidget::setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy) { m_verticalScrollbarPolicy = policy; updateScrollbars(); } void GraphWidget::resizeEvent(QResizeEvent *e) { updateLayout(); update(); } /* Used if a selection would be shared between graphs with different axis */ SelectionState GraphWidget::transformSelectionIn(SelectionState state) { return state; } /* Used if a selection would be shared between graphs with different axis */ SelectionState GraphWidget::transformSelectionOut(SelectionState state) { return state; } /* Update the scrollbars based on current view */ void GraphWidget::updateScrollbars() { /* Vertical scroll bar */ qint64 size = (m_verticalMax - m_verticalMin) - (m_verticalEnd - m_verticalStart); if (size <= INT_MAX) { m_verticalScrollbar->setValue(m_verticalStart - m_verticalMin); m_verticalScrollbar->setPageStep(m_verticalEnd - m_verticalStart); m_verticalScrollbar->setRange(0, size); } else { /* QScrollBar only supports up to INT_MAX values, * here we must scale our values to match this */ double curSize = m_verticalEnd - m_verticalStart; double pages = (m_verticalMax - m_verticalMin) / curSize; double value = (m_verticalStart - m_verticalMin) / curSize; m_verticalScrollbar->setValue(value); m_verticalScrollbar->setPageStep(1); m_verticalScrollbar->setRange(0, pages); } /* Adhere to scrollbar policy */ bool visible = false; if (m_verticalScrollbarPolicy == Qt::ScrollBarAlwaysOn) { visible = true; } else if (m_verticalScrollbarPolicy == Qt::ScrollBarAlwaysOff) { visible = false; } else if (m_verticalScrollbarPolicy == Qt::ScrollBarAsNeeded) { visible = m_verticalMin != m_verticalStart || m_verticalMax != m_verticalEnd; } if (visible != m_verticalScrollbar->isVisible()) { m_verticalScrollbar->setVisible(visible); updateLayout(); } /* Horizontal scroll bar */ size = (m_horizontalMax - m_horizontalMin) - (m_horizontalEnd - m_horizontalStart); if (size <= INT_MAX) { m_horizontalScrollbar->setValue(m_horizontalStart - m_horizontalMin); m_horizontalScrollbar->setPageStep(m_horizontalEnd - m_horizontalStart); m_horizontalScrollbar->setRange(0, size); } else { /* QScrollBar only supports up to INT_MAX values, * here we must scale our values to match this */ double dxdv = INT_MAX / (double)size; double value = (m_horizontalStart - m_horizontalMin) * dxdv; double pageStep = (m_horizontalEnd - m_horizontalStart) * dxdv; m_horizontalScrollbar->setValue((int)value); m_horizontalScrollbar->setPageStep((int)pageStep); m_horizontalScrollbar->setRange(0, INT_MAX); } /* Adhere to scrollbar policy */ visible = false; if (m_horizontalScrollbarPolicy == Qt::ScrollBarAlwaysOn) { visible = true; } else if (m_horizontalScrollbarPolicy == Qt::ScrollBarAlwaysOff) { visible = false; } else if (m_horizontalScrollbarPolicy == Qt::ScrollBarAsNeeded) { visible = m_horizontalMin != m_horizontalStart || m_horizontalMax != m_horizontalEnd; } if (visible != m_horizontalScrollbar->isVisible()) { m_horizontalScrollbar->setVisible(visible); updateLayout(); } } /* Update all signal / slot connections */ void GraphWidget::updateConnections() { if (m_view) { connect(m_view, SIGNAL(selectionChanged()), this, SLOT(updateSelection()), Qt::UniqueConnection); connect(m_view, SIGNAL(horizontalViewChanged(qint64,qint64)), this, SLOT(horizontalViewChange(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(horizontalRangeChanged(qint64,qint64)), this, SLOT(horizontalRangeChange(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(verticalViewChanged(qint64,qint64)), this, SLOT(verticalViewChange(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(verticalRangeChanged(qint64,qint64)), this, SLOT(verticalRangeChange(qint64,qint64)), Qt::UniqueConnection); } if (m_axisTop) { if (m_view) { connect(m_view, SIGNAL(horizontalViewChanged(qint64,qint64)), m_axisTop, SLOT(setView(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(horizontalRangeChanged(qint64,qint64)), m_axisTop, SLOT(setRange(qint64,qint64)), Qt::UniqueConnection); } connect(m_axisTop, SIGNAL(selectionChanged()), this, SLOT(updateSelection()), Qt::UniqueConnection); } if (m_axisLeft) { if (m_view) { connect(m_view, SIGNAL(verticalViewChanged(qint64,qint64)), m_axisLeft, SLOT(setView(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(verticalRangeChanged(qint64,qint64)), m_axisLeft, SLOT(setRange(qint64,qint64)), Qt::UniqueConnection); } connect(m_axisLeft, SIGNAL(selectionChanged()), this, SLOT(updateSelection()), Qt::UniqueConnection); } if (m_axisRight) { if (m_view) { connect(m_view, SIGNAL(verticalViewChanged(qint64,qint64)), m_axisRight, SLOT(setView(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(verticalRangeChanged(qint64,qint64)), m_axisRight, SLOT(setRange(qint64,qint64)), Qt::UniqueConnection); } connect(m_axisRight, SIGNAL(selectionChanged()), this, SLOT(updateSelection()), Qt::UniqueConnection); } if (m_axisBottom) { if (m_view) { connect(m_view, SIGNAL(horizontalViewChanged(qint64,qint64)), m_axisBottom, SLOT(setView(qint64,qint64)), Qt::UniqueConnection); connect(m_view, SIGNAL(horizontalRangeChanged(qint64,qint64)), m_axisBottom, SLOT(setRange(qint64,qint64)), Qt::UniqueConnection); } connect(m_axisBottom, SIGNAL(selectionChanged()), this, SLOT(updateSelection()), Qt::UniqueConnection); } if (m_horizontalScrollbar) { connect(m_horizontalScrollbar, SIGNAL(actionTriggered(int)), this, SLOT(horizontalScrollAction(int))); } if (m_verticalScrollbar) { connect(m_verticalScrollbar, SIGNAL(actionTriggered(int)), this, SLOT(verticalScrollAction(int))); } } /* Recalculate the layout */ void GraphWidget::updateLayout() { int x, y; int padX = 0, padY = 0; if (m_axisTop) { padY += m_axisTop->height(); } if (m_axisBottom) { padY += m_axisBottom->height(); } if (m_axisLeft) { padX += m_axisLeft->width(); } if (m_axisRight) { padX += m_axisRight->width(); } if (m_horizontalScrollbar->isVisible()) { padY += m_horizontalScrollbar->height(); } if (m_verticalScrollbar->isVisible()) { padX += m_verticalScrollbar->width(); } if (m_axisTop) { x = m_axisLeft ? m_axisLeft->width() : 0; y = 0; m_axisTop->move(x, y); m_axisTop->resize(width() - padX, m_axisTop->height()); } if (m_axisBottom) { x = m_axisLeft ? m_axisLeft->width() : 0; y = height() - m_axisBottom->height(); if (m_horizontalScrollbar->isVisible()) { y -= m_horizontalScrollbar->height(); } m_axisBottom->move(x, y); m_axisBottom->resize(width() - padX, m_axisBottom->height()); } if (m_axisLeft) { x = 0; y = m_axisTop ? m_axisTop->height() : 0; m_axisLeft->move(x, y); m_axisLeft->resize(m_axisLeft->width(), height() - padY); } if (m_axisRight) { x = width() - m_axisRight->width(); y = m_axisTop ? m_axisTop->height() : 0; if (m_verticalScrollbar->isVisible()) { x -= m_verticalScrollbar->width(); } m_axisRight->move(x, y); m_axisRight->resize(m_axisRight->width(), height() - padY); } if (m_view) { x = m_axisLeft ? m_axisLeft->width() : 0; y = m_axisTop ? m_axisTop->height() : 0; m_view->move(x, y); m_view->resize(width() - padX, height() - padY); } if (m_label) { if (m_axisTop && m_axisLeft) { m_label->move(0, 0); m_label->resize(m_axisLeft->width(), m_axisTop->height()); } } if (m_verticalScrollbar) { m_verticalScrollbar->move(width() - m_verticalScrollbar->width(), 0); if (m_horizontalScrollbar) { m_verticalScrollbar->resize(m_verticalScrollbar->width(), height() - m_horizontalScrollbar->height()); } else { m_verticalScrollbar->resize(m_verticalScrollbar->width(), height()); } } if (m_horizontalScrollbar) { m_horizontalScrollbar->move(0, height() - m_horizontalScrollbar->height()); if (m_verticalScrollbar) { m_horizontalScrollbar->resize(width() - m_verticalScrollbar->width(), m_horizontalScrollbar->height()); } else { m_horizontalScrollbar->resize(width(), m_horizontalScrollbar->height()); } } } void GraphWidget::setSelection(SelectionState state) { m_selection = transformSelectionIn(state); updateSelection(false); } void GraphWidget::setHorizontalView(qint64 start, qint64 end) { if (m_view) { m_view->setHorizontalView(start, end); } } void GraphWidget::setVerticalView(qint64 start, qint64 end) { if (m_view) { m_view->setVerticalView(start, end); } } /* Called when the view is translated / zoomed */ void GraphWidget::verticalViewChange(qint64 start, qint64 end) { m_verticalStart = start; m_verticalEnd = end; updateScrollbars(); emit verticalViewChanged(start, end); } void GraphWidget::verticalRangeChange(qint64 start, qint64 end) { m_verticalMin = start; m_verticalMax = end; updateScrollbars(); emit verticalRangeChanged(start, end); } void GraphWidget::horizontalViewChange(qint64 start, qint64 end) { m_horizontalStart = start; m_horizontalEnd = end; updateScrollbars(); emit horizontalViewChanged(start, end); } void GraphWidget::horizontalRangeChange(qint64 start, qint64 end) { m_horizontalMin = start; m_horizontalMax = end; updateScrollbars(); emit horizontalRangeChanged(start, end); } /* User interaction with horizontal scroll bar */ void GraphWidget::horizontalScrollAction(int /*action*/) { int value = m_horizontalScrollbar->sliderPosition(); qint64 size = (m_horizontalMax - m_horizontalMin) - (m_horizontalEnd - m_horizontalStart); /* Calculate the new scroll values */ if (size <= INT_MAX) { m_horizontalEnd -= m_horizontalStart; m_horizontalStart = value + m_horizontalMin; m_horizontalEnd += value; } else { /* QScrollBar only supports up to INT_MAX values, here we must scale * our values to match this */ double dxdv = INT_MAX / (double)size; size = m_horizontalEnd - m_horizontalStart; m_horizontalStart = value / dxdv + m_horizontalMin; m_horizontalEnd = m_horizontalStart + size; } /* Update view */ if (m_view) { m_view->setHorizontalView(m_horizontalStart, m_horizontalEnd); } /* Update horizontal axes */ if (m_axisTop) { m_axisTop->setView(m_horizontalStart, m_horizontalEnd); } if (m_axisBottom) { m_axisBottom->setView(m_horizontalStart, m_horizontalEnd); } /* Inform the world of our changes! */ emit horizontalViewChanged(m_horizontalStart, m_horizontalEnd); } /* User interaction with vertical scroll bar */ void GraphWidget::verticalScrollAction(int /*action*/) { int value = m_verticalScrollbar->sliderPosition(); qint64 size = (m_verticalMax - m_verticalMin) - (m_verticalEnd - m_verticalStart); /* Calculate the new scroll values */ if (size <= INT_MAX) { m_verticalEnd -= m_verticalStart; m_verticalStart = value + m_verticalMin; m_verticalEnd += value; } else { /* QScrollBar only supports up to INT_MAX values, here we must scale * our values to match this */ double dxdv = INT_MAX / (double)size; size = m_verticalEnd - m_verticalStart; m_verticalStart = value / dxdv + m_verticalMin; m_verticalEnd = m_verticalStart + size; } /* Update view */ if (m_view) { m_view->setVerticalView(m_verticalStart, m_verticalEnd); } /* Update vertical axes */ if (m_axisLeft) { m_axisLeft->setView(m_verticalStart, m_verticalEnd); } if (m_axisRight) { m_axisRight->setView(m_verticalStart, m_verticalEnd); } /* Inform the world of our changes! */ emit verticalViewChanged(m_verticalStart, m_verticalEnd); } /* Update child elements when selection changes */ void GraphWidget::updateSelection(bool emitSignal) { if (m_view) { m_view->update(); } if (m_axisTop) { m_axisTop->update(); } if (m_axisLeft) { m_axisLeft->update(); } if (m_axisRight) { m_axisRight->update(); } if (m_axisBottom) { m_axisBottom->update(); } if (emitSignal) { emit selectionChanged(transformSelectionOut(m_selection)); } } #include "graphwidget.moc" tmpNnpnZF/gui/graphing/histogramview.cpp0000664000175000017500000001477412543167424017760 0ustar chrischris#include "histogramview.h" #include #include #include #include #include #include HistogramView::HistogramView(QWidget* parent) : GraphView(parent), m_data(NULL) { setMouseTracking(true); m_gradientUnselected.setColorAt(0.9, QColor(200, 200, 200)); m_gradientUnselected.setColorAt(0.0, QColor(220, 220, 220)); m_gradientSelected.setColorAt(0.9, QColor(0, 0, 210)); m_gradientSelected.setColorAt(0.0, QColor(130, 130, 255)); } void HistogramView::setDataProvider(GraphDataProvider* data) { delete m_data; m_data = data; if (m_data) { m_data->setSelectionState(m_selectionState); setDefaultView(0, m_data->size()); m_viewWidthMin = 10; } else { setDefaultView(0, 0); } } void HistogramView::setSelectionState(SelectionState* state) { if (m_data) { m_data->setSelectionState(state); } GraphView::setSelectionState(state); } void HistogramView::setSelectedGradient(const QLinearGradient& gradient) { m_gradientSelected = gradient; } void HistogramView::setUnelectedGradient(const QLinearGradient& gradient) { m_gradientUnselected = gradient; } void HistogramView::mouseMoveEvent(QMouseEvent *e) { GraphView::mouseMoveEvent(e); if (e->buttons() || !m_data) { QToolTip::hideText(); return; } qint64 index = itemAtPosition(e->pos()); qint64 time = valueAtPosition(e->pos()); if (m_data->value(index) >= time) { QToolTip::showText(e->globalPos(), m_data->itemTooltip(index)); } else { QToolTip::hideText(); } } void HistogramView::mouseDoubleClickEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { qint64 index = itemAtPosition(e->pos()); qint64 time = valueAtPosition(e->pos()); if (m_data->value(index) >= time) { m_data->itemDoubleClicked(index); return; } } GraphView::mouseDoubleClickEvent(e); } void HistogramView::update() { m_graphBottom = 0; m_graphTop = 0; if (m_data) { for (qint64 i = m_viewLeft; i < m_viewRight; ++i) { qint64 value = m_data->value(i); if (value > m_graphTop) { m_graphTop = value; } } } GraphView::update(); } void HistogramView::resizeEvent(QResizeEvent *) { m_gradientSelected.setStart(0, height()); m_gradientUnselected.setStart(0, height()); } /* Draw the histogram * * When the view is zoomed such that there is more than one item occupying a single pixel * the one with the highest value will be displayed. */ void HistogramView::paintEvent(QPaintEvent *) { if (!m_data) { return; } QBrush selectedBrush = QBrush(m_gradientSelected); QPen selectedPen = QPen(selectedBrush, 1); QBrush unselectedBrush = QBrush(m_gradientUnselected); QPen unselectedPen = QPen(unselectedBrush, 1); QPainter painter(this); painter.fillRect(0, 0, width(), height(), Qt::white); double dydv = height() / (double)m_graphTop; double dxdv = width() / (double)(m_viewRight - m_viewLeft); bool selection = m_selectionState && m_selectionState->type != SelectionState::None; if (dxdv < 1.0) { /* Less than one pixel per item */ qint64 longestValue = m_graphBottom; qint64 longestSelected = m_graphBottom; int lastX = 0; double x = 0; if (selection) { painter.setPen(unselectedPen); } else { painter.setPen(selectedPen); } for (qint64 i = m_viewLeft; i < m_viewRight; ++i) { qint64 value = m_data->value(i); int ix; if (value > longestValue) { longestValue = value; } if (selection && m_data->selected(i) && value > longestSelected) { longestSelected = value; } x += dxdv; ix = (int)x; if (lastX != ix) { painter.drawLine(lastX, height(), lastX, height() - (longestValue * dydv)); if (selection && longestSelected > m_graphBottom) { painter.setPen(selectedPen); painter.drawLine(lastX, height(), lastX, height() - (longestSelected * dydv)); painter.setPen(unselectedPen); longestSelected = m_graphBottom; } longestValue = m_graphBottom; lastX = ix; } } } else { /* Draw rectangles for graph */ double x = 0; for (qint64 i = m_viewLeft; i < m_viewRight; ++i, x += dxdv) { qint64 value = m_data->value(i); int y = qMax(1, value * dydv); if (!selection || m_data->selected(i)) { painter.fillRect(x, height() - y, dxdv, y, selectedBrush); } else { painter.fillRect(x, height() - y, dxdv, y, unselectedBrush); } } } /* Draw the borders for the selection */ if (m_selectionState && m_selectionState->type == SelectionState::Horizontal) { double dxdt = width() / (double)m_viewWidth; double scroll = m_viewLeft * dxdt; double left = (m_selectionState->start * dxdt) - scroll; double right = (m_selectionState->end * dxdt) - scroll; painter.setPen(Qt::green); if (left >= 0 && left <= width()) { painter.drawLine(left, 0, left, height()); } if (right >= 0 && right <= width()) { painter.drawLine(right, 0, right, height()); } } } /* Find the item with the highest value at pos.x() +/- 1, * the mouse must be within the bar height-wise. */ qint64 HistogramView::itemAtPosition(QPoint pos) { double dvdx = m_viewWidth / (double)width(); qint64 left = qFloor(dvdx * (pos.x() - 1)) + m_viewLeft; qint64 right = qCeil(dvdx * (pos.x() + 1)) + m_viewLeft; qint64 longestIndex = 0; qint64 longestValue = 0; left = qBound(0, left, m_data->size() - 1); right = qBound(0, right, m_data->size() - 1); for (qint64 i = left; i <= right; ++i) { if (m_data->value(i) > longestValue) { longestValue = m_data->value(i); longestIndex = i; } } return longestIndex; } /* Return the value at position */ qint64 HistogramView::valueAtPosition(QPoint pos) { double value = m_graphTop / (double)height(); value *= height() - pos.y(); value += m_graphBottom; return (qint64)value; } tmpNnpnZF/gui/graphing/heatmapverticalaxiswidget.cpp0000664000175000017500000000474312543167424022325 0ustar chrischris#include "heatmapverticalaxiswidget.h" #include #include #include HeatmapVerticalAxisWidget::HeatmapVerticalAxisWidget(QWidget* parent) : GraphAxisWidget(parent), m_data(NULL) { m_rowHeight = 20; } void HeatmapVerticalAxisWidget::setDataProvider(HeatmapDataProvider* data) { delete m_data; m_data = data; m_valueMin = 0; m_valueMax = (data->dataRows() + data->headerRows()) * m_rowHeight; m_valueBegin = m_valueMin; m_valueEnd = m_valueMax; update(); } void HeatmapVerticalAxisWidget::mouseDoubleClickEvent(QMouseEvent *e) { if (e->pos().y() < m_data->headerRows() * m_rowHeight) { m_selectionState->type = SelectionState::None; emit selectionChanged(); } else { int row = e->pos().y(); row -= m_data->headerRows() * m_rowHeight; row += m_valueBegin; row /= m_rowHeight; if (row >= m_data->dataRows()) { m_selectionState->type = SelectionState::None; emit selectionChanged(); } else { m_selectionState->type = SelectionState::Vertical; m_selectionState->start = m_data->dataRowAt(row); m_selectionState->end = m_selectionState->start; emit selectionChanged(); } } } void HeatmapVerticalAxisWidget::paintEvent(QPaintEvent *) { if (!m_data) { return; } QPainter painter(this); painter.setPen(Qt::black); painter.setBrush(Qt::lightGray); painter.drawRect(0, 0, width() - 1, height() - 1); /* Draw scrollable rows */ painter.translate(0, m_data->headerRows() * m_rowHeight - m_valueBegin % m_rowHeight); int rowStart = m_valueBegin / m_rowHeight; int rowEnd = qMin(qCeil(m_valueEnd / (double)m_rowHeight), m_data->dataRows()); for (unsigned i = rowStart; i < rowEnd; ++i) { painter.drawText(0, 0, width(), m_rowHeight, Qt::AlignHCenter | Qt::AlignVCenter, m_data->dataLabel(i)); painter.drawLine(0, m_rowHeight, width(), m_rowHeight); painter.translate(0, m_rowHeight); } /* Draw fixed position headers */ painter.resetTransform(); painter.drawRect(0, 0, width() - 1, m_data->headerRows() * m_rowHeight); for (unsigned i = 0; i < m_data->headerRows(); ++i) { painter.drawText(0, 0, width(), m_rowHeight, Qt::AlignHCenter | Qt::AlignVCenter, m_data->headerLabel(i)); painter.drawLine(0, m_rowHeight, width(), m_rowHeight); painter.translate(0, m_rowHeight); } } tmpNnpnZF/gui/androidretracer.cpp0000664000175000017500000002423212543167424016427 0ustar chrischris#include "androidretracer.h" #include "androiddevicedialog.h" #include "thumbnail.h" #include "image/image.hpp" #include "trace_profiler.hpp" #include #include #include #include #include "qubjson.h" typedef QLatin1String _; static QLatin1String packageName("apitrace.github.io.eglretrace"); static QLatin1String activityName("/.RetraceActivity"); AndroidRetracer::AndroidRetracer(QObject *parent) : Retracer(parent), m_stdoutPort(52341), m_stderrPort(52342) { connect(&m_androidUtils, SIGNAL(statusMessage(QString)), SIGNAL(statusMessage(QString))); } void AndroidRetracer::setAndroidFileName(const QString &fileName) { m_androdiFileName = fileName; } static int extractPidFromChunk(const QByteArray &chunk, int from) { int pos1 = chunk.indexOf(' ', from); if (pos1 == -1) return -1; while (chunk[pos1] == ' ') ++pos1; int pos3 = chunk.indexOf(' ', pos1); int pid = chunk.mid(pos1, pos3 - pos1).toInt(); return pid; } static int extractPid(const QByteArray &psOutput) { static const QByteArray needle("apitrace.github.io.eglretrace\r"); const int to = psOutput.indexOf(needle); if (to == -1) return -1; const int from = psOutput.lastIndexOf('\n', to); if (from == -1) return -1; return extractPidFromChunk(psOutput, from); } static QByteArray readLine(QTcpSocket &sock) { while (!sock.canReadLine() && sock.waitForReadyRead()); if (sock.state() != QAbstractSocket::ConnectedState) return QByteArray(); return sock.readLine(); } static bool read(QTcpSocket &sock, char *ptr, qint64 sz) { do { qint64 readBytes = sock.read(ptr, sz); ptr += readBytes; sz -= readBytes; } while(sz && sock.waitForReadyRead()); return sz == 0; } void AndroidRetracer::run() { m_androidUtils.reloadAdb(); QString errorStr; bool setupRet; QMetaObject::invokeMethod(this, "setup", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, setupRet), Q_ARG(QString *, &errorStr)); if (!setupRet) { emit finished(errorStr); return; } if (!m_androidUtils.runAdb(QStringList() << _("shell") << _("am") << _("start") << _("-n") << packageName + activityName)) { emit finished(tr("Can't start apitrace application")); return; } QByteArray which; if (!m_androidUtils.runAdb(QStringList() << _("shell") << _("readlink") << _("$(which ps)") , &which)) { emit finished(tr("Can't start adb")); return; } bool isBusyBox = which.startsWith("busybox"); QStringList psArgs; psArgs << _("shell") << _("ps"); if (isBusyBox) psArgs << _("-w"); qint64 processPID; bool wasStarted = false; QTime startTime; startTime.start(); QTcpSocket stdoutSocket; QTcpSocket stderrSocket; ImageHash thumbnails; QVariantMap parsedJson; trace::Profile* profile = isProfiling() ? new trace::Profile() : NULL; QList errors; QRegExp regexp("(^\\d+): +(\\b\\w+\\b): ([^\\r\\n]+)[\\r\\n]*$"); QString msg = QLatin1String("Replay finished!"); QByteArray ubjsonBuffer; QByteArray outputBuffer; bool keepGoing = true; while(keepGoing) { if (!wasStarted || startTime.elapsed() > 1000) { QByteArray psOut; m_androidUtils.runAdb(psArgs, &psOut); processPID = extractPid(psOut); if (wasStarted) startTime.restart(); } if (processPID == -1) { if (wasStarted) { break; } else { if (startTime.elapsed() > 3000) { // wait 3 seconds to start emit finished(tr("Unable to start retrace on device.")); return; } } msleep(100); continue; } // we have a valid pid, it means the application started if (!wasStarted) { // connect the sockets int tries = 0; do { stdoutSocket.connectToHost(QHostAddress::LocalHost, m_stdoutPort); } while (!stdoutSocket.waitForConnected(100) && ++tries < 10); if (stdoutSocket.state() != QAbstractSocket::ConnectedState) { emit finished(tr("Can't connect to stdout socket.")); return; } // Android doesn't suport GPU and PPD profiling (at leats not on my devices) //setProfiling(false, isProfilingCpu(), false); QString args = (retraceArguments() << m_androdiFileName).join(" ") + _("\n"); stdoutSocket.write(args.toUtf8()); if (!stdoutSocket.waitForBytesWritten()) { emit finished(tr("Can't send params.")); return; } stderrSocket.connectToHost(QHostAddress::LocalHost, m_stderrPort); stderrSocket.waitForConnected(100); if (stderrSocket.state() != QAbstractSocket::ConnectedState) { emit finished(tr("Can't connect to stderr socket.")); return; } wasStarted = true; } // We are going to read both channels at the same time // read stdout channel if (stdoutSocket.waitForReadyRead(100)) { if (captureState()) ubjsonBuffer.append(stdoutSocket.readAll()); else if (captureThumbnails()) { // read one image image::PNMInfo info; QByteArray header; int headerLines = 3; // assume no optional comment line for (int headerLine = 0; headerLine < headerLines; ++headerLine) { QByteArray line = readLine(stdoutSocket); if (line.isEmpty()) { keepGoing = false; break; } header += line; // if header actually contains optional comment line, ... if (headerLine == 1 && line[0] == '#') { ++headerLines; } } const char *headerEnd = image::readPNMHeader(header.constData(), header.size(), info); // if invalid PNM header was encountered, ... if (headerEnd == NULL || info.channelType != image::TYPE_UNORM8) { qDebug() << "error: invalid snapshot stream encountered"; keepGoing = false; break; } unsigned channels = info.channels; unsigned width = info.width; unsigned height = info.height; // qDebug() << "channels: " << channels << ", width: " << width << ", height: " << height"; QImage snapshot = QImage(width, height, channels == 1 ? QImage::Format_Mono : QImage::Format_RGB888); int rowBytes = channels * width; for (int y = 0; y < height; ++y) { unsigned char *scanLine = snapshot.scanLine(y); if (!read(stdoutSocket, (char *) scanLine, rowBytes)) { keepGoing = false; break; } } QImage thumb = thumbnail(snapshot); thumbnails.insert(info.commentNumber, thumb); } else if (isProfiling()) { QByteArray line = readLine(stdoutSocket); if (line.isEmpty()) { keepGoing = false; break; } line.append('\0'); trace::Profiler::parseLine(line.constData(), profile); } else { outputBuffer.append(stdoutSocket.readAll()); } } // read stderr channel if (stderrSocket.waitForReadyRead(5) && stderrSocket.canReadLine()) { QString line = stderrSocket.readLine(); if (regexp.indexIn(line) != -1) { ApiTraceError error; error.callIndex = regexp.cap(1).toInt(); error.type = regexp.cap(2); error.message = regexp.cap(3); errors.append(error); } else if (!errors.isEmpty()) { // Probably a multiligne message ApiTraceError &previous = errors.last(); if (line.endsWith("\n")) { line.chop(1); } previous.message.append('\n'); previous.message.append(line); } } } if (outputBuffer.size() < 80) msg = outputBuffer; if (captureState()) { QBuffer io(&ubjsonBuffer); io.open(QIODevice::ReadOnly); parsedJson = decodeUBJSONObject(&io).toMap(); ApiTraceState *state = new ApiTraceState(parsedJson); emit foundState(state); } if (captureThumbnails() && !thumbnails.isEmpty()) { emit foundThumbnails(thumbnails); } if (isProfiling() && profile) { emit foundProfile(profile); } if (!errors.isEmpty()) { emit retraceErrors(errors); } emit finished(msg); } bool AndroidRetracer::setup(QString *error) { m_androidUtils.reloadAdb(); if (m_androidUtils.serialNumber().isEmpty()) { *error = tr("No device selected"); return false; } // forward adbPorts QSettings s; s.beginGroup(_("android")); m_stdoutPort = s.value(_("stdoutPort"), m_stdoutPort).toInt(); m_stderrPort = s.value(_("stderrPort"), m_stderrPort).toInt(); s.endGroup(); if (!m_androidUtils.runAdb(QStringList(_("forward")) << QString::fromLatin1("tcp:%1").arg(m_stdoutPort) << _("localabstract:apitrace.github.io.eglretrace.stdout"))) { *error = tr("Can't forward ports"); return false; } if (!m_androidUtils.runAdb(QStringList(_("forward")) << QString::fromLatin1("tcp:%1").arg(m_stderrPort) << _("localabstract:apitrace.github.io.eglretrace.stderr"))) { *error = tr("Can't forward ports"); return false; } return true; } tmpNnpnZF/gui/profileheatmap.h0000664000175000017500000002777312543167424015741 0ustar chrischris#pragma once #include "graphing/heatmapview.h" #include "profiling.h" /** * Data providers for a heatmap based off the trace::Profile call data */ class ProfileHeatmapRowIterator : public HeatmapRowIterator { public: ProfileHeatmapRowIterator(const trace::Profile* profile, qint64 start, qint64 end, int steps, bool gpu, int program = -1) : m_profile(profile), m_step(-1), m_stepWidth(1), m_stepCount(steps), m_index(0), m_timeStart(start), m_timeEnd(end), m_useGpu(gpu), m_program(program), m_selected(false), m_timeSelection(false), m_programSelection(false) { m_timeWidth = m_timeEnd - m_timeStart; } virtual bool next() { unsigned maxIndex = m_program == -1 ? m_profile->calls.size() : m_profile->programs[m_program].calls.size(); if (m_index >= maxIndex) { return false; } double dtds = m_timeWidth / (double)m_stepCount; qint64 heatDuration = 0; qint64 programHeatDuration = 0; m_heat = 0.0f; m_step += m_stepWidth; m_stepWidth = 1; m_selected = false; /* Iterator through calls until step != lastStep */ for (; m_index < maxIndex; ++m_index) { const trace::Profile::Call* call; if (m_program == -1) { call = &m_profile->calls[m_index]; } else { call = &m_profile->calls[ m_profile->programs[m_program].calls[m_index] ]; } qint64 start, duration, end; if (m_useGpu) { start = call->gpuStart; duration = call->gpuDuration; if (call->pixels < 0) { continue; } } else { start = call->cpuStart; duration = call->cpuDuration; } end = start + duration; if (end < m_timeStart) { continue; } if (start > m_timeEnd) { m_index = m_profile->calls.size(); break; } double left = timeToStep(start); double right = timeToStep(end); int leftStep = left; int rightStep = right; if (leftStep > m_step) { break; } if (m_programSelection && call->program == m_programSel) { m_selected = true; } if (rightStep - leftStep > 1) { m_label = QString::fromStdString(call->name); m_step = left; m_stepWidth = rightStep - leftStep; heatDuration = dtds; ++m_index; break; } if (leftStep < m_step) { qint64 rightTime = stepToTime(rightStep); heatDuration += end - rightTime; if (m_programSelection && call->program == m_programSel) { programHeatDuration += end - rightTime; } } else if (leftStep == rightStep) { heatDuration += duration; if (m_programSelection && call->program == m_programSel) { programHeatDuration += duration; } } else if (rightStep - leftStep == 1) { qint64 rightTime = stepToTime(rightStep); heatDuration += rightTime - start; if (m_programSelection && call->program == m_programSel) { programHeatDuration += rightTime - start; } break; } } m_heat = heatDuration / dtds; m_programHeat = programHeatDuration / dtds; if (m_timeSelection) { qint64 time = stepToTime(m_step); if (time >= m_timeSelStart && time <= m_timeSelEnd) { m_programHeat = 1.0; } } if (m_programSelection && (m_program == m_programSel || (m_selected && m_stepWidth > 1))) { m_programHeat = 1.0; } if (m_programHeat > 0) { m_selected = true; } return true; } virtual bool isGpu() const { return m_useGpu; } virtual float heat() const { return m_heat; } virtual float selectedHeat() const { return m_programHeat; } virtual int step() const { return m_step; } virtual int width() const { return m_stepWidth; } virtual QString label() const { return m_label; } void setProgramSelection(int program) { m_programSelection = true; m_programSel = program; } void setTimeSelection(qint64 start, qint64 end) { m_timeSelection = true; m_timeSelStart = start; m_timeSelEnd = end; } private: double timeToStep(qint64 time) const { double pos = time; pos -= m_timeStart; pos /= m_timeWidth; pos *= m_stepCount; return pos; } qint64 stepToTime(int pos) const { double time = pos; time /= m_stepCount; time *= m_timeWidth; time += m_timeStart; return (qint64)time; } private: const trace::Profile* m_profile; int m_step; int m_stepWidth; int m_stepCount; unsigned m_index; float m_heat; qint64 m_timeStart; qint64 m_timeEnd; qint64 m_timeWidth; bool m_useGpu; int m_program; QString m_label; bool m_selected; bool m_timeSelection; qint64 m_timeSelStart; qint64 m_timeSelEnd; bool m_programSelection; int m_programSel; float m_programHeat; }; class ProfileHeatmapDataProvider : public HeatmapDataProvider { protected: enum SelectionType { None, Time, Program }; public: ProfileHeatmapDataProvider(trace::Profile* profile) : m_profile(profile), m_selectionState(NULL) { sortRows(); } virtual qint64 start() const { return m_profile->frames.front().cpuStart; } virtual qint64 end() const { return m_profile->frames.back().cpuStart + m_profile->frames.back().cpuDuration; } virtual unsigned dataRows() const { return m_rowPrograms.size(); } virtual QString dataLabel(unsigned row) const { if (row >= m_rowPrograms.size()) { return QString(); } else { return QString("%1").arg(m_rowPrograms[row]); } } virtual qint64 dataRowAt(unsigned row) const { if (row >= m_rowPrograms.size()) { return 0; } else { return m_rowPrograms[row]; } } virtual HeatmapRowIterator* dataRowIterator(int row, qint64 start, qint64 end, int steps) const { ProfileHeatmapRowIterator* itr = new ProfileHeatmapRowIterator(m_profile, start, end, steps, true, m_rowPrograms[row]); if (m_selectionState) { if (m_selectionState->type == SelectionState::Horizontal) { itr->setTimeSelection(m_selectionState->start, m_selectionState->end); } else if (m_selectionState->type == SelectionState::Vertical) { itr->setProgramSelection(m_selectionState->start); } } return itr; } virtual unsigned headerRows() const { return 2; } virtual qint64 headerRowAt(unsigned row) const { return row; } virtual QString headerLabel(unsigned row) const { if (row == 0) { return "CPU"; } else if (row == 1) { return "GPU"; } else { return QString(); } } virtual HeatmapRowIterator* headerRowIterator(int row, qint64 start, qint64 end, int steps) const { ProfileHeatmapRowIterator* itr = new ProfileHeatmapRowIterator(m_profile, start, end, steps, row != 0); if (m_selectionState) { if (m_selectionState->type == SelectionState::Horizontal) { itr->setTimeSelection(m_selectionState->start, m_selectionState->end); } else if (m_selectionState->type == SelectionState::Vertical) { itr->setProgramSelection(m_selectionState->start); } } return itr; } virtual qint64 dataItemAt(unsigned row, qint64 time) const { if (row >= m_rowPrograms.size()) { return -1; } unsigned program = m_rowPrograms[row]; std::vector::const_iterator item = Profiling::binarySearchTimespanIndexed (m_profile->calls, m_profile->programs[program].calls.begin(), m_profile->programs[program].calls.end(), time); if (item == m_profile->programs[program].calls.end()) { return -1; } return *item; } virtual qint64 headerItemAt(unsigned row, qint64 time) const { if (row >= m_rowPrograms.size()) { return -1; } if (row == 0) { /* CPU */ std::vector::const_iterator item = Profiling::binarySearchTimespan (m_profile->calls.begin(), m_profile->calls.end(), time); if (item != m_profile->calls.end()) { return item - m_profile->calls.begin(); } } else if (row == 1) { /* GPU */ for (unsigned i = 0; i < m_rowPrograms.size(); ++i) { qint64 index = dataItemAt(i, time); if (index != -1) { return index; } } } return -1; } virtual void itemDoubleClicked(qint64 index) const { if (index < 0 || index >= m_profile->calls.size()) { return; } const trace::Profile::Call& call = m_profile->calls[index]; Profiling::jumpToCall(call.no); } virtual QString itemTooltip(qint64 index) const { if (index >= m_profile->calls.size()) { return QString(); } const trace::Profile::Call& call = m_profile->calls[index]; QString text; text = QString::fromStdString(call.name); text += QString("\nCall: %1").arg(call.no); text += QString("\nCPU Start: %1").arg(Profiling::getTimeString(call.cpuStart, 1e3)); text += QString("\nCPU Duration: %1").arg(Profiling::getTimeString(call.cpuDuration, 1e3)); if (call.pixels >= 0) { text += QString("\nGPU Start: %1").arg(Profiling::getTimeString(call.gpuStart, 1e3)); text += QString("\nGPU Duration: %1").arg(Profiling::getTimeString(call.gpuDuration, 1e3)); text += QString("\nPixels Drawn: %1").arg(QLocale::system().toString((qlonglong)call.pixels)); } return text; } virtual void setSelectionState(SelectionState* state) { m_selectionState = state; } private: void sortRows() { typedef QPair Pair; std::vector gpu; /* Map shader to visible row */ for (std::vector::const_iterator itr = m_profile->programs.begin(); itr != m_profile->programs.end(); ++itr) { const trace::Profile::Program& program = *itr; unsigned no = itr - m_profile->programs.begin(); if (program.gpuTotal > 0) { gpu.push_back(Pair(program.gpuTotal, no)); } } /* Sort the shaders by most used gpu */ qSort(gpu); /* Create row order */ m_rowPrograms.clear(); for (std::vector::const_reverse_iterator itr = gpu.rbegin(); itr != gpu.rend(); ++itr) { m_rowPrograms.push_back(itr->second); } } protected: trace::Profile* m_profile; std::vector m_rowPrograms; SelectionState* m_selectionState; }; tmpNnpnZF/gui/androidutils.h0000664000175000017500000000257112543167424015427 0ustar chrischris#pragma once #include #include #include class QByteArray; class QStringList; struct AndroidDeviceInfo { QString serialNumber; enum State { OkState, UnAuthorizedState, OfflineState }; State state; bool unauthorized; enum AndroidDeviceType { Hardware, Emulator }; AndroidDeviceType type; static QStringList adbSelector(const QString &serialNumber); static QString adbPath(); }; class AndroidUtils : public QObject { Q_OBJECT public: struct FileInfo { FileInfo(); enum Type { File, Directory }; Type type; QString name; qint64 size; }; typedef QList FileInfoList; enum UpdateType { PushLocalToDevice, PullFromDeviceToLocal }; public: AndroidUtils(); void reloadAdb(); QString serialNumber() const; bool runAdb(const QStringList ¶ms, QByteArray *output = 0) const; FileInfoList ls(const QString &path) const; bool sameFile(const QString &localPath, const QString &devicePath); bool updateFile(const QString &localPath, const QString &devicePath, UpdateType updateType); signals: void statusMessage(const QString &message); private slots: void processReadyRead(); private: QString m_adbPath; mutable qint64 m_wait; mutable QString m_serialNumber; }; tmpNnpnZF/gui/traceloader.cpp0000664000175000017500000004043612543167424015550 0ustar chrischris#include "traceloader.h" #include "apitrace.h" #include #include #define FRAMES_TO_CACHE 100 static ApiTraceCall * apiCallFromTraceCall(const trace::Call *call, const QHash &helpHash, ApiTraceFrame *frame, ApiTraceCall *parentCall, TraceLoader *loader) { ApiTraceCall *apiCall; if (parentCall) apiCall = new ApiTraceCall(parentCall, loader, call); else apiCall = new ApiTraceCall(frame, loader, call); apiCall->setHelpUrl(helpHash.value(apiCall->name())); return apiCall; } TraceLoader::TraceLoader(QObject *parent) : QObject(parent) { } TraceLoader::~TraceLoader() { m_parser.close(); qDeleteAll(m_signatures); } void TraceLoader::loadTrace(const QString &filename) { if (m_helpHash.isEmpty()) { loadHelpFile(); } if (!m_frameBookmarks.isEmpty()) { qDeleteAll(m_signatures); m_signatures.clear(); m_frameBookmarks.clear(); m_createdFrames.clear(); m_parser.close(); } if (!m_parser.open(filename.toLatin1())) { qDebug() << "error: failed to open " << filename; return; } emit startedParsing(); if (m_parser.supportsOffsets()) { scanTrace(); } else { //Load the entire file into memory parseTrace(); } emit guessedApi(static_cast(m_parser.api)); emit finishedParsing(); } void TraceLoader::loadFrame(ApiTraceFrame *currentFrame) { fetchFrameContents(currentFrame); } int TraceLoader::numberOfFrames() const { return m_frameBookmarks.size(); } int TraceLoader::numberOfCallsInFrame(int frameIdx) const { if (frameIdx >= m_frameBookmarks.size()) { return 0; } FrameBookmarks::const_iterator itr = m_frameBookmarks.find(frameIdx); return itr->numberOfCalls; } void TraceLoader::loadHelpFile() { QFile file(":/resources/glreference.tsv"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString line; while (!file.atEnd()) { line = file.readLine(); QString function = line.section('\t', 0, 0).trimmed(); QUrl url = QUrl(line.section('\t', 1, 1).trimmed()); //qDebug()<<"function = "< frames; ApiTraceFrame *currentFrame = 0; trace::Call *call; trace::ParseBookmark startBookmark; int numOfFrames = 0; int numOfCalls = 0; int lastPercentReport = 0; m_parser.getBookmark(startBookmark); while ((call = m_parser.scan_call())) { ++numOfCalls; if (call->flags & trace::CALL_FLAG_END_FRAME) { FrameBookmark frameBookmark(startBookmark); frameBookmark.numberOfCalls = numOfCalls; currentFrame = new ApiTraceFrame(); currentFrame->number = numOfFrames; currentFrame->setNumChildren(numOfCalls); currentFrame->setLastCallIndex(call->no); frames.append(currentFrame); m_createdFrames.append(currentFrame); m_frameBookmarks[numOfFrames] = frameBookmark; ++numOfFrames; if (m_parser.percentRead() - lastPercentReport >= 5) { emit parsed(m_parser.percentRead()); lastPercentReport = m_parser.percentRead(); } m_parser.getBookmark(startBookmark); numOfCalls = 0; } delete call; } if (numOfCalls) { //trace::File::Bookmark endBookmark = m_parser.currentBookmark(); FrameBookmark frameBookmark(startBookmark); frameBookmark.numberOfCalls = numOfCalls; currentFrame = new ApiTraceFrame(); currentFrame->number = numOfFrames; currentFrame->setNumChildren(numOfCalls); frames.append(currentFrame); m_createdFrames.append(currentFrame); m_frameBookmarks[numOfFrames] = frameBookmark; ++numOfFrames; } emit parsed(100); emit framesLoaded(frames); } void TraceLoader::parseTrace() { QList frames; int frameCount = 0; int lastPercentReport = 0; ApiTraceFrame *currentFrame = new ApiTraceFrame(); currentFrame->number = frameCount; FrameContents frameCalls; while (frameCalls.load(this, currentFrame, m_helpHash, m_parser)) { if (frameCalls.topLevelCount() == frameCalls.allCallsCount()) { currentFrame->setCalls(frameCalls.allCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } else { currentFrame->setCalls(frameCalls.topLevelCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } frames.append(currentFrame); if (frames.count() >= FRAMES_TO_CACHE) { emit framesLoaded(frames); frames.clear(); } if (m_parser.percentRead() - lastPercentReport >= 5) { emit parsed(m_parser.percentRead()); lastPercentReport = m_parser.percentRead(); } ++frameCount; currentFrame = new ApiTraceFrame(); currentFrame->number = frameCount; frameCalls.reset(); } //last frames won't have markers // it's just a bunch of Delete calls for every object // after the last SwapBuffers if (!frameCalls.isEmpty()) { if (frameCalls.topLevelCount() == frameCalls.allCallsCount()) { currentFrame->setCalls(frameCalls.allCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } else { currentFrame->setCalls(frameCalls.topLevelCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } frames.append(currentFrame); } if (frames.count()) { emit framesLoaded(frames); } } ApiTraceCallSignature * TraceLoader::signature(unsigned id) { if (id >= m_signatures.count()) { m_signatures.resize(id + 1); return NULL; } else { return m_signatures[id]; } } void TraceLoader::addSignature(unsigned id, ApiTraceCallSignature *signature) { m_signatures[id] = signature; } void TraceLoader::searchNext(const ApiTrace::SearchRequest &request) { Q_ASSERT(m_parser.supportsOffsets()); if (m_parser.supportsOffsets()) { int startFrame = m_createdFrames.indexOf(request.frame); const FrameBookmark &frameBookmark = m_frameBookmarks[startFrame]; m_parser.setBookmark(frameBookmark.start); trace::Call *call = 0; while ((call = m_parser.parse_call())) { if (callContains(call, request.text, request.cs)) { unsigned frameIdx = callInFrame(call->no); ApiTraceFrame *frame = m_createdFrames[frameIdx]; const QVector calls = fetchFrameContents(frame); for (int i = 0; i < calls.count(); ++i) { if (calls[i]->index() == call->no) { emit searchResult(request, ApiTrace::SearchResult_Found, calls[i]); break; } } delete call; return; } delete call; } } emit searchResult(request, ApiTrace::SearchResult_NotFound, 0); } void TraceLoader::searchPrev(const ApiTrace::SearchRequest &request) { Q_ASSERT(m_parser.supportsOffsets()); if (m_parser.supportsOffsets()) { int startFrame = m_createdFrames.indexOf(request.frame); trace::Call *call = 0; QList frameCalls; int frameIdx = startFrame; const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; int numCallsToParse = frameBookmark.numberOfCalls; m_parser.setBookmark(frameBookmark.start); while ((call = m_parser.parse_call())) { frameCalls.append(call); --numCallsToParse; if (numCallsToParse == 0) { bool foundCall = searchCallsBackwards(frameCalls, frameIdx, request); qDeleteAll(frameCalls); frameCalls.clear(); if (foundCall) { return; } --frameIdx; if (frameIdx >= 0) { const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; m_parser.setBookmark(frameBookmark.start); numCallsToParse = frameBookmark.numberOfCalls; } } } } emit searchResult(request, ApiTrace::SearchResult_NotFound, 0); } bool TraceLoader::searchCallsBackwards(const QList &calls, int frameIdx, const ApiTrace::SearchRequest &request) { for (int i = calls.count() - 1; i >= 0; --i) { trace::Call *call = calls[i]; if (callContains(call, request.text, request.cs)) { ApiTraceFrame *frame = m_createdFrames[frameIdx]; const QVector apiCalls = fetchFrameContents(frame); for (int i = 0; i < apiCalls.count(); ++i) { if (apiCalls[i]->index() == call->no) { emit searchResult(request, ApiTrace::SearchResult_Found, apiCalls[i]); break; } } return true; } } return false; } int TraceLoader::callInFrame(int callIdx) const { unsigned numCalls = 0; for (int frameIdx = 0; frameIdx < m_frameBookmarks.size(); ++frameIdx) { const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; unsigned firstCall = numCalls; unsigned endCall = numCalls + frameBookmark.numberOfCalls; if (firstCall <= callIdx && endCall > callIdx) { return frameIdx; } numCalls = endCall; } Q_ASSERT(!"call not in the trace"); return 0; } bool TraceLoader::callContains(trace::Call *call, const QString &str, Qt::CaseSensitivity sensitivity) { /* * FIXME: do string comparison directly on trace::Call */ ApiTraceCall *apiCall = apiCallFromTraceCall(call, m_helpHash, 0, 0, this); bool result = apiCall->contains(str, sensitivity); delete apiCall; return result; } QVector TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) { Q_ASSERT(currentFrame); if (currentFrame->isLoaded()) { return currentFrame->calls(); } if (m_parser.supportsOffsets()) { unsigned frameIdx = currentFrame->number; int numOfCalls = numberOfCallsInFrame(frameIdx); if (numOfCalls) { const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; m_parser.setBookmark(frameBookmark.start); FrameContents frameCalls(numOfCalls); frameCalls.load(this, currentFrame, m_helpHash, m_parser); if (frameCalls.topLevelCount() == frameCalls.allCallsCount()) { emit frameContentsLoaded(currentFrame, frameCalls.allCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } else { emit frameContentsLoaded(currentFrame, frameCalls.topLevelCalls(), frameCalls.allCalls(), frameCalls.binaryDataSize()); } return frameCalls.allCalls(); } } return QVector(); } void TraceLoader::findFrameStart(ApiTraceFrame *frame) { if (!frame->isLoaded()) { loadFrame(frame); } emit foundFrameStart(frame); } void TraceLoader::findFrameEnd(ApiTraceFrame *frame) { if (!frame->isLoaded()) { loadFrame(frame); } emit foundFrameEnd(frame); } void TraceLoader::findCallIndex(int index) { int frameIdx = callInFrame(index); ApiTraceFrame *frame = m_createdFrames[frameIdx]; QVector calls = fetchFrameContents(frame); QVector::const_iterator itr; ApiTraceCall *call = 0; for (itr = calls.constBegin(); itr != calls.constEnd(); ++itr) { if ((*itr)->index() == index) { call = *itr; break; } } if (call) { emit foundCallIndex(call); } } void TraceLoader::search(const ApiTrace::SearchRequest &request) { if (request.direction == ApiTrace::SearchRequest::Next) { searchNext(request); } else { searchPrev(request); } } TraceLoader::FrameContents::FrameContents(int numOfCalls) : m_allCalls(numOfCalls), m_binaryDataSize(0), m_parsedCalls(0) {} void TraceLoader::FrameContents::reset() { m_groups.clear(); m_allCalls.clear(); m_topLevelItems.clear(); m_binaryDataSize = 0; } int TraceLoader::FrameContents::topLevelCount() const { return m_topLevelItems.count(); } int TraceLoader::FrameContents::allCallsCount() const { return m_allCalls.count(); } quint64 TraceLoader::FrameContents::binaryDataSize() const { return m_binaryDataSize; } QVector TraceLoader::FrameContents::topLevelCalls() const { return m_topLevelItems; } QVector TraceLoader::FrameContents::allCalls() const { return m_allCalls; } bool TraceLoader::FrameContents::isEmpty() { return (m_allCalls.count() == 0); } bool TraceLoader::FrameContents::load(TraceLoader *loader, ApiTraceFrame *currentFrame, QHash helpHash, trace::Parser &parser) { bool bEndFrameReached = false; int initNumOfCalls = m_allCalls.count(); trace::Call *call; ApiTraceCall *apiCall = NULL; while ((call = parser.parse_call())) { apiCall = apiCallFromTraceCall(call, helpHash, currentFrame, m_groups.isEmpty() ? 0 : m_groups.top(), loader); Q_ASSERT(apiCall); if (initNumOfCalls) { Q_ASSERT(m_parsedCalls < m_allCalls.size()); m_allCalls[m_parsedCalls++] = apiCall; } else { m_allCalls.append(apiCall); } if (m_groups.count() == 0) { m_topLevelItems.append(apiCall); } else { m_groups.top()->addChild(apiCall); } if (call->flags & trace::CALL_FLAG_MARKER_PUSH) { m_groups.push(apiCall); } else if (call->flags & trace::CALL_FLAG_MARKER_POP) { if (m_groups.count()) { m_groups.top()->finishedAddingChildren(); m_groups.pop(); } } if (apiCall->hasBinaryData()) { QByteArray data = apiCall->arguments()[apiCall->binaryDataIndex()]. toByteArray(); m_binaryDataSize += data.size(); } delete call; if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) { bEndFrameReached = true; break; } } if (initNumOfCalls) { // There can be fewer parsed calls when call in different // threads cross the frame boundary Q_ASSERT(m_parsedCalls <= initNumOfCalls); Q_ASSERT(m_parsedCalls <= m_allCalls.size()); m_allCalls.resize(m_parsedCalls); Q_ASSERT(m_parsedCalls <= currentFrame->numChildrenToLoad()); } m_allCalls.squeeze(); m_topLevelItems.squeeze(); return bEndFrameReached; } #include "traceloader.moc" tmpNnpnZF/gui/androidutils.cpp0000664000175000017500000001205712543167424015762 0ustar chrischris#include "androidutils.h" #include "androiddevicedialog.h" #include #include #include #include #include #include typedef QLatin1String _; static QString s_androidSerialNumber; QStringList AndroidDeviceInfo::adbSelector(const QString &serialNumber) { if (serialNumber.startsWith(_("????"))) return QStringList() << _("-d"); return QStringList() << _("-s") << serialNumber; } QString AndroidDeviceInfo::adbPath() { QSettings s; s.beginGroup(_("android")); return s.value(_("adbPath"), _("adb")).toString(); } AndroidUtils::FileInfo::FileInfo() { type = File; size = 0; } AndroidUtils::AndroidUtils() { m_wait = 30000; reloadAdb(); } void AndroidUtils::reloadAdb() { m_adbPath = AndroidDeviceInfo::adbPath(); } QString AndroidUtils::serialNumber() const { if (m_serialNumber.isEmpty()) m_serialNumber = s_androidSerialNumber; if (m_serialNumber.isEmpty()) { AndroidDeviceDialog ad; if (ad.exec() != QDialog::Accepted) return QString(); m_serialNumber = ad.device().serialNumber; if (ad.saveDeviceSelection()) s_androidSerialNumber = m_serialNumber; } return m_serialNumber; } bool AndroidUtils::runAdb(const QStringList ¶ms, QByteArray *output) const { QProcess adbProcess; adbProcess.start(m_adbPath, AndroidDeviceInfo::adbSelector(serialNumber()) << params); if (!output) connect(&adbProcess, SIGNAL(readyReadStandardError()), SLOT(processReadyRead())); if (!adbProcess.waitForStarted()) return false; if (!adbProcess.waitForFinished(m_wait > INT_MAX ? -1 : m_wait)) return false; if (output) *output = adbProcess.readAll(); return true; } AndroidUtils::FileInfoList AndroidUtils::ls(const QString &path) const { m_wait = 10000; FileInfoList ret; QByteArray lsOutput; runAdb(QStringList(_("shell")) << _("ls") << _("-l") << path, &lsOutput); foreach (const QByteArray &line, lsOutput.split('\n')) { if (line.isEmpty() || line[10] != ' ') continue; int pos = line.indexOf(':'); if (pos == -1) continue; pos += 3; if (pos >= line.size()) continue; FileInfo f; // Assume all links are directories f.type = (line[0] == 'd' || line[0] == 'l') ? FileInfo::Directory : FileInfo::File; f.name = line.mid(pos).trimmed(); if (f.type == FileInfo::File) { pos = line.lastIndexOf('-', pos); if (pos < 4) continue; pos = line.lastIndexOf('-', pos -1); if (pos < 3) continue; pos = line.lastIndexOf(' ', pos -1); if (pos < 2) continue; int startPos = line.lastIndexOf(' ', pos -1); if (startPos == -1) continue; f.size = line.mid(startPos, pos - startPos).trimmed().toLongLong(); } else if (line[0] == 'l') { // Fix links pos = f.name.indexOf(_("->")); if (pos < 2) continue; f.name = f.name.left(pos - 1).trimmed(); } ret << f; } return ret; } bool AndroidUtils::sameFile(const QString &localPath, const QString &devicePath) { QFileInfo fi(localPath); QList deviceFiles = ls(devicePath); return fi.exists() && (deviceFiles.size() == 1) && (deviceFiles.first().size == fi.size()); } bool AndroidUtils::updateFile(const QString &localPath, const QString &devicePath, UpdateType updateType) { if (sameFile(localPath, devicePath)) return true; QFileInfo fi(localPath); QList deviceFiles = ls(devicePath); switch (updateType) { case PushLocalToDevice: if (!fi.exists()) return false; m_wait = std::min(fi.size() / 1024, qint64(30000)); if (!runAdb(QStringList()<< _("push") << _("-p") << localPath << devicePath)) return false; deviceFiles = ls(devicePath); if (deviceFiles.size() != 1 || deviceFiles.first().size != fi.size()) return false; // pushing to device failed break; case PullFromDeviceToLocal: if (deviceFiles.size() != 1) return false; m_wait = std::min(deviceFiles.at(0).size / 1024, qint64(30000)); if (!runAdb(QStringList()<< _("pull") << _("-p") << devicePath << localPath)) return false; fi = QFileInfo(localPath); if (!fi.exists() || deviceFiles.first().size != fi.size()) return false; // pulling from device failed break; } return true; } void AndroidUtils::processReadyRead() { QProcess *proc = qobject_cast(QObject::sender()); if (proc) { QByteArray stdOutErr = proc->readAllStandardError(); foreach (const QByteArray &line, stdOutErr.split('\r')) { QString msg(line.trimmed()); if (!msg.isEmpty()) emit statusMessage(msg); } } } tmpNnpnZF/gui/apicalldelegate.h0000664000175000017500000000073412543167424016025 0ustar chrischris#pragma once #include class ApiCallDelegate : public QStyledItemDelegate { Q_OBJECT public: ApiCallDelegate(QWidget *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QIcon m_stateEmblem; QIcon m_editEmblem; QIcon m_errorEmblem; }; tmpNnpnZF/gui/argumentseditor.h0000664000175000017500000001015612543167424016140 0ustar chrischris#pragma once #include "apitracecall.h" #include "ui_argumentseditor.h" #include #include #include #include #include #include #include #include class ApiTraceCall; class BooleanComboBox : public QComboBox { Q_OBJECT Q_PROPERTY(bool value READ value WRITE setValue USER true) public: BooleanComboBox(QWidget *parent); void setValue(bool); bool value() const; }; class BooleanComboBoxEditorCreator : public BooleanComboBox { Q_OBJECT Q_PROPERTY(bool value READ value WRITE setValue USER true) public: BooleanComboBoxEditorCreator(QWidget *widget = 0) : BooleanComboBox(widget) { this->setFrame(false); }; }; class UIntEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: UIntEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMaximum(INT_MAX); }; }; class IntEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: IntEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMinimum(INT_MIN); this->setMaximum(INT_MAX); }; }; class ULongLongEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: ULongLongEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMaximum(INT_MAX); }; }; class LongLongEditorCreator : public QSpinBox { Q_OBJECT Q_PROPERTY(int value READ value WRITE setValue USER true) public: LongLongEditorCreator(QWidget *widget = 0) : QSpinBox(widget) { this->setFrame(false); this->setMinimum(INT_MIN); this->setMaximum(INT_MAX); }; }; class PixmapEditorCreator : public QLabel { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText USER true) public: PixmapEditorCreator(QWidget *widget = 0) : QLabel (widget) { }; }; class FloatEditorCreator : public QDoubleSpinBox { Q_OBJECT Q_PROPERTY(double value READ value WRITE setValue USER true) public: FloatEditorCreator(QWidget *widget = 0) : QDoubleSpinBox(widget) { this->setFrame(false); this->setMinimum(-FLT_MAX); this->setMaximum(FLT_MAX); this->setDecimals(8); }; }; class DoubleEditorCreator : public QDoubleSpinBox { Q_OBJECT Q_PROPERTY(double value READ value WRITE setValue USER true) public: DoubleEditorCreator(QWidget *widget = 0) : QDoubleSpinBox(widget) { this->setFrame(false); this->setMinimum(-DBL_MAX); this->setMaximum(DBL_MAX); this->setDecimals(8); }; }; class StringEditorCreator : public QTextEdit { Q_OBJECT Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText USER true) public: StringEditorCreator(QWidget *widget = 0) : QTextEdit(widget) { }; }; class InvalidEditorCreator : public QLabel { Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText USER true) public: InvalidEditorCreator(QWidget *widget = 0) : QLabel(widget) { }; }; class ArgumentsEditor : public QDialog { Q_OBJECT public: ArgumentsEditor(QWidget *parent=0); ~ArgumentsEditor(); virtual void accept(); void setCall(ApiTraceCall *call); ApiTraceCall *call() const; private slots: void currentSourceChanged(int idx); void sourceChanged(); void revert(); private: void init(); void setupCall(); void setupShaderEditor(const QVector &sources); QVariant valueForName(const QString &name, const QVariant &orignalValue, bool *changed) const; QVariant arrayFromIndex(const QModelIndex &index, const ApiArray &array, bool *changed) const; QVariant arrayFromEditor(const ApiArray &origArray, bool *changed) const; private: Ui_ArgumentsEditor m_ui; QStandardItemModel *m_model; ApiTraceCall *m_call; }; tmpNnpnZF/gui/pixelwidget.cpp0000664000175000017500000002623512543167424015611 0ustar chrischris/** * The source code is based on qpixeltool.cpp. * Original license follows. */ /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the tools applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "pixelwidget.h" #include #include #include #ifndef QT_NO_CLIPBOARD #include #endif #include #include #include #include #include #include PixelWidget::PixelWidget(QWidget *parent) : QWidget(parent) { setWindowTitle(QLatin1String("PixelTool")); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); m_gridSize = 1; m_gridActive = 0; m_zoom = 1; m_displayGridSize = false; m_displayGridSizeId = 0; m_mouseDown = false; m_initialSize = QSize(250, 250); setMouseTracking(true); setAutoFillBackground(true); } PixelWidget::~PixelWidget() { } void PixelWidget::setSurface(const QImage &image) { m_surface = image; updateGeometry(); update(); } void PixelWidget::timerEvent(QTimerEvent *event) { if (event->timerId() == m_displayGridSizeId) { killTimer(m_displayGridSizeId); m_displayGridSize = false; } } void render_string(QPainter *p, int w, int h, const QString &text, int flags) { p->setBrush(QColor(255, 255, 255, 191)); p->setPen(Qt::black); QRect bounds; p->drawText(0, 0, w, h, Qt::TextDontPrint | flags, text, &bounds); if (bounds.x() == 0) bounds.adjust(0, 0, 10, 0); else bounds.adjust(-10, 0, 0, 0); if (bounds.y() == 0) bounds.adjust(0, 0, 0, 10); else bounds.adjust(0, -10, 0, 0); p->drawRect(bounds); p->drawText(bounds, flags, text); } void PixelWidget::paintEvent(QPaintEvent *) { QPainter p(this); int w = width(); int h = height(); p.save(); p.scale(zoomValue(), zoomValue()); p.setCompositionMode(QPainter::CompositionMode_SourceOver); p.drawImage(0, 0, m_surface); p.scale(1/zoomValue(), 1/zoomValue()); p.restore(); // Draw the grid on top. if (m_gridActive) { p.setPen(m_gridActive == 1 ? Qt::black : Qt::white); int incr = m_gridSize * zoomValue(); for (int x=0; xkey()) { case Qt::Key_Plus: increaseZoom(); break; case Qt::Key_Minus: decreaseZoom(); break; case Qt::Key_PageUp: setGridSize(m_gridSize + 1); break; case Qt::Key_PageDown: setGridSize(m_gridSize - 1); break; case Qt::Key_G: toggleGrid(); break; case Qt::Key_C: if (e->modifiers() & Qt::ControlModifier) copyToClipboard(); break; case Qt::Key_S: if (e->modifiers() & Qt::ControlModifier) { releaseKeyboard(); saveToFile(); } break; case Qt::Key_Control: grabKeyboard(); break; } } void PixelWidget::keyReleaseEvent(QKeyEvent *e) { switch(e->key()) { case Qt::Key_Control: releaseKeyboard(); break; default: break; } } void PixelWidget::resizeEvent(QResizeEvent *e) { QWidget::resizeEvent(e); } void PixelWidget::mouseMoveEvent(QMouseEvent *e) { if (m_mouseDown) m_dragCurrent = e->pos(); int x = e->x() / zoomValue(); int y = e->y() / zoomValue(); if (x < m_surface.width() && y < m_surface.height() && x >= 0 && y >= 0) { m_currentColor = m_surface.pixel(x, y); } else m_currentColor = QColor(); emit mousePosition(x, y); update(); } void PixelWidget::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) m_mouseDown = true; m_dragStart = e->pos(); } void PixelWidget::mouseReleaseEvent(QMouseEvent *) { m_mouseDown = false; } void PixelWidget::contextMenuEvent(QContextMenuEvent *e) { QMenu menu; QAction title(QLatin1String("Surface Pixel Tool"), &menu); title.setEnabled(false); // Grid color options... QActionGroup gridGroup(this); QAction whiteGrid(QLatin1String("White grid"), &gridGroup); whiteGrid.setCheckable(true); whiteGrid.setChecked(m_gridActive == 2); whiteGrid.setShortcut(QKeySequence(Qt::Key_G)); QAction blackGrid(QLatin1String("Black grid"), &gridGroup); blackGrid.setCheckable(true); blackGrid.setChecked(m_gridActive == 1); blackGrid.setShortcut(QKeySequence(Qt::Key_G)); QAction noGrid(QLatin1String("No grid"), &gridGroup); noGrid.setCheckable(true); noGrid.setChecked(m_gridActive == 0); noGrid.setShortcut(QKeySequence(Qt::Key_G)); // Grid size options QAction incrGrid(QLatin1String("Increase grid size"), &menu); incrGrid.setShortcut(QKeySequence(Qt::Key_PageUp)); connect(&incrGrid, SIGNAL(triggered()), this, SLOT(increaseGridSize())); QAction decrGrid(QLatin1String("Decrease grid size"), &menu); decrGrid.setShortcut(QKeySequence(Qt::Key_PageDown)); connect(&decrGrid, SIGNAL(triggered()), this, SLOT(decreaseGridSize())); // Zoom options QAction incrZoom(QLatin1String("Zoom in"), &menu); incrZoom.setShortcut(QKeySequence(Qt::Key_Plus)); connect(&incrZoom, SIGNAL(triggered()), this, SLOT(increaseZoom())); QAction decrZoom(QLatin1String("Zoom out"), &menu); decrZoom.setShortcut(QKeySequence(Qt::Key_Minus)); connect(&decrZoom, SIGNAL(triggered()), this, SLOT(decreaseZoom())); // Copy to clipboard / save QAction save(QLatin1String("Save as image"), &menu); save.setShortcut(QKeySequence(QLatin1String("Ctrl+S"))); connect(&save, SIGNAL(triggered()), this, SLOT(saveToFile())); #ifndef QT_NO_CLIPBOARD QAction copy(QLatin1String("Copy to clipboard"), &menu); copy.setShortcut(QKeySequence(QLatin1String("Ctrl+C"))); connect(©, SIGNAL(triggered()), this, SLOT(copyToClipboard())); #endif menu.addAction(&title); menu.addSeparator(); menu.addAction(&whiteGrid); menu.addAction(&blackGrid); menu.addAction(&noGrid); menu.addSeparator(); menu.addAction(&incrGrid); menu.addAction(&decrGrid); menu.addSeparator(); menu.addAction(&incrZoom); menu.addAction(&decrZoom); menu.addSeparator(); menu.addAction(&save); #ifndef QT_NO_CLIPBOARD menu.addAction(©); #endif menu.exec(mapToGlobal(e->pos())); if (noGrid.isChecked()) m_gridActive = 0; else if (blackGrid.isChecked()) m_gridActive = 1; else m_gridActive = 2; } QSize PixelWidget::sizeHint() const { if (m_surface.isNull()) return m_initialSize; QSize sz(m_surface.width() * zoomValue(), m_surface.height() * zoomValue()); return sz; } void PixelWidget::startGridSizeVisibleTimer() { if (m_gridActive) { if (m_displayGridSizeId > 0) killTimer(m_displayGridSizeId); m_displayGridSizeId = startTimer(5000); m_displayGridSize = true; update(); } } void PixelWidget::setZoom(int zoom) { if (zoom > 0 && zoom != m_zoom) { QPoint pos = m_lastMousePos; m_lastMousePos = QPoint(); m_zoom = zoom; m_lastMousePos = pos; m_dragStart = m_dragCurrent = QPoint(); if (m_zoom == 1) m_gridActive = 0; else if (!m_gridActive) m_gridActive = 1; zoomChanged(m_zoom); updateGeometry(); update(); } } void PixelWidget::toggleGrid() { if (++m_gridActive > 2) m_gridActive = 0; update(); } void PixelWidget::setGridSize(int gridSize) { if (m_gridActive && gridSize > 0) { m_gridSize = gridSize; startGridSizeVisibleTimer(); update(); } } void PixelWidget::copyToClipboard() { QClipboard *cb = QApplication::clipboard(); cb->setImage(m_surface); } void PixelWidget::saveToFile() { QString name = QFileDialog::getSaveFileName(this, QLatin1String("Save as image"), QString(), QLatin1String("*.png")); if (!name.isEmpty()) { if (!name.endsWith(QLatin1String(".png"))) name.append(QLatin1String(".png")); m_surface.save(name, "PNG"); } } QColor PixelWidget::colorAtCurrentPosition() const { return m_currentColor; } #include "pixelwidget.moc" tmpNnpnZF/gui/mainwindow.cpp0000664000175000017500000015274012543167424015441 0ustar chrischris#include "mainwindow.h" #include "apitrace.h" #include "apitracecall.h" #include "apicalldelegate.h" #include "apitracemodel.h" #include "apitracefilter.h" #include "argumentseditor.h" #include "imageviewer.h" #include "jumpwidget.h" #include "profiledialog.h" #include "retracer.h" #include "searchwidget.h" #include "settingsdialog.h" #include "shaderssourcewidget.h" #include "tracedialog.h" #include "traceprocess.h" #include "trimprocess.h" #include "thumbnail.h" #include "androidretracer.h" #include "androidfiledialog.h" #include "ui_retracerdialog.h" #include "ui_profilereplaydialog.h" #include "vertexdatainterpreter.h" #include "trace_profiler.hpp" #include "image/image.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef QLatin1String _; MainWindow::MainWindow() : QMainWindow(), m_api(trace::API_UNKNOWN), m_initalCallNum(-1), m_selectedEvent(0), m_stateEvent(0), m_nonDefaultsLookupEvent(0) { m_ui.setupUi(this); updateActionsState(false); initObjects(); initConnections(); } MainWindow::~MainWindow() { delete m_trace; m_trace = 0; delete m_proxyModel; delete m_model; } void MainWindow::createTrace() { if (!m_traceProcess->canTrace()) { QMessageBox::warning( this, tr("Unsupported"), tr("Current configuration doesn't support tracing.")); return; } TraceDialog dialog; if (dialog.exec() == QDialog::Accepted) { qDebug()<< "App : " <setApi(dialog.api()); m_traceProcess->setExecutablePath(dialog.applicationPath()); m_traceProcess->setArguments(dialog.arguments()); m_traceProcess->start(); } } void MainWindow::openTrace() { QString fileName = QFileDialog::getOpenFileName( this, tr("Open Trace"), QDir::homePath(), tr("Trace Files (*.trace)")); if (!fileName.isEmpty() && QFile::exists(fileName)) { newTraceFile(fileName); } } void MainWindow::saveTrace() { QString localFile = m_trace->fileName(); QString fileName = QFileDialog::getSaveFileName( this, tr("Save Trace As"), QFileInfo(localFile).fileName(), tr("Trace Files (*.trace);;All Files (*)")); if (!fileName.isEmpty()) { QFile::copy(localFile, fileName); } } void MainWindow::pullTrace() { QString androidFile = AndroidFileDialog::getOpenFileName(this, tr("Open trace file"), _("/sdcard"), _(".trace")); if (androidFile.isEmpty()) return; QString localFile = QFileDialog::getSaveFileName( this, tr("Open Trace"), QDir::homePath() + _("/") + QFileInfo(androidFile).fileName(), tr("Trace Files (*.trace)")); if (localFile.isEmpty()) return; AndroidUtils au; connect(&au, SIGNAL(statusMessage(QString)), statusBar(), SLOT(showMessage(QString))); if (au.updateFile(localFile, androidFile, AndroidUtils::PullFromDeviceToLocal)) { m_androidFilePath = androidFile; linkLocalAndroidTrace(localFile, androidFile); newTraceFile(localFile); m_ui.actionRetraceOnAndroid->setChecked(true); } else { QMessageBox::warning(this, tr("Error"), tr("Pulling '%1' for Android device failed.").arg(androidFile)); } } void MainWindow::pushTrace() { QString localFile = m_trace->fileName(); QString androidFile = AndroidFileDialog::getSaveFileName(this, tr("Save trace file"), _("/sdcard/") + QFileInfo(localFile).fileName(), _(".trace")); if (androidFile.isEmpty()) return; AndroidUtils au; connect(&au, SIGNAL(statusMessage(QString)), statusBar(), SLOT(showMessage(QString))); if (au.updateFile(localFile, androidFile, AndroidUtils::PushLocalToDevice)) { m_androidFilePath = androidFile; linkLocalAndroidTrace(localFile, androidFile); } else { QMessageBox::warning(this, tr("Error"), tr("Pushing '%1' to Android device failed.\n" "Make usre you have enough space on device.").arg(localFile)); } statusBar()->showMessage(QString()); } void MainWindow::linkTrace() { QString localFile = m_trace->fileName(); QString androidFile = AndroidFileDialog::getOpenFileName(this, tr("Link trace file %1").arg(localFile), _("/sdcard/") + QFileInfo(localFile).fileName(), _(".trace")); if (androidFile.isEmpty()) return; m_androidFilePath = androidFile; linkLocalAndroidTrace(localFile, androidFile); } void MainWindow::retraceOnAndroid(bool android) { delete m_retracer; if (android) { m_retracer = new AndroidRetracer(this); m_androidFilePath = linkedAndroidTrace(m_trace->fileName()); } else { m_retracer = new Retracer(this); } initRetraceConnections(); } void MainWindow::loadTrace(const QString &fileName, int callNum) { if (!QFile::exists(fileName)) { QMessageBox::warning(this, tr("File Missing"), tr("File '%1' doesn't exist.").arg(fileName)); return; } m_initalCallNum = callNum; newTraceFile(fileName); } void MainWindow::setRemoteTarget(const QString &host) { m_retracer->setRemoteTarget(host); } void MainWindow::callItemSelected(const QModelIndex &index) { ApiTraceEvent *event = index.data(ApiTraceModel::EventRole).value(); if (event && event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); m_ui.detailsDock->setWindowTitle( tr("Details View. Frame %1, Call %2") .arg(call->parentFrame() ? call->parentFrame()->number : 0) .arg(call->index())); m_ui.detailsWebView->setHtml(call->toHtml()); m_ui.detailsDock->show(); m_ui.callView->scrollTo(index); if (call->hasBinaryData()) { QByteArray data = call->arguments()[call->binaryDataIndex()].toByteArray(); m_vdataInterpreter->setData(data); QVector args = call->arguments(); for (int i = 0; i < call->argNames().count(); ++i) { QString name = call->argNames()[i]; if (name == QLatin1String("stride")) { int stride = args[i].toInt(); m_ui.vertexStrideSB->setValue(stride); } else if (name == QLatin1String("size")) { int components = args[i].toInt(); m_ui.vertexComponentsSB->setValue(components); } else if (name == QLatin1String("type")) { QString val = args[i].toString(); int textIndex = m_ui.vertexTypeCB->findText(val); if (textIndex >= 0) { m_ui.vertexTypeCB->setCurrentIndex(textIndex); } } } } m_ui.backtraceBrowser->setText(call->backtrace()); m_ui.backtraceDock->setVisible(!call->backtrace().isNull()); m_ui.vertexDataDock->setVisible(call->hasBinaryData()); m_selectedEvent = call; } else { if (event && event->type() == ApiTraceEvent::Frame) { m_selectedEvent = static_cast(event); } else { m_selectedEvent = 0; } m_ui.detailsDock->hide(); m_ui.backtraceDock->hide(); m_ui.vertexDataDock->hide(); } if (m_selectedEvent && m_selectedEvent->hasState()) { fillStateForFrame(); } else { m_ui.stateDock->hide(); } } void MainWindow::callItemActivated(const QModelIndex &index) { lookupState(); } void MainWindow::replayStart() { if (m_trace->isSaving()) { QMessageBox::warning( this, tr("Trace Saving"), tr("QApiTrace is currently saving the edited trace file. " "Please wait until it finishes and try again.")); return; } QDialog dlg; Ui_RetracerDialog dlgUi; dlgUi.setupUi(&dlg); dlgUi.doubleBufferingCB->setChecked( m_retracer->isDoubleBuffered()); dlgUi.errorCheckCB->setChecked( !m_retracer->isBenchmarking()); dlgUi.singlethreadCB->setChecked( m_retracer->isSinglethread()); dlgUi.coreProfileCB->setChecked( m_retracer->isCoreProfile()); if (dlg.exec() == QDialog::Accepted) { m_retracer->setDoubleBuffered( dlgUi.doubleBufferingCB->isChecked()); m_retracer->setBenchmarking( !dlgUi.errorCheckCB->isChecked()); m_retracer->setSinglethread( dlgUi.singlethreadCB->isChecked()); m_retracer->setCoreProfile( dlgUi.coreProfileCB->isChecked()); m_retracer->setProfiling(false, false, false, false); replayTrace(false, false); } } void MainWindow::replayProfile() { if (m_trace->isSaving()) { QMessageBox::warning( this, tr("Trace Saving"), tr("QApiTrace is currently saving the edited trace file. " "Please wait until it finishes and try again.")); return; } QDialog dlg; Ui_ProfileReplayDialog dlgUi; dlgUi.setupUi(&dlg); if (m_ui.actionRetraceOnAndroid->isChecked()) { dlgUi.gpuTimesCB->setChecked(false); dlgUi.pixelsDrawnCB->setChecked(false); } if (dlg.exec() == QDialog::Accepted) { m_retracer->setProfiling( dlgUi.gpuTimesCB->isChecked(), dlgUi.cpuTimesCB->isChecked(), dlgUi.pixelsDrawnCB->isChecked(), dlgUi.memoryUsageCB->isChecked()); replayTrace(false, false); } } void MainWindow::replayStop() { m_retracer->quit(); updateActionsState(true, true); } void MainWindow::newTraceFile(const QString &fileName) { if (m_ui.actionRetraceOnAndroid->isChecked()) m_androidFilePath = linkedAndroidTrace(fileName); qDebug()<< "Loading:" << fileName; m_progressBar->setValue(0); m_trace->setFileName(fileName); if (fileName.isEmpty()) { updateActionsState(false); setWindowTitle(tr("QApiTrace")); } else { updateActionsState(true); QFileInfo info(fileName); setWindowTitle( tr("QApiTrace - %1").arg(info.fileName())); } } void MainWindow::replayFinished(const QString &message) { updateActionsState(true); m_progressBar->hide(); statusBar()->showMessage(message, 2000); m_stateEvent = 0; m_ui.actionShowErrorsDock->setEnabled(m_trace->hasErrors()); m_ui.errorsDock->setVisible(m_trace->hasErrors()); if (!m_trace->hasErrors()) { m_ui.errorsTreeWidget->clear(); } } void MainWindow::replayError(const QString &message) { updateActionsState(true); m_stateEvent = 0; m_nonDefaultsLookupEvent = 0; m_progressBar->hide(); statusBar()->showMessage( tr("Replaying unsuccessful."), 2000); QMessageBox::warning( this, tr("Replay Failed"), message); } void MainWindow::startedLoadingTrace() { Q_ASSERT(m_trace); m_progressBar->show(); QFileInfo info(m_trace->fileName()); statusBar()->showMessage( tr("Loading %1...").arg(info.fileName())); } void MainWindow::finishedLoadingTrace() { m_progressBar->hide(); if (!m_trace) { return; } m_api = m_trace->api(); QFileInfo info(m_trace->fileName()); statusBar()->showMessage( tr("Loaded %1").arg(info.fileName()), 3000); if (m_initalCallNum >= 0) { m_trace->findCallIndex(m_initalCallNum); m_initalCallNum = -1; } else { m_trace->finishedParsing(); } m_ui.actionPushTrace->setEnabled(m_api == trace::API_EGL); m_ui.actionLinkTrace->setEnabled(m_api == trace::API_EGL); m_ui.actionRetraceOnAndroid->setEnabled(m_api == trace::API_EGL); } void MainWindow::replayTrace(bool dumpState, bool dumpThumbnails) { if (m_trace->fileName().isEmpty()) { return; } if (m_ui.actionRetraceOnAndroid->isChecked()) { if (m_androidFilePath.isEmpty()) { QMessageBox::information(this, tr("Info"), tr("Current opened file is not linked with any file on the Android device.")); linkTrace(); if (m_androidFilePath.isEmpty()) return; } // make sure both trace files (local & android) are the same AndroidUtils au; if (!au.sameFile(m_trace->fileName(), m_androidFilePath)) { QMessageBox msgBox; msgBox.setText("Local file is different from the Android file.\nWhat do you want to do?"); msgBox.setDetailedText(tr("Chossing:\n" " - \"Update Android\" will push the local file to the device (replacing it).\n" " - \"Update local\" will pull the device file to local (replacing it).")); QAbstractButton *updateAndroid = msgBox.addButton(tr("Update Android"), QMessageBox::ActionRole); QAbstractButton *updateLocal = msgBox.addButton(tr("Update local"), QMessageBox::ActionRole); msgBox.addButton(QMessageBox::Cancel); msgBox.exec(); if (msgBox.clickedButton() == updateAndroid) { statusBar()->showMessage(tr("Please wait, pushing the file to device might take long time ...")); if (!au.updateFile(m_trace->fileName(), m_androidFilePath, AndroidUtils::PushLocalToDevice)) { QMessageBox::warning(this, tr("Error"), tr("Pushing '%1' to Android device failed.\n" "Make usre you have enough space on device.").arg(m_trace->fileName())); } } else if (msgBox.clickedButton() == updateLocal) { statusBar()->showMessage(tr("Please wait, pulling the file from device might take long time ...")); if (!au.updateFile(m_trace->fileName(), m_androidFilePath, AndroidUtils::PullFromDeviceToLocal)) { QMessageBox::warning(this, tr("Error"), tr("Pulling '%1' for Android device failed.").arg(m_androidFilePath)); } } else { return; } statusBar()->showMessage(QString()); } static_cast(m_retracer)->setAndroidFileName(m_androidFilePath); } m_retracer->setFileName(m_trace->fileName()); m_retracer->setAPI(m_api); m_retracer->setCaptureState(dumpState); m_retracer->setCaptureThumbnails(dumpThumbnails); if (m_retracer->captureState() && m_selectedEvent) { int index = 0; if (m_selectedEvent->type() == ApiTraceEvent::Call) { index = static_cast(m_selectedEvent)->index(); } else if (m_selectedEvent->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(m_selectedEvent); if (frame->isEmpty()) { //XXX i guess we could still get the current state qDebug()<<"tried to get a state for an empty frame"; return; } index = frame->lastCallIndex(); } else { qDebug()<<"Unknown event type"; return; } m_retracer->setCaptureAtCallNumber(index); } if (m_trace->isMissingThumbnails()) { m_retracer->resetThumbnailsToCapture(); m_trace->iterateMissingThumbnails(this, this->thumbnailCallback); m_trace->resetMissingThumbnails(); } m_retracer->start(); m_ui.actionStop->setEnabled(true); m_progressBar->show(); if (dumpState || dumpThumbnails) { if (dumpState && dumpThumbnails) { statusBar()->showMessage( tr("Looking up the state and capturing thumbnails...")); } else if (dumpState) { statusBar()->showMessage( tr("Looking up the state...")); } else if (dumpThumbnails) { statusBar()->showMessage( tr("Capturing thumbnails...")); } } else if (m_retracer->isProfiling()) { statusBar()->showMessage( tr("Profiling draw calls in trace file...")); } else { statusBar()->showMessage( tr("Replaying the trace file...")); } } void MainWindow::trimEvent() { int trimIndex = 0; Q_ASSERT(m_trimEvent->type() == ApiTraceEvent::Call || m_trimEvent->type() == ApiTraceEvent::Frame); if (m_trimEvent->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(m_trimEvent); trimIndex = call->index(); } else if (m_trimEvent->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(m_trimEvent); const QList frames = m_trace->frames(); trimIndex = frame->lastCallIndex(); } m_trimProcess->setTracePath(m_trace->fileName()); m_trimProcess->setTrimIndex(trimIndex); m_trimProcess->start(); } void MainWindow::lookupState() { if (!m_selectedEvent) { QMessageBox::warning( this, tr("Unknown Event"), tr("To inspect the state select an event in the event list.")); return; } if (m_trace->isSaving()) { QMessageBox::warning( this, tr("Trace Saving"), tr("QApiTrace is currently saving the edited trace file. " "Please wait until it finishes and try again.")); return; } m_stateEvent = m_selectedEvent; replayTrace(true, false); } void MainWindow::showThumbnails() { replayTrace(false, true); } void MainWindow::trim() { if (!m_selectedEvent) { QMessageBox::warning( this, tr("Unknown Event"), tr("To trim select a frame or an event in the event list.")); return; } m_trimEvent = m_selectedEvent; trimEvent(); } static void variantToString(const QVariant &var, QString &str) { if (var.type() == QVariant::List) { QVector lst = var.toList().toVector(); str += QLatin1String("["); for (int i = 0; i < lst.count(); ++i) { QVariant val = lst[i]; variantToString(val, str); if (i < lst.count() - 1) str += QLatin1String(", "); } str += QLatin1String("]"); } else if (var.type() == QVariant::Map) { Q_ASSERT(!"unsupported state type"); } else if (var.type() == QVariant::Hash) { Q_ASSERT(!"unsupported state type"); } else { str += var.toString(); } } static QTreeWidgetItem * variantToItem(const QString &key, const QVariant &var, const QVariant &defaultVar); static void variantMapToItems(const QVariantMap &map, const QVariantMap &defaultMap, QList &items) { QVariantMap::const_iterator itr; for (itr = map.constBegin(); itr != map.constEnd(); ++itr) { QString key = itr.key(); QVariant var = itr.value(); QVariant defaultVar = defaultMap[key]; QTreeWidgetItem *item = variantToItem(key, var, defaultVar); if (item) { items.append(item); } } } static void variantListToItems(const QVector &lst, const QVector &defaultLst, QList &items) { int width = QString::number(lst.count()).length(); for (int i = 0; i < lst.count(); ++i) { QString key = QString::number(i).rightJustified(width, ' '); QVariant var = lst[i]; QVariant defaultVar; if (i < defaultLst.count()) { defaultVar = defaultLst[i]; } QTreeWidgetItem *item = variantToItem(key, var, defaultVar); if (item) { items.append(item); } } } // Get the depth (dimensionality) of the variant: // // It will return: // 0: scalar // 1: vector (up to 4 elems) // 2: matrix (up to 4x4 elements) // 3: array // 4: map, etc. static unsigned getVariantDepth(const QVariant &var) { if (var.type() == QVariant::List) { QVector lst = var.toList().toVector(); unsigned maxDepth = 0; for (int i = 0; i < lst.count(); ++i) { unsigned elemDepth = getVariantDepth(lst[i]); if (elemDepth > maxDepth) { if (elemDepth >= 4) { return elemDepth; } maxDepth = elemDepth; } } if (lst.count() > 1) { if (lst.count() > 4) { return 3; } maxDepth += 1; } return maxDepth; } else if (var.type() == QVariant::Map) { return 4; } else if (var.type() == QVariant::Hash) { return 4; } else { return 0; } } static QTreeWidgetItem * variantToItem(const QString &key, const QVariant &var, const QVariant &defaultVar) { if (var == defaultVar) { return NULL; } QString val; bool deep = getVariantDepth(var) >= 3; if (!deep) { variantToString(var, val); } //qDebug()<<"key = "<setToolTip(0, toolTip); item->setToolTip(1, toolTip); //item->setText(1, descr); QLabel *l = new QLabel(descr, tree); l->setWordWrap(true); tree->setItemWidget(item, 1, l); item->setData(0, Qt::UserRole, surface.data()); } void MainWindow::fillStateForFrame() { if (!m_selectedEvent || !m_selectedEvent->hasState()) { return; } if (m_nonDefaultsLookupEvent) { m_ui.nonDefaultsCB->blockSignals(true); m_ui.nonDefaultsCB->setChecked(true); m_ui.nonDefaultsCB->blockSignals(false); } bool nonDefaults = m_ui.nonDefaultsCB->isChecked(); QVariantMap defaultParams; if (nonDefaults) { ApiTraceState defaultState = m_trace->defaultState(); defaultParams = defaultState.parameters(); } const ApiTraceState &state = *m_selectedEvent->state(); m_ui.stateTreeWidget->clear(); QList items; variantMapToItems(state.parameters(), defaultParams, items); m_ui.stateTreeWidget->insertTopLevelItems(0, items); QMap shaderSources = state.shaderSources(); if (shaderSources.isEmpty()) { m_sourcesWidget->setShaders(shaderSources); } else { m_sourcesWidget->setShaders(shaderSources); } m_ui.uniformsTreeWidget->clear(); QList uniformsItems; variantMapToItems(state.uniforms(), QVariantMap(), uniformsItems); m_ui.uniformsTreeWidget->insertTopLevelItems(0, uniformsItems); m_ui.buffersTreeWidget->clear(); QList buffersItems; variantMapToItems(state.buffers(), QVariantMap(), buffersItems); m_ui.buffersTreeWidget->insertTopLevelItems(0, buffersItems); const QList &textures = state.textures(); const QList &fbos = state.framebuffers(); m_ui.surfacesTreeWidget->clear(); if (textures.isEmpty() && fbos.isEmpty()) { m_ui.surfacesTab->setDisabled(false); } else { m_ui.surfacesTreeWidget->setIconSize(QSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); if (!textures.isEmpty()) { QTreeWidgetItem *textureItem = new QTreeWidgetItem(m_ui.surfacesTreeWidget); textureItem->setText(0, tr("Textures")); if (textures.count() <= 6) { textureItem->setExpanded(true); } for (int i = 0; i < textures.count(); ++i) { const ApiTexture &texture = textures[i]; addSurfaceItem(texture, texture.label(), textureItem, m_ui.surfacesTreeWidget); } } if (!fbos.isEmpty()) { QTreeWidgetItem *fboItem = new QTreeWidgetItem(m_ui.surfacesTreeWidget); fboItem->setText(0, tr("Framebuffers")); if (fbos.count() <= 6) { fboItem->setExpanded(true); } for (int i = 0; i < fbos.count(); ++i) { const ApiFramebuffer &fbo = fbos[i]; addSurfaceItem(fbo, fbo.type(), fboItem, m_ui.surfacesTreeWidget); } } m_ui.surfacesTab->setEnabled(true); } m_ui.stateDock->show(); } void MainWindow::showSettings() { SettingsDialog dialog; dialog.setFilterModel(m_proxyModel); dialog.exec(); } void MainWindow::openHelp(const QUrl &url) { QDesktopServices::openUrl(url); } void MainWindow::showSurfacesMenu(const QPoint &pos) { QTreeWidget *tree = m_ui.surfacesTreeWidget; QTreeWidgetItem *item = tree->itemAt(pos); if (!item) { return; } QMenu menu(tr("Surfaces"), this); QAction *act = menu.addAction(tr("View Image")); act->setStatusTip(tr("View the currently selected surface")); connect(act, SIGNAL(triggered()), SLOT(showSelectedSurface())); act = menu.addAction(tr("Save Image")); act->setStatusTip(tr("Save the currently selected surface")); connect(act, SIGNAL(triggered()), SLOT(saveSelectedSurface())); menu.exec(tree->viewport()->mapToGlobal(pos)); } void MainWindow::showSelectedSurface() { QTreeWidgetItem *item = m_ui.surfacesTreeWidget->currentItem(); if (!item) { return; } QVariant var = item->data(0, Qt::UserRole); if (!var.isValid()) { return; } ImageViewer *viewer = new ImageViewer(this); QString title; if (selectedCall()) { title = tr("QApiTrace - Surface at %1 (%2)") .arg(selectedCall()->name()) .arg(selectedCall()->index()); } else { title = tr("QApiTrace - Surface Viewer"); } viewer->setWindowTitle(title); viewer->setAttribute(Qt::WA_DeleteOnClose, true); QByteArray data = var.value(); viewer->setData(data); viewer->show(); viewer->raise(); viewer->activateWindow(); } void MainWindow::initObjects() { m_ui.stateTreeWidget->sortByColumn(0, Qt::AscendingOrder); m_ui.uniformsTreeWidget->sortByColumn(0, Qt::AscendingOrder); m_sourcesWidget = new ShadersSourceWidget(m_ui.shadersTab); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_sourcesWidget); m_ui.shadersTab->setLayout(layout); m_trace = new ApiTrace(); m_retracer = new Retracer(this); m_vdataInterpreter = new VertexDataInterpreter(this); m_vdataInterpreter->setListWidget(m_ui.vertexDataListWidget); m_vdataInterpreter->setStride( m_ui.vertexStrideSB->value()); m_vdataInterpreter->setComponents( m_ui.vertexComponentsSB->value()); m_vdataInterpreter->setStartingOffset( m_ui.startingOffsetSB->value()); m_vdataInterpreter->setTypeFromString( m_ui.vertexTypeCB->currentText()); m_model = new ApiTraceModel(); m_model->setApiTrace(m_trace); m_proxyModel = new ApiTraceFilter(); m_proxyModel->setSourceModel(m_model); m_ui.callView->setModel(m_proxyModel); m_ui.callView->setItemDelegate( new ApiCallDelegate(m_ui.callView)); m_ui.callView->resizeColumnToContents(0); m_ui.callView->header()->swapSections(0, 1); m_ui.callView->setColumnWidth(1, 42); m_ui.callView->setContextMenuPolicy(Qt::CustomContextMenu); m_progressBar = new QProgressBar(); m_progressBar->setRange(0, 100); statusBar()->addPermanentWidget(m_progressBar); m_progressBar->hide(); m_argsEditor = new ArgumentsEditor(this); m_ui.detailsDock->hide(); m_ui.backtraceDock->hide(); m_ui.errorsDock->hide(); m_ui.vertexDataDock->hide(); m_ui.stateDock->hide(); setDockOptions(dockOptions() | QMainWindow::ForceTabbedDocks); tabifyDockWidget(m_ui.stateDock, m_ui.vertexDataDock); tabifyDockWidget(m_ui.detailsDock, m_ui.errorsDock); tabifyDockWidget(m_ui.detailsDock, m_ui.backtraceDock); m_ui.surfacesTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); m_ui.detailsWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateExternalLinks); m_jumpWidget = new JumpWidget(this); m_ui.centralLayout->addWidget(m_jumpWidget); m_jumpWidget->hide(); m_searchWidget = new SearchWidget(this); m_ui.centralLayout->addWidget(m_searchWidget); m_searchWidget->hide(); m_traceProcess = new TraceProcess(this); m_trimProcess = new TrimProcess(this); m_profileDialog = new ProfileDialog(); } void MainWindow::initConnections() { connect(m_trace, SIGNAL(startedLoadingTrace()), this, SLOT(startedLoadingTrace())); connect(m_trace, SIGNAL(loaded(int)), this, SLOT(loadProgess(int))); connect(m_trace, SIGNAL(finishedLoadingTrace()), this, SLOT(finishedLoadingTrace())); connect(m_trace, SIGNAL(startedSaving()), this, SLOT(slotStartedSaving())); connect(m_trace, SIGNAL(saved()), this, SLOT(slotSaved())); connect(m_trace, SIGNAL(changed(ApiTraceEvent*)), this, SLOT(slotTraceChanged(ApiTraceEvent*))); connect(m_trace, SIGNAL(findResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)), this, SLOT(slotSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*))); connect(m_trace, SIGNAL(foundFrameStart(ApiTraceFrame*)), this, SLOT(slotFoundFrameStart(ApiTraceFrame*))); connect(m_trace, SIGNAL(foundFrameEnd(ApiTraceFrame*)), this, SLOT(slotFoundFrameEnd(ApiTraceFrame*))); connect(m_trace, SIGNAL(foundCallIndex(ApiTraceCall*)), this, SLOT(slotJumpToResult(ApiTraceCall*))); initRetraceConnections(); connect(m_ui.vertexInterpretButton, SIGNAL(clicked()), m_vdataInterpreter, SLOT(interpretData())); connect(m_ui.bufferExportButton, SIGNAL(clicked()), this, SLOT(exportBufferData())); connect(m_ui.vertexTypeCB, SIGNAL(currentIndexChanged(const QString&)), m_vdataInterpreter, SLOT(setTypeFromString(const QString&))); connect(m_ui.vertexStrideSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setStride(int))); connect(m_ui.vertexComponentsSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setComponents(int))); connect(m_ui.startingOffsetSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setStartingOffset(int))); connect(m_ui.actionNew, SIGNAL(triggered()), this, SLOT(createTrace())); connect(m_ui.actionOpen, SIGNAL(triggered()), this, SLOT(openTrace())); connect(m_ui.actionSave, SIGNAL(triggered()), this, SLOT(saveTrace())); connect(m_ui.actionPullTrace, SIGNAL(triggered()), this, SLOT(pullTrace())); connect(m_ui.actionPushTrace, SIGNAL(triggered()), this, SLOT(pushTrace())); connect(m_ui.actionLinkTrace, SIGNAL(triggered()), this, SLOT(linkTrace())); connect(m_ui.actionRetraceOnAndroid, SIGNAL(toggled(bool)), this, SLOT(retraceOnAndroid(bool))); connect(m_ui.actionQuit, SIGNAL(triggered()), this, SLOT(close())); connect(m_ui.actionFind, SIGNAL(triggered()), this, SLOT(slotSearch())); connect(m_ui.actionGo, SIGNAL(triggered()), this, SLOT(slotGoTo())); connect(m_ui.actionGoFrameStart, SIGNAL(triggered()), this, SLOT(slotGoFrameStart())); connect(m_ui.actionGoFrameEnd, SIGNAL(triggered()), this, SLOT(slotGoFrameEnd())); connect(m_ui.actionReplay, SIGNAL(triggered()), this, SLOT(replayStart())); connect(m_ui.actionProfile, SIGNAL(triggered()), this, SLOT(replayProfile())); connect(m_ui.actionStop, SIGNAL(triggered()), this, SLOT(replayStop())); connect(m_ui.actionLookupState, SIGNAL(triggered()), this, SLOT(lookupState())); connect(m_ui.actionTrim, SIGNAL(triggered()), this, SLOT(trim())); connect(m_ui.actionShowThumbnails, SIGNAL(triggered()), this, SLOT(showThumbnails())); connect(m_ui.actionOptions, SIGNAL(triggered()), this, SLOT(showSettings())); connect(m_ui.callView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(callItemSelected(const QModelIndex &))); connect(m_ui.callView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(callItemActivated(const QModelIndex &))); connect(m_ui.callView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(customContextMenuRequested(QPoint))); connect(m_ui.surfacesTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showSurfacesMenu(const QPoint &))); connect(m_ui.surfacesTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), SLOT(showSelectedSurface())); connect(m_ui.detailsWebView, SIGNAL(linkClicked(const QUrl&)), this, SLOT(openHelp(const QUrl&))); connect(m_ui.nonDefaultsCB, SIGNAL(toggled(bool)), this, SLOT(fillState(bool))); connect(m_jumpWidget, SIGNAL(jumpTo(int)), SLOT(slotJumpTo(int))); connect(m_searchWidget, SIGNAL(searchNext(const QString&, Qt::CaseSensitivity)), SLOT(slotSearchNext(const QString&, Qt::CaseSensitivity))); connect(m_searchWidget, SIGNAL(searchPrev(const QString&, Qt::CaseSensitivity)), SLOT(slotSearchPrev(const QString&, Qt::CaseSensitivity))); connect(m_traceProcess, SIGNAL(tracedFile(const QString&)), SLOT(createdTrace(const QString&))); connect(m_traceProcess, SIGNAL(error(const QString&)), SLOT(traceError(const QString&))); connect(m_trimProcess, SIGNAL(trimmedFile(const QString&)), SLOT(createdTrim(const QString&))); connect(m_trimProcess, SIGNAL(error(const QString&)), SLOT(trimError(const QString&))); connect(m_ui.errorsDock, SIGNAL(visibilityChanged(bool)), m_ui.actionShowErrorsDock, SLOT(setChecked(bool))); connect(m_ui.actionShowErrorsDock, SIGNAL(triggered(bool)), m_ui.errorsDock, SLOT(setVisible(bool))); connect(m_ui.errorsTreeWidget, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(slotErrorSelected(QTreeWidgetItem*))); connect(m_ui.actionShowProfileDialog, SIGNAL(triggered(bool)), m_profileDialog, SLOT(show())); connect(m_profileDialog, SIGNAL(jumpToCall(int)), this, SLOT(slotJumpTo(int))); } void MainWindow::initRetraceConnections() { connect(m_retracer, SIGNAL(finished(const QString&)), this, SLOT(replayFinished(const QString&))); connect(m_retracer, SIGNAL(error(const QString&)), this, SLOT(replayError(const QString&))); connect(m_retracer, SIGNAL(foundState(ApiTraceState*)), this, SLOT(replayStateFound(ApiTraceState*))); connect(m_retracer, SIGNAL(foundProfile(trace::Profile*)), this, SLOT(replayProfileFound(trace::Profile*))); connect(m_retracer, SIGNAL(foundThumbnails(const ImageHash&)), this, SLOT(replayThumbnailsFound(const ImageHash&))); connect(m_retracer, SIGNAL(retraceErrors(const QList&)), this, SLOT(slotRetraceErrors(const QList&))); } void MainWindow::updateActionsState(bool traceLoaded, bool stopped) { m_ui.actionPushTrace->setEnabled(false); m_ui.actionLinkTrace->setEnabled(false); m_ui.actionRetraceOnAndroid->setEnabled(false); if (traceLoaded) { /* File */ m_ui.actionSave ->setEnabled(true); /* Edit */ m_ui.actionFind ->setEnabled(true); m_ui.actionGo ->setEnabled(true); m_ui.actionGoFrameStart ->setEnabled(true); m_ui.actionGoFrameEnd ->setEnabled(true); /* Trace */ if (stopped) { m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); } else { m_ui.actionStop->setEnabled(true); m_ui.actionReplay->setEnabled(false); } m_ui.actionProfile ->setEnabled(true); m_ui.actionLookupState ->setEnabled(true); m_ui.actionShowThumbnails->setEnabled(true); m_ui.actionTrim ->setEnabled(true); } else { /* File */ m_ui.actionSave ->setEnabled(false); /* Edit */ m_ui.actionFind ->setEnabled(false); m_ui.actionGo ->setEnabled(false); m_ui.actionGoFrameStart ->setEnabled(false); m_ui.actionGoFrameEnd ->setEnabled(false); /* Trace */ m_ui.actionReplay ->setEnabled(false); m_ui.actionProfile ->setEnabled(false); m_ui.actionStop ->setEnabled(false); m_ui.actionLookupState ->setEnabled(false); m_ui.actionShowThumbnails->setEnabled(false); m_ui.actionTrim ->setEnabled(false); } } void MainWindow::closeEvent(QCloseEvent * event) { m_profileDialog->close(); QMainWindow::closeEvent(event); } void MainWindow::replayProfileFound(trace::Profile *profile) { m_ui.actionShowProfileDialog->setEnabled(true); m_profileDialog->setProfile(profile); m_profileDialog->show(); m_profileDialog->activateWindow(); m_profileDialog->setFocus(); } void MainWindow::replayStateFound(ApiTraceState *state) { m_stateEvent->setState(state); m_model->stateSetOnEvent(m_stateEvent); if (m_selectedEvent == m_stateEvent || m_nonDefaultsLookupEvent == m_selectedEvent) { fillStateForFrame(); } else { m_ui.stateDock->hide(); } m_nonDefaultsLookupEvent = 0; } void MainWindow::replayThumbnailsFound(const ImageHash &thumbnails) { m_ui.callView->setUniformRowHeights(false); m_trace->bindThumbnails(thumbnails); } void MainWindow::slotGoTo() { m_searchWidget->hide(); m_jumpWidget->show(); } void MainWindow::slotJumpTo(int callNum) { m_trace->findCallIndex(callNum); } void MainWindow::createdTrace(const QString &path) { qDebug()<<"Done tracing "<hide(); m_searchWidget->show(); } void MainWindow::slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity) { ApiTraceCall *call = currentCall(); ApiTraceFrame *frame = currentFrame(); if (!frame) { // Trace is still loading. if (!call) { return; } frame = call->parentFrame(); } Q_ASSERT(frame); m_trace->findNext(frame, call, str, sensitivity); } void MainWindow::slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity) { ApiTraceCall *call = currentCall(); ApiTraceFrame *frame = currentFrame(); if (!frame) { // Trace is still loading. if (!call) { return; } frame = call->parentFrame(); } Q_ASSERT(frame); m_trace->findPrev(frame, call, str, sensitivity); } void MainWindow::fillState(bool nonDefaults) { if (nonDefaults) { ApiTraceState defaultState = m_trace->defaultState(); if (defaultState.isEmpty()) { m_ui.nonDefaultsCB->blockSignals(true); m_ui.nonDefaultsCB->setChecked(false); m_ui.nonDefaultsCB->blockSignals(false); ApiTraceFrame *firstFrame = m_trace->frameAt(0); if (!firstFrame) { return; } if (!firstFrame->isLoaded()) { m_trace->loadFrame(firstFrame); return; } ApiTraceCall *firstCall = firstFrame->calls().first(); ApiTraceEvent *oldSelected = m_selectedEvent; m_nonDefaultsLookupEvent = m_selectedEvent; m_selectedEvent = firstCall; lookupState(); m_selectedEvent = oldSelected; } } fillStateForFrame(); } void MainWindow::customContextMenuRequested(QPoint pos) { QModelIndex index = m_ui.callView->indexAt(pos); callItemSelected(index); if (!index.isValid()) { return; } ApiTraceEvent *event = index.data(ApiTraceModel::EventRole).value(); if (!event) { return; } QMenu menu; menu.addAction(QIcon(":/resources/media-record.png"), tr("Lookup state"), this, SLOT(lookupState())); if (event->type() == ApiTraceEvent::Call) { menu.addAction(tr("Edit"), this, SLOT(editCall())); } menu.exec(QCursor::pos()); } void MainWindow::editCall() { if (m_selectedEvent && m_selectedEvent->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(m_selectedEvent); m_argsEditor->setCall(call); m_argsEditor->show(); } } void MainWindow::slotStartedSaving() { m_progressBar->show(); statusBar()->showMessage( tr("Saving to %1").arg(m_trace->fileName())); } void MainWindow::slotSaved() { statusBar()->showMessage( tr("Saved to %1").arg(m_trace->fileName()), 2000); m_progressBar->hide(); } void MainWindow::slotGoFrameStart() { ApiTraceFrame *frame = currentFrame(); ApiTraceCall *call = currentCall(); if (!frame && call) { frame = call->parentFrame(); } m_trace->findFrameStart(frame); } void MainWindow::slotGoFrameEnd() { ApiTraceFrame *frame = currentFrame(); ApiTraceCall *call = currentCall(); if (!frame && call) { frame = call->parentFrame(); } m_trace->findFrameEnd(frame); } ApiTraceFrame * MainWindow::selectedFrame() const { if (m_selectedEvent) { if (m_selectedEvent->type() == ApiTraceEvent::Frame) { return static_cast(m_selectedEvent); } else { Q_ASSERT(m_selectedEvent->type() == ApiTraceEvent::Call); ApiTraceCall *call = static_cast(m_selectedEvent); return call->parentFrame(); } } return NULL; } void MainWindow::slotTraceChanged(ApiTraceEvent *event) { Q_ASSERT(event); if (event == m_selectedEvent) { if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); m_ui.detailsWebView->setHtml(call->toHtml()); } } } void MainWindow::slotRetraceErrors(const QList &errors) { m_ui.errorsTreeWidget->clear(); foreach(ApiTraceError error, errors) { m_trace->setCallError(error); QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.errorsTreeWidget); item->setData(0, Qt::DisplayRole, error.callIndex); item->setData(0, Qt::UserRole, error.callIndex); QString type = error.type; type[0] = type[0].toUpper(); item->setData(1, Qt::DisplayRole, type); item->setData(2, Qt::DisplayRole, error.message); } } void MainWindow::slotErrorSelected(QTreeWidgetItem *current) { if (current) { int callIndex = current->data(0, Qt::UserRole).toInt(); m_trace->findCallIndex(callIndex); } } ApiTraceCall * MainWindow::selectedCall() const { if (m_selectedEvent && m_selectedEvent->type() == ApiTraceEvent::Call) { return static_cast(m_selectedEvent); } return NULL; } void MainWindow::saveSelectedSurface() { QTreeWidgetItem *item = m_ui.surfacesTreeWidget->currentItem(); if (!item || !m_trace) { return; } QVariant var = item->data(0, Qt::UserRole); if (!var.isValid()) { return; } QImage img = var.value(); if (img.isNull()) { image::Image *traceImage = ApiSurface::imageFromData(var.value()); img = ApiSurface::qimageFromRawImage(traceImage); delete traceImage; } if (img.isNull()) { statusBar()->showMessage( "Failed to save image", 5000); return; } QString imageIndex; ApiTraceCall *call = selectedCall(); if (call) { imageIndex = tr("_call_%1") .arg(call->index()); } else { ApiTraceFrame *frame = selectedFrame(); if (frame) { imageIndex = tr("_frame_%1") .arg(frame->number); } } //which of the surfaces are we saving QTreeWidgetItem *parent = item->parent(); int parentIndex = m_ui.surfacesTreeWidget->indexOfTopLevelItem(parent); if (parentIndex < 0) { parentIndex = 0; } int childIndex = 0; if (parent) { childIndex = parent->indexOfChild(item); } else { childIndex = m_ui.surfacesTreeWidget->indexOfTopLevelItem(item); } QString fileName = tr("%1%2-%3_%4.png") .arg(m_trace->fileName()) .arg(imageIndex) .arg(parentIndex) .arg(childIndex); //qDebug()<<"save "<showMessage( tr("Saved '%1'").arg(fileName), 5000); } else { statusBar()->showMessage( tr("Failed to save '%1'").arg(fileName), 5000); } } void MainWindow::exportBufferData() { QByteArray data = m_vdataInterpreter->data(); if (data.isEmpty()) return; QString bufferIndex; ApiTraceCall *call = selectedCall(); if (call) { bufferIndex = tr("_call_%1").arg(call->index()); } else { ApiTraceFrame *frame = selectedFrame(); if (frame) { bufferIndex = tr("_frame_%1") .arg(frame->number); } } QString filename = tr("%1%2_buffer.raw") .arg(m_trace->fileName()) .arg(bufferIndex); QFile file(filename); if (!file.open(QIODevice::WriteOnly)) { statusBar()->showMessage("Failed to save buffer data", 5000); return; } if (file.write(data) == -1) { statusBar()->showMessage("Failed to save buffer data", 5000); return; } file.close(); statusBar()->showMessage( tr("Saved buffer to '%1'").arg(filename), 5000); } void MainWindow::loadProgess(int percent) { m_progressBar->setValue(percent); } void MainWindow::slotSearchResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call) { switch (result) { case ApiTrace::SearchResult_NotFound: m_searchWidget->setFound(false); break; case ApiTrace::SearchResult_Found: { QModelIndex index = m_proxyModel->indexForCall(call); if (index.isValid()) { m_ui.callView->setCurrentIndex(index); m_searchWidget->setFound(true); } else { //call is filtered out, so continue searching but from the // filtered call if (!call) { qDebug()<<"Error: search success with no call"; return; } // qDebug()<<"filtered! search from "<searchText() // <<", call idx = "<index(); if (request.direction == ApiTrace::SearchRequest::Next) { m_trace->findNext(call->parentFrame(), call, request.text, request.cs); } else { m_trace->findNext(call->parentFrame(), call, request.text, request.cs); } } } break; case ApiTrace::SearchResult_Wrapped: m_searchWidget->setFound(false); break; } } ApiTraceFrame * MainWindow::currentFrame() const { QModelIndex index = m_ui.callView->currentIndex(); ApiTraceEvent *event = 0; if (!index.isValid()) { index = m_proxyModel->index(0, 0, QModelIndex()); if (!index.isValid()) { qDebug()<<"no currently valid index"; return 0; } } event = index.data(ApiTraceModel::EventRole).value(); Q_ASSERT(event); if (!event) { return 0; } ApiTraceFrame *frame = 0; if (event->type() == ApiTraceCall::Frame) { frame = static_cast(event); } return frame; } ApiTraceCall * MainWindow::currentCall() const { QModelIndex index = m_ui.callView->currentIndex(); ApiTraceEvent *event = 0; if (!index.isValid()) { index = m_proxyModel->index(0, 0, QModelIndex()); if (!index.isValid()) { qDebug()<<"no currently valid index"; return 0; } } event = index.data(ApiTraceModel::EventRole).value(); Q_ASSERT(event); if (!event) { return 0; } ApiTraceCall *call = 0; if (event->type() == ApiTraceCall::Call) { call = static_cast(event); } return call; } void MainWindow::linkLocalAndroidTrace(const QString &localFile, const QString &deviceFile) { QSettings s; s.beginGroup(_("android")); QVariantMap map = s.value(_("links")).toMap(); map[localFile] = deviceFile; s.setValue(_("links"), map); s.endGroup(); } QString MainWindow::linkedAndroidTrace(const QString &localFile) { QSettings s; s.beginGroup(_("android")); QVariantMap map = s.value(_("links")).toMap(); return map[localFile].toString(); } void MainWindow::slotFoundFrameStart(ApiTraceFrame *frame) { Q_ASSERT(frame->isLoaded()); if (!frame || frame->isEmpty()) { return; } QVector::const_iterator itr; QVector calls = frame->calls(); itr = calls.constBegin(); while (itr != calls.constEnd()) { ApiTraceCall *call = *itr; QModelIndex idx = m_proxyModel->indexForCall(call); if (idx.isValid()) { m_ui.callView->setCurrentIndex(idx); m_ui.callView->scrollTo(idx, QAbstractItemView::PositionAtTop); break; } ++itr; } } void MainWindow::slotFoundFrameEnd(ApiTraceFrame *frame) { Q_ASSERT(frame->isLoaded()); if (!frame || frame->isEmpty()) { return; } QVector::const_iterator itr; QVector calls = frame->calls(); itr = calls.constEnd(); do { --itr; ApiTraceCall *call = *itr; QModelIndex idx = m_proxyModel->indexForCall(call); if (idx.isValid()) { m_ui.callView->setCurrentIndex(idx); m_ui.callView->scrollTo(idx, QAbstractItemView::PositionAtBottom); break; } } while (itr != calls.constBegin()); } void MainWindow::slotJumpToResult(ApiTraceCall *call) { QModelIndex idx = m_proxyModel->indexForCall(call); if (idx.isValid()) { activateWindow(); m_ui.callView->setFocus(); m_ui.callView->setCurrentIndex(idx); m_ui.callView->scrollTo(idx, QAbstractItemView::PositionAtCenter); } else { statusBar()->showMessage(tr("Call has been filtered out.")); } } void MainWindow::thumbnailCallback(void *object, int thumbnailIdx) { //qDebug() << QLatin1String("debug: transfer from trace to retracer thumbnail index: ") << thumbnailIdx; MainWindow *mySelf = (MainWindow *) object; mySelf->m_retracer->addThumbnailToCapture(thumbnailIdx); } #include "mainwindow.moc" tmpNnpnZF/gui/settingsdialog.h0000664000175000017500000000142312543167424015741 0ustar chrischris#pragma once #include "trace_api.hpp" #include "apitracefilter.h" #include "ui_settings.h" #include #include class SettingsDialog : public QDialog, public Ui_Settings { Q_OBJECT public: SettingsDialog(QWidget *parent = 0); void accept(); void setFilterModel(ApiTraceFilter *filter); private slots: void changeRegexp(const QString &name); void regexpChanged(const QString &pattern); void adbPathChanged(const QString &adbPath); void chooseAdbPathPushed(); void stdoutPortChanged(int port); void stderrPortChanged(int port); private: void filtersFromModel(const ApiTraceFilter *model); void filtersToModel(ApiTraceFilter *model); private: QMap m_showFilters; ApiTraceFilter *m_filter; }; tmpNnpnZF/gui/apitracefilter.h0000664000175000017500000000176212543167424015725 0ustar chrischris#pragma once #include #include class ApiTraceCall; class ApiTraceFilter : public QSortFilterProxyModel { Q_OBJECT public: enum FilterOption { NullFilter = 0, ExtensionsFilter = 1 << 0, ResolutionsFilter = 1 << 1, ErrorsQueryFilter = 1 << 2, ExtraStateFilter = 1 << 3, CustomFilter = 1 << 4, }; Q_DECLARE_FLAGS(FilterOptions, FilterOption) public: ApiTraceFilter(QObject *parent = 0); FilterOptions filterOptions() const; void setFilterOptions(FilterOptions opts); void setFilterRegexp(const QRegExp ®exp); QRegExp filterRegexp() const; void setCustomFilterRegexp(const QString &str); QString customFilterRegexp() const; QModelIndex indexForCall(ApiTraceCall *call) const; protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; private: QRegExp m_regexp; FilterOptions m_filters; QRegExp m_customRegexp; }; tmpNnpnZF/gui/imageviewer.cpp0000664000175000017500000001254012543167424015562 0ustar chrischris#include "imageviewer.h" #include "pixelwidget.h" #include "apisurface.h" #include "image/image.hpp" #include #include #include #include #include ImageViewer::ImageViewer(QWidget *parent) : QDialog(parent), m_image(0) { setupUi(this); connect(lowerSpinBox, SIGNAL(valueChanged(double)), SLOT(slotUpdate())); connect(upperSpinBox, SIGNAL(valueChanged(double)), SLOT(slotUpdate())); connect(flipCheckBox, SIGNAL(stateChanged(int)), SLOT(slotUpdate())); connect(opaqueCheckBox, SIGNAL(stateChanged(int)), SLOT(slotUpdate())); connect(alphaCheckBox, SIGNAL(stateChanged(int)), SLOT(slotUpdate())); QPixmap px(32, 32); QPainter p(&px); p.fillRect(0, 0, 32, 32, Qt::white); p.fillRect(0, 0, 16, 16, QColor(193, 193, 193)); p.fillRect(16, 16, 16, 16, QColor(193, 193, 193)); p.end(); QPalette pal = scrollAreaWidgetContents->palette(); pal.setBrush(QPalette::Background, QBrush(px)); pal.setBrush(QPalette::Base, QBrush(px)); scrollAreaWidgetContents->setPalette(pal); m_pixelWidget = new PixelWidget(scrollAreaWidgetContents); verticalLayout_2->addWidget(m_pixelWidget); rectLabel->hide(); pixelLabel->hide(); connect(m_pixelWidget, SIGNAL(zoomChanged(int)), zoomSpinBox, SLOT(setValue(int))); connect(zoomSpinBox, SIGNAL(valueChanged(int)), m_pixelWidget, SLOT(setZoom(int))); connect(m_pixelWidget, SIGNAL(mousePosition(int, int)), this, SLOT(showPixel(int, int))); connect(m_pixelWidget, SIGNAL(gridGeometry(const QRect &)), this, SLOT(showGrid(const QRect &))); } ImageViewer::~ImageViewer() { delete m_image; } void ImageViewer::setData(const QByteArray &data) { delete m_image; m_image = ApiSurface::imageFromData(data); m_convertedImage = ApiSurface::qimageFromRawImage(m_image); m_pixelWidget->setSurface(m_convertedImage); updateGeometry(); } void ImageViewer::slotUpdate() { m_convertedImage = m_convertedImage.mirrored(false, flipCheckBox->isChecked()); double lowerValue = lowerSpinBox->value(); double upperValue = upperSpinBox->value(); bool opaque = opaqueCheckBox->isChecked(); bool alpha = alphaCheckBox->isChecked(); m_convertedImage = ApiSurface::qimageFromRawImage(m_image, lowerValue, upperValue, opaque, alpha); if (flipCheckBox->isChecked()) { m_convertedImage = m_convertedImage.mirrored(false, true); } m_pixelWidget->setSurface(m_convertedImage); updateGeometry(); } QSize ImageViewer::sizeHint() const { QSize size; int vScrollWidth = scrollArea->verticalScrollBar() ? scrollArea->verticalScrollBar()->width() : 0; int hScrollHeight = scrollArea->horizontalScrollBar() ? scrollArea->horizontalScrollBar()->height() : 0; QSize optimalWindowSize(m_convertedImage.width() + vScrollWidth, m_convertedImage.height() + hScrollHeight); QRect screenRect = QApplication::desktop()->availableGeometry(); const float maxPercentOfDesktopSpace = 0.8f; QSize maxAvailableSize(maxPercentOfDesktopSpace * screenRect.width(), maxPercentOfDesktopSpace * screenRect.height()); return QSize(qMin(optimalWindowSize.width(), maxAvailableSize.width()), qMin(optimalWindowSize.height(), maxAvailableSize.height())); } void ImageViewer::resizeEvent(QResizeEvent *e) { QWidget::resizeEvent(e); } template QString createPixelLabel(image::Image *img, int x, int y) { QString pixelLabel; unsigned char *pixelLocation = 0; T *pixel; if (x < 0 || y < 0 || x >= img->width || y >= img->height) { return QString::fromLatin1("(Out of bounds)"); } pixelLocation = img->pixels + img->stride() * y; pixelLocation += x * img->bytesPerPixel; pixel = ((T*)pixelLocation); pixelLabel += QLatin1String("["); pixelLabel += QString::fromLatin1("%1").arg((double)pixel[0], 0, 'g', 9); for (int channel = 1; channel < img->channels; ++channel) { pixelLabel += QString::fromLatin1(", %1").arg((double)pixel[channel], 0, 'g', 9); } pixelLabel += QLatin1String("]"); return pixelLabel; } void ImageViewer::showPixel(int x, int y) { xSpinBox->setValue(x); ySpinBox->setValue(y); if (!m_image) return; QString label = tr("Pixel: "); /* If the image is flipped, substitute y to match */ if (flipCheckBox->isChecked()) { y = m_convertedImage.height() - y - 1; } if (m_image->channelType == image::TYPE_UNORM8) { label += createPixelLabel(m_image, x, y); } else { label += createPixelLabel(m_image, x, y); } pixelLabel->setText(label); pixelLabel->show(); } void ImageViewer::showGrid(const QRect &rect) { if (rect.isEmpty()) { rectLabel->hide(); return; } rectLabel->setText(tr("Grid: [%1, %2, %3, %4]") .arg(rect.x()) .arg(rect.y()) .arg(rect.width()) .arg(rect.height())); rectLabel->show(); } #include "imageviewer.moc" tmpNnpnZF/gui/retracer.h0000664000175000017500000000424012543167424014530 0ustar chrischris#pragma once #include "trace_api.hpp" #include "apitrace.h" #include "apitracecall.h" #include #include class ApiTraceState; namespace trace { struct Profile; } class Retracer : public QThread { Q_OBJECT public: Retracer(QObject *parent=0); QString fileName() const; void setFileName(const QString &name); QString remoteTarget() const; void setRemoteTarget(const QString &host); void setAPI(trace::API api); bool isBenchmarking() const; void setBenchmarking(bool bench); bool isDoubleBuffered() const; void setDoubleBuffered(bool db); bool isSinglethread() const; void setSinglethread(bool singlethread); bool isCoreProfile() const; void setCoreProfile(bool coreprofile); bool isProfilingGpu() const; bool isProfilingCpu() const; bool isProfilingPixels() const; bool isProfilingMemory() const; bool isProfiling() const; void setProfiling(bool gpu, bool cpu, bool pixels, bool memory); void setCaptureAtCallNumber(qlonglong num); qlonglong captureAtCallNumber() const; bool captureState() const; void setCaptureState(bool enable); bool captureThumbnails() const; void setCaptureThumbnails(bool enable); void addThumbnailToCapture(qlonglong num); void resetThumbnailsToCapture(); QString thumbnailCallSet() const; QStringList retraceArguments() const; signals: void finished(const QString &output); void foundState(ApiTraceState *state); void foundProfile(trace::Profile *profile); void foundThumbnails(const ImageHash &thumbnails); void error(const QString &msg); void retraceErrors(const QList &errors); protected: virtual void run(); private: QString m_fileName; QString m_remoteTarget; trace::API m_api; bool m_benchmarking; bool m_doubleBuffered; bool m_singlethread; bool m_useCoreProfile; bool m_captureState; bool m_captureThumbnails; qlonglong m_captureCall; bool m_profileGpu; bool m_profileCpu; bool m_profilePixels; bool m_profileMemory; QProcessEnvironment m_processEnvironment; QList m_thumbnailsToCapture; }; tmpNnpnZF/gui/apitracecall.h0000664000175000017500000002100512543167424015343 0ustar chrischris#pragma once #include "apisurface.h" #include #include #include #include #include "trace_model.hpp" class ApiTrace; class TraceLoader; class VariantVisitor : public trace::Visitor { public: virtual void visit(trace::Null *); virtual void visit(trace::Bool *node); virtual void visit(trace::SInt *node); virtual void visit(trace::UInt *node); virtual void visit(trace::Float *node); virtual void visit(trace::Double *node); virtual void visit(trace::String *node); virtual void visit(trace::WString *node); virtual void visit(trace::Enum *e); virtual void visit(trace::Bitmask *bitmask); virtual void visit(trace::Struct *str); virtual void visit(trace::Array *array); virtual void visit(trace::Blob *blob); virtual void visit(trace::Pointer *ptr); virtual void visit(trace::Repr *ptr); QVariant variant() const { return m_variant; } private: QVariant m_variant; }; struct ApiTraceError { int callIndex; QString type; QString message; }; class ApiEnum { public: ApiEnum(const trace::EnumSig *sig=0, signed long long value = 0); QString toString() const; QVariant value() const; private: const trace::EnumSig *m_sig; signed long long m_value; }; Q_DECLARE_METATYPE(ApiEnum); class ApiPointer { public: ApiPointer(unsigned long long val=0); QString toString() const; unsigned long long value() const; private: unsigned long long m_value; }; Q_DECLARE_METATYPE(ApiPointer); class ApiBitmask { public: typedef QList > Signature; ApiBitmask(const trace::Bitmask *bitmask = 0); QString toString() const; unsigned long long value() const; Signature signature() const; private: void init(const trace::Bitmask *bitmask); private: Signature m_sig; unsigned long long m_value; }; Q_DECLARE_METATYPE(ApiBitmask); class ApiStruct { public: struct Signature { QString name; QStringList memberNames; }; ApiStruct(const trace::Struct *s = 0); QString toString(bool multiLine = false) const; Signature signature() const; QList values() const; private: void init(const trace::Struct *bitmask); private: Signature m_sig; QList m_members; }; Q_DECLARE_METATYPE(ApiStruct); class ApiArray { public: ApiArray(const trace::Array *arr = 0); ApiArray(const QVector &vals); QString toString(bool multiLine = false) const; QVector values() const; private: void init(const trace::Array *arr); private: QVector m_array; }; Q_DECLARE_METATYPE(ApiArray); QString apiVariantToString(const QVariant &variant, bool multiLine = false); class ApiTraceFrame; class ApiTraceState { public: ApiTraceState(); explicit ApiTraceState(const QVariantMap &parseJson); bool isEmpty() const; const QVariantMap & parameters() const; const QMap & shaderSources() const; const QVariantMap & uniforms() const; const QVariantMap & buffers() const; const QList & textures() const; const QList & framebuffers() const; ApiFramebuffer colorBuffer() const; private: QVariantMap m_parameters; QMap m_shaderSources; QVariantMap m_uniforms; QVariantMap m_buffers; QList m_textures; QList m_framebuffers; }; Q_DECLARE_METATYPE(ApiTraceState); class ApiTraceCallSignature { public: ApiTraceCallSignature(const QString &name, const QStringList &argNames); ~ApiTraceCallSignature(); QString name() const { return m_name; } QStringList argNames() const { return m_argNames; } QUrl helpUrl() const; void setHelpUrl(const QUrl &url); private: QString m_name; QStringList m_argNames; QUrl m_helpUrl; }; class ApiTraceCall; class ApiTraceEvent { public: enum Type { None = 0, Call = 1 << 0, Frame = 1 << 1 }; public: ApiTraceEvent(); ApiTraceEvent(Type t); virtual ~ApiTraceEvent(); Type type() const { return (Type)m_type; } virtual QStaticText staticText() const = 0; virtual int numChildren() const = 0; virtual int callIndex(ApiTraceCall *call) const = 0; virtual ApiTraceEvent *eventAtRow(int row) const = 0; ApiTraceState *state() const; void setState(ApiTraceState *state); bool hasState() const { return m_state && !m_state->isEmpty(); } void setThumbnail(const QImage & thumbnail); const QImage & thumbnail() const; virtual void missingThumbnail() = 0; protected: int m_type : 4; mutable int m_binaryDataIndex:8; ApiTraceState *m_state; mutable QStaticText *m_staticText; QImage m_thumbnail; }; Q_DECLARE_METATYPE(ApiTraceEvent*); class ApiTraceCall : public ApiTraceEvent { public: ApiTraceCall(ApiTraceCall *parentCall, TraceLoader *loader, const trace::Call *tcall); ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader, const trace::Call *tcall); ~ApiTraceCall(); int index() const; QString name() const; QStringList argNames() const; QVector arguments() const; QVariant returnValue() const; trace::CallFlags flags() const; QUrl helpUrl() const; void setHelpUrl(const QUrl &url); ApiTraceFrame *parentFrame()const; void setParentFrame(ApiTraceFrame *frame); int callIndex(ApiTraceCall *call) const; ApiTraceEvent *parentEvent() const; ApiTraceCall *parentCall() const; QVector children() const; ApiTraceEvent *eventAtRow(int row) const; void addChild(ApiTraceCall *call); void finishedAddingChildren(); bool hasError() const; QString error() const; void setError(const QString &msg); QVector originalValues() const; bool edited() const; void setEditedValues(const QVector &lst); QVector editedValues() const; void revert(); bool contains(const QString &str, Qt::CaseSensitivity sensitivity) const; ApiTrace *parentTrace() const; QString toHtml() const; QString searchText() const; QStaticText staticText() const; int numChildren() const; bool hasBinaryData() const; int binaryDataIndex() const; QString backtrace() const; void setBacktrace(QString backtrace); void missingThumbnail(); private: void loadData(TraceLoader *loader, const trace::Call *tcall); private: int m_index; unsigned m_thread; ApiTraceCallSignature *m_signature; QVector m_argValues; QVariant m_returnValue; trace::CallFlags m_flags; ApiTraceFrame *m_parentFrame; ApiTraceCall *m_parentCall; QVector m_children; QVector m_editedValues; QString m_error; QString m_backtrace; mutable QString m_richText; mutable QString m_searchText; }; Q_DECLARE_METATYPE(ApiTraceCall*); class ApiTraceFrame : public ApiTraceEvent { public: ApiTraceFrame(ApiTrace *parent=0); ~ApiTraceFrame(); int number; bool isEmpty() const; void setParentTrace(ApiTrace *parent); ApiTrace *parentTrace() const; void setNumChildren(int num); int numChildren() const; int numChildrenToLoad() const; int numTotalCalls() const; QStaticText staticText() const; ApiTraceEvent *eventAtRow(int row) const; int callIndex(ApiTraceCall *call) const; ApiTraceCall *callWithIndex(int index) const; QVector calls() const; void setCalls(const QVector &topLevelCalls, const QVector &allCalls, quint64 binaryDataSize); ApiTraceCall *findNextCall(ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) const; ApiTraceCall *findPrevCall(ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) const; int binaryDataSize() const; bool isLoaded() const; void setLastCallIndex(unsigned index); unsigned lastCallIndex() const; void missingThumbnail(); private: ApiTrace *m_parentTrace; quint64 m_binaryDataSize; QVector m_children; QVector m_calls; bool m_loaded; unsigned m_callsToLoad; unsigned m_lastCallIndex; }; Q_DECLARE_METATYPE(ApiTraceFrame*); tmpNnpnZF/gui/apitracemodel.cpp0000664000175000017500000002717612543167424016102 0ustar chrischris#include "apitracemodel.h" #include "apitracecall.h" #include "traceloader.h" #include "trace_parser.hpp" #include #include #include #include ApiTraceModel::ApiTraceModel(QObject *parent) : QAbstractItemModel(parent), m_trace(0) { } ApiTraceModel::~ApiTraceModel() { m_trace = 0; } QVariant ApiTraceModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.column() != 0) return QVariant(); ApiTraceEvent *itm = item(index); if (!itm) { return QVariant(); } switch (role) { case Qt::DisplayRole: return itm->staticText().text(); case Qt::DecorationRole: return QImage(); case Qt::ToolTipRole: { const QString stateText = tr("State info available."); if (itm->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(itm); if (!call->hasState()) return QString::fromLatin1("%1) %2") .arg(call->index()) .arg(call->name()); else return QString::fromLatin1("%1) %2
%3") .arg(call->index()) .arg(call->name()) .arg(stateText); } else { const char *htmlTempl = "
\n" "
\n" "%1" "\n" "Frame %2\n" "
\n" "
%3 calls%4
\n" "
\n"; ApiTraceFrame *frame = static_cast(itm); QString thumbStr, sizeStr; if (frame->hasState()) { static const char *imgTempl = "\n"; static const char *sizeTempl = ", %1kb"; ApiFramebuffer fbo = frame->state()->colorBuffer(); QImage thumb = fbo.thumb(); if (!thumb.isNull()) { QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); thumb.save(&buffer, "PNG"); thumbStr = tr(imgTempl).arg( QString(buffer.data().toBase64())); } int binaryDataSize = frame->binaryDataSize() / 1024; if (binaryDataSize > 0) { sizeStr = tr(sizeTempl).arg(binaryDataSize); } } int numCalls = frame->isLoaded() ? frame->numTotalCalls() : frame->numChildrenToLoad(); return tr(htmlTempl) .arg(thumbStr) .arg(frame->number) .arg(numCalls) .arg(sizeStr); } } case ApiTraceModel::EventRole: return QVariant::fromValue(itm); } return QVariant(); } Qt::ItemFlags ApiTraceModel::flags(const QModelIndex &index) const { if (!index.isValid()) return 0; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } QVariant ApiTraceModel::headerData(int section, Qt::Orientation orientation, int role ) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case 0: return tr("Events"); case 1: return tr("Flags"); default: //fall through break; } } return QVariant(); } QModelIndex ApiTraceModel::index(int row, int column, const QModelIndex &parent) const { if ((parent.isValid() && parent.column() != 0) || column != 0) return QModelIndex(); //qDebug()<<"At row = "<eventAtRow(row); if (event) { Q_ASSERT(event->type() == ApiTraceEvent::Call); return createIndex(row, column, event); } else { return QModelIndex(); } } else { ApiTraceFrame *frame = m_trace->frameAt(row); if (frame) return createIndex(row, column, frame); else return QModelIndex(); } return QModelIndex(); } bool ApiTraceModel::hasChildren(const QModelIndex &parent) const { if (parent.isValid()) { ApiTraceEvent *event = item(parent); if (!event) return false; if (event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); return !frame->isEmpty(); } else { Q_ASSERT(event->type() == ApiTraceEvent::Call); ApiTraceCall *call = static_cast(event); return call->numChildren() != 0; } } else { return (rowCount() > 0); } } QModelIndex ApiTraceModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); ApiTraceEvent *event = item(index); if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); if (call->parentCall()) { ApiTraceCall *parentCall = call->parentCall(); ApiTraceEvent *topEvent = parentCall->parentEvent(); return createIndex(topEvent->callIndex(parentCall), 0, parentCall); } else { Q_ASSERT(call->parentFrame()); return createIndex(call->parentFrame()->number, 0, call->parentFrame()); } } return QModelIndex(); } int ApiTraceModel::rowCount(const QModelIndex &parent) const { if (!parent.isValid()) return m_trace->numFrames(); ApiTraceEvent *event = item(parent); if (!event) return 0; return event->numChildren(); } int ApiTraceModel::columnCount(const QModelIndex &parent) const { return 1; } bool ApiTraceModel::insertRows(int position, int rows, const QModelIndex &parent) { return false; } bool ApiTraceModel::removeRows(int position, int rows, const QModelIndex &parent) { bool success = true; Q_UNUSED(parent); beginRemoveRows(parent, position, position + rows - 1); //XXX remove it from ApiTrace endRemoveRows(); return success; } void ApiTraceModel::setApiTrace(ApiTrace *trace) { if (m_trace == trace) return; if (m_trace) disconnect(m_trace); m_trace = trace; connect(m_trace, SIGNAL(invalidated()), this, SLOT(invalidateFrames())); connect(m_trace, SIGNAL(framesInvalidated()), this, SLOT(invalidateFrames())); connect(m_trace, SIGNAL(beginAddingFrames(int, int)), this, SLOT(beginAddingFrames(int, int))); connect(m_trace, SIGNAL(endAddingFrames()), this, SLOT(endAddingFrames())); connect(m_trace, SIGNAL(changed(ApiTraceEvent*)), this, SLOT(changed(ApiTraceEvent*))); connect(m_trace, SIGNAL(beginLoadingFrame(ApiTraceFrame*,int)), this, SLOT(beginLoadingFrame(ApiTraceFrame*,int))); connect(m_trace, SIGNAL(endLoadingFrame(ApiTraceFrame*)), this, SLOT(endLoadingFrame(ApiTraceFrame*))); } const ApiTrace * ApiTraceModel::apiTrace() const { return m_trace; } void ApiTraceModel::invalidateFrames() { beginResetModel(); endResetModel(); } void ApiTraceModel::beginAddingFrames(int oldCount, int numAdded) { beginInsertRows(QModelIndex(), oldCount, oldCount + numAdded - 1); } ApiTraceEvent * ApiTraceModel::item(const QModelIndex &index) const { if (!index.isValid()) return 0; return static_cast(index.internalPointer()); } void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event) { if (!event) return; if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); QModelIndex index = indexForCall(call); emit dataChanged(index, index); } else if (event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); const QList & frames = m_trace->frames(); int row = frames.indexOf(frame); QModelIndex index = createIndex(row, 0, frame); emit dataChanged(index, index); } } QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const { if (!call) { return QModelIndex(); } ApiTraceEvent *parentEvent = call->parentEvent(); Q_ASSERT(parentEvent); int row = parentEvent->callIndex(call); if (row < 0) { qDebug() << "Couldn't find call num "<index()<<" inside parent!"; return QModelIndex(); } return createIndex(row, 0, call); } void ApiTraceModel::changed(ApiTraceEvent *event) { if (event->type() == ApiTraceEvent::Call) { callChanged(static_cast(event)); } else if (event->type() == ApiTraceEvent::Frame) { frameChanged(static_cast(event)); } } void ApiTraceModel::callChanged(ApiTraceCall *call) { ApiTrace *trace = call->parentFrame()->parentTrace(); #if 0 qDebug()<<"Call changed = "<edited(); qDebug()<<"\ttrace edited = "<edited(); qDebug()<<"\ttrace file = "<fileName(); qDebug()<<"\ttrace needs saving = "<needsSaving(); #endif Q_ASSERT(trace); if (trace->needsSaving()) trace->save(); QModelIndex index = indexForCall(call); emit dataChanged(index, index); } void ApiTraceModel::frameChanged(ApiTraceFrame *frame) { const QList & frames = m_trace->frames(); int row = frames.indexOf(frame); QModelIndex index = createIndex(row, 0, frame); emit dataChanged(index, index); } void ApiTraceModel::endAddingFrames() { endInsertRows(); } bool ApiTraceModel::canFetchMore(const QModelIndex &parent) const { if (parent.isValid()) { ApiTraceEvent *event = item(parent); if (event && event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); return !frame->isLoaded() && !m_loadingFrames.contains(frame); } else return false; } else { return false; } } void ApiTraceModel::fetchMore(const QModelIndex &parent) { if (parent.isValid()) { ApiTraceEvent *event = item(parent); if (event && event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); Q_ASSERT(!frame->isLoaded()); m_loadingFrames.insert(frame); m_trace->loadFrame(frame); } } } void ApiTraceModel::beginLoadingFrame(ApiTraceFrame *frame, int numAdded) { QModelIndex index = createIndex(frame->number, 0, frame); beginInsertRows(index, 0, numAdded - 1); } void ApiTraceModel::endLoadingFrame(ApiTraceFrame *frame) { QModelIndex index = createIndex(frame->number, 0, frame); #if 0 qDebug()<<"Frame loaded = "<loaded(); qDebug()<<"\tframe idx = "<number; qDebug()<<"\tis empty = "<isEmpty(); qDebug()<<"\tnum children = "<numChildren(); qDebug()<<"\tindex is "< #include #include #define QT_USE_FAST_OPERATOR_PLUS #include #include const char * const styleSheet = ".call {\n" " font-weight:bold;\n" // text shadow looks great but doesn't work well in qtwebkit 4.7 " /*text-shadow: 0px 2px 3px #555;*/\n" " font-size: 1.1em;\n" "}\n" ".arg-name {\n" " border: 1px solid rgb(238,206,0);\n" " border-radius: 4px;\n" " background: yellow;\n" " padding: 2px;\n" " box-shadow: 0px 1px 3px dimgrey;\n" " -webkit-transition: background 1s linear;\n" "}\n" ".arg-name:hover {\n" " background: white;\n" "}\n" ".arg-value {\n" " color: #0000ff;\n" "}\n" ".thread-id {\n" " color: #aaaaaa;\n" " min-width: 3em;\n" "}\n" ".error {\n" " border: 1px solid rgb(255,0,0);\n" " margin: 10px;\n" " padding: 1;\n" " border-radius: 4px;\n" // also looks great but qtwebkit doesn't support it //" background: #6fb2e5;\n" //" box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n" //" -o-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n" //" -webkit-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n" //" -moz-box-shadow: 0 1px 5px #0061aa, inset 0 10px 20px #b6f9ff;\n" "}\n"; // Qt::convertFromPlainText doesn't do precisely what we want static QString plainTextToHTML(const QString & plain, bool multiLine, bool forceNoQuote = false) { int col = 0; bool quote = false; QString rich; for (int i = 0; i < plain.length(); ++i) { if (plain[i] == QLatin1Char('\n')){ if (multiLine) { rich += QLatin1String("
\n"); } else { rich += QLatin1String("\\n"); } col = 0; quote = true; } else { if (plain[i] == QLatin1Char('\t')){ if (multiLine) { rich += QChar(0x00a0U); ++col; while (col % 8) { rich += QChar(0x00a0U); ++col; } } else { rich += QLatin1String("\\t"); } quote = true; } else if (plain[i].isSpace()) { rich += QChar(0x00a0U); quote = true; } else if (plain[i] == QLatin1Char('<')) { rich += QLatin1String("<"); } else if (plain[i] == QLatin1Char('>')) { rich += QLatin1String(">"); } else if (plain[i] == QLatin1Char('&')) { rich += QLatin1String("&"); } else { rich += plain[i]; } ++col; } } if (quote && !forceNoQuote) { return QLatin1Literal("\"") + rich + QLatin1Literal("\""); } return rich; } QString apiVariantToString(const QVariant &variant, bool multiLine) { if (variant.isNull()) { return QLatin1String("?"); } if (variant.userType() == QMetaType::Float) { return QString::number(variant.toFloat()); } if (variant.userType() == QVariant::Double) { return QString::number(variant.toDouble()); } if (variant.userType() == QVariant::ByteArray) { if (variant.toByteArray().size() < 1024) { int bytes = variant.toByteArray().size(); return QObject::tr("[binary data, size = %1 bytes]").arg(bytes); } else { float kb = variant.toByteArray().size()/1024.; return QObject::tr("[binary data, size = %1 kb]").arg(kb); } } if (variant.userType() == QVariant::String) { return plainTextToHTML(variant.toString(), multiLine); } if (variant.userType() < QVariant::UserType) { return variant.toString(); } if (variant.canConvert()) { return variant.value().toString(); } if (variant.canConvert()) { return variant.value().toString(); } if (variant.canConvert()) { return variant.value().toString(multiLine); } if (variant.canConvert()) { return variant.value().toString(multiLine); } if (variant.canConvert()) { return variant.value().toString(); } return QString(); } void VariantVisitor::visit(trace::Null *) { m_variant = QVariant::fromValue(ApiPointer(0)); } void VariantVisitor::visit(trace::Bool *node) { m_variant = QVariant(node->value); } void VariantVisitor::visit(trace::SInt *node) { m_variant = QVariant(node->value); } void VariantVisitor::visit(trace::UInt *node) { m_variant = QVariant(node->value); } void VariantVisitor::visit(trace::Float *node) { m_variant = QVariant(node->value); } void VariantVisitor::visit(trace::Double *node) { m_variant = QVariant(node->value); } void VariantVisitor::visit(trace::String *node) { m_variant = QVariant(QString::fromLatin1(node->value)); } void VariantVisitor::visit(trace::WString *node) { m_variant = QVariant(QString::fromWCharArray(node->value)); } void VariantVisitor::visit(trace::Enum *e) { m_variant = QVariant::fromValue(ApiEnum(e->sig, e->value)); } void VariantVisitor::visit(trace::Bitmask *bitmask) { m_variant = QVariant::fromValue(ApiBitmask(bitmask)); } void VariantVisitor::visit(trace::Struct *str) { m_variant = QVariant::fromValue(ApiStruct(str)); } void VariantVisitor::visit(trace::Array *array) { m_variant = QVariant::fromValue(ApiArray(array)); } void VariantVisitor::visit(trace::Blob *blob) { QByteArray barray = QByteArray(blob->buf, blob->size); m_variant = QVariant(barray); } void VariantVisitor::visit(trace::Pointer *ptr) { m_variant = QVariant::fromValue(ApiPointer(ptr->value)); } void VariantVisitor::visit(trace::Repr *repr) { /* TODO: Preserve both the human and machine value */ repr->humanValue->visit(*this); } ApiEnum::ApiEnum(const trace::EnumSig *sig, signed long long value) : m_sig(sig), m_value(value) { Q_ASSERT(m_sig); } QString ApiEnum::toString() const { Q_ASSERT(m_sig); for (const trace::EnumValue *it = m_sig->values; it != m_sig->values + m_sig->num_values; ++it) { if (m_value == it->value) { return QString::fromLatin1(it->name); } } return QString::fromLatin1("%1").arg(m_value); } QVariant ApiEnum::value() const { if (m_sig) { return QVariant::fromValue(m_value); } Q_ASSERT(!"should never happen"); return QVariant(); } unsigned long long ApiBitmask::value() const { return m_value; } ApiBitmask::Signature ApiBitmask::signature() const { return m_sig; } ApiStruct::Signature ApiStruct::signature() const { return m_sig; } QList ApiStruct::values() const { return m_members; } ApiPointer::ApiPointer(unsigned long long val) : m_value(val) { } unsigned long long ApiPointer::value() const { return m_value; } QString ApiPointer::toString() const { if (m_value) return QString("0x%1").arg(m_value, 0, 16); else return QLatin1String("NULL"); } ApiBitmask::ApiBitmask(const trace::Bitmask *bitmask) : m_value(0) { init(bitmask); } void ApiBitmask::init(const trace::Bitmask *bitmask) { if (!bitmask) return; m_value = bitmask->value; for (const trace::BitmaskFlag *it = bitmask->sig->flags; it != bitmask->sig->flags + bitmask->sig->num_flags; ++it) { QPair pair; pair.first = QString::fromLatin1(it->name); pair.second = it->value; m_sig.append(pair); } } QString ApiBitmask::toString() const { QString str; unsigned long long value = m_value; bool first = true; for (Signature::const_iterator it = m_sig.begin(); it != m_sig.end(); ++it) { Q_ASSERT(it->second || first); if ((it->second && (value & it->second) == it->second) || (!it->second && value == 0)) { if (!first) { str += QLatin1String(" | "); } str += it->first; value &= ~it->second; first = false; } if (value == 0) { break; } } if (value || first) { if (!first) { str += QLatin1String(" | "); } str += QString::fromLatin1("0x%1").arg(value, 0, 16); } return str; } ApiStruct::ApiStruct(const trace::Struct *s) { init(s); } QString ApiStruct::toString(bool multiLine) const { QString str; str += QLatin1String("{"); for (unsigned i = 0; i < m_members.count(); ++i) { str += m_sig.memberNames[i] % QLatin1Literal(" = ") % apiVariantToString(m_members[i], multiLine); if (i < m_members.count() - 1) str += QLatin1String(", "); } str += QLatin1String("}"); return str; } void ApiStruct::init(const trace::Struct *s) { if (!s) return; m_sig.name = QString::fromLatin1(s->sig->name); for (unsigned i = 0; i < s->sig->num_members; ++i) { VariantVisitor vis; m_sig.memberNames.append( QString::fromLatin1(s->sig->member_names[i])); s->members[i]->visit(vis); m_members.append(vis.variant()); } } ApiArray::ApiArray(const trace::Array *arr) { init(arr); } ApiArray::ApiArray(const QVector &vals) : m_array(vals) { } QVector ApiArray::values() const { return m_array; } QString ApiArray::toString(bool multiLine) const { QString str; str += QLatin1String("["); for(int i = 0; i < m_array.count(); ++i) { const QVariant &var = m_array[i]; str += apiVariantToString(var, multiLine); if (i < m_array.count() - 1) str += QLatin1String(", "); } str += QLatin1String("]"); return str; } void ApiArray::init(const trace::Array *arr) { if (!arr) return; m_array.reserve(arr->values.size()); for (int i = 0; i < arr->values.size(); ++i) { VariantVisitor vis; arr->values[i]->visit(vis); m_array.append(vis.variant()); } m_array.squeeze(); } ApiTraceState::ApiTraceState() { } ApiTraceState::ApiTraceState(const QVariantMap &parsedJson) { m_parameters = parsedJson[QLatin1String("parameters")].toMap(); QVariantMap attachedShaders = parsedJson[QLatin1String("shaders")].toMap(); QVariantMap::const_iterator itr; for (itr = attachedShaders.constBegin(); itr != attachedShaders.constEnd(); ++itr) { QString type = itr.key(); QString source = itr.value().toString(); m_shaderSources[type] = source; } m_uniforms = parsedJson[QLatin1String("uniforms")].toMap(); m_buffers = parsedJson[QLatin1String("buffers")].toMap(); QVariantMap textures = parsedJson[QLatin1String("textures")].toMap(); for (itr = textures.constBegin(); itr != textures.constEnd(); ++itr) { QVariantMap image = itr.value().toMap(); QSize size(image[QLatin1String("__width__")].toInt(), image[QLatin1String("__height__")].toInt()); QString cls = image[QLatin1String("__class__")].toString(); int depth = image[QLatin1String("__depth__")].toInt(); QString formatName = image[QLatin1String("__format__")].toString(); QByteArray dataArray = image[QLatin1String("__data__")].toByteArray(); QString label = itr.key(); QString userLabel = image[QLatin1String("__label__")].toString(); if (!userLabel.isEmpty()) { label += QString(", \"%1\"").arg(userLabel); } ApiTexture tex; tex.setSize(size); tex.setDepth(depth); tex.setFormatName(formatName); tex.setLabel(label); tex.setData(dataArray); m_textures.append(tex); } QVariantMap fbos = parsedJson[QLatin1String("framebuffer")].toMap(); for (itr = fbos.constBegin(); itr != fbos.constEnd(); ++itr) { QVariantMap buffer = itr.value().toMap(); QSize size(buffer[QLatin1String("__width__")].toInt(), buffer[QLatin1String("__height__")].toInt()); QString cls = buffer[QLatin1String("__class__")].toString(); int depth = buffer[QLatin1String("__depth__")].toInt(); QString formatName = buffer[QLatin1String("__format__")].toString(); QByteArray dataArray = buffer[QLatin1String("__data__")].toByteArray(); QString label = itr.key(); QString userLabel = buffer[QLatin1String("__label__")].toString(); if (!userLabel.isEmpty()) { label += QString(", \"%1\"").arg(userLabel); } ApiFramebuffer fbo; fbo.setSize(size); fbo.setDepth(depth); fbo.setFormatName(formatName); fbo.setType(label); fbo.setData(dataArray); m_framebuffers.append(fbo); } } const QVariantMap & ApiTraceState::parameters() const { return m_parameters; } const QMap & ApiTraceState::shaderSources() const { return m_shaderSources; } const QVariantMap & ApiTraceState::uniforms() const { return m_uniforms; } const QVariantMap & ApiTraceState::buffers() const { return m_buffers; } bool ApiTraceState::isEmpty() const { return m_parameters.isEmpty() && m_shaderSources.isEmpty() && m_textures.isEmpty() && m_framebuffers.isEmpty(); } const QList & ApiTraceState::textures() const { return m_textures; } const QList & ApiTraceState::framebuffers() const { return m_framebuffers; } ApiFramebuffer ApiTraceState::colorBuffer() const { foreach (ApiFramebuffer fbo, m_framebuffers) { if (fbo.type() == QLatin1String("GL_BACK")) { return fbo; } } foreach (ApiFramebuffer fbo, m_framebuffers) { if (fbo.type() == QLatin1String("GL_FRONT")) { return fbo; } } return ApiFramebuffer(); } ApiTraceCallSignature::ApiTraceCallSignature(const QString &name, const QStringList &argNames) : m_name(name), m_argNames(argNames) { } ApiTraceCallSignature::~ApiTraceCallSignature() { } QUrl ApiTraceCallSignature::helpUrl() const { return m_helpUrl; } void ApiTraceCallSignature::setHelpUrl(const QUrl &url) { m_helpUrl = url; } ApiTraceEvent::ApiTraceEvent() : m_type(ApiTraceEvent::None), m_binaryDataIndex(-1), m_state(0), m_staticText(0) { } ApiTraceEvent::ApiTraceEvent(Type t) : m_type(t), m_binaryDataIndex(-1), m_state(0), m_staticText(0) { Q_ASSERT(m_type == t); } ApiTraceEvent::~ApiTraceEvent() { delete m_state; delete m_staticText; } ApiTraceState *ApiTraceEvent::state() const { return m_state; } void ApiTraceEvent::setState(ApiTraceState *state) { m_state = state; } void ApiTraceEvent::setThumbnail(const QImage & thumbnail) { m_thumbnail = thumbnail; } const QImage & ApiTraceEvent::thumbnail() const { return m_thumbnail; } ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader, const trace::Call *call) : ApiTraceEvent(ApiTraceEvent::Call), m_parentFrame(parentFrame), m_parentCall(0) { loadData(loader, call); } ApiTraceCall::ApiTraceCall(ApiTraceCall *parentCall, TraceLoader *loader, const trace::Call *call) : ApiTraceEvent(ApiTraceEvent::Call), m_parentFrame(parentCall->parentFrame()), m_parentCall(parentCall) { loadData(loader, call); } ApiTraceCall::~ApiTraceCall() { } void ApiTraceCall::loadData(TraceLoader *loader, const trace::Call *call) { m_index = call->no; m_thread = call->thread_id; m_signature = loader->signature(call->sig->id); if (!m_signature) { QString name = QString::fromLatin1(call->sig->name); QStringList argNames; argNames.reserve(call->sig->num_args); for (int i = 0; i < call->sig->num_args; ++i) { argNames += QString::fromLatin1(call->sig->arg_names[i]); } m_signature = new ApiTraceCallSignature(name, argNames); loader->addSignature(call->sig->id, m_signature); } if (call->ret) { VariantVisitor retVisitor; call->ret->visit(retVisitor); m_returnValue = retVisitor.variant(); } m_argValues.reserve(call->args.size()); for (int i = 0; i < call->args.size(); ++i) { if (call->args[i].value) { VariantVisitor argVisitor; call->args[i].value->visit(argVisitor); m_argValues.append(argVisitor.variant()); if (m_argValues[i].type() == QVariant::ByteArray) { m_binaryDataIndex = i; } } else { m_argValues.append(QVariant()); } } m_argValues.squeeze(); m_flags = call->flags; if (call->backtrace != NULL) { QString qbacktrace; for (int i = 0; i < call->backtrace->size(); i++) { const trace::StackFrame * frame = (*call->backtrace)[i]; if (frame->module != NULL) { qbacktrace += QString("%1 ").arg(frame->module); } if (frame->function != NULL) { qbacktrace += QString("at %1() ").arg(frame->function); } if (frame->filename != NULL) { qbacktrace += QString("at %1").arg(frame->filename); if (frame->linenumber >= 0) { qbacktrace += QString(":%1 ").arg(frame->linenumber); } } else { if (frame->offset >= 0) { qbacktrace += QString("[0x%1]").arg(frame->offset, 0, 16); } } qbacktrace += "\n"; } this->setBacktrace(qbacktrace); } } ApiTraceCall * ApiTraceCall::parentCall() const { return m_parentCall; } ApiTraceEvent * ApiTraceCall::parentEvent() const { if (m_parentCall) return m_parentCall; else return m_parentFrame; } QVector ApiTraceCall::children() const { return m_children; } void ApiTraceCall::addChild(ApiTraceCall *call) { m_children.append(call); } int ApiTraceCall::callIndex(ApiTraceCall *call) const { return m_children.indexOf(call); } void ApiTraceCall::finishedAddingChildren() { m_children.squeeze(); } bool ApiTraceCall::hasError() const { return !m_error.isEmpty(); } QString ApiTraceCall::error() const { return m_error; } void ApiTraceCall::setError(const QString &msg) { if (m_error != msg) { m_error = msg; m_richText = QString(); } } ApiTrace * ApiTraceCall::parentTrace() const { if (m_parentFrame) return m_parentFrame->parentTrace(); return NULL; } QVector ApiTraceCall::originalValues() const { return m_argValues; } void ApiTraceCall::setEditedValues(const QVector &lst) { ApiTrace *trace = parentTrace(); m_editedValues = lst; //lets regenerate data m_richText = QString(); m_searchText = QString(); delete m_staticText; m_staticText = 0; if (trace) { if (!lst.isEmpty()) { trace->callEdited(this); } else { trace->callReverted(this); } } } QVector ApiTraceCall::editedValues() const { return m_editedValues; } bool ApiTraceCall::edited() const { return !m_editedValues.isEmpty(); } void ApiTraceCall::revert() { setEditedValues(QVector()); } void ApiTraceCall::setHelpUrl(const QUrl &url) { m_signature->setHelpUrl(url); } void ApiTraceCall::setParentFrame(ApiTraceFrame *frame) { m_parentFrame = frame; } ApiTraceFrame * ApiTraceCall::parentFrame()const { return m_parentFrame; } int ApiTraceCall::index() const { return m_index; } QString ApiTraceCall::name() const { return m_signature->name(); } QStringList ApiTraceCall::argNames() const { return m_signature->argNames(); } QVector ApiTraceCall::arguments() const { if (m_editedValues.isEmpty()) return m_argValues; else return m_editedValues; } ApiTraceEvent * ApiTraceCall::eventAtRow(int row) const { if (row < m_children.count()) return m_children.value(row); else return NULL; } QVariant ApiTraceCall::returnValue() const { return m_returnValue; } trace::CallFlags ApiTraceCall::flags() const { return m_flags; } QUrl ApiTraceCall::helpUrl() const { return m_signature->helpUrl(); } bool ApiTraceCall::hasBinaryData() const { return m_binaryDataIndex >= 0; } int ApiTraceCall::binaryDataIndex() const { Q_ASSERT(hasBinaryData()); return m_binaryDataIndex; } QString ApiTraceCall::backtrace() const { return m_backtrace; } void ApiTraceCall::setBacktrace(QString backtrace) { m_backtrace = backtrace; } QStaticText ApiTraceCall::staticText() const { if (m_staticText && !m_staticText->text().isEmpty()) return *m_staticText; QStringList argNames = m_signature->argNames(); QVector argValues = arguments(); QString richText; // TODO: Toggle this via a menu option. if (0) { richText += QString::fromLatin1("@%1 ") .arg(m_thread); } if (m_flags & trace::CALL_FLAG_MARKER && argNames.count() && argValues.last().userType() == QVariant::String) { // special handling for string markers QString msgText = plainTextToHTML(argValues.last().toString(), false, true); richText += QString::fromLatin1( "%1") .arg(msgText); } else { richText += QString::fromLatin1( "%1(").arg( m_signature->name()); for (int i = 0; i < argNames.count(); ++i) { richText += QLatin1String(""); QString argText = apiVariantToString(argValues[i]); //if arguments are really long (e.g. shader text), cut them // and elide it if (argText.length() > 40) { QString shortened = argText.mid(0, 40); shortened[argText.length() - 5] = '.'; shortened[argText.length() - 4] = '.'; shortened[argText.length() - 3] = '.'; shortened[argText.length() - 2] = argText.at(argText.length() - 2); shortened[argText.length() - 1] = argText.at(argText.length() - 1); richText += shortened; } else { richText += argText; } richText += QLatin1String(""); if (i < argNames.count() - 1) richText += QLatin1String(", "); } richText += QLatin1String(")"); if (m_returnValue.isValid()) { richText += QLatin1Literal(" = ") % QLatin1Literal("") % apiVariantToString(m_returnValue) % QLatin1Literal(""); } } if (!m_staticText) m_staticText = new QStaticText(richText); else m_staticText->setText(richText); QTextOption opt; opt.setWrapMode(QTextOption::NoWrap); m_staticText->setTextOption(opt); m_staticText->prepare(); return *m_staticText; } QString ApiTraceCall::toHtml() const { if (!m_richText.isEmpty()) return m_richText; m_richText += QLatin1String("
"); m_richText += QString::fromLatin1("%1 ") .arg(m_index); QString parentTip; if (m_parentFrame) { parentTip = QString::fromLatin1("Frame %1") .arg(m_parentFrame->number); } m_richText += QString::fromLatin1("@%1 ") .arg(m_thread); QUrl helpUrl = m_signature->helpUrl(); if (helpUrl.isEmpty()) { m_richText += QString::fromLatin1( "%2(") .arg(parentTip) .arg(m_signature->name()); } else { m_richText += QString::fromLatin1( "%3(") .arg(parentTip) .arg(helpUrl.toString()) .arg(m_signature->name()); } QVector argValues = arguments(); QStringList argNames = m_signature->argNames(); for (int i = 0; i < argNames.count(); ++i) { m_richText += QLatin1String("") + argNames[i] + QLatin1String("") + QLatin1Literal(" = ") + QLatin1Literal("") + apiVariantToString(argValues[i], true) + QLatin1Literal(""); if (i < argNames.count() - 1) m_richText += QLatin1String(", "); } m_richText += QLatin1String(")"); if (m_returnValue.isValid()) { m_richText += QLatin1String(" = ") + QLatin1String("") + apiVariantToString(m_returnValue, true) + QLatin1String(""); } m_richText += QLatin1String("
"); if (hasError()) { QString errorStr = QString::fromLatin1( "
%1
") .arg(m_error); m_richText += errorStr; } m_richText = QString::fromLatin1( "%2") .arg(styleSheet) .arg(m_richText); m_richText.squeeze(); //qDebug()< argValues = arguments(); m_searchText = m_signature->name() + QLatin1Literal("("); QStringList argNames = m_signature->argNames(); for (int i = 0; i < argNames.count(); ++i) { m_searchText += argNames[i] + QLatin1Literal(" = ") + apiVariantToString(argValues[i]); if (i < argNames.count() - 1) m_searchText += QLatin1String(", "); } m_searchText += QLatin1String(")"); if (m_returnValue.isValid()) { m_searchText += QLatin1Literal(" = ") + apiVariantToString(m_returnValue); } m_searchText.squeeze(); return m_searchText; } int ApiTraceCall::numChildren() const { return m_children.count(); } bool ApiTraceCall::contains(const QString &str, Qt::CaseSensitivity sensitivity) const { QString txt = searchText(); return txt.contains(str, sensitivity); } void ApiTraceCall::missingThumbnail() { m_parentFrame->parentTrace()->missingThumbnail(this); } ApiTraceFrame::ApiTraceFrame(ApiTrace *parentTrace) : ApiTraceEvent(ApiTraceEvent::Frame), m_parentTrace(parentTrace), m_binaryDataSize(0), m_loaded(false), m_callsToLoad(0), m_lastCallIndex(0) { } ApiTraceFrame::~ApiTraceFrame() { qDeleteAll(m_calls); } QStaticText ApiTraceFrame::staticText() const { if (m_staticText && !m_staticText->text().isEmpty()) return *m_staticText; QString richText = QObject::tr( "Frame %1" "   " " " "(%2 calls)") .arg(number) .arg(m_loaded ? m_calls.count() : m_callsToLoad); //mark the frame if it uploads more than a meg a frame if (m_binaryDataSize > (1024*1024)) { richText = QObject::tr( "%1" "" "    (%2MB)") .arg(richText) .arg(double(m_binaryDataSize / (1024.*1024.)), 0, 'g', 2); } if (!m_staticText) m_staticText = new QStaticText(richText); QTextOption opt; opt.setWrapMode(QTextOption::NoWrap); m_staticText->setTextOption(opt); m_staticText->prepare(); return *m_staticText; } int ApiTraceFrame::numChildren() const { return m_children.count(); } int ApiTraceFrame::numTotalCalls() const { return m_calls.count(); } ApiTrace * ApiTraceFrame::parentTrace() const { return m_parentTrace; } QVector ApiTraceFrame::calls() const { return m_calls; } ApiTraceEvent * ApiTraceFrame::eventAtRow(int row) const { if (row < m_children.count()) return m_children.value(row); else return NULL; } ApiTraceCall * ApiTraceFrame::callWithIndex(int index) const { QVector::const_iterator itr; for (itr = m_calls.constBegin(); itr != m_calls.constEnd(); ++itr) { if ((*itr)->index() == index) { return *itr; } } return 0; } int ApiTraceFrame::callIndex(ApiTraceCall *call) const { return m_children.indexOf(call); } bool ApiTraceFrame::isEmpty() const { if (m_loaded) { return m_calls.isEmpty(); } else { return m_callsToLoad == 0; } } int ApiTraceFrame::binaryDataSize() const { return m_binaryDataSize; } void ApiTraceFrame::setCalls(const QVector &children, const QVector &calls, quint64 binaryDataSize) { m_children = children; m_calls = calls; m_binaryDataSize = binaryDataSize; m_loaded = true; delete m_staticText; m_staticText = 0; } bool ApiTraceFrame::isLoaded() const { return m_loaded; } void ApiTraceFrame::setNumChildren(int num) { m_callsToLoad = num; } void ApiTraceFrame::setParentTrace(ApiTrace *parent) { m_parentTrace = parent; } int ApiTraceFrame::numChildrenToLoad() const { return m_callsToLoad; } ApiTraceCall * ApiTraceFrame::findNextCall(ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) const { Q_ASSERT(m_loaded); int callIndex = 0; if (from) { callIndex = m_calls.indexOf(from) + 1; } for (int i = callIndex; i < m_calls.count(); ++i) { ApiTraceCall *call = m_calls[i]; if (call->contains(str, sensitivity)) { return call; } } return 0; } ApiTraceCall * ApiTraceFrame::findPrevCall(ApiTraceCall *from, const QString &str, Qt::CaseSensitivity sensitivity) const { Q_ASSERT(m_loaded); int callIndex = m_calls.count() - 1; if (from) { callIndex = m_calls.indexOf(from) - 1; } for (int i = callIndex; i >= 0; --i) { ApiTraceCall *call = m_calls[i]; if (call->contains(str, sensitivity)) { return call; } } return 0; } void ApiTraceFrame::setLastCallIndex(unsigned index) { m_lastCallIndex = index; } unsigned ApiTraceFrame::lastCallIndex() const { if (m_loaded && !m_calls.isEmpty()) { return m_calls.last()->index(); } else { return m_lastCallIndex; } } void ApiTraceFrame::missingThumbnail() { m_parentTrace->missingThumbnail(this); } tmpNnpnZF/gui/apitracefilter.cpp0000664000175000017500000000663012543167424016257 0ustar chrischris#include "apitracefilter.h" #include "apitracecall.h" #include "apitracemodel.h" #include ApiTraceFilter::ApiTraceFilter(QObject *parent) : QSortFilterProxyModel(), m_filters(ExtensionsFilter | ResolutionsFilter | ErrorsQueryFilter | ExtraStateFilter) { } bool ApiTraceFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); QVariant varientData = sourceModel()->data(index0, ApiTraceModel::EventRole); ApiTraceEvent *event = varientData.value(); if (!event) return false; // We don't filter frames if (event->type() == ApiTraceEvent::Frame) { return true; } ApiTraceCall *call = static_cast(event); trace::CallFlags flags = call->flags(); // Never filter push glPushDebugGroup() and friends, or all calls inside // the debug group will be filtered out. if (flags & trace::CALL_FLAG_MARKER_PUSH) { return true; } // Always filter glPopDebugGroup() and friends, as their presence is implied. if (flags & trace::CALL_FLAG_MARKER_POP) { return false; } QString function = call->name(); if (!m_regexp.isEmpty() && m_regexp.isValid()) { return function.contains(m_regexp); } if (m_filters & ResolutionsFilter) { if (function.contains(QLatin1String("glXGetProcAddress"))) return false; if (function.contains(QLatin1String("wglGetProcAddress"))) return false; } if (m_filters & ErrorsQueryFilter) { if (function.contains(QLatin1String("glGetError"))) return false; } if (m_filters & ExtraStateFilter) { if (function.contains(QLatin1String("glXGetCurrentDisplay"))) return false; if (function.contains(QLatin1String("wglDescribePixelFormat"))) return false; if (function.contains(QLatin1String("wglGetCurrentContext"))) return false; } if (m_filters & ExtensionsFilter) { if (function.contains(QLatin1String("glXGetClientString"))) return false; if (function.contains(QLatin1String("glXQueryExtensionsString"))) return false; if (function.contains(QLatin1String("glGetString"))) return false; } if (m_filters & CustomFilter) { return !function.contains(m_customRegexp); } return true; } void ApiTraceFilter::setFilterRegexp(const QRegExp ®exp) { if (regexp != m_regexp) { m_regexp = regexp; invalidate(); } } ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const { return m_filters; } void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts) { if (opts != m_filters) { m_filters = opts; invalidate(); } } QModelIndex ApiTraceFilter::indexForCall(ApiTraceCall *call) const { ApiTraceModel *model = static_cast(sourceModel()); QModelIndex index = model->indexForCall(call); return mapFromSource(index); } QRegExp ApiTraceFilter::filterRegexp() const { return m_regexp; } void ApiTraceFilter::setCustomFilterRegexp(const QString &str) { m_customRegexp = QRegExp(str); } QString ApiTraceFilter::customFilterRegexp() const { return m_customRegexp.pattern(); } #include "apitracefilter.moc" tmpNnpnZF/gui/apitrace.h0000664000175000017500000001141112543167424014507 0ustar chrischris#pragma once #include "apitracecall.h" #include "trace_api.hpp" #include #include class TraceLoader; class SaverThread; class QThread; typedef void (*ThumbnailCallback)(void *object, int thumbnailIdx); typedef QHash ImageHash; class ApiTrace : public QObject { Q_OBJECT public: enum SearchResult { SearchResult_NotFound, SearchResult_Found, SearchResult_Wrapped }; struct SearchRequest { enum Direction { Next, Prev }; SearchRequest() : direction(Next) {} SearchRequest(Direction dir, ApiTraceFrame *f, ApiTraceCall *call, QString str, Qt::CaseSensitivity caseSens) : direction(dir), frame(f), from(call), text(str), cs(caseSens) {} Direction direction; ApiTraceFrame *frame; ApiTraceCall *from; QString text; Qt::CaseSensitivity cs; }; public: ApiTrace(); ~ApiTrace(); bool isEmpty() const; QString fileName() const; ApiTraceState defaultState() const; ApiTraceCall *callWithIndex(int idx) const; const QList & frames() const; ApiTraceFrame *frameAt(int idx) const; int numFrames() const; int numCallsInFrame(int idx) const; void callEdited(ApiTraceCall *call); void callReverted(ApiTraceCall *call); void callError(ApiTraceCall *call); bool edited() const; bool needsSaving() const; bool isSaving() const; bool hasErrors() const; trace::API api() const; void missingThumbnail(ApiTraceFrame* frame); void missingThumbnail(ApiTraceCall* call); bool isMissingThumbnails() const; void resetMissingThumbnails(); void iterateMissingThumbnails(void *object, ThumbnailCallback cb); public slots: void setFileName(const QString &name); void save(); void finishedParsing(); void loadFrame(ApiTraceFrame *frame); void findNext(ApiTraceFrame *frame, ApiTraceCall *call, const QString &str, Qt::CaseSensitivity sensitivity); void findPrev(ApiTraceFrame *frame, ApiTraceCall *call, const QString &str, Qt::CaseSensitivity sensitivity); void findFrameStart(ApiTraceFrame *frame); void findFrameEnd(ApiTraceFrame *frame); void findCallIndex(int index); void setCallError(const ApiTraceError &error); void bindThumbnails(const ImageHash &thumbnails); signals: void loadTrace(const QString &name); void requestFrame(ApiTraceFrame *frame); void startedLoadingTrace(); void loaded(int percent); void finishedLoadingTrace(); void invalidated(); void framesInvalidated(); void changed(ApiTraceEvent *event); void startedSaving(); void saved(); void findResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call); void beginAddingFrames(int oldCount, int numAdded); void endAddingFrames(); void beginLoadingFrame(ApiTraceFrame *frame, int numAdded); void endLoadingFrame(ApiTraceFrame *frame); void foundFrameStart(ApiTraceFrame *frame); void foundFrameEnd(ApiTraceFrame *frame); void foundCallIndex(ApiTraceCall *call); signals: void loaderSearch(const ApiTrace::SearchRequest &request); void loaderFindFrameStart(ApiTraceFrame *frame); void loaderFindFrameEnd(ApiTraceFrame *frame); void loaderFindCallIndex(int index); private slots: void addFrames(const QList &frames); void slotSaved(); void guessedApi(int api); void loaderFrameLoaded(ApiTraceFrame *frame, const QVector &topLevelItems, const QVector &calls, quint64 binaryDataSize); void loaderSearchResult(const ApiTrace::SearchRequest &request, ApiTrace::SearchResult result, ApiTraceCall *call); private: int callInFrame(int callIdx) const; bool isFrameLoading(ApiTraceFrame *frame) const; void missingThumbnail(int callIdx); private: QString m_fileName; QString m_tempFileName; QList m_frames; trace::API m_api; TraceLoader *m_loader; QThread *m_loaderThread; SaverThread *m_saver; QSet m_editedCalls; bool m_needsSaving; QSet m_errors; QList< QPair > m_queuedErrors; QSet m_loadingFrames; QSet m_missingThumbnails; ImageHash m_thumbnails; }; tmpNnpnZF/gui/apitracemodel.h0000664000175000017500000000406112543167424015533 0ustar chrischris#pragma once #include #include #include #include class ApiTrace; class ApiTraceCall; class ApiTraceEvent; class ApiTraceFrame; class ApiTraceModel : public QAbstractItemModel { Q_OBJECT public: enum Roles { EventRole = Qt::UserRole + 1 }; public: ApiTraceModel(QObject *parent = 0); ~ApiTraceModel(); void setApiTrace(ApiTrace *trace); const ApiTrace *apiTrace() const; void stateSetOnEvent(ApiTraceEvent *event); QModelIndex indexForCall(ApiTraceCall *call) const; public: /* QAbstractItemModel { */ QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; bool hasChildren(const QModelIndex &parent) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); virtual bool canFetchMore(const QModelIndex & parent) const; virtual void fetchMore(const QModelIndex &parent); /* } QAbstractItemModel; */ private slots: void invalidateFrames(); void beginAddingFrames(int oldCount, int numAdded); void endAddingFrames(); void changed(ApiTraceEvent *event); void callChanged(ApiTraceCall *call); void frameChanged(ApiTraceFrame *frame); void beginLoadingFrame(ApiTraceFrame *frame, int numAdded); void endLoadingFrame(ApiTraceFrame *frame); private: ApiTraceEvent *item(const QModelIndex &index) const; private: ApiTrace *m_trace; QSet m_loadingFrames; }; tmpNnpnZF/thirdparty/0000775000175000017500000000000012543167424014156 5ustar chrischristmpNnpnZF/thirdparty/snappy/0000775000175000017500000000000012543167424015470 5ustar chrischristmpNnpnZF/thirdparty/snappy/format_description.txt0000664000175000017500000001044412543167424022127 0ustar chrischrisSnappy compressed format description Last revised: 2011-10-05 This is not a formal specification, but should suffice to explain most relevant parts of how the Snappy format works. It is originally based on text by Zeev Tarantov. Snappy is a LZ77-type compressor with a fixed, byte-oriented encoding. There is no entropy encoder backend nor framing layer -- the latter is assumed to be handled by other parts of the system. This document only describes the format, not how the Snappy compressor nor decompressor actually works. The correctness of the decompressor should not depend on implementation details of the compressor, and vice versa. 1. Preamble The stream starts with the uncompressed length (up to a maximum of 2^32 - 1), stored as a little-endian varint. Varints consist of a series of bytes, where the lower 7 bits are data and the upper bit is set iff there are more bytes to be read. In other words, an uncompressed length of 64 would be stored as 0x40, and an uncompressed length of 2097150 (0x1FFFFE) would be stored as 0xFE 0xFF 0x7F. 2. The compressed stream itself There are two types of elements in a Snappy stream: Literals and copies (backreferences). There is no restriction on the order of elements, except that the stream naturally cannot start with a copy. (Having two literals in a row is never optimal from a compression point of view, but nevertheless fully permitted.) Each element starts with a tag byte, and the lower two bits of this tag byte signal what type of element will follow: 00: Literal 01: Copy with 1-byte offset 10: Copy with 2-byte offset 11: Copy with 4-byte offset The interpretation of the upper six bits are element-dependent. 2.1. Literals (00) Literals are uncompressed data stored directly in the byte stream. The literal length is stored differently depending on the length of the literal: - For literals up to and including 60 bytes in length, the upper six bits of the tag byte contain (len-1). The literal follows immediately thereafter in the bytestream. - For longer literals, the (len-1) value is stored after the tag byte, little-endian. The upper six bits of the tag byte describe how many bytes are used for the length; 60, 61, 62 or 63 for 1-4 bytes, respectively. The literal itself follows after the length. 2.2. Copies Copies are references back into previous decompressed data, telling the decompressor to reuse data it has previously decoded. They encode two values: The _offset_, saying how many bytes back from the current position to read, and the _length_, how many bytes to copy. Offsets of zero can be encoded, but are not legal; similarly, it is possible to encode backreferences that would go past the end of the block (offset > current decompressed position), which is also nonsensical and thus not allowed. As in most LZ77-based compressors, the length can be larger than the offset, yielding a form of run-length encoding (RLE). For instance, "xababab" could be encoded as Note that since the current Snappy compressor works in 32 kB blocks and does not do matching across blocks, it will never produce a bitstream with offsets larger than about 32768. However, the decompressor should not rely on this, as it may change in the future. There are several different kinds of copy elements, depending on the amount of bytes to be copied (length), and how far back the data to be copied is (offset). 2.2.1. Copy with 1-byte offset (01) These elements can encode lengths between [4..11] bytes and offsets between [0..2047] bytes. (len-4) occupies three bits and is stored in bits [2..4] of the tag byte. The offset occupies 11 bits, of which the upper three are stored in the upper three bits ([5..7]) of the tag byte, and the lower eight are stored in a byte following the tag byte. 2.2.2. Copy with 2-byte offset (10) These elements can encode lengths between [1..64] and offsets from [0..65535]. (len-1) occupies six bits and is stored in the upper six bits ([2..7]) of the tag byte. The offset is stored as a little-endian 16-bit integer in the two bytes following the tag byte. 2.2.3. Copy with 4-byte offset (11) These are like the copies with 2-byte offsets (see previous subsection), except that the offset is stored as a 32-bit integer instead of a 16-bit integer (and thus will occupy four bytes). tmpNnpnZF/thirdparty/snappy/COPYING0000664000175000017500000000513712543167424016531 0ustar chrischrisCopyright 2011, Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. === Some of the benchmark data in util/zippy/testdata is licensed differently: - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and is licensed under the Creative Commons Attribution 3.0 license (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/ for more information. - kppkn.gtb is taken from the Gaviota chess tablebase set, and is licensed under the MIT License. See https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1 for more information. - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA Replication Timing in _Drosophila_†by Federico Comoglio and Renato Paro, which is licensed under the CC-BY license. See http://www.ploscompbiol.org/static/license for more ifnormation. - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project Gutenberg. The first three have expired copyrights and are in the public domain; the latter does not have expired copyright, but is still in the public domain according to the license information (http://www.gutenberg.org/ebooks/53). tmpNnpnZF/thirdparty/snappy/snappy-stubs-internal.h0000664000175000017500000003572312543167424022135 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Various stubs for the open-source version of Snappy. #ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ #define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #ifdef HAVE_SYS_MMAN_H #include #endif #include "snappy-stubs-public.h" #if defined(__x86_64__) // Enable 64-bit optimized versions of some routines. #define ARCH_K8 1 #endif // Needed by OS X, among others. #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif // Pull in std::min, std::ostream, and the likes. This is safe because this // header file is never used from any public header files. using namespace std; // The size of an array, if known at compile-time. // Will give unexpected results if used on a pointer. // We undefine it first, since some compilers already have a definition. #ifdef ARRAYSIZE #undef ARRAYSIZE #endif #define ARRAYSIZE(a) (sizeof(a) / sizeof(*(a))) // Static prediction hints. #ifdef HAVE_BUILTIN_EXPECT #define PREDICT_FALSE(x) (__builtin_expect(x, 0)) #define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) #else #define PREDICT_FALSE(x) x #define PREDICT_TRUE(x) x #endif // This is only used for recomputing the tag byte table used during // decompression; for simplicity we just remove it from the open-source // version (anyone who wants to regenerate it can just do the call // themselves within main()). #define DEFINE_bool(flag_name, default_value, description) \ bool FLAGS_ ## flag_name = default_value #define DECLARE_bool(flag_name) \ extern bool FLAGS_ ## flag_name namespace snappy { static const uint32 kuint32max = static_cast(0xFFFFFFFF); static const int64 kint64max = static_cast(0x7FFFFFFFFFFFFFFFLL); // Potentially unaligned loads and stores. // x86 and PowerPC can simply do these loads and stores native. #if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) #define UNALIGNED_LOAD16(_p) (*reinterpret_cast(_p)) #define UNALIGNED_LOAD32(_p) (*reinterpret_cast(_p)) #define UNALIGNED_LOAD64(_p) (*reinterpret_cast(_p)) #define UNALIGNED_STORE16(_p, _val) (*reinterpret_cast(_p) = (_val)) #define UNALIGNED_STORE32(_p, _val) (*reinterpret_cast(_p) = (_val)) #define UNALIGNED_STORE64(_p, _val) (*reinterpret_cast(_p) = (_val)) // ARMv7 and newer support native unaligned accesses, but only of 16-bit // and 32-bit values (not 64-bit); older versions either raise a fatal signal, // do an unaligned read and rotate the words around a bit, or do the reads very // slowly (trip through kernel mode). There's no simple #define that says just // “ARMv7 or higherâ€, so we have to filter away all ARMv5 and ARMv6 // sub-architectures. // // This is a mess, but there's not much we can do about it. #elif defined(__arm__) && \ !defined(__ARM_ARCH_4__) && \ !defined(__ARM_ARCH_4T__) && \ !defined(__ARM_ARCH_5__) && \ !defined(__ARM_ARCH_5T__) && \ !defined(__ARM_ARCH_5TE__) && \ !defined(__ARM_ARCH_5TEJ__) && \ !defined(__ARM_ARCH_6__) && \ !defined(__ARM_ARCH_6J__) && \ !defined(__ARM_ARCH_6K__) && \ !defined(__ARM_ARCH_6Z__) && \ !defined(__ARM_ARCH_6ZK__) && \ !defined(__ARM_ARCH_6T2__) #define UNALIGNED_LOAD16(_p) (*reinterpret_cast(_p)) #define UNALIGNED_LOAD32(_p) (*reinterpret_cast(_p)) #define UNALIGNED_STORE16(_p, _val) (*reinterpret_cast(_p) = (_val)) #define UNALIGNED_STORE32(_p, _val) (*reinterpret_cast(_p) = (_val)) // TODO(user): NEON supports unaligned 64-bit loads and stores. // See if that would be more efficient on platforms supporting it, // at least for copies. inline uint64 UNALIGNED_LOAD64(const void *p) { uint64 t; memcpy(&t, p, sizeof t); return t; } inline void UNALIGNED_STORE64(void *p, uint64 v) { memcpy(p, &v, sizeof v); } #else // These functions are provided for architectures that don't support // unaligned loads and stores. inline uint16 UNALIGNED_LOAD16(const void *p) { uint16 t; memcpy(&t, p, sizeof t); return t; } inline uint32 UNALIGNED_LOAD32(const void *p) { uint32 t; memcpy(&t, p, sizeof t); return t; } inline uint64 UNALIGNED_LOAD64(const void *p) { uint64 t; memcpy(&t, p, sizeof t); return t; } inline void UNALIGNED_STORE16(void *p, uint16 v) { memcpy(p, &v, sizeof v); } inline void UNALIGNED_STORE32(void *p, uint32 v) { memcpy(p, &v, sizeof v); } inline void UNALIGNED_STORE64(void *p, uint64 v) { memcpy(p, &v, sizeof v); } #endif // This can be more efficient than UNALIGNED_LOAD64 + UNALIGNED_STORE64 // on some platforms, in particular ARM. inline void UnalignedCopy64(const void *src, void *dst) { if (sizeof(void *) == 8) { UNALIGNED_STORE64(dst, UNALIGNED_LOAD64(src)); } else { const char *src_char = reinterpret_cast(src); char *dst_char = reinterpret_cast(dst); UNALIGNED_STORE32(dst_char, UNALIGNED_LOAD32(src_char)); UNALIGNED_STORE32(dst_char + 4, UNALIGNED_LOAD32(src_char + 4)); } } // The following guarantees declaration of the byte swap functions. #ifdef WORDS_BIGENDIAN #ifdef HAVE_SYS_BYTEORDER_H #include #endif #ifdef HAVE_SYS_ENDIAN_H #include #endif #ifdef _MSC_VER #include #define bswap_16(x) _byteswap_ushort(x) #define bswap_32(x) _byteswap_ulong(x) #define bswap_64(x) _byteswap_uint64(x) #elif defined(__APPLE__) // Mac OS X / Darwin features #include #define bswap_16(x) OSSwapInt16(x) #define bswap_32(x) OSSwapInt32(x) #define bswap_64(x) OSSwapInt64(x) #elif defined(HAVE_BYTESWAP_H) #include #elif defined(bswap32) // FreeBSD defines bswap{16,32,64} in (already #included). #define bswap_16(x) bswap16(x) #define bswap_32(x) bswap32(x) #define bswap_64(x) bswap64(x) #elif defined(BSWAP_64) // Solaris 10 defines BSWAP_{16,32,64} in (already #included). #define bswap_16(x) BSWAP_16(x) #define bswap_32(x) BSWAP_32(x) #define bswap_64(x) BSWAP_64(x) #else inline uint16 bswap_16(uint16 x) { return (x << 8) | (x >> 8); } inline uint32 bswap_32(uint32 x) { x = ((x & 0xff00ff00UL) >> 8) | ((x & 0x00ff00ffUL) << 8); return (x >> 16) | (x << 16); } inline uint64 bswap_64(uint64 x) { x = ((x & 0xff00ff00ff00ff00ULL) >> 8) | ((x & 0x00ff00ff00ff00ffULL) << 8); x = ((x & 0xffff0000ffff0000ULL) >> 16) | ((x & 0x0000ffff0000ffffULL) << 16); return (x >> 32) | (x << 32); } #endif #endif // WORDS_BIGENDIAN // Convert to little-endian storage, opposite of network format. // Convert x from host to little endian: x = LittleEndian.FromHost(x); // convert x from little endian to host: x = LittleEndian.ToHost(x); // // Store values into unaligned memory converting to little endian order: // LittleEndian.Store16(p, x); // // Load unaligned values stored in little endian converting to host order: // x = LittleEndian.Load16(p); class LittleEndian { public: // Conversion functions. #ifdef WORDS_BIGENDIAN static uint16 FromHost16(uint16 x) { return bswap_16(x); } static uint16 ToHost16(uint16 x) { return bswap_16(x); } static uint32 FromHost32(uint32 x) { return bswap_32(x); } static uint32 ToHost32(uint32 x) { return bswap_32(x); } static bool IsLittleEndian() { return false; } #else // !defined(WORDS_BIGENDIAN) static uint16 FromHost16(uint16 x) { return x; } static uint16 ToHost16(uint16 x) { return x; } static uint32 FromHost32(uint32 x) { return x; } static uint32 ToHost32(uint32 x) { return x; } static bool IsLittleEndian() { return true; } #endif // !defined(WORDS_BIGENDIAN) // Functions to do unaligned loads and stores in little-endian order. static uint16 Load16(const void *p) { return ToHost16(UNALIGNED_LOAD16(p)); } static void Store16(void *p, uint16 v) { UNALIGNED_STORE16(p, FromHost16(v)); } static uint32 Load32(const void *p) { return ToHost32(UNALIGNED_LOAD32(p)); } static void Store32(void *p, uint32 v) { UNALIGNED_STORE32(p, FromHost32(v)); } }; // Some bit-manipulation functions. class Bits { public: // Return floor(log2(n)) for positive integer n. Returns -1 iff n == 0. static int Log2Floor(uint32 n); // Return the first set least / most significant bit, 0-indexed. Returns an // undefined value if n == 0. FindLSBSetNonZero() is similar to ffs() except // that it's 0-indexed. static int FindLSBSetNonZero(uint32 n); static int FindLSBSetNonZero64(uint64 n); private: DISALLOW_COPY_AND_ASSIGN(Bits); }; #ifdef HAVE_BUILTIN_CTZ inline int Bits::Log2Floor(uint32 n) { return n == 0 ? -1 : 31 ^ __builtin_clz(n); } inline int Bits::FindLSBSetNonZero(uint32 n) { return __builtin_ctz(n); } inline int Bits::FindLSBSetNonZero64(uint64 n) { return __builtin_ctzll(n); } #else // Portable versions. inline int Bits::Log2Floor(uint32 n) { if (n == 0) return -1; int log = 0; uint32 value = n; for (int i = 4; i >= 0; --i) { int shift = (1 << i); uint32 x = value >> shift; if (x != 0) { value = x; log += shift; } } assert(value == 1); return log; } inline int Bits::FindLSBSetNonZero(uint32 n) { int rc = 31; for (int i = 4, shift = 1 << 4; i >= 0; --i) { const uint32 x = n << shift; if (x != 0) { n = x; rc -= shift; } shift >>= 1; } return rc; } // FindLSBSetNonZero64() is defined in terms of FindLSBSetNonZero(). inline int Bits::FindLSBSetNonZero64(uint64 n) { const uint32 bottombits = static_cast(n); if (bottombits == 0) { // Bottom bits are zero, so scan in top bits return 32 + FindLSBSetNonZero(static_cast(n >> 32)); } else { return FindLSBSetNonZero(bottombits); } } #endif // End portable versions. // Variable-length integer encoding. class Varint { public: // Maximum lengths of varint encoding of uint32. static const int kMax32 = 5; // Attempts to parse a varint32 from a prefix of the bytes in [ptr,limit-1]. // Never reads a character at or beyond limit. If a valid/terminated varint32 // was found in the range, stores it in *OUTPUT and returns a pointer just // past the last byte of the varint32. Else returns NULL. On success, // "result <= limit". static const char* Parse32WithLimit(const char* ptr, const char* limit, uint32* OUTPUT); // REQUIRES "ptr" points to a buffer of length sufficient to hold "v". // EFFECTS Encodes "v" into "ptr" and returns a pointer to the // byte just past the last encoded byte. static char* Encode32(char* ptr, uint32 v); // EFFECTS Appends the varint representation of "value" to "*s". static void Append32(string* s, uint32 value); }; inline const char* Varint::Parse32WithLimit(const char* p, const char* l, uint32* OUTPUT) { const unsigned char* ptr = reinterpret_cast(p); const unsigned char* limit = reinterpret_cast(l); uint32 b, result; if (ptr >= limit) return NULL; b = *(ptr++); result = b & 127; if (b < 128) goto done; if (ptr >= limit) return NULL; b = *(ptr++); result |= (b & 127) << 7; if (b < 128) goto done; if (ptr >= limit) return NULL; b = *(ptr++); result |= (b & 127) << 14; if (b < 128) goto done; if (ptr >= limit) return NULL; b = *(ptr++); result |= (b & 127) << 21; if (b < 128) goto done; if (ptr >= limit) return NULL; b = *(ptr++); result |= (b & 127) << 28; if (b < 16) goto done; return NULL; // Value is too long to be a varint32 done: *OUTPUT = result; return reinterpret_cast(ptr); } inline char* Varint::Encode32(char* sptr, uint32 v) { // Operate on characters as unsigneds unsigned char* ptr = reinterpret_cast(sptr); static const int B = 128; if (v < (1<<7)) { *(ptr++) = v; } else if (v < (1<<14)) { *(ptr++) = v | B; *(ptr++) = v>>7; } else if (v < (1<<21)) { *(ptr++) = v | B; *(ptr++) = (v>>7) | B; *(ptr++) = v>>14; } else if (v < (1<<28)) { *(ptr++) = v | B; *(ptr++) = (v>>7) | B; *(ptr++) = (v>>14) | B; *(ptr++) = v>>21; } else { *(ptr++) = v | B; *(ptr++) = (v>>7) | B; *(ptr++) = (v>>14) | B; *(ptr++) = (v>>21) | B; *(ptr++) = v>>28; } return reinterpret_cast(ptr); } // If you know the internal layout of the std::string in use, you can // replace this function with one that resizes the string without // filling the new space with zeros (if applicable) -- // it will be non-portable but faster. inline void STLStringResizeUninitialized(string* s, size_t new_size) { s->resize(new_size); } // Return a mutable char* pointing to a string's internal buffer, // which may not be null-terminated. Writing through this pointer will // modify the string. // // string_as_array(&str)[i] is valid for 0 <= i < str.size() until the // next call to a string method that invalidates iterators. // // As of 2006-04, there is no standard-blessed way of getting a // mutable reference to a string's internal buffer. However, issue 530 // (http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-defects.html#530) // proposes this as the method. It will officially be part of the standard // for C++0x. This should already work on all current implementations. inline char* string_as_array(string* str) { return str->empty() ? NULL : &*str->begin(); } } // namespace snappy #endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_ tmpNnpnZF/thirdparty/snappy/snappy.h0000664000175000017500000002070012543167424017152 0ustar chrischris// Copyright 2005 and onwards Google Inc. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // A light-weight compression algorithm. It is designed for speed of // compression and decompression, rather than for the utmost in space // savings. // // For getting better compression ratios when you are compressing data // with long repeated sequences or compressing data that is similar to // other data, while still compressing fast, you might look at first // using BMDiff and then compressing the output of BMDiff with // Snappy. #ifndef UTIL_SNAPPY_SNAPPY_H__ #define UTIL_SNAPPY_SNAPPY_H__ #include #include #include "snappy-stubs-public.h" namespace snappy { class Source; class Sink; // ------------------------------------------------------------------------ // Generic compression/decompression routines. // ------------------------------------------------------------------------ // Compress the bytes read from "*source" and append to "*sink". Return the // number of bytes written. size_t Compress(Source* source, Sink* sink); // Find the uncompressed length of the given stream, as given by the header. // Note that the true length could deviate from this; the stream could e.g. // be truncated. // // Also note that this leaves "*source" in a state that is unsuitable for // further operations, such as RawUncompress(). You will need to rewind // or recreate the source yourself before attempting any further calls. bool GetUncompressedLength(Source* source, uint32* result); // ------------------------------------------------------------------------ // Higher-level string based routines (should be sufficient for most users) // ------------------------------------------------------------------------ // Sets "*output" to the compressed version of "input[0,input_length-1]". // Original contents of *output are lost. // // REQUIRES: "input[]" is not an alias of "*output". size_t Compress(const char* input, size_t input_length, string* output); // Decompresses "compressed[0,compressed_length-1]" to "*uncompressed". // Original contents of "*uncompressed" are lost. // // REQUIRES: "compressed[]" is not an alias of "*uncompressed". // // returns false if the message is corrupted and could not be decompressed bool Uncompress(const char* compressed, size_t compressed_length, string* uncompressed); // ------------------------------------------------------------------------ // Lower-level character array based routines. May be useful for // efficiency reasons in certain circumstances. // ------------------------------------------------------------------------ // REQUIRES: "compressed" must point to an area of memory that is at // least "MaxCompressedLength(input_length)" bytes in length. // // Takes the data stored in "input[0..input_length]" and stores // it in the array pointed to by "compressed". // // "*compressed_length" is set to the length of the compressed output. // // Example: // char* output = new char[snappy::MaxCompressedLength(input_length)]; // size_t output_length; // RawCompress(input, input_length, output, &output_length); // ... Process(output, output_length) ... // delete [] output; void RawCompress(const char* input, size_t input_length, char* compressed, size_t* compressed_length); // Given data in "compressed[0..compressed_length-1]" generated by // calling the Snappy::Compress routine, this routine // stores the uncompressed data to // uncompressed[0..GetUncompressedLength(compressed)-1] // returns false if the message is corrupted and could not be decrypted bool RawUncompress(const char* compressed, size_t compressed_length, char* uncompressed); // Given data from the byte source 'compressed' generated by calling // the Snappy::Compress routine, this routine stores the uncompressed // data to // uncompressed[0..GetUncompressedLength(compressed,compressed_length)-1] // returns false if the message is corrupted and could not be decrypted bool RawUncompress(Source* compressed, char* uncompressed); // Given data in "compressed[0..compressed_length-1]" generated by // calling the Snappy::Compress routine, this routine // stores the uncompressed data to the iovec "iov". The number of physical // buffers in "iov" is given by iov_cnt and their cumulative size // must be at least GetUncompressedLength(compressed). The individual buffers // in "iov" must not overlap with each other. // // returns false if the message is corrupted and could not be decrypted bool RawUncompressToIOVec(const char* compressed, size_t compressed_length, const struct iovec* iov, size_t iov_cnt); // Given data from the byte source 'compressed' generated by calling // the Snappy::Compress routine, this routine stores the uncompressed // data to the iovec "iov". The number of physical // buffers in "iov" is given by iov_cnt and their cumulative size // must be at least GetUncompressedLength(compressed). The individual buffers // in "iov" must not overlap with each other. // // returns false if the message is corrupted and could not be decrypted bool RawUncompressToIOVec(Source* compressed, const struct iovec* iov, size_t iov_cnt); // Returns the maximal size of the compressed representation of // input data that is "source_bytes" bytes in length; size_t MaxCompressedLength(size_t source_bytes); // REQUIRES: "compressed[]" was produced by RawCompress() or Compress() // Returns true and stores the length of the uncompressed data in // *result normally. Returns false on parsing error. // This operation takes O(1) time. bool GetUncompressedLength(const char* compressed, size_t compressed_length, size_t* result); // Returns true iff the contents of "compressed[]" can be uncompressed // successfully. Does not return the uncompressed data. Takes // time proportional to compressed_length, but is usually at least // a factor of four faster than actual decompression. bool IsValidCompressedBuffer(const char* compressed, size_t compressed_length); // The size of a compression block. Note that many parts of the compression // code assumes that kBlockSize <= 65536; in particular, the hash table // can only store 16-bit offsets, and EmitCopy() also assumes the offset // is 65535 bytes or less. Note also that if you change this, it will // affect the framing format (see framing_format.txt). // // Note that there might be older data around that is compressed with larger // block sizes, so the decompression code should not rely on the // non-existence of long backreferences. static const int kBlockLog = 16; static const size_t kBlockSize = 1 << kBlockLog; static const int kMaxHashTableBits = 14; static const size_t kMaxHashTableSize = 1 << kMaxHashTableBits; } // end namespace snappy #endif // UTIL_SNAPPY_SNAPPY_H__ tmpNnpnZF/thirdparty/snappy/NEWS0000664000175000017500000000747112543167424016200 0ustar chrischrisSnappy v1.1.2, February 28th 2014: This is a maintenance release with no changes to the actual library source code. * Stop distributing benchmark data files that have unclear or unsuitable licensing. * Add support for padding chunks in the framing format. Snappy v1.1.1, October 15th 2013: * Add support for uncompressing to iovecs (scatter I/O). The bulk of this patch was contributed by Mohit Aron. * Speed up decompression by ~2%; much more so (~13-20%) on a few benchmarks on given compilers and CPUs. * Fix a few issues with MSVC compilation. * Support truncated test data in the benchmark. Snappy v1.1.0, January 18th 2013: * Snappy now uses 64 kB block size instead of 32 kB. On average, this means it compresses about 3% denser (more so for some inputs), at the same or better speeds. * libsnappy no longer depends on iostream. * Some small performance improvements in compression on x86 (0.5–1%). * Various portability fixes for ARM-based platforms, for MSVC, and for GNU/Hurd. Snappy v1.0.5, February 24th 2012: * More speed improvements. Exactly how big will depend on the architecture: - 3–10% faster decompression for the base case (x86-64). - ARMv7 and higher can now use unaligned accesses, and will see about 30% faster decompression and 20–40% faster compression. - 32-bit platforms (ARM and 32-bit x86) will see 2–5% faster compression. These are all cumulative (e.g., ARM gets all three speedups). * Fixed an issue where the unit test would crash on system with less than 256 MB address space available, e.g. some embedded platforms. * Added a framing format description, for use over e.g. HTTP, or for a command-line compressor. We do not have any implementations of this at the current point, but there seems to be enough of a general interest in the topic. Also make the format description slightly clearer. * Remove some compile-time warnings in -Wall (mostly signed/unsigned comparisons), for easier embedding into projects that use -Wall -Werror. Snappy v1.0.4, September 15th 2011: * Speeded up the decompressor somewhat; typically about 2–8% for Core i7, in 64-bit mode (comparable for Opteron). Somewhat more for some tests, almost no gain for others. * Make Snappy compile on certain platforms it didn't before (Solaris with SunPro C++, HP-UX, AIX). * Correct some minor errors in the format description. Snappy v1.0.3, June 2nd 2011: * Speeded up the decompressor somewhat; about 3-6% for Core 2, 6-13% for Core i7, and 5-12% for Opteron (all in 64-bit mode). * Added compressed format documentation. This text is new, but an earlier version from Zeev Tarantov was used as reference. * Only link snappy_unittest against -lz and other autodetected libraries, not libsnappy.so (which doesn't need any such dependency). * Fixed some display issues in the microbenchmarks, one of which would frequently make the test crash on GNU/Hurd. Snappy v1.0.2, April 29th 2011: * Relicense to a BSD-type license. * Added C bindings, contributed by Martin Gieseking. * More Win32 fixes, in particular for MSVC. * Replace geo.protodata with a newer version. * Fix timing inaccuracies in the unit test when comparing Snappy to other algorithms. Snappy v1.0.1, March 25th 2011: This is a maintenance release, mostly containing minor fixes. There is no new functionality. The most important fixes include: * The COPYING file and all licensing headers now correctly state that Snappy is licensed under the Apache 2.0 license. * snappy_unittest should now compile natively under Windows, as well as on embedded systems with no mmap(). * Various autotools nits have been fixed. Snappy v1.0, March 17th 2011: * Initial version. tmpNnpnZF/thirdparty/snappy/README0000664000175000017500000001313712543167424016355 0ustar chrischrisSnappy, a fast compressor/decompressor. Introduction ============ Snappy is a compression/decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, Snappy is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger. (For more information, see "Performance", below.) Snappy has the following properties: * Fast: Compression speeds at 250 MB/sec and beyond, with no assembler code. See "Performance" below. * Stable: Over the last few years, Snappy has compressed and decompressed petabytes of data in Google's production environment. The Snappy bitstream format is stable and will not change between versions. * Robust: The Snappy decompressor is designed not to crash in the face of corrupted or malicious input. * Free and open source software: Snappy is licensed under a BSD-type license. For more information, see the included COPYING file. Snappy has previously been called "Zippy" in some Google presentations and the like. Performance =========== Snappy is intended to be fast. On a single core of a Core i7 processor in 64-bit mode, it compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more. (These numbers are for the slowest inputs in our benchmark suite; others are much faster.) In our tests, Snappy usually is faster than algorithms in the same class (e.g. LZO, LZF, FastLZ, QuickLZ, etc.) while achieving comparable compression ratios. Typical compression ratios (based on the benchmark suite) are about 1.5-1.7x for plain text, about 2-4x for HTML, and of course 1.0x for JPEGs, PNGs and other already-compressed data. Similar numbers for zlib in its fastest mode are 2.6-2.8x, 3-7x and 1.0x, respectively. More sophisticated algorithms are capable of achieving yet higher compression rates, although usually at the expense of speed. Of course, compression ratio will vary significantly with the input. Although Snappy should be fairly portable, it is primarily optimized for 64-bit x86-compatible processors, and may run slower in other environments. In particular: - Snappy uses 64-bit operations in several places to process more data at once than would otherwise be possible. - Snappy assumes unaligned 32- and 64-bit loads and stores are cheap. On some platforms, these must be emulated with single-byte loads and stores, which is much slower. - Snappy assumes little-endian throughout, and needs to byte-swap data in several places if running on a big-endian platform. Experience has shown that even heavily tuned code can be improved. Performance optimizations, whether for 64-bit x86 or other platforms, are of course most welcome; see "Contact", below. Usage ===== Note that Snappy, both the implementation and the main interface, is written in C++. However, several third-party bindings to other languages are available; see the Google Code page at http://code.google.com/p/snappy/ for more information. Also, if you want to use Snappy from C code, you can use the included C bindings in snappy-c.h. To use Snappy from your own C++ program, include the file "snappy.h" from your calling file, and link against the compiled library. There are many ways to call Snappy, but the simplest possible is snappy::Compress(input.data(), input.size(), &output); and similarly snappy::Uncompress(input.data(), input.size(), &output); where "input" and "output" are both instances of std::string. There are other interfaces that are more flexible in various ways, including support for custom (non-array) input sources. See the header file for more information. Tests and benchmarks ==================== When you compile Snappy, snappy_unittest is compiled in addition to the library itself. You do not need it to use the compressor from your own library, but it contains several useful components for Snappy development. First of all, it contains unit tests, verifying correctness on your machine in various scenarios. If you want to change or optimize Snappy, please run the tests to verify you have not broken anything. Note that if you have the Google Test library installed, unit test behavior (especially failures) will be significantly more user-friendly. You can find Google Test at http://code.google.com/p/googletest/ You probably also want the gflags library for handling of command-line flags; you can find it at http://code.google.com/p/google-gflags/ In addition to the unit tests, snappy contains microbenchmarks used to tune compression and decompression performance. These are automatically run before the unit tests, but you can disable them using the flag --run_microbenchmarks=false if you have gflags installed (otherwise you will need to edit the source). Finally, snappy can benchmark Snappy against a few other compression libraries (zlib, LZO, LZF, FastLZ and QuickLZ), if they were detected at configure time. To benchmark using a given file, give the compression algorithm you want to test Snappy against (e.g. --zlib) and then a list of one or more file names on the command line. The testdata/ directory contains the files used by the microbenchmark, which should provide a reasonably balanced starting point for benchmarking. (Note that baddata[1-3].snappy are not intended as benchmarks; they are used to verify correctness in the presence of corrupted data in the unit test.) Contact ======= Snappy is distributed through Google Code. For the latest version, a bug tracker, and other information, see http://code.google.com/p/snappy/ tmpNnpnZF/thirdparty/snappy/snappy-test.h0000664000175000017500000004115212543167424020133 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Various stubs for the unit tests for the open-source version of Snappy. #ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ #define UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ #include #include #include "snappy-stubs-internal.h" #include #include #ifdef HAVE_SYS_MMAN_H #include #endif #ifdef HAVE_SYS_RESOURCE_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_WINDOWS_H #define WIN32_LEAN_AND_MEAN #include #endif #include #ifdef HAVE_GTEST #include #undef TYPED_TEST #define TYPED_TEST TEST #define INIT_GTEST(argc, argv) ::testing::InitGoogleTest(argc, *argv) #else // Stubs for if the user doesn't have Google Test installed. #define TEST(test_case, test_subcase) \ void Test_ ## test_case ## _ ## test_subcase() #define INIT_GTEST(argc, argv) #define TYPED_TEST TEST #define EXPECT_EQ CHECK_EQ #define EXPECT_NE CHECK_NE #define EXPECT_FALSE(cond) CHECK(!(cond)) #endif #ifdef HAVE_GFLAGS #include // This is tricky; both gflags and Google Test want to look at the command line // arguments. Google Test seems to be the most happy with unknown arguments, // though, so we call it first and hope for the best. #define InitGoogle(argv0, argc, argv, remove_flags) \ INIT_GTEST(argc, argv); \ google::ParseCommandLineFlags(argc, argv, remove_flags); #else // If we don't have the gflags package installed, these can only be // changed at compile time. #define DEFINE_int32(flag_name, default_value, description) \ static int FLAGS_ ## flag_name = default_value; #define InitGoogle(argv0, argc, argv, remove_flags) \ INIT_GTEST(argc, argv) #endif #ifdef HAVE_LIBZ #include "zlib.h" #endif #ifdef HAVE_LIBLZO2 #include "lzo/lzo1x.h" #endif #ifdef HAVE_LIBLZF extern "C" { #include "lzf.h" } #endif #ifdef HAVE_LIBFASTLZ #include "fastlz.h" #endif #ifdef HAVE_LIBQUICKLZ #include "quicklz.h" #endif namespace { namespace File { void Init() { } } // namespace File namespace file { int Defaults() { } class DummyStatus { public: void CheckSuccess() { } }; DummyStatus GetContents(const string& filename, string* data, int unused) { FILE* fp = fopen(filename.c_str(), "rb"); if (fp == NULL) { perror(filename.c_str()); exit(1); } data->clear(); while (!feof(fp)) { char buf[4096]; size_t ret = fread(buf, 1, 4096, fp); if (ret == 0 && ferror(fp)) { perror("fread"); exit(1); } data->append(string(buf, ret)); } fclose(fp); } DummyStatus SetContents(const string& filename, const string& str, int unused) { FILE* fp = fopen(filename.c_str(), "wb"); if (fp == NULL) { perror(filename.c_str()); exit(1); } int ret = fwrite(str.data(), str.size(), 1, fp); if (ret != 1) { perror("fwrite"); exit(1); } fclose(fp); } } // namespace file } // namespace namespace snappy { #define FLAGS_test_random_seed 301 typedef string TypeParam; void Test_CorruptedTest_VerifyCorrupted(); void Test_Snappy_SimpleTests(); void Test_Snappy_MaxBlowup(); void Test_Snappy_RandomData(); void Test_Snappy_FourByteOffset(); void Test_SnappyCorruption_TruncatedVarint(); void Test_SnappyCorruption_UnterminatedVarint(); void Test_Snappy_ReadPastEndOfBuffer(); void Test_Snappy_FindMatchLength(); void Test_Snappy_FindMatchLengthRandom(); string ReadTestDataFile(const string& base, size_t size_limit); string ReadTestDataFile(const string& base); // A sprintf() variant that returns a std::string. // Not safe for general use due to truncation issues. string StringPrintf(const char* format, ...); // A simple, non-cryptographically-secure random generator. class ACMRandom { public: explicit ACMRandom(uint32 seed) : seed_(seed) {} int32 Next(); int32 Uniform(int32 n) { return Next() % n; } uint8 Rand8() { return static_cast((Next() >> 1) & 0x000000ff); } bool OneIn(int X) { return Uniform(X) == 0; } // Skewed: pick "base" uniformly from range [0,max_log] and then // return "base" random bits. The effect is to pick a number in the // range [0,2^max_log-1] with bias towards smaller numbers. int32 Skewed(int max_log); private: static const uint32 M = 2147483647L; // 2^31-1 uint32 seed_; }; inline int32 ACMRandom::Next() { static const uint64 A = 16807; // bits 14, 8, 7, 5, 2, 1, 0 // We are computing // seed_ = (seed_ * A) % M, where M = 2^31-1 // // seed_ must not be zero or M, or else all subsequent computed values // will be zero or M respectively. For all other values, seed_ will end // up cycling through every number in [1,M-1] uint64 product = seed_ * A; // Compute (product % M) using the fact that ((x << 31) % M) == x. seed_ = (product >> 31) + (product & M); // The first reduction may overflow by 1 bit, so we may need to repeat. // mod == M is not possible; using > allows the faster sign-bit-based test. if (seed_ > M) { seed_ -= M; } return seed_; } inline int32 ACMRandom::Skewed(int max_log) { const int32 base = (Next() - 1) % (max_log+1); return (Next() - 1) & ((1u << base)-1); } // A wall-time clock. This stub is not super-accurate, nor resistant to the // system time changing. class CycleTimer { public: CycleTimer() : real_time_us_(0) {} void Start() { #ifdef WIN32 QueryPerformanceCounter(&start_); #else gettimeofday(&start_, NULL); #endif } void Stop() { #ifdef WIN32 LARGE_INTEGER stop; LARGE_INTEGER frequency; QueryPerformanceCounter(&stop); QueryPerformanceFrequency(&frequency); double elapsed = static_cast(stop.QuadPart - start_.QuadPart) / frequency.QuadPart; real_time_us_ += elapsed * 1e6 + 0.5; #else struct timeval stop; gettimeofday(&stop, NULL); real_time_us_ += 1000000 * (stop.tv_sec - start_.tv_sec); real_time_us_ += (stop.tv_usec - start_.tv_usec); #endif } double Get() { return real_time_us_ * 1e-6; } private: int64 real_time_us_; #ifdef WIN32 LARGE_INTEGER start_; #else struct timeval start_; #endif }; // Minimalistic microbenchmark framework. typedef void (*BenchmarkFunction)(int, int); class Benchmark { public: Benchmark(const string& name, BenchmarkFunction function) : name_(name), function_(function) {} Benchmark* DenseRange(int start, int stop) { start_ = start; stop_ = stop; return this; } void Run(); private: const string name_; const BenchmarkFunction function_; int start_, stop_; }; #define BENCHMARK(benchmark_name) \ Benchmark* Benchmark_ ## benchmark_name = \ (new Benchmark(#benchmark_name, benchmark_name)) extern Benchmark* Benchmark_BM_UFlat; extern Benchmark* Benchmark_BM_UIOVec; extern Benchmark* Benchmark_BM_UValidate; extern Benchmark* Benchmark_BM_ZFlat; void ResetBenchmarkTiming(); void StartBenchmarkTiming(); void StopBenchmarkTiming(); void SetBenchmarkLabel(const string& str); void SetBenchmarkBytesProcessed(int64 bytes); #ifdef HAVE_LIBZ // Object-oriented wrapper around zlib. class ZLib { public: ZLib(); ~ZLib(); // Wipe a ZLib object to a virgin state. This differs from Reset() // in that it also breaks any state. void Reinit(); // Call this to make a zlib buffer as good as new. Here's the only // case where they differ: // CompressChunk(a); CompressChunk(b); CompressChunkDone(); vs // CompressChunk(a); Reset(); CompressChunk(b); CompressChunkDone(); // You'll want to use Reset(), then, when you interrupt a compress // (or uncompress) in the middle of a chunk and want to start over. void Reset(); // According to the zlib manual, when you Compress, the destination // buffer must have size at least src + .1%*src + 12. This function // helps you calculate that. Augment this to account for a potential // gzip header and footer, plus a few bytes of slack. static int MinCompressbufSize(int uncompress_size) { return uncompress_size + uncompress_size/1000 + 40; } // Compresses the source buffer into the destination buffer. // sourceLen is the byte length of the source buffer. // Upon entry, destLen is the total size of the destination buffer, // which must be of size at least MinCompressbufSize(sourceLen). // Upon exit, destLen is the actual size of the compressed buffer. // // This function can be used to compress a whole file at once if the // input file is mmap'ed. // // Returns Z_OK if success, Z_MEM_ERROR if there was not // enough memory, Z_BUF_ERROR if there was not enough room in the // output buffer. Note that if the output buffer is exactly the same // size as the compressed result, we still return Z_BUF_ERROR. // (check CL#1936076) int Compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); // Uncompresses the source buffer into the destination buffer. // The destination buffer must be long enough to hold the entire // decompressed contents. // // Returns Z_OK on success, otherwise, it returns a zlib error code. int Uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); // Uncompress data one chunk at a time -- ie you can call this // more than once. To get this to work you need to call per-chunk // and "done" routines. // // Returns Z_OK if success, Z_MEM_ERROR if there was not // enough memory, Z_BUF_ERROR if there was not enough room in the // output buffer. int UncompressAtMost(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen); // Checks gzip footer information, as needed. Mostly this just // makes sure the checksums match. Whenever you call this, it // will assume the last 8 bytes from the previous UncompressChunk // call are the footer. Returns true iff everything looks ok. bool UncompressChunkDone(); private: int InflateInit(); // sets up the zlib inflate structure int DeflateInit(); // sets up the zlib deflate structure // These init the zlib data structures for compressing/uncompressing int CompressInit(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen); int UncompressInit(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen); // Initialization method to be called if we hit an error while // uncompressing. On hitting an error, call this method before // returning the error. void UncompressErrorInit(); // Helper function for Compress int CompressChunkOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int flush_mode); int CompressAtMostOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen, int flush_mode); // Likewise for UncompressAndUncompressChunk int UncompressChunkOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int flush_mode); int UncompressAtMostOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen, int flush_mode); // Initialization method to be called if we hit an error while // compressing. On hitting an error, call this method before // returning the error. void CompressErrorInit(); int compression_level_; // compression level int window_bits_; // log base 2 of the window size used in compression int mem_level_; // specifies the amount of memory to be used by // compressor (1-9) z_stream comp_stream_; // Zlib stream data structure bool comp_init_; // True if we have initialized comp_stream_ z_stream uncomp_stream_; // Zlib stream data structure bool uncomp_init_; // True if we have initialized uncomp_stream_ // These are used only with chunked compression. bool first_chunk_; // true if we need to emit headers with this chunk }; #endif // HAVE_LIBZ } // namespace snappy DECLARE_bool(run_microbenchmarks); static void RunSpecifiedBenchmarks() { if (!FLAGS_run_microbenchmarks) { return; } fprintf(stderr, "Running microbenchmarks.\n"); #ifndef NDEBUG fprintf(stderr, "WARNING: Compiled with assertions enabled, will be slow.\n"); #endif #ifndef __OPTIMIZE__ fprintf(stderr, "WARNING: Compiled without optimization, will be slow.\n"); #endif fprintf(stderr, "Benchmark Time(ns) CPU(ns) Iterations\n"); fprintf(stderr, "---------------------------------------------------\n"); snappy::Benchmark_BM_UFlat->Run(); snappy::Benchmark_BM_UIOVec->Run(); snappy::Benchmark_BM_UValidate->Run(); snappy::Benchmark_BM_ZFlat->Run(); fprintf(stderr, "\n"); } #ifndef HAVE_GTEST static inline int RUN_ALL_TESTS() { fprintf(stderr, "Running correctness tests.\n"); snappy::Test_CorruptedTest_VerifyCorrupted(); snappy::Test_Snappy_SimpleTests(); snappy::Test_Snappy_MaxBlowup(); snappy::Test_Snappy_RandomData(); snappy::Test_Snappy_FourByteOffset(); snappy::Test_SnappyCorruption_TruncatedVarint(); snappy::Test_SnappyCorruption_UnterminatedVarint(); snappy::Test_Snappy_ReadPastEndOfBuffer(); snappy::Test_Snappy_FindMatchLength(); snappy::Test_Snappy_FindMatchLengthRandom(); fprintf(stderr, "All tests passed.\n"); return 0; } #endif // HAVE_GTEST // For main(). namespace snappy { static void CompressFile(const char* fname); static void UncompressFile(const char* fname); static void MeasureFile(const char* fname); // Logging. #define LOG(level) LogMessage() #define VLOG(level) true ? (void)0 : \ snappy::LogMessageVoidify() & snappy::LogMessage() class LogMessage { public: LogMessage() { } ~LogMessage() { cerr << endl; } LogMessage& operator<<(const std::string& msg) { cerr << msg; return *this; } LogMessage& operator<<(int x) { cerr << x; return *this; } }; // Asserts, both versions activated in debug mode only, // and ones that are always active. #define CRASH_UNLESS(condition) \ PREDICT_TRUE(condition) ? (void)0 : \ snappy::LogMessageVoidify() & snappy::LogMessageCrash() class LogMessageCrash : public LogMessage { public: LogMessageCrash() { } ~LogMessageCrash() { cerr << endl; abort(); } }; // This class is used to explicitly ignore values in the conditional // logging macros. This avoids compiler warnings like "value computed // is not used" and "statement has no effect". class LogMessageVoidify { public: LogMessageVoidify() { } // This has to be an operator with a precedence lower than << but // higher than ?: void operator&(const LogMessage&) { } }; #define CHECK(cond) CRASH_UNLESS(cond) #define CHECK_LE(a, b) CRASH_UNLESS((a) <= (b)) #define CHECK_GE(a, b) CRASH_UNLESS((a) >= (b)) #define CHECK_EQ(a, b) CRASH_UNLESS((a) == (b)) #define CHECK_NE(a, b) CRASH_UNLESS((a) != (b)) #define CHECK_LT(a, b) CRASH_UNLESS((a) < (b)) #define CHECK_GT(a, b) CRASH_UNLESS((a) > (b)) } // namespace using snappy::CompressFile; using snappy::UncompressFile; using snappy::MeasureFile; #endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_ tmpNnpnZF/thirdparty/snappy/snappy-c.cc0000664000175000017500000000706512543167424017541 0ustar chrischris// Copyright 2011 Martin Gieseking . // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "snappy.h" #include "snappy-c.h" extern "C" { snappy_status snappy_compress(const char* input, size_t input_length, char* compressed, size_t *compressed_length) { if (*compressed_length < snappy_max_compressed_length(input_length)) { return SNAPPY_BUFFER_TOO_SMALL; } snappy::RawCompress(input, input_length, compressed, compressed_length); return SNAPPY_OK; } snappy_status snappy_uncompress(const char* compressed, size_t compressed_length, char* uncompressed, size_t* uncompressed_length) { size_t real_uncompressed_length; if (!snappy::GetUncompressedLength(compressed, compressed_length, &real_uncompressed_length)) { return SNAPPY_INVALID_INPUT; } if (*uncompressed_length < real_uncompressed_length) { return SNAPPY_BUFFER_TOO_SMALL; } if (!snappy::RawUncompress(compressed, compressed_length, uncompressed)) { return SNAPPY_INVALID_INPUT; } *uncompressed_length = real_uncompressed_length; return SNAPPY_OK; } size_t snappy_max_compressed_length(size_t source_length) { return snappy::MaxCompressedLength(source_length); } snappy_status snappy_uncompressed_length(const char *compressed, size_t compressed_length, size_t *result) { if (snappy::GetUncompressedLength(compressed, compressed_length, result)) { return SNAPPY_OK; } else { return SNAPPY_INVALID_INPUT; } } snappy_status snappy_validate_compressed_buffer(const char *compressed, size_t compressed_length) { if (snappy::IsValidCompressedBuffer(compressed, compressed_length)) { return SNAPPY_OK; } else { return SNAPPY_INVALID_INPUT; } } } // extern "C" tmpNnpnZF/thirdparty/snappy/config.h0000664000175000017500000000775112543167424017120 0ustar chrischris/* config.h. Manually derived from config.h.in, with the subset of defines * that actually affect the library, given that most of them are meant for the * tests, which we don't build. */ /* Define to 1 if the compiler supports __builtin_ctz and friends. */ #if defined(__GNUCC__) # define HAVE_BUILTIN_CTZ 1 #endif /* Define to 1 if the compiler supports __builtin_expect. */ #if defined(__GNUCC__) # define HAVE_BUILTIN_EXPECT 1 #endif /* Define to 1 if you have the header file. */ #if defined(__linux__) # define HAVE_BYTESWAP_H 1 #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ /* Use the gflags package for command-line parsing. */ /* #undef HAVE_GFLAGS */ /* Defined when Google Test is available. */ /* #undef HAVE_GTEST */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `fastlz' library (-lfastlz). */ /* #undef HAVE_LIBFASTLZ */ /* Define to 1 if you have the `lzf' library (-llzf). */ /* #undef HAVE_LIBLZF */ /* Define to 1 if you have the `lzo2' library (-llzo2). */ /* #undef HAVE_LIBLZO2 */ /* Define to 1 if you have the `quicklz' library (-lquicklz). */ /* #undef HAVE_LIBQUICKLZ */ /* Define to 1 if you have the `z' library (-lz). */ /* #undef HAVE_LIBZ */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MEMORY_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_STRINGS_H */ /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_BYTESWAP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ENDIAN_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MMAN_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_RESOURCE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_STAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIME_H */ /* Define to 1 if you have the header file. */ #if !defined(_MSC_VER) # define HAVE_SYS_TYPES_H 1 #endif /* Define to 1 if you have the header file. */ #if !defined(_MSC_VER) # define HAVE_UNISTD_H 1 #endif /* Define to 1 if you have the header file. */ #if defined(_WIN32) # define HAVE_WINDOWS_H 1 #endif /* Define to the sub-directory in which libtool stores uninstalled libraries. */ /* #undef LT_OBJDIR */ /* Name of package */ /* #undef PACKAGE */ /* Define to the address where bug reports for this package should be sent. */ /* #undef PACKAGE_BUGREPORT */ /* Define to the full name of this package. */ /* #undef PACKAGE_NAME */ /* Define to the full name and version of this package. */ /* #undef PACKAGE_STRING */ /* Define to the one symbol short name of this package. */ /* #undef PACKAGE_TARNAME */ /* Define to the version of this package. */ /* #undef PACKAGE_VERSION */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ /* #undef VERSION */ /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #if defined(__GLIBC__) # include # if __BYTE_ORDER == __BIG_ENDIAN # define WORDS_BIGENDIAN 1 # endif #elif defined(__APPLE__) # include # if __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN # define WORDS_BIGENDIAN 1 # endif #endif /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Define to `int' if does not define. */ #if defined(_MSC_VER) # define ssize_t int #endif tmpNnpnZF/thirdparty/snappy/snappy-sinksource.h0000664000175000017500000001150312543167424021336 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ #define UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ #include namespace snappy { // A Sink is an interface that consumes a sequence of bytes. class Sink { public: Sink() { } virtual ~Sink(); // Append "bytes[0,n-1]" to this. virtual void Append(const char* bytes, size_t n) = 0; // Returns a writable buffer of the specified length for appending. // May return a pointer to the caller-owned scratch buffer which // must have at least the indicated length. The returned buffer is // only valid until the next operation on this Sink. // // After writing at most "length" bytes, call Append() with the // pointer returned from this function and the number of bytes // written. Many Append() implementations will avoid copying // bytes if this function returned an internal buffer. // // If a non-scratch buffer is returned, the caller may only pass a // prefix of it to Append(). That is, it is not correct to pass an // interior pointer of the returned array to Append(). // // The default implementation always returns the scratch buffer. virtual char* GetAppendBuffer(size_t length, char* scratch); private: // No copying Sink(const Sink&); void operator=(const Sink&); }; // A Source is an interface that yields a sequence of bytes class Source { public: Source() { } virtual ~Source(); // Return the number of bytes left to read from the source virtual size_t Available() const = 0; // Peek at the next flat region of the source. Does not reposition // the source. The returned region is empty iff Available()==0. // // Returns a pointer to the beginning of the region and store its // length in *len. // // The returned region is valid until the next call to Skip() or // until this object is destroyed, whichever occurs first. // // The returned region may be larger than Available() (for example // if this ByteSource is a view on a substring of a larger source). // The caller is responsible for ensuring that it only reads the // Available() bytes. virtual const char* Peek(size_t* len) = 0; // Skip the next n bytes. Invalidates any buffer returned by // a previous call to Peek(). // REQUIRES: Available() >= n virtual void Skip(size_t n) = 0; private: // No copying Source(const Source&); void operator=(const Source&); }; // A Source implementation that yields the contents of a flat array class ByteArraySource : public Source { public: ByteArraySource(const char* p, size_t n) : ptr_(p), left_(n) { } virtual ~ByteArraySource(); virtual size_t Available() const; virtual const char* Peek(size_t* len); virtual void Skip(size_t n); private: const char* ptr_; size_t left_; }; // A Sink implementation that writes to a flat array without any bound checks. class UncheckedByteArraySink : public Sink { public: explicit UncheckedByteArraySink(char* dest) : dest_(dest) { } virtual ~UncheckedByteArraySink(); virtual void Append(const char* data, size_t n); virtual char* GetAppendBuffer(size_t len, char* scratch); // Return the current output pointer so that a caller can see how // many bytes were produced. // Note: this is not a Sink method. char* CurrentDestination() const { return dest_; } private: char* dest_; }; } #endif // UTIL_SNAPPY_SNAPPY_SINKSOURCE_H_ tmpNnpnZF/thirdparty/snappy/AUTHORS0000664000175000017500000000002612543167424016536 0ustar chrischrisopensource@google.com tmpNnpnZF/thirdparty/snappy/snappy-stubs-public.h.in0000664000175000017500000000636712543167424022206 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // Author: sesse@google.com (Steinar H. Gunderson) // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Various type stubs for the open-source version of Snappy. // // This file cannot include config.h, as it is included from snappy.h, // which is a public header. Instead, snappy-stubs-public.h is generated by // from snappy-stubs-public.h.in at configure time. #ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #if @ac_cv_have_stdint_h@ #include #endif #if @ac_cv_have_stddef_h@ #include #endif #if @ac_cv_have_sys_uio_h@ #include #endif #define SNAPPY_MAJOR @SNAPPY_MAJOR@ #define SNAPPY_MINOR @SNAPPY_MINOR@ #define SNAPPY_PATCHLEVEL @SNAPPY_PATCHLEVEL@ #define SNAPPY_VERSION \ ((SNAPPY_MAJOR << 16) | (SNAPPY_MINOR << 8) | SNAPPY_PATCHLEVEL) #include namespace snappy { #if @ac_cv_have_stdint_h@ typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typedef uint16_t uint16; typedef int32_t int32; typedef uint32_t uint32; typedef int64_t int64; typedef uint64_t uint64; #else typedef signed char int8; typedef unsigned char uint8; typedef short int16; typedef unsigned short uint16; typedef int int32; typedef unsigned int uint32; typedef long long int64; typedef unsigned long long uint64; #endif typedef std::string string; #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&) #if !@ac_cv_have_sys_uio_h@ // Windows does not have an iovec type, yet the concept is universally useful. // It is simple to define it ourselves, so we put it inside our own namespace. struct iovec { void* iov_base; size_t iov_len; }; #endif } // namespace snappy #endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ tmpNnpnZF/thirdparty/snappy/snappy-c.h0000664000175000017500000001242112543167424017373 0ustar chrischris/* * Copyright 2011 Martin Gieseking . * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Plain C interface (a wrapper around the C++ implementation). */ #ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ #define UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ #ifdef __cplusplus extern "C" { #endif #include /* * Return values; see the documentation for each function to know * what each can return. */ typedef enum { SNAPPY_OK = 0, SNAPPY_INVALID_INPUT = 1, SNAPPY_BUFFER_TOO_SMALL = 2 } snappy_status; /* * Takes the data stored in "input[0..input_length-1]" and stores * it in the array pointed to by "compressed". * * signals the space available in "compressed". * If it is not at least equal to "snappy_max_compressed_length(input_length)", * SNAPPY_BUFFER_TOO_SMALL is returned. After successful compression, * contains the true length of the compressed output, * and SNAPPY_OK is returned. * * Example: * size_t output_length = snappy_max_compressed_length(input_length); * char* output = (char*)malloc(output_length); * if (snappy_compress(input, input_length, output, &output_length) * == SNAPPY_OK) { * ... Process(output, output_length) ... * } * free(output); */ snappy_status snappy_compress(const char* input, size_t input_length, char* compressed, size_t* compressed_length); /* * Given data in "compressed[0..compressed_length-1]" generated by * calling the snappy_compress routine, this routine stores * the uncompressed data to * uncompressed[0..uncompressed_length-1]. * Returns failure (a value not equal to SNAPPY_OK) if the message * is corrupted and could not be decrypted. * * signals the space available in "uncompressed". * If it is not at least equal to the value returned by * snappy_uncompressed_length for this stream, SNAPPY_BUFFER_TOO_SMALL * is returned. After successful decompression, * contains the true length of the decompressed output. * * Example: * size_t output_length; * if (snappy_uncompressed_length(input, input_length, &output_length) * != SNAPPY_OK) { * ... fail ... * } * char* output = (char*)malloc(output_length); * if (snappy_uncompress(input, input_length, output, &output_length) * == SNAPPY_OK) { * ... Process(output, output_length) ... * } * free(output); */ snappy_status snappy_uncompress(const char* compressed, size_t compressed_length, char* uncompressed, size_t* uncompressed_length); /* * Returns the maximal size of the compressed representation of * input data that is "source_length" bytes in length. */ size_t snappy_max_compressed_length(size_t source_length); /* * REQUIRES: "compressed[]" was produced by snappy_compress() * Returns SNAPPY_OK and stores the length of the uncompressed data in * *result normally. Returns SNAPPY_INVALID_INPUT on parsing error. * This operation takes O(1) time. */ snappy_status snappy_uncompressed_length(const char* compressed, size_t compressed_length, size_t* result); /* * Check if the contents of "compressed[]" can be uncompressed successfully. * Does not return the uncompressed data; if so, returns SNAPPY_OK, * or if not, returns SNAPPY_INVALID_INPUT. * Takes time proportional to compressed_length, but is usually at least a * factor of four faster than actual decompression. */ snappy_status snappy_validate_compressed_buffer(const char* compressed, size_t compressed_length); #ifdef __cplusplus } // extern "C" #endif #endif /* UTIL_SNAPPY_OPENSOURCE_SNAPPY_C_H_ */ tmpNnpnZF/thirdparty/snappy/CMakeLists.txt0000664000175000017500000000065012543167424020231 0ustar chrischrisadd_definitions ( -DNDEBUG -DHAVE_CONFIG_H ) # Adjust warnings if (NOT MSVC) add_compiler_flags (-Wno-unused-function) add_compiler_flags (-fstrict-aliasing) endif () add_convenience_library (snappy_bundled EXCLUDE_FROM_ALL snappy.cc snappy-sinksource.cc snappy-stubs-internal.cc snappy-c.cc ) install ( FILES COPYING DESTINATION ${DOC_INSTALL_DIR} RENAME LICENSE-snappy.txt ) tmpNnpnZF/thirdparty/snappy/snappy-internal.h0000664000175000017500000001252412543167424020771 0ustar chrischris// Copyright 2008 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Internals shared between the Snappy implementation and its unittest. #ifndef UTIL_SNAPPY_SNAPPY_INTERNAL_H_ #define UTIL_SNAPPY_SNAPPY_INTERNAL_H_ #include "snappy-stubs-internal.h" namespace snappy { namespace internal { class WorkingMemory { public: WorkingMemory() : large_table_(NULL) { } ~WorkingMemory() { delete[] large_table_; } // Allocates and clears a hash table using memory in "*this", // stores the number of buckets in "*table_size" and returns a pointer to // the base of the hash table. uint16* GetHashTable(size_t input_size, int* table_size); private: uint16 small_table_[1<<10]; // 2KB uint16* large_table_; // Allocated only when needed DISALLOW_COPY_AND_ASSIGN(WorkingMemory); }; // Flat array compression that does not emit the "uncompressed length" // prefix. Compresses "input" string to the "*op" buffer. // // REQUIRES: "input_length <= kBlockSize" // REQUIRES: "op" points to an array of memory that is at least // "MaxCompressedLength(input_length)" in size. // REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. // REQUIRES: "table_size" is a power of two // // Returns an "end" pointer into "op" buffer. // "end - op" is the compressed size of "input". char* CompressFragment(const char* input, size_t input_length, char* op, uint16* table, const int table_size); // Return the largest n such that // // s1[0,n-1] == s2[0,n-1] // and n <= (s2_limit - s2). // // Does not read *s2_limit or beyond. // Does not read *(s1 + (s2_limit - s2)) or beyond. // Requires that s2_limit >= s2. // // Separate implementation for x86_64, for speed. Uses the fact that // x86_64 is little endian. #if defined(ARCH_K8) static inline int FindMatchLength(const char* s1, const char* s2, const char* s2_limit) { assert(s2_limit >= s2); int matched = 0; // Find out how long the match is. We loop over the data 64 bits at a // time until we find a 64-bit block that doesn't match; then we find // the first non-matching bit and use that to calculate the total // length of the match. while (PREDICT_TRUE(s2 <= s2_limit - 8)) { if (PREDICT_FALSE(UNALIGNED_LOAD64(s2) == UNALIGNED_LOAD64(s1 + matched))) { s2 += 8; matched += 8; } else { // On current (mid-2008) Opteron models there is a 3% more // efficient code sequence to find the first non-matching byte. // However, what follows is ~10% better on Intel Core 2 and newer, // and we expect AMD's bsf instruction to improve. uint64 x = UNALIGNED_LOAD64(s2) ^ UNALIGNED_LOAD64(s1 + matched); int matching_bits = Bits::FindLSBSetNonZero64(x); matched += matching_bits >> 3; return matched; } } while (PREDICT_TRUE(s2 < s2_limit)) { if (PREDICT_TRUE(s1[matched] == *s2)) { ++s2; ++matched; } else { return matched; } } return matched; } #else static inline int FindMatchLength(const char* s1, const char* s2, const char* s2_limit) { // Implementation based on the x86-64 version, above. assert(s2_limit >= s2); int matched = 0; while (s2 <= s2_limit - 4 && UNALIGNED_LOAD32(s2) == UNALIGNED_LOAD32(s1 + matched)) { s2 += 4; matched += 4; } if (LittleEndian::IsLittleEndian() && s2 <= s2_limit - 4) { uint32 x = UNALIGNED_LOAD32(s2) ^ UNALIGNED_LOAD32(s1 + matched); int matching_bits = Bits::FindLSBSetNonZero(x); matched += matching_bits >> 3; } else { while ((s2 < s2_limit) && (s1[matched] == *s2)) { ++s2; ++matched; } } return matched; } #endif } // end namespace internal } // end namespace snappy #endif // UTIL_SNAPPY_SNAPPY_INTERNAL_H_ tmpNnpnZF/thirdparty/snappy/snappy-test.cc0000664000175000017500000004723012543167424020274 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Various stubs for the unit tests for the open-source version of Snappy. #include "snappy-test.h" #ifdef HAVE_WINDOWS_H #define WIN32_LEAN_AND_MEAN #include #endif #include DEFINE_bool(run_microbenchmarks, true, "Run microbenchmarks before doing anything else."); namespace snappy { string ReadTestDataFile(const string& base, size_t size_limit) { string contents; const char* srcdir = getenv("srcdir"); // This is set by Automake. string prefix; if (srcdir) { prefix = string(srcdir) + "/"; } file::GetContents(prefix + "testdata/" + base, &contents, file::Defaults() ).CheckSuccess(); if (size_limit > 0) { contents = contents.substr(0, size_limit); } return contents; } string ReadTestDataFile(const string& base) { return ReadTestDataFile(base, 0); } string StringPrintf(const char* format, ...) { char buf[4096]; va_list ap; va_start(ap, format); vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); return buf; } bool benchmark_running = false; int64 benchmark_real_time_us = 0; int64 benchmark_cpu_time_us = 0; string *benchmark_label = NULL; int64 benchmark_bytes_processed = 0; void ResetBenchmarkTiming() { benchmark_real_time_us = 0; benchmark_cpu_time_us = 0; } #ifdef WIN32 LARGE_INTEGER benchmark_start_real; FILETIME benchmark_start_cpu; #else // WIN32 struct timeval benchmark_start_real; struct rusage benchmark_start_cpu; #endif // WIN32 void StartBenchmarkTiming() { #ifdef WIN32 QueryPerformanceCounter(&benchmark_start_real); FILETIME dummy; CHECK(GetProcessTimes( GetCurrentProcess(), &dummy, &dummy, &dummy, &benchmark_start_cpu)); #else gettimeofday(&benchmark_start_real, NULL); if (getrusage(RUSAGE_SELF, &benchmark_start_cpu) == -1) { perror("getrusage(RUSAGE_SELF)"); exit(1); } #endif benchmark_running = true; } void StopBenchmarkTiming() { if (!benchmark_running) { return; } #ifdef WIN32 LARGE_INTEGER benchmark_stop_real; LARGE_INTEGER benchmark_frequency; QueryPerformanceCounter(&benchmark_stop_real); QueryPerformanceFrequency(&benchmark_frequency); double elapsed_real = static_cast( benchmark_stop_real.QuadPart - benchmark_start_real.QuadPart) / benchmark_frequency.QuadPart; benchmark_real_time_us += elapsed_real * 1e6 + 0.5; FILETIME benchmark_stop_cpu, dummy; CHECK(GetProcessTimes( GetCurrentProcess(), &dummy, &dummy, &dummy, &benchmark_stop_cpu)); ULARGE_INTEGER start_ulargeint; start_ulargeint.LowPart = benchmark_start_cpu.dwLowDateTime; start_ulargeint.HighPart = benchmark_start_cpu.dwHighDateTime; ULARGE_INTEGER stop_ulargeint; stop_ulargeint.LowPart = benchmark_stop_cpu.dwLowDateTime; stop_ulargeint.HighPart = benchmark_stop_cpu.dwHighDateTime; benchmark_cpu_time_us += (stop_ulargeint.QuadPart - start_ulargeint.QuadPart + 5) / 10; #else // WIN32 struct timeval benchmark_stop_real; gettimeofday(&benchmark_stop_real, NULL); benchmark_real_time_us += 1000000 * (benchmark_stop_real.tv_sec - benchmark_start_real.tv_sec); benchmark_real_time_us += (benchmark_stop_real.tv_usec - benchmark_start_real.tv_usec); struct rusage benchmark_stop_cpu; if (getrusage(RUSAGE_SELF, &benchmark_stop_cpu) == -1) { perror("getrusage(RUSAGE_SELF)"); exit(1); } benchmark_cpu_time_us += 1000000 * (benchmark_stop_cpu.ru_utime.tv_sec - benchmark_start_cpu.ru_utime.tv_sec); benchmark_cpu_time_us += (benchmark_stop_cpu.ru_utime.tv_usec - benchmark_start_cpu.ru_utime.tv_usec); #endif // WIN32 benchmark_running = false; } void SetBenchmarkLabel(const string& str) { if (benchmark_label) { delete benchmark_label; } benchmark_label = new string(str); } void SetBenchmarkBytesProcessed(int64 bytes) { benchmark_bytes_processed = bytes; } struct BenchmarkRun { int64 real_time_us; int64 cpu_time_us; }; struct BenchmarkCompareCPUTime { bool operator() (const BenchmarkRun& a, const BenchmarkRun& b) const { return a.cpu_time_us < b.cpu_time_us; } }; void Benchmark::Run() { for (int test_case_num = start_; test_case_num <= stop_; ++test_case_num) { // Run a few iterations first to find out approximately how fast // the benchmark is. const int kCalibrateIterations = 100; ResetBenchmarkTiming(); StartBenchmarkTiming(); (*function_)(kCalibrateIterations, test_case_num); StopBenchmarkTiming(); // Let each test case run for about 200ms, but at least as many // as we used to calibrate. // Run five times and pick the median. const int kNumRuns = 5; const int kMedianPos = kNumRuns / 2; int num_iterations = 0; if (benchmark_real_time_us > 0) { num_iterations = 200000 * kCalibrateIterations / benchmark_real_time_us; } num_iterations = max(num_iterations, kCalibrateIterations); BenchmarkRun benchmark_runs[kNumRuns]; for (int run = 0; run < kNumRuns; ++run) { ResetBenchmarkTiming(); StartBenchmarkTiming(); (*function_)(num_iterations, test_case_num); StopBenchmarkTiming(); benchmark_runs[run].real_time_us = benchmark_real_time_us; benchmark_runs[run].cpu_time_us = benchmark_cpu_time_us; } string heading = StringPrintf("%s/%d", name_.c_str(), test_case_num); string human_readable_speed; nth_element(benchmark_runs, benchmark_runs + kMedianPos, benchmark_runs + kNumRuns, BenchmarkCompareCPUTime()); int64 real_time_us = benchmark_runs[kMedianPos].real_time_us; int64 cpu_time_us = benchmark_runs[kMedianPos].cpu_time_us; if (cpu_time_us <= 0) { human_readable_speed = "?"; } else { int64 bytes_per_second = benchmark_bytes_processed * 1000000 / cpu_time_us; if (bytes_per_second < 1024) { human_readable_speed = StringPrintf("%dB/s", bytes_per_second); } else if (bytes_per_second < 1024 * 1024) { human_readable_speed = StringPrintf( "%.1fkB/s", bytes_per_second / 1024.0f); } else if (bytes_per_second < 1024 * 1024 * 1024) { human_readable_speed = StringPrintf( "%.1fMB/s", bytes_per_second / (1024.0f * 1024.0f)); } else { human_readable_speed = StringPrintf( "%.1fGB/s", bytes_per_second / (1024.0f * 1024.0f * 1024.0f)); } } fprintf(stderr, #ifdef WIN32 "%-18s %10I64d %10I64d %10d %s %s\n", #else "%-18s %10lld %10lld %10d %s %s\n", #endif heading.c_str(), static_cast(real_time_us * 1000 / num_iterations), static_cast(cpu_time_us * 1000 / num_iterations), num_iterations, human_readable_speed.c_str(), benchmark_label->c_str()); } } #ifdef HAVE_LIBZ ZLib::ZLib() : comp_init_(false), uncomp_init_(false) { Reinit(); } ZLib::~ZLib() { if (comp_init_) { deflateEnd(&comp_stream_); } if (uncomp_init_) { inflateEnd(&uncomp_stream_); } } void ZLib::Reinit() { compression_level_ = Z_DEFAULT_COMPRESSION; window_bits_ = MAX_WBITS; mem_level_ = 8; // DEF_MEM_LEVEL if (comp_init_) { deflateEnd(&comp_stream_); comp_init_ = false; } if (uncomp_init_) { inflateEnd(&uncomp_stream_); uncomp_init_ = false; } first_chunk_ = true; } void ZLib::Reset() { first_chunk_ = true; } // --------- COMPRESS MODE // Initialization method to be called if we hit an error while // compressing. On hitting an error, call this method before returning // the error. void ZLib::CompressErrorInit() { deflateEnd(&comp_stream_); comp_init_ = false; Reset(); } int ZLib::DeflateInit() { return deflateInit2(&comp_stream_, compression_level_, Z_DEFLATED, window_bits_, mem_level_, Z_DEFAULT_STRATEGY); } int ZLib::CompressInit(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen) { int err; comp_stream_.next_in = (Bytef*)source; comp_stream_.avail_in = (uInt)*sourceLen; if ((uLong)comp_stream_.avail_in != *sourceLen) return Z_BUF_ERROR; comp_stream_.next_out = dest; comp_stream_.avail_out = (uInt)*destLen; if ((uLong)comp_stream_.avail_out != *destLen) return Z_BUF_ERROR; if ( !first_chunk_ ) // only need to set up stream the first time through return Z_OK; if (comp_init_) { // we've already initted it err = deflateReset(&comp_stream_); if (err != Z_OK) { LOG(WARNING) << "ERROR: Can't reset compress object; creating a new one"; deflateEnd(&comp_stream_); comp_init_ = false; } } if (!comp_init_) { // first use comp_stream_.zalloc = (alloc_func)0; comp_stream_.zfree = (free_func)0; comp_stream_.opaque = (voidpf)0; err = DeflateInit(); if (err != Z_OK) return err; comp_init_ = true; } return Z_OK; } // In a perfect world we'd always have the full buffer to compress // when the time came, and we could just call Compress(). Alas, we // want to do chunked compression on our webserver. In this // application, we compress the header, send it off, then compress the // results, send them off, then compress the footer. Thus we need to // use the chunked compression features of zlib. int ZLib::CompressAtMostOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen, int flush_mode) { // Z_FULL_FLUSH or Z_FINISH int err; if ( (err=CompressInit(dest, destLen, source, sourceLen)) != Z_OK ) return err; // This is used to figure out how many bytes we wrote *this chunk* int compressed_size = comp_stream_.total_out; // Some setup happens only for the first chunk we compress in a run if ( first_chunk_ ) { first_chunk_ = false; } // flush_mode is Z_FINISH for all mode, Z_SYNC_FLUSH for incremental // compression. err = deflate(&comp_stream_, flush_mode); *sourceLen = comp_stream_.avail_in; if ((err == Z_STREAM_END || err == Z_OK) && comp_stream_.avail_in == 0 && comp_stream_.avail_out != 0 ) { // we processed everything ok and the output buffer was large enough. ; } else if (err == Z_STREAM_END && comp_stream_.avail_in > 0) { return Z_BUF_ERROR; // should never happen } else if (err != Z_OK && err != Z_STREAM_END && err != Z_BUF_ERROR) { // an error happened CompressErrorInit(); return err; } else if (comp_stream_.avail_out == 0) { // not enough space err = Z_BUF_ERROR; } assert(err == Z_OK || err == Z_STREAM_END || err == Z_BUF_ERROR); if (err == Z_STREAM_END) err = Z_OK; // update the crc and other metadata compressed_size = comp_stream_.total_out - compressed_size; // delta *destLen = compressed_size; return err; } int ZLib::CompressChunkOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int flush_mode) { // Z_FULL_FLUSH or Z_FINISH const int ret = CompressAtMostOrAll(dest, destLen, source, &sourceLen, flush_mode); if (ret == Z_BUF_ERROR) CompressErrorInit(); return ret; } // This routine only initializes the compression stream once. Thereafter, it // just does a deflateReset on the stream, which should be faster. int ZLib::Compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) { int err; if ( (err=CompressChunkOrAll(dest, destLen, source, sourceLen, Z_FINISH)) != Z_OK ) return err; Reset(); // reset for next call to Compress return Z_OK; } // --------- UNCOMPRESS MODE int ZLib::InflateInit() { return inflateInit2(&uncomp_stream_, MAX_WBITS); } // Initialization method to be called if we hit an error while // uncompressing. On hitting an error, call this method before // returning the error. void ZLib::UncompressErrorInit() { inflateEnd(&uncomp_stream_); uncomp_init_ = false; Reset(); } int ZLib::UncompressInit(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen) { int err; uncomp_stream_.next_in = (Bytef*)source; uncomp_stream_.avail_in = (uInt)*sourceLen; // Check for source > 64K on 16-bit machine: if ((uLong)uncomp_stream_.avail_in != *sourceLen) return Z_BUF_ERROR; uncomp_stream_.next_out = dest; uncomp_stream_.avail_out = (uInt)*destLen; if ((uLong)uncomp_stream_.avail_out != *destLen) return Z_BUF_ERROR; if ( !first_chunk_ ) // only need to set up stream the first time through return Z_OK; if (uncomp_init_) { // we've already initted it err = inflateReset(&uncomp_stream_); if (err != Z_OK) { LOG(WARNING) << "ERROR: Can't reset uncompress object; creating a new one"; UncompressErrorInit(); } } if (!uncomp_init_) { uncomp_stream_.zalloc = (alloc_func)0; uncomp_stream_.zfree = (free_func)0; uncomp_stream_.opaque = (voidpf)0; err = InflateInit(); if (err != Z_OK) return err; uncomp_init_ = true; } return Z_OK; } // If you compressed your data a chunk at a time, with CompressChunk, // you can uncompress it a chunk at a time with UncompressChunk. // Only difference bewteen chunked and unchunked uncompression // is the flush mode we use: Z_SYNC_FLUSH (chunked) or Z_FINISH (unchunked). int ZLib::UncompressAtMostOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen, int flush_mode) { // Z_SYNC_FLUSH or Z_FINISH int err = Z_OK; if ( (err=UncompressInit(dest, destLen, source, sourceLen)) != Z_OK ) { LOG(WARNING) << "UncompressInit: Error: " << err << " SourceLen: " << *sourceLen; return err; } // This is used to figure out how many output bytes we wrote *this chunk*: const uLong old_total_out = uncomp_stream_.total_out; // This is used to figure out how many input bytes we read *this chunk*: const uLong old_total_in = uncomp_stream_.total_in; // Some setup happens only for the first chunk we compress in a run if ( first_chunk_ ) { first_chunk_ = false; // so we don't do this again // For the first chunk *only* (to avoid infinite troubles), we let // there be no actual data to uncompress. This sometimes triggers // when the input is only the gzip header, say. if ( *sourceLen == 0 ) { *destLen = 0; return Z_OK; } } // We'll uncompress as much as we can. If we end OK great, otherwise // if we get an error that seems to be the gzip footer, we store the // gzip footer and return OK, otherwise we return the error. // flush_mode is Z_SYNC_FLUSH for chunked mode, Z_FINISH for all mode. err = inflate(&uncomp_stream_, flush_mode); // Figure out how many bytes of the input zlib slurped up: const uLong bytes_read = uncomp_stream_.total_in - old_total_in; CHECK_LE(source + bytes_read, source + *sourceLen); *sourceLen = uncomp_stream_.avail_in; if ((err == Z_STREAM_END || err == Z_OK) // everything went ok && uncomp_stream_.avail_in == 0) { // and we read it all ; } else if (err == Z_STREAM_END && uncomp_stream_.avail_in > 0) { LOG(WARNING) << "UncompressChunkOrAll: Received some extra data, bytes total: " << uncomp_stream_.avail_in << " bytes: " << string(reinterpret_cast(uncomp_stream_.next_in), min(int(uncomp_stream_.avail_in), 20)); UncompressErrorInit(); return Z_DATA_ERROR; // what's the extra data for? } else if (err != Z_OK && err != Z_STREAM_END && err != Z_BUF_ERROR) { // an error happened LOG(WARNING) << "UncompressChunkOrAll: Error: " << err << " avail_out: " << uncomp_stream_.avail_out; UncompressErrorInit(); return err; } else if (uncomp_stream_.avail_out == 0) { err = Z_BUF_ERROR; } assert(err == Z_OK || err == Z_BUF_ERROR || err == Z_STREAM_END); if (err == Z_STREAM_END) err = Z_OK; *destLen = uncomp_stream_.total_out - old_total_out; // size for this call return err; } int ZLib::UncompressChunkOrAll(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int flush_mode) { // Z_SYNC_FLUSH or Z_FINISH const int ret = UncompressAtMostOrAll(dest, destLen, source, &sourceLen, flush_mode); if (ret == Z_BUF_ERROR) UncompressErrorInit(); return ret; } int ZLib::UncompressAtMost(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen) { return UncompressAtMostOrAll(dest, destLen, source, sourceLen, Z_SYNC_FLUSH); } // We make sure we've uncompressed everything, that is, the current // uncompress stream is at a compressed-buffer-EOF boundary. In gzip // mode, we also check the gzip footer to make sure we pass the gzip // consistency checks. We RETURN true iff both types of checks pass. bool ZLib::UncompressChunkDone() { assert(!first_chunk_ && uncomp_init_); // Make sure we're at the end-of-compressed-data point. This means // if we call inflate with Z_FINISH we won't consume any input or // write any output Bytef dummyin, dummyout; uLongf dummylen = 0; if ( UncompressChunkOrAll(&dummyout, &dummylen, &dummyin, 0, Z_FINISH) != Z_OK ) { return false; } // Make sure that when we exit, we can start a new round of chunks later Reset(); return true; } // Uncompresses the source buffer into the destination buffer. // The destination buffer must be long enough to hold the entire // decompressed contents. // // We only initialize the uncomp_stream once. Thereafter, we use // inflateReset, which should be faster. // // Returns Z_OK on success, otherwise, it returns a zlib error code. int ZLib::Uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) { int err; if ( (err=UncompressChunkOrAll(dest, destLen, source, sourceLen, Z_FINISH)) != Z_OK ) { Reset(); // let us try to compress again return err; } if ( !UncompressChunkDone() ) // calls Reset() return Z_DATA_ERROR; return Z_OK; // stream_end is ok } #endif // HAVE_LIBZ } // namespace snappy tmpNnpnZF/thirdparty/snappy/snappy_unittest.cc0000664000175000017500000012726312543167424021263 0ustar chrischris// Copyright 2005 and onwards Google Inc. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include #include #include #include "snappy.h" #include "snappy-internal.h" #include "snappy-test.h" #include "snappy-sinksource.h" DEFINE_int32(start_len, -1, "Starting prefix size for testing (-1: just full file contents)"); DEFINE_int32(end_len, -1, "Starting prefix size for testing (-1: just full file contents)"); DEFINE_int32(bytes, 10485760, "How many bytes to compress/uncompress per file for timing"); DEFINE_bool(zlib, false, "Run zlib compression (http://www.zlib.net)"); DEFINE_bool(lzo, false, "Run LZO compression (http://www.oberhumer.com/opensource/lzo/)"); DEFINE_bool(quicklz, false, "Run quickLZ compression (http://www.quicklz.com/)"); DEFINE_bool(liblzf, false, "Run libLZF compression " "(http://www.goof.com/pcg/marc/liblzf.html)"); DEFINE_bool(fastlz, false, "Run FastLZ compression (http://www.fastlz.org/"); DEFINE_bool(snappy, true, "Run snappy compression"); DEFINE_bool(write_compressed, false, "Write compressed versions of each file to .comp"); DEFINE_bool(write_uncompressed, false, "Write uncompressed versions of each file to .uncomp"); namespace snappy { #ifdef HAVE_FUNC_MMAP // To test against code that reads beyond its input, this class copies a // string to a newly allocated group of pages, the last of which // is made unreadable via mprotect. Note that we need to allocate the // memory with mmap(), as POSIX allows mprotect() only on memory allocated // with mmap(), and some malloc/posix_memalign implementations expect to // be able to read previously allocated memory while doing heap allocations. class DataEndingAtUnreadablePage { public: explicit DataEndingAtUnreadablePage(const string& s) { const size_t page_size = getpagesize(); const size_t size = s.size(); // Round up space for string to a multiple of page_size. size_t space_for_string = (size + page_size - 1) & ~(page_size - 1); alloc_size_ = space_for_string + page_size; mem_ = mmap(NULL, alloc_size_, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); CHECK_NE(MAP_FAILED, mem_); protected_page_ = reinterpret_cast(mem_) + space_for_string; char* dst = protected_page_ - size; memcpy(dst, s.data(), size); data_ = dst; size_ = size; // Make guard page unreadable. CHECK_EQ(0, mprotect(protected_page_, page_size, PROT_NONE)); } ~DataEndingAtUnreadablePage() { // Undo the mprotect. CHECK_EQ(0, mprotect(protected_page_, getpagesize(), PROT_READ|PROT_WRITE)); CHECK_EQ(0, munmap(mem_, alloc_size_)); } const char* data() const { return data_; } size_t size() const { return size_; } private: size_t alloc_size_; void* mem_; char* protected_page_; const char* data_; size_t size_; }; #else // HAVE_FUNC_MMAP // Fallback for systems without mmap. typedef string DataEndingAtUnreadablePage; #endif enum CompressorType { ZLIB, LZO, LIBLZF, QUICKLZ, FASTLZ, SNAPPY }; const char* names[] = { "ZLIB", "LZO", "LIBLZF", "QUICKLZ", "FASTLZ", "SNAPPY" }; static size_t MinimumRequiredOutputSpace(size_t input_size, CompressorType comp) { switch (comp) { #ifdef ZLIB_VERSION case ZLIB: return ZLib::MinCompressbufSize(input_size); #endif // ZLIB_VERSION #ifdef LZO_VERSION case LZO: return input_size + input_size/64 + 16 + 3; #endif // LZO_VERSION #ifdef LZF_VERSION case LIBLZF: return input_size; #endif // LZF_VERSION #ifdef QLZ_VERSION_MAJOR case QUICKLZ: return input_size + 36000; // 36000 is used for scratch. #endif // QLZ_VERSION_MAJOR #ifdef FASTLZ_VERSION case FASTLZ: return max(static_cast(ceil(input_size * 1.05)), 66); #endif // FASTLZ_VERSION case SNAPPY: return snappy::MaxCompressedLength(input_size); default: LOG(FATAL) << "Unknown compression type number " << comp; } } // Returns true if we successfully compressed, false otherwise. // // If compressed_is_preallocated is set, do not resize the compressed buffer. // This is typically what you want for a benchmark, in order to not spend // time in the memory allocator. If you do set this flag, however, // "compressed" must be preinitialized to at least MinCompressbufSize(comp) // number of bytes, and may contain junk bytes at the end after return. static bool Compress(const char* input, size_t input_size, CompressorType comp, string* compressed, bool compressed_is_preallocated) { if (!compressed_is_preallocated) { compressed->resize(MinimumRequiredOutputSpace(input_size, comp)); } switch (comp) { #ifdef ZLIB_VERSION case ZLIB: { ZLib zlib; uLongf destlen = compressed->size(); int ret = zlib.Compress( reinterpret_cast(string_as_array(compressed)), &destlen, reinterpret_cast(input), input_size); CHECK_EQ(Z_OK, ret); if (!compressed_is_preallocated) { compressed->resize(destlen); } return true; } #endif // ZLIB_VERSION #ifdef LZO_VERSION case LZO: { unsigned char* mem = new unsigned char[LZO1X_1_15_MEM_COMPRESS]; lzo_uint destlen; int ret = lzo1x_1_15_compress( reinterpret_cast(input), input_size, reinterpret_cast(string_as_array(compressed)), &destlen, mem); CHECK_EQ(LZO_E_OK, ret); delete[] mem; if (!compressed_is_preallocated) { compressed->resize(destlen); } break; } #endif // LZO_VERSION #ifdef LZF_VERSION case LIBLZF: { int destlen = lzf_compress(input, input_size, string_as_array(compressed), input_size); if (destlen == 0) { // lzf *can* cause lots of blowup when compressing, so they // recommend to limit outsize to insize, and just not compress // if it's bigger. Ideally, we'd just swap input and output. compressed->assign(input, input_size); destlen = input_size; } if (!compressed_is_preallocated) { compressed->resize(destlen); } break; } #endif // LZF_VERSION #ifdef QLZ_VERSION_MAJOR case QUICKLZ: { qlz_state_compress *state_compress = new qlz_state_compress; int destlen = qlz_compress(input, string_as_array(compressed), input_size, state_compress); delete state_compress; CHECK_NE(0, destlen); if (!compressed_is_preallocated) { compressed->resize(destlen); } break; } #endif // QLZ_VERSION_MAJOR #ifdef FASTLZ_VERSION case FASTLZ: { // Use level 1 compression since we mostly care about speed. int destlen = fastlz_compress_level( 1, input, input_size, string_as_array(compressed)); if (!compressed_is_preallocated) { compressed->resize(destlen); } CHECK_NE(destlen, 0); break; } #endif // FASTLZ_VERSION case SNAPPY: { size_t destlen; snappy::RawCompress(input, input_size, string_as_array(compressed), &destlen); CHECK_LE(destlen, snappy::MaxCompressedLength(input_size)); if (!compressed_is_preallocated) { compressed->resize(destlen); } break; } default: { return false; // the asked-for library wasn't compiled in } } return true; } static bool Uncompress(const string& compressed, CompressorType comp, int size, string* output) { switch (comp) { #ifdef ZLIB_VERSION case ZLIB: { output->resize(size); ZLib zlib; uLongf destlen = output->size(); int ret = zlib.Uncompress( reinterpret_cast(string_as_array(output)), &destlen, reinterpret_cast(compressed.data()), compressed.size()); CHECK_EQ(Z_OK, ret); CHECK_EQ(static_cast(size), destlen); break; } #endif // ZLIB_VERSION #ifdef LZO_VERSION case LZO: { output->resize(size); lzo_uint destlen; int ret = lzo1x_decompress( reinterpret_cast(compressed.data()), compressed.size(), reinterpret_cast(string_as_array(output)), &destlen, NULL); CHECK_EQ(LZO_E_OK, ret); CHECK_EQ(static_cast(size), destlen); break; } #endif // LZO_VERSION #ifdef LZF_VERSION case LIBLZF: { output->resize(size); int destlen = lzf_decompress(compressed.data(), compressed.size(), string_as_array(output), output->size()); if (destlen == 0) { // This error probably means we had decided not to compress, // and thus have stored input in output directly. output->assign(compressed.data(), compressed.size()); destlen = compressed.size(); } CHECK_EQ(destlen, size); break; } #endif // LZF_VERSION #ifdef QLZ_VERSION_MAJOR case QUICKLZ: { output->resize(size); qlz_state_decompress *state_decompress = new qlz_state_decompress; int destlen = qlz_decompress(compressed.data(), string_as_array(output), state_decompress); delete state_decompress; CHECK_EQ(destlen, size); break; } #endif // QLZ_VERSION_MAJOR #ifdef FASTLZ_VERSION case FASTLZ: { output->resize(size); int destlen = fastlz_decompress(compressed.data(), compressed.length(), string_as_array(output), size); CHECK_EQ(destlen, size); break; } #endif // FASTLZ_VERSION case SNAPPY: { snappy::RawUncompress(compressed.data(), compressed.size(), string_as_array(output)); break; } default: { return false; // the asked-for library wasn't compiled in } } return true; } static void Measure(const char* data, size_t length, CompressorType comp, int repeats, int block_size) { // Run tests a few time and pick median running times static const int kRuns = 5; double ctime[kRuns]; double utime[kRuns]; int compressed_size = 0; { // Chop the input into blocks int num_blocks = (length + block_size - 1) / block_size; vector input(num_blocks); vector input_length(num_blocks); vector compressed(num_blocks); vector output(num_blocks); for (int b = 0; b < num_blocks; b++) { int input_start = b * block_size; int input_limit = min((b+1)*block_size, length); input[b] = data+input_start; input_length[b] = input_limit-input_start; // Pre-grow the output buffer so we don't measure string append time. compressed[b].resize(MinimumRequiredOutputSpace(block_size, comp)); } // First, try one trial compression to make sure the code is compiled in if (!Compress(input[0], input_length[0], comp, &compressed[0], true)) { LOG(WARNING) << "Skipping " << names[comp] << ": " << "library not compiled in"; return; } for (int run = 0; run < kRuns; run++) { CycleTimer ctimer, utimer; for (int b = 0; b < num_blocks; b++) { // Pre-grow the output buffer so we don't measure string append time. compressed[b].resize(MinimumRequiredOutputSpace(block_size, comp)); } ctimer.Start(); for (int b = 0; b < num_blocks; b++) for (int i = 0; i < repeats; i++) Compress(input[b], input_length[b], comp, &compressed[b], true); ctimer.Stop(); // Compress once more, with resizing, so we don't leave junk // at the end that will confuse the decompressor. for (int b = 0; b < num_blocks; b++) { Compress(input[b], input_length[b], comp, &compressed[b], false); } for (int b = 0; b < num_blocks; b++) { output[b].resize(input_length[b]); } utimer.Start(); for (int i = 0; i < repeats; i++) for (int b = 0; b < num_blocks; b++) Uncompress(compressed[b], comp, input_length[b], &output[b]); utimer.Stop(); ctime[run] = ctimer.Get(); utime[run] = utimer.Get(); } compressed_size = 0; for (int i = 0; i < compressed.size(); i++) { compressed_size += compressed[i].size(); } } sort(ctime, ctime + kRuns); sort(utime, utime + kRuns); const int med = kRuns/2; float comp_rate = (length / ctime[med]) * repeats / 1048576.0; float uncomp_rate = (length / utime[med]) * repeats / 1048576.0; string x = names[comp]; x += ":"; string urate = (uncomp_rate >= 0) ? StringPrintf("%.1f", uncomp_rate) : string("?"); printf("%-7s [b %dM] bytes %6d -> %6d %4.1f%% " "comp %5.1f MB/s uncomp %5s MB/s\n", x.c_str(), block_size/(1<<20), static_cast(length), static_cast(compressed_size), (compressed_size * 100.0) / max(1, length), comp_rate, urate.c_str()); } static int VerifyString(const string& input) { string compressed; DataEndingAtUnreadablePage i(input); const size_t written = snappy::Compress(i.data(), i.size(), &compressed); CHECK_EQ(written, compressed.size()); CHECK_LE(compressed.size(), snappy::MaxCompressedLength(input.size())); CHECK(snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); string uncompressed; DataEndingAtUnreadablePage c(compressed); CHECK(snappy::Uncompress(c.data(), c.size(), &uncompressed)); CHECK_EQ(uncompressed, input); return uncompressed.size(); } static void VerifyIOVec(const string& input) { string compressed; DataEndingAtUnreadablePage i(input); const size_t written = snappy::Compress(i.data(), i.size(), &compressed); CHECK_EQ(written, compressed.size()); CHECK_LE(compressed.size(), snappy::MaxCompressedLength(input.size())); CHECK(snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); // Try uncompressing into an iovec containing a random number of entries // ranging from 1 to 10. char* buf = new char[input.size()]; ACMRandom rnd(input.size()); int num = rnd.Next() % 10 + 1; if (input.size() < num) { num = input.size(); } struct iovec* iov = new iovec[num]; int used_so_far = 0; for (int i = 0; i < num; ++i) { iov[i].iov_base = buf + used_so_far; if (i == num - 1) { iov[i].iov_len = input.size() - used_so_far; } else { // Randomly choose to insert a 0 byte entry. if (rnd.OneIn(5)) { iov[i].iov_len = 0; } else { iov[i].iov_len = rnd.Uniform(input.size()); } } used_so_far += iov[i].iov_len; } CHECK(snappy::RawUncompressToIOVec( compressed.data(), compressed.size(), iov, num)); CHECK(!memcmp(buf, input.data(), input.size())); delete[] iov; delete[] buf; } // Test that data compressed by a compressor that does not // obey block sizes is uncompressed properly. static void VerifyNonBlockedCompression(const string& input) { if (input.length() > snappy::kBlockSize) { // We cannot test larger blocks than the maximum block size, obviously. return; } string prefix; Varint::Append32(&prefix, input.size()); // Setup compression table snappy::internal::WorkingMemory wmem; int table_size; uint16* table = wmem.GetHashTable(input.size(), &table_size); // Compress entire input in one shot string compressed; compressed += prefix; compressed.resize(prefix.size()+snappy::MaxCompressedLength(input.size())); char* dest = string_as_array(&compressed) + prefix.size(); char* end = snappy::internal::CompressFragment(input.data(), input.size(), dest, table, table_size); compressed.resize(end - compressed.data()); // Uncompress into string string uncomp_str; CHECK(snappy::Uncompress(compressed.data(), compressed.size(), &uncomp_str)); CHECK_EQ(uncomp_str, input); } // Expand the input so that it is at least K times as big as block size static string Expand(const string& input) { static const int K = 3; string data = input; while (data.size() < K * snappy::kBlockSize) { data += input; } return data; } static int Verify(const string& input) { VLOG(1) << "Verifying input of size " << input.size(); // Compress using string based routines const int result = VerifyString(input); VerifyNonBlockedCompression(input); VerifyIOVec(input); if (!input.empty()) { const string expanded = Expand(input); VerifyNonBlockedCompression(expanded); VerifyIOVec(input); } return result; } // This test checks to ensure that snappy doesn't coredump if it gets // corrupted data. static bool IsValidCompressedBuffer(const string& c) { return snappy::IsValidCompressedBuffer(c.data(), c.size()); } static bool Uncompress(const string& c, string* u) { return snappy::Uncompress(c.data(), c.size(), u); } TYPED_TEST(CorruptedTest, VerifyCorrupted) { string source = "making sure we don't crash with corrupted input"; VLOG(1) << source; string dest; TypeParam uncmp; snappy::Compress(source.data(), source.size(), &dest); // Mess around with the data. It's hard to simulate all possible // corruptions; this is just one example ... CHECK_GT(dest.size(), 3); dest[1]--; dest[3]++; // this really ought to fail. CHECK(!IsValidCompressedBuffer(TypeParam(dest))); CHECK(!Uncompress(TypeParam(dest), &uncmp)); // This is testing for a security bug - a buffer that decompresses to 100k // but we lie in the snappy header and only reserve 0 bytes of memory :) source.resize(100000); for (int i = 0; i < source.length(); ++i) { source[i] = 'A'; } snappy::Compress(source.data(), source.size(), &dest); dest[0] = dest[1] = dest[2] = dest[3] = 0; CHECK(!IsValidCompressedBuffer(TypeParam(dest))); CHECK(!Uncompress(TypeParam(dest), &uncmp)); if (sizeof(void *) == 4) { // Another security check; check a crazy big length can't DoS us with an // over-allocation. // Currently this is done only for 32-bit builds. On 64-bit builds, // where 3 GB might be an acceptable allocation size, Uncompress() // attempts to decompress, and sometimes causes the test to run out of // memory. dest[0] = dest[1] = dest[2] = dest[3] = 0xff; // This decodes to a really large size, i.e., about 3 GB. dest[4] = 'k'; CHECK(!IsValidCompressedBuffer(TypeParam(dest))); CHECK(!Uncompress(TypeParam(dest), &uncmp)); } else { LOG(WARNING) << "Crazy decompression lengths not checked on 64-bit build"; } // This decodes to about 2 MB; much smaller, but should still fail. dest[0] = dest[1] = dest[2] = 0xff; dest[3] = 0x00; CHECK(!IsValidCompressedBuffer(TypeParam(dest))); CHECK(!Uncompress(TypeParam(dest), &uncmp)); // try reading stuff in from a bad file. for (int i = 1; i <= 3; ++i) { string data = ReadTestDataFile(StringPrintf("baddata%d.snappy", i).c_str(), 0); string uncmp; // check that we don't return a crazy length size_t ulen; CHECK(!snappy::GetUncompressedLength(data.data(), data.size(), &ulen) || (ulen < (1<<20))); uint32 ulen2; snappy::ByteArraySource source(data.data(), data.size()); CHECK(!snappy::GetUncompressedLength(&source, &ulen2) || (ulen2 < (1<<20))); CHECK(!IsValidCompressedBuffer(TypeParam(data))); CHECK(!Uncompress(TypeParam(data), &uncmp)); } } // Helper routines to construct arbitrary compressed strings. // These mirror the compression code in snappy.cc, but are copied // here so that we can bypass some limitations in the how snappy.cc // invokes these routines. static void AppendLiteral(string* dst, const string& literal) { if (literal.empty()) return; int n = literal.size() - 1; if (n < 60) { // Fit length in tag byte dst->push_back(0 | (n << 2)); } else { // Encode in upcoming bytes char number[4]; int count = 0; while (n > 0) { number[count++] = n & 0xff; n >>= 8; } dst->push_back(0 | ((59+count) << 2)); *dst += string(number, count); } *dst += literal; } static void AppendCopy(string* dst, int offset, int length) { while (length > 0) { // Figure out how much to copy in one shot int to_copy; if (length >= 68) { to_copy = 64; } else if (length > 64) { to_copy = 60; } else { to_copy = length; } length -= to_copy; if ((to_copy >= 4) && (to_copy < 12) && (offset < 2048)) { assert(to_copy-4 < 8); // Must fit in 3 bits dst->push_back(1 | ((to_copy-4) << 2) | ((offset >> 8) << 5)); dst->push_back(offset & 0xff); } else if (offset < 65536) { dst->push_back(2 | ((to_copy-1) << 2)); dst->push_back(offset & 0xff); dst->push_back(offset >> 8); } else { dst->push_back(3 | ((to_copy-1) << 2)); dst->push_back(offset & 0xff); dst->push_back((offset >> 8) & 0xff); dst->push_back((offset >> 16) & 0xff); dst->push_back((offset >> 24) & 0xff); } } } TEST(Snappy, SimpleTests) { Verify(""); Verify("a"); Verify("ab"); Verify("abc"); Verify("aaaaaaa" + string(16, 'b') + string("aaaaa") + "abc"); Verify("aaaaaaa" + string(256, 'b') + string("aaaaa") + "abc"); Verify("aaaaaaa" + string(2047, 'b') + string("aaaaa") + "abc"); Verify("aaaaaaa" + string(65536, 'b') + string("aaaaa") + "abc"); Verify("abcaaaaaaa" + string(65536, 'b') + string("aaaaa") + "abc"); } // Verify max blowup (lots of four-byte copies) TEST(Snappy, MaxBlowup) { string input; for (int i = 0; i < 20000; i++) { ACMRandom rnd(i); uint32 bytes = static_cast(rnd.Next()); input.append(reinterpret_cast(&bytes), sizeof(bytes)); } for (int i = 19999; i >= 0; i--) { ACMRandom rnd(i); uint32 bytes = static_cast(rnd.Next()); input.append(reinterpret_cast(&bytes), sizeof(bytes)); } Verify(input); } TEST(Snappy, RandomData) { ACMRandom rnd(FLAGS_test_random_seed); const int num_ops = 20000; for (int i = 0; i < num_ops; i++) { if ((i % 1000) == 0) { VLOG(0) << "Random op " << i << " of " << num_ops; } string x; int len = rnd.Uniform(4096); if (i < 100) { len = 65536 + rnd.Uniform(65536); } while (x.size() < len) { int run_len = 1; if (rnd.OneIn(10)) { run_len = rnd.Skewed(8); } char c = (i < 100) ? rnd.Uniform(256) : rnd.Skewed(3); while (run_len-- > 0 && x.size() < len) { x += c; } } Verify(x); } } TEST(Snappy, FourByteOffset) { // The new compressor cannot generate four-byte offsets since // it chops up the input into 32KB pieces. So we hand-emit the // copy manually. // The two fragments that make up the input string. string fragment1 = "012345689abcdefghijklmnopqrstuvwxyz"; string fragment2 = "some other string"; // How many times each fragment is emitted. const int n1 = 2; const int n2 = 100000 / fragment2.size(); const int length = n1 * fragment1.size() + n2 * fragment2.size(); string compressed; Varint::Append32(&compressed, length); AppendLiteral(&compressed, fragment1); string src = fragment1; for (int i = 0; i < n2; i++) { AppendLiteral(&compressed, fragment2); src += fragment2; } AppendCopy(&compressed, src.size(), fragment1.size()); src += fragment1; CHECK_EQ(length, src.size()); string uncompressed; CHECK(snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); CHECK(snappy::Uncompress(compressed.data(), compressed.size(), &uncompressed)); CHECK_EQ(uncompressed, src); } TEST(Snappy, IOVecEdgeCases) { // Test some tricky edge cases in the iovec output that are not necessarily // exercised by random tests. // Our output blocks look like this initially (the last iovec is bigger // than depicted): // [ ] [ ] [ ] [ ] [ ] static const int kLengths[] = { 2, 1, 4, 8, 128 }; struct iovec iov[ARRAYSIZE(kLengths)]; for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { iov[i].iov_base = new char[kLengths[i]]; iov[i].iov_len = kLengths[i]; } string compressed; Varint::Append32(&compressed, 22); // A literal whose output crosses three blocks. // [ab] [c] [123 ] [ ] [ ] AppendLiteral(&compressed, "abc123"); // A copy whose output crosses two blocks (source and destination // segments marked). // [ab] [c] [1231] [23 ] [ ] // ^--^ -- AppendCopy(&compressed, 3, 3); // A copy where the input is, at first, in the block before the output: // // [ab] [c] [1231] [231231 ] [ ] // ^--- ^--- // Then during the copy, the pointers move such that the input and // output pointers are in the same block: // // [ab] [c] [1231] [23123123] [ ] // ^- ^- // And then they move again, so that the output pointer is no longer // in the same block as the input pointer: // [ab] [c] [1231] [23123123] [123 ] // ^-- ^-- AppendCopy(&compressed, 6, 9); // Finally, a copy where the input is from several blocks back, // and it also crosses three blocks: // // [ab] [c] [1231] [23123123] [123b ] // ^ ^ // [ab] [c] [1231] [23123123] [123bc ] // ^ ^ // [ab] [c] [1231] [23123123] [123bc12 ] // ^- ^- AppendCopy(&compressed, 17, 4); CHECK(snappy::RawUncompressToIOVec( compressed.data(), compressed.size(), iov, ARRAYSIZE(iov))); CHECK_EQ(0, memcmp(iov[0].iov_base, "ab", 2)); CHECK_EQ(0, memcmp(iov[1].iov_base, "c", 1)); CHECK_EQ(0, memcmp(iov[2].iov_base, "1231", 4)); CHECK_EQ(0, memcmp(iov[3].iov_base, "23123123", 8)); CHECK_EQ(0, memcmp(iov[4].iov_base, "123bc12", 7)); for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { delete[] reinterpret_cast(iov[i].iov_base); } } TEST(Snappy, IOVecLiteralOverflow) { static const int kLengths[] = { 3, 4 }; struct iovec iov[ARRAYSIZE(kLengths)]; for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { iov[i].iov_base = new char[kLengths[i]]; iov[i].iov_len = kLengths[i]; } string compressed; Varint::Append32(&compressed, 8); AppendLiteral(&compressed, "12345678"); CHECK(!snappy::RawUncompressToIOVec( compressed.data(), compressed.size(), iov, ARRAYSIZE(iov))); for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { delete[] reinterpret_cast(iov[i].iov_base); } } TEST(Snappy, IOVecCopyOverflow) { static const int kLengths[] = { 3, 4 }; struct iovec iov[ARRAYSIZE(kLengths)]; for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { iov[i].iov_base = new char[kLengths[i]]; iov[i].iov_len = kLengths[i]; } string compressed; Varint::Append32(&compressed, 8); AppendLiteral(&compressed, "123"); AppendCopy(&compressed, 3, 5); CHECK(!snappy::RawUncompressToIOVec( compressed.data(), compressed.size(), iov, ARRAYSIZE(iov))); for (int i = 0; i < ARRAYSIZE(kLengths); ++i) { delete[] reinterpret_cast(iov[i].iov_base); } } static bool CheckUncompressedLength(const string& compressed, size_t* ulength) { const bool result1 = snappy::GetUncompressedLength(compressed.data(), compressed.size(), ulength); snappy::ByteArraySource source(compressed.data(), compressed.size()); uint32 length; const bool result2 = snappy::GetUncompressedLength(&source, &length); CHECK_EQ(result1, result2); return result1; } TEST(SnappyCorruption, TruncatedVarint) { string compressed, uncompressed; size_t ulength; compressed.push_back('\xf0'); CHECK(!CheckUncompressedLength(compressed, &ulength)); CHECK(!snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); CHECK(!snappy::Uncompress(compressed.data(), compressed.size(), &uncompressed)); } TEST(SnappyCorruption, UnterminatedVarint) { string compressed, uncompressed; size_t ulength; compressed.push_back(128); compressed.push_back(128); compressed.push_back(128); compressed.push_back(128); compressed.push_back(128); compressed.push_back(10); CHECK(!CheckUncompressedLength(compressed, &ulength)); CHECK(!snappy::IsValidCompressedBuffer(compressed.data(), compressed.size())); CHECK(!snappy::Uncompress(compressed.data(), compressed.size(), &uncompressed)); } TEST(Snappy, ReadPastEndOfBuffer) { // Check that we do not read past end of input // Make a compressed string that ends with a single-byte literal string compressed; Varint::Append32(&compressed, 1); AppendLiteral(&compressed, "x"); string uncompressed; DataEndingAtUnreadablePage c(compressed); CHECK(snappy::Uncompress(c.data(), c.size(), &uncompressed)); CHECK_EQ(uncompressed, string("x")); } // Check for an infinite loop caused by a copy with offset==0 TEST(Snappy, ZeroOffsetCopy) { const char* compressed = "\x40\x12\x00\x00"; // \x40 Length (must be > kMaxIncrementCopyOverflow) // \x12\x00\x00 Copy with offset==0, length==5 char uncompressed[100]; EXPECT_FALSE(snappy::RawUncompress(compressed, 4, uncompressed)); } TEST(Snappy, ZeroOffsetCopyValidation) { const char* compressed = "\x05\x12\x00\x00"; // \x05 Length // \x12\x00\x00 Copy with offset==0, length==5 EXPECT_FALSE(snappy::IsValidCompressedBuffer(compressed, 4)); } namespace { int TestFindMatchLength(const char* s1, const char *s2, unsigned length) { return snappy::internal::FindMatchLength(s1, s2, s2 + length); } } // namespace TEST(Snappy, FindMatchLength) { // Exercise all different code paths through the function. // 64-bit version: // Hit s1_limit in 64-bit loop, hit s1_limit in single-character loop. EXPECT_EQ(6, TestFindMatchLength("012345", "012345", 6)); EXPECT_EQ(11, TestFindMatchLength("01234567abc", "01234567abc", 11)); // Hit s1_limit in 64-bit loop, find a non-match in single-character loop. EXPECT_EQ(9, TestFindMatchLength("01234567abc", "01234567axc", 9)); // Same, but edge cases. EXPECT_EQ(11, TestFindMatchLength("01234567abc!", "01234567abc!", 11)); EXPECT_EQ(11, TestFindMatchLength("01234567abc!", "01234567abc?", 11)); // Find non-match at once in first loop. EXPECT_EQ(0, TestFindMatchLength("01234567xxxxxxxx", "?1234567xxxxxxxx", 16)); EXPECT_EQ(1, TestFindMatchLength("01234567xxxxxxxx", "0?234567xxxxxxxx", 16)); EXPECT_EQ(4, TestFindMatchLength("01234567xxxxxxxx", "01237654xxxxxxxx", 16)); EXPECT_EQ(7, TestFindMatchLength("01234567xxxxxxxx", "0123456?xxxxxxxx", 16)); // Find non-match in first loop after one block. EXPECT_EQ(8, TestFindMatchLength("abcdefgh01234567xxxxxxxx", "abcdefgh?1234567xxxxxxxx", 24)); EXPECT_EQ(9, TestFindMatchLength("abcdefgh01234567xxxxxxxx", "abcdefgh0?234567xxxxxxxx", 24)); EXPECT_EQ(12, TestFindMatchLength("abcdefgh01234567xxxxxxxx", "abcdefgh01237654xxxxxxxx", 24)); EXPECT_EQ(15, TestFindMatchLength("abcdefgh01234567xxxxxxxx", "abcdefgh0123456?xxxxxxxx", 24)); // 32-bit version: // Short matches. EXPECT_EQ(0, TestFindMatchLength("01234567", "?1234567", 8)); EXPECT_EQ(1, TestFindMatchLength("01234567", "0?234567", 8)); EXPECT_EQ(2, TestFindMatchLength("01234567", "01?34567", 8)); EXPECT_EQ(3, TestFindMatchLength("01234567", "012?4567", 8)); EXPECT_EQ(4, TestFindMatchLength("01234567", "0123?567", 8)); EXPECT_EQ(5, TestFindMatchLength("01234567", "01234?67", 8)); EXPECT_EQ(6, TestFindMatchLength("01234567", "012345?7", 8)); EXPECT_EQ(7, TestFindMatchLength("01234567", "0123456?", 8)); EXPECT_EQ(7, TestFindMatchLength("01234567", "0123456?", 7)); EXPECT_EQ(7, TestFindMatchLength("01234567!", "0123456??", 7)); // Hit s1_limit in 32-bit loop, hit s1_limit in single-character loop. EXPECT_EQ(10, TestFindMatchLength("xxxxxxabcd", "xxxxxxabcd", 10)); EXPECT_EQ(10, TestFindMatchLength("xxxxxxabcd?", "xxxxxxabcd?", 10)); EXPECT_EQ(13, TestFindMatchLength("xxxxxxabcdef", "xxxxxxabcdef", 13)); // Same, but edge cases. EXPECT_EQ(12, TestFindMatchLength("xxxxxx0123abc!", "xxxxxx0123abc!", 12)); EXPECT_EQ(12, TestFindMatchLength("xxxxxx0123abc!", "xxxxxx0123abc?", 12)); // Hit s1_limit in 32-bit loop, find a non-match in single-character loop. EXPECT_EQ(11, TestFindMatchLength("xxxxxx0123abc", "xxxxxx0123axc", 13)); // Find non-match at once in first loop. EXPECT_EQ(6, TestFindMatchLength("xxxxxx0123xxxxxxxx", "xxxxxx?123xxxxxxxx", 18)); EXPECT_EQ(7, TestFindMatchLength("xxxxxx0123xxxxxxxx", "xxxxxx0?23xxxxxxxx", 18)); EXPECT_EQ(8, TestFindMatchLength("xxxxxx0123xxxxxxxx", "xxxxxx0132xxxxxxxx", 18)); EXPECT_EQ(9, TestFindMatchLength("xxxxxx0123xxxxxxxx", "xxxxxx012?xxxxxxxx", 18)); // Same, but edge cases. EXPECT_EQ(6, TestFindMatchLength("xxxxxx0123", "xxxxxx?123", 10)); EXPECT_EQ(7, TestFindMatchLength("xxxxxx0123", "xxxxxx0?23", 10)); EXPECT_EQ(8, TestFindMatchLength("xxxxxx0123", "xxxxxx0132", 10)); EXPECT_EQ(9, TestFindMatchLength("xxxxxx0123", "xxxxxx012?", 10)); // Find non-match in first loop after one block. EXPECT_EQ(10, TestFindMatchLength("xxxxxxabcd0123xx", "xxxxxxabcd?123xx", 16)); EXPECT_EQ(11, TestFindMatchLength("xxxxxxabcd0123xx", "xxxxxxabcd0?23xx", 16)); EXPECT_EQ(12, TestFindMatchLength("xxxxxxabcd0123xx", "xxxxxxabcd0132xx", 16)); EXPECT_EQ(13, TestFindMatchLength("xxxxxxabcd0123xx", "xxxxxxabcd012?xx", 16)); // Same, but edge cases. EXPECT_EQ(10, TestFindMatchLength("xxxxxxabcd0123", "xxxxxxabcd?123", 14)); EXPECT_EQ(11, TestFindMatchLength("xxxxxxabcd0123", "xxxxxxabcd0?23", 14)); EXPECT_EQ(12, TestFindMatchLength("xxxxxxabcd0123", "xxxxxxabcd0132", 14)); EXPECT_EQ(13, TestFindMatchLength("xxxxxxabcd0123", "xxxxxxabcd012?", 14)); } TEST(Snappy, FindMatchLengthRandom) { const int kNumTrials = 10000; const int kTypicalLength = 10; ACMRandom rnd(FLAGS_test_random_seed); for (int i = 0; i < kNumTrials; i++) { string s, t; char a = rnd.Rand8(); char b = rnd.Rand8(); while (!rnd.OneIn(kTypicalLength)) { s.push_back(rnd.OneIn(2) ? a : b); t.push_back(rnd.OneIn(2) ? a : b); } DataEndingAtUnreadablePage u(s); DataEndingAtUnreadablePage v(t); int matched = snappy::internal::FindMatchLength( u.data(), v.data(), v.data() + t.size()); if (matched == t.size()) { EXPECT_EQ(s, t); } else { EXPECT_NE(s[matched], t[matched]); for (int j = 0; j < matched; j++) { EXPECT_EQ(s[j], t[j]); } } } } static void CompressFile(const char* fname) { string fullinput; file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); string compressed; Compress(fullinput.data(), fullinput.size(), SNAPPY, &compressed, false); file::SetContents(string(fname).append(".comp"), compressed, file::Defaults()) .CheckSuccess(); } static void UncompressFile(const char* fname) { string fullinput; file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); size_t uncompLength; CHECK(CheckUncompressedLength(fullinput, &uncompLength)); string uncompressed; uncompressed.resize(uncompLength); CHECK(snappy::Uncompress(fullinput.data(), fullinput.size(), &uncompressed)); file::SetContents(string(fname).append(".uncomp"), uncompressed, file::Defaults()).CheckSuccess(); } static void MeasureFile(const char* fname) { string fullinput; file::GetContents(fname, &fullinput, file::Defaults()).CheckSuccess(); printf("%-40s :\n", fname); int start_len = (FLAGS_start_len < 0) ? fullinput.size() : FLAGS_start_len; int end_len = fullinput.size(); if (FLAGS_end_len >= 0) { end_len = min(fullinput.size(), FLAGS_end_len); } for (int len = start_len; len <= end_len; len++) { const char* const input = fullinput.data(); int repeats = (FLAGS_bytes + len) / (len + 1); if (FLAGS_zlib) Measure(input, len, ZLIB, repeats, 1024<<10); if (FLAGS_lzo) Measure(input, len, LZO, repeats, 1024<<10); if (FLAGS_liblzf) Measure(input, len, LIBLZF, repeats, 1024<<10); if (FLAGS_quicklz) Measure(input, len, QUICKLZ, repeats, 1024<<10); if (FLAGS_fastlz) Measure(input, len, FASTLZ, repeats, 1024<<10); if (FLAGS_snappy) Measure(input, len, SNAPPY, repeats, 4096<<10); // For block-size based measurements if (0 && FLAGS_snappy) { Measure(input, len, SNAPPY, repeats, 8<<10); Measure(input, len, SNAPPY, repeats, 16<<10); Measure(input, len, SNAPPY, repeats, 32<<10); Measure(input, len, SNAPPY, repeats, 64<<10); Measure(input, len, SNAPPY, repeats, 256<<10); Measure(input, len, SNAPPY, repeats, 1024<<10); } } } static struct { const char* label; const char* filename; size_t size_limit; } files[] = { { "html", "html", 0 }, { "urls", "urls.10K", 0 }, { "jpg", "fireworks.jpeg", 0 }, { "jpg_200", "fireworks.jpeg", 200 }, { "pdf", "paper-100k.pdf", 0 }, { "html4", "html_x_4", 0 }, { "txt1", "alice29.txt", 0 }, { "txt2", "asyoulik.txt", 0 }, { "txt3", "lcet10.txt", 0 }, { "txt4", "plrabn12.txt", 0 }, { "pb", "geo.protodata", 0 }, { "gaviota", "kppkn.gtb", 0 }, }; static void BM_UFlat(int iters, int arg) { StopBenchmarkTiming(); // Pick file to process based on "arg" CHECK_GE(arg, 0); CHECK_LT(arg, ARRAYSIZE(files)); string contents = ReadTestDataFile(files[arg].filename, files[arg].size_limit); string zcontents; snappy::Compress(contents.data(), contents.size(), &zcontents); char* dst = new char[contents.size()]; SetBenchmarkBytesProcessed(static_cast(iters) * static_cast(contents.size())); SetBenchmarkLabel(files[arg].label); StartBenchmarkTiming(); while (iters-- > 0) { CHECK(snappy::RawUncompress(zcontents.data(), zcontents.size(), dst)); } StopBenchmarkTiming(); delete[] dst; } BENCHMARK(BM_UFlat)->DenseRange(0, ARRAYSIZE(files) - 1); static void BM_UValidate(int iters, int arg) { StopBenchmarkTiming(); // Pick file to process based on "arg" CHECK_GE(arg, 0); CHECK_LT(arg, ARRAYSIZE(files)); string contents = ReadTestDataFile(files[arg].filename, files[arg].size_limit); string zcontents; snappy::Compress(contents.data(), contents.size(), &zcontents); SetBenchmarkBytesProcessed(static_cast(iters) * static_cast(contents.size())); SetBenchmarkLabel(files[arg].label); StartBenchmarkTiming(); while (iters-- > 0) { CHECK(snappy::IsValidCompressedBuffer(zcontents.data(), zcontents.size())); } StopBenchmarkTiming(); } BENCHMARK(BM_UValidate)->DenseRange(0, 4); static void BM_UIOVec(int iters, int arg) { StopBenchmarkTiming(); // Pick file to process based on "arg" CHECK_GE(arg, 0); CHECK_LT(arg, ARRAYSIZE(files)); string contents = ReadTestDataFile(files[arg].filename, files[arg].size_limit); string zcontents; snappy::Compress(contents.data(), contents.size(), &zcontents); // Uncompress into an iovec containing ten entries. const int kNumEntries = 10; struct iovec iov[kNumEntries]; char *dst = new char[contents.size()]; int used_so_far = 0; for (int i = 0; i < kNumEntries; ++i) { iov[i].iov_base = dst + used_so_far; if (used_so_far == contents.size()) { iov[i].iov_len = 0; continue; } if (i == kNumEntries - 1) { iov[i].iov_len = contents.size() - used_so_far; } else { iov[i].iov_len = contents.size() / kNumEntries; } used_so_far += iov[i].iov_len; } SetBenchmarkBytesProcessed(static_cast(iters) * static_cast(contents.size())); SetBenchmarkLabel(files[arg].label); StartBenchmarkTiming(); while (iters-- > 0) { CHECK(snappy::RawUncompressToIOVec(zcontents.data(), zcontents.size(), iov, kNumEntries)); } StopBenchmarkTiming(); delete[] dst; } BENCHMARK(BM_UIOVec)->DenseRange(0, 4); static void BM_ZFlat(int iters, int arg) { StopBenchmarkTiming(); // Pick file to process based on "arg" CHECK_GE(arg, 0); CHECK_LT(arg, ARRAYSIZE(files)); string contents = ReadTestDataFile(files[arg].filename, files[arg].size_limit); char* dst = new char[snappy::MaxCompressedLength(contents.size())]; SetBenchmarkBytesProcessed(static_cast(iters) * static_cast(contents.size())); StartBenchmarkTiming(); size_t zsize = 0; while (iters-- > 0) { snappy::RawCompress(contents.data(), contents.size(), dst, &zsize); } StopBenchmarkTiming(); const double compression_ratio = static_cast(zsize) / std::max(1, contents.size()); SetBenchmarkLabel(StringPrintf("%s (%.2f %%)", files[arg].label, 100.0 * compression_ratio)); VLOG(0) << StringPrintf("compression for %s: %zd -> %zd bytes", files[arg].label, contents.size(), zsize); delete[] dst; } BENCHMARK(BM_ZFlat)->DenseRange(0, ARRAYSIZE(files) - 1); } // namespace snappy int main(int argc, char** argv) { InitGoogle(argv[0], &argc, &argv, true); RunSpecifiedBenchmarks(); if (argc >= 2) { for (int arg = 1; arg < argc; arg++) { if (FLAGS_write_compressed) { CompressFile(argv[arg]); } else if (FLAGS_write_uncompressed) { UncompressFile(argv[arg]); } else { MeasureFile(argv[arg]); } } return 0; } return RUN_ALL_TESTS(); } tmpNnpnZF/thirdparty/snappy/snappy-stubs-internal.cc0000664000175000017500000000344312543167424022265 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include "snappy-stubs-internal.h" namespace snappy { void Varint::Append32(string* s, uint32 value) { char buf[Varint::kMax32]; const char* p = Varint::Encode32(buf, value); s->append(buf, p - buf); } } // namespace snappy tmpNnpnZF/thirdparty/snappy/snappy-sinksource.cc0000664000175000017500000000447712543167424021510 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "snappy-sinksource.h" namespace snappy { Source::~Source() { } Sink::~Sink() { } char* Sink::GetAppendBuffer(size_t length, char* scratch) { return scratch; } ByteArraySource::~ByteArraySource() { } size_t ByteArraySource::Available() const { return left_; } const char* ByteArraySource::Peek(size_t* len) { *len = left_; return ptr_; } void ByteArraySource::Skip(size_t n) { left_ -= n; ptr_ += n; } UncheckedByteArraySink::~UncheckedByteArraySink() { } void UncheckedByteArraySink::Append(const char* data, size_t n) { // Do no copying if the caller filled in the result of GetAppendBuffer() if (data != dest_) { memcpy(dest_, data, n); } dest_ += n; } char* UncheckedByteArraySink::GetAppendBuffer(size_t len, char* scratch) { return dest_; } } tmpNnpnZF/thirdparty/snappy/framing_format.txt0000664000175000017500000001165712543167424021236 0ustar chrischrisSnappy framing format description Last revised: 2013-10-25 This format decribes a framing format for Snappy, allowing compressing to files or streams that can then more easily be decompressed without having to hold the entire stream in memory. It also provides data checksums to help verify integrity. It does not provide metadata checksums, so it does not protect against e.g. all forms of truncations. Implementation of the framing format is optional for Snappy compressors and decompressor; it is not part of the Snappy core specification. 1. General structure The file consists solely of chunks, lying back-to-back with no padding in between. Each chunk consists first a single byte of chunk identifier, then a three-byte little-endian length of the chunk in bytes (from 0 to 16777215, inclusive), and then the data if any. The four bytes of chunk header is not counted in the data length. The different chunk types are listed below. The first chunk must always be the stream identifier chunk (see section 4.1, below). The stream ends when the file ends -- there is no explicit end-of-file marker. 2. File type identification The following identifiers for this format are recommended where appropriate. However, note that none have been registered officially, so this is only to be taken as a guideline. We use "Snappy framed" to distinguish between this format and raw Snappy data. File extension: .sz MIME type: application/x-snappy-framed HTTP Content-Encoding: x-snappy-framed 3. Checksum format Some chunks have data protected by a checksum (the ones that do will say so explicitly). The checksums are always masked CRC-32Cs. A description of CRC-32C can be found in RFC 3720, section 12.1, with examples in section B.4. Checksums are not stored directly, but masked, as checksumming data and then its own checksum can be problematic. The masking is the same as used in Apache Hadoop: Rotate the checksum by 15 bits, then add the constant 0xa282ead8 (using wraparound as normal for unsigned integers). This is equivalent to the following C code: uint32_t mask_checksum(uint32_t x) { return ((x >> 15) | (x << 17)) + 0xa282ead8; } Note that the masking is reversible. The checksum is always stored as a four bytes long integer, in little-endian. 4. Chunk types The currently supported chunk types are described below. The list may be extended in the future. 4.1. Stream identifier (chunk type 0xff) The stream identifier is always the first element in the stream. It is exactly six bytes long and contains "sNaPpY" in ASCII. This means that a valid Snappy framed stream always starts with the bytes 0xff 0x06 0x00 0x00 0x73 0x4e 0x61 0x50 0x70 0x59 The stream identifier chunk can come multiple times in the stream besides the first; if such a chunk shows up, it should simply be ignored, assuming it has the right length and contents. This allows for easy concatenation of compressed files without the need for re-framing. 4.2. Compressed data (chunk type 0x00) Compressed data chunks contain a normal Snappy compressed bitstream; see the compressed format specification. The compressed data is preceded by the CRC-32C (see section 3) of the _uncompressed_ data. Note that the data portion of the chunk, i.e., the compressed contents, can be at most 16777211 bytes (2^24 - 1, minus the checksum). However, we place an additional restriction that the uncompressed data in a chunk must be no longer than 65536 bytes. This allows consumers to easily use small fixed-size buffers. 4.3. Uncompressed data (chunk type 0x01) Uncompressed data chunks allow a compressor to send uncompressed, raw data; this is useful if, for instance, uncompressible or near-incompressible data is detected, and faster decompression is desired. As in the compressed chunks, the data is preceded by its own masked CRC-32C (see section 3). An uncompressed data chunk, like compressed data chunks, should contain no more than 65536 data bytes, so the maximum legal chunk length with the checksum is 65540. 4.4. Padding (chunk type 0xfe) Padding chunks allow a compressor to increase the size of the data stream so that it complies with external demands, e.g. that the total number of bytes is a multiple of some value. All bytes of the padding chunk, except the chunk byte itself and the length, should be zero, but decompressors must not try to interpret or verify the padding data in any way. 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f) These are reserved for future expansion. A decoder that sees such a chunk should immediately return an error, as it must assume it cannot decode the stream correctly. Future versions of this specification may define meanings for these chunks. 4.6. Reserved skippable chunks (chunk types 0x80-0xfd) These are also reserved for future expansion, but unlike the chunks described in 4.5, a decoder seeing these must skip them and continue decoding. Future versions of this specification may define meanings for these chunks. tmpNnpnZF/thirdparty/snappy/snappy.cc0000664000175000017500000013211312543167424017312 0ustar chrischris// Copyright 2005 Google Inc. All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "snappy.h" #include "snappy-internal.h" #include "snappy-sinksource.h" #include #include #include #include namespace snappy { // Any hash function will produce a valid compressed bitstream, but a good // hash function reduces the number of collisions and thus yields better // compression for compressible input, and more speed for incompressible // input. Of course, it doesn't hurt if the hash function is reasonably fast // either, as it gets called a lot. static inline uint32 HashBytes(uint32 bytes, int shift) { uint32 kMul = 0x1e35a7bd; return (bytes * kMul) >> shift; } static inline uint32 Hash(const char* p, int shift) { return HashBytes(UNALIGNED_LOAD32(p), shift); } size_t MaxCompressedLength(size_t source_len) { // Compressed data can be defined as: // compressed := item* literal* // item := literal* copy // // The trailing literal sequence has a space blowup of at most 62/60 // since a literal of length 60 needs one tag byte + one extra byte // for length information. // // Item blowup is trickier to measure. Suppose the "copy" op copies // 4 bytes of data. Because of a special check in the encoding code, // we produce a 4-byte copy only if the offset is < 65536. Therefore // the copy op takes 3 bytes to encode, and this type of item leads // to at most the 62/60 blowup for representing literals. // // Suppose the "copy" op copies 5 bytes of data. If the offset is big // enough, it will take 5 bytes to encode the copy op. Therefore the // worst case here is a one-byte literal followed by a five-byte copy. // I.e., 6 bytes of input turn into 7 bytes of "compressed" data. // // This last factor dominates the blowup, so the final estimate is: return 32 + source_len + source_len/6; } enum { LITERAL = 0, COPY_1_BYTE_OFFSET = 1, // 3 bit length + 3 bits of offset in opcode COPY_2_BYTE_OFFSET = 2, COPY_4_BYTE_OFFSET = 3 }; static const int kMaximumTagLength = 5; // COPY_4_BYTE_OFFSET plus the actual offset. // Copy "len" bytes from "src" to "op", one byte at a time. Used for // handling COPY operations where the input and output regions may // overlap. For example, suppose: // src == "ab" // op == src + 2 // len == 20 // After IncrementalCopy(src, op, len), the result will have // eleven copies of "ab" // ababababababababababab // Note that this does not match the semantics of either memcpy() // or memmove(). static inline void IncrementalCopy(const char* src, char* op, ssize_t len) { assert(len > 0); do { *op++ = *src++; } while (--len > 0); } // Equivalent to IncrementalCopy except that it can write up to ten extra // bytes after the end of the copy, and that it is faster. // // The main part of this loop is a simple copy of eight bytes at a time until // we've copied (at least) the requested amount of bytes. However, if op and // src are less than eight bytes apart (indicating a repeating pattern of // length < 8), we first need to expand the pattern in order to get the correct // results. For instance, if the buffer looks like this, with the eight-byte // and patterns marked as intervals: // // abxxxxxxxxxxxx // [------] src // [------] op // // a single eight-byte copy from to will repeat the pattern once, // after which we can move two bytes without moving : // // ababxxxxxxxxxx // [------] src // [------] op // // and repeat the exercise until the two no longer overlap. // // This allows us to do very well in the special case of one single byte // repeated many times, without taking a big hit for more general cases. // // The worst case of extra writing past the end of the match occurs when // op - src == 1 and len == 1; the last copy will read from byte positions // [0..7] and write to [4..11], whereas it was only supposed to write to // position 1. Thus, ten excess bytes. namespace { const int kMaxIncrementCopyOverflow = 10; inline void IncrementalCopyFastPath(const char* src, char* op, ssize_t len) { while (op - src < 8) { UnalignedCopy64(src, op); len -= op - src; op += op - src; } while (len > 0) { UnalignedCopy64(src, op); src += 8; op += 8; len -= 8; } } } // namespace static inline char* EmitLiteral(char* op, const char* literal, int len, bool allow_fast_path) { int n = len - 1; // Zero-length literals are disallowed if (n < 60) { // Fits in tag byte *op++ = LITERAL | (n << 2); // The vast majority of copies are below 16 bytes, for which a // call to memcpy is overkill. This fast path can sometimes // copy up to 15 bytes too much, but that is okay in the // main loop, since we have a bit to go on for both sides: // // - The input will always have kInputMarginBytes = 15 extra // available bytes, as long as we're in the main loop, and // if not, allow_fast_path = false. // - The output will always have 32 spare bytes (see // MaxCompressedLength). if (allow_fast_path && len <= 16) { UnalignedCopy64(literal, op); UnalignedCopy64(literal + 8, op + 8); return op + len; } } else { // Encode in upcoming bytes char* base = op; int count = 0; op++; while (n > 0) { *op++ = n & 0xff; n >>= 8; count++; } assert(count >= 1); assert(count <= 4); *base = LITERAL | ((59+count) << 2); } memcpy(op, literal, len); return op + len; } static inline char* EmitCopyLessThan64(char* op, size_t offset, int len) { assert(len <= 64); assert(len >= 4); assert(offset < 65536); if ((len < 12) && (offset < 2048)) { size_t len_minus_4 = len - 4; assert(len_minus_4 < 8); // Must fit in 3 bits *op++ = COPY_1_BYTE_OFFSET + ((len_minus_4) << 2) + ((offset >> 8) << 5); *op++ = offset & 0xff; } else { *op++ = COPY_2_BYTE_OFFSET + ((len-1) << 2); LittleEndian::Store16(op, offset); op += 2; } return op; } static inline char* EmitCopy(char* op, size_t offset, int len) { // Emit 64 byte copies but make sure to keep at least four bytes reserved while (len >= 68) { op = EmitCopyLessThan64(op, offset, 64); len -= 64; } // Emit an extra 60 byte copy if have too much data to fit in one copy if (len > 64) { op = EmitCopyLessThan64(op, offset, 60); len -= 60; } // Emit remainder op = EmitCopyLessThan64(op, offset, len); return op; } bool GetUncompressedLength(const char* start, size_t n, size_t* result) { uint32 v = 0; const char* limit = start + n; if (Varint::Parse32WithLimit(start, limit, &v) != NULL) { *result = v; return true; } else { return false; } } namespace internal { uint16* WorkingMemory::GetHashTable(size_t input_size, int* table_size) { // Use smaller hash table when input.size() is smaller, since we // fill the table, incurring O(hash table size) overhead for // compression, and if the input is short, we won't need that // many hash table entries anyway. assert(kMaxHashTableSize >= 256); size_t htsize = 256; while (htsize < kMaxHashTableSize && htsize < input_size) { htsize <<= 1; } uint16* table; if (htsize <= ARRAYSIZE(small_table_)) { table = small_table_; } else { if (large_table_ == NULL) { large_table_ = new uint16[kMaxHashTableSize]; } table = large_table_; } *table_size = htsize; memset(table, 0, htsize * sizeof(*table)); return table; } } // end namespace internal // For 0 <= offset <= 4, GetUint32AtOffset(GetEightBytesAt(p), offset) will // equal UNALIGNED_LOAD32(p + offset). Motivation: On x86-64 hardware we have // empirically found that overlapping loads such as // UNALIGNED_LOAD32(p) ... UNALIGNED_LOAD32(p+1) ... UNALIGNED_LOAD32(p+2) // are slower than UNALIGNED_LOAD64(p) followed by shifts and casts to uint32. // // We have different versions for 64- and 32-bit; ideally we would avoid the // two functions and just inline the UNALIGNED_LOAD64 call into // GetUint32AtOffset, but GCC (at least not as of 4.6) is seemingly not clever // enough to avoid loading the value multiple times then. For 64-bit, the load // is done when GetEightBytesAt() is called, whereas for 32-bit, the load is // done at GetUint32AtOffset() time. #ifdef ARCH_K8 typedef uint64 EightBytesReference; static inline EightBytesReference GetEightBytesAt(const char* ptr) { return UNALIGNED_LOAD64(ptr); } static inline uint32 GetUint32AtOffset(uint64 v, int offset) { assert(offset >= 0); assert(offset <= 4); return v >> (LittleEndian::IsLittleEndian() ? 8 * offset : 32 - 8 * offset); } #else typedef const char* EightBytesReference; static inline EightBytesReference GetEightBytesAt(const char* ptr) { return ptr; } static inline uint32 GetUint32AtOffset(const char* v, int offset) { assert(offset >= 0); assert(offset <= 4); return UNALIGNED_LOAD32(v + offset); } #endif // Flat array compression that does not emit the "uncompressed length" // prefix. Compresses "input" string to the "*op" buffer. // // REQUIRES: "input" is at most "kBlockSize" bytes long. // REQUIRES: "op" points to an array of memory that is at least // "MaxCompressedLength(input.size())" in size. // REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. // REQUIRES: "table_size" is a power of two // // Returns an "end" pointer into "op" buffer. // "end - op" is the compressed size of "input". namespace internal { char* CompressFragment(const char* input, size_t input_size, char* op, uint16* table, const int table_size) { // "ip" is the input pointer, and "op" is the output pointer. const char* ip = input; assert(input_size <= kBlockSize); assert((table_size & (table_size - 1)) == 0); // table must be power of two const int shift = 32 - Bits::Log2Floor(table_size); assert(static_cast(kuint32max >> shift) == table_size - 1); const char* ip_end = input + input_size; const char* base_ip = ip; // Bytes in [next_emit, ip) will be emitted as literal bytes. Or // [next_emit, ip_end) after the main loop. const char* next_emit = ip; const size_t kInputMarginBytes = 15; if (PREDICT_TRUE(input_size >= kInputMarginBytes)) { const char* ip_limit = input + input_size - kInputMarginBytes; for (uint32 next_hash = Hash(++ip, shift); ; ) { assert(next_emit < ip); // The body of this loop calls EmitLiteral once and then EmitCopy one or // more times. (The exception is that when we're close to exhausting // the input we goto emit_remainder.) // // In the first iteration of this loop we're just starting, so // there's nothing to copy, so calling EmitLiteral once is // necessary. And we only start a new iteration when the // current iteration has determined that a call to EmitLiteral will // precede the next call to EmitCopy (if any). // // Step 1: Scan forward in the input looking for a 4-byte-long match. // If we get close to exhausting the input then goto emit_remainder. // // Heuristic match skipping: If 32 bytes are scanned with no matches // found, start looking only at every other byte. If 32 more bytes are // scanned, look at every third byte, etc.. When a match is found, // immediately go back to looking at every byte. This is a small loss // (~5% performance, ~0.1% density) for compressible data due to more // bookkeeping, but for non-compressible data (such as JPEG) it's a huge // win since the compressor quickly "realizes" the data is incompressible // and doesn't bother looking for matches everywhere. // // The "skip" variable keeps track of how many bytes there are since the // last match; dividing it by 32 (ie. right-shifting by five) gives the // number of bytes to move ahead for each iteration. uint32 skip = 32; const char* next_ip = ip; const char* candidate; do { ip = next_ip; uint32 hash = next_hash; assert(hash == Hash(ip, shift)); uint32 bytes_between_hash_lookups = skip++ >> 5; next_ip = ip + bytes_between_hash_lookups; if (PREDICT_FALSE(next_ip > ip_limit)) { goto emit_remainder; } next_hash = Hash(next_ip, shift); candidate = base_ip + table[hash]; assert(candidate >= base_ip); assert(candidate < ip); table[hash] = ip - base_ip; } while (PREDICT_TRUE(UNALIGNED_LOAD32(ip) != UNALIGNED_LOAD32(candidate))); // Step 2: A 4-byte match has been found. We'll later see if more // than 4 bytes match. But, prior to the match, input // bytes [next_emit, ip) are unmatched. Emit them as "literal bytes." assert(next_emit + 16 <= ip_end); op = EmitLiteral(op, next_emit, ip - next_emit, true); // Step 3: Call EmitCopy, and then see if another EmitCopy could // be our next move. Repeat until we find no match for the // input immediately after what was consumed by the last EmitCopy call. // // If we exit this loop normally then we need to call EmitLiteral next, // though we don't yet know how big the literal will be. We handle that // by proceeding to the next iteration of the main loop. We also can exit // this loop via goto if we get close to exhausting the input. EightBytesReference input_bytes; uint32 candidate_bytes = 0; do { // We have a 4-byte match at ip, and no need to emit any // "literal bytes" prior to ip. const char* base = ip; int matched = 4 + FindMatchLength(candidate + 4, ip + 4, ip_end); ip += matched; size_t offset = base - candidate; assert(0 == memcmp(base, candidate, matched)); op = EmitCopy(op, offset, matched); // We could immediately start working at ip now, but to improve // compression we first update table[Hash(ip - 1, ...)]. const char* insert_tail = ip - 1; next_emit = ip; if (PREDICT_FALSE(ip >= ip_limit)) { goto emit_remainder; } input_bytes = GetEightBytesAt(insert_tail); uint32 prev_hash = HashBytes(GetUint32AtOffset(input_bytes, 0), shift); table[prev_hash] = ip - base_ip - 1; uint32 cur_hash = HashBytes(GetUint32AtOffset(input_bytes, 1), shift); candidate = base_ip + table[cur_hash]; candidate_bytes = UNALIGNED_LOAD32(candidate); table[cur_hash] = ip - base_ip; } while (GetUint32AtOffset(input_bytes, 1) == candidate_bytes); next_hash = HashBytes(GetUint32AtOffset(input_bytes, 2), shift); ++ip; } } emit_remainder: // Emit the remaining bytes as a literal if (next_emit < ip_end) { op = EmitLiteral(op, next_emit, ip_end - next_emit, false); } return op; } } // end namespace internal // Signature of output types needed by decompression code. // The decompression code is templatized on a type that obeys this // signature so that we do not pay virtual function call overhead in // the middle of a tight decompression loop. // // class DecompressionWriter { // public: // // Called before decompression // void SetExpectedLength(size_t length); // // // Called after decompression // bool CheckLength() const; // // // Called repeatedly during decompression // bool Append(const char* ip, size_t length); // bool AppendFromSelf(uint32 offset, size_t length); // // // The rules for how TryFastAppend differs from Append are somewhat // // convoluted: // // // // - TryFastAppend is allowed to decline (return false) at any // // time, for any reason -- just "return false" would be // // a perfectly legal implementation of TryFastAppend. // // The intention is for TryFastAppend to allow a fast path // // in the common case of a small append. // // - TryFastAppend is allowed to read up to bytes // // from the input buffer, whereas Append is allowed to read // // . However, if it returns true, it must leave // // at least five (kMaximumTagLength) bytes in the input buffer // // afterwards, so that there is always enough space to read the // // next tag without checking for a refill. // // - TryFastAppend must always return decline (return false) // // if is 61 or more, as in this case the literal length is not // // decoded fully. In practice, this should not be a big problem, // // as it is unlikely that one would implement a fast path accepting // // this much data. // // // bool TryFastAppend(const char* ip, size_t available, size_t length); // }; // ----------------------------------------------------------------------- // Lookup table for decompression code. Generated by ComputeTable() below. // ----------------------------------------------------------------------- // Mapping from i in range [0,4] to a mask to extract the bottom 8*i bits static const uint32 wordmask[] = { 0u, 0xffu, 0xffffu, 0xffffffu, 0xffffffffu }; // Data stored per entry in lookup table: // Range Bits-used Description // ------------------------------------ // 1..64 0..7 Literal/copy length encoded in opcode byte // 0..7 8..10 Copy offset encoded in opcode byte / 256 // 0..4 11..13 Extra bytes after opcode // // We use eight bits for the length even though 7 would have sufficed // because of efficiency reasons: // (1) Extracting a byte is faster than a bit-field // (2) It properly aligns copy offset so we do not need a <<8 static const uint16 char_table[256] = { 0x0001, 0x0804, 0x1001, 0x2001, 0x0002, 0x0805, 0x1002, 0x2002, 0x0003, 0x0806, 0x1003, 0x2003, 0x0004, 0x0807, 0x1004, 0x2004, 0x0005, 0x0808, 0x1005, 0x2005, 0x0006, 0x0809, 0x1006, 0x2006, 0x0007, 0x080a, 0x1007, 0x2007, 0x0008, 0x080b, 0x1008, 0x2008, 0x0009, 0x0904, 0x1009, 0x2009, 0x000a, 0x0905, 0x100a, 0x200a, 0x000b, 0x0906, 0x100b, 0x200b, 0x000c, 0x0907, 0x100c, 0x200c, 0x000d, 0x0908, 0x100d, 0x200d, 0x000e, 0x0909, 0x100e, 0x200e, 0x000f, 0x090a, 0x100f, 0x200f, 0x0010, 0x090b, 0x1010, 0x2010, 0x0011, 0x0a04, 0x1011, 0x2011, 0x0012, 0x0a05, 0x1012, 0x2012, 0x0013, 0x0a06, 0x1013, 0x2013, 0x0014, 0x0a07, 0x1014, 0x2014, 0x0015, 0x0a08, 0x1015, 0x2015, 0x0016, 0x0a09, 0x1016, 0x2016, 0x0017, 0x0a0a, 0x1017, 0x2017, 0x0018, 0x0a0b, 0x1018, 0x2018, 0x0019, 0x0b04, 0x1019, 0x2019, 0x001a, 0x0b05, 0x101a, 0x201a, 0x001b, 0x0b06, 0x101b, 0x201b, 0x001c, 0x0b07, 0x101c, 0x201c, 0x001d, 0x0b08, 0x101d, 0x201d, 0x001e, 0x0b09, 0x101e, 0x201e, 0x001f, 0x0b0a, 0x101f, 0x201f, 0x0020, 0x0b0b, 0x1020, 0x2020, 0x0021, 0x0c04, 0x1021, 0x2021, 0x0022, 0x0c05, 0x1022, 0x2022, 0x0023, 0x0c06, 0x1023, 0x2023, 0x0024, 0x0c07, 0x1024, 0x2024, 0x0025, 0x0c08, 0x1025, 0x2025, 0x0026, 0x0c09, 0x1026, 0x2026, 0x0027, 0x0c0a, 0x1027, 0x2027, 0x0028, 0x0c0b, 0x1028, 0x2028, 0x0029, 0x0d04, 0x1029, 0x2029, 0x002a, 0x0d05, 0x102a, 0x202a, 0x002b, 0x0d06, 0x102b, 0x202b, 0x002c, 0x0d07, 0x102c, 0x202c, 0x002d, 0x0d08, 0x102d, 0x202d, 0x002e, 0x0d09, 0x102e, 0x202e, 0x002f, 0x0d0a, 0x102f, 0x202f, 0x0030, 0x0d0b, 0x1030, 0x2030, 0x0031, 0x0e04, 0x1031, 0x2031, 0x0032, 0x0e05, 0x1032, 0x2032, 0x0033, 0x0e06, 0x1033, 0x2033, 0x0034, 0x0e07, 0x1034, 0x2034, 0x0035, 0x0e08, 0x1035, 0x2035, 0x0036, 0x0e09, 0x1036, 0x2036, 0x0037, 0x0e0a, 0x1037, 0x2037, 0x0038, 0x0e0b, 0x1038, 0x2038, 0x0039, 0x0f04, 0x1039, 0x2039, 0x003a, 0x0f05, 0x103a, 0x203a, 0x003b, 0x0f06, 0x103b, 0x203b, 0x003c, 0x0f07, 0x103c, 0x203c, 0x0801, 0x0f08, 0x103d, 0x203d, 0x1001, 0x0f09, 0x103e, 0x203e, 0x1801, 0x0f0a, 0x103f, 0x203f, 0x2001, 0x0f0b, 0x1040, 0x2040 }; // In debug mode, allow optional computation of the table at startup. // Also, check that the decompression table is correct. #ifndef NDEBUG DEFINE_bool(snappy_dump_decompression_table, false, "If true, we print the decompression table at startup."); static uint16 MakeEntry(unsigned int extra, unsigned int len, unsigned int copy_offset) { // Check that all of the fields fit within the allocated space assert(extra == (extra & 0x7)); // At most 3 bits assert(copy_offset == (copy_offset & 0x7)); // At most 3 bits assert(len == (len & 0x7f)); // At most 7 bits return len | (copy_offset << 8) | (extra << 11); } static void ComputeTable() { uint16 dst[256]; // Place invalid entries in all places to detect missing initialization int assigned = 0; for (int i = 0; i < 256; i++) { dst[i] = 0xffff; } // Small LITERAL entries. We store (len-1) in the top 6 bits. for (unsigned int len = 1; len <= 60; len++) { dst[LITERAL | ((len-1) << 2)] = MakeEntry(0, len, 0); assigned++; } // Large LITERAL entries. We use 60..63 in the high 6 bits to // encode the number of bytes of length info that follow the opcode. for (unsigned int extra_bytes = 1; extra_bytes <= 4; extra_bytes++) { // We set the length field in the lookup table to 1 because extra // bytes encode len-1. dst[LITERAL | ((extra_bytes+59) << 2)] = MakeEntry(extra_bytes, 1, 0); assigned++; } // COPY_1_BYTE_OFFSET. // // The tag byte in the compressed data stores len-4 in 3 bits, and // offset/256 in 5 bits. offset%256 is stored in the next byte. // // This format is used for length in range [4..11] and offset in // range [0..2047] for (unsigned int len = 4; len < 12; len++) { for (unsigned int offset = 0; offset < 2048; offset += 256) { dst[COPY_1_BYTE_OFFSET | ((len-4)<<2) | ((offset>>8)<<5)] = MakeEntry(1, len, offset>>8); assigned++; } } // COPY_2_BYTE_OFFSET. // Tag contains len-1 in top 6 bits, and offset in next two bytes. for (unsigned int len = 1; len <= 64; len++) { dst[COPY_2_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(2, len, 0); assigned++; } // COPY_4_BYTE_OFFSET. // Tag contents len-1 in top 6 bits, and offset in next four bytes. for (unsigned int len = 1; len <= 64; len++) { dst[COPY_4_BYTE_OFFSET | ((len-1)<<2)] = MakeEntry(4, len, 0); assigned++; } // Check that each entry was initialized exactly once. if (assigned != 256) { fprintf(stderr, "ComputeTable: assigned only %d of 256\n", assigned); abort(); } for (int i = 0; i < 256; i++) { if (dst[i] == 0xffff) { fprintf(stderr, "ComputeTable: did not assign byte %d\n", i); abort(); } } if (FLAGS_snappy_dump_decompression_table) { printf("static const uint16 char_table[256] = {\n "); for (int i = 0; i < 256; i++) { printf("0x%04x%s", dst[i], ((i == 255) ? "\n" : (((i%8) == 7) ? ",\n " : ", "))); } printf("};\n"); } // Check that computed table matched recorded table for (int i = 0; i < 256; i++) { if (dst[i] != char_table[i]) { fprintf(stderr, "ComputeTable: byte %d: computed (%x), expect (%x)\n", i, static_cast(dst[i]), static_cast(char_table[i])); abort(); } } } #endif /* !NDEBUG */ // Helper class for decompression class SnappyDecompressor { private: Source* reader_; // Underlying source of bytes to decompress const char* ip_; // Points to next buffered byte const char* ip_limit_; // Points just past buffered bytes uint32 peeked_; // Bytes peeked from reader (need to skip) bool eof_; // Hit end of input without an error? char scratch_[kMaximumTagLength]; // See RefillTag(). // Ensure that all of the tag metadata for the next tag is available // in [ip_..ip_limit_-1]. Also ensures that [ip,ip+4] is readable even // if (ip_limit_ - ip_ < 5). // // Returns true on success, false on error or end of input. bool RefillTag(); public: explicit SnappyDecompressor(Source* reader) : reader_(reader), ip_(NULL), ip_limit_(NULL), peeked_(0), eof_(false) { } ~SnappyDecompressor() { // Advance past any bytes we peeked at from the reader reader_->Skip(peeked_); } // Returns true iff we have hit the end of the input without an error. bool eof() const { return eof_; } // Read the uncompressed length stored at the start of the compressed data. // On succcess, stores the length in *result and returns true. // On failure, returns false. bool ReadUncompressedLength(uint32* result) { assert(ip_ == NULL); // Must not have read anything yet // Length is encoded in 1..5 bytes *result = 0; uint32 shift = 0; while (true) { if (shift >= 32) return false; size_t n; const char* ip = reader_->Peek(&n); if (n == 0) return false; const unsigned char c = *(reinterpret_cast(ip)); reader_->Skip(1); *result |= static_cast(c & 0x7f) << shift; if (c < 128) { break; } shift += 7; } return true; } // Process the next item found in the input. // Returns true if successful, false on error or end of input. template void DecompressAllTags(Writer* writer) { const char* ip = ip_; // We could have put this refill fragment only at the beginning of the loop. // However, duplicating it at the end of each branch gives the compiler more // scope to optimize the expression based on the local // context, which overall increases speed. #define MAYBE_REFILL() \ if (ip_limit_ - ip < kMaximumTagLength) { \ ip_ = ip; \ if (!RefillTag()) return; \ ip = ip_; \ } MAYBE_REFILL(); for ( ;; ) { const unsigned char c = *(reinterpret_cast(ip++)); if ((c & 0x3) == LITERAL) { size_t literal_length = (c >> 2) + 1u; if (writer->TryFastAppend(ip, ip_limit_ - ip, literal_length)) { assert(literal_length < 61); ip += literal_length; // NOTE(user): There is no MAYBE_REFILL() here, as TryFastAppend() // will not return true unless there's already at least five spare // bytes in addition to the literal. continue; } if (PREDICT_FALSE(literal_length >= 61)) { // Long literal. const size_t literal_length_length = literal_length - 60; literal_length = (LittleEndian::Load32(ip) & wordmask[literal_length_length]) + 1; ip += literal_length_length; } size_t avail = ip_limit_ - ip; while (avail < literal_length) { if (!writer->Append(ip, avail)) return; literal_length -= avail; reader_->Skip(peeked_); size_t n; ip = reader_->Peek(&n); avail = n; peeked_ = avail; if (avail == 0) return; // Premature end of input ip_limit_ = ip + avail; } if (!writer->Append(ip, literal_length)) { return; } ip += literal_length; MAYBE_REFILL(); } else { const uint32 entry = char_table[c]; const uint32 trailer = LittleEndian::Load32(ip) & wordmask[entry >> 11]; const uint32 length = entry & 0xff; ip += entry >> 11; // copy_offset/256 is encoded in bits 8..10. By just fetching // those bits, we get copy_offset (since the bit-field starts at // bit 8). const uint32 copy_offset = entry & 0x700; if (!writer->AppendFromSelf(copy_offset + trailer, length)) { return; } MAYBE_REFILL(); } } #undef MAYBE_REFILL } }; bool SnappyDecompressor::RefillTag() { const char* ip = ip_; if (ip == ip_limit_) { // Fetch a new fragment from the reader reader_->Skip(peeked_); // All peeked bytes are used up size_t n; ip = reader_->Peek(&n); peeked_ = n; if (n == 0) { eof_ = true; return false; } ip_limit_ = ip + n; } // Read the tag character assert(ip < ip_limit_); const unsigned char c = *(reinterpret_cast(ip)); const uint32 entry = char_table[c]; const uint32 needed = (entry >> 11) + 1; // +1 byte for 'c' assert(needed <= sizeof(scratch_)); // Read more bytes from reader if needed uint32 nbuf = ip_limit_ - ip; if (nbuf < needed) { // Stitch together bytes from ip and reader to form the word // contents. We store the needed bytes in "scratch_". They // will be consumed immediately by the caller since we do not // read more than we need. memmove(scratch_, ip, nbuf); reader_->Skip(peeked_); // All peeked bytes are used up peeked_ = 0; while (nbuf < needed) { size_t length; const char* src = reader_->Peek(&length); if (length == 0) return false; uint32 to_add = min(needed - nbuf, length); memcpy(scratch_ + nbuf, src, to_add); nbuf += to_add; reader_->Skip(to_add); } assert(nbuf == needed); ip_ = scratch_; ip_limit_ = scratch_ + needed; } else if (nbuf < kMaximumTagLength) { // Have enough bytes, but move into scratch_ so that we do not // read past end of input memmove(scratch_, ip, nbuf); reader_->Skip(peeked_); // All peeked bytes are used up peeked_ = 0; ip_ = scratch_; ip_limit_ = scratch_ + nbuf; } else { // Pass pointer to buffer returned by reader_. ip_ = ip; } return true; } template static bool InternalUncompress(Source* r, Writer* writer) { // Read the uncompressed length from the front of the compressed input SnappyDecompressor decompressor(r); uint32 uncompressed_len = 0; if (!decompressor.ReadUncompressedLength(&uncompressed_len)) return false; return InternalUncompressAllTags(&decompressor, writer, uncompressed_len); } template static bool InternalUncompressAllTags(SnappyDecompressor* decompressor, Writer* writer, uint32 uncompressed_len) { writer->SetExpectedLength(uncompressed_len); // Process the entire input decompressor->DecompressAllTags(writer); return (decompressor->eof() && writer->CheckLength()); } bool GetUncompressedLength(Source* source, uint32* result) { SnappyDecompressor decompressor(source); return decompressor.ReadUncompressedLength(result); } size_t Compress(Source* reader, Sink* writer) { size_t written = 0; size_t N = reader->Available(); char ulength[Varint::kMax32]; char* p = Varint::Encode32(ulength, N); writer->Append(ulength, p-ulength); written += (p - ulength); internal::WorkingMemory wmem; char* scratch = NULL; char* scratch_output = NULL; while (N > 0) { // Get next block to compress (without copying if possible) size_t fragment_size; const char* fragment = reader->Peek(&fragment_size); assert(fragment_size != 0); // premature end of input const size_t num_to_read = min(N, kBlockSize); size_t bytes_read = fragment_size; size_t pending_advance = 0; if (bytes_read >= num_to_read) { // Buffer returned by reader is large enough pending_advance = num_to_read; fragment_size = num_to_read; } else { // Read into scratch buffer if (scratch == NULL) { // If this is the last iteration, we want to allocate N bytes // of space, otherwise the max possible kBlockSize space. // num_to_read contains exactly the correct value scratch = new char[num_to_read]; } memcpy(scratch, fragment, bytes_read); reader->Skip(bytes_read); while (bytes_read < num_to_read) { fragment = reader->Peek(&fragment_size); size_t n = min(fragment_size, num_to_read - bytes_read); memcpy(scratch + bytes_read, fragment, n); bytes_read += n; reader->Skip(n); } assert(bytes_read == num_to_read); fragment = scratch; fragment_size = num_to_read; } assert(fragment_size == num_to_read); // Get encoding table for compression int table_size; uint16* table = wmem.GetHashTable(num_to_read, &table_size); // Compress input_fragment and append to dest const int max_output = MaxCompressedLength(num_to_read); // Need a scratch buffer for the output, in case the byte sink doesn't // have room for us directly. if (scratch_output == NULL) { scratch_output = new char[max_output]; } else { // Since we encode kBlockSize regions followed by a region // which is <= kBlockSize in length, a previously allocated // scratch_output[] region is big enough for this iteration. } char* dest = writer->GetAppendBuffer(max_output, scratch_output); char* end = internal::CompressFragment(fragment, fragment_size, dest, table, table_size); writer->Append(dest, end - dest); written += (end - dest); N -= num_to_read; reader->Skip(pending_advance); } delete[] scratch; delete[] scratch_output; return written; } // ----------------------------------------------------------------------- // IOVec interfaces // ----------------------------------------------------------------------- // A type that writes to an iovec. // Note that this is not a "ByteSink", but a type that matches the // Writer template argument to SnappyDecompressor::DecompressAllTags(). class SnappyIOVecWriter { private: const struct iovec* output_iov_; const size_t output_iov_count_; // We are currently writing into output_iov_[curr_iov_index_]. int curr_iov_index_; // Bytes written to output_iov_[curr_iov_index_] so far. size_t curr_iov_written_; // Total bytes decompressed into output_iov_ so far. size_t total_written_; // Maximum number of bytes that will be decompressed into output_iov_. size_t output_limit_; inline char* GetIOVecPointer(int index, size_t offset) { return reinterpret_cast(output_iov_[index].iov_base) + offset; } public: // Does not take ownership of iov. iov must be valid during the // entire lifetime of the SnappyIOVecWriter. inline SnappyIOVecWriter(const struct iovec* iov, size_t iov_count) : output_iov_(iov), output_iov_count_(iov_count), curr_iov_index_(0), curr_iov_written_(0), total_written_(0), output_limit_(-1) { } inline void SetExpectedLength(size_t len) { output_limit_ = len; } inline bool CheckLength() const { return total_written_ == output_limit_; } inline bool Append(const char* ip, size_t len) { if (total_written_ + len > output_limit_) { return false; } while (len > 0) { assert(curr_iov_written_ <= output_iov_[curr_iov_index_].iov_len); if (curr_iov_written_ >= output_iov_[curr_iov_index_].iov_len) { // This iovec is full. Go to the next one. if (curr_iov_index_ + 1 >= output_iov_count_) { return false; } curr_iov_written_ = 0; ++curr_iov_index_; } const size_t to_write = std::min( len, output_iov_[curr_iov_index_].iov_len - curr_iov_written_); memcpy(GetIOVecPointer(curr_iov_index_, curr_iov_written_), ip, to_write); curr_iov_written_ += to_write; total_written_ += to_write; ip += to_write; len -= to_write; } return true; } inline bool TryFastAppend(const char* ip, size_t available, size_t len) { const size_t space_left = output_limit_ - total_written_; if (len <= 16 && available >= 16 + kMaximumTagLength && space_left >= 16 && output_iov_[curr_iov_index_].iov_len - curr_iov_written_ >= 16) { // Fast path, used for the majority (about 95%) of invocations. char* ptr = GetIOVecPointer(curr_iov_index_, curr_iov_written_); UnalignedCopy64(ip, ptr); UnalignedCopy64(ip + 8, ptr + 8); curr_iov_written_ += len; total_written_ += len; return true; } return false; } inline bool AppendFromSelf(size_t offset, size_t len) { if (offset > total_written_ || offset == 0) { return false; } const size_t space_left = output_limit_ - total_written_; if (len > space_left) { return false; } // Locate the iovec from which we need to start the copy. int from_iov_index = curr_iov_index_; size_t from_iov_offset = curr_iov_written_; while (offset > 0) { if (from_iov_offset >= offset) { from_iov_offset -= offset; break; } offset -= from_iov_offset; --from_iov_index; assert(from_iov_index >= 0); from_iov_offset = output_iov_[from_iov_index].iov_len; } // Copy bytes starting from the iovec pointed to by from_iov_index to // the current iovec. while (len > 0) { assert(from_iov_index <= curr_iov_index_); if (from_iov_index != curr_iov_index_) { const size_t to_copy = std::min( output_iov_[from_iov_index].iov_len - from_iov_offset, len); Append(GetIOVecPointer(from_iov_index, from_iov_offset), to_copy); len -= to_copy; if (len > 0) { ++from_iov_index; from_iov_offset = 0; } } else { assert(curr_iov_written_ <= output_iov_[curr_iov_index_].iov_len); size_t to_copy = std::min(output_iov_[curr_iov_index_].iov_len - curr_iov_written_, len); if (to_copy == 0) { // This iovec is full. Go to the next one. if (curr_iov_index_ + 1 >= output_iov_count_) { return false; } ++curr_iov_index_; curr_iov_written_ = 0; continue; } if (to_copy > len) { to_copy = len; } IncrementalCopy(GetIOVecPointer(from_iov_index, from_iov_offset), GetIOVecPointer(curr_iov_index_, curr_iov_written_), to_copy); curr_iov_written_ += to_copy; from_iov_offset += to_copy; total_written_ += to_copy; len -= to_copy; } } return true; } }; bool RawUncompressToIOVec(const char* compressed, size_t compressed_length, const struct iovec* iov, size_t iov_cnt) { ByteArraySource reader(compressed, compressed_length); return RawUncompressToIOVec(&reader, iov, iov_cnt); } bool RawUncompressToIOVec(Source* compressed, const struct iovec* iov, size_t iov_cnt) { SnappyIOVecWriter output(iov, iov_cnt); return InternalUncompress(compressed, &output); } // ----------------------------------------------------------------------- // Flat array interfaces // ----------------------------------------------------------------------- // A type that writes to a flat array. // Note that this is not a "ByteSink", but a type that matches the // Writer template argument to SnappyDecompressor::DecompressAllTags(). class SnappyArrayWriter { private: char* base_; char* op_; char* op_limit_; public: inline explicit SnappyArrayWriter(char* dst) : base_(dst), op_(dst) { } inline void SetExpectedLength(size_t len) { op_limit_ = op_ + len; } inline bool CheckLength() const { return op_ == op_limit_; } inline bool Append(const char* ip, size_t len) { char* op = op_; const size_t space_left = op_limit_ - op; if (space_left < len) { return false; } memcpy(op, ip, len); op_ = op + len; return true; } inline bool TryFastAppend(const char* ip, size_t available, size_t len) { char* op = op_; const size_t space_left = op_limit_ - op; if (len <= 16 && available >= 16 + kMaximumTagLength && space_left >= 16) { // Fast path, used for the majority (about 95%) of invocations. UnalignedCopy64(ip, op); UnalignedCopy64(ip + 8, op + 8); op_ = op + len; return true; } else { return false; } } inline bool AppendFromSelf(size_t offset, size_t len) { char* op = op_; const size_t space_left = op_limit_ - op; // Check if we try to append from before the start of the buffer. // Normally this would just be a check for "produced < offset", // but "produced <= offset - 1u" is equivalent for every case // except the one where offset==0, where the right side will wrap around // to a very big number. This is convenient, as offset==0 is another // invalid case that we also want to catch, so that we do not go // into an infinite loop. assert(op >= base_); size_t produced = op - base_; if (produced <= offset - 1u) { return false; } if (len <= 16 && offset >= 8 && space_left >= 16) { // Fast path, used for the majority (70-80%) of dynamic invocations. UnalignedCopy64(op - offset, op); UnalignedCopy64(op - offset + 8, op + 8); } else { if (space_left >= len + kMaxIncrementCopyOverflow) { IncrementalCopyFastPath(op - offset, op, len); } else { if (space_left < len) { return false; } IncrementalCopy(op - offset, op, len); } } op_ = op + len; return true; } }; bool RawUncompress(const char* compressed, size_t n, char* uncompressed) { ByteArraySource reader(compressed, n); return RawUncompress(&reader, uncompressed); } bool RawUncompress(Source* compressed, char* uncompressed) { SnappyArrayWriter output(uncompressed); return InternalUncompress(compressed, &output); } bool Uncompress(const char* compressed, size_t n, string* uncompressed) { size_t ulength; if (!GetUncompressedLength(compressed, n, &ulength)) { return false; } // On 32-bit builds: max_size() < kuint32max. Check for that instead // of crashing (e.g., consider externally specified compressed data). if (ulength > uncompressed->max_size()) { return false; } STLStringResizeUninitialized(uncompressed, ulength); return RawUncompress(compressed, n, string_as_array(uncompressed)); } // A Writer that drops everything on the floor and just does validation class SnappyDecompressionValidator { private: size_t expected_; size_t produced_; public: inline SnappyDecompressionValidator() : produced_(0) { } inline void SetExpectedLength(size_t len) { expected_ = len; } inline bool CheckLength() const { return expected_ == produced_; } inline bool Append(const char* ip, size_t len) { produced_ += len; return produced_ <= expected_; } inline bool TryFastAppend(const char* ip, size_t available, size_t length) { return false; } inline bool AppendFromSelf(size_t offset, size_t len) { // See SnappyArrayWriter::AppendFromSelf for an explanation of // the "offset - 1u" trick. if (produced_ <= offset - 1u) return false; produced_ += len; return produced_ <= expected_; } }; bool IsValidCompressedBuffer(const char* compressed, size_t n) { ByteArraySource reader(compressed, n); SnappyDecompressionValidator writer; return InternalUncompress(&reader, &writer); } void RawCompress(const char* input, size_t input_length, char* compressed, size_t* compressed_length) { ByteArraySource reader(input, input_length); UncheckedByteArraySink writer(compressed); Compress(&reader, &writer); // Compute how many bytes were added *compressed_length = (writer.CurrentDestination() - compressed); } size_t Compress(const char* input, size_t input_length, string* compressed) { // Pre-grow the buffer to the max length of the compressed output compressed->resize(MaxCompressedLength(input_length)); size_t compressed_length; RawCompress(input, input_length, string_as_array(compressed), &compressed_length); compressed->resize(compressed_length); return compressed_length; } } // end namespace snappy tmpNnpnZF/thirdparty/snappy/ChangeLog0000664000175000017500000031204012543167424017242 0ustar chrischris------------------------------------------------------------------------ r83 | snappy.mirrorbot@gmail.com | 2014-02-19 11:31:49 +0100 (Wed, 19 Feb 2014) | 9 lines Fix public issue 82: Stop distributing benchmark data files that have unclear or unsuitable licensing. In general, we replace the files we can with liberally licensed data, and remove all the others (in particular all the parts of the Canterbury corpus that are not clearly in the public domain). The replacements do not always have the exact same characteristics as the original ones, but they are more than good enough to be useful for benchmarking. ------------------------------------------------------------------------ r82 | snappy.mirrorbot@gmail.com | 2013-10-25 15:31:27 +0200 (Fri, 25 Oct 2013) | 8 lines Add support for padding in the Snappy framed format. This is specifically motivated by DICOM's demands that embedded data must be of an even number of bytes, but could in principle be used for any sort of padding/alignment needed. R=sanjay ------------------------------------------------------------------------ r81 | snappy.mirrorbot@gmail.com | 2013-10-15 17:21:31 +0200 (Tue, 15 Oct 2013) | 4 lines Release Snappy 1.1.1. R=jeff ------------------------------------------------------------------------ r80 | snappy.mirrorbot@gmail.com | 2013-08-13 14:55:00 +0200 (Tue, 13 Aug 2013) | 6 lines Add autoconf tests for size_t and ssize_t. Sort-of resolves public issue 79; it would solve the problem if MSVC typically used autoconf. However, it gives a natural place (config.h) to put the typedef even for MSVC. R=jsbell ------------------------------------------------------------------------ r79 | snappy.mirrorbot@gmail.com | 2013-07-29 13:06:44 +0200 (Mon, 29 Jul 2013) | 14 lines When we compare the number of bytes produced with the offset for a backreference, make the signedness of the bytes produced clear, by sticking it into a size_t. This avoids a signed/unsigned compare warning from MSVC (public issue 71), and also is slightly clearer. Since the line is now so long the explanatory comment about the -1u trick has to go somewhere else anyway, I used the opportunity to explain it in slightly more detail. This is a purely stylistic change; the emitted assembler from GCC is identical. R=jeff ------------------------------------------------------------------------ r78 | snappy.mirrorbot@gmail.com | 2013-06-30 21:24:03 +0200 (Sun, 30 Jun 2013) | 111 lines In the fast path for decompressing literals, instead of checking whether there's 16 bytes free and then checking right afterwards (when having subtracted the literal size) that there are now 5 bytes free, just check once for 21 bytes. This skips a compare and a branch; although it is easily predictable, it is still a few cycles on a fast path that we would like to get rid of. Benchmarking this yields very confusing results. On open-source GCC 4.8.1 on Haswell, we get exactly the expected results; the benchmarks where we hit the fast path for literals (in particular the two HTML benchmarks and the protobuf benchmark) give very nice speedups, and the others are not really affected. However, benchmarks with Google's GCC branch on other hardware is much less clear. It seems that we have a weak loss in some cases (and the win for the “typical†win cases are not nearly as clear), but that it depends on microarchitecture and plain luck in how we run the benchmark. Looking at the generated assembler, it seems that the removal of the if causes other large-scale changes in how the function is laid out, which makes it likely that this is just bad luck. Thus, we should keep this change, even though its exact current impact is unclear; it's a sensible change per se, and dropping it on the basis of microoptimization for a given compiler (or even branch of a compiler) would seem like a bad strategy in the long run. Microbenchmark results (all in 64-bit, opt mode): Nehalem, Google GCC: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------ BM_UFlat/0 76747 75591 1.3GB/s html +1.5% BM_UFlat/1 765756 757040 886.3MB/s urls +1.2% BM_UFlat/2 10867 10893 10.9GB/s jpg -0.2% BM_UFlat/3 124 131 1.4GB/s jpg_200 -5.3% BM_UFlat/4 31663 31596 2.8GB/s pdf +0.2% BM_UFlat/5 314162 308176 1.2GB/s html4 +1.9% BM_UFlat/6 29668 29746 790.6MB/s cp -0.3% BM_UFlat/7 12958 13386 796.4MB/s c -3.2% BM_UFlat/8 3596 3682 966.0MB/s lsp -2.3% BM_UFlat/9 1019193 1033493 953.3MB/s xls -1.4% BM_UFlat/10 239 247 775.3MB/s xls_200 -3.2% BM_UFlat/11 236411 240271 606.9MB/s txt1 -1.6% BM_UFlat/12 206639 209768 571.2MB/s txt2 -1.5% BM_UFlat/13 627803 635722 641.4MB/s txt3 -1.2% BM_UFlat/14 845932 857816 538.2MB/s txt4 -1.4% BM_UFlat/15 402107 391670 1.2GB/s bin +2.7% BM_UFlat/16 283 279 683.6MB/s bin_200 +1.4% BM_UFlat/17 46070 46815 781.5MB/s sum -1.6% BM_UFlat/18 5053 5163 782.0MB/s man -2.1% BM_UFlat/19 79721 76581 1.4GB/s pb +4.1% BM_UFlat/20 251158 252330 697.5MB/s gaviota -0.5% Sum of all benchmarks 4966150 4980396 -0.3% Sandy Bridge, Google GCC: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------ BM_UFlat/0 42850 42182 2.3GB/s html +1.6% BM_UFlat/1 525660 515816 1.3GB/s urls +1.9% BM_UFlat/2 7173 7283 16.3GB/s jpg -1.5% BM_UFlat/3 92 91 2.1GB/s jpg_200 +1.1% BM_UFlat/4 15147 14872 5.9GB/s pdf +1.8% BM_UFlat/5 199936 192116 2.0GB/s html4 +4.1% BM_UFlat/6 12796 12443 1.8GB/s cp +2.8% BM_UFlat/7 6588 6400 1.6GB/s c +2.9% BM_UFlat/8 2010 1951 1.8GB/s lsp +3.0% BM_UFlat/9 761124 763049 1.3GB/s xls -0.3% BM_UFlat/10 186 189 1016.1MB/s xls_200 -1.6% BM_UFlat/11 159354 158460 918.6MB/s txt1 +0.6% BM_UFlat/12 139732 139950 856.1MB/s txt2 -0.2% BM_UFlat/13 429917 425027 961.7MB/s txt3 +1.2% BM_UFlat/14 585255 587324 785.8MB/s txt4 -0.4% BM_UFlat/15 276186 266173 1.8GB/s bin +3.8% BM_UFlat/16 205 207 925.5MB/s bin_200 -1.0% BM_UFlat/17 24925 24935 1.4GB/s sum -0.0% BM_UFlat/18 2632 2576 1.5GB/s man +2.2% BM_UFlat/19 40546 39108 2.8GB/s pb +3.7% BM_UFlat/20 175803 168209 1048.9MB/s gaviota +4.5% Sum of all benchmarks 3408117 3368361 +1.2% Haswell, upstream GCC 4.8.1: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------ BM_UFlat/0 46308 40641 2.3GB/s html +13.9% BM_UFlat/1 513385 514706 1.3GB/s urls -0.3% BM_UFlat/2 6197 6151 19.2GB/s jpg +0.7% BM_UFlat/3 61 61 3.0GB/s jpg_200 +0.0% BM_UFlat/4 13551 13429 6.5GB/s pdf +0.9% BM_UFlat/5 198317 190243 2.0GB/s html4 +4.2% BM_UFlat/6 14768 12560 1.8GB/s cp +17.6% BM_UFlat/7 6453 6447 1.6GB/s c +0.1% BM_UFlat/8 1991 1980 1.8GB/s lsp +0.6% BM_UFlat/9 766947 770424 1.2GB/s xls -0.5% BM_UFlat/10 170 169 1.1GB/s xls_200 +0.6% BM_UFlat/11 164350 163554 888.7MB/s txt1 +0.5% BM_UFlat/12 145444 143830 832.1MB/s txt2 +1.1% BM_UFlat/13 437849 438413 929.2MB/s txt3 -0.1% BM_UFlat/14 603587 605309 759.8MB/s txt4 -0.3% BM_UFlat/15 249799 248067 1.9GB/s bin +0.7% BM_UFlat/16 191 188 1011.4MB/s bin_200 +1.6% BM_UFlat/17 26064 24778 1.4GB/s sum +5.2% BM_UFlat/18 2620 2601 1.5GB/s man +0.7% BM_UFlat/19 44551 37373 3.0GB/s pb +19.2% BM_UFlat/20 165408 164584 1.0GB/s gaviota +0.5% Sum of all benchmarks 3408011 3385508 +0.7% ------------------------------------------------------------------------ r77 | snappy.mirrorbot@gmail.com | 2013-06-14 23:42:26 +0200 (Fri, 14 Jun 2013) | 92 lines Make the two IncrementalCopy* functions take in an ssize_t instead of a len, in order to avoid having to do 32-to-64-bit signed conversions on a hot path during decompression. (Also fixes some MSVC warnings, mentioned in public issue 75, but more of those remain.) They cannot be size_t because we expect them to go negative and test for that. This saves a few movzwl instructions, yielding ~2% speedup in decompression. Sandy Bridge: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 48009 41283 2.3GB/s html +16.3% BM_UFlat/1 531274 513419 1.3GB/s urls +3.5% BM_UFlat/2 7378 7062 16.8GB/s jpg +4.5% BM_UFlat/3 92 92 2.0GB/s jpg_200 +0.0% BM_UFlat/4 15057 14974 5.9GB/s pdf +0.6% BM_UFlat/5 204323 193140 2.0GB/s html4 +5.8% BM_UFlat/6 13282 12611 1.8GB/s cp +5.3% BM_UFlat/7 6511 6504 1.6GB/s c +0.1% BM_UFlat/8 2014 2030 1.7GB/s lsp -0.8% BM_UFlat/9 775909 768336 1.3GB/s xls +1.0% BM_UFlat/10 182 184 1043.2MB/s xls_200 -1.1% BM_UFlat/11 167352 161630 901.2MB/s txt1 +3.5% BM_UFlat/12 147393 142246 842.8MB/s txt2 +3.6% BM_UFlat/13 449960 432853 944.4MB/s txt3 +4.0% BM_UFlat/14 620497 594845 775.9MB/s txt4 +4.3% BM_UFlat/15 265610 267356 1.8GB/s bin -0.7% BM_UFlat/16 206 205 932.7MB/s bin_200 +0.5% BM_UFlat/17 25561 24730 1.4GB/s sum +3.4% BM_UFlat/18 2620 2644 1.5GB/s man -0.9% BM_UFlat/19 45766 38589 2.9GB/s pb +18.6% BM_UFlat/20 171107 169832 1039.5MB/s gaviota +0.8% Sum of all benchmarks 3500103 3394565 +3.1% Westmere: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 72624 71526 1.3GB/s html +1.5% BM_UFlat/1 735821 722917 930.8MB/s urls +1.8% BM_UFlat/2 10450 10172 11.7GB/s jpg +2.7% BM_UFlat/3 117 117 1.6GB/s jpg_200 +0.0% BM_UFlat/4 29817 29648 3.0GB/s pdf +0.6% BM_UFlat/5 297126 293073 1.3GB/s html4 +1.4% BM_UFlat/6 28252 27994 842.0MB/s cp +0.9% BM_UFlat/7 12672 12391 862.1MB/s c +2.3% BM_UFlat/8 3507 3425 1040.9MB/s lsp +2.4% BM_UFlat/9 1004268 969395 1018.0MB/s xls +3.6% BM_UFlat/10 233 227 844.8MB/s xls_200 +2.6% BM_UFlat/11 230054 224981 647.8MB/s txt1 +2.3% BM_UFlat/12 201229 196447 610.5MB/s txt2 +2.4% BM_UFlat/13 609547 596761 685.3MB/s txt3 +2.1% BM_UFlat/14 824362 804821 573.8MB/s txt4 +2.4% BM_UFlat/15 371095 374899 1.3GB/s bin -1.0% BM_UFlat/16 267 267 717.8MB/s bin_200 +0.0% BM_UFlat/17 44623 43828 835.9MB/s sum +1.8% BM_UFlat/18 5077 4815 841.0MB/s man +5.4% BM_UFlat/19 74964 73210 1.5GB/s pb +2.4% BM_UFlat/20 237987 236745 746.0MB/s gaviota +0.5% Sum of all benchmarks 4794092 4697659 +2.1% Istanbul: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 98614 96376 1020.4MB/s html +2.3% BM_UFlat/1 963740 953241 707.2MB/s urls +1.1% BM_UFlat/2 25042 24769 4.8GB/s jpg +1.1% BM_UFlat/3 180 180 1065.6MB/s jpg_200 +0.0% BM_UFlat/4 45942 45403 1.9GB/s pdf +1.2% BM_UFlat/5 400135 390226 1008.2MB/s html4 +2.5% BM_UFlat/6 37768 37392 631.9MB/s cp +1.0% BM_UFlat/7 18585 18200 588.2MB/s c +2.1% BM_UFlat/8 5751 5690 627.7MB/s lsp +1.1% BM_UFlat/9 1543154 1542209 641.4MB/s xls +0.1% BM_UFlat/10 381 388 494.6MB/s xls_200 -1.8% BM_UFlat/11 339715 331973 440.1MB/s txt1 +2.3% BM_UFlat/12 294807 289418 415.4MB/s txt2 +1.9% BM_UFlat/13 906160 884094 463.3MB/s txt3 +2.5% BM_UFlat/14 1224221 1198435 386.1MB/s txt4 +2.2% BM_UFlat/15 516277 502923 979.5MB/s bin +2.7% BM_UFlat/16 405 402 477.2MB/s bin_200 +0.7% BM_UFlat/17 61640 60621 605.6MB/s sum +1.7% BM_UFlat/18 7326 7383 549.5MB/s man -0.8% BM_UFlat/19 94720 92653 1.2GB/s pb +2.2% BM_UFlat/20 360435 346687 510.6MB/s gaviota +4.0% Sum of all benchmarks 6944998 6828663 +1.7% ------------------------------------------------------------------------ r76 | snappy.mirrorbot@gmail.com | 2013-06-13 18:19:52 +0200 (Thu, 13 Jun 2013) | 9 lines Add support for uncompressing to iovecs (scatter I/O). Windows does not have struct iovec defined anywhere, so we define our own version that's equal to what UNIX typically has. The bulk of this patch was contributed by Mohit Aron. R=jeff ------------------------------------------------------------------------ r75 | snappy.mirrorbot@gmail.com | 2013-06-12 21:51:15 +0200 (Wed, 12 Jun 2013) | 4 lines Some code reorganization needed for an internal change. R=fikes ------------------------------------------------------------------------ r74 | snappy.mirrorbot@gmail.com | 2013-04-09 17:33:30 +0200 (Tue, 09 Apr 2013) | 4 lines Supports truncated test data in zippy benchmark. R=sesse ------------------------------------------------------------------------ r73 | snappy.mirrorbot@gmail.com | 2013-02-05 15:36:15 +0100 (Tue, 05 Feb 2013) | 4 lines Release Snappy 1.1.0. R=sanjay ------------------------------------------------------------------------ r72 | snappy.mirrorbot@gmail.com | 2013-02-05 15:30:05 +0100 (Tue, 05 Feb 2013) | 9 lines Make ./snappy_unittest pass without "srcdir" being defined. Previously, snappy_unittests would read from an absolute path /testdata/..; convert it to use a relative path instead. Patch from Marc-Antonie Ruel. R=maruel ------------------------------------------------------------------------ r71 | snappy.mirrorbot@gmail.com | 2013-01-18 13:16:36 +0100 (Fri, 18 Jan 2013) | 287 lines Increase the Zippy block size from 32 kB to 64 kB, winning ~3% density while being effectively performance neutral. The longer story about density is that we win 3-6% density on the benchmarks where this has any effect at all; many of the benchmarks (cp, c, lsp, man) are smaller than 32 kB and thus will have no effect. Binary data also seems to win little or nothing; of course, the already-compressed data wins nothing. The protobuf benchmark wins as much as ~18% depending on architecture, but I wouldn't be too sure that this is representative of protobuf data in general. As of performance, we lose a tiny amount since we get more tags (e.g., a long literal might be broken up into literal-copy-literal), but we win it back with less clearing of the hash table, and more opportunities to skip incompressible data (e.g. in the jpg benchmark). Decompression seems to get ever so slightly slower, again due to more tags. The total net change is about as close to zero as we can get, so the end effect seems to be simply more density and no real performance change. The comment about not changing kBlockSize, scary as it is, is not really relevant, since we're never going to have a block-level decompressor without explicitly marked blocks. Replace it with something more appropriate. This affects the framing format, but it's okay to change it since it basically has no users yet. Density (note that cp, c, lsp and man are all smaller than 32 kB): Benchmark Description Base (%) New (%) Improvement -------------------------------------------------------------- ZFlat/0 html 22.57 22.31 +5.6% ZFlat/1 urls 50.89 47.77 +6.5% ZFlat/2 jpg 99.88 99.87 +0.0% ZFlat/3 pdf 82.13 82.07 +0.1% ZFlat/4 html4 23.55 22.51 +4.6% ZFlat/5 cp 48.12 48.12 +0.0% ZFlat/6 c 42.40 42.40 +0.0% ZFlat/7 lsp 48.37 48.37 +0.0% ZFlat/8 xls 41.34 41.23 +0.3% ZFlat/9 txt1 59.81 57.87 +3.4% ZFlat/10 txt2 64.07 61.93 +3.5% ZFlat/11 txt3 57.11 54.92 +4.0% ZFlat/12 txt4 68.35 66.22 +3.2% ZFlat/13 bin 18.21 18.11 +0.6% ZFlat/14 sum 51.88 48.96 +6.0% ZFlat/15 man 59.36 59.36 +0.0% ZFlat/16 pb 23.15 19.64 +17.9% ZFlat/17 gaviota 38.27 37.72 +1.5% Geometric mean 45.51 44.15 +3.1% Microbenchmarks (64-bit, opt): Westmere 2.8 GHz: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 75342 75027 1.3GB/s html +0.4% BM_UFlat/1 723767 744269 899.6MB/s urls -2.8% BM_UFlat/2 10072 10072 11.7GB/s jpg +0.0% BM_UFlat/3 30747 30388 2.9GB/s pdf +1.2% BM_UFlat/4 307353 306063 1.2GB/s html4 +0.4% BM_UFlat/5 28593 28743 816.3MB/s cp -0.5% BM_UFlat/6 12958 12998 818.1MB/s c -0.3% BM_UFlat/7 3700 3792 935.8MB/s lsp -2.4% BM_UFlat/8 999685 999905 982.1MB/s xls -0.0% BM_UFlat/9 232954 230079 630.4MB/s txt1 +1.2% BM_UFlat/10 200785 201468 592.6MB/s txt2 -0.3% BM_UFlat/11 617267 610968 666.1MB/s txt3 +1.0% BM_UFlat/12 821595 822475 558.7MB/s txt4 -0.1% BM_UFlat/13 377097 377632 1.3GB/s bin -0.1% BM_UFlat/14 45476 45260 805.8MB/s sum +0.5% BM_UFlat/15 4985 5003 805.7MB/s man -0.4% BM_UFlat/16 80813 77494 1.4GB/s pb +4.3% BM_UFlat/17 251792 241553 727.7MB/s gaviota +4.2% BM_UValidate/0 40343 40354 2.4GB/s html -0.0% BM_UValidate/1 426890 451574 1.4GB/s urls -5.5% BM_UValidate/2 187 179 661.9GB/s jpg +4.5% BM_UValidate/3 13783 13827 6.4GB/s pdf -0.3% BM_UValidate/4 162393 163335 2.3GB/s html4 -0.6% BM_UDataBuffer/0 93756 93302 1046.7MB/s html +0.5% BM_UDataBuffer/1 886714 916292 730.7MB/s urls -3.2% BM_UDataBuffer/2 15861 16401 7.2GB/s jpg -3.3% BM_UDataBuffer/3 38934 39224 2.2GB/s pdf -0.7% BM_UDataBuffer/4 381008 379428 1029.5MB/s html4 +0.4% BM_UCord/0 92528 91098 1072.0MB/s html +1.6% BM_UCord/1 858421 885287 756.3MB/s urls -3.0% BM_UCord/2 13140 13464 8.8GB/s jpg -2.4% BM_UCord/3 39012 37773 2.3GB/s pdf +3.3% BM_UCord/4 376869 371267 1052.1MB/s html4 +1.5% BM_UCordString/0 75810 75303 1.3GB/s html +0.7% BM_UCordString/1 735290 753841 888.2MB/s urls -2.5% BM_UCordString/2 11945 13113 9.0GB/s jpg -8.9% BM_UCordString/3 33901 32562 2.7GB/s pdf +4.1% BM_UCordString/4 310985 309390 1.2GB/s html4 +0.5% BM_UCordValidate/0 40952 40450 2.4GB/s html +1.2% BM_UCordValidate/1 433842 456531 1.4GB/s urls -5.0% BM_UCordValidate/2 1179 1173 100.8GB/s jpg +0.5% BM_UCordValidate/3 14481 14392 6.1GB/s pdf +0.6% BM_UCordValidate/4 164364 164151 2.3GB/s html4 +0.1% BM_ZFlat/0 160610 156601 623.6MB/s html (22.31 %) +2.6% BM_ZFlat/1 1995238 1993582 335.9MB/s urls (47.77 %) +0.1% BM_ZFlat/2 30133 24983 4.7GB/s jpg (99.87 %) +20.6% BM_ZFlat/3 74453 73128 1.2GB/s pdf (82.07 %) +1.8% BM_ZFlat/4 647674 633729 616.4MB/s html4 (22.51 %) +2.2% BM_ZFlat/5 76259 76090 308.4MB/s cp (48.12 %) +0.2% BM_ZFlat/6 31106 31084 342.1MB/s c (42.40 %) +0.1% BM_ZFlat/7 10507 10443 339.8MB/s lsp (48.37 %) +0.6% BM_ZFlat/8 1811047 1793325 547.6MB/s xls (41.23 %) +1.0% BM_ZFlat/9 597903 581793 249.3MB/s txt1 (57.87 %) +2.8% BM_ZFlat/10 525320 514522 232.0MB/s txt2 (61.93 %) +2.1% BM_ZFlat/11 1596591 1551636 262.3MB/s txt3 (54.92 %) +2.9% BM_ZFlat/12 2134523 2094033 219.5MB/s txt4 (66.22 %) +1.9% BM_ZFlat/13 593024 587869 832.6MB/s bin (18.11 %) +0.9% BM_ZFlat/14 114746 110666 329.5MB/s sum (48.96 %) +3.7% BM_ZFlat/15 14376 14485 278.3MB/s man (59.36 %) -0.8% BM_ZFlat/16 167908 150070 753.6MB/s pb (19.64 %) +11.9% BM_ZFlat/17 460228 442253 397.5MB/s gaviota (37.72 %) +4.1% BM_ZCord/0 164896 160241 609.4MB/s html +2.9% BM_ZCord/1 2070239 2043492 327.7MB/s urls +1.3% BM_ZCord/2 54402 47002 2.5GB/s jpg +15.7% BM_ZCord/3 85871 83832 1073.1MB/s pdf +2.4% BM_ZCord/4 664078 648825 602.0MB/s html4 +2.4% BM_ZDataBuffer/0 174874 172549 566.0MB/s html +1.3% BM_ZDataBuffer/1 2134410 2139173 313.0MB/s urls -0.2% BM_ZDataBuffer/2 71911 69551 1.7GB/s jpg +3.4% BM_ZDataBuffer/3 98236 99727 902.1MB/s pdf -1.5% BM_ZDataBuffer/4 710776 699104 558.8MB/s html4 +1.7% Sum of all benchmarks 27358908 27200688 +0.6% Sandy Bridge 2.6 GHz: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 49356 49018 1.9GB/s html +0.7% BM_UFlat/1 516764 531955 1.2GB/s urls -2.9% BM_UFlat/2 6982 7304 16.2GB/s jpg -4.4% BM_UFlat/3 15285 15598 5.6GB/s pdf -2.0% BM_UFlat/4 206557 206669 1.8GB/s html4 -0.1% BM_UFlat/5 13681 13567 1.7GB/s cp +0.8% BM_UFlat/6 6571 6592 1.6GB/s c -0.3% BM_UFlat/7 2008 1994 1.7GB/s lsp +0.7% BM_UFlat/8 775700 773286 1.2GB/s xls +0.3% BM_UFlat/9 165578 164480 881.8MB/s txt1 +0.7% BM_UFlat/10 143707 144139 828.2MB/s txt2 -0.3% BM_UFlat/11 443026 436281 932.8MB/s txt3 +1.5% BM_UFlat/12 603129 595856 771.2MB/s txt4 +1.2% BM_UFlat/13 271682 270450 1.8GB/s bin +0.5% BM_UFlat/14 26200 25666 1.4GB/s sum +2.1% BM_UFlat/15 2620 2608 1.5GB/s man +0.5% BM_UFlat/16 48908 47756 2.3GB/s pb +2.4% BM_UFlat/17 174638 170346 1031.9MB/s gaviota +2.5% BM_UValidate/0 31922 31898 3.0GB/s html +0.1% BM_UValidate/1 341265 363554 1.8GB/s urls -6.1% BM_UValidate/2 160 151 782.8GB/s jpg +6.0% BM_UValidate/3 10402 10380 8.5GB/s pdf +0.2% BM_UValidate/4 129490 130587 2.9GB/s html4 -0.8% BM_UDataBuffer/0 59383 58736 1.6GB/s html +1.1% BM_UDataBuffer/1 619222 637786 1049.8MB/s urls -2.9% BM_UDataBuffer/2 10775 11941 9.9GB/s jpg -9.8% BM_UDataBuffer/3 18002 17930 4.9GB/s pdf +0.4% BM_UDataBuffer/4 259182 259306 1.5GB/s html4 -0.0% BM_UCord/0 59379 57814 1.6GB/s html +2.7% BM_UCord/1 598456 615162 1088.4MB/s urls -2.7% BM_UCord/2 8519 8628 13.7GB/s jpg -1.3% BM_UCord/3 18123 17537 5.0GB/s pdf +3.3% BM_UCord/4 252375 252331 1.5GB/s html4 +0.0% BM_UCordString/0 49494 49790 1.9GB/s html -0.6% BM_UCordString/1 524659 541803 1.2GB/s urls -3.2% BM_UCordString/2 8206 8354 14.2GB/s jpg -1.8% BM_UCordString/3 17235 16537 5.3GB/s pdf +4.2% BM_UCordString/4 210188 211072 1.8GB/s html4 -0.4% BM_UCordValidate/0 31956 31587 3.0GB/s html +1.2% BM_UCordValidate/1 340828 362141 1.8GB/s urls -5.9% BM_UCordValidate/2 783 744 158.9GB/s jpg +5.2% BM_UCordValidate/3 10543 10462 8.4GB/s pdf +0.8% BM_UCordValidate/4 130150 129789 2.9GB/s html4 +0.3% BM_ZFlat/0 113873 111200 878.2MB/s html (22.31 %) +2.4% BM_ZFlat/1 1473023 1489858 449.4MB/s urls (47.77 %) -1.1% BM_ZFlat/2 23569 19486 6.1GB/s jpg (99.87 %) +21.0% BM_ZFlat/3 49178 48046 1.8GB/s pdf (82.07 %) +2.4% BM_ZFlat/4 475063 469394 832.2MB/s html4 (22.51 %) +1.2% BM_ZFlat/5 46910 46816 501.2MB/s cp (48.12 %) +0.2% BM_ZFlat/6 16883 16916 628.6MB/s c (42.40 %) -0.2% BM_ZFlat/7 5381 5447 651.5MB/s lsp (48.37 %) -1.2% BM_ZFlat/8 1466870 1473861 666.3MB/s xls (41.23 %) -0.5% BM_ZFlat/9 468006 464101 312.5MB/s txt1 (57.87 %) +0.8% BM_ZFlat/10 408157 408957 291.9MB/s txt2 (61.93 %) -0.2% BM_ZFlat/11 1253348 1232910 330.1MB/s txt3 (54.92 %) +1.7% BM_ZFlat/12 1702373 1702977 269.8MB/s txt4 (66.22 %) -0.0% BM_ZFlat/13 439792 438557 1116.0MB/s bin (18.11 %) +0.3% BM_ZFlat/14 80766 78851 462.5MB/s sum (48.96 %) +2.4% BM_ZFlat/15 7420 7542 534.5MB/s man (59.36 %) -1.6% BM_ZFlat/16 112043 100126 1.1GB/s pb (19.64 %) +11.9% BM_ZFlat/17 368877 357703 491.4MB/s gaviota (37.72 %) +3.1% BM_ZCord/0 116402 113564 859.9MB/s html +2.5% BM_ZCord/1 1507156 1519911 440.5MB/s urls -0.8% BM_ZCord/2 39860 33686 3.5GB/s jpg +18.3% BM_ZCord/3 56211 54694 1.6GB/s pdf +2.8% BM_ZCord/4 485594 479212 815.1MB/s html4 +1.3% BM_ZDataBuffer/0 123185 121572 803.3MB/s html +1.3% BM_ZDataBuffer/1 1569111 1589380 421.3MB/s urls -1.3% BM_ZDataBuffer/2 53143 49556 2.4GB/s jpg +7.2% BM_ZDataBuffer/3 65725 66826 1.3GB/s pdf -1.6% BM_ZDataBuffer/4 517871 514750 758.9MB/s html4 +0.6% Sum of all benchmarks 20258879 20315484 -0.3% AMD Instanbul 2.4 GHz: Benchmark Base (ns) New (ns) Improvement ------------------------------------------------------------------------------------------------- BM_UFlat/0 97120 96585 1011.1MB/s html +0.6% BM_UFlat/1 917473 948016 706.3MB/s urls -3.2% BM_UFlat/2 21496 23938 4.9GB/s jpg -10.2% BM_UFlat/3 44751 45639 1.9GB/s pdf -1.9% BM_UFlat/4 391950 391413 998.0MB/s html4 +0.1% BM_UFlat/5 37366 37201 630.7MB/s cp +0.4% BM_UFlat/6 18350 18318 580.5MB/s c +0.2% BM_UFlat/7 5672 5661 626.9MB/s lsp +0.2% BM_UFlat/8 1533390 1529441 642.1MB/s xls +0.3% BM_UFlat/9 335477 336553 431.0MB/s txt1 -0.3% BM_UFlat/10 285140 292080 408.7MB/s txt2 -2.4% BM_UFlat/11 888507 894758 454.9MB/s txt3 -0.7% BM_UFlat/12 1187643 1210928 379.5MB/s txt4 -1.9% BM_UFlat/13 493717 507447 964.5MB/s bin -2.7% BM_UFlat/14 61740 60870 599.1MB/s sum +1.4% BM_UFlat/15 7211 7187 560.9MB/s man +0.3% BM_UFlat/16 97435 93100 1.2GB/s pb +4.7% BM_UFlat/17 362662 356395 493.2MB/s gaviota +1.8% BM_UValidate/0 47475 47118 2.0GB/s html +0.8% BM_UValidate/1 501304 529741 1.2GB/s urls -5.4% BM_UValidate/2 276 243 486.2GB/s jpg +13.6% BM_UValidate/3 16361 16261 5.4GB/s pdf +0.6% BM_UValidate/4 190741 190353 2.0GB/s html4 +0.2% BM_UDataBuffer/0 111080 109771 889.6MB/s html +1.2% BM_UDataBuffer/1 1051035 1085999 616.5MB/s urls -3.2% BM_UDataBuffer/2 25801 25463 4.6GB/s jpg +1.3% BM_UDataBuffer/3 50493 49946 1.8GB/s pdf +1.1% BM_UDataBuffer/4 447258 444138 879.5MB/s html4 +0.7% BM_UCord/0 109350 107909 905.0MB/s html +1.3% BM_UCord/1 1023396 1054964 634.7MB/s urls -3.0% BM_UCord/2 25292 24371 4.9GB/s jpg +3.8% BM_UCord/3 48955 49736 1.8GB/s pdf -1.6% BM_UCord/4 440452 437331 893.2MB/s html4 +0.7% BM_UCordString/0 98511 98031 996.2MB/s html +0.5% BM_UCordString/1 933230 963495 694.9MB/s urls -3.1% BM_UCordString/2 23311 24076 4.9GB/s jpg -3.2% BM_UCordString/3 45568 46196 1.9GB/s pdf -1.4% BM_UCordString/4 397791 396934 984.1MB/s html4 +0.2% BM_UCordValidate/0 47537 46921 2.0GB/s html +1.3% BM_UCordValidate/1 505071 532716 1.2GB/s urls -5.2% BM_UCordValidate/2 1663 1621 72.9GB/s jpg +2.6% BM_UCordValidate/3 16890 16926 5.2GB/s pdf -0.2% BM_UCordValidate/4 192365 191984 2.0GB/s html4 +0.2% BM_ZFlat/0 184708 179103 545.3MB/s html (22.31 %) +3.1% BM_ZFlat/1 2293864 2302950 290.7MB/s urls (47.77 %) -0.4% BM_ZFlat/2 52852 47618 2.5GB/s jpg (99.87 %) +11.0% BM_ZFlat/3 100766 96179 935.3MB/s pdf (82.07 %) +4.8% BM_ZFlat/4 741220 727977 536.6MB/s html4 (22.51 %) +1.8% BM_ZFlat/5 85402 85418 274.7MB/s cp (48.12 %) -0.0% BM_ZFlat/6 36558 36494 291.4MB/s c (42.40 %) +0.2% BM_ZFlat/7 12706 12507 283.7MB/s lsp (48.37 %) +1.6% BM_ZFlat/8 2336823 2335688 420.5MB/s xls (41.23 %) +0.0% BM_ZFlat/9 701804 681153 212.9MB/s txt1 (57.87 %) +3.0% BM_ZFlat/10 606700 597194 199.9MB/s txt2 (61.93 %) +1.6% BM_ZFlat/11 1852283 1803238 225.7MB/s txt3 (54.92 %) +2.7% BM_ZFlat/12 2475527 2443354 188.1MB/s txt4 (66.22 %) +1.3% BM_ZFlat/13 694497 696654 702.6MB/s bin (18.11 %) -0.3% BM_ZFlat/14 136929 129855 280.8MB/s sum (48.96 %) +5.4% BM_ZFlat/15 17172 17124 235.4MB/s man (59.36 %) +0.3% BM_ZFlat/16 190364 171763 658.4MB/s pb (19.64 %) +10.8% BM_ZFlat/17 567285 555190 316.6MB/s gaviota (37.72 %) +2.2% BM_ZCord/0 193490 187031 522.1MB/s html +3.5% BM_ZCord/1 2427537 2415315 277.2MB/s urls +0.5% BM_ZCord/2 85378 81412 1.5GB/s jpg +4.9% BM_ZCord/3 121898 119419 753.3MB/s pdf +2.1% BM_ZCord/4 779564 762961 512.0MB/s html4 +2.2% BM_ZDataBuffer/0 213820 207272 471.1MB/s html +3.2% BM_ZDataBuffer/1 2589010 2586495 258.9MB/s urls +0.1% BM_ZDataBuffer/2 121871 118885 1018.4MB/s jpg +2.5% BM_ZDataBuffer/3 145382 145986 616.2MB/s pdf -0.4% BM_ZDataBuffer/4 868117 852754 458.1MB/s html4 +1.8% Sum of all benchmarks 33771833 33744763 +0.1% ------------------------------------------------------------------------ r70 | snappy.mirrorbot@gmail.com | 2013-01-06 20:21:26 +0100 (Sun, 06 Jan 2013) | 6 lines Adjust the Snappy open-source distribution for the changes in Google's internal file API. R=sanjay ------------------------------------------------------------------------ r69 | snappy.mirrorbot@gmail.com | 2013-01-04 12:54:20 +0100 (Fri, 04 Jan 2013) | 15 lines Change a few ORs to additions where they don't matter. This helps the compiler use the LEA instruction more efficiently, since e.g. a + (b << 2) can be encoded as one instruction. Even more importantly, it can constant-fold the COPY_* enums together with the shifted negative constants, which also saves some instructions. (We don't need it for LITERAL, since it happens to be 0.) I am unsure why the compiler couldn't do this itself, but the theory is that it cannot prove that len-1 and len-4 cannot underflow/wrap, and thus can't do the optimization safely. The gains are small but measurable; 0.5-1.0% over the BM_Z* benchmarks (measured on Westmere, Sandy Bridge and Istanbul). R=sanjay ------------------------------------------------------------------------ r68 | snappy.mirrorbot@gmail.com | 2012-10-08 13:37:16 +0200 (Mon, 08 Oct 2012) | 5 lines Stop giving -Werror to automake, due to an incompatibility between current versions of libtool and automake on non-GNU platforms (e.g. Mac OS X). R=sanjay ------------------------------------------------------------------------ r67 | snappy.mirrorbot@gmail.com | 2012-08-17 15:54:47 +0200 (Fri, 17 Aug 2012) | 5 lines Fix public issue 66: Document GetUncompressedLength better, in particular that it leaves the source in a state that's not appropriate for RawUncompress. R=sanjay ------------------------------------------------------------------------ r66 | snappy.mirrorbot@gmail.com | 2012-07-31 13:44:44 +0200 (Tue, 31 Jul 2012) | 5 lines Fix public issue 64: Check for at configure time, since MSVC seemingly does not have it. R=sanjay ------------------------------------------------------------------------ r65 | snappy.mirrorbot@gmail.com | 2012-07-04 11:34:48 +0200 (Wed, 04 Jul 2012) | 10 lines Handle the case where gettimeofday() goes backwards or returns the same value twice; it could cause division by zero in the unit test framework. (We already had one fix for this in place, but it was incomplete.) This could in theory happen on any system, since there are few guarantees about gettimeofday(), but seems to only happen in practice on GNU/Hurd, where gettimeofday() is cached and only updated ever so often. R=sanjay ------------------------------------------------------------------------ r64 | snappy.mirrorbot@gmail.com | 2012-07-04 11:28:33 +0200 (Wed, 04 Jul 2012) | 6 lines Mark ARMv4 as not supporting unaligned accesses (not just ARMv5 and ARMv6); apparently Debian still targets these by default, giving us segfaults on armel. R=sanjay ------------------------------------------------------------------------ r63 | snappy.mirrorbot@gmail.com | 2012-05-22 11:46:05 +0200 (Tue, 22 May 2012) | 5 lines Fix public bug #62: Remove an extraneous comma at the end of an enum list, causing compile errors when embedded in Mozilla on OpenBSD. R=sanjay ------------------------------------------------------------------------ r62 | snappy.mirrorbot@gmail.com | 2012-05-22 11:32:50 +0200 (Tue, 22 May 2012) | 8 lines Snappy library no longer depends on iostream. Achieved by moving logging macro definitions to a test-only header file, and by changing non-test code to use assert, fprintf, and abort instead of LOG/CHECK macros. R=sesse ------------------------------------------------------------------------ r61 | snappy.mirrorbot@gmail.com | 2012-02-24 16:46:37 +0100 (Fri, 24 Feb 2012) | 4 lines Release Snappy 1.0.5. R=sanjay ------------------------------------------------------------------------ r60 | snappy.mirrorbot@gmail.com | 2012-02-23 18:00:36 +0100 (Thu, 23 Feb 2012) | 57 lines For 32-bit platforms, do not try to accelerate multiple neighboring 32-bit loads with a 64-bit load during compression (it's not a win). The main target for this optimization is ARM, but 32-bit x86 gets a small gain, too, although there is noise in the microbenchmarks. It's a no-op for 64-bit x86. It does not affect decompression. Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from Ubuntu/Linaro), -O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 -mthumb-interwork, minimum 1000 iterations: Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_ZFlat/0 1158277 1160000 1000 84.2MB/s html (23.57 %) [ +4.3%] BM_ZFlat/1 14861782 14860000 1000 45.1MB/s urls (50.89 %) [ +1.1%] BM_ZFlat/2 393595 390000 1000 310.5MB/s jpg (99.88 %) [ +0.0%] BM_ZFlat/3 650583 650000 1000 138.4MB/s pdf (82.13 %) [ +3.1%] BM_ZFlat/4 4661480 4660000 1000 83.8MB/s html4 (23.55 %) [ +4.3%] BM_ZFlat/5 491973 490000 1000 47.9MB/s cp (48.12 %) [ +2.0%] BM_ZFlat/6 193575 192678 1038 55.2MB/s c (42.40 %) [ +9.0%] BM_ZFlat/7 62343 62754 3187 56.5MB/s lsp (48.37 %) [ +2.6%] BM_ZFlat/8 17708468 17710000 1000 55.5MB/s xls (41.34 %) [ -0.3%] BM_ZFlat/9 3755345 3760000 1000 38.6MB/s txt1 (59.81 %) [ +8.2%] BM_ZFlat/10 3324217 3320000 1000 36.0MB/s txt2 (64.07 %) [ +4.2%] BM_ZFlat/11 10139932 10140000 1000 40.1MB/s txt3 (57.11 %) [ +6.4%] BM_ZFlat/12 13532109 13530000 1000 34.0MB/s txt4 (68.35 %) [ +5.0%] BM_ZFlat/13 4690847 4690000 1000 104.4MB/s bin (18.21 %) [ +4.1%] BM_ZFlat/14 830682 830000 1000 43.9MB/s sum (51.88 %) [ +1.2%] BM_ZFlat/15 84784 85011 2235 47.4MB/s man (59.36 %) [ +1.1%] BM_ZFlat/16 1293254 1290000 1000 87.7MB/s pb (23.15 %) [ +2.3%] BM_ZFlat/17 2775155 2780000 1000 63.2MB/s gaviota (38.27 %) [+12.2%] Core i7 in 32-bit mode (only one run and 100 iterations, though, so noisy): Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_ZFlat/0 227582 223464 3043 437.0MB/s html (23.57 %) [ +7.4%] BM_ZFlat/1 2982430 2918455 233 229.4MB/s urls (50.89 %) [ +2.9%] BM_ZFlat/2 46967 46658 15217 2.5GB/s jpg (99.88 %) [ +0.0%] BM_ZFlat/3 115298 114864 5833 783.2MB/s pdf (82.13 %) [ +1.5%] BM_ZFlat/4 913440 899743 778 434.2MB/s html4 (23.55 %) [ +0.3%] BM_ZFlat/5 110302 108571 7000 216.1MB/s cp (48.12 %) [ +0.0%] BM_ZFlat/6 44409 43372 15909 245.2MB/s c (42.40 %) [ +0.8%] BM_ZFlat/7 15713 15643 46667 226.9MB/s lsp (48.37 %) [ +2.7%] BM_ZFlat/8 2625539 2602230 269 377.4MB/s xls (41.34 %) [ +1.4%] BM_ZFlat/9 808884 811429 875 178.8MB/s txt1 (59.81 %) [ -3.9%] BM_ZFlat/10 709532 700000 1000 170.5MB/s txt2 (64.07 %) [ +0.0%] BM_ZFlat/11 2177682 2162162 333 188.2MB/s txt3 (57.11 %) [ -1.4%] BM_ZFlat/12 2849640 2840000 250 161.8MB/s txt4 (68.35 %) [ -1.4%] BM_ZFlat/13 849760 835476 778 585.8MB/s bin (18.21 %) [ +1.2%] BM_ZFlat/14 165940 164571 4375 221.6MB/s sum (51.88 %) [ +1.4%] BM_ZFlat/15 20939 20571 35000 196.0MB/s man (59.36 %) [ +2.1%] BM_ZFlat/16 239209 236544 2917 478.1MB/s pb (23.15 %) [ +4.2%] BM_ZFlat/17 616206 610000 1000 288.2MB/s gaviota (38.27 %) [ -1.6%] R=sanjay ------------------------------------------------------------------------ r59 | snappy.mirrorbot@gmail.com | 2012-02-21 18:02:17 +0100 (Tue, 21 Feb 2012) | 107 lines Enable the use of unaligned loads and stores for ARM-based architectures where they are available (ARMv7 and higher). This gives a significant speed boost on ARM, both for compression and decompression. It should not affect x86 at all. There are more changes possible to speed up ARM, but it might not be that easy to do without hurting x86 or making the code uglier. Also, we de not try to use NEON yet. Microbenchmark results on a Cortex-A9 1GHz, using g++ 4.6.2 (from Ubuntu/Linaro), -O2 -DNDEBUG -Wa,-march=armv7a -mtune=cortex-a9 -mthumb-interwork: Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_UFlat/0 524806 529100 378 184.6MB/s html [+33.6%] BM_UFlat/1 5139790 5200000 100 128.8MB/s urls [+28.8%] BM_UFlat/2 86540 84166 1901 1.4GB/s jpg [ +0.6%] BM_UFlat/3 215351 210176 904 428.0MB/s pdf [+29.8%] BM_UFlat/4 2144490 2100000 100 186.0MB/s html4 [+33.3%] BM_UFlat/5 194482 190000 1000 123.5MB/s cp [+36.2%] BM_UFlat/6 91843 90175 2107 117.9MB/s c [+38.6%] BM_UFlat/7 28535 28426 6684 124.8MB/s lsp [+34.7%] BM_UFlat/8 9206600 9200000 100 106.7MB/s xls [+42.4%] BM_UFlat/9 1865273 1886792 106 76.9MB/s txt1 [+32.5%] BM_UFlat/10 1576809 1587301 126 75.2MB/s txt2 [+32.3%] BM_UFlat/11 4968450 4900000 100 83.1MB/s txt3 [+32.7%] BM_UFlat/12 6673970 6700000 100 68.6MB/s txt4 [+32.8%] BM_UFlat/13 2391470 2400000 100 203.9MB/s bin [+29.2%] BM_UFlat/14 334601 344827 522 105.8MB/s sum [+30.6%] BM_UFlat/15 37404 38080 5252 105.9MB/s man [+33.8%] BM_UFlat/16 535470 540540 370 209.2MB/s pb [+31.2%] BM_UFlat/17 1875245 1886792 106 93.2MB/s gaviota [+37.8%] BM_UValidate/0 178425 179533 1114 543.9MB/s html [ +2.7%] BM_UValidate/1 2100450 2000000 100 334.8MB/s urls [ +5.0%] BM_UValidate/2 1039 1044 172413 113.3GB/s jpg [ +3.4%] BM_UValidate/3 59423 59470 3363 1.5GB/s pdf [ +7.8%] BM_UValidate/4 760716 766283 261 509.8MB/s html4 [ +6.5%] BM_ZFlat/0 1204632 1204819 166 81.1MB/s html (23.57 %) [+32.8%] BM_ZFlat/1 15656190 15600000 100 42.9MB/s urls (50.89 %) [+27.6%] BM_ZFlat/2 403336 410677 487 294.8MB/s jpg (99.88 %) [+16.5%] BM_ZFlat/3 664073 671140 298 134.0MB/s pdf (82.13 %) [+28.4%] BM_ZFlat/4 4961940 4900000 100 79.7MB/s html4 (23.55 %) [+30.6%] BM_ZFlat/5 500664 501253 399 46.8MB/s cp (48.12 %) [+33.4%] BM_ZFlat/6 217276 215982 926 49.2MB/s c (42.40 %) [+25.0%] BM_ZFlat/7 64122 65487 3054 54.2MB/s lsp (48.37 %) [+36.1%] BM_ZFlat/8 18045730 18000000 100 54.6MB/s xls (41.34 %) [+34.4%] BM_ZFlat/9 4051530 4000000 100 36.3MB/s txt1 (59.81 %) [+25.0%] BM_ZFlat/10 3451800 3500000 100 34.1MB/s txt2 (64.07 %) [+25.7%] BM_ZFlat/11 11052340 11100000 100 36.7MB/s txt3 (57.11 %) [+24.3%] BM_ZFlat/12 14538690 14600000 100 31.5MB/s txt4 (68.35 %) [+24.7%] BM_ZFlat/13 5041850 5000000 100 97.9MB/s bin (18.21 %) [+32.0%] BM_ZFlat/14 908840 909090 220 40.1MB/s sum (51.88 %) [+22.2%] BM_ZFlat/15 86921 86206 1972 46.8MB/s man (59.36 %) [+42.2%] BM_ZFlat/16 1312315 1315789 152 86.0MB/s pb (23.15 %) [+34.5%] BM_ZFlat/17 3173120 3200000 100 54.9MB/s gaviota (38.27%) [+28.1%] The move from 64-bit to 32-bit operations for the copies also affected 32-bit x86; positive on the decompression side, and slightly negative on the compression side (unless that is noise; I only ran once): Benchmark Time(ns) CPU(ns) Iterations ----------------------------------------------------- BM_UFlat/0 86279 86140 7778 1.1GB/s html [ +7.5%] BM_UFlat/1 839265 822622 778 813.9MB/s urls [ +9.4%] BM_UFlat/2 9180 9143 87500 12.9GB/s jpg [ +1.2%] BM_UFlat/3 35080 35000 20000 2.5GB/s pdf [+10.1%] BM_UFlat/4 350318 345000 2000 1.1GB/s html4 [ +7.0%] BM_UFlat/5 33808 33472 21212 701.0MB/s cp [ +9.0%] BM_UFlat/6 15201 15214 46667 698.9MB/s c [+14.9%] BM_UFlat/7 4652 4651 159091 762.9MB/s lsp [ +7.5%] BM_UFlat/8 1285551 1282528 538 765.7MB/s xls [+10.7%] BM_UFlat/9 282510 281690 2414 514.9MB/s txt1 [+13.6%] BM_UFlat/10 243494 239286 2800 498.9MB/s txt2 [+14.4%] BM_UFlat/11 743625 740000 1000 550.0MB/s txt3 [+14.3%] BM_UFlat/12 999441 989717 778 464.3MB/s txt4 [+16.1%] BM_UFlat/13 412402 410076 1707 1.2GB/s bin [ +7.3%] BM_UFlat/14 54876 54000 10000 675.3MB/s sum [+13.0%] BM_UFlat/15 6146 6100 100000 660.8MB/s man [+14.8%] BM_UFlat/16 90496 90286 8750 1.2GB/s pb [ +4.0%] BM_UFlat/17 292650 292000 2500 602.0MB/s gaviota [+18.1%] BM_UValidate/0 49620 49699 14286 1.9GB/s html [ +0.0%] BM_UValidate/1 501371 500000 1000 1.3GB/s urls [ +0.0%] BM_UValidate/2 232 227 3043478 521.5GB/s jpg [ +1.3%] BM_UValidate/3 17250 17143 43750 5.1GB/s pdf [ -1.3%] BM_UValidate/4 198643 200000 3500 1.9GB/s html4 [ -0.9%] BM_ZFlat/0 227128 229415 3182 425.7MB/s html (23.57 %) [ -1.4%] BM_ZFlat/1 2970089 2960000 250 226.2MB/s urls (50.89 %) [ -1.9%] BM_ZFlat/2 45683 44999 15556 2.6GB/s jpg (99.88 %) [ +2.2%] BM_ZFlat/3 114661 113136 6364 795.1MB/s pdf (82.13 %) [ -1.5%] BM_ZFlat/4 919702 914286 875 427.2MB/s html4 (23.55%) [ -1.3%] BM_ZFlat/5 108189 108422 6364 216.4MB/s cp (48.12 %) [ -1.2%] BM_ZFlat/6 44525 44000 15909 241.7MB/s c (42.40 %) [ -2.9%] BM_ZFlat/7 15973 15857 46667 223.8MB/s lsp (48.37 %) [ +0.0%] BM_ZFlat/8 2677888 2639405 269 372.1MB/s xls (41.34 %) [ -1.4%] BM_ZFlat/9 800715 780000 1000 186.0MB/s txt1 (59.81 %) [ -0.4%] BM_ZFlat/10 700089 700000 1000 170.5MB/s txt2 (64.07 %) [ -2.9%] BM_ZFlat/11 2159356 2138365 318 190.3MB/s txt3 (57.11 %) [ -0.3%] BM_ZFlat/12 2796143 2779923 259 165.3MB/s txt4 (68.35 %) [ -1.4%] BM_ZFlat/13 856458 835476 778 585.8MB/s bin (18.21 %) [ -0.1%] BM_ZFlat/14 166908 166857 4375 218.6MB/s sum (51.88 %) [ -1.4%] BM_ZFlat/15 21181 20857 35000 193.3MB/s man (59.36 %) [ -0.8%] BM_ZFlat/16 244009 239973 2917 471.3MB/s pb (23.15 %) [ -1.4%] BM_ZFlat/17 596362 590000 1000 297.9MB/s gaviota (38.27%) [ +0.0%] R=sanjay ------------------------------------------------------------------------ r58 | snappy.mirrorbot@gmail.com | 2012-02-11 23:11:22 +0100 (Sat, 11 Feb 2012) | 9 lines Lower the size allocated in the "corrupted input" unit test from 256 MB to 2 MB. This fixes issues with running the unit test on platforms with little RAM (e.g. some ARM boards). Also, reactivate the 2 MB test for 64-bit platforms; there's no good reason why it shouldn't be. R=sanjay ------------------------------------------------------------------------ r57 | snappy.mirrorbot@gmail.com | 2012-01-08 18:55:48 +0100 (Sun, 08 Jan 2012) | 2 lines Minor refactoring to accomodate changes in Google's internal code tree. ------------------------------------------------------------------------ r56 | snappy.mirrorbot@gmail.com | 2012-01-04 14:10:46 +0100 (Wed, 04 Jan 2012) | 19 lines Fix public issue r57: Fix most warnings with -Wall, mostly signed/unsigned warnings. There are still some in the unit test, but the main .cc file should be clean. We haven't enabled -Wall for the default build, since the unit test is still not clean. This also fixes a real bug in the open-source implementation of ReadFileToStringOrDie(); it would not detect errors correctly. I had to go through some pains to avoid performance loss as the types were changed; I think there might still be some with 32-bit if and only if LFS is enabled (ie., size_t is 64-bit), but for regular 32-bit and 64-bit I can't see any losses, and I've diffed the generated GCC assembler between the old and new code without seeing any significant choices. If anything, it's ever so slightly faster. This may or may not enable compression of very large blocks (>2^32 bytes) when size_t is 64-bit, but I haven't checked, and it is still not a supported case. ------------------------------------------------------------------------ r55 | snappy.mirrorbot@gmail.com | 2012-01-04 11:46:39 +0100 (Wed, 04 Jan 2012) | 6 lines Add a framing format description. We do not have any implementation of this at the current point, but there seems to be enough of a general interest in the topic (cf. public bug #34). R=csilvers,sanjay ------------------------------------------------------------------------ r54 | snappy.mirrorbot@gmail.com | 2011-12-05 22:27:26 +0100 (Mon, 05 Dec 2011) | 81 lines Speed up decompression by moving the refill check to the end of the loop. This seems to work because in most of the branches, the compiler can evaluate “ip_limit_ - ip†in a more efficient way than reloading ip_limit_ from memory (either by already having the entire expression in a register, or reconstructing it from “availâ€, or something else). Memory loads, even from L1, are seemingly costly in the big picture at the current decompression speeds. Microbenchmarks (64-bit, opt mode): Westmere (Intel Core i7): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 74492 74491 187894 1.3GB/s html [ +5.9%] BM_UFlat/1 712268 712263 19644 940.0MB/s urls [ +3.8%] BM_UFlat/2 10591 10590 1000000 11.2GB/s jpg [ -6.8%] BM_UFlat/3 29643 29643 469915 3.0GB/s pdf [ +7.9%] BM_UFlat/4 304669 304667 45930 1.3GB/s html4 [ +4.8%] BM_UFlat/5 28508 28507 490077 823.1MB/s cp [ +4.0%] BM_UFlat/6 12415 12415 1000000 856.5MB/s c [ +8.6%] BM_UFlat/7 3415 3415 4084723 1039.0MB/s lsp [+18.0%] BM_UFlat/8 979569 979563 14261 1002.5MB/s xls [ +5.8%] BM_UFlat/9 230150 230148 60934 630.2MB/s txt1 [ +5.2%] BM_UFlat/10 197167 197166 71135 605.5MB/s txt2 [ +4.7%] BM_UFlat/11 607394 607390 23041 670.1MB/s txt3 [ +5.6%] BM_UFlat/12 808502 808496 17316 568.4MB/s txt4 [ +5.0%] BM_UFlat/13 372791 372788 37564 1.3GB/s bin [ +3.3%] BM_UFlat/14 44541 44541 313969 818.8MB/s sum [ +5.7%] BM_UFlat/15 4833 4833 2898697 834.1MB/s man [ +4.8%] BM_UFlat/16 79855 79855 175356 1.4GB/s pb [ +4.8%] BM_UFlat/17 245845 245843 56838 715.0MB/s gaviota [ +5.8%] Clovertown (Intel Core 2): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 107911 107890 100000 905.1MB/s html [ +2.2%] BM_UFlat/1 1011237 1011041 10000 662.3MB/s urls [ +2.5%] BM_UFlat/2 26775 26770 523089 4.4GB/s jpg [ +0.0%] BM_UFlat/3 48103 48095 290618 1.8GB/s pdf [ +3.4%] BM_UFlat/4 437724 437644 31937 892.6MB/s html4 [ +2.1%] BM_UFlat/5 39607 39600 358284 592.5MB/s cp [ +2.4%] BM_UFlat/6 18227 18224 768191 583.5MB/s c [ +2.7%] BM_UFlat/7 5171 5170 2709437 686.4MB/s lsp [ +3.9%] BM_UFlat/8 1560291 1559989 8970 629.5MB/s xls [ +3.6%] BM_UFlat/9 335401 335343 41731 432.5MB/s txt1 [ +3.0%] BM_UFlat/10 287014 286963 48758 416.0MB/s txt2 [ +2.8%] BM_UFlat/11 888522 888356 15752 458.1MB/s txt3 [ +2.9%] BM_UFlat/12 1186600 1186378 10000 387.3MB/s txt4 [ +3.1%] BM_UFlat/13 572295 572188 24468 855.4MB/s bin [ +2.1%] BM_UFlat/14 64060 64049 218401 569.4MB/s sum [ +4.1%] BM_UFlat/15 7264 7263 1916168 555.0MB/s man [ +1.4%] BM_UFlat/16 108853 108836 100000 1039.1MB/s pb [ +1.7%] BM_UFlat/17 364289 364223 38419 482.6MB/s gaviota [ +4.9%] Barcelona (AMD Opteron): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 103900 103871 100000 940.2MB/s html [ +8.3%] BM_UFlat/1 1000435 1000107 10000 669.5MB/s urls [ +6.6%] BM_UFlat/2 24659 24652 567362 4.8GB/s jpg [ +0.1%] BM_UFlat/3 48206 48193 291121 1.8GB/s pdf [ +5.0%] BM_UFlat/4 421980 421850 33174 926.0MB/s html4 [ +7.3%] BM_UFlat/5 40368 40357 346994 581.4MB/s cp [ +8.7%] BM_UFlat/6 19836 19830 708695 536.2MB/s c [ +8.0%] BM_UFlat/7 6100 6098 2292774 581.9MB/s lsp [ +9.0%] BM_UFlat/8 1693093 1692514 8261 580.2MB/s xls [ +8.0%] BM_UFlat/9 365991 365886 38225 396.4MB/s txt1 [ +7.1%] BM_UFlat/10 311330 311238 44950 383.6MB/s txt2 [ +7.6%] BM_UFlat/11 975037 974737 14376 417.5MB/s txt3 [ +6.9%] BM_UFlat/12 1303558 1303175 10000 352.6MB/s txt4 [ +7.3%] BM_UFlat/13 517448 517290 27144 946.2MB/s bin [ +5.5%] BM_UFlat/14 66537 66518 210352 548.3MB/s sum [ +7.5%] BM_UFlat/15 7976 7974 1760383 505.6MB/s man [ +5.6%] BM_UFlat/16 103121 103092 100000 1097.0MB/s pb [ +8.7%] BM_UFlat/17 391431 391314 35733 449.2MB/s gaviota [ +6.5%] R=sanjay ------------------------------------------------------------------------ r53 | snappy.mirrorbot@gmail.com | 2011-11-23 12:14:17 +0100 (Wed, 23 Nov 2011) | 88 lines Speed up decompression by making the fast path for literals faster. We do the fast-path step as soon as possible; in fact, as soon as we know the literal length. Since we usually hit the fast path, we can then skip the checks for long literals and available input space (beyond what the fast path check already does). Note that this changes the decompression Writer API; however, it does not change the ABI, since writers are always templatized and as such never cross compilation units. The new API is slightly more general, in that it doesn't hard-code the value 16. Note that we also take care to check for len <= 16 first, since the other two checks almost always succeed (so we don't want to waste time checking for them until we have to). The improvements are most marked on Nehalem, but are generally positive on other platforms as well. All microbenchmarks are 64-bit, opt. Clovertown (Core 2): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 110226 110224 100000 886.0MB/s html [ +1.5%] BM_UFlat/1 1036523 1036508 10000 646.0MB/s urls [ -0.8%] BM_UFlat/2 26775 26775 522570 4.4GB/s jpg [ +0.0%] BM_UFlat/3 49738 49737 280974 1.8GB/s pdf [ +0.3%] BM_UFlat/4 446790 446792 31334 874.3MB/s html4 [ +0.8%] BM_UFlat/5 40561 40562 350424 578.5MB/s cp [ +1.3%] BM_UFlat/6 18722 18722 746903 568.0MB/s c [ +1.4%] BM_UFlat/7 5373 5373 2608632 660.5MB/s lsp [ +8.3%] BM_UFlat/8 1615716 1615718 8670 607.8MB/s xls [ +2.0%] BM_UFlat/9 345278 345281 40481 420.1MB/s txt1 [ +1.4%] BM_UFlat/10 294855 294855 47452 404.9MB/s txt2 [ +1.6%] BM_UFlat/11 914263 914263 15316 445.2MB/s txt3 [ +1.1%] BM_UFlat/12 1222694 1222691 10000 375.8MB/s txt4 [ +1.4%] BM_UFlat/13 584495 584489 23954 837.4MB/s bin [ -0.6%] BM_UFlat/14 66662 66662 210123 547.1MB/s sum [ +1.2%] BM_UFlat/15 7368 7368 1881856 547.1MB/s man [ +4.0%] BM_UFlat/16 110727 110726 100000 1021.4MB/s pb [ +2.3%] BM_UFlat/17 382138 382141 36616 460.0MB/s gaviota [ -0.7%] Westmere (Core i7): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 78861 78853 177703 1.2GB/s html [ +2.1%] BM_UFlat/1 739560 739491 18912 905.4MB/s urls [ +3.4%] BM_UFlat/2 9867 9866 1419014 12.0GB/s jpg [ +3.4%] BM_UFlat/3 31989 31986 438385 2.7GB/s pdf [ +0.2%] BM_UFlat/4 319406 319380 43771 1.2GB/s html4 [ +1.9%] BM_UFlat/5 29639 29636 472862 791.7MB/s cp [ +5.2%] BM_UFlat/6 13478 13477 1000000 789.0MB/s c [ +2.3%] BM_UFlat/7 4030 4029 3475364 880.7MB/s lsp [ +8.7%] BM_UFlat/8 1036585 1036492 10000 947.5MB/s xls [ +6.9%] BM_UFlat/9 242127 242105 57838 599.1MB/s txt1 [ +3.0%] BM_UFlat/10 206499 206480 67595 578.2MB/s txt2 [ +3.4%] BM_UFlat/11 641635 641570 21811 634.4MB/s txt3 [ +2.4%] BM_UFlat/12 848847 848769 16443 541.4MB/s txt4 [ +3.1%] BM_UFlat/13 384968 384938 36366 1.2GB/s bin [ +0.3%] BM_UFlat/14 47106 47101 297770 774.3MB/s sum [ +4.4%] BM_UFlat/15 5063 5063 2772202 796.2MB/s man [ +7.7%] BM_UFlat/16 83663 83656 167697 1.3GB/s pb [ +1.8%] BM_UFlat/17 260224 260198 53823 675.6MB/s gaviota [ -0.5%] Barcelona (Opteron): Benchmark Time(ns) CPU(ns) Iterations -------------------------------------------- BM_UFlat/0 112490 112457 100000 868.4MB/s html [ -0.4%] BM_UFlat/1 1066719 1066339 10000 627.9MB/s urls [ +1.0%] BM_UFlat/2 24679 24672 563802 4.8GB/s jpg [ +0.7%] BM_UFlat/3 50603 50589 277285 1.7GB/s pdf [ +2.6%] BM_UFlat/4 452982 452849 30900 862.6MB/s html4 [ -0.2%] BM_UFlat/5 43860 43848 319554 535.1MB/s cp [ +1.2%] BM_UFlat/6 21419 21413 653573 496.6MB/s c [ +1.0%] BM_UFlat/7 6646 6645 2105405 534.1MB/s lsp [ +0.3%] BM_UFlat/8 1828487 1827886 7658 537.3MB/s xls [ +2.6%] BM_UFlat/9 391824 391714 35708 370.3MB/s txt1 [ +2.2%] BM_UFlat/10 334913 334816 41885 356.6MB/s txt2 [ +1.7%] BM_UFlat/11 1042062 1041674 10000 390.7MB/s txt3 [ +1.1%] BM_UFlat/12 1398902 1398456 10000 328.6MB/s txt4 [ +1.7%] BM_UFlat/13 545706 545530 25669 897.2MB/s bin [ -0.4%] BM_UFlat/14 71512 71505 196035 510.0MB/s sum [ +1.4%] BM_UFlat/15 8422 8421 1665036 478.7MB/s man [ +2.6%] BM_UFlat/16 112053 112048 100000 1009.3MB/s pb [ -0.4%] BM_UFlat/17 416723 416713 33612 421.8MB/s gaviota [ -2.0%] R=sanjay ------------------------------------------------------------------------ r52 | snappy.mirrorbot@gmail.com | 2011-11-08 15:46:39 +0100 (Tue, 08 Nov 2011) | 5 lines Fix public issue #53: Update the README to the API we actually open-sourced with. R=sanjay ------------------------------------------------------------------------ r51 | snappy.mirrorbot@gmail.com | 2011-10-05 14:27:12 +0200 (Wed, 05 Oct 2011) | 5 lines In the format description, use a clearer example to emphasize that varints are stored in little-endian. Patch from Christian von Roques. R=csilvers ------------------------------------------------------------------------ r50 | snappy.mirrorbot@gmail.com | 2011-09-15 21:34:06 +0200 (Thu, 15 Sep 2011) | 4 lines Release Snappy 1.0.4. R=sanjay ------------------------------------------------------------------------ r49 | snappy.mirrorbot@gmail.com | 2011-09-15 11:50:05 +0200 (Thu, 15 Sep 2011) | 5 lines Fix public issue #50: Include generic byteswap macros. Also include Solaris 10 and FreeBSD versions. R=csilvers ------------------------------------------------------------------------ r48 | snappy.mirrorbot@gmail.com | 2011-08-10 20:57:27 +0200 (Wed, 10 Aug 2011) | 5 lines Partially fix public issue 50: Remove an extra comma from the end of some enum declarations, as it seems the Sun compiler does not like it. Based on patch by Travis Vitek. ------------------------------------------------------------------------ r47 | snappy.mirrorbot@gmail.com | 2011-08-10 20:44:16 +0200 (Wed, 10 Aug 2011) | 4 lines Use the right #ifdef test for sys/mman.h. Based on patch by Travis Vitek. ------------------------------------------------------------------------ r46 | snappy.mirrorbot@gmail.com | 2011-08-10 03:22:09 +0200 (Wed, 10 Aug 2011) | 6 lines Fix public issue #47: Small comment cleanups in the unit test. Originally based on a patch by Patrick Pelletier. R=sanjay ------------------------------------------------------------------------ r45 | snappy.mirrorbot@gmail.com | 2011-08-10 03:14:43 +0200 (Wed, 10 Aug 2011) | 8 lines Fix public issue #46: Format description said "3-byte offset" instead of "4-byte offset" for the longest copies. Also fix an inconsistency in the heading for section 2.2.3. Both patches by Patrick Pelletier. R=csilvers ------------------------------------------------------------------------ r44 | snappy.mirrorbot@gmail.com | 2011-06-28 13:40:25 +0200 (Tue, 28 Jun 2011) | 8 lines Fix public issue #44: Make the definition and declaration of CompressFragment identical, even regarding cv-qualifiers. This is required to work around a bug in the Solaris Studio C++ compiler (it does not properly disregard cv-qualifiers when doing name mangling). R=sanjay ------------------------------------------------------------------------ r43 | snappy.mirrorbot@gmail.com | 2011-06-04 12:19:05 +0200 (Sat, 04 Jun 2011) | 7 lines Correct an inaccuracy in the Snappy format description. (I stumbled into this when changing the way we decompress literals.) R=csilvers Revision created by MOE tool push_codebase. ------------------------------------------------------------------------ r42 | snappy.mirrorbot@gmail.com | 2011-06-03 22:53:06 +0200 (Fri, 03 Jun 2011) | 50 lines Speed up decompression by removing a fast-path attempt. Whenever we try to enter a copy fast-path, there is a certain cost in checking that all the preconditions are in place, but it's normally offset by the fact that we can usually take the cheaper path. However, in a certain path we've already established that "avail < literal_length", which usually means that either the available space is small, or the literal is big. Both will disqualify us from taking the fast path, and thus we take the hit from the precondition checking without gaining much from having a fast path. Thus, simply don't try the fast path in this situation -- we're already on a slow path anyway (one where we need to refill more data from the reader). I'm a bit surprised at how much this gained; it could be that this path is more common than I thought, or that the simpler structure somehow makes the compiler happier. I haven't looked at the assembler, but it's a win across the board on both Core 2, Core i7 and Opteron, at least for the cases we typically care about. The gains seem to be the largest on Core i7, though. Results from my Core i7 workstation: Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_UFlat/0 73337 73091 190996 1.3GB/s html [ +1.7%] BM_UFlat/1 696379 693501 20173 965.5MB/s urls [ +2.7%] BM_UFlat/2 9765 9734 1472135 12.1GB/s jpg [ +0.7%] BM_UFlat/3 29720 29621 472973 3.0GB/s pdf [ +1.8%] BM_UFlat/4 294636 293834 47782 1.3GB/s html4 [ +2.3%] BM_UFlat/5 28399 28320 494700 828.5MB/s cp [ +3.5%] BM_UFlat/6 12795 12760 1000000 833.3MB/s c [ +1.2%] BM_UFlat/7 3984 3973 3526448 893.2MB/s lsp [ +5.7%] BM_UFlat/8 991996 989322 14141 992.6MB/s xls [ +3.3%] BM_UFlat/9 228620 227835 61404 636.6MB/s txt1 [ +4.0%] BM_UFlat/10 197114 196494 72165 607.5MB/s txt2 [ +3.5%] BM_UFlat/11 605240 603437 23217 674.4MB/s txt3 [ +3.7%] BM_UFlat/12 804157 802016 17456 573.0MB/s txt4 [ +3.9%] BM_UFlat/13 347860 346998 40346 1.4GB/s bin [ +1.2%] BM_UFlat/14 44684 44559 315315 818.4MB/s sum [ +2.3%] BM_UFlat/15 5120 5106 2739726 789.4MB/s man [ +3.3%] BM_UFlat/16 76591 76355 183486 1.4GB/s pb [ +2.8%] BM_UFlat/17 238564 237828 58824 739.1MB/s gaviota [ +1.6%] BM_UValidate/0 42194 42060 333333 2.3GB/s html [ -0.1%] BM_UValidate/1 433182 432005 32407 1.5GB/s urls [ -0.1%] BM_UValidate/2 197 196 71428571 603.3GB/s jpg [ +0.5%] BM_UValidate/3 14494 14462 972222 6.1GB/s pdf [ +0.5%] BM_UValidate/4 168444 167836 83832 2.3GB/s html4 [ +0.1%] R=jeff Revision created by MOE tool push_codebase. ------------------------------------------------------------------------ r41 | snappy.mirrorbot@gmail.com | 2011-06-03 22:47:14 +0200 (Fri, 03 Jun 2011) | 43 lines Speed up decompression by not needing a lookup table for literal items. Looking up into and decoding the values from char_table has long shown up as a hotspot in the decompressor. While it turns out that it's hard to make a more efficient decoder for the copy ops, the literals are simple enough that we can decode them without needing a table lookup. (This means that 1/4 of the table is now unused, although that in itself doesn't buy us anything.) The gains are small, but definitely present; some tests win as much as 10%, but 1-4% is more typical. These results are from Core i7, in 64-bit mode; Core 2 and Opteron show similar results. (I've run with more iterations than unusual to make sure the smaller gains don't drown entirely in noise.) Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_UFlat/0 74665 74428 182055 1.3GB/s html [ +3.1%] BM_UFlat/1 714106 711997 19663 940.4MB/s urls [ +4.4%] BM_UFlat/2 9820 9789 1427115 12.1GB/s jpg [ -1.2%] BM_UFlat/3 30461 30380 465116 2.9GB/s pdf [ +0.8%] BM_UFlat/4 301445 300568 46512 1.3GB/s html4 [ +2.2%] BM_UFlat/5 29338 29263 479452 801.8MB/s cp [ +1.6%] BM_UFlat/6 13004 12970 1000000 819.9MB/s c [ +2.1%] BM_UFlat/7 4180 4168 3349282 851.4MB/s lsp [ +1.3%] BM_UFlat/8 1026149 1024000 10000 959.0MB/s xls [+10.7%] BM_UFlat/9 237441 236830 59072 612.4MB/s txt1 [ +0.3%] BM_UFlat/10 203966 203298 69307 587.2MB/s txt2 [ +0.8%] BM_UFlat/11 627230 625000 22400 651.2MB/s txt3 [ +0.7%] BM_UFlat/12 836188 833979 16787 551.0MB/s txt4 [ +1.3%] BM_UFlat/13 351904 350750 39886 1.4GB/s bin [ +3.8%] BM_UFlat/14 45685 45562 308370 800.4MB/s sum [ +5.9%] BM_UFlat/15 5286 5270 2656546 764.9MB/s man [ +1.5%] BM_UFlat/16 78774 78544 178117 1.4GB/s pb [ +4.3%] BM_UFlat/17 242270 241345 58091 728.3MB/s gaviota [ +1.2%] BM_UValidate/0 42149 42000 333333 2.3GB/s html [ -3.0%] BM_UValidate/1 432741 431303 32483 1.5GB/s urls [ +7.8%] BM_UValidate/2 198 197 71428571 600.7GB/s jpg [+16.8%] BM_UValidate/3 14560 14521 965517 6.1GB/s pdf [ -4.1%] BM_UValidate/4 169065 168671 83832 2.3GB/s html4 [ -2.9%] R=jeff Revision created by MOE tool push_codebase. ------------------------------------------------------------------------ r40 | snappy.mirrorbot@gmail.com | 2011-06-03 00:57:41 +0200 (Fri, 03 Jun 2011) | 2 lines Release Snappy 1.0.3. ------------------------------------------------------------------------ r39 | snappy.mirrorbot@gmail.com | 2011-06-02 20:06:54 +0200 (Thu, 02 Jun 2011) | 11 lines Remove an unneeded goto in the decompressor; it turns out that the state of ip_ after decompression (or attempted decompresion) is completely irrelevant, so we don't need the trailer. Performance is, as expected, mostly flat -- there's a curious ~3-5% loss in the "lsp" test, but that test case is so short it is hard to say anything definitive about why (most likely, it's some sort of unrelated effect). R=jeff ------------------------------------------------------------------------ r38 | snappy.mirrorbot@gmail.com | 2011-06-02 19:59:40 +0200 (Thu, 02 Jun 2011) | 52 lines Speed up decompression by caching ip_. It is seemingly hard for the compiler to understand that ip_, the current input pointer into the compressed data stream, can not alias on anything else, and thus using it directly will incur memory traffic as it cannot be kept in a register. The code already knew about this and cached it into a local variable, but since Step() only decoded one tag, it had to move ip_ back into place between every tag. This seems to have cost us a significant amount of performance, so changing Step() into a function that decodes as much as it can before it saves ip_ back and returns. (Note that Step() was already inlined, so it is not the manual inlining that buys the performance here.) The wins are about 3-6% for Core 2, 6-13% on Core i7 and 5-12% on Opteron (for plain array-to-array decompression, in 64-bit opt mode). There is a tiny difference in the behavior here; if an invalid literal is encountered (ie., the writer refuses the Append() operation), ip_ will now point to the byte past the tag byte, instead of where the literal was originally thought to end. However, we don't use ip_ for anything after DecompressAllTags() has returned, so this should not change external behavior in any way. Microbenchmark results for Core i7, 64-bit (Opteron results are similar): Benchmark Time(ns) CPU(ns) Iterations --------------------------------------------------- BM_UFlat/0 79134 79110 8835 1.2GB/s html [ +6.2%] BM_UFlat/1 786126 786096 891 851.8MB/s urls [+10.0%] BM_UFlat/2 9948 9948 69125 11.9GB/s jpg [ -1.3%] BM_UFlat/3 31999 31998 21898 2.7GB/s pdf [ +6.5%] BM_UFlat/4 318909 318829 2204 1.2GB/s html4 [ +6.5%] BM_UFlat/5 31384 31390 22363 747.5MB/s cp [ +9.2%] BM_UFlat/6 14037 14034 49858 757.7MB/s c [+10.6%] BM_UFlat/7 4612 4612 151395 769.5MB/s lsp [ +9.5%] BM_UFlat/8 1203174 1203007 582 816.3MB/s xls [+19.3%] BM_UFlat/9 253869 253955 2757 571.1MB/s txt1 [+11.4%] BM_UFlat/10 219292 219290 3194 544.4MB/s txt2 [+12.1%] BM_UFlat/11 672135 672131 1000 605.5MB/s txt3 [+11.2%] BM_UFlat/12 902512 902492 776 509.2MB/s txt4 [+12.5%] BM_UFlat/13 372110 371998 1881 1.3GB/s bin [ +5.8%] BM_UFlat/14 50407 50407 10000 723.5MB/s sum [+13.5%] BM_UFlat/15 5699 5701 100000 707.2MB/s man [+12.4%] BM_UFlat/16 83448 83424 8383 1.3GB/s pb [ +5.7%] BM_UFlat/17 256958 256963 2723 684.1MB/s gaviota [ +7.9%] BM_UValidate/0 42795 42796 16351 2.2GB/s html [+25.8%] BM_UValidate/1 490672 490622 1427 1.3GB/s urls [+22.7%] BM_UValidate/2 237 237 2950297 499.0GB/s jpg [+24.9%] BM_UValidate/3 14610 14611 47901 6.0GB/s pdf [+26.8%] BM_UValidate/4 171973 171990 4071 2.2GB/s html4 [+25.7%] ------------------------------------------------------------------------ r37 | snappy.mirrorbot@gmail.com | 2011-05-17 10:48:25 +0200 (Tue, 17 May 2011) | 10 lines Fix the numbering of the headlines in the Snappy format description. R=csilvers DELTA=4 (0 added, 0 deleted, 4 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1906 ------------------------------------------------------------------------ r36 | snappy.mirrorbot@gmail.com | 2011-05-16 10:59:18 +0200 (Mon, 16 May 2011) | 12 lines Fix public issue #32: Add compressed format documentation for Snappy. This text is new, but an earlier version from Zeev Tarantov was used as reference. R=csilvers DELTA=112 (111 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1867 ------------------------------------------------------------------------ r35 | snappy.mirrorbot@gmail.com | 2011-05-09 23:29:02 +0200 (Mon, 09 May 2011) | 12 lines Fix public issue #39: Pick out the median runs based on CPU time, not real time. Also, use nth_element instead of sort, since we only need one element. R=csilvers DELTA=5 (3 added, 0 deleted, 2 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1799 ------------------------------------------------------------------------ r34 | snappy.mirrorbot@gmail.com | 2011-05-09 23:28:45 +0200 (Mon, 09 May 2011) | 19 lines Fix public issue #38: Make the microbenchmark framework handle properly cases where gettimeofday() can stand return the same result twice (as sometimes on GNU/Hurd) or go backwards (as when the user adjusts the clock). We avoid a division-by-zero, and put a lower bound on the number of iterations -- the same amount as we use to calibrate. We should probably use CLOCK_MONOTONIC for platforms that support it, to be robust against clock adjustments; we already use Windows' monotonic timers. However, that's for a later changelist. R=csilvers DELTA=7 (5 added, 0 deleted, 2 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1798 ------------------------------------------------------------------------ r33 | snappy.mirrorbot@gmail.com | 2011-05-04 01:22:52 +0200 (Wed, 04 May 2011) | 11 lines Fix public issue #37: Only link snappy_unittest against -lz and other autodetected libraries, not libsnappy.so (which doesn't need any such dependency). R=csilvers DELTA=20 (14 added, 0 deleted, 6 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1710 ------------------------------------------------------------------------ r32 | snappy.mirrorbot@gmail.com | 2011-05-04 01:22:33 +0200 (Wed, 04 May 2011) | 11 lines Release Snappy 1.0.2, to get the license change and various other fixes into a release. R=csilvers DELTA=239 (236 added, 0 deleted, 3 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1709 ------------------------------------------------------------------------ r31 | snappy.mirrorbot@gmail.com | 2011-04-26 14:34:55 +0200 (Tue, 26 Apr 2011) | 15 lines Fix public issue #30: Stop using gettimeofday() altogether on Win32, as MSVC doesn't include it. Replace with QueryPerformanceCounter(), which is monotonic and probably reasonably high-resolution. (Some machines have traditionally had bugs in QPC, but they should be relatively rare these days, and there's really no much better alternative that I know of.) R=csilvers DELTA=74 (55 added, 19 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1556 ------------------------------------------------------------------------ r30 | snappy.mirrorbot@gmail.com | 2011-04-26 14:34:37 +0200 (Tue, 26 Apr 2011) | 11 lines Fix public issue #31: Don't reset PATH in autogen.sh; instead, do the trickery we need for our own build system internally. R=csilvers DELTA=16 (13 added, 1 deleted, 2 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1555 ------------------------------------------------------------------------ r29 | snappy.mirrorbot@gmail.com | 2011-04-16 00:55:56 +0200 (Sat, 16 Apr 2011) | 12 lines When including , define WIN32_LEAN_AND_MEAN first, so we won't pull in macro definitions of things like min() and max(), which can conflict with . R=csilvers DELTA=1 (1 added, 0 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1485 ------------------------------------------------------------------------ r28 | snappy.mirrorbot@gmail.com | 2011-04-11 11:07:01 +0200 (Mon, 11 Apr 2011) | 15 lines Fix public issue #29: Write CPU timing code for Windows, based on GetProcessTimes() instead of getursage(). I thought I'd already committed this patch, so that the 1.0.1 release already would have a Windows-compatible snappy_unittest, but I'd seemingly deleted it instead, so this is a reconstruction. R=csilvers DELTA=43 (39 added, 3 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1295 ------------------------------------------------------------------------ r27 | snappy.mirrorbot@gmail.com | 2011-04-08 11:51:53 +0200 (Fri, 08 Apr 2011) | 22 lines Include C bindings of Snappy, contributed by Martin Gieseking. I've made a few changes since Martin's version; mostly style nits, but also a semantic change -- most functions that return bool in the C++ version now return an enum, to better match typical C (and zlib) semantics. I've kept the copyright notice, since Martin is obviously the author here; he has signed the contributor license agreement, though, so this should not hinder Google's use in the future. We'll need to update the libtool version number to match the added interface, but as of http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html I'm going to wait until public release. R=csilvers DELTA=238 (233 added, 0 deleted, 5 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1294 ------------------------------------------------------------------------ r26 | snappy.mirrorbot@gmail.com | 2011-04-07 18:36:43 +0200 (Thu, 07 Apr 2011) | 13 lines Replace geo.protodata with a newer version. The data compresses/decompresses slightly faster than the old data, and has similar density. R=lookingbill DELTA=1 (0 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1288 ------------------------------------------------------------------------ r25 | snappy.mirrorbot@gmail.com | 2011-03-30 22:27:53 +0200 (Wed, 30 Mar 2011) | 12 lines Fix public issue #27: Add HAVE_CONFIG_H tests around the config.h inclusion in snappy-stubs-internal.h, which eases compiling outside the automake/autoconf framework. R=csilvers DELTA=5 (4 added, 1 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1152 ------------------------------------------------------------------------ r24 | snappy.mirrorbot@gmail.com | 2011-03-30 22:27:39 +0200 (Wed, 30 Mar 2011) | 13 lines Fix public issue #26: Take memory allocation and reallocation entirely out of the Measure() loop. This gives all algorithms a small speed boost, except Snappy which already didn't do reallocation (so the measurements were slightly biased in its favor). R=csilvers DELTA=92 (69 added, 9 deleted, 14 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1151 ------------------------------------------------------------------------ r23 | snappy.mirrorbot@gmail.com | 2011-03-30 22:25:09 +0200 (Wed, 30 Mar 2011) | 18 lines Renamed "namespace zippy" to "namespace snappy" to reduce the differences from the opensource code. Will make it easier in the future to mix-and-match third-party code that uses snappy with google code. Currently, csearch shows that the only external user of "namespace zippy" is some bigtable code that accesses a TEST variable, which is temporarily kept in the zippy namespace. R=sesse DELTA=123 (18 added, 3 deleted, 102 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1150 ------------------------------------------------------------------------ r22 | snappy.mirrorbot@gmail.com | 2011-03-29 00:17:04 +0200 (Tue, 29 Mar 2011) | 11 lines Put back the final few lines of what was truncated during the license header change. R=csilvers DELTA=5 (4 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1094 ------------------------------------------------------------------------ r21 | snappy.mirrorbot@gmail.com | 2011-03-26 03:34:34 +0100 (Sat, 26 Mar 2011) | 20 lines Change on 2011-03-25 19:18:00-07:00 by sesse Replace the Apache 2.0 license header by the BSD-type license header; somehow a lot of the files were missed in the last round. R=dannyb,csilvers DELTA=147 (74 added, 2 deleted, 71 changed) Change on 2011-03-25 19:25:07-07:00 by sesse Unbreak the build; the relicensing removed a bit too much (only comments were intended, but I also accidentially removed some of the top lines of the actual source). Revision created by MOE tool push_codebase. MOE_MIGRATION=1072 ------------------------------------------------------------------------ r20 | snappy.mirrorbot@gmail.com | 2011-03-25 17:14:41 +0100 (Fri, 25 Mar 2011) | 10 lines Change Snappy from the Apache 2.0 to a BSD-type license. R=dannyb DELTA=328 (80 added, 184 deleted, 64 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1061 ------------------------------------------------------------------------ r19 | snappy.mirrorbot@gmail.com | 2011-03-25 01:39:01 +0100 (Fri, 25 Mar 2011) | 11 lines Release Snappy 1.0.1, to soup up all the various small changes that have been made since release. R=csilvers DELTA=266 (260 added, 0 deleted, 6 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1057 ------------------------------------------------------------------------ r18 | snappy.mirrorbot@gmail.com | 2011-03-24 20:15:54 +0100 (Thu, 24 Mar 2011) | 11 lines Fix a microbenchmark crash on mingw32; seemingly %lld is not universally supported on Windows, and %I64d is recommended instead. R=csilvers DELTA=6 (5 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1034 ------------------------------------------------------------------------ r17 | snappy.mirrorbot@gmail.com | 2011-03-24 20:15:27 +0100 (Thu, 24 Mar 2011) | 13 lines Fix public issue #19: Fix unit test when Google Test is installed but the gflags package isn't (Google Test is not properly initialized). Patch by Martin Gieseking. R=csilvers DELTA=2 (1 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1033 ------------------------------------------------------------------------ r16 | snappy.mirrorbot@gmail.com | 2011-03-24 20:13:57 +0100 (Thu, 24 Mar 2011) | 15 lines Make the unit test work on systems without mmap(). This is required for, among others, Windows support. For Windows in specific, we could have used CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer to compiling, and is of course also relevant for embedded systems with no MMU. (Part 2/2) R=csilvers DELTA=15 (12 added, 3 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1032 ------------------------------------------------------------------------ r15 | snappy.mirrorbot@gmail.com | 2011-03-24 20:12:27 +0100 (Thu, 24 Mar 2011) | 15 lines Make the unit test work on systems without mmap(). This is required for, among others, Windows support. For Windows in specific, we could have used CreateFileMapping/MapViewOfFile, but this should at least get us a bit closer to compiling, and is of course also relevant for embedded systems with no MMU. (Part 1/2) R=csilvers DELTA=9 (8 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1031 ------------------------------------------------------------------------ r14 | snappy.mirrorbot@gmail.com | 2011-03-24 00:17:36 +0100 (Thu, 24 Mar 2011) | 14 lines Fix public issue #12: Don't keep autogenerated auto* files in Subversion; it causes problems with others sending patches etc.. We can't get this 100% hermetic anyhow, due to files like lt~obsolete.m4, so we can just as well go cleanly in the other direction. R=csilvers DELTA=21038 (0 added, 21036 deleted, 2 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=1012 ------------------------------------------------------------------------ r13 | snappy.mirrorbot@gmail.com | 2011-03-23 18:50:49 +0100 (Wed, 23 Mar 2011) | 11 lines Fix public issue tracker bug #3: Call AC_SUBST([LIBTOOL_DEPS]), or the rule to rebuild libtool in Makefile.am won't work. R=csilvers DELTA=1 (1 added, 0 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=997 ------------------------------------------------------------------------ r12 | snappy.mirrorbot@gmail.com | 2011-03-23 12:16:39 +0100 (Wed, 23 Mar 2011) | 11 lines Fix public issue #10: Don't add GTEST_CPPFLAGS to snappy_unittest_CXXFLAGS; it's not needed (CPPFLAGS are always included when compiling). R=csilvers DELTA=1 (0 added, 1 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=994 ------------------------------------------------------------------------ r11 | snappy.mirrorbot@gmail.com | 2011-03-23 12:16:18 +0100 (Wed, 23 Mar 2011) | 11 lines Fix public issue #9: Add -Wall -Werror to automake flags. (This concerns automake itself, not the C++ compiler.) R=csilvers DELTA=4 (3 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=993 ------------------------------------------------------------------------ r10 | snappy.mirrorbot@gmail.com | 2011-03-23 12:13:37 +0100 (Wed, 23 Mar 2011) | 10 lines Fix a typo in the Snappy README file. R=csilvers DELTA=1 (0 added, 0 deleted, 1 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=992 ------------------------------------------------------------------------ r9 | snappy.mirrorbot@gmail.com | 2011-03-23 12:13:13 +0100 (Wed, 23 Mar 2011) | 11 lines Fix public issue #6: Add a --with-gflags for disabling gflags autodetection and using a manually given setting (use/don't use) instead. R=csilvers DELTA=16 (13 added, 0 deleted, 3 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=991 ------------------------------------------------------------------------ r8 | snappy.mirrorbot@gmail.com | 2011-03-23 12:12:44 +0100 (Wed, 23 Mar 2011) | 12 lines Fix public issue #5: Replace the EXTRA_LIBSNAPPY_LDFLAGS setup with something slightly more standard, that also doesn't leak libtool command-line into configure.ac. R=csilvers DELTA=7 (0 added, 4 deleted, 3 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=990 ------------------------------------------------------------------------ r7 | snappy.mirrorbot@gmail.com | 2011-03-23 12:12:22 +0100 (Wed, 23 Mar 2011) | 10 lines Fix public issue #4: Properly quote all macro arguments in configure.ac. R=csilvers DELTA=16 (0 added, 0 deleted, 16 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=989 ------------------------------------------------------------------------ r6 | snappy.mirrorbot@gmail.com | 2011-03-23 12:11:54 +0100 (Wed, 23 Mar 2011) | 11 lines Fix public issue #7: Don't use internal variables named ac_*, as those belong to autoconf's namespace. R=csilvers DELTA=6 (0 added, 0 deleted, 6 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=988 ------------------------------------------------------------------------ r5 | snappy.mirrorbot@gmail.com | 2011-03-23 12:11:09 +0100 (Wed, 23 Mar 2011) | 10 lines Add missing licensing headers to a few files. (Part 2/2.) R=csilvers DELTA=12 (12 added, 0 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=987 ------------------------------------------------------------------------ r4 | snappy.mirrorbot@gmail.com | 2011-03-23 12:10:39 +0100 (Wed, 23 Mar 2011) | 10 lines Add mising licensing headers to a few files. (Part 1/2.) R=csilvers DELTA=24 (24 added, 0 deleted, 0 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=986 ------------------------------------------------------------------------ r3 | snappy.mirrorbot@gmail.com | 2011-03-23 12:10:04 +0100 (Wed, 23 Mar 2011) | 11 lines Use the correct license file for the Apache 2.0 license; spotted by Florian Weimer. R=csilvers DELTA=202 (174 added, 0 deleted, 28 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=985 ------------------------------------------------------------------------ r2 | snappy.mirrorbot@gmail.com | 2011-03-18 18:14:15 +0100 (Fri, 18 Mar 2011) | 6 lines Revision created by MOE tool push_codebase. MOE_MIGRATION= ------------------------------------------------------------------------ r1 | sesse@google.com | 2011-03-18 18:13:52 +0100 (Fri, 18 Mar 2011) | 2 lines Create trunk directory. ------------------------------------------------------------------------ tmpNnpnZF/thirdparty/snappy/snappy-stubs-public.h0000664000175000017500000000614512543167424021573 0ustar chrischris// Copyright 2011 Google Inc. All Rights Reserved. // Author: sesse@google.com (Steinar H. Gunderson) // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Various type stubs for the open-source version of Snappy. // // This file cannot include config.h, as it is included from snappy.h, // which is a public header. Instead, snappy-stubs-public.h is generated by // from snappy-stubs-public.h.in at configure time. #ifndef UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #define UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ #if 1 #include #endif #if 1 #include #endif #if 0 #include #endif #define SNAPPY_MAJOR 1 #define SNAPPY_MINOR 1 #define SNAPPY_PATCHLEVEL 2 #define SNAPPY_VERSION \ ((SNAPPY_MAJOR << 16) | (SNAPPY_MINOR << 8) | SNAPPY_PATCHLEVEL) #include namespace snappy { #if 1 typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typedef uint16_t uint16; typedef int32_t int32; typedef uint32_t uint32; typedef int64_t int64; typedef uint64_t uint64; #else typedef signed char int8; typedef unsigned char uint8; typedef short int16; typedef unsigned short uint16; typedef int int32; typedef unsigned int uint32; typedef long long int64; typedef unsigned long long uint64; #endif typedef std::string string; #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&) #if !0 // Windows does not have an iovec type, yet the concept is universally useful. // It is simple to define it ourselves, so we put it inside our own namespace. struct iovec { void* iov_base; size_t iov_len; }; #endif } // namespace snappy #endif // UTIL_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_ tmpNnpnZF/thirdparty/khronos/0000775000175000017500000000000012543167424015641 5ustar chrischristmpNnpnZF/thirdparty/khronos/Makefile0000664000175000017500000000172712543167424017310 0ustar chrischrisupdate: \ GL/glext.h \ GL/glxext.h \ GL/wglext.h \ EGL/egl.h \ EGL/eglext.h \ EGL/eglplatform.h \ KHR/khrplatform.h \ GLES/gl.h \ GLES/glext.h \ GLES/glplatform.h \ GLES2/gl2.h \ GLES2/gl2ext.h \ GLES2/gl2platform.h GL/wglext.h GL/glxext.h: FORCE wget -O $@ "https://www.opengl.org/registry/api/$@" GL/glext.h: GL/glext.patch FORCE wget -O $@ "https://www.opengl.org/registry/api/$@" patch $@ $< EGL/egl.h EGL/eglext.h KHR/khrplatform.h: FORCE wget -O $@ "https://www.khronos.org/registry/egl/api/$@" EGL/eglplatform.h: EGL/eglplatform.patch FORCE wget -O $@ "https://www.khronos.org/registry/egl/api/$@" patch $@ $< GLES/gl.h GLES/glplatform.h: FORCE wget -O $@ "https://www.khronos.org/registry/gles/api/$@" GLES/glext.h: GLES/glext.patch FORCE wget -O $@ "https://www.khronos.org/registry/gles/api/$@" patch $@ $< GLES2/gl2.h GLES2/gl2ext.h GLES2/gl2platform.h: FORCE wget -O $@ "https://www.khronos.org/registry/gles/api/$@" .PHONY: update FORCE: tmpNnpnZF/thirdparty/khronos/GL/0000775000175000017500000000000012543167424016143 5ustar chrischristmpNnpnZF/thirdparty/khronos/GL/wglext.h0000664000175000017500000012436712543167424017643 0ustar chrischris#ifndef __wglext_h_ #define __wglext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 30969 $ on $Date: 2015-04-28 21:32:44 -0700 (Tue, 28 Apr 2015) $ */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include #endif #define WGL_WGLEXT_VERSION 20150428 /* Generated C header for: * API: wgl * Versions considered: .* * Versions emitted: _nomatch_^ * Default extensions included: wgl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #ifdef WGL_WGLEXT_PROTOTYPES HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType); VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion); BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height); BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #endif #endif /* WGL_ARB_buffer_region */ #ifndef WGL_ARB_context_flush_control #define WGL_ARB_context_flush_control 1 #define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 #define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 #define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 #endif /* WGL_ARB_context_flush_control */ #ifndef WGL_ARB_create_context #define WGL_ARB_create_context 1 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 #define WGL_CONTEXT_FLAGS_ARB 0x2094 #define ERROR_INVALID_VERSION_ARB 0x2095 typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); #ifdef WGL_WGLEXT_PROTOTYPES HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList); #endif #endif /* WGL_ARB_create_context */ #ifndef WGL_ARB_create_context_profile #define WGL_ARB_create_context_profile 1 #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define ERROR_INVALID_PROFILE_ARB 0x2096 #endif /* WGL_ARB_create_context_profile */ #ifndef WGL_ARB_create_context_robustness #define WGL_ARB_create_context_robustness 1 #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* WGL_ARB_create_context_robustness */ #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); #ifdef WGL_WGLEXT_PROTOTYPES const char *WINAPI wglGetExtensionsStringARB (HDC hdc); #endif #endif /* WGL_ARB_extensions_string */ #ifndef WGL_ARB_framebuffer_sRGB #define WGL_ARB_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 #endif /* WGL_ARB_framebuffer_sRGB */ #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); HDC WINAPI wglGetCurrentReadDCARB (void); #endif #endif /* WGL_ARB_make_current_read */ #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #endif /* WGL_ARB_multisample */ #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 DECLARE_HANDLE(HPBUFFERARB); #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer); int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC); BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer); BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); #endif #endif /* WGL_ARB_pbuffer */ #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_ARB_pixel_format */ #ifndef WGL_ARB_pixel_format_float #define WGL_ARB_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 #endif /* WGL_ARB_pixel_format_float */ #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList); #endif #endif /* WGL_ARB_render_texture */ #ifndef WGL_ARB_robustness_application_isolation #define WGL_ARB_robustness_application_isolation 1 #define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #endif /* WGL_ARB_robustness_application_isolation */ #ifndef WGL_ARB_robustness_share_group_isolation #define WGL_ARB_robustness_share_group_isolation 1 #endif /* WGL_ARB_robustness_share_group_isolation */ #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #endif /* WGL_3DFX_multisample */ #ifndef WGL_3DL_stereo_control #define WGL_3DL_stereo_control 1 #define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState); #endif #endif /* WGL_3DL_stereo_control */ #ifndef WGL_AMD_gpu_association #define WGL_AMD_gpu_association 1 #define WGL_GPU_VENDOR_AMD 0x1F00 #define WGL_GPU_RENDERER_STRING_AMD 0x1F01 #define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define WGL_GPU_RAM_AMD 0x21A3 #define WGL_GPU_CLOCK_AMD 0x21A4 #define WGL_GPU_NUM_PIPES_AMD 0x21A5 #define WGL_GPU_NUM_SIMD_AMD 0x21A6 #define WGL_GPU_NUM_RB_AMD 0x21A7 #define WGL_GPU_NUM_SPI_AMD 0x21A8 typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data); typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef WGL_WGLEXT_PROTOTYPES UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids); INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data); UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id); HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList); BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc); BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc); HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* WGL_AMD_gpu_association */ #ifndef WGL_ATI_pixel_format_float #define WGL_ATI_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 #endif /* WGL_ATI_pixel_format_float */ #ifndef WGL_EXT_create_context_es2_profile #define WGL_EXT_create_context_es2_profile 1 #define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* WGL_EXT_create_context_es2_profile */ #ifndef WGL_EXT_create_context_es_profile #define WGL_EXT_create_context_es_profile 1 #define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif /* WGL_EXT_create_context_es_profile */ #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #define WGL_DEPTH_FLOAT_EXT 0x2040 #endif /* WGL_EXT_depth_float */ #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); #ifdef WGL_WGLEXT_PROTOTYPES GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id); GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length); GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id); VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id); #endif #endif /* WGL_EXT_display_color_table */ #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES const char *WINAPI wglGetExtensionsStringEXT (void); #endif #endif /* WGL_EXT_extensions_string */ #ifndef WGL_EXT_framebuffer_sRGB #define WGL_EXT_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 #endif /* WGL_EXT_framebuffer_sRGB */ #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); HDC WINAPI wglGetCurrentReadDCEXT (void); #endif #endif /* WGL_EXT_make_current_read */ #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #endif /* WGL_EXT_multisample */ #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 DECLARE_HANDLE(HPBUFFEREXT); #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer); int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC); BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer); BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); #endif #endif /* WGL_EXT_pbuffer */ #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_EXT_pixel_format */ #ifndef WGL_EXT_pixel_format_packed_float #define WGL_EXT_pixel_format_packed_float 1 #define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 #endif /* WGL_EXT_pixel_format_packed_float */ #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglSwapIntervalEXT (int interval); int WINAPI wglGetSwapIntervalEXT (void); #endif #endif /* WGL_EXT_swap_control */ #ifndef WGL_EXT_swap_control_tear #define WGL_EXT_swap_control_tear 1 #endif /* WGL_EXT_swap_control_tear */ #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue); BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue); #endif #endif /* WGL_I3D_digital_video_control */ #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue); BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue); BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); #endif #endif /* WGL_I3D_gamma */ #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnableGenlockI3D (HDC hDC); BOOL WINAPI wglDisableGenlockI3D (HDC hDC); BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag); BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource); BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource); BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge); BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge); BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate); BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate); BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay); BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay); BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #endif #endif /* WGL_I3D_genlock */ #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); #ifdef WGL_WGLEXT_PROTOTYPES LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags); BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress); BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count); #endif #endif /* WGL_I3D_image_buffer */ #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnableFrameLockI3D (void); BOOL WINAPI wglDisableFrameLockI3D (void); BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag); BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag); #endif #endif /* WGL_I3D_swap_frame_lock */ #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetFrameUsageI3D (float *pUsage); BOOL WINAPI wglBeginFrameTrackingI3D (void); BOOL WINAPI wglEndFrameTrackingI3D (void); BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); #endif #endif /* WGL_I3D_swap_frame_usage */ #ifndef WGL_NV_DX_interop #define WGL_NV_DX_interop 1 #define WGL_ACCESS_READ_ONLY_NV 0x00000000 #define WGL_ACCESS_READ_WRITE_NV 0x00000001 #define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle); typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice); typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle); HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice); BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice); HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject); BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access); BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); #endif #endif /* WGL_NV_DX_interop */ #ifndef WGL_NV_DX_interop2 #define WGL_NV_DX_interop2 1 #endif /* WGL_NV_DX_interop2 */ #ifndef WGL_NV_copy_image #define WGL_NV_copy_image 1 typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* WGL_NV_copy_image */ #ifndef WGL_NV_delay_before_swap #define WGL_NV_delay_before_swap 1 typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds); #endif #endif /* WGL_NV_delay_before_swap */ #ifndef WGL_NV_float_buffer #define WGL_NV_float_buffer 1 #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #endif /* WGL_NV_float_buffer */ #ifndef WGL_NV_gpu_affinity #define WGL_NV_gpu_affinity 1 DECLARE_HANDLE(HGPUNV); struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; }; typedef struct _GPU_DEVICE *PGPU_DEVICE; #define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu); BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList); BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); BOOL WINAPI wglDeleteDCNV (HDC hdc); #endif #endif /* WGL_NV_gpu_affinity */ #ifndef WGL_NV_multisample_coverage #define WGL_NV_multisample_coverage 1 #define WGL_COVERAGE_SAMPLES_NV 0x2042 #define WGL_COLOR_SAMPLES_NV 0x20B9 #endif /* WGL_NV_multisample_coverage */ #ifndef WGL_NV_present_video #define WGL_NV_present_video 1 DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); #define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue); #endif #endif /* WGL_NV_present_video */ #ifndef WGL_NV_render_depth_texture #define WGL_NV_render_depth_texture 1 #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #endif /* WGL_NV_render_depth_texture */ #ifndef WGL_NV_render_texture_rectangle #define WGL_NV_render_texture_rectangle 1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #endif /* WGL_NV_render_texture_rectangle */ #ifndef WGL_NV_swap_group #define WGL_NV_swap_group 1 typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier); typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count); typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group); BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier); BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier); BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count); BOOL WINAPI wglResetFrameCountNV (HDC hDC); #endif #endif /* WGL_NV_swap_group */ #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); #ifdef WGL_WGLEXT_PROTOTYPES void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); void WINAPI wglFreeMemoryNV (void *pointer); #endif #endif /* WGL_NV_vertex_array_range */ #ifndef WGL_NV_video_capture #define WGL_NV_video_capture 1 DECLARE_HANDLE(HVIDEOINPUTDEVICENV); #define WGL_UNIQUE_ID_NV 0x20CE #define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); #endif #endif /* WGL_NV_video_capture */ #ifndef WGL_NV_video_output #define WGL_NV_video_output 1 DECLARE_HANDLE(HPVIDEODEV); #define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 #define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 #define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 #define WGL_VIDEO_OUT_COLOR_NV 0x20C3 #define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 #define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 #define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define WGL_VIDEO_OUT_FRAME 0x20C8 #define WGL_VIDEO_OUT_FIELD_1 0x20C9 #define WGL_VIDEO_OUT_FIELD_2 0x20CA #define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB #define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice); BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer); BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #endif #endif /* WGL_NV_video_output */ #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator); INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); #endif #endif /* WGL_OML_sync_control */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/GL/glext.patch0000664000175000017500000000113312543167424020305 0ustar chrischris# MacOSX doesn't follow the official glext.h definition for GLhandleARB, and # instead defines it as: # # typedef void *GLhandleARB; # # But to avoid integer to pointer conversion issues, we simply use 'unsigned # long' which should be the same size on all supported architectures. --- glext.h.orig 2013-11-26 12:42:37.000000000 +0000 +++ glext.h 2013-11-29 16:49:59.038657928 +0000 @@ -3555,7 +3555,7 @@ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #ifdef __APPLE__ -typedef void *GLhandleARB; +typedef unsigned long GLhandleARB; #else typedef unsigned int GLhandleARB; #endif tmpNnpnZF/thirdparty/khronos/GL/glxext.h0000664000175000017500000013412312543167424017633 0ustar chrischris#ifndef __glxext_h_ #define __glxext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 30082 $ on $Date: 2015-03-11 09:18:46 -0700 (Wed, 11 Mar 2015) $ */ #define GLX_GLXEXT_VERSION 20150311 /* Generated C header for: * API: glx * Versions considered: .* * Versions emitted: 1\.[3-9] * Default extensions included: glx * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 typedef XID GLXContextID; typedef struct __GLXFBConfigRec *GLXFBConfig; typedef XID GLXWindow; typedef XID GLXPbuffer; #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DONT_CARE 0xFFFFFFFF #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 typedef GLXFBConfig *( *PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); typedef GLXFBConfig *( *PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); typedef int ( *PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); typedef GLXWindow ( *PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); typedef void ( *PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); typedef GLXPixmap ( *PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); typedef void ( *PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); typedef GLXPbuffer ( *PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); typedef void ( *PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); typedef void ( *PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); typedef GLXContext ( *PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); typedef Bool ( *PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLEPROC) (void); typedef int ( *PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); typedef void ( *PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); typedef void ( *PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); #ifdef GLX_GLXEXT_PROTOTYPES GLXFBConfig *glXGetFBConfigs (Display *dpy, int screen, int *nelements); GLXFBConfig *glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements); int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value); XVisualInfo *glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config); GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); void glXDestroyWindow (Display *dpy, GLXWindow win); GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap); GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list); void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf); void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLXDrawable glXGetCurrentReadDrawable (void); int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value); void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask); void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask); #endif #endif /* GLX_VERSION_1_3 */ #ifndef GLX_VERSION_1_4 #define GLX_VERSION_1_4 1 typedef void ( *__GLXextFuncPtr)(void); #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName); #ifdef GLX_GLXEXT_PROTOTYPES __GLXextFuncPtr glXGetProcAddress (const GLubyte *procName); #endif #endif /* GLX_VERSION_1_4 */ #ifndef GLX_ARB_context_flush_control #define GLX_ARB_context_flush_control 1 #define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 #define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 #define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 #endif /* GLX_ARB_context_flush_control */ #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 typedef GLXContext ( *PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); #ifdef GLX_GLXEXT_PROTOTYPES GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); #endif #endif /* GLX_ARB_create_context */ #ifndef GLX_ARB_create_context_profile #define GLX_ARB_create_context_profile 1 #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 #endif /* GLX_ARB_create_context_profile */ #ifndef GLX_ARB_create_context_robustness #define GLX_ARB_create_context_robustness 1 #define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* GLX_ARB_create_context_robustness */ #ifndef GLX_ARB_fbconfig_float #define GLX_ARB_fbconfig_float 1 #define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 #define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 #endif /* GLX_ARB_fbconfig_float */ #ifndef GLX_ARB_framebuffer_sRGB #define GLX_ARB_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 #endif /* GLX_ARB_framebuffer_sRGB */ #ifndef GLX_ARB_get_proc_address #define GLX_ARB_get_proc_address 1 typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName); #ifdef GLX_GLXEXT_PROTOTYPES __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName); #endif #endif /* GLX_ARB_get_proc_address */ #ifndef GLX_ARB_multisample #define GLX_ARB_multisample 1 #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif /* GLX_ARB_multisample */ #ifndef GLX_ARB_robustness_application_isolation #define GLX_ARB_robustness_application_isolation 1 #define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #endif /* GLX_ARB_robustness_application_isolation */ #ifndef GLX_ARB_robustness_share_group_isolation #define GLX_ARB_robustness_share_group_isolation 1 #endif /* GLX_ARB_robustness_share_group_isolation */ #ifndef GLX_ARB_vertex_buffer_object #define GLX_ARB_vertex_buffer_object 1 #define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 #endif /* GLX_ARB_vertex_buffer_object */ #ifndef GLX_3DFX_multisample #define GLX_3DFX_multisample 1 #define GLX_SAMPLE_BUFFERS_3DFX 0x8050 #define GLX_SAMPLES_3DFX 0x8051 #endif /* GLX_3DFX_multisample */ #ifndef GLX_AMD_gpu_association #define GLX_AMD_gpu_association 1 #define GLX_GPU_VENDOR_AMD 0x1F00 #define GLX_GPU_RENDERER_STRING_AMD 0x1F01 #define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define GLX_GPU_RAM_AMD 0x21A3 #define GLX_GPU_CLOCK_AMD 0x21A4 #define GLX_GPU_NUM_PIPES_AMD 0x21A5 #define GLX_GPU_NUM_SIMD_AMD 0x21A6 #define GLX_GPU_NUM_RB_AMD 0x21A7 #define GLX_GPU_NUM_SPI_AMD 0x21A8 typedef unsigned int ( *PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int *ids); typedef int ( *PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void *data); typedef unsigned int ( *PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx); typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list); typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int *attribList); typedef Bool ( *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx); typedef Bool ( *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); typedef GLXContext ( *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); typedef void ( *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int *ids); int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void *data); unsigned int glXGetContextGPUIDAMD (GLXContext ctx); GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list); GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int *attribList); Bool glXDeleteAssociatedContextAMD (GLXContext ctx); Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx); GLXContext glXGetCurrentAssociatedContextAMD (void); void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GLX_AMD_gpu_association */ #ifndef GLX_EXT_buffer_age #define GLX_EXT_buffer_age 1 #define GLX_BACK_BUFFER_AGE_EXT 0x20F4 #endif /* GLX_EXT_buffer_age */ #ifndef GLX_EXT_create_context_es2_profile #define GLX_EXT_create_context_es2_profile 1 #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_create_context_es2_profile */ #ifndef GLX_EXT_create_context_es_profile #define GLX_EXT_create_context_es_profile 1 #define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_create_context_es_profile */ #ifndef GLX_EXT_fbconfig_packed_float #define GLX_EXT_fbconfig_packed_float 1 #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #endif /* GLX_EXT_fbconfig_packed_float */ #ifndef GLX_EXT_framebuffer_sRGB #define GLX_EXT_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 #endif /* GLX_EXT_framebuffer_sRGB */ #ifndef GLX_EXT_import_context #define GLX_EXT_import_context 1 #define GLX_SHARE_CONTEXT_EXT 0x800A #define GLX_VISUAL_ID_EXT 0x800B #define GLX_SCREEN_EXT 0x800C typedef Display *( *PFNGLXGETCURRENTDISPLAYEXTPROC) (void); typedef int ( *PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value); typedef GLXContextID ( *PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); typedef GLXContext ( *PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID); typedef void ( *PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context); #ifdef GLX_GLXEXT_PROTOTYPES Display *glXGetCurrentDisplayEXT (void); int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value); GLXContextID glXGetContextIDEXT (const GLXContext context); GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID); void glXFreeContextEXT (Display *dpy, GLXContext context); #endif #endif /* GLX_EXT_import_context */ #ifndef GLX_EXT_stereo_tree #define GLX_EXT_stereo_tree 1 typedef struct { int type; unsigned long serial; Bool send_event; Display *display; int extension; int evtype; GLXDrawable window; Bool stereo_tree; } GLXStereoNotifyEventEXT; #define GLX_STEREO_TREE_EXT 0x20F5 #define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001 #define GLX_STEREO_NOTIFY_EXT 0x00000000 #endif /* GLX_EXT_stereo_tree */ #ifndef GLX_EXT_swap_control #define GLX_EXT_swap_control 1 #define GLX_SWAP_INTERVAL_EXT 0x20F1 #define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 typedef void ( *PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval); #ifdef GLX_GLXEXT_PROTOTYPES void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval); #endif #endif /* GLX_EXT_swap_control */ #ifndef GLX_EXT_swap_control_tear #define GLX_EXT_swap_control_tear 1 #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 #endif /* GLX_EXT_swap_control_tear */ #ifndef GLX_EXT_texture_from_pixmap #define GLX_EXT_texture_from_pixmap 1 #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 #define GLX_Y_INVERTED_EXT 0x20D4 #define GLX_TEXTURE_FORMAT_EXT 0x20D5 #define GLX_TEXTURE_TARGET_EXT 0x20D6 #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA #define GLX_TEXTURE_1D_EXT 0x20DB #define GLX_TEXTURE_2D_EXT 0x20DC #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD #define GLX_FRONT_LEFT_EXT 0x20DE #define GLX_FRONT_RIGHT_EXT 0x20DF #define GLX_BACK_LEFT_EXT 0x20E0 #define GLX_BACK_RIGHT_EXT 0x20E1 #define GLX_FRONT_EXT 0x20DE #define GLX_BACK_EXT 0x20E0 #define GLX_AUX0_EXT 0x20E2 #define GLX_AUX1_EXT 0x20E3 #define GLX_AUX2_EXT 0x20E4 #define GLX_AUX3_EXT 0x20E5 #define GLX_AUX4_EXT 0x20E6 #define GLX_AUX5_EXT 0x20E7 #define GLX_AUX6_EXT 0x20E8 #define GLX_AUX7_EXT 0x20E9 #define GLX_AUX8_EXT 0x20EA #define GLX_AUX9_EXT 0x20EB typedef void ( *PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list); typedef void ( *PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer); #ifdef GLX_GLXEXT_PROTOTYPES void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list); void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer); #endif #endif /* GLX_EXT_texture_from_pixmap */ #ifndef GLX_EXT_visual_info #define GLX_EXT_visual_info 1 #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 #endif /* GLX_EXT_visual_info */ #ifndef GLX_EXT_visual_rating #define GLX_EXT_visual_rating 1 #define GLX_VISUAL_CAVEAT_EXT 0x20 #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D #endif /* GLX_EXT_visual_rating */ #ifndef GLX_INTEL_swap_event #define GLX_INTEL_swap_event 1 #define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 #define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 #define GLX_COPY_COMPLETE_INTEL 0x8181 #define GLX_FLIP_COMPLETE_INTEL 0x8182 #endif /* GLX_INTEL_swap_event */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 typedef unsigned int ( *PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int glXGetAGPOffsetMESA (const void *pointer); #endif #endif /* GLX_MESA_agp_offset */ #ifndef GLX_MESA_copy_sub_buffer #define GLX_MESA_copy_sub_buffer 1 typedef void ( *PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); #endif #endif /* GLX_MESA_copy_sub_buffer */ #ifndef GLX_MESA_pixmap_colormap #define GLX_MESA_pixmap_colormap 1 typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); #ifdef GLX_GLXEXT_PROTOTYPES GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); #endif #endif /* GLX_MESA_pixmap_colormap */ #ifndef GLX_MESA_query_renderer #define GLX_MESA_query_renderer 1 #define GLX_RENDERER_VENDOR_ID_MESA 0x8183 #define GLX_RENDERER_DEVICE_ID_MESA 0x8184 #define GLX_RENDERER_VERSION_MESA 0x8185 #define GLX_RENDERER_ACCELERATED_MESA 0x8186 #define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 #define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D #define GLX_RENDERER_ID_MESA 0x818E typedef Bool ( *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC) (int attribute, unsigned int *value); typedef const char *( *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC) (int attribute); typedef Bool ( *PFNGLXQUERYRENDERERINTEGERMESAPROC) (Display *dpy, int screen, int renderer, int attribute, unsigned int *value); typedef const char *( *PFNGLXQUERYRENDERERSTRINGMESAPROC) (Display *dpy, int screen, int renderer, int attribute); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXQueryCurrentRendererIntegerMESA (int attribute, unsigned int *value); const char *glXQueryCurrentRendererStringMESA (int attribute); Bool glXQueryRendererIntegerMESA (Display *dpy, int screen, int renderer, int attribute, unsigned int *value); const char *glXQueryRendererStringMESA (Display *dpy, int screen, int renderer, int attribute); #endif #endif /* GLX_MESA_query_renderer */ #ifndef GLX_MESA_release_buffers #define GLX_MESA_release_buffers 1 typedef Bool ( *PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable); #endif #endif /* GLX_MESA_release_buffers */ #ifndef GLX_MESA_set_3dfx_mode #define GLX_MESA_set_3dfx_mode 1 #define GLX_3DFX_WINDOW_MODE_MESA 0x1 #define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 typedef Bool ( *PFNGLXSET3DFXMODEMESAPROC) (int mode); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXSet3DfxModeMESA (int mode); #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifndef GLX_NV_copy_buffer #define GLX_NV_copy_buffer 1 typedef void ( *PFNGLXCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void ( *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void glXNamedCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif #endif /* GLX_NV_copy_buffer */ #ifndef GLX_NV_copy_image #define GLX_NV_copy_image 1 typedef void ( *PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GLX_NV_copy_image */ #ifndef GLX_NV_delay_before_swap #define GLX_NV_delay_before_swap 1 typedef Bool ( *PFNGLXDELAYBEFORESWAPNVPROC) (Display *dpy, GLXDrawable drawable, GLfloat seconds); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXDelayBeforeSwapNV (Display *dpy, GLXDrawable drawable, GLfloat seconds); #endif #endif /* GLX_NV_delay_before_swap */ #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #endif /* GLX_NV_float_buffer */ #ifndef GLX_NV_multisample_coverage #define GLX_NV_multisample_coverage 1 #define GLX_COVERAGE_SAMPLES_NV 100001 #define GLX_COLOR_SAMPLES_NV 0x20B3 #endif /* GLX_NV_multisample_coverage */ #ifndef GLX_NV_present_video #define GLX_NV_present_video 1 #define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 typedef unsigned int *( *PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements); typedef int ( *PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int *glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements); int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); #endif #endif /* GLX_NV_present_video */ #ifndef GLX_NV_swap_group #define GLX_NV_swap_group 1 typedef Bool ( *PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group); typedef Bool ( *PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier); typedef Bool ( *PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); typedef Bool ( *PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); typedef Bool ( *PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count); typedef Bool ( *PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group); Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier); Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count); Bool glXResetFrameCountNV (Display *dpy, int screen); #endif #endif /* GLX_NV_swap_group */ #ifndef GLX_NV_video_capture #define GLX_NV_video_capture 1 typedef XID GLXVideoCaptureDeviceNV; #define GLX_DEVICE_ID_NV 0x20CD #define GLX_UNIQUE_ID_NV 0x20CE #define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF typedef int ( *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); typedef GLXVideoCaptureDeviceNV *( *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements); typedef void ( *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device); typedef int ( *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); typedef void ( *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device); #ifdef GLX_GLXEXT_PROTOTYPES int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); GLXVideoCaptureDeviceNV *glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements); void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device); int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device); #endif #endif /* GLX_NV_video_capture */ #ifndef GLX_NV_video_out #define GLX_NV_video_out 1 typedef unsigned int GLXVideoDeviceNV; #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC typedef int ( *PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); typedef int ( *PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice); typedef int ( *PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); typedef int ( *PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf); typedef int ( *PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); typedef int ( *PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice); int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf); int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #endif #endif /* GLX_NV_video_out */ #ifndef GLX_OML_swap_method #define GLX_OML_swap_method 1 #define GLX_SWAP_METHOD_OML 0x8060 #define GLX_SWAP_EXCHANGE_OML 0x8061 #define GLX_SWAP_COPY_OML 0x8062 #define GLX_SWAP_UNDEFINED_OML 0x8063 #endif /* GLX_OML_swap_method */ #ifndef GLX_OML_sync_control #define GLX_OML_sync_control 1 #ifndef GLEXT_64_TYPES_DEFINED /* This code block is duplicated in glext.h, so must be protected */ #define GLEXT_64_TYPES_DEFINED /* Define int32_t, int64_t, and uint64_t types for UST/MSC */ /* (as used in the GLX_OML_sync_control extension). */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #include #elif defined(__sun__) || defined(__digital__) #include #if defined(__STDC__) #if defined(__arch64__) || defined(_LP64) typedef long int int64_t; typedef unsigned long int uint64_t; #else typedef long long int int64_t; typedef unsigned long long int uint64_t; #endif /* __arch64__ */ #endif /* __STDC__ */ #elif defined( __VMS ) || defined(__sgi) #include #elif defined(__SCO__) || defined(__USLC__) #include #elif defined(__UNIXOS2__) || defined(__SOL64__) typedef long int int32_t; typedef long long int int64_t; typedef unsigned long long int uint64_t; #elif defined(_WIN32) && defined(__GNUC__) #include #elif defined(_WIN32) typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else /* Fallback if nothing above works */ #include #endif #endif typedef Bool ( *PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc); typedef Bool ( *PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); typedef int64_t ( *PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); typedef Bool ( *PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc); typedef Bool ( *PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc); Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc); Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc); #endif #endif /* GLX_OML_sync_control */ #ifndef GLX_SGIS_blended_overlay #define GLX_SGIS_blended_overlay 1 #define GLX_BLENDED_RGBA_SGIS 0x8025 #endif /* GLX_SGIS_blended_overlay */ #ifndef GLX_SGIS_multisample #define GLX_SGIS_multisample 1 #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #endif /* GLX_SGIS_multisample */ #ifndef GLX_SGIS_shared_multisample #define GLX_SGIS_shared_multisample 1 #define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 #define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 #endif /* GLX_SGIS_shared_multisample */ #ifndef GLX_SGIX_dmbuffer #define GLX_SGIX_dmbuffer 1 typedef XID GLXPbufferSGIX; #ifdef _DM_BUFFER_H_ #define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 typedef Bool ( *PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); #endif #endif /* _DM_BUFFER_H_ */ #endif /* GLX_SGIX_dmbuffer */ #ifndef GLX_SGIX_fbconfig #define GLX_SGIX_fbconfig 1 typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; #define GLX_WINDOW_BIT_SGIX 0x00000001 #define GLX_PIXMAP_BIT_SGIX 0x00000002 #define GLX_RGBA_BIT_SGIX 0x00000001 #define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 #define GLX_DRAWABLE_TYPE_SGIX 0x8010 #define GLX_RENDER_TYPE_SGIX 0x8011 #define GLX_X_RENDERABLE_SGIX 0x8012 #define GLX_FBCONFIG_ID_SGIX 0x8013 #define GLX_RGBA_TYPE_SGIX 0x8014 #define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 typedef int ( *PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); typedef GLXFBConfigSGIX *( *PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements); typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap); typedef GLXContext ( *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config); typedef GLXFBConfigSGIX ( *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); GLXFBConfigSGIX *glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements); GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap); GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); XVisualInfo *glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config); GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis); #endif #endif /* GLX_SGIX_fbconfig */ #ifndef GLX_SGIX_hyperpipe #define GLX_SGIX_hyperpipe 1 typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int networkId; } GLXHyperpipeNetworkSGIX; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int srcXOrigin, srcYOrigin, srcWidth, srcHeight; int destXOrigin, destYOrigin, destWidth, destHeight; } GLXPipeRect; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int XOrigin, YOrigin, maxHeight, maxWidth; } GLXPipeRectLimits; #define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 #define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 #define GLX_BAD_HYPERPIPE_SGIX 92 #define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 #define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 #define GLX_PIPE_RECT_SGIX 0x00000001 #define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 #define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 #define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 #define GLX_HYPERPIPE_ID_SGIX 0x8030 typedef GLXHyperpipeNetworkSGIX *( *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); typedef int ( *PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); typedef GLXHyperpipeConfigSGIX *( *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); typedef int ( *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); typedef int ( *PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); typedef int ( *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); typedef int ( *PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); typedef int ( *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); #ifdef GLX_GLXEXT_PROTOTYPES GLXHyperpipeNetworkSGIX *glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes); int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); GLXHyperpipeConfigSGIX *glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes); int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId); int glXBindHyperpipeSGIX (Display *dpy, int hpId); int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList); int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); #endif #endif /* GLX_SGIX_hyperpipe */ #ifndef GLX_SGIX_pbuffer #define GLX_SGIX_pbuffer 1 #define GLX_PBUFFER_BIT_SGIX 0x00000004 #define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 #define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 #define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 #define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 #define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 #define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 #define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 #define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 #define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A #define GLX_PRESERVED_CONTENTS_SGIX 0x801B #define GLX_LARGEST_PBUFFER_SGIX 0x801C #define GLX_WIDTH_SGIX 0x801D #define GLX_HEIGHT_SGIX 0x801E #define GLX_EVENT_MASK_SGIX 0x801F #define GLX_DAMAGED_SGIX 0x8020 #define GLX_SAVED_SGIX 0x8021 #define GLX_WINDOW_SGIX 0x8022 #define GLX_PBUFFER_SGIX 0x8023 typedef GLXPbufferSGIX ( *PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list); typedef void ( *PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf); typedef int ( *PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value); typedef void ( *PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask); typedef void ( *PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask); #ifdef GLX_GLXEXT_PROTOTYPES GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list); void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf); int glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value); void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask); void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask); #endif #endif /* GLX_SGIX_pbuffer */ #ifndef GLX_SGIX_swap_barrier #define GLX_SGIX_swap_barrier 1 typedef void ( *PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); typedef Bool ( *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); #ifdef GLX_GLXEXT_PROTOTYPES void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier); Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max); #endif #endif /* GLX_SGIX_swap_barrier */ #ifndef GLX_SGIX_swap_group #define GLX_SGIX_swap_group 1 typedef void ( *PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); #ifdef GLX_GLXEXT_PROTOTYPES void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member); #endif #endif /* GLX_SGIX_swap_group */ #ifndef GLX_SGIX_video_resize #define GLX_SGIX_video_resize 1 #define GLX_SYNC_FRAME_SGIX 0x00000000 #define GLX_SYNC_SWAP_SGIX 0x00000001 typedef int ( *PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window); typedef int ( *PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h); typedef int ( *PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); typedef int ( *PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h); typedef int ( *PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype); #ifdef GLX_GLXEXT_PROTOTYPES int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window); int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h); int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h); int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype); #endif #endif /* GLX_SGIX_video_resize */ #ifndef GLX_SGIX_video_source #define GLX_SGIX_video_source 1 typedef XID GLXVideoSourceSGIX; #ifdef _VL_H typedef GLXVideoSourceSGIX ( *PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode); typedef void ( *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource); #ifdef GLX_GLXEXT_PROTOTYPES GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode); void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource); #endif #endif /* _VL_H */ #endif /* GLX_SGIX_video_source */ #ifndef GLX_SGIX_visual_select_group #define GLX_SGIX_visual_select_group 1 #define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 #endif /* GLX_SGIX_visual_select_group */ #ifndef GLX_SGI_cushion #define GLX_SGI_cushion 1 typedef void ( *PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion); #ifdef GLX_GLXEXT_PROTOTYPES void glXCushionSGI (Display *dpy, Window window, float cushion); #endif #endif /* GLX_SGI_cushion */ #ifndef GLX_SGI_make_current_read #define GLX_SGI_make_current_read 1 typedef Bool ( *PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLXDrawable glXGetCurrentReadDrawableSGI (void); #endif #endif /* GLX_SGI_make_current_read */ #ifndef GLX_SGI_swap_control #define GLX_SGI_swap_control 1 typedef int ( *PFNGLXSWAPINTERVALSGIPROC) (int interval); #ifdef GLX_GLXEXT_PROTOTYPES int glXSwapIntervalSGI (int interval); #endif #endif /* GLX_SGI_swap_control */ #ifndef GLX_SGI_video_sync #define GLX_SGI_video_sync 1 typedef int ( *PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count); typedef int ( *PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetVideoSyncSGI (unsigned int *count); int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count); #endif #endif /* GLX_SGI_video_sync */ #ifndef GLX_SUN_get_transparent_index #define GLX_SUN_get_transparent_index 1 typedef Status ( *PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex); #ifdef GLX_GLXEXT_PROTOTYPES Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex); #endif #endif /* GLX_SUN_get_transparent_index */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/GL/glext.h0000664000175000017500000277603512543167424017463 0ustar chrischris#ifndef __glext_h_ #define __glext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 31191 $ on $Date: 2015-05-14 03:31:39 -0700 (Thu, 14 May 2015) $ */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPI #define GLAPI extern #endif #define GL_GLEXT_VERSION 20150514 /* Generated C header for: * API: gl * Profile: compatibility * Versions considered: .* * Versions emitted: 1\.[2-9]|[234]\.[0-9] * Default extensions included: gl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_RESCALE_NORMAL 0x803A #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_ALIASED_POINT_SIZE_RANGE 0x846D typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_VERSION_1_2 */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTexture (GLenum texture); GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); GLAPI void APIENTRY glClientActiveTexture (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); #endif #endif /* GL_VERSION_1_3 */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_COMPARE_R_TO_TEXTURE 0x884E #define GL_FUNC_ADD 0x8006 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); GLAPI void APIENTRY glFogCoordf (GLfloat coord); GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); GLAPI void APIENTRY glFogCoordd (GLdouble coord); GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2iv (const GLint *v); GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3iv (const GLint *v); GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glBlendEquation (GLenum mode); #endif #endif /* GL_VERSION_1_4 */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #include typedef ptrdiff_t GLsizeiptr; typedef ptrdiff_t GLintptr; #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_CURRENT_FOG_COORD 0x8453 #define GL_FOG_COORD_ARRAY_TYPE 0x8454 #define GL_FOG_COORD_ARRAY_STRIDE 0x8455 #define GL_FOG_COORD_ARRAY_POINTER 0x8456 #define GL_FOG_COORD_ARRAY 0x8457 #define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC2_ALPHA 0x858A typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQuery (GLuint id); GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); GLAPI void APIENTRY glEndQuery (GLenum target); GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); #endif #endif /* GL_VERSION_1_5 */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 typedef char GLchar; #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_TEXTURE_COORDS 0x8871 typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GLAPI void APIENTRY glCompileShader (GLuint shader); GLAPI GLuint APIENTRY glCreateProgram (void); GLAPI GLuint APIENTRY glCreateShader (GLenum type); GLAPI void APIENTRY glDeleteProgram (GLuint program); GLAPI void APIENTRY glDeleteShader (GLuint shader); GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); GLAPI GLboolean APIENTRY glIsProgram (GLuint program); GLAPI GLboolean APIENTRY glIsShader (GLuint shader); GLAPI void APIENTRY glLinkProgram (GLuint program); GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI void APIENTRY glUseProgram (GLuint program); GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glValidateProgram (GLuint program); GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #endif #endif /* GL_VERSION_2_0 */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_VERSION_2_1 */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 typedef unsigned short GLhalf; #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_INDEX 0x8222 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GL_HALF_FLOAT 0x140B #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_ALPHA_INTEGER 0x8D97 typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedback (void); GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRender (void); GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmap (GLenum target); GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glBindVertexArray (GLuint array); GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); #endif #endif /* GL_VERSION_3_0 */ #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFFu typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #endif #endif /* GL_VERSION_3_1 */ #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 typedef struct __GLsync *GLsync; #ifndef GLEXT_64_TYPES_DEFINED /* This code block is duplicated in glxext.h, so must be protected */ #define GLEXT_64_TYPES_DEFINED /* Define int32_t, int64_t, and uint64_t types for UST/MSC */ /* (as used in the GL_EXT_timer_query extension). */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #include #elif defined(__sun__) || defined(__digital__) #include #if defined(__STDC__) #if defined(__arch64__) || defined(_LP64) typedef long int int64_t; typedef unsigned long int uint64_t; #else typedef long long int int64_t; typedef unsigned long long int uint64_t; #endif /* __arch64__ */ #endif /* __STDC__ */ #elif defined( __VMS ) || defined(__sgi) #include #elif defined(__SCO__) || defined(__USLC__) #include #elif defined(__UNIXOS2__) || defined(__SOL64__) typedef long int int32_t; typedef long long int int64_t; typedef unsigned long long int uint64_t; #elif defined(_WIN32) && defined(__GNUC__) #include #elif defined(_WIN32) typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else /* Fallback if nothing above works */ #include #endif #endif typedef uint64_t GLuint64; typedef int64_t GLint64; #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_DEPTH_CLAMP 0x864F #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); GLAPI void APIENTRY glProvokingVertex (GLenum mode); GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); GLAPI GLboolean APIENTRY glIsSync (GLsync sync); GLAPI void APIENTRY glDeleteSync (GLsync sync); GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); #endif #endif /* GL_VERSION_3_2 */ #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); #endif #endif /* GL_VERSION_3_3 */ #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MAX_VERTEX_STREAMS 0x8E71 #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B #define GL_PATCHES 0x000E #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 #define GL_ISOLINES 0x8E7A #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShading (GLfloat value); GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); GLAPI void APIENTRY glPauseTransformFeedback (void); GLAPI void APIENTRY glResumeTransformFeedback (void); GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); #endif #endif /* GL_VERSION_4_0 */ #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 #define GL_FIXED 0x140C #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_RGB565 0x8D62 #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF #define GL_VERTEX_SHADER_BIT 0x00000001 #define GL_FRAGMENT_SHADER_BIT 0x00000002 #define GL_GEOMETRY_SHADER_BIT 0x00000004 #define GL_TESS_CONTROL_SHADER_BIT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 #define GL_ALL_SHADER_BITS 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE 0x8258 #define GL_ACTIVE_PROGRAM 0x8259 #define GL_PROGRAM_PIPELINE_BINDING 0x825A #define GL_MAX_VIEWPORTS 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS 0x825C #define GL_VIEWPORT_BOUNDS_RANGE 0x825D #define GL_LAYER_PROVOKING_VERTEX 0x825E #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F #define GL_UNDEFINED_VERTEX 0x8260 typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReleaseShaderCompiler (void); GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); GLAPI void APIENTRY glClearDepthf (GLfloat d); GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); #endif #endif /* GL_VERSION_4_1 */ #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 #define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 #define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 #define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A #define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B #define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C #define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D #define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E #define GL_NUM_SAMPLE_COUNTS 0x9380 #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #define GL_ATOMIC_COUNTER_BUFFER 0x92C0 #define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 #define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 #define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 #define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF #define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 #define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 #define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 #define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 #define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 #define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 #define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC #define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 #define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA #define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 #define GL_UNIFORM_BARRIER_BIT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 #define GL_COMMAND_BARRIER_BIT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 #define GL_ALL_BARRIER_BITS 0xFFFFFFFF #define GL_MAX_IMAGE_UNITS 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_IMAGE_BINDING_NAME 0x8F3A #define GL_IMAGE_BINDING_LEVEL 0x8F3B #define GL_IMAGE_BINDING_LAYERED 0x8F3C #define GL_IMAGE_BINDING_LAYER 0x8F3D #define GL_IMAGE_BINDING_ACCESS 0x8F3E #define GL_IMAGE_1D 0x904C #define GL_IMAGE_2D 0x904D #define GL_IMAGE_3D 0x904E #define GL_IMAGE_2D_RECT 0x904F #define GL_IMAGE_CUBE 0x9050 #define GL_IMAGE_BUFFER 0x9051 #define GL_IMAGE_1D_ARRAY 0x9052 #define GL_IMAGE_2D_ARRAY 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 #define GL_IMAGE_2D_MULTISAMPLE 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 #define GL_INT_IMAGE_1D 0x9057 #define GL_INT_IMAGE_2D 0x9058 #define GL_INT_IMAGE_3D 0x9059 #define GL_INT_IMAGE_2D_RECT 0x905A #define GL_INT_IMAGE_CUBE 0x905B #define GL_INT_IMAGE_BUFFER 0x905C #define GL_INT_IMAGE_1D_ARRAY 0x905D #define GL_INT_IMAGE_2D_ARRAY 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C #define GL_MAX_IMAGE_SAMPLES 0x906D #define GL_IMAGE_BINDING_FORMAT 0x906E #define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 #define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD #define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #endif #endif /* GL_VERSION_4_2 */ #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B #define GL_COMPUTE_SHADER 0x91B9 #define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB #define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC #define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD #define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 #define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 #define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 #define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 #define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 #define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF #define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_DISPATCH_INDIRECT_BUFFER 0x90EE #define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF #define GL_COMPUTE_SHADER_BIT 0x00000020 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_BUFFER 0x82E0 #define GL_SHADER 0x82E1 #define GL_PROGRAM 0x82E2 #define GL_QUERY 0x82E3 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_SAMPLER 0x82E6 #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_MAX_UNIFORM_LOCATIONS 0x826E #define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 #define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 #define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 #define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 #define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 #define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 #define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 #define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 #define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 #define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 #define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 #define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 #define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 #define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 #define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 #define GL_INTERNALFORMAT_RED_TYPE 0x8278 #define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 #define GL_INTERNALFORMAT_BLUE_TYPE 0x827A #define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B #define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C #define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D #define GL_MAX_WIDTH 0x827E #define GL_MAX_HEIGHT 0x827F #define GL_MAX_DEPTH 0x8280 #define GL_MAX_LAYERS 0x8281 #define GL_MAX_COMBINED_DIMENSIONS 0x8282 #define GL_COLOR_COMPONENTS 0x8283 #define GL_DEPTH_COMPONENTS 0x8284 #define GL_STENCIL_COMPONENTS 0x8285 #define GL_COLOR_RENDERABLE 0x8286 #define GL_DEPTH_RENDERABLE 0x8287 #define GL_STENCIL_RENDERABLE 0x8288 #define GL_FRAMEBUFFER_RENDERABLE 0x8289 #define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A #define GL_FRAMEBUFFER_BLEND 0x828B #define GL_READ_PIXELS 0x828C #define GL_READ_PIXELS_FORMAT 0x828D #define GL_READ_PIXELS_TYPE 0x828E #define GL_TEXTURE_IMAGE_FORMAT 0x828F #define GL_TEXTURE_IMAGE_TYPE 0x8290 #define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 #define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 #define GL_MIPMAP 0x8293 #define GL_MANUAL_GENERATE_MIPMAP 0x8294 #define GL_AUTO_GENERATE_MIPMAP 0x8295 #define GL_COLOR_ENCODING 0x8296 #define GL_SRGB_READ 0x8297 #define GL_SRGB_WRITE 0x8298 #define GL_FILTER 0x829A #define GL_VERTEX_TEXTURE 0x829B #define GL_TESS_CONTROL_TEXTURE 0x829C #define GL_TESS_EVALUATION_TEXTURE 0x829D #define GL_GEOMETRY_TEXTURE 0x829E #define GL_FRAGMENT_TEXTURE 0x829F #define GL_COMPUTE_TEXTURE 0x82A0 #define GL_TEXTURE_SHADOW 0x82A1 #define GL_TEXTURE_GATHER 0x82A2 #define GL_TEXTURE_GATHER_SHADOW 0x82A3 #define GL_SHADER_IMAGE_LOAD 0x82A4 #define GL_SHADER_IMAGE_STORE 0x82A5 #define GL_SHADER_IMAGE_ATOMIC 0x82A6 #define GL_IMAGE_TEXEL_SIZE 0x82A7 #define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 #define GL_IMAGE_PIXEL_FORMAT 0x82A9 #define GL_IMAGE_PIXEL_TYPE 0x82AA #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF #define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 #define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 #define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 #define GL_CLEAR_BUFFER 0x82B4 #define GL_TEXTURE_VIEW 0x82B5 #define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 #define GL_FULL_SUPPORT 0x82B7 #define GL_CAVEAT_SUPPORT 0x82B8 #define GL_IMAGE_CLASS_4_X_32 0x82B9 #define GL_IMAGE_CLASS_2_X_32 0x82BA #define GL_IMAGE_CLASS_1_X_32 0x82BB #define GL_IMAGE_CLASS_4_X_16 0x82BC #define GL_IMAGE_CLASS_2_X_16 0x82BD #define GL_IMAGE_CLASS_1_X_16 0x82BE #define GL_IMAGE_CLASS_4_X_8 0x82BF #define GL_IMAGE_CLASS_2_X_8 0x82C0 #define GL_IMAGE_CLASS_1_X_8 0x82C1 #define GL_IMAGE_CLASS_11_11_10 0x82C2 #define GL_IMAGE_CLASS_10_10_10_2 0x82C3 #define GL_VIEW_CLASS_128_BITS 0x82C4 #define GL_VIEW_CLASS_96_BITS 0x82C5 #define GL_VIEW_CLASS_64_BITS 0x82C6 #define GL_VIEW_CLASS_48_BITS 0x82C7 #define GL_VIEW_CLASS_32_BITS 0x82C8 #define GL_VIEW_CLASS_24_BITS 0x82C9 #define GL_VIEW_CLASS_16_BITS 0x82CA #define GL_VIEW_CLASS_8_BITS 0x82CB #define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC #define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD #define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE #define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF #define GL_VIEW_CLASS_RGTC1_RED 0x82D0 #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 #define GL_UNIFORM 0x92E1 #define GL_UNIFORM_BLOCK 0x92E2 #define GL_PROGRAM_INPUT 0x92E3 #define GL_PROGRAM_OUTPUT 0x92E4 #define GL_BUFFER_VARIABLE 0x92E5 #define GL_SHADER_STORAGE_BLOCK 0x92E6 #define GL_VERTEX_SUBROUTINE 0x92E8 #define GL_TESS_CONTROL_SUBROUTINE 0x92E9 #define GL_TESS_EVALUATION_SUBROUTINE 0x92EA #define GL_GEOMETRY_SUBROUTINE 0x92EB #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_COMPUTE_SUBROUTINE 0x92ED #define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE #define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF #define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 #define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 #define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 #define GL_ACTIVE_RESOURCES 0x92F5 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 #define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 #define GL_NAME_LENGTH 0x92F9 #define GL_TYPE 0x92FA #define GL_ARRAY_SIZE 0x92FB #define GL_OFFSET 0x92FC #define GL_BLOCK_INDEX 0x92FD #define GL_ARRAY_STRIDE 0x92FE #define GL_MATRIX_STRIDE 0x92FF #define GL_IS_ROW_MAJOR 0x9300 #define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 #define GL_BUFFER_BINDING 0x9302 #define GL_BUFFER_DATA_SIZE 0x9303 #define GL_NUM_ACTIVE_VARIABLES 0x9304 #define GL_ACTIVE_VARIABLES 0x9305 #define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_TOP_LEVEL_ARRAY_SIZE 0x930C #define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D #define GL_LOCATION 0x930E #define GL_LOCATION_INDEX 0x930F #define GL_IS_PER_PATCH 0x92E7 #define GL_SHADER_STORAGE_BUFFER 0x90D2 #define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 #define GL_SHADER_STORAGE_BUFFER_START 0x90D4 #define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 #define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA #define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC #define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD #define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE #define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF #define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F #define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #define GL_VERTEX_ATTRIB_BINDING 0x82D4 #define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 #define GL_VERTEX_BINDING_DIVISOR 0x82D6 #define GL_VERTEX_BINDING_OFFSET 0x82D7 #define GL_VERTEX_BINDING_STRIDE 0x82D8 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 #define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA #define GL_VERTEX_BINDING_BUFFER 0x8F4F #define GL_DISPLAY_LIST 0x82E7 typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); GLAPI void APIENTRY glPopDebugGroup (void); GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_VERSION_4_3 */ #ifndef GL_VERSION_4_4 #define GL_VERSION_4_4 1 #define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 #define GL_TEXTURE_BUFFER_BINDING 0x8C2A #define GL_MAP_PERSISTENT_BIT 0x0040 #define GL_MAP_COHERENT_BIT 0x0080 #define GL_DYNAMIC_STORAGE_BIT 0x0100 #define GL_CLIENT_STORAGE_BIT 0x0200 #define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 #define GL_BUFFER_IMMUTABLE_STORAGE 0x821F #define GL_BUFFER_STORAGE_FLAGS 0x8220 #define GL_CLEAR_TEXTURE 0x9365 #define GL_LOCATION_COMPONENT 0x934A #define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B #define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C #define GL_QUERY_BUFFER 0x9192 #define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 #define GL_QUERY_BUFFER_BINDING 0x9193 #define GL_QUERY_RESULT_NO_WAIT 0x9194 #define GL_MIRROR_CLAMP_TO_EDGE 0x8743 typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #endif #endif /* GL_VERSION_4_4 */ #ifndef GL_VERSION_4_5 #define GL_VERSION_4_5 1 #define GL_CONTEXT_LOST 0x0507 #define GL_NEGATIVE_ONE_TO_ONE 0x935E #define GL_ZERO_TO_ONE 0x935F #define GL_CLIP_ORIGIN 0x935C #define GL_CLIP_DEPTH_MODE 0x935D #define GL_QUERY_WAIT_INVERTED 0x8E17 #define GL_QUERY_NO_WAIT_INVERTED 0x8E18 #define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 #define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A #define GL_MAX_CULL_DISTANCES 0x82F9 #define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA #define GL_TEXTURE_TARGET 0x1006 #define GL_QUERY_TARGET 0x82EA #define GL_GUILTY_CONTEXT_RESET 0x8253 #define GL_INNOCENT_CONTEXT_RESET 0x8254 #define GL_UNKNOWN_CONTEXT_RESET 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY 0x8256 #define GL_LOSE_CONTEXT_ON_RESET 0x8252 #define GL_NO_RESET_NOTIFICATION 0x8261 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glTextureBarrier (void); #endif #endif /* GL_VERSION_4_5 */ #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #endif /* GL_ARB_ES2_compatibility */ #ifndef GL_ARB_ES3_1_compatibility #define GL_ARB_ES3_1_compatibility 1 #endif /* GL_ARB_ES3_1_compatibility */ #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #endif /* GL_ARB_ES3_compatibility */ #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #endif /* GL_ARB_arrays_of_arrays */ #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 #endif /* GL_ARB_base_instance */ #ifndef GL_ARB_bindless_texture #define GL_ARB_bindless_texture 1 typedef uint64_t GLuint64EXT; #define GL_UNSIGNED_INT64_ARB 0x140F typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); #endif #endif /* GL_ARB_bindless_texture */ #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #endif /* GL_ARB_blend_func_extended */ #ifndef GL_ARB_buffer_storage #define GL_ARB_buffer_storage 1 #endif /* GL_ARB_buffer_storage */ #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 struct _cl_context; struct _cl_event; #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #endif #endif /* GL_ARB_cl_event */ #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 #endif /* GL_ARB_clear_buffer_object */ #ifndef GL_ARB_clear_texture #define GL_ARB_clear_texture 1 #endif /* GL_ARB_clear_texture */ #ifndef GL_ARB_clip_control #define GL_ARB_clip_control 1 #endif /* GL_ARB_clip_control */ #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); #endif #endif /* GL_ARB_color_buffer_float */ #ifndef GL_ARB_compatibility #define GL_ARB_compatibility 1 #endif /* GL_ARB_compatibility */ #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #endif /* GL_ARB_compute_shader */ #ifndef GL_ARB_compute_variable_group_size #define GL_ARB_compute_variable_group_size 1 #define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 #define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB #define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 #define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #endif #endif /* GL_ARB_compute_variable_group_size */ #ifndef GL_ARB_conditional_render_inverted #define GL_ARB_conditional_render_inverted 1 #endif /* GL_ARB_conditional_render_inverted */ #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #endif /* GL_ARB_conservative_depth */ #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #endif /* GL_ARB_copy_buffer */ #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 #endif /* GL_ARB_copy_image */ #ifndef GL_ARB_cull_distance #define GL_ARB_cull_distance 1 #endif /* GL_ARB_cull_distance */ #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #endif #endif /* GL_ARB_debug_output */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #endif /* GL_ARB_depth_buffer_float */ #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #endif /* GL_ARB_depth_clamp */ #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif /* GL_ARB_depth_texture */ #ifndef GL_ARB_derivative_control #define GL_ARB_derivative_control 1 #endif /* GL_ARB_derivative_control */ #ifndef GL_ARB_direct_state_access #define GL_ARB_direct_state_access 1 #endif /* GL_ARB_direct_state_access */ #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); #endif #endif /* GL_ARB_draw_buffers */ #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif #endif /* GL_ARB_draw_buffers_blend */ #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 #endif /* GL_ARB_draw_elements_base_vertex */ #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #endif /* GL_ARB_draw_indirect */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_ARB_draw_instanced */ #ifndef GL_ARB_enhanced_layouts #define GL_ARB_enhanced_layouts 1 #endif /* GL_ARB_enhanced_layouts */ #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #endif /* GL_ARB_explicit_attrib_location */ #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #endif /* GL_ARB_explicit_uniform_location */ #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #endif /* GL_ARB_fragment_coord_conventions */ #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #endif /* GL_ARB_fragment_layer_viewport */ #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); #endif #endif /* GL_ARB_fragment_program */ #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #endif /* GL_ARB_fragment_program_shadow */ #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif /* GL_ARB_fragment_shader */ #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #endif /* GL_ARB_framebuffer_no_attachments */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #endif /* GL_ARB_framebuffer_object */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #endif /* GL_ARB_framebuffer_sRGB */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #define GL_LINES_ADJACENCY_ARB 0x000A #define GL_LINE_STRIP_ADJACENCY_ARB 0x000B #define GL_TRIANGLES_ADJACENCY_ARB 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #endif /* GL_ARB_geometry_shader4 */ #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #endif /* GL_ARB_get_program_binary */ #ifndef GL_ARB_get_texture_sub_image #define GL_ARB_get_texture_sub_image 1 #endif /* GL_ARB_get_texture_sub_image */ #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #endif /* GL_ARB_gpu_shader5 */ #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #endif /* GL_ARB_gpu_shader_fp64 */ #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 typedef unsigned short GLhalfARB; #define GL_HALF_FLOAT_ARB 0x140B #endif /* GL_ARB_half_float_pixel */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #endif /* GL_ARB_half_float_vertex */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #define GL_BLEND_COLOR 0x8005 #define GL_BLEND_EQUATION 0x8009 #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogram (GLenum target); GLAPI void APIENTRY glResetMinmax (GLenum target); #endif #endif /* GL_ARB_imaging */ #ifndef GL_ARB_indirect_parameters #define GL_ARB_indirect_parameters 1 #define GL_PARAMETER_BUFFER_ARB 0x80EE #define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_ARB_indirect_parameters */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); #endif #endif /* GL_ARB_instanced_arrays */ #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #endif /* GL_ARB_internalformat_query */ #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #define GL_SRGB_DECODE_ARB 0x8299 #endif /* GL_ARB_internalformat_query2 */ #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 #endif /* GL_ARB_invalidate_subdata */ #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #endif /* GL_ARB_map_buffer_alignment */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #endif /* GL_ARB_map_buffer_range */ #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_ARB_matrix_palette */ #ifndef GL_ARB_multi_bind #define GL_ARB_multi_bind 1 #endif /* GL_ARB_multi_bind */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 #endif /* GL_ARB_multi_draw_indirect */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); #endif #endif /* GL_ARB_multisample */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTextureARB (GLenum texture); GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); #endif #endif /* GL_ARB_multitexture */ #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); GLAPI void APIENTRY glEndQueryARB (GLenum target); GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); #endif #endif /* GL_ARB_occlusion_query */ #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #endif /* GL_ARB_occlusion_query2 */ #ifndef GL_ARB_pipeline_statistics_query #define GL_ARB_pipeline_statistics_query 1 #define GL_VERTICES_SUBMITTED_ARB 0x82EE #define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF #define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 #define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 #define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 #define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 #define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 #define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 #define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 #define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 #endif /* GL_ARB_pipeline_statistics_query */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #endif /* GL_ARB_pixel_buffer_object */ #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); #endif #endif /* GL_ARB_point_parameters */ #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #endif /* GL_ARB_point_sprite */ #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #endif /* GL_ARB_program_interface_query */ #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #endif /* GL_ARB_provoking_vertex */ #ifndef GL_ARB_query_buffer_object #define GL_ARB_query_buffer_object 1 #endif /* GL_ARB_query_buffer_object */ #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #endif /* GL_ARB_robust_buffer_access_behavior */ #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); #endif #endif /* GL_ARB_robustness */ #ifndef GL_ARB_robustness_isolation #define GL_ARB_robustness_isolation 1 #endif /* GL_ARB_robustness_isolation */ #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); #endif #endif /* GL_ARB_sample_shading */ #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #endif /* GL_ARB_sampler_objects */ #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #endif /* GL_ARB_seamless_cube_map */ #ifndef GL_ARB_seamless_cubemap_per_texture #define GL_ARB_seamless_cubemap_per_texture 1 #endif /* GL_ARB_seamless_cubemap_per_texture */ #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #endif /* GL_ARB_separate_shader_objects */ #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #endif /* GL_ARB_shader_atomic_counters */ #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #endif /* GL_ARB_shader_bit_encoding */ #ifndef GL_ARB_shader_draw_parameters #define GL_ARB_shader_draw_parameters 1 #endif /* GL_ARB_shader_draw_parameters */ #ifndef GL_ARB_shader_group_vote #define GL_ARB_shader_group_vote 1 #endif /* GL_ARB_shader_group_vote */ #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #endif /* GL_ARB_shader_image_load_store */ #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #endif /* GL_ARB_shader_image_size */ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #ifdef __APPLE__ typedef unsigned long GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef char GLcharARB; #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #endif #endif /* GL_ARB_shader_objects */ #ifndef GL_ARB_shader_precision #define GL_ARB_shader_precision 1 #endif /* GL_ARB_shader_precision */ #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #endif /* GL_ARB_shader_stencil_export */ #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #endif /* GL_ARB_shader_storage_buffer_object */ #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #endif /* GL_ARB_shader_subroutine */ #ifndef GL_ARB_shader_texture_image_samples #define GL_ARB_shader_texture_image_samples 1 #endif /* GL_ARB_shader_texture_image_samples */ #ifndef GL_ARB_shader_texture_lod #define GL_ARB_shader_texture_lod 1 #endif /* GL_ARB_shader_texture_lod */ #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif /* GL_ARB_shading_language_100 */ #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #endif /* GL_ARB_shading_language_420pack */ #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #endif #endif /* GL_ARB_shading_language_include */ #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #endif /* GL_ARB_shading_language_packing */ #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif /* GL_ARB_shadow */ #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif /* GL_ARB_shadow_ambient */ #ifndef GL_ARB_sparse_buffer #define GL_ARB_sparse_buffer 1 #define GL_SPARSE_STORAGE_BIT_ARB 0x0400 #define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #endif #endif /* GL_ARB_sparse_buffer */ #ifndef GL_ARB_sparse_texture #define GL_ARB_sparse_texture 1 #define GL_TEXTURE_SPARSE_ARB 0x91A6 #define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 #define GL_NUM_SPARSE_LEVELS_ARB 0x91AA #define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 #define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A #define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #endif #endif /* GL_ARB_sparse_texture */ #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #endif /* GL_ARB_stencil_texturing */ #ifndef GL_ARB_sync #define GL_ARB_sync 1 #endif /* GL_ARB_sync */ #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #endif /* GL_ARB_tessellation_shader */ #ifndef GL_ARB_texture_barrier #define GL_ARB_texture_barrier 1 #endif /* GL_ARB_texture_barrier */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif /* GL_ARB_texture_border_clamp */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); #endif #endif /* GL_ARB_texture_buffer_object */ #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #endif /* GL_ARB_texture_buffer_range */ #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); #endif #endif /* GL_ARB_texture_compression */ #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #endif /* GL_ARB_texture_compression_bptc */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #endif /* GL_ARB_texture_compression_rgtc */ #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif /* GL_ARB_texture_cube_map */ #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F #endif /* GL_ARB_texture_cube_map_array */ #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #endif /* GL_ARB_texture_env_add */ #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif /* GL_ARB_texture_env_combine */ #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #endif /* GL_ARB_texture_env_crossbar */ #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #endif /* GL_ARB_texture_env_dot3 */ #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #endif /* GL_ARB_texture_float */ #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F #endif /* GL_ARB_texture_gather */ #ifndef GL_ARB_texture_mirror_clamp_to_edge #define GL_ARB_texture_mirror_clamp_to_edge 1 #endif /* GL_ARB_texture_mirror_clamp_to_edge */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif /* GL_ARB_texture_mirrored_repeat */ #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #endif /* GL_ARB_texture_multisample */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #endif /* GL_ARB_texture_non_power_of_two */ #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #endif /* GL_ARB_texture_query_levels */ #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #endif /* GL_ARB_texture_query_lod */ #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif /* GL_ARB_texture_rectangle */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #endif /* GL_ARB_texture_rg */ #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #endif /* GL_ARB_texture_rgb10_a2ui */ #ifndef GL_ARB_texture_stencil8 #define GL_ARB_texture_stencil8 1 #endif /* GL_ARB_texture_stencil8 */ #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #endif /* GL_ARB_texture_storage */ #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 #endif /* GL_ARB_texture_storage_multisample */ #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #endif /* GL_ARB_texture_swizzle */ #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #endif /* GL_ARB_texture_view */ #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #endif /* GL_ARB_timer_query */ #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #endif /* GL_ARB_transform_feedback2 */ #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #endif /* GL_ARB_transform_feedback3 */ #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 #endif /* GL_ARB_transform_feedback_instanced */ #ifndef GL_ARB_transform_feedback_overflow_query #define GL_ARB_transform_feedback_overflow_query 1 #define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC #define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED #endif /* GL_ARB_transform_feedback_overflow_query */ #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); #endif #endif /* GL_ARB_transpose_matrix */ #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #endif /* GL_ARB_uniform_buffer_object */ #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #endif /* GL_ARB_vertex_array_bgra */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #endif /* GL_ARB_vertex_array_object */ #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #endif /* GL_ARB_vertex_attrib_64bit */ #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #endif /* GL_ARB_vertex_attrib_binding */ #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glVertexBlendARB (GLint count); #endif #endif /* GL_ARB_vertex_blend */ #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 typedef ptrdiff_t GLsizeiptrARB; typedef ptrdiff_t GLintptrARB; #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); #endif #endif /* GL_ARB_vertex_buffer_object */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); #endif #endif /* GL_ARB_vertex_program */ #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); #endif #endif /* GL_ARB_vertex_shader */ #ifndef GL_ARB_vertex_type_10f_11f_11f_rev #define GL_ARB_vertex_type_10f_11f_11f_rev 1 #endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 #endif /* GL_ARB_viewport_array */ #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); #endif #endif /* GL_ARB_window_pos */ #ifndef GL_KHR_blend_equation_advanced #define GL_KHR_blend_equation_advanced 1 #define GL_MULTIPLY_KHR 0x9294 #define GL_SCREEN_KHR 0x9295 #define GL_OVERLAY_KHR 0x9296 #define GL_DARKEN_KHR 0x9297 #define GL_LIGHTEN_KHR 0x9298 #define GL_COLORDODGE_KHR 0x9299 #define GL_COLORBURN_KHR 0x929A #define GL_HARDLIGHT_KHR 0x929B #define GL_SOFTLIGHT_KHR 0x929C #define GL_DIFFERENCE_KHR 0x929E #define GL_EXCLUSION_KHR 0x92A0 #define GL_HSL_HUE_KHR 0x92AD #define GL_HSL_SATURATION_KHR 0x92AE #define GL_HSL_COLOR_KHR 0x92AF #define GL_HSL_LUMINOSITY_KHR 0x92B0 typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendBarrierKHR (void); #endif #endif /* GL_KHR_blend_equation_advanced */ #ifndef GL_KHR_blend_equation_advanced_coherent #define GL_KHR_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 #endif /* GL_KHR_blend_equation_advanced_coherent */ #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 #endif /* GL_KHR_context_flush_control */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 #endif /* GL_KHR_debug */ #ifndef GL_KHR_no_error #define GL_KHR_no_error 1 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 #endif /* GL_KHR_no_error */ #ifndef GL_KHR_robust_buffer_access_behavior #define GL_KHR_robust_buffer_access_behavior 1 #endif /* GL_KHR_robust_buffer_access_behavior */ #ifndef GL_KHR_robustness #define GL_KHR_robustness 1 #define GL_CONTEXT_ROBUST_ACCESS 0x90F3 #endif /* GL_KHR_robustness */ #ifndef GL_KHR_texture_compression_astc_hdr #define GL_KHR_texture_compression_astc_hdr 1 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif /* GL_KHR_texture_compression_astc_hdr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); #endif #endif /* GL_OES_byte_coordinates */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_fixed_point #define GL_OES_fixed_point 1 typedef GLint GLfixed; #define GL_FIXED_OES 0x140C typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glLineWidthxOES (GLfixed width); GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); GLAPI void APIENTRY glPointSizexOES (GLfixed size); GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); GLAPI void APIENTRY glIndexxOES (GLfixed component); GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); GLAPI void APIENTRY glPassThroughxOES (GLfixed token); GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glVertex2xOES (GLfixed x); GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); #endif #endif /* GL_OES_fixed_point */ #ifndef GL_OES_query_matrix #define GL_OES_query_matrix 1 typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); #endif #endif /* GL_OES_query_matrix */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif /* GL_OES_read_format */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); #endif #endif /* GL_OES_single_precision */ #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif /* GL_3DFX_multisample */ #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); #endif #endif /* GL_3DFX_tbuffer */ #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif /* GL_3DFX_texture_compression_FXT1 */ #ifndef GL_AMD_blend_minmax_factor #define GL_AMD_blend_minmax_factor 1 #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif /* GL_AMD_blend_minmax_factor */ #ifndef GL_AMD_conservative_depth #define GL_AMD_conservative_depth 1 #endif /* GL_AMD_conservative_depth */ #ifndef GL_AMD_debug_output #define GL_AMD_debug_output 1 typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); #define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 #define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 #define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 #define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 #define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A #define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B #define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C #define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D #define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E #define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F #define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #endif #endif /* GL_AMD_debug_output */ #ifndef GL_AMD_depth_clamp_separate #define GL_AMD_depth_clamp_separate 1 #define GL_DEPTH_CLAMP_NEAR_AMD 0x901E #define GL_DEPTH_CLAMP_FAR_AMD 0x901F #endif /* GL_AMD_depth_clamp_separate */ #ifndef GL_AMD_draw_buffers_blend #define GL_AMD_draw_buffers_blend 1 typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #endif #endif /* GL_AMD_draw_buffers_blend */ #ifndef GL_AMD_gcn_shader #define GL_AMD_gcn_shader 1 #endif /* GL_AMD_gcn_shader */ #ifndef GL_AMD_gpu_shader_int64 #define GL_AMD_gpu_shader_int64 1 typedef int64_t GLint64EXT; #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_AMD_gpu_shader_int64 */ #ifndef GL_AMD_interleaved_elements #define GL_AMD_interleaved_elements 1 #define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 #define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); #endif #endif /* GL_AMD_interleaved_elements */ #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); #endif #endif /* GL_AMD_multi_draw_indirect */ #ifndef GL_AMD_name_gen_delete #define GL_AMD_name_gen_delete 1 #define GL_DATA_BUFFER_AMD 0x9151 #define GL_PERFORMANCE_MONITOR_AMD 0x9152 #define GL_QUERY_OBJECT_AMD 0x9153 #define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 #define GL_SAMPLER_OBJECT_AMD 0x9155 typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); #endif #endif /* GL_AMD_name_gen_delete */ #ifndef GL_AMD_occlusion_query_event #define GL_AMD_occlusion_query_event 1 #define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F #define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 #define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 #define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 #define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 #define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); #endif #endif /* GL_AMD_occlusion_query_event */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #endif /* GL_AMD_performance_monitor */ #ifndef GL_AMD_pinned_memory #define GL_AMD_pinned_memory 1 #define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 #endif /* GL_AMD_pinned_memory */ #ifndef GL_AMD_query_buffer_object #define GL_AMD_query_buffer_object 1 #define GL_QUERY_BUFFER_AMD 0x9192 #define GL_QUERY_BUFFER_BINDING_AMD 0x9193 #define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 #endif /* GL_AMD_query_buffer_object */ #ifndef GL_AMD_sample_positions #define GL_AMD_sample_positions 1 #define GL_SUBSAMPLE_DISTANCE_AMD 0x883F typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); #endif #endif /* GL_AMD_sample_positions */ #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifndef GL_AMD_shader_atomic_counter_ops #define GL_AMD_shader_atomic_counter_ops 1 #endif /* GL_AMD_shader_atomic_counter_ops */ #ifndef GL_AMD_shader_stencil_export #define GL_AMD_shader_stencil_export 1 #endif /* GL_AMD_shader_stencil_export */ #ifndef GL_AMD_shader_trinary_minmax #define GL_AMD_shader_trinary_minmax 1 #endif /* GL_AMD_shader_trinary_minmax */ #ifndef GL_AMD_sparse_texture #define GL_AMD_sparse_texture 1 #define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A #define GL_MIN_SPARSE_LEVEL_AMD 0x919B #define GL_MIN_LOD_WARNING_AMD 0x919C #define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #endif #endif /* GL_AMD_sparse_texture */ #ifndef GL_AMD_stencil_operation_extended #define GL_AMD_stencil_operation_extended 1 #define GL_SET_AMD 0x874A #define GL_REPLACE_VALUE_AMD 0x874B #define GL_STENCIL_OP_VALUE_AMD 0x874C #define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); #endif #endif /* GL_AMD_stencil_operation_extended */ #ifndef GL_AMD_texture_texture4 #define GL_AMD_texture_texture4 1 #endif /* GL_AMD_texture_texture4 */ #ifndef GL_AMD_transform_feedback3_lines_triangles #define GL_AMD_transform_feedback3_lines_triangles 1 #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifndef GL_AMD_transform_feedback4 #define GL_AMD_transform_feedback4 1 #define GL_STREAM_RASTERIZATION_AMD 0x91A0 #endif /* GL_AMD_transform_feedback4 */ #ifndef GL_AMD_vertex_shader_layer #define GL_AMD_vertex_shader_layer 1 #endif /* GL_AMD_vertex_shader_layer */ #ifndef GL_AMD_vertex_shader_tessellator #define GL_AMD_vertex_shader_tessellator 1 #define GL_SAMPLER_BUFFER_AMD 0x9001 #define GL_INT_SAMPLER_BUFFER_AMD 0x9002 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 #define GL_TESSELLATION_MODE_AMD 0x9004 #define GL_TESSELLATION_FACTOR_AMD 0x9005 #define GL_DISCRETE_AMD 0x9006 #define GL_CONTINUOUS_AMD 0x9007 typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); #endif #endif /* GL_AMD_vertex_shader_tessellator */ #ifndef GL_AMD_vertex_shader_viewport_index #define GL_AMD_vertex_shader_viewport_index 1 #endif /* GL_AMD_vertex_shader_viewport_index */ #ifndef GL_APPLE_aux_depth_stencil #define GL_APPLE_aux_depth_stencil 1 #define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 #endif /* GL_APPLE_aux_depth_stencil */ #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #endif /* GL_APPLE_client_storage */ #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #define GL_ELEMENT_ARRAY_APPLE 0x8A0C #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #endif #endif /* GL_APPLE_element_array */ #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); #endif #endif /* GL_APPLE_fence */ #ifndef GL_APPLE_float_pixels #define GL_APPLE_float_pixels 1 #define GL_HALF_APPLE 0x140B #define GL_RGBA_FLOAT32_APPLE 0x8814 #define GL_RGB_FLOAT32_APPLE 0x8815 #define GL_ALPHA_FLOAT32_APPLE 0x8816 #define GL_INTENSITY_FLOAT32_APPLE 0x8817 #define GL_LUMINANCE_FLOAT32_APPLE 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 #define GL_RGBA_FLOAT16_APPLE 0x881A #define GL_RGB_FLOAT16_APPLE 0x881B #define GL_ALPHA_FLOAT16_APPLE 0x881C #define GL_INTENSITY_FLOAT16_APPLE 0x881D #define GL_LUMINANCE_FLOAT16_APPLE 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F #define GL_COLOR_FLOAT_APPLE 0x8A0F #endif /* GL_APPLE_float_pixels */ #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_APPLE_flush_buffer_range */ #ifndef GL_APPLE_object_purgeable #define GL_APPLE_object_purgeable 1 #define GL_BUFFER_OBJECT_APPLE 0x85B3 #define GL_RELEASED_APPLE 0x8A19 #define GL_VOLATILE_APPLE 0x8A1A #define GL_RETAINED_APPLE 0x8A1B #define GL_UNDEFINED_APPLE 0x8A1C #define GL_PURGEABLE_APPLE 0x8A1D typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); #endif #endif /* GL_APPLE_object_purgeable */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_RGB_422_APPLE 0x8A1F #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_RAW_422_APPLE 0x8A51 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_APPLE_row_bytes #define GL_APPLE_row_bytes 1 #define GL_PACK_ROW_BYTES_APPLE 0x8A15 #define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 #endif /* GL_APPLE_row_bytes */ #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif /* GL_APPLE_specular_vector */ #ifndef GL_APPLE_texture_range #define GL_APPLE_texture_range 1 #define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 #define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC #define GL_STORAGE_PRIVATE_APPLE 0x85BD #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); #endif #endif /* GL_APPLE_texture_range */ #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif /* GL_APPLE_transform_hint */ #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); #endif #endif /* GL_APPLE_vertex_array_object */ #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CLIENT_APPLE 0x85B4 typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); #endif #endif /* GL_APPLE_vertex_array_range */ #ifndef GL_APPLE_vertex_program_evaluators #define GL_APPLE_vertex_program_evaluators 1 #define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 #define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 #define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 #define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 #define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 #define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 #define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 #define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 #define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 #define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #endif #endif /* GL_APPLE_vertex_program_evaluators */ #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #define GL_YCBCR_422_APPLE 0x85B9 #endif /* GL_APPLE_ycbcr_422 */ #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); #endif #endif /* GL_ATI_draw_buffers */ #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif #endif /* GL_ATI_element_array */ #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); #endif #endif /* GL_ATI_envmap_bumpmap */ #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); GLAPI void APIENTRY glBeginFragmentShaderATI (void); GLAPI void APIENTRY glEndFragmentShaderATI (void); GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); #endif #endif /* GL_ATI_fragment_shader */ #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); #endif #endif /* GL_ATI_map_object_buffer */ #ifndef GL_ATI_meminfo #define GL_ATI_meminfo 1 #define GL_VBO_FREE_MEMORY_ATI 0x87FB #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #endif /* GL_ATI_meminfo */ #ifndef GL_ATI_pixel_format_float #define GL_ATI_pixel_format_float 1 #define GL_RGBA_FLOAT_MODE_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #endif /* GL_ATI_pixel_format_float */ #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); #endif #endif /* GL_ATI_pn_triangles */ #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #endif #endif /* GL_ATI_separate_stencil */ #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #endif /* GL_ATI_text_fragment_shader */ #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #endif /* GL_ATI_texture_env_combine3 */ #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #endif /* GL_ATI_texture_float */ #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #endif /* GL_ATI_texture_mirror_once */ #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); #endif #endif /* GL_ATI_vertex_array_object */ #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); #endif #endif /* GL_ATI_vertex_streams */ #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif /* GL_EXT_422_pixels */ #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #define GL_ABGR_EXT 0x8000 #endif /* GL_EXT_abgr */ #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif /* GL_EXT_bgra */ #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); #endif #endif /* GL_EXT_bindable_uniform */ #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #endif #endif /* GL_EXT_blend_color */ #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); #endif #endif /* GL_EXT_blend_equation_separate */ #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #endif /* GL_EXT_blend_func_separate */ #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #endif /* GL_EXT_blend_logic_op */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_FUNC_ADD_EXT 0x8006 #define GL_BLEND_EQUATION_EXT 0x8009 typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); #endif #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif /* GL_EXT_blend_subtract */ #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif /* GL_EXT_clip_volume_hint */ #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif /* GL_EXT_cmyka */ #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif #endif /* GL_EXT_color_subtable */ #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); GLAPI void APIENTRY glUnlockArraysEXT (void); #endif #endif /* GL_EXT_compiled_vertex_array */ #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); #endif #endif /* GL_EXT_convolution */ #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_coordinate_frame */ #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_EXT_copy_texture */ #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_cull_vertex */ #ifndef GL_EXT_debug_label #define GL_EXT_debug_label 1 #define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F #define GL_PROGRAM_OBJECT_EXT 0x8B40 #define GL_SHADER_OBJECT_EXT 0x8B48 #define GL_BUFFER_OBJECT_EXT 0x9151 #define GL_QUERY_OBJECT_EXT 0x9153 #define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_EXT_debug_label */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPopGroupMarkerEXT (void); #endif #endif /* GL_EXT_debug_marker */ #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); #endif #endif /* GL_EXT_depth_bounds_test */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); #endif #endif /* GL_EXT_direct_state_access */ #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); #endif #endif /* GL_EXT_draw_buffers2 */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); #endif #endif /* GL_EXT_draw_range_elements */ #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_fog_coord */ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_EXT_framebuffer_blit */ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_EXT_framebuffer_multisample */ #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_EXT_framebuffer_multisample_blit_scaled 1 #define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA #define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); #endif #endif /* GL_EXT_framebuffer_object */ #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #endif /* GL_EXT_framebuffer_sRGB */ #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE #define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 #define GL_LINES_ADJACENCY_EXT 0x000A #define GL_LINE_STRIP_ADJACENCY_EXT 0x000B #define GL_TRIANGLES_ADJACENCY_EXT 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); #endif #endif /* GL_EXT_geometry_shader4 */ #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #endif #endif /* GL_EXT_gpu_program_parameters */ #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); #endif #endif /* GL_EXT_gpu_shader4 */ #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogramEXT (GLenum target); GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); #endif #endif /* GL_EXT_histogram */ #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif /* GL_EXT_index_array_formats */ #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); #endif #endif /* GL_EXT_index_func */ #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); #endif #endif /* GL_EXT_index_material */ #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #endif /* GL_EXT_index_texture */ #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); GLAPI void APIENTRY glTextureLightEXT (GLenum pname); GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); #endif #endif /* GL_EXT_light_texture */ #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #endif /* GL_EXT_misc_attribute */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); #endif #endif /* GL_EXT_multisample */ #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif /* GL_EXT_packed_depth_stencil */ #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #endif /* GL_EXT_packed_float */ #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif /* GL_EXT_packed_pixels */ #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_paletted_texture */ #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #endif /* GL_EXT_pixel_buffer_object */ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_pixel_transform */ #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #endif /* GL_EXT_pixel_transform_color_table */ #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); #endif #endif /* GL_EXT_point_parameters */ #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); #endif #endif /* GL_EXT_polygon_offset */ #ifndef GL_EXT_polygon_offset_clamp #define GL_EXT_polygon_offset_clamp 1 #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_EXT_polygon_offset_clamp */ #ifndef GL_EXT_post_depth_coverage #define GL_EXT_post_depth_coverage 1 #endif /* GL_EXT_post_depth_coverage */ #ifndef GL_EXT_provoking_vertex #define GL_EXT_provoking_vertex 1 #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_PROVOKING_VERTEX_EXT 0x8E4F typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); #endif #endif /* GL_EXT_provoking_vertex */ #ifndef GL_EXT_raster_multisample #define GL_EXT_raster_multisample 1 #define GL_RASTER_MULTISAMPLE_EXT 0x9327 #define GL_RASTER_SAMPLES_EXT 0x9328 #define GL_MAX_RASTER_SAMPLES_EXT 0x9329 #define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A #define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B #define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); #endif #endif /* GL_EXT_raster_multisample */ #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #define GL_RESCALE_NORMAL_EXT 0x803A #endif /* GL_EXT_rescale_normal */ #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_secondary_color */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8B8D typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); GLAPI void APIENTRY glActiveProgramEXT (GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif /* GL_EXT_separate_specular_color */ #ifndef GL_EXT_shader_image_load_formatted #define GL_EXT_shader_image_load_formatted 1 #endif /* GL_EXT_shader_image_load_formatted */ #ifndef GL_EXT_shader_image_load_store #define GL_EXT_shader_image_load_store 1 #define GL_MAX_IMAGE_UNITS_EXT 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 #define GL_IMAGE_BINDING_NAME_EXT 0x8F3A #define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B #define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C #define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D #define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E #define GL_IMAGE_1D_EXT 0x904C #define GL_IMAGE_2D_EXT 0x904D #define GL_IMAGE_3D_EXT 0x904E #define GL_IMAGE_2D_RECT_EXT 0x904F #define GL_IMAGE_CUBE_EXT 0x9050 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_IMAGE_1D_ARRAY_EXT 0x9052 #define GL_IMAGE_2D_ARRAY_EXT 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 #define GL_INT_IMAGE_1D_EXT 0x9057 #define GL_INT_IMAGE_2D_EXT 0x9058 #define GL_INT_IMAGE_3D_EXT 0x9059 #define GL_INT_IMAGE_2D_RECT_EXT 0x905A #define GL_INT_IMAGE_CUBE_EXT 0x905B #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D #define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C #define GL_MAX_IMAGE_SAMPLES_EXT 0x906D #define GL_IMAGE_BINDING_FORMAT_EXT 0x906E #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 #define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 #define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 #define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); #endif #endif /* GL_EXT_shader_image_load_store */ #ifndef GL_EXT_shader_integer_mix #define GL_EXT_shader_integer_mix 1 #endif /* GL_EXT_shader_integer_mix */ #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #endif /* GL_EXT_shadow_funcs */ #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif /* GL_EXT_shared_texture_palette */ #ifndef GL_EXT_sparse_texture2 #define GL_EXT_sparse_texture2 1 #endif /* GL_EXT_sparse_texture2 */ #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); #endif #endif /* GL_EXT_stencil_clear_tag */ #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); #endif #endif /* GL_EXT_stencil_two_side */ #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif /* GL_EXT_stencil_wrap */ #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_EXT_subtexture */ #ifndef GL_EXT_texture #define GL_EXT_texture 1 #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif /* GL_EXT_texture */ #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_EXT_texture3D */ #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #endif #endif /* GL_EXT_texture_array */ #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); #endif #endif /* GL_EXT_texture_buffer_object */ #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #endif /* GL_EXT_texture_compression_latc */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif /* GL_EXT_texture_compression_rgtc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_cube_map #define GL_EXT_texture_cube_map 1 #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif /* GL_EXT_texture_cube_map */ #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #endif /* GL_EXT_texture_env_add */ #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif /* GL_EXT_texture_env_combine */ #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif /* GL_EXT_texture_env_dot3 */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_minmax #define GL_EXT_texture_filter_minmax 1 #endif /* GL_EXT_texture_filter_minmax */ #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); #endif #endif /* GL_EXT_texture_integer */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #endif /* GL_EXT_texture_mirror_clamp */ #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif #endif /* GL_EXT_texture_object */ #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); #endif #endif /* GL_EXT_texture_perturb_normal */ #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif /* GL_EXT_texture_sRGB */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #endif /* GL_EXT_texture_shared_exponent */ #ifndef GL_EXT_texture_snorm #define GL_EXT_texture_snorm 1 #define GL_ALPHA_SNORM 0x9010 #define GL_LUMINANCE_SNORM 0x9011 #define GL_LUMINANCE_ALPHA_SNORM 0x9012 #define GL_INTENSITY_SNORM 0x9013 #define GL_ALPHA8_SNORM 0x9014 #define GL_LUMINANCE8_SNORM 0x9015 #define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 #define GL_INTENSITY8_SNORM 0x9017 #define GL_ALPHA16_SNORM 0x9018 #define GL_LUMINANCE16_SNORM 0x9019 #define GL_LUMINANCE16_ALPHA16_SNORM 0x901A #define GL_INTENSITY16_SNORM 0x901B #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #endif /* GL_EXT_texture_snorm */ #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #endif /* GL_EXT_texture_swizzle */ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #define GL_TIME_ELAPSED_EXT 0x88BF typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); #endif #endif /* GL_EXT_timer_query */ #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackEXT (void); GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif #endif /* GL_EXT_transform_feedback */ #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glArrayElementEXT (GLint i); GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); #endif #endif /* GL_EXT_vertex_array */ #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #endif /* GL_EXT_vertex_array_bgra */ #ifndef GL_EXT_vertex_attrib_64bit #define GL_EXT_vertex_attrib_64bit 1 #define GL_DOUBLE_VEC2_EXT 0x8FFC #define GL_DOUBLE_VEC3_EXT 0x8FFD #define GL_DOUBLE_VEC4_EXT 0x8FFE #define GL_DOUBLE_MAT2_EXT 0x8F46 #define GL_DOUBLE_MAT3_EXT 0x8F47 #define GL_DOUBLE_MAT4_EXT 0x8F48 #define GL_DOUBLE_MAT2x3_EXT 0x8F49 #define GL_DOUBLE_MAT2x4_EXT 0x8F4A #define GL_DOUBLE_MAT3x2_EXT 0x8F4B #define GL_DOUBLE_MAT3x4_EXT 0x8F4C #define GL_DOUBLE_MAT4x2_EXT 0x8F4D #define GL_DOUBLE_MAT4x3_EXT 0x8F4E typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); #endif #endif /* GL_EXT_vertex_attrib_64bit */ #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVertexShaderEXT (void); GLAPI void APIENTRY glEndVertexShaderEXT (void); GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); #endif #endif /* GL_EXT_vertex_shader */ #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT 0x1700 #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_vertex_weighting */ #ifndef GL_EXT_x11_sync_object #define GL_EXT_x11_sync_object 1 #define GL_SYNC_X11_FENCE_EXT 0x90E1 typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #endif #endif /* GL_EXT_x11_sync_object */ #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); #endif #endif /* GL_GREMEDY_frame_terminator */ #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); #endif #endif /* GL_GREMEDY_string_marker */ #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif /* GL_HP_convolution_border_modes */ #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_HP_image_transform */ #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif /* GL_HP_occlusion_test */ #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif /* GL_HP_texture_lighting */ #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #define GL_CULL_VERTEX_IBM 103050 #endif /* GL_IBM_cull_vertex */ #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); #endif #endif /* GL_IBM_multimode_draw_arrays */ #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif /* GL_IBM_rasterpos_clip */ #ifndef GL_IBM_static_data #define GL_IBM_static_data 1 #define GL_ALL_STATIC_DATA_IBM 103060 #define GL_STATIC_VERTEX_ARRAY_IBM 103061 typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); #endif #endif /* GL_IBM_static_data */ #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif /* GL_IBM_texture_mirrored_repeat */ #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); #endif #endif /* GL_IBM_vertex_array_lists */ #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #endif /* GL_INGR_blend_func_separate */ #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif /* GL_INGR_color_clamp */ #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #define GL_INTERLACE_READ_INGR 0x8568 #endif /* GL_INGR_interlace_read */ #ifndef GL_INTEL_fragment_shader_ordering #define GL_INTEL_fragment_shader_ordering 1 #endif /* GL_INTEL_fragment_shader_ordering */ #ifndef GL_INTEL_map_texture #define GL_INTEL_map_texture 1 #define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF #define GL_LAYOUT_DEFAULT_INTEL 0 #define GL_LAYOUT_LINEAR_INTEL 1 #define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); #endif #endif /* GL_INTEL_map_texture */ #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); #endif #endif /* GL_INTEL_parallel_arrays */ #ifndef GL_INTEL_performance_query #define GL_INTEL_performance_query 1 #define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 #define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 #define GL_PERFQUERY_WAIT_INTEL 0x83FB #define GL_PERFQUERY_FLUSH_INTEL 0x83FA #define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 #define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 #define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 #define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 #define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 #define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 #define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 #define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 #define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 #define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA #define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB #define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC #define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD #define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE #define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF #define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #endif #endif /* GL_INTEL_performance_query */ #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #endif /* GL_MESAX_texture_stack */ #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #define GL_PACK_INVERT_MESA 0x8758 #endif /* GL_MESA_pack_invert */ #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glResizeBuffersMESA (void); #endif #endif /* GL_MESA_resize_buffers */ #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); #endif #endif /* GL_MESA_window_pos */ #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #endif /* GL_MESA_ycbcr_texture */ #ifndef GL_NVX_conditional_render #define GL_NVX_conditional_render 1 typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); GLAPI void APIENTRY glEndConditionalRenderNVX (void); #endif #endif /* GL_NVX_conditional_render */ #ifndef GL_NVX_gpu_memory_info #define GL_NVX_gpu_memory_info 1 #define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 #define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 #define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 #define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A #define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B #endif /* GL_NVX_gpu_memory_info */ #ifndef GL_NV_bindless_multi_draw_indirect #define GL_NV_bindless_multi_draw_indirect 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect */ #ifndef GL_NV_bindless_multi_draw_indirect_count #define GL_NV_bindless_multi_draw_indirect_count 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect_count */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_blend_equation_advanced #define GL_NV_blend_equation_advanced 1 #define GL_BLEND_OVERLAP_NV 0x9281 #define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 #define GL_BLUE_NV 0x1905 #define GL_COLORBURN_NV 0x929A #define GL_COLORDODGE_NV 0x9299 #define GL_CONJOINT_NV 0x9284 #define GL_CONTRAST_NV 0x92A1 #define GL_DARKEN_NV 0x9297 #define GL_DIFFERENCE_NV 0x929E #define GL_DISJOINT_NV 0x9283 #define GL_DST_ATOP_NV 0x928F #define GL_DST_IN_NV 0x928B #define GL_DST_NV 0x9287 #define GL_DST_OUT_NV 0x928D #define GL_DST_OVER_NV 0x9289 #define GL_EXCLUSION_NV 0x92A0 #define GL_GREEN_NV 0x1904 #define GL_HARDLIGHT_NV 0x929B #define GL_HARDMIX_NV 0x92A9 #define GL_HSL_COLOR_NV 0x92AF #define GL_HSL_HUE_NV 0x92AD #define GL_HSL_LUMINOSITY_NV 0x92B0 #define GL_HSL_SATURATION_NV 0x92AE #define GL_INVERT_OVG_NV 0x92B4 #define GL_INVERT_RGB_NV 0x92A3 #define GL_LIGHTEN_NV 0x9298 #define GL_LINEARBURN_NV 0x92A5 #define GL_LINEARDODGE_NV 0x92A4 #define GL_LINEARLIGHT_NV 0x92A7 #define GL_MINUS_CLAMPED_NV 0x92B3 #define GL_MINUS_NV 0x929F #define GL_MULTIPLY_NV 0x9294 #define GL_OVERLAY_NV 0x9296 #define GL_PINLIGHT_NV 0x92A8 #define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 #define GL_PLUS_CLAMPED_NV 0x92B1 #define GL_PLUS_DARKER_NV 0x9292 #define GL_PLUS_NV 0x9291 #define GL_RED_NV 0x1903 #define GL_SCREEN_NV 0x9295 #define GL_SOFTLIGHT_NV 0x929C #define GL_SRC_ATOP_NV 0x928E #define GL_SRC_IN_NV 0x928A #define GL_SRC_NV 0x9286 #define GL_SRC_OUT_NV 0x928C #define GL_SRC_OVER_NV 0x9288 #define GL_UNCORRELATED_NV 0x9282 #define GL_VIVIDLIGHT_NV 0x92A6 #define GL_XOR_NV 0x1506 typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); GLAPI void APIENTRY glBlendBarrierNV (void); #endif #endif /* GL_NV_blend_equation_advanced */ #ifndef GL_NV_blend_equation_advanced_coherent #define GL_NV_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 #endif /* GL_NV_blend_equation_advanced_coherent */ #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #endif /* GL_NV_blend_square */ #ifndef GL_NV_command_list #define GL_NV_command_list 1 #define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 #define GL_NOP_COMMAND_NV 0x0001 #define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 #define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 #define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 #define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 #define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 #define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 #define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 #define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 #define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A #define GL_BLEND_COLOR_COMMAND_NV 0x000B #define GL_STENCIL_REF_COMMAND_NV 0x000C #define GL_LINE_WIDTH_COMMAND_NV 0x000D #define GL_POLYGON_OFFSET_COMMAND_NV 0x000E #define GL_ALPHA_REF_COMMAND_NV 0x000F #define GL_VIEWPORT_COMMAND_NV 0x0010 #define GL_SCISSOR_COMMAND_NV 0x0011 #define GL_FRONT_FACE_COMMAND_NV 0x0012 typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); GLAPI void APIENTRY glCompileCommandListNV (GLuint list); GLAPI void APIENTRY glCallCommandListNV (GLuint list); #endif #endif /* GL_NV_command_list */ #ifndef GL_NV_compute_program5 #define GL_NV_compute_program5 1 #define GL_COMPUTE_PROGRAM_NV 0x90FB #define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC #endif /* GL_NV_compute_program5 */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRenderNV (void); #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conservative_raster #define GL_NV_conservative_raster 1 #define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 #define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 #define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); #endif #endif /* GL_NV_conservative_raster */ #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif /* GL_NV_copy_depth_to_color */ #ifndef GL_NV_copy_image #define GL_NV_copy_image 1 typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_NV_copy_image */ #ifndef GL_NV_deep_texture3D #define GL_NV_deep_texture3D 1 #define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 #define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 #endif /* GL_NV_deep_texture3D */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); #endif #endif /* GL_NV_depth_buffer_float */ #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #define GL_DEPTH_CLAMP_NV 0x864F #endif /* GL_NV_depth_clamp */ #ifndef GL_NV_draw_texture #define GL_NV_draw_texture 1 typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #endif #endif /* GL_NV_draw_texture */ #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); #endif #endif /* GL_NV_evaluators */ #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); #endif #endif /* GL_NV_explicit_multisample */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); GLAPI void APIENTRY glFinishFenceNV (GLuint fence); GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif #endif /* GL_NV_fence */ #ifndef GL_NV_fill_rectangle #define GL_NV_fill_rectangle 1 #define GL_FILL_RECTANGLE_NV 0x933C #endif /* GL_NV_fill_rectangle */ #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #endif /* GL_NV_float_buffer */ #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C #endif /* GL_NV_fog_distance */ #ifndef GL_NV_fragment_coverage_to_color #define GL_NV_fragment_coverage_to_color 1 #define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD #define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); #endif #endif /* GL_NV_fragment_coverage_to_color */ #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #endif #endif /* GL_NV_fragment_program */ #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #endif /* GL_NV_fragment_program2 */ #ifndef GL_NV_fragment_program4 #define GL_NV_fragment_program4 1 #endif /* GL_NV_fragment_program4 */ #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #endif /* GL_NV_fragment_program_option */ #ifndef GL_NV_fragment_shader_interlock #define GL_NV_fragment_shader_interlock 1 #endif /* GL_NV_fragment_shader_interlock */ #ifndef GL_NV_framebuffer_mixed_samples #define GL_NV_framebuffer_mixed_samples 1 #define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GL_DEPTH_SAMPLES_NV 0x932D #define GL_STENCIL_SAMPLES_NV 0x932E #define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F #define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 #define GL_COVERAGE_MODULATION_NV 0x9332 #define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v); typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v); GLAPI void APIENTRY glCoverageModulationNV (GLenum components); #endif #endif /* GL_NV_framebuffer_mixed_samples */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifndef GL_NV_geometry_program4 #define GL_NV_geometry_program4 1 #define GL_GEOMETRY_PROGRAM_NV 0x8C26 #define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 #define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #endif /* GL_NV_geometry_program4 */ #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #endif /* GL_NV_geometry_shader4 */ #ifndef GL_NV_geometry_shader_passthrough #define GL_NV_geometry_shader_passthrough 1 #endif /* GL_NV_geometry_shader_passthrough */ #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 #define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 #define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 #define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 #define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 #define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 #define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); #endif #endif /* GL_NV_gpu_program4 */ #ifndef GL_NV_gpu_program5 #define GL_NV_gpu_program5 1 #define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F #define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 #define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); #endif #endif /* GL_NV_gpu_program5 */ #ifndef GL_NV_gpu_program5_mem_extended #define GL_NV_gpu_program5_mem_extended 1 #endif /* GL_NV_gpu_program5_mem_extended */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 #endif /* GL_NV_gpu_shader5 */ #ifndef GL_NV_half_float #define GL_NV_half_float 1 typedef unsigned short GLhalfNV; #define GL_HALF_FLOAT_NV 0x140B typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); #endif #endif /* GL_NV_half_float */ #ifndef GL_NV_internalformat_sample_query #define GL_NV_internalformat_sample_query 1 #define GL_MULTISAMPLES_NV 0x9371 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 #define GL_CONFORMANT_NV 0x9374 typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); #endif #endif /* GL_NV_internalformat_sample_query */ #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif /* GL_NV_light_max_exponent */ #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 #endif /* GL_NV_multisample_coverage */ #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif /* GL_NV_multisample_filter_hint */ #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glEndOcclusionQueryNV (void); GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); #endif #endif /* GL_NV_occlusion_query */ #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif /* GL_NV_packed_depth_stencil */ #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #endif #endif /* GL_NV_parameter_buffer_object */ #ifndef GL_NV_parameter_buffer_object2 #define GL_NV_parameter_buffer_object2 1 #endif /* GL_NV_parameter_buffer_object2 */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 #define GL_ROUNDED_RECT_NV 0xE8 #define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 #define GL_ROUNDED_RECT2_NV 0xEA #define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB #define GL_ROUNDED_RECT4_NV 0xEC #define GL_RELATIVE_ROUNDED_RECT4_NV 0xED #define GL_ROUNDED_RECT8_NV 0xEE #define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF #define GL_RELATIVE_RECT_NV 0xF7 #define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 #define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 #define GL_FONT_UNAVAILABLE_NV 0x936A #define GL_FONT_UNINTELLIGIBLE_NV 0x936B #define GL_CONIC_CURVE_TO_NV 0x1A #define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B #define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 #define GL_STANDARD_FONT_FORMAT_NV 0x936C #define GL_2_BYTES_NV 0x1407 #define GL_3_BYTES_NV 0x1408 #define GL_4_BYTES_NV 0x1409 #define GL_EYE_LINEAR_NV 0x2400 #define GL_OBJECT_LINEAR_NV 0x2401 #define GL_CONSTANT_NV 0x8576 #define GL_PATH_FOG_GEN_MODE_NV 0x90AC #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 #define GL_PATH_PROJECTION_NV 0x1701 #define GL_PATH_MODELVIEW_NV 0x1700 #define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 #define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 #define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 #define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 #define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 #define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 #define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 #define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 #define GL_FRAGMENT_INPUT_NV 0x936D typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); #endif #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering_shared_edge #define GL_NV_path_rendering_shared_edge 1 #define GL_SHARED_EDGE_NV 0xC0 #endif /* GL_NV_path_rendering_shared_edge */ #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); #endif #endif /* GL_NV_pixel_data_range */ #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); #endif #endif /* GL_NV_point_sprite */ #ifndef GL_NV_present_video #define GL_NV_present_video 1 #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); #endif #endif /* GL_NV_present_video */ #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveRestartNV (void); GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); #endif #endif /* GL_NV_primitive_restart */ #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); #endif #endif /* GL_NV_register_combiners */ #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #define GL_PER_STAGE_CONSTANTS_NV 0x8535 typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); #endif #endif /* GL_NV_register_combiners2 */ #ifndef GL_NV_sample_locations #define GL_NV_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 #define GL_SAMPLE_LOCATION_NV 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glResolveDepthValuesNV (void); #endif #endif /* GL_NV_sample_locations */ #ifndef GL_NV_sample_mask_override_coverage #define GL_NV_sample_mask_override_coverage 1 #endif /* GL_NV_sample_mask_override_coverage */ #ifndef GL_NV_shader_atomic_counters #define GL_NV_shader_atomic_counters 1 #endif /* GL_NV_shader_atomic_counters */ #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #endif /* GL_NV_shader_atomic_float */ #ifndef GL_NV_shader_atomic_fp16_vector #define GL_NV_shader_atomic_fp16_vector 1 #endif /* GL_NV_shader_atomic_fp16_vector */ #ifndef GL_NV_shader_atomic_int64 #define GL_NV_shader_atomic_int64 1 #endif /* GL_NV_shader_atomic_int64 */ #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_NV_shader_buffer_load */ #ifndef GL_NV_shader_buffer_store #define GL_NV_shader_buffer_store 1 #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 #endif /* GL_NV_shader_buffer_store */ #ifndef GL_NV_shader_storage_buffer_object #define GL_NV_shader_storage_buffer_object 1 #endif /* GL_NV_shader_storage_buffer_object */ #ifndef GL_NV_shader_thread_group #define GL_NV_shader_thread_group 1 #define GL_WARP_SIZE_NV 0x9339 #define GL_WARPS_PER_SM_NV 0x933A #define GL_SM_COUNT_NV 0x933B #endif /* GL_NV_shader_thread_group */ #ifndef GL_NV_shader_thread_shuffle #define GL_NV_shader_thread_shuffle 1 #endif /* GL_NV_shader_thread_shuffle */ #ifndef GL_NV_tessellation_program5 #define GL_NV_tessellation_program5 1 #define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 #define GL_TESS_CONTROL_PROGRAM_NV 0x891E #define GL_TESS_EVALUATION_PROGRAM_NV 0x891F #define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 #define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 #endif /* GL_NV_tessellation_program5 */ #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif /* GL_NV_texgen_emboss */ #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif /* GL_NV_texgen_reflection */ #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureBarrierNV (void); #endif #endif /* GL_NV_texture_barrier */ #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #endif /* GL_NV_texture_compression_vtc */ #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif /* GL_NV_texture_env_combine4 */ #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #endif /* GL_NV_texture_expand_normal */ #ifndef GL_NV_texture_multisample #define GL_NV_texture_multisample 1 #define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 #define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #endif #endif /* GL_NV_texture_multisample */ #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #endif /* GL_NV_texture_rectangle */ #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif /* GL_NV_texture_shader */ #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif /* GL_NV_texture_shader2 */ #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif /* GL_NV_texture_shader3 */ #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F #define GL_LAYER_NV 0x8DAA #define GL_NEXT_BUFFER_NV -2 #define GL_SKIP_COMPONENTS4_NV -3 #define GL_SKIP_COMPONENTS3_NV -4 #define GL_SKIP_COMPONENTS2_NV -5 #define GL_SKIP_COMPONENTS1_NV -6 typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackNV (void); GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif #endif /* GL_NV_transform_feedback */ #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); GLAPI void APIENTRY glPauseTransformFeedbackNV (void); GLAPI void APIENTRY glResumeTransformFeedbackNV (void); GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); #endif #endif /* GL_NV_transform_feedback2 */ #ifndef GL_NV_uniform_buffer_unified_memory #define GL_NV_uniform_buffer_unified_memory 1 #define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E #define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F #define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 #endif /* GL_NV_uniform_buffer_unified_memory */ #ifndef GL_NV_vdpau_interop #define GL_NV_vdpau_interop 1 typedef GLintptr GLvdpauSurfaceNV; #define GL_SURFACE_STATE_NV 0x86EB #define GL_SURFACE_REGISTERED_NV 0x86FD #define GL_SURFACE_MAPPED_NV 0x8700 #define GL_WRITE_DISCARD_NV 0x88BE typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); GLAPI void APIENTRY glVDPAUFiniNV (void); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #endif #endif /* GL_NV_vdpau_interop */ #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); #endif #endif /* GL_NV_vertex_array_range */ #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif /* GL_NV_vertex_array_range2 */ #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); #endif #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E #define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F #define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 #define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 #define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 #define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 #define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 #define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 #define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 #define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 #define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 #define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 #define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A #define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B #define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C #define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D #define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E #define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F #define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 #define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 #define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 #define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 #define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 #define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 #define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); #endif #endif /* GL_NV_vertex_buffer_unified_memory */ #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); #endif #endif /* GL_NV_vertex_program */ #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #endif /* GL_NV_vertex_program1_1 */ #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #endif /* GL_NV_vertex_program2 */ #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #endif /* GL_NV_vertex_program2_option */ #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #endif /* GL_NV_vertex_program3 */ #ifndef GL_NV_vertex_program4 #define GL_NV_vertex_program4 1 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); #endif #endif /* GL_NV_vertex_program4 */ #ifndef GL_NV_video_capture #define GL_NV_video_capture 1 #define GL_VIDEO_BUFFER_NV 0x9020 #define GL_VIDEO_BUFFER_BINDING_NV 0x9021 #define GL_FIELD_UPPER_NV 0x9022 #define GL_FIELD_LOWER_NV 0x9023 #define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 #define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 #define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 #define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 #define GL_VIDEO_BUFFER_PITCH_NV 0x9028 #define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 #define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A #define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B #define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C #define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D #define GL_PARTIAL_SUCCESS_NV 0x902E #define GL_SUCCESS_NV 0x902F #define GL_FAILURE_NV 0x9030 #define GL_YCBYCR8_422_NV 0x9031 #define GL_YCBAYCR8A_4224_NV 0x9032 #define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 #define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 #define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 #define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 #define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 #define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 #define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 #define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A #define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B #define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #endif #endif /* GL_NV_video_capture */ #ifndef GL_NV_viewport_array2 #define GL_NV_viewport_array2 1 #endif /* GL_NV_viewport_array2 */ #ifndef GL_OML_interlace #define GL_OML_interlace 1 #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif /* GL_OML_interlace */ #ifndef GL_OML_resample #define GL_OML_resample 1 #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif /* GL_OML_resample */ #ifndef GL_OML_subsample #define GL_OML_subsample 1 #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif /* GL_OML_subsample */ #ifndef GL_OVR_multiview #define GL_OVR_multiview 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 #define GL_MAX_VIEWS_OVR 0x9631 typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview */ #ifndef GL_OVR_multiview2 #define GL_OVR_multiview2 1 #endif /* GL_OVR_multiview2 */ #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); #endif #endif /* GL_PGI_misc_hints */ #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #endif /* GL_PGI_vertex_hints */ #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif /* GL_REND_screen_coordinates */ #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #define GL_RGBA_DXT5_S3TC 0x83A4 #define GL_RGBA4_DXT5_S3TC 0x83A5 #endif /* GL_S3_s3tc */ #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); #endif #endif /* GL_SGIS_detail_texture */ #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); #endif #endif /* GL_SGIS_fog_function */ #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif /* GL_SGIS_generate_mipmap */ #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); #endif #endif /* GL_SGIS_multisample */ #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); #endif #endif /* GL_SGIS_pixel_texture */ #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif /* GL_SGIS_point_line_texgen */ #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); #endif #endif /* GL_SGIS_point_parameters */ #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); #endif #endif /* GL_SGIS_sharpen_texture */ #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_SGIS_texture4D */ #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_SGIS 0x812D #endif /* GL_SGIS_texture_border_clamp */ #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif #endif /* GL_SGIS_texture_color_mask */ #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif /* GL_SGIS_texture_edge_clamp */ #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif #endif /* GL_SGIS_texture_filter4 */ #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif /* GL_SGIS_texture_lod */ #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif /* GL_SGIS_texture_select */ #ifndef GL_SGIX_async #define GL_SGIX_async 1 #define GL_ASYNC_MARKER_SGIX 0x8329 typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); #endif #endif /* GL_SGIX_async */ #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif /* GL_SGIX_async_histogram */ #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif /* GL_SGIX_async_pixel */ #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif /* GL_SGIX_blend_alpha_minmax */ #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif /* GL_SGIX_calligraphic_fragment */ #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif /* GL_SGIX_clipmap */ #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif /* GL_SGIX_convolution_accuracy */ #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #endif /* GL_SGIX_depth_pass_instrument */ #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif /* GL_SGIX_depth_texture */ #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushRasterSGIX (void); #endif #endif /* GL_SGIX_flush_raster */ #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif /* GL_SGIX_fog_offset */ #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); #endif #endif /* GL_SGIX_fragment_lighting */ #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); #endif #endif /* GL_SGIX_framezoom */ #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); #endif #endif /* GL_SGIX_igloo_interface */ #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); GLAPI void APIENTRY glStartInstrumentsSGIX (void); GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); #endif #endif /* GL_SGIX_instruments */ #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #define GL_INTERLACE_SGIX 0x8094 #endif /* GL_SGIX_interlace */ #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif /* GL_SGIX_ir_instrument1 */ #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #define GL_LIST_PRIORITY_SGIX 0x8182 typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); #endif #endif /* GL_SGIX_list_priority */ #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); #endif #endif /* GL_SGIX_pixel_texture */ #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif /* GL_SGIX_pixel_tiles */ #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); #endif #endif /* GL_SGIX_polynomial_ffd */ #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); #endif #endif /* GL_SGIX_reference_plane */ #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #define GL_PACK_RESAMPLE_SGIX 0x842E #define GL_UNPACK_RESAMPLE_SGIX 0x842F #define GL_RESAMPLE_REPLICATE_SGIX 0x8433 #define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif /* GL_SGIX_resample */ #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif /* GL_SGIX_scalebias_hint */ #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif /* GL_SGIX_shadow */ #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif /* GL_SGIX_shadow_ambient */ #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); #endif #endif /* GL_SGIX_sprite */ #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 #define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 #define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 #define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 #define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 #endif /* GL_SGIX_subsample */ #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTagSampleBufferSGIX (void); #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif /* GL_SGIX_texture_add_env */ #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif /* GL_SGIX_texture_coordinate_clamp */ #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif /* GL_SGIX_texture_lod_bias */ #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif /* GL_SGIX_texture_multi_buffer */ #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif /* GL_SGIX_texture_scale_bias */ #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif /* GL_SGIX_vertex_preclip */ #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif /* GL_SGIX_ycrcb */ #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #endif /* GL_SGIX_ycrcb_subsample */ #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif /* GL_SGIX_ycrcba */ #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif /* GL_SGI_color_matrix */ #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); #endif #endif /* GL_SGI_color_table */ #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif /* GL_SGI_texture_color_table */ #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFinishTextureSUNX (void); #endif #endif /* GL_SUNX_constant_data */ #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #define GL_WRAP_BORDER_SUN 0x81D4 #endif /* GL_SUN_convolution_border_modes */ #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); #endif #endif /* GL_SUN_global_alpha */ #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif #endif /* GL_SUN_mesh_array */ #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #define GL_SLICE_ACCUM_SUN 0x85CC #endif /* GL_SUN_slice_accum */ #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); #endif #endif /* GL_SUN_triangle_list */ #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif #endif /* GL_SUN_vertex */ #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif /* GL_WIN_phong_shading */ #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif /* GL_WIN_specular_fog */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/GL/gl.h0000664000175000017500000024527212543167424016732 0ustar chrischris#ifndef __gl_h_ #define __gl_h_ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: This software was created using the ** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has ** not been independently verified as being compliant with the OpenGL(R) ** version 1.2.1 Specification. */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include #endif #ifdef __cplusplus extern "C" { #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPI #define GLAPI extern #endif /*************************************************************/ typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef signed char GLbyte; typedef short GLshort; typedef int GLint; typedef int GLsizei; typedef unsigned char GLubyte; typedef unsigned short GLushort; typedef unsigned int GLuint; typedef float GLfloat; typedef float GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void GLvoid; /*************************************************************/ /* Version */ #define GL_VERSION_1_1 1 #define GL_VERSION_1_2 1 /* Extensions */ #define GL_ARB_imaging 1 #define GL_ARB_multitexture 1 /* AccumOp */ #define GL_ACCUM 0x0100 #define GL_LOAD 0x0101 #define GL_RETURN 0x0102 #define GL_MULT 0x0103 #define GL_ADD 0x0104 /* AlphaFunction */ #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 /* AttribMask */ #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000fffff /* BeginMode */ #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 /* BlendEquationMode */ /* GL_LOGIC_OP */ /* GL_FUNC_ADD */ /* GL_MIN */ /* GL_MAX */ /* GL_FUNC_SUBTRACT */ /* GL_FUNC_REVERSE_SUBTRACT */ /* BlendingFactorDest */ #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 /* GL_CONSTANT_COLOR */ /* GL_ONE_MINUS_CONSTANT_COLOR */ /* GL_CONSTANT_ALPHA */ /* GL_ONE_MINUS_CONSTANT_ALPHA */ /* BlendingFactorSrc */ /* GL_ZERO */ /* GL_ONE */ #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 /* GL_SRC_ALPHA */ /* GL_ONE_MINUS_SRC_ALPHA */ /* GL_DST_ALPHA */ /* GL_ONE_MINUS_DST_ALPHA */ /* GL_CONSTANT_COLOR */ /* GL_ONE_MINUS_CONSTANT_COLOR */ /* GL_CONSTANT_ALPHA */ /* GL_ONE_MINUS_CONSTANT_ALPHA */ /* Boolean */ #define GL_TRUE 1 #define GL_FALSE 0 /* ClearBufferMask */ /* GL_COLOR_BUFFER_BIT */ /* GL_ACCUM_BUFFER_BIT */ /* GL_STENCIL_BUFFER_BIT */ /* GL_DEPTH_BUFFER_BIT */ /* ClientArrayType */ /* GL_VERTEX_ARRAY */ /* GL_NORMAL_ARRAY */ /* GL_COLOR_ARRAY */ /* GL_INDEX_ARRAY */ /* GL_TEXTURE_COORD_ARRAY */ /* GL_EDGE_FLAG_ARRAY */ /* ClipPlaneName */ #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 /* ColorMaterialFace */ /* GL_FRONT */ /* GL_BACK */ /* GL_FRONT_AND_BACK */ /* ColorMaterialParameter */ /* GL_AMBIENT */ /* GL_DIFFUSE */ /* GL_SPECULAR */ /* GL_EMISSION */ /* GL_AMBIENT_AND_DIFFUSE */ /* ColorPointerType */ /* GL_BYTE */ /* GL_UNSIGNED_BYTE */ /* GL_SHORT */ /* GL_UNSIGNED_SHORT */ /* GL_INT */ /* GL_UNSIGNED_INT */ /* GL_FLOAT */ /* GL_DOUBLE */ /* ColorTableParameterPName */ /* GL_COLOR_TABLE_SCALE */ /* GL_COLOR_TABLE_BIAS */ /* ColorTableTarget */ /* GL_COLOR_TABLE */ /* GL_POST_CONVOLUTION_COLOR_TABLE */ /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ /* GL_PROXY_COLOR_TABLE */ /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ /* ConvolutionBorderMode */ /* GL_REDUCE */ /* GL_IGNORE_BORDER */ /* GL_CONSTANT_BORDER */ /* ConvolutionParameter */ /* GL_CONVOLUTION_BORDER_MODE */ /* GL_CONVOLUTION_FILTER_SCALE */ /* GL_CONVOLUTION_FILTER_BIAS */ /* ConvolutionTarget */ /* GL_CONVOLUTION_1D */ /* GL_CONVOLUTION_2D */ /* CullFaceMode */ /* GL_FRONT */ /* GL_BACK */ /* GL_FRONT_AND_BACK */ /* DataType */ #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 #define GL_DOUBLE 0x140A /* DepthFunction */ /* GL_NEVER */ /* GL_LESS */ /* GL_EQUAL */ /* GL_LEQUAL */ /* GL_GREATER */ /* GL_NOTEQUAL */ /* GL_GEQUAL */ /* GL_ALWAYS */ /* DrawBufferMode */ #define GL_NONE 0 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 #define GL_FRONT_AND_BACK 0x0408 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C /* Enable */ /* GL_FOG */ /* GL_LIGHTING */ /* GL_TEXTURE_1D */ /* GL_TEXTURE_2D */ /* GL_LINE_STIPPLE */ /* GL_POLYGON_STIPPLE */ /* GL_CULL_FACE */ /* GL_ALPHA_TEST */ /* GL_BLEND */ /* GL_INDEX_LOGIC_OP */ /* GL_COLOR_LOGIC_OP */ /* GL_DITHER */ /* GL_STENCIL_TEST */ /* GL_DEPTH_TEST */ /* GL_CLIP_PLANE0 */ /* GL_CLIP_PLANE1 */ /* GL_CLIP_PLANE2 */ /* GL_CLIP_PLANE3 */ /* GL_CLIP_PLANE4 */ /* GL_CLIP_PLANE5 */ /* GL_LIGHT0 */ /* GL_LIGHT1 */ /* GL_LIGHT2 */ /* GL_LIGHT3 */ /* GL_LIGHT4 */ /* GL_LIGHT5 */ /* GL_LIGHT6 */ /* GL_LIGHT7 */ /* GL_TEXTURE_GEN_S */ /* GL_TEXTURE_GEN_T */ /* GL_TEXTURE_GEN_R */ /* GL_TEXTURE_GEN_Q */ /* GL_MAP1_VERTEX_3 */ /* GL_MAP1_VERTEX_4 */ /* GL_MAP1_COLOR_4 */ /* GL_MAP1_INDEX */ /* GL_MAP1_NORMAL */ /* GL_MAP1_TEXTURE_COORD_1 */ /* GL_MAP1_TEXTURE_COORD_2 */ /* GL_MAP1_TEXTURE_COORD_3 */ /* GL_MAP1_TEXTURE_COORD_4 */ /* GL_MAP2_VERTEX_3 */ /* GL_MAP2_VERTEX_4 */ /* GL_MAP2_COLOR_4 */ /* GL_MAP2_INDEX */ /* GL_MAP2_NORMAL */ /* GL_MAP2_TEXTURE_COORD_1 */ /* GL_MAP2_TEXTURE_COORD_2 */ /* GL_MAP2_TEXTURE_COORD_3 */ /* GL_MAP2_TEXTURE_COORD_4 */ /* GL_POINT_SMOOTH */ /* GL_LINE_SMOOTH */ /* GL_POLYGON_SMOOTH */ /* GL_SCISSOR_TEST */ /* GL_COLOR_MATERIAL */ /* GL_NORMALIZE */ /* GL_AUTO_NORMAL */ /* GL_VERTEX_ARRAY */ /* GL_NORMAL_ARRAY */ /* GL_COLOR_ARRAY */ /* GL_INDEX_ARRAY */ /* GL_TEXTURE_COORD_ARRAY */ /* GL_EDGE_FLAG_ARRAY */ /* GL_POLYGON_OFFSET_POINT */ /* GL_POLYGON_OFFSET_LINE */ /* GL_POLYGON_OFFSET_FILL */ /* GL_COLOR_TABLE */ /* GL_POST_CONVOLUTION_COLOR_TABLE */ /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ /* GL_CONVOLUTION_1D */ /* GL_CONVOLUTION_2D */ /* GL_SEPARABLE_2D */ /* GL_HISTOGRAM */ /* GL_MINMAX */ /* GL_RESCALE_NORMAL */ /* GL_TEXTURE_3D */ /* ErrorCode */ #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 /* GL_TABLE_TOO_LARGE */ /* FeedBackMode */ #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 /* FeedBackToken */ #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_LINE_RESET_TOKEN 0x0707 /* FogMode */ /* GL_LINEAR */ #define GL_EXP 0x0800 #define GL_EXP2 0x0801 /* FogParameter */ /* GL_FOG_COLOR */ /* GL_FOG_DENSITY */ /* GL_FOG_END */ /* GL_FOG_INDEX */ /* GL_FOG_MODE */ /* GL_FOG_START */ /* FrontFaceDirection */ #define GL_CW 0x0900 #define GL_CCW 0x0901 /* GetColorTableParameterPName */ /* GL_COLOR_TABLE_SCALE */ /* GL_COLOR_TABLE_BIAS */ /* GL_COLOR_TABLE_FORMAT */ /* GL_COLOR_TABLE_WIDTH */ /* GL_COLOR_TABLE_RED_SIZE */ /* GL_COLOR_TABLE_GREEN_SIZE */ /* GL_COLOR_TABLE_BLUE_SIZE */ /* GL_COLOR_TABLE_ALPHA_SIZE */ /* GL_COLOR_TABLE_LUMINANCE_SIZE */ /* GL_COLOR_TABLE_INTENSITY_SIZE */ /* GetConvolutionParameterPName */ /* GL_CONVOLUTION_BORDER_COLOR */ /* GL_CONVOLUTION_BORDER_MODE */ /* GL_CONVOLUTION_FILTER_SCALE */ /* GL_CONVOLUTION_FILTER_BIAS */ /* GL_CONVOLUTION_FORMAT */ /* GL_CONVOLUTION_WIDTH */ /* GL_CONVOLUTION_HEIGHT */ /* GL_MAX_CONVOLUTION_WIDTH */ /* GL_MAX_CONVOLUTION_HEIGHT */ /* GetHistogramParameterPName */ /* GL_HISTOGRAM_WIDTH */ /* GL_HISTOGRAM_FORMAT */ /* GL_HISTOGRAM_RED_SIZE */ /* GL_HISTOGRAM_GREEN_SIZE */ /* GL_HISTOGRAM_BLUE_SIZE */ /* GL_HISTOGRAM_ALPHA_SIZE */ /* GL_HISTOGRAM_LUMINANCE_SIZE */ /* GL_HISTOGRAM_SINK */ /* GetMapTarget */ #define GL_COEFF 0x0A00 #define GL_ORDER 0x0A01 #define GL_DOMAIN 0x0A02 /* GetMinmaxParameterPName */ /* GL_MINMAX_FORMAT */ /* GL_MINMAX_SINK */ /* GetPixelMap */ /* GL_PIXEL_MAP_I_TO_I */ /* GL_PIXEL_MAP_S_TO_S */ /* GL_PIXEL_MAP_I_TO_R */ /* GL_PIXEL_MAP_I_TO_G */ /* GL_PIXEL_MAP_I_TO_B */ /* GL_PIXEL_MAP_I_TO_A */ /* GL_PIXEL_MAP_R_TO_R */ /* GL_PIXEL_MAP_G_TO_G */ /* GL_PIXEL_MAP_B_TO_B */ /* GL_PIXEL_MAP_A_TO_A */ /* GetPointerTarget */ /* GL_VERTEX_ARRAY_POINTER */ /* GL_NORMAL_ARRAY_POINTER */ /* GL_COLOR_ARRAY_POINTER */ /* GL_INDEX_ARRAY_POINTER */ /* GL_TEXTURE_COORD_ARRAY_POINTER */ /* GL_EDGE_FLAG_ARRAY_POINTER */ /* GetTarget */ #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 /* GL_SMOOTH_POINT_SIZE_RANGE */ /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ /* GL_SMOOTH_LINE_WIDTH_RANGE */ /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ /* GL_ALIASED_POINT_SIZE_RANGE */ /* GL_ALIASED_LINE_WIDTH_RANGE */ #define GL_LIST_MODE 0x0B30 #define GL_MAX_LIST_NESTING 0x0B31 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_LIGHTING 0x0B50 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_SHADE_MODEL 0x0B54 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_COLOR_MATERIAL 0x0B57 #define GL_FOG 0x0B60 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_FOG_MODE 0x0B65 #define GL_FOG_COLOR 0x0B66 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_MATRIX_MODE 0x0BA0 #define GL_NORMALIZE 0x0BA1 #define GL_VIEWPORT 0x0BA2 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_FUNC 0x0BC1 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_AUX_BUFFERS 0x0C00 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_INDEX_MODE 0x0C30 #define GL_RGBA_MODE 0x0C31 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_RENDER_MODE 0x0C40 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_FOG_HINT 0x0C54 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B #define GL_SUBPIXEL_BITS 0x0D50 #define GL_INDEX_BITS 0x0D51 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 /* GL_TEXTURE_BINDING_1D */ /* GL_TEXTURE_BINDING_2D */ /* GL_TEXTURE_BINDING_3D */ /* GL_VERTEX_ARRAY */ /* GL_NORMAL_ARRAY */ /* GL_COLOR_ARRAY */ /* GL_INDEX_ARRAY */ /* GL_TEXTURE_COORD_ARRAY */ /* GL_EDGE_FLAG_ARRAY */ /* GL_VERTEX_ARRAY_SIZE */ /* GL_VERTEX_ARRAY_TYPE */ /* GL_VERTEX_ARRAY_STRIDE */ /* GL_NORMAL_ARRAY_TYPE */ /* GL_NORMAL_ARRAY_STRIDE */ /* GL_COLOR_ARRAY_SIZE */ /* GL_COLOR_ARRAY_TYPE */ /* GL_COLOR_ARRAY_STRIDE */ /* GL_INDEX_ARRAY_TYPE */ /* GL_INDEX_ARRAY_STRIDE */ /* GL_TEXTURE_COORD_ARRAY_SIZE */ /* GL_TEXTURE_COORD_ARRAY_TYPE */ /* GL_TEXTURE_COORD_ARRAY_STRIDE */ /* GL_EDGE_FLAG_ARRAY_STRIDE */ /* GL_POLYGON_OFFSET_FACTOR */ /* GL_POLYGON_OFFSET_UNITS */ /* GL_COLOR_TABLE */ /* GL_POST_CONVOLUTION_COLOR_TABLE */ /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ /* GL_CONVOLUTION_1D */ /* GL_CONVOLUTION_2D */ /* GL_SEPARABLE_2D */ /* GL_POST_CONVOLUTION_RED_SCALE */ /* GL_POST_CONVOLUTION_GREEN_SCALE */ /* GL_POST_CONVOLUTION_BLUE_SCALE */ /* GL_POST_CONVOLUTION_ALPHA_SCALE */ /* GL_POST_CONVOLUTION_RED_BIAS */ /* GL_POST_CONVOLUTION_GREEN_BIAS */ /* GL_POST_CONVOLUTION_BLUE_BIAS */ /* GL_POST_CONVOLUTION_ALPHA_BIAS */ /* GL_COLOR_MATRIX */ /* GL_COLOR_MATRIX_STACK_DEPTH */ /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ /* GL_POST_COLOR_MATRIX_RED_SCALE */ /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ /* GL_POST_COLOR_MATRIX_RED_BIAS */ /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ /* GL_HISTOGRAM */ /* GL_MINMAX */ /* GL_MAX_ELEMENTS_VERTICES */ /* GL_MAX_ELEMENTS_INDICES */ /* GL_RESCALE_NORMAL */ /* GL_LIGHT_MODEL_COLOR_CONTROL */ /* GL_PACK_SKIP_IMAGES */ /* GL_PACK_IMAGE_HEIGHT */ /* GL_UNPACK_SKIP_IMAGES */ /* GL_UNPACK_IMAGE_HEIGHT */ /* GL_TEXTURE_3D */ /* GL_MAX_3D_TEXTURE_SIZE */ /* GL_BLEND_COLOR */ /* GL_BLEND_EQUATION */ /* GL_ACTIVE_TEXTURE_ARB */ /* GL_CLIENT_ACTIVE_TEXTURE_ARB */ /* GL_MAX_TEXTURE_UNITS_ARB */ /* GetTextureParameter */ /* GL_TEXTURE_MAG_FILTER */ /* GL_TEXTURE_MIN_FILTER */ /* GL_TEXTURE_WRAP_S */ /* GL_TEXTURE_WRAP_T */ #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_BORDER 0x1005 /* GL_TEXTURE_RED_SIZE */ /* GL_TEXTURE_GREEN_SIZE */ /* GL_TEXTURE_BLUE_SIZE */ /* GL_TEXTURE_ALPHA_SIZE */ /* GL_TEXTURE_LUMINANCE_SIZE */ /* GL_TEXTURE_INTENSITY_SIZE */ /* GL_TEXTURE_PRIORITY */ /* GL_TEXTURE_RESIDENT */ /* GL_TEXTURE_DEPTH */ /* GL_TEXTURE_WRAP_R */ /* GL_TEXTURE_MIN_LOD */ /* GL_TEXTURE_MAX_LOD */ /* GL_TEXTURE_BASE_LEVEL */ /* GL_TEXTURE_MAX_LEVEL */ /* HintMode */ #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* HintTarget */ /* GL_PERSPECTIVE_CORRECTION_HINT */ /* GL_POINT_SMOOTH_HINT */ /* GL_LINE_SMOOTH_HINT */ /* GL_POLYGON_SMOOTH_HINT */ /* GL_FOG_HINT */ /* HistogramTarget */ /* GL_HISTOGRAM */ /* GL_PROXY_HISTOGRAM */ /* IndexPointerType */ /* GL_SHORT */ /* GL_INT */ /* GL_FLOAT */ /* GL_DOUBLE */ /* LightModelColorControl */ /* GL_SINGLE_COLOR */ /* GL_SEPARATE_SPECULAR_COLOR */ /* LightModelParameter */ /* GL_LIGHT_MODEL_AMBIENT */ /* GL_LIGHT_MODEL_LOCAL_VIEWER */ /* GL_LIGHT_MODEL_TWO_SIDE */ /* GL_LIGHT_MODEL_COLOR_CONTROL */ /* LightName */ #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 /* LightParameter */ #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 /* InterleavedArrays */ /* GL_V2F */ /* GL_V3F */ /* GL_C4UB_V2F */ /* GL_C4UB_V3F */ /* GL_C3F_V3F */ /* GL_N3F_V3F */ /* GL_C4F_N3F_V3F */ /* GL_T2F_V3F */ /* GL_T4F_V4F */ /* GL_T2F_C4UB_V3F */ /* GL_T2F_C3F_V3F */ /* GL_T2F_N3F_V3F */ /* GL_T2F_C4F_N3F_V3F */ /* GL_T4F_C4F_N3F_V4F */ /* ListMode */ #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 /* ListNameType */ /* GL_BYTE */ /* GL_UNSIGNED_BYTE */ /* GL_SHORT */ /* GL_UNSIGNED_SHORT */ /* GL_INT */ /* GL_UNSIGNED_INT */ /* GL_FLOAT */ /* GL_2_BYTES */ /* GL_3_BYTES */ /* GL_4_BYTES */ /* LogicOp */ #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F /* MapTarget */ /* GL_MAP1_COLOR_4 */ /* GL_MAP1_INDEX */ /* GL_MAP1_NORMAL */ /* GL_MAP1_TEXTURE_COORD_1 */ /* GL_MAP1_TEXTURE_COORD_2 */ /* GL_MAP1_TEXTURE_COORD_3 */ /* GL_MAP1_TEXTURE_COORD_4 */ /* GL_MAP1_VERTEX_3 */ /* GL_MAP1_VERTEX_4 */ /* GL_MAP2_COLOR_4 */ /* GL_MAP2_INDEX */ /* GL_MAP2_NORMAL */ /* GL_MAP2_TEXTURE_COORD_1 */ /* GL_MAP2_TEXTURE_COORD_2 */ /* GL_MAP2_TEXTURE_COORD_3 */ /* GL_MAP2_TEXTURE_COORD_4 */ /* GL_MAP2_VERTEX_3 */ /* GL_MAP2_VERTEX_4 */ /* MaterialFace */ /* GL_FRONT */ /* GL_BACK */ /* GL_FRONT_AND_BACK */ /* MaterialParameter */ #define GL_EMISSION 0x1600 #define GL_SHININESS 0x1601 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 /* GL_AMBIENT */ /* GL_DIFFUSE */ /* GL_SPECULAR */ /* MatrixMode */ #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 /* MeshMode1 */ /* GL_POINT */ /* GL_LINE */ /* MeshMode2 */ /* GL_POINT */ /* GL_LINE */ /* GL_FILL */ /* MinmaxTarget */ /* GL_MINMAX */ /* NormalPointerType */ /* GL_BYTE */ /* GL_SHORT */ /* GL_INT */ /* GL_FLOAT */ /* GL_DOUBLE */ /* PixelCopyType */ #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 /* PixelFormat */ #define GL_COLOR_INDEX 0x1900 #define GL_STENCIL_INDEX 0x1901 #define GL_DEPTH_COMPONENT 0x1902 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A /* GL_ABGR */ /* PixelInternalFormat */ /* GL_ALPHA4 */ /* GL_ALPHA8 */ /* GL_ALPHA12 */ /* GL_ALPHA16 */ /* GL_LUMINANCE4 */ /* GL_LUMINANCE8 */ /* GL_LUMINANCE12 */ /* GL_LUMINANCE16 */ /* GL_LUMINANCE4_ALPHA4 */ /* GL_LUMINANCE6_ALPHA2 */ /* GL_LUMINANCE8_ALPHA8 */ /* GL_LUMINANCE12_ALPHA4 */ /* GL_LUMINANCE12_ALPHA12 */ /* GL_LUMINANCE16_ALPHA16 */ /* GL_INTENSITY */ /* GL_INTENSITY4 */ /* GL_INTENSITY8 */ /* GL_INTENSITY12 */ /* GL_INTENSITY16 */ /* GL_R3_G3_B2 */ /* GL_RGB4 */ /* GL_RGB5 */ /* GL_RGB8 */ /* GL_RGB10 */ /* GL_RGB12 */ /* GL_RGB16 */ /* GL_RGBA2 */ /* GL_RGBA4 */ /* GL_RGB5_A1 */ /* GL_RGBA8 */ /* GL_RGB10_A2 */ /* GL_RGBA12 */ /* GL_RGBA16 */ /* PixelMap */ /* GL_PIXEL_MAP_I_TO_I */ /* GL_PIXEL_MAP_S_TO_S */ /* GL_PIXEL_MAP_I_TO_R */ /* GL_PIXEL_MAP_I_TO_G */ /* GL_PIXEL_MAP_I_TO_B */ /* GL_PIXEL_MAP_I_TO_A */ /* GL_PIXEL_MAP_R_TO_R */ /* GL_PIXEL_MAP_G_TO_G */ /* GL_PIXEL_MAP_B_TO_B */ /* GL_PIXEL_MAP_A_TO_A */ /* PixelStore */ /* GL_UNPACK_SWAP_BYTES */ /* GL_UNPACK_LSB_FIRST */ /* GL_UNPACK_ROW_LENGTH */ /* GL_UNPACK_SKIP_ROWS */ /* GL_UNPACK_SKIP_PIXELS */ /* GL_UNPACK_ALIGNMENT */ /* GL_PACK_SWAP_BYTES */ /* GL_PACK_LSB_FIRST */ /* GL_PACK_ROW_LENGTH */ /* GL_PACK_SKIP_ROWS */ /* GL_PACK_SKIP_PIXELS */ /* GL_PACK_ALIGNMENT */ /* GL_PACK_SKIP_IMAGES */ /* GL_PACK_IMAGE_HEIGHT */ /* GL_UNPACK_SKIP_IMAGES */ /* GL_UNPACK_IMAGE_HEIGHT */ /* PixelTransfer */ /* GL_MAP_COLOR */ /* GL_MAP_STENCIL */ /* GL_INDEX_SHIFT */ /* GL_INDEX_OFFSET */ /* GL_RED_SCALE */ /* GL_RED_BIAS */ /* GL_GREEN_SCALE */ /* GL_GREEN_BIAS */ /* GL_BLUE_SCALE */ /* GL_BLUE_BIAS */ /* GL_ALPHA_SCALE */ /* GL_ALPHA_BIAS */ /* GL_DEPTH_SCALE */ /* GL_DEPTH_BIAS */ /* GL_POST_CONVOLUTION_RED_SCALE */ /* GL_POST_CONVOLUTION_GREEN_SCALE */ /* GL_POST_CONVOLUTION_BLUE_SCALE */ /* GL_POST_CONVOLUTION_ALPHA_SCALE */ /* GL_POST_CONVOLUTION_RED_BIAS */ /* GL_POST_CONVOLUTION_GREEN_BIAS */ /* GL_POST_CONVOLUTION_BLUE_BIAS */ /* GL_POST_CONVOLUTION_ALPHA_BIAS */ /* GL_POST_COLOR_MATRIX_RED_SCALE */ /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ /* GL_POST_COLOR_MATRIX_RED_BIAS */ /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ /* PixelType */ #define GL_BITMAP 0x1A00 /* GL_BYTE */ /* GL_UNSIGNED_BYTE */ /* GL_SHORT */ /* GL_UNSIGNED_SHORT */ /* GL_INT */ /* GL_UNSIGNED_INT */ /* GL_FLOAT */ /* GL_BGR */ /* GL_BGRA */ /* GL_UNSIGNED_BYTE_3_3_2 */ /* GL_UNSIGNED_SHORT_4_4_4_4 */ /* GL_UNSIGNED_SHORT_5_5_5_1 */ /* GL_UNSIGNED_INT_8_8_8_8 */ /* GL_UNSIGNED_INT_10_10_10_2 */ /* GL_UNSIGNED_SHORT_5_6_5 */ /* GL_UNSIGNED_BYTE_2_3_3_REV */ /* GL_UNSIGNED_SHORT_5_6_5_REV */ /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ /* GL_UNSIGNED_INT_8_8_8_8_REV */ /* GL_UNSIGNED_INT_2_10_10_10_REV */ /* PolygonMode */ #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 /* ReadBufferMode */ /* GL_FRONT_LEFT */ /* GL_FRONT_RIGHT */ /* GL_BACK_LEFT */ /* GL_BACK_RIGHT */ /* GL_FRONT */ /* GL_BACK */ /* GL_LEFT */ /* GL_RIGHT */ /* GL_AUX0 */ /* GL_AUX1 */ /* GL_AUX2 */ /* GL_AUX3 */ /* RenderingMode */ #define GL_RENDER 0x1C00 #define GL_FEEDBACK 0x1C01 #define GL_SELECT 0x1C02 /* SeparableTarget */ /* GL_SEPARABLE_2D */ /* ShadingModel */ #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 /* StencilFunction */ /* GL_NEVER */ /* GL_LESS */ /* GL_EQUAL */ /* GL_LEQUAL */ /* GL_GREATER */ /* GL_NOTEQUAL */ /* GL_GEQUAL */ /* GL_ALWAYS */ /* StencilOp */ /* GL_ZERO */ #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 /* GL_INVERT */ /* StringName */ #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 /* TextureCoordName */ #define GL_S 0x2000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 /* TexCoordPointerType */ /* GL_SHORT */ /* GL_INT */ /* GL_FLOAT */ /* GL_DOUBLE */ /* TextureEnvMode */ #define GL_MODULATE 0x2100 #define GL_DECAL 0x2101 /* GL_BLEND */ /* GL_REPLACE */ /* TextureEnvParameter */ #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_ENV_COLOR 0x2201 /* TextureEnvTarget */ #define GL_TEXTURE_ENV 0x2300 /* TextureGenMode */ #define GL_EYE_LINEAR 0x2400 #define GL_OBJECT_LINEAR 0x2401 #define GL_SPHERE_MAP 0x2402 /* TextureGenParameter */ #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_PLANE 0x2502 /* TextureMagFilter */ #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 /* TextureMinFilter */ /* GL_NEAREST */ /* GL_LINEAR */ #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 /* TextureParameterName */ #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 /* GL_TEXTURE_BORDER_COLOR */ /* GL_TEXTURE_PRIORITY */ /* GL_TEXTURE_WRAP_R */ /* GL_TEXTURE_MIN_LOD */ /* GL_TEXTURE_MAX_LOD */ /* GL_TEXTURE_BASE_LEVEL */ /* GL_TEXTURE_MAX_LEVEL */ /* TextureTarget */ /* GL_TEXTURE_1D */ /* GL_TEXTURE_2D */ /* GL_PROXY_TEXTURE_1D */ /* GL_PROXY_TEXTURE_2D */ /* GL_TEXTURE_3D */ /* GL_PROXY_TEXTURE_3D */ /* TextureUnit */ /* GL_TEXTURE0_ARB */ /* GL_TEXTURE1_ARB */ /* GL_TEXTURE2_ARB */ /* GL_TEXTURE3_ARB */ /* GL_TEXTURE4_ARB */ /* GL_TEXTURE5_ARB */ /* GL_TEXTURE6_ARB */ /* GL_TEXTURE7_ARB */ /* GL_TEXTURE8_ARB */ /* GL_TEXTURE9_ARB */ /* GL_TEXTURE10_ARB */ /* GL_TEXTURE11_ARB */ /* GL_TEXTURE12_ARB */ /* GL_TEXTURE13_ARB */ /* GL_TEXTURE14_ARB */ /* GL_TEXTURE15_ARB */ /* GL_TEXTURE16_ARB */ /* GL_TEXTURE17_ARB */ /* GL_TEXTURE18_ARB */ /* GL_TEXTURE19_ARB */ /* GL_TEXTURE20_ARB */ /* GL_TEXTURE21_ARB */ /* GL_TEXTURE22_ARB */ /* GL_TEXTURE23_ARB */ /* GL_TEXTURE24_ARB */ /* GL_TEXTURE25_ARB */ /* GL_TEXTURE26_ARB */ /* GL_TEXTURE27_ARB */ /* GL_TEXTURE28_ARB */ /* GL_TEXTURE29_ARB */ /* GL_TEXTURE30_ARB */ /* GL_TEXTURE31_ARB */ /* TextureWrapMode */ #define GL_CLAMP 0x2900 #define GL_REPEAT 0x2901 /* GL_CLAMP_TO_EDGE */ /* VertexPointerType */ /* GL_SHORT */ /* GL_INT */ /* GL_FLOAT */ /* GL_DOUBLE */ /* ClientAttribMask */ #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff /* polygon_offset */ #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 /* texture */ #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 /* texture_object */ #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_BINDING_3D 0x806A /* vertex_array */ #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D /* bgra */ #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 /* blend_color */ #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 /* blend_minmax */ #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 /* blend_subtract */ #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B /* color_matrix */ #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB /* color_table */ #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF /* convolution */ #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 /* draw_range_elements */ #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 /* histogram */ #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 /* packed_pixels */ #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 /* rescale_normal */ #define GL_RESCALE_NORMAL 0x803A /* separate_specular_color */ #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA /* texture3D */ #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 /* texture_edge_clamp */ #define GL_CLAMP_TO_EDGE 0x812F /* texture_lod */ #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D /* GetTarget1_2 */ #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E /* multitexture */ #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 /* For compatibility with OpenGL v1.0 */ #define GL_LOGIC_OP GL_INDEX_LOGIC_OP #define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT /*************************************************************/ GLAPI void APIENTRY glAccum (GLenum op, GLfloat value); GLAPI void APIENTRY glActiveTextureARB (GLenum texture); GLAPI void APIENTRY glAlphaFunc (GLenum func, GLclampf ref); GLAPI GLboolean APIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); GLAPI void APIENTRY glArrayElement (GLint i); GLAPI void APIENTRY glBegin (GLenum mode); GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); GLAPI void APIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); GLAPI void APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLAPI void APIENTRY glBlendEquation (GLenum mode); GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); GLAPI void APIENTRY glCallList (GLuint list); GLAPI void APIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); GLAPI void APIENTRY glClear (GLbitfield mask); GLAPI void APIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLAPI void APIENTRY glClearDepth (GLclampd depth); GLAPI void APIENTRY glClearIndex (GLfloat c); GLAPI void APIENTRY glClearStencil (GLint s); GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); GLAPI void APIENTRY glClipPlane (GLenum plane, const GLdouble *equation); GLAPI void APIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glColor3bv (const GLbyte *v); GLAPI void APIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glColor3dv (const GLdouble *v); GLAPI void APIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glColor3fv (const GLfloat *v); GLAPI void APIENTRY glColor3i (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glColor3iv (const GLint *v); GLAPI void APIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glColor3sv (const GLshort *v); GLAPI void APIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glColor3ubv (const GLubyte *v); GLAPI void APIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glColor3uiv (const GLuint *v); GLAPI void APIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glColor3usv (const GLushort *v); GLAPI void APIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); GLAPI void APIENTRY glColor4bv (const GLbyte *v); GLAPI void APIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); GLAPI void APIENTRY glColor4dv (const GLdouble *v); GLAPI void APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glColor4fv (const GLfloat *v); GLAPI void APIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); GLAPI void APIENTRY glColor4iv (const GLint *v); GLAPI void APIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); GLAPI void APIENTRY glColor4sv (const GLshort *v); GLAPI void APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); GLAPI void APIENTRY glColor4ubv (const GLubyte *v); GLAPI void APIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); GLAPI void APIENTRY glColor4uiv (const GLuint *v); GLAPI void APIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); GLAPI void APIENTRY glColor4usv (const GLushort *v); GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI void APIENTRY glColorMaterial (GLenum face, GLenum mode); GLAPI void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); GLAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCullFace (GLenum mode); GLAPI void APIENTRY glDeleteLists (GLuint list, GLsizei range); GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); GLAPI void APIENTRY glDepthFunc (GLenum func); GLAPI void APIENTRY glDepthMask (GLboolean flag); GLAPI void APIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); GLAPI void APIENTRY glDisable (GLenum cap); GLAPI void APIENTRY glDisableClientState (GLenum array); GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glDrawBuffer (GLenum mode); GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); GLAPI void APIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); GLAPI void APIENTRY glEdgeFlag (GLboolean flag); GLAPI void APIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glEdgeFlagv (const GLboolean *flag); GLAPI void APIENTRY glEnable (GLenum cap); GLAPI void APIENTRY glEnableClientState (GLenum array); GLAPI void APIENTRY glEnd (void); GLAPI void APIENTRY glEndList (void); GLAPI void APIENTRY glEvalCoord1d (GLdouble u); GLAPI void APIENTRY glEvalCoord1dv (const GLdouble *u); GLAPI void APIENTRY glEvalCoord1f (GLfloat u); GLAPI void APIENTRY glEvalCoord1fv (const GLfloat *u); GLAPI void APIENTRY glEvalCoord2d (GLdouble u, GLdouble v); GLAPI void APIENTRY glEvalCoord2dv (const GLdouble *u); GLAPI void APIENTRY glEvalCoord2f (GLfloat u, GLfloat v); GLAPI void APIENTRY glEvalCoord2fv (const GLfloat *u); GLAPI void APIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); GLAPI void APIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); GLAPI void APIENTRY glEvalPoint1 (GLint i); GLAPI void APIENTRY glEvalPoint2 (GLint i, GLint j); GLAPI void APIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); GLAPI void APIENTRY glFinish (void); GLAPI void APIENTRY glFlush (void); GLAPI void APIENTRY glFogf (GLenum pname, GLfloat param); GLAPI void APIENTRY glFogfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFogi (GLenum pname, GLint param); GLAPI void APIENTRY glFogiv (GLenum pname, const GLint *params); GLAPI void APIENTRY glFrontFace (GLenum mode); GLAPI void APIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI GLuint APIENTRY glGenLists (GLsizei range); GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *params); GLAPI void APIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *params); GLAPI GLenum APIENTRY glGetError (void); GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params); GLAPI void APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); GLAPI void APIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); GLAPI void APIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); GLAPI void APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); GLAPI void APIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); GLAPI void APIENTRY glGetPixelMapusv (GLenum map, GLushort *values); GLAPI void APIENTRY glGetPointerv (GLenum pname, GLvoid* *params); GLAPI void APIENTRY glGetPolygonStipple (GLubyte *mask); GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); GLAPI const GLubyte * APIENTRY glGetString (GLenum name); GLAPI void APIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHint (GLenum target, GLenum mode); GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glIndexMask (GLuint mask); GLAPI void APIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glIndexd (GLdouble c); GLAPI void APIENTRY glIndexdv (const GLdouble *c); GLAPI void APIENTRY glIndexf (GLfloat c); GLAPI void APIENTRY glIndexfv (const GLfloat *c); GLAPI void APIENTRY glIndexi (GLint c); GLAPI void APIENTRY glIndexiv (const GLint *c); GLAPI void APIENTRY glIndexs (GLshort c); GLAPI void APIENTRY glIndexsv (const GLshort *c); GLAPI void APIENTRY glIndexub (GLubyte c); GLAPI void APIENTRY glIndexubv (const GLubyte *c); GLAPI void APIENTRY glInitNames (void); GLAPI void APIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap); GLAPI GLboolean APIENTRY glIsList (GLuint list); GLAPI GLboolean APIENTRY glIsTexture (GLuint texture); GLAPI void APIENTRY glLightModelf (GLenum pname, GLfloat param); GLAPI void APIENTRY glLightModelfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glLightModeli (GLenum pname, GLint param); GLAPI void APIENTRY glLightModeliv (GLenum pname, const GLint *params); GLAPI void APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); GLAPI void APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glLighti (GLenum light, GLenum pname, GLint param); GLAPI void APIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); GLAPI void APIENTRY glLineStipple (GLint factor, GLushort pattern); GLAPI void APIENTRY glLineWidth (GLfloat width); GLAPI void APIENTRY glListBase (GLuint base); GLAPI void APIENTRY glLoadIdentity (void); GLAPI void APIENTRY glLoadMatrixd (const GLdouble *m); GLAPI void APIENTRY glLoadMatrixf (const GLfloat *m); GLAPI void APIENTRY glLoadName (GLuint name); GLAPI void APIENTRY glLogicOp (GLenum opcode); GLAPI void APIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); GLAPI void APIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); GLAPI void APIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); GLAPI void APIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); GLAPI void APIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); GLAPI void APIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); GLAPI void APIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); GLAPI void APIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); GLAPI void APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMateriali (GLenum face, GLenum pname, GLint param); GLAPI void APIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); GLAPI void APIENTRY glMatrixMode (GLenum mode); GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMultMatrixd (const GLdouble *m); GLAPI void APIENTRY glMultMatrixf (const GLfloat *m); GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glNewList (GLuint list, GLenum mode); GLAPI void APIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); GLAPI void APIENTRY glNormal3bv (const GLbyte *v); GLAPI void APIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); GLAPI void APIENTRY glNormal3dv (const GLdouble *v); GLAPI void APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); GLAPI void APIENTRY glNormal3fv (const GLfloat *v); GLAPI void APIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); GLAPI void APIENTRY glNormal3iv (const GLint *v); GLAPI void APIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); GLAPI void APIENTRY glNormal3sv (const GLshort *v); GLAPI void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glPassThrough (GLfloat token); GLAPI void APIENTRY glPixelMapfv (GLenum map, GLint mapsize, const GLfloat *values); GLAPI void APIENTRY glPixelMapuiv (GLenum map, GLint mapsize, const GLuint *values); GLAPI void APIENTRY glPixelMapusv (GLenum map, GLint mapsize, const GLushort *values); GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); GLAPI void APIENTRY glPixelTransferf (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTransferi (GLenum pname, GLint param); GLAPI void APIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); GLAPI void APIENTRY glPointSize (GLfloat size); GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode); GLAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); GLAPI void APIENTRY glPolygonStipple (const GLubyte *mask); GLAPI void APIENTRY glPopAttrib (void); GLAPI void APIENTRY glPopClientAttrib (void); GLAPI void APIENTRY glPopMatrix (void); GLAPI void APIENTRY glPopName (void); GLAPI void APIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); GLAPI void APIENTRY glPushAttrib (GLbitfield mask); GLAPI void APIENTRY glPushClientAttrib (GLbitfield mask); GLAPI void APIENTRY glPushMatrix (void); GLAPI void APIENTRY glPushName (GLuint name); GLAPI void APIENTRY glRasterPos2d (GLdouble x, GLdouble y); GLAPI void APIENTRY glRasterPos2dv (const GLdouble *v); GLAPI void APIENTRY glRasterPos2f (GLfloat x, GLfloat y); GLAPI void APIENTRY glRasterPos2fv (const GLfloat *v); GLAPI void APIENTRY glRasterPos2i (GLint x, GLint y); GLAPI void APIENTRY glRasterPos2iv (const GLint *v); GLAPI void APIENTRY glRasterPos2s (GLshort x, GLshort y); GLAPI void APIENTRY glRasterPos2sv (const GLshort *v); GLAPI void APIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glRasterPos3dv (const GLdouble *v); GLAPI void APIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glRasterPos3fv (const GLfloat *v); GLAPI void APIENTRY glRasterPos3i (GLint x, GLint y, GLint z); GLAPI void APIENTRY glRasterPos3iv (const GLint *v); GLAPI void APIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glRasterPos3sv (const GLshort *v); GLAPI void APIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glRasterPos4dv (const GLdouble *v); GLAPI void APIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glRasterPos4fv (const GLfloat *v); GLAPI void APIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glRasterPos4iv (const GLint *v); GLAPI void APIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glRasterPos4sv (const GLshort *v); GLAPI void APIENTRY glReadBuffer (GLenum mode); GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); GLAPI void APIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); GLAPI void APIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); GLAPI void APIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); GLAPI void APIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); GLAPI void APIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); GLAPI void APIENTRY glRectiv (const GLint *v1, const GLint *v2); GLAPI void APIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); GLAPI void APIENTRY glRectsv (const GLshort *v1, const GLshort *v2); GLAPI GLint APIENTRY glRenderMode (GLenum mode); GLAPI void APIENTRY glResetHistogram (GLenum target); GLAPI void APIENTRY glResetMinmax (GLenum target); GLAPI void APIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); GLAPI void APIENTRY glShadeModel (GLenum mode); GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilMask (GLuint mask); GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); GLAPI void APIENTRY glTexCoord1d (GLdouble s); GLAPI void APIENTRY glTexCoord1dv (const GLdouble *v); GLAPI void APIENTRY glTexCoord1f (GLfloat s); GLAPI void APIENTRY glTexCoord1fv (const GLfloat *v); GLAPI void APIENTRY glTexCoord1i (GLint s); GLAPI void APIENTRY glTexCoord1iv (const GLint *v); GLAPI void APIENTRY glTexCoord1s (GLshort s); GLAPI void APIENTRY glTexCoord1sv (const GLshort *v); GLAPI void APIENTRY glTexCoord2d (GLdouble s, GLdouble t); GLAPI void APIENTRY glTexCoord2dv (const GLdouble *v); GLAPI void APIENTRY glTexCoord2f (GLfloat s, GLfloat t); GLAPI void APIENTRY glTexCoord2fv (const GLfloat *v); GLAPI void APIENTRY glTexCoord2i (GLint s, GLint t); GLAPI void APIENTRY glTexCoord2iv (const GLint *v); GLAPI void APIENTRY glTexCoord2s (GLshort s, GLshort t); GLAPI void APIENTRY glTexCoord2sv (const GLshort *v); GLAPI void APIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glTexCoord3dv (const GLdouble *v); GLAPI void APIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glTexCoord3fv (const GLfloat *v); GLAPI void APIENTRY glTexCoord3i (GLint s, GLint t, GLint r); GLAPI void APIENTRY glTexCoord3iv (const GLint *v); GLAPI void APIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glTexCoord3sv (const GLshort *v); GLAPI void APIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glTexCoord4dv (const GLdouble *v); GLAPI void APIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glTexCoord4fv (const GLfloat *v); GLAPI void APIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glTexCoord4iv (const GLint *v); GLAPI void APIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glTexCoord4sv (const GLshort *v); GLAPI void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); GLAPI void APIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); GLAPI void APIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); GLAPI void APIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); GLAPI void APIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertex2d (GLdouble x, GLdouble y); GLAPI void APIENTRY glVertex2dv (const GLdouble *v); GLAPI void APIENTRY glVertex2f (GLfloat x, GLfloat y); GLAPI void APIENTRY glVertex2fv (const GLfloat *v); GLAPI void APIENTRY glVertex2i (GLint x, GLint y); GLAPI void APIENTRY glVertex2iv (const GLint *v); GLAPI void APIENTRY glVertex2s (GLshort x, GLshort y); GLAPI void APIENTRY glVertex2sv (const GLshort *v); GLAPI void APIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertex3dv (const GLdouble *v); GLAPI void APIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertex3fv (const GLfloat *v); GLAPI void APIENTRY glVertex3i (GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertex3iv (const GLint *v); GLAPI void APIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertex3sv (const GLshort *v); GLAPI void APIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertex4dv (const GLdouble *v); GLAPI void APIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertex4fv (const GLfloat *v); GLAPI void APIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertex4iv (const GLint *v); GLAPI void APIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertex4sv (const GLshort *v); GLAPI void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); #ifdef __cplusplus } #endif #endif /* __gl_h_ */ tmpNnpnZF/thirdparty/khronos/GL/glx.h0000664000175000017500000003107412543167424017113 0ustar chrischris#ifndef __glx_h__ #define __glx_h__ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: The application programming interfaces ** established by SGI in conjunction with the Original Code are The ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X ** Window System(R) (Version 1.3), released October 19, 1998. This software ** was created using the OpenGL(R) version 1.2.1 Sample Implementation ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. */ #include #include #include #ifdef __cplusplus extern "C" { #endif #define GLX_VERSION_1_1 1 #define GLX_VERSION_1_2 1 #define GLX_VERSION_1_3 1 /* ** Visual Config Attributes (glXGetConfig, glXGetFBConfigAttrib) */ #define GLX_USE_GL 1 /* support GLX rendering */ #define GLX_BUFFER_SIZE 2 /* depth of the color buffer */ #define GLX_LEVEL 3 /* level in plane stacking */ #define GLX_RGBA 4 /* true if RGBA mode */ #define GLX_DOUBLEBUFFER 5 /* double buffering supported */ #define GLX_STEREO 6 /* stereo buffering supported */ #define GLX_AUX_BUFFERS 7 /* number of aux buffers */ #define GLX_RED_SIZE 8 /* number of red component bits */ #define GLX_GREEN_SIZE 9 /* number of green component bits */ #define GLX_BLUE_SIZE 10 /* number of blue component bits */ #define GLX_ALPHA_SIZE 11 /* number of alpha component bits */ #define GLX_DEPTH_SIZE 12 /* number of depth bits */ #define GLX_STENCIL_SIZE 13 /* number of stencil bits */ #define GLX_ACCUM_RED_SIZE 14 /* number of red accum bits */ #define GLX_ACCUM_GREEN_SIZE 15 /* number of green accum bits */ #define GLX_ACCUM_BLUE_SIZE 16 /* number of blue accum bits */ #define GLX_ACCUM_ALPHA_SIZE 17 /* number of alpha accum bits */ /* ** FBConfig-specific attributes */ #define GLX_X_VISUAL_TYPE 0x22 #define GLX_CONFIG_CAVEAT 0x20 /* Like visual_info VISUAL_CAVEAT_EXT */ #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_VISUAL_ID 0x800B /* ** Error return values from glXGetConfig. Success is indicated by ** a value of 0. */ #define GLX_BAD_SCREEN 1 /* screen # is bad */ #define GLX_BAD_ATTRIBUTE 2 /* attribute to get is bad */ #define GLX_NO_EXTENSION 3 /* no glx extension on server */ #define GLX_BAD_VISUAL 4 /* visual # not known by GLX */ #define GLX_BAD_CONTEXT 5 /* returned only by import_context EXT? */ #define GLX_BAD_VALUE 6 /* returned only by glXSwapIntervalSGI? */ #define GLX_BAD_ENUM 7 /* unused? */ /* FBConfig attribute values */ /* ** Generic "don't care" value for glX ChooseFBConfig attributes (except ** GLX_LEVEL) */ #define GLX_DONT_CARE 0xFFFFFFFF /* GLX_RENDER_TYPE bits */ #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 /* GLX_DRAWABLE_TYPE bits */ #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 /* GLX_CONFIG_CAVEAT attribute values */ #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_NON_CONFORMANT_CONFIG 0x800D /* GLX_X_VISUAL_TYPE attribute values */ #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 /* GLX_TRANSPARENT_TYPE attribute values */ /* #define GLX_NONE 0x8000 */ #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 /* glXCreateGLXPbuffer attributes */ #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_PBUFFER_HEIGHT 0x8040 /* New for GLX 1.3 */ #define GLX_PBUFFER_WIDTH 0x8041 /* New for GLX 1.3 */ /* glXQueryGLXPBuffer attributes */ #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F /* glXCreateNewContext render_type attribute values */ #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 /* glXQueryContext attributes */ /* #define GLX_FBCONFIG_ID 0x8013 */ /* #define GLX_RENDER_TYPE 0x8011 */ #define GLX_SCREEN 0x800C /* glXSelectEvent event mask bits */ #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 /* GLXPbufferClobberEvent event_type values */ #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 /* GLXPbufferClobberEvent draw_type values */ #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 /* GLXPbufferClobberEvent buffer_mask bits */ #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 /* ** Extension return values from glXGetConfig. These are also ** accepted as parameter values for glXChooseVisual. */ #define GLX_X_VISUAL_TYPE_EXT 0x22 /* visual_info extension type */ #define GLX_TRANSPARENT_TYPE_EXT 0x23 /* visual_info extension */ #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 /* visual_info extension */ #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 /* visual_info extension */ #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 /* visual_info extension */ #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 /* visual_info extension */ #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 /* visual_info extension */ /* Property values for visual_type */ #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 /* Property values for transparent pixel */ #define GLX_NONE_EXT 0x8000 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 /* Property values for visual_rating */ #define GLX_VISUAL_CAVEAT_EXT 0x20 /* visual_rating extension type */ #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D /* ** Names for attributes to glXGetClientString. */ #define GLX_VENDOR 0x1 #define GLX_VERSION 0x2 #define GLX_EXTENSIONS 0x3 /* ** Names for attributes to glXQueryContextInfoEXT. */ #define GLX_SHARE_CONTEXT_EXT 0x800A /* id of share context */ #define GLX_VISUAL_ID_EXT 0x800B /* id of context's visual */ #define GLX_SCREEN_EXT 0x800C /* screen number */ /* GLX Extension Strings */ #define GLX_EXT_import_context 1 #define GLX_EXT_visual_info 1 #define GLX_EXT_visual_rating 1 /* ** GLX resources. */ typedef XID GLXContextID; typedef XID GLXPixmap; typedef XID GLXDrawable; typedef XID GLXPbuffer; typedef XID GLXWindow; typedef XID GLXFBConfigID; /* ** GLXContext is a pointer to opaque data. */ typedef struct __GLXcontextRec *GLXContext; /* ** GLXFBConfig is a pointer to opaque data. */ typedef struct __GLXFBConfigRec *GLXFBConfig; /************************************************************************/ extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, unsigned long mask); extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); extern void glXDestroyContext (Display *dpy, GLXContext ctx); extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); extern GLXContext glXGetCurrentContext (void); extern GLXDrawable glXGetCurrentDrawable (void); extern Bool glXIsDirect (Display *dpy, GLXContext ctx); extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); extern void glXUseXFont (Font font, int first, int count, int listBase); extern void glXWaitGL (void); extern void glXWaitX (void); extern const char * glXGetClientString (Display *dpy, int name ); extern const char * glXQueryServerString (Display *dpy, int screen, int name ); extern const char * glXQueryExtensionsString (Display *dpy, int screen ); /* New for GLX 1.3 */ extern GLXFBConfig * glXGetFBConfigs (Display *dpy, int screen, int *nelements); extern GLXFBConfig * glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements); extern int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value); extern XVisualInfo * glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config); extern GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); extern void glXDestroyWindow (Display *dpy, GLXWindow win); extern GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); extern void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap); extern GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list); extern void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf); extern void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); extern GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); extern Bool glXMakeContextCurrent (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); extern GLXDrawable glXGetCurrentReadDrawable (void); extern Display * glXGetCurrentDisplay (void); extern int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value); extern void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask); extern void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask); /*** SGI GLX extensions */ extern GLXContextID glXGetContextIDEXT (const GLXContext ctx); extern GLXDrawable glXGetCurrentDrawableEXT (void); extern GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID); extern void glXFreeContextEXT (Display *dpy, GLXContext ctx); extern int glXQueryContextInfoEXT (Display *dpy, GLXContext ctx, int attribute, int *value); /*** Should these go here, or in another header? */ /* ** GLX Events */ typedef struct { int event_type; /* GLX_DAMAGED or GLX_SAVED */ int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came for SendEvent request */ Display *display; /* display the event was read from */ GLXDrawable drawable; /* XID of Drawable */ unsigned int buffer_mask; /* mask indicating which buffers are affected */ unsigned int aux_buffer; /* which aux buffer was affected */ int x, y; int width, height; int count; /* if nonzero, at least this many more */ } GLXPbufferClobberEvent; typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent; #ifdef __cplusplus } #endif #endif /* !__glx_h__ */ tmpNnpnZF/thirdparty/khronos/KHR/0000775000175000017500000000000012543167424016265 5ustar chrischristmpNnpnZF/thirdparty/khronos/KHR/khrplatform.h0000664000175000017500000002344612543167424021000 0ustar chrischris#ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2009 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by sending them to the public Khronos Bugzilla * (http://khronos.org/bugzilla) by filing a bug against product * "Khronos (general)" component "Registry". * * A predefined template which fills in some of the bug fields can be * reached using http://tinyurl.com/khrplatform-h-bugreport, but you * must create a Bugzilla login first. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(_WIN32) && !defined(__SCITECH_SNAP__) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef _WIN64 typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ tmpNnpnZF/thirdparty/khronos/README.markdown0000664000175000017500000000032612543167424020343 0ustar chrischrisThis directory contains headers for all relevant Khronos APIs, based from: * http://www.khronos.org/ * http://www.opengl.org/registry/ * http://oss.sgi.com/projects/ogl-sample/ To update simply run: make tmpNnpnZF/thirdparty/khronos/EGL/0000775000175000017500000000000012543167424016250 5ustar chrischristmpNnpnZF/thirdparty/khronos/EGL/eglext.h0000664000175000017500000012127612543167424017722 0ustar chrischris#ifndef __eglext_h_ #define __eglext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision$ on $Date$ */ #include #define EGL_EGLEXT_VERSION 20150508 /* Generated C header for: * API: egl * Versions considered: .* * Versions emitted: _nomatch_^ * Default extensions included: egl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef EGL_KHR_cl_event #define EGL_KHR_cl_event 1 #define EGL_CL_EVENT_HANDLE_KHR 0x309C #define EGL_SYNC_CL_EVENT_KHR 0x30FE #define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF #endif /* EGL_KHR_cl_event */ #ifndef EGL_KHR_cl_event2 #define EGL_KHR_cl_event2 1 typedef void *EGLSyncKHR; typedef intptr_t EGLAttribKHR; typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); #endif #endif /* EGL_KHR_cl_event2 */ #ifndef EGL_KHR_client_get_all_proc_addresses #define EGL_KHR_client_get_all_proc_addresses 1 #endif /* EGL_KHR_client_get_all_proc_addresses */ #ifndef EGL_KHR_config_attribs #define EGL_KHR_config_attribs 1 #define EGL_CONFORMANT_KHR 0x3042 #define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 #define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 #endif /* EGL_KHR_config_attribs */ #ifndef EGL_KHR_create_context #define EGL_KHR_create_context 1 #define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB #define EGL_CONTEXT_FLAGS_KHR 0x30FC #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD #define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 #define EGL_OPENGL_ES3_BIT_KHR 0x00000040 #endif /* EGL_KHR_create_context */ #ifndef EGL_KHR_create_context_no_error #define EGL_KHR_create_context_no_error 1 #define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 #endif /* EGL_KHR_create_context_no_error */ #ifndef EGL_KHR_fence_sync #define EGL_KHR_fence_sync 1 typedef khronos_utime_nanoseconds_t EGLTimeKHR; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 #define EGL_SYNC_CONDITION_KHR 0x30F8 #define EGL_SYNC_FENCE_KHR 0x30F9 typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_fence_sync */ #ifndef EGL_KHR_get_all_proc_addresses #define EGL_KHR_get_all_proc_addresses 1 #endif /* EGL_KHR_get_all_proc_addresses */ #ifndef EGL_KHR_gl_colorspace #define EGL_KHR_gl_colorspace 1 #define EGL_GL_COLORSPACE_KHR 0x309D #define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 #define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A #endif /* EGL_KHR_gl_colorspace */ #ifndef EGL_KHR_gl_renderbuffer_image #define EGL_KHR_gl_renderbuffer_image 1 #define EGL_GL_RENDERBUFFER_KHR 0x30B9 #endif /* EGL_KHR_gl_renderbuffer_image */ #ifndef EGL_KHR_gl_texture_2D_image #define EGL_KHR_gl_texture_2D_image 1 #define EGL_GL_TEXTURE_2D_KHR 0x30B1 #define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC #endif /* EGL_KHR_gl_texture_2D_image */ #ifndef EGL_KHR_gl_texture_3D_image #define EGL_KHR_gl_texture_3D_image 1 #define EGL_GL_TEXTURE_3D_KHR 0x30B2 #define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD #endif /* EGL_KHR_gl_texture_3D_image */ #ifndef EGL_KHR_gl_texture_cubemap_image #define EGL_KHR_gl_texture_cubemap_image 1 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 #endif /* EGL_KHR_gl_texture_cubemap_image */ #ifndef EGL_KHR_image #define EGL_KHR_image 1 typedef void *EGLImageKHR; #define EGL_NATIVE_PIXMAP_KHR 0x30B0 #define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); #endif #endif /* EGL_KHR_image */ #ifndef EGL_KHR_image_base #define EGL_KHR_image_base 1 #define EGL_IMAGE_PRESERVED_KHR 0x30D2 #endif /* EGL_KHR_image_base */ #ifndef EGL_KHR_image_pixmap #define EGL_KHR_image_pixmap 1 #endif /* EGL_KHR_image_pixmap */ #ifndef EGL_KHR_lock_surface #define EGL_KHR_lock_surface 1 #define EGL_READ_SURFACE_BIT_KHR 0x0001 #define EGL_WRITE_SURFACE_BIT_KHR 0x0002 #define EGL_LOCK_SURFACE_BIT_KHR 0x0080 #define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 #define EGL_MATCH_FORMAT_KHR 0x3043 #define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 #define EGL_FORMAT_RGB_565_KHR 0x30C1 #define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 #define EGL_FORMAT_RGBA_8888_KHR 0x30C3 #define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 #define EGL_LOCK_USAGE_HINT_KHR 0x30C5 #define EGL_BITMAP_POINTER_KHR 0x30C6 #define EGL_BITMAP_PITCH_KHR 0x30C7 #define EGL_BITMAP_ORIGIN_KHR 0x30C8 #define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 #define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA #define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB #define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC #define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD #define EGL_LOWER_LEFT_KHR 0x30CE #define EGL_UPPER_LEFT_KHR 0x30CF typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); #endif #endif /* EGL_KHR_lock_surface */ #ifndef EGL_KHR_lock_surface2 #define EGL_KHR_lock_surface2 1 #define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 #endif /* EGL_KHR_lock_surface2 */ #ifndef EGL_KHR_lock_surface3 #define EGL_KHR_lock_surface3 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #endif #endif /* EGL_KHR_lock_surface3 */ #ifndef EGL_KHR_partial_update #define EGL_KHR_partial_update 1 #define EGL_BUFFER_AGE_KHR 0x313D typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif #endif /* EGL_KHR_partial_update */ #ifndef EGL_KHR_platform_android #define EGL_KHR_platform_android 1 #define EGL_PLATFORM_ANDROID_KHR 0x3141 #endif /* EGL_KHR_platform_android */ #ifndef EGL_KHR_platform_gbm #define EGL_KHR_platform_gbm 1 #define EGL_PLATFORM_GBM_KHR 0x31D7 #endif /* EGL_KHR_platform_gbm */ #ifndef EGL_KHR_platform_wayland #define EGL_KHR_platform_wayland 1 #define EGL_PLATFORM_WAYLAND_KHR 0x31D8 #endif /* EGL_KHR_platform_wayland */ #ifndef EGL_KHR_platform_x11 #define EGL_KHR_platform_x11 1 #define EGL_PLATFORM_X11_KHR 0x31D5 #define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 #endif /* EGL_KHR_platform_x11 */ #ifndef EGL_KHR_reusable_sync #define EGL_KHR_reusable_sync 1 #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_STATUS_KHR 0x30F1 #define EGL_SIGNALED_KHR 0x30F2 #define EGL_UNSIGNALED_KHR 0x30F3 #define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 #define EGL_CONDITION_SATISFIED_KHR 0x30F6 #define EGL_SYNC_TYPE_KHR 0x30F7 #define EGL_SYNC_REUSABLE_KHR 0x30FA #define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 #define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull #define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_reusable_sync */ #ifndef EGL_KHR_stream #define EGL_KHR_stream 1 typedef void *EGLStreamKHR; typedef khronos_uint64_t EGLuint64KHR; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) #define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 #define EGL_PRODUCER_FRAME_KHR 0x3212 #define EGL_CONSUMER_FRAME_KHR 0x3213 #define EGL_STREAM_STATE_KHR 0x3214 #define EGL_STREAM_STATE_CREATED_KHR 0x3215 #define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 #define EGL_STREAM_STATE_EMPTY_KHR 0x3217 #define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 #define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 #define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A #define EGL_BAD_STREAM_KHR 0x321B #define EGL_BAD_STATE_KHR 0x321C typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_stream */ #ifndef EGL_KHR_stream_consumer_gltexture #define EGL_KHR_stream_consumer_gltexture 1 #ifdef EGL_KHR_stream #define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_consumer_gltexture */ #ifndef EGL_KHR_stream_cross_process_fd #define EGL_KHR_stream_cross_process_fd 1 typedef int EGLNativeFileDescriptorKHR; #ifdef EGL_KHR_stream #define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_cross_process_fd */ #ifndef EGL_KHR_stream_fifo #define EGL_KHR_stream_fifo 1 #ifdef EGL_KHR_stream #define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC #define EGL_STREAM_TIME_NOW_KHR 0x31FD #define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE #define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_fifo */ #ifndef EGL_KHR_stream_producer_aldatalocator #define EGL_KHR_stream_producer_aldatalocator 1 #ifdef EGL_KHR_stream #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_producer_aldatalocator */ #ifndef EGL_KHR_stream_producer_eglsurface #define EGL_KHR_stream_producer_eglsurface 1 #ifdef EGL_KHR_stream #define EGL_STREAM_BIT_KHR 0x0800 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_producer_eglsurface */ #ifndef EGL_KHR_surfaceless_context #define EGL_KHR_surfaceless_context 1 #endif /* EGL_KHR_surfaceless_context */ #ifndef EGL_KHR_swap_buffers_with_damage #define EGL_KHR_swap_buffers_with_damage 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif #endif /* EGL_KHR_swap_buffers_with_damage */ #ifndef EGL_KHR_vg_parent_image #define EGL_KHR_vg_parent_image 1 #define EGL_VG_PARENT_IMAGE_KHR 0x30BA #endif /* EGL_KHR_vg_parent_image */ #ifndef EGL_KHR_wait_sync #define EGL_KHR_wait_sync 1 typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #endif #endif /* EGL_KHR_wait_sync */ #ifndef EGL_ANDROID_blob_cache #define EGL_ANDROID_blob_cache 1 typedef khronos_ssize_t EGLsizeiANDROID; typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #endif #endif /* EGL_ANDROID_blob_cache */ #ifndef EGL_ANDROID_framebuffer_target #define EGL_ANDROID_framebuffer_target 1 #define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 #endif /* EGL_ANDROID_framebuffer_target */ #ifndef EGL_ANDROID_image_native_buffer #define EGL_ANDROID_image_native_buffer 1 #define EGL_NATIVE_BUFFER_ANDROID 0x3140 #endif /* EGL_ANDROID_image_native_buffer */ #ifndef EGL_ANDROID_native_fence_sync #define EGL_ANDROID_native_fence_sync 1 #define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 #define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 #define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 #define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); #endif #endif /* EGL_ANDROID_native_fence_sync */ #ifndef EGL_ANDROID_recordable #define EGL_ANDROID_recordable 1 #define EGL_RECORDABLE_ANDROID 0x3142 #endif /* EGL_ANDROID_recordable */ #ifndef EGL_ANGLE_d3d_share_handle_client_buffer #define EGL_ANGLE_d3d_share_handle_client_buffer 1 #define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 #endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ #ifndef EGL_ANGLE_device_d3d #define EGL_ANGLE_device_d3d 1 #define EGL_D3D9_DEVICE_ANGLE 0x33A0 #define EGL_D3D11_DEVICE_ANGLE 0x33A1 #endif /* EGL_ANGLE_device_d3d */ #ifndef EGL_ANGLE_query_surface_pointer #define EGL_ANGLE_query_surface_pointer 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #endif #endif /* EGL_ANGLE_query_surface_pointer */ #ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle #define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 #endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ #ifndef EGL_ANGLE_window_fixed_size #define EGL_ANGLE_window_fixed_size 1 #define EGL_FIXED_SIZE_ANGLE 0x3201 #endif /* EGL_ANGLE_window_fixed_size */ #ifndef EGL_ARM_pixmap_multisample_discard #define EGL_ARM_pixmap_multisample_discard 1 #define EGL_DISCARD_SAMPLES_ARM 0x3286 #endif /* EGL_ARM_pixmap_multisample_discard */ #ifndef EGL_EXT_buffer_age #define EGL_EXT_buffer_age 1 #define EGL_BUFFER_AGE_EXT 0x313D #endif /* EGL_EXT_buffer_age */ #ifndef EGL_EXT_client_extensions #define EGL_EXT_client_extensions 1 #endif /* EGL_EXT_client_extensions */ #ifndef EGL_EXT_create_context_robustness #define EGL_EXT_create_context_robustness 1 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 #define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF #endif /* EGL_EXT_create_context_robustness */ #ifndef EGL_EXT_device_base #define EGL_EXT_device_base 1 typedef void *EGLDeviceEXT; #define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) #define EGL_BAD_DEVICE_EXT 0x322B #define EGL_DEVICE_EXT 0x322C typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #endif #endif /* EGL_EXT_device_base */ #ifndef EGL_EXT_device_drm #define EGL_EXT_device_drm 1 #define EGL_DRM_DEVICE_FILE_EXT 0x3233 #endif /* EGL_EXT_device_drm */ #ifndef EGL_EXT_device_enumeration #define EGL_EXT_device_enumeration 1 #endif /* EGL_EXT_device_enumeration */ #ifndef EGL_EXT_device_openwf #define EGL_EXT_device_openwf 1 #define EGL_OPENWF_DEVICE_ID_EXT 0x3237 #endif /* EGL_EXT_device_openwf */ #ifndef EGL_EXT_device_query #define EGL_EXT_device_query 1 #endif /* EGL_EXT_device_query */ #ifndef EGL_EXT_image_dma_buf_import #define EGL_EXT_image_dma_buf_import 1 #define EGL_LINUX_DMA_BUF_EXT 0x3270 #define EGL_LINUX_DRM_FOURCC_EXT 0x3271 #define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 #define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 #define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 #define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 #define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 #define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 #define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 #define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 #define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A #define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B #define EGL_SAMPLE_RANGE_HINT_EXT 0x327C #define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D #define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E #define EGL_ITU_REC601_EXT 0x327F #define EGL_ITU_REC709_EXT 0x3280 #define EGL_ITU_REC2020_EXT 0x3281 #define EGL_YUV_FULL_RANGE_EXT 0x3282 #define EGL_YUV_NARROW_RANGE_EXT 0x3283 #define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 #define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 #endif /* EGL_EXT_image_dma_buf_import */ #ifndef EGL_EXT_multiview_window #define EGL_EXT_multiview_window 1 #define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 #endif /* EGL_EXT_multiview_window */ #ifndef EGL_EXT_output_base #define EGL_EXT_output_base 1 typedef void *EGLOutputLayerEXT; typedef void *EGLOutputPortEXT; #define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0) #define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0) #define EGL_BAD_OUTPUT_LAYER_EXT 0x322D #define EGL_BAD_OUTPUT_PORT_EXT 0x322E #define EGL_SWAP_INTERVAL_EXT 0x322F typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); #endif #endif /* EGL_EXT_output_base */ #ifndef EGL_EXT_output_drm #define EGL_EXT_output_drm 1 #define EGL_DRM_CRTC_EXT 0x3234 #define EGL_DRM_PLANE_EXT 0x3235 #define EGL_DRM_CONNECTOR_EXT 0x3236 #endif /* EGL_EXT_output_drm */ #ifndef EGL_EXT_output_openwf #define EGL_EXT_output_openwf 1 #define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 #define EGL_OPENWF_PORT_ID_EXT 0x3239 #endif /* EGL_EXT_output_openwf */ #ifndef EGL_EXT_platform_base #define EGL_EXT_platform_base 1 typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); #endif #endif /* EGL_EXT_platform_base */ #ifndef EGL_EXT_platform_device #define EGL_EXT_platform_device 1 #define EGL_PLATFORM_DEVICE_EXT 0x313F #endif /* EGL_EXT_platform_device */ #ifndef EGL_EXT_platform_wayland #define EGL_EXT_platform_wayland 1 #define EGL_PLATFORM_WAYLAND_EXT 0x31D8 #endif /* EGL_EXT_platform_wayland */ #ifndef EGL_EXT_platform_x11 #define EGL_EXT_platform_x11 1 #define EGL_PLATFORM_X11_EXT 0x31D5 #define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 #endif /* EGL_EXT_platform_x11 */ #ifndef EGL_EXT_protected_surface #define EGL_EXT_protected_surface 1 #define EGL_PROTECTED_CONTENT_EXT 0x32C0 #endif /* EGL_EXT_protected_surface */ #ifndef EGL_EXT_stream_consumer_egloutput #define EGL_EXT_stream_consumer_egloutput 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); #endif #endif /* EGL_EXT_stream_consumer_egloutput */ #ifndef EGL_EXT_swap_buffers_with_damage #define EGL_EXT_swap_buffers_with_damage 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif #endif /* EGL_EXT_swap_buffers_with_damage */ #ifndef EGL_EXT_yuv_surface #define EGL_EXT_yuv_surface 1 #define EGL_YUV_ORDER_EXT 0x3301 #define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 #define EGL_YUV_SUBSAMPLE_EXT 0x3312 #define EGL_YUV_DEPTH_RANGE_EXT 0x3317 #define EGL_YUV_CSC_STANDARD_EXT 0x330A #define EGL_YUV_PLANE_BPP_EXT 0x331A #define EGL_YUV_BUFFER_EXT 0x3300 #define EGL_YUV_ORDER_YUV_EXT 0x3302 #define EGL_YUV_ORDER_YVU_EXT 0x3303 #define EGL_YUV_ORDER_YUYV_EXT 0x3304 #define EGL_YUV_ORDER_UYVY_EXT 0x3305 #define EGL_YUV_ORDER_YVYU_EXT 0x3306 #define EGL_YUV_ORDER_VYUY_EXT 0x3307 #define EGL_YUV_ORDER_AYUV_EXT 0x3308 #define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 #define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 #define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 #define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 #define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 #define EGL_YUV_CSC_STANDARD_601_EXT 0x330B #define EGL_YUV_CSC_STANDARD_709_EXT 0x330C #define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D #define EGL_YUV_PLANE_BPP_0_EXT 0x331B #define EGL_YUV_PLANE_BPP_8_EXT 0x331C #define EGL_YUV_PLANE_BPP_10_EXT 0x331D #endif /* EGL_EXT_yuv_surface */ #ifndef EGL_HI_clientpixmap #define EGL_HI_clientpixmap 1 struct EGLClientPixmapHI { void *pData; EGLint iWidth; EGLint iHeight; EGLint iStride; }; #define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #endif #endif /* EGL_HI_clientpixmap */ #ifndef EGL_HI_colorformats #define EGL_HI_colorformats 1 #define EGL_COLOR_FORMAT_HI 0x8F70 #define EGL_COLOR_RGB_HI 0x8F71 #define EGL_COLOR_RGBA_HI 0x8F72 #define EGL_COLOR_ARGB_HI 0x8F73 #endif /* EGL_HI_colorformats */ #ifndef EGL_IMG_context_priority #define EGL_IMG_context_priority 1 #define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 #define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 #define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 #define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 #endif /* EGL_IMG_context_priority */ #ifndef EGL_MESA_drm_image #define EGL_MESA_drm_image 1 #define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 #define EGL_DRM_BUFFER_USE_MESA 0x31D1 #define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 #define EGL_DRM_BUFFER_MESA 0x31D3 #define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 #define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 #define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); #endif #endif /* EGL_MESA_drm_image */ #ifndef EGL_MESA_image_dma_buf_export #define EGL_MESA_image_dma_buf_export 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); #endif #endif /* EGL_MESA_image_dma_buf_export */ #ifndef EGL_MESA_platform_gbm #define EGL_MESA_platform_gbm 1 #define EGL_PLATFORM_GBM_MESA 0x31D7 #endif /* EGL_MESA_platform_gbm */ #ifndef EGL_NOK_swap_region #define EGL_NOK_swap_region 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #endif #endif /* EGL_NOK_swap_region */ #ifndef EGL_NOK_swap_region2 #define EGL_NOK_swap_region2 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #endif #endif /* EGL_NOK_swap_region2 */ #ifndef EGL_NOK_texture_from_pixmap #define EGL_NOK_texture_from_pixmap 1 #define EGL_Y_INVERTED_NOK 0x307F #endif /* EGL_NOK_texture_from_pixmap */ #ifndef EGL_NV_3dvision_surface #define EGL_NV_3dvision_surface 1 #define EGL_AUTO_STEREO_NV 0x3136 #endif /* EGL_NV_3dvision_surface */ #ifndef EGL_NV_coverage_sample #define EGL_NV_coverage_sample 1 #define EGL_COVERAGE_BUFFERS_NV 0x30E0 #define EGL_COVERAGE_SAMPLES_NV 0x30E1 #endif /* EGL_NV_coverage_sample */ #ifndef EGL_NV_coverage_sample_resolve #define EGL_NV_coverage_sample_resolve 1 #define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 #define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 #define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 #endif /* EGL_NV_coverage_sample_resolve */ #ifndef EGL_NV_cuda_event #define EGL_NV_cuda_event 1 #define EGL_CUDA_EVENT_HANDLE_NV 0x323B #define EGL_SYNC_CUDA_EVENT_NV 0x323C #define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D #endif /* EGL_NV_cuda_event */ #ifndef EGL_NV_depth_nonlinear #define EGL_NV_depth_nonlinear 1 #define EGL_DEPTH_ENCODING_NV 0x30E2 #define EGL_DEPTH_ENCODING_NONE_NV 0 #define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 #endif /* EGL_NV_depth_nonlinear */ #ifndef EGL_NV_device_cuda #define EGL_NV_device_cuda 1 #define EGL_CUDA_DEVICE_NV 0x323A #endif /* EGL_NV_device_cuda */ #ifndef EGL_NV_native_query #define EGL_NV_native_query 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); #endif #endif /* EGL_NV_native_query */ #ifndef EGL_NV_post_convert_rounding #define EGL_NV_post_convert_rounding 1 #endif /* EGL_NV_post_convert_rounding */ #ifndef EGL_NV_post_sub_buffer #define EGL_NV_post_sub_buffer 1 #define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); #endif #endif /* EGL_NV_post_sub_buffer */ #ifndef EGL_NV_stream_sync #define EGL_NV_stream_sync 1 #define EGL_SYNC_NEW_FRAME_NV 0x321F typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); #endif #endif /* EGL_NV_stream_sync */ #ifndef EGL_NV_sync #define EGL_NV_sync 1 typedef void *EGLSyncNV; typedef khronos_utime_nanoseconds_t EGLTimeNV; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 #define EGL_SYNC_STATUS_NV 0x30E7 #define EGL_SIGNALED_NV 0x30E8 #define EGL_UNSIGNALED_NV 0x30E9 #define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 #define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull #define EGL_ALREADY_SIGNALED_NV 0x30EA #define EGL_TIMEOUT_EXPIRED_NV 0x30EB #define EGL_CONDITION_SATISFIED_NV 0x30EC #define EGL_SYNC_TYPE_NV 0x30ED #define EGL_SYNC_CONDITION_NV 0x30EE #define EGL_SYNC_FENCE_NV 0x30EF #define EGL_NO_SYNC_NV ((EGLSyncNV)0) typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_NV_sync */ #ifndef EGL_NV_system_time #define EGL_NV_system_time 1 typedef khronos_utime_nanoseconds_t EGLuint64NV; #ifdef KHRONOS_SUPPORT_INT64 typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_NV_system_time */ #ifndef EGL_TIZEN_image_native_buffer #define EGL_TIZEN_image_native_buffer 1 #define EGL_NATIVE_BUFFER_TIZEN 0x32A0 #endif /* EGL_TIZEN_image_native_buffer */ #ifndef EGL_TIZEN_image_native_surface #define EGL_TIZEN_image_native_surface 1 #define EGL_NATIVE_SURFACE_TIZEN 0x32A1 #endif /* EGL_TIZEN_image_native_surface */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/EGL/eglplatform.patch0000664000175000017500000000150012543167424021601 0ustar chrischrisdiff --git a/thirdparty/khronos/EGL/eglplatform.h b/thirdparty/khronos/EGL/eglplatform.h index 6d34ab5..5f30ef1 100644 --- a/thirdparty/khronos/EGL/eglplatform.h +++ b/thirdparty/khronos/EGL/eglplatform.h @@ -83,6 +83,22 @@ typedef int EGLNativeDisplayType; typedef void *EGLNativeWindowType; typedef void *EGLNativePixmapType; +#elif defined(__ANDROID__) || defined(ANDROID) + +#include + +struct egl_native_pixmap_t; + +typedef struct ANativeWindow* EGLNativeWindowType; +typedef struct egl_native_pixmap_t* EGLNativePixmapType; +typedef void* EGLNativeDisplayType; + +#elif defined(__APPLE__) + +typedef void *EGLNativeDisplayType; +typedef void *EGLNativePixmapType; +typedef void *EGLNativeWindowType; + #elif defined(__unix__) /* X11 (tentative) */ tmpNnpnZF/thirdparty/khronos/EGL/egl.h0000664000175000017500000003570112543167424017176 0ustar chrischris#ifndef __egl_h_ #define __egl_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 31039 $ on $Date: 2015-05-04 17:01:57 -0700 (Mon, 04 May 2015) $ */ #include /* Generated on date 20150504 */ /* Generated C header for: * API: egl * Versions considered: .* * Versions emitted: .* * Default extensions included: None * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef EGL_VERSION_1_0 #define EGL_VERSION_1_0 1 typedef unsigned int EGLBoolean; typedef void *EGLDisplay; #include #include typedef void *EGLConfig; typedef void *EGLSurface; typedef void *EGLContext; typedef void (*__eglMustCastToProperFunctionPointerType)(void); #define EGL_ALPHA_SIZE 0x3021 #define EGL_BAD_ACCESS 0x3002 #define EGL_BAD_ALLOC 0x3003 #define EGL_BAD_ATTRIBUTE 0x3004 #define EGL_BAD_CONFIG 0x3005 #define EGL_BAD_CONTEXT 0x3006 #define EGL_BAD_CURRENT_SURFACE 0x3007 #define EGL_BAD_DISPLAY 0x3008 #define EGL_BAD_MATCH 0x3009 #define EGL_BAD_NATIVE_PIXMAP 0x300A #define EGL_BAD_NATIVE_WINDOW 0x300B #define EGL_BAD_PARAMETER 0x300C #define EGL_BAD_SURFACE 0x300D #define EGL_BLUE_SIZE 0x3022 #define EGL_BUFFER_SIZE 0x3020 #define EGL_CONFIG_CAVEAT 0x3027 #define EGL_CONFIG_ID 0x3028 #define EGL_CORE_NATIVE_ENGINE 0x305B #define EGL_DEPTH_SIZE 0x3025 #define EGL_DONT_CARE ((EGLint)-1) #define EGL_DRAW 0x3059 #define EGL_EXTENSIONS 0x3055 #define EGL_FALSE 0 #define EGL_GREEN_SIZE 0x3023 #define EGL_HEIGHT 0x3056 #define EGL_LARGEST_PBUFFER 0x3058 #define EGL_LEVEL 0x3029 #define EGL_MAX_PBUFFER_HEIGHT 0x302A #define EGL_MAX_PBUFFER_PIXELS 0x302B #define EGL_MAX_PBUFFER_WIDTH 0x302C #define EGL_NATIVE_RENDERABLE 0x302D #define EGL_NATIVE_VISUAL_ID 0x302E #define EGL_NATIVE_VISUAL_TYPE 0x302F #define EGL_NONE 0x3038 #define EGL_NON_CONFORMANT_CONFIG 0x3051 #define EGL_NOT_INITIALIZED 0x3001 #define EGL_NO_CONTEXT ((EGLContext)0) #define EGL_NO_DISPLAY ((EGLDisplay)0) #define EGL_NO_SURFACE ((EGLSurface)0) #define EGL_PBUFFER_BIT 0x0001 #define EGL_PIXMAP_BIT 0x0002 #define EGL_READ 0x305A #define EGL_RED_SIZE 0x3024 #define EGL_SAMPLES 0x3031 #define EGL_SAMPLE_BUFFERS 0x3032 #define EGL_SLOW_CONFIG 0x3050 #define EGL_STENCIL_SIZE 0x3026 #define EGL_SUCCESS 0x3000 #define EGL_SURFACE_TYPE 0x3033 #define EGL_TRANSPARENT_BLUE_VALUE 0x3035 #define EGL_TRANSPARENT_GREEN_VALUE 0x3036 #define EGL_TRANSPARENT_RED_VALUE 0x3037 #define EGL_TRANSPARENT_RGB 0x3052 #define EGL_TRANSPARENT_TYPE 0x3034 #define EGL_TRUE 1 #define EGL_VENDOR 0x3053 #define EGL_VERSION 0x3054 #define EGL_WIDTH 0x3057 #define EGL_WINDOW_BIT 0x0004 EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); EGLAPI EGLint EGLAPIENTRY eglGetError (void); EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); #endif /* EGL_VERSION_1_0 */ #ifndef EGL_VERSION_1_1 #define EGL_VERSION_1_1 1 #define EGL_BACK_BUFFER 0x3084 #define EGL_BIND_TO_TEXTURE_RGB 0x3039 #define EGL_BIND_TO_TEXTURE_RGBA 0x303A #define EGL_CONTEXT_LOST 0x300E #define EGL_MIN_SWAP_INTERVAL 0x303B #define EGL_MAX_SWAP_INTERVAL 0x303C #define EGL_MIPMAP_TEXTURE 0x3082 #define EGL_MIPMAP_LEVEL 0x3083 #define EGL_NO_TEXTURE 0x305C #define EGL_TEXTURE_2D 0x305F #define EGL_TEXTURE_FORMAT 0x3080 #define EGL_TEXTURE_RGB 0x305D #define EGL_TEXTURE_RGBA 0x305E #define EGL_TEXTURE_TARGET 0x3081 EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); #endif /* EGL_VERSION_1_1 */ #ifndef EGL_VERSION_1_2 #define EGL_VERSION_1_2 1 typedef unsigned int EGLenum; typedef void *EGLClientBuffer; #define EGL_ALPHA_FORMAT 0x3088 #define EGL_ALPHA_FORMAT_NONPRE 0x308B #define EGL_ALPHA_FORMAT_PRE 0x308C #define EGL_ALPHA_MASK_SIZE 0x303E #define EGL_BUFFER_PRESERVED 0x3094 #define EGL_BUFFER_DESTROYED 0x3095 #define EGL_CLIENT_APIS 0x308D #define EGL_COLORSPACE 0x3087 #define EGL_COLORSPACE_sRGB 0x3089 #define EGL_COLORSPACE_LINEAR 0x308A #define EGL_COLOR_BUFFER_TYPE 0x303F #define EGL_CONTEXT_CLIENT_TYPE 0x3097 #define EGL_DISPLAY_SCALING 10000 #define EGL_HORIZONTAL_RESOLUTION 0x3090 #define EGL_LUMINANCE_BUFFER 0x308F #define EGL_LUMINANCE_SIZE 0x303D #define EGL_OPENGL_ES_BIT 0x0001 #define EGL_OPENVG_BIT 0x0002 #define EGL_OPENGL_ES_API 0x30A0 #define EGL_OPENVG_API 0x30A1 #define EGL_OPENVG_IMAGE 0x3096 #define EGL_PIXEL_ASPECT_RATIO 0x3092 #define EGL_RENDERABLE_TYPE 0x3040 #define EGL_RENDER_BUFFER 0x3086 #define EGL_RGB_BUFFER 0x308E #define EGL_SINGLE_BUFFER 0x3085 #define EGL_SWAP_BEHAVIOR 0x3093 #define EGL_UNKNOWN ((EGLint)-1) #define EGL_VERTICAL_RESOLUTION 0x3091 EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); #endif /* EGL_VERSION_1_2 */ #ifndef EGL_VERSION_1_3 #define EGL_VERSION_1_3 1 #define EGL_CONFORMANT 0x3042 #define EGL_CONTEXT_CLIENT_VERSION 0x3098 #define EGL_MATCH_NATIVE_PIXMAP 0x3041 #define EGL_OPENGL_ES2_BIT 0x0004 #define EGL_VG_ALPHA_FORMAT 0x3088 #define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B #define EGL_VG_ALPHA_FORMAT_PRE 0x308C #define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 #define EGL_VG_COLORSPACE 0x3087 #define EGL_VG_COLORSPACE_sRGB 0x3089 #define EGL_VG_COLORSPACE_LINEAR 0x308A #define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 #endif /* EGL_VERSION_1_3 */ #ifndef EGL_VERSION_1_4 #define EGL_VERSION_1_4 1 #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) #define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 #define EGL_MULTISAMPLE_RESOLVE 0x3099 #define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A #define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B #define EGL_OPENGL_API 0x30A2 #define EGL_OPENGL_BIT 0x0008 #define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); #endif /* EGL_VERSION_1_4 */ #ifndef EGL_VERSION_1_5 #define EGL_VERSION_1_5 1 typedef void *EGLSync; typedef intptr_t EGLAttrib; typedef khronos_utime_nanoseconds_t EGLTime; typedef void *EGLImage; #define EGL_CONTEXT_MAJOR_VERSION 0x3098 #define EGL_CONTEXT_MINOR_VERSION 0x30FB #define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD #define EGL_NO_RESET_NOTIFICATION 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET 0x31BF #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 #define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 #define EGL_OPENGL_ES3_BIT 0x00000040 #define EGL_CL_EVENT_HANDLE 0x309C #define EGL_SYNC_CL_EVENT 0x30FE #define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 #define EGL_SYNC_TYPE 0x30F7 #define EGL_SYNC_STATUS 0x30F1 #define EGL_SYNC_CONDITION 0x30F8 #define EGL_SIGNALED 0x30F2 #define EGL_UNSIGNALED 0x30F3 #define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 #define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull #define EGL_TIMEOUT_EXPIRED 0x30F5 #define EGL_CONDITION_SATISFIED 0x30F6 #define EGL_NO_SYNC ((EGLSync)0) #define EGL_SYNC_FENCE 0x30F9 #define EGL_GL_COLORSPACE 0x309D #define EGL_GL_COLORSPACE_SRGB 0x3089 #define EGL_GL_COLORSPACE_LINEAR 0x308A #define EGL_GL_RENDERBUFFER 0x30B9 #define EGL_GL_TEXTURE_2D 0x30B1 #define EGL_GL_TEXTURE_LEVEL 0x30BC #define EGL_GL_TEXTURE_3D 0x30B2 #define EGL_GL_TEXTURE_ZOFFSET 0x30BD #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 #define EGL_IMAGE_PRESERVED 0x30D2 #define EGL_NO_IMAGE ((EGLImage)0) EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); #endif /* EGL_VERSION_1_5 */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/EGL/eglplatform.h0000664000175000017500000001153612543167424020743 0ustar chrischris#ifndef __eglplatform_h_ #define __eglplatform_h_ /* ** Copyright (c) 2007-2013 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Platform-specific types and definitions for egl.h * $Revision: 30994 $ on $Date: 2015-04-30 13:36:48 -0700 (Thu, 30 Apr 2015) $ * * Adopters may modify khrplatform.h and this file to suit their platform. * You are encouraged to submit all modifications to the Khronos group so that * they can be included in future versions of this file. Please submit changes * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) * by filing a bug against product "EGL" component "Registry". */ #include /* Macros used in EGL function prototype declarations. * * EGL functions should be prototyped as: * * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); * * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h */ #ifndef EGLAPI #define EGLAPI KHRONOS_APICALL #endif #ifndef EGLAPIENTRY #define EGLAPIENTRY KHRONOS_APIENTRY #endif #define EGLAPIENTRYP EGLAPIENTRY* /* The types NativeDisplayType, NativeWindowType, and NativePixmapType * are aliases of window-system-dependent types, such as X Display * or * Windows Device Context. They must be defined in platform-specific * code below. The EGL-prefixed versions of Native*Type are the same * types, renamed in EGL 1.3 so all types in the API start with "EGL". * * Khronos STRONGLY RECOMMENDS that you use the default definitions * provided below, since these changes affect both binary and source * portability of applications using EGL running on different EGL * implementations. */ #if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include typedef HDC EGLNativeDisplayType; typedef HBITMAP EGLNativePixmapType; typedef HWND EGLNativeWindowType; #elif defined(__APPLE__) || defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ typedef int EGLNativeDisplayType; typedef void *EGLNativeWindowType; typedef void *EGLNativePixmapType; #elif defined(__ANDROID__) || defined(ANDROID) #include struct egl_native_pixmap_t; typedef struct ANativeWindow* EGLNativeWindowType; typedef struct egl_native_pixmap_t* EGLNativePixmapType; typedef void* EGLNativeDisplayType; #elif defined(__ANDROID__) || defined(ANDROID) #include struct egl_native_pixmap_t; typedef struct ANativeWindow* EGLNativeWindowType; typedef struct egl_native_pixmap_t* EGLNativePixmapType; typedef void* EGLNativeDisplayType; #elif defined(__APPLE__) typedef void *EGLNativeDisplayType; typedef void *EGLNativePixmapType; typedef void *EGLNativeWindowType; #elif defined(__unix__) /* X11 (tentative) */ #include #include typedef Display *EGLNativeDisplayType; typedef Pixmap EGLNativePixmapType; typedef Window EGLNativeWindowType; #else #error "Platform not recognized" #endif /* EGL 1.2 types, renamed for consistency in EGL 1.3 */ typedef EGLNativeDisplayType NativeDisplayType; typedef EGLNativePixmapType NativePixmapType; typedef EGLNativeWindowType NativeWindowType; /* Define EGLint. This must be a signed integral type large enough to contain * all legal attribute names and values passed into and out of EGL, whether * their type is boolean, bitmask, enumerant (symbolic constant), integer, * handle, or other. While in general a 32-bit integer will suffice, if * handles are 64 bit types, then EGLint should be defined as a signed 64-bit * integer type. */ typedef khronos_int32_t EGLint; #endif /* __eglplatform_h */ tmpNnpnZF/thirdparty/khronos/GLES2/0000775000175000017500000000000012543167424016455 5ustar chrischristmpNnpnZF/thirdparty/khronos/GLES2/gl2.h0000664000175000017500000012572212543167424017323 0ustar chrischris#ifndef __gl2_h_ #define __gl2_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 30969 $ on $Date: 2015-04-28 21:32:44 -0700 (Tue, 28 Apr 2015) $ */ #include #ifndef GL_APIENTRYP #define GL_APIENTRYP GL_APIENTRY* #endif /* Generated on date 20150428 */ /* Generated C header for: * API: gles2 * Profile: common * Versions considered: 2\.[0-9] * Versions emitted: .* * Default extensions included: None * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 #include typedef khronos_int8_t GLbyte; typedef khronos_float_t GLclampf; typedef khronos_int32_t GLfixed; typedef short GLshort; typedef unsigned short GLushort; typedef void GLvoid; typedef struct __GLsync *GLsync; typedef khronos_int64_t GLint64; typedef khronos_uint64_t GLuint64; typedef unsigned int GLenum; typedef unsigned int GLuint; typedef char GLchar; typedef khronos_float_t GLfloat; typedef khronos_ssize_t GLsizeiptr; typedef khronos_intptr_t GLintptr; typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; typedef int GLsizei; typedef khronos_uint8_t GLubyte; #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_FUNC_ADD 0x8006 #define GL_BLEND_EQUATION 0x8009 #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_STREAM_DRAW 0x88E0 #define GL_STATIC_DRAW 0x88E4 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_FRONT_AND_BACK 0x0408 #define GL_TEXTURE_2D 0x0DE1 #define GL_CULL_FACE 0x0B44 #define GL_BLEND 0x0BE2 #define GL_DITHER 0x0BD0 #define GL_STENCIL_TEST 0x0B90 #define GL_DEPTH_TEST 0x0B71 #define GL_SCISSOR_TEST 0x0C11 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_LINE_WIDTH 0x0B21 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VIEWPORT 0x0BA2 #define GL_SCISSOR_BOX 0x0C10 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_FIXED 0x140C #define GL_DEPTH_COMPONENT 0x1902 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_SHADER_TYPE 0x8B4F #define GL_DELETE_STATUS 0x8B80 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_INVERT 0x150A #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE 0x1702 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_REPEAT 0x2901 #define GL_CLAMP_TO_EDGE 0x812F #define GL_MIRRORED_REPEAT 0x8370 #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_CUBE 0x8B60 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_COMPILE_STATUS 0x8B81 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGB565 0x8D62 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_STENCIL_INDEX8 0x8D48 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_NONE 0 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap); typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap); typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void); typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data); typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void); typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data); typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d); GL_APICALL void GL_APIENTRY glClearStencil (GLint s); GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f); GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); GL_APICALL void GL_APIENTRY glDisable (GLenum cap); GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); GL_APICALL void GL_APIENTRY glEnable (GLenum cap); GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); GL_APICALL void GL_APIENTRY glFinish (void); GL_APICALL void GL_APIENTRY glFlush (void); GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures); GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data); GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL GLenum GL_APIENTRY glGetError (void); GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data); GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data); GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name); GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0); GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0); GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_ES_VERSION_2_0 */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/GLES2/gl2ext.h0000664000175000017500000051306512543167424020045 0ustar chrischris#ifndef __gl2ext_h_ #define __gl2ext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 31190 $ on $Date: 2015-05-14 03:29:28 -0700 (Thu, 14 May 2015) $ */ #ifndef GL_APIENTRYP #define GL_APIENTRYP GL_APIENTRY* #endif /* Generated on date 20150514 */ /* Generated C header for: * API: gles2 * Profile: common * Versions considered: 2\.[0-9] * Versions emitted: _nomatch_^ * Default extensions included: gles2 * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_KHR_blend_equation_advanced #define GL_KHR_blend_equation_advanced 1 #define GL_MULTIPLY_KHR 0x9294 #define GL_SCREEN_KHR 0x9295 #define GL_OVERLAY_KHR 0x9296 #define GL_DARKEN_KHR 0x9297 #define GL_LIGHTEN_KHR 0x9298 #define GL_COLORDODGE_KHR 0x9299 #define GL_COLORBURN_KHR 0x929A #define GL_HARDLIGHT_KHR 0x929B #define GL_SOFTLIGHT_KHR 0x929C #define GL_DIFFERENCE_KHR 0x929E #define GL_EXCLUSION_KHR 0x92A0 #define GL_HSL_HUE_KHR 0x92AD #define GL_HSL_SATURATION_KHR 0x92AE #define GL_HSL_COLOR_KHR 0x92AF #define GL_HSL_LUMINOSITY_KHR 0x92B0 typedef void (GL_APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void); #endif #endif /* GL_KHR_blend_equation_advanced */ #ifndef GL_KHR_blend_equation_advanced_coherent #define GL_KHR_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 #endif /* GL_KHR_blend_equation_advanced_coherent */ #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 #define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC #endif /* GL_KHR_context_flush_control */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_SAMPLER 0x82E6 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 #define GL_DEBUG_SOURCE_API_KHR 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A #define GL_DEBUG_SOURCE_OTHER_KHR 0x824B #define GL_DEBUG_TYPE_ERROR_KHR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E #define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 #define GL_DEBUG_TYPE_OTHER_KHR 0x8251 #define GL_DEBUG_TYPE_MARKER_KHR 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 #define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D #define GL_BUFFER_KHR 0x82E0 #define GL_SHADER_KHR 0x82E1 #define GL_PROGRAM_KHR 0x82E2 #define GL_VERTEX_ARRAY_KHR 0x8074 #define GL_QUERY_KHR 0x82E3 #define GL_PROGRAM_PIPELINE_KHR 0x82E4 #define GL_SAMPLER_KHR 0x82E6 #define GL_MAX_LABEL_LENGTH_KHR 0x82E8 #define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 #define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 #define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 #define GL_DEBUG_OUTPUT_KHR 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 #define GL_STACK_OVERFLOW_KHR 0x0503 #define GL_STACK_UNDERFLOW_KHR 0x0504 typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params); #endif #endif /* GL_KHR_debug */ #ifndef GL_KHR_no_error #define GL_KHR_no_error 1 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 #endif /* GL_KHR_no_error */ #ifndef GL_KHR_robust_buffer_access_behavior #define GL_KHR_robust_buffer_access_behavior 1 #endif /* GL_KHR_robust_buffer_access_behavior */ #ifndef GL_KHR_robustness #define GL_KHR_robustness 1 #define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 #define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 #define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 #define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 #define GL_NO_RESET_NOTIFICATION_KHR 0x8261 #define GL_CONTEXT_LOST_KHR 0x0507 typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void); typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void); GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params); GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params); #endif #endif /* GL_KHR_robustness */ #ifndef GL_KHR_texture_compression_astc_hdr #define GL_KHR_texture_compression_astc_hdr 1 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif /* GL_KHR_texture_compression_astc_hdr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_OES_EGL_image #define GL_OES_EGL_image 1 typedef void *GLeglImageOES; typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); #endif #endif /* GL_OES_EGL_image */ #ifndef GL_OES_EGL_image_external #define GL_OES_EGL_image_external 1 #define GL_TEXTURE_EXTERNAL_OES 0x8D65 #define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 #define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 #define GL_SAMPLER_EXTERNAL_OES 0x8D66 #endif /* GL_OES_EGL_image_external */ #ifndef GL_OES_EGL_image_external_essl3 #define GL_OES_EGL_image_external_essl3 1 #endif /* GL_OES_EGL_image_external_essl3 */ #ifndef GL_OES_compressed_ETC1_RGB8_sub_texture #define GL_OES_compressed_ETC1_RGB8_sub_texture 1 #endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */ #ifndef GL_OES_compressed_ETC1_RGB8_texture #define GL_OES_compressed_ETC1_RGB8_texture 1 #define GL_ETC1_RGB8_OES 0x8D64 #endif /* GL_OES_compressed_ETC1_RGB8_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_copy_image #define GL_OES_copy_image 1 typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #endif #endif /* GL_OES_copy_image */ #ifndef GL_OES_depth24 #define GL_OES_depth24 1 #define GL_DEPTH_COMPONENT24_OES 0x81A6 #endif /* GL_OES_depth24 */ #ifndef GL_OES_depth32 #define GL_OES_depth32 1 #define GL_DEPTH_COMPONENT32_OES 0x81A7 #endif /* GL_OES_depth32 */ #ifndef GL_OES_depth_texture #define GL_OES_depth_texture 1 #endif /* GL_OES_depth_texture */ #ifndef GL_OES_draw_buffers_indexed #define GL_OES_draw_buffers_indexed 1 #define GL_MIN 0x8007 #define GL_MAX 0x8008 typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst); GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index); #endif #endif /* GL_OES_draw_buffers_indexed */ #ifndef GL_OES_draw_elements_base_vertex #define GL_OES_draw_elements_base_vertex 1 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexOES (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); #endif #endif /* GL_OES_draw_elements_base_vertex */ #ifndef GL_OES_element_index_uint #define GL_OES_element_index_uint 1 #endif /* GL_OES_element_index_uint */ #ifndef GL_OES_fbo_render_mipmap #define GL_OES_fbo_render_mipmap 1 #endif /* GL_OES_fbo_render_mipmap */ #ifndef GL_OES_fragment_precision_high #define GL_OES_fragment_precision_high 1 #endif /* GL_OES_fragment_precision_high */ #ifndef GL_OES_geometry_point_size #define GL_OES_geometry_point_size 1 #endif /* GL_OES_geometry_point_size */ #ifndef GL_OES_geometry_shader #define GL_OES_geometry_shader 1 #define GL_GEOMETRY_SHADER_OES 0x8DD9 #define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 #define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 #define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 #define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 #define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F #define GL_LAYER_PROVOKING_VERTEX_OES 0x825E #define GL_LINES_ADJACENCY_OES 0x000A #define GL_LINE_STRIP_ADJACENCY_OES 0x000B #define GL_TRIANGLES_ADJACENCY_OES 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 #define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D #define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E #define GL_UNDEFINED_VERTEX_OES 0x8260 #define GL_PRIMITIVES_GENERATED_OES 0x8C87 #define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 #define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 #define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif #endif /* GL_OES_geometry_shader */ #ifndef GL_OES_get_program_binary #define GL_OES_get_program_binary 1 #define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE #define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length); #endif #endif /* GL_OES_get_program_binary */ #ifndef GL_OES_gpu_shader5 #define GL_OES_gpu_shader5 1 #endif /* GL_OES_gpu_shader5 */ #ifndef GL_OES_mapbuffer #define GL_OES_mapbuffer 1 #define GL_WRITE_ONLY_OES 0x88B9 #define GL_BUFFER_ACCESS_OES 0x88BB #define GL_BUFFER_MAPPED_OES 0x88BC #define GL_BUFFER_MAP_POINTER_OES 0x88BD typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params); #endif #endif /* GL_OES_mapbuffer */ #ifndef GL_OES_packed_depth_stencil #define GL_OES_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_OES 0x84F9 #define GL_UNSIGNED_INT_24_8_OES 0x84FA #define GL_DEPTH24_STENCIL8_OES 0x88F0 #endif /* GL_OES_packed_depth_stencil */ #ifndef GL_OES_primitive_bounding_box #define GL_OES_primitive_bounding_box 1 #define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_OES_primitive_bounding_box */ #ifndef GL_OES_required_internalformat #define GL_OES_required_internalformat 1 #define GL_ALPHA8_OES 0x803C #define GL_DEPTH_COMPONENT16_OES 0x81A5 #define GL_LUMINANCE4_ALPHA4_OES 0x8043 #define GL_LUMINANCE8_ALPHA8_OES 0x8045 #define GL_LUMINANCE8_OES 0x8040 #define GL_RGBA4_OES 0x8056 #define GL_RGB5_A1_OES 0x8057 #define GL_RGB565_OES 0x8D62 #define GL_RGB8_OES 0x8051 #define GL_RGBA8_OES 0x8058 #define GL_RGB10_EXT 0x8052 #define GL_RGB10_A2_EXT 0x8059 #endif /* GL_OES_required_internalformat */ #ifndef GL_OES_rgb8_rgba8 #define GL_OES_rgb8_rgba8 1 #endif /* GL_OES_rgb8_rgba8 */ #ifndef GL_OES_sample_shading #define GL_OES_sample_shading 1 #define GL_SAMPLE_SHADING_OES 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGOESPROC) (GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value); #endif #endif /* GL_OES_sample_shading */ #ifndef GL_OES_sample_variables #define GL_OES_sample_variables 1 #endif /* GL_OES_sample_variables */ #ifndef GL_OES_shader_image_atomic #define GL_OES_shader_image_atomic 1 #endif /* GL_OES_shader_image_atomic */ #ifndef GL_OES_shader_io_blocks #define GL_OES_shader_io_blocks 1 #endif /* GL_OES_shader_io_blocks */ #ifndef GL_OES_shader_multisample_interpolation #define GL_OES_shader_multisample_interpolation 1 #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D #endif /* GL_OES_shader_multisample_interpolation */ #ifndef GL_OES_standard_derivatives #define GL_OES_standard_derivatives 1 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B #endif /* GL_OES_standard_derivatives */ #ifndef GL_OES_stencil1 #define GL_OES_stencil1 1 #define GL_STENCIL_INDEX1_OES 0x8D46 #endif /* GL_OES_stencil1 */ #ifndef GL_OES_stencil4 #define GL_OES_stencil4 1 #define GL_STENCIL_INDEX4_OES 0x8D47 #endif /* GL_OES_stencil4 */ #ifndef GL_OES_surfaceless_context #define GL_OES_surfaceless_context 1 #define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 #endif /* GL_OES_surfaceless_context */ #ifndef GL_OES_tessellation_point_size #define GL_OES_tessellation_point_size 1 #endif /* GL_OES_tessellation_point_size */ #ifndef GL_OES_tessellation_shader #define GL_OES_tessellation_shader 1 #define GL_PATCHES_OES 0x000E #define GL_PATCH_VERTICES_OES 0x8E72 #define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 #define GL_TESS_GEN_MODE_OES 0x8E76 #define GL_TESS_GEN_SPACING_OES 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 #define GL_TESS_GEN_POINT_MODE_OES 0x8E79 #define GL_ISOLINES_OES 0x8E7A #define GL_QUADS_OES 0x0007 #define GL_FRACTIONAL_ODD_OES 0x8E7B #define GL_FRACTIONAL_EVEN_OES 0x8E7C #define GL_MAX_PATCH_VERTICES_OES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 #define GL_IS_PER_PATCH_OES 0x92E7 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 #define GL_TESS_CONTROL_SHADER_OES 0x8E88 #define GL_TESS_EVALUATION_SHADER_OES 0x8E87 #define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value); #endif #endif /* GL_OES_tessellation_shader */ #ifndef GL_OES_texture_3D #define GL_OES_texture_3D 1 #define GL_TEXTURE_WRAP_R_OES 0x8072 #define GL_TEXTURE_3D_OES 0x806F #define GL_TEXTURE_BINDING_3D_OES 0x806A #define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 #define GL_SAMPLER_3D_OES 0x8B5F #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); #endif #endif /* GL_OES_texture_3D */ #ifndef GL_OES_texture_border_clamp #define GL_OES_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_OES 0x1004 #define GL_CLAMP_TO_BORDER_OES 0x812D typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param); GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param); GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params); #endif #endif /* GL_OES_texture_border_clamp */ #ifndef GL_OES_texture_buffer #define GL_OES_texture_buffer 1 #define GL_TEXTURE_BUFFER_OES 0x8C2A #define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F #define GL_SAMPLER_BUFFER_OES 0x8DC2 #define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 #define GL_IMAGE_BUFFER_OES 0x9051 #define GL_INT_IMAGE_BUFFER_OES 0x905C #define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 #define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D #define GL_TEXTURE_BUFFER_SIZE_OES 0x919E typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer); GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_OES_texture_buffer */ #ifndef GL_OES_texture_compression_astc #define GL_OES_texture_compression_astc 1 #define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 #define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 #define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 #define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 #define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 #define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 #define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 #define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 #define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 #define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 #endif /* GL_OES_texture_compression_astc */ #ifndef GL_OES_texture_cube_map_array #define GL_OES_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A #define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F #define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 #define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A #endif /* GL_OES_texture_cube_map_array */ #ifndef GL_OES_texture_float #define GL_OES_texture_float 1 #endif /* GL_OES_texture_float */ #ifndef GL_OES_texture_float_linear #define GL_OES_texture_float_linear 1 #endif /* GL_OES_texture_float_linear */ #ifndef GL_OES_texture_half_float #define GL_OES_texture_half_float 1 #define GL_HALF_FLOAT_OES 0x8D61 #endif /* GL_OES_texture_half_float */ #ifndef GL_OES_texture_half_float_linear #define GL_OES_texture_half_float_linear 1 #endif /* GL_OES_texture_half_float_linear */ #ifndef GL_OES_texture_npot #define GL_OES_texture_npot 1 #endif /* GL_OES_texture_npot */ #ifndef GL_OES_texture_stencil8 #define GL_OES_texture_stencil8 1 #define GL_STENCIL_INDEX_OES 0x1901 #define GL_STENCIL_INDEX8_OES 0x8D48 #endif /* GL_OES_texture_stencil8 */ #ifndef GL_OES_texture_storage_multisample_2d_array #define GL_OES_texture_storage_multisample_2d_array 1 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #endif #endif /* GL_OES_texture_storage_multisample_2d_array */ #ifndef GL_OES_texture_view #define GL_OES_texture_view 1 #define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif #endif /* GL_OES_texture_view */ #ifndef GL_OES_vertex_array_object #define GL_OES_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); #endif #endif /* GL_OES_vertex_array_object */ #ifndef GL_OES_vertex_half_float #define GL_OES_vertex_half_float 1 #endif /* GL_OES_vertex_half_float */ #ifndef GL_OES_vertex_type_10_10_10_2 #define GL_OES_vertex_type_10_10_10_2 1 #define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 #define GL_INT_10_10_10_2_OES 0x8DF7 #endif /* GL_OES_vertex_type_10_10_10_2 */ #ifndef GL_AMD_compressed_3DC_texture #define GL_AMD_compressed_3DC_texture 1 #define GL_3DC_X_AMD 0x87F9 #define GL_3DC_XY_AMD 0x87FA #endif /* GL_AMD_compressed_3DC_texture */ #ifndef GL_AMD_compressed_ATC_texture #define GL_AMD_compressed_ATC_texture 1 #define GL_ATC_RGB_AMD 0x8C92 #define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE #endif /* GL_AMD_compressed_ATC_texture */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #endif /* GL_AMD_performance_monitor */ #ifndef GL_AMD_program_binary_Z400 #define GL_AMD_program_binary_Z400 1 #define GL_Z400_BINARY_AMD 0x8740 #endif /* GL_AMD_program_binary_Z400 */ #ifndef GL_ANDROID_extension_pack_es31a #define GL_ANDROID_extension_pack_es31a 1 #endif /* GL_ANDROID_extension_pack_es31a */ #ifndef GL_ANGLE_depth_texture #define GL_ANGLE_depth_texture 1 #endif /* GL_ANGLE_depth_texture */ #ifndef GL_ANGLE_framebuffer_blit #define GL_ANGLE_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 #define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_ANGLE_framebuffer_blit */ #ifndef GL_ANGLE_framebuffer_multisample #define GL_ANGLE_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 #define GL_MAX_SAMPLES_ANGLE 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_ANGLE_framebuffer_multisample */ #ifndef GL_ANGLE_instanced_arrays #define GL_ANGLE_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); #endif #endif /* GL_ANGLE_instanced_arrays */ #ifndef GL_ANGLE_pack_reverse_row_order #define GL_ANGLE_pack_reverse_row_order 1 #define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 #endif /* GL_ANGLE_pack_reverse_row_order */ #ifndef GL_ANGLE_program_binary #define GL_ANGLE_program_binary 1 #define GL_PROGRAM_BINARY_ANGLE 0x93A6 #endif /* GL_ANGLE_program_binary */ #ifndef GL_ANGLE_texture_compression_dxt3 #define GL_ANGLE_texture_compression_dxt3 1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 #endif /* GL_ANGLE_texture_compression_dxt3 */ #ifndef GL_ANGLE_texture_compression_dxt5 #define GL_ANGLE_texture_compression_dxt5 1 #define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 #endif /* GL_ANGLE_texture_compression_dxt5 */ #ifndef GL_ANGLE_texture_usage #define GL_ANGLE_texture_usage 1 #define GL_TEXTURE_USAGE_ANGLE 0x93A2 #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 #endif /* GL_ANGLE_texture_usage */ #ifndef GL_ANGLE_translated_shader_source #define GL_ANGLE_translated_shader_source 1 #define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); #endif #endif /* GL_ANGLE_translated_shader_source */ #ifndef GL_APPLE_clip_distance #define GL_APPLE_clip_distance 1 #define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 #define GL_CLIP_DISTANCE0_APPLE 0x3000 #define GL_CLIP_DISTANCE1_APPLE 0x3001 #define GL_CLIP_DISTANCE2_APPLE 0x3002 #define GL_CLIP_DISTANCE3_APPLE 0x3003 #define GL_CLIP_DISTANCE4_APPLE 0x3004 #define GL_CLIP_DISTANCE5_APPLE 0x3005 #define GL_CLIP_DISTANCE6_APPLE 0x3006 #define GL_CLIP_DISTANCE7_APPLE 0x3007 #endif /* GL_APPLE_clip_distance */ #ifndef GL_APPLE_color_buffer_packed_float #define GL_APPLE_color_buffer_packed_float 1 #endif /* GL_APPLE_color_buffer_packed_float */ #ifndef GL_APPLE_copy_texture_levels #define GL_APPLE_copy_texture_levels 1 typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #endif #endif /* GL_APPLE_copy_texture_levels */ #ifndef GL_APPLE_framebuffer_multisample #define GL_APPLE_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 #define GL_MAX_SAMPLES_APPLE 0x8D57 #define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 #define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); #endif #endif /* GL_APPLE_framebuffer_multisample */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_RGB_422_APPLE 0x8A1F #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_RAW_422_APPLE 0x8A51 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_APPLE_sync #define GL_APPLE_sync 1 #define GL_SYNC_OBJECT_APPLE 0x8A53 #define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 #define GL_OBJECT_TYPE_APPLE 0x9112 #define GL_SYNC_CONDITION_APPLE 0x9113 #define GL_SYNC_STATUS_APPLE 0x9114 #define GL_SYNC_FLAGS_APPLE 0x9115 #define GL_SYNC_FENCE_APPLE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 #define GL_UNSIGNALED_APPLE 0x9118 #define GL_SIGNALED_APPLE 0x9119 #define GL_ALREADY_SIGNALED_APPLE 0x911A #define GL_TIMEOUT_EXPIRED_APPLE 0x911B #define GL_CONDITION_SATISFIED_APPLE 0x911C #define GL_WAIT_FAILED_APPLE 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 #define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #endif #endif /* GL_APPLE_sync */ #ifndef GL_APPLE_texture_format_BGRA8888 #define GL_APPLE_texture_format_BGRA8888 1 #define GL_BGRA_EXT 0x80E1 #define GL_BGRA8_EXT 0x93A1 #endif /* GL_APPLE_texture_format_BGRA8888 */ #ifndef GL_APPLE_texture_max_level #define GL_APPLE_texture_max_level 1 #define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D #endif /* GL_APPLE_texture_max_level */ #ifndef GL_APPLE_texture_packed_float #define GL_APPLE_texture_packed_float 1 #define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B #define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E #define GL_R11F_G11F_B10F_APPLE 0x8C3A #define GL_RGB9_E5_APPLE 0x8C3D #endif /* GL_APPLE_texture_packed_float */ #ifndef GL_ARM_mali_program_binary #define GL_ARM_mali_program_binary 1 #define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 #endif /* GL_ARM_mali_program_binary */ #ifndef GL_ARM_mali_shader_binary #define GL_ARM_mali_shader_binary 1 #define GL_MALI_SHADER_BINARY_ARM 0x8F60 #endif /* GL_ARM_mali_shader_binary */ #ifndef GL_ARM_rgba8 #define GL_ARM_rgba8 1 #endif /* GL_ARM_rgba8 */ #ifndef GL_ARM_shader_framebuffer_fetch #define GL_ARM_shader_framebuffer_fetch 1 #define GL_FETCH_PER_SAMPLE_ARM 0x8F65 #define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 #endif /* GL_ARM_shader_framebuffer_fetch */ #ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil #define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 #endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */ #ifndef GL_DMP_program_binary #define GL_DMP_program_binary 1 #define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 #define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 #define GL_DMP_PROGRAM_BINARY_DMP 0x9253 #endif /* GL_DMP_program_binary */ #ifndef GL_DMP_shader_binary #define GL_DMP_shader_binary 1 #define GL_SHADER_BINARY_DMP 0x9250 #endif /* GL_DMP_shader_binary */ #ifndef GL_EXT_YUV_target #define GL_EXT_YUV_target 1 #define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 #endif /* GL_EXT_YUV_target */ #ifndef GL_EXT_base_instance #define GL_EXT_base_instance 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #endif #endif /* GL_EXT_base_instance */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_buffer_storage #define GL_EXT_buffer_storage 1 #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_PERSISTENT_BIT 0x0040 #define GL_MAP_COHERENT_BIT 0x0080 #define GL_DYNAMIC_STORAGE_BIT 0x0100 #define GL_CLIENT_STORAGE_BIT 0x0200 #define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 #define GL_BUFFER_IMMUTABLE_STORAGE 0x821F #define GL_BUFFER_STORAGE_FLAGS 0x8220 typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); #endif #endif /* GL_EXT_buffer_storage */ #ifndef GL_EXT_color_buffer_half_float #define GL_EXT_color_buffer_half_float 1 #define GL_RGBA16F_EXT 0x881A #define GL_RGB16F_EXT 0x881B #define GL_RG16F_EXT 0x822F #define GL_R16F_EXT 0x822D #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 #define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 #endif /* GL_EXT_color_buffer_half_float */ #ifndef GL_EXT_copy_image #define GL_EXT_copy_image 1 typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #endif #endif /* GL_EXT_copy_image */ #ifndef GL_EXT_debug_label #define GL_EXT_debug_label 1 #define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F #define GL_PROGRAM_OBJECT_EXT 0x8B40 #define GL_SHADER_OBJECT_EXT 0x8B48 #define GL_BUFFER_OBJECT_EXT 0x9151 #define GL_QUERY_OBJECT_EXT 0x9153 #define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 #define GL_TRANSFORM_FEEDBACK 0x8E22 typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_EXT_debug_label */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); #endif #endif /* GL_EXT_debug_marker */ #ifndef GL_EXT_discard_framebuffer #define GL_EXT_discard_framebuffer 1 #define GL_COLOR_EXT 0x1800 #define GL_DEPTH_EXT 0x1801 #define GL_STENCIL_EXT 0x1802 typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); #endif #endif /* GL_EXT_discard_framebuffer */ #ifndef GL_EXT_disjoint_timer_query #define GL_EXT_disjoint_timer_query 1 #define GL_QUERY_COUNTER_BITS_EXT 0x8864 #define GL_CURRENT_QUERY_EXT 0x8865 #define GL_QUERY_RESULT_EXT 0x8866 #define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 #define GL_TIME_ELAPSED_EXT 0x88BF #define GL_TIMESTAMP_EXT 0x8E28 #define GL_GPU_DISJOINT_EXT 0x8FBB typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); #endif #endif /* GL_EXT_disjoint_timer_query */ #ifndef GL_EXT_draw_buffers #define GL_EXT_draw_buffers 1 #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_MAX_DRAW_BUFFERS_EXT 0x8824 #define GL_DRAW_BUFFER0_EXT 0x8825 #define GL_DRAW_BUFFER1_EXT 0x8826 #define GL_DRAW_BUFFER2_EXT 0x8827 #define GL_DRAW_BUFFER3_EXT 0x8828 #define GL_DRAW_BUFFER4_EXT 0x8829 #define GL_DRAW_BUFFER5_EXT 0x882A #define GL_DRAW_BUFFER6_EXT 0x882B #define GL_DRAW_BUFFER7_EXT 0x882C #define GL_DRAW_BUFFER8_EXT 0x882D #define GL_DRAW_BUFFER9_EXT 0x882E #define GL_DRAW_BUFFER10_EXT 0x882F #define GL_DRAW_BUFFER11_EXT 0x8830 #define GL_DRAW_BUFFER12_EXT 0x8831 #define GL_DRAW_BUFFER13_EXT 0x8832 #define GL_DRAW_BUFFER14_EXT 0x8833 #define GL_DRAW_BUFFER15_EXT 0x8834 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); #endif #endif /* GL_EXT_draw_buffers */ #ifndef GL_EXT_draw_buffers_indexed #define GL_EXT_draw_buffers_indexed 1 typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst); GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index); #endif #endif /* GL_EXT_draw_buffers_indexed */ #ifndef GL_EXT_draw_elements_base_vertex #define GL_EXT_draw_elements_base_vertex 1 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); #endif #endif /* GL_EXT_draw_elements_base_vertex */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_float_blend #define GL_EXT_float_blend 1 #endif /* GL_EXT_float_blend */ #ifndef GL_EXT_geometry_point_size #define GL_EXT_geometry_point_size 1 #endif /* GL_EXT_geometry_point_size */ #ifndef GL_EXT_geometry_shader #define GL_EXT_geometry_shader 1 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 #define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 #define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 #define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 #define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F #define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E #define GL_LINES_ADJACENCY_EXT 0x000A #define GL_LINE_STRIP_ADJACENCY_EXT 0x000B #define GL_TRIANGLES_ADJACENCY_EXT 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_UNDEFINED_VERTEX_EXT 0x8260 #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 #define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif #endif /* GL_EXT_geometry_shader */ #ifndef GL_EXT_gpu_shader5 #define GL_EXT_gpu_shader5 1 #endif /* GL_EXT_gpu_shader5 */ #ifndef GL_EXT_instanced_arrays #define GL_EXT_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor); #endif #endif /* GL_EXT_instanced_arrays */ #ifndef GL_EXT_map_buffer_range #define GL_EXT_map_buffer_range 1 #define GL_MAP_READ_BIT_EXT 0x0001 #define GL_MAP_WRITE_BIT_EXT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); #endif #endif /* GL_EXT_map_buffer_range */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multi_draw_indirect #define GL_EXT_multi_draw_indirect 1 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #endif #endif /* GL_EXT_multi_draw_indirect */ #ifndef GL_EXT_multisampled_render_to_texture #define GL_EXT_multisampled_render_to_texture 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif #endif /* GL_EXT_multisampled_render_to_texture */ #ifndef GL_EXT_multiview_draw_buffers #define GL_EXT_multiview_draw_buffers 1 #define GL_COLOR_ATTACHMENT_EXT 0x90F0 #define GL_MULTIVIEW_EXT 0x90F1 #define GL_DRAW_BUFFER_EXT 0x0C01 #define GL_READ_BUFFER_EXT 0x0C02 #define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); #endif #endif /* GL_EXT_multiview_draw_buffers */ #ifndef GL_EXT_occlusion_query_boolean #define GL_EXT_occlusion_query_boolean 1 #define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A #endif /* GL_EXT_occlusion_query_boolean */ #ifndef GL_EXT_post_depth_coverage #define GL_EXT_post_depth_coverage 1 #endif /* GL_EXT_post_depth_coverage */ #ifndef GL_EXT_primitive_bounding_box #define GL_EXT_primitive_bounding_box 1 #define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_EXT_primitive_bounding_box */ #ifndef GL_EXT_pvrtc_sRGB #define GL_EXT_pvrtc_sRGB 1 #define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 #define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 #endif /* GL_EXT_pvrtc_sRGB */ #ifndef GL_EXT_raster_multisample #define GL_EXT_raster_multisample 1 #define GL_RASTER_MULTISAMPLE_EXT 0x9327 #define GL_RASTER_SAMPLES_EXT 0x9328 #define GL_MAX_RASTER_SAMPLES_EXT 0x9329 #define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A #define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B #define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); #endif #endif /* GL_EXT_raster_multisample */ #ifndef GL_EXT_read_format_bgra #define GL_EXT_read_format_bgra 1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 #endif /* GL_EXT_read_format_bgra */ #ifndef GL_EXT_render_snorm #define GL_EXT_render_snorm 1 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM_EXT 0x8F98 #define GL_RG16_SNORM_EXT 0x8F99 #define GL_RGBA16_SNORM_EXT 0x8F9B #endif /* GL_EXT_render_snorm */ #ifndef GL_EXT_robustness #define GL_EXT_robustness 1 #define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 #define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 #define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 #define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 #define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 #define GL_NO_RESET_NOTIFICATION_EXT 0x8261 typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); #endif #endif /* GL_EXT_robustness */ #ifndef GL_EXT_sRGB #define GL_EXT_sRGB 1 #define GL_SRGB_EXT 0x8C40 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 #endif /* GL_EXT_sRGB */ #ifndef GL_EXT_sRGB_write_control #define GL_EXT_sRGB_write_control 1 #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #endif /* GL_EXT_sRGB_write_control */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8259 #define GL_VERTEX_SHADER_BIT_EXT 0x00000001 #define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 #define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE_EXT 0x8258 #define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_shader_framebuffer_fetch #define GL_EXT_shader_framebuffer_fetch 1 #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 #endif /* GL_EXT_shader_framebuffer_fetch */ #ifndef GL_EXT_shader_implicit_conversions #define GL_EXT_shader_implicit_conversions 1 #endif /* GL_EXT_shader_implicit_conversions */ #ifndef GL_EXT_shader_integer_mix #define GL_EXT_shader_integer_mix 1 #endif /* GL_EXT_shader_integer_mix */ #ifndef GL_EXT_shader_io_blocks #define GL_EXT_shader_io_blocks 1 #endif /* GL_EXT_shader_io_blocks */ #ifndef GL_EXT_shader_pixel_local_storage #define GL_EXT_shader_pixel_local_storage 1 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 #define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 #endif /* GL_EXT_shader_pixel_local_storage */ #ifndef GL_EXT_shader_texture_lod #define GL_EXT_shader_texture_lod 1 #endif /* GL_EXT_shader_texture_lod */ #ifndef GL_EXT_shadow_samplers #define GL_EXT_shadow_samplers 1 #define GL_TEXTURE_COMPARE_MODE_EXT 0x884C #define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D #define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E #define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 #endif /* GL_EXT_shadow_samplers */ #ifndef GL_EXT_sparse_texture #define GL_EXT_sparse_texture 1 #define GL_TEXTURE_SPARSE_EXT 0x91A6 #define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 #define GL_NUM_SPARSE_LEVELS_EXT 0x91AA #define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 #define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_TEXTURE_3D 0x806F #define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A #define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #endif #endif /* GL_EXT_sparse_texture */ #ifndef GL_EXT_tessellation_point_size #define GL_EXT_tessellation_point_size 1 #endif /* GL_EXT_tessellation_point_size */ #ifndef GL_EXT_tessellation_shader #define GL_EXT_tessellation_shader 1 #define GL_PATCHES_EXT 0x000E #define GL_PATCH_VERTICES_EXT 0x8E72 #define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 #define GL_TESS_GEN_MODE_EXT 0x8E76 #define GL_TESS_GEN_SPACING_EXT 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 #define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 #define GL_ISOLINES_EXT 0x8E7A #define GL_QUADS_EXT 0x0007 #define GL_FRACTIONAL_ODD_EXT 0x8E7B #define GL_FRACTIONAL_EVEN_EXT 0x8E7C #define GL_MAX_PATCH_VERTICES_EXT 0x8E7D #define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 #define GL_IS_PER_PATCH_EXT 0x92E7 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 #define GL_TESS_CONTROL_SHADER_EXT 0x8E88 #define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 #define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value); #endif #endif /* GL_EXT_tessellation_shader */ #ifndef GL_EXT_texture_border_clamp #define GL_EXT_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 #define GL_CLAMP_TO_BORDER_EXT 0x812D typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param); GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param); GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params); #endif #endif /* GL_EXT_texture_border_clamp */ #ifndef GL_EXT_texture_buffer #define GL_EXT_texture_buffer 1 #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D #define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_EXT_texture_buffer */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_EXT_texture_compression_dxt1 1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #endif /* GL_EXT_texture_compression_dxt1 */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_cube_map_array #define GL_EXT_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A #define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #endif /* GL_EXT_texture_cube_map_array */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_minmax #define GL_EXT_texture_filter_minmax 1 #endif /* GL_EXT_texture_filter_minmax */ #ifndef GL_EXT_texture_format_BGRA8888 #define GL_EXT_texture_format_BGRA8888 1 #endif /* GL_EXT_texture_format_BGRA8888 */ #ifndef GL_EXT_texture_norm16 #define GL_EXT_texture_norm16 1 #define GL_R16_EXT 0x822A #define GL_RG16_EXT 0x822C #define GL_RGBA16_EXT 0x805B #define GL_RGB16_EXT 0x8054 #define GL_RGB16_SNORM_EXT 0x8F9A #endif /* GL_EXT_texture_norm16 */ #ifndef GL_EXT_texture_rg #define GL_EXT_texture_rg 1 #define GL_RED_EXT 0x1903 #define GL_RG_EXT 0x8227 #define GL_R8_EXT 0x8229 #define GL_RG8_EXT 0x822B #endif /* GL_EXT_texture_rg */ #ifndef GL_EXT_texture_sRGB_R8 #define GL_EXT_texture_sRGB_R8 1 #define GL_SR8_EXT 0x8FBD #endif /* GL_EXT_texture_sRGB_R8 */ #ifndef GL_EXT_texture_sRGB_RG8 #define GL_EXT_texture_sRGB_RG8 1 #define GL_SRG8_EXT 0x8FBE #endif /* GL_EXT_texture_sRGB_RG8 */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F #define GL_ALPHA8_EXT 0x803C #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_RGBA32F_EXT 0x8814 #define GL_RGB32F_EXT 0x8815 #define GL_ALPHA32F_EXT 0x8816 #define GL_LUMINANCE32F_EXT 0x8818 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 #define GL_ALPHA16F_EXT 0x881C #define GL_LUMINANCE16F_EXT 0x881E #define GL_LUMINANCE_ALPHA16F_EXT 0x881F #define GL_R32F_EXT 0x822E #define GL_RG32F_EXT 0x8230 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_texture_type_2_10_10_10_REV #define GL_EXT_texture_type_2_10_10_10_REV 1 #define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 #endif /* GL_EXT_texture_type_2_10_10_10_REV */ #ifndef GL_EXT_texture_view #define GL_EXT_texture_view 1 #define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif #endif /* GL_EXT_texture_view */ #ifndef GL_EXT_unpack_subimage #define GL_EXT_unpack_subimage 1 #define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 #define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 #define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 #endif /* GL_EXT_unpack_subimage */ #ifndef GL_FJ_shader_binary_GCCSO #define GL_FJ_shader_binary_GCCSO 1 #define GL_GCCSO_SHADER_BINARY_FJ 0x9260 #endif /* GL_FJ_shader_binary_GCCSO */ #ifndef GL_IMG_multisampled_render_to_texture #define GL_IMG_multisampled_render_to_texture 1 #define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 #define GL_MAX_SAMPLES_IMG 0x9135 #define GL_TEXTURE_SAMPLES_IMG 0x9136 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif #endif /* GL_IMG_multisampled_render_to_texture */ #ifndef GL_IMG_program_binary #define GL_IMG_program_binary 1 #define GL_SGX_PROGRAM_BINARY_IMG 0x9130 #endif /* GL_IMG_program_binary */ #ifndef GL_IMG_read_format #define GL_IMG_read_format 1 #define GL_BGRA_IMG 0x80E1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 #endif /* GL_IMG_read_format */ #ifndef GL_IMG_shader_binary #define GL_IMG_shader_binary 1 #define GL_SGX_BINARY_IMG 0x8C0A #endif /* GL_IMG_shader_binary */ #ifndef GL_IMG_texture_compression_pvrtc #define GL_IMG_texture_compression_pvrtc 1 #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 #endif /* GL_IMG_texture_compression_pvrtc */ #ifndef GL_IMG_texture_compression_pvrtc2 #define GL_IMG_texture_compression_pvrtc2 1 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 #endif /* GL_IMG_texture_compression_pvrtc2 */ #ifndef GL_INTEL_performance_query #define GL_INTEL_performance_query 1 #define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 #define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 #define GL_PERFQUERY_WAIT_INTEL 0x83FB #define GL_PERFQUERY_FLUSH_INTEL 0x83FA #define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 #define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 #define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 #define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 #define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 #define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 #define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 #define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 #define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 #define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA #define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB #define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC #define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD #define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE #define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF #define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 typedef void (GL_APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); typedef void (GL_APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); GL_APICALL void GL_APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #endif #endif /* GL_INTEL_performance_query */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture); GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_blend_equation_advanced #define GL_NV_blend_equation_advanced 1 #define GL_BLEND_OVERLAP_NV 0x9281 #define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 #define GL_BLUE_NV 0x1905 #define GL_COLORBURN_NV 0x929A #define GL_COLORDODGE_NV 0x9299 #define GL_CONJOINT_NV 0x9284 #define GL_CONTRAST_NV 0x92A1 #define GL_DARKEN_NV 0x9297 #define GL_DIFFERENCE_NV 0x929E #define GL_DISJOINT_NV 0x9283 #define GL_DST_ATOP_NV 0x928F #define GL_DST_IN_NV 0x928B #define GL_DST_NV 0x9287 #define GL_DST_OUT_NV 0x928D #define GL_DST_OVER_NV 0x9289 #define GL_EXCLUSION_NV 0x92A0 #define GL_GREEN_NV 0x1904 #define GL_HARDLIGHT_NV 0x929B #define GL_HARDMIX_NV 0x92A9 #define GL_HSL_COLOR_NV 0x92AF #define GL_HSL_HUE_NV 0x92AD #define GL_HSL_LUMINOSITY_NV 0x92B0 #define GL_HSL_SATURATION_NV 0x92AE #define GL_INVERT_OVG_NV 0x92B4 #define GL_INVERT_RGB_NV 0x92A3 #define GL_LIGHTEN_NV 0x9298 #define GL_LINEARBURN_NV 0x92A5 #define GL_LINEARDODGE_NV 0x92A4 #define GL_LINEARLIGHT_NV 0x92A7 #define GL_MINUS_CLAMPED_NV 0x92B3 #define GL_MINUS_NV 0x929F #define GL_MULTIPLY_NV 0x9294 #define GL_OVERLAY_NV 0x9296 #define GL_PINLIGHT_NV 0x92A8 #define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 #define GL_PLUS_CLAMPED_NV 0x92B1 #define GL_PLUS_DARKER_NV 0x9292 #define GL_PLUS_NV 0x9291 #define GL_RED_NV 0x1903 #define GL_SCREEN_NV 0x9295 #define GL_SOFTLIGHT_NV 0x929C #define GL_SRC_ATOP_NV 0x928E #define GL_SRC_IN_NV 0x928A #define GL_SRC_NV 0x9286 #define GL_SRC_OUT_NV 0x928C #define GL_SRC_OVER_NV 0x9288 #define GL_UNCORRELATED_NV 0x9282 #define GL_VIVIDLIGHT_NV 0x92A6 #define GL_XOR_NV 0x1506 typedef void (GL_APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlendParameteriNV (GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glBlendBarrierNV (void); #endif #endif /* GL_NV_blend_equation_advanced */ #ifndef GL_NV_blend_equation_advanced_coherent #define GL_NV_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 #endif /* GL_NV_blend_equation_advanced_coherent */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void); #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conservative_raster #define GL_NV_conservative_raster 1 #define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 #define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 #define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); #endif #endif /* GL_NV_conservative_raster */ #ifndef GL_NV_copy_buffer #define GL_NV_copy_buffer 1 #define GL_COPY_READ_BUFFER_NV 0x8F36 #define GL_COPY_WRITE_BUFFER_NV 0x8F37 typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif #endif /* GL_NV_copy_buffer */ #ifndef GL_NV_coverage_sample #define GL_NV_coverage_sample 1 #define GL_COVERAGE_COMPONENT_NV 0x8ED0 #define GL_COVERAGE_COMPONENT4_NV 0x8ED1 #define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 #define GL_COVERAGE_BUFFERS_NV 0x8ED3 #define GL_COVERAGE_SAMPLES_NV 0x8ED4 #define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 #define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 #define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 #define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); #endif #endif /* GL_NV_coverage_sample */ #ifndef GL_NV_depth_nonlinear #define GL_NV_depth_nonlinear 1 #define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C #endif /* GL_NV_depth_nonlinear */ #ifndef GL_NV_draw_buffers #define GL_NV_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_NV 0x8824 #define GL_DRAW_BUFFER0_NV 0x8825 #define GL_DRAW_BUFFER1_NV 0x8826 #define GL_DRAW_BUFFER2_NV 0x8827 #define GL_DRAW_BUFFER3_NV 0x8828 #define GL_DRAW_BUFFER4_NV 0x8829 #define GL_DRAW_BUFFER5_NV 0x882A #define GL_DRAW_BUFFER6_NV 0x882B #define GL_DRAW_BUFFER7_NV 0x882C #define GL_DRAW_BUFFER8_NV 0x882D #define GL_DRAW_BUFFER9_NV 0x882E #define GL_DRAW_BUFFER10_NV 0x882F #define GL_DRAW_BUFFER11_NV 0x8830 #define GL_DRAW_BUFFER12_NV 0x8831 #define GL_DRAW_BUFFER13_NV 0x8832 #define GL_DRAW_BUFFER14_NV 0x8833 #define GL_DRAW_BUFFER15_NV 0x8834 #define GL_COLOR_ATTACHMENT0_NV 0x8CE0 #define GL_COLOR_ATTACHMENT1_NV 0x8CE1 #define GL_COLOR_ATTACHMENT2_NV 0x8CE2 #define GL_COLOR_ATTACHMENT3_NV 0x8CE3 #define GL_COLOR_ATTACHMENT4_NV 0x8CE4 #define GL_COLOR_ATTACHMENT5_NV 0x8CE5 #define GL_COLOR_ATTACHMENT6_NV 0x8CE6 #define GL_COLOR_ATTACHMENT7_NV 0x8CE7 #define GL_COLOR_ATTACHMENT8_NV 0x8CE8 #define GL_COLOR_ATTACHMENT9_NV 0x8CE9 #define GL_COLOR_ATTACHMENT10_NV 0x8CEA #define GL_COLOR_ATTACHMENT11_NV 0x8CEB #define GL_COLOR_ATTACHMENT12_NV 0x8CEC #define GL_COLOR_ATTACHMENT13_NV 0x8CED #define GL_COLOR_ATTACHMENT14_NV 0x8CEE #define GL_COLOR_ATTACHMENT15_NV 0x8CEF typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); #endif #endif /* GL_NV_draw_buffers */ #ifndef GL_NV_draw_instanced #define GL_NV_draw_instanced 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_NV_draw_instanced */ #ifndef GL_NV_explicit_attrib_location #define GL_NV_explicit_attrib_location 1 #endif /* GL_NV_explicit_attrib_location */ #ifndef GL_NV_fbo_color_attachments #define GL_NV_fbo_color_attachments 1 #define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF #endif /* GL_NV_fbo_color_attachments */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif #endif /* GL_NV_fence */ #ifndef GL_NV_fill_rectangle #define GL_NV_fill_rectangle 1 #define GL_FILL_RECTANGLE_NV 0x933C #endif /* GL_NV_fill_rectangle */ #ifndef GL_NV_fragment_coverage_to_color #define GL_NV_fragment_coverage_to_color 1 #define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD #define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color); #endif #endif /* GL_NV_fragment_coverage_to_color */ #ifndef GL_NV_fragment_shader_interlock #define GL_NV_fragment_shader_interlock 1 #endif /* GL_NV_fragment_shader_interlock */ #ifndef GL_NV_framebuffer_blit #define GL_NV_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_NV 0x8CA8 #define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_NV_framebuffer_blit */ #ifndef GL_NV_framebuffer_mixed_samples #define GL_NV_framebuffer_mixed_samples 1 #define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GL_DEPTH_SAMPLES_NV 0x932D #define GL_STENCIL_SAMPLES_NV 0x932E #define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F #define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 #define GL_COVERAGE_MODULATION_NV 0x9332 #define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v); typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v); GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components); #endif #endif /* GL_NV_framebuffer_mixed_samples */ #ifndef GL_NV_framebuffer_multisample #define GL_NV_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 #define GL_MAX_SAMPLES_NV 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_NV_framebuffer_multisample */ #ifndef GL_NV_generate_mipmap_sRGB #define GL_NV_generate_mipmap_sRGB 1 #endif /* GL_NV_generate_mipmap_sRGB */ #ifndef GL_NV_geometry_shader_passthrough #define GL_NV_geometry_shader_passthrough 1 #endif /* GL_NV_geometry_shader_passthrough */ #ifndef GL_NV_image_formats #define GL_NV_image_formats 1 #endif /* GL_NV_image_formats */ #ifndef GL_NV_instanced_arrays #define GL_NV_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); #endif #endif /* GL_NV_instanced_arrays */ #ifndef GL_NV_internalformat_sample_query #define GL_NV_internalformat_sample_query 1 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_MULTISAMPLES_NV 0x9371 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 #define GL_CONFORMANT_NV 0x9374 typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); #endif #endif /* GL_NV_internalformat_sample_query */ #ifndef GL_NV_non_square_matrices #define GL_NV_non_square_matrices 1 #define GL_FLOAT_MAT2x3_NV 0x8B65 #define GL_FLOAT_MAT2x4_NV 0x8B66 #define GL_FLOAT_MAT3x2_NV 0x8B67 #define GL_FLOAT_MAT3x4_NV 0x8B68 #define GL_FLOAT_MAT4x2_NV 0x8B69 #define GL_FLOAT_MAT4x3_NV 0x8B6A typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_NV_non_square_matrices */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 #define GL_ROUNDED_RECT_NV 0xE8 #define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 #define GL_ROUNDED_RECT2_NV 0xEA #define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB #define GL_ROUNDED_RECT4_NV 0xEC #define GL_RELATIVE_ROUNDED_RECT4_NV 0xED #define GL_ROUNDED_RECT8_NV 0xEE #define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF #define GL_RELATIVE_RECT_NV 0xF7 #define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 #define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 #define GL_FONT_UNAVAILABLE_NV 0x936A #define GL_FONT_UNINTELLIGIBLE_NV 0x936B #define GL_CONIC_CURVE_TO_NV 0x1A #define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B #define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 #define GL_STANDARD_FONT_FORMAT_NV 0x936C #define GL_PATH_PROJECTION_NV 0x1701 #define GL_PATH_MODELVIEW_NV 0x1700 #define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 #define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 #define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 #define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 #define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 #define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 #define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 #define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 #define GL_FRAGMENT_INPUT_NV 0x936D typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range); GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path); GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func); GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); #endif #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering_shared_edge #define GL_NV_path_rendering_shared_edge 1 #define GL_SHARED_EDGE_NV 0xC0 #endif /* GL_NV_path_rendering_shared_edge */ #ifndef GL_NV_polygon_mode #define GL_NV_polygon_mode 1 #define GL_POLYGON_MODE_NV 0x0B40 #define GL_POLYGON_OFFSET_POINT_NV 0x2A01 #define GL_POLYGON_OFFSET_LINE_NV 0x2A02 #define GL_POINT_NV 0x1B00 #define GL_LINE_NV 0x1B01 #define GL_FILL_NV 0x1B02 typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode); #endif #endif /* GL_NV_polygon_mode */ #ifndef GL_NV_read_buffer #define GL_NV_read_buffer 1 #define GL_READ_BUFFER_NV 0x0C02 typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); #endif #endif /* GL_NV_read_buffer */ #ifndef GL_NV_read_buffer_front #define GL_NV_read_buffer_front 1 #endif /* GL_NV_read_buffer_front */ #ifndef GL_NV_read_depth #define GL_NV_read_depth 1 #endif /* GL_NV_read_depth */ #ifndef GL_NV_read_depth_stencil #define GL_NV_read_depth_stencil 1 #endif /* GL_NV_read_depth_stencil */ #ifndef GL_NV_read_stencil #define GL_NV_read_stencil 1 #endif /* GL_NV_read_stencil */ #ifndef GL_NV_sRGB_formats #define GL_NV_sRGB_formats 1 #define GL_SLUMINANCE_NV 0x8C46 #define GL_SLUMINANCE_ALPHA_NV 0x8C44 #define GL_SRGB8_NV 0x8C41 #define GL_SLUMINANCE8_NV 0x8C47 #define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 #define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F #define GL_ETC1_SRGB8_NV 0x88EE #endif /* GL_NV_sRGB_formats */ #ifndef GL_NV_sample_locations #define GL_NV_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 #define GL_SAMPLE_LOCATION_NV 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void); #endif #endif /* GL_NV_sample_locations */ #ifndef GL_NV_sample_mask_override_coverage #define GL_NV_sample_mask_override_coverage 1 #endif /* GL_NV_sample_mask_override_coverage */ #ifndef GL_NV_shader_noperspective_interpolation #define GL_NV_shader_noperspective_interpolation 1 #endif /* GL_NV_shader_noperspective_interpolation */ #ifndef GL_NV_shadow_samplers_array #define GL_NV_shadow_samplers_array 1 #define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 #endif /* GL_NV_shadow_samplers_array */ #ifndef GL_NV_shadow_samplers_cube #define GL_NV_shadow_samplers_cube 1 #define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 #endif /* GL_NV_shadow_samplers_cube */ #ifndef GL_NV_texture_border_clamp #define GL_NV_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_NV 0x1004 #define GL_CLAMP_TO_BORDER_NV 0x812D #endif /* GL_NV_texture_border_clamp */ #ifndef GL_NV_texture_compression_s3tc_update #define GL_NV_texture_compression_s3tc_update 1 #endif /* GL_NV_texture_compression_s3tc_update */ #ifndef GL_NV_texture_npot_2D_mipmap #define GL_NV_texture_npot_2D_mipmap 1 #endif /* GL_NV_texture_npot_2D_mipmap */ #ifndef GL_NV_viewport_array #define GL_NV_viewport_array 1 #define GL_MAX_VIEWPORTS_NV 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C #define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f); typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v); GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v); GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f); GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data); GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index); GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index); #endif #endif /* GL_NV_viewport_array */ #ifndef GL_NV_viewport_array2 #define GL_NV_viewport_array2 1 #endif /* GL_NV_viewport_array2 */ #ifndef GL_OVR_multiview #define GL_OVR_multiview 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 #define GL_MAX_VIEWS_OVR 0x9631 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview */ #ifndef GL_OVR_multiview2 #define GL_OVR_multiview2 1 #endif /* GL_OVR_multiview2 */ #ifndef GL_QCOM_alpha_test #define GL_QCOM_alpha_test 1 #define GL_ALPHA_TEST_QCOM 0x0BC0 #define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 #define GL_ALPHA_TEST_REF_QCOM 0x0BC2 typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); #endif #endif /* GL_QCOM_alpha_test */ #ifndef GL_QCOM_binning_control #define GL_QCOM_binning_control 1 #define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 #define GL_CPU_OPTIMIZED_QCOM 0x8FB1 #define GL_GPU_OPTIMIZED_QCOM 0x8FB2 #define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 #endif /* GL_QCOM_binning_control */ #ifndef GL_QCOM_driver_control #define GL_QCOM_driver_control 1 typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); #endif #endif /* GL_QCOM_driver_control */ #ifndef GL_QCOM_extended_get #define GL_QCOM_extended_get 1 #define GL_TEXTURE_WIDTH_QCOM 0x8BD2 #define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 #define GL_TEXTURE_DEPTH_QCOM 0x8BD4 #define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 #define GL_TEXTURE_FORMAT_QCOM 0x8BD6 #define GL_TEXTURE_TYPE_QCOM 0x8BD7 #define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 #define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 #define GL_TEXTURE_TARGET_QCOM 0x8BDA #define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB #define GL_STATE_RESTORE 0x8BDC typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params); #endif #endif /* GL_QCOM_extended_get */ #ifndef GL_QCOM_extended_get2 #define GL_QCOM_extended_get2 1 typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #endif #endif /* GL_QCOM_extended_get2 */ #ifndef GL_QCOM_perfmon_global_mode #define GL_QCOM_perfmon_global_mode 1 #define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 #endif /* GL_QCOM_perfmon_global_mode */ #ifndef GL_QCOM_tiled_rendering #define GL_QCOM_tiled_rendering 1 #define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 #define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 #define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 #define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 #define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 #define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 #define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 #define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 #define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 #define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 #define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 #define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 #define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 #define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 #define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 #define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 #define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 #define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 #define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 #define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 #define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 #define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 #define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 #define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 #define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 #define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 #define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 #define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 #define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 #define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 #define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 #define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); #endif #endif /* GL_QCOM_tiled_rendering */ #ifndef GL_QCOM_writeonly_rendering #define GL_QCOM_writeonly_rendering 1 #define GL_WRITEONLY_RENDERING_QCOM 0x8823 #endif /* GL_QCOM_writeonly_rendering */ #ifndef GL_VIV_shader_binary #define GL_VIV_shader_binary 1 #define GL_SHADER_BINARY_VIV 0x8FC4 #endif /* GL_VIV_shader_binary */ #ifdef __cplusplus } #endif #endif tmpNnpnZF/thirdparty/khronos/GLES2/gl2platform.h0000664000175000017500000000161512543167424021062 0ustar chrischris#ifndef __gl2platform_h_ #define __gl2platform_h_ /* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */ /* * This document is licensed under the SGI Free Software B License Version * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . */ /* Platform-specific types and definitions for OpenGL ES 2.X gl2.h * * Adopters may modify khrplatform.h and this file to suit their platform. * You are encouraged to submit all modifications to the Khronos group so that * they can be included in future versions of this file. Please submit changes * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) * by filing a bug against product "OpenGL-ES" component "Registry". */ #include #ifndef GL_APICALL #define GL_APICALL KHRONOS_APICALL #endif #ifndef GL_APIENTRY #define GL_APIENTRY KHRONOS_APIENTRY #endif #endif /* __gl2platform_h_ */ tmpNnpnZF/thirdparty/khronos/.gitignore0000664000175000017500000000001212543167424017622 0ustar chrischris!Makefile tmpNnpnZF/thirdparty/khronos/GLES/0000775000175000017500000000000012543167424016373 5ustar chrischristmpNnpnZF/thirdparty/khronos/GLES/glext.patch0000664000175000017500000000102312543167424020533 0ustar chrischrisdiff --git a/thirdparty/khronos/GLES/glext.h b/thirdparty/khronos/GLES/glext.h index d591832..90fd2c3 100644 --- a/thirdparty/khronos/GLES/glext.h +++ b/thirdparty/khronos/GLES/glext.h @@ -1,5 +1,5 @@ -#ifndef __glext_h_ -#define __glext_h_ +#ifndef __gles_glext_h_ +#define __gles_glext_h_ /* $Revision: 16481 $ on $Date:: 2012-01-04 10:43:56 -0800 #$ */ @@ -1179,5 +1179,5 @@ typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); } #endif -#endif /* __glext_h_ */ +#endif /* __gles_glext_h_ */ tmpNnpnZF/thirdparty/khronos/GLES/glplatform.h0000664000175000017500000000160512543167424020715 0ustar chrischris#ifndef __glplatform_h_ #define __glplatform_h_ /* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */ /* * This document is licensed under the SGI Free Software B License Version * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . */ /* Platform-specific types and definitions for OpenGL ES 1.X gl.h * * Adopters may modify khrplatform.h and this file to suit their platform. * You are encouraged to submit all modifications to the Khronos group so that * they can be included in future versions of this file. Please submit changes * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) * by filing a bug against product "OpenGL-ES" component "Registry". */ #include #ifndef GL_API #define GL_API KHRONOS_APICALL #endif #ifndef GL_APIENTRY #define GL_APIENTRY KHRONOS_APIENTRY #endif #endif /* __glplatform_h_ */ tmpNnpnZF/thirdparty/khronos/GLES/glext.h0000664000175000017500000017504512543167424017703 0ustar chrischris#ifndef __gles_glext_h_ #define __gles_glext_h_ /* $Revision: 20798 $ on $Date:: 2013-03-07 01:19:34 -0800 #$ */ #ifdef __cplusplus extern "C" { #endif /* * This document is licensed under the SGI Free Software B License Version * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . */ #ifndef GL_APIENTRYP # define GL_APIENTRYP GL_APIENTRY* #endif /*------------------------------------------------------------------------* * OES extension tokens *------------------------------------------------------------------------*/ /* GL_OES_blend_equation_separate */ #ifndef GL_OES_blend_equation_separate /* BLEND_EQUATION_RGB_OES same as BLEND_EQUATION_OES */ #define GL_BLEND_EQUATION_RGB_OES 0x8009 #define GL_BLEND_EQUATION_ALPHA_OES 0x883D #endif /* GL_OES_blend_func_separate */ #ifndef GL_OES_blend_func_separate #define GL_BLEND_DST_RGB_OES 0x80C8 #define GL_BLEND_SRC_RGB_OES 0x80C9 #define GL_BLEND_DST_ALPHA_OES 0x80CA #define GL_BLEND_SRC_ALPHA_OES 0x80CB #endif /* GL_OES_blend_subtract */ #ifndef GL_OES_blend_subtract #define GL_BLEND_EQUATION_OES 0x8009 #define GL_FUNC_ADD_OES 0x8006 #define GL_FUNC_SUBTRACT_OES 0x800A #define GL_FUNC_REVERSE_SUBTRACT_OES 0x800B #endif /* GL_OES_compressed_ETC1_RGB8_texture */ #ifndef GL_OES_compressed_ETC1_RGB8_texture #define GL_ETC1_RGB8_OES 0x8D64 #endif /* GL_OES_depth24 */ #ifndef GL_OES_depth24 #define GL_DEPTH_COMPONENT24_OES 0x81A6 #endif /* GL_OES_depth32 */ #ifndef GL_OES_depth32 #define GL_DEPTH_COMPONENT32_OES 0x81A7 #endif /* GL_OES_draw_texture */ #ifndef GL_OES_draw_texture #define GL_TEXTURE_CROP_RECT_OES 0x8B9D #endif /* GL_OES_EGL_image */ #ifndef GL_OES_EGL_image typedef void* GLeglImageOES; #endif /* GL_OES_EGL_image_external */ #ifndef GL_OES_EGL_image_external /* GLeglImageOES defined in GL_OES_EGL_image already. */ #define GL_TEXTURE_EXTERNAL_OES 0x8D65 #define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 #define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 #endif /* GL_OES_element_index_uint */ #ifndef GL_OES_element_index_uint #define GL_UNSIGNED_INT 0x1405 #endif /* GL_OES_fixed_point */ #ifndef GL_OES_fixed_point #define GL_FIXED_OES 0x140C #endif /* GL_OES_framebuffer_object */ #ifndef GL_OES_framebuffer_object #define GL_NONE_OES 0 #define GL_FRAMEBUFFER_OES 0x8D40 #define GL_RENDERBUFFER_OES 0x8D41 #define GL_RGBA4_OES 0x8056 #define GL_RGB5_A1_OES 0x8057 #define GL_RGB565_OES 0x8D62 #define GL_DEPTH_COMPONENT16_OES 0x81A5 #define GL_RENDERBUFFER_WIDTH_OES 0x8D42 #define GL_RENDERBUFFER_HEIGHT_OES 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44 #define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3 #define GL_COLOR_ATTACHMENT0_OES 0x8CE0 #define GL_DEPTH_ATTACHMENT_OES 0x8D00 #define GL_STENCIL_ATTACHMENT_OES 0x8D20 #define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA #define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD #define GL_FRAMEBUFFER_BINDING_OES 0x8CA6 #define GL_RENDERBUFFER_BINDING_OES 0x8CA7 #define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8 #define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506 #endif /* GL_OES_mapbuffer */ #ifndef GL_OES_mapbuffer #define GL_WRITE_ONLY_OES 0x88B9 #define GL_BUFFER_ACCESS_OES 0x88BB #define GL_BUFFER_MAPPED_OES 0x88BC #define GL_BUFFER_MAP_POINTER_OES 0x88BD #endif /* GL_OES_matrix_get */ #ifndef GL_OES_matrix_get #define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D #define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E #define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F #endif /* GL_OES_matrix_palette */ #ifndef GL_OES_matrix_palette #define GL_MAX_VERTEX_UNITS_OES 0x86A4 #define GL_MAX_PALETTE_MATRICES_OES 0x8842 #define GL_MATRIX_PALETTE_OES 0x8840 #define GL_MATRIX_INDEX_ARRAY_OES 0x8844 #define GL_WEIGHT_ARRAY_OES 0x86AD #define GL_CURRENT_PALETTE_MATRIX_OES 0x8843 #define GL_MATRIX_INDEX_ARRAY_SIZE_OES 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_OES 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_OES 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_OES 0x8849 #define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES 0x8B9E #define GL_WEIGHT_ARRAY_SIZE_OES 0x86AB #define GL_WEIGHT_ARRAY_TYPE_OES 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_OES 0x86AA #define GL_WEIGHT_ARRAY_POINTER_OES 0x86AC #define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES 0x889E #endif /* GL_OES_packed_depth_stencil */ #ifndef GL_OES_packed_depth_stencil #define GL_DEPTH_STENCIL_OES 0x84F9 #define GL_UNSIGNED_INT_24_8_OES 0x84FA #define GL_DEPTH24_STENCIL8_OES 0x88F0 #endif /* GL_OES_required_internalformat */ /* No new tokens introduced by this extension. */ /* GL_OES_rgb8_rgba8 */ #ifndef GL_OES_rgb8_rgba8 #define GL_RGB8_OES 0x8051 #define GL_RGBA8_OES 0x8058 #endif /* GL_OES_stencil1 */ #ifndef GL_OES_stencil1 #define GL_STENCIL_INDEX1_OES 0x8D46 #endif /* GL_OES_stencil4 */ #ifndef GL_OES_stencil4 #define GL_STENCIL_INDEX4_OES 0x8D47 #endif /* GL_OES_stencil8 */ #ifndef GL_OES_stencil8 #define GL_STENCIL_INDEX8_OES 0x8D48 #endif /* GL_OES_stencil_wrap */ #ifndef GL_OES_stencil_wrap #define GL_INCR_WRAP_OES 0x8507 #define GL_DECR_WRAP_OES 0x8508 #endif /* GL_OES_texture_cube_map */ #ifndef GL_OES_texture_cube_map #define GL_NORMAL_MAP_OES 0x8511 #define GL_REFLECTION_MAP_OES 0x8512 #define GL_TEXTURE_CUBE_MAP_OES 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_OES 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES 0x851A #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES 0x851C #define GL_TEXTURE_GEN_MODE_OES 0x2500 #define GL_TEXTURE_GEN_STR_OES 0x8D60 #endif /* GL_OES_texture_mirrored_repeat */ #ifndef GL_OES_texture_mirrored_repeat #define GL_MIRRORED_REPEAT_OES 0x8370 #endif /* GL_OES_vertex_array_object */ #ifndef GL_OES_vertex_array_object #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 #endif /*------------------------------------------------------------------------* * AMD extension tokens *------------------------------------------------------------------------*/ /* GL_AMD_compressed_3DC_texture */ #ifndef GL_AMD_compressed_3DC_texture #define GL_3DC_X_AMD 0x87F9 #define GL_3DC_XY_AMD 0x87FA #endif /* GL_AMD_compressed_ATC_texture */ #ifndef GL_AMD_compressed_ATC_texture #define GL_ATC_RGB_AMD 0x8C92 #define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE #endif /*------------------------------------------------------------------------* * APPLE extension tokens *------------------------------------------------------------------------*/ /* GL_APPLE_copy_texture_levels */ /* No new tokens introduced by this extension. */ /* GL_APPLE_framebuffer_multisample */ #ifndef GL_APPLE_framebuffer_multisample #define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 #define GL_MAX_SAMPLES_APPLE 0x8D57 #define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 #define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA #endif /* GL_APPLE_sync */ #ifndef GL_APPLE_sync /* These types are defined with reference to * in the Apple extension spec, but here we use the Khronos * portable types in khrplatform.h, and assume those types * are always defined. * If any other extensions using these types are defined, * the typedefs must move out of this block and be shared. */ typedef khronos_int64_t GLint64; typedef khronos_uint64_t GLuint64; typedef struct __GLsync *GLsync; #define GL_SYNC_OBJECT_APPLE 0x8A53 #define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 #define GL_OBJECT_TYPE_APPLE 0x9112 #define GL_SYNC_CONDITION_APPLE 0x9113 #define GL_SYNC_STATUS_APPLE 0x9114 #define GL_SYNC_FLAGS_APPLE 0x9115 #define GL_SYNC_FENCE_APPLE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 #define GL_UNSIGNALED_APPLE 0x9118 #define GL_SIGNALED_APPLE 0x9119 #define GL_ALREADY_SIGNALED_APPLE 0x911A #define GL_TIMEOUT_EXPIRED_APPLE 0x911B #define GL_CONDITION_SATISFIED_APPLE 0x911C #define GL_WAIT_FAILED_APPLE 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 #define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull #endif /* GL_APPLE_texture_2D_limited_npot */ /* No new tokens introduced by this extension. */ /* GL_APPLE_texture_format_BGRA8888 */ #ifndef GL_APPLE_texture_format_BGRA8888 #define GL_BGRA_EXT 0x80E1 #endif /* GL_APPLE_texture_max_level */ #ifndef GL_APPLE_texture_max_level #define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D #endif /*------------------------------------------------------------------------* * ARM extension tokens *------------------------------------------------------------------------*/ /* GL_ARM_rgba8 */ /* No new tokens introduced by this extension. */ /*------------------------------------------------------------------------* * EXT extension tokens *------------------------------------------------------------------------*/ /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_minmax #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #endif /* GL_EXT_discard_framebuffer */ #ifndef GL_EXT_discard_framebuffer #define GL_COLOR_EXT 0x1800 #define GL_DEPTH_EXT 0x1801 #define GL_STENCIL_EXT 0x1802 #endif /* GL_EXT_map_buffer_range */ #ifndef GL_EXT_map_buffer_range #define GL_MAP_READ_BIT_EXT 0x0001 #define GL_MAP_WRITE_BIT_EXT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 #endif /* GL_EXT_multisampled_render_to_texture */ #ifndef GL_EXT_multisampled_render_to_texture #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C /* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 #endif /* GL_EXT_multi_draw_arrays */ /* No new tokens introduced by this extension. */ /* GL_EXT_read_format_bgra */ #ifndef GL_EXT_read_format_bgra #define GL_BGRA_EXT 0x80E1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 #endif /* GL_EXT_robustness */ #ifndef GL_EXT_robustness /* reuse GL_NO_ERROR */ #define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 #define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 #define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 #define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 #define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 #define GL_NO_RESET_NOTIFICATION_EXT 0x8261 #endif /* GL_EXT_sRGB */ #ifndef GL_EXT_sRGB #define GL_SRGB_EXT 0x8C40 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 #endif /* GL_EXT_texture_compression_dxt1 */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_texture_format_BGRA8888 */ #ifndef GL_EXT_texture_format_BGRA8888 #define GL_BGRA_EXT 0x80E1 #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_lod_bias #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_texture_storage #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F #define GL_ALPHA8_EXT 0x803C #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_RGBA32F_EXT 0x8814 #define GL_RGB32F_EXT 0x8815 #define GL_ALPHA32F_EXT 0x8816 #define GL_LUMINANCE32F_EXT 0x8818 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 /* reuse GL_RGBA16F_EXT */ #define GL_RGB16F_EXT 0x881B #define GL_ALPHA16F_EXT 0x881C #define GL_LUMINANCE16F_EXT 0x881E #define GL_LUMINANCE_ALPHA16F_EXT 0x881F #define GL_RGB10_A2_EXT 0x8059 #define GL_RGB10_EXT 0x8052 #define GL_BGRA8_EXT 0x93A1 #endif /*------------------------------------------------------------------------* * IMG extension tokens *------------------------------------------------------------------------*/ /* GL_IMG_read_format */ #ifndef GL_IMG_read_format #define GL_BGRA_IMG 0x80E1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 #endif /* GL_IMG_texture_compression_pvrtc */ #ifndef GL_IMG_texture_compression_pvrtc #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 #endif /* GL_IMG_texture_env_enhanced_fixed_function */ #ifndef GL_IMG_texture_env_enhanced_fixed_function #define GL_MODULATE_COLOR_IMG 0x8C04 #define GL_RECIP_ADD_SIGNED_ALPHA_IMG 0x8C05 #define GL_TEXTURE_ALPHA_MODULATE_IMG 0x8C06 #define GL_FACTOR_ALPHA_MODULATE_IMG 0x8C07 #define GL_FRAGMENT_ALPHA_MODULATE_IMG 0x8C08 #define GL_ADD_BLEND_IMG 0x8C09 #define GL_DOT3_RGBA_IMG 0x86AF #endif /* GL_IMG_user_clip_plane */ #ifndef GL_IMG_user_clip_plane #define GL_CLIP_PLANE0_IMG 0x3000 #define GL_CLIP_PLANE1_IMG 0x3001 #define GL_CLIP_PLANE2_IMG 0x3002 #define GL_CLIP_PLANE3_IMG 0x3003 #define GL_CLIP_PLANE4_IMG 0x3004 #define GL_CLIP_PLANE5_IMG 0x3005 #define GL_MAX_CLIP_PLANES_IMG 0x0D32 #endif /* GL_IMG_multisampled_render_to_texture */ #ifndef GL_IMG_multisampled_render_to_texture #define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 #define GL_MAX_SAMPLES_IMG 0x9135 #define GL_TEXTURE_SAMPLES_IMG 0x9136 #endif /*------------------------------------------------------------------------* * NV extension tokens *------------------------------------------------------------------------*/ /* GL_NV_fence */ #ifndef GL_NV_fence #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 #endif /*------------------------------------------------------------------------* * QCOM extension tokens *------------------------------------------------------------------------*/ /* GL_QCOM_driver_control */ /* No new tokens introduced by this extension. */ /* GL_QCOM_extended_get */ #ifndef GL_QCOM_extended_get #define GL_TEXTURE_WIDTH_QCOM 0x8BD2 #define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 #define GL_TEXTURE_DEPTH_QCOM 0x8BD4 #define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 #define GL_TEXTURE_FORMAT_QCOM 0x8BD6 #define GL_TEXTURE_TYPE_QCOM 0x8BD7 #define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 #define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 #define GL_TEXTURE_TARGET_QCOM 0x8BDA #define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB #define GL_STATE_RESTORE 0x8BDC #endif /* GL_QCOM_extended_get2 */ /* No new tokens introduced by this extension. */ /* GL_QCOM_perfmon_global_mode */ #ifndef GL_QCOM_perfmon_global_mode #define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 #endif /* GL_QCOM_writeonly_rendering */ #ifndef GL_QCOM_writeonly_rendering #define GL_WRITEONLY_RENDERING_QCOM 0x8823 #endif /* GL_QCOM_tiled_rendering */ #ifndef GL_QCOM_tiled_rendering #define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 #define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 #define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 #define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 #define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 #define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 #define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 #define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 #define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 #define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 #define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 #define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 #define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 #define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 #define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 #define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 #define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 #define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 #define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 #define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 #define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 #define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 #define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 #define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 #define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 #define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 #define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 #define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 #define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 #define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 #define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 #define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 #endif /*------------------------------------------------------------------------* * End of extension tokens, start of corresponding extension functions *------------------------------------------------------------------------*/ /*------------------------------------------------------------------------* * OES extension functions *------------------------------------------------------------------------*/ /* GL_OES_blend_equation_separate */ #ifndef GL_OES_blend_equation_separate #define GL_OES_blend_equation_separate 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glBlendEquationSeparateOES (GLenum modeRGB, GLenum modeAlpha); #endif typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEOESPROC) (GLenum modeRGB, GLenum modeAlpha); #endif /* GL_OES_blend_func_separate */ #ifndef GL_OES_blend_func_separate #define GL_OES_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glBlendFuncSeparateOES (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEOESPROC) (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif /* GL_OES_blend_subtract */ #ifndef GL_OES_blend_subtract #define GL_OES_blend_subtract 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glBlendEquationOES (GLenum mode); #endif typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONOESPROC) (GLenum mode); #endif /* GL_OES_byte_coordinates */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 #endif /* GL_OES_compressed_ETC1_RGB8_texture */ #ifndef GL_OES_compressed_ETC1_RGB8_texture #define GL_OES_compressed_ETC1_RGB8_texture 1 #endif /* GL_OES_depth24 */ #ifndef GL_OES_depth24 #define GL_OES_depth24 1 #endif /* GL_OES_depth32 */ #ifndef GL_OES_depth32 #define GL_OES_depth32 1 #endif /* GL_OES_draw_texture */ #ifndef GL_OES_draw_texture #define GL_OES_draw_texture 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glDrawTexsOES (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); GL_API void GL_APIENTRY glDrawTexiOES (GLint x, GLint y, GLint z, GLint width, GLint height); GL_API void GL_APIENTRY glDrawTexxOES (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); GL_API void GL_APIENTRY glDrawTexsvOES (const GLshort *coords); GL_API void GL_APIENTRY glDrawTexivOES (const GLint *coords); GL_API void GL_APIENTRY glDrawTexxvOES (const GLfixed *coords); GL_API void GL_APIENTRY glDrawTexfOES (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); GL_API void GL_APIENTRY glDrawTexfvOES (const GLfloat *coords); #endif typedef void (GL_APIENTRYP PFNGLDRAWTEXSOESPROC) (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); typedef void (GL_APIENTRYP PFNGLDRAWTEXIOESPROC) (GLint x, GLint y, GLint z, GLint width, GLint height); typedef void (GL_APIENTRYP PFNGLDRAWTEXXOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); typedef void (GL_APIENTRYP PFNGLDRAWTEXSVOESPROC) (const GLshort *coords); typedef void (GL_APIENTRYP PFNGLDRAWTEXIVOESPROC) (const GLint *coords); typedef void (GL_APIENTRYP PFNGLDRAWTEXXVOESPROC) (const GLfixed *coords); typedef void (GL_APIENTRYP PFNGLDRAWTEXFOESPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); typedef void (GL_APIENTRYP PFNGLDRAWTEXFVOESPROC) (const GLfloat *coords); #endif /* GL_OES_EGL_image */ #ifndef GL_OES_EGL_image #define GL_OES_EGL_image 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); GL_API void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); #endif typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); #endif /* GL_OES_EGL_image_external */ #ifndef GL_OES_EGL_image_external #define GL_OES_EGL_image_external 1 /* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ #endif /* GL_OES_element_index_uint */ #ifndef GL_OES_element_index_uint #define GL_OES_element_index_uint 1 #endif /* GL_OES_extended_matrix_palette */ #ifndef GL_OES_extended_matrix_palette #define GL_OES_extended_matrix_palette 1 #endif /* GL_OES_fbo_render_mipmap */ #ifndef GL_OES_fbo_render_mipmap #define GL_OES_fbo_render_mipmap 1 #endif /* GL_OES_fixed_point */ #ifndef GL_OES_fixed_point #define GL_OES_fixed_point 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glAlphaFuncxOES (GLenum func, GLclampx ref); GL_API void GL_APIENTRY glClearColorxOES (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); GL_API void GL_APIENTRY glClearDepthxOES (GLclampx depth); GL_API void GL_APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); GL_API void GL_APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GL_API void GL_APIENTRY glDepthRangexOES (GLclampx zNear, GLclampx zFar); GL_API void GL_APIENTRY glFogxOES (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glFogxvOES (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glFrustumxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); GL_API void GL_APIENTRY glGetClipPlanexOES (GLenum pname, GLfixed eqn[4]); GL_API void GL_APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetLightxvOES (GLenum light, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetMaterialxvOES (GLenum face, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetTexEnvxvOES (GLenum env, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glLightModelxOES (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glLineWidthxOES (GLfixed width); GL_API void GL_APIENTRY glLoadMatrixxOES (const GLfixed *m); GL_API void GL_APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glMultMatrixxOES (const GLfixed *m); GL_API void GL_APIENTRY glMultiTexCoord4xOES (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GL_API void GL_APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); GL_API void GL_APIENTRY glOrthoxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); GL_API void GL_APIENTRY glPointParameterxOES (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glPointSizexOES (GLfixed size); GL_API void GL_APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); GL_API void GL_APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GL_API void GL_APIENTRY glSampleCoveragexOES (GLclampx value, GLboolean invert); GL_API void GL_APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); GL_API void GL_APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); #endif typedef void (GL_APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLclampx ref); typedef void (GL_APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); typedef void (GL_APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLclampx depth); typedef void (GL_APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); typedef void (GL_APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLclampx zNear, GLclampx zFar); typedef void (GL_APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum pname, GLfixed eqn[4]); typedef void (GL_APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); typedef void (GL_APIENTRYP PFNGLGETLIGHTXVOESPROC) (GLenum light, GLenum pname, GLfixed *params); typedef void (GL_APIENTRYP PFNGLGETMATERIALXVOESPROC) (GLenum face, GLenum pname, GLfixed *params); typedef void (GL_APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum env, GLenum pname, GLfixed *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (GL_APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); typedef void (GL_APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); typedef void (GL_APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); typedef void (GL_APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (GL_APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); typedef void (GL_APIENTRYP PFNGLORTHOXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXOESPROC) (GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); typedef void (GL_APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEXOESPROC) (GLclampx value, GLboolean invert); typedef void (GL_APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (GL_APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); #endif /* GL_OES_framebuffer_object */ #ifndef GL_OES_framebuffer_object #define GL_OES_framebuffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GL_API GLboolean GL_APIENTRY glIsRenderbufferOES (GLuint renderbuffer); GL_API void GL_APIENTRY glBindRenderbufferOES (GLenum target, GLuint renderbuffer); GL_API void GL_APIENTRY glDeleteRenderbuffersOES (GLsizei n, const GLuint* renderbuffers); GL_API void GL_APIENTRY glGenRenderbuffersOES (GLsizei n, GLuint* renderbuffers); GL_API void GL_APIENTRY glRenderbufferStorageOES (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GL_API void GL_APIENTRY glGetRenderbufferParameterivOES (GLenum target, GLenum pname, GLint* params); GL_API GLboolean GL_APIENTRY glIsFramebufferOES (GLuint framebuffer); GL_API void GL_APIENTRY glBindFramebufferOES (GLenum target, GLuint framebuffer); GL_API void GL_APIENTRY glDeleteFramebuffersOES (GLsizei n, const GLuint* framebuffers); GL_API void GL_APIENTRY glGenFramebuffersOES (GLsizei n, GLuint* framebuffers); GL_API GLenum GL_APIENTRY glCheckFramebufferStatusOES (GLenum target); GL_API void GL_APIENTRY glFramebufferRenderbufferOES (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GL_API void GL_APIENTRY glFramebufferTexture2DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GL_API void GL_APIENTRY glGetFramebufferAttachmentParameterivOES (GLenum target, GLenum attachment, GLenum pname, GLint* params); GL_API void GL_APIENTRY glGenerateMipmapOES (GLenum target); #endif typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFEROESPROC) (GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFEROESPROC) (GLenum target, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSOESPROC) (GLsizei n, const GLuint* renderbuffers); typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSOESPROC) (GLsizei n, GLuint* renderbuffers); typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVOESPROC) (GLenum target, GLenum pname, GLint* params); typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFEROESPROC) (GLuint framebuffer); typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFEROESPROC) (GLenum target, GLuint framebuffer); typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSOESPROC) (GLsizei n, const GLuint* framebuffers); typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSOESPROC) (GLsizei n, GLuint* framebuffers); typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSOESPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEROESPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPOESPROC) (GLenum target); #endif /* GL_OES_mapbuffer */ #ifndef GL_OES_mapbuffer #define GL_OES_mapbuffer 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); GL_API GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); GL_API void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid ** params); #endif typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid ** params); #endif /* GL_OES_matrix_get */ #ifndef GL_OES_matrix_get #define GL_OES_matrix_get 1 #endif /* GL_OES_matrix_palette */ #ifndef GL_OES_matrix_palette #define GL_OES_matrix_palette 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glCurrentPaletteMatrixOES (GLuint matrixpaletteindex); GL_API void GL_APIENTRY glLoadPaletteFromModelViewMatrixOES (void); GL_API void GL_APIENTRY glMatrixIndexPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GL_API void GL_APIENTRY glWeightPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif typedef void (GL_APIENTRYP PFNGLCURRENTPALETTEMATRIXOESPROC) (GLuint matrixpaletteindex); typedef void (GL_APIENTRYP PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC) (void); typedef void (GL_APIENTRYP PFNGLMATRIXINDEXPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (GL_APIENTRYP PFNGLWEIGHTPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_OES_packed_depth_stencil */ #ifndef GL_OES_packed_depth_stencil #define GL_OES_packed_depth_stencil 1 #endif /* GL_OES_required_internalformat */ #ifndef GL_OES_required_internalformat #define GL_OES_required_internalformat 1 #endif /* GL_OES_query_matrix */ #ifndef GL_OES_query_matrix #define GL_OES_query_matrix 1 #ifdef GL_GLEXT_PROTOTYPES GL_API GLbitfield GL_APIENTRY glQueryMatrixxOES (GLfixed mantissa[16], GLint exponent[16]); #endif typedef GLbitfield (GL_APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed mantissa[16], GLint exponent[16]); #endif /* GL_OES_rgb8_rgba8 */ #ifndef GL_OES_rgb8_rgba8 #define GL_OES_rgb8_rgba8 1 #endif /* GL_OES_single_precision */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glDepthRangefOES (GLclampf zNear, GLclampf zFar); GL_API void GL_APIENTRY glFrustumfOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); GL_API void GL_APIENTRY glOrthofOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); GL_API void GL_APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); GL_API void GL_APIENTRY glGetClipPlanefOES (GLenum pname, GLfloat eqn[4]); GL_API void GL_APIENTRY glClearDepthfOES (GLclampf depth); #endif typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf zNear, GLclampf zFar); typedef void (GL_APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); typedef void (GL_APIENTRYP PFNGLORTHOFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); typedef void (GL_APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum pname, GLfloat eqn[4]); typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); #endif /* GL_OES_stencil1 */ #ifndef GL_OES_stencil1 #define GL_OES_stencil1 1 #endif /* GL_OES_stencil4 */ #ifndef GL_OES_stencil4 #define GL_OES_stencil4 1 #endif /* GL_OES_stencil8 */ #ifndef GL_OES_stencil8 #define GL_OES_stencil8 1 #endif /* GL_OES_stencil_wrap */ #ifndef GL_OES_stencil_wrap #define GL_OES_stencil_wrap 1 #endif /* GL_OES_texture_cube_map */ #ifndef GL_OES_texture_cube_map #define GL_OES_texture_cube_map 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glTexGenfOES (GLenum coord, GLenum pname, GLfloat param); GL_API void GL_APIENTRY glTexGenfvOES (GLenum coord, GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glTexGeniOES (GLenum coord, GLenum pname, GLint param); GL_API void GL_APIENTRY glTexGenivOES (GLenum coord, GLenum pname, const GLint *params); GL_API void GL_APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glGetTexGenfvOES (GLenum coord, GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glGetTexGenivOES (GLenum coord, GLenum pname, GLint *params); GL_API void GL_APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); #endif typedef void (GL_APIENTRYP PFNGLTEXGENFOESPROC) (GLenum coord, GLenum pname, GLfloat param); typedef void (GL_APIENTRYP PFNGLTEXGENFVOESPROC) (GLenum coord, GLenum pname, const GLfloat *params); typedef void (GL_APIENTRYP PFNGLTEXGENIOESPROC) (GLenum coord, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLTEXGENIVOESPROC) (GLenum coord, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); typedef void (GL_APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); typedef void (GL_APIENTRYP PFNGLGETTEXGENFVOESPROC) (GLenum coord, GLenum pname, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETTEXGENIVOESPROC) (GLenum coord, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); #endif /* GL_OES_texture_env_crossbar */ #ifndef GL_OES_texture_env_crossbar #define GL_OES_texture_env_crossbar 1 #endif /* GL_OES_texture_mirrored_repeat */ #ifndef GL_OES_texture_mirrored_repeat #define GL_OES_texture_mirrored_repeat 1 #endif /* GL_OES_vertex_array_object */ #ifndef GL_OES_vertex_array_object #define GL_OES_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glBindVertexArrayOES (GLuint array); GL_API void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); GL_API void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); GL_API GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); #endif typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); #endif /*------------------------------------------------------------------------* * AMD extension functions *------------------------------------------------------------------------*/ /* GL_AMD_compressed_3DC_texture */ #ifndef GL_AMD_compressed_3DC_texture #define GL_AMD_compressed_3DC_texture 1 #endif /* GL_AMD_compressed_ATC_texture */ #ifndef GL_AMD_compressed_ATC_texture #define GL_AMD_compressed_ATC_texture 1 #endif /*------------------------------------------------------------------------* * APPLE extension functions *------------------------------------------------------------------------*/ /* GL_APPLE_copy_texture_levels */ #ifndef GL_APPLE_copy_texture_levels #define GL_APPLE_copy_texture_levels 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #endif typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #endif /* GL_APPLE_framebuffer_multisample */ #ifndef GL_APPLE_framebuffer_multisample #define GL_APPLE_framebuffer_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei); GL_API void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); #endif /* GL_APPLE_sync */ #ifndef GL_APPLE_sync #define GL_APPLE_sync 1 #ifdef GL_GLEXT_PROTOTYPES GL_API GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); GL_API GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); GL_API void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); GL_API GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_API void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_API void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); GL_API void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #endif typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #endif /* GL_APPLE_texture_2D_limited_npot */ #ifndef GL_APPLE_texture_2D_limited_npot #define GL_APPLE_texture_2D_limited_npot 1 #endif /* GL_APPLE_texture_format_BGRA8888 */ #ifndef GL_APPLE_texture_format_BGRA8888 #define GL_APPLE_texture_format_BGRA8888 1 #endif /* GL_APPLE_texture_max_level */ #ifndef GL_APPLE_texture_max_level #define GL_APPLE_texture_max_level 1 #endif /*------------------------------------------------------------------------* * ARM extension functions *------------------------------------------------------------------------*/ /* GL_ARM_rgba8 */ #ifndef GL_ARM_rgba8 #define GL_ARM_rgba8 1 #endif /*------------------------------------------------------------------------* * EXT extension functions *------------------------------------------------------------------------*/ /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #endif /* GL_EXT_discard_framebuffer */ #ifndef GL_EXT_discard_framebuffer #define GL_EXT_discard_framebuffer 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); #endif typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); #endif /* GL_EXT_map_buffer_range */ #ifndef GL_EXT_map_buffer_range #define GL_EXT_map_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY *glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GL_API void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); #endif typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); #endif /* GL_EXT_multisampled_render_to_texture */ #ifndef GL_EXT_multisampled_render_to_texture #define GL_EXT_multisampled_render_to_texture 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); #endif typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glMultiDrawArraysEXT (GLenum, const GLint *, const GLsizei *, GLsizei); GL_API void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif /* GL_EXT_read_format_bgra */ #ifndef GL_EXT_read_format_bgra #define GL_EXT_read_format_bgra 1 #endif /* GL_EXT_robustness */ #ifndef GL_EXT_robustness #define GL_EXT_robustness 1 #ifdef GL_GLEXT_PROTOTYPES GL_API GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); GL_API void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GL_API void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params); GL_API void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); #endif typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); #endif /* GL_EXT_sRGB */ #ifndef GL_EXT_sRGB #define GL_EXT_sRGB 1 #endif /* GL_EXT_texture_compression_dxt1 */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_EXT_texture_compression_dxt1 1 #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #endif /* GL_EXT_texture_format_BGRA8888 */ #ifndef GL_EXT_texture_format_BGRA8888 #define GL_EXT_texture_format_BGRA8888 1 #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_API void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_API void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GL_API void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_API void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_API void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif /*------------------------------------------------------------------------* * IMG extension functions *------------------------------------------------------------------------*/ /* GL_IMG_read_format */ #ifndef GL_IMG_read_format #define GL_IMG_read_format 1 #endif /* GL_IMG_texture_compression_pvrtc */ #ifndef GL_IMG_texture_compression_pvrtc #define GL_IMG_texture_compression_pvrtc 1 #endif /* GL_IMG_texture_env_enhanced_fixed_function */ #ifndef GL_IMG_texture_env_enhanced_fixed_function #define GL_IMG_texture_env_enhanced_fixed_function 1 #endif /* GL_IMG_user_clip_plane */ #ifndef GL_IMG_user_clip_plane #define GL_IMG_user_clip_plane 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glClipPlanefIMG (GLenum, const GLfloat *); GL_API void GL_APIENTRY glClipPlanexIMG (GLenum, const GLfixed *); #endif typedef void (GL_APIENTRYP PFNGLCLIPPLANEFIMGPROC) (GLenum p, const GLfloat *eqn); typedef void (GL_APIENTRYP PFNGLCLIPPLANEXIMGPROC) (GLenum p, const GLfixed *eqn); #endif /* GL_IMG_multisampled_render_to_texture */ #ifndef GL_IMG_multisampled_render_to_texture #define GL_IMG_multisampled_render_to_texture 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei); GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); #endif typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif /*------------------------------------------------------------------------* * NV extension functions *------------------------------------------------------------------------*/ /* NV_fence */ #ifndef GL_NV_fence #define GL_NV_fence 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); GL_API void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *); GL_API GLboolean GL_APIENTRY glIsFenceNV (GLuint); GL_API GLboolean GL_APIENTRY glTestFenceNV (GLuint); GL_API void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); GL_API void GL_APIENTRY glFinishFenceNV (GLuint); GL_API void GL_APIENTRY glSetFenceNV (GLuint, GLenum); #endif typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #endif /*------------------------------------------------------------------------* * QCOM extension functions *------------------------------------------------------------------------*/ /* GL_QCOM_driver_control */ #ifndef GL_QCOM_driver_control #define GL_QCOM_driver_control 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); GL_API void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); GL_API void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); GL_API void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); #endif typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); #endif /* GL_QCOM_extended_get */ #ifndef GL_QCOM_extended_get #define GL_QCOM_extended_get 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); GL_API void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); GL_API void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); GL_API void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); GL_API void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); GL_API void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); GL_API void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); GL_API void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); #endif typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); #endif /* GL_QCOM_extended_get2 */ #ifndef GL_QCOM_extended_get2 #define GL_QCOM_extended_get2 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); GL_API void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); GL_API GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); GL_API void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #endif typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #endif /* GL_QCOM_perfmon_global_mode */ #ifndef GL_QCOM_perfmon_global_mode #define GL_QCOM_perfmon_global_mode 1 #endif /* GL_QCOM_writeonly_rendering */ #ifndef GL_QCOM_writeonly_rendering #define GL_QCOM_writeonly_rendering 1 #endif /* GL_QCOM_tiled_rendering */ #ifndef GL_QCOM_tiled_rendering #define GL_QCOM_tiled_rendering 1 #ifdef GL_GLEXT_PROTOTYPES GL_API void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); GL_API void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); #endif typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); #endif #ifdef __cplusplus } #endif #endif /* __gles_glext_h_ */ tmpNnpnZF/thirdparty/khronos/GLES/gl.h0000664000175000017500000010303412543167424017147 0ustar chrischris#ifndef __gl_h_ #define __gl_h_ /* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */ #include #ifdef __cplusplus extern "C" { #endif /* * This document is licensed under the SGI Free Software B License Version * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . */ typedef void GLvoid; typedef char GLchar; typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef khronos_int8_t GLbyte; typedef short GLshort; typedef int GLint; typedef int GLsizei; typedef khronos_uint8_t GLubyte; typedef unsigned short GLushort; typedef unsigned int GLuint; typedef khronos_float_t GLfloat; typedef khronos_float_t GLclampf; typedef khronos_int32_t GLfixed; typedef khronos_int32_t GLclampx; typedef khronos_intptr_t GLintptr; typedef khronos_ssize_t GLsizeiptr; /*************************************************************/ /* OpenGL ES core versions */ #define GL_VERSION_ES_CM_1_0 1 #define GL_VERSION_ES_CL_1_0 1 #define GL_VERSION_ES_CM_1_1 1 #define GL_VERSION_ES_CL_1_1 1 /* ClearBufferMask */ #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 /* Boolean */ #define GL_FALSE 0 #define GL_TRUE 1 /* BeginMode */ #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 /* AlphaFunction */ #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 /* BlendingFactorDest */ #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 /* BlendingFactorSrc */ /* GL_ZERO */ /* GL_ONE */ #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 /* GL_SRC_ALPHA */ /* GL_ONE_MINUS_SRC_ALPHA */ /* GL_DST_ALPHA */ /* GL_ONE_MINUS_DST_ALPHA */ /* ClipPlaneName */ #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 /* ColorMaterialFace */ /* GL_FRONT_AND_BACK */ /* ColorMaterialParameter */ /* GL_AMBIENT_AND_DIFFUSE */ /* ColorPointerType */ /* GL_UNSIGNED_BYTE */ /* GL_FLOAT */ /* GL_FIXED */ /* CullFaceMode */ #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_FRONT_AND_BACK 0x0408 /* DepthFunction */ /* GL_NEVER */ /* GL_LESS */ /* GL_EQUAL */ /* GL_LEQUAL */ /* GL_GREATER */ /* GL_NOTEQUAL */ /* GL_GEQUAL */ /* GL_ALWAYS */ /* EnableCap */ #define GL_FOG 0x0B60 #define GL_LIGHTING 0x0B50 #define GL_TEXTURE_2D 0x0DE1 #define GL_CULL_FACE 0x0B44 #define GL_ALPHA_TEST 0x0BC0 #define GL_BLEND 0x0BE2 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_DITHER 0x0BD0 #define GL_STENCIL_TEST 0x0B90 #define GL_DEPTH_TEST 0x0B71 /* GL_LIGHT0 */ /* GL_LIGHT1 */ /* GL_LIGHT2 */ /* GL_LIGHT3 */ /* GL_LIGHT4 */ /* GL_LIGHT5 */ /* GL_LIGHT6 */ /* GL_LIGHT7 */ #define GL_POINT_SMOOTH 0x0B10 #define GL_LINE_SMOOTH 0x0B20 #define GL_SCISSOR_TEST 0x0C11 #define GL_COLOR_MATERIAL 0x0B57 #define GL_NORMALIZE 0x0BA1 #define GL_RESCALE_NORMAL 0x803A #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 /* ErrorCode */ #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 /* FogMode */ /* GL_LINEAR */ #define GL_EXP 0x0800 #define GL_EXP2 0x0801 /* FogParameter */ #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_FOG_MODE 0x0B65 #define GL_FOG_COLOR 0x0B66 /* FrontFaceDirection */ #define GL_CW 0x0900 #define GL_CCW 0x0901 /* GetPName */ #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_LINE_WIDTH 0x0B21 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_SHADE_MODEL 0x0B54 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_MATRIX_MODE 0x0BA0 #define GL_VIEWPORT 0x0BA2 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_ALPHA_TEST_FUNC 0x0BC1 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_SUBPIXEL_BITS 0x0D50 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB /* GetTextureParameter */ /* GL_TEXTURE_MAG_FILTER */ /* GL_TEXTURE_MIN_FILTER */ /* GL_TEXTURE_WRAP_S */ /* GL_TEXTURE_WRAP_T */ #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 /* HintMode */ #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* HintTarget */ #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_FOG_HINT 0x0C54 #define GL_GENERATE_MIPMAP_HINT 0x8192 /* LightModelParameter */ #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 /* LightParameter */ #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 /* DataType */ #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_FLOAT 0x1406 #define GL_FIXED 0x140C /* LogicOp */ #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F /* MaterialFace */ /* GL_FRONT_AND_BACK */ /* MaterialParameter */ #define GL_EMISSION 0x1600 #define GL_SHININESS 0x1601 #define GL_AMBIENT_AND_DIFFUSE 0x1602 /* GL_AMBIENT */ /* GL_DIFFUSE */ /* GL_SPECULAR */ /* MatrixMode */ #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 /* NormalPointerType */ /* GL_BYTE */ /* GL_SHORT */ /* GL_FLOAT */ /* GL_FIXED */ /* PixelFormat */ #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A /* PixelStoreParameter */ #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_ALIGNMENT 0x0D05 /* PixelType */ /* GL_UNSIGNED_BYTE */ #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 /* ShadingModel */ #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 /* StencilFunction */ /* GL_NEVER */ /* GL_LESS */ /* GL_EQUAL */ /* GL_LEQUAL */ /* GL_GREATER */ /* GL_NOTEQUAL */ /* GL_GEQUAL */ /* GL_ALWAYS */ /* StencilOp */ /* GL_ZERO */ #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 /* GL_INVERT */ /* StringName */ #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 /* TexCoordPointerType */ /* GL_SHORT */ /* GL_FLOAT */ /* GL_FIXED */ /* GL_BYTE */ /* TextureEnvMode */ #define GL_MODULATE 0x2100 #define GL_DECAL 0x2101 /* GL_BLEND */ #define GL_ADD 0x0104 /* GL_REPLACE */ /* TextureEnvParameter */ #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_ENV_COLOR 0x2201 /* TextureEnvTarget */ #define GL_TEXTURE_ENV 0x2300 /* TextureMagFilter */ #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 /* TextureMinFilter */ /* GL_NEAREST */ /* GL_LINEAR */ #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 /* TextureParameterName */ #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_GENERATE_MIPMAP 0x8191 /* TextureTarget */ /* GL_TEXTURE_2D */ /* TextureUnit */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 /* TextureWrapMode */ #define GL_REPEAT 0x2901 #define GL_CLAMP_TO_EDGE 0x812F /* VertexPointerType */ /* GL_SHORT */ /* GL_FLOAT */ /* GL_FIXED */ /* GL_BYTE */ /* LightName */ #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 /* Buffer Objects */ #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_STATIC_DRAW 0x88E4 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 /* Texture combine + dot3 */ #define GL_SUBTRACT 0x84E7 #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_ALPHA_SCALE 0x0D1C #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC1_ALPHA 0x8589 #define GL_SRC2_ALPHA 0x858A #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF /*------------------------------------------------------------------------* * required OES extension tokens *------------------------------------------------------------------------*/ /* OES_read_format */ #ifndef GL_OES_read_format #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* OES_point_size_array */ #ifndef GL_OES_point_size_array #define GL_POINT_SIZE_ARRAY_OES 0x8B9C #define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A #define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B #define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C #define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F #endif /* GL_OES_point_sprite */ #ifndef GL_OES_point_sprite #define GL_POINT_SPRITE_OES 0x8861 #define GL_COORD_REPLACE_OES 0x8862 #endif /*************************************************************/ /* Available only in Common profile */ GL_API void GL_APIENTRY glAlphaFunc (GLenum func, GLclampf ref); GL_API void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GL_API void GL_APIENTRY glClearDepthf (GLclampf depth); GL_API void GL_APIENTRY glClipPlanef (GLenum plane, const GLfloat *equation); GL_API void GL_APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GL_API void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); GL_API void GL_APIENTRY glFogf (GLenum pname, GLfloat param); GL_API void GL_APIENTRY glFogfv (GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); GL_API void GL_APIENTRY glGetClipPlanef (GLenum pname, GLfloat eqn[4]); GL_API void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glGetTexEnvfv (GLenum env, GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); GL_API void GL_APIENTRY glLightModelf (GLenum pname, GLfloat param); GL_API void GL_APIENTRY glLightModelfv (GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); GL_API void GL_APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glLineWidth (GLfloat width); GL_API void GL_APIENTRY glLoadMatrixf (const GLfloat *m); GL_API void GL_APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); GL_API void GL_APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glMultMatrixf (const GLfloat *m); GL_API void GL_APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GL_API void GL_APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); GL_API void GL_APIENTRY glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); GL_API void GL_APIENTRY glPointParameterf (GLenum pname, GLfloat param); GL_API void GL_APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glPointSize (GLfloat size); GL_API void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); GL_API void GL_APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GL_API void GL_APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); GL_API void GL_APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); GL_API void GL_APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); GL_API void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); GL_API void GL_APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); /* Available in both Common and Common-Lite profiles */ GL_API void GL_APIENTRY glActiveTexture (GLenum texture); GL_API void GL_APIENTRY glAlphaFuncx (GLenum func, GLclampx ref); GL_API void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); GL_API void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); GL_API void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); GL_API void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); GL_API void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); GL_API void GL_APIENTRY glClear (GLbitfield mask); GL_API void GL_APIENTRY glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); GL_API void GL_APIENTRY glClearDepthx (GLclampx depth); GL_API void GL_APIENTRY glClearStencil (GLint s); GL_API void GL_APIENTRY glClientActiveTexture (GLenum texture); GL_API void GL_APIENTRY glClipPlanex (GLenum plane, const GLfixed *equation); GL_API void GL_APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); GL_API void GL_APIENTRY glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GL_API void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GL_API void GL_APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GL_API void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); GL_API void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); GL_API void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GL_API void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_API void GL_APIENTRY glCullFace (GLenum mode); GL_API void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GL_API void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); GL_API void GL_APIENTRY glDepthFunc (GLenum func); GL_API void GL_APIENTRY glDepthMask (GLboolean flag); GL_API void GL_APIENTRY glDepthRangex (GLclampx zNear, GLclampx zFar); GL_API void GL_APIENTRY glDisable (GLenum cap); GL_API void GL_APIENTRY glDisableClientState (GLenum array); GL_API void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); GL_API void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); GL_API void GL_APIENTRY glEnable (GLenum cap); GL_API void GL_APIENTRY glEnableClientState (GLenum array); GL_API void GL_APIENTRY glFinish (void); GL_API void GL_APIENTRY glFlush (void); GL_API void GL_APIENTRY glFogx (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glFogxv (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glFrontFace (GLenum mode); GL_API void GL_APIENTRY glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); GL_API void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *params); GL_API void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GL_API void GL_APIENTRY glGetClipPlanex (GLenum pname, GLfixed eqn[4]); GL_API void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GL_API void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures); GL_API GLenum GL_APIENTRY glGetError (void); GL_API void GL_APIENTRY glGetFixedv (GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *params); GL_API void GL_APIENTRY glGetLightxv (GLenum light, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetMaterialxv (GLenum face, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetPointerv (GLenum pname, GLvoid **params); GL_API const GLubyte * GL_APIENTRY glGetString (GLenum name); GL_API void GL_APIENTRY glGetTexEnviv (GLenum env, GLenum pname, GLint *params); GL_API void GL_APIENTRY glGetTexEnvxv (GLenum env, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); GL_API void GL_APIENTRY glGetTexParameterxv (GLenum target, GLenum pname, GLfixed *params); GL_API void GL_APIENTRY glHint (GLenum target, GLenum mode); GL_API GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); GL_API GLboolean GL_APIENTRY glIsEnabled (GLenum cap); GL_API GLboolean GL_APIENTRY glIsTexture (GLuint texture); GL_API void GL_APIENTRY glLightModelx (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glLightModelxv (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glLightx (GLenum light, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glLightxv (GLenum light, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glLineWidthx (GLfixed width); GL_API void GL_APIENTRY glLoadIdentity (void); GL_API void GL_APIENTRY glLoadMatrixx (const GLfixed *m); GL_API void GL_APIENTRY glLogicOp (GLenum opcode); GL_API void GL_APIENTRY glMaterialx (GLenum face, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glMaterialxv (GLenum face, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glMatrixMode (GLenum mode); GL_API void GL_APIENTRY glMultMatrixx (const GLfixed *m); GL_API void GL_APIENTRY glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GL_API void GL_APIENTRY glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz); GL_API void GL_APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); GL_API void GL_APIENTRY glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); GL_API void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); GL_API void GL_APIENTRY glPointParameterx (GLenum pname, GLfixed param); GL_API void GL_APIENTRY glPointParameterxv (GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glPointSizex (GLfixed size); GL_API void GL_APIENTRY glPolygonOffsetx (GLfixed factor, GLfixed units); GL_API void GL_APIENTRY glPopMatrix (void); GL_API void GL_APIENTRY glPushMatrix (void); GL_API void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); GL_API void GL_APIENTRY glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GL_API void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); GL_API void GL_APIENTRY glSampleCoveragex (GLclampx value, GLboolean invert); GL_API void GL_APIENTRY glScalex (GLfixed x, GLfixed y, GLfixed z); GL_API void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GL_API void GL_APIENTRY glShadeModel (GLenum mode); GL_API void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); GL_API void GL_APIENTRY glStencilMask (GLuint mask); GL_API void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); GL_API void GL_APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GL_API void GL_APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); GL_API void GL_APIENTRY glTexEnvx (GLenum target, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); GL_API void GL_APIENTRY glTexEnvxv (GLenum target, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GL_API void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); GL_API void GL_APIENTRY glTexParameterx (GLenum target, GLenum pname, GLfixed param); GL_API void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); GL_API void GL_APIENTRY glTexParameterxv (GLenum target, GLenum pname, const GLfixed *params); GL_API void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); GL_API void GL_APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z); GL_API void GL_APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GL_API void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); /*------------------------------------------------------------------------* * Required OES extension functions *------------------------------------------------------------------------*/ /* GL_OES_read_format */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #endif /* GL_OES_point_size_array */ #ifndef GL_OES_point_size_array #define GL_OES_point_size_array 1 GL_API void GL_APIENTRY glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_OES_point_sprite */ #ifndef GL_OES_point_sprite #define GL_OES_point_sprite 1 #endif #ifdef __cplusplus } #endif #endif /* __gl_h_ */ tmpNnpnZF/common/0000775000175000017500000000000012543167424013254 5ustar chrischristmpNnpnZF/common/trace_callset.cpp0000664000175000017500000001463412543167424016575 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include #include using namespace trace; // Parser class for call sets class CallSetParser { CallSet &set; protected: char lookahead; CallSetParser(CallSet &_set) : set(_set), lookahead(0) {} public: void parse() { skipWhiteSpace(); while (lookahead) { assert(!isSpace()); parseRange(); // skip any comma isOperator(','); } } private: void parseRange() { CallNo start = std::numeric_limits::min(); CallNo stop = std::numeric_limits::max(); CallNo step = 1; CallFlags freq = FREQUENCY_ALL; if (isAlpha()) { freq = parseFrequency(); } else { if (isOperator('*')) { // no-change } else { start = parseCallNo(); if (isOperator('-')) { if (isDigit()) { stop = parseCallNo(); } else { // no-change } } else { stop = start; } } if (isOperator('/')) { if (isDigit()) { step = parseCallNo(); } else { freq = parseFrequency(); } } } set.addRange(CallRange(start, stop, step, freq)); } // match and consume an operator bool isOperator(char c) { if (lookahead == c) { consume(); skipWhiteSpace(); return true; } else { return false; } } CallNo parseCallNo() { CallNo number = 0; if (isDigit()) { do { CallNo digit = consume() - '0'; number = number * 10 + digit; } while (isDigit()); } else { std::cerr << "error: expected digit, found '" << lookahead << "'\n"; exit(0); } skipWhiteSpace(); return number; } CallFlags parseFrequency() { std::string freq; if (isAlpha()) { do { freq.push_back(consume()); } while (isAlpha()); } else { std::cerr << "error: expected frequency, found '" << lookahead << "'\n"; exit(0); } skipWhiteSpace(); if (freq == "frame") { return FREQUENCY_FRAME; } else if (freq == "rendertarget" || freq == "fbo") { return FREQUENCY_RENDERTARGET; } else if (freq == "render" || freq == "draw") { return FREQUENCY_RENDER; } else { std::cerr << "error: expected frequency, found '" << freq << "'\n"; exit(0); return FREQUENCY_NONE; } } // match lookahead with a digit (does not consume) bool isDigit() const { return lookahead >= '0' && lookahead <= '9'; } bool isAlpha() const { return lookahead >= 'a' && lookahead <= 'z'; } void skipWhiteSpace() { while (isSpace()) { consume(); } } bool isSpace() const { return lookahead == ' ' || lookahead == '\t' || lookahead == '\r' || lookahead == '\n'; } virtual char consume() = 0; }; class StringCallSetParser : public CallSetParser { const char *buf; public: StringCallSetParser(CallSet &_set, const char *_buf) : CallSetParser(_set), buf(_buf) { lookahead = *buf; } char consume() { char c = lookahead; if (lookahead) { ++buf; lookahead = *buf; } return c; } }; class FileCallSetParser : public CallSetParser { std::ifstream stream; public: FileCallSetParser(CallSet &_set, const char *filename) : CallSetParser(_set) { stream.open(filename); if (!stream.is_open()) { std::cerr << "error: failed to open \"" << filename << "\"\n"; exit(1); } stream.get(lookahead); } char consume() { char c = lookahead; if (stream.eof()) { lookahead = 0; } else { stream.get(lookahead); } return c; } }; void CallSet::merge(const char *string) { if (firstmerge) { if (!empty()) { *this = CallSet(); } firstmerge = false; } if (*string == '@') { FileCallSetParser parser(*this, &string[1]); parser.parse(); } else { StringCallSetParser parser(*this, string); parser.parse(); } } CallSet::CallSet(CallFlags freq): limits(std::numeric_limits::min(), std::numeric_limits::max()), firstmerge(true) { if (freq != FREQUENCY_NONE) { CallNo start = std::numeric_limits::min(); CallNo stop = std::numeric_limits::max(); CallNo step = 1; addRange(CallRange(start, stop, step, freq)); assert(!empty()); } } tmpNnpnZF/common/trace_loader.hpp0000664000175000017500000000225412543167424016414 0ustar chrischris#pragma once #include "trace_file.hpp" #include "trace_parser.hpp" #include #include #include #include namespace trace { class Frame; class Loader { public: enum FrameMarker { FrameMarker_SwapBuffers, FrameMarker_Flush, FrameMarker_Finish, FrameMarker_Clear }; public: Loader(); ~Loader(); Loader::FrameMarker frameMarker() const; void setFrameMarker(Loader::FrameMarker marker); unsigned numberOfFrames() const; unsigned numberOfCallsInFrame(unsigned frameIdx) const; bool open(const char *filename); void close(); std::vector frame(unsigned idx); private: struct FrameBookmark { FrameBookmark() : numberOfCalls(0) {} FrameBookmark(const ParseBookmark &s) : start(s), numberOfCalls(0) {} ParseBookmark start; unsigned numberOfCalls; }; bool isCallAFrameMarker(const trace::Call *call) const; private: trace::Parser m_parser; FrameMarker m_frameMarker; typedef std::map FrameBookmarks; FrameBookmarks m_frameBookmarks; }; } tmpNnpnZF/common/os_version.hpp0000664000175000017500000000434412543167424016160 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #ifdef _WIN32 #include /** * VersionHelpers.h is not yet widely available (only available on certain MSVC * and Windows SDK versions), so just define our own helpers. * * See http://msdn.microsoft.com/en-gb/library/windows/desktop/ms725491.aspx */ static inline bool IsWindows8OrGreater() { OSVERSIONINFOEXW osvi; ZeroMemory(&osvi, sizeof osvi); osvi.dwOSVersionInfoSize = sizeof osvi; osvi.dwMajorVersion = 6; osvi.dwMinorVersion = 2; osvi.wServicePackMajor = 0; DWORDLONG dwlConditionMask = 0; VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask); } #endif /* _WIN32 */ tmpNnpnZF/common/trace_file_read.cpp0000664000175000017500000000430712543167424017054 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "os.hpp" #include "trace_file.hpp" using namespace trace; File * File::createForRead(const char *filename) { std::ifstream stream(filename, std::ifstream::binary | std::ifstream::in); if (!stream.is_open()) { os::log("error: failed to open %s\n", filename); return NULL; } unsigned char byte1, byte2; stream >> byte1; stream >> byte2; stream.close(); File *file; if (byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2) { file = File::createSnappy(); } else if (byte1 == 0x1f && byte2 == 0x8b) { file = File::createZLib(); } else { os::log("error: %s: unkwnown compression\n", filename); return NULL; } if (!file) { return NULL; } if (!file->open(filename, File::Read)) { os::log("error: could not open %s for reading\n", filename); delete file; return NULL; } return file; } tmpNnpnZF/common/ubjson.hpp0000664000175000017500000000546412543167424015276 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include namespace ubjson { // http://ubjson.org/type-reference/ enum Marker { MARKER_EOF = -1, MARKER_NULL = 'Z', MARKER_NOOP = 'N', MARKER_TRUE = 'T', MARKER_FALSE = 'F', MARKER_INT8 = 'i', MARKER_UINT8 = 'U', MARKER_INT16 = 'I', MARKER_INT32 = 'l', MARKER_INT64 = 'L', MARKER_FLOAT32 = 'd', MARKER_FLOAT64 = 'D', MARKER_HIGH_PRECISION = 'H', MARKER_CHAR = 'C', MARKER_STRING = 'S', MARKER_ARRAY_BEGIN = '[', MARKER_ARRAY_END = ']', MARKER_OBJECT_BEGIN = '{', MARKER_OBJECT_END = '}', MARKER_TYPE = '$', MARKER_COUNT = '#', }; inline uint16_t bigEndian16(uint16_t x) { #ifdef HAVE_BIGENDIAN return x; #elif defined(_MSC_VER) return _byteswap_ushort(x); #elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 return __builtin_bswap16(x); #else return (x << 8) | (x >> 8); #endif } inline uint32_t bigEndian32(uint32_t x) { #ifdef HAVE_BIGENDIAN return x; #elif defined(_MSC_VER) return _byteswap_ulong(x); #else return __builtin_bswap32(x); #endif } inline uint64_t bigEndian64(uint64_t x) { #ifdef HAVE_BIGENDIAN return x; #elif defined(_MSC_VER) return _byteswap_uint64(x); #else return __builtin_bswap64(x); #endif } union Float32 { float f; uint32_t i; }; union Float64 { double f; uint64_t i; }; } tmpNnpnZF/common/trace_writer.hpp0000664000175000017500000000720512543167424016463 0ustar chrischris/************************************************************************** * * Copyright 2007-2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Trace writing functions. */ #pragma once #include #include #include "trace_model.hpp" namespace trace { class File; class Writer { protected: File *m_file; unsigned call_no; std::vector functions; std::vector structs; std::vector enums; std::vector bitmasks; std::vector frames; public: Writer(); ~Writer(); bool open(const char *filename); void close(void); unsigned beginEnter(const FunctionSig *sig, unsigned thread_id); void endEnter(void); void beginLeave(unsigned call); void endLeave(void); void beginArg(unsigned index); inline void endArg(void) {} void beginReturn(void); inline void endReturn(void) {} void beginBacktrace(unsigned num_frames); void writeStackFrame(const RawStackFrame *frame); inline void endBacktrace(void) {} void beginArray(size_t length); inline void endArray(void) {} inline void beginElement(void) {} inline void endElement(void) {} void beginStruct(const StructSig *sig); inline void endStruct(void) {} void beginRepr(void); inline void endRepr(void) {} void writeBool(bool value); void writeSInt(signed long long value); void writeUInt(unsigned long long value); void writeFloat(float value); void writeDouble(double value); void writeString(const char *str); void writeString(const char *str, size_t size); void writeWString(const wchar_t *str); void writeWString(const wchar_t *str, size_t size); void writeBlob(const void *data, size_t size); void writeEnum(const EnumSig *sig, signed long long value); void writeBitmask(const BitmaskSig *sig, unsigned long long value); void writeNull(void); void writePointer(unsigned long long addr); void writeCall(Call *call); protected: void inline _write(const void *sBuffer, size_t dwBytesToWrite); void inline _writeByte(char c); void inline _writeUInt(unsigned long long value); void inline _writeFloat(float value); void inline _writeDouble(double value); void inline _writeString(const char *str); }; } /* namespace trace */ tmpNnpnZF/common/trace_file_zlib.cpp0000664000175000017500000001022512543167424017075 0ustar chrischris/************************************************************************** * * Copyright 2011 Zack Rusin * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "trace_file.hpp" #include #include #include #include #ifdef _WIN32 #include #else #include #include #endif #include "os.hpp" #include using namespace trace; class ZLibFile : public File { public: ZLibFile(const std::string &filename = std::string(), File::Mode mode = File::Read); virtual ~ZLibFile(); virtual bool supportsOffsets() const; virtual File::Offset currentOffset(); protected: virtual bool rawOpen(const std::string &filename, File::Mode mode); virtual bool rawWrite(const void *buffer, size_t length); virtual size_t rawRead(void *buffer, size_t length); virtual int rawGetc(); virtual void rawClose(); virtual void rawFlush(); virtual bool rawSkip(size_t length); virtual int rawPercentRead(); private: int fd; gzFile m_gzFile; double m_endOffset; }; ZLibFile::ZLibFile(const std::string &filename, File::Mode mode) : File(filename, mode), m_gzFile(NULL) { } ZLibFile::~ZLibFile() { close(); } bool ZLibFile::rawOpen(const std::string &filename, File::Mode mode) { int flags; const char *fmode; if (mode == File::Write) { flags = O_WRONLY | O_CREAT | O_TRUNC; fmode = "wb"; } else { flags = O_RDONLY; fmode = "rb"; } #ifdef O_BINARY flags |= O_BINARY; #endif #ifdef O_LARGEFILE flags |= O_LARGEFILE; #endif #ifdef _WIN32 fd = _open(filename.c_str(), flags, 0666); #else fd = ::open(filename.c_str(), flags, 0666); #endif if (fd < 0) { return false; } m_gzFile = gzdopen(fd, fmode); if (mode == File::Read && m_gzFile) { //XXX: unfortunately zlib doesn't support // SEEK_END or we could've done: //m_endOffset = gzseek(m_gzFile, 0, SEEK_END); //gzrewind(m_gzFile); off_t loc = lseek(fd, 0, SEEK_CUR); m_endOffset = lseek(fd, 0, SEEK_END); lseek(fd, loc, SEEK_SET); } return m_gzFile != NULL; } bool ZLibFile::rawWrite(const void *buffer, size_t length) { return gzwrite(m_gzFile, buffer, unsigned(length)) != -1; } size_t ZLibFile::rawRead(void *buffer, size_t length) { int ret = gzread(m_gzFile, buffer, unsigned(length)); return ret < 0 ? 0 : ret; } int ZLibFile::rawGetc() { return gzgetc(m_gzFile); } void ZLibFile::rawClose() { if (m_gzFile) { gzclose(m_gzFile); m_gzFile = NULL; } } void ZLibFile::rawFlush() { gzflush(m_gzFile, Z_SYNC_FLUSH); } File::Offset ZLibFile::currentOffset() { return File::Offset(gztell(m_gzFile)); } bool ZLibFile::supportsOffsets() const { return false; } bool ZLibFile::rawSkip(size_t) { return false; } int ZLibFile::rawPercentRead() { return int(100 * (lseek(fd, 0, SEEK_CUR) / m_endOffset)); } File * File::createZLib(void) { return new ZLibFile; } tmpNnpnZF/common/trace_parser_flags.cpp0000664000175000017500000014500012543167424017606 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /** * Label functions based on their name. */ #include "trace_lookup.hpp" #include "trace_parser.hpp" using namespace trace; /** * Shortcut for SwapBuffers, which terminate and swap bound render buffer. */ #define CALL_FLAG_SWAPBUFFERS (CALL_FLAG_END_FRAME | CALL_FLAG_SWAP_RENDERTARGET) /** * Default call flags. */ const CallFlags defaultCallFlags = 0; /** * Call flags lookup table. */ const Entry callFlagTable[] = { { "CGLFlushDrawable", CALL_FLAG_END_FRAME }, { "CGLGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "D3DPERF_BeginEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH }, { "D3DPERF_EndEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP }, { "D3DPERF_SetMarker", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER }, { "ID3D10Device1::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "ID3D10Device1::Draw", CALL_FLAG_RENDER }, { "ID3D10Device1::DrawAuto", CALL_FLAG_RENDER }, { "ID3D10Device1::DrawIndexed", CALL_FLAG_RENDER }, { "ID3D10Device1::DrawIndexedInstanced", CALL_FLAG_RENDER }, { "ID3D10Device1::DrawInstanced", CALL_FLAG_RENDER }, { "ID3D10Device1::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3D10Device::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "ID3D10Device::Draw", CALL_FLAG_RENDER }, { "ID3D10Device::DrawAuto", CALL_FLAG_RENDER }, { "ID3D10Device::DrawIndexed", CALL_FLAG_RENDER }, { "ID3D10Device::DrawIndexedInstanced", CALL_FLAG_RENDER }, { "ID3D10Device::DrawInstanced", CALL_FLAG_RENDER }, { "ID3D10Device::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3D11Device::CheckMultisampleQualityLevels", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "ID3D11DeviceContext1::Draw", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawAuto", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawIndexed", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawIndexedInstanced", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawIndexedInstancedIndirect", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawInstanced", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::DrawInstancedIndirect", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::ExecuteCommandList", CALL_FLAG_RENDER }, { "ID3D11DeviceContext1::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3D11DeviceContext1::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3D11DeviceContext::Draw", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawAuto", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawIndexed", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawIndexedInstanced", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawIndexedInstancedIndirect", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawInstanced", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::DrawInstancedIndirect", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::ExecuteCommandList", CALL_FLAG_RENDER }, { "ID3D11DeviceContext::OMSetRenderTargets", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews", CALL_FLAG_SWAP_RENDERTARGET }, { "ID3DUserDefinedAnnotation::BeginEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH }, { "ID3DUserDefinedAnnotation::EndEvent", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP }, { "ID3DUserDefinedAnnotation::SetMarker", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER }, { "IDXGIDecodeSwapChain::PresentBuffer", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChain1::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChain1::Present1", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChain2::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChain2::Present1", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChain::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDXGISwapChainDWM::Present", CALL_FLAG_END_FRAME /* CALL_FLAG_SWAPBUFFERS */ }, { "IDirect3D8::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D8::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D8::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D8::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9Ex::CheckDeviceFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9Ex::EnumAdapterModes", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9Ex::GetAdapterModeCount", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3D9Ex::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3DDevice2::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice2::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawIndexedPrimitiveStrided", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawIndexedPrimitiveVB", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawPrimitiveStrided", CALL_FLAG_RENDER }, { "IDirect3DDevice3::DrawPrimitiveVB", CALL_FLAG_RENDER }, { "IDirect3DDevice7::Clear", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawIndexedPrimitiveStrided", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawIndexedPrimitiveVB", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawPrimitiveStrided", CALL_FLAG_RENDER }, { "IDirect3DDevice7::DrawPrimitiveVB", CALL_FLAG_RENDER }, { "IDirect3DDevice8::Clear", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawRectPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice8::DrawTriPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice8::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3DDevice8::Present", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DDevice8::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET }, { "IDirect3DDevice9::Clear", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawRectPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice9::DrawTriPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice9::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3DDevice9::GetRenderTargetData", CALL_FLAG_END_FRAME }, { "IDirect3DDevice9::Present", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DDevice9::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET }, { "IDirect3DDevice9Ex::Clear", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawIndexedPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawIndexedPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawPrimitive", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawPrimitiveUP", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawRectPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::DrawTriPatch", CALL_FLAG_RENDER }, { "IDirect3DDevice9Ex::GetDeviceCaps", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "IDirect3DDevice9Ex::GetRenderTargetData", CALL_FLAG_END_FRAME }, { "IDirect3DDevice9Ex::Present", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DDevice9Ex::PresentEx", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DDevice9Ex::SetRenderTarget", CALL_FLAG_SWAP_RENDERTARGET }, { "IDirect3DSwapChain9::Present", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DSwapChain9Ex::Present", CALL_FLAG_SWAPBUFFERS }, { "IDirect3DViewport2::Clear", CALL_FLAG_RENDER }, { "IDirect3DViewport3::Clear", CALL_FLAG_RENDER }, { "IDirect3DViewport3::Clear2", CALL_FLAG_RENDER }, { "IDirect3DViewport::Clear", CALL_FLAG_RENDER }, { "eglGetConfigAttrib", CALL_FLAG_VERBOSE }, { "eglGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "eglQueryString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "eglSwapBuffers", CALL_FLAG_SWAPBUFFERS }, { "glAreProgramsResidentNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glAreTexturesResident", CALL_FLAG_NO_SIDE_EFFECTS }, { "glAreTexturesResidentEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glBindFramebuffer", CALL_FLAG_SWAP_RENDERTARGET }, { "glBindFramebufferEXT", CALL_FLAG_SWAP_RENDERTARGET }, { "glBindFramebufferOES", CALL_FLAG_SWAP_RENDERTARGET }, { "glBlitFramebuffer", CALL_FLAG_RENDER }, { "glBlitFramebufferANGLE", CALL_FLAG_RENDER }, { "glBlitFramebufferEXT", CALL_FLAG_RENDER }, { "glBlitFramebufferNV", CALL_FLAG_RENDER }, { "glBufferRegionEnabled", CALL_FLAG_NO_SIDE_EFFECTS }, { "glCallList", CALL_FLAG_RENDER }, { "glCallLists", CALL_FLAG_RENDER }, { "glClear", CALL_FLAG_RENDER }, { "glDebugMessageControl", CALL_FLAG_NO_SIDE_EFFECTS }, { "glDebugMessageControlARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glDebugMessageEnableAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glDebugMessageInsert", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER }, { "glDebugMessageInsertAMD", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER }, { "glDebugMessageInsertARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER }, { "glDrawArrays", CALL_FLAG_RENDER }, { "glDrawArraysEXT", CALL_FLAG_RENDER }, { "glDrawArraysIndirect", CALL_FLAG_RENDER }, { "glDrawArraysInstanced", CALL_FLAG_RENDER }, { "glDrawArraysInstancedANGLE", CALL_FLAG_RENDER }, { "glDrawArraysInstancedARB", CALL_FLAG_RENDER }, { "glDrawArraysInstancedBaseInstance", CALL_FLAG_RENDER }, { "glDrawArraysInstancedEXT", CALL_FLAG_RENDER }, { "glDrawElementArrayAPPLE", CALL_FLAG_RENDER }, { "glDrawElementArrayATI", CALL_FLAG_RENDER }, { "glDrawElements", CALL_FLAG_RENDER }, { "glDrawElementsBaseVertex", CALL_FLAG_RENDER }, { "glDrawElementsIndirect", CALL_FLAG_RENDER }, { "glDrawElementsInstanced", CALL_FLAG_RENDER }, { "glDrawElementsInstancedANGLE", CALL_FLAG_RENDER }, { "glDrawElementsInstancedARB", CALL_FLAG_RENDER }, { "glDrawElementsInstancedBaseInstance", CALL_FLAG_RENDER }, { "glDrawElementsInstancedBaseVertex", CALL_FLAG_RENDER }, { "glDrawElementsInstancedBaseVertexBaseInstance", CALL_FLAG_RENDER }, { "glDrawElementsInstancedEXT", CALL_FLAG_RENDER }, { "glDrawMeshArraysSUN", CALL_FLAG_RENDER }, { "glDrawPixels", CALL_FLAG_RENDER }, { "glDrawRangeElementArrayAPPLE", CALL_FLAG_RENDER }, { "glDrawRangeElementArrayATI", CALL_FLAG_RENDER }, { "glDrawRangeElements", CALL_FLAG_RENDER }, { "glDrawRangeElementsBaseVertex", CALL_FLAG_RENDER }, { "glDrawRangeElementsEXT", CALL_FLAG_RENDER }, { "glDrawTransformFeedback", CALL_FLAG_RENDER }, { "glDrawTransformFeedbackInstanced", CALL_FLAG_RENDER }, { "glDrawTransformFeedbackNV", CALL_FLAG_RENDER }, { "glDrawTransformFeedbackStream", CALL_FLAG_RENDER }, { "glDrawTransformFeedbackStreamInstanced", CALL_FLAG_RENDER }, { "glEnd", CALL_FLAG_RENDER }, { "glEvalMesh1", CALL_FLAG_RENDER }, { "glEvalMesh2", CALL_FLAG_RENDER }, { "glFrameTerminatorGREMEDY", CALL_FLAG_END_FRAME }, { "glGetActiveAtomicCounterBufferiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveAttrib", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveAttribARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveSubroutineName", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveSubroutineUniformName", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveSubroutineUniformiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniform", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniformARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniformBlockName", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniformBlockiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniformName", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveUniformsiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetActiveVaryingNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetAttachedObjectsARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetAttachedShaders", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBooleanIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBooleani_v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBooleanv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferParameteri64v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferParameterivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferParameterui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferPointerv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferPointervARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferSubData", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetBufferSubDataARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetClipPlane", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTable", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameterfvSGI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableParameterivSGI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetColorTableSGI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetCombinerInputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetCombinerInputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetCombinerOutputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetCombinerOutputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetCombinerStageParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetConvolutionFilterEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetConvolutionParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetConvolutionParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetConvolutionParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetConvolutionParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetDetailTexFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetDoubleIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetDoublei_v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetDoublev", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetError", CALL_FLAG_NO_SIDE_EFFECTS }, // verbose will be set later for GL_NO_ERROR { "glGetFenceivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFinalCombinerInputParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFinalCombinerInputParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFloatIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFloati_v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFloatv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFogFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFragDataIndex", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFragmentLightfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFragmentLightivSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFragmentMaterialfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFragmentMaterialivSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFramebufferAttachmentParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFramebufferAttachmentParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFramebufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetFramebufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetGraphicsResetStatusARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHandleARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHistogramEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHistogramParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHistogramParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHistogramParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetHistogramParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetImageTransformParameterfvHP", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetImageTransformParameterivHP", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInfoLogARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInstrumentsSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInteger64i_v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInteger64v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetIntegerIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetIntegeri_v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetIntegerui64i_vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetIntegerui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetIntegerv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInternalformati64v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInternalformativ", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInvariantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInvariantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetInvariantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetLightfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetLightiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetListParameterfvSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetListParameterivSGIX", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetLocalConstantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetLocalConstantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetLocalConstantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapAttribParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapAttribParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapControlPointsNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapParameterivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapdv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMapiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMaterialfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMaterialiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMinmaxEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMinmaxParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMinmaxParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMinmaxParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMinmaxParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexEnvfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexEnvivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexGendvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexGenfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexGenivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexLevelParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexLevelParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultiTexParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultisamplefv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetMultisamplefvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedBufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedBufferParameterui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedBufferPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedBufferSubDataEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedFramebufferAttachmentParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedFramebufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramLocalParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramLocalParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramLocalParameterdvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramLocalParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramStringEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedProgramivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedRenderbufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedStringARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetNamedStringivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectBufferfvATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectBufferivATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectLabel", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectParameterivAPPLE", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectParameterivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetObjectPtrLabel", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetOcclusionQueryivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetOcclusionQueryuivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorCounterDataAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorCounterInfoAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorCounterStringAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorCountersAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorGroupStringAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPerfMonitorGroupsAMD", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPixelTexGenParameterfvSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPixelTexGenParameterivSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPointerIndexedvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPointerv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramBinary", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramEnvParameterIivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramEnvParameterIuivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramEnvParameterdvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramEnvParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramInfoLog", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramInterfaceiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramLocalParameterIivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramLocalParameterIuivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramLocalParameterdvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramLocalParameterfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramNamedParameterdvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramNamedParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramParameterdvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramParameterfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramPipelineInfoLog", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramPipelineiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramResourceIndex", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramResourceLocation", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramResourceLocationIndex", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramResourceName", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramResourceiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramStageiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramStringARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramStringNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramSubroutineParameteruivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetProgramivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryIndexediv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjecti64v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjecti64vEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectui64v", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectui64vEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryObjectuivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetQueryivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetRenderbufferParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetRenderbufferParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSamplerParameterIiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSamplerParameterIuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSamplerParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSamplerParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSeparableFilterEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetShaderInfoLog", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetShaderPrecisionFormat", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetShaderSource", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetShaderSourceARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetShaderiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetSharpenTexFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glGetStringi", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glGetSynciv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexBumpParameterfvATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexBumpParameterivATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexEnvfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexEnviv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexFilterFuncSGIS", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexGendv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexGenfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexGeniv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexLevelParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexLevelParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterIiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterIuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterPointervAPPLE", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameterfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTexParameteriv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureLevelParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureLevelParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureParameterIivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureParameterIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureParameterfvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTextureParameterivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTrackMatrixivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTransformFeedbackVarying", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTransformFeedbackVaryingEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetTransformFeedbackVaryingNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformIndices", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformSubroutineuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformdv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformi64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetUniformuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantBooleanvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantFloatvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVariantPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexArrayIntegeri_vEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexArrayIntegervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexArrayPointeri_vEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexArrayPointervEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribArrayObjectfvATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribArrayObjectivATI", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribIiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribIivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribIuiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribIuivEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribLdv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribLdvEXT", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribLi64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribLui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribPointerv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribPointervARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribPointervNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribdv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribdvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribdvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribfv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribiv", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVertexAttribivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoCaptureStreamdvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoCaptureStreamfvNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoCaptureStreamivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoCaptureivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoi64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideoui64vNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetVideouivNV", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnMapdvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnMapfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnMapivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnUniformdvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnUniformfvARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnUniformivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glGetnUniformuivARB", CALL_FLAG_NO_SIDE_EFFECTS }, { "glInsertEventMarkerEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_MARKER }, { "glIsAsyncMarkerSGIX", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsBuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsBufferARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsBufferResidentNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsEnabled", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsEnabledIndexedEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsEnabledi", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsFenceAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsFenceNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsFramebuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsFramebufferEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsList", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsNameAMD", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsNamedBufferResidentNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsNamedStringARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsObjectBufferATI", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsOcclusionQueryNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsProgram", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsProgramARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsProgramNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsProgramPipeline", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsQuery", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsQueryARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsRenderbuffer", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsRenderbufferEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsSampler", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsShader", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsSync", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsTexture", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsTextureEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsTransformFeedback", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsTransformFeedbackNV", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsVariantEnabledEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsVertexArray", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsVertexArrayAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glIsVertexAttribEnabledAPPLE", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glMultiDrawArrays", CALL_FLAG_RENDER }, { "glMultiDrawArraysEXT", CALL_FLAG_RENDER }, { "glMultiDrawArraysIndirect", CALL_FLAG_RENDER }, { "glMultiDrawArraysIndirectAMD", CALL_FLAG_RENDER }, { "glMultiDrawArraysIndirectBindlessNV", CALL_FLAG_RENDER }, { "glMultiDrawArraysIndirectCountARB", CALL_FLAG_RENDER }, { "glMultiDrawElementArrayAPPLE", CALL_FLAG_RENDER }, { "glMultiDrawElements", CALL_FLAG_RENDER }, { "glMultiDrawElementsBaseVertex", CALL_FLAG_RENDER }, { "glMultiDrawElementsEXT", CALL_FLAG_RENDER }, { "glMultiDrawElementsIndirect", CALL_FLAG_RENDER }, { "glMultiDrawElementsIndirectAMD", CALL_FLAG_RENDER }, { "glMultiDrawElementsIndirectBindlessNV", CALL_FLAG_RENDER }, { "glMultiDrawElementsIndirectCountARB", CALL_FLAG_RENDER }, { "glMultiDrawRangeElementArrayAPPLE", CALL_FLAG_RENDER }, { "glMultiModeDrawArraysIBM", CALL_FLAG_RENDER }, { "glMultiModeDrawElementsIBM", CALL_FLAG_RENDER }, { "glObjectLabel", CALL_FLAG_NO_SIDE_EFFECTS }, { "glObjectPtrLabel", CALL_FLAG_NO_SIDE_EFFECTS }, { "glPopDebugGroup", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP}, { "glPopGroupMarkerEXT", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_POP}, { "glPushDebugGroup", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH }, { "glPushGroupMarkerEXT", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER | CALL_FLAG_MARKER_PUSH }, { "glRectd", CALL_FLAG_RENDER }, { "glRectdv", CALL_FLAG_RENDER }, { "glRectf", CALL_FLAG_RENDER }, { "glRectfv", CALL_FLAG_RENDER }, { "glRecti", CALL_FLAG_RENDER }, { "glRectiv", CALL_FLAG_RENDER }, { "glRects", CALL_FLAG_RENDER }, { "glRectsv", CALL_FLAG_RENDER }, { "glStringMarkerGREMEDY", /* CALL_FLAG_NO_SIDE_EFFECTS | */ CALL_FLAG_MARKER }, { "glXGetClientString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetConfig", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentDisplay", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentDisplayEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentDrawable", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentReadDrawable", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetCurrentReadDrawableSGI", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetFBConfigAttrib", CALL_FLAG_VERBOSE }, { "glXGetFBConfigAttribSGIX", CALL_FLAG_VERBOSE }, { "glXGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXGetProcAddressARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXIsDirect", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXQueryExtension", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXQueryExtensionsString", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXQueryVersion", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "glXSwapBuffers", CALL_FLAG_SWAPBUFFERS }, { "wglDescribePixelFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetCurrentContext", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetCurrentDC", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetDefaultProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetExtensionsStringARB", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetExtensionsStringEXT", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetPixelFormat", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglGetPixelFormatAttribivARB", CALL_FLAG_VERBOSE }, { "wglGetPixelFormatAttribivEXT", CALL_FLAG_VERBOSE }, { "wglGetProcAddress", CALL_FLAG_NO_SIDE_EFFECTS | CALL_FLAG_VERBOSE }, { "wglSwapBuffers", CALL_FLAG_SWAPBUFFERS }, { "wglSwapLayerBuffers", CALL_FLAG_SWAPBUFFERS }, { "wglSwapMultipleBuffers", CALL_FLAG_SWAPBUFFERS }, // NOTE: New entries must be sorted alphabetically }; /** * Lookup call flags by name. */ CallFlags Parser::lookupCallFlags(const char *name) { return entryLookup(name, callFlagTable, defaultCallFlags); } tmpNnpnZF/common/highlight.cpp0000664000175000017500000002054412543167424015734 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Helpers for coloring output. */ #ifdef _WIN32 #include #include // _isatty #include // _fileno #ifndef COMMON_LVB_LEADING_BYTE #define COMMON_LVB_LEADING_BYTE 0x0100 #endif #ifndef COMMON_LVB_TRAILING_BYTE #define COMMON_LVB_TRAILING_BYTE 0x0200 #endif #ifndef COMMON_LVB_GRID_HORIZONTAL #define COMMON_LVB_GRID_HORIZONTAL 0x0400 #endif #ifndef COMMON_LVB_GRID_LVERTICAL #define COMMON_LVB_GRID_LVERTICAL 0x0800 #endif #ifndef COMMON_LVB_GRID_RVERTICAL #define COMMON_LVB_GRID_RVERTICAL 0x1000 #endif #ifndef COMMON_LVB_REVERSE_VIDEO #define COMMON_LVB_REVERSE_VIDEO 0x4000 #endif #ifndef COMMON_LVB_UNDERSCORE #define COMMON_LVB_UNDERSCORE 0x8000 #endif #else /* !_WIN32 */ #include // isatty #endif /* !_WIN32 */ #include "highlight.hpp" namespace highlight { class PlainAttribute : public Attribute { public: PlainAttribute(void) {} virtual void apply(std::ostream &) const {} }; static const PlainAttribute plainAttribute; class PlainHighlighter : public Highlighter { public: PlainHighlighter(void) {} virtual const Attribute & normal(void) const { return plainAttribute; } virtual const Attribute & bold(void) const { return plainAttribute; } virtual const Attribute & italic(void) const { return plainAttribute; } virtual const Attribute & strike(void) const { return plainAttribute; } virtual const Attribute & color(Color) const { return plainAttribute; } }; static const PlainHighlighter plainHighlighter; class AnsiAttribute : public Attribute { protected: const char *escape; public: AnsiAttribute(const char *_escape) : escape(_escape) {} void apply(std::ostream& os) const { os << "\33[" << escape; } }; static const AnsiAttribute ansiNormal("0m"); static const AnsiAttribute ansiBold("1m"); static const AnsiAttribute ansiItalic("3m"); static const AnsiAttribute ansiStrike("9m"); static const AnsiAttribute ansiRed("31m"); static const AnsiAttribute ansiGreen("32m"); static const AnsiAttribute ansiBlue("34m"); static const AnsiAttribute ansiGray("37m"); /** * Highlighter for plain-text files which outputs ANSI escape codes. See * http://en.wikipedia.org/wiki/ANSI_escape_code for more information * concerning ANSI escape codes. */ class AnsiHighlighter : public Highlighter { public: AnsiHighlighter(void) {} virtual const Attribute & normal(void) const { return ansiNormal; } virtual const Attribute & bold(void) const { return ansiBold; } virtual const Attribute & italic(void) const { /* Italic is not widely supported, or worse, implemented with a reverse */ if (0) return ansiItalic; else return plainAttribute; } virtual const Attribute & strike(void) const { return ansiStrike; } virtual const Attribute & color(Color c) const { switch (c) { case RED: return ansiRed; case GREEN: return ansiGreen; case BLUE: return ansiBlue; case GRAY: return ansiGray; default: return plainAttribute; } } }; static const AnsiHighlighter ansiHighlighter; #ifdef _WIN32 class WindowsAttribute : public Attribute { protected: WORD wAttributes; public: WindowsAttribute(WORD _wAttributes) : wAttributes(_wAttributes) {} void apply(std::ostream& os) const { DWORD nStdHandleOutput; if (&os == &std::cout) { nStdHandleOutput = STD_OUTPUT_HANDLE; } else if (&os == &std::cerr) { nStdHandleOutput = STD_ERROR_HANDLE; } else { return; } HANDLE hConsoleOutput = GetStdHandle(nStdHandleOutput); if (hConsoleOutput == INVALID_HANDLE_VALUE) { return; } SetConsoleTextAttribute(hConsoleOutput, wAttributes); } }; static const WindowsAttribute winNormal(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); static const WindowsAttribute winBold(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY); static const WindowsAttribute winItalic(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); static const WindowsAttribute winStrike(COMMON_LVB_REVERSE_VIDEO | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); static const WindowsAttribute winRed(FOREGROUND_RED | FOREGROUND_INTENSITY); static const WindowsAttribute winGreen(FOREGROUND_GREEN | FOREGROUND_INTENSITY); static const WindowsAttribute winBlue(FOREGROUND_BLUE | FOREGROUND_INTENSITY); /** * Highlighter for the Windows Console. */ class WindowsHighlighter : public Highlighter { public: virtual const Attribute & normal(void) const { return winNormal; } virtual const Attribute & bold(void) const { return winBold; } virtual const Attribute & italic(void) const { return winItalic; } virtual const Attribute & strike(void) const { return winStrike; } virtual const Attribute & color(Color c) const { switch (c) { case RED: return winRed; case GREEN: return winGreen; case BLUE: return winBlue; default: return plainAttribute; } } }; static const WindowsHighlighter windowsHighlighter; static bool haveAnsi(void) { static bool checked = false; static bool result = false; if (!checked) { // https://code.google.com/p/conemu-maximus5/wiki/AnsiEscapeCodes#Environment_variable // XXX: Didn't quite work for me if (0) { const char *conEmuANSI = getenv("ConEmuANSI"); if (conEmuANSI && strcmp(conEmuANSI, "ON") == 0) { result = true; checked = true; return result; } } // Cygwin shell if (1) { const char *term = getenv("TERM"); if (term && strcmp(term, "xterm") == 0) { result = true; checked = true; return result; } } // http://wiki.winehq.org/DeveloperFaq#detect-wine HMODULE hNtDll = GetModuleHandleA("ntdll"); if (hNtDll) { result = GetProcAddress(hNtDll, "wine_get_version") != NULL; } checked = true; } return result; } #endif /* _WIN32 */ const Highlighter & defaultHighlighter(bool color) { if (color) { #ifdef _WIN32 if (haveAnsi()) { return ansiHighlighter; } else { return windowsHighlighter; } #else return ansiHighlighter; #endif } else { return plainHighlighter; } } bool isAtty(std::ostream &os) { int fd; if (&os == &std::cout) { #ifdef _WIN32 fd = _fileno(stdout); #else fd = STDOUT_FILENO; #endif } else if (&os == &std::cerr) { #ifdef _WIN32 fd = _fileno(stderr); #else fd = STDERR_FILENO; #endif } else { return false; } #ifdef _WIN32 return _isatty(fd); #else return isatty(fd); #endif } const Highlighter & defaultHighlighter(std::ostream & os) { return defaultHighlighter(isAtty(os)); } } /* namespace highlight */ tmpNnpnZF/common/trace_writer_local.cpp0000664000175000017500000001640012543167424017625 0ustar chrischris/************************************************************************** * * Copyright 2007-2011 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include "os.hpp" #include "os_thread.hpp" #include "os_string.hpp" #include "os_version.hpp" #include "trace_file.hpp" #include "trace_writer_local.hpp" #include "trace_format.hpp" #include "os_backtrace.hpp" namespace trace { static const char *memcpy_args[3] = {"dest", "src", "n"}; const FunctionSig memcpy_sig = {0, "memcpy", 3, memcpy_args}; static const char *malloc_args[1] = {"size"}; const FunctionSig malloc_sig = {1, "malloc", 1, malloc_args}; static const char *free_args[1] = {"ptr"}; const FunctionSig free_sig = {2, "free", 1, free_args}; static const char *realloc_args[2] = {"ptr", "size"}; const FunctionSig realloc_sig = {3, "realloc", 2, realloc_args}; static void exceptionCallback(void) { localWriter.flush(); } LocalWriter::LocalWriter() : acquired(0) { os::String process = os::getProcessName(); os::log("apitrace: loaded into %s\n", process.str()); // Install the signal handlers as early as possible, to prevent // interfering with the application's signal handling. os::setExceptionCallback(exceptionCallback); } LocalWriter::~LocalWriter() { os::resetExceptionCallback(); checkProcessId(); } void LocalWriter::open(void) { os::String szFileName; const char *lpFileName; lpFileName = getenv("TRACE_FILE"); if (!lpFileName) { static unsigned dwCounter = 0; os::String process = os::getProcessName(); #ifdef _WIN32 process.trimExtension(); #endif process.trimDirectory(); #ifdef ANDROID os::String prefix = "/data/data"; prefix.join(process); #else os::String prefix = os::getCurrentDir(); #ifdef _WIN32 // Avoid writing into Windows' system directory as quite often access // will be denied. if (IsWindows8OrGreater()) { char szDirectory[MAX_PATH + 1]; GetSystemDirectoryA(szDirectory, sizeof szDirectory); if (stricmp(prefix, szDirectory) == 0) { GetTempPathA(sizeof szDirectory, szDirectory); prefix = szDirectory; } } #endif #endif prefix.join(process); for (;;) { FILE *file; if (dwCounter) szFileName = os::String::format("%s.%u.trace", prefix.str(), dwCounter); else szFileName = os::String::format("%s.trace", prefix.str()); lpFileName = szFileName; file = fopen(lpFileName, "rb"); if (file == NULL) break; fclose(file); ++dwCounter; } } os::log("apitrace: tracing to %s\n", lpFileName); if (!Writer::open(lpFileName)) { os::log("apitrace: error: failed to open %s\n", lpFileName); os::abort(); } pid = os::getCurrentProcessId(); #if 0 // For debugging the exception handler *((int *)0) = 0; #endif } static uintptr_t next_thread_num = 1; static OS_THREAD_SPECIFIC(uintptr_t) thread_num; void LocalWriter::checkProcessId(void) { if (m_file->isOpened() && os::getCurrentProcessId() != pid) { // We are a forked child process that inherited the trace file, so // create a new file. We can't call any method of the current // file, as it may cause it to flush and corrupt the parent's // trace, so we effectively leak the old file object. m_file = File::createSnappy(); // Don't want to open the same file again os::unsetEnvironment("TRACE_FILE"); open(); } } unsigned LocalWriter::beginEnter(const FunctionSig *sig, bool fake) { mutex.lock(); ++acquired; checkProcessId(); if (!m_file->isOpened()) { open(); } uintptr_t this_thread_num = thread_num; if (!this_thread_num) { this_thread_num = next_thread_num++; thread_num = this_thread_num; } assert(this_thread_num); unsigned thread_id = this_thread_num - 1; unsigned call_no = Writer::beginEnter(sig, thread_id); if (!fake && os::backtrace_is_needed(sig->name)) { std::vector backtrace = os::get_backtrace(); beginBacktrace(backtrace.size()); for (unsigned i = 0; i < backtrace.size(); ++i) { writeStackFrame(&backtrace[i]); } endBacktrace(); } return call_no; } void LocalWriter::endEnter(void) { Writer::endEnter(); --acquired; mutex.unlock(); } void LocalWriter::beginLeave(unsigned call) { mutex.lock(); ++acquired; Writer::beginLeave(call); } void LocalWriter::endLeave(void) { Writer::endLeave(); --acquired; mutex.unlock(); } void LocalWriter::flush(void) { /* * Do nothing if the mutex is already acquired (e.g., if a segfault happen * while writing the file) as state could be inconsistent, therefore yield * inconsistent trace files and/or repeated segfaults till infinity. */ mutex.lock(); if (acquired) { os::log("apitrace: ignoring exception while tracing\n"); } else { ++acquired; if (m_file->isOpened()) { if (os::getCurrentProcessId() != pid) { os::log("apitrace: ignoring exception in child process\n"); } else { os::log("apitrace: flushing trace due to an exception\n"); m_file->flush(); } } --acquired; } mutex.unlock(); } LocalWriter localWriter; void fakeMemcpy(const void *ptr, size_t size) { assert(ptr); if (!size) { return; } unsigned _call = localWriter.beginEnter(&memcpy_sig, true); localWriter.beginArg(0); localWriter.writePointer((uintptr_t)ptr); localWriter.endArg(); localWriter.beginArg(1); localWriter.writeBlob(ptr, size); localWriter.endArg(); localWriter.beginArg(2); localWriter.writeUInt(size); localWriter.endArg(); localWriter.endEnter(); localWriter.beginLeave(_call); localWriter.endLeave(); } } /* namespace trace */ tmpNnpnZF/common/os_posix.cpp0000664000175000017500000002470212543167424015630 0ustar chrischris/************************************************************************** * * Copyright 2010-2011 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifndef _WIN32 #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__linux__) #include // PATH_MAX #endif #ifdef __APPLE__ #include // PATH_MAX #include #endif #ifdef ANDROID #include #endif #ifndef PATH_MAX #warning PATH_MAX undefined #define PATH_MAX 4096 #endif #include "os.hpp" #include "os_string.hpp" #include "os_backtrace.hpp" namespace os { String getProcessName(void) { String path; size_t size = PATH_MAX; char *buf = path.buf(size); // http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe #ifdef __APPLE__ uint32_t len = size; if (_NSGetExecutablePath(buf, &len) != 0) { // grow buf and retry buf = path.buf(len); _NSGetExecutablePath(buf, &len); } len = strlen(buf); #else ssize_t len; #ifdef ANDROID // On Android, we are almost always interested in the actual process title // rather than path to the VM kick-off executable // (/system/bin/app_process). len = 0; #else len = readlink("/proc/self/exe", buf, size - 1); #endif if (len <= 0) { // /proc/self/exe is not available on setuid processes, so fallback to // /proc/self/cmdline. int fd = open("/proc/self/cmdline", O_RDONLY); if (fd >= 0) { // buf already includes trailing zero len = read(fd, buf, size); close(fd); if (len >= 0) { len = strlen(buf); } } } #ifdef __GLIBC__ // fallback to `program_invocation_name` if (len <= 0) { len = strlen(program_invocation_name); buf = path.buf(len + 1); strcpy(buf, program_invocation_name); } #endif // fallback to process ID if (len <= 0) { len = snprintf(buf, size, "%i", (int)getpid()); if (len >= size) { len = size - 1; } } #endif path.truncate(len); return path; } String getCurrentDir(void) { String path; size_t size = PATH_MAX; char *buf = path.buf(size); if (getcwd(buf, size)) { buf[size - 1] = 0; path.truncate(); } else { path.truncate(0); } return path; } String getConfigDir(void) { String path; #ifdef __APPLE__ // Library/Preferences const char *homeDir = getenv("HOME"); assert(homeDir); if (homeDir) { path = homeDir; path.join("Library/Preferences"); } #else // http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html const char *configHomeDir = getenv("XDG_CONFIG_HOME"); if (configHomeDir) { path = configHomeDir; } else { const char *homeDir = getenv("HOME"); if (!homeDir) { struct passwd *user = getpwuid(getuid()); if (user != NULL) { homeDir = user->pw_dir; } } assert(homeDir); if (homeDir) { path = homeDir; #if !defined(ANDROID) path.join(".config"); #endif } } #endif return path; } bool createDirectory(const String &path) { return mkdir(path, 0777) == 0; } bool String::exists(void) const { struct stat st; int err; err = stat(str(), &st); if (err) { return false; } return true; } int execute(char * const * args) { pid_t pid = fork(); if (pid == 0) { // child execvp(args[0], args); fprintf(stderr, "error: failed to execute:"); for (unsigned i = 0; args[i]; ++i) { fprintf(stderr, " %s", args[i]); } fprintf(stderr, "\n"); exit(-1); } else { // parent if (pid == -1) { fprintf(stderr, "error: failed to fork\n"); return -1; } int status = -1; int ret; waitpid(pid, &status, 0); if (WIFEXITED(status)) { ret = WEXITSTATUS(status); } else if (WIFSIGNALED(status)) { // match shell return code ret = WTERMSIG(status) + 128; } else { ret = 128; } return ret; } } static volatile bool logging = false; #ifndef HAVE_EXTERNAL_OS_LOG void log(const char *format, ...) { logging = true; va_list ap; va_start(ap, format); fflush(stdout); #ifdef ANDROID __android_log_vprint(ANDROID_LOG_DEBUG, "apitrace", format, ap); #else static FILE *log = NULL; if (!log) { // Duplicate stderr file descriptor, to prevent applications from // redirecting our debug messages to somewhere else. // // Another alternative would be to log to /dev/tty when available. log = fdopen(dup(STDERR_FILENO), "at"); } vfprintf(log, format, ap); fflush(log); #endif va_end(ap); logging = false; } #endif /* !HAVE_EXTERNAL_OS_LOG */ #if defined(__APPLE__) long long timeFrequency = 0LL; #endif void abort(void) { _exit(1); } void breakpoint(void) { #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) asm("int3"); #else kill(getpid(), SIGTRAP); #endif } static void (*gCallback)(void) = NULL; #define NUM_SIGNALS 16 struct sigaction old_actions[NUM_SIGNALS]; /* * See also: * - http://sourceware.org/git/?p=glibc.git;a=blob;f=debug/segfault.c * - http://ggi.cvs.sourceforge.net/viewvc/ggi/ggi-core/libgg/gg/cleanup.c?view=markup */ static void signalHandler(int sig, siginfo_t *info, void *context) { /* * There are several signals that can happen when logging to stdout/stderr. * For example, SIGPIPE will be emitted if stderr is a pipe with no * readers. Therefore ignore any signal while logging by returning * immediately, to prevent deadlocks. */ if (logging) { return; } static int recursion_count = 0; log("apitrace: warning: caught signal %i\n", sig); if (recursion_count) { log("apitrace: warning: recursion handling signal %i\n", sig); } else { ++recursion_count; if (gCallback) gCallback(); os::dump_backtrace(); --recursion_count; } struct sigaction *old_action; if (sig >= NUM_SIGNALS) { /* This should never happen */ log("error: unexpected signal %i\n", sig); raise(SIGKILL); } old_action = &old_actions[sig]; if (old_action->sa_flags & SA_SIGINFO) { // Handler is in sa_sigaction old_action->sa_sigaction(sig, info, context); } else { if (old_action->sa_handler == SIG_DFL) { log("apitrace: info: taking default action for signal %i\n", sig); #if 1 struct sigaction dfl_action; dfl_action.sa_handler = SIG_DFL; sigemptyset (&dfl_action.sa_mask); dfl_action.sa_flags = 0; sigaction(sig, &dfl_action, NULL); raise(sig); #else raise(SIGKILL); #endif } else if (old_action->sa_handler == SIG_IGN) { /* ignore */ } else { /* dispatch to handler */ old_action->sa_handler(sig); } } } void setExceptionCallback(void (*callback)(void)) { assert(!gCallback); if (!gCallback) { gCallback = callback; struct sigaction new_action; new_action.sa_sigaction = signalHandler; sigemptyset(&new_action.sa_mask); new_action.sa_flags = SA_SIGINFO | SA_RESTART; for (int sig = 1; sig < NUM_SIGNALS; ++sig) { // SIGKILL and SIGSTOP can't be handled. if (sig == SIGKILL || sig == SIGSTOP) { continue; } /* * SIGPIPE can be emitted when writing to stderr that is redirected * to a pipe without readers. It is also very unlikely to ocurr * inside graphics APIs, and most applications where it can occur * normally already ignore it. In summary, it is unlikely that a * SIGPIPE will cause abnormal termination, which it is likely that * intercepting here will cause problems, so simple don't intercept * it here. */ if (sig == SIGPIPE) { continue; } if (sigaction(sig, NULL, &old_actions[sig]) >= 0) { sigaction(sig, &new_action, NULL); } } } } void resetExceptionCallback(void) { gCallback = NULL; } #ifdef __ANDROID__ #include "os_memory.hpp" #include #include #include #include char statmBuff[256]; static __uint64_t pageSize = sysconf(_SC_PAGESIZE); static long size, resident; static inline void parseStatm() { int fd = open("/proc/self/statm", O_RDONLY, 0); int sz = read(fd, statmBuff, 255); close(fd); statmBuff[sz] = 0; sz = sscanf(statmBuff, "%ld %ld", &size, &resident); assert(sz == 2); } long long getVsize() { parseStatm(); return pageSize * size; } long long getRss() { parseStatm(); return pageSize * resident; } #endif } /* namespace os */ #endif // !defined(_WIN32) tmpNnpnZF/common/trace_format.hpp0000664000175000017500000000402012543167424016427 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Trace binary format definitions. * * See FORMAT.markdown for details. */ #pragma once namespace trace { #define TRACE_VERSION 5 enum Event { EVENT_ENTER = 0, EVENT_LEAVE, }; enum CallDetail { CALL_END = 0, CALL_ARG, CALL_RET, CALL_THREAD, CALL_BACKTRACE, }; enum Type { TYPE_NULL = 0, TYPE_FALSE, TYPE_TRUE, TYPE_SINT, TYPE_UINT, TYPE_FLOAT, TYPE_DOUBLE, TYPE_STRING, TYPE_BLOB, TYPE_ENUM, TYPE_BITMASK, TYPE_ARRAY, TYPE_STRUCT, TYPE_OPAQUE, TYPE_REPR, TYPE_WSTRING, }; enum BacktraceDetail { BACKTRACE_END = 0, BACKTRACE_MODULE, BACKTRACE_FUNCTION, BACKTRACE_FILENAME, BACKTRACE_LINENUMBER, BACKTRACE_OFFSET, }; } /* namespace trace */ tmpNnpnZF/common/trace_model.hpp0000664000175000017500000003152512543167424016251 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Object hierarchy for describing the traces in memory. */ #pragma once #include #include #include #include #include namespace trace { // Should match Call::no typedef unsigned CallNo; typedef unsigned Id; struct FunctionSig { Id id; const char *name; unsigned num_args; const char **arg_names; }; struct StructSig { Id id; const char *name; unsigned num_members; const char **member_names; }; struct EnumValue { const char *name; signed long long value; }; struct EnumSig { Id id; unsigned num_values; const EnumValue *values; }; struct BitmaskFlag { const char *name; unsigned long long value; }; struct BitmaskSig { Id id; unsigned num_flags; const BitmaskFlag *flags; }; class Visitor; class Null; class Struct; class Array; class Value { public: virtual ~Value() {} virtual void visit(Visitor &visitor) = 0; virtual bool toBool(void) const = 0; virtual signed long long toSInt(void) const; virtual unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; virtual void *toPointer(void) const; virtual void *toPointer(bool bind); virtual unsigned long long toUIntPtr(void) const; virtual const char *toString(void) const; virtual const Null *toNull(void) const { return NULL; } virtual Null *toNull(void) { return NULL; } virtual const Array *toArray(void) const { return NULL; } virtual Array *toArray(void) { return NULL; } virtual const Struct *toStruct(void) const { return NULL; } virtual Struct *toStruct(void) { return NULL; } Value & operator[](size_t index) const; }; class Null : public Value { public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void *toPointer(void) const; void *toPointer(bool bind); unsigned long long toUIntPtr(void) const; const char *toString(void) const; void visit(Visitor &visitor); const Null *toNull(void) const { return this; } Null *toNull(void) { return this; } }; class Bool : public Value { public: Bool(bool _value) : value(_value) {} bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void visit(Visitor &visitor); bool value; }; class SInt : public Value { public: SInt(signed long long _value) : value(_value) {} bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void visit(Visitor &visitor); signed long long value; }; class UInt : public Value { public: UInt(unsigned long long _value) : value(_value) {} bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void visit(Visitor &visitor); unsigned long long value; }; class Float : public Value { public: Float(float _value) : value(_value) {} bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void visit(Visitor &visitor); float value; }; class Double : public Value { public: Double(double _value) : value(_value) {} bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; void visit(Visitor &visitor); double value; }; class String : public Value { public: String(const char * _value) : value(_value) {} ~String(); bool toBool(void) const; const char *toString(void) const; void visit(Visitor &visitor); const char * value; }; class WString : public Value { public: WString(const wchar_t * _value) : value(_value) {} ~WString(); bool toBool(void) const; void visit(Visitor &visitor); const wchar_t * value; }; class Enum : public SInt { public: Enum(const EnumSig *_sig, signed long long _value) : SInt(_value), sig(_sig) {} void visit(Visitor &visitor); const EnumSig *sig; const EnumValue * lookup() { // TODO: use a std::map for (const EnumValue *it = sig->values; it != sig->values + sig->num_values; ++it) { if (it->value == value) { return it; } } return NULL; } }; class Bitmask : public UInt { public: Bitmask(const BitmaskSig *_sig, unsigned long long _value) : UInt(_value), sig(_sig) {} void visit(Visitor &visitor); const BitmaskSig *sig; }; class Struct : public Value { public: Struct(StructSig *_sig) : sig(_sig), members(_sig->num_members) { } ~Struct(); bool toBool(void) const; void visit(Visitor &visitor); const Struct *toStruct(void) const { return this; } Struct *toStruct(void) { return this; } const StructSig *sig; std::vector members; }; class Array : public Value { public: Array(size_t len) : values(len) {} ~Array(); bool toBool(void) const; void visit(Visitor &visitor); const Array *toArray(void) const { return this; } Array *toArray(void) { return this; } std::vector values; inline size_t size(void) const { return values.size(); } }; class Blob : public Value { public: Blob(size_t _size) { size = _size; buf = new char[_size]; bound = false; } ~Blob(); bool toBool(void) const; void *toPointer(void) const; void *toPointer(bool bind); void visit(Visitor &visitor); size_t size; char *buf; bool bound; }; class Pointer : public UInt { public: Pointer(unsigned long long value) : UInt(value) {} bool toBool(void) const; void *toPointer(void) const; void *toPointer(bool bind); unsigned long long toUIntPtr(void) const; void visit(Visitor &visitor); }; class Repr : public Value { public: Repr(Value *human, Value *machine) : humanValue(human), machineValue(machine) {} /** Human-readible value */ Value *humanValue; /** Machine-readible value */ Value *machineValue; virtual bool toBool(void) const; virtual signed long long toSInt(void) const; virtual unsigned long long toUInt(void) const; virtual float toFloat(void) const; virtual double toDouble(void) const; virtual void *toPointer(void) const; virtual void *toPointer(bool bind); virtual unsigned long long toUIntPtr(void) const; virtual const char *toString(void) const; void visit(Visitor &visitor); }; struct RawStackFrame { Id id; const char * module; const char * function; const char * filename; int linenumber; long long offset; RawStackFrame() : module(0), function(0), filename(0), linenumber(-1), offset(-1) { } void dump(std::ostream &os) { os << (this->module ? this->module : "?"); if (this->function != NULL) { os << ": " << this->function; } if (this->offset >= 0) { os << "+0x" << std::hex << this->offset << std::dec; } if (this->filename != NULL) { os << ": " << this->filename; if (this->linenumber >= 0) { os << ":" << this->linenumber; } } } }; class StackFrame : public RawStackFrame { public: ~StackFrame(); }; typedef std::vector Backtrace; class Visitor { public: virtual void visit(Null *); virtual void visit(Bool *); virtual void visit(SInt *); virtual void visit(UInt *); virtual void visit(Float *); virtual void visit(Double *); virtual void visit(String *); virtual void visit(WString *); virtual void visit(Enum *); virtual void visit(Bitmask *); virtual void visit(Struct *); virtual void visit(Array *); virtual void visit(Blob *); virtual void visit(Pointer *); virtual void visit(Repr *); protected: inline void _visit(Value *value) { if (value) { value->visit(*this); } } }; typedef unsigned CallFlags; /** * Call flags. * * TODO: It might be better to to record some of these (but not all) into the * trace file. */ enum { /** * Whether a call was really done by the application or not. * * This flag is set for fake calls -- calls not truly done by the application * but emitted and recorded for completeness, to provide contextual information * necessary for retracing, that would not be available through other ways. * * XXX: This one definetely needs to go into the trace file. */ CALL_FLAG_FAKE = (1 << 0), /** * Whether this call should be retraced or ignored. * * This flag is set for calls which can't be safely replayed (due to incomplete * information) or that have no sideffects. * * Some incomplete calls are unreproduceable, but not all. */ CALL_FLAG_NON_REPRODUCIBLE = (1 << 1), /** * Whether this call has no side-effects, therefore don't need to be * retraced. * * This flag is set for calls that merely query information which is not * needed for posterior calls. */ CALL_FLAG_NO_SIDE_EFFECTS = (1 << 2), /** * Whether this call renders into the bound rendertargets. */ CALL_FLAG_RENDER = (1 << 3), /** * Whether this call causes render target to be swapped. * * This does not mark frame termination by itself -- that's solely the * responsibility of `endOfFrame` bit. * * This mean that snapshots should be take prior to the call, and not * after. */ CALL_FLAG_SWAP_RENDERTARGET = (1 << 4), /** * Whether this call terminates a frame. * * XXX: This can't always be determined by the function name, so it should also * go into the trace file eventually. */ CALL_FLAG_END_FRAME = (1 << 5), /** * Whether this call is incomplete, i.e., it never returned. */ CALL_FLAG_INCOMPLETE = (1 << 6), /** * Whether this call is verbose (i.e., not usually interesting). */ CALL_FLAG_VERBOSE = (1 << 7), /** * String markers. */ CALL_FLAG_MARKER = (1 << 8), CALL_FLAG_MARKER_PUSH = (1 << 9), CALL_FLAG_MARKER_POP = (1 << 10), }; struct Arg { Value *value; }; class Call { public: unsigned thread_id; unsigned no; const FunctionSig *sig; std::vector args; Value *ret; CallFlags flags; Backtrace* backtrace; Call(const FunctionSig *_sig, const CallFlags &_flags, unsigned _thread_id) : thread_id(_thread_id), sig(_sig), args(_sig->num_args), ret(0), flags(_flags), backtrace(0) { } ~Call(); inline const char * name(void) const { return sig->name; } inline Value & arg(unsigned index) { assert(index < args.size()); return *(args[index].value); } Value & argByName(const char *argName); }; } /* namespace trace */ tmpNnpnZF/common/os_memory.hpp0000664000175000017500000000400612543167424015776 0ustar chrischris/************************************************************************** * * Copyright (C) 2013 Intel Corporation. All rights reversed. * Author: Shuang He * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Simple OS time measurement abstraction. */ #pragma once #ifdef HAVE_READPROC_H #include #endif namespace os { #if defined(HAVE_READPROC_H) inline long long getVsize(void) { proc_t proc; look_up_our_self(&proc); return proc.vsize; } inline long long getRss(void) { proc_t proc; look_up_our_self(&proc); return proc.rss; } #elif defined(__ANDROID__) long long getVsize(void); long long getRss(void); #else inline long long getVsize(void) { return 0; } inline long long getRss(void) { return 0; } #endif } /* namespace os */ tmpNnpnZF/common/os_dl.hpp0000664000175000017500000000441012543167424015064 0ustar chrischris/************************************************************************** * * Copyright 2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Dynamic library linking abstraction. */ #pragma once #if defined(_WIN32) #include #else #include #endif #if defined(_WIN32) #define OS_LIBRARY_EXTENSION ".dll" #elif defined(__APPLE__) #define OS_LIBRARY_EXTENSION ".dylib" #else #define OS_LIBRARY_EXTENSION ".so" #endif namespace os { // TODO: Wrap in a class #if defined(_WIN32) typedef HMODULE Library; #else typedef void * Library; #endif inline Library openLibrary(const char *filename) { #if defined(_WIN32) return LoadLibraryA(filename); #else return dlopen(filename, RTLD_LOCAL | RTLD_LAZY); #endif } inline void * getLibrarySymbol(Library library, const char *symbol) { #if defined(_WIN32) return (void *)GetProcAddress(library, symbol); #else return dlsym(library, symbol); #endif } inline void closeLibrary(Library library) { #if defined(_WIN32) FreeLibrary(library); #else dlclose(library); #endif } } /* namespace os */ tmpNnpnZF/common/trace_writer_model.cpp0000664000175000017500000000771512543167424017644 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "trace_writer.hpp" namespace trace { class ModelWriter : public Visitor { protected: Writer &writer; public: ModelWriter(Writer &_writer) : writer(_writer) { } void visit(Null *) { writer.writeNull(); } void visit(Bool *node) { writer.writeBool(node->value); } void visit(SInt *node) { writer.writeSInt(node->value); } void visit(UInt *node) { writer.writeUInt(node->value); } void visit(Float *node) { writer.writeFloat(node->value); } void visit(Double *node) { writer.writeDouble(node->value); } void visit(String *node) { writer.writeString(node->value); } void visit(WString *node) { writer.writeWString(node->value); } void visit(Enum *node) { writer.writeEnum(node->sig, node->value); } void visit(Bitmask *node) { writer.writeBitmask(node->sig, node->value); } void visit(Struct *node) { writer.beginStruct(node->sig); for (unsigned i = 0; i < node->sig->num_members; ++i) { _visit(node->members[i]); } writer.endStruct(); } void visit(Array *node) { writer.beginArray(node->values.size()); for (std::vector::iterator it = node->values.begin(); it != node->values.end(); ++it) { _visit(*it); } writer.endArray(); } void visit(Blob *node) { writer.writeBlob(node->buf, node->size); } void visit(Pointer *node) { writer.writePointer(node->value); } void visit(Repr *node) { writer.beginRepr(); _visit(node->humanValue); _visit(node->machineValue); writer.endRepr(); } void visit(Call *call) { unsigned call_no = writer.beginEnter(call->sig, call->thread_id); if (call->backtrace != NULL) { writer.beginBacktrace(call->backtrace->size()); for (unsigned i = 0; i < call->backtrace->size(); ++i) { writer.writeStackFrame((*call->backtrace)[i]); } writer.endBacktrace(); } for (unsigned i = 0; i < call->args.size(); ++i) { if (call->args[i].value) { writer.beginArg(i); _visit(call->args[i].value); writer.endArg(); } } writer.endEnter(); writer.beginLeave(call_no); if (call->ret) { writer.beginReturn(); _visit(call->ret); writer.endReturn(); } writer.endLeave(); } }; void Writer::writeCall(Call *call) { ModelWriter visitor(*this); visitor.visit(call); } } /* namespace trace */ tmpNnpnZF/common/trace_callset.hpp0000664000175000017500000001277412543167424016605 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Representation of call sets. * * Grammar: * * set = '@' filename * | range ( ',' ? range ) * * * range = interval ( '/' frequency ) * * interval = '*' * | number * | start_number '-' end_number * * frequency = divisor * | "frame" * | "rendertarget" | "fbo" * | "render | "draw" * */ #pragma once #include #include #include "trace_model.hpp" #include "trace_fast_callset.hpp" namespace trace { // Aliases for call flags enum { FREQUENCY_NONE = 0, FREQUENCY_FRAME = CALL_FLAG_END_FRAME, FREQUENCY_RENDERTARGET = CALL_FLAG_END_FRAME | CALL_FLAG_SWAP_RENDERTARGET, FREQUENCY_RENDER = CALL_FLAG_RENDER, FREQUENCY_ALL = 0xffffffff }; // A linear range of calls class CallRange { public: CallNo start; CallNo stop; CallNo step; CallFlags freq; CallRange(CallNo callNo) : start(callNo), stop(callNo), step(1), freq(FREQUENCY_ALL) {} CallRange(CallNo _start, CallNo _stop, CallNo _step = 1, CallFlags _freq = FREQUENCY_ALL) : start(_start), stop(_stop), step(_step), freq(_freq) {} bool contains(CallNo callNo, CallFlags callFlags) const { return callNo >= start && callNo <= stop && ((callNo - start) % step) == 0 && ((callFlags & freq) || freq == FREQUENCY_ALL); } }; // A collection of call ranges class CallSet { private: CallRange limits; bool firstmerge; public: FastCallSet fast_call_set; // TODO: use binary tree to speed up lookups, (less important // now that we are using FastCallSet for ranges without step // or freq). typedef std::list< CallRange > RangeList; RangeList ranges; CallSet(): limits(std::numeric_limits::min(), std::numeric_limits::max()), firstmerge(true) {} CallSet(CallFlags freq); void merge(const char *str); // Not empty set inline bool empty() const { return fast_call_set.empty() && ranges.empty(); } void addRange(const CallRange & range) { if (range.start <= range.stop && range.freq != FREQUENCY_NONE) { if (empty()) { limits.start = range.start; limits.stop = range.stop; } else { if (range.start < limits.start) limits.start = range.start; if (range.stop > limits.stop) limits.stop = range.stop; } /* Optimize by using fast_call_set whenever possible */ if (range.step == 1 && range.freq == FREQUENCY_ALL) { fast_call_set.add(range.start, range.stop); } else { RangeList::iterator it = ranges.begin(); while (it != ranges.end() && it->start < range.start) { ++it; } ranges.insert(it, range); } } } inline bool contains(CallNo callNo, CallFlags callFlags = FREQUENCY_ALL) const { if (empty()) { return false; } if (fast_call_set.contains(callNo)) return true; RangeList::const_iterator it; for (it = ranges.begin(); it != ranges.end() && it->start <= callNo; ++it) { if (it->contains(callNo, callFlags)) { return true; } } return false; } inline bool contains(const trace::Call &call) { return contains(call.no, call.flags); } CallNo getFirst() { return limits.start; } CallNo getLast() { return limits.stop; } }; CallSet parse(const char *string); } /* namespace trace */ tmpNnpnZF/common/trace_lookup.hpp0000664000175000017500000000545012543167424016460 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Helper code for function name indexed lookup tables. */ #pragma once #include #include #include #include namespace trace { /** * Generic type for (name, value) pairs. */ template< class T > struct Entry { const char *name; T value; }; /** * Function object which compare entries by name. */ template< class T > struct EntryCompare { inline bool operator() (const Entry & a, const Entry & b) const { return strcmp(a.name, b.name) < 0; } }; /** * Lookup the entry with the given name, . * * The entry table must be sorted alphabetically (the same rules used by * strcmp). */ template< class T, std::size_t n > inline const T & entryLookup(const char *name, const Entry (& entries)[n], const T & default_) { typedef const Entry * ConstIterator; ConstIterator first = &entries[0]; ConstIterator last = &entries[n]; assert(first != last); Entry reference; reference.name = name; EntryCompare compare; #ifndef NDEBUG for (ConstIterator it = first; it != last; ++it) { ConstIterator next = it + 1; if (next != last && !compare(*it, *next)) { std::cerr << "error: " << it->name << " and " << next->name << " not properly sorted\n"; assert(0); } } #endif first = std::lower_bound(first, last, reference, compare); if (first == last || compare(reference, *first)) { return default_; } return first->value; } } /* namespace trace */ tmpNnpnZF/common/trace_option.cpp0000664000175000017500000000400412543167424016444 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "trace_option.hpp" #include #include #include namespace trace { bool boolOption(const char *option, bool default_) { if (!option) { return default_; } if (strcmp(option, "0") == 0 || strcmp(option, "no") == 0 || strcmp(option, "false") == 0) { return false; } if (strcmp(option, "0") == 0 || strcmp(option, "yes") == 0 || strcmp(option, "true") == 0) { return true; } std::cerr << "error: unexpected bool " << option << "\n"; return default_; } int intOption(const char *option, int default_) { if (!option) { return default_; } return atoi(option); } } /* namespace trace */ tmpNnpnZF/common/highlight.hpp0000664000175000017500000000432612543167424015741 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Helpers for coloring output. */ #pragma once #include namespace highlight { /* * See also http://bytes.com/topic/c/answers/63822-design-question-little-c-header-colorizing-text-linux-comments-ideas */ class Attribute { public: virtual void apply(std::ostream &) const = 0; }; inline std::ostream & operator << (std::ostream & os, const Attribute & attr) { attr.apply(os); return os; } enum Color { RED, GREEN, BLUE, GRAY, }; class Highlighter { public: virtual const Attribute & normal(void) const = 0; virtual const Attribute & bold(void) const = 0; virtual const Attribute & italic(void) const = 0; virtual const Attribute & strike(void) const = 0; virtual const Attribute & color(Color) const = 0; }; bool isAtty(std::ostream & os); const Highlighter & defaultHighlighter(bool color = true); const Highlighter & defaultHighlighter(std::ostream & os); } /* namespace highlight */ tmpNnpnZF/common/trace_api.hpp0000664000175000017500000000331412543167424015715 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "os_string.hpp" namespace trace { /** * Enum to distuinguish the API for tools. * * It should never be embedded in the trace file. */ enum API { API_UNKNOWN = 0, API_GL, // GL + GLX/WGL/CGL API_EGL, // GL/GLES1/GLES2/VG + EGL API_DX, // All DirectX API_D3D7, API_D3D8, API_D3D9, API_DXGI, // D3D10.x, D3D11.x API_D2D1, // Direct2D }; } /* namespace trace */ tmpNnpnZF/common/trace_file_write.cpp0000664000175000017500000000323312543167424017270 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "os.hpp" #include "trace_file.hpp" using namespace trace; File * File::createForWrite(const char *filename) { File *file; file = File::createSnappy(); if (!file) { return NULL; } if (!file->open(filename, File::Write)) { os::log("error: could not open %s for writing\n", filename); delete file; return NULL; } return file; } tmpNnpnZF/common/os_backtrace.cpp0000664000175000017500000003431712543167424016410 0ustar chrischris/************************************************************************** * * Copyright 2013 Samsung * Contributed by Eugene Velesevich * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Wrapper for platform-specific code for obtaining symbolic backtraces * on Android and Linux */ #include "os_backtrace.hpp" #include #include #include "os.hpp" #if defined(ANDROID) # include #elif HAVE_BACKTRACE # include # include # include # include # include # include # include #endif using trace::Id; namespace os { /* * Pascal string (with zero terminator optionally omitted) * This is a helper class for storing a set of exact strings or prefixes * to match a zero-terminated string against later. * Two zero-terminated pstrings compare equal iff they are the same. * Otherwise, they compare equal iff one is a prefix of the other * (a zero-terminated pstring cannot be a prefix) */ struct pstring { const char* s; int n; pstring(const char* s, int n) { this->s = s; this->n = n; } bool operator<(const pstring q2) const { return memcmp(s, q2.s, n < q2.n? n : q2.n) < 0; } }; class StringPrefixes { private: std::set pset; void addPrefix(char* startbuf, int n) { std::set::iterator elem = pset.find(pstring(startbuf, n)); bool replace = elem != pset.end() && n < elem->n; if (replace) { pset.erase(elem); } if (replace || elem == pset.end()) { pset.insert(pstring(startbuf, n)); } } public: StringPrefixes(); bool contain(const char* s) { return pset.find(pstring(s, strlen(s) + 1)) != pset.end(); } }; StringPrefixes::StringPrefixes() { char *list = getenv("APITRACE_BACKTRACE"); if (!list) return; for (char *t = strdup(list); ; t = NULL) { char *tok = strtok(t, " \t\r\n"); if (!tok) break; if (tok[0] == '#') continue; if (tok[strlen(tok) - 1] == '*') addPrefix(tok, strlen(tok) - 1); else addPrefix(tok, strlen(tok) + 1); } } bool backtrace_is_needed(const char* fname) { static StringPrefixes backtraceFunctionNamePrefixes; return backtraceFunctionNamePrefixes.contain(fname); } #if defined(ANDROID) /* The following two declarations are copied from Android sources */ enum DebugTargetKind { kDebugTargetUnknown = 0, kDebugTargetLog, kDebugTargetFile, }; struct DebugOutputTarget { DebugTargetKind which; union { struct { int priority; const char* tag; } log; struct { FILE* fp; } file; } data; }; #define THREAD_SELF_NAME "_Z13dvmThreadSelfv" #define CREATE_DEBUG_TARGET_NAME "_Z25dvmCreateFileOutputTargetP17DebugOutputTargetP7__sFILE" #define DUMP_BACKTRACE_NAME "_Z18dvmDumpThreadStackPK17DebugOutputTargetP6Thread" class DalvikBacktraceProvider { private: bool errorOccured; void* (*threadself)(void); FILE* streamInMemory; char* buf; size_t bufSize; void (*dumpBacktrace)(const DebugOutputTarget*, void*); DebugOutputTarget debugTarget; Id nextFrameId; public: DalvikBacktraceProvider() { nextFrameId = 0; FILE* (*open_memstream_exp)(char**, size_t*); void (*createDebugTarget)(DebugOutputTarget*, FILE*); void* handle = dlopen("/system/lib/libdvm.so", 0); errorOccured = true; if (!handle) { os::log("dlopen failed\n"); return; } threadself = (void* (*)())dlsym(handle, THREAD_SELF_NAME); if (threadself == NULL) { os::log("dlsym ThreadSelf failed\n"); return; } createDebugTarget = (void (*)(DebugOutputTarget*, FILE*))dlsym(handle, CREATE_DEBUG_TARGET_NAME); if (createDebugTarget == NULL) { os::log("dlsym CreateFileOutput failed\n"); return; } dumpBacktrace = (void (*)(const DebugOutputTarget*, void*))dlsym(handle, DUMP_BACKTRACE_NAME); if (dumpBacktrace == NULL) { os::log("dlsym DumpThreadStack failed\n"); return; } void* handle2 = dlopen("/system/lib/libcutils.so", 0); if (!handle2) { os::log("dlopen failed\n"); return; } open_memstream_exp = (FILE* (*)(char**, size_t*))dlsym(handle2, "open_memstream"); if (open_memstream_exp == NULL) { os::log("dlsym open_memstream failed\n"); return; } streamInMemory = open_memstream_exp(&buf, &bufSize); if (streamInMemory == NULL) { os::log("open_memstream failed\n"); return; } createDebugTarget(&debugTarget, streamInMemory); errorOccured = false; } inline char* getBacktrace() { if (errorOccured) { return NULL; } rewind(streamInMemory); dumpBacktrace(&debugTarget, threadself()); fflush(streamInMemory); return buf; } /* * Parse a stack frame, expecting: * " at android.view.HardwareRenderer$GlRenderer.initializeEgl(HardwareRenderer.java:547)" * or * " at android.view.HardwareRenderer$GlRenderer.initializeEgl(Native Method)" */ std::vector parseBacktrace(char *rawBacktrace) { std::vector parsedBacktrace; char* rawBacktrace_it = rawBacktrace; while (*rawBacktrace_it != '\0') { RawStackFrame stackFrame; // TODO: Keep a cache of stack frames stackFrame.id = nextFrameId++; /* skip leading space */ while (*rawBacktrace_it == ' ') { rawBacktrace_it++; } /* Skip "at " */ rawBacktrace_it += 3; stackFrame.function = rawBacktrace_it; while (*rawBacktrace_it != '(') { rawBacktrace_it++; } *rawBacktrace_it = '\0'; stackFrame.filename = rawBacktrace_it + 1; while (*rawBacktrace_it != ':' && *rawBacktrace_it != ')') { rawBacktrace_it++; } if (*rawBacktrace_it == ':') { const char *linenumber = rawBacktrace_it + 1; *rawBacktrace_it = '\0'; while (*rawBacktrace_it != ')') { rawBacktrace_it++; } *rawBacktrace_it = '\0'; rawBacktrace_it++; stackFrame.linenumber = atoi(linenumber); } else { stackFrame.filename = NULL; while (*rawBacktrace_it != '\n') { rawBacktrace_it++; } } while (*rawBacktrace_it == '\n' || *rawBacktrace_it == ' ') { rawBacktrace_it++; } parsedBacktrace.push_back(stackFrame); /* module */ } return parsedBacktrace; } }; std::vector get_backtrace() { static DalvikBacktraceProvider backtraceProvider; return backtraceProvider.parseBacktrace(backtraceProvider.getBacktrace()); } void dump_backtrace() { /* TODO */ } #elif HAVE_BACKTRACE static char* format(uintptr_t num, int base, char *buf, int maxlen) { static const char digits[] = "0123456789abcdef"; buf += maxlen; do { *--buf = digits[num % base]; num /= base; maxlen--; } while (num != 0 && maxlen != 0); return buf; } static void dump(const char *str, int len) { static int fd = dup(STDERR_FILENO); if (write(fd, str, len) != len) { // Do nothing } } static void dumpFrame(const RawStackFrame &frame) { char buf[sizeof(long long) * 2], *p; #define DUMP(string) dump(string, strlen(string)) DUMP(frame.module ? frame.module : "?"); if (frame.function) { DUMP(": "); DUMP(frame.function); } if (frame.offset >= 0) { DUMP("+0x"); p = format((uintptr_t) frame.offset, 16, buf, sizeof(buf)); dump(p, buf + sizeof(buf) - p); } if (frame.filename) { DUMP(": "); DUMP(frame.filename); if (frame.linenumber >= 0) { DUMP(":"); p = format((uintptr_t) frame.linenumber, 10, buf, sizeof(buf)); dump(p, buf + sizeof(buf) - p); } } DUMP("\n"); #undef DUMP } #define BT_DEPTH 10 class libbacktraceProvider { struct backtrace_state *state; int skipFrames; Id nextFrameId; std::map > cache; std::vector *current, *current_frames; RawStackFrame *current_frame; bool missingDwarf; static void bt_err_callback(void *vdata, const char *msg, int errnum) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; if (errnum == -1) this_->missingDwarf = true; else if (errnum) os::log("libbacktrace: %s: %s\n", msg, strerror(errnum)); else os::log("libbacktrace: %s\n", msg); } static int bt_countskip(void *vdata, uintptr_t pc) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; Dl_info info1, info2; if (!dladdr((void*)bt_countskip, &info2)) { os::log("dladdr failed, cannot cull stack traces\n"); return 1; } if (!dladdr((void*)pc, &info1)) return 1; if (info1.dli_fbase != info2.dli_fbase) return 1; this_->skipFrames++; return 0; } static int bt_full_callback(void *vdata, uintptr_t pc, const char *file, int line, const char *func) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; RawStackFrame frame = *this_->current_frame; frame.id = this_->nextFrameId++; frame.filename = file; frame.linenumber = line; if (func) frame.function = func; int status; if (func && (func = abi::__cxa_demangle(func, NULL, NULL, &status))) frame.function = func; this_->current_frames->push_back(frame); return 0; } static void dl_fill(RawStackFrame *frame, uintptr_t pc) { Dl_info info = {0}; dladdr((void*)pc, &info); frame->module = info.dli_fname; frame->function = info.dli_sname; frame->offset = info.dli_saddr ? pc - (uintptr_t)info.dli_saddr : pc - (uintptr_t)info.dli_fbase; } static int bt_callback(void *vdata, uintptr_t pc) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; std::vector &frames = this_->cache[pc]; if (!frames.size()) { RawStackFrame frame; dl_fill(&frame, pc); this_->current_frame = &frame; this_->current_frames = &frames; backtrace_pcinfo(this_->state, pc, bt_full_callback, bt_err_callback, vdata); if (!frames.size()) { frame.id = this_->nextFrameId++; frames.push_back(frame); } } this_->current->insert(this_->current->end(), frames.begin(), frames.end()); return this_->current->size() >= BT_DEPTH; } static int bt_full_dump_callback(void *vdata, uintptr_t pc, const char *file, int line, const char *func) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; RawStackFrame *frame = this_->current_frame; frame->filename = file; frame->linenumber = line; if (func) frame->function = func; dumpFrame(*frame); return 0; } static int bt_dump_callback(void *vdata, uintptr_t pc) { libbacktraceProvider *this_ = (libbacktraceProvider*)vdata; RawStackFrame frame; dl_fill(&frame, pc); this_->current_frame = &frame; this_->missingDwarf = false; backtrace_pcinfo(this_->state, pc, bt_full_dump_callback, bt_err_callback, vdata); if (this_->missingDwarf) dumpFrame(frame); return 0; } public: libbacktraceProvider(): state(backtrace_create_state(NULL, 0, bt_err_callback, NULL)) { backtrace_simple(state, 0, bt_countskip, bt_err_callback, this); } std::vector getParsedBacktrace() { std::vector parsedBacktrace; current = &parsedBacktrace; backtrace_simple(state, skipFrames, bt_callback, bt_err_callback, this); return parsedBacktrace; } void dumpBacktrace() { backtrace_simple(state, 0, bt_dump_callback, bt_err_callback, this); } }; std::vector get_backtrace() { static libbacktraceProvider backtraceProvider; return backtraceProvider.getParsedBacktrace(); } void dump_backtrace() { static libbacktraceProvider backtraceProvider; backtraceProvider.dumpBacktrace(); } #else /* !HAVE_BACKTRACE */ std::vector get_backtrace() { return std::vector(); } void dump_backtrace() { } #endif } /* namespace os */ tmpNnpnZF/common/trace_profiler.hpp0000664000175000017500000000725512543167424016776 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * Copyright 2013 Intel, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include namespace trace { struct Profile { struct Call { unsigned no; unsigned program; int64_t gpuStart; int64_t gpuDuration; int64_t cpuStart; int64_t cpuDuration; int64_t vsizeStart; int64_t vsizeDuration; int64_t rssStart; int64_t rssDuration; int64_t pixels; std::string name; }; struct Frame { unsigned no; int64_t gpuStart; int64_t gpuDuration; int64_t cpuStart; int64_t cpuDuration; int64_t vsizeStart; int64_t vsizeDuration; int64_t rssStart; int64_t rssDuration; /* Indices to profile->calls array */ struct { unsigned begin; unsigned end; } calls; }; struct Program { Program() : gpuTotal(0), cpuTotal(0), pixelTotal(0) {} uint64_t gpuTotal; uint64_t cpuTotal; uint64_t pixelTotal; int64_t vsizeTotal; int64_t rssTotal; /* Indices to profile->calls array */ std::vector calls; }; std::vector calls; std::vector frames; std::vector programs; }; class Profiler { public: Profiler(); ~Profiler(); void setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_, bool memoryUsage_); void addCall(unsigned no, const char* name, unsigned program, int64_t pixels, int64_t gpuStart, int64_t gpuDuration, int64_t cpuStart, int64_t cpuDuration, int64_t vsizeStart, int64_t vsizeDuration, int64_t rssStart, int64_t rssDuration); void addFrameEnd(); bool hasBaseTimes(); void setBaseCpuTime(int64_t cpuStart); void setBaseGpuTime(int64_t gpuStart); void setBaseVsizeUsage(int64_t vsizeStart); void setBaseRssUsage(int64_t rssStart); int64_t getBaseCpuTime(); int64_t getBaseGpuTime(); int64_t getBaseVsizeUsage(); int64_t getBaseRssUsage(); static void parseLine(const char* line, Profile* profile); private: int64_t baseGpuTime; int64_t baseCpuTime; int64_t minCpuTime; int64_t baseVsizeUsage; int64_t baseRssUsage; bool cpuTimes; bool gpuTimes; bool pixelsDrawn; bool memoryUsage; }; } tmpNnpnZF/common/trace_option.hpp0000664000175000017500000000272512543167424016461 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once namespace trace { bool boolOption(const char *option, bool default_ = true); int intOption(const char *option, int default_ = 0); } /* namespace trace */ tmpNnpnZF/common/os_binary.hpp0000664000175000017500000000322012543167424015747 0ustar chrischris/************************************************************************** * * Copyright 2011 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Force binary mode standard files on Windows. */ #pragma once #include #ifdef _WIN32 #include #include #include #endif namespace os { void setBinaryMode(FILE *fp) { #ifdef _WIN32 fflush(fp); int mode = _setmode(_fileno(fp), _O_BINARY); assert(mode != -1); (void)mode; #else (void)fp; #endif } } /* namespace os */ tmpNnpnZF/common/trace_dump.hpp0000664000175000017500000000405212543167424016111 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Human-readible dumping. */ #pragma once #include #include "trace_model.hpp" namespace trace { typedef unsigned DumpFlags; enum { DUMP_FLAG_NO_COLOR = (1 << 0), DUMP_FLAG_NO_ARG_NAMES = (1 << 1), DUMP_FLAG_NO_CALL_NO = (1 << 2), DUMP_FLAG_THREAD_IDS = (1 << 3), }; void dump(Value *value, std::ostream &os, DumpFlags flags = 0); inline std::ostream & operator << (std::ostream &os, Value & value) { dump(& value, os); return os; } std::ostream & operator << (std::ostream &os, Value *value); void dump(Call &call, std::ostream &os, DumpFlags flags = 0); inline std::ostream & operator <<(std::ostream &os, Call &call) { dump(call, os); return os; } } /* namespace trace */ tmpNnpnZF/common/trace_writer.cpp0000664000175000017500000002151312543167424016454 0ustar chrischris/************************************************************************** * * Copyright 2007-2009 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include #include "os.hpp" #include "trace_file.hpp" #include "trace_writer.hpp" #include "trace_format.hpp" namespace trace { Writer::Writer() : call_no(0) { m_file = File::createSnappy(); close(); } Writer::~Writer() { close(); delete m_file; m_file = NULL; } void Writer::close(void) { m_file->close(); } bool Writer::open(const char *filename) { close(); if (!m_file->open(filename, File::Write)) { return false; } call_no = 0; functions.clear(); structs.clear(); enums.clear(); bitmasks.clear(); frames.clear(); _writeUInt(TRACE_VERSION); return true; } void inline Writer::_write(const void *sBuffer, size_t dwBytesToWrite) { m_file->write(sBuffer, dwBytesToWrite); } void inline Writer::_writeByte(char c) { _write(&c, 1); } void inline Writer::_writeUInt(unsigned long long value) { char buf[2 * sizeof value]; unsigned len; len = 0; do { assert(len < sizeof buf); buf[len] = 0x80 | (value & 0x7f); value >>= 7; ++len; } while (value); assert(len); buf[len - 1] &= 0x7f; _write(buf, len); } void inline Writer::_writeFloat(float value) { static_assert(sizeof value == 4, "float is not 4 bytes"); _write((const char *)&value, sizeof value); } void inline Writer::_writeDouble(double value) { static_assert(sizeof value == 8, "double is not 8 bytes"); _write((const char *)&value, sizeof value); } void inline Writer::_writeString(const char *str) { size_t len = strlen(str); _writeUInt(len); _write(str, len); } inline bool lookup(std::vector &map, size_t index) { if (index >= map.size()) { map.resize(index + 1); return false; } else { return map[index]; } } void Writer::beginBacktrace(unsigned num_frames) { if (num_frames) { _writeByte(trace::CALL_BACKTRACE); _writeUInt(num_frames); } } void Writer::writeStackFrame(const RawStackFrame *frame) { _writeUInt(frame->id); if (!lookup(frames, frame->id)) { if (frame->module != NULL) { _writeByte(trace::BACKTRACE_MODULE); _writeString(frame->module); } if (frame->function != NULL) { _writeByte(trace::BACKTRACE_FUNCTION); _writeString(frame->function); } if (frame->filename != NULL) { _writeByte(trace::BACKTRACE_FILENAME); _writeString(frame->filename); } if (frame->linenumber >= 0) { _writeByte(trace::BACKTRACE_LINENUMBER); _writeUInt(frame->linenumber); } if (frame->offset >= 0) { _writeByte(trace::BACKTRACE_OFFSET); _writeUInt(frame->offset); } _writeByte(trace::BACKTRACE_END); frames[frame->id] = true; } } unsigned Writer::beginEnter(const FunctionSig *sig, unsigned thread_id) { _writeByte(trace::EVENT_ENTER); _writeUInt(thread_id); _writeUInt(sig->id); if (!lookup(functions, sig->id)) { _writeString(sig->name); _writeUInt(sig->num_args); for (unsigned i = 0; i < sig->num_args; ++i) { _writeString(sig->arg_names[i]); } functions[sig->id] = true; } return call_no++; } void Writer::endEnter(void) { _writeByte(trace::CALL_END); } void Writer::beginLeave(unsigned call) { _writeByte(trace::EVENT_LEAVE); _writeUInt(call); } void Writer::endLeave(void) { _writeByte(trace::CALL_END); } void Writer::beginArg(unsigned index) { _writeByte(trace::CALL_ARG); _writeUInt(index); } void Writer::beginReturn(void) { _writeByte(trace::CALL_RET); } void Writer::beginArray(size_t length) { _writeByte(trace::TYPE_ARRAY); _writeUInt(length); } void Writer::beginStruct(const StructSig *sig) { _writeByte(trace::TYPE_STRUCT); _writeUInt(sig->id); if (!lookup(structs, sig->id)) { _writeString(sig->name); _writeUInt(sig->num_members); for (unsigned i = 0; i < sig->num_members; ++i) { _writeString(sig->member_names[i]); } structs[sig->id] = true; } } void Writer::beginRepr(void) { _writeByte(trace::TYPE_REPR); } void Writer::writeBool(bool value) { _writeByte(value ? trace::TYPE_TRUE : trace::TYPE_FALSE); } void Writer::writeSInt(signed long long value) { if (value < 0) { _writeByte(trace::TYPE_SINT); _writeUInt(-value); } else { _writeByte(trace::TYPE_UINT); _writeUInt(value); } } void Writer::writeUInt(unsigned long long value) { _writeByte(trace::TYPE_UINT); _writeUInt(value); } void Writer::writeFloat(float value) { _writeByte(trace::TYPE_FLOAT); _writeFloat(value); } void Writer::writeDouble(double value) { _writeByte(trace::TYPE_DOUBLE); _writeDouble(value); } void Writer::writeString(const char *str) { if (!str) { Writer::writeNull(); return; } _writeByte(trace::TYPE_STRING); _writeString(str); } void Writer::writeString(const char *str, size_t len) { if (!str) { Writer::writeNull(); return; } _writeByte(trace::TYPE_STRING); _writeUInt(len); _write(str, len); } void Writer::writeWString(const wchar_t *str, size_t len) { if (!str) { Writer::writeNull(); return; } /* XXX: Encode wide-strings as ASCII for now, to avoid introducing a trace format version bump. */ #if 0 _writeByte(trace::TYPE_WSTRING); size_t len = wcslen(str); _writeUInt(len); for (size_t i = 0; i < len; ++i) { _writeUInt(str[i]); } #else _writeByte(trace::TYPE_STRING); _writeUInt(len); for (size_t i = 0; i < len; ++i) { wchar_t wc = str[i]; char c = wc >= 0 && wc < 0x80 ? (char)wc : '?'; _writeByte(c); } #endif } void Writer::writeWString(const wchar_t *str) { if (!str) { Writer::writeNull(); return; } size_t len = wcslen(str); writeWString(str, len); } void Writer::writeBlob(const void *data, size_t size) { if (!data) { Writer::writeNull(); return; } _writeByte(trace::TYPE_BLOB); _writeUInt(size); if (size) { _write(data, size); } } void Writer::writeEnum(const EnumSig *sig, signed long long value) { _writeByte(trace::TYPE_ENUM); _writeUInt(sig->id); if (!lookup(enums, sig->id)) { _writeUInt(sig->num_values); for (unsigned i = 0; i < sig->num_values; ++i) { _writeString(sig->values[i].name); writeSInt(sig->values[i].value); } enums[sig->id] = true; } writeSInt(value); } void Writer::writeBitmask(const BitmaskSig *sig, unsigned long long value) { _writeByte(trace::TYPE_BITMASK); _writeUInt(sig->id); if (!lookup(bitmasks, sig->id)) { _writeUInt(sig->num_flags); for (unsigned i = 0; i < sig->num_flags; ++i) { if (i != 0 && sig->flags[i].value == 0) { os::log("apitrace: warning: sig %s is zero but is not first flag\n", sig->flags[i].name); } _writeString(sig->flags[i].name); _writeUInt(sig->flags[i].value); } bitmasks[sig->id] = true; } _writeUInt(value); } void Writer::writeNull(void) { _writeByte(trace::TYPE_NULL); } void Writer::writePointer(unsigned long long addr) { if (!addr) { Writer::writeNull(); return; } _writeByte(trace::TYPE_OPAQUE); _writeUInt(addr); } } /* namespace trace */ tmpNnpnZF/common/trace_parser.cpp0000664000175000017500000006124112543167424016436 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "trace_file.hpp" #include "trace_dump.hpp" #include "trace_parser.hpp" #define TRACE_VERBOSE 0 namespace trace { Parser::Parser() { file = NULL; next_call_no = 0; version = 0; api = API_UNKNOWN; glGetErrorSig = NULL; } Parser::~Parser() { close(); } bool Parser::open(const char *filename) { assert(!file); file = File::createForRead(filename); if (!file) { return false; } version = read_uint(); if (version > TRACE_VERSION) { std::cerr << "error: unsupported trace format version " << version << "\n"; delete file; file = NULL; return false; } api = API_UNKNOWN; return true; } template inline void deleteAll(Iter begin, Iter end) { while (begin != end) { delete *begin; ++begin; } } template inline void deleteAll(Container &c) { deleteAll(c.begin(), c.end()); c.clear(); } void Parser::close(void) { if (file) { file->close(); delete file; file = NULL; } deleteAll(calls); // Delete all signature data. Signatures are mere structures which don't // own their own memory, so we need to destroy all data we created here. for (FunctionMap::iterator it = functions.begin(); it != functions.end(); ++it) { FunctionSigState *sig = *it; if (sig) { delete [] sig->name; for (unsigned arg = 0; arg < sig->num_args; ++arg) { delete [] sig->arg_names[arg]; } delete [] sig->arg_names; delete sig; } } functions.clear(); for (StructMap::iterator it = structs.begin(); it != structs.end(); ++it) { StructSigState *sig = *it; if (sig) { delete [] sig->name; for (unsigned member = 0; member < sig->num_members; ++member) { delete [] sig->member_names[member]; } delete [] sig->member_names; delete sig; } } structs.clear(); for (EnumMap::iterator it = enums.begin(); it != enums.end(); ++it) { EnumSigState *sig = *it; if (sig) { for (unsigned value = 0; value < sig->num_values; ++value) { delete [] sig->values[value].name; } delete [] sig->values; delete sig; } } enums.clear(); for (BitmaskMap::iterator it = bitmasks.begin(); it != bitmasks.end(); ++it) { BitmaskSigState *sig = *it; if (sig) { for (unsigned flag = 0; flag < sig->num_flags; ++flag) { delete [] sig->flags[flag].name; } delete [] sig->flags; delete sig; } } bitmasks.clear(); next_call_no = 0; } void Parser::getBookmark(ParseBookmark &bookmark) { bookmark.offset = file->currentOffset(); bookmark.next_call_no = next_call_no; } void Parser::setBookmark(const ParseBookmark &bookmark) { file->setCurrentOffset(bookmark.offset); next_call_no = bookmark.next_call_no; // Simply ignore all pending calls deleteAll(calls); } Call *Parser::parse_call(Mode mode) { do { Call *call; int c = read_byte(); switch (c) { case trace::EVENT_ENTER: #if TRACE_VERBOSE std::cerr << "\tENTER\n"; #endif parse_enter(mode); break; case trace::EVENT_LEAVE: #if TRACE_VERBOSE std::cerr << "\tLEAVE\n"; #endif call = parse_leave(mode); if (call) { adjust_call_flags(call); return call; } break; default: std::cerr << "error: unknown event " << c << "\n"; exit(1); case -1: if (!calls.empty()) { call = calls.front(); call->flags |= CALL_FLAG_INCOMPLETE; calls.pop_front(); adjust_call_flags(call); return call; } return NULL; } } while(true); } /** * Helper function to lookup an ID in a vector, resizing the vector if it doesn't fit. */ template T *lookup(std::vector &map, size_t index) { if (index >= map.size()) { map.resize(index + 1); return NULL; } else { return map[index]; } } Parser::FunctionSigFlags * Parser::parse_function_sig(void) { size_t id = read_uint(); FunctionSigState *sig = lookup(functions, id); if (!sig) { /* parse the signature */ sig = new FunctionSigState; sig->id = id; sig->name = read_string(); sig->num_args = read_uint(); const char **arg_names = new const char *[sig->num_args]; for (unsigned i = 0; i < sig->num_args; ++i) { arg_names[i] = read_string(); } sig->arg_names = arg_names; sig->flags = lookupCallFlags(sig->name); sig->fileOffset = file->currentOffset(); functions[id] = sig; /** * Try to autodetect the API. * * XXX: Ideally we would allow to mix multiple APIs in a single trace, * but as it stands today, retrace is done separately for each API. */ if (api == API_UNKNOWN) { const char *n = sig->name; if ((n[0] == 'g' && n[1] == 'l' && n[2] == 'X') || // glX* (n[0] == 'w' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') || // wgl[A-Z]* (n[0] == 'C' && n[1] == 'G' && n[2] == 'L')) { // CGL* api = trace::API_GL; } else if (n[0] == 'e' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') { // egl[A-Z]* api = trace::API_EGL; } else if ((n[0] == 'D' && ((n[1] == 'i' && n[2] == 'r' && n[3] == 'e' && n[4] == 'c' && n[5] == 't') || // Direct* (n[1] == '3' && n[2] == 'D'))) || // D3D* (n[0] == 'C' && n[1] == 'r' && n[2] == 'e' && n[3] == 'a' && n[4] == 't' && n[5] == 'e')) { // Create* api = trace::API_DX; } else { /* TODO */ } } /** * Note down the signature of special functions for future reference. * * NOTE: If the number of comparisons increases we should move this to a * separate function and use bisection. */ if (sig->num_args == 0 && strcmp(sig->name, "glGetError") == 0) { glGetErrorSig = sig; } } else if (file->currentOffset() < sig->fileOffset) { /* skip over the signature */ skip_string(); /* name */ unsigned num_args = read_uint(); for (unsigned i = 0; i < num_args; ++i) { skip_string(); /*arg_name*/ } } assert(sig); return sig; } StructSig *Parser::parse_struct_sig() { size_t id = read_uint(); StructSigState *sig = lookup(structs, id); if (!sig) { /* parse the signature */ sig = new StructSigState; sig->id = id; sig->name = read_string(); sig->num_members = read_uint(); const char **member_names = new const char *[sig->num_members]; for (unsigned i = 0; i < sig->num_members; ++i) { member_names[i] = read_string(); } sig->member_names = member_names; sig->fileOffset = file->currentOffset(); structs[id] = sig; } else if (file->currentOffset() < sig->fileOffset) { /* skip over the signature */ skip_string(); /* name */ unsigned num_members = read_uint(); for (unsigned i = 0; i < num_members; ++i) { skip_string(); /* member_name */ } } assert(sig); return sig; } /* * Old enum signatures would cover a single name/value only: * * enum_sig = id name value * | id */ EnumSig *Parser::parse_old_enum_sig() { size_t id = read_uint(); EnumSigState *sig = lookup(enums, id); if (!sig) { /* parse the signature */ sig = new EnumSigState; sig->id = id; sig->num_values = 1; EnumValue *values = new EnumValue[sig->num_values]; values->name = read_string(); values->value = read_sint(); sig->values = values; sig->fileOffset = file->currentOffset(); enums[id] = sig; } else if (file->currentOffset() < sig->fileOffset) { /* skip over the signature */ skip_string(); /*name*/ scan_value(); } assert(sig); return sig; } EnumSig *Parser::parse_enum_sig() { size_t id = read_uint(); EnumSigState *sig = lookup(enums, id); if (!sig) { /* parse the signature */ sig = new EnumSigState; sig->id = id; sig->num_values = read_uint(); EnumValue *values = new EnumValue[sig->num_values]; for (EnumValue *it = values; it != values + sig->num_values; ++it) { it->name = read_string(); it->value = read_sint(); } sig->values = values; sig->fileOffset = file->currentOffset(); enums[id] = sig; } else if (file->currentOffset() < sig->fileOffset) { /* skip over the signature */ int num_values = read_uint(); for (int i = 0; i < num_values; ++i) { skip_string(); /*name */ skip_sint(); /* value */ } } assert(sig); return sig; } BitmaskSig *Parser::parse_bitmask_sig() { size_t id = read_uint(); BitmaskSigState *sig = lookup(bitmasks, id); if (!sig) { /* parse the signature */ sig = new BitmaskSigState; sig->id = id; sig->num_flags = read_uint(); BitmaskFlag *flags = new BitmaskFlag[sig->num_flags]; for (BitmaskFlag *it = flags; it != flags + sig->num_flags; ++it) { it->name = read_string(); it->value = read_uint(); if (it->value == 0 && it != flags) { std::cerr << "warning: bitmask " << it->name << " is zero but is not first flag\n"; } } sig->flags = flags; sig->fileOffset = file->currentOffset(); bitmasks[id] = sig; } else if (file->currentOffset() < sig->fileOffset) { /* skip over the signature */ int num_flags = read_uint(); for (int i = 0; i < num_flags; ++i) { skip_string(); /*name */ skip_uint(); /* value */ } } assert(sig); return sig; } void Parser::parse_enter(Mode mode) { unsigned thread_id; if (version >= 4) { thread_id = read_uint(); } else { thread_id = 0; } FunctionSigFlags *sig = parse_function_sig(); Call *call = new Call(sig, sig->flags, thread_id); call->no = next_call_no++; if (parse_call_details(call, mode)) { calls.push_back(call); } else { delete call; } } Call *Parser::parse_leave(Mode mode) { unsigned call_no = read_uint(); Call *call = NULL; for (CallList::iterator it = calls.begin(); it != calls.end(); ++it) { if ((*it)->no == call_no) { call = *it; calls.erase(it); break; } } if (!call) { /* This might happen on random access, when an asynchronous call is stranded * between two frames. We won't return this call, but we still need to skip * over its data. */ const FunctionSig sig = {0, NULL, 0, NULL}; call = new Call(&sig, 0, 0); parse_call_details(call, SCAN); delete call; return NULL; } if (parse_call_details(call, mode)) { return call; } else { delete call; return NULL; } } bool Parser::parse_call_details(Call *call, Mode mode) { do { int c = read_byte(); switch (c) { case trace::CALL_END: #if TRACE_VERBOSE std::cerr << "\tCALL_END\n"; #endif return true; case trace::CALL_ARG: #if TRACE_VERBOSE std::cerr << "\tCALL_ARG\n"; #endif parse_arg(call, mode); break; case trace::CALL_RET: #if TRACE_VERBOSE std::cerr << "\tCALL_RET\n"; #endif call->ret = parse_value(mode); break; case trace::CALL_BACKTRACE: #if TRACE_VERBOSE std::cerr << "\tCALL_BACKTRACE\n"; #endif parse_call_backtrace(call, mode); break; default: std::cerr << "error: ("<name()<< ") unknown call detail " << c << "\n"; exit(1); case -1: return false; } } while(true); } bool Parser::parse_call_backtrace(Call *call, Mode mode) { unsigned num_frames = read_uint(); Backtrace* backtrace = new Backtrace(num_frames); for (unsigned i = 0; i < num_frames; ++i) { (*backtrace)[i] = parse_backtrace_frame(mode); } call->backtrace = backtrace; return true; } StackFrame * Parser::parse_backtrace_frame(Mode mode) { size_t id = read_uint(); StackFrameState *frame = lookup(frames, id); if (!frame) { frame = new StackFrameState; int c = read_byte(); while (c != trace::BACKTRACE_END && c != -1) { switch (c) { case trace::BACKTRACE_MODULE: frame->module = read_string(); break; case trace::BACKTRACE_FUNCTION: frame->function = read_string(); break; case trace::BACKTRACE_FILENAME: frame->filename = read_string(); break; case trace::BACKTRACE_LINENUMBER: frame->linenumber = read_uint(); break; case trace::BACKTRACE_OFFSET: frame->offset = read_uint(); break; default: std::cerr << "error: unknown backtrace detail " << c << "\n"; exit(1); } c = read_byte(); } frame->fileOffset = file->currentOffset(); frames[id] = frame; } else if (file->currentOffset() < frame->fileOffset) { int c = read_byte(); while (c != trace::BACKTRACE_END && c != -1) { switch (c) { case trace::BACKTRACE_MODULE: scan_string(); break; case trace::BACKTRACE_FUNCTION: scan_string(); break; case trace::BACKTRACE_FILENAME: scan_string(); break; case trace::BACKTRACE_LINENUMBER: scan_uint(); break; case trace::BACKTRACE_OFFSET: scan_uint(); break; default: std::cerr << "error: unknown backtrace detail " << c << "\n"; exit(1); } c = read_byte(); } } return frame; } /** * Make adjustments to this particular call flags. * * NOTE: This is called per-call so no string comparisons should be done here. * All name comparisons should be done when the signature is parsed instead. */ void Parser::adjust_call_flags(Call *call) { // Mark glGetError() = GL_NO_ERROR as verbose if (call->sig == glGetErrorSig && call->ret && call->ret->toSInt() == 0) { call->flags |= CALL_FLAG_VERBOSE; } } void Parser::parse_arg(Call *call, Mode mode) { unsigned index = read_uint(); Value *value = parse_value(mode); if (value) { if (index >= call->args.size()) { call->args.resize(index + 1); } call->args[index].value = value; } } Value *Parser::parse_value(void) { int c; Value *value; c = read_byte(); switch (c) { case trace::TYPE_NULL: value = new Null; break; case trace::TYPE_FALSE: value = new Bool(false); break; case trace::TYPE_TRUE: value = new Bool(true); break; case trace::TYPE_SINT: value = parse_sint(); break; case trace::TYPE_UINT: value = parse_uint(); break; case trace::TYPE_FLOAT: value = parse_float(); break; case trace::TYPE_DOUBLE: value = parse_double(); break; case trace::TYPE_STRING: value = parse_string(); break; case trace::TYPE_ENUM: value = parse_enum(); break; case trace::TYPE_BITMASK: value = parse_bitmask(); break; case trace::TYPE_ARRAY: value = parse_array(); break; case trace::TYPE_STRUCT: value = parse_struct(); break; case trace::TYPE_BLOB: value = parse_blob(); break; case trace::TYPE_OPAQUE: value = parse_opaque(); break; case trace::TYPE_REPR: value = parse_repr(); break; case trace::TYPE_WSTRING: value = parse_wstring(); break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); case -1: value = NULL; break; } #if TRACE_VERBOSE if (value) { std::cerr << "\tVALUE "; trace::dump(value, std::cerr); std::cerr << "\n"; } #endif return value; } void Parser::scan_value(void) { int c = read_byte(); switch (c) { case trace::TYPE_NULL: case trace::TYPE_FALSE: case trace::TYPE_TRUE: break; case trace::TYPE_SINT: scan_sint(); break; case trace::TYPE_UINT: scan_uint(); break; case trace::TYPE_FLOAT: scan_float(); break; case trace::TYPE_DOUBLE: scan_double(); break; case trace::TYPE_STRING: scan_string(); break; case trace::TYPE_ENUM: scan_enum(); break; case trace::TYPE_BITMASK: scan_bitmask(); break; case trace::TYPE_ARRAY: scan_array(); break; case trace::TYPE_STRUCT: scan_struct(); break; case trace::TYPE_BLOB: scan_blob(); break; case trace::TYPE_OPAQUE: scan_opaque(); break; case trace::TYPE_REPR: scan_repr(); break; case trace::TYPE_WSTRING: scan_wstring(); break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); case -1: break; } } Value *Parser::parse_sint() { return new SInt(-(signed long long)read_uint()); } void Parser::scan_sint() { skip_uint(); } Value *Parser::parse_uint() { return new UInt(read_uint()); } void Parser::scan_uint() { skip_uint(); } Value *Parser::parse_float() { float value; file->read(&value, sizeof value); return new Float(value); } void Parser::scan_float() { file->skip(sizeof(float)); } Value *Parser::parse_double() { double value; file->read(&value, sizeof value); return new Double(value); } void Parser::scan_double() { file->skip(sizeof(double)); } Value *Parser::parse_string() { return new String(read_string()); } void Parser::scan_string() { skip_string(); } Value *Parser::parse_enum() { EnumSig *sig; signed long long value; if (version >= 3) { sig = parse_enum_sig(); value = read_sint(); } else { sig = parse_old_enum_sig(); assert(sig->num_values == 1); value = sig->values->value; } return new Enum(sig, value); } void Parser::scan_enum() { if (version >= 3) { parse_enum_sig(); skip_sint(); } else { parse_old_enum_sig(); } } Value *Parser::parse_bitmask() { BitmaskSig *sig = parse_bitmask_sig(); unsigned long long value = read_uint(); return new Bitmask(sig, value); } void Parser::scan_bitmask() { parse_bitmask_sig(); skip_uint(); /* value */ } Value *Parser::parse_array(void) { size_t len = read_uint(); Array *array = new Array(len); for (size_t i = 0; i < len; ++i) { array->values[i] = parse_value(); } return array; } void Parser::scan_array(void) { size_t len = read_uint(); for (size_t i = 0; i < len; ++i) { scan_value(); } } Value *Parser::parse_blob(void) { size_t size = read_uint(); Blob *blob = new Blob(size); if (size) { file->read(blob->buf, size); } return blob; } void Parser::scan_blob(void) { size_t size = read_uint(); if (size) { file->skip(size); } } Value *Parser::parse_struct() { StructSig *sig = parse_struct_sig(); Struct *value = new Struct(sig); for (size_t i = 0; i < sig->num_members; ++i) { value->members[i] = parse_value(); } return value; } void Parser::scan_struct() { StructSig *sig = parse_struct_sig(); for (size_t i = 0; i < sig->num_members; ++i) { scan_value(); } } Value *Parser::parse_opaque() { unsigned long long addr; addr = read_uint(); return new Pointer(addr); } void Parser::scan_opaque() { skip_uint(); } Value *Parser::parse_repr() { Value *humanValue = parse_value(); Value *machineValue = parse_value(); return new Repr(humanValue, machineValue); } void Parser::scan_repr() { scan_value(); scan_value(); } Value *Parser::parse_wstring() { size_t len = read_uint(); wchar_t * value = new wchar_t[len + 1]; for (size_t i = 0; i < len; ++i) { value[i] = read_uint(); } value[len] = 0; #if TRACE_VERBOSE std::cerr << "\tWSTRING \"" << value << "\"\n"; #endif return new WString(value); } void Parser::scan_wstring() { size_t len = read_uint(); for (size_t i = 0; i < len; ++i) { skip_uint(); } } const char * Parser::read_string(void) { size_t len = read_uint(); char * value = new char[len + 1]; if (len) { file->read(value, len); } value[len] = 0; #if TRACE_VERBOSE std::cerr << "\tSTRING \"" << value << "\"\n"; #endif return value; } void Parser::skip_string(void) { size_t len = read_uint(); file->skip(len); } /* * For the time being, a signed int is encoded as any other value, but we here parse * it without the extra baggage of the Value class. */ signed long long Parser::read_sint(void) { int c; c = read_byte(); switch (c) { case trace::TYPE_SINT: return -(signed long long)read_uint(); case trace::TYPE_UINT: return read_uint(); default: std::cerr << "error: unexpected type " << c << "\n"; exit(1); case -1: return 0; } } void Parser::skip_sint(void) { skip_byte(); skip_uint(); } unsigned long long Parser::read_uint(void) { unsigned long long value = 0; int c; unsigned shift = 0; do { c = file->getc(); if (c == -1) { break; } value |= (unsigned long long)(c & 0x7f) << shift; shift += 7; } while(c & 0x80); #if TRACE_VERBOSE std::cerr << "\tUINT " << value << "\n"; #endif return value; } void Parser::skip_uint(void) { int c; do { c = file->getc(); if (c == -1) { break; } } while(c & 0x80); } inline int Parser::read_byte(void) { int c = file->getc(); #if TRACE_VERBOSE if (c < 0) std::cerr << "\tEOF" << "\n"; else std::cerr << "\tBYTE 0x" << std::hex << c << std::dec << "\n"; #endif return c; } inline void Parser::skip_byte(void) { file->skip(1); } } /* namespace trace */ tmpNnpnZF/common/trace_fast_callset.hpp0000664000175000017500000001102412543167424017605 0ustar chrischris/********************************************************************* * * Copyright 2012 Intel Corporation * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #pragma once #include "trace_model.hpp" namespace trace { /* A set of call numbers. * * This was originally designed as a more efficient replacement for * std::set which was used heavily within the trim code's * TraceAnalyzer. This is quite similar to the trace::CallSet with the * following differences: * * Simplifications: * * * There is no support here for the 'step' and 'freq' features * supported by trace::CallSet. * * Sophistications: * * * This callset is implemented with a skip list for * (probabilistically) logarithmic lookup times for * out-of-order lookups. * * * This callset optimizes the addition of new calls which are * within or adjacent to existing ranges, (by either doing * nothing, expanding the limits of an existing range, or also * merging two or more ranges). * * It would not be impossible to extend this code to support the * missing features of trace::CallSet, (though the 'step' and 'freq' * features would prevent some range-extending and merging * optimizations in some cases). */ class FastCallRangePtr; class FastCallRange { public: CallNo first; CallNo last; int level; std::vector next; // (NOTE: Initalize ref_counter to 0 in all constructors) FastCallRange(CallNo first, CallNo last, int level); bool contains(CallNo call_no) const; private: friend class FastCallRangePtr; size_t ref_counter; // ref_counter must be initialized to 0 by all constructors // ref_counter is the number of FastCallRangePtr objects that point at this }; class FastCallRangePtr { public: FastCallRange* operator-> () { return this->ptr; } FastCallRange& operator * () { return *this->ptr; } FastCallRange* operator ()() { return this->ptr; } // get pointer FastCallRangePtr () : ptr(0) {} FastCallRangePtr(FastCallRange* _ptr) : ptr(_ptr) { if (this->ptr) ++this->ptr->ref_counter; } ~FastCallRangePtr() { if (this->ptr) if (--this->ptr->ref_counter == 0) delete this->ptr; } FastCallRangePtr(FastCallRangePtr const& _ptr) : ptr(_ptr.ptr) { if (this->ptr) ++this->ptr->ref_counter; } FastCallRangePtr& operator= (FastCallRangePtr const& new_ptr) { // DO NOT CHANGE THE ORDER OF THESE STATEMENTS! // (This order properly handles self-assignment) // (This order also properly handles recursion, e.g., // if a FastCallRange contains FastCallRangePtrs) FastCallRange* const old_ptr = this->ptr; this->ptr = new_ptr.ptr; if (this->ptr) ++this->ptr->ref_counter; if (old_ptr) { if (--old_ptr->ref_counter == 0) delete old_ptr; } return *this; } private: FastCallRange* ptr; }; class FastCallSet { public: FastCallRange head; int max_level; FastCallSet(); bool empty(void) const; void add(CallNo first, CallNo last); void add(CallNo call_no); bool contains(CallNo call_no) const; }; } /* namespace trace */ tmpNnpnZF/common/trace_model.cpp0000664000175000017500000002444512543167424016247 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "trace_model.hpp" namespace trace { static Null null; Call::~Call() { for (unsigned i = 0; i < args.size(); ++i) { delete args[i].value; } if (ret) { delete ret; } } Value & Call::argByName(const char *argName) { for (unsigned i = 0; i < sig->num_args; ++i) { if (strcmp(sig->arg_names[i], argName) == 0) { return arg(i); } } return null; } String::~String() { delete [] value; } WString::~WString() { delete [] value; } Struct::~Struct() { for (std::vector::iterator it = members.begin(); it != members.end(); ++it) { delete *it; } } Array::~Array() { for (std::vector::iterator it = values.begin(); it != values.end(); ++it) { delete *it; } } #define BLOB_MAX_BOUND_SIZE (1*1024*1024*1024) class BoundBlob { public: static size_t totalSize; private: size_t size; char *buf; public: inline BoundBlob(size_t _size, char *_buf) : size(_size), buf(_buf) { assert(totalSize + size >= totalSize); totalSize += size; } inline ~BoundBlob() { assert(totalSize >= size); totalSize -= size; delete [] buf; } // Fake move constructor // std::deque:push_back with move semantics was added only from c++11. BoundBlob(const BoundBlob & other) { size = other.size; buf = other.buf; const_cast(other).size = 0; const_cast(other).buf = 0; } // Disallow assignment operator BoundBlob& operator = (const BoundBlob &); }; size_t BoundBlob::totalSize = 0; typedef std::deque BoundBlobQueue; static BoundBlobQueue boundBlobQueue; Blob::~Blob() { // Blobs are often bound and referred during many calls, so we can't delete // them here in that case. // // Once bound there is no way to know when they were unbound, which // effectively means we have to leak them. But some applications // (particularly OpenGL applications that use vertex arrays in user memory) // we can easily exhaust all memory. So instead we maintain a queue of // bound blobs and keep the total size bounded. if (!bound) { delete [] buf; return; } while (!boundBlobQueue.empty() && BoundBlob::totalSize + size > BLOB_MAX_BOUND_SIZE) { boundBlobQueue.pop_front(); } boundBlobQueue.push_back(BoundBlob(size, buf)); } StackFrame::~StackFrame() { if (module != NULL) { delete [] module; } if (function != NULL) { delete [] function; } if (filename != NULL) { delete [] filename; } } // bool cast bool Null ::toBool(void) const { return false; } bool Bool ::toBool(void) const { return value; } bool SInt ::toBool(void) const { return value != 0; } bool UInt ::toBool(void) const { return value != 0; } bool Float ::toBool(void) const { return value != 0; } bool Double ::toBool(void) const { return value != 0; } bool String ::toBool(void) const { return true; } bool WString::toBool(void) const { return true; } bool Struct ::toBool(void) const { return true; } bool Array ::toBool(void) const { return true; } bool Blob ::toBool(void) const { return true; } bool Pointer::toBool(void) const { return value != 0; } bool Repr ::toBool(void) const { return static_cast(machineValue); } // signed integer cast signed long long Value ::toSInt(void) const { assert(0); return 0; } signed long long Null ::toSInt(void) const { return 0; } signed long long Bool ::toSInt(void) const { return static_cast(value); } signed long long SInt ::toSInt(void) const { return value; } signed long long UInt ::toSInt(void) const { assert(static_cast(value) >= 0); return static_cast(value); } signed long long Float ::toSInt(void) const { return static_cast(value); } signed long long Double ::toSInt(void) const { return static_cast(value); } signed long long Repr ::toSInt(void) const { return machineValue->toSInt(); } // unsigned integer cast unsigned long long Value ::toUInt(void) const { assert(0); return 0; } unsigned long long Null ::toUInt(void) const { return 0; } unsigned long long Bool ::toUInt(void) const { return static_cast(value); } unsigned long long SInt ::toUInt(void) const { assert(value >= 0); return static_cast(value); } unsigned long long UInt ::toUInt(void) const { return value; } unsigned long long Float ::toUInt(void) const { return static_cast(value); } unsigned long long Double ::toUInt(void) const { return static_cast(value); } unsigned long long Repr ::toUInt(void) const { return machineValue->toUInt(); } // floating point cast float Value ::toFloat(void) const { assert(0); return 0; } float Null ::toFloat(void) const { return 0; } float Bool ::toFloat(void) const { return static_cast(value); } float SInt ::toFloat(void) const { return static_cast(value); } float UInt ::toFloat(void) const { return static_cast(value); } float Float ::toFloat(void) const { return value; } float Double ::toFloat(void) const { return value; } float Repr ::toFloat(void) const { return machineValue->toFloat(); } // floating point cast double Value ::toDouble(void) const { assert(0); return 0; } double Null ::toDouble(void) const { return 0; } double Bool ::toDouble(void) const { return static_cast(value); } double SInt ::toDouble(void) const { return static_cast(value); } double UInt ::toDouble(void) const { return static_cast(value); } double Float ::toDouble(void) const { return value; } double Double ::toDouble(void) const { return value; } double Repr ::toDouble(void) const { return machineValue->toDouble(); } // pointer cast void * Value ::toPointer(void) const { assert(0); return NULL; } void * Null ::toPointer(void) const { return NULL; } void * Blob ::toPointer(void) const { return buf; } void * Pointer::toPointer(void) const { return (void *)value; } void * Repr ::toPointer(void) const { return machineValue->toPointer(); } void * Value ::toPointer(bool bind) { assert(0); return NULL; } void * Null ::toPointer(bool bind) { return NULL; } void * Blob ::toPointer(bool bind) { if (bind) bound = true; return buf; } void * Pointer::toPointer(bool bind) { return (void *)value; } void * Repr ::toPointer(bool bind) { return machineValue->toPointer(bind); } // unsigned int pointer cast unsigned long long Value ::toUIntPtr(void) const { assert(0); return 0; } unsigned long long Null ::toUIntPtr(void) const { return 0; } unsigned long long Pointer::toUIntPtr(void) const { return value; } unsigned long long Repr ::toUIntPtr(void) const { return machineValue->toUIntPtr(); } // string cast const char * Value ::toString(void) const { assert(0); return NULL; } const char * Null ::toString(void) const { return NULL; } const char * String::toString(void) const { return value; } const char * Repr ::toString(void) const { return machineValue->toString(); } // virtual Value::visit() void Null ::visit(Visitor &visitor) { visitor.visit(this); } void Bool ::visit(Visitor &visitor) { visitor.visit(this); } void SInt ::visit(Visitor &visitor) { visitor.visit(this); } void UInt ::visit(Visitor &visitor) { visitor.visit(this); } void Float ::visit(Visitor &visitor) { visitor.visit(this); } void Double ::visit(Visitor &visitor) { visitor.visit(this); } void String ::visit(Visitor &visitor) { visitor.visit(this); } void WString::visit(Visitor &visitor) { visitor.visit(this); } void Enum ::visit(Visitor &visitor) { visitor.visit(this); } void Bitmask::visit(Visitor &visitor) { visitor.visit(this); } void Struct ::visit(Visitor &visitor) { visitor.visit(this); } void Array ::visit(Visitor &visitor) { visitor.visit(this); } void Blob ::visit(Visitor &visitor) { visitor.visit(this); } void Pointer::visit(Visitor &visitor) { visitor.visit(this); } void Repr ::visit(Visitor &visitor) { visitor.visit(this); } void Visitor::visit(Null *) { assert(0); } void Visitor::visit(Bool *) { assert(0); } void Visitor::visit(SInt *) { assert(0); } void Visitor::visit(UInt *) { assert(0); } void Visitor::visit(Float *) { assert(0); } void Visitor::visit(Double *) { assert(0); } void Visitor::visit(String *) { assert(0); } void Visitor::visit(WString *) { assert(0); } void Visitor::visit(Enum *node) { assert(0); } void Visitor::visit(Bitmask *node) { visit(static_cast(node)); } void Visitor::visit(Struct *) { assert(0); } void Visitor::visit(Array *) { assert(0); } void Visitor::visit(Blob *) { assert(0); } void Visitor::visit(Pointer *) { assert(0); } void Visitor::visit(Repr *node) { node->machineValue->visit(*this); } Value & Value::operator[] (size_t index) const { const Array *array = toArray(); if (array) { if (index < array->values.size()) { return *array->values[index]; } } return null; } } /* namespace trace */ tmpNnpnZF/common/os_backtrace.hpp0000664000175000017500000000303412543167424016405 0ustar chrischris/************************************************************************** * * Copyright 2013 Samsung * Contributed by Eugene Velesevich * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "trace_model.hpp" namespace os { using trace::RawStackFrame; std::vector get_backtrace(); bool backtrace_is_needed(const char* fname); void dump_backtrace(); } /* namespace os */ tmpNnpnZF/common/os_string.hpp0000664000175000017500000002422412543167424016000 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * String manipulation. */ #pragma once #include #include #include #include #ifdef __MINGW32__ // Some versions of MinGW are missing _vscprintf's declaration, although they // still provide the symbol in the import library. extern "C" _CRTIMP int _vscprintf(const char *format, va_list argptr); #endif #ifndef va_copy #ifdef __va_copy #define va_copy(dest, src) __va_copy((dest), (src)) #else #define va_copy(dest, src) (dest) = (src) #endif #endif #include #include "os.hpp" #ifdef _WIN32 #define OS_DIR_SEP '\\' #define OS_PATH_SEP ';' #else /* !_WIN32 */ #define OS_DIR_SEP '/' #define OS_PATH_SEP ':' #endif /* !_WIN32 */ namespace os { /** * Class to represent zero-terminated strings, based upon std::vector, * suitable for passing strings or paths to/from OS calls. * * Both Win32 and POSIX APIs return strings as zero length buffers. Although * std::string provides an easy method to obtain a read-only pointer to a zero * terminated string, it lacks the ability to return a read-write pointer. So * there is no way to tell OS calls to write into a std::string directly -- a * temporary malloc'ed string would be necessary --, which would be * unnecessarily inefficient, specially considering that these strings would * ultimately passed back to the OS, which would again expect zero-terminated * strings. * * This class is not, however, a full replacement for std::string, which should * be otherwise used whenever possible. */ class String { protected: typedef std::vector Buffer; /** * The buffer's last element is always the '\0' character, therefore the * buffer must never be empty. */ Buffer buffer; Buffer::iterator find(char c) { Buffer::iterator it = buffer.begin(); assert(it != buffer.end()); while (it != buffer.end()) { if (*it == c) { return it; } ++it; } return buffer.end(); } Buffer::iterator rfind(char c) { Buffer::iterator it = buffer.end(); // Skip trailing '\0' assert(it != buffer.begin()); --it; assert(*it == '\0'); while (it != buffer.begin()) { --it; if (*it == c) { return it; } } return buffer.end(); } String(size_t size) : buffer(size) { } char *buf(void) { return &buffer[0]; } inline bool isSep(char c) { if (c == '/') { return true; } #ifdef _WIN32 if (c == '\\') { return true; } #endif return false; } public: Buffer::iterator rfindSep(bool skipTrailing = true) { Buffer::iterator it = end(); // Skip trailing separators if (skipTrailing) { while (it != buffer.begin()) { --it; if (isSep(*it)) { // Halt if find the root if (it == buffer.begin()) { return it; } } else { break; } } } // Advance to the last separator while (it != buffer.begin()) { --it; if (isSep(*it)) { return it; } } return end(); } /* * Constructors */ String() { buffer.push_back(0); } String(const char *s) : buffer(s, s + strlen(s) + 1) {} String(const String &other) : buffer(other.buffer) {} template String(InputIterator first, InputIterator last) : buffer(first, last) { buffer.push_back(0); } /** * From a printf-like format string */ static String format(const char *format, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif { va_list args; va_start(args, format); int length; va_list args_copy; va_copy(args_copy, args); #ifdef _WIN32 /* We need to use _vscprintf to calculate the length as vsnprintf returns -1 * if the number of characters to write is greater than count. */ length = _vscprintf(format, args_copy); #else char dummy; length = vsnprintf(&dummy, sizeof dummy, format, args_copy); #endif va_end(args_copy); assert(length >= 0); size_t size = length + 1; String path(size); va_start(args, format); vsnprintf(path.buf(), size, format, args); va_end(args); return path; } /* * Conversion to ordinary C strings. */ const char *str(void) const { assert(buffer.back() == 0); return &buffer[0]; } operator const char *(void) const { return str(); } /* * Iterators */ typedef Buffer::const_iterator const_iterator; typedef Buffer::iterator iterator; const_iterator begin(void) const { return buffer.begin(); } iterator begin(void) { return buffer.begin(); } const_iterator end(void) const { const_iterator it = buffer.end(); assert(it != buffer.begin()); --it; // skip null return it; } iterator end(void) { iterator it = buffer.end(); assert(it != buffer.begin()); --it; // skip null return it; } /* * Operations */ void insert(iterator position, char c) { buffer.insert(position, c); } template void insert(iterator position, InputIterator first, InputIterator last) { buffer.insert(position, first, last); } void insert(iterator position, const char *s) { assert(s); insert(position, s, s + strlen(s)); } void insert(iterator position, const String & other) { insert(position, other.begin(), other.end()); } void append(char c) { insert(end(), c); } template void append(InputIterator first, InputIterator last) { insert(end(), first, last); } void append(const char *s) { insert(end(), s); } void append(const String & other) { insert(end(), other); } template void erase(InputIterator first, InputIterator last) { buffer.erase(first, last); } /** * Get a writable buffer with the specified size. * * truncate() must be called after the buffer is written, and before any other * method is called. * * Between the call to buf() and truncate() methods, the `buffer.back() == * 0` invariant will not hold true. */ char *buf(size_t size) { buffer.resize(size); return &buffer[0]; } size_t length(void) const { size_t size = buffer.size(); assert(size > 0); assert(buffer[size - 1] == 0); return size - 1; } /** * Truncate the string to the specified length. */ void truncate(size_t length) { assert(length < buffer.size()); buffer[length] = 0; assert(strlen(&buffer[0]) == length); buffer.resize(length + 1); } /** * Truncate the string to the first zero character. */ void truncate(void) { truncate(strlen(&buffer[0])); } /* * Path manipulation */ bool exists(void) const; /* Trim directory (leaving base filename). */ void trimDirectory(void) { iterator sep = rfindSep(); if (sep != end()) { buffer.erase(buffer.begin(), sep + 1); } } /* Trim filename component (leaving containing directory). * * - trailing separators are ignored * - a path with no separator at all yields "." * - a path consisting of just the root directory is left unchanged */ void trimFilename(void) { iterator sep = rfindSep(); // No separator found, so return '.' if (sep == end()) { buffer.resize(2); buffer[0] = '.'; buffer[1] = 0; return; } // Root. Nothing to do. if (sep == buffer.begin()) { return; } // Trim filename buffer.erase(sep, end()); } void trimExtension(void) { iterator dot = rfind('.'); if (dot != buffer.end()) { buffer.erase(dot, end()); } } void join(const String & other) { if (length() && end()[-1] != OS_DIR_SEP) { append(OS_DIR_SEP); } append(other.begin(), other.end()); } }; String getProcessName(); String getCurrentDir(); String getConfigDir(); bool createDirectory(const String &path); bool copyFile(const String &srcFileName, const String &dstFileName, bool override = true); bool removeFile(const String &fileName); } /* namespace os */ tmpNnpnZF/common/trace_fast_callset.cpp0000664000175000017500000001301412543167424017601 0ustar chrischris/********************************************************************* * * Copyright 2006 Keith Packard and Carl Worth * Copyright 2012 Intel Corporation * Copyright 2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *********************************************************************/ #include #include #include #include #include "os.hpp" #include "trace_fast_callset.hpp" using namespace trace; #define MAX_LEVEL 16 FastCallRange::FastCallRange(CallNo first, CallNo last, int level) : ref_counter(0) { this->first = first; this->last = last; this->level = level; next.resize(level, 0); } bool FastCallRange::contains(CallNo call_no) const { return (first <= call_no && last >= call_no); } bool FastCallSet::empty(void) const { return max_level == 0; } FastCallSet::FastCallSet(): head(0, 0, MAX_LEVEL) { head.first = std::numeric_limits::max(); head.last = std::numeric_limits::min(); max_level = 0; } /* * Generate a random level number, distributed * so that each level is 1/4 as likely as the one before * * Note that level numbers run 1 <= level < MAX_LEVEL */ static int random_level (void) { /* tricky bit -- each bit is '1' 75% of the time */ long int bits = os::random() | os::random(); int level = 1; while (level < MAX_LEVEL) { if (bits & 1) break; level++; bits >>= 1; } return level; } void FastCallSet::add(CallNo first, CallNo last) { std::vector update (MAX_LEVEL); FastCallRange *node; FastCallRangePtr new_node; int i, level; /* Find node immediately before insertion point. * NOTE: FastCallRangePtr(), e.g., next[i](), returns FastCallRange* */ node = &head; // Can't reference &head as a FastCallRangePtr for (i = max_level - 1; i >= 0; i--) { while (node->next[i]() && first > node->next[i]->last) { node = node->next[i](); } update[i] = &node->next[i]; } /* Can we contain first by expanding tail of current range by 1? */ if (node != &head && node->last == first - 1) { new_node = FastCallRangePtr(node); new_node->last = last; goto MERGE_NODE_WITH_SUBSEQUENT_COVERED_NODES; } /* Current range could not contain first, look at next. */ node = node->next[0](); if (node) { /* Do nothing if new range is already entirely contained. */ if (node->first <= first && node->last >= last) { return; } /* If last is already included, we can simply expand * node->first to fully include the range. */ if (node->first <= last && node->last >= last) { node->first = first; return; } /* This is our candidate node if first is contained */ if (node->first <= first && node->last >= first) { new_node = FastCallRangePtr(node); new_node->last = last; goto MERGE_NODE_WITH_SUBSEQUENT_COVERED_NODES; } } /* Not possible to expand any existing node, so create a new one. */ level = random_level(); /* Handle first node of this level. */ if (level > max_level) { level = max_level + 1; update[max_level] = &head.next[max_level]; max_level = level; } new_node = FastCallRangePtr(new FastCallRange(first, last, level)); /* Perform insertion into all lists. */ for (i = 0; i < level; i++) { new_node->next[i] = *update[i]; *update[i] = new_node; } MERGE_NODE_WITH_SUBSEQUENT_COVERED_NODES: FastCallRangePtr next = new_node->next[0]; node = new_node(); while (next() && next->first <= node->last + 1) { if (next->last > node->last) node->last = next->last; for (i = 0; i < node->level && i < next->level; i++) { node->next[i] = next->next[i]; } for (; i < next->level; i++) { *update[i] = next->next[i]; } next = node->next[0]; } } void FastCallSet::add(CallNo call_no) { this->add(call_no, call_no); } bool FastCallSet::contains(CallNo call_no) const { FastCallRange *node; int i; node = const_cast(&head); for (i = max_level - 1; i >= 0; i--) { while (node->next[i]() && call_no > node->next[i]->last) { node = node->next[i](); } } node = node->next[0](); if (node == NULL) return false; return node->contains(call_no); } tmpNnpnZF/common/os.hpp0000664000175000017500000000512212543167424014406 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Simple OS abstraction layer. */ #pragma once #include #include #include #include #ifdef _WIN32 #ifndef snprintf #define snprintf _snprintf #endif #ifndef vsnprintf #define vsnprintf _vsnprintf #endif #ifndef strcasecmp #define strcasecmp stricmp #endif #endif /* !_WIN32 */ namespace os { void log(const char *format, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif ; #if defined _WIN32 || defined __CYGWIN__ /* We always use .def files on windows for now */ #if 0 #define PUBLIC __declspec(dllexport) #else #define PUBLIC #endif #define PRIVATE #else #define PUBLIC __attribute__ ((visibility("default"))) #define PRIVATE __attribute__ ((visibility("hidden"))) #endif /** * Exit immediately. * * This should be called only from the wrappers, when there is no safe way of * failing gracefully. */ // coverity[+kill] #ifdef _MSC_VER __declspec(noreturn) #endif void abort(void) #ifdef __GNUC__ __attribute__((__noreturn__)) #endif ; void breakpoint(void); void setExceptionCallback(void (*callback)(void)); void resetExceptionCallback(void); /** * Returns a pseudo-random integer in the range 0 to RAND_MAX. */ static inline int random(void) { #ifdef _WIN32 return ::rand(); #else return ::random(); #endif } } /* namespace os */ tmpNnpnZF/common/trace_dump.cpp0000664000175000017500000002171612543167424016112 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "highlight.hpp" #include "trace_dump.hpp" namespace trace { class Dumper : public Visitor { protected: std::ostream &os; DumpFlags dumpFlags; const highlight::Highlighter & highlighter; const highlight::Attribute & normal; const highlight::Attribute & bold; const highlight::Attribute & italic; const highlight::Attribute & strike; const highlight::Attribute & red; const highlight::Attribute & pointer; const highlight::Attribute & literal; public: Dumper(std::ostream &_os, DumpFlags _flags) : os(_os), dumpFlags(_flags), highlighter(highlight::defaultHighlighter(!(dumpFlags & DUMP_FLAG_NO_COLOR))), normal(highlighter.normal()), bold(highlighter.bold()), italic(highlighter.italic()), strike(highlighter.strike()), red(highlighter.color(highlight::RED)), pointer(highlighter.color(highlight::GREEN)), literal(highlighter.color(highlight::BLUE)) { } ~Dumper() { } void visit(Null *) { os << literal << "NULL" << normal; } void visit(Bool *node) { os << literal << (node->value ? "true" : "false") << normal; } void visit(SInt *node) { os << literal << node->value << normal; } void visit(UInt *node) { os << literal << node->value << normal; } void visit(Float *node) { std::streamsize oldPrecision = os.precision(std::numeric_limits::digits10 + 1); os << literal << node->value << normal; os.precision(oldPrecision); } void visit(Double *node) { std::streamsize oldPrecision = os.precision(std::numeric_limits::digits10 + 1); os << literal << node->value << normal; os.precision(oldPrecision); } template< typename C > void visitString(const C *value) { os << literal << "\""; for (const C *it = value; *it; ++it) { unsigned c = (unsigned) *it; if (c == '\"') os << "\\\""; else if (c == '\\') os << "\\\\"; else if (c >= 0x20 && c <= 0x7e) os << (char)c; else if (c == '\t') { os << "\t"; } else if (c == '\r') { // Ignore carriage-return } else if (c == '\n') { // Reset formatting so that it looks correct with 'less -R' os << normal << '\n' << literal; } else { // FIXME: handle wchar_t octals properly unsigned octal0 = c & 0x7; unsigned octal1 = (c >> 3) & 0x7; unsigned octal2 = (c >> 3) & 0x7; os << "\\"; if (octal2) os << octal2; if (octal1) os << octal1; os << octal0; } } os << "\"" << normal; } void visit(String *node) { visitString(node->value); } void visit(WString *node) { os << literal << "L"; visitString(node->value); } void visit(Enum *node) { const EnumValue *it = node->lookup(); if (it) { os << literal << it->name << normal; return; } os << literal << node->value << normal; } void visit(Bitmask *bitmask) { unsigned long long value = bitmask->value; const BitmaskSig *sig = bitmask->sig; bool first = true; for (const BitmaskFlag *it = sig->flags; it != sig->flags + sig->num_flags; ++it) { assert(it->value || first); if ((it->value && (value & it->value) == it->value) || (!it->value && value == 0)) { if (!first) { os << " | "; } os << literal << it->name << normal; value &= ~it->value; first = false; } if (value == 0) { break; } } if (value || first) { if (!first) { os << " | "; } os << literal << "0x" << std::hex << value << std::dec << normal; } } const char * visitMembers(Struct *s, const char *sep = "") { for (unsigned i = 0; i < s->members.size(); ++i) { const char *memberName = s->sig->member_names[i]; Value *memberValue = s->members[i]; if (!memberName || !*memberName) { // Anonymous structure Struct *memberStruct = memberValue->toStruct(); assert(memberStruct); if (memberStruct) { sep = visitMembers(memberStruct, sep); continue; } } os << sep << italic << memberName << normal << " = ", _visit(memberValue); sep = ", "; } return sep; } void visit(Struct *s) { os << "{"; visitMembers(s); os << "}"; } void visit(Array *array) { if (array->values.size() == 1) { os << "&"; _visit(array->values[0]); } else { const char *sep = ""; os << "{"; for (std::vector::iterator it = array->values.begin(); it != array->values.end(); ++it) { os << sep; _visit(*it); sep = ", "; } os << "}"; } } void visit(Blob *blob) { os << pointer << "blob(" << blob->size << ")" << normal; } void visit(Pointer *p) { os << pointer << "0x" << std::hex << p->value << std::dec << normal; } void visit(Repr *r) { _visit(r->humanValue); } void visit(StackFrame *frame) { frame->dump(os); } void visit(Backtrace & backtrace) { for (int i = 0; i < backtrace.size(); i ++) { visit(backtrace[i]); os << "\n"; } } void visit(Call *call) { CallFlags callFlags = call->flags; if (!(dumpFlags & DUMP_FLAG_NO_CALL_NO)) { os << call->no << " "; } if (dumpFlags & DUMP_FLAG_THREAD_IDS) { os << "@" << std::hex << call->thread_id << std::dec << " "; } if (callFlags & CALL_FLAG_NON_REPRODUCIBLE) { os << strike; } else if (callFlags & (CALL_FLAG_FAKE | CALL_FLAG_NO_SIDE_EFFECTS)) { os << normal; } else { os << bold; } os << call->sig->name << normal; os << "("; const char *sep = ""; for (unsigned i = 0; i < call->args.size(); ++i) { os << sep; if (!(dumpFlags & DUMP_FLAG_NO_ARG_NAMES)) { os << italic << call->sig->arg_names[i] << normal << " = "; } if (call->args[i].value) { _visit(call->args[i].value); } else { os << "?"; } sep = ", "; } os << ")"; if (call->ret) { os << " = "; _visit(call->ret); } if (callFlags & CALL_FLAG_INCOMPLETE) { os << " // " << red << "incomplete" << normal; } os << "\n"; if (call->backtrace != NULL) { os << bold << red << "Backtrace:\n" << normal; visit(*call->backtrace); } if (callFlags & CALL_FLAG_END_FRAME) { os << "\n"; } } }; void dump(Value *value, std::ostream &os, DumpFlags flags) { Dumper d(os, flags); value->visit(d); } void dump(Call &call, std::ostream &os, DumpFlags flags) { Dumper d(os, flags); d.visit(&call); } } /* namespace trace */ tmpNnpnZF/common/trace_profiler.cpp0000664000175000017500000001662412543167424016771 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware, Inc. * Copyright 2013 Intel, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "trace_profiler.hpp" #include "os_time.hpp" #include #include #include namespace trace { Profiler::Profiler() : baseGpuTime(0), baseCpuTime(0), minCpuTime(1000), baseVsizeUsage(0), baseRssUsage(0), cpuTimes(false), gpuTimes(true), pixelsDrawn(false), memoryUsage(false) { } Profiler::~Profiler() { } void Profiler::setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_, bool memoryUsage_) { cpuTimes = cpuTimes_; gpuTimes = gpuTimes_; pixelsDrawn = pixelsDrawn_; memoryUsage = memoryUsage_; std::cout << "# call no gpu_start gpu_dura cpu_start cpu_dura vsize_start vsize_dura rss_start rss_dura pixels program name" << std::endl; } int64_t Profiler::getBaseCpuTime() { return baseCpuTime; } int64_t Profiler::getBaseGpuTime() { return baseGpuTime; } int64_t Profiler::getBaseVsizeUsage() { return baseVsizeUsage; } int64_t Profiler::getBaseRssUsage() { return baseRssUsage; } void Profiler::setBaseCpuTime(int64_t cpuStart) { baseCpuTime = cpuStart; } void Profiler::setBaseGpuTime(int64_t gpuStart) { baseGpuTime = gpuStart; } void Profiler::setBaseVsizeUsage(int64_t vsizeStart) { baseVsizeUsage = vsizeStart; } void Profiler::setBaseRssUsage(int64_t rssStart) { baseRssUsage = rssStart; } bool Profiler::hasBaseTimes() { return baseCpuTime != 0 || baseGpuTime != 0; } void Profiler::addCall(unsigned no, const char *name, unsigned program, int64_t pixels, int64_t gpuStart, int64_t gpuDuration, int64_t cpuStart, int64_t cpuDuration, int64_t vsizeStart, int64_t vsizeDuration, int64_t rssStart, int64_t rssDuration) { if (gpuTimes && gpuStart) { gpuStart -= baseGpuTime; } else { gpuStart = 0; } if (cpuTimes && cpuStart) { cpuStart = cpuStart - baseCpuTime; if (cpuDuration < minCpuTime) { return; } } else { cpuStart = 0; cpuDuration = 0; } if (!pixelsDrawn) { pixels = 0; } if (!memoryUsage || !vsizeStart || !rssStart) { vsizeStart = 0; vsizeDuration = 0; rssStart = 0; rssDuration = 0; } std::cout << "call" << " " << no << " " << gpuStart << " " << gpuDuration << " " << cpuStart << " " << cpuDuration << " " << vsizeStart << " " << vsizeDuration << " " << rssStart << " " << rssDuration << " " << pixels << " " << program << " " << name << std::endl; } void Profiler::addFrameEnd() { std::cout << "frame_end" << std::endl; } void Profiler::parseLine(const char* in, Profile* profile) { std::stringstream line(in, std::ios_base::in); std::string type; static int64_t lastGpuTime; static int64_t lastCpuTime; static int64_t lastVsizeUsage; static int64_t lastRssUsage; if (in[0] == '#' || strlen(in) < 4) return; if (profile->programs.size() == 0 && profile->calls.size() == 0 && profile->frames.size() == 0) { lastGpuTime = 0; lastCpuTime = 0; lastVsizeUsage = 0; lastRssUsage = 0; } line >> type; if (type.compare("call") == 0) { Profile::Call call; line >> call.no >> call.gpuStart >> call.gpuDuration >> call.cpuStart >> call.cpuDuration >> call.vsizeStart >> call.vsizeDuration >> call.rssStart >> call.rssDuration >> call.pixels >> call.program >> call.name; if (lastGpuTime < call.gpuStart + call.gpuDuration) { lastGpuTime = call.gpuStart + call.gpuDuration; } if (lastCpuTime < call.cpuStart + call.cpuDuration) { lastCpuTime = call.cpuStart + call.cpuDuration; } if (lastVsizeUsage < call.vsizeStart + call.vsizeDuration) { lastVsizeUsage = call.vsizeStart + call.vsizeDuration; } if (lastRssUsage < call.rssStart + call.rssDuration) { lastRssUsage = call.rssStart + call.rssDuration; } profile->calls.push_back(call); if (call.pixels >= 0) { if (profile->programs.size() <= call.program) { profile->programs.resize(call.program + 1); } Profile::Program& program = profile->programs[call.program]; program.cpuTotal += call.cpuDuration; program.gpuTotal += call.gpuDuration; program.pixelTotal += call.pixels; program.vsizeTotal += call.vsizeDuration; program.rssTotal += call.rssDuration; program.calls.push_back((unsigned int)(profile->calls.size() - 1)); } } else if (type.compare("frame_end") == 0) { Profile::Frame frame; frame.no = unsigned(profile->frames.size()); if (frame.no == 0) { frame.gpuStart = 0; frame.cpuStart = 0; frame.vsizeStart = 0; frame.rssStart = 0; frame.calls.begin = 0; } else { frame.gpuStart = profile->frames.back().gpuStart + profile->frames.back().gpuDuration; frame.cpuStart = profile->frames.back().cpuStart + profile->frames.back().cpuDuration; frame.vsizeStart = profile->frames.back().vsizeStart + profile->frames.back().vsizeDuration; frame.rssStart = profile->frames.back().rssStart + profile->frames.back().rssDuration; frame.calls.begin = profile->frames.back().calls.end + 1; } frame.gpuDuration = lastGpuTime - frame.gpuStart; frame.cpuDuration = lastCpuTime - frame.cpuStart; frame.vsizeDuration = lastVsizeUsage - frame.vsizeStart; frame.rssDuration = lastRssUsage - frame.rssStart; frame.calls.end = (unsigned int)(profile->calls.size() - 1); profile->frames.push_back(frame); } } } tmpNnpnZF/common/trace_file_snappy.cpp0000664000175000017500000002612312543167424017453 0ustar chrischris/************************************************************************** * * Copyright 2011 Zack Rusin * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Snappy file format. * ------------------- * * Snappy at its core is just a compressoin algorithm so we're * creating a new file format which uses snappy compression * to hold the trace data. * * The file is composed of a number of chunks, they are: * chunk { * uint32 - specifying the length of the compressed data * compressed data, in little endian * } * File can contain any number of such chunks. * The default size of an uncompressed chunk is specified in * SNAPPY_CHUNK_SIZE. * * Note: * Currently the default size for a a to-be-compressed data is * 1mb, meaning that the compressed data will be <= 1mb. * The reason it's 1mb is because it seems * to offer a pretty good compression/disk io speed ratio * but that might change. * */ #include #include #include #include #include #include "trace_file.hpp" #define SNAPPY_CHUNK_SIZE (1 * 1024 * 1024) using namespace trace; class SnappyFile : public File { public: SnappyFile(const std::string &filename = std::string(), File::Mode mode = File::Read); virtual ~SnappyFile(); virtual bool supportsOffsets() const; virtual File::Offset currentOffset(); virtual void setCurrentOffset(const File::Offset &offset); protected: virtual bool rawOpen(const std::string &filename, File::Mode mode); virtual bool rawWrite(const void *buffer, size_t length); virtual size_t rawRead(void *buffer, size_t length); virtual int rawGetc(); virtual void rawClose(); virtual void rawFlush(); virtual bool rawSkip(size_t length); virtual int rawPercentRead(); private: inline size_t usedCacheSize() const { assert(m_cachePtr >= m_cache); return m_cachePtr - m_cache; } inline size_t freeCacheSize() const { assert(m_cacheSize >= usedCacheSize()); if (m_cacheSize > 0) { return m_cacheSize - usedCacheSize(); } else { return 0; } } inline bool endOfData() const { return m_stream.eof() && freeCacheSize() == 0; } void flushWriteCache(); void flushReadCache(size_t skipLength = 0); void createCache(size_t size); void writeCompressedLength(size_t length); size_t readCompressedLength(); private: std::fstream m_stream; size_t m_cacheMaxSize; size_t m_cacheSize; char *m_cache; char *m_cachePtr; char *m_compressedCache; File::Offset m_currentOffset; std::streampos m_endPos; }; SnappyFile::SnappyFile(const std::string &filename, File::Mode mode) : File(), m_cacheMaxSize(SNAPPY_CHUNK_SIZE), m_cacheSize(m_cacheMaxSize), m_cache(new char [m_cacheMaxSize]), m_cachePtr(m_cache) { size_t maxCompressedLength = snappy::MaxCompressedLength(SNAPPY_CHUNK_SIZE); m_compressedCache = new char[maxCompressedLength]; } SnappyFile::~SnappyFile() { close(); delete [] m_compressedCache; delete [] m_cache; } bool SnappyFile::rawOpen(const std::string &filename, File::Mode mode) { std::ios_base::openmode fmode = std::fstream::binary; if (mode == File::Write) { fmode |= (std::fstream::out | std::fstream::trunc); createCache(SNAPPY_CHUNK_SIZE); } else if (mode == File::Read) { fmode |= std::fstream::in; } m_stream.open(filename.c_str(), fmode); //read in the initial buffer if we're reading if (m_stream.is_open() && mode == File::Read) { m_stream.seekg(0, std::ios::end); m_endPos = m_stream.tellg(); m_stream.seekg(0, std::ios::beg); // read the snappy file identifier unsigned char byte1, byte2; m_stream >> byte1; m_stream >> byte2; assert(byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2); flushReadCache(); } else if (m_stream.is_open() && mode == File::Write) { // write the snappy file identifier m_stream << SNAPPY_BYTE1; m_stream << SNAPPY_BYTE2; } return m_stream.is_open(); } bool SnappyFile::rawWrite(const void *buffer, size_t length) { if (freeCacheSize() > length) { memcpy(m_cachePtr, buffer, length); m_cachePtr += length; } else if (freeCacheSize() == length) { memcpy(m_cachePtr, buffer, length); m_cachePtr += length; flushWriteCache(); } else { size_t sizeToWrite = length; while (sizeToWrite >= freeCacheSize()) { size_t endSize = freeCacheSize(); size_t offset = length - sizeToWrite; memcpy(m_cachePtr, (const char*)buffer + offset, endSize); sizeToWrite -= endSize; m_cachePtr += endSize; flushWriteCache(); } if (sizeToWrite) { size_t offset = length - sizeToWrite; memcpy(m_cachePtr, (const char*)buffer + offset, sizeToWrite); m_cachePtr += sizeToWrite; } } return true; } size_t SnappyFile::rawRead(void *buffer, size_t length) { if (endOfData()) { return 0; } if (freeCacheSize() >= length) { memcpy(buffer, m_cachePtr, length); m_cachePtr += length; } else { size_t sizeToRead = length; size_t offset = 0; while (sizeToRead) { size_t chunkSize = std::min(freeCacheSize(), sizeToRead); offset = length - sizeToRead; memcpy((char*)buffer + offset, m_cachePtr, chunkSize); m_cachePtr += chunkSize; sizeToRead -= chunkSize; if (sizeToRead > 0) { flushReadCache(); } if (!m_cacheSize) { return length - sizeToRead; } } } return length; } int SnappyFile::rawGetc() { unsigned char c = 0; if (rawRead(&c, 1) != 1) return -1; return c; } void SnappyFile::rawClose() { if (m_mode == File::Write) { flushWriteCache(); } m_stream.close(); delete [] m_cache; m_cache = NULL; m_cachePtr = NULL; } void SnappyFile::rawFlush() { assert(m_mode == File::Write); flushWriteCache(); m_stream.flush(); } void SnappyFile::flushWriteCache() { size_t inputLength = usedCacheSize(); if (inputLength) { size_t compressedLength; ::snappy::RawCompress(m_cache, inputLength, m_compressedCache, &compressedLength); writeCompressedLength(compressedLength); m_stream.write(m_compressedCache, compressedLength); m_cachePtr = m_cache; } assert(m_cachePtr == m_cache); } void SnappyFile::flushReadCache(size_t skipLength) { //assert(m_cachePtr == m_cache + m_cacheSize); m_currentOffset.chunk = m_stream.tellg(); size_t compressedLength; compressedLength = readCompressedLength(); if (!compressedLength) { // Reached end of file createCache(0); return; } m_stream.read((char*)m_compressedCache, compressedLength); if (m_stream.fail()) { // XXX: Unforunately Snappy's interface is not expressive enough // to allow recovering part of the uncompressed bytes. std::cerr << "warning: unexpected end of file while reading trace\n"; createCache(0); return; } ::snappy::GetUncompressedLength(m_compressedCache, compressedLength, &m_cacheSize); createCache(m_cacheSize); if (skipLength < m_cacheSize) { ::snappy::RawUncompress(m_compressedCache, compressedLength, m_cache); } } void SnappyFile::createCache(size_t size) { if (size > m_cacheMaxSize) { do { m_cacheMaxSize <<= 1; } while (size > m_cacheMaxSize); delete [] m_cache; m_cache = new char[size]; m_cacheMaxSize = size; } m_cachePtr = m_cache; m_cacheSize = size; } void SnappyFile::writeCompressedLength(size_t length) { unsigned char buf[4]; buf[0] = length & 0xff; length >>= 8; buf[1] = length & 0xff; length >>= 8; buf[2] = length & 0xff; length >>= 8; buf[3] = length & 0xff; length >>= 8; assert(length == 0); m_stream.write((const char *)buf, sizeof buf); } size_t SnappyFile::readCompressedLength() { unsigned char buf[4]; size_t length; m_stream.read((char *)buf, sizeof buf); if (m_stream.fail()) { length = 0; } else { length = (size_t)buf[0]; length |= ((size_t)buf[1] << 8); length |= ((size_t)buf[2] << 16); length |= ((size_t)buf[3] << 24); } return length; } bool SnappyFile::supportsOffsets() const { return true; } File::Offset SnappyFile::currentOffset() { m_currentOffset.offsetInChunk = m_cachePtr - m_cache; return m_currentOffset; } void SnappyFile::setCurrentOffset(const File::Offset &offset) { // to remove eof bit m_stream.clear(); // seek to the start of a chunk m_stream.seekg(offset.chunk, std::ios::beg); // load the chunk flushReadCache(); assert(m_cacheSize >= offset.offsetInChunk); // seek within our cache to the correct location within the chunk m_cachePtr = m_cache + offset.offsetInChunk; } bool SnappyFile::rawSkip(size_t length) { if (endOfData()) { return false; } if (freeCacheSize() >= length) { m_cachePtr += length; } else { size_t sizeToRead = length; while (sizeToRead) { size_t chunkSize = std::min(freeCacheSize(), sizeToRead); m_cachePtr += chunkSize; sizeToRead -= chunkSize; if (sizeToRead > 0) { flushReadCache(sizeToRead); } if (!m_cacheSize) { break; } } } return true; } int SnappyFile::rawPercentRead() { return int(100 * (double(m_stream.tellg()) / double(m_endPos))); } File* File::createSnappy(void) { return new SnappyFile; } tmpNnpnZF/common/trace_file.cpp0000664000175000017500000000330512543167424016056 0ustar chrischris/************************************************************************** * * Copyright 2011 Zack Rusin * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "trace_file.hpp" #include using namespace trace; File::File(const std::string &filename, File::Mode mode) : m_mode(mode), m_isOpened(false) { if (!filename.empty()) { open(filename, m_mode); } } File::~File() { // We can't invoke any overriden virtual method here anymore assert(!m_isOpened); } void File::setCurrentOffset(const File::Offset &offset) { assert(0); } tmpNnpnZF/common/trace_parser.hpp0000664000175000017500000001226312543167424016443 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include "trace_file.hpp" #include "trace_format.hpp" #include "trace_model.hpp" #include "trace_api.hpp" namespace trace { struct ParseBookmark { File::Offset offset; unsigned next_call_no; }; class Parser { protected: File *file; enum Mode { FULL = 0, SCAN, SKIP }; typedef std::list CallList; CallList calls; struct FunctionSigFlags : public FunctionSig { CallFlags flags; }; // Helper template that extends a base signature structure, with additional // parsing information. template< class T > struct SigState : public T { // Offset in the file of where signature was defined. It is used when // reparsing to determine whether the signature definition is to be // expected next or not. File::Offset fileOffset; }; typedef SigState FunctionSigState; typedef SigState StructSigState; typedef SigState EnumSigState; typedef SigState BitmaskSigState; typedef SigState StackFrameState; typedef std::vector FunctionMap; typedef std::vector StructMap; typedef std::vector EnumMap; typedef std::vector BitmaskMap; typedef std::vector StackFrameMap; FunctionMap functions; StructMap structs; EnumMap enums; BitmaskMap bitmasks; StackFrameMap frames; FunctionSig *glGetErrorSig; unsigned next_call_no; public: unsigned long long version; API api; Parser(); ~Parser(); bool open(const char *filename); void close(void); Call *parse_call(void) { return parse_call(FULL); } bool supportsOffsets() const { return file->supportsOffsets(); } void getBookmark(ParseBookmark &bookmark); void setBookmark(const ParseBookmark &bookmark); int percentRead() { return file->percentRead(); } Call *scan_call() { return parse_call(SCAN); } protected: Call *parse_call(Mode mode); FunctionSigFlags *parse_function_sig(void); StructSig *parse_struct_sig(); EnumSig *parse_old_enum_sig(); EnumSig *parse_enum_sig(); BitmaskSig *parse_bitmask_sig(); static CallFlags lookupCallFlags(const char *name); Call *parse_Call(Mode mode); void parse_enter(Mode mode); Call *parse_leave(Mode mode); bool parse_call_details(Call *call, Mode mode); bool parse_call_backtrace(Call *call, Mode mode); StackFrame * parse_backtrace_frame(Mode mode); void adjust_call_flags(Call *call); void parse_arg(Call *call, Mode mode); Value *parse_value(void); void scan_value(void); inline Value *parse_value(Mode mode) { if (mode == FULL) { return parse_value(); } else { scan_value(); return NULL; } } Value *parse_sint(); void scan_sint(); Value *parse_uint(); void scan_uint(); Value *parse_float(); void scan_float(); Value *parse_double(); void scan_double(); Value *parse_string(); void scan_string(); Value *parse_enum(); void scan_enum(); Value *parse_bitmask(); void scan_bitmask(); Value *parse_array(void); void scan_array(void); Value *parse_blob(void); void scan_blob(void); Value *parse_struct(); void scan_struct(); Value *parse_opaque(); void scan_opaque(); Value *parse_repr(); void scan_repr(); Value *parse_wstring(); void scan_wstring(); const char * read_string(void); void skip_string(void); signed long long read_sint(void); void skip_sint(void); unsigned long long read_uint(void); void skip_uint(void); inline int read_byte(void); inline void skip_byte(void); }; } /* namespace trace */ tmpNnpnZF/common/trace_file.hpp0000664000175000017500000001166112543167424016067 0ustar chrischris/************************************************************************** * * Copyright 2011 Zack Rusin * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include #define SNAPPY_BYTE1 'a' #define SNAPPY_BYTE2 't' namespace trace { class File { public: enum Mode { Read, Write }; struct Offset { Offset(uint64_t _chunk = 0, uint32_t _offsetInChunk = 0) : chunk(_chunk), offsetInChunk(_offsetInChunk) {} uint64_t chunk; uint32_t offsetInChunk; }; public: static File *createZLib(void); static File *createSnappy(void); static File *createForRead(const char *filename); static File *createForWrite(const char *filename); public: File(const std::string &filename = std::string(), File::Mode mode = File::Read); virtual ~File(); bool isOpened() const; File::Mode mode() const; bool open(const std::string &filename, File::Mode mode); bool write(const void *buffer, size_t length); size_t read(void *buffer, size_t length); void close(); void flush(void); int getc(); bool skip(size_t length); int percentRead(); virtual bool supportsOffsets() const = 0; virtual File::Offset currentOffset() = 0; virtual void setCurrentOffset(const File::Offset &offset); protected: virtual bool rawOpen(const std::string &filename, File::Mode mode) = 0; virtual bool rawWrite(const void *buffer, size_t length) = 0; virtual size_t rawRead(void *buffer, size_t length) = 0; virtual int rawGetc() = 0; virtual void rawClose() = 0; virtual void rawFlush() = 0; virtual bool rawSkip(size_t length) = 0; virtual int rawPercentRead() = 0; protected: File::Mode m_mode; bool m_isOpened; }; inline bool File::isOpened() const { return m_isOpened; } inline File::Mode File::mode() const { return m_mode; } inline bool File::open(const std::string &filename, File::Mode mode) { if (m_isOpened) { close(); } m_isOpened = rawOpen(filename, mode); m_mode = mode; return m_isOpened; } inline bool File::write(const void *buffer, size_t length) { if (!m_isOpened || m_mode != File::Write) { return false; } return rawWrite(buffer, length); } inline size_t File::read(void *buffer, size_t length) { if (!m_isOpened || m_mode != File::Read) { return 0; } return rawRead(buffer, length); } inline int File::percentRead() { if (!m_isOpened || m_mode != File::Read) { return 0; } return rawPercentRead(); } inline void File::close() { if (m_isOpened) { rawClose(); m_isOpened = false; } } inline void File::flush(void) { if (m_mode == File::Write) { rawFlush(); } } inline int File::getc() { if (!m_isOpened || m_mode != File::Read) { return -1; } return rawGetc(); } inline bool File::skip(size_t length) { if (!m_isOpened || m_mode != File::Read) { return false; } return rawSkip(length); } inline bool operator<(const File::Offset &one, const File::Offset &two) { return one.chunk < two.chunk || (one.chunk == two.chunk && one.offsetInChunk < two.offsetInChunk); } inline bool operator==(const File::Offset &one, const File::Offset &two) { return one.chunk == two.chunk && one.offsetInChunk == two.offsetInChunk; } inline bool operator>=(const File::Offset &one, const File::Offset &two) { return one.chunk > two.chunk || (one.chunk == two.chunk && one.offsetInChunk >= two.offsetInChunk); } inline bool operator>(const File::Offset &one, const File::Offset &two) { return two < one; } inline bool operator<=(const File::Offset &one, const File::Offset &two) { return two >= one; } } /* namespace trace */ tmpNnpnZF/common/trace_writer_local.hpp0000664000175000017500000000712512543167424017636 0ustar chrischris/************************************************************************** * * Copyright 2007-2013 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Trace writing functions, used to trace calls in the current process. */ #pragma once #include #include "os_thread.hpp" #include "os_process.hpp" #include "trace_writer.hpp" namespace trace { extern const FunctionSig memcpy_sig; extern const FunctionSig malloc_sig; extern const FunctionSig free_sig; extern const FunctionSig realloc_sig; /** * A specialized Writer class, mean to trace the current process. * * In particular: * - it creates a trace file based on the current process name * - uses mutexes to allow tracing from multiple threades * - flushes the output to ensure the last call is traced in event of * abnormal termination */ class LocalWriter : public Writer { protected: /** * This mutex guarantees that only one thread writes to the trace file * at one given instance. * * We need a recursive mutex so that we dont't dead lock in the event * of a segfault happens while the mutex is held. * * To prevent deadlocks, the call for the real function (the one being * traced) should not be done with the mutex held. That is, it should * be done outside the beginEnter/endEnter and beginLeave/endLeave * pairs. Preferably between these two pairs. */ os::recursive_mutex mutex; int acquired; /** * ID of the processed that opened the trace file. */ os::ProcessId pid; void checkProcessId(); public: /** * Should never called directly -- use localWriter singleton below * instead. */ LocalWriter(); ~LocalWriter(); void open(void); /** * It will acquire the mutex. */ unsigned beginEnter(const FunctionSig *sig, bool fake = false); /** * It will release the mutex. */ void endEnter(void); /** * It will acquire the mutex. */ void beginLeave(unsigned call); /** * It will release the mutex. */ void endLeave(void); void flush(void); }; /** * Singleton. */ extern LocalWriter localWriter; void fakeMemcpy(const void *ptr, size_t size); } /* namespace trace */ tmpNnpnZF/common/trace_loader.cpp0000664000175000017500000000622512543167424016411 0ustar chrischris#include "trace_loader.hpp" using namespace trace; Loader::Loader() : m_frameMarker(FrameMarker_SwapBuffers) { } Loader::~Loader() { close(); } Loader::FrameMarker Loader::frameMarker() const { return m_frameMarker; } void Loader::setFrameMarker(Loader::FrameMarker marker) { m_frameMarker = marker; } unsigned Loader::numberOfFrames() const { return unsigned(m_frameBookmarks.size()); } unsigned Loader::numberOfCallsInFrame(unsigned frameIdx) const { if (frameIdx > m_frameBookmarks.size()) { return 0; } FrameBookmarks::const_iterator itr = m_frameBookmarks.find(frameIdx); return itr->second.numberOfCalls; } bool Loader::open(const char *filename) { if (!m_parser.open(filename)) { std::cerr << "error: failed to open " << filename << "\n"; return false; } if (!m_parser.supportsOffsets()) { std::cerr << "error: " <= 5) { std::cerr << "\tPercent scanned = " << m_parser.percentRead() << "..."<dump(std::cout, color); delete call; } return true; } void Loader::close() { m_parser.close(); } bool Loader::isCallAFrameMarker(const trace::Call *call) const { std::string name = call->name(); switch (m_frameMarker) { case FrameMarker_SwapBuffers: return call->flags & trace::CALL_FLAG_END_FRAME; break; case FrameMarker_Flush: return name == "glFlush"; break; case FrameMarker_Finish: return name == "glFinish"; break; case FrameMarker_Clear: return name == "glClear"; break; } return false; } std::vector Loader::frame(unsigned idx) { unsigned numOfCalls = numberOfCallsInFrame(idx); if (numOfCalls) { const FrameBookmark &frameBookmark = m_frameBookmarks[idx]; std::vector calls(numOfCalls); m_parser.setBookmark(frameBookmark.start); trace::Call *call; unsigned parsedCalls = 0; while ((call = m_parser.parse_call())) { calls[parsedCalls] = call; ++parsedCalls; if (isCallAFrameMarker(call)) { break; } } assert(parsedCalls == numOfCalls); return calls; } return std::vector(); } tmpNnpnZF/common/os_thread.hpp0000664000175000017500000002641312543167424015743 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * OS native thread abstraction. * * Mimics/leverages C++11 threads. */ #pragma once /* XXX: We still use our own implementation: * * - MSVC's C++11 threads implementation are hardcoded to use C++ exceptions * * - MinGW's C++11 threads implementation is often either missing or relies on * winpthreads * * - clang 3.4 (used in Travis) fails to compile some of libstdc++ C++11 thread * headers */ #ifdef HAVE_CXX11_THREADS #include #include #include namespace os { using std::mutex; using std::recursive_mutex; using std::unique_lock; using std::condition_variable; using std::thread; } /* namespace os */ #else /* !HAVE_CXX11_THREADS */ #ifdef _WIN32 # include # include # if _WIN32_WINNT >= 0x0600 # define HAVE_WIN32_CONDITION_VARIABLES # endif #else # include #endif namespace os { /** * Base class for mutex and recursive_mutex. */ class _base_mutex { public: #ifdef _WIN32 typedef CRITICAL_SECTION native_handle_type; #else typedef pthread_mutex_t native_handle_type; #endif _base_mutex(void) { #ifdef _WIN32 InitializeCriticalSection(&_native_handle); #else pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&_native_handle, &attr); pthread_mutexattr_destroy(&attr); #endif } ~_base_mutex() { #ifdef _WIN32 DeleteCriticalSection(&_native_handle); #else pthread_mutex_destroy(&_native_handle); #endif } inline void lock(void) { #ifdef _WIN32 EnterCriticalSection(&_native_handle); #else pthread_mutex_lock(&_native_handle); #endif } inline void unlock(void) { #ifdef _WIN32 LeaveCriticalSection(&_native_handle); #else pthread_mutex_unlock(&_native_handle); #endif } native_handle_type & native_handle() { return _native_handle; } protected: native_handle_type _native_handle; }; /** * Same interface as std::mutex. */ class mutex : public _base_mutex { public: inline mutex(void) { #ifdef _WIN32 InitializeCriticalSection(&_native_handle); #else pthread_mutex_init(&_native_handle, NULL); #endif } }; /** * Same interface as std::recursive_mutex. */ class recursive_mutex : public _base_mutex { public: inline recursive_mutex(void) { #ifdef _WIN32 InitializeCriticalSection(&_native_handle); #else pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&_native_handle, &attr); pthread_mutexattr_destroy(&attr); #endif } }; /** * Same interface as std::unique_lock; */ template< class Mutex > class unique_lock { public: typedef Mutex mutex_type; inline explicit unique_lock(mutex_type &m) : _mutex(m) { _mutex.lock(); } inline ~unique_lock() { _mutex.unlock(); } inline void lock() { _mutex.lock(); } inline void unlock() { _mutex.unlock(); } mutex_type * mutex() const { return &_mutex; } protected: mutex_type &_mutex; }; /** * Same interface as std::condition_variable */ class condition_variable { private: #ifdef _WIN32 # ifdef HAVE_WIN32_CONDITION_VARIABLES // Only supported on Vista an higher. Not yet supported by WINE. typedef CONDITION_VARIABLE native_handle_type; native_handle_type _native_handle; #else // http://www.cs.wustl.edu/~schmidt/win32-cv-1.html LONG cWaiters; HANDLE hEvent; #endif #else typedef pthread_cond_t native_handle_type; native_handle_type _native_handle; #endif public: condition_variable() { #ifdef _WIN32 # ifdef HAVE_WIN32_CONDITION_VARIABLES InitializeConditionVariable(&_native_handle); # else cWaiters = 0; hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); # endif #else pthread_cond_init(&_native_handle, NULL); #endif } ~condition_variable() { #ifdef _WIN32 # ifdef HAVE_WIN32_CONDITION_VARIABLES /* No-op */ # else CloseHandle(hEvent); # endif #else pthread_cond_destroy(&_native_handle); #endif } inline void notify_one(void) { #ifdef _WIN32 # ifdef HAVE_WIN32_CONDITION_VARIABLES WakeConditionVariable(&_native_handle); # else if (cWaiters) { SetEvent(hEvent); } # endif #else pthread_cond_signal(&_native_handle); #endif } inline void wait(unique_lock & lock) { mutex::native_handle_type & mutex_native_handle = lock.mutex()->native_handle(); #ifdef _WIN32 # ifdef HAVE_WIN32_CONDITION_VARIABLES SleepConditionVariableCS(&_native_handle, &mutex_native_handle, INFINITE); # else InterlockedIncrement(&cWaiters); LeaveCriticalSection(&mutex_native_handle); WaitForSingleObject(hEvent, INFINITE); EnterCriticalSection(&mutex_native_handle); InterlockedDecrement(&cWaiters); # endif #else pthread_cond_wait(&_native_handle, &mutex_native_handle); #endif } }; /** * Implement TLS through OS threading API. * * This will only work when T is a pointer, intptr_t, or uintptr_t. */ template class thread_specific { private: #ifdef _WIN32 DWORD dwTlsIndex; #else pthread_key_t key; #endif public: thread_specific(void) { #ifdef _WIN32 dwTlsIndex = TlsAlloc(); #else pthread_key_create(&key, NULL); #endif } ~thread_specific() { #ifdef _WIN32 TlsFree(dwTlsIndex); #else pthread_key_delete(key); #endif } inline T get(void) const { void *ptr; #ifdef _WIN32 ptr = TlsGetValue(dwTlsIndex); #else ptr = pthread_getspecific(key); #endif return reinterpret_cast(ptr); } inline operator T (void) const { return get(); } inline T operator -> (void) const { return get(); } inline T operator = (T new_value) { set(new_value); return new_value; } inline void set(T new_value) { void *new_ptr = reinterpret_cast(new_value); #ifdef _WIN32 TlsSetValue(dwTlsIndex, new_ptr); #else pthread_setspecific(key, new_ptr); #endif } }; /** * Same interface as std::thread */ class thread { public: #ifdef _WIN32 typedef HANDLE native_handle_type; #else typedef pthread_t native_handle_type; #endif inline thread() : _native_handle(0) { } inline thread(const thread &other) : _native_handle(other._native_handle) { } inline ~thread() { } template< class Function, class Arg > explicit thread( Function &f, Arg arg ) { typedef CallbackParam< Function, Arg > Param; Param *pParam = new Param(f, arg); _native_handle = _create(pParam); } inline thread & operator =(const thread &other) { _native_handle = other._native_handle; return *this; } inline bool joinable(void) const { return _native_handle != 0; } inline void join() { #ifdef _WIN32 WaitForSingleObject(_native_handle, INFINITE); #else pthread_join(_native_handle, NULL); #endif } private: native_handle_type _native_handle; template< typename Function, typename Arg > struct CallbackParam { Function &f; Arg arg; inline CallbackParam(Function &_f, Arg _arg) : f(_f), arg(_arg) {} inline void operator () (void) { f(arg); } }; template< typename Param > static #ifdef _WIN32 unsigned __stdcall #else void * #endif _callback(void *lpParameter) { Param *pParam = static_cast(lpParameter); (*pParam)(); delete pParam; return 0; } template< typename Param > static inline native_handle_type _create(Param *pParam) { #ifdef _WIN32 uintptr_t handle =_beginthreadex(NULL, 0, &_callback, static_cast(pParam), 0, NULL); return reinterpret_cast(handle); #else pthread_t t; pthread_create(&t, NULL, &_callback, static_cast(pParam)); return t; #endif } }; } /* namespace os */ #endif /* !HAVE_CXX11_THREADS */ /** * Compiler TLS. * * See also: * - http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Thread_002dLocal.html * - http://msdn.microsoft.com/en-us/library/9w1sdazb.aspx */ #if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 # define OS_THREAD_SPECIFIC(_type) os::thread_specific< _type > #elif defined(__GNUC__) # define OS_THREAD_SPECIFIC(_type) __thread _type #elif defined(_MSC_VER) # define OS_THREAD_SPECIFIC(_type) __declspec(thread) _type #else # define OS_THREAD_SPECIFIC(_type) os::thread_specific< _type > #endif #define OS_THREAD_SPECIFIC_PTR(_type) OS_THREAD_SPECIFIC(_type *) tmpNnpnZF/common/os_win32.cpp0000664000175000017500000002161612543167424015431 0ustar chrischris/************************************************************************** * * Copyright 2010 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifdef _WIN32 #include #include #include #include #include #include #include "os.hpp" #include "os_string.hpp" namespace os { String getProcessName(void) { String path; DWORD size = MAX_PATH; char *buf = path.buf(size); DWORD nWritten = GetModuleFileNameA(NULL, buf, size); (void)nWritten; path.truncate(); return path; } String getCurrentDir(void) { String path; DWORD size = MAX_PATH; char *buf = path.buf(size); DWORD ret = GetCurrentDirectoryA(size, buf); (void)ret; buf[size - 1] = 0; path.truncate(); return path; } String getConfigDir(void) { String path; char *buf = path.buf(MAX_PATH); HRESULT hr = SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, buf); if (SUCCEEDED(hr)) { path.truncate(); } else { path.truncate(0); } return path; } bool createDirectory(const String &path) { return CreateDirectoryA(path, NULL); } bool String::exists(void) const { DWORD attrs = GetFileAttributesA(str()); return attrs != INVALID_FILE_ATTRIBUTES; } bool copyFile(const String &srcFileName, const String &dstFileName, bool override) { return CopyFileA(srcFileName, dstFileName, !override); } bool removeFile(const String &srcFilename) { return DeleteFileA(srcFilename); } /** * Determine whether an argument should be quoted. */ static bool needsQuote(const char *arg) { char c; while (true) { c = *arg++; if (c == '\0') { break; } if (c == ' ' || c == '\t' || c == '\"') { return true; } if (c == '\\') { c = *arg++; if (c == '\0') { break; } if (c == '"') { return true; } } } return false; } static void quoteArg(std::string &s, const char *arg) { char c; unsigned backslashes = 0; s.push_back('"'); while (true) { c = *arg++; if (c == '\0') { break; } else if (c == '"') { while (backslashes) { s.push_back('\\'); --backslashes; } s.push_back('\\'); } else { if (c == '\\') { ++backslashes; } else { backslashes = 0; } } s.push_back(c); } s.push_back('"'); } int execute(char * const * args) { std::string commandLine; const char *arg0 = *args; const char *arg; char sep = 0; while ((arg = *args++) != NULL) { if (sep) { commandLine.push_back(sep); } if (needsQuote(arg)) { quoteArg(commandLine, arg); } else { commandLine.append(arg); } sep = ' '; } STARTUPINFOA startupInfo; memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); PROCESS_INFORMATION processInformation; if (!CreateProcessA(NULL, const_cast(commandLine.c_str()), // only modified by CreateProcessW 0, // process attributes 0, // thread attributes FALSE, // inherit handles 0, // creation flags, NULL, // environment NULL, // current directory &startupInfo, &processInformation )) { log("error: failed to execute %s\n", arg0); return -1; } WaitForSingleObject(processInformation.hProcess, INFINITE); DWORD exitCode = ~0UL; GetExitCodeProcess(processInformation.hProcess, &exitCode); CloseHandle(processInformation.hProcess); CloseHandle(processInformation.hThread); return (int)exitCode; } #ifndef HAVE_EXTERNAL_OS_LOG void log(const char *format, ...) { char buf[4096]; va_list ap; va_start(ap, format); fflush(stdout); vsnprintf(buf, sizeof buf, format, ap); va_end(ap); OutputDebugStringA(buf); /* * Also write the message to stderr, when a debugger is not present (to * avoid duplicate messages in command line debuggers). */ #if _WIN32_WINNT > 0x0400 if (!IsDebuggerPresent()) { fflush(stdout); fputs(buf, stderr); fflush(stderr); } #endif } #endif /* !HAVE_EXTERNAL_OS_LOG */ long long timeFrequency = 0LL; void abort(void) { TerminateProcess(GetCurrentProcess(), 1); #if defined(__GNUC__) __builtin_unreachable(); #endif } void breakpoint(void) { #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) asm("int3"); #elif defined(_MSC_VER) __debugbreak(); #else DebugBreak(); #endif } #ifndef DBG_PRINTEXCEPTION_C #define DBG_PRINTEXCEPTION_C 0x40010006 #endif static PVOID prevExceptionFilter = NULL; static void (*gCallback)(void) = NULL; static LONG CALLBACK unhandledExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) { /* * Before Vista KiUserExceptionDispatcher does not clear the direction * flag. * * See also: * - http://code.google.com/p/nativeclient/issues/detail?id=1495 */ #ifdef _MSC_VER #ifndef _WIN64 __asm cld; #endif #else asm("cld"); #endif PEXCEPTION_RECORD pExceptionRecord = pExceptionInfo->ExceptionRecord; DWORD ExceptionCode = pExceptionRecord->ExceptionCode; // https://msdn.microsoft.com/en-us/library/het71c37.aspx switch (ExceptionCode >> 30) { case 0: // success return EXCEPTION_CONTINUE_SEARCH; case 1: // informational case 2: // warning case 3: // error break; } /* * Ignore OutputDebugStringA exception. */ if (ExceptionCode == DBG_PRINTEXCEPTION_C) { return EXCEPTION_CONTINUE_SEARCH; } /* * Ignore C++ exceptions, as some applications generate a lot of these with * no harm. But don't ignore them on debug builds, as bugs in apitrace can * easily lead the applicationa and/or runtime to raise them, and catching * them helps debugging. * * See also: * - http://blogs.msdn.com/b/oldnewthing/archive/2010/07/30/10044061.aspx * - http://support.microsoft.com/kb/185294 */ #ifdef NDEBUG if (ExceptionCode == 0xe06d7363) { return EXCEPTION_CONTINUE_SEARCH; } #endif /* * Ignore thread naming exception. * * http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx */ if (ExceptionCode == 0x406d1388) { return EXCEPTION_CONTINUE_SEARCH; } /* * Ignore .NET exception. * * http://ig2600.blogspot.co.uk/2011/01/why-do-i-keep-getting-exception-code.html */ if (ExceptionCode == 0xe0434352) { return EXCEPTION_CONTINUE_SEARCH; } log("apitrace: warning: caught exception 0x%08lx\n", pExceptionRecord->ExceptionCode); static int recursion_count = 0; if (recursion_count) { fputs("apitrace: warning: recursion handling exception\n", stderr); } else { if (gCallback) { ++recursion_count; gCallback(); --recursion_count; } } return EXCEPTION_CONTINUE_SEARCH; } void setExceptionCallback(void (*callback)(void)) { assert(!gCallback); if (!gCallback) { gCallback = callback; assert(!prevExceptionFilter); prevExceptionFilter = AddVectoredExceptionHandler(0, unhandledExceptionHandler); } } void resetExceptionCallback(void) { if (gCallback) { RemoveVectoredExceptionHandler(prevExceptionFilter); gCallback = NULL; } } } /* namespace os */ #endif // defined(_WIN32) tmpNnpnZF/common/os_time.hpp0000664000175000017500000000616712543167424015436 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Simple OS time measurement abstraction. */ #pragma once #if defined(_WIN32) # include #else # if defined(__linux__) # include # elif defined(__APPLE__) # include # else # include # endif # include #endif namespace os { // OS dependent time frequency #if defined(_WIN32) || defined(__APPLE__) // runtime variable on Windows and MacOSX extern long long timeFrequency; #elif defined(__linux__) // nanoseconds on Linux static const long long timeFrequency = 1000000000LL; #else // microseconds on Unices static const long long timeFrequency = 1000000LL; #endif // Time from an unknown base in a unit determined by timeFrequency inline long long getTime(void) { #if defined(_WIN32) if (!timeFrequency) { LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); timeFrequency = frequency.QuadPart; } LARGE_INTEGER counter; QueryPerformanceCounter(&counter); return counter.QuadPart; #elif defined(__linux__) struct timespec tp; if (clock_gettime(CLOCK_MONOTONIC, &tp) == -1) { return 0; } return tp.tv_sec * 1000000000LL + tp.tv_nsec; #elif defined(__APPLE__) if (!timeFrequency) { mach_timebase_info_data_t timebaseInfo; mach_timebase_info(&timebaseInfo); timeFrequency = 1000000000LL * timebaseInfo.denom / timebaseInfo.numer; } return mach_absolute_time(); #else struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000LL + tv.tv_usec; #endif } // Suspend execution inline void sleep(unsigned long usecs) { #if defined(_WIN32) Sleep((usecs + 999) / 1000); #else usleep(usecs); #endif } } /* namespace os */ tmpNnpnZF/common/os_process.hpp0000664000175000017500000000400612543167424016144 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Sub-process abstraction. */ #pragma once #ifdef _WIN32 #include #else #include #include #endif #include "os.hpp" namespace os { typedef #ifdef _WIN32 DWORD #else pid_t #endif ProcessId; static inline ProcessId getCurrentProcessId(void) { #ifdef _WIN32 return GetCurrentProcessId(); #else return getpid(); #endif } static inline void setEnvironment(const char *name, const char *value) { #ifdef _WIN32 SetEnvironmentVariableA(name, value); #else setenv(name, value, 1); #endif } static inline void unsetEnvironment(const char *name) { #ifdef _WIN32 SetEnvironmentVariableA(name, NULL); #else unsetenv(name); #endif } int execute(char * const * args); } /* namespace os */ tmpNnpnZF/scripts/0000775000175000017500000000000012543167424013453 5ustar chrischristmpNnpnZF/scripts/tracediff.py0000775000175000017500000004366012543167424015770 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ import difflib import itertools import optparse import os.path import platform import shutil import subprocess import sys import tempfile ##########################################################################/ # # Abstract interface # class Differ: def __init__(self, apitrace): self.apitrace = apitrace self.isatty = sys.stdout.isatty() def setRefTrace(self, refTrace, ref_calls): raise NotImplementedError def setSrcTrace(self, srcTrace, src_calls): raise NotImplementedError def diff(self): raise NotImplementedError ##########################################################################/ # # External diff tool # class AsciiDumper: def __init__(self, apitrace, trace, calls, callNos): self.output = tempfile.NamedTemporaryFile() dump_args = [ apitrace, 'dump', '--color=never', '--call-nos=' + ('yes' if callNos else 'no'), '--arg-names=no', '--calls=' + calls, trace ] self.dump = subprocess.Popen( args = dump_args, stdout = self.output, universal_newlines = True, ) class ExternalDiffer(Differ): if platform.system() == 'Windows': start_delete = '' end_delete = '' start_insert = '' end_insert = '' else: start_delete = '\33[9m\33[31m' end_delete = '\33[0m' start_insert = '\33[32m' end_insert = '\33[0m' def __init__(self, apitrace, options): Differ.__init__(self, apitrace) tool = options.tool callNos = options.callNos self.diff_args = [tool] if tool == 'diff': self.diff_args += [ '--speed-large-files', ] if self.isatty: if options.suppressCommonLines: self.diff_args += ['--unchanged-line-format='] else: self.diff_args += ['--unchanged-line-format=%l\n'] self.diff_args += [ '--old-line-format=' + self.start_delete + '%l' + self.end_delete + '\n', '--new-line-format=' + self.start_insert + '%l' + self.end_insert + '\n', ] else: if options.suppressCommonLines: self.diff_args += ['--unchanged-line-format='] else: self.diff_args += ['--unchanged-line-format= %l\n'] self.diff_args += [ '--old-line-format=- %l\n', '--new-line-format=+ %l\n', ] elif tool == 'sdiff': if width is None: import curses curses.setupterm() width = curses.tigetnum('cols') self.diff_args += [ '--width=%u' % width, '--speed-large-files', ] elif tool == 'wdiff': self.diff_args += [ #'--terminal', '--avoid-wraps', ] if self.isatty: self.diff_args += [ '--start-delete=' + self.start_delete, '--end-delete=' + self.end_delete, '--start-insert=' + self.start_insert, '--end-insert=' + self.end_insert, ] else: assert False self.callNos = callNos def setRefTrace(self, refTrace, ref_calls): self.ref_dumper = AsciiDumper(self.apitrace, refTrace, ref_calls, self.callNos) def setSrcTrace(self, srcTrace, src_calls): self.src_dumper = AsciiDumper(self.apitrace, srcTrace, src_calls, self.callNos) def diff(self): diff_args = self.diff_args + [ self.ref_dumper.output.name, self.src_dumper.output.name, ] self.ref_dumper.dump.wait() self.src_dumper.dump.wait() less = None diff_stdout = None if self.isatty: try: less = subprocess.Popen( args = ['less', '-FRXn'], stdin = subprocess.PIPE ) except OSError: pass else: diff_stdout = less.stdin diff = subprocess.Popen( args = diff_args, stdout = diff_stdout, universal_newlines = True, ) diff.wait() if less is not None: less.stdin.close() less.wait() ##########################################################################/ # # Python diff # from unpickle import Unpickler, Dumper, Rebuilder from highlight import PlainHighlighter, LessHighlighter ignoredFunctionNames = set([ 'glGetString', 'glXGetClientString', 'glXGetCurrentDisplay', 'glXGetCurrentContext', 'glXGetProcAddress', 'glXGetProcAddressARB', 'wglGetProcAddress', ]) class Blob: '''Data-less proxy for bytearrays, to save memory.''' def __init__(self, size, hash): self.size = size self.hash = hash def __repr__(self): return 'blob(%u)' % self.size def __eq__(self, other): return isinstance(other, Blob) and self.size == other.size and self.hash == other.hash def __hash__(self): return self.hash class BlobReplacer(Rebuilder): '''Replace blobs with proxys.''' def visitByteArray(self, obj): return Blob(len(obj), hash(str(obj))) def visitCall(self, call): call.args = map(self.visit, call.args) call.ret = self.visit(call.ret) class Loader(Unpickler): def __init__(self, stream): Unpickler.__init__(self, stream) self.calls = [] self.rebuilder = BlobReplacer() def handleCall(self, call): if call.functionName not in ignoredFunctionNames: self.rebuilder.visitCall(call) self.calls.append(call) class PythonDiffer(Differ): def __init__(self, apitrace, options): Differ.__init__(self, apitrace) self.a = None self.b = None if self.isatty: self.highlighter = LessHighlighter() else: self.highlighter = PlainHighlighter() self.delete_color = self.highlighter.red self.insert_color = self.highlighter.green self.callNos = options.callNos self.suppressCommonLines = options.suppressCommonLines self.aSpace = 0 self.bSpace = 0 self.dumper = Dumper() def setRefTrace(self, refTrace, ref_calls): self.a = self.readTrace(refTrace, ref_calls) def setSrcTrace(self, srcTrace, src_calls): self.b = self.readTrace(srcTrace, src_calls) def readTrace(self, trace, calls): p = subprocess.Popen( args = [ self.apitrace, 'pickle', '--symbolic', '--calls=' + calls, trace ], stdout = subprocess.PIPE, ) parser = Loader(p.stdout) parser.parse() return parser.calls def diff(self): try: self._diff() except IOError: pass def _diff(self): matcher = difflib.SequenceMatcher(self.isjunk, self.a, self.b) for tag, alo, ahi, blo, bhi in matcher.get_opcodes(): if tag == 'replace': self.replace(alo, ahi, blo, bhi) elif tag == 'delete': self.delete(alo, ahi, blo, bhi) elif tag == 'insert': self.insert(alo, ahi, blo, bhi) elif tag == 'equal': self.equal(alo, ahi, blo, bhi) else: raise ValueError, 'unknown tag %s' % (tag,) def isjunk(self, call): return call.functionName == 'glGetError' and call.ret in ('GL_NO_ERROR', 0) def replace(self, alo, ahi, blo, bhi): assert alo < ahi and blo < bhi a_names = [call.functionName for call in self.a[alo:ahi]] b_names = [call.functionName for call in self.b[blo:bhi]] matcher = difflib.SequenceMatcher(None, a_names, b_names) for tag, _alo, _ahi, _blo, _bhi in matcher.get_opcodes(): _alo += alo _ahi += alo _blo += blo _bhi += blo if tag == 'replace': self.replace_dissimilar(_alo, _ahi, _blo, _bhi) elif tag == 'delete': self.delete(_alo, _ahi, _blo, _bhi) elif tag == 'insert': self.insert(_alo, _ahi, _blo, _bhi) elif tag == 'equal': self.replace_similar(_alo, _ahi, _blo, _bhi) else: raise ValueError, 'unknown tag %s' % (tag,) def replace_similar(self, alo, ahi, blo, bhi): assert alo < ahi and blo < bhi assert ahi - alo == bhi - blo for i in xrange(0, bhi - blo): self.highlighter.write('| ') a_call = self.a[alo + i] b_call = self.b[blo + i] assert a_call.functionName == b_call.functionName self.dumpCallNos(a_call.no, b_call.no) self.highlighter.bold(True) self.highlighter.write(b_call.functionName) self.highlighter.bold(False) self.highlighter.write('(') sep = '' numArgs = max(len(a_call.args), len(b_call.args)) for j in xrange(numArgs): self.highlighter.write(sep) try: a_argName, a_argVal = a_call.args[j] except IndexError: pass try: b_argName, b_argVal = b_call.args[j] except IndexError: pass self.replace_value(a_argName, b_argName) self.highlighter.write(' = ') self.replace_value(a_argVal, b_argVal) sep = ', ' self.highlighter.write(')') if a_call.ret is not None or b_call.ret is not None: self.highlighter.write(' = ') self.replace_value(a_call.ret, b_call.ret) self.highlighter.write('\n') def replace_dissimilar(self, alo, ahi, blo, bhi): assert alo < ahi and blo < bhi if bhi - blo < ahi - alo: self.insert(alo, alo, blo, bhi) self.delete(alo, ahi, bhi, bhi) else: self.delete(alo, ahi, blo, blo) self.insert(ahi, ahi, blo, bhi) def replace_value(self, a, b): if b == a: self.highlighter.write(self.dumper.visit(b)) else: self.highlighter.strike() self.highlighter.color(self.delete_color) self.highlighter.write(self.dumper.visit(a)) self.highlighter.normal() self.highlighter.write(" -> ") self.highlighter.color(self.insert_color) self.highlighter.write(self.dumper.visit(b)) self.highlighter.normal() escape = "\33[" def delete(self, alo, ahi, blo, bhi): assert alo < ahi assert blo == bhi for i in xrange(alo, ahi): call = self.a[i] self.highlighter.write('- ') self.dumpCallNos(call.no, None) self.highlighter.strike() self.highlighter.color(self.delete_color) self.dumpCall(call) def insert(self, alo, ahi, blo, bhi): assert alo == ahi assert blo < bhi for i in xrange(blo, bhi): call = self.b[i] self.highlighter.write('+ ') self.dumpCallNos(None, call.no) self.highlighter.color(self.insert_color) self.dumpCall(call) def equal(self, alo, ahi, blo, bhi): if self.suppressCommonLines: return assert alo < ahi and blo < bhi assert ahi - alo == bhi - blo for i in xrange(0, bhi - blo): self.highlighter.write(' ') a_call = self.a[alo + i] b_call = self.b[blo + i] assert a_call.functionName == b_call.functionName assert len(a_call.args) == len(b_call.args) self.dumpCallNos(a_call.no, b_call.no) self.dumpCall(b_call) def dumpCallNos(self, aNo, bNo): if not self.callNos: return if aNo is not None and bNo is not None and aNo == bNo: aNoStr = str(aNo) self.highlighter.write(aNoStr) self.aSpace = len(aNoStr) self.bSpace = self.aSpace self.highlighter.write(' ') return if aNo is None: self.highlighter.write(' '*self.aSpace) else: aNoStr = str(aNo) self.highlighter.strike() self.highlighter.color(self.delete_color) self.highlighter.write(aNoStr) self.highlighter.normal() self.aSpace = len(aNoStr) self.highlighter.write(' ') if bNo is None: self.highlighter.write(' '*self.bSpace) else: bNoStr = str(bNo) self.highlighter.color(self.insert_color) self.highlighter.write(bNoStr) self.highlighter.normal() self.bSpace = len(bNoStr) self.highlighter.write(' ') def dumpCall(self, call): self.highlighter.bold(True) self.highlighter.write(call.functionName) self.highlighter.bold(False) self.highlighter.write('(' + self.dumper.visitItems(call.args) + ')') if call.ret is not None: self.highlighter.write(' = ' + self.dumper.visit(call.ret)) self.highlighter.normal() self.highlighter.write('\n') ##########################################################################/ # # Main program # def which(executable): '''Search for the executable on the PATH.''' if platform.system() == 'Windows': exts = ['.exe'] else: exts = [''] dirs = os.environ['PATH'].split(os.path.pathsep) for dir in dirs: path = os.path.join(dir, executable) for ext in exts: if os.path.exists(path + ext): return True return False def main(): '''Main program. ''' # Parse command line options optparser = optparse.OptionParser( usage='\n\t%prog [options] TRACE TRACE', version='%%prog') optparser.add_option( '-a', '--apitrace', metavar='PROGRAM', type='string', dest='apitrace', default='apitrace', help='apitrace command [default: %default]') optparser.add_option( '-t', '--tool', metavar='TOOL', type="choice", choices=('diff', 'sdiff', 'wdiff', 'python'), dest="tool", default=None, help="diff tool: diff, sdiff, wdiff, or python [default: auto]") optparser.add_option( '-c', '--calls', metavar='CALLSET', type="string", dest="calls", default='0-10000', help="calls to compare [default: %default]") optparser.add_option( '--ref-calls', metavar='CALLSET', type="string", dest="refCalls", default=None, help="calls to compare from reference trace") optparser.add_option( '--src-calls', metavar='CALLSET', type="string", dest="srcCalls", default=None, help="calls to compare from source trace") optparser.add_option( '--call-nos', action="store_true", dest="callNos", default=False, help="dump call numbers") optparser.add_option( '--suppress-common-lines', action="store_true", dest="suppressCommonLines", default=False, help="do not output common lines") optparser.add_option( '-w', '--width', metavar='NUM', type="int", dest="width", help="columns [default: auto]") (options, args) = optparser.parse_args(sys.argv[1:]) if len(args) != 2: optparser.error("incorrect number of arguments") if options.tool is None: if platform.system() == 'Windows': options.tool = 'python' else: if which('wdiff'): options.tool = 'wdiff' else: sys.stderr.write('warning: wdiff not found\n') if which('sdiff'): options.tool = 'sdiff' else: sys.stderr.write('warning: sdiff not found\n') options.tool = 'diff' if options.refCalls is None: options.refCalls = options.calls if options.srcCalls is None: options.srcCalls = options.calls refTrace, srcTrace = args if options.tool == 'python': factory = PythonDiffer else: factory = ExternalDiffer differ = factory(options.apitrace, options) differ.setRefTrace(refTrace, options.refCalls) differ.setSrcTrace(srcTrace, options.srcCalls) differ.diff() if __name__ == '__main__': main() tmpNnpnZF/scripts/jsonextractimages.py0000775000175000017500000000514212543167424017564 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2012 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Simple script to extract PNG files from the JSON state dumps.''' import json import optparse import base64 import sys pngSignature = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A" def dumpSurfaces(state, memberName): for name, imageObj in state[memberName].iteritems(): data = imageObj['__data__'] data = base64.b64decode(data) if data.startswith(pngSignature): extName = 'png' else: magic = data[:2] if magic in ('P1', 'P4'): extName = 'pbm' elif magic in ('P2', 'P5'): extName = 'pgm' elif magic in ('P3', 'P6'): extName = 'ppm' elif magic in ('Pf', 'PF'): extName = 'pfm' else: sys.stderr.write('warning: unsupport Netpbm format %s\n' % magic) continue imageName = '%s.%s' % (name, extName) open(imageName, 'wb').write(data) sys.stderr.write('Wrote %s\n' % imageName) def main(): optparser = optparse.OptionParser( usage="\n\t%prog [options] ") (options, args) = optparser.parse_args(sys.argv[1:]) for arg in args: state = json.load(open(arg, 'rt'), strict=False) dumpSurfaces(state, 'textures') dumpSurfaces(state, 'framebuffer') if __name__ == '__main__': main() tmpNnpnZF/scripts/unpickle.py0000775000175000017500000002124512543167424015646 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2012 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Sample program for apitrace pickle command. Run as: apitrace pickle foo.trace | python unpickle.py ''' import itertools import optparse import sys import time import re import cPickle as pickle # Same as trace_model.hpp's call flags CALL_FLAG_FAKE = (1 << 0) CALL_FLAG_NON_REPRODUCIBLE = (1 << 1) CALL_FLAG_NO_SIDE_EFFECTS = (1 << 2) CALL_FLAG_RENDER = (1 << 3) CALL_FLAG_SWAP_RENDERTARGET = (1 << 4) CALL_FLAG_END_FRAME = (1 << 5) CALL_FLAG_INCOMPLETE = (1 << 6) CALL_FLAG_VERBOSE = (1 << 7) CALL_FLAG_MARKER = (1 << 8) CALL_FLAG_MARKER_PUSH = (1 << 9) CALL_FLAG_MARKER_POP = (1 << 10) class Pointer(long): def __str__(self): if self == 0L: return 'NULL' else: return hex(self).rstrip('L') __repr__ = __str__ class Visitor: def __init__(self): self.dispatch = {} self.dispatch[type(None)] = self.visitNone self.dispatch[bool] = self.visitBool self.dispatch[int] = self.visitInt self.dispatch[long] = self.visitInt self.dispatch[float] = self.visitFloat self.dispatch[str] = self.visitStr self.dispatch[tuple] = self.visitTuple self.dispatch[list] = self.visitList self.dispatch[dict] = self.visitDict self.dispatch[bytearray] = self.visitByteArray self.dispatch[Pointer] = self.visitPointer def visit(self, obj): method = self.dispatch.get(obj.__class__, self.visitObj) return method(obj) def visitObj(self, obj): raise NotImplementedError def visitAtom(self, obj): return self.visitObj(obj) def visitNone(self, obj): return self.visitAtom(obj) def visitBool(self, obj): return self.visitAtom(obj) def visitInt(self, obj): return self.visitAtom(obj) def visitFloat(self, obj): return self.visitAtom(obj) def visitStr(self, obj): return self.visitAtom(obj) def visitIterable(self, obj): return self.visitObj(obj) def visitTuple(self, obj): return self.visitIterable(obj) def visitList(self, obj): return self.visitIterable(obj) def visitDict(self, obj): return self.visitIterable(obj) def visitByteArray(self, obj): raise NotImplementedError def visitPointer(self, obj): return self.visitAtom(obj) class Dumper(Visitor): id_re = re.compile('^[_A-Za-z][_A-Za-z0-9]*$') def visitObj(self, obj): return repr(obj) def visitStr(self, obj): if self.id_re.match(obj): return obj else: return repr(obj) def visitTuple(self, obj): return '(' + ', '.join(itertools.imap(self.visit, obj)) + ')' def visitList(self, obj): if len(obj) == 1: return '&' + self.visit(obj[0]) return '{' + ', '.join(itertools.imap(self.visit, obj)) + '}' def visitItems(self, items): return ', '.join(['%s = %s' % (name, self.visit(value)) for name, value in items]) def visitDict(self, obj): return '{' + self.visitItems(obj.iteritems()) + '}' def visitByteArray(self, obj): return 'blob(%u)' % len(obj) class Hasher(Visitor): '''Returns a hashable version of the objtree.''' def visitObj(self, obj): return obj def visitAtom(self, obj): return obj def visitIterable(self, obj): return tuple(itertools.imap(self.visit, obj)) def visitByteArray(self, obj): return str(obj) class Rebuilder(Visitor): '''Returns a hashable version of the objtree.''' def visitAtom(self, obj): return obj def visitIterable(self, obj): changed = False newItems = [] for oldItem in obj: newItem = self.visit(oldItem) if newItem is not oldItem: changed = True newItems.append(newItem) if changed: klass = type(obj) return klass(newItems) else: return obj def visitByteArray(self, obj): return obj class Call: def __init__(self, callTuple): self.no, self.functionName, self.args, self.ret, self.flags = callTuple self._hash = None def __str__(self): s = self.functionName if self.no is not None: s = str(self.no) + ' ' + s dumper = Dumper() s += '(' + dumper.visitItems(self.args) + ')' if self.ret is not None: s += ' = ' s += dumper.visit(self.ret) return s def __eq__(self, other): return \ self.functionName == other.functionName and \ self.args == other.args and \ self.ret == other.ret def __hash__(self): if self._hash is None: hasher = Hasher() hashable = hasher.visit(self.functionName), hasher.visit(self.args), hasher.visit(self.ret) self._hash = hash(hashable) return self._hash class Unpickler: callFactory = Call def __init__(self, stream): self.stream = stream def parse(self): while self.parseCall(): pass def parseCall(self): try: callTuple = pickle.load(self.stream) except EOFError: return False else: call = self.callFactory(callTuple) try: self.handleCall(call) except StopIteration: return False else: return True def handleCall(self, call): pass class Counter(Unpickler): def __init__(self, stream, verbose = False): Unpickler.__init__(self, stream) self.verbose = verbose self.numCalls = 0 self.functionFrequencies = {} def parse(self): Unpickler.parse(self) functionFrequencies = self.functionFrequencies.items() functionFrequencies.sort(lambda (name1, freq1), (name2, freq2): cmp(freq1, freq2)) for name, frequency in functionFrequencies: sys.stdout.write('%8u %s\n' % (frequency, name)) def handleCall(self, call): if self.verbose: sys.stdout.write(str(call)) sys.stdout.write('\n') self.numCalls += 1 try: self.functionFrequencies[call.functionName] += 1 except KeyError: self.functionFrequencies[call.functionName] = 1 def main(): optparser = optparse.OptionParser( usage="\n\tapitrace pickle | %prog [options]") optparser.add_option( '-p', '--profile', action="store_true", dest="profile", default=False, help="profile call parsing") optparser.add_option( '-v', '--verbose', action="store_true", dest="verbose", default=False, help="dump calls to stdout") (options, args) = optparser.parse_args(sys.argv[1:]) if args: optparser.error('unexpected arguments') # Change stdin to binary mode try: import msvcrt except ImportError: pass else: import os msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) startTime = time.time() parser = Counter(sys.stdin, options.verbose) parser.parse() stopTime = time.time() duration = stopTime - startTime if options.profile: sys.stderr.write('Processed %u calls in %.03f secs, at %u calls/sec\n' % (parser.numCalls, duration, parser.numCalls/duration)) if __name__ == '__main__': main() tmpNnpnZF/scripts/apitrace.PIXExp0000664000175000017500000003572212543167424016313 0ustar chrischris 2020001EDID103%dEvent Type203%dEID303%dParent EID403%dChildren1106%dParent1002%dFlags5020x%08XEvent604%sStartTime705%I64iPath1301%sPath21401%sVersion1501%sTimeLastModified1601%sProcessID2303%dSessionStartTimeStamp2405%I64iFrame903%dDuration805%I64iMeasured Est. Draw Duration (ns)2705%I64iFPS1200%0.01fThisEventPos2105%I64iNextSiblingPos2205%I64iUser Event Name1701%sPackedCallPackage1907Object Pointer20020x%08XSession Start111(edid)2CalcOnLoad,Const,13(eid)4CalcOnLoad,Const,-15CalcOnLoad,Const,07CalcOnLoad,Const,08CalcOnLoad,Const,06CalcOnLoad,FormatText,0,Start Session13(expfilepath)14(runfilepath)24(sessionstarttimestamp)Session End221(edid)2CalcOnLoad,Const,23(eid)4CalcOnLoad,Const,-15CalcOnLoad,Const,07(time)8CalcOnLoad,Const,06CalcOnLoad,FormatText,0,End SessionProcess Start331(edid)2CalcOnLoad,Const,33(eid)4CalcOnLoad,Const,-15CalcOnLoad,Const,07CalcOnLoad,Const,08CalcOnLoad,Const,06CalcOnLoad,FormatText,0,Start Process13(processpath)15(processversion)16(processtimelastmodified)23(processid)Process End441(edid)2CalcOnLoad,Const,43(eid)4CalcOnLoad,Const,-15CalcOnLoad,Const,07(time)8CalcOnLoad,Const,06CalcOnLoad,FormatText,0,End Process13(processpath)Frame Begin551(edid)2CalcOnLoad,Const,53(eid)4(parenteid)11CalcOnLoad,Const,05(rowflags)7(time)9(frame)6CalcOnLoad,FormatText,1,Frame %d,3,MemberOf,ThisRow,Frame8Async,(duration)12CalcOnLoad,Divide,Const,1000000000.0,MemberOf,ThisRow,Duration21(frameeventfilepos)22(lastframeeventfilepos)User Event Begin761(edid)2CalcOnLoad,Const,73(eid)4(parenteid)10CalcOnLoad,Const,011CalcOnLoad,Const,05CalcOnLoad,Const,07(time)17(usereventname)6CalcOnLoad,FormatText,1,%s,1,MemberOf,ThisRow,User Event Name8Async,(duration)User Marker971(edid)2CalcOnLoad,Const,93(eid)4(parenteid)10CalcOnLoad,Const,011CalcOnLoad,Const,05CalcOnLoad,Const,07(time)17(usereventname)6CalcOnLoad,FormatText,1,User Marker: %s,1,MemberOf,ThisRow,User Event Name8CalcOnLoad,Const,0D3D Call1081(edid)2CalcOnLoad,Const,103(eid)4(parenteid)11CalcOnLoad,Const,010CalcOnLoad,Const,05CalcOnLoad,Const,07(time)6CalcOnLoad,CallPlusParams,MemberOf,ThisRow,PackedCallPackage19Async,(packedcallpkg)27Async,(drawduration)Object Creation1191(edid)2CalcOnLoad,Const,113(eid)4(parenteid)11CalcOnLoad,Const,010CalcOnLoad,Const,05CalcOnLoad,Const,07(time)6CalcOnLoad,FormatText,0,Object Creation20(objpointer)Object Population12101(edid)2CalcOnLoad,Const,123(eid)4(parenteid)11CalcOnLoad,Const,010CalcOnLoad,Const,05CalcOnLoad,Const,07(time)6CalcOnLoad,FormatText,0,Object Population20(objpointer)D3D Call (Sync)13111(edid)2CalcOnLoad,Const,133(eid)4(parenteid)11CalcOnLoad,Const,010CalcOnLoad,Const,05CalcOnLoad,Const,07(time)6CalcOnLoad,CallPlusParams,MemberOf,ThisRow,PackedCallPackage19(packedcallpkg)1010330 tmpNnpnZF/scripts/retracediff.py0000775000175000017500000003166612543167424016322 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the 'Software'), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Run two retrace instances in parallel, comparing generated snapshots. ''' import math import optparse import os.path import subprocess import platform import sys from PIL import Image from snapdiff import Comparer from highlight import AutoHighlighter import jsondiff # Null file, to use when we're not interested in subprocesses output if platform.system() == 'Windows': NULL = open('NUL:', 'wb') else: NULL = open('/dev/null', 'wb') class RetraceRun: def __init__(self, process): self.process = process def nextSnapshot(self): image, comment = read_pnm(self.process.stdout) if image is None: return None, None callNo = int(comment.strip()) return image, callNo def terminate(self): try: self.process.terminate() except OSError: # Avoid http://bugs.python.org/issue14252 pass class Retracer: def __init__(self, retraceExe, args, env=None): self.retraceExe = retraceExe self.args = args self.env = env def _retrace(self, args, stdout=subprocess.PIPE): cmd = [ self.retraceExe, ] + args + self.args if self.env: for name, value in self.env.iteritems(): sys.stderr.write('%s=%s ' % (name, value)) sys.stderr.write(' '.join(cmd) + '\n') try: return subprocess.Popen(cmd, env=self.env, stdout=stdout, stderr=NULL) except OSError, ex: sys.stderr.write('error: failed to execute %s: %s\n' % (cmd[0], ex.strerror)) sys.exit(1) def retrace(self, args): p = self._retrace([]) p.wait() return p.returncode def snapshot(self, call_nos): process = self._retrace([ '-s', '-', '-S', call_nos, ]) return RetraceRun(process) def dump_state(self, call_no): '''Get the state dump at the specified call no.''' p = self._retrace([ '-D', str(call_no), ]) state = jsondiff.load(p.stdout) p.wait() return state.get('parameters', {}) def diff_state(self, ref_call_no, src_call_no, stream): '''Compare the state between two calls.''' ref_state = self.dump_state(ref_call_no) src_state = self.dump_state(src_call_no) stream.flush() differ = jsondiff.Differ(stream) differ.visit(ref_state, src_state) stream.write('\n') def read_pnm(stream): '''Read a PNM from the stream, and return the image object, and the comment.''' magic = stream.readline() if not magic: return None, None magic = magic.rstrip() if magic == 'P5': channels = 1 bytesPerChannel = 1 mode = 'L' elif magic == 'P6': channels = 3 bytesPerChannel = 1 mode = 'RGB' elif magic == 'Pf': channels = 1 bytesPerChannel = 4 mode = 'R' elif magic == 'PF': channels = 3 bytesPerChannel = 4 mode = 'RGB' elif magic == 'PX': channels = 4 bytesPerChannel = 4 mode = 'RGB' else: raise Exception('Unsupported magic `%s`' % magic) comment = '' line = stream.readline() while line.startswith('#'): comment += line[1:] line = stream.readline() width, height = map(int, line.strip().split()) maximum = int(stream.readline().strip()) if bytesPerChannel == 1: assert maximum == 255 else: assert maximum == 1 data = stream.read(height * width * channels * bytesPerChannel) if bytesPerChannel == 4: # Image magic only supports single channel floating point images, so # represent the image as numpy arrays import numpy pixels = numpy.fromstring(data, dtype=numpy.float32) pixels.resize((height, width, channels)) return pixels, comment image = Image.frombuffer(mode, (width, height), data, 'raw', mode, 0, 1) return image, comment def dumpNumpyImage(output, pixels, filename): height, width, channels = pixels.shape import numpy pixels = (pixels*255).clip(0, 255).astype('uint8') if 0: # XXX: Doesn't work somehow im = Image.fromarray(pixels) else: # http://code.activestate.com/recipes/577591-conversion-of-pil-image-and-numpy-array/ pixels = pixels.reshape(height*width, channels) if channels == 4: mode = 'RGBA' else: if channels < 3: pixels = numpy.c_[arr, 255*numpy.ones((heigth * width, 3 - channels), numpy.uint8)] assert channels == 3 mode = 'RGB' im = Image.frombuffer(mode, (width, height), pixels.tostring(), 'raw', mode, 0, 1) im.save(filename) if 0: # Dump to stdout for y in range(height): output.write(' ') for x in range(width): for c in range(channels): output.write('%0.9g,' % pixels[y, x, c]) output.write(' ') output.write('\n') def parse_env(optparser, entries): '''Translate a list of NAME=VALUE entries into an environment dictionary.''' if not entries: return None env = os.environ.copy() for entry in entries: try: name, var = entry.split('=', 1) except Exception: optparser.error('invalid environment entry %r' % entry) env[name] = var return env def main(): '''Main program. ''' global options # Parse command line options optparser = optparse.OptionParser( usage='\n\t%prog [options] -- [glretrace options] ', version='%%prog') optparser.add_option( '-r', '--retrace', metavar='PROGRAM', type='string', dest='retrace', default='glretrace', help='retrace command [default: %default]') optparser.add_option( '--ref-driver', metavar='DRIVER', type='string', dest='ref_driver', default=None, help='force reference driver') optparser.add_option( '--src-driver', metavar='DRIVER', type='string', dest='src_driver', default=None, help='force source driver') optparser.add_option( '--ref-arg', metavar='OPTION', type='string', action='append', dest='ref_args', default=[], help='pass argument to reference retrace') optparser.add_option( '--src-arg', metavar='OPTION', type='string', action='append', dest='src_args', default=[], help='pass argument to source retrace') optparser.add_option( '--ref-env', metavar='NAME=VALUE', type='string', action='append', dest='ref_env', default=[], help='add variable to reference environment') optparser.add_option( '--src-env', metavar='NAME=VALUE', type='string', action='append', dest='src_env', default=[], help='add variable to source environment') optparser.add_option( '--diff-prefix', metavar='PATH', type='string', dest='diff_prefix', default='.', help='prefix for the difference images') optparser.add_option( '-t', '--threshold', metavar='BITS', type="float", dest="threshold", default=12.0, help="threshold precision [default: %default]") optparser.add_option( '-S', '--snapshot-frequency', metavar='CALLSET', type="string", dest="snapshot_frequency", default='draw', help="calls to compare [default: %default]") optparser.add_option( '--diff-state', action='store_true', dest='diff_state', default=False, help='diff state between failing calls') optparser.add_option( '-o', '--output', metavar='FILE', type="string", dest="output", help="output file [default: stdout]") (options, args) = optparser.parse_args(sys.argv[1:]) ref_env = parse_env(optparser, options.ref_env) src_env = parse_env(optparser, options.src_env) if not args: optparser.error("incorrect number of arguments") if options.ref_driver: options.ref_args.insert(0, '--driver=' + options.ref_driver) if options.src_driver: options.src_args.insert(0, '--driver=' + options.src_driver) refRetracer = Retracer(options.retrace, options.ref_args + args, ref_env) srcRetracer = Retracer(options.retrace, options.src_args + args, src_env) if options.output: output = open(options.output, 'wt') else: output = sys.stdout highligher = AutoHighlighter(output) highligher.write('call\tprecision\n') last_bad = -1 last_good = 0 refRun = refRetracer.snapshot(options.snapshot_frequency) try: srcRun = srcRetracer.snapshot(options.snapshot_frequency) try: while True: # Get the reference image refImage, refCallNo = refRun.nextSnapshot() if refImage is None: break # Get the source image srcImage, srcCallNo = srcRun.nextSnapshot() if srcImage is None: break assert refCallNo == srcCallNo callNo = refCallNo # Compare the two images if isinstance(refImage, Image.Image) and isinstance(srcImage, Image.Image): # Using PIL numpyImages = False comparer = Comparer(refImage, srcImage) precision = comparer.precision() else: # Using numpy (for floating point images) # TODO: drop PIL when numpy path becomes general enough import numpy assert not isinstance(refImage, Image.Image) assert not isinstance(srcImage, Image.Image) numpyImages = True assert refImage.shape == srcImage.shape diffImage = numpy.square(srcImage - refImage) height, width, channels = diffImage.shape square_error = numpy.sum(diffImage) square_error += numpy.finfo(numpy.float32).eps rel_error = square_error / float(height*width*channels) bits = -math.log(rel_error)/math.log(2.0) precision = bits mismatch = precision < options.threshold if mismatch: highligher.color(highligher.red) highligher.bold() highligher.write('%u\t%f\n' % (callNo, precision)) if mismatch: highligher.normal() if mismatch: if options.diff_prefix: prefix = os.path.join(options.diff_prefix, '%010u' % callNo) prefix_dir = os.path.dirname(prefix) if not os.path.isdir(prefix_dir): os.makedirs(prefix_dir) if numpyImages: dumpNumpyImage(output, refImage, prefix + '.ref.png') dumpNumpyImage(output, srcImage, prefix + '.src.png') else: refImage.save(prefix + '.ref.png') srcImage.save(prefix + '.src.png') comparer.write_diff(prefix + '.diff.png') if last_bad < last_good and options.diff_state: srcRetracer.diff_state(last_good, callNo, output) last_bad = callNo else: last_good = callNo highligher.flush() finally: srcRun.terminate() finally: refRun.terminate() if __name__ == '__main__': main() tmpNnpnZF/scripts/jsondiff.py0000775000175000017500000002200012543167424015624 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ import json import optparse import re import sys def strip_object_hook(obj): if '__class__' in obj: return None for name in obj.keys(): if name.startswith('__') and name.endswith('__'): del obj[name] return obj class Visitor: def visit(self, node, *args, **kwargs): if isinstance(node, dict): return self.visitObject(node, *args, **kwargs) elif isinstance(node, list): return self.visitArray(node, *args, **kwargs) else: return self.visitValue(node, *args, **kwargs) def visitObject(self, node, *args, **kwargs): pass def visitArray(self, node, *args, **kwargs): pass def visitValue(self, node, *args, **kwargs): pass class Dumper(Visitor): def __init__(self, stream = sys.stdout): self.stream = stream self.level = 0 def _write(self, s): self.stream.write(s) def _indent(self): self._write(' '*self.level) def _newline(self): self._write('\n') def visitObject(self, node): self.enter_object() members = node.keys() members.sort() for i in range(len(members)): name = members[i] value = node[name] self.enter_member(name) self.visit(value) self.leave_member(i == len(members) - 1) self.leave_object() def enter_object(self): self._write('{') self._newline() self.level += 1 def enter_member(self, name): self._indent() self._write('%s: ' % name) def leave_member(self, last): if not last: self._write(',') self._newline() def leave_object(self): self.level -= 1 self._indent() self._write('}') if self.level <= 0: self._newline() def visitArray(self, node): self.enter_array() for i in range(len(node)): value = node[i] self._indent() self.visit(value) if i != len(node) - 1: self._write(',') self._newline() self.leave_array() def enter_array(self): self._write('[') self._newline() self.level += 1 def leave_array(self): self.level -= 1 self._indent() self._write(']') def visitValue(self, node): self._write(json.dumps(node)) class Comparer(Visitor): def __init__(self, ignore_added = False, tolerance = 2.0 ** -24): self.ignore_added = ignore_added self.tolerance = tolerance def visitObject(self, a, b): if not isinstance(b, dict): return False if len(a) != len(b) and not self.ignore_added: return False ak = a.keys() bk = b.keys() ak.sort() bk.sort() if ak != bk and not self.ignore_added: return False for k in ak: ae = a[k] try: be = b[k] except KeyError: return False if not self.visit(ae, be): return False return True def visitArray(self, a, b): if not isinstance(b, list): return False if len(a) != len(b): return False for ae, be in zip(a, b): if not self.visit(ae, be): return False return True def visitValue(self, a, b): if isinstance(a, float) and isinstance(b, (int, long, float)) or \ isinstance(b, float) and isinstance(a, (int, long, float)): if a is b: # NaNs take this path return True elif a == b: return True elif a == 0: return abs(b) < self.tolerance else: return abs((b - a)/a) < self.tolerance else: return a == b class Differ(Visitor): def __init__(self, stream = sys.stdout, ignore_added = False): self.dumper = Dumper(stream) self.comparer = Comparer(ignore_added = ignore_added) def visit(self, a, b): if self.comparer.visit(a, b): return Visitor.visit(self, a, b) def visitObject(self, a, b): if not isinstance(b, dict): self.replace(a, b) else: self.dumper.enter_object() names = set(a.keys()) if not self.comparer.ignore_added: names.update(b.keys()) names = list(names) names.sort() for i in range(len(names)): name = names[i] ae = a.get(name, None) be = b.get(name, None) if not self.comparer.visit(ae, be): self.dumper.enter_member(name) self.visit(ae, be) self.dumper.leave_member(i == len(names) - 1) self.dumper.leave_object() def visitArray(self, a, b): if not isinstance(b, list): self.replace(a, b) else: self.dumper.enter_array() max_len = max(len(a), len(b)) for i in range(max_len): try: ae = a[i] except IndexError: ae = None try: be = b[i] except IndexError: be = None self.dumper._indent() if self.comparer.visit(ae, be): self.dumper.visit(ae) else: self.visit(ae, be) if i != max_len - 1: self.dumper._write(',') self.dumper._newline() self.dumper.leave_array() def visitValue(self, a, b): if a != b: self.replace(a, b) def replace(self, a, b): self.dumper.visit(a) self.dumper._write(' -> ') self.dumper.visit(b) # # Unfortunately JSON standard does not include comments, but this is a quite # useful feature to have on regressions tests # _token_res = [ r'//[^\r\n]*', # comment r'"[^"\\]*(\\.[^"\\]*)*"', # string ] _tokens_re = re.compile(r'|'.join(['(' + token_re + ')' for token_re in _token_res]), re.DOTALL) def _strip_comment(mo): if mo.group(1): return '' else: return mo.group(0) def _strip_comments(data): '''Strip (non-standard) JSON comments.''' return _tokens_re.sub(_strip_comment, data) assert _strip_comments('''// a comment "// a comment in a string "''') == ''' "// a comment in a string "''' def load(stream, strip_images = True, strip_comments = True): if strip_images: object_hook = strip_object_hook else: object_hook = None if strip_comments: data = stream.read() data = _strip_comments(data) return json.loads(data, strict=False, object_hook = object_hook) else: return json.load(stream, strict=False, object_hook = object_hook) def main(): optparser = optparse.OptionParser( usage="\n\t%prog [options] ") optparser.add_option( '--ignore-added', action="store_true", dest="ignore_added", default=False, help="ignore added state") optparser.add_option( '--keep-images', action="store_false", dest="strip_images", default=True, help="compare images") (options, args) = optparser.parse_args(sys.argv[1:]) if len(args) != 2: optparser.error('incorrect number of arguments') a = load(open(args[0], 'rt'), options.strip_images) b = load(open(args[1], 'rt'), options.strip_images) if False: dumper = Dumper() dumper.visit(a) differ = Differ(ignore_added = options.ignore_added) differ.visit(a, b) if __name__ == '__main__': main() tmpNnpnZF/scripts/tracecheck.py0000775000175000017500000001562212543167424016132 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the 'Software'), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Check a trace replays successfully or not. It is meant to be used with git bisect. See git bisect manpage for more details. ''' import optparse import os.path import platform import re import subprocess import sys import traceback import snapdiff import retracediff def good(): '''Tell git-bisect that this commit is good.''' sys.stdout.write('GOOD\n') sys.exit(0) def bad(): '''Tell git-bisect that this commit is bad.''' sys.stdout.write('BAD\n') sys.exit(1) def skip(): '''Tell git-bisect to skip this commit.''' sys.stdout.write('SKIP\n') sys.exit(125) def abort(): '''Tell git-bisect to abort.''' sys.stdout.write('ABORT\n') sys.exit(-1) def which(executable): '''Search for the executable on the PATH.''' if platform.system() == 'Windows': exts = ['.exe'] else: exts = [''] dirs = os.environ['PATH'].split(os.path.pathsep) for dir in dirs: path = os.path.join(dir, executable) for ext in exts: if os.path.exists(path + ext): return True return False def main(): '''Main program. It will always invoke sys.exit(), and never return normally. ''' # Try to guess the build command. if os.path.exists('SConstruct'): default_build = 'scons' elif os.path.exists('Makefile'): default_build = 'make' else: default_build = None # Parse command line options optparser = optparse.OptionParser( usage='\n\tgit bisect run %prog [options] -- [glretrace options] ', version='%%prog') optparser.add_option( '-b', '--build', metavar='COMMAND', type='string', dest='build', default=default_build, help='build command [default: %default]') optparser.add_option( '-r', '--retrace', metavar='PROGRAM', type='string', dest='retrace', default='glretrace', help='retrace command [default: %default]') optparser.add_option( '-c', '--compare', metavar='PREFIX', type='string', dest='compare_prefix', default=None, help='snapshot comparison prefix') optparser.add_option( '--precision-threshold', metavar='BITS', type='float', dest='precision_threshold', default=8.0, help='precision threshold in bits [default: %default]') optparser.add_option( '--gl-renderer', metavar='REGEXP', type='string', dest='gl_renderer_re', default='^.*$', help='require a matching GL_RENDERER string [default: %default]') (options, args) = optparser.parse_args(sys.argv[1:]) if not args: optparser.error("incorrect number of arguments") # Build the source if options.build: sys.stdout.write(options.build + '\n') sys.stdout.flush() returncode = subprocess.call(options.build, shell=True) if returncode: skip() # TODO: For this to be useful on Windows we'll also need an installation # procedure here. # Do some sanity checks. In particular we want to make sure that the GL # implementation is usable, and is the right one (i.e., we didn't fallback # to a different OpenGL implementation due to missing symbols). if platform.system() != 'Windows' and which('glxinfo'): glxinfo = subprocess.Popen(['glxinfo'], stdout=subprocess.PIPE) stdout, stderr = glxinfo.communicate() if glxinfo.returncode: skip() # Search for the GL_RENDERER string gl_renderer_header = 'OpenGL renderer string: ' gl_renderer = '' for line in stdout.split('\n'): if line.startswith(gl_renderer_header): gl_renderer = line[len(gl_renderer_header):] if line.startswith('direct rendering: No'): sys.stderr.write('Indirect rendering.\n') skip() # and match it against the regular expression specified in the command # line. if not re.search(options.gl_renderer_re, gl_renderer): sys.stderr.write("GL_RENDERER mismatch: %r !~ /%s/\n" % (gl_renderer, options.gl_renderer_re)) skip() # Run glretrace retracer = retracediff.Retracer(options.retrace, args) if options.compare_prefix: refImages = {} callNos = [] images = snapdiff.find_images(options.compare_prefix) images.sort() for image in images: imageName, ext = os.path.splitext(image) try: callNo = int(imageName) except ValueError: continue refImages[callNo] = options.compare_prefix + image callNos.append(callNo) run = retracer.snapshot(','.join(map(str, callNos))) while True: srcImage, callNo = run.nextSnapshot() if srcImage is None: break refImage = refImages[callNo] # Compare the two images comparer = snapdiff.Comparer(refImage, srcImage) precision = comparer.precision() mismatch = precision < options.precision_threshold if mismatch: bad() run.process.wait() if run.process.returncode: skip() else: returncode = retracer.retrace('-b') if returncode: bad() # TODO: allow more criterias here, such as, performance threshold # Success good() # Invoke main program, aborting the bisection on Ctrl+C or any uncaught Python # exception. if __name__ == '__main__': try: main() except SystemExit: raise except KeyboardInterrupt: abort() except: traceback.print_exc() abort() tmpNnpnZF/scripts/highlight.py0000664000175000017500000001425112543167424015777 0ustar chrischris######################################################################### # # Copyright 2011-2012 Jose Fonseca # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ import platform import subprocess import sys class PlainHighlighter: '''Plain highlighter.''' black = None red = None green = None yellow = None blue = None magenta = None cyan = None white = None def __init__(self, stream = sys.stdout): self.stream = stream def write(self, text): self.stream.write(text) def flush(self): self.stream.flush() def normal(self): pass def color(self, color): pass def bold(self, enable = True): pass def strike(self): pass def italic(self): pass class AnsiHighlighter(PlainHighlighter): '''Highlighter for plain-text files which outputs ANSI escape codes. See http://en.wikipedia.org/wiki/ANSI_escape_code for more information concerning ANSI escape codes. ''' _csi = '\33[' _normal = '0m' _italic = '3m' black = 0 red = 1 green = 2 yellow = 3 blue = 4 magenta = 5 cyan = 6 white = 7 def __init__(self, stream = sys.stdout): PlainHighlighter.__init__(self, stream) def _escape(self, code): self.stream.write(self._csi + code) def normal(self): self._escape(self._normal) def color(self, color): self._escape(str(30 + color) + 'm') def bold(self, enable = True): if enable: self._escape('1m') else: self._escape('21m') def strike(self): self._escape('9m') def italic(self): self._escape(self._italic) class WindowsConsoleHighlighter(PlainHighlighter): '''Highlighter for the Windows Console. See http://code.activestate.com/recipes/496901/ for more information. ''' INVALID_HANDLE_VALUE = -1 STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE = -11 STD_ERROR_HANDLE = -12 FOREGROUND_BLUE = 0x01 FOREGROUND_GREEN = 0x02 FOREGROUND_RED = 0x04 FOREGROUND_INTENSITY = 0x08 BACKGROUND_BLUE = 0x10 BACKGROUND_GREEN = 0x20 BACKGROUND_RED = 0x40 BACKGROUND_INTENSITY = 0x80 COMMON_LVB_LEADING_BYTE = 0x0100 COMMON_LVB_TRAILING_BYTE = 0x0200 COMMON_LVB_GRID_HORIZONTAL = 0x0400 COMMON_LVB_GRID_LVERTICAL = 0x0800 COMMON_LVB_GRID_RVERTICAL = 0x1000 COMMON_LVB_REVERSE_VIDEO = 0x4000 COMMON_LVB_UNDERSCORE = 0x8000 _normal = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED _italic = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED black = 0 red = FOREGROUND_RED green = FOREGROUND_GREEN blue = FOREGROUND_BLUE white = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED def __init__(self, stream = sys.stdout): PlainHighlighter.__init__(self, stream) if stream is sys.stdin: nStdHandle = self.STD_INPUT_HANDLE elif stream is sys.stdout: nStdHandle = self.STD_OUTPUT_HANDLE elif stream is sys.stderr: nStdHandle = self.STD_ERROR_HANDLE else: nStdHandle = None if nStdHandle is not None: import ctypes self._handle = ctypes.windll.kernel32.GetStdHandle(nStdHandle) else: self._handle = self.INVALID_HANDLE_VALUE self._attribute = self.white def _setAttribute(self, attr): if self._handle != self.INVALID_HANDLE_VALUE: import ctypes ctypes.windll.kernel32.SetConsoleTextAttribute(self._handle, attr) self._attribute = attr def normal(self): self._setAttribute(self._normal) def color(self, color): intensity = self._attribute & self.FOREGROUND_INTENSITY self._setAttribute(color | intensity) def bold(self, enable = True): if enable: attribute = self._attribute | self.FOREGROUND_INTENSITY else: attribute = self._attribute & ~self.FOREGROUND_INTENSITY self._setAttribute(attribute) def italic(self): pass if platform.system() == 'Windows': ColorHighlighter = WindowsConsoleHighlighter else: ColorHighlighter = AnsiHighlighter def AutoHighlighter(stream = sys.stdout): if stream.isatty(): return ColorHighlighter(stream) else: return PlainHighlighter(stream) class _LessHighlighter(AnsiHighlighter): def __init__(self, less): AnsiHighlighter.__init__(self, less.stdin) self.less = less def __del__(self): self.less.stdin.close() self.less.wait() def LessHighlighter(): if sys.stdout.isatty(): try: less = subprocess.Popen( args = ['less', '-FRXn'], stdin = subprocess.PIPE ) except OSError: return ColorHighlighter() else: return _LessHighlighter(less) return PlainHighlighter(sys.stdout) tmpNnpnZF/scripts/convert.py0000775000175000017500000002041112543167424015506 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2012 VMware Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the 'Software'), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Convert traces to/from PIX. ''' import optparse import os.path import subprocess import platform import sys def callProcess(cmd): if options.verbose: sys.stderr.write(' '.join(cmd) + '\n') ret = subprocess.call(cmd) if ret: exeName = os.path.basename(cmd[0]) sys.stderr.write('error: %s failed with exit code %u\n' % (exeName, ret)) sys.exit(ret) return ret def verifyTrace(outTrace): if os.path.exists(outTrace): sys.stderr.write('info: %s written\n' % outTrace) if options.verify: callProcess([options.retrace, os.path.abspath(outTrace)]) else: sys.stderr.write('error: %s not written\n' % outTrace) sys.exit(1) def getPixExe(): try: programFiles = os.environ['ProgramFiles(x86)'] except KeyError: programFiles = os.environ['ProgramFiles'] try: dxsdkDir = os.environ['DXSDK_DIR'] except KeyError: dxsdkDir = os.path.join(programFiles, "Microsoft DirectX SDL (June 2010)") pixExe = os.path.join(dxsdkDir, "Utilities", "bin", 'x86', 'PIXwin.exe') return pixExe def convertToPix(inTrace, outPixrun): pixExe = getPixExe() pixExp = os.path.join(os.path.dirname(__file__), 'apitrace.PIXExp') # http://social.msdn.microsoft.com/Forums/sv/devdocs/thread/15addc0c-036d-413a-854a-35637ccbb834 # http://src.chromium.org/svn/trunk/o3d/tests/test_driver.py cmd = [ getPixExe(), pixExp, '-start', '-runfile', os.path.abspath(outPixrun), '-targetpath', os.path.abspath(options.retrace), #'-targetstartfolder', ..., '-targetargs', os.path.abspath(inTrace), ] callProcess(cmd) if os.path.exists(outPixrun): sys.stderr.write('info: %s written\n' % outPixrun) if options.verify: subprocess.call([pixExe, os.path.abspath(outPixrun)]) else: sys.stderr.write('error: %s not written\n' % outPixrun) sys.exit(1) def detectApiFromCsv(inCsv): import csv csvReader = csv.reader(open(inCsv, 'rt'), ) for row in csvReader: print row event = row[2] print event if event.startswith("Direct3DCreate9"): return "d3d9" if event.startswith("CreateDXGIFactory"): return "dxgi" if event.startswith("D3D10CreateDevice"): return "d3d10" if event.startswith("D3D11CreateDevice"): return "d3d11" assert False def convertFromPix(inPix, outTrace): pixExe = getPixExe() api = options.api if True: # Use -exporttocsv option to detect which API to use cmd = [ pixExe, inPix, '-exporttocsv', ] # XXX: output filename is ignored inPixDir, inPixFileName = os.path.split(inPix) inPixName, inPixExt = os.path.splitext(inPixFileName) outCsv = os.path.join(inPixDir, inPixName + '.csv') if os.path.exists(outCsv): os.remove(outCsv) callProcess(cmd) if os.path.isfile(outCsv): api = detectApiFromCsv(outCsv) cmd = [ options.apitrace, 'trace', '-a', api, '-o', outTrace, pixExe, inPix, ] # XXX: Autodetect somehow if not options.single_frame: # Full capture cmd += ['-playstandalone'] else: # Single-frame capture cmd += ['-autorenderto', 'nul:'] callProcess(cmd) verifyTrace(outTrace) def getDxcapExe(): winDir = os.environ['windir'] if 'ProgramFiles(x86)' in os.environ: sysSubDir = 'SysWOW64' else: sysSubDir = 'System32' dxcapExe = os.path.join(winDir, sysSubDir, 'dxcap.exe') return dxcapExe def convertToDxcap(inTrace, outDxcaprun): # https://msdn.microsoft.com/en-us/library/vstudio/dn774939.aspx dxcapExe = getDxcapExe() cmd = [ getDxcapExe(), '-rawmode', '-file', os.path.abspath(outDxcaprun), '-c', options.retrace, '-b', os.path.abspath(inTrace), ] callProcess(cmd) if os.path.exists(outDxcaprun): sys.stderr.write('info: %s written\n' % outDxcaprun) if options.verify: callProcess([dxcapExe, '-p', os.path.abspath(outDxcaprun)]) else: sys.stderr.write('error: %s not written\n' % outDxcaprun) sys.exit(1) def convertFromDxcap(inDxcap, outTrace): dxcapExe = getDxcapExe() cmd = [ options.apitrace, 'trace', '-a', options.api, '-o', outTrace, '--', dxcapExe, '-rawmode', '-p', inDxcap, ] callProcess(cmd) verifyTrace(outTrace) def main(): global options # Parse command line options optparser = optparse.OptionParser( usage='\n\t%prog [options] ...', version='%%prog') optparser.add_option( '--apitrace', metavar='PROGRAM', type='string', dest='apitrace', default='apitrace.exe', help='path to apitrace command [default: %default]') optparser.add_option( '-a', '--api', metavar='API', type='string', dest='api', default='dxgi', help='api [default: %default]') optparser.add_option( '-r', '--retrace', metavar='PROGRAM', type='string', dest='retrace', default='d3dretrace.exe', help='path to retrace command [default: %default]') optparser.add_option( '-v', '--verbose', action='store_true', dest='verbose', default=False, help='verbose output') optparser.add_option( '-o', '--output', metavar='FILE', type="string", dest="output", help="output file [default: stdout]") optparser.add_option( '--single-frame', action='store_true', dest='single_frame', default=False, help='single-frame PIXRun capture') optparser.add_option( '--verify', action='store_true', dest='verify', default=False, help='verify output by replaying it') (options, args) = optparser.parse_args(sys.argv[1:]) if not args: optparser.error("incorrect number of arguments") for inFile in args: name, inExt = os.path.splitext(os.path.basename(inFile)) if inExt.lower() == '.trace': convert = convertToDxcap outExt = '.vsglog' if options.output: _, outExt = os.path.splitext(options.output) if outExt.lower() == '.pixrun': convert = convertToPix elif inExt.lower() == '.vsglog': convert = convertFromDxcap outExt = '.trace' elif inExt.lower() == '.pixrun': convert = convertFromPix outExt = '.trace' else: optparser.error("unexpected file extensions `%s`" % inExt) if options.output: outFile = options.output else: outFile = name + outExt if os.path.exists(outFile): os.remove(outFile) convert(inFile, outFile) if __name__ == '__main__': main() tmpNnpnZF/scripts/snapdiff.py0000775000175000017500000002144112543167424015624 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # Copyright 2008-2009 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Snapshot (image) comparison script. ''' import sys import os.path import optparse import math import operator from PIL import Image from PIL import ImageChops from PIL import ImageEnhance from PIL import ImageFilter thumbSize = 320 gaussian_kernel = ImageFilter.Kernel((3, 3), [1, 2, 1, 2, 4, 2, 1, 2, 1], 16) class Comparer: '''Image comparer.''' def __init__(self, ref_image, src_image, alpha = False): if isinstance(ref_image, basestring): self.ref_im = Image.open(ref_image) else: self.ref_im = ref_image if isinstance(src_image, basestring): self.src_im = Image.open(src_image) else: self.src_im = src_image # Ignore if not alpha: self.ref_im = self.ref_im.convert('RGB') self.src_im = self.src_im.convert('RGB') self.diff = ImageChops.difference(self.src_im, self.ref_im) def size_mismatch(self): return self.ref_im.size != self.src_im.size def write_diff(self, diff_image, fuzz = 0.05): if self.size_mismatch(): return # make a difference image similar to ImageMagick's compare utility mask = ImageEnhance.Brightness(self.diff).enhance(1.0/fuzz) mask = mask.convert('L') lowlight = Image.new('RGB', self.src_im.size, (0xff, 0xff, 0xff)) highlight = Image.new('RGB', self.src_im.size, (0xf1, 0x00, 0x1e)) diff_im = Image.composite(highlight, lowlight, mask) diff_im = Image.blend(self.src_im, diff_im, 0xcc/255.0) diff_im.save(diff_image) def precision(self, filter=False): if self.size_mismatch(): return 0.0 diff = self.diff if filter: diff = diff.filter(gaussian_kernel) # See also http://effbot.org/zone/pil-comparing-images.htm h = diff.histogram() square_error = 0 for i in range(1, 256): square_error += sum(h[i : 3*256: 256])*i*i rel_error = float(square_error*2 + 1) / float(self.diff.size[0]*self.diff.size[1]*3*255*255*2) bits = -math.log(rel_error)/math.log(2.0) return bits def ae(self, fuzz = 0.05): # Compute absolute error if self.size_mismatch(): return sys.maxint # TODO: this is approximate due to the grayscale conversion h = self.diff.convert('L').histogram() ae = sum(h[int(255 * fuzz) + 1 : 256]) return ae def surface(html, image): if True: name, ext = os.path.splitext(image) thumb = name + '.thumb' + ext if os.path.exists(image) \ and (not os.path.exists(thumb) \ or os.path.getmtime(thumb) < os.path.getmtime(image)): im = Image.open(image) imageWidth, imageHeight = im.size if imageWidth <= thumbSize and imageHeight <= thumbSize: if imageWidth >= imageHeight: imageHeight = imageHeight*thumbSize/imageWidth imageWidth = thumbSize else: imageWidth = imageWidth*thumbSize/imageHeight imageHeight = thumbSize html.write(' \n' % (image, imageWidth, imageHeight)) return im.thumbnail((thumbSize, thumbSize)) im.save(thumb) else: thumb = image html.write(' \n' % (image, thumb)) def is_image(path): name = os.path.basename(path) name, ext1 = os.path.splitext(name) name, ext2 = os.path.splitext(name) return ext1 in ('.png', '.bmp') and ext2 not in ('.diff', '.thumb') def find_images(prefix): if os.path.isdir(prefix): prefix_dir = prefix else: prefix_dir = os.path.dirname(prefix) images = [] for dirname, dirnames, filenames in os.walk(prefix_dir, followlinks=True): for filename in filenames: filepath = os.path.join(dirname, filename) if filepath.startswith(prefix) and is_image(filepath): images.append(filepath[len(prefix):]) return images def main(): global options optparser = optparse.OptionParser( usage="\n\t%prog [options] ") optparser.add_option( '-v', '--verbose', action="store_true", dest="verbose", default=False, help="verbose output") optparser.add_option( '-o', '--output', metavar='FILE', type="string", dest="output", default='index.html', help="output filename [default: %default]") optparser.add_option( '-f', '--fuzz', type="float", dest="fuzz", default=0.05, help="fuzz ratio [default: %default]") optparser.add_option( '-a', '--alpha', action="store_true", dest="alpha", default=False, help="take alpha channel in consideration") optparser.add_option( '--overwrite', action="store_true", dest="overwrite", default=False, help="overwrite images") optparser.add_option( '--show-all', action="store_true", dest="show_all", default=False, help="show all images, including similar ones") (options, args) = optparser.parse_args(sys.argv[1:]) if len(args) != 2: optparser.error('incorrect number of arguments') ref_prefix = args[0] src_prefix = args[1] ref_images = find_images(ref_prefix) src_images = find_images(src_prefix) images = list(set(ref_images).intersection(set(src_images))) images.sort() if options.output: html = open(options.output, 'wt') else: html = sys.stdout html.write('\n') html.write(' \n') html.write(' \n') html.write(' \n' % (ref_prefix, src_prefix)) failures = 0 for image in images: ref_image = ref_prefix + image src_image = src_prefix + image root, ext = os.path.splitext(src_image) delta_image = "%s.diff.png" % (root, ) if os.path.exists(ref_image) and os.path.exists(src_image): if options.verbose: sys.stdout.write('Comparing %s and %s ...' % (ref_image, src_image)) comparer = Comparer(ref_image, src_image, options.alpha) match = comparer.ae(fuzz=options.fuzz) == 0 if match: result = 'MATCH' bgcolor = '#20ff20' else: result = 'MISMATCH' failures += 1 bgcolor = '#ff2020' if options.verbose: sys.stdout.write(' %s\n' % (result,)) html.write(' \n') html.write(' \n' % (bgcolor, ref_image, image)) if not match or options.show_all: if options.overwrite \ or not os.path.exists(delta_image) \ or (os.path.getmtime(delta_image) < os.path.getmtime(ref_image) \ and os.path.getmtime(delta_image) < os.path.getmtime(src_image)): comparer.write_diff(delta_image, fuzz=options.fuzz) surface(html, ref_image) surface(html, src_image) surface(html, delta_image) html.write(' \n') html.flush() html.write('
File%s%sΔ
%s
\n') html.write(' \n') html.write('\n') if failures: sys.exit(1) if __name__ == '__main__': main() tmpNnpnZF/scripts/profileshader.py0000775000175000017500000001035612543167424016664 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2012-2013 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ import optparse import sys def process(stream, groupField): times = {} # Read header describing fields header = stream.readline() assert header.startswith('#') fields = header.rstrip('\r\n').split(' ')[1:] columns = {} for column in range(len(fields)): columns[fields[column]] = column callCol = columns['call'] callIdCol = columns['no'] gpuDuraCol = columns['gpu_dura'] programCol = columns['program'] funcNameCol = columns['name'] groupCol = columns[groupField] maxGroupLen = 0 for line in stream: fields = line.rstrip('\r\n').split(' ') if line.startswith('#'): continue if fields[callCol] == 'call': callId = long(fields[callIdCol]) duration = long(fields[gpuDuraCol]) group = fields[groupCol] maxGroupLen = max(maxGroupLen, len(group)) if times.has_key(group): times[group]['draws'] += 1 times[group]['duration'] += duration if duration > times[group]['longestDuration']: times[group]['longest'] = callId times[group]['longestDuration'] = duration else: times[group] = {'draws': 1, 'duration': duration, 'longest': callId, 'longestDuration': duration} times = sorted(times.items(), key=lambda x: x[1]['duration'], reverse=True) if groupField == 'program': groupTitle = 'Shader[id]' else: groupTitle = groupField maxGroupLen = max(maxGroupLen, len(groupTitle)) groupTitle = groupField.center(maxGroupLen) groupLine = '-' * maxGroupLen print '+-%s-+--------------+--------------------+--------------+-------------+' % groupLine print '| %s | Draws [#] | Duration [ns] v | Per Call[ns] | Longest[id] |' % groupTitle print '+-%s-+--------------+--------------------+--------------+-------------+' % groupLine for group in times: id = str(group[0]).rjust(maxGroupLen) draw = str(group[1]['draws']).rjust(12) dura = str(group[1]['duration']).rjust(18) perCall = str(group[1]['duration'] / group[1]['draws']).rjust(12) longest = str(group[1]['longest']).rjust(11) print "| %s | %s | %s | %s | %s |" % (id, draw, dura, perCall, longest) print '+-%s-+--------------+--------------------+--------------+-------------+' % groupLine def main(): # Parse command line options optparser = optparse.OptionParser( usage='\n\t%prog [options] ', version='%%prog') optparser.add_option( '-g', '--group', metavar='FIELD', type="string", dest="group", default='program', help="group by specified field [default: %default]") (options, args) = optparser.parse_args(sys.argv[1:]) if len(args): for arg in args: process(open(arg, 'rt'), options.group) else: process(sys.stdin, options.group) if __name__ == '__main__': main() tmpNnpnZF/.gitignore0000664000175000017500000000053712543167424013761 0ustar chrischris.*.sw? *~ *.7z *.a *.bmp *.bz2 *.cbp *.cmake *.dll *.dmg *.dylib *.exe *.exp *.framework *.gz *.ilk *.json *.lib *.moc* *.o *.obj *.pdb *.png *.pnm *.pyc *.pyo *.so *.trace *.zip _CPack_Packages CMakeCache.txt CMakeFiles CMakeLists.txt.user Makefile apitrace build dxsdk eglretrace glretrace install_manifest.txt qapitrace qubjson_test traces Testing tmpNnpnZF/.lvimrc0000664000175000017500000000002112543167424013252 0ustar chrischrisset sw=4 ts=8 et tmpNnpnZF/retrace/0000775000175000017500000000000012543167424013411 5ustar chrischristmpNnpnZF/retrace/d3dretrace_dxgi.hpp0000664000175000017500000000457112543167424017164 0ustar chrischris/************************************************************************** * * Copyright 2012 VMware Inc * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include "dxgiint.h" #include "retrace.hpp" #include "d3dretrace.hpp" /* * This module implements the IDXGIFactoryDWM and IDXGISwapChainDWM * undocumented interfaces used by DWM, in terms of the standard IDXGIFactory * and IDXGISwapChain interfaces, just for sake of d3dretrace. Retracing on * top of the undocumented interfaces works, but it may interfere with running * DWM and causes corruption of the desktop upon exit. */ namespace d3dretrace { static inline void createWindowForSwapChain(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { UINT Width = pSwapChainDesc->BufferDesc.Width; UINT Height = pSwapChainDesc->BufferDesc.Height; if (!Width) Width = 1024; if (!Height) Height = 768; if (retrace::forceWindowed) { pSwapChainDesc->Windowed = TRUE; pSwapChainDesc->Flags &= ~DXGI_SWAP_CHAIN_FLAG_NONPREROTATED; } if (pSwapChainDesc->OutputWindow) { pSwapChainDesc->OutputWindow = d3dretrace::createWindow(Width, Height); } } BOOL overrideQueryInterface(IUnknown *pThis, REFIID riid, void **ppvObj, HRESULT *pResult); } /* namespace d3dretrace */ tmpNnpnZF/retrace/d3d8state_images.cpp0000664000175000017500000001624512543167424017255 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "image.hpp" #include "state_writer.hpp" #include "com_ptr.hpp" #include "d3d8imports.hpp" #include "d3dstate.hpp" namespace d3dstate { image::Image * ConvertImage(D3DFORMAT SrcFormat, void *SrcData, INT SrcPitch, UINT Width, UINT Height); static image::Image * getSurfaceImage(IDirect3DDevice8 *pDevice, IDirect3DSurface8 *pSurface) { image::Image *image = NULL; HRESULT hr; if (!pSurface) { return NULL; } D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); assert(SUCCEEDED(hr)); D3DLOCKED_RECT LockedRect; hr = pSurface->LockRect(&LockedRect, NULL, D3DLOCK_READONLY | D3DLOCK_NOSYSLOCK); if (FAILED(hr)) { return NULL; } image = ConvertImage(Desc.Format, LockedRect.pBits, LockedRect.Pitch, Desc.Width, Desc.Height); pSurface->UnlockRect(); return image; } static image::Image * getRenderTargetImage(IDirect3DDevice8 *pDevice, IDirect3DSurface8 *pRenderTarget) { HRESULT hr; if (!pRenderTarget) { return NULL; } D3DSURFACE_DESC Desc; hr = pRenderTarget->GetDesc(&Desc); assert(SUCCEEDED(hr)); com_ptr pStagingSurface; hr = pDevice->CreateImageSurface(Desc.Width, Desc.Height, Desc.Format, &pStagingSurface); if (FAILED(hr)) { return NULL; } hr = pDevice->CopyRects(pRenderTarget, NULL, 0, pStagingSurface, NULL); if (FAILED(hr)) { std::cerr << "warning: GetRenderTargetData failed\n"; return NULL; } return getSurfaceImage(pDevice, pStagingSurface); } image::Image * getRenderTargetImage(IDirect3DDevice8 *pDevice) { HRESULT hr; com_ptr pRenderTarget; hr = pDevice->GetRenderTarget(&pRenderTarget); if (FAILED(hr)) { return NULL; } assert(pRenderTarget); return getRenderTargetImage(pDevice, pRenderTarget); } static image::Image * getTextureImage(IDirect3DDevice8 *pDevice, IDirect3DBaseTexture8 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level) { HRESULT hr; if (!pTexture) { return NULL; } com_ptr pSurface; D3DRESOURCETYPE Type = pTexture->GetType(); switch (Type) { case D3DRTYPE_TEXTURE: assert(FaceType == D3DCUBEMAP_FACE_POSITIVE_X); hr = reinterpret_cast(pTexture)->GetSurfaceLevel(Level, &pSurface); break; case D3DRTYPE_CUBETEXTURE: hr = reinterpret_cast(pTexture)->GetCubeMapSurface(FaceType, Level, &pSurface); break; default: /* TODO: support volume textures */ return NULL; } if (FAILED(hr) || !pSurface) { return NULL; } D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); assert(SUCCEEDED(hr)); if (Desc.Pool != D3DPOOL_DEFAULT || Desc.Usage & D3DUSAGE_DYNAMIC) { // Lockable texture return getSurfaceImage(pDevice, pSurface); } else if (Desc.Usage & D3DUSAGE_RENDERTARGET) { // Rendertarget texture return getRenderTargetImage(pDevice, pSurface); } else { // D3D constraints are such there is not much else that can be done. return NULL; } } void dumpTextures(StateWriter &writer, IDirect3DDevice8 *pDevice) { HRESULT hr; writer.beginMember("textures"); writer.beginObject(); for (DWORD Stage = 0; Stage < 8; ++Stage) { com_ptr pTexture; hr = pDevice->GetTexture(Stage, &pTexture); if (FAILED(hr)) { continue; } if (!pTexture) { continue; } D3DRESOURCETYPE Type = pTexture->GetType(); DWORD NumFaces = Type == D3DRTYPE_CUBETEXTURE ? 6 : 1; DWORD NumLevels = pTexture->GetLevelCount(); for (DWORD Face = 0; Face < NumFaces; ++Face) { for (DWORD Level = 0; Level < NumLevels; ++Level) { image::Image *image; image = getTextureImage(pDevice, pTexture, static_cast(Face), Level); if (image) { char label[128]; if (Type == D3DRTYPE_CUBETEXTURE) { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_FACE_%lu_LEVEL_%lu", Stage, Face, Level); } else { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_LEVEL_%lu", Stage, Level); } writer.beginMember(label); writer.writeImage(image); writer.endMember(); // PS_RESOURCE_* delete image; } } } } writer.endObject(); writer.endMember(); // textures } void dumpFramebuffer(StateWriter &writer, IDirect3DDevice8 *pDevice) { HRESULT hr; writer.beginMember("framebuffer"); writer.beginObject(); com_ptr pRenderTarget; hr = pDevice->GetRenderTarget(&pRenderTarget); if (SUCCEEDED(hr) && pRenderTarget) { image::Image *image; image = getRenderTargetImage(pDevice, pRenderTarget); if (image) { writer.beginMember("RENDER_TARGET_0"); writer.writeImage(image); writer.endMember(); // RENDER_TARGET_* delete image; } } com_ptr pDepthStencil; hr = pDevice->GetDepthStencilSurface(&pDepthStencil); if (SUCCEEDED(hr) && pDepthStencil) { image::Image *image; image = getSurfaceImage(pDevice, pDepthStencil); if (image) { writer.beginMember("DEPTH_STENCIL"); writer.writeImage(image); writer.endMember(); // RENDER_TARGET_* delete image; } } writer.endObject(); writer.endMember(); // framebuffer } } /* namespace d3dstate */ tmpNnpnZF/retrace/d3d10state_images.cpp0000664000175000017500000004662012543167424017326 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "os.hpp" #include "state_writer.hpp" #include "image.hpp" #include "com_ptr.hpp" #include "d3d10imports.hpp" #include "d3dstate.hpp" #include "dxgistate.hpp" namespace d3dstate { struct ResourceDesc { D3D10_RESOURCE_DIMENSION Type; UINT Width; UINT Height; UINT Depth; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; }; static void getResourceDesc(ID3D10Resource *pResource, ResourceDesc *pDesc) { pDesc->Type = D3D10_RESOURCE_DIMENSION_UNKNOWN; pDesc->Width = 0; pDesc->Height = 1; pDesc->Depth = 1; pDesc->MipLevels = 1; pDesc->ArraySize = 1; pDesc->Format = DXGI_FORMAT_UNKNOWN; pDesc->SampleDesc.Count = 1; pDesc->SampleDesc.Quality = 0; pDesc->Usage = D3D10_USAGE_DEFAULT; pDesc->BindFlags = 0; pDesc->CPUAccessFlags = 0; pDesc->MiscFlags = 0; pResource->GetType(&pDesc->Type); switch (pDesc->Type) { case D3D10_RESOURCE_DIMENSION_BUFFER: { D3D10_BUFFER_DESC Desc; static_cast(pResource)->GetDesc(&Desc); pDesc->Width = Desc.ByteWidth; pDesc->Usage = Desc.Usage; pDesc->BindFlags = Desc.BindFlags; pDesc->CPUAccessFlags = Desc.CPUAccessFlags; pDesc->MiscFlags = Desc.MiscFlags; } break; case D3D10_RESOURCE_DIMENSION_TEXTURE1D: { D3D10_TEXTURE1D_DESC Desc; static_cast(pResource)->GetDesc(&Desc); pDesc->Width = Desc.Width; pDesc->MipLevels = Desc.MipLevels; pDesc->ArraySize = Desc.ArraySize; pDesc->Format = Desc.Format; pDesc->Usage = Desc.Usage; pDesc->BindFlags = Desc.BindFlags; pDesc->CPUAccessFlags = Desc.CPUAccessFlags; pDesc->MiscFlags = Desc.MiscFlags; } break; case D3D10_RESOURCE_DIMENSION_TEXTURE2D: { D3D10_TEXTURE2D_DESC Desc; static_cast(pResource)->GetDesc(&Desc); pDesc->Width = Desc.Width; pDesc->Height = Desc.Height; pDesc->MipLevels = Desc.MipLevels; pDesc->ArraySize = Desc.ArraySize; pDesc->Format = Desc.Format; pDesc->SampleDesc = Desc.SampleDesc; pDesc->Usage = Desc.Usage; pDesc->BindFlags = Desc.BindFlags; pDesc->CPUAccessFlags = Desc.CPUAccessFlags; pDesc->MiscFlags = Desc.MiscFlags; } break; case D3D10_RESOURCE_DIMENSION_TEXTURE3D: { D3D10_TEXTURE3D_DESC Desc; static_cast(pResource)->GetDesc(&Desc); pDesc->Width = Desc.Width; pDesc->Height = Desc.Height; pDesc->Depth = Desc.Depth; pDesc->MipLevels = Desc.MipLevels; pDesc->Format = Desc.Format; pDesc->Usage = Desc.Usage; pDesc->BindFlags = Desc.BindFlags; pDesc->CPUAccessFlags = Desc.CPUAccessFlags; pDesc->MiscFlags = Desc.MiscFlags; } break; default: assert(0); break; } } static HRESULT createResource(ID3D10Device *pDevice, const ResourceDesc *pDesc, ID3D10Resource **ppResource) { switch (pDesc->Type) { case D3D10_RESOURCE_DIMENSION_BUFFER: { D3D10_BUFFER_DESC Desc; Desc.ByteWidth = pDesc->Width; Desc.Usage = pDesc->Usage; Desc.BindFlags = pDesc->BindFlags; Desc.CPUAccessFlags = pDesc->CPUAccessFlags; Desc.MiscFlags = pDesc->MiscFlags; return pDevice->CreateBuffer(&Desc, NULL, reinterpret_cast(ppResource)); } case D3D10_RESOURCE_DIMENSION_TEXTURE1D: { D3D10_TEXTURE1D_DESC Desc; Desc.Width = pDesc->Width; Desc.MipLevels = pDesc->MipLevels; Desc.ArraySize = pDesc->ArraySize; Desc.Format = pDesc->Format; Desc.Usage = pDesc->Usage; Desc.BindFlags = pDesc->BindFlags; Desc.CPUAccessFlags = pDesc->CPUAccessFlags; Desc.MiscFlags = pDesc->MiscFlags; return pDevice->CreateTexture1D(&Desc, NULL, reinterpret_cast(ppResource)); } case D3D10_RESOURCE_DIMENSION_TEXTURE2D: { D3D10_TEXTURE2D_DESC Desc; Desc.Width = pDesc->Width; Desc.Height = pDesc->Height; Desc.MipLevels = pDesc->MipLevels; Desc.ArraySize = pDesc->ArraySize; Desc.Format = pDesc->Format; Desc.SampleDesc = pDesc->SampleDesc; Desc.Usage = pDesc->Usage; Desc.BindFlags = pDesc->BindFlags; Desc.CPUAccessFlags = pDesc->CPUAccessFlags; Desc.MiscFlags = pDesc->MiscFlags; return pDevice->CreateTexture2D(&Desc, NULL, reinterpret_cast(ppResource)); } case D3D10_RESOURCE_DIMENSION_TEXTURE3D: { D3D10_TEXTURE3D_DESC Desc; Desc.Width = pDesc->Width; Desc.Height = pDesc->Height; Desc.Depth = pDesc->Depth; Desc.MipLevels = pDesc->MipLevels; Desc.Format = pDesc->Format; Desc.Usage = pDesc->Usage; Desc.BindFlags = pDesc->BindFlags; Desc.CPUAccessFlags = pDesc->CPUAccessFlags; Desc.MiscFlags = pDesc->MiscFlags; return pDevice->CreateTexture3D(&Desc, NULL, reinterpret_cast(ppResource)); } default: assert(0); *ppResource = NULL; return E_NOTIMPL; } } static HRESULT mapResource(ID3D10Resource *pResource, UINT SubResource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE3D *pMappedSubResource) { D3D10_RESOURCE_DIMENSION Type = D3D10_RESOURCE_DIMENSION_UNKNOWN; pResource->GetType(&Type); switch (Type) { case D3D10_RESOURCE_DIMENSION_BUFFER: assert(SubResource == 0); return static_cast(pResource)->Map(MapType, MapFlags, &pMappedSubResource->pData); case D3D10_RESOURCE_DIMENSION_TEXTURE1D: return static_cast(pResource)->Map(SubResource, MapType, MapFlags, &pMappedSubResource->pData); case D3D10_RESOURCE_DIMENSION_TEXTURE2D: return static_cast(pResource)->Map(SubResource, MapType, MapFlags, reinterpret_cast(pMappedSubResource)); case D3D10_RESOURCE_DIMENSION_TEXTURE3D: return static_cast(pResource)->Map(SubResource, MapType, MapFlags, pMappedSubResource); default: assert(0); return E_NOTIMPL; } } static void unmapResource(ID3D10Resource *pResource, UINT SubResource) { D3D10_RESOURCE_DIMENSION Type = D3D10_RESOURCE_DIMENSION_UNKNOWN; pResource->GetType(&Type); switch (Type) { case D3D10_RESOURCE_DIMENSION_BUFFER: assert(SubResource == 0); static_cast(pResource)->Unmap(); break; case D3D10_RESOURCE_DIMENSION_TEXTURE1D: static_cast(pResource)->Unmap(SubResource); break; case D3D10_RESOURCE_DIMENSION_TEXTURE2D: static_cast(pResource)->Unmap(SubResource); break; case D3D10_RESOURCE_DIMENSION_TEXTURE3D: static_cast(pResource)->Unmap(SubResource); break; default: assert(0); } } image::Image * getSubResourceImage(ID3D10Device *pDevice, ID3D10Resource *pResource, DXGI_FORMAT Format, UINT ArraySlice, UINT MipSlice) { image::Image *image = NULL; UINT SubResource; D3D10_MAPPED_TEXTURE3D MappedSubResource; HRESULT hr; if (!pResource) { return NULL; } ResourceDesc Desc; getResourceDesc(pResource, &Desc); assert(ArraySlice < Desc.ArraySize); assert(MipSlice < Desc.MipLevels); assert(Desc.SampleDesc.Count > 0); SubResource = ArraySlice*Desc.MipLevels + MipSlice; /* * Resolve the subresource. */ ResourceDesc ResolvedDesc = Desc; ResolvedDesc.Width = std::max(Desc.Width >> MipSlice, 1U); ResolvedDesc.Height = std::max(Desc.Height >> MipSlice, 1U); ResolvedDesc.Depth = std::max(Desc.Depth >> MipSlice, 1U); ResolvedDesc.ArraySize = 1; ResolvedDesc.MipLevels = 1; ResolvedDesc.SampleDesc.Count = 1; ResolvedDesc.SampleDesc.Quality = 0; ResolvedDesc.Usage = D3D10_USAGE_DEFAULT; ResolvedDesc.BindFlags = 0; ResolvedDesc.CPUAccessFlags = 0; ResolvedDesc.MiscFlags = 0; com_ptr pResolvedResource; if (Desc.SampleDesc.Count == 1) { pResolvedResource = pResource; } else { hr = createResource(pDevice, &ResolvedDesc, &pResolvedResource); if (FAILED(hr)) { return NULL; } pDevice->ResolveSubresource(pResolvedResource, 0, pResource, SubResource, Format); SubResource = 0; } /* * Stage the subresource. */ ResourceDesc StagingDesc = ResolvedDesc; StagingDesc.Usage = D3D10_USAGE_STAGING; StagingDesc.CPUAccessFlags = D3D10_CPU_ACCESS_READ; com_ptr pStagingResource; hr = createResource(pDevice, &StagingDesc, &pStagingResource); if (FAILED(hr)) { return NULL; } pDevice->CopySubresourceRegion(pStagingResource, 0, 0, 0, 0, pResolvedResource, SubResource, NULL); /* * Map and read the subresource. */ hr = mapResource(pStagingResource, 0, D3D10_MAP_READ, 0, &MappedSubResource); if (FAILED(hr)) { goto no_map; } image = ConvertImage(Format, MappedSubResource.pData, MappedSubResource.RowPitch, StagingDesc.Width, StagingDesc.Height); unmapResource(pStagingResource, 0); no_map: return image; } static void dumpShaderResourceViewImage(StateWriter &writer, ID3D10Device *pDevice, ID3D10ShaderResourceView *pShaderResourceView, const char *shader, UINT stage) { if (!pShaderResourceView) { return; } com_ptr pResource; pShaderResourceView->GetResource(&pResource); assert(pResource); D3D10_SHADER_RESOURCE_VIEW_DESC Desc; pShaderResourceView->GetDesc(&Desc); UINT MipSlice = 0; UINT FirstArraySlice = 0; UINT ArraySize = 1; switch (Desc.ViewDimension) { case D3D10_SRV_DIMENSION_BUFFER: break; case D3D10_SRV_DIMENSION_TEXTURE1D: MipSlice = Desc.Texture1D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURE1DARRAY: MipSlice = Desc.Texture1DArray.MostDetailedMip; FirstArraySlice = Desc.Texture1DArray.FirstArraySlice; ArraySize = Desc.Texture1DArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE2D: MipSlice = Desc.Texture2D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURE2DARRAY: MipSlice = Desc.Texture2DArray.MostDetailedMip; FirstArraySlice = Desc.Texture2DArray.FirstArraySlice; ArraySize = Desc.Texture2DArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE2DMS: break; case D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY: FirstArraySlice = Desc.Texture2DMSArray.FirstArraySlice; ArraySize = Desc.Texture2DMSArray.ArraySize; break; case D3D10_SRV_DIMENSION_TEXTURE3D: MipSlice = Desc.Texture3D.MostDetailedMip; break; case D3D10_SRV_DIMENSION_TEXTURECUBE: MipSlice = Desc.TextureCube.MostDetailedMip; ArraySize = 6; break; case D3D10_SRV_DIMENSION_UNKNOWN: default: assert(0); return; } for (UINT ArraySlice = FirstArraySlice; ArraySlice < FirstArraySlice + ArraySize; ++ArraySlice) { image::Image *image; image = getSubResourceImage(pDevice, pResource, Desc.Format, ArraySlice, MipSlice); if (image) { char label[64]; _snprintf(label, sizeof label, "%s_RESOURCE_%u_ARRAY_%u_LEVEL_%u", shader, stage, ArraySlice, MipSlice); writer.beginMember(label); writer.writeImage(image); writer.endMember(); // *_RESOURCE_* delete image; } } } static image::Image * getRenderTargetViewImage(ID3D10Device *pDevice, ID3D10RenderTargetView *pRenderTargetView) { if (!pRenderTargetView) { return NULL; } com_ptr pResource; pRenderTargetView->GetResource(&pResource); assert(pResource); D3D10_RENDER_TARGET_VIEW_DESC Desc; pRenderTargetView->GetDesc(&Desc); // TODO: Take the slice in consideration UINT MipSlice; switch (Desc.ViewDimension) { case D3D10_RTV_DIMENSION_BUFFER: MipSlice = 0; break; case D3D10_RTV_DIMENSION_TEXTURE1D: MipSlice = Desc.Texture1D.MipSlice; break; case D3D10_RTV_DIMENSION_TEXTURE1DARRAY: MipSlice = Desc.Texture1DArray.MipSlice; break; case D3D10_RTV_DIMENSION_TEXTURE2D: MipSlice = Desc.Texture2D.MipSlice; break; case D3D10_RTV_DIMENSION_TEXTURE2DARRAY: MipSlice = Desc.Texture2DArray.MipSlice; break; case D3D10_RTV_DIMENSION_TEXTURE2DMS: MipSlice = 0; break; case D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY: MipSlice = 0; break; case D3D10_RTV_DIMENSION_TEXTURE3D: MipSlice = Desc.Texture3D.MipSlice; break; case D3D10_RTV_DIMENSION_UNKNOWN: default: assert(0); return NULL; } return getSubResourceImage(pDevice, pResource, Desc.Format, 0, MipSlice); } static image::Image * getDepthStencilViewImage(ID3D10Device *pDevice, ID3D10DepthStencilView *pDepthStencilView) { if (!pDepthStencilView) { return NULL; } com_ptr pResource; pDepthStencilView->GetResource(&pResource); assert(pResource); D3D10_DEPTH_STENCIL_VIEW_DESC Desc; pDepthStencilView->GetDesc(&Desc); // TODO: Take the slice in consideration UINT MipSlice; switch (Desc.ViewDimension) { case D3D10_DSV_DIMENSION_TEXTURE1D: MipSlice = Desc.Texture1D.MipSlice; break; case D3D10_DSV_DIMENSION_TEXTURE1DARRAY: MipSlice = Desc.Texture1DArray.MipSlice; break; case D3D10_DSV_DIMENSION_TEXTURE2D: MipSlice = Desc.Texture2D.MipSlice; break; case D3D10_DSV_DIMENSION_TEXTURE2DARRAY: MipSlice = Desc.Texture2DArray.MipSlice; break; case D3D10_DSV_DIMENSION_TEXTURE2DMS: MipSlice = 0; break; case D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY: MipSlice = 0; break; case D3D10_DSV_DIMENSION_UNKNOWN: default: assert(0); return NULL; } return getSubResourceImage(pDevice, pResource, Desc.Format, 0, MipSlice); } static void dumpStageTextures(StateWriter &writer, ID3D10Device *pDevice, const char *stageName, UINT NumViews, ID3D10ShaderResourceView **ppShaderResourceViews) { for (UINT i = 0; i < NumViews; ++i) { if (!ppShaderResourceViews[i]) { continue; } dumpShaderResourceViewImage(writer, pDevice, ppShaderResourceViews[i], stageName, i); ppShaderResourceViews[i]->Release(); } } void dumpTextures(StateWriter &writer, ID3D10Device *pDevice) { writer.beginMember("textures"); writer.beginObject(); ID3D10ShaderResourceView *pShaderResourceViews[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT]; pDevice->PSGetShaderResources(0, ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); dumpStageTextures(writer, pDevice, "PS", ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); pDevice->VSGetShaderResources(0, ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); dumpStageTextures(writer, pDevice, "VS", ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); pDevice->GSGetShaderResources(0, ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); dumpStageTextures(writer, pDevice, "GS", ARRAYSIZE(pShaderResourceViews), pShaderResourceViews); writer.endObject(); writer.endMember(); // textures } image::Image * getRenderTargetImage(ID3D10Device *pDevice) { com_ptr pRenderTargetView; pDevice->OMGetRenderTargets(1, &pRenderTargetView, NULL); image::Image *image = NULL; if (pRenderTargetView) { image = getRenderTargetViewImage(pDevice, pRenderTargetView); } return image; } void dumpFramebuffer(StateWriter &writer, ID3D10Device *pDevice) { writer.beginMember("framebuffer"); writer.beginObject(); ID3D10RenderTargetView *pRenderTargetViews[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT]; ID3D10DepthStencilView *pDepthStencilView; pDevice->OMGetRenderTargets(ARRAYSIZE(pRenderTargetViews), pRenderTargetViews, &pDepthStencilView); for (UINT i = 0; i < ARRAYSIZE(pRenderTargetViews); ++i) { if (!pRenderTargetViews[i]) { continue; } image::Image *image; image = getRenderTargetViewImage(pDevice, pRenderTargetViews[i]); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); writer.beginMember(label); writer.writeImage(image); writer.endMember(); // RENDER_TARGET_* delete image; } pRenderTargetViews[i]->Release(); } if (pDepthStencilView) { image::Image *image; image = getDepthStencilViewImage(pDevice, pDepthStencilView); if (image) { writer.beginMember("DEPTH_STENCIL"); writer.writeImage(image); writer.endMember(); delete image; } pDepthStencilView->Release(); } writer.endObject(); writer.endMember(); // framebuffer } } /* namespace d3dstate */ tmpNnpnZF/retrace/glstate_images.cpp0000664000175000017500000012602712543167424017115 0ustar chrischris/************************************************************************** * * Copyright 2011-2014 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include "image.hpp" #include "state_writer.hpp" #include "glproc.hpp" #include "glsize.hpp" #include "glstate.hpp" #include "glstate_internal.hpp" #ifdef __linux__ #include #endif #ifdef __APPLE__ #include #ifdef __cplusplus extern "C" { #endif OSStatus CGSGetSurfaceBounds(CGSConnectionID, CGWindowID, CGSSurfaceID, CGRect *); #ifdef __cplusplus } #endif #endif /* __APPLE__ */ namespace glstate { struct ImageDesc { GLint width; GLint height; GLint depth; GLint samples; GLint internalFormat; inline ImageDesc() : width(0), height(0), depth(0), samples(0), internalFormat(GL_NONE) {} inline bool operator == (const ImageDesc &other) const { return width == other.width && height == other.height && depth == other.depth && samples == other.samples && internalFormat == other.internalFormat; } inline bool valid(void) const { return width > 0 && height > 0 && depth > 0; } }; /** * OpenGL ES does not support glGetTexLevelParameteriv, but it is possible to * probe whether a texture has a given size by crafting a dummy glTexSubImage() * call. */ static bool probeTextureLevelSizeOES(GLenum target, GLint level, const GLint size[3]) { flushErrors(); GLenum internalFormat = GL_RGBA; GLenum type = GL_UNSIGNED_BYTE; GLint dummy = 0; switch (target) { case GL_TEXTURE_2D: case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: glTexSubImage2D(target, level, size[0], size[1], 0, 0, internalFormat, type, &dummy); break; case GL_TEXTURE_3D_OES: glTexSubImage3DOES(target, level, size[0], size[1], size[2], 0, 0, 0, internalFormat, type, &dummy); break; default: assert(0); return false; } GLenum error = glGetError(); if (0) { std::cerr << "(" << size[0] << ", " << size[1] << ", " << size[2] << ") = " << enumToString(error) << "\n"; } if (error == GL_NO_ERROR) { return true; } flushErrors(); return false; } /** * Bisect the texture size along an axis. * * It is assumed that the texture exists. */ static GLint bisectTextureLevelSizeOES(GLenum target, GLint level, GLint axis, GLint max) { GLint size[3] = {0, 0, 0}; assert(axis < 3); assert(max >= 0); GLint min = 0; while (true) { GLint test = (min + max) / 2; if (test == min) { return min; } size[axis] = test; if (probeTextureLevelSizeOES(target, level, size)) { min = test; } else { max = test; } } } /** * Special path to obtain texture size on OpenGL ES, that does not rely on * glGetTexLevelParameteriv */ static bool getActiveTextureLevelDescOES(Context &context, GLenum target, GLint level, ImageDesc &desc) { if (target == GL_TEXTURE_1D) { // OpenGL ES does not support 1D textures return false; } const GLint size[3] = {1, 1, 1}; if (!probeTextureLevelSizeOES(target, level, size)) { return false; } // XXX: mere guess desc.internalFormat = GL_RGBA; GLint maxSize = 0; switch (target) { case GL_TEXTURE_2D: glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxSize); desc.width = bisectTextureLevelSizeOES(target, level, 0, maxSize); desc.height = bisectTextureLevelSizeOES(target, level, 1, maxSize); desc.depth = 1; break; case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &maxSize); desc.width = bisectTextureLevelSizeOES(target, level, 0, maxSize); desc.height = desc.width; desc.depth = 1; break; case GL_TEXTURE_3D_OES: glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_OES, &maxSize); desc.width = bisectTextureLevelSizeOES(target, level, 0, maxSize); desc.width = bisectTextureLevelSizeOES(target, level, 1, maxSize); desc.depth = bisectTextureLevelSizeOES(target, level, 2, maxSize); break; default: return false; } if (0) { std::cerr << enumToString(target) << " " << level << " " << desc.width << "x" << desc.height << "x" << desc.depth << "\n"; } return desc.valid(); } static inline bool getActiveTextureLevelDesc(Context &context, GLenum target, GLint level, ImageDesc &desc) { assert(target != GL_TEXTURE_CUBE_MAP); if (context.ES) { return getActiveTextureLevelDescOES(context, target, level, desc); } if (target == GL_TEXTURE_BUFFER) { assert(level == 0); GLint buffer = 0; glGetIntegerv(GL_TEXTURE_BUFFER_DATA_STORE_BINDING, &buffer); if (!buffer) { return false; } // This is the general binding point, not the texture's GLint active_buffer = 0; glGetIntegerv(GL_TEXTURE_BUFFER, &active_buffer); glBindBuffer(GL_TEXTURE_BUFFER, buffer); GLint buffer_size = 0; glGetBufferParameteriv(GL_TEXTURE_BUFFER, GL_BUFFER_SIZE, &buffer_size); glBindBuffer(GL_TEXTURE_BUFFER, active_buffer); glGetIntegerv(GL_TEXTURE_BUFFER_FORMAT_ARB, &desc.internalFormat); const InternalFormatDesc &formatDesc = getInternalFormatDesc(desc.internalFormat); if (formatDesc.type == GL_NONE) { assert(0); return false; } unsigned bits_per_element; unsigned bits_per_pixel; _gl_format_size(formatDesc.format, formatDesc.type, bits_per_element, bits_per_pixel); desc.width = buffer_size * 8 / bits_per_pixel; desc.height = 1; desc.depth = 1; return desc.valid(); } glGetTexLevelParameteriv(target, level, GL_TEXTURE_INTERNAL_FORMAT, &desc.internalFormat); desc.width = 0; glGetTexLevelParameteriv(target, level, GL_TEXTURE_WIDTH, &desc.width); if (target == GL_TEXTURE_BUFFER || target == GL_TEXTURE_1D) { desc.height = 1; desc.depth = 1; } else { desc.height = 0; glGetTexLevelParameteriv(target, level, GL_TEXTURE_HEIGHT, &desc.height); if (target != GL_TEXTURE_3D && target != GL_TEXTURE_2D_ARRAY && target != GL_TEXTURE_2D_MULTISAMPLE_ARRAY && target != GL_TEXTURE_CUBE_MAP_ARRAY) { desc.depth = 1; } else { desc.depth = 0; glGetTexLevelParameteriv(target, level, GL_TEXTURE_DEPTH, &desc.depth); } } glGetTexLevelParameteriv(target, level, GL_TEXTURE_SAMPLES, &desc.samples); return desc.valid(); } const GLenum textureTargets[] = { GL_TEXTURE_2D, GL_TEXTURE_1D, GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_3D, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_BUFFER, }; const unsigned numTextureTargets = ARRAYSIZE(textureTargets); GLenum getTextureBinding(GLenum target) { switch (target) { case GL_TEXTURE_1D: return GL_TEXTURE_BINDING_1D; case GL_TEXTURE_1D_ARRAY: return GL_TEXTURE_BINDING_1D_ARRAY; case GL_TEXTURE_2D: return GL_TEXTURE_BINDING_2D; case GL_TEXTURE_2D_ARRAY: return GL_TEXTURE_BINDING_2D_ARRAY; case GL_TEXTURE_2D_MULTISAMPLE: return GL_TEXTURE_BINDING_2D_MULTISAMPLE; case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: return GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY; case GL_TEXTURE_RECTANGLE: return GL_TEXTURE_BINDING_RECTANGLE; case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: return GL_TEXTURE_BINDING_CUBE_MAP; case GL_TEXTURE_CUBE_MAP_ARRAY: return GL_TEXTURE_BINDING_CUBE_MAP_ARRAY; case GL_TEXTURE_3D: return GL_TEXTURE_BINDING_3D; case GL_TEXTURE_BUFFER: return GL_TEXTURE_BINDING_BUFFER; default: assert(false); return GL_NONE; } } /** * OpenGL ES does not support glGetTexImage. Obtain the pixels by attaching the * texture to a framebuffer. */ static inline void getTexImageOES(GLenum target, GLint level, ImageDesc &desc, GLubyte *pixels) { memset(pixels, 0x80, desc.height * desc.width * 4); GLenum texture_binding = getTextureBinding(target); if (texture_binding == GL_NONE) { return; } GLint texture = 0; glGetIntegerv(texture_binding, &texture); if (!texture) { return; } GLint prev_fbo = 0; GLuint fbo = 0; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prev_fbo); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); GLenum status; switch (target) { case GL_TEXTURE_2D: case GL_TEXTURE_CUBE_MAP_POSITIVE_X: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, level); status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { std::cerr << __FUNCTION__ << ": " << enumToString(status) << "\n"; } glReadPixels(0, 0, desc.width, desc.height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); break; case GL_TEXTURE_3D_OES: for (int i = 0; i < desc.depth; i++) { glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, texture, level, i); glReadPixels(0, 0, desc.width, desc.height, GL_RGBA, GL_UNSIGNED_BYTE, pixels + 4 * i * desc.width * desc.height); } break; } glBindFramebuffer(GL_FRAMEBUFFER, prev_fbo); glDeleteFramebuffers(1, &fbo); } static inline void dumpActiveTextureLevel(StateWriter &writer, Context &context, GLenum target, GLint level, const std::string & label, const char *userLabel) { ImageDesc desc; if (!getActiveTextureLevelDesc(context, target, level, desc)) { return; } const InternalFormatDesc &formatDesc = getInternalFormatDesc(desc.internalFormat); GLenum format; GLenum type; const PixelFormat *pixelFormat = nullptr; if (target == GL_TEXTURE_BUFFER) { pixelFormat = getPixelFormat(desc.internalFormat); if (!pixelFormat) { std::cerr << "warning: unsupported texture buffer internal format " << formatToString(desc.internalFormat) << "\n"; return; } format = GL_RGBA; type = GL_FLOAT; } else { chooseReadBackFormat(formatDesc, format, type); } writer.beginMember(label); if (context.ES && format == GL_DEPTH_COMPONENT) { format = GL_RED; } GLuint channels; image::ChannelType channelType; getImageFormat(format, type, channels, channelType); if (0) { std::cerr << enumToString(desc.internalFormat) << " " << enumToString(format) << " " << enumToString(type) << "\n"; } image::Image *image = new image::Image(desc.width, desc.height*desc.depth, channels, true, channelType); PixelPackState pps(context); if (target == GL_TEXTURE_BUFFER) { assert(desc.height == 1); assert(desc.depth == 1); assert(pixelFormat); assert(format == GL_RGBA); assert(type == GL_FLOAT); assert(image->bytesPerPixel == sizeof(float[4])); GLint buffer = 0; glGetIntegerv(GL_TEXTURE_BUFFER_DATA_STORE_BINDING, &buffer); assert(buffer); BufferMapping bm; const GLvoid *map = bm.map(GL_TEXTURE_BUFFER, buffer); if (map) { pixelFormat->unpackSpan(static_cast(map), reinterpret_cast(image->pixels), image->width); } } else { if (context.ES) { getTexImageOES(target, level, desc, image->pixels); } else { glGetTexImage(target, level, format, type, image->pixels); } } if (userLabel) { image->label = userLabel; } StateWriter::ImageDesc imageDesc; imageDesc.depth = desc.depth; imageDesc.format = formatToString(desc.internalFormat); writer.writeImage(image, imageDesc); delete image; writer.endMember(); // label } static inline void dumpActiveTexture(StateWriter &writer, Context &context, GLenum target, GLuint texture) { char *object_label = getObjectLabel(context, GL_TEXTURE, texture); GLint active_texture = GL_TEXTURE0; glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture); assert(active_texture >= GL_TEXTURE0); GLenum start_subtarget; GLenum stop_subtarget; if (target == GL_TEXTURE_CUBE_MAP) { start_subtarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X; stop_subtarget = start_subtarget + 6; } else { start_subtarget = target; stop_subtarget = start_subtarget + 1; } GLboolean allowMipmaps = target != GL_TEXTURE_RECTANGLE && target != GL_TEXTURE_BUFFER; GLint level = 0; do { ImageDesc desc; for (GLenum subtarget = start_subtarget; subtarget < stop_subtarget; ++subtarget) { std::stringstream label; label << "GL_TEXTURE" << (active_texture - GL_TEXTURE0) << ", " << enumToString(subtarget); if (allowMipmaps) { label << ", level = " << level; } if (!getActiveTextureLevelDesc(context, subtarget, level, desc)) { goto finished; } dumpActiveTextureLevel(writer, context, subtarget, level, label.str(), object_label); } if (!allowMipmaps) { // no mipmaps break; } ++level; } while(true); finished: free(object_label); } void dumpTextures(StateWriter &writer, Context &context) { writer.beginMember("textures"); writer.beginObject(); GLint max_texture_coords = 0; if (!context.core) { glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords); } GLint max_combined_texture_image_units = 0; glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_combined_texture_image_units); /* * At least the Android software GL implementation doesn't return the * proper value for this, but rather returns 0. The GL(ES) specification * mandates a minimum value of 2, so use this as a fall-back value. */ max_combined_texture_image_units = std::max(max_combined_texture_image_units, 2); GLint max_units = std::max(max_combined_texture_image_units, max_texture_coords); GLint active_texture = GL_TEXTURE0; glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture); for (GLint unit = 0; unit < max_units; ++unit) { GLenum texture = GL_TEXTURE0 + unit; glActiveTexture(texture); for (unsigned i = 0; i < numTextureTargets; ++i) { GLenum target = textureTargets[i]; // Whether this fixed-function stage is enabled GLboolean enabled = GL_FALSE; if (unit < max_texture_coords && (target == GL_TEXTURE_1D || target == GL_TEXTURE_2D || target == GL_TEXTURE_3D || target == GL_TEXTURE_CUBE_MAP || target == GL_TEXTURE_RECTANGLE)) { glGetBooleanv(target, &enabled); } // Whether a texture object is bound GLint texture = 0; if (unit < max_combined_texture_image_units) { GLenum binding = getTextureBinding(target); glGetIntegerv(binding, &texture); } if (enabled || texture) { dumpActiveTexture(writer, context, target, texture); } } } glActiveTexture(active_texture); writer.endObject(); writer.endMember(); // textures } bool getDrawableBounds(GLint *width, GLint *height) { #if defined(__linux__) if (_getPublicProcAddress("eglGetCurrentContext")) { EGLContext currentContext = eglGetCurrentContext(); if (currentContext != EGL_NO_CONTEXT) { EGLSurface currentSurface = eglGetCurrentSurface(EGL_DRAW); if (currentSurface == EGL_NO_SURFACE) { return false; } EGLDisplay currentDisplay = eglGetCurrentDisplay(); if (currentDisplay == EGL_NO_DISPLAY) { return false; } if (!eglQuerySurface(currentDisplay, currentSurface, EGL_WIDTH, width) || !eglQuerySurface(currentDisplay, currentSurface, EGL_HEIGHT, height)) { return false; } return true; } } #endif #if defined(_WIN32) HDC hDC = wglGetCurrentDC(); if (!hDC) { return false; } HWND hWnd = WindowFromDC(hDC); RECT rect; if (!GetClientRect(hWnd, &rect)) { return false; } *width = rect.right - rect.left; *height = rect.bottom - rect.top; return true; #elif defined(__APPLE__) CGLContextObj ctx = CGLGetCurrentContext(); if (ctx == NULL) { return false; } CGSConnectionID cid; CGSWindowID wid; CGSSurfaceID sid; if (CGLGetSurface(ctx, &cid, &wid, &sid) != kCGLNoError) { return false; } CGRect rect; if (CGSGetSurfaceBounds(cid, wid, sid, &rect) != 0) { return false; } *width = rect.size.width; *height = rect.size.height; return true; #elif defined(HAVE_X11) Display *display; Drawable drawable; Window root; int x, y; unsigned int w, h, bw, depth; display = glXGetCurrentDisplay(); if (!display) { return false; } drawable = glXGetCurrentDrawable(); if (drawable == None) { return false; } if (!XGetGeometry(display, drawable, &root, &x, &y, &w, &h, &bw, &depth)) { return false; } *width = w; *height = h; return true; #else return false; #endif } static GLenum getTextureTarget(Context &context, GLint texture) { if (!glIsTexture(texture)) { return GL_NONE; } flushErrors(); // Temporarily disable debug messages GLDEBUGPROC prevDebugCallbackFunction = 0; void *prevDebugCallbackUserParam = 0; if (context.KHR_debug) { glGetPointerv(GL_DEBUG_CALLBACK_FUNCTION, (GLvoid **) &prevDebugCallbackFunction); glGetPointerv(GL_DEBUG_CALLBACK_USER_PARAM, &prevDebugCallbackUserParam); glDebugMessageCallback(NULL, NULL); } GLenum result = GL_NONE; for (unsigned i = 0; i < numTextureTargets; ++i) { GLenum target = textureTargets[i]; GLenum binding = getTextureBinding(target); GLint bound_texture = 0; glGetIntegerv(binding, &bound_texture); glBindTexture(target, texture); bool succeeded = glGetError() == GL_NO_ERROR; glBindTexture(target, bound_texture); if (succeeded) { result = target; break; } flushErrors(); } if (context.KHR_debug) { glDebugMessageCallback(prevDebugCallbackFunction, prevDebugCallbackUserParam); } return result; } static bool getBoundRenderbufferDesc(Context &context, ImageDesc &desc) { glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &desc.width); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &desc.height); desc.depth = 1; glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &desc.samples); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_INTERNAL_FORMAT, &desc.internalFormat); return desc.valid(); } static bool getRenderbufferDesc(Context &context, GLint renderbuffer, ImageDesc &desc) { GLint bound_renderbuffer = 0; glGetIntegerv(GL_RENDERBUFFER_BINDING, &bound_renderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer); getBoundRenderbufferDesc(context, desc); glBindRenderbuffer(GL_RENDERBUFFER, bound_renderbuffer); return desc.valid(); } static bool getFramebufferAttachmentDesc(Context &context, GLenum target, GLenum attachment, ImageDesc &desc) { GLint object_type = GL_NONE; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &object_type); if (object_type == GL_NONE) { return false; } GLint object_name = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &object_name); if (object_name == 0) { return false; } if (object_type == GL_RENDERBUFFER) { return getRenderbufferDesc(context, object_name, desc); } else if (object_type == GL_TEXTURE) { GLint texture_face = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, &texture_face); GLint texture_level = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &texture_level); GLint bound_texture = 0; if (texture_face != 0) { glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, &bound_texture); glBindTexture(GL_TEXTURE_CUBE_MAP, object_name); getActiveTextureLevelDesc(context, texture_face, texture_level, desc); glBindTexture(GL_TEXTURE_CUBE_MAP, bound_texture); } else { GLenum texture_target = getTextureTarget(context, object_name); GLenum texture_binding = getTextureBinding(texture_target); glGetIntegerv(texture_binding, &bound_texture); glBindTexture(texture_target, object_name); getActiveTextureLevelDesc(context, texture_target, texture_level, desc); glBindTexture(texture_target, bound_texture); } return desc.valid(); } else { std::cerr << "warning: unexpected GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = " << enumToString(object_type) << "\n"; return false; } } image::Image * getDrawBufferImage() { Context context; GLenum framebuffer_binding; GLenum framebuffer_target; if (context.ES) { framebuffer_binding = GL_FRAMEBUFFER_BINDING; framebuffer_target = GL_FRAMEBUFFER; } else { framebuffer_binding = GL_DRAW_FRAMEBUFFER_BINDING; framebuffer_target = GL_DRAW_FRAMEBUFFER; } GLint draw_framebuffer = 0; glGetIntegerv(framebuffer_binding, &draw_framebuffer); GLint draw_buffer = GL_NONE; ImageDesc desc; if (draw_framebuffer) { if (context.ARB_draw_buffers) { glGetIntegerv(GL_DRAW_BUFFER0, &draw_buffer); if (draw_buffer == GL_NONE) { return NULL; } } else { // GL_COLOR_ATTACHMENT0 is implied draw_buffer = GL_COLOR_ATTACHMENT0; } if (!getFramebufferAttachmentDesc(context, framebuffer_target, draw_buffer, desc)) { return NULL; } } else { if (context.ES) { // XXX: Draw buffer is always FRONT for single buffer context, BACK // for double buffered contexts. There is no way to know which (as // GL_DOUBLEBUFFER state is also unavailable), so always assume // double-buffering. draw_buffer = GL_BACK; } else { glGetIntegerv(GL_DRAW_BUFFER, &draw_buffer); if (draw_buffer == GL_NONE) { return NULL; } } if (!getDrawableBounds(&desc.width, &desc.height)) { return NULL; } desc.depth = 1; } GLenum format = GL_RGB; GLenum type = GL_UNSIGNED_BYTE; if (context.ES) { format = GL_RGBA; } GLint channels = _gl_format_channels(format); if (channels > 4) { return NULL; } image::ChannelType channelType = image::TYPE_UNORM8; if (format == GL_DEPTH_COMPONENT) { type = GL_FLOAT; channels = 1; channelType = image::TYPE_FLOAT; } image::Image *image = new image::Image(desc.width, desc.height, channels, true, channelType); if (!image) { return NULL; } flushErrors(); GLint read_framebuffer = 0; GLint read_buffer = GL_NONE; if (!context.ES) { glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &read_framebuffer); glBindFramebuffer(GL_READ_FRAMEBUFFER, draw_framebuffer); glGetIntegerv(GL_READ_BUFFER, &read_buffer); glReadBuffer(draw_buffer); } { // TODO: reset imaging state too PixelPackState pps(context); glReadPixels(0, 0, desc.width, desc.height, format, type, image->pixels); } if (!context.ES) { glReadBuffer(read_buffer); glBindFramebuffer(GL_READ_FRAMEBUFFER, read_framebuffer); } GLenum error = glGetError(); if (error != GL_NO_ERROR) { do { std::cerr << "warning: " << enumToString(error) << " while getting snapshot\n"; error = glGetError(); } while(error != GL_NO_ERROR); delete image; return NULL; } return image; } /** * Dump the image of the currently bound read buffer. */ static inline void dumpReadBufferImage(StateWriter &writer, Context & context, const char *label, const char *userLabel, GLint width, GLint height, GLenum format, GLenum type, GLenum internalFormat = GL_NONE) { if (internalFormat == GL_NONE) { internalFormat = format; } // On GLES glReadPixels only supports GL_RGBA and GL_UNSIGNED_BYTE combination if (context.ES) { format = GL_RGBA; type = GL_UNSIGNED_BYTE; } GLuint channels; image::ChannelType channelType; getImageFormat(format, type, channels, channelType); if (0) { std::cerr << enumToString(internalFormat) << " " << enumToString(format) << " " << enumToString(type) << "\n"; } image::Image *image = new image::Image(width, height, channels, true, channelType); flushErrors(); { // TODO: reset imaging state too PixelPackState pps(context); glReadPixels(0, 0, width, height, format, type, image->pixels); } GLenum error = glGetError(); if (error != GL_NO_ERROR) { do { std::cerr << "warning: " << enumToString(error) << " while reading framebuffer\n"; error = glGetError(); } while(error != GL_NO_ERROR); } else { if (userLabel) { image->label = userLabel; } StateWriter::ImageDesc imageDesc; imageDesc.format = formatToString(internalFormat); writer.beginMember(label); writer.writeImage(image, imageDesc); writer.endMember(); } delete image; } static inline GLuint downsampledFramebuffer(Context &context, GLuint oldFbo, GLint drawbuffer, const ImageDesc &colorDesc, const ImageDesc &depthDesc, const ImageDesc &stencilDesc, GLuint *rbs, GLint *numRbs) { GLuint fbo; *numRbs = 0; glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); GLboolean scissor_test = glIsEnabled(GL_SCISSOR_TEST); if (scissor_test) { glDisable(GL_SCISSOR_TEST); } { // color buffer glGenRenderbuffers(1, &rbs[*numRbs]); glBindRenderbuffer(GL_RENDERBUFFER, rbs[*numRbs]); glRenderbufferStorage(GL_RENDERBUFFER, colorDesc.internalFormat, colorDesc.width, colorDesc.height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, drawbuffer, GL_RENDERBUFFER, rbs[*numRbs]); glBindFramebuffer(GL_READ_FRAMEBUFFER, oldFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); glDrawBuffer(drawbuffer); glReadBuffer(drawbuffer); glBlitFramebuffer(0, 0, colorDesc.width, colorDesc.height, 0, 0, colorDesc.width, colorDesc.height, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, fbo); ++*numRbs; } if (stencilDesc == depthDesc && depthDesc.valid()) { //combined depth and stencil buffer glGenRenderbuffers(1, &rbs[*numRbs]); glBindRenderbuffer(GL_RENDERBUFFER, rbs[*numRbs]); glRenderbufferStorage(GL_RENDERBUFFER, depthDesc.internalFormat, depthDesc.width, depthDesc.height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbs[*numRbs]); glBindFramebuffer(GL_READ_FRAMEBUFFER, oldFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); glDrawBuffer(drawbuffer); glReadBuffer(drawbuffer); glBlitFramebuffer(0, 0, depthDesc.width, depthDesc.height, 0, 0, depthDesc.width, depthDesc.height, GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, fbo); ++*numRbs; } else { if (depthDesc.valid()) { glGenRenderbuffers(1, &rbs[*numRbs]); glBindRenderbuffer(GL_RENDERBUFFER, rbs[*numRbs]); glRenderbufferStorage(GL_RENDERBUFFER, depthDesc.internalFormat, depthDesc.width, depthDesc.height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbs[*numRbs]); glBindFramebuffer(GL_READ_FRAMEBUFFER, oldFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); glDrawBuffer(drawbuffer); glReadBuffer(drawbuffer); glBlitFramebuffer(0, 0, depthDesc.width, depthDesc.height, 0, 0, depthDesc.width, depthDesc.height, GL_DEPTH_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, fbo); ++*numRbs; } if (stencilDesc.valid()) { glGenRenderbuffers(1, &rbs[*numRbs]); glBindRenderbuffer(GL_RENDERBUFFER, rbs[*numRbs]); glRenderbufferStorage(GL_RENDERBUFFER, stencilDesc.internalFormat, stencilDesc.width, stencilDesc.height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbs[*numRbs]); glBindFramebuffer(GL_READ_FRAMEBUFFER, oldFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); glDrawBuffer(drawbuffer); glReadBuffer(drawbuffer); glBlitFramebuffer(0, 0, stencilDesc.width, stencilDesc.height, 0, 0, stencilDesc.width, stencilDesc.height, GL_STENCIL_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, fbo); ++*numRbs; } } if (scissor_test) { glEnable(GL_SCISSOR_TEST); } return fbo; } /** * Dump images of current draw drawable/window. */ static void dumpDrawableImages(StateWriter &writer, Context &context) { GLint width, height; if (!getDrawableBounds(&width, &height)) { return; } GLint draw_buffer = GL_NONE; if (context.ES) { // XXX: Draw buffer is always FRONT for single buffer context, BACK for // double buffered contexts. There is no way to know which (as // GL_DOUBLEBUFFER state is also unavailable), so always assume // double-buffering. draw_buffer = GL_BACK; } else { glGetIntegerv(GL_DRAW_BUFFER, &draw_buffer); } // Reset read framebuffer GLint read_framebuffer = 0; if (context.ES) { glGetIntegerv(GL_FRAMEBUFFER_BINDING, &read_framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, 0); } else { glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &read_framebuffer); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } if (draw_buffer != GL_NONE) { // Read from current draw buffer GLint read_buffer = GL_NONE; if (!context.ES) { glGetIntegerv(GL_READ_BUFFER, &read_buffer); glReadBuffer(draw_buffer); } GLint alpha_bits = 0; #if 0 // XXX: Ignore alpha until we are able to match the traced visual glGetIntegerv(GL_ALPHA_BITS, &alpha_bits); #endif GLenum format = alpha_bits ? GL_RGBA : GL_RGB; GLenum type = GL_UNSIGNED_BYTE; dumpReadBufferImage(writer, context, enumToString(draw_buffer), NULL, width, height, format, type); // Restore original read buffer if (!context.ES) { glReadBuffer(read_buffer); } } if (!context.ES) { GLint depth_bits = 0; if (context.core) { glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_DEPTH, GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &depth_bits); } else { glGetIntegerv(GL_DEPTH_BITS, &depth_bits); } if (depth_bits) { dumpReadBufferImage(writer, context, "GL_DEPTH_COMPONENT", NULL, width, height, GL_DEPTH_COMPONENT, GL_FLOAT); } GLint stencil_bits = 0; if (context.core) { glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_STENCIL, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &stencil_bits); } else { glGetIntegerv(GL_STENCIL_BITS, &stencil_bits); } if (stencil_bits) { assert(stencil_bits <= 8); dumpReadBufferImage(writer, context, "GL_STENCIL_INDEX", NULL, width, height, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE); } } // Restore original read framebuffer if (context.ES) { glBindFramebuffer(GL_FRAMEBUFFER, read_framebuffer); } else { glBindFramebuffer(GL_READ_FRAMEBUFFER, read_framebuffer); } } /** * Dump the specified framebuffer attachment. * * In the case of a color attachment, it assumes it is already bound for read. */ static void dumpFramebufferAttachment(StateWriter &writer, Context &context, GLenum target, GLenum attachment) { ImageDesc desc; if (!getFramebufferAttachmentDesc(context, target, attachment, desc)) { return; } assert(desc.samples == 0); GLenum format; GLenum type; switch (attachment) { case GL_DEPTH_ATTACHMENT: format = GL_DEPTH_COMPONENT; type = GL_FLOAT; break; case GL_STENCIL_ATTACHMENT: format = GL_STENCIL_INDEX; type = GL_UNSIGNED_BYTE; break; default: assert(desc.internalFormat != GL_NONE); const InternalFormatDesc &formatDesc = getInternalFormatDesc(desc.internalFormat); chooseReadBackFormat(formatDesc, format, type); } GLint object_type = GL_NONE; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &object_type); GLint object_name = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &object_name); char *object_label = getObjectLabel(context, object_type, object_name); const char *label = enumToString(attachment); if (object_type == GL_TEXTURE) { GLint layered = GL_FALSE; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_LAYERED, &layered); if (layered && isGeometryShaderBound(context)) { /* * Dump the whole texture array. * * Unfortunately we can't tell whether the bound GS writes or not gl_Layer. */ GLint level = 0; glGetFramebufferAttachmentParameteriv(target, attachment, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &level); GLenum texture_target = getTextureTarget(context, object_name); GLenum texture_binding = getTextureBinding(texture_target); GLint bound_texture = 0; glGetIntegerv(texture_binding, &bound_texture); glBindTexture(texture_target, object_name); dumpActiveTextureLevel(writer, context, texture_target, level, label, object_label); glBindTexture(texture_target, bound_texture); free(object_label); return; } } dumpReadBufferImage(writer, context, label, object_label, desc.width, desc.height, format, type, desc.internalFormat); free(object_label); } static void dumpFramebufferAttachments(StateWriter &writer, Context &context, GLenum target) { GLenum status = glCheckFramebufferStatus(target); if (status != GL_FRAMEBUFFER_COMPLETE) { std::cerr << "warning: incomplete " << enumToString(target) << " (" << enumToString(status) << ")\n"; return; } GLint read_framebuffer = 0; glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &read_framebuffer); GLint read_buffer = GL_NONE; glGetIntegerv(GL_READ_BUFFER, &read_buffer); GLint max_draw_buffers = 1; glGetIntegerv(GL_MAX_DRAW_BUFFERS, &max_draw_buffers); GLint max_color_attachments = 0; glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments); for (GLint i = 0; i < max_draw_buffers; ++i) { GLint draw_buffer = GL_NONE; glGetIntegerv(GL_DRAW_BUFFER0 + i, &draw_buffer); if (draw_buffer != GL_NONE) { glReadBuffer(draw_buffer); GLint attachment; if (draw_buffer >= GL_COLOR_ATTACHMENT0 && draw_buffer < GL_COLOR_ATTACHMENT0 + max_color_attachments) { attachment = draw_buffer; } else { std::cerr << "warning: unexpected GL_DRAW_BUFFER" << i << " = " << draw_buffer << "\n"; attachment = GL_COLOR_ATTACHMENT0; } dumpFramebufferAttachment(writer, context, target, attachment); } } glReadBuffer(read_buffer); if (!context.ES) { dumpFramebufferAttachment(writer, context, target, GL_DEPTH_ATTACHMENT); dumpFramebufferAttachment(writer, context, target, GL_STENCIL_ATTACHMENT); } glBindFramebuffer(GL_READ_FRAMEBUFFER, read_framebuffer); } void dumpFramebuffer(StateWriter &writer, Context &context) { writer.beginMember("framebuffer"); writer.beginObject(); GLint boundDrawFbo = 0, boundReadFbo = 0; glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &boundDrawFbo); glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &boundReadFbo); if (!boundDrawFbo) { dumpDrawableImages(writer, context); } else if (context.ES) { dumpFramebufferAttachments(writer, context, GL_FRAMEBUFFER); } else { GLint draw_buffer0 = GL_NONE; glGetIntegerv(GL_DRAW_BUFFER0, &draw_buffer0); bool multisample = false; GLint boundRb = 0; glGetIntegerv(GL_RENDERBUFFER_BINDING, &boundRb); ImageDesc colorDesc; if (getFramebufferAttachmentDesc(context, GL_DRAW_FRAMEBUFFER, draw_buffer0, colorDesc)) { if (colorDesc.samples) { multisample = true; } } ImageDesc depthDesc; if (getFramebufferAttachmentDesc(context, GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthDesc)) { if (depthDesc.samples) { multisample = true; } } ImageDesc stencilDesc; if (getFramebufferAttachmentDesc(context, GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, stencilDesc)) { if (stencilDesc.samples) { multisample = true; } } GLuint rbs[3]; GLint numRbs = 0; GLuint fboCopy = 0; if (multisample) { // glReadPixels doesnt support multisampled buffers so we need // to blit the fbo to a temporary one fboCopy = downsampledFramebuffer(context, boundDrawFbo, draw_buffer0, colorDesc, depthDesc, stencilDesc, rbs, &numRbs); } else { glBindFramebuffer(GL_READ_FRAMEBUFFER, boundDrawFbo); } dumpFramebufferAttachments(writer, context, GL_READ_FRAMEBUFFER); if (multisample) { glBindRenderbuffer(GL_RENDERBUFFER, boundRb); glDeleteRenderbuffers(numRbs, rbs); glDeleteFramebuffers(1, &fboCopy); } glBindFramebuffer(GL_READ_FRAMEBUFFER, boundReadFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, boundDrawFbo); } writer.endObject(); writer.endMember(); // framebuffer } } /* namespace glstate */ tmpNnpnZF/retrace/android/0000775000175000017500000000000012543167424015031 5ustar chrischristmpNnpnZF/retrace/android/build.gradle0000664000175000017500000000210612543167424017307 0ustar chrischris// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "21.1.2" defaultConfig { applicationId "apitrace.github.io.eglretrace" minSdkVersion 12 targetSdkVersion 19 versionCode 1 versionName "1.0" } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['java'] aidl.srcDirs = ['aidl'] res.srcDirs = ['res'] resources.srcDirs = ['src'] renderscript.srcDirs = ['src'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } } } tmpNnpnZF/retrace/android/res/0000775000175000017500000000000012543167424015622 5ustar chrischristmpNnpnZF/retrace/android/res/drawable-xxhdpi/0000775000175000017500000000000012543167424020705 5ustar chrischristmpNnpnZF/retrace/android/res/drawable-xxhdpi/ic_launcher.png0000664000175000017500000004567412543167424023707 0ustar chrischris‰PNG  IHDRçFâ¸gAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsgŸÒRIIDATxÚí½yÜ%ÇUüœªî¾Û»ÏªÝZ-ÛÞå lì`C°±ÍbHØqð„>qL¾à‰Y‚ÁÄÄ€Œml ¯’,[–,K£]#f×»ôRuNþ¨®îê¾wdÍŒäy_Bͯ§ïÛ·ow-OŸóœ¥ª(ÿP΢й®À“Pw9×û¿© ѹ®À öü-hvüv„vÝgµa;׿*ú\Wà4‹ït ‚ï?!fa]䬂óÛWºú6(¸8:ÿÂÅ8϶FÔÙ]úË_v€ªŽ'E„’½ç÷{G:BŪkŠÆC»AT=Dˆ$+{z½cG†¹ŽÐÌÇI–òŽ’@; ñNú@º/}áWì¾çÁŸÿÕß|×W¿)Û¨?ÍèÀ=Û­mµôbôúýhá+¿ê©û<ôÓÿé×þìE¯Û\+¨?õá$“Âö{¦ÊN“@ @|ÑeóýÍ5;÷Ž›_~“™ÛúJÕ½¶×KÜô‘cp¹Îµgm ³ù Í8þ¥ŠòõÐÛwÁ`i}5£w|òkÿ‚v^Ó[É¿ñÂËæÆ}÷á{ƒˆLÁö4ÛpNÊv{J«TƒúðC[êë¾õéWÞøÙ;–¿p×Ý,™W|Óž·öú½½ +Ñ€Ü@…˜u­$~€u¹EÁçYÇTë·¨Puuº½xîè¡‘zçǾùÇ0?yúÝ÷>lï»ó$6V‹€’Žë¾­ËNPUý$zÿ;o¿çÞ[ÔßNÆi<MôâJ¿÷Ërͯoœ,0·/袩 fƃ".·Nvƒ}¸uÊ-)7ÿ»T³åUW"‚®•bîÿä¹×^ý¢äGŽ<2´[›#ÿ²ø«oüàæ{Œ-Š"“5x¼´ItóIïüóƒ^onk+íšÂÆ£ao¬§ÉÚÚ¸¿¾>^ØœL–—öÙ=VgK‡õÖWÇÉúÚDmn¤4ÊNéÞ.õæ–’N‘[m {ÉÖ0׉Ðíöã…Íõ,þ“¿ñGW.¶¯8üð†¬žÒçn>ôîß»ÿç:=ÍEÎR8µ}[Û®ì4G¢ÀI”\D&IGg׿ïÀß]ý¼gð™/›¼JëHs=ú‰·^õë?öÚ›þéÜb¼<Ü(@½~íÛ·Ð9úè0måv´UÄËç©ó~îW^üô½ài×^zÉO[^\ºpЛ[Iâî|¤ãD+ ÀŠ‘ÂdYZL†›£áñk«ï~àá»>rÃí·ýþo}þN«ã,-Ì÷ôüJR;pÛ «w0»÷ôxœãa¡–vuÖOfÑÇO|û»‡“Í Ž>º.‡Ø¢÷ÿáÚÛ?þþƒ¿«m1ËIC8 d±@´TRËö<çÅ—=ï[|á?­ìíð`nN²,Õ¿ü滾ó‘ûÖ§»~ùÓçö¾å·Þðº—\÷ì×/Ï]°Ð08‚¡Üo '!Csc Ñ!cˆM<‚Ž€‘ƒ!°û' æ ˜§óôû!èãÐÉÕ‡þæÃ·ü¯Ÿyó_½'ÑúÜb²¸¹–ÚßÿèëøÒgâÛ¹MNÛ¢ÿfówüç{¾'éèqžÙcBõå¹Û¶.; @¾ÎžwÌG±Úc žÿ'?rí>ïUêõs }éºtÿþî/<ðkïú«ïøÎg?õ™/ˆÔ.²8*›ò.褊±H=<]\`C0†Å0rlb "Ã:¸„àGWÀ%œ, )ˆy@ûõ.Á$̧>y÷~ìÛßùg/xéÕ{~öwžú߿ƫ'7qà³[ê~åÐ÷ G›÷šǬÁ©ÛÓõcÓÁØi%$§^ ­tzúül" ÿê7¿â¿]p…ì‹“.¸TË«¯z=õqR¹Çnàv¥HÑ<®F—ˆ`p c<„Ça0.w‚. —£¨äþ¯ÁÓ<Xk›œw±Ð½De“ùâøÉûÓµÕÍùõ“C9|pHïûýÕ·æ†Cÿ“­ Ëq[pÒÇó¦m/}ü`ì´ÒPÀR«ýZã¼]ûV®üWÿå‚_þª—ïçK+*‘ xB'”†Â2ž…±†-Ü…@èbz؃KÐè¡6¢ ÀXÇCãx ný«Õše[”û¼ÈÉâü>ºÿ¾ƒtàÖu|ä]«>ü®G~>NÔF‘ó#<÷ɰC¸/;Í Ã •pn!é 7 ~Ö‹÷íûã?û¾½`o'ä&EÒ‡¡‘ZÂUèá*X¬á>‚ N ƒ%,áéèa7ÝÖ¥}©`B….y)gÜ&ÕF`K€0ÀìÄ€BD*V4ÉObyw‚§?w ÊœŸÜrýêòÖÆädÒÑqžÙдc¤°³ü@@Ó¯’èïÞ×_^_MÕoþþ«ÿéÛÞòÝ¿¸·E‘ÓE—vcÏB‚ÝXÃçpŸ!Á".Ã".E‚%¸ ¸wõàhUÎá°H±…›°0U R CÃÀ`‡!ˆ¸ã¦`˜‚a-ÃÆÊù¼ôµßrõ×M¶Ô½w~îØ=ƒùX9ïâ– xDÐßþÜʱ#£èooýîÿðí¯~åwhÞe7ÔôQú Vð4¬à+P`„Ãø$2ŒÐÇù˜ÃùèbºŠTôQG) >ÁÑä ÆXGŽQI )UºFăFœ’JAÄ©3cÜï™™„†òÌïúšK.ßÛ¹á½?µ¸’t³‰ÝQüØ9jƒg°ÿü¹]Gön}ä‡þðEW>ÿ+!=>¡>§WqöâYXÄeâ0Žà³ˆ0@»ÐÅ2Ì!B„œÔc†` ÁA0cŒ ¶by5²ª>3JISFJ0IuLDê¿E¤ŒÍìþ§DÏyæ .¼òúà‡–v%Ýt‡h'è*ðI„ŽúûÎì:zx4øÂÑ~Ç3ö^{$‘ãt;­ãìÂ5XÄEâNà.t± 1:X(Á“ F ‹È`QT¶”»© iäÈ1‚-­0ω,lý‰-˜-¬µ°Ö€myÌ2¬µ¶%¹öjLÊsEf¹(D=|—úøÏ}ç§~pq%1«ù*€1œI¿­½ÒÛ]…ŽÃ€þÞó»Žõ>wøþøš}ϸ Hä “¸ ¸ ó¸c¬ã8îB‚e4:ÐèB¼¿)Rlb„5¤Ø@Ž1 ¤0ÈaËÍ /•WvVýÁ‘@°ÔRˆ¥Tc ö€—ÒI±î-˜Kžó’ žñ7ï|ø¯ç—âNž68Ѷ°½Ô6×{»ööVNG7Üû]o{ÖÅ×>‹¤#ô(Çè`æq! Nà(t Ð……E„‚)rŒaXJ• 8kp„溶Càaˆõ¦»O Sí+ 9‰€¬î/ò¥W?sÿžëÿòÐ ½¹(6ÓÄzÛi»È›êÝÁ|¼´±–Åò‰×ýÜKŸùì×@zœÒPÃ`Áà($ØÄdØBŒEHËÜ{ ƒ) &%Ÿ± ‰ ‚pj;Ãc,\J)-/nÆ–ßþ¡Š À̈÷È5»÷®lÝrÃÑ/D±RÌbPû†¶]Ù®ªÃ„ŽÒ4Ÿ§vð¯ßzÝk¿ý›^ücZ,“Ñ'ñF8†+%`2 q„.‹„†A‹¦„€£µEåC-@‰URˆ\ZWncs šr/méÃ`‹t¶$Ùø@ÖˆÝ{¡~éÆÑäS?°¾ ж$ÖÛ1#±9íEЛO.~Úü…ßýÏŸÿKZ¬¥Boá$†8 †¡SRÝ ìÙB!&È1A\nî<PbS~rßÙÆw\žËÂ<€§ˆ“4D(¿¬0 c‘æ#äEaUúЀPŠ4)–¯ûîå·Gss‹ÑšÙ•ÛªlG K{‹»:K›kYüÎ_÷ÖKv_z!©9†8бYubê€1.N"ÏRÌ˳˜‹[˜ð1€V „)íΆgêZ Ç[xœ´©6.· H\I$æ2´ÁÀx²‰¥èZ\¼øJtõ^œÞk @T¥kõFб\ùŒ]+Ÿøë£ít5Y#>Cq[I¡íÊh¤€*M½“YòoyÞ7\qÙ…Ï3B,”«#Œí&Œah¤jŒÂŒ1'OÇs¿BŸˆx8ûk<þ6:ñ<„D€(Èè΅§ò¤–xç WIžßpÉuµÁS‚!Í6ðÒ‹ß‚ó^?þ_y™à_ü8¼~3Åî%4„„€ØžEö†ç¿ì⿼ù†ƒ·`:к-€´íD"‚|ŸÅ]É<€…×}çU?IèKA™Ê0A*CäùÖ0L‘a2Y²9\Óÿ%¨è.£Ày× ¶Âưóц5¶°0Æ:ߌu{c,¬qÇMáα…;æ¶ú\6uxÂolÔ1ÖIk,æãËqÞ `%wõˆÅkžþ6Ä´ aªHuÕ DZk—}ãÜψúóÑ<œ5¦Ëžó²JŸ(NtoíX¦~õ/ùöåå•eç™ÉIŠ4Á9¸`…Á$[ÃEo)/•„ª´À€ˆ—Q˜Â.lÿÙ¶ÞL½¯€lÖÖ 2Þ1ÈkÅ*@~O•íÆžHÈ»jï0Ɇ`K•iD ´êóÜ _ýÊ7^öÊñ–Iˆ¨=Ó䜗í ðûÌ-Fs–¯ûGçÛ˜ 甲l„4¢( 7hF`ŒEO]<}µò‰^O€°.¥E†H¿kéJŸòûPŠù}Åyœêbë@ÑX?ÃY«¡nü»r1Š¢€•[Yu§¥”RÏxaòCâþœ žF´-¤ÐvPEž£Xu׎gúgÿÿë¾a0ן3¹AžåȲ &é&ò|Tš·‚€ÍÉ£‹ DlÝ€Qv¤èZ5UVHÆ:ð˜ÂV*ËÏ 5æ7¶µ «-±2dÁ)n}ä÷@¤áÜ:µººãŽ/Âk¹2é¥dû!æÞ¼}Ê ^~ñ GN ù¨ï9°}ä;Cˆ–ã>€äy/ßýmÖDÈM®ò"E𑦛0EáÌc#0–ÑwúS€ˆ3T “‡ð™Ã¿„DÍÃSZNÁÀ·¥ND%x¦TX)|¬«Ús&Ë•U©n;ô?p÷Ñ¿†"GðŒ">ôñ?@'ž¯Î®BpêŽ)à/ê}êôtÓ&ÏYÙ.f|ey¡7Ù…W¾áÊg¿â û¿KQײ5ª0)²| ƤO€˜°B®ŽâáC±gþH‹M8úç¸ñð¿E'鹓)°®$ð7<È¡µU;–W°U ±Ò²Æj“^Äq£ˆ:¸çÈ{qèÄ]ÐXÄêúQüֿ˯!I"QU7H°†) ŠÜXR|É7ò{Œ¬Ù>©¯ÛÅŒ¯t§uÒ‰Á«ÞtÞ× &/”Ø1 ;q2TMˆ,"ÕÃVò·øË»Þ"BGèv Â`V€µÎçBŽ}¸E\ÎO]”æ{ù±&$à2g£2ëýæCNjðxG!3£/âØèS¸ïÖ",^<È ¬‹rª .€H•~p€ˆHiÆ _µòÕ|×ú)­¶œ¢Î`ê¥Ó¿èÊÎ+Š\À:'ṃـ¨öØx¹dhÕÁÂ\¯ô ¤ C¬‚C‘‚óÇU*¢ö."xœ=Ðe¥¤ò Ò+ˆƒ‰Ô|H†R æ»ÑO…1 €$Žû8?”‚°ó1¹{“{/Ö¯ðŽNWu'#¡©ÂΉ$Ú½¹žÆÏûÊ+.ëôd¯)¬εå Öæe«î/7øRv!•RK\ùAñ«R1XÖ}r±¡V5P[B4eÊ¡HÔ‰ÙéÔJÕ•©Jñðà €$$PŠœÇŠ¥²ÀøL%áòa&)ÿoÒ*  @$åiÔà>ÍÏ%ªÏH$Ôêl HÒR•d_’ÿÐëìbl¥mÆà*²ˆ‰Xì»8yîíŸÁõZ«¸\Èáÿj…HPqGÅ: ËɦePŠJ.#.vUþÂÁ‡Cu\%¸Ap'÷1àž¥ÊC%q‚¯BÀ´ŽIE¬[Ò¨(Îa%“ób×@t÷¶%·¶äT.˜IŸ/­ ?–CqÖ±'|Û' @_ê©Ö¹nI‘À|§í/lÄVR¥JÖ샟¨EE¨öðzLpÉ#ˆ|:<•«¶ºˆ‰ !€¤©ÆPJÔ*ͧ´6,´*Õ5M ¾‡ÿM-;ƒëù¨|é°¥ïÉK"óÅ:¤à­°6€Nµüž´6 >Ÿqy"D3öm 5“ÿZ(êò§ž¿K)sY†AyÊRI róŒ†ÊË‘{Ú‰|’X­Þœº û®UuiVÒó( $Sȃü¾¡Òfò#”ó|¤KIzy?'m}Þ4×FAI¤Ex7Ј¤C4µBëo¥)""f©gCºÍ§†0ZÍþr¨‚`ß~:|·qk_7YyÊUËK °†@CÄBH TƒÆK!§Æ¸”N­±[0¥4*E”³Ò¤ú]8˜ŽÂøT˼÷ª­2ë½õ$h‰CÎä/!Qñ,AW-¬ “,.ôæG“ñqÔËô¡ÜGË+ýd×®¹äØ‘-µ¹5©ØÜÜ|L»÷ÏÉÚÉI¶±šæp+€„ÙŽg¢³P˜=X­9Ç:Þ½w.žt4„”8 “IfNYjLPy Ra±]¾´â<ÌšDVjîCÊõ1ÔFT-]Üg–@¡•Çg/q¼JiI S X•¡êr§ñ ‰ÄH«J§¡®¦*ô¨R_:+Lèö#ˆäXÚÕ™ßx‚zé¼dn¡“$QÔ[]™µÕñÜ×¼æÚ§¼âkžváb±¿1N>ú¡{þÐ>óa° 5mÔS‡üXœˆÎ@ô q¯wwíšë=òðš>´!¨ª$¸„¨@²{ßœNÇÅd¸•ùÕ¸T)#8k#EQ²ÆE¦ˆYÈ…ª9¡¥øq~!rjËqè²óƒÏµ·º ŽsS âÚEÂA/ Ó߇ºÎûŸjС>/ü\n‚WÊlIQ%T”V|É¥Y="0EaJ¡ªtç»Ý­ Ïûªý—~à¿þØ^våâ«»ÌF8Š oúñgcsòÌá]w¬}ø7~⳿}ó Þ=Xˆ»£Íb³œ ˆÎÔ —­EÐݵ{07ÜÌ”êèåÿö;ßõšë^|á«–w%OZb¦ˆ†kkæ¾Ï~þÐõ?õïü‹Ã=<¿ØQ›ëÙ°¬xÜéÄ‹YV,üÐO½ñ'.~öño]ØSsFQ¤ ´)/EJÉB^ÚŸÛÇQëªê-«_ü9^³¡ –&' ¤G ™ñÙÑ?ÕÙ[^õžnJŸ͵ÿ‡ P„"cLF"²qÌwÝÄÿõú÷ñ´V#k9_ì$[™¼ã?ðÃ_ÿê«ÿ%c], °ˆNâ^Œ±‚™QÖ(Œ6„nüàÖïþ¿ßÿ™_›[Œy¸Q¬ö|RTKB Ao×ÞÁÒÉc#úÓ¿ügßûš¯¿â'´Îcƒ9rX0O°…ã|€”é² R¤+róG6ßþ/¿éþÇ…åo®eÃòÚ=­Õ^aî]zé•‹Ïùê7ìzÕâ{aÜ @o Ñíň8Ž tmŠªŠq!ðùàšÑì)ZHƒ¦w@Ù™jà„<ˆ›äº̵FPäŒ4e¤cƒt̘lã¡ÁúQuÏnZýðÃ÷¯ÝJÄZ‘^?Q“qÎòñø÷/xÉÒOš;Ìžè*½€}´ˆó@Hð0>‹ãö^d“Yš"M ™ŒsÎS£ï¼¹xÿ/~ÿçþŸþ|TŒ·Ì:Î`}¢3PµâúÊîþòê‰qòÙûæm—]ÚyÙXRkPPBójç!BÇp?M?<5F<™ŒEñ¼~ä@rà‡_ûáoëÏq:š €XGjÙ^zÅë.}õó^vÁ›8œŸ­­Àæ KCXÚ‚D#èN†Þ¼`~1Aw¡ÓUˆB”Q(åöPµcˆ«õ-D…þŸZ•… ©WóªW`—5À0Pä@ž òL0YŒ6 ²‘çÀô@¦›ÅÈsF–±•ááxë‡î>ñß~–D4a¼ù§^úš×þ³Å_A|®¬ìÕ+s—¡ƒr a¤@n2¤é“Ééd‚4Í‘MrŒ‡ÆŽ¶ }ã²_|Ç[ïúÃ(RCcx Ž=n)tº($ÍñÂRg°zbLï½í{yߥÑËò!«i¥zè±Æß€0²«°Y&Ïas«Ä(EÂÉÂñ§þô[¯}Û¯þÈ-ßÛééy¶"·üoûe_ÿ’—?÷G~!æÃ÷f’´±¶†;ïþò (2÷´…ËÅQšE„(VHº:=n_¡?¯t5’N„¸£Ðéjt{QyLAG Z”TDÕßZ×È’ òïU¡›ªƒrŽ»Ô¹I£È-²Ô"ä™A:1È3‹lb1Z¤#÷9ÏLu¾5Î’Ô!Š¢„ÐëuðÔ+ž‰ùþ ö,_D¤ø²ý»üÿîúâ=?}ï]‡>ÖëGƒñ¨°—^«~øð¡Gde÷‚Þ¤ùäD‘†RØ2Š¢@–eȳij¥²Ô`26z2Þÿúþ¼7§xk' Ÿ' @Dšˆ’Íõ¬ûuoºê9ç]1÷†Çï0Ö¦‘‹(G°’CSŠ4 ®1yn‘N£¡A6©µ©E<¹î«ÿñ_{ý{ï½an1Ž’$^~íw<íG.\e.Ú,úØòÇ0ºs ÇÍKû'¤OiîÖÜ1ÆV³Ë$TˆSl,b}ÌSÔ|*pHQKužl©f’VR©|BLpó¼ ÊY J«R 2”Ò®oJ3ÒåI Ž€4‹pË?ˆÁaeoB_r!`6í¥×âgî½+º‰ÅÆ»wï[ÜÚܸ Y3–h¢³TÐéÐ:•ªÑ ( Š¢@‘È3‹"cd)!›hnmî¾àâÝW9|â¶í<—'@½AœŒ‡¹¼üõç¿áàÁ»1IW5•Ö<‘£GD [AQXäiŽÉ$Ådœc<4ZëW\ÓûÆëß‹ONFEÿ%¯¼ø)ÇŽ…Y¹Q?5^÷Š7âÐË>“[Œ¶rlœÌqâÈÇàè¡1Ž?:ÁñÃ)6NæØZ·m“QŽ<ج\KÌ«¾¬‹¿ `E`PÐD!î:FŽÐ›Ó˜_б´«ƒÅ] æ#Ì/ÇÌGèö#(íxP‘§¸r°—î¹m}1‰’}ÆŒ'ó‹ÝåáÖÑI¢‘Ž,â$‡ÖªŽŠTY’¦0( FžY¤‹ñ&°µÆØk®¸ÿ¸Ë«°(Ò1€8¢¥‹=ø Hª§n¹?]ú5¨šµ`r‹«Œë@¼5âç“ù¿nÜüÛoÔxhídd!ãÖ¤ ´"èˆË§^•¼ÂºÔ2 J+.SYY¥™EäA­Jÿ£ þv{¥”“”Ïñ™ŠîøV•ªÁÁêcÍy`U:k˜æZ&›…> o¾Wë*ZTà*Êu‹ŒQäîü"cä)ƒ-)ZG* ÓDBï¶Ï÷á“Yq>ï›2…ØzJî—GU@…~ ½sÕ”‡ªØQédóOC¤!a"a‚§«! ¤¥J+(e¡´‚V5ÙuÄPJUŽDŸÿ£*y Ã\RGù›ùÐR×ÛGïËQñÉ^U Š˜Jã@ã¸'ôUZ‡Ï•.çUNDoÝ6À± [.XE(£J)Š A_Vmh"%Œ¤ød;Î „3(§ ¦;×w ƒ›IîRæöz'\3µÁçý¢>VÆtHBÖ°XX¸'Ó¹ù}L‰ÁD kaà­Ô ¢2]µä+uà5KË$¯B³Â=ÐA+pBЈUR¡±øf°6û]©ZêÅíÛšZ®=×2­)j¤ˆ”묬ÊF»¼;L*EÁÕù¤ÅÂêH% ¾â,b+®"!Ôø¢Ž)EûPiQˆe0¹§rêË!öó„Ê•}¼ê¡rÍòr8ˆU@‚§,x¨U7i¬R’g H#ÈïÛ’©AÙWUvaàtôÉ,áweÛ„ƒú€ÀÖPZiaÛêìS£Ô;3øLƒZg¬ÂJÉAlQè*˸~ª=Ê©Rz•~.›«\<ÕŠ°[Vî õ-W.£ª†[eÃÅK7ò’«–vUts–Ô©ÝÍSßHñ é`Û@rz'87Ø*0·õ‹_U ôš7ˆ£ù6)ÕHüïá‡BÈI½)0Õ*ŒYìãvüì·@Ê´úÑ'¨RmK­©ëÅZ1S“[g9s T"ˆ¶Ì)ò„¤Õ‰áßጢRPж†mèÓ jCºM«­ZÚPÝI%¨ô¦®:‰dÔh[µ›"Òþ²¡i$MC"‘z°4yO˜ç_e5RÐßJ—àÅ:–ræ@•íˆV“Ú!–ªaåµ`¹6‹N¯œ)€ª‡­˜°÷½Î¦h‘¨~\K ª•,ÌL-×fqª«‚Ìl=Hj¥ jna<ä(³Iu}¯©è<š}0E³‚þ¨,º°Š*I¹¥Ê<ž@Rªúm Í××Z¶T¥nžÎduŽ’»ªX+Bø–½> ¡ ¬€ 1Ji¥K‰†„1Tƒa`xÙzðBY]ßß‹ûFW5¶F»T’DªÅc'¬Tˆ"Ôê3¬LóÁÂôàVº»)U¾'Ee>4Qû:õìÙf]n:¯B­œq€ð¬I´¸Êl´ÒJ“i«6ß(€”"‚lÁd³Å CªS‰ô2×'РÔîõàfÒF_;÷'dÉ3ê %Ï”ªk¡³ئîáÛ<.%V¤§2Bé~ °‡€öÏû™úÏx} _ik¸ðÞZæ)À£~²›}Õ4…ˆ|2C-DÚOh“_4¥P[mTa´¤UXÁEÏ23rmµ„æ $üêæÓýרØOa]‚:ð•…)Ëwú:S’Í>b#gÌN@¡&d nêIó”i}Ûü;ôë‰8}En •SYÚb¾Ùã¨À áì‡Ü†‘F¿Vê,T´m59«îíoƒ´žÿî¯ÓœÑ^d–Ù]o¥q×íqœ”RZx¿6«ÿÛí‰@,‹=…ûñK–3Içhö£5 hè*o>Xµ'6<¿œuQ…±êq‰tб^Gñ¬8†É`èÖ0q¾Ù¡þÈ´ºSýíÙxò› h€3”þï°sšÎädõ|²©j’x¿j}VßN9*[õõø?*LÀ-€MU-"¿BPÝ à²ãX)å®çÌø}µeöDØ í';¨Gëþ³xØ©¤gCÉT€fÚà Ÿ|ßn^'BujëªxUCÓz.I®hMµé°)áS Ô’uûܺlvZRèlü@SHá:¨%omA5D›§”ŸU’‡ŒeFGT /Ùj ¾º–ÚV“á#k³+]ûà›ö£ß¨v8â\©8Š¿Fó»©Ë…’x Ì5x«¬”²®mR·¿ª³Ps¶l‹[5¨Æ“]ÝX¥ë²í2}|å @%jT¸E–*1\7†ÊúzõEZ»ëYÛ&²m4"àþœòïJ«„÷Å fH²)nÂ-8$~xš@i²«ðahØ(aœNw€ÙE uéú/U«Çš÷ùìƒYèx‰>ë¹ñlKT:«Uµä±k$Uw•O8ùëÕQÉ©U/¤ŒÕ?¾nƒ'ía“ƨϨ¶Š{LÔ<·Édÿ )…zà¥u|êOçP-/+ª!9ef“+@Ï'»$“3å@§  6õCalAíç*hÈy ®PõZ•O¹¬Á ™±¼[ ʦ° ½Ð¨|DÍpß¶Õ_}‘Ù)màL]2à)m³»1®Ï¡ß¶ù’sT™žþ4æJjKé(T}UW¡ì¯†(oÞ¢ ¦’‹2~ùCUMn jŠðêk7Zí<4Ï+¢¨œ:59Û™–Cpa¡f8´^ÎÅ¥pHƒv¢Bs½¨B}¹š½•b¾ErÀ‘Ö1©Í½2ßâ#ív׃Ýðq5»´§vHB)—f< 7zJ³=n Á"RNh÷Ìã+g³Ð¸ã@–-…æDÕ’€4WÃi"à•XʩŸm M¯!áTXΑ¦hÉ÷ê:MTÔ¤4ðÍÒKßÎU4Asj5"!QŸ¥KßÙ,ëv[zµ”hà/u÷Ç*gA¢ÝÞlRfªc*ÚÛµ)K¸"å¶N‘ ›ØÚÒ`µÚ«þh×=dœm5[_»á>@ÓE1ÅS*µÜ£êó©‰q}¬¡Òfô“«ƒˆµŽD—ooiµK¦nÒ‰PeVÀ6øÄiJ¡3ŽÆûEΑ z­¥²Z:Ø{›y[­]r”Kœf¦JµPxÕéÔäDMŸ¦r|Wu/=&Þfê†&h«t¯Û¤¢2OGf ¸¿f b„ú¸òÛH…’·MÂgR€ n¥a2k©Ç ¢³±ÂŠÌ˜Úêòωdöï|ÄF5½V­ƒOÇ_*~Ù{A]-¯[§mÔò¤>úުߟª‘­:ÎöÕ÷n€§!}Bµ*ë  H¡d n$ÄÁw‘›•¥ ÃI%€v‹5Õl£ ~!…/3‰.ïWkÍ«2ÿ¨õT’OˆÊôÌ"7.I¿Ñ#aƒkßÑ,)Ôú Ùãˆáõ¨ùÝÌ–ÊckK®êU*¶ÎóiŸsjîTUyZmVHA…ÝØ–®Ä½à~ÕP |v¯Ñ<$¥¦ Rµêm¸6—ñç×¢ê¿Ò#í³›N2¨L dxƒ©n™=HÓ× ¤ÅLñŒ|ZiPÅ ­KWj­EuõoÙ ­¶R@EOÍéª*AÓj-쫚³•:ë×=ÙÂÚÚ– Úô|»ÛlDÝi'ŠÀíŽ&~0›Á÷ì¬Óp@êm:3¯ øp°fª1Ví™ Ó¼ƒÐ¬»¯Ý Á¸·¶v[¼n”2ü>´ÍßM'ÍâCn¢"Š i§ ¢³ä¹1Ô®pØñ­ªµkY«ò7ÌRNµ(Oh¤>5%Ž´xGØA•©=³ÚÕµÚfoxNà G4°¶¿¥LxLBC Q…éëÀšFAå«zT+5~7u?¬ñ<Ìgõ¶Ÿ³±Â䙵ΑØrðÎLøGË+ì­°¢0Üÿþ³„Ùõï}&b=Ì]\ä³)ç›Õõ¬&¹>HÍ+¦$E›×„&xØa­Y­Ë4»§á²hÓÙ&(Ã=Ä4%:Úª¼}ÏQg–µ ŸU­Ç,g%´²IaLWæ6ÊÃŽ伄ƒR*w…Mg›M“™ÍtW @Ö8¿Í(*94cgs«™\Å›ÅÁ+Ž„’÷4ÕzãœYez<ÅeŒû©,J—Ïqº)PNõ“côTÖA˜LëΧUÎDU7SŠgÆÔ«ÂËt?¶ÄzS|R%Þµ&í"\1Ì q‚¦žuѲœ<¯$NËŒõF§éö„B€i©Ÿ¶ à¦è?¬ꙑ©¾˜9È2k4«k[%ËÐlÀR¯›ÖÇßÌA©¢‹àð¬q~ÌrVÑx¥Ò4·¡ ?ENÛ<"TaÍš¹µaBXež‡'O©ÁzAÿ¤“ŸOÕJšQßë4»b~PCÔÌ'»E–g2¬¸Lƒ©ý Qù¸¼‚ò¯E˜Ñ7ÍP†4€YK½Ê‘xF8K¤I–vj0Ë»Z#³{[\4Þ[nA'PÉu*R*îQ«ô}ù’9?FS§ÍõqŠJV'·ã1zc*+rF›V·ÀØPóm"ÞÐoÖÿR…$š‚­­S[‚ëSòõ(f Âã.g%ˆyf,ùùï>'¹]•VBó£îeåH´…9S[Jé¾€{'†ªOP¡Øîß{ ±tt8wžZu ¥,ÂûÕ—®.×KxØýL¦Ôbã̰îS   '9|#BÉ]]#$Ù±ïHl“èÓ*gE¢I‘d“ÂBš©«Í§OÏÔ¦5†ÒèÝü E4þ¡6á­+ÑÒkœú»¦ä&¶ÇTš9H¡äï!íú…ׯ~ۖʭۈE,{Ôì4UXoÕ{ Ô~\o9«tE„É87ŽÎR#ŠÚœÜœÝÙEEv¬±2• ÖjÞLÞ Á¹Á¥Cge]ƒÙ?>Uœ«)d&˜š*ªµúê–öáwòXvteœyå'õ‹§%pîÿjÁ†°Û‚F–%üeSa¥@’…%PýrÀš­¶:¶éµå@ЈH ³ì×å˜ÄJ€ÖV˜PßöÝLƒ¡æ7³A4ã…+áõ¨n^#Ì4Å‘š„º5{JÚ…¬‹eúö}€ÏBU¥þ¢'\TÊk… `MOt³£œ•rAÍÜŠ­*ëu«¯0¦ß‰Uuq9 ¯4±«~ðï¬ålÝMSJ¤¥rêŽ îù%º¦°™×CMMÚj²E„ÛðYa• ‚ÙRO¦ï|.ë<µAÑè”–´ohƒú|áòM=焹q¶Ùêé­ïãSnÏ•UUN§=Ũ¹qoÓ+¿ýAl­û´.ÑèlndÕo³ÍKÐTOÕÞçô´Ç¨5v!ªÔYpzÒ#5$ð”ü%†«ÕzŠ™¹hÜ_x*S¡Y©¦¦rkwKŠÆB{3å1ÊÙ¥´:¶(М&W P;Èéßì‡Dv¨`æ …"9üšÂo´>x2gú§NÕS”hH¢ð÷3zzúe,hÝDªåo¤uíðº_áq)'0‹Ä0$TÔܦ¼•_)¶’@ÍéM¾ž¾l-×­á2T¿œéò.ŽÄ¹T€By¥ÃJ7ÐÞH Ì( ‘âz šï­8UöB ?iÏ«Òz fü:€î”ǶE°Ã/›ª¥‰ªà¡ÚÚ¬O»=ÔªVè“rËñÆp«ÛÁÕ£üE·Ú¼g-5Èá…›}o-‹)£ ¾ÏUI—¬<©òMdqÊŠ› E"NBÔI…nß\CÏîõÖ„tlWuÄÆQ€[úÖ½ÌY7n'ÐÏä9‚æóœª3¿ŽNS’´)EyN05¸Ñè9ž?æ=oZ©µäœR…­0ˆUPÔ @w”Ü|ýÃät)ŸŒ-[£ar a áîØ‘ûÛ*0»­ÈtÌØ\O)ñ¡»ï8zs§§­Èé½'ìL6ËŽ‡yÀÜÇæÇÄtPäVØpýÚj[vº„ n—‹kAžYŒ‡ù(Ùºÿ®cwv’Ä0d Zw T î™Rè39_¨[ƒ»´NBë¤Ö­Ú’@e#·×/jKPzÍœZdŸ ObV`& Óhcxüă·«_ËF±.&=3×¹L"Ú‡ˆv#¢]ÐØM+/ƒóyä“.Æ[‘Œ6”%$tçMÙ¿Ää)qš/šóåLƒ©€ó¬È’®¦ÿþoxÇ÷ý›k¾ycr¼ÓëÍk‘µÂ½É-åO°¡È £-B‘%v<Êõê¡è÷,Æ["@éºË`ÊA¤<59°ªRèE˜4 à mÒZÏ ¼raWœ¬ý*¨™¼ÇœA°½xŠn€nòáÖD÷&«”âO|ô¶¿…~*žöÂáÏv“!ö﹂U0 b±0E‘¹IÅfCˆÒÛ[><üñ·ºƒˆ†"â_wyÚñÀ*­lkk «¿þ›¯ûænw>b2<ÈÔ«ÑÃGëë’ð]_áßuu«)çØ Éà±&Ó‡Ýùm}Õþ¾EuB«­üìߟÁƽ!gÈ'ÑɇîÞøß:R©5<ÔZñC÷Ÿ8øÈÝò¡•ý²‹£K¢$ÒÝ΀:É€"ˆá ¥éÐ~póïþÝöчOÞC  Ù0Fý¾ÔÓ*g%ä"2&¢­?~ÛçO{Êw}ÅK£ptçÅ+ó—¡ß}Šh)83)` 0 ÁUC‡æäÃÉ[?÷éþBGª°†'Ѝ@‹°Q*êúÙεϱŒuù"ª ­Yk9<ø‘¢†Ë¿Ú™‘AªÉ,ð4¤I‚4¯7ío’¢ìÀÈZ)¥ú«'×Ì;~ëäÏw»Ý}Ï|ñÁk.¼|ኹÅînaðÖFvâàÝënýä‘;¬5'âDY¶´&"›%xÂ×\>é*Ì7‡áôæDD”R„‰(ôç—wu—;=ê9ë«ÙfaÆëŠ(&C¤6­åÜ Q@Æ–3Ó4Ë)E‘“4õ´RMÄøA¥Rƒ85øÏ¡š‡<ÎïNåkòˆ§²ÓB µ¥ŸI¢!§ó„×ÀI¢¼<ž¹Hˆ+¥"¥I•¾#¶–‹tlýùyùÛð5ß§-}€³_Þ%(ò̦DÔ‹Ý¥“µñI^u)>‘&N::7…LLÁ) iÙˆ e©YtiŸË™qo´êÁ½¨ÅE¤]ªƒ<°['½Øªt!ðÊ/÷~Ð!ª¾Žh»¿™£ê~à"îþ$1 qYŸ$1„ÝgHäêÅQgC% \ÔÜg—+m¥ÛOô}ŸÃo|ä¯üï(R#kxÀMçß?H ²´©­XÃ&éÄ[o¼ïó öÜwáe»®ËÍf§È-[#0…%p„XÏ•[Š($nC!‘Kk4`÷7J©Ñ h8Q”×bÅNò!R ˆü»cƒªûGU%˜Y;–e«J°E Ò 0 '¢ÄtŽ|ô­þëÏ}òÁOD‘ž!œ%ëU×9O{жCñúDHôÌű^fáÅHõV^ÿ]Ïúþù½[¯Î̆EH’æ»1ß_AÒé‚HÀbÀR€Å@ÄBà6Ï9Ã(Tè ðD¼ Ö’ª÷¥¼+¼Ä(Uœ·Þ¤N»m¦±0¬åF¶&³AaR¶œ’ÒYC“ïÈÿô}òÅ?‹š°Åšµ¼Ž»õç7¼ç[ÎOƉÎòÌ®ÁÇ«­Ðt?çàž8?ÐY|ÇØào[äÖÆq´§(Òãf<¸S&Ýëî½ÿA¬ìÃâJ½¾€i kÃu¬mň£9ô:KèuÐIH¢¨ ËN2Y1ö[iK¿‘“5%@J0) "Rpñ_‚+XaM˜a¸€1ŒMÁ”‚u ቌ'#:þî³wô½wßñè­DØŒ;zÂ…ÚÈ3;„‹{ùpO˜ðµ-ÀlOM5ÜïÖÚ€Žd½9@GÀ‘ƒ[8xÏ¢Xcq¹‡•=,,T<†QlæG€LCSZ÷ë.¢¨ƒX'ÐQ­#!¥E)E¡ôQʃÅSµ£ÛçC â$‹-¥\+,Rœ"+&n±¾6Äê±16N’Ž,=z_qÃC÷¿½ÓÕ›yÆ'òÔú‹8gð|2ËvPwTèÕNš2!E“¸£Ðh‰¢"g˜\°±6ÁÉ£cˆ¢X¡ÛÑ$èÏÅÌ'èb$I„(ÖБ†Vº&>¢HQ¥tcóªK)Ew µàAðÖÀEQ K3Œ†)†c ·RŒ‡9&£EîÂU:ŠéIW!éèÀZ–ÚãÖP«+ÏuÎ:àùd–í   ¢0ÆVD±â¸#èö4Šˆ 5¡Ð‚(vIúÂίbrÁzšaõX¬Ë, Hkh $]òÅ»ÆCûñn_Ó`>Ž{sq—ˆ` 6"¢£Hõ†Ã žzåÓž}ððÍF#ç³1 c,Øú¬§Æ”VÐZCk‚ÒpR.òëi{² ¢ÀˆˆF"2Æ´‡yÛI°lw͸yæ<î(tú±U°#Ϥôâ:¯›à­"ª‰­°0Ø*Xc1l?pûáQ*"CÔŽ: ÑZ¬µKþùuç<2¹hk8AAG Q¤œ4‹4´VÐJ;•§<wUgAeµ¹ü&@©*èì7ÏuÎiˆâñ– `F|M Ç IWA¬‚‰:Ä ÊxJ •žh&ˆu*˜1N2ÒDQ¬r«Jј›D”—óÿ ¥)³ý(¢BG„("J—›B¹9àø}E¨h!°”Q2¿®£CW9ßöR',;@@«C•&èˆÇ )D1`J™ˆbÀ‚¢‘ÛĽÜÈõ¼3¹/lØ–ud¨SºÚÍ›*t¤ŒÒÒ%­]]T©F•&hU~_Yo>>¦ „]h¤Ìo²†}BÝce*lÛ²“T×·ÖZ£ãQââQl°V 5!Ц D0¹ (¶pAÊj%)Ÿ½¡ î­õHA4†#²~θ‚ËANàÜ橅 J9e¤T U‚G«DŽ‘_N„œÚ„Ôáò ZÕ Û1ÀñeǨJ±aa?xVÑÍ€Õ€¶nYk­: -Pš—F¡Ê$|—= Cuš¨·‚Ê¹ùè Õ}Rú(‚Ž<"(íx‘SeªLö/§3Cq@U;/SeÇÈ?£Æ£#?n™U&˜‰&(””rr¯w¿WªôÝ0J®R]½ÍGpv`EN])í<ÏZ¢Äq¢(Vˆb­ÝÞù‘ÊôV¸p†b·¶?AGÚ±HÚy* ³ˆ#ªeZ«”‰ñÊg*–’Åx-Áˆ?7Ìò‘uçµÔHû³}Ÿ:¤ ^MQâÀ'Qe‘Õ‚ ZxŸ,¹…p0âê.rîS2ΦìD9c˜Ü:Õª”ÂäÒuü”žòx=kUUË›¹h8ƒc –2'¶yp_Od®¬0¥âX!é¨RQ)œãQk÷j +«0€f'½¬aø—ï¼²TÖ4@¢àìs8SºŠg•óÇœ0ðÙ€´qD{2ât©LkRâ¤Lìˆ²Žœ5%LJ“ã?eøC‘ãb,äV9DÊ9¤N™¿¼#ÊNP•Žn 6~E{7§«~ ¢ŸúLŠ@"PÊYZÀà’¯Xã€$Fü”áò3n,Þú㈪U@­ÓJp•SdY E„#ÇŽ®>’t´OÛq>¡ jÊt:)R[÷Þ±ñ>p¢Œ°-×[ iºJ5ÿË ¨.·DP‘î>xà ‡>›tµ…LÍö¬î›$q~×ï»o<,>Ùôt§Û•(Ž¡#—læŒJ)D‘†ÒZGˆ¢ZÇÐQ‚(ŽE G±¦õ#údy&Ûj¦Åé”í4­çK•j檵¬;]=wóõGïzÖ‹öÿãÌlu»É($äçm +4Db(Ä ê@QD=t!œÀÚ0³:p“ý©Ç6e‹uœzʰ2†u”ÐÜ}· o}ÖWîz-ÈÄ»–/E·3 8î"éôÄ=$:ÉÝîº9t:sˆ“>”Š!6fËV¥›Ñ-ïù£¿™ttj ö %œÑB—ç²ì$ùâ@d¤óøØƒÑ§.¾²÷š4ÇKƒ+¥›¬5 l#€Ý<.BšPÔ‡’ ]fCR˜‘¾ÿóù/|þ¦‡>©m–K¾yiÀ­{b äÅX{(úøÕÏ™{¥Ð¤»wù ^˜ßƒ8îPÒ ×G¯·€noÎxá僧²G÷“ô1×9Ÿ½È$(ÌIDsé9‰Õ@E”#ÚÜ\;þéÿÉÛ?óð§”VCfYG=e8œ2ë¾2 ‹Ïlô×—^½´O’c—G‘ÆÜ`/Í÷vñ ·Ìýî’ô’I¢>‘RdxBÃáÉü®[N¼ý]¿óÅ_Oº4ÉS>m8Yð¬e›´Ð:póÅ£˜VŠœ“kŸ{ñuW<[}K!úŠA!évæÇ](¥ÁÂȲ”7×G÷Þ}ë‰wú#|8ŠÕ„YÖÙÊš÷Ú’Àß7*ïÛ°wôJ‘Ùø¼ w_úÂW¯¼êüKç^²¸¼xA¿?'q"@:É&«'6î¿çöc7|è]÷|ÐØâdë´Èì*€-œå"—çºì4ù:ûÁLàstôb‘Û¾tõW.¹|îÂ¥½ÑþN/ê9g›'‹X;˜çùq¦ÓÕY–Úu8àŒ1ÍAäKÜ· Ÿtô<3Ï™Bʉjqq©7w(måÙdœoÂÅtzÚ˜\¶¬eœp¦éŽS_¾SvZñuö’(†“ ]½¤£û éåë`É1 IW[eyfÇå ˆpÅ´Yæû¬{‡÷Mü½µVݤ«»€ÄÖ²”R¢5YfäyjRfi¯Ò¶ífšžé`ìÄâ3Ðp‹ˆª€9¹—Ã47üt×1*We€_!\²TÔ×÷™ŽÓ‹\îHðøÎØÉ%\LÒ)ÜûïÂ)Aáší™grßÈ*¸¯/³²·õdÁÓ);@aNµBiXf-»œù κwx<¼öuÏmUþ>hV{«]§XÕð ¹ï¬¿Ÿô….Ïeùû Çjßß«Û.åÿ/*µôÉà tEXtCameraCamerahÿïétEXtDate2012/06/12 10:49:07æÿt¬%tEXtdate:create2012-06-12T10:49:18-07:00¬û_%tEXtdate:modify2012-06-12T10:49:18-07:00ݦç£~tEXtFile/Users/robertsonc/Documents/Work/Ice-cream-sandwich/Assets.worktree/common/AppIcons/res-src/ic_launcher_application.blendË u tEXtFrame002XXD˜tEXtRenderTime04:31.620¡MtEXtSceneScene.001kêÔÇtEXtTime00:00:00.02nå|ÔIEND®B`‚tmpNnpnZF/retrace/android/res/values/0000775000175000017500000000000012543167424017121 5ustar chrischristmpNnpnZF/retrace/android/res/values/strings.xml0000664000175000017500000000016012543167424021331 0ustar chrischris EGLRetrace tmpNnpnZF/retrace/android/res/drawable-mdpi/0000775000175000017500000000000012543167424020332 5ustar chrischristmpNnpnZF/retrace/android/res/drawable-mdpi/ic_launcher.png0000664000175000017500000001216512543167424023321 0ustar chrischris‰PNG  IHDR00Wù‡bKGDùC» pHYsgŸÒR vpAg00ÎîŒWžIDAThÞµYi´U•þö9§êŽoÈ{^&I˜B A& ˆÊ ‚( Ò "¨­`«¤— b *H£QédÅZTše†f !aJÈKHÞ”7Þ{ëVÕ9gïþQ÷¾€vK²ZÏZµÖ}µ^Uíïìý}ß>çvq<Öó8¢ëcx%~ÖUOè|¾TÌo«ÒÂ=î•V|› Šb0@@°°R—„Ç\UŠA'£T¤¼X¸½º¶Ì}M'1ûx8øVi‚Z"]J¼03Ÿ¼êo `Mz6 ºŠ4ÊhQ1“G°eZ­¿ª,b§H¤ Ó(Ä$Fñð:,,K’Ô9NØÔ©hL\eX–œuð߸õ…cT·‘j%€Àø×³W¿c\zg‚tðÃp DiáD(ðmšÙBSˆhû^ GT¥Ú!GUôS[QCê‡ÀpÌäœ(—²r)À rÞùÔú_N;ââ]#±.ˆµuØTðȽŸ¸p.SÆÄ¶VZA×Ë–dCi/óþ»ªèß?Aì*èÓBD)ÆÐƒ,RXİðp`Xöp©‡M=œeÔ“Õ¢Q@´³©üüs5‚¨‡™­ž{àymí?n*žüSß_Mí €8r \?ÊØC‡aApú·#‰°›mÍzÓâ>¶S1âûˆG‡±XÄœ"±iì&6Äq‚Vµó:Î'åÛ àX‘º´küÞ‘íÎ?ÿø°*u ‰ÒwŒí}àŽ—N"Ò¢ÚXÆ{¶ûv¶ÍþçÈ÷c¤Úgæ–?‰ù“°=Y…ú³ðA" @A`ÏðÞÃ9k-\ʈ¢ûL9³;ŽGˆItÿºKX©²"Rß>ÿ죎*@Ë×Ý kßÙÞ€K  cwR¨[Û±ÏU*£¹zÒçRçͨôb²®cãð]ˆa!&iH5Ø3œs‹á­Âúžßabálظiu ˆ…éÈË—Üó~<„F+êgæã¶ÿogþ ê–Ax!¼ðê&ÅT­ ‹o™Ø±ÛZ¡x–õQ¤É{|¢"äseR D€9“EïvdÂYFœÔ`cêXˆ3~d8Òƒ}•난\`ŒÖ¶Öê/ûêp`¼4ü Ö=·ÝÑkxßþ'âØw¼=›åta:\€º\ƒ”ê”c¿=&båºÇT ;<@ «Õ±YP‰BŠ<ˆ‚äÄqš•›oÐá=¼c8çðȤ ÃYK›Ê7^V5“º´»åþcT‚1µ_!ø6?#Üõ(²»Å—>´"ËÀKî|T„`qd)QÔ×øâ¶Q¸Z…t:+Ð*Ÿ™Ï%vûO…¯”Ò¤ŠD (»D‰€E Mžá›—c8'°©‡M<ÒD¤VqÔ»¹Zí~ÅÍõù¡ÍÇž>M}øÜ)üÚ jcù¢R•Q/JAØgÏøáUfÌlÇ!톹ïRþx?+WÜm^©=¸plÉ]øéó ¬'9(LEQ€à= ÂY5ÊŽª/!ˆ„fsÈ{†ˆ€H  @Ž¡´ M1 xÂÇÏ»ù+‹ÏÜ3(ÄÇ-س§Ü_ë_yë«ÞZí–Ï|êƒ8vÆ];8°:ýö ¡Ž ÒÛqÏW̧«2ÚöæÈoöoµWµMhÿÍæµmmÝÛVÿ<®ùSƒ|"…¡R«A¾hæ´!h£ Ôj‰"fd÷L›]>¬TjI£j]UF+ªwK]½¶vì0€VÊJµLPl ê›…Õ«nÆ” %ƒ Ò 1Ê%’ôÕBçö_ùäÆÉ…–T-:M¹£NÛÍıCõ*WõšG ÒÄÃ¥çÞ;xq€0””LhC0!€Òï™êQŠí=ɾûþäý¶E!à‘+ÔŒw¢ÒÄñð€ÇÈvß∩P,fȨ‚DIN¥I¬„SrNt3’˜‹C}l“ž~äòš‚œBj¡F®¤Ql30Æ@)¥4´2ð>…óŠÂ·H¨‡³iê‘ÆÙ×q¤^ («û4µžY‚¦Ÿdäj–%qö[!Nê"‚ÖD¤þ¬»HFN&—*挸B‰À;¸îÇ'S" ÏQ}9=¡nÁpôra.fDöÜP%sgÞ,Ù·”0M –LŽI²ßÜS­Df× eÊ™…3¼ã~è­ˆ#†q@SV䈜O¤£È›N,Üíl´çÙh-NÆóoÇš·b{åUh ÐÅl^ŃϔŠÁŒÌ­Ù‹HææÀ!xïSCD#©ä2í»!´BˆHMHöDÈy/1«L‰ò€Ò iRGT¯¢£< w? w? íåiÍ´àÝsÎÂÂ=NÁúîû°úµ[±¹5X…°uGpÜüop`B-Œœd’KÍà35#¢ÆzÁsÃfÏ\"C™*€ú-f®³ÏîeÙVHmå=qÒ»ÏÇÌÎC[ò™©Å#4y,ÜãdÌŸuúF^ÂÊõ7ãù×ï†Vùlö¥éØâ”ÒBav¿™ ¶ñ^a/Y;ýÒ†¡•Vrãh¥A!(Pd\fHçBSD¥¿ Ý/[äLK6…â&Õph(xÎŒËèéXëW9鄈/œ)C) ïSÉ>Ugø "ìœKs`öð¾±xøÉ›¡U­B@7´)Ê5fBjc´vÇÇ_Žu›îÅ%ßÿ(žXùG4”ÒYÿÃɵÒxsÛ&|ÿ'_Ä~>>pÔGpؼOa¬2Ò ( !°ˆfaÕÌ@“# !rPT${ÊJ¨µ4P#åÍ ›3“Í8gqK“Ü7â$BG[¾|îRl|s þpßRÜÿä/pâ{/ÀA èëÛ†ßüçRt÷®Á1G~þÓ„&»y 6 ßl=ÂÂù\> HnG eH9f‰•ˆ"œho‚ÁÑ ²Œê‚#Sij)œŒ×ä[ëS²ò˜=}|å¼åXÿÆcøí-ÃßŠŽ–wá¹õàýGŸˆÏóMäÃ2œ·ã*çý©Ìă="¢lM!ã\¼òðLnd@ë€jÀTòç$ŠtAD, ¦, ™jH“U„0wָ싋pÛ}?Äc+oÇÕßy¹0sÖ‚7\ìeÒhEÏN˜ÕÛg?+kf+ YËÎ*`tešŠwÌ05´×š`T3+ÂÁ›/Ïj8#­óF˜5mFæoA.ÌùÚP¤À ^$iŒ¦( ù^ØC‰gM/ ¶Î9E™m¸ŒÄJëÆ,*d ZÊR&Íôf Ez|–ÆgæY¶ª)­µ¨×ãìžÒÙ$½e8—Ž‹Åx¹ˆp¡PˆH›KÄ“g ŠÂf+¡¨Æ(i°ž˜ßÚ‹Ä5ÌnGý p2^Í‘YÎ_î5z¨FÛ’Õ¬jòÍ$ÉÛ&‹ Bi-JR£5Xt–éæŒ)¥ADP¤l–²ì}ì!À';rÚl7<”jp`¼¾›‹šñ&ië+ðÞBë€âdDZ*cUôõaÁüƒõÞ³ñcÕáý·½ølÍmc)EDŠR˜µ iš¢§g;Ê4S'Î7¨µc]÷=˜:³Œö m`/ðÞ7d…གྷB‹3~šÙ²iËS7ÿø™ÃÿðÄ¥jõ3ÏÒ•‹ïöW]¹ÛÕ+ºV©²1d‡V˾uÿ‰¸xɱزy¬ dТŒj¡ZT³óm3ú‰]§v컼f»ÏÉ­ Bc@¾!> ò A›µj#ƒ1 ¥*£uLžÜ e2‡'j¸ªxÏâRò¦©ÚXªúú»? ¢;Â0¯;§ÂwL˜FÌÀÐÐVÉ€\؆¡7\±Í¯Ž³¾¼ ­ª¬…M-„,:j6oê¡IÅ£$ß•^ßvÏMNFO/•ËR,´”K ÀÔ”HÍŠt¦A¢É{&¥T&‡œmÇx+°©—4òŽã8®.îhŸòÓ(J”nÙÂ/<áñ»†ðׯ;p|ïgçÛ$QQ-é¦ÁÁ×¹TØûŒJuä—¹|tvtI>_ R€Àg—dþ¢”†R&  ! 03lj¥U©UG=×nNÝØ5â׫£N½¾&âΙ1 áLܾü™ÿøæ¿Ÿ†$­AÄ£T˜¨.ûâÍüâ+[pÍù¶lÙ81Ì¥T.Q¹\F>_D>_–¶òÆ •ÑšD¨5Žãç,ÒÔ¢Õ0::â⌤…›Šù ŸJMÐ2À‰M"‚< ¿ºú¯øíÔ1ëåþ_[r¬Äè˜X’/߉¡¡~Ó1%àØ—P Œ¡Û˜°uRj',8µ¶É]wkj޾úë¯oXw¥û0 µ1…pr¦\‡/!(Gªs¦võ± âÈbù÷ßù´r§Ï‰¯º(ÛÊûñïöbæô…q±¬ÓŽÉ9”[ Q…UõšÀ¥$i¬ì}?M8ú[(˜Éµ\>„2|!‡0 ä`Hƒ$(¦ð.Ç=/•1q·×\ºs|»–ÝòY˜P†AÚSÓÈ4‚@Æ Dј@ þîlK’†9… G(µ„9“íôx ['A‹‚gÁ5ߨùàÂÆê“I=}ßèè¶÷pÈž/‚ ôèýÏqIÏæ ¥Ý‰ÂáÛ†ªëö³í\r\jGçÍš=çêͯÒg¿ó=ùÕo 2Ä»þc¢%.Ù±qo%tEXtdate:create2011-09-22T09:32:32-07:00¨’bÌ%tEXtdate:modify2011-09-16T07:27:36-07:00wjñTIEND®B`‚tmpNnpnZF/retrace/android/res/drawable-xhdpi/0000775000175000017500000000000012543167424020515 5ustar chrischristmpNnpnZF/retrace/android/res/drawable-xhdpi/ic_launcher.png0000664000175000017500000003405712543167424023510 0ustar chrischris‰PNG  IHDR``â˜w8bKGDùC» pHYsgŸÒR vpAg``xÛÙô7XIDATxÚÝ}w¸%U•ïoí½«ê„ºo÷휡É9QT…QAŒ3*¨`#bz&ÆÁ€¢8`ÄБ¬"D Mjhºé¾ÃÍ'Wí°Þ»ªÎ9M îožu¿úNݺçœÚ{åõ[kïKØMÇ~?fÓ7°šß=°¶`·l~[WT0Æ Qs!@­2‰Éñ:Þ}Ò½»déwâöú¯ñîþÿÄ%•sp”z3J1?µm*ÆñÚ#^{·ÞƒUO¢P"¼ý„{v)]Ô.ýöŽC"ÄUOœŠ2Ow¯]ãöY2ý%‡M9è#N{økZ·n*ˆ¢@Ôr:±Xõø|ÿŽãñšNÀT¼D‹1Á „y¨£†6!B$ Ћ ´PC UhfÓAá'±ÝlÂQáO±Âœ‡ýÔ¥x\¿ ^\zàôòÇ帳ý˜ý^.—^ºc²Ö­q–ÅÐ wðq½»œ.bw1àO÷-C26kÍï™YˆïûËçW­9YQá»Û¶ŒÎ™;oLJëâ­ÇÞÁ}xÛ Ôñ Xþ%àa&†ð;4°‰,ZÄHÈ¢IMl§!܆=éëé G?Á:û9TÍ q1„`GXÞü‹œ+_`#¨mœÜtÑŠÇ7œ¶îaõžG†VaÓš–ˆ ÞÛÜåtÙmðȲ&zÇÄÆá{…×v2©ühÎ"yìŒ9ý‹fΜyÑ1S¾isX'¿8ôè=QÅëQÆlh$X@8X’hÐ1ø!€ÅX̸`±X„GEŒï’Fƒ~Â~§ˆy̪ŽG[Åúá§pòÜ“±Ò#+ùâ“åÉZõk[7FO><6¾ò䚎ބ¿ÞZá™óV>˜ìrºì6 ¨™•àÅ?Âø†©npéâsg/ûÎä¨û]e²(ŠÞøý;n{ëæá ö¬wœ(Í\„aó1Ra¾Òx½8ÜE˜e"L1Àb·'…cøpá>S p¸0Õ”0ÍÎÁ‘n1ŸÁŠŒœ'ŽQ–-<÷·bh4Ä/fßí–·þÔèXå°µ+ÇiËZ÷õù{ËÛúsC^ö™q;ô¸Ñ®§ËncÀìE ¢5B9^óØ V´mMù}cÛZ´Ö(•K_‹ß|ô­¶9KÔ÷ˆa-pŒ©Á¨OíåP{#ƒþCãþ_&¸ì–E8ã¶^ìwÛÁ8çöß¿=Æ÷¯j¡r‰Fó¼1¦îž¸GÍŠì×ì»Oš˜¬pÃÚQlZÓºëO¿l\tÐ1=bù±[Ë{âÞ›[(÷ízòìûã³—‚V¥ˆhÊ( ¢‚–qÓYgÔ™ÓçñOçôª¸•\/Öm?íÍgþÐG#Á¥ÇJþ‰aO5h`ш,  b$¨ÂA@P „ D–m°,þ`úýöæ¶;¦”§L,¡ó0‹ûòÎC#>zßHý¡»Ç_û㑇ÞóŹrõrk =}Ó$~ü•Gÿq«øÑ½åFÖöcÚ‚šºà/·Ÿ¿âß9?|{TŒ°}dü=9õ]CšñQG­ãL1$B `80µ0Š Á  f &†„ët½`.=d¬úM£:õ+þ?££ã\ñàv<ñ@ã¥ré¢0ò«Ÿ|оùC@HÀYÂO¾öÈ?žh½£#0ŠÇðÃ_ý›·‚>ùþÈœû`ßüÃFnZ¼Wß!‡í³Àì7ãXÙÄ6X.bÐ0¨ *L>pÀ F êp`xXX8§Ù:ã¬u`Hr}¢¼exx{ÿË·W=R¿î²Ïè3>~iŸ½æ×#î«?Û‹¹gªÀgþmׯÿ»«øl41Ž^ b‘þ6îk½ ûõ¯Šè3C¸ovu묩þu'Í(Na‡~êÅ\+É:¶F!zPÄ4è…D€À0ˆ1 ˜ÄzXhØ”ø–-¬s°ÖÂYc¬MâAP”α}ü ¹á‰à­s—Òk•J°`ñ ã®M6àÁ‡óN¾s—Óe·8áÇÝ¿"ô¡€)¸&˜½{_+¤Ùˆ§þi&޽{ßY{¾¬·ØËŠç‹ìGML¨aó*Ìû Bp€ûÖˆóh&ö–€5ãXÎtìùu‹Vq+/wÓi?¢#x Ї(cz*ñ¼Ô»ÜŒ†1õHP÷fÖ«a¬…5ÆXë`µ…1IbY'–’¦@«N?šØÒŽÑͤ4P'’Žu‹AЉÇ_»l—Ñg—'bóåIhòÖãvÜ*CÓd óÌÜñ±Aìù¥ ÞŠÝ í/"lÆr„(¡„(‚ÁÐ0¨B£ ‹ /; °°éT,Œv”äf0 0 8Ç^ $X…ÖHíÞZž>2]7KgÌn6F6È:íØœÓ»”>»TLÞŒÁñØâîÃqöâ×* 615Þ;ˆ=/`7aõc‘(aÃxŠЃ¥t€††F+|88ƒàR§›¹^ éký«1F[ca­…ÑÖ:˜ÄÁ«5´ê|ÕȆò¿Ì߯ª'¶’˜yÖ¢ql[ן|óýÏ;v©hè­ØjB€2–¸W©-ö SÁØé=˜ó p›±\”D€)Á0XhXÄh¢Ž1T° 5Œ#A ÆŸ`XpÛá¦Ñw¾ Ç€³€sgvH%ßK?;Jý™¦@*Ò$Ý«{gT.^}Ï,86’´u]0eÑ»„F»„·¾ ÷TÏ!DÍŒÀpKÜXÿš(ÑŒïèÅ0žB“«`UŒ£‰ ,Ä00h¢‚ $©]w™uï8]›ð#ÃY†µþÕ9ÀZ€-Ò{k‰nÂZ°„s 0)ÉÁçöÏßtn«¥TF$‰ƒN¶<ºßÿ? ˜R8Ò XSă´·:¾P³¾ o †q7i·¶!4f=Z±IJ¨ÅUÔÝZ®Í:'¶I¯ t~jhÿ㬱ÞÑZkÚ§³ kl Z'HZ!fÃé͸’û€¤”ÄD|¡ŽÅ9}š¢U·˜µ¨…O\~ÀóN+¹+ð‚×mGÿtÔjã˜Ö·TÖ㫨÷Ür0ã]DÒÔxX5â‡hÚqí>Ø3xfÊ“QƾKE€ô.•³Ø'Í3«Ïìcý4Þ·&µëÆÂ9“þn­ƒ³€6 „íÁs>f¾ §ž„f2‰í• DpÎ’³l­¥¢³vÉþ‡7~–˜™ê“€ÃÑ/ƒ»ÿ¸õy£Õ.Ñ€=öÜEy ” ¨6¡Üæ‘Gg*êý¸#ÁuW‘õÖ$LÂhÆpÍ–F@ÜèÇ@p¦âx4ã¬fm µ6þL´ö¿kƒ$ÑЉÉO£ÓÓXm½F˜L3­¸†Á⑘Û,¢ SJKpü’ObJa)’¤áýX !¬ ùò¾éú´mC‘S‘­†Ÿ›5ÏoÜò¼3ວNE£fqhϧ†S¥æ¾ž…ï%g%ºåš­ µZUãÐlUÑCû#SàXƒÙ´Ž¡±d„Õ‰E’è6COhÝ·ÐÚæÑŽ1®ãÕÁYB#°³°.F J˜^<qÒRSÄìHHź Q³¡ œâ&€<ù_È€ëW €Áøã†S…Õ¡x`6\ôfk7š5ª7ÆÇ Xí R©o3 HAP€F² ›ª·6L%Ü"É%ܦҮ¡2D§„7í3}o§c PÂæÉ{±aü.@ŠN+[vÖú±3;AD ¢C§Ím¼ò“o¸±lUæ,­ÿïe ´jA‘Û:†@ôŸâ,-ˆ“Ä5›“¢Ùœô„Ô‚‹®?€Ç7_k ¶U–ã/?ƒºÞ g´Ö©[£¡µöf(ñæÈhƒD?3?©ôëL tæˆ-\Jà;Ÿü<ÝðÔ[ã¸ñ/W`ýÈÝDƘ4"RÈÌ÷&Ækc8k±á …·¿ÏóG³ç“7¬> †' ©€b¹@‘ìáñÉ­×G…Þ“‰à=!Zùc Þ±5¦AcBZDA/„dH)"¨c¨YÄ‚4†œãôžK¥˜á؃³ÞI»ôÚ9oâZ­&X÷`bb…B¥”wøNÀ$¶®^«‰ÊD2\¯Ð±ñXßS=3+B(çš…|iÅóB³çU¬u a`4¼mûð\cÝ Fjµj"ÑMÍ©cä4+%„Q+G¡”„E«a­K¥:³ëmdL[ÚµÎ2]ï¬1iD”Ú~›2Á:8ǰÖ…}¡ÁÔ>¨ ô fé! f8vD–dg›>ó^8§EOòZ„Óß±ÿÿ>ÄIõ À+ŠÇ€¿ÀhÛ›$-' òDá” þÌL±‚³Æ¸Ž˜>'¶±9¡í×]§u9¬µa(ç9K:0Ùp`f8ga­†5Þ\ÁƒÀι~íS@±O»#>ó%84!eð¼Ðìo2AëøƒXHc„‰³OFqdñ ¬4ÀC+VÂ&›¡Ô"õ×W›#÷{õEÆU>*¥0 ­mSBD9¦CùpÒûÔ6;D䃢”h "ÿê¡o“³¿ç85KÙ«—~gÏ)lö»7_>È2h‚5›ÆU&brÄ<ôðíÓpÙ_íß¿dqŸÿì»Q{a1‰ € 0á†1šlÇðØfôpì´âƯÆ?Í»êÿMFùs€Êhð·ðs\œÿmIt4žhø¿K; u$â¤ÎǶjk’¸•†•méw¦câé«'‚K£–Ôyv†’ÚA§&FçZ‘‚k™Äç÷\[2-`ÎM‘g’÷ žiÙ}—j‚…µ†Ø3hɬEµYЪƒ.ÿÒøäGF " ^0@!I*Ò@x `ó†a|÷v_OøþÇý} XËó˜àÛùBlÆŸQÄR¼ Ÿ¦ú©DSi›] cjX·®™aïT¯m·ozѶrÐYcuBî:­ë†¬…éºg=³rb».³ãm=§°sJÜL:Oæ¶¶¤×Ž‘jLÆ4瘘 ÖqI*=ûwÏ€  ªøÒ%³ISMYTeŽåÎæÙô1ÞмN YÇF¬~|#&Ǹäú£ÿ6<Ö:`w;BHHæá$¹ wŠ8†û1‹gÓi¼_pF›CRHˆÞr Ö1%µ~ÔšÛ§3‹©lc4`´ƒÑÞæùÄÓ  eöºϱ°:%¾Ë¤={¿íbš1mF¸Ôî»ô»3F¸4jj_#ý½ óÌ‚7uN0 4[cõü}Ž»c#5ÚV­Ë¹tKHc0jÓ€f2ßÝïDÅH)¬­ôÑì¹3DzH\|Í‘Ï+Ì»QP FÌMª "Dv÷8€ n:0ÖÏÌÒ!±½å9nxØÊʰb÷£>PÒT!3+0I‡ƒ}½^ ÒˆÈ3Å¥ÒÍ]‘‹u™ÙèÀu\Û±îxÝ6-¯œÛ|NRçü5ç×Hái@€H‚¤b1¦–eÜ ôcŽ;q/ÑWžcüwƒ>`ÖÛ°ü¶u¸â¶'ù‡·•hño˜éußøÞl´vkWÖF·µài€ÞNÁ¸Yû¼ ¢/šŽF\{„sÙB²`zU~ªJ¾ÐÂÄ¿ºïÖ7¾V‰is› ·axtóX3Þ.L£Ÿ¾òšhò€—ð“õÖh¡Ùªq+™æ`Óø’ $È;ÐÜ¡v½rJäËÎ;ݶt#wÄ.“äÜ ¥ŽÙqÇ{|I‡8­šb@øJšµ:q7‰š ;¢¹Má;›Ö¶~ôÎ7Ï ¤ íÔiýGÕ±îj'êo‘÷Pž1Æë§OÄ[g5›ýšÍÆë;hî¡Î‰ÛN?yF}õº†¨ŒY.”êU‹;¯ÛžÓúi%Éß>ôZ|ê’ÍxÃY=0Ü¢ +ÿé>UüÀ”¿Õ Æ-BôA@`D?…jm|¶nÊc›µàlIêýwÝxïŸñö—ŠÿiœrÐ ¾ûá-ÒLûV\+.%², ’a 2ŠQì!K‚@ ¨÷EÁ‰—>ü—a¬ª`Íê-42<‰86ÐI’Œ¨ F„¨(Q( J„ @PJ!*H¡DX b!*d ­þæOCVk:¬µ`ÇÐ #‰-â¦Ç”’Ø"i:´Œ¸i cFܲЉƒ€‚QÒ¬³Ñ7eʼù³§þô¾›7¾ú…¯é}+€ÆÚ§†ÎélÎaú´i#jÎYèØ¡ÕŒÑl&hÖ55gê÷²Ysì«üfb´%û§¶ÕŒŸ™`gTG+’{œÝ¶±zÜX4tf36ä¤ bÀ)èØP½îDµRO&ÇQ>V¦ïßuñUé9èȃ޳ϋ1k>ëGW­ öXÇØº.ÄÖ #[±í-LŒÆ‰Ñ¬[èHÀø®«çtì˜Ê0²ŠñNH ¨€ B P%zú”{н=ý=SŸB¹Gr__?&í×–¾B°Ë¶nœøª¿âC_=ð™àt#iD˜AÀo}[¡YëR(€tns3»j´Cܲ¨W4UÆc†“jOo¥Šþ8ÇØp BHE 1Š0  ”D*„Q€Þ¾³ç÷A*‰PBBé}dš3À@äNZ»ÎY¼±Ý3ÓÃðN܇ª6Ï~­õ¦Èhß#¤‡8ö&$‰’–C{4ëÖjT'cá¬ct‡É£¶Ê}(Àgï™ÍÏ£í33@Â1S.Ãe7¼:Up1Á rŽAM!¹sëˆ ¡zÀȳaçÚBÆ94‘Í“Kˆàö@ºh‘Sß?/S‘´ktÓyGÂçS¦ÈÎ@;Ÿ]ÆÕ”\)B©œh;Kë%̺é³.Åfv0ev”Ûˆ¦cöÃe‰8ialrbÞ”À$„‰ÊvcVíÄ-#²ë&~FØÌtrñCnh9½fKxz¤lGâØE&Ÿbq=û 4+Ý2ÿ?k@·MXZtÊ%Š»˜àR"‘oE–©Öضp¾¿ÖÛôô{¼HŸãÚZàÒçSš•µâ:šÍ¦”–àнÏÁáK_raë±ì‰Ÿà‰M@ÝlG±Ð%C0;f„tè XÑ;3ðL(Øå¦ ð÷ÙŸØ:Ía—itÝY<ÀpÎVsnp:zfpúƶæxc9?oÿ©mã²  ¿x¢<}Æôr  ­ö`¹Îì·Kë"³µÜ5!f@ çb]Öå½pܯÇþ OFOiZ.3¦î‰Sý,Ž–¯þo<ºþZL6¶# KƒbJ|Óe›;%·SÉóà&ºÚ>%MôœqÌʇâ©`Q—}ìø ß•G€ïÎ<ö,ÐaÓüï•T ¨ý n¿/•+–* )¤dΑÅL=3­I}Èñ9—ðö–-ªõ1°˜3pZôZì¿ðd„AÑK[í fN]Š—ù1³ï[qÿª+ñغë0ZYƒ@Eˆ‚rÊhÛ2fs`ÎBÝFt–ßìœ`Ûff6סc‡Põáô>…ÓFyNFv03‰g$üÓ •›&)¸Ç+°ÿâ—cÛøãxxÍÕ¸÷‰_ûlÛÙÜldÓôï¼É–z8BH‚}êB@ghž…)w¼øÞ.á8’Ž3mí"÷Žƒgv©ÉËä”öéNÌ?Ò«`–Á23,·ŒÄ‚:CÊÎ8;s¼ìÖ&¨TÆ1¼žÐzâ;¶pŽSÂÿ}íK”fÑÖ0„ ”Ô¬œ0:êQLðŽ>i§^€@sÆLÚöN‚µÓÎpÔk`­Õ€oHùúl `X«!Hù¨“Ñgñ@Æ`îv:™0˜™JQP(”´Bmíè–|ÂLHLý¥X8øB\ôý·àÌw†ëÿðÀIH!ÓŽ†ç vÖY¤T¨WøÁO¿SÎÜ —ýø‹Øgî)(ÂXƒÎ€"mMDô T˜ž“ˆ ñØÐ­äœéžwWFŒœ¡™£v©éÉ^m7´³’$cúÔE^=(ÈqŽMtp¾##ìº ˆTоÙ5wÄ‘:Ýýà '}]p-æ-™ŠÏûu8ç#/Å]wßì1!!RFX<Û‘pÌ )$êõ~sÕxÓyÇà’+>€£Ž> ?úÖ-ø×S¿éúaLÒ–ž|¸¾_ÈçÎ XšÈ-:¤=û½[¸”,´}jçß:ކ¡QXÌ9I Ê¢ v²Òù î$™ˆÙ±Íb¦ÔÌd¬¦®ÁäƒJyÐ^/ÂEç߀»¸?¿öB|ú[¯À!|%ÞpÚÇpÄaÇ€ÈKµ ,9ë>œóÅo)%¬qøýMWâW×^Œ§6߃C<yßU8î°S!„Àdeõª Úpw‚E; “xÝÆC" ³pÖgæY&Ðaœ@ɰ#úIÇËÝã~Þø¢ËqáO_à‘H$:œßøHñÓ d Pè ƒ³,4˜2>¤ðB3žXg¨/>êM8êÀÆM˾knþ&>yÉKpøÞ¯ÃY¯úØÿà”Ø~¥¤›šô Ürûïñ‹«¿Š•oÁ>ûì‡Où¼ø¨7¡½&±‘@;8bß‹û4 Í’Ç»"‰z<ÑCåÎ`²Ævä©Yg˜ÙoV”ƒ‹ô¬‰ E± B.m6`±¸,Ýö6›8myã'×=e„!Òì’ÊÅ©8íÄฃ_‡›ïý®¿í»øèEWáèý߀·œña,Y²§ÿ¬µ¾‰À_–Ý+~õŸxtí°Ç^ ðÁw~/:â蟕3ˆr ±³¸ŸGÖ™Cí2ƒåXJѺ¶TÈeÖ x=uÚı¶áÚ<3ú{§e#€ °ÁŒ:€¾Œ¹¹4w2"STße@,›¿©#É!ÙíÀ:QOIµ18u!Î|ùq¡oÂM÷~×ÝtÞññŸãeGŸƒ7œ~..\Œ‡½—ýðB,{øwØsŸ98ïŸÆËŽ}æç –i‘§3;õ¥Î"#ªoôcØÆIs’-S>ƬK; U;ÃQ°sìœXúœ:¶ž¥(J)ÄBX€¬͇ay¤C)­VII@¸z6·^Ù!ŒÛI¶¾#|v;wƾxë+/Ɖ‡¿×ß~)®ºá›¸mÙ•X<çPüõá10³€œ÷)¼ü„ÅÌi‹»$^Šÿy=zŽˆv?»Ô¢À·Â õ9”夹·æœè]BÆÈ…¨ÝŠŸ5Ïâü!Úá‹.D´£*Óû¦DcBQ©”«CWvÈ>½wÜ‘õðÓbãnF¤Ùmʈ…³Á¹g~¯8á]øÞ•ò¿^‹ÓO#Î>닜:/%ª‘Ì#¹ÿéÈ·#˜“õÄtÔ”"$I¶WQ¾ª²;O+bÀcbÇÌNz‡˜gÄÝcÚigœ"§‰4ÃʦN©Ý!LpŽ™ˆ¢;:25ͤ­ Äzy¥Ù°c c5–Ì=/:â_0wq ¯yÅ9œ:Æ$`vB=-ã|ú÷µ§•Gu.ƒ„:q›Ì¼HŒMnI×ø(ˆÐ`fi~†pÆ4&ü·§ùºK’;g©\B…PL:Oµ»b]í«JŽu*7å;ŠÖ;:ïô&ïäoÏt’i…Ρ:Ù„NŒMg"ž“ìp0ˆ„o‹1 )©]¹{Ÿ€V«F£æÍwú6Î}YgÑIHÁÎ¥-Ï0îöœ<ÈhtÖ0–½v“|§ è\4 n—Ü8çt§p>œIáÕ”vhÃ{ZtIÐßΆ"ý­G:ÅÎyµý*åƒK…œ”RPRM!"å«J ®ˆ¦C“;ü…a$@©ásd@æ`‰h‡*\Äí Åé ]§Ú!âÉQì<ýÿ{©·³ë¿{´“{ÞàdIXök¸%• ,AÍ,€ÀÆšc€uëZN´Nî</¤Š4Ó u†”ÙL¨# ë|·µe‡É·ýÈß§i€ý÷}œÐnIods$Ñ¡«`šq½f&ç:‘È<ž³²+ÁYÖã“õ&ÄÚ·§·âîuÆ;× ù×} `ª#µi]ª–:ë4H‰™.ýƒ›Ü¡m~p“þvúí@ž¿G ºò™¶ÃÍjØÎ™|ù’¯I€ˆ)7];‡ò¹0òß) ¤!.ûÅ' ewQþüŒ–ÿÚ§ú”óÌÞ¶ÙÞå\ÛQM†)šÎí Öþ¦Kß™®ëý›¿ƒøÎ9€¸Ý6˜ Çyç©T,! Ê^àŒ 9Ï3Ñ!ŒmAôÚ¤D—£™ÉÇþã,£>¼óÌ/ PÏD¾qjãNFŽˆlWÁ³0²RÈÆÒá2¨ÃVu…°í€`L+…¥ßÃçYu¢³B÷Ü ï¡jã£<©àؤÑTÇØàÁÄ (£õ#ßOÈ)‚ JQݬÿ³”ÌZ%ÁDŠÙÛHµ@Òð™<üýl HQ@ßâßÓ¾³^Rc¦Bù®SÙú*nW‰8­×qZÐaÚµ@]¼Èóg…e¬ßö~qí…Ø>²%-¾“¯b=‡ð†Ÿƒ ËODP*ÄÚõ+ñõË/@µ>† s€¬íß´nAí·±aÁ2Ôr^áÌ!§£§¬˜ÙxÕ ±¤=¨F¸­Ú²eK0­[¿–ÿýÂÓQ¯?KIšu‹¢äW¸T•¢´ÞYAÎYgÍÝ1CÀ1;£q“ë:¦õPˆzPÈÒU[î´’Wßúe¼ï“'á'¿þ:êõ*¤ôÙìs)Â<“Ê/¥Âö‘-øúåŸÀÙ|n½û7(‹¾† ÐáŒ3,Çc[‘ê±RRµô˜†éùt£*Áf@…4S î·p½®Ç9S²º%Ï j“¶YoüG’X7<6$¾³ŽÇW.‡Ï ½÷î‡0ýÔY(Ò"÷>„ú¸úê䄸gYƒHkÛÎù5´Æ[-¹Y ¨:ie£æ¾}Ô13¾ùªU(•¦Ú²™ãêð;¦8 ÚK³Á¾9kÉÒùØ´n ?¾úøãí?Áÿü^¼üÅÿ‚b±˜VÑdŽídNx碟-7•RBJ…ѱí¸ú÷?Âo¯ÿ.&ë›1cÖæöÎA"Eg³äKÈ1,†=°T( Õ@Ò¬ýJ©X›Ô_,‡sæ”J~O¹$IPÓèæ¤´‰Y׌'?Æ{Ý|î§O—ÿÇ]v²rŒ(zpÍ/ïÆÝ÷ÝŒ¨nÙw@÷6+ÁYãÛݶÚh9põù2žµÑ~Qí“ÕᲪMhTÍ·7¯žø”S(©¸¿¼‚d­zyÔŠ» FX`Ì]8‡½ª.ûÕûð¾O½ºí·aÒÃÎu‰ü1VŠ€úªX³ÕÀÏûmœ{þÉøñï>‡¾AYˆ™s{Pêo/ÈØ”¢–?±ãz£Ù¨]ðñÁ 'Ãõæð‰ÃckΟ¬ ÿ¾Õª=ªuócZ7XWÿèHýÁ:C¿í™Yýå™Î}Ó¥(J¸íê Ï®ï9ÿtüäÚ+ñú“O„åFsRÖê×J¡ŽÛô®0è{…Yìd`ŒÕ:~\ëæÝòÁoœLvÛ¬´ ã”v|x—µúe™ AP!CHÆÜ…˜5wÛ¶¬Æ×ü\Ëxý+ßãŽ: €ßzŒÚ™"@å d€$‰q㭿ů®ù6®ÀìySpð’Å ‘n{Ɇð‹³Äª3KÏ3á<ÙJêU“œúo ±}=ÜÒäó*A½ÿùés®ºhŸ×CMïîú.Ìû/<‘ÓPɽöÞÃnÚ¸ §¾}^xì wª­;Õ€Oœs%¦OT< QXD½V·¥žH&-½>IÌ?ûëò7OÞóâ±Æ£/^?~߉•ßì,nQ'~qñ_P,ñ᯵²âFwq¾@Ž" á— ÁPcÞ‚AtÄLØûñ—Ÿ…ó¿p&–?r戭 BHH¡pË×àܽ_ûþ¹°áFpè̘Ý2d@~ùR@¥üºFgx;:Èwqƒã¸k!‚b‚0ˆL”E…ê+a5ôæaèKþU`ÕS˜/„rvhÃx`ý5hš¼î¼EÏp×O€FiS{§!Ñ Ø¶§¯D*ê#/~WZØ”˜úП‰d¬T Ä5?_í W¹^kb~ß«`5VÁù„Äutƒ»m8#ë‚n‡ÀB !,æ/šý™…õã·à“_}5>}ÑÛ±fh%DºØÎ:ƒ‡û+ÞsþiøìÅoÅxüæ,˜ :HÅPʯΑÒ3AHʉÜn:ÈìXŽ÷;c3óГC[bH âõë¶BkëHóµßíͧx0N;aT*G0 mØìPê³X2ý Ì™¾®¼th§t~Æ4æüÿ<·.»{/ÚÅBBhü×îÇçÎ%kA!´‰aÌ®6Ö9,Y´'í±Pظè‚Ðàdýþj¼V7*„Ìë%.»Î†Âñxgy/_ÀF‚µ«·€Ó0u  ªpY¸Ù“(ö%X¼Ç,Ë B:´Ÿ×N¸:ÁÄ—Êv[IWÉ‚Y`¶d6oÞ †‡7¾wõЦoí½t®J*eSèuØ÷¹ ¥¨YúnLÔ†°zà ˆã šUË¿°ïýâáøæ'žy·Ýç”G¾åC"P$º‰,FOâ\ºRE‰"õ&®ýÉ*\xÙ[pÔáâÖ?ß*fîå&«cß«·¶¾=æ-Z.ʯd;,UÚ‘(™¹ÊÓ|îXƒÅ ÃÛªh5 æ,èÇÄx ­ª@ßÔ"„´é ÉlíYÇ32»žæ.yrÈ~ù”ÖÄEDr6` ¦Z­ªmÃkV(¼¸Ú.ƒ0Nsu²…›³é¹îY¿JÜù±|Ûå¸î·w"*h6b±m|”÷˜·çŒ‘± ·Wš÷AS!RI(A~ë‚Lò󡵛̺’8¿:Åo²§@@ nù:!…¯ˆ6ªÛ!ÿû•:9Œnýª1ÚA €HÎlÁÅqCŒŒ¯uŽÝ«ØÈëµä¦kì¾û‡'ŸX‰;®}^hö¼nܺx¯pÎo/éœcIaÐWãŽ8iÒlÔ¬±† ( "Ø ¿µ°ëØëŸýâ;öûþ§}6éºògÖä—³ ) „‚RBªt©«ò½é‚ pàk²¬ÀVÁY ktâ+^lK.Žc[kn—xXƒøí£• ¿)ÊòΞ²KÍÆÊ5cÞ¬¥XñÀ¶ÿ} ¸éÚñÒWì÷í7 š­„µ—}{leÖWi£&q¼'ÂÇ‚KSª^G`§À¬àlJ(Vȳi–ˆˆH A@ˆ‚"HB©$E2‚ „ˆ"‡‡`§àœ‚ÓÖ(°SNYm[ÒØšéÇ‚0|Ëððºß êGq‚«×Ã+*8åÁO/½åy£Ùó¾uñ-×?Œ¾|_ÄqaaûØ“,¥½¥Yã~øw¿zá+²ÆÌÑ&ž§m F[-"”S©)P¢±O|+S&(À)…  !D”Â]dGâÈ¿ŸÿÎ3Øÿ· )ƒ>ׂ¤{2 ‚oO˜}N¥6öX”äž‹¹Ï¾÷Zœøš…Øwp,Æñð=Ïôϳè<.øêipÎa¢ºŽ-¦OY"¶®¤rqº=鸳gÞxëOWm}¼·ÜpX©õ ûQú TÑwF{lÒãAdÁp "GN»ôÓ<@¤ë„ d‹»eGiµƒ²pNÃØ‰®s½^#çô]Rñü‡VËl9`¿CqÿËä÷¾øˆ½êŽ·àÖ;†0Y™À¾üüÿW¥]²y7ÜyãJ¼àŸöôö àÂ_Ëk7>ñêVyÐEkÖ>õ®uCC¥ñáÕ‰˜õZ­*Zz±‡vU8nÂAJ%„ªAIQ¡*P JªEA‰U BTB©XF¡PDE£* åฅ8™Dµ6ŠÑÑ­Ø´qÆ·Y7º âñ‡ÖýÛŒù…ß]rÁýõ£^2'gç´ûý?Àš§6¢Ç3–ÿyûÿ#Už~ì2 ÈŽó¿üJÌ™3c£˜2µ>ðæËù˾;ýö»®}båªû§µ–›uCIìkð›l‘DI„¡€R …bRû§–ïB5)HMB… ö9…b»%F­dC¢“| ã$6ˆãIlÒ ?,´6<пCY[¶­:éfß¶iuK,Þ·G­ÜŒÙ gB¿}ÁåŸ_¾Ëè³Ëÿ‡Ì—>z¾ù˳ñÞ÷ |û×çÂ(tA$¸XVPŠF:ÝŸÁ$¾Õ¤ÕphV9݆ž­¸auC¾kù=›ï?þ „¥ià m“à?ó¿¦\}ý/o~ìÉ$H' î*Š* )}ÔF2 „‘`N۪ΰ+î]±ÍSpðK"T7ÇÍ]J|`7ý+©ÒU"ì»Ã–Ì;ºDT)õ*”zzú”ûŠ=…²D±¬P,ùëBÉ_GE¿åŒT!Ï9Ð[ûWíúºË8™6záœãu*Ž¢…b„b9B©¢XQ,(ÂHBäÑ>ÃñçÞu3;4k„§þ<Ÿ7¾ý™w9mvÛ¿³Ú-Úƒ{[¥È„¡ðxŽfH%„ð;\µ:f XòyÑ„§¿äH‡s»ûœªÚ¿ý[kýÖPW8€Ç‡¿þl.zíw8}jŸ_ǘo,›ê\;ó†þ–Ÿõ }çs^È!y•±CÖ29VA Œp8:dì¦Â1ÃthÐf/ +ˆµÂŽp/‚%‘!:yë*ܲçrN˜…º]ÃÃ|—õ<˨8º*b©Ñ!£§–]Úzcïß9%9‹÷(!8Œ ˆ`‡âšäÄ{ö\s÷¯6î)§/¿¸×QûõOÞë×6Ìů»í ¯):ÝtÃ6ªÕ*­†Ãé.YeìÒõlzøÑë¢ÈÜôî Ÿcïܰÿàä ¶9’×Ã’ÕP¡‹£§±¼’} £|€¥ÂÏÍÕ³ÍlØ" Ó½GX?ºNÖžþñ ÿ±!º¥ý±Ïnذuì®_4ºmh0³ÑÈï^wø¹â'³áegŒ1ºÄòÅxžÐúÌùòu{‹{ÅÊäMyToõ»ÜæƒFX÷œ0¶“û}Âr;ÍV:4IIéÒ¢Å:Ì‘‘á¿æåqAñ^ñ®xÁ¯^Ö¦—µÐ€EÅ›ˆ cÃ¥¶[ÝšSŸ$±Ô†R¦·qÑ—ŽýÿPžVO>Í镽XÎ0c‰ý)Cíð=a£sÛs´ÓÕì8z©¡é§H5#Ç“áÈ C"-ß3r2uäÎãrOž\ðNqNq²4g<:‘ÉädÒ4Å»`ˆ3–#¢H?¹z]L}I»CÔ—tH;™;Ì_¹ñ*5áÑ=ÿÊäð vw~ØšÞrv-Yú'y˜ëm·YÞFó:GW>ÈÊøÅŒr<»ÒëÚC1U¼*^^.x¼ 8ïq¹ÃåçÎyœóxÞ,kë/å™ë?ÌaK^Šh–½ÿ›à5ä9ÇOíèÜÖnøûAíñçþJwÞ»Œ“ŸµŒ›¯žúod¯á2eõ’çóÔ¡¯û3^û c´þç.Ý=¤½­Î4“<›!»†@NÕ®À§Ò4#ë9²^NšfÅ«—¯4#ífdiN–æä™#Ï<.ó¸à} „€÷ç=Á²¼‡ už{ا™>Œ7nಛ_ÇØRC¯ëq™ ÙÔ4fz/ýQG6xï»c¾úWwÿÆë|ÜQ¬>‘‘v “““jmÂìÜîóÒ4Çù–f®‰ ˆ©±µóoh6Ö±µýc*•˜<Ë¡¨Ø#Y‚¢a ,÷žà Ýt/?¹û­¬=‹;6\QŠwuPA° =€ÿ5<‘ýÈÕ©Gjã/»\ úÞí¯&ÊPRé¦Mµ’,«V«¢8Y–¹Y' ‚è¦mP¡bŒÅÚ>súà”a^µd¢J ´¦¬ør—Ñjϯb¨„`ÈSÕV³%3SSÛÌ1ÞçÓË"q½Hg÷Àe_½çÀôˆ¾%ë#–r…étšHb6>¸ëCð"æ%ƺ+ŨíÈÀ„@0bQT1Rø °§Œ àJfyÐ`JÁè‹Ï9ÈSèvRÝ»»-s{‹Tõª¸b­1ÁüÄHFqš:Ç£‡Ø¾óQf;S¬^rgtÅ>ì×ÄvêÅdD¤´YÂ2j2J®CT¨3ïà‘™­˜ô`2³IT#щiÞFŒóHˆÄ˜"—þâÃ,ñ‚-`‘‚=:@h ‚WB‹Ê÷Â'iÉ(W€§Z²‹ò|ð!ry8ÉXw•÷^’øX‡%2)M2šDÆj»‘iµ¹ŽõÇ­ç[w<›][oÙ|·O»/;+øuÎyŒtiØT¶ESü*jùÝVq25µ<õš§õÉ¡.ƒ´—“gZDû®Óvð¹&ÄÏl²;Þë7ÓnåS{v·¿ÚNç>64îZë”óŸr~懧îë¤?öÉ/rö›·pxm/Íp´©šjè2{F û;EŒÖ)·‘½ÍÒž³;÷ìro[sðøw·>Ô´[jøé™Ù ÈF>‡šñÊpWãZ.Õaeh8¦R5D‰ÁFÌ€˜2E•yæô‘–à¨Bèû¥ ø2syÀåJÚ ô:NË“¶ y'Ñ´Y•Æ\wïž=ÓoýÙe÷}ó‡÷_@ÚO[ºÚÿlÉ’ñáÉh­vüœlo>@{®æfºfj{zù[_²ü ¯\¾[çfRþòîÚ7ŠÝÔxF¬±¶œï]±æúÔµ–iUÛùss{¥ÕìÚ]ÛZ~ëÆæ O|êÑWrÔäZ;&¾|ÃOÖ;oÙ,›ÞMc&%Ms¬…(*5KeHˆC¥S©YâÄ`Œ!N,QÌb‡ ø¼È÷|ð¸Léu½®#O=iWI;Ž<ƒ<X‘$K–ޱê I­¨4zÛ_ÿ¤“ì?¬Y¿ìûË×É+–¯\žÅI»ÜI·ÒjµB»‘†©i´õ¡Ö‹Uù×JÍÚj]ý_¿ãÅ&öí›Ïcûcdæ#ÆBt^îg—xŸeÆÆ  yêiε³½Sí$íÊùÍî–«wlMÏY»&âÌ×$áøÕmwæhvïh±{{“½»zÌL¥ÌîÍhÍæ´›]föxÒž'Ký í›÷WR0ÎX!Š I¥xUjõ Ëòu–úhÌðhÌÈxDµnHªcv‘ÄîÜl_úŠ?ø~ø×CëÕXº­ÝQYQçiêLÚñ:½Ë±{[ºV’Š‘uOªïëƒ\¯ÎÐð›6Ϫó)£ë—6ÚM”`ŒIQ•Ò)Òž·ÍÙœ©mÝú·Ú¿âOyþò©=7R¯H¥ cË„åkǰñ8q\!² Aˆ^ð.¼ÊRF rŸã|^„íàÁ#N_µ¨:Š"²ÐFŠwž,ódianÝv ÝðÒnuèuÝŠçÊ×ìÛ>þ)ŸgBžùRŽÝeEu 8!xñªB‚Ëe_€ +&bã–D¤ئ÷RÜLi!PÔf1ï@‹]×ÈÄà½ñ¸€‹  ¶`D-²ëWõŠ>ÅÀû•ŽYEµ8Ÿ’»Œ8B‚ú¾Î\$û (ôOy/ ¢‚j_Ú a9—[0C…t˜¡º ÷ÓÁ‹ EÅ҇ξ àB†ˆ)ÕW¹¡OkY”LŠBÀCELÀš¶¿EZ!AÊï—ç\ä† F .Kiu÷2œ¬f¼z(»f7`¬R­Œ@¿x1a^jižÚß4Õ¢L«Š#ÃŒ” }>*öš DÈDÐv3ì (ÁxÁ”Ònyˆ·2üJùç¸;:WŠ´¨F *‹‚Hùg‘è1ˆr×¥—vŠWrÊ!çqÊç3>¼Š·^ÇM÷ÿ#[÷Þ ÆSMF Áû9ZѺ˜ ª¨šÁßod Î{ Z %t¡ PBðÕ€ªÁu«û11UDÄ"XÉúÀg•A¦]¨ãþÑoÃi_%ôi>ÈÈÌ@×ôYj¥—µÉò”ñÚ!œü¤ßâÄC_ÁÈв»ŽXs:‡ôl6ï¼…›ø6í¼žôkï°}çýE®ø"@|˜gÐ ›W<ÕŒŒ±1Ò7=}ŒC+ÎYÀ6¶PÒÂYêàFCù=ThufxúáïäUÏûG®{‚ÁWú+» ,²øèûªB÷8ƇWsÖ©ïàM/¿‚a{½´Qþûü*Ü[ñV³£ƒ8ÞfpŸ} (®©äˆqÚ/à-H/9ýtŒ‰ÊÝÕÞ|¥o¨…ö T'N/ÌsˆAËÐ,ä.gÍ’Sø§ï|š‹?ö¶oßZn€-j= íp?G(}µ üüú+yÍŸÇwïard=Y–Î3)(FbêµåðÀl{{a2V³`Må5ü|[©_%Ø W?çKìØ½#kcT¥[žHžp¡Í‹˜ÚŸÎ_oaŸQÈó”ç÷.zó¥¸hŠ?zßÓøüW.bffcìÀ?=¨B(†À¼õ—ÿÉ›.<“üÍïsæ™/äSý„Éê±ô²vá&& ²~a¶µ{Ðùª(Z„ú®%²5TˆZPKûaÐ7®ý#jµ‘A)Ôˆ‘yJ.0×Ef6©¹úa´¼Ù”4ë²jÙÁ|ôÂ+øÈ{ÿ‰MS×ðÇŸÄ׿õIšÍÖ"  `ü 4»áž;y÷_ü6øÜË9⨃ùÆßÞÊŸ¼ö/©Õª4iYzÝ·¦TüOté!»‡SÓÁ"ä±k#‘¢’‚ï²ìA±­7Vؾ Ccq¶00·°0ÄJ顪vP®žÜuð!ç„#ÏäS﹎·½áãÜúпðÇï ߼실i†10Ʋqー÷Cðî¿z>cË„/|äç¼û¿ÂòɵxïJӗϧ ß(Íæ††­‘x^ûÌ£XDAU½ó½NºýG1€ñÑe¨Š*i÷-©ØÝÅ…,Êü¥èh¶È 4ÇÀÝœnÐBŒ>ó„ó8õ˜s¸ööæ›Wü5—_õy^}Îÿæø'ŸÆ×.ý×ßö]žþô§óéþ£yFˆÊü­ðuEêQ¨ê’5¯Z¤¾]KÆòvaóì^è‡Jiù&Ù?@ÖCLÅÆ÷6`Dè;j¡Œœq@´SÒ\©îyÇ0OY)ÄbPOd«œyêyöIçó“ë¿Ì7/ÿŸùÊ Gu<_øø8æˆg•×/†ôÌcÂÿ E´`qƒd”²Üké³§´ˆ…>µ@¶L[lÖkbý›)L̈)^qÁþ™AKŠˆ˜¡§‰] O»2È}ö¥ŠVR˜`l«œû¼wñǯý O>e’O½ÿ Ž9âY¥OòHq?ûžEd^†þ™¥¿K Âž™-„"œ¯T.Ü@U‚÷yÇ{‡HlÀ¾Ù’P…ê  Y`2}3ò!Ÿ/GªYö¡Ô}œç¾0 ÆØÁg\j°’”!½0ɾßß‘åiqÙºFÄ ¡Ï0!M{óÚupoû˜“æy–åyFР!¸_±k"Œ‰:ý¤|¾F¬ Ø1Ï*kã2Œ–Æ}Ml¿@•B±hÛx~n\Ì…n¯SÖæM_U~AthÄÔ±¹P@÷uPT#‚Eƒ!Þ?@ƒc)l`>"é¾lXàÄѲ8ðWÿ5{~§ªØÿªï+€)/¸°øU6’J4¯DZˆ˜"Š•¹£Îo°"ˆà5h†*ƈ.dí"']î¤ö.Ýò屦y|† æfÁPö½×ÿ;R‹>Ûûý‹:×s)êTå‚BGCäöÕHó?‹¼×|fv®E1¹¡—Î÷Å3*ŒÄ]À.® ‰ª%´õ±w¿Èiý¿ÎHô[Òÿ5ƒ&$ ¦B‚–¹[T6&BY½‘Áé5ð[­WǪŒG5’dè×Tš—‰,ÆZ…"@iègé,ªà±p |Ž(N©Qòò¦t‘Û÷E;üXâ=x_&ÔBPWú#\+²UêÕ¥ +Õ\¤h[}¡êWÀ`MÒ•l¼“è2êµ±RŠì ¢Ó ˜0„ÑÚZuAÁl~§UQˆ±6¡ï F§E>•$5~tíç¹îW"Q)h‘gí—Cû1+eXk-³i>÷÷྇n§V«ü¼.òÞ94H|ËŽ/ìöy|Ë LTC xOò:¢µ»ïº}sóæÿ¼JœÏôˆ'>¸ö"´gW cD_wÖE_|ÇÏîL3sšµ’ûàlˆw²®hc†¸ÛÖ«ßûÙÓX¹l<îäuÐaž!ÅÌt6ò©¯½†Ë~òL^}î…<õäç á1àè>à:¨íN‹Ë¯ü:ß¿ò‹ì™ÛÂG­œt‘£6Df”fâJgYUÞÜiT®«¯]ZIõÞK'k“µºIÞI¶6[»ßýê·œLR‰å5¯z£~ô¯ß¹€f¦§ôO.~†Q ÎÚø:=ójÉØaŠhšuÄeH¯¤ÙÌ~ž÷Ì»—=™ZµÆXÇlûÁE£,… ŒŽsìÉCìÜ~;ùÒïpì¡/àUç¼›cŽ:Pœwóz§)³1–4Mù׫¿Í÷~üvÍÞÏŠ•¬:l=Æ‚WŒ‘øôÓíï|kj÷,?þ§»á/:ï´F£ù– ³òYÆÔ&Ôùé,m\;ÛÚù¹úh¶µZY)Ç®8'\wÝí WVî кƒ×pøQcÌuëá§ßPîº}Æ%+†OíÄþ‚$~º†h<ÏÝδ—]ÕhÌ^öæ·¿Ák°t»íÙ~…ú¥Ù~Ü/W”u‡,gÕšÀÎ×ð_¸Ž“<›ß}ÙÛ9ôà# ’²”+€Ê¿_ßþÁgÙ>s+ã¸C(lcŠTBËTBTæ1V%¨oÖ*C¼üµg'#ËãM×=pû¶mêÚ£ŸD ùØDÝWì“pé„ä$zû#?fÓƒY¶rlÿmÙ¼•G6O±{êA¯'?íXÓ–©«ñg½m|öïÿü~^òêuUÆÆëfó¦-vÅòÕ¨ÊLÿΛ1÷c±1›¬UÖ¬[A¾ÊóÀ¶Ëyï§~ÂiÇýxþÅ$I‚±†È&Ü|Ûµüãw?Á¦7±ríO^»1…/²,¶/£ÓúueE UK¯£aÍHMÎ:ôEæ_¸Ì?°¹í›­:ßøÑ™¶ã§µ2’Õ@{.gbuÌ·>;?ì¹O }ß%/ᡇ 2†vwš±Ñe’gbWŽžrðÛôê_]lf›ÛÈ]Î<ëyÛ±B~R×í¼y®w¿“бR–-æg‚‚t  H{lÚI”­aé’ÕÄãÛ s‡ñË»¯cùAV¯]J,#‹£å`‚W‰]©äuÙºõÑô‘-’çéÝË–¬6C£QXzg|l•X[!ÏRm6÷Ò˜®°dYŒ=è&¦ï>‘øÄ‹ðØ'ѹþªyÞKŽç¾oãg—v8öÔ•Ø8 »æîÓû¶_A«·M³Lttd”ÉÉeºsúNÓhÍî0Z?´ÛmäC7HÑÇ„ê~!¦H„1,_>‰$fš;K˜šÙÈê5KX²|¸˜ÿ1”mk)Ìªì» öX‹4Å2NÄÒ|vvÆÎµv~µZׯ-[¾ÜX…,ËY½fI<ÎsŸr ›¶ýï3†Ç ÕZîÔ¾ô¡_>Žÿzˆóµï:8® æ^rç1SK&±œø”cØ»gF–«Á4–nÝ}çUlÇÉq5¸j­f"+&P<¥llYZØgAÝH ™ RôèÓ´ð1e^Â|wÕ³Yæ‘0ä#&´×kG­ÎžÓ¬÷Rµ­é¡d¹Lílèž©]Üü¯)¿éñ¸Éÿê˯DžÚ¦©ÆË’¯Øµg×S7{¶DëC“R« cŒ'pýy´·sÓ±ývSQr¥á+ÚÉ8Å.a0Hå]Pç=ÎuŇì{ R­›©ÖLnš³½ 3³žk/Ûö¯óq’;_<¿U #¸àÂ^¹ûìþÞgÓsßþ±gÛë5?:7·÷(—»PZjªÉdQŠ Ç‡Œàr-ZÓ¡?åaÄÍocŒ ¦¬ñ”Ųrö:Š‘ÉÉm,í*&û8©|æóÝuùY¿7aV¯X'Y/µ¡:qœ0:–¿9@O躋.ù-â¨ÂLcÎgÔkÒj¤q$õl||Ùû7Ü÷™æ 7:^FGÇ£Z&Ž«XÏ÷½úílSÌ6Š1Xk‰lTV%‚#w)½^‡VkNÛ­ž´fÓÙêhûà×Á,¯ï3Œ£H¡:Ec²,å_>ý› ?a|ä]—óžO¾œÑ‘µtºÛyÑKŸ¥?½òÖP­ “T|”T 339™"MâdI%¢:T¡RI¨VjT*‰ŽŒ×ïN’JnŒ5ƨµ6¸œ•ÝN{Ìy§y–I–夽”N§G·Ó£ÝlS—12óÃKî¸àuž ×GÜÛ.x%—üÃ¥#ôZœ' ÀÇ/ü!ïùäËX¿þ0Ž=ú4®»æ—X›WjÙèDL JÚzí@ÚSZ=Ocº‹sM5Kð!oÍ¥ç?iö˜»·Ÿ|k­Ñì²áGÚ½àMg|ûÞoÿ]UBYÅQamÔ”AãÄJ$tX 섇ï™ñGó¡¿ùC£1šÕùú'~óXOèºy~D2qÙ¿ÇP=f¨ž%4juËðXÌØDÌøÒ˜±% #cõ‘ˆúpLm(¦RI’¡ðà’»¨´V¦Ûî&•ª$‰V* µ¡ õ‘*õ‘*CÃjõ˜J-"J,ÖH`g™­k`z[•‰%+ùâûØoØþogPÿxÓ9_à’K_…5…^I*–Zˆp‰%Jœ(YEéu ×)´ `¬¢iÂød]Ž;±.wßݘе‘ "jm1ÌÅB0‘!Ž aÁC<"`#å3ïyâƒp€¾ðÝ7²le;¦ŠÉT#D‰!rk QÖ*Æ*6*«Ò®)æŒPŠhÎf †õƒµ¤q\€‘T-•Š%N"l s–Äòmb1‚= ¿®åôæW~€¿ùþ«œÅ/ÅŒP¶“‹£w娉 ”ƱˆcˆbkâÄ%BuÈR©Z¢Èb¬)÷Î ±Xü|u´–Ño\ÿïàù¯Y†±‚µQc Ͳ°M¡±P©*ÞÛâq¦T1ÆãƒE†ÊÐA2â$ÒêPL”(Õš-‡Í‹©Ø¢c°LíÖ¬ý Ћ^ü L©aD¤;ÉåPxa…*ŽƒºˆùŸ ÐÖ­<|­n;ôã|:eeôõF¢ï /Ÿ´¨:ÍÅH‚‰*B–&Fö\k£Ö…½®'‰'4NzŒ.5a÷·M»7}ßèðŠ×Uâá]1a£H£(cc²45ÓÓ»éšÝ8øÐCþ¥^—‡¾ÍׇFùÆ%P€èï:ïžËØ¡?áØãNЩ]ÓfÛŽ{6e=¾ã^B¥b´f„dÚ»p[/mjÏ܃Êò]Š[-3{Zêre|d9Ë´Z­™V¶õ~‰ÒK3›$µ,‰k-Aîï¥íôÒÙ·/™8øÒÙ=]³uæ?õèU/åÆoå”ÓWqß/gØšèo zë‡OeåòùçáÊä衦™OëmÓèC×½øyãcιüW·ZGZÇ­_kDƒŠU ÔG&&'Ø´ízm8òàãM³Ù 7Þ¸—okÊú34žÛ…«Vm°3'𗓇f0F Ää.çÒO?t —Äÿþh|@û|³r%tEXtdate:create2011-09-22T09:32:32-07:00¨’bÌ%tEXtdate:modify2011-09-16T07:27:36-07:00wjñTIEND®B`‚tmpNnpnZF/retrace/android/AndroidManifest.xml0000664000175000017500000000203712543167424020624 0ustar chrischris tmpNnpnZF/retrace/android/local.properties.in0000664000175000017500000000032312543167424020644 0ustar chrischris## This file is automatically generated by QtCreator. # # This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. sdk.dir=@ANDROID_SDK@ tmpNnpnZF/retrace/android/java/0000775000175000017500000000000012543167424015752 5ustar chrischristmpNnpnZF/retrace/android/java/apitrace/0000775000175000017500000000000012543167424017542 5ustar chrischristmpNnpnZF/retrace/android/java/apitrace/github/0000775000175000017500000000000012543167424021024 5ustar chrischristmpNnpnZF/retrace/android/java/apitrace/github/io/0000775000175000017500000000000012543167424021433 5ustar chrischristmpNnpnZF/retrace/android/java/apitrace/github/io/eglretrace/0000775000175000017500000000000012543167424023550 5ustar chrischristmpNnpnZF/retrace/android/java/apitrace/github/io/eglretrace/AbstractServer.java0000664000175000017500000000136512543167424027352 0ustar chrischrispackage apitrace.github.io.eglretrace; import android.net.LocalServerSocket; import android.net.LocalSocket; import java.io.IOException; public abstract class AbstractServer extends Thread { public AbstractServer(String name) throws IOException { m_localServer = new LocalServerSocket(name); } private LocalServerSocket m_localServer; public void close() throws IOException { m_localServer.close(); } @Override public void run() { while(true) { try { accepted(m_localServer.accept()); } catch (Exception e) { e.printStackTrace(); break; } } } protected abstract void accepted(LocalSocket socket); } tmpNnpnZF/retrace/android/java/apitrace/github/io/eglretrace/Servers.java0000664000175000017500000000317212543167424026047 0ustar chrischrispackage apitrace.github.io.eglretrace; import android.net.LocalSocket; import java.io.IOException; public class Servers { private AbstractServer m_stdout, m_stderr; Servers(String stdoutServerName, String stderrServerName) throws IOException { m_stdout = new AbstractServer(stdoutServerName) { @Override protected void accepted(LocalSocket socket) { if (!RetraceActivity.setStdoutFileDescriptor(socket.getFileDescriptor())) { try { // close socket if we are busy socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }; m_stdout.start(); m_stderr = new AbstractServer(stderrServerName) { @Override protected void accepted(LocalSocket socket) { if (!RetraceActivity.setStderrFileDescriptor(socket.getFileDescriptor())) { try { // close socket if we are busy socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }; m_stderr.start(); } public void close() { try { m_stdout.close(); m_stdout.join(); } catch (Exception e) { e.printStackTrace(); } try { m_stderr.close(); m_stderr.join(); } catch (Exception e) { e.printStackTrace(); } } } tmpNnpnZF/retrace/android/java/apitrace/github/io/eglretrace/RetraceActivity.java0000664000175000017500000001031412543167424027514 0ustar chrischrispackage apitrace.github.io.eglretrace; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Build; import android.os.Bundle; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.WindowManager; import android.widget.RelativeLayout; import java.io.FileDescriptor; import java.io.IOException; public class RetraceActivity extends Activity implements SurfaceHolder.Callback2{ private SurfaceView m_surface; private Servers m_servers; private QtCreatorDebugger m_debugger = new QtCreatorDebugger("eglretrace"); public void setSurfaceSize(final int width, final int height) { synchronized (this) { runOnUiThread( new Runnable() { @Override public void run() { if (width < height) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); m_surface.getHolder().setFixedSize(width, height); } }); } } public static native boolean setStdoutFileDescriptor(FileDescriptor fd); public static native boolean setStderrFileDescriptor(FileDescriptor fd); public static native void onActivityCreatedNative(RetraceActivity activity); public static native void onSurfaceCreatedNative(Surface surface); public static native void onSurfaceChangedNative(Surface surface, int format, int width, int height); public static native void onSurfaceRedrawNeededNative(Surface surface); public static native void onSurfaceDestroyedNative(); public static native void onActivityDestroyedNative(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT > 13) { int systemVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; if (Build.VERSION.SDK_INT > 15) { systemVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN; if (Build.VERSION.SDK_INT > 18) systemVisibility |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } getWindow().getDecorView().setSystemUiVisibility(systemVisibility); } if (savedInstanceState == null) { System.loadLibrary("gnustl_shared"); System.loadLibrary("retrace"); m_debugger.connect(this); } onActivityCreatedNative(this); try { m_servers = new Servers("apitrace.github.io.eglretrace.stdout", "apitrace.github.io.eglretrace.stderr"); } catch (IOException e) { e.printStackTrace(); } RelativeLayout layout = new RelativeLayout(this); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); m_surface = new SurfaceView(this); m_surface.getHolder().addCallback(this); layout.addView(m_surface, params); setContentView(layout); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @Override public void surfaceCreated(SurfaceHolder holder) { onSurfaceCreatedNative(holder.getSurface()); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { onSurfaceChangedNative(holder.getSurface(), format, width, height); } @Override public void surfaceRedrawNeeded(SurfaceHolder holder) { onSurfaceRedrawNeededNative(holder.getSurface()); } @Override public void surfaceDestroyed(SurfaceHolder holder) { onSurfaceDestroyedNative(); } @Override protected void onDestroy() { if (m_servers != null) m_servers.close(); m_debugger.close(); onActivityDestroyedNative(); super.onDestroy(); System.exit(1); } } tmpNnpnZF/retrace/android/java/apitrace/github/io/eglretrace/QtCreatorDebugger.java0000664000175000017500000002250612543167424027771 0ustar chrischrispackage apitrace.github.io.eglretrace; import android.app.Activity; import android.net.LocalServerSocket; import android.net.LocalSocket; import android.os.Bundle; import android.util.Log; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class QtCreatorDebugger { QtCreatorDebugger(){} QtCreatorDebugger(String TAG) { this.TAG =TAG; } private String TAG = "QtCreator"; private Process m_debuggerProcess = null; // debugger process public boolean connect(Activity activity) { try { Bundle extras = activity.getIntent().getExtras(); if ( /*(ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) != 0 &&*/ extras.containsKey("debug_ping") && extras.getString("debug_ping").equals("true")) { try { debugLog("extra parameters: " + extras); String packageName = activity.getPackageName(); String pingFile = extras.getString("ping_file"); String pongFile = extras.getString("pong_file"); String gdbserverSocket = extras.getString("gdbserver_socket"); String gdbserverCommand = extras.getString("gdbserver_command"); String pingSocket = extras.getString("ping_socket"); boolean usePing = pingFile != null; boolean usePong = pongFile != null; boolean useSocket = gdbserverSocket != null; boolean usePingSocket = pingSocket != null; int napTime = 200; // milliseconds between file accesses int timeOut = 30000; // ms until we give up on ping and pong int maxAttempts = timeOut / napTime; if (gdbserverSocket != null) { debugLog("removing gdb socket " + gdbserverSocket); new File(gdbserverSocket).delete(); } if (usePing) { debugLog("removing ping file " + pingFile); File ping = new File(pingFile); if (ping.exists()) { if (!ping.delete()) debugLog("ping file cannot be deleted"); } } if (usePong) { debugLog("removing pong file " + pongFile); File pong = new File(pongFile); if (pong.exists()) { if (!pong.delete()) debugLog("pong file cannot be deleted"); } } debugLog("starting " + gdbserverCommand); m_debuggerProcess = Runtime.getRuntime().exec(gdbserverCommand); debugLog("gdbserver started"); if (useSocket) { int i; for (i = 0; i < maxAttempts; ++i) { debugLog("waiting for socket at " + gdbserverSocket + ", attempt " + i); File file = new File(gdbserverSocket); if (file.exists()) { file.setReadable(true, false); file.setWritable(true, false); file.setExecutable(true, false); break; } Thread.sleep(napTime); } if (i == maxAttempts) { debugLog("time out when waiting for debug socket"); return false; } debugLog("socket ok"); } else { debugLog("socket not used"); } if (usePingSocket) { DebugWaitRunnable runnable = new DebugWaitRunnable(pingSocket); Thread waitThread = new Thread(runnable); waitThread.start(); int i; for (i = 0; i < maxAttempts && waitThread.isAlive(); ++i) { debugLog("Waiting for debug socket connect"); debugLog("go to sleep"); Thread.sleep(napTime); } if (i == maxAttempts) { debugLog("time out when waiting for ping socket"); runnable.shutdown(); return false; } if (runnable.wasFailure) { debugLog("Could not connect to debug client"); return false; } else { debugLog("Got pid acknowledgment"); } } if (usePing) { // Tell we are ready. debugLog("writing ping at " + pingFile); FileWriter writer = new FileWriter(pingFile); writer.write("" + android.os.Process.myPid()); writer.close(); File file = new File(pingFile); file.setReadable(true, false); file.setWritable(true, false); file.setExecutable(true, false); debugLog("wrote ping"); } else { debugLog("ping not requested"); } // Wait until other side is ready. if (usePong) { int i; for (i = 0; i < maxAttempts; ++i) { debugLog("waiting for pong at " + pongFile + ", attempt " + i); File file = new File(pongFile); if (file.exists()) { file.delete(); break; } debugLog("go to sleep"); Thread.sleep(napTime); } debugLog("Removing pingFile " + pingFile); new File(pingFile).delete(); if (i == maxAttempts) { debugLog("time out when waiting for pong file"); return false; } debugLog("got pong " + pongFile); } else { debugLog("pong not requested"); } } catch (Exception e) { debugLog("Can't start debugger" + e.getMessage()); } } } catch (Exception e) { e.printStackTrace(); } return true; } void close() { if (m_debuggerProcess != null) m_debuggerProcess.destroy(); } private void debugLog(String msg) { Log.i(TAG, "DEBUGGER: " + msg); } private class DebugWaitRunnable implements Runnable { public DebugWaitRunnable(String pingPongSocket) throws IOException { socket = new LocalServerSocket(pingPongSocket); } public boolean wasFailure; private LocalServerSocket socket; public void run() { final int napTime = 200; // milliseconds between file accesses final int timeOut = 30000; // ms until we give up on ping and pong final int maxAttempts = timeOut / napTime; try { LocalSocket connectionFromClient = socket.accept(); debugLog("Debug socket accepted"); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionFromClient.getInputStream())); DataOutputStream outToClient = new DataOutputStream(connectionFromClient.getOutputStream()); outToClient.writeBytes("" + android.os.Process.myPid()); for (int i = 0; i < maxAttempts; i++) { String clientData = inFromClient.readLine(); debugLog("Incoming socket " + clientData); if (!clientData.isEmpty()) break; if (connectionFromClient.isClosed()) { wasFailure = true; break; } Thread.sleep(napTime); } } catch (IOException ioEx) { ioEx.printStackTrace(); wasFailure = true; debugLog("Can't start debugger" + ioEx.getMessage()); } catch (InterruptedException interruptEx) { wasFailure = true; debugLog("Can't start debugger" + interruptEx.getMessage()); } } public void shutdown() throws IOException { wasFailure = true; try { socket.close(); } catch (IOException ignored) { } } }; } tmpNnpnZF/retrace/d3d8state.cpp0000664000175000017500000001002512543167424015716 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "state_writer.hpp" #include "com_ptr.hpp" #include "d3d8imports.hpp" #include "d3dshader.hpp" #include "d3dstate.hpp" namespace d3dstate { typedef HRESULT (STDMETHODCALLTYPE IDirect3DDevice8::*GetShaderFunctionMethod)(DWORD Handle, void* pData, DWORD* pSizeOfData); struct VertexShaderGetter { HRESULT GetShader(IDirect3DDevice8 *pDevice, DWORD *pHandle) { return pDevice->GetVertexShader(pHandle); } HRESULT GetShaderFunction(IDirect3DDevice8 *pDevice, DWORD Handle, void* pData, DWORD* pSizeOfData) { return pDevice->GetVertexShaderFunction(Handle, pData, pSizeOfData); } }; struct PixelShaderGetter { HRESULT GetShader(IDirect3DDevice8 *pDevice, DWORD *pHandle) { return pDevice->GetPixelShader(pHandle); } HRESULT GetShaderFunction(IDirect3DDevice8 *pDevice, DWORD Handle, void* pData, DWORD* pSizeOfData) { return pDevice->GetPixelShaderFunction(Handle, pData, pSizeOfData); } }; template inline void dumpShader(StateWriter &writer, IDirect3DDevice8 *pDevice, const char *name) { Getter getter; HRESULT hr; DWORD dwShader = 0; hr = getter.GetShader(pDevice, &dwShader); if (FAILED(hr) || !dwShader) { return; } DWORD SizeOfData = 0; hr = getter.GetShaderFunction(pDevice, dwShader, NULL, &SizeOfData); if (SUCCEEDED(hr)) { void *pData; pData = malloc(SizeOfData); if (pData) { hr = getter.GetShaderFunction(pDevice, dwShader, pData, &SizeOfData); if (SUCCEEDED(hr)) { com_ptr pDisassembly; hr = DisassembleShader((const DWORD *)pData, &pDisassembly); if (SUCCEEDED(hr)) { writer.beginMember(name); writer.writeString((const char *)pDisassembly->GetBufferPointer() /*, pDisassembly->GetBufferSize() */); writer.endMember(); } } free(pData); } } } static void dumpShaders(StateWriter &writer, IDirect3DDevice8 *pDevice) { writer.beginMember("shaders"); writer.beginObject(); dumpShader(writer, pDevice, "vertex"); dumpShader(writer, pDevice, "pixel"); writer.endObject(); writer.endMember(); // shaders } void dumpDevice(StateWriter &writer, IDirect3DDevice8 *pDevice) { /* TODO */ writer.beginMember("parameters"); writer.beginObject(); writer.endObject(); writer.endMember(); // parameters dumpShaders(writer, pDevice); writer.beginMember("textures"); writer.beginObject(); writer.endObject(); writer.endMember(); // textures dumpFramebuffer(writer, pDevice); } } /* namespace d3dstate */ tmpNnpnZF/retrace/glstate_params.py0000775000175000017500000007057712543167424017014 0ustar chrischris#!/usr/bin/env python ########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ '''Generate code to dump most GL state into JSON.''' import retrace # to adjust sys.path from specs.stdapi import * from specs.gltypes import * from specs.glparams import * framebuffer_targets = [ ('GL_DRAW_FRAMEBUFFER', 'GL_DRAW_FRAMEBUFFER_BINDING'), ('GL_READ_FRAMEBUFFER', 'GL_READ_FRAMEBUFFER_BINDING'), ] class GetInflector: '''Objects that describes how to inflect.''' reduced_types = { B: I, E: I, I: F, } def __init__(self, radical, inflections, suffix = ''): self.radical = radical self.inflections = inflections self.suffix = suffix def reduced_type(self, type): if type in self.inflections: return type if type in self.reduced_types: return self.reduced_type(self.reduced_types[type]) raise NotImplementedError def inflect(self, type): return self.radical + self.inflection(type) + self.suffix def inflection(self, type): type = self.reduced_type(type) assert type in self.inflections return self.inflections[type] def key(self): return self.radical + self.suffix def __str__(self): return self.key() class StateGetter(Visitor): '''Type visitor that is able to extract the state via one of the glGet* functions. It will declare any temporary variable ''' def __init__(self, radical=None, inflections=None, suffix='', inflector=None, key=None, pnameIdx=-1): if inflector is None: assert radical is not None assert inflections is not None self.inflector = GetInflector(radical, inflections, suffix) else: assert radical is None assert inflections is None assert suffix == '' self.inflector = inflector if key is None: self.key = self.inflector.key() else: self.key = key self.pnameIdx = pnameIdx def iter(self): for function, type, count, name in parameters: if self.key not in function.split(','): continue if type is X: continue yield type, count, name def __call__(self, *args): pname = args[self.pnameIdx] for type, count, name in self.iter(): if name == pname: if count != 1: type = Array(type, count) return type, self.visit(type, args) raise NotImplementedError def temp_name(self, args): '''Return the name of a temporary variable to hold the state.''' pname = args[self.pnameIdx] return pname[3:].lower() def visitConst(self, const, args): return self.visit(const.type, args) def visitScalar(self, type, args): temp_name = self.temp_name(args) elem_type = self.inflector.reduced_type(type) inflection = self.inflector.inflect(type) if inflection.endswith('v' + self.inflector.suffix): print ' %s %s = 0;' % (elem_type, temp_name) print ' %s(%s, &%s);' % (inflection, ', '.join(args), temp_name) else: print ' %s %s = %s(%s);' % (elem_type, temp_name, inflection, ', '.join(args)) return temp_name def visitString(self, string, args): temp_name = self.temp_name(args) inflection = self.inflector.inflect(string) assert not inflection.endswith('v' + self.inflector.suffix) print ' %s %s = (%s)%s(%s);' % (string, temp_name, string, inflection, ', '.join(args)) return temp_name def visitAlias(self, alias, args): return self.visitScalar(alias, args) def visitEnum(self, enum, args): return self.visitScalar(enum, args) def visitBitmask(self, bitmask, args): return self.visit(GLint, args) def visitArray(self, array, args): temp_name = self.temp_name(args) if array.length == '1': return self.visit(array.type) elem_type = self.inflector.reduced_type(array.type) inflection = self.inflector.inflect(array.type) assert inflection.endswith('v' + self.inflector.suffix) array_length = array.length if isinstance(array_length, int): # Static integer length print ' %s %s[%s + 1];' % (elem_type, temp_name, array_length) else: # Put the length in a variable to avoid recomputing it every time print ' size_t _%s_length = %s;' % (temp_name, array_length) array_length = '_%s_length' % temp_name # Allocate a dynamic sized array print ' %s *%s = _allocator.alloc<%s>(%s + 1);' % (elem_type, temp_name, elem_type, array_length) print ' memset(%s, 0, %s * sizeof *%s);' % (temp_name, array_length, temp_name) print ' %s[%s] = (%s)0xdeadc0de;' % (temp_name, array_length, elem_type) print ' if (%s) {' % array_length print ' %s(%s, %s);' % (inflection, ', '.join(args), temp_name) print ' }' # Simple buffer overflow detection print ' assert(%s[%s] == (%s)0xdeadc0de);' % (temp_name, array_length, elem_type) return temp_name def visitOpaque(self, pointer, args): temp_name = self.temp_name(args) inflection = self.inflector.inflect(pointer) assert inflection.endswith('v' + self.inflector.suffix) print ' GLvoid *%s;' % temp_name print ' %s(%s, &%s);' % (inflection, ', '.join(args), temp_name) return temp_name glGet_inflector = GetInflector('glGet', { B: 'Booleanv', I: 'Integerv', F: 'Floatv', D: 'Doublev', S: 'String', P: 'Pointerv', }) glGet = StateGetter(inflector = glGet_inflector) # Same as glGet glGet_texture = StateGetter(inflector = glGet_inflector, key = 'glGet_texture') glGet_i = StateGetter('glGet', { B: 'Booleani_v', I: 'Integeri_v', F: 'Floati_v', D: 'Doublei_v', }, key = 'glGet_i', pnameIdx=0) glGetMaterial = StateGetter('glGetMaterial', {I: 'iv', F: 'fv'}) glGetLight = StateGetter('glGetLight', {I: 'iv', F: 'fv'}) glGetVertexAttrib = StateGetter('glGetVertexAttrib', {I: 'iv', F: 'fv', D: 'dv', P: 'Pointerv'}) glGetTexParameter = StateGetter('glGetTexParameter', {I: 'iv', F: 'fv'}) glGetTexEnv = StateGetter('glGetTexEnv', {I: 'iv', F: 'fv'}) glGetTexLevelParameter = StateGetter('glGetTexLevelParameter', {I: 'iv', F: 'fv'}) glGetShader = StateGetter('glGetShaderiv', {I: 'iv'}) glGetProgram = StateGetter('glGetProgram', {I: 'iv'}) glGetProgramARB = StateGetter('glGetProgram', {I: 'iv', F: 'fv', S: 'Stringv'}, 'ARB') glGetFramebufferAttachmentParameter = StateGetter('glGetFramebufferAttachmentParameter', {I: 'iv'}) glGetSamplerParameter = StateGetter('glGetSamplerParameter', {I: 'iv', F: 'fv'}) glGetBufferParameter = StateGetter('glGetBuffer', {I: 'Parameteriv', P: 'Pointerv'}, key='glGetBufferParameter') class JsonWriter(Visitor): '''Type visitor that will dump a value of the specified type through the JSON writer. It expects a previously declared StateWriter instance named "writer".''' def visitLiteral(self, literal, instance): if literal.kind == 'Bool': print ' writer.writeBool(%s);' % instance elif literal.kind in ('SInt', 'Uint'): print ' writer.writeInt(%s);' % instance elif literal.kind in ('Float', 'Double'): print ' writer.writeFloat(%s);' % instance else: raise NotImplementedError def visitString(self, string, instance): assert string.length is None print ' writer.writeString((const char *)%s);' % instance def visitEnum(self, enum, instance): if enum is GLboolean: print ' dumpBoolean(writer, %s);' % instance elif enum is GLenum: print ' dumpEnum(writer, %s);' % instance else: assert False print ' writer.writeInt(%s);' % instance def visitBitmask(self, bitmask, instance): raise NotImplementedError def visitAlias(self, alias, instance): self.visit(alias.type, instance) def visitOpaque(self, opaque, instance): print ' writer.writeInt((size_t)%s);' % instance __index = 0 def visitArray(self, array, instance): index = '_i%u' % JsonWriter.__index JsonWriter.__index += 1 print ' writer.beginArray();' print ' for (unsigned %s = 0; %s < %s; ++%s) {' % (index, index, array.length, index) self.visit(array.type, '%s[%s]' % (instance, index)) print ' }' print ' writer.endArray();' class StateDumper: '''Class to generate code to dump all GL state in JSON format via stdout.''' def __init__(self): pass def dump(self): print '#include ' print '#include ' print print '#include "state_writer.hpp"' print '#include "scoped_allocator.hpp"' print '#include "glproc.hpp"' print '#include "glsize.hpp"' print '#include "glstate.hpp"' print '#include "glstate_internal.hpp"' print print 'namespace glstate {' print print 'const char *' print 'enumToString(GLenum pname)' print '{' print ' switch (pname) {' for name in GLenum.values: print ' case %s:' % name print ' return "%s";' % name print ' default:' print ' return NULL;' print ' }' print '}' print print 'static void' print 'dumpTextureTargetParameters(StateWriter &writer, Context &context, GLenum target, GLuint texture)' print '{' print ' writer.beginMember(enumToString(target));' print ' writer.beginObject();' print ' dumpObjectLabel(writer, context, GL_TEXTURE, texture, "GL_TEXTURE_LABEL");' # ARB_texture_buffer forbids glGetTexParameter and # glGetTexLevelParameter for TEXTURE_BUFFER, but # ARB_texture_buffer_range introduced parameters which can be queries # with glGetTexLevelParameter... print ' if (target != GL_TEXTURE_BUFFER) {' self.dump_atoms(glGetTexParameter, 'target') print ' }' print ' if (!context.ES) {' print ' GLenum levelTarget;' print ' if (target == GL_TEXTURE_CUBE_MAP ||' print ' target == GL_TEXTURE_CUBE_MAP_ARRAY) {' print ' // Must pick a face' print ' levelTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X;' print ' } else {' print ' levelTarget = target;' print ' }' self.dump_atoms(glGetTexLevelParameter, 'levelTarget', '0') print ' }' print ' writer.endObject();' print ' writer.endMember(); // target' print '}' print print 'static void' print 'dumpFramebufferAttachementParameters(StateWriter &writer, Context &context, GLenum target, GLenum attachment)' print '{' self.dump_attachment_parameters('target', 'attachment') print '}' print print 'void dumpParameters(StateWriter &writer, Context &context)' print '{' print ' ScopedAllocator _allocator;' print ' (void)_allocator;' print print ' writer.beginMember("parameters");' print ' writer.beginObject();' self.dump_atoms(glGet) self.dump_material_params() self.dump_light_params() self.dump_vertex_attribs() self.dump_program_params() self.dump_buffer_parameters() self.dump_texture_parameters() self.dump_framebuffer_parameters() self.dump_labels() print ' writer.endObject();' print ' writer.endMember(); // parameters' print '}' print print '} /*namespace glstate */' def dump_material_params(self): print ' if (!context.ES) {' for face in ['GL_FRONT', 'GL_BACK']: print ' writer.beginMember("%s");' % face print ' writer.beginObject();' self.dump_atoms(glGetMaterial, face) print ' writer.endObject();' print ' }' print def dump_light_params(self): print ' GLint max_lights = 0;' print ' _glGetIntegerv(GL_MAX_LIGHTS, &max_lights);' print ' for (GLint index = 0; index < max_lights; ++index) {' print ' GLenum light = GL_LIGHT0 + index;' print ' if (glIsEnabled(light)) {' print ' char name[32];' print ' snprintf(name, sizeof name, "GL_LIGHT%i", index);' print ' writer.beginMember(name);' print ' writer.beginObject();' self.dump_atoms(glGetLight, ' GL_LIGHT0 + index') print ' writer.endObject();' print ' writer.endMember(); // GL_LIGHTi' print ' }' print ' }' print def dump_sampler_params(self): print ' // GL_SAMPLER_BINDING' print ' if (context.ARB_sampler_objects) {' print ' GLint sampler_binding = 0;' print ' glGetIntegerv(GL_SAMPLER_BINDING, &sampler_binding);' print ' writer.beginMember("GL_SAMPLER_BINDING");' print ' writer.writeInt(sampler_binding);' print ' writer.endMember();' print ' if (sampler_binding) {' print ' writer.beginMember("GL_SAMPLER");' print ' writer.beginObject();' print ' dumpObjectLabel(writer, context, GL_SAMPLER, sampler_binding, "GL_SAMPLER_LABEL");' for _, _, name in glGetSamplerParameter.iter(): self.dump_atom(glGetSamplerParameter, 'sampler_binding', name) print ' writer.endObject();' print ' writer.endMember(); // GL_SAMPLER' print ' }' print ' }' def texenv_param_target(self, name): if name == 'GL_TEXTURE_LOD_BIAS': return 'GL_TEXTURE_FILTER_CONTROL' elif name == 'GL_COORD_REPLACE': return 'GL_POINT_SPRITE' else: return 'GL_TEXTURE_ENV' def dump_texenv_params(self): for target in ['GL_TEXTURE_ENV', 'GL_TEXTURE_FILTER_CONTROL', 'GL_POINT_SPRITE']: print ' if (!context.ES) {' print ' writer.beginMember("%s");' % target print ' writer.beginObject();' for _, _, name in glGetTexEnv.iter(): if self.texenv_param_target(name) == target: self.dump_atom(glGetTexEnv, target, name) print ' writer.endObject();' print ' }' def dump_vertex_attribs(self): print ' GLint max_vertex_attribs = 0;' print ' _glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &max_vertex_attribs);' print ' for (GLint index = 0; index < max_vertex_attribs; ++index) {' print ' char name[32];' print ' snprintf(name, sizeof name, "GL_VERTEX_ATTRIB_ARRAY%i", index);' print ' writer.beginMember(name);' print ' writer.beginObject();' self.dump_atoms(glGetVertexAttrib, 'index') # Dump vertex attrib buffer label print ' GLint buffer_binding = 0;' print ' glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, &buffer_binding);' print ' dumpObjectLabel(writer, context, GL_BUFFER, buffer_binding, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_LABEL");' print ' writer.endObject();' print ' writer.endMember(); // GL_VERTEX_ATTRIB_ARRAYi' print ' }' print object_bindings = [ ('GL_BUFFER', 'GL_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_COLOR_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_EDGE_FLAG_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_ELEMENT_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_INDEX_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_NORMAL_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_TEXTURE_BUFFER'), ('GL_BUFFER', 'GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_TRANSFORM_FEEDBACK_BUFFER_BINDING'), ('GL_BUFFER', 'GL_VERTEX_ARRAY_BUFFER_BINDING'), ('GL_BUFFER', 'GL_WEIGHT_ARRAY_BUFFER_BINDING'), ('GL_FRAMEBUFFER', 'GL_DRAW_FRAMEBUFFER_BINDING'), ('GL_FRAMEBUFFER', 'GL_READ_FRAMEBUFFER_BINDING'), ('GL_PROGRAM', 'GL_CURRENT_PROGRAM'), ('GL_PROGRAM_PIPELINE', 'GL_PROGRAM_PIPELINE_BINDING'), ('GL_RENDERBUFFER', 'GL_RENDERBUFFER_BINDING'), ('GL_TRANSFORM_FEEDBACK', 'GL_TRANSFORM_FEEDBACK_BINDING'), ('GL_VERTEX_ARRAY', 'GL_VERTEX_ARRAY_BINDING'), ] def dump_labels(self): for object_type, object_binding in self.object_bindings: member_name = object_binding.replace('BINDING', 'LABEL') if member_name == object_binding: member_name += '_LABEL' print ' {' print ' GLint binding = 0;' print ' glGetIntegerv(%s, &binding);' % object_binding print ' dumpObjectLabel(writer, context, %s, binding, "%s");' % (object_type, member_name) print ' }' program_targets = [ 'GL_FRAGMENT_PROGRAM_ARB', 'GL_VERTEX_PROGRAM_ARB', ] def dump_program_params(self): for target in self.program_targets: print ' if (glIsEnabled(%s)) {' % target print ' writer.beginMember("%s");' % target print ' writer.beginObject();' self.dump_atoms(glGetProgramARB, target) print ' writer.endObject();' print ' }' buffer_targets = [ ('GL_ARRAY_BUFFER', 'GL_ARRAY_BUFFER_BINDING', None), # FIXME: Causes Mesa to segfault (issue #332). Disable for now. #('GL_ATOMIC_COUNTER_BUFFER', 'GL_ATOMIC_COUNTER_BUFFER_BINDING', 'GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS'), ('GL_COPY_READ_BUFFER', 'GL_COPY_READ_BUFFER_BINDING', None), ('GL_COPY_WRITE_BUFFER', 'GL_COPY_WRITE_BUFFER_BINDING', None), ('GL_DRAW_INDIRECT_BUFFER', 'GL_DRAW_INDIRECT_BUFFER_BINDING', None), ('GL_DISPATCH_INDIRECT_BUFFER', 'GL_DISPATCH_INDIRECT_BUFFER_BINDING', None), ('GL_ELEMENT_ARRAY_BUFFER', 'GL_ELEMENT_ARRAY_BUFFER_BINDING', None), ('GL_PIXEL_PACK_BUFFER', 'GL_PIXEL_PACK_BUFFER_BINDING', None), ('GL_PIXEL_UNPACK_BUFFER', 'GL_PIXEL_UNPACK_BUFFER_BINDING', None), ('GL_QUERY_BUFFER', 'GL_QUERY_BUFFER_BINDING', None), ('GL_SHADER_STORAGE_BUFFER', 'GL_SHADER_STORAGE_BUFFER_BINDING', 'GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS'), ('GL_TEXTURE_BUFFER', 'GL_TEXTURE_BUFFER', None), ('GL_TRANSFORM_FEEDBACK_BUFFER', 'GL_TRANSFORM_FEEDBACK_BUFFER_BINDING', 'GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS'), ('GL_UNIFORM_BUFFER', 'GL_UNIFORM_BUFFER_BINDING', 'GL_MAX_UNIFORM_BUFFER_BINDINGS'), ] def dump_buffer_parameters(self): # general binding points for target, binding, max_bindings in self.buffer_targets: print ' // %s' % target print ' {' print ' writer.beginMember("%s");' % target print ' writer.beginObject();' print ' GLint buffer = 0;' print ' glGetIntegerv(%s, &buffer);' % binding print ' if (buffer) {' self.dump_atoms(glGetBufferParameter, target) print ' }' if max_bindings is not None: # indexed binding points start = target + '_START' size = target + '_SIZE' print ' GLint max_bindings = 0;' print ' glGetIntegerv(%s, &max_bindings);' % max_bindings print ' if (max_bindings) {' print ' writer.beginMember("i");' print ' writer.beginArray();' print ' for (GLint i = 0; i < max_bindings; ++i) {' print ' writer.beginObject();' for pname in [binding, start, size]: self.dump_atom(glGet_i, pname, 'i') print ' writer.endObject();' print ' }' print ' writer.endArray();' print ' writer.endMember();' print ' }' print ' writer.endObject();' print ' writer.endMember();' print ' }' print def dump_texture_parameters(self): print ' {' print ' GLint active_texture = GL_TEXTURE0;' print ' glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture);' print ' GLint max_texture_coords = 0;' print ' if (!context.core) {' print ' glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords);' print ' }' print ' GLint max_combined_texture_image_units = 0;' print ' glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_combined_texture_image_units);' print ' max_combined_texture_image_units = std::max(max_combined_texture_image_units, 2);' print ' GLint max_units = std::max(max_combined_texture_image_units, max_texture_coords);' print ' for (GLint unit = 0; unit < max_units; ++unit) {' print ' char name[32];' print ' snprintf(name, sizeof name, "GL_TEXTURE%i", unit);' print ' writer.beginMember(name);' print ' glActiveTexture(GL_TEXTURE0 + unit);' print ' writer.beginObject();' print self.dump_atoms(glGet_texture) print print ' for (unsigned i = 0; i < numTextureTargets; ++i) {' print ' GLenum target = textureTargets[i];' print ' GLboolean enabled = GL_FALSE;' print ' if (unit < max_texture_coords &&' print ' (target == GL_TEXTURE_1D ||' print ' target == GL_TEXTURE_2D ||' print ' target == GL_TEXTURE_3D ||' print ' target == GL_TEXTURE_CUBE_MAP ||' print ' target == GL_TEXTURE_RECTANGLE)) {' print ' glGetBooleanv(target, &enabled);' print ' writer.beginMember(enumToString(target));' print ' dumpBoolean(writer, enabled);' print ' writer.endMember();' print ' }' print ' GLint texture = 0;' print ' GLenum binding = getTextureBinding(target);' print ' glGetIntegerv(binding, &texture);' print ' if (enabled || texture) {' print ' dumpTextureTargetParameters(writer, context, target, texture);' print ' }' print ' }' print self.dump_sampler_params() print print ' if (unit < max_texture_coords) {' self.dump_texenv_params() print ' }' print ' writer.endObject();' print ' writer.endMember(); // GL_TEXTUREi' print ' }' print ' glActiveTexture(active_texture);' print ' }' print def dump_framebuffer_parameters(self): print ' {' print ' GLint max_color_attachments = 0;' print ' glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);' print ' GLint framebuffer;' for target, binding in framebuffer_targets: print ' // %s' % target print ' framebuffer = 0;' print ' glGetIntegerv(%s, &framebuffer);' % binding print ' if (framebuffer) {' print ' writer.beginMember("%s");' % target print ' writer.beginObject();' print ' dumpObjectLabel(writer, context, GL_FRAMEBUFFER, framebuffer, "GL_FRAMEBUFFER_LABEL");' print ' for (GLint i = 0; i < max_color_attachments; ++i) {' print ' GLint color_attachment = GL_COLOR_ATTACHMENT0 + i;' print ' dumpFramebufferAttachementParameters(writer, context, %s, color_attachment);' % target print ' }' print ' dumpFramebufferAttachementParameters(writer, context, %s, GL_DEPTH_ATTACHMENT);' % target print ' dumpFramebufferAttachementParameters(writer, context, %s, GL_STENCIL_ATTACHMENT);' % target print ' writer.endObject();' print ' writer.endMember(); // %s' % target print ' }' print print ' }' print def dump_attachment_parameters(self, target, attachment): print ' {' print ' GLint object_type = GL_NONE;' print ' glGetFramebufferAttachmentParameteriv(%s, %s, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &object_type);' % (target, attachment) print ' if (object_type != GL_NONE) {' print ' writer.beginMember(enumToString(%s));' % attachment print ' writer.beginObject();' self.dump_atoms(glGetFramebufferAttachmentParameter, target, attachment) print ' GLint object_name = 0;' print ' glGetFramebufferAttachmentParameteriv(%s, %s, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &object_name);' % (target, attachment) print ' dumpObjectLabel(writer, context, object_type, object_name, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_LABEL");' print ' writer.endObject();' print ' writer.endMember(); // GL_x_ATTACHMENT' print ' }' print ' }' def dump_atoms(self, getter, *args): for _, _, name in getter.iter(): self.dump_atom(getter, *(args + (name,))) def dump_atom(self, getter, *args): name = args[getter.pnameIdx] print ' // %s' % name print ' {' print ' flushErrors();' type, value = getter(*args) print ' if (glGetError() != GL_NO_ERROR) {' #print ' std::cerr << "warning: %s(%s) failed\\n";' % (inflection, name) print ' flushErrors();' print ' } else {' print ' writer.beginMember("%s");' % name JsonWriter().visit(type, value) print ' writer.endMember();' print ' }' print ' }' print if __name__ == '__main__': StateDumper().dump() tmpNnpnZF/retrace/glws.cpp0000664000175000017500000000442612543167424015077 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "glproc.hpp" #include "glws.hpp" namespace glws { bool checkExtension(const char *extName, const char *extString) { assert(extName); if (!extString) { return false; } const char *p = extString; const char *q = extName; char c; do { c = *p++; if (c == '\0' || c == ' ') { if (q && *q == '\0') { return true; } else { q = extName; } } else { if (q && *q == c) { ++q; } else { q = 0; } } } while (c); return false; } void Drawable::copySubBuffer(int x, int y, int width, int height) { std::cerr << "warning: copySubBuffer not yet implemented\n"; } bool Context::hasExtension(const char *string) { if (extensions.strings.empty()) { extensions.getCurrentContextExtensions(profile); } return extensions.has(string); } } /* namespace glws */ tmpNnpnZF/retrace/d3d10state.hpp0000664000175000017500000000633412543167424016004 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include #include "state_writer.hpp" #include "com_ptr.hpp" #include "d3dshader.hpp" #include "d3dstate.hpp" #include "d3d10imports.hpp" namespace d3dstate { template< typename T > inline std::vector getPrivateData(T *pObject, REFGUID guid) { std::vector Data; if (!pObject) { return Data; } UINT DataLength = 0; char dummy; HRESULT hr; hr = pObject->GetPrivateData(guid, &DataLength, &dummy); if (hr != DXGI_ERROR_MORE_DATA) { return Data; } Data.resize(DataLength); hr = pObject->GetPrivateData(guid, &DataLength, &Data[0]); if (FAILED(hr)) { Data.clear(); } return Data; } template< typename T > inline void dumpShader(StateWriter &writer, const char *name, T *pShader) { if (!pShader) { return; } /* * There is no method to get the shader byte code, so the creator is supposed to * attach it via the SetPrivateData method. */ std::vector ShaderBytecode = getPrivateData(pShader, GUID_D3DSTATE); if (ShaderBytecode.empty()) { return; } com_ptr pDisassembly; HRESULT hr; hr = DisassembleShader(&ShaderBytecode[0], ShaderBytecode.size(), &pDisassembly); if (SUCCEEDED(hr)) { writer.beginMember(name); writer.writeString((const char *)pDisassembly->GetBufferPointer() /*, pDisassembly->GetBufferSize() */); writer.endMember(); } } template< typename T > inline std::string getObjectName(T *pObject) { std::vector ObjectName = getPrivateData(pObject, WKPDID_D3DDebugObjectName); return std::string(ObjectName.begin(), ObjectName.end()); } image::Image * getSubResourceImage(ID3D10Device *pDevice, ID3D10Resource *pResource, DXGI_FORMAT Format, UINT ArraySlice, UINT MipSlice); } /* namespace d3dstate */ tmpNnpnZF/retrace/d3dretrace_main.cpp0000664000175000017500000000376112543167424017150 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "os_string.hpp" #include "d3dstate.hpp" #include "retrace.hpp" #include "d3dretrace.hpp" void retrace::setFeatureLevel(const char *featureLevel) { /* TODO: Allow to override D3D feature level. */ } void retrace::setUp(void) { } void retrace::addCallbacks(retrace::Retracer &retracer) { retracer.addCallbacks(d3dretrace::ddraw_callbacks); retracer.addCallbacks(d3dretrace::d3d8_callbacks); retracer.addCallbacks(d3dretrace::d3d9_callbacks); #ifdef HAVE_DXGI retracer.addCallbacks(d3dretrace::dxgi_callbacks); #endif } void retrace::flushRendering(void) { } void retrace::finishRendering(void) { } void retrace::waitForInput(void) { /* TODO */ } void retrace::cleanUp(void) { } tmpNnpnZF/retrace/state_writer.hpp0000664000175000017500000001016112543167424016635 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include #include #include namespace image { class Image; } /* * Abstract base class for writing state. */ class StateWriter { public: virtual ~StateWriter(); virtual void beginObject(void) = 0; virtual void endObject(void) = 0; virtual void beginMember(const char * name) = 0; inline void beginMember(const std::string &name) { beginMember(name.c_str()); } virtual void endMember(void) = 0; virtual void beginArray(void) = 0; virtual void endArray(void) = 0; virtual void writeString(const char *) = 0; inline void writeString(const std::string &s) { writeString(s.c_str()); } virtual void writeBlob(const void *bytes, size_t size) = 0; virtual void writeNull(void) = 0; virtual void writeBool(bool) = 0; // FIXME: always using long long is inneficient, // but providing overloaded methods for different size types requires extreme care to avoid ambigiuity virtual void writeSInt(signed long long) = 0; virtual void writeUInt(unsigned long long) = 0; template inline void writeInt(T i, typename std::enable_if::value>::type* = 0) { writeSInt(i); } template inline void writeInt(T u, typename std::enable_if::value>::type* = 0) { writeUInt(u); } template inline void writeInt(T e, typename std::enable_if::value>::type* = 0) { writeSInt(static_cast(e)); } virtual void writeFloat(float) = 0; virtual void writeFloat(double) = 0; inline void writeStringMember(const char *name, const char *s) { beginMember(name); writeString(s); endMember(); } inline void writeBoolMember(const char *name, bool b) { beginMember(name); writeBool(b); endMember(); } template inline void writeFloatMember(const char *name, T f) { beginMember(name); writeFloat(f); endMember(); } template inline void writeIntMember(const char *name, T n) { beginMember(name); writeInt(n); endMember(); } struct ImageDesc { unsigned depth; std::string format; ImageDesc() : depth(1), format("UNKNOWN") {} }; void writeImage(image::Image *image, const ImageDesc & desc); inline void writeImage(image::Image *image) { ImageDesc desc; writeImage(image, desc); } }; StateWriter * createJSONStateWriter(std::ostream &os); StateWriter * createUBJSONStateWriter(std::ostream &os); tmpNnpnZF/retrace/dxgiretrace.py0000775000175000017500000005147512543167424016303 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """D3D retracer generator.""" import sys from dllretrace import DllRetracer as Retracer import specs.dxgi from specs.stdapi import API from specs.winapi import LPCSTR from specs.dxgi import dxgi from specs.d3d10 import d3d10, d3d10_1 from specs.d3d11 import d3d11 class D3DRetracer(Retracer): def retraceApi(self, api): print '// Swizzling mapping for lock addresses, mapping a (pDeviceContext, pResource, Subresource) -> void *' print 'typedef std::pair< IUnknown *, UINT > SubresourceKey;' print 'static std::map< IUnknown *, std::map< SubresourceKey, void * > > g_Maps;' print self.table_name = 'd3dretrace::dxgi_callbacks' Retracer.retraceApi(self, api) createDeviceFunctionNames = [ "D3D10CreateDevice", "D3D10CreateDeviceAndSwapChain", "D3D10CreateDevice1", "D3D10CreateDeviceAndSwapChain1", "D3D11CreateDevice", "D3D11CreateDeviceAndSwapChain", ] def invokeFunction(self, function): if function.name in self.createDeviceFunctionNames: # create windows as neccessary if 'pSwapChainDesc' in function.argNames(): print r' d3dretrace::createWindowForSwapChain(pSwapChainDesc);' # Compensate for the fact we don't trace DXGI object creation if function.name.startswith('D3D11CreateDevice'): print r' if (DriverType == D3D_DRIVER_TYPE_UNKNOWN && !pAdapter) {' print r' DriverType = D3D_DRIVER_TYPE_HARDWARE;' print r' }' if function.name.startswith('D3D10CreateDevice'): # Toggle debugging print r' Flags &= ~D3D10_CREATE_DEVICE_DEBUG;' print r' if (retrace::debug) {' print r' HMODULE hD3d10SdkLayers = LoadLibraryA("d3d10sdklayers");' print r' if (hD3d10SdkLayers) {' print r' FreeLibrary(hD3d10SdkLayers);' print r' Flags |= D3D10_CREATE_DEVICE_DEBUG;' print r' } else {' print r' retrace::warning(call) << "Direct3D 10.x SDK Debug Layer (d3d10sdklayers.dll) not available, continuing without debug output\n";' print r' }' print r' }' # Force driver self.forceDriver('D3D10_DRIVER_TYPE') if function.name.startswith('D3D11CreateDevice'): # Toggle debugging print r' Flags &= ~D3D11_CREATE_DEVICE_DEBUG;' print r' if (retrace::debug) {' print r' HRESULT hr = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_NULL, 0, D3D11_CREATE_DEVICE_DEBUG, NULL, 0, D3D11_SDK_VERSION, NULL, NULL, NULL);' print r' if (SUCCEEDED(hr)) {' print r' Flags |= D3D11_CREATE_DEVICE_DEBUG;' print r' } else {' print r' retrace::warning(call) << "Direct3D 11.x SDK Debug Layer (d3d11*sdklayers.dll) not available, continuing without debug output\n";' print r' }' print r' }' # Force driver self.forceDriver('D3D_DRIVER_TYPE') Retracer.invokeFunction(self, function) def checkResult(self, interface, methodOrFunction): # Catch when device is removed, and report the reason. if str(methodOrFunction.type) == 'HRESULT': if interface is not None: getDeviceRemovedReasonMethod = interface.getMethodByName("GetDeviceRemovedReason") if getDeviceRemovedReasonMethod is not None: print r' if (FAILED(_result)) {' print r' retrace::failed(call, _result);' print r' if (_result == DXGI_ERROR_DEVICE_REMOVED) {' print r' HRESULT _reason = _this->GetDeviceRemovedReason();' print r' retrace::failed(call, _reason);' print r' exit(1);' print r' }' print r' return;' print r' }' return Retracer.checkResult(self, interface, methodOrFunction) def forceDriver(self, enum): # This can only work when pAdapter is NULL. For non-NULL pAdapter we # need to override inside the EnumAdapters call below print r' if (pAdapter == NULL) {' print r' switch (retrace::driver) {' print r' case retrace::DRIVER_HARDWARE:' print r' DriverType = %s_HARDWARE;' % enum print r' Software = NULL;' print r' break;' print r' case retrace::DRIVER_SOFTWARE:' print r' DriverType = %s_WARP;' % enum print r' Software = NULL;' print r' break;' print r' case retrace::DRIVER_REFERENCE:' print r' DriverType = %s_REFERENCE;' % enum print r' Software = NULL;' print r' break;' print r' case retrace::DRIVER_NULL:' print r' DriverType = %s_NULL;' % enum print r' Software = NULL;' print r' break;' print r' case retrace::DRIVER_MODULE:' print r' DriverType = %s_SOFTWARE;' % enum print r' Software = LoadLibraryA(retrace::driverModule);' print r' if (!Software) {' print r' retrace::warning(call) << "failed to load " << retrace::driverModule << "\n";' print r' }' print r' break;' print r' default:' print r' assert(0);' print r' /* fall-through */' print r' case retrace::DRIVER_DEFAULT:' print r' if (DriverType == %s_SOFTWARE) {' % enum print r' Software = LoadLibraryA("d3d10warp");' print r' if (!Software) {' print r' retrace::warning(call) << "failed to load d3d10warp.dll\n";' print r' }' print r' }' print r' break;' print r' }' print r' } else {' print r' Software = NULL;' print r' }' def invokeInterfaceMethod(self, interface, method): # keep track of the last used device for state dumping if interface.name in ('ID3D10Device', 'ID3D10Device1'): if method.name == 'Release': print r' if (call.ret->toUInt() == 0) {' print r' d3d10Dumper.unbindDevice(_this);' print r' }' else: print r' d3d10Dumper.bindDevice(_this);' if interface.name in ('ID3D11DeviceContext', 'ID3D11DeviceContext1'): if method.name == 'Release': print r' if (call.ret->toUInt() == 0) {' print r' d3d11Dumper.unbindDevice(_this);' print r' }' else: print r' if (_this->GetType() == D3D11_DEVICE_CONTEXT_IMMEDIATE) {' print r' d3d11Dumper.bindDevice(_this);' print r' }' # intercept private interfaces if method.name == 'QueryInterface': print r' if (!d3dretrace::overrideQueryInterface(_this, riid, ppvObj, &_result)) {' Retracer.invokeInterfaceMethod(self, interface, method) print r' }' return # create windows as neccessary if method.name == 'CreateSwapChain': print r' d3dretrace::createWindowForSwapChain(pDesc);' if method.name == 'CreateSwapChainForComposition': print r' HWND hWnd = d3dretrace::createWindow(pDesc->Width, pDesc->Height);' print r' _result = _this->CreateSwapChainForHwnd(pDevice, hWnd, pDesc, NULL, pRestrictToOutput, ppSwapChain);' self.checkResult(interface, method) return if method.name == 'SetFullscreenState': print r' if (retrace::forceWindowed) {' print r' Fullscreen = FALSE;' print r' pTarget = NULL;' print r' }' # notify frame has been completed if method.name == 'Present': if interface.name == 'IDXGISwapChainDWM': print r' com_ptr pSwapChain;' print r' if (SUCCEEDED(_this->QueryInterface(IID_IDXGISwapChain, (void **) &pSwapChain))) {' print r' dxgiDumper.bindDevice(pSwapChain);' print r' } else {' print r' assert(0);' print r' }' else: print r' dxgiDumper.bindDevice(_this);' print r' retrace::frameComplete(call);' if 'pSharedResource' in method.argNames(): print r' if (pSharedResource) {' print r' retrace::warning(call) << "shared surfaces unsupported\n";' print r' pSharedResource = NULL;' print r' }' # Force driver if interface.name.startswith('IDXGIFactory') and method.name.startswith('EnumAdapters'): print r' const char *szSoftware = NULL;' print r' switch (retrace::driver) {' print r' case retrace::DRIVER_REFERENCE:' print r' case retrace::DRIVER_SOFTWARE:' print r' szSoftware = "d3d10warp.dll";' print r' break;' print r' case retrace::DRIVER_MODULE:' print r' szSoftware = retrace::driverModule;' print r' break;' print r' default:' print r' break;' print r' }' print r' HMODULE hSoftware = NULL;' print r' if (szSoftware) {' print r' hSoftware = LoadLibraryA(szSoftware);' print r' if (!hSoftware) {' print r' retrace::warning(call) << "failed to load " << szSoftware << "\n";' print r' }' print r' }' print r' if (hSoftware) {' print r' _result = _this->CreateSoftwareAdapter(hSoftware, reinterpret_cast(ppAdapter));' print r' } else {' Retracer.invokeInterfaceMethod(self, interface, method) print r' }' return if interface.name.startswith('ID3D10Device') and method.name.startswith('OpenSharedResource'): print r' retrace::warning(call) << "replacing shared resource with checker pattern\n";' print r' D3D10_TEXTURE2D_DESC Desc;' print r' memset(&Desc, 0, sizeof Desc);' print r' Desc.Width = 8;' print r' Desc.Height = 8;' print r' Desc.MipLevels = 1;' print r' Desc.ArraySize = 1;' print r' Desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;' print r' Desc.SampleDesc.Count = 1;' print r' Desc.SampleDesc.Quality = 0;' print r' Desc.Usage = D3D10_USAGE_DEFAULT;' print r' Desc.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D10_BIND_RENDER_TARGET;' print r' Desc.CPUAccessFlags = 0x0;' print r' Desc.MiscFlags = 0 /* D3D10_RESOURCE_MISC_SHARED */;' print r''' static const DWORD Checker[8][8] = { { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U } }; static const D3D10_SUBRESOURCE_DATA InitialData = {Checker, sizeof Checker[0], sizeof Checker}; ''' print r' com_ptr pResource;' print r' _result = _this->CreateTexture2D(&Desc, &InitialData, &pResource);' print r' if (SUCCEEDED(_result)) {' print r' _result = pResource->QueryInterface(ReturnedInterface, ppResource);' print r' }' self.checkResult(interface, method) return if interface.name.startswith('ID3D11Device') and method.name.startswith('OpenSharedResource'): print r' retrace::warning(call) << "replacing shared resource with checker pattern\n";' print if method.name == 'OpenSharedResourceByName': print r' (void)lpName;' print r' (void)dwDesiredAccess;' print print r' D3D11_TEXTURE2D_DESC Desc;' print r' memset(&Desc, 0, sizeof Desc);' print r' Desc.Width = 8;' print r' Desc.Height = 8;' print r' Desc.MipLevels = 1;' print r' Desc.ArraySize = 1;' print r' Desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;' print r' Desc.SampleDesc.Count = 1;' print r' Desc.SampleDesc.Quality = 0;' print r' Desc.Usage = D3D11_USAGE_DEFAULT;' print r' Desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;' print r' Desc.CPUAccessFlags = 0x0;' print r' Desc.MiscFlags = 0 /* D3D11_RESOURCE_MISC_SHARED */;' print r''' static const DWORD Checker[8][8] = { { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U }, { 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U }, {~0U, 0U, ~0U, 0U, ~0U, 0U, ~0U, 0U } }; static const D3D11_SUBRESOURCE_DATA InitialData = {Checker, sizeof Checker[0], sizeof Checker}; ''' print r' com_ptr pResource;' print r' _result = _this->CreateTexture2D(&Desc, &InitialData, &pResource);' print r' if (SUCCEEDED(_result)) {' print r' _result = pResource->QueryInterface(ReturnedInterface, ppResource);' print r' }' self.checkResult(interface, method) return if method.name == 'Map': # Reset _DO_NOT_WAIT flags. Otherwise they may fail, and we have no # way to cope with it (other than retry). mapFlagsArg = method.getArgByName('MapFlags') for flag in mapFlagsArg.type.values: if flag.endswith('_MAP_FLAG_DO_NOT_WAIT'): print r' MapFlags &= ~%s;' % flag if method.name.startswith('UpdateSubresource'): # The D3D10 debug layer is buggy (or at least inconsistent with the # runtime), as it seems to estimate and enforce the data size based on the # SrcDepthPitch, even for non 3D textures, but in some traces # SrcDepthPitch is garbagge for non 3D textures. # XXX: It also seems to expect padding bytes at the end of the last # row, but we never record (or allocate) those... print r' if (retrace::debug && pDstBox && pDstBox->front == 0 && pDstBox->back == 1) {' print r' SrcDepthPitch = 0;' print r' }' if method.name == 'SetGammaControl': # This method is only supported while in full-screen mode print r' if (retrace::forceWindowed) {' print r' return;' print r' }' Retracer.invokeInterfaceMethod(self, interface, method) # process events after presents if method.name == 'Present': print r' d3dretrace::processEvents();' if method.name in ('Map', 'Unmap'): if interface.name.startswith('ID3D11DeviceContext'): print ' void * & _pbData = g_Maps[_this][SubresourceKey(pResource, Subresource)];' else: subresourceArg = method.getArgByName('Subresource') if subresourceArg is None: print ' UINT Subresource = 0;' print ' void * & _pbData = g_Maps[0][SubresourceKey(_this, Subresource)];' if method.name == 'Map': print ' _MAP_DESC _MapDesc;' print ' _getMapDesc(_this, %s, _MapDesc);' % ', '.join(method.argNames()) print ' size_t _MappedSize = _MapDesc.Size;' print ' if (_MapDesc.Size) {' print ' _pbData = _MapDesc.pData;' if interface.name.startswith('ID3D11DeviceContext'): # XXX: Unforunately this cause many false warnings on 1D and 2D # resources, since the pitches are junk there... #self.checkPitchMismatch(method) pass else: print ' _pbData = _MapDesc.pData;' self.checkPitchMismatch(method) print ' } else {' print ' return;' print ' }' if method.name == 'Unmap': print ' if (_pbData) {' print ' retrace::delRegionByPointer(_pbData);' print ' _pbData = 0;' print ' }' # Attach shader byte code for lookup if 'pShaderBytecode' in method.argNames(): ppShader = method.args[-1] assert ppShader.output print r' if (retrace::dumpingState && SUCCEEDED(_result)) {' print r' (*%s)->SetPrivateData(d3dstate::GUID_D3DSTATE, BytecodeLength, pShaderBytecode);' % ppShader.name print r' }' def extractArg(self, function, arg, arg_type, lvalue, rvalue): # Set object names if function.name == 'SetPrivateData' and arg.name == 'pData': iid = function.args[0].name print r' if (%s != WKPDID_D3DDebugObjectName) {' % iid print r' return;' print r' }' # Interpret argument as string Retracer.extractArg(self, function, arg, LPCSTR, lvalue, rvalue) print r' assert(pData);' print r' assert(DataSize == strlen((const char *)pData));' return Retracer.extractArg(self, function, arg, arg_type, lvalue, rvalue) def main(): print r'#define INITGUID' print print r'#include ' print print r'#include ' print print r'#include "d3dretrace.hpp"' print r'#include "os_version.hpp"' print print r'#include "d3dretrace_dxgi.hpp"' print r'#include "d3d10imports.hpp"' print r'#include "d3d10size.hpp"' print r'#include "d3d10state.hpp"' print r'#include "d3d11imports.hpp"' print r'#include "d3d11size.hpp"' print r'#include "d3dstate.hpp"' print print '''static d3dretrace::D3DDumper dxgiDumper;''' print '''static d3dretrace::D3DDumper d3d10Dumper;''' print '''static d3dretrace::D3DDumper d3d11Dumper;''' print api = API() api.addModule(dxgi) api.addModule(d3d10) api.addModule(d3d10_1) api.addModule(d3d11) retracer = D3DRetracer() retracer.retraceApi(api) if __name__ == '__main__': main() tmpNnpnZF/retrace/retrace_swizzle.hpp0000664000175000017500000000710212543167424017336 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "trace_model.hpp" namespace retrace { /** * Handle map. * * It is just like a regular std::map container, but lookups of missing * keys return the key instead of default constructor. * * This is necessary for several GL named objects, where one can either request * the implementation to generate an unique name, or pick a value never used * before. * * XXX: In some cases, instead of returning the key, it would make more sense * to return an unused data value (e.g., container count). */ template class map { private: typedef std::map base_type; base_type base; public: T & operator[] (const T &key) { typename base_type::iterator it; it = base.find(key); if (it == base.end()) { return (base[key] = key); } return it->second; } const T & operator[] (const T &key) const { typename base_type::const_iterator it; it = base.find(key); if (it == base.end()) { return (base[key] = key); } return it->second; } /* * Handle situations where the application declares an array like * * uniform vec4 myMatrix[4]; * * then calls glGetUniformLocation(..., "myMatrix") and then infer the slot * numbers rather than explicitly calling glGetUniformLocation(..., * "myMatrix[0]"), etc. */ T lookupUniformLocation(const T &key) { typename base_type::const_iterator it; it = base.upper_bound(key); if (it != base.begin()) { --it; } else { return (base[key] = key); } T t = it->second + (key - it->first); return t; } }; void addRegion(trace::Call &call, unsigned long long address, void *buffer, unsigned long long size); void delRegionByPointer(void *ptr); void toRange(trace::Value &value, void * & ptr, size_t & len); void * toPointer(trace::Value &value, bool bind = false); void addObj(trace::Call &call, trace::Value &value, void *obj); void delObj(trace::Value &value); void * toObjPointer(trace::Call &call, trace::Value &value); template< class T > inline T * asObjPointer(trace::Call &call, trace::Value &value) { return static_cast(toObjPointer(call, value)); } } /* namespace retrace */ tmpNnpnZF/retrace/glws_xlib.cpp0000664000175000017500000001327712543167424016121 0ustar chrischris/************************************************************************** * * Copyright 2014 VMware, Inc. * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "glproc.hpp" #include "glws.hpp" namespace glws { Display *display = NULL; int screen = 0; static void describeEvent(const XEvent &event) { if (0) { switch (event.type) { case ConfigureNotify: std::cerr << "ConfigureNotify"; break; case Expose: std::cerr << "Expose"; break; case KeyPress: std::cerr << "KeyPress"; break; case MapNotify: std::cerr << "MapNotify"; break; case ReparentNotify: std::cerr << "ReparentNotify"; break; default: std::cerr << "Event " << event.type; } std::cerr << " " << event.xany.window << "\n"; } } static void processEvent(XEvent &event) { describeEvent(event); switch (event.type) { case KeyPress: { char buffer[32]; KeySym keysym; XLookupString(&event.xkey, buffer, sizeof buffer - 1, &keysym, NULL); if (keysym == XK_Escape) { exit(0); } } break; } } static int errorHandler(Display *dpy, XErrorEvent *error) { char buffer[512]; XGetErrorText(dpy, error->error_code, buffer, sizeof buffer); std::cerr << "error: xlib: " << buffer; if (error->request_code < 128) { std::string request_code = std::to_string(error->request_code); XGetErrorDatabaseText(dpy, "XRequest", request_code.c_str(), "", buffer, sizeof buffer); std::cerr << " in " << buffer; } std::cerr << "\n"; return 0; } static int (*oldErrorHandler)(Display *, XErrorEvent *) = NULL; void initX(void) { #ifndef NDEBUG _Xdebug = 1; #endif XInitThreads(); oldErrorHandler = XSetErrorHandler(errorHandler); display = XOpenDisplay(NULL); if (!display) { std::cerr << "error: unable to open display " << XDisplayName(NULL) << "\n"; exit(1); } screen = DefaultScreen(display); } void cleanupX(void) { if (display) { XCloseDisplay(display); display = NULL; } XSetErrorHandler(oldErrorHandler); oldErrorHandler = NULL; } bool processEvents(void) { while (XPending(display) > 0) { XEvent event; XNextEvent(display, &event); processEvent(event); } return true; } static void waitForEvent(Window window, int type) { XEvent event; do { XWindowEvent(display, window, StructureNotifyMask | KeyPressMask, &event); processEvent(event); } while (event.type != type); } void processKeys(Window window) { XEvent event; while (XCheckWindowEvent(display, window, StructureNotifyMask | KeyPressMask, &event)) { processEvent(event); } } Window createWindow(XVisualInfo *visinfo, const char *name, int width, int height) { Window root = RootWindow(display, screen); /* window attributes */ XSetWindowAttributes attr; attr.background_pixel = 0; attr.border_pixel = 0; attr.colormap = XCreateColormap(display, root, visinfo->visual, AllocNone); attr.event_mask = StructureNotifyMask | KeyPressMask; unsigned long mask; mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; int x = 0, y = 0; Window window = XCreateWindow( display, root, x, y, width, height, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &attr); XSizeHints sizehints; sizehints.x = x; sizehints.y = y; sizehints.width = width; sizehints.height = height; sizehints.flags = USSize | USPosition; XSetNormalHints(display, window, &sizehints); XSetStandardProperties( display, window, name, name, None, (char **)NULL, 0, &sizehints); return window; } void resizeWindow(Window window, int w, int h) { // Tell the window manager to respect the requested size XSizeHints size_hints; size_hints.max_width = size_hints.min_width = w; size_hints.max_height = size_hints.min_height = h; size_hints.flags = PMinSize | PMaxSize; XSetWMNormalHints(display, window, &size_hints); XResizeWindow(display, window, w, h); waitForEvent(window, ConfigureNotify); } void showWindow(Window window) { XMapWindow(display, window); waitForEvent(window, MapNotify); } } /* namespace glws */ tmpNnpnZF/retrace/glretrace.hpp0000664000175000017500000000625512543167424016102 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include "glws.hpp" #include "retrace.hpp" namespace glretrace { struct Context { Context(glws::Context* context) : wsContext(context), drawable(0), activeProgram(0), used(false) { } ~Context(); glws::Context* wsContext; // Bound drawable glws::Drawable *drawable; GLuint activeProgram; bool used; // Context must be current inline bool hasExtension(const char *extension) const { return wsContext->hasExtension(extension); } }; extern glprofile::Profile defaultProfile; extern bool insideList; extern bool insideGlBeginEnd; extern bool supportsARBShaderObjects; Context * getCurrentContext(void); int parseAttrib(const trace::Value *attribs, int param, int default_ = 0, int terminator = 0); glprofile::Profile parseContextAttribList(const trace::Value *attribs); glws::Drawable * createDrawable(glprofile::Profile profile); glws::Drawable * createDrawable(void); glws::Drawable * createPbuffer(int width, int height); Context * createContext(Context *shareContext, glprofile::Profile profile); Context * createContext(Context *shareContext = 0); bool makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context); void checkGlError(trace::Call &call); extern const retrace::Entry gl_callbacks[]; extern const retrace::Entry cgl_callbacks[]; extern const retrace::Entry glx_callbacks[]; extern const retrace::Entry wgl_callbacks[]; extern const retrace::Entry egl_callbacks[]; void frame_complete(trace::Call &call); void initContext(); void updateDrawable(int width, int height); void flushQueries(); void beginProfile(trace::Call &call, bool isDraw); void endProfile(trace::Call &call, bool isDraw); GLenum blockOnFence(trace::Call &call, GLsync sync, GLbitfield flags); GLenum clientWaitSync(trace::Call &call, GLsync sync, GLbitfield flags, GLuint64 timeout); } /* namespace glretrace */ tmpNnpnZF/retrace/glretrace.py0000664000175000017500000006756612543167424015757 0ustar chrischris########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """GL retracer generator.""" import re import sys from retrace import Retracer import specs.stdapi as stdapi import specs.glapi as glapi class GlRetracer(Retracer): table_name = 'glretrace::gl_callbacks' def retraceApi(self, api): # Ensure pack function have side effects abort = False for function in api.getAllFunctions(): if not function.sideeffects and self.pack_function_regex.match(function.name): sys.stderr.write('error: function %s must have sideeffects\n' % function.name) abort = True if abort: sys.exit(1) Retracer.retraceApi(self, api) array_pointer_function_names = set(( "glVertexPointer", "glNormalPointer", "glColorPointer", "glIndexPointer", "glTexCoordPointer", "glEdgeFlagPointer", "glFogCoordPointer", "glSecondaryColorPointer", "glInterleavedArrays", "glVertexPointerEXT", "glNormalPointerEXT", "glColorPointerEXT", "glIndexPointerEXT", "glTexCoordPointerEXT", "glEdgeFlagPointerEXT", "glFogCoordPointerEXT", "glSecondaryColorPointerEXT", "glVertexAttribPointer", "glVertexAttribPointerARB", "glVertexAttribPointerNV", "glVertexAttribIPointer", "glVertexAttribIPointerEXT", "glVertexAttribLPointer", "glVertexAttribLPointerEXT", #"glMatrixIndexPointerARB", )) draw_arrays_function_regex = re.compile(r'^gl([A-Z][a-z]+)*Draw(Range)?Arrays([A-Z][a-zA-Z]*)?$' ) draw_elements_function_regex = re.compile(r'^gl([A-Z][a-z]+)*Draw(Range)?Elements([A-Z][a-zA-Z]*)?$' ) draw_indirect_function_regex = re.compile(r'^gl([A-Z][a-z]+)*Draw(Range)?(Arrays|Elements)Indirect([A-Z][a-zA-Z]*)?$' ) misc_draw_function_regex = re.compile(r'^gl(' + r'|'.join([ r'CallList', r'CallLists', r'Clear', r'End', r'DrawPixels', r'DrawTransformFeedback([A-Z][a-zA-Z]*)?', r'BlitFramebuffer', r'Rect[dfis]v?', r'EvalMesh[0-9]+', ]) + r')[0-9A-Z]*$') bind_framebuffer_function_regex = re.compile(r'^glBindFramebuffer[0-9A-Z]*$') # Names of the functions that can pack into the current pixel buffer # object. See also the ARB_pixel_buffer_object specification. pack_function_regex = re.compile(r'^gl(' + r'|'.join([ r'Getn?Histogram', r'Getn?PolygonStipple', r'Getn?PixelMap[a-z]+v', r'Getn?Minmax', r'Getn?(Convolution|Separable)Filter', r'Getn?(Compressed)?(Multi)?Tex(ture)?(Sub)?Image', r'Readn?Pixels', ]) + r')[0-9A-Z]*$') map_function_regex = re.compile(r'^glMap(|Named|Object)Buffer(Range)?[0-9A-Z]*$') unmap_function_regex = re.compile(r'^glUnmap(|Named|Object)Buffer[0-9A-Z]*$') def retraceFunctionBody(self, function): is_array_pointer = function.name in self.array_pointer_function_names is_draw_arrays = self.draw_arrays_function_regex.match(function.name) is not None is_draw_elements = self.draw_elements_function_regex.match(function.name) is not None is_draw_indirect = self.draw_indirect_function_regex.match(function.name) is not None is_misc_draw = self.misc_draw_function_regex.match(function.name) # For backwards compatibility with old traces where non VBO drawing was supported if (is_array_pointer or is_draw_arrays or is_draw_elements) and not is_draw_indirect: print ' if (retrace::parser.version < 1) {' if is_array_pointer or is_draw_arrays: print ' GLint _array_buffer = 0;' print ' glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &_array_buffer);' print ' if (!_array_buffer) {' self.failFunction(function) print ' }' if is_draw_elements: print ' GLint _element_array_buffer = 0;' print ' glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &_element_array_buffer);' print ' if (!_element_array_buffer) {' self.failFunction(function) print ' }' print ' }' # When no pack buffer object is bound, the pack functions are no-ops. if self.pack_function_regex.match(function.name): print ' GLint _pack_buffer = 0;' print ' glGetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &_pack_buffer);' print ' if (!_pack_buffer) {' print ' return;' print ' }' # Pre-snapshots if self.bind_framebuffer_function_regex.match(function.name): print ' assert(call.flags & trace::CALL_FLAG_SWAP_RENDERTARGET);' if function.name == 'glStringMarkerGREMEDY': return if function.name == 'glFrameTerminatorGREMEDY': print ' glretrace::frame_complete(call);' return Retracer.retraceFunctionBody(self, function) # Post-snapshots if function.name in ('glFlush', 'glFinish'): print ' if (!retrace::doubleBuffer) {' print ' glretrace::frame_complete(call);' print ' }' if is_draw_arrays or is_draw_elements or is_misc_draw: print ' assert(call.flags & trace::CALL_FLAG_RENDER);' def invokeFunction(self, function): # Infer the drawable size from GL calls if function.name == "glViewport": print ' glretrace::updateDrawable(x + width, y + height);' if function.name == "glViewportArray": # We are concerned about drawables so only care for the first viewport print ' if (first == 0 && count > 0) {' print ' GLfloat x = v[0], y = v[1], w = v[2], h = v[3];' print ' glretrace::updateDrawable(x + w, y + h);' print ' }' if function.name == "glViewportIndexedf": print ' if (index == 0) {' print ' glretrace::updateDrawable(x + w, y + h);' print ' }' if function.name == "glViewportIndexedfv": print ' if (index == 0) {' print ' GLfloat x = v[0], y = v[1], w = v[2], h = v[3];' print ' glretrace::updateDrawable(x + w, y + h);' print ' }' if function.name in ('glBlitFramebuffer', 'glBlitFramebufferEXT'): # Some applications do all their rendering in a framebuffer, and # then just blit to the drawable without ever calling glViewport. print ' glretrace::updateDrawable(std::max(dstX0, dstX1), std::max(dstY0, dstY1));' if function.name == "glEnd": print ' glretrace::insideGlBeginEnd = false;' if function.name.startswith('gl') and not function.name.startswith('glX'): print r' if (retrace::debug && !glretrace::getCurrentContext()) {' print r' retrace::warning(call) << "no current context\n";' print r' }' if function.name == 'memcpy': print ' if (!dest || !src || !n) return;' # Skip glEnable/Disable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB) as we don't # faithfully set the CONTEXT_DEBUG_BIT_ARB flags on context creation. if function.name in ('glEnable', 'glDisable'): print ' if (cap == GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB) return;' # Destroy the buffer mapping if self.unmap_function_regex.match(function.name): print r' GLvoid *ptr = NULL;' if function.name == 'glUnmapBuffer': print r' glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &ptr);' elif function.name == 'glUnmapBufferARB': print r' glGetBufferPointervARB(target, GL_BUFFER_MAP_POINTER_ARB, &ptr);' elif function.name == 'glUnmapBufferOES': print r' glGetBufferPointervOES(target, GL_BUFFER_MAP_POINTER_OES, &ptr);' elif function.name == 'glUnmapNamedBuffer': print r' glGetNamedBufferPointerv(buffer, GL_BUFFER_MAP_POINTER, &ptr);' elif function.name == 'glUnmapNamedBuffer': print r' glGetNamedBufferPointerv(buffer, GL_BUFFER_MAP_POINTER, &ptr);' elif function.name == 'glUnmapNamedBufferEXT': print r' glGetNamedBufferPointervEXT(buffer, GL_BUFFER_MAP_POINTER, &ptr);' elif function.name == 'glUnmapObjectBufferATI': # TODO pass else: assert False print r' if (ptr) {' print r' retrace::delRegionByPointer(ptr);' print r' } else {' print r' retrace::warning(call) << "failed to get mapped pointer\n";' print r' }' if function.name in ('glBindProgramPipeline', 'glBindProgramPipelineEXT'): # Note if glBindProgramPipeline has ever been called print r' if (pipeline) {' print r' _pipelineHasBeenBound = true;' print r' }' is_draw_arrays = self.draw_arrays_function_regex.match(function.name) is not None is_draw_elements = self.draw_elements_function_regex.match(function.name) is not None is_misc_draw = self.misc_draw_function_regex.match(function.name) is not None profileDraw = ( is_draw_arrays or is_draw_elements or is_misc_draw or function.name == 'glBegin' ) # Keep track of active program for call lists if function.name in ('glUseProgram', 'glUseProgramObjectARB'): print r' glretrace::Context *currentContext = glretrace::getCurrentContext();' print r' if (currentContext) {' print r' currentContext->activeProgram = call.arg(0).toUInt();' print r' }' # Only profile if not inside a list as the queries get inserted into list if function.name == 'glNewList': print r' glretrace::insideList = true;' if function.name == 'glEndList': print r' glretrace::insideList = false;' if function.name == 'glBegin' or \ is_draw_arrays or \ is_draw_elements or \ function.name.startswith('glBeginTransformFeedback'): print r' if (retrace::debug && !glretrace::insideList && !glretrace::insideGlBeginEnd && glretrace::getCurrentContext()) {' print r' _validateActiveProgram(call);' print r' }' if function.name != 'glEnd': print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' if profileDraw: print r' glretrace::beginProfile(call, true);' else: print r' glretrace::beginProfile(call, false);' print r' }' if function.name in ('glCreateShaderProgramv', 'glCreateShaderProgramEXT', 'glCreateShaderProgramvEXT'): # When dumping state, break down glCreateShaderProgram* so that the # shader source can be recovered. print r' if (retrace::dumpingState) {' print r' GLuint _shader = glCreateShader(type);' print r' if (_shader) {' if not function.name.startswith('glCreateShaderProgramv'): print r' GLsizei count = 1;' print r' const GLchar **strings = &string;' print r' glShaderSource(_shader, count, strings, NULL);' print r' glCompileShader(_shader);' print r' const GLuint _program = glCreateProgram();' print r' if (_program) {' print r' GLint compiled = GL_FALSE;' print r' glGetShaderiv(_shader, GL_COMPILE_STATUS, &compiled);' if function.name == 'glCreateShaderProgramvEXT': print r' glProgramParameteriEXT(_program, GL_PROGRAM_SEPARABLE, GL_TRUE);' else: print r' glProgramParameteri(_program, GL_PROGRAM_SEPARABLE, GL_TRUE);' print r' if (compiled) {' print r' glAttachShader(_program, _shader);' print r' glLinkProgram(_program);' print r' if (false) glDetachShader(_program, _shader);' print r' }' print r' // TODO: append shader info log to program info log' print r' }' print r' glDeleteShader(_shader);' print r' _result = _program;' print r' } else {' print r' _result = 0;' print r' }' print r' } else {' Retracer.invokeFunction(self, function) print r' }' elif function.name in ('glDetachShader', 'glDetachObjectARB'): print r' if (!retrace::dumpingState) {' Retracer.invokeFunction(self, function) print r' }' elif function.name == 'glClientWaitSync': print r' _result = glretrace::clientWaitSync(call, sync, flags, timeout);' print r' (void)_result;' elif function.name == 'glGetSynciv': print r' if (pname == GL_SYNC_STATUS &&' print r' bufSize >= 1 &&' print r' values != NULL &&' print r' call.arg(4)[0].toSInt() == GL_SIGNALED) {' print r' // Fence was signalled, so ensure it happened here' print r' glretrace::blockOnFence(call, sync, GL_SYNC_FLUSH_COMMANDS_BIT);' print r' (void)length;' print r' }' else: Retracer.invokeFunction(self, function) if function.name == "glBegin": print ' glretrace::insideGlBeginEnd = true;' print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' if profileDraw: print r' glretrace::endProfile(call, true);' else: print r' glretrace::endProfile(call, false);' print r' }' # Error checking if function.name.startswith('gl'): # glGetError is not allowed inside glBegin/glEnd print ' if (retrace::debug && !glretrace::insideGlBeginEnd && glretrace::getCurrentContext()) {' print ' glretrace::checkGlError(call);' if function.name in ('glProgramStringARB', 'glLoadProgramNV'): print r' GLint error_position = -1;' print r' glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_position);' print r' if (error_position != -1) {' print r' const char *error_string = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB);' print r' retrace::warning(call) << "error in position " << error_position << ": " << error_string << "\n";' print r' }' if function.name == 'glCompileShader': print r' GLint compile_status = 0;' print r' glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status);' print r' if (!compile_status) {' print r' retrace::warning(call) << "compilation failed\n";' print r' }' print r' GLint info_log_length = 0;' print r' glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_log_length);' print r' if (info_log_length > 1) {' print r' GLchar *infoLog = new GLchar[info_log_length];' print r' glGetShaderInfoLog(shader, info_log_length, NULL, infoLog);' print r' retrace::warning(call) << infoLog << "\n";' print r' delete [] infoLog;' print r' }' if function.name in ('glLinkProgram', 'glCreateShaderProgramv', 'glCreateShaderProgramEXT', 'glCreateShaderProgramvEXT', 'glProgramBinary', 'glProgramBinaryOES'): if function.name.startswith('glCreateShaderProgram'): print r' GLuint program = _result;' print r' GLint link_status = 0;' print r' glGetProgramiv(program, GL_LINK_STATUS, &link_status);' print r' if (!link_status) {' print r' retrace::warning(call) << "link failed\n";' print r' }' print r' GLint info_log_length = 0;' print r' glGetProgramiv(program, GL_INFO_LOG_LENGTH, &info_log_length);' print r' if (info_log_length > 1) {' print r' GLchar *infoLog = new GLchar[info_log_length];' print r' glGetProgramInfoLog(program, info_log_length, NULL, infoLog);' print r' retrace::warning(call) << infoLog << "\n";' print r' delete [] infoLog;' print r' }' if function.name == 'glCompileShaderARB': print r' GLint compile_status = 0;' print r' glGetObjectParameterivARB(shaderObj, GL_OBJECT_COMPILE_STATUS_ARB, &compile_status);' print r' if (!compile_status) {' print r' retrace::warning(call) << "compilation failed\n";' print r' }' print r' GLint info_log_length = 0;' print r' glGetObjectParameterivARB(shaderObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);' print r' if (info_log_length > 1) {' print r' GLchar *infoLog = new GLchar[info_log_length];' print r' glGetInfoLogARB(shaderObj, info_log_length, NULL, infoLog);' print r' retrace::warning(call) << infoLog << "\n";' print r' delete [] infoLog;' print r' }' if function.name == 'glLinkProgramARB': print r' GLint link_status = 0;' print r' glGetObjectParameterivARB(programObj, GL_OBJECT_LINK_STATUS_ARB, &link_status);' print r' if (!link_status) {' print r' retrace::warning(call) << "link failed\n";' print r' }' print r' GLint info_log_length = 0;' print r' glGetObjectParameterivARB(programObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);' print r' if (info_log_length > 1) {' print r' GLchar *infoLog = new GLchar[info_log_length];' print r' glGetInfoLogARB(programObj, info_log_length, NULL, infoLog);' print r' retrace::warning(call) << infoLog << "\n";' print r' delete [] infoLog;' print r' }' if self.map_function_regex.match(function.name): print r' if (!_result) {' print r' retrace::warning(call) << "failed to map buffer\n";' print r' }' if self.unmap_function_regex.match(function.name) and function.type is not stdapi.Void: print r' if (!_result) {' print r' retrace::warning(call) << "failed to unmap buffer\n";' print r' }' if function.name in ('glGetAttribLocation', 'glGetAttribLocationARB'): print r' GLint _origResult = call.ret->toSInt();' print r' if (_result != _origResult) {' print r' retrace::warning(call) << "vertex attrib location mismatch " << _origResult << " -> " << _result << "\n";' print r' }' if function.name in ('glCheckFramebufferStatus', 'glCheckFramebufferStatusEXT', 'glCheckNamedFramebufferStatus', 'glCheckNamedFramebufferStatusEXT'): print r' GLint _origResult = call.ret->toSInt();' print r' if (_origResult == GL_FRAMEBUFFER_COMPLETE &&' print r' _result != GL_FRAMEBUFFER_COMPLETE) {' print r' retrace::warning(call) << "incomplete framebuffer (" << glstate::enumToString(_result) << ")\n";' print r' }' print ' }' # Query the buffer length for whole buffer mappings if self.map_function_regex.match(function.name): if 'length' in function.argNames(): assert 'BufferRange' in function.name else: assert 'BufferRange' not in function.name print r' GLint length = 0;' if function.name in ('glMapBuffer', 'glMapBufferOES'): print r' glGetBufferParameteriv(target, GL_BUFFER_SIZE, &length);' elif function.name == 'glMapBufferARB': print r' glGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, &length);' elif function.name == 'glMapNamedBuffer': print r' glGetNamedBufferParameteriv(buffer, GL_BUFFER_SIZE, &length);' elif function.name == 'glMapNamedBufferEXT': print r' glGetNamedBufferParameterivEXT(buffer, GL_BUFFER_SIZE, &length);' elif function.name == 'glMapObjectBufferATI': print r' glGetObjectBufferivATI(buffer, GL_OBJECT_BUFFER_SIZE_ATI, &length);' else: assert False def extractArg(self, function, arg, arg_type, lvalue, rvalue): if function.name in self.array_pointer_function_names and arg.name == 'pointer': print ' %s = static_cast<%s>(retrace::toPointer(%s, true));' % (lvalue, arg_type, rvalue) return if self.draw_elements_function_regex.match(function.name) and arg.name == 'indices' or\ self.draw_indirect_function_regex.match(function.name) and arg.name == 'indirect': self.extractOpaqueArg(function, arg, arg_type, lvalue, rvalue) return # Handle pointer with offsets into the current pack pixel buffer # object. if self.pack_function_regex.match(function.name) and arg.output: assert isinstance(arg_type, (stdapi.Pointer, stdapi.Array, stdapi.Blob, stdapi.Opaque)) print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, arg_type, rvalue) return if (arg.type.depends(glapi.GLlocation) or \ arg.type.depends(glapi.GLsubroutine)) \ and 'program' not in function.argNames(): # Determine the active program for uniforms swizzling print ' GLint program = _getActiveProgram();' if arg.type is glapi.GLlocationARB \ and 'programObj' not in function.argNames(): print ' GLhandleARB programObj = glGetHandleARB(GL_PROGRAM_OBJECT_ARB);' Retracer.extractArg(self, function, arg, arg_type, lvalue, rvalue) # Don't try to use more samples than the implementation supports if arg.name == 'samples': if function.name == 'glRasterSamplesEXT': assert arg.type is glapi.GLuint print ' GLint max_samples = 0;' print ' glGetIntegerv(GL_MAX_RASTER_SAMPLES_EXT, &max_samples);' print ' if (samples > static_cast(max_samples)) {' print ' samples = static_cast(max_samples);' print ' }' else: assert arg.type is glapi.GLsizei print ' GLint max_samples = 0;' print ' glGetIntegerv(GL_MAX_SAMPLES, &max_samples);' print ' if (samples > max_samples) {' print ' samples = max_samples;' print ' }' # These parameters are referred beyond the call life-time # TODO: Replace ad-hoc solution for bindable parameters with general one if function.name in ('glFeedbackBuffer', 'glSelectBuffer') and arg.output: print ' _allocator.bind(%s);' % arg.name if __name__ == '__main__': print r''' #include #include "glproc.hpp" #include "glretrace.hpp" #include "glstate.hpp" static bool _pipelineHasBeenBound = false; static GLint _getActiveProgram(void); static void _validateActiveProgram(trace::Call &call); ''' api = stdapi.API() api.addModule(glapi.glapi) retracer = GlRetracer() retracer.retraceApi(api) print r''' static GLint _getActiveProgram(void) { GLint program = -1; if (glretrace::insideList) { // glUseProgram & glUseProgramObjectARB are display-list-able glretrace::Context *currentContext = glretrace::getCurrentContext(); program = _program_map[currentContext->activeProgram]; } else { GLint pipeline = 0; if (_pipelineHasBeenBound) { glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline); } if (pipeline) { glGetProgramPipelineiv(pipeline, GL_ACTIVE_PROGRAM, &program); } else { glGetIntegerv(GL_CURRENT_PROGRAM, &program); } } return program; } static void _validateActiveProgram(trace::Call &call) { assert(!glretrace::insideList); GLint pipeline = 0; if (_pipelineHasBeenBound) { glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline); } if (pipeline) { // TODO } else { GLint program = 0; glGetIntegerv(GL_CURRENT_PROGRAM, &program); if (!program) { return; } GLint validate_status = GL_FALSE; glGetProgramiv(program, GL_VALIDATE_STATUS, &validate_status); if (validate_status) { // Validate only once return; } glValidateProgram(program); glGetProgramiv(program, GL_VALIDATE_STATUS, &validate_status); if (!validate_status) { retrace::warning(call) << "program validation failed\n"; } GLint info_log_length = 0; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &info_log_length); if (info_log_length > 1) { GLchar *infoLog = new GLchar[info_log_length]; glGetProgramInfoLog(program, info_log_length, NULL, infoLog); retrace::warning(call) << infoLog << "\n"; delete [] infoLog; } } } ''' tmpNnpnZF/retrace/dxgistate_so.py0000664000175000017500000002204212543167424016460 0ustar chrischris########################################################################## # # Copyright 2008-2015 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Common code generation.""" # Adjust path import os.path import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from specs import stdapi from specs import winapi from specs import dxgi from specs import d3d10 from specs import d3d11 from specs import d3d11 class ValueDumper(stdapi.Visitor, stdapi.ExpanderMixin): '''Visitor which generates code to dump any type. ''' # TODO: Don't dump all types inline -- do like trace.py's ComplexValueDumper def visitLiteral(self, literal, instance): if literal.kind in ('SInt', 'UInt'): print ' writer.writeInt(%s);' % (instance) elif literal.kind in ('Float',): print ' writer.writeFloat(%s);' % (instance) else: raise NotImplementedError def visitString(self, string, instance): if not string.wide: cast = 'const char *' suffix = 'String' else: assert False cast = 'const wchar_t *' suffix = 'WString' if cast != string.expr: # reinterpret_cast is necessary for GLubyte * <=> char * instance = 'reinterpret_cast<%s>(%s)' % (cast, instance) assert string.length is None print ' writer.write%s(%s);' % (suffix, instance) def visitConst(self, const, instance): self.visit(const.type, instance) def visitStruct(self, struct, instance): print ' writer.beginObject();' for member in struct.members: memberType, memberName = member if memberName is not None: print ' writer.beginMember("%s");' % memberName self.visitMember(member, instance) if memberName is not None: print ' writer.endMember(); // %s' % memberName print ' writer.endObject();' def visitArray(self, array, instance): length = '_c' + array.type.tag index = '_i' + array.type.tag array_length = self.expand(array.length) print ' if (%s) {' % instance print ' size_t %s = %s > 0 ? %s : 0;' % (length, array_length, array_length) print ' writer.beginArray();' print ' for (size_t %s = 0; %s < %s; ++%s) {' % (index, index, length, index) self.visitElement(index, array.type, '(%s)[%s]' % (instance, index)) print ' }' print ' writer.endArray();' print ' } else {' print ' writer.writeNull();' print ' }' def visitAttribArray(self, array, instance): raise NotImplementedError def visitBlob(self, blob, instance): raise NotImplementedError def visitEnum(self, enum, instance): print ' switch (%s) {' % instance for value in enum.values: print ' case %s:' % value print ' writer.writeString("%s");' % value print ' break;' print ' default:' print ' writer.writeInt(%s);' % instance print ' break;' print ' }' def visitBitmask(self, bitmask, instance): # TODO self.visit(bitmask.type, instance) def visitPointer(self, pointer, instance): print ' if (%s) {' % instance print ' writer.beginArray();' self.visit(pointer.type, "*" + instance) print ' writer.endArray();' print ' } else {' print ' writer.writeNull();' print ' }' def visitIntPointer(self, pointer, instance): print ' writer.writeInt((uintptr_t)%s);' % instance def visitObjPointer(self, pointer, instance): print ' writer.writeInt((uintptr_t)%s);' % instance def visitLinearPointer(self, pointer, instance): print ' writer.writeInt((uintptr_t)%s);' % instance def visitReference(self, reference, instance): self.visit(reference.type, instance) def visitHandle(self, handle, instance): self.visit(handle.type, instance) def visitAlias(self, alias, instance): self.visit(alias.type, instance) def visitOpaque(self, opaque, instance): print ' writer.writeInt((uintptr_t)%s);' % instance def visitInterface(self, interface, instance): assert False def visitPolymorphic(self, polymorphic, instance): switchExpr = self.expand(polymorphic.switchExpr) print ' switch (static_cast(%s)) {' % switchExpr for cases, type in polymorphic.iterSwitch(): for case in cases: print ' %s:' % case caseInstance = instance if type.expr is not None: caseInstance = 'static_cast<%s>(%s)' % (type, caseInstance) self.visit(type, caseInstance) print ' break;' print ' }' class Dumper: '''Base class to orchestrate the code generation of state object dumpers.''' def __init__(self, api, types): self.api = api self.types = types def dumperFactory(self): '''Create a dumper. Can be overriden by derived classes to inject their own dumper visitor. ''' return ValueDumper() def dump(self): self.header() # Includes for module in api.modules: for header in module.headers: print header print # Generate the dumper functions types = api.getAllTypes() for type in self.types: self.dumpType(type) def dumpType(self, type): print r'void' print r'dumpStateObject(StateWriter &writer, const %s & so)' % type print r'{' visitor = self.dumperFactory() visitor.visit(type, 'so') print r'}' print def header(self): pass def footer(self): pass if __name__ == '__main__': print r'#include "dxgistate_so.hpp"' print print r'#include "state_writer.hpp"' print api = stdapi.API() api.addModule(dxgi.dxgi) api.addModule(d3d10.d3d10) api.addModule(d3d10.d3d10_1) api.addModule(d3d11.d3d11) types = [ winapi.RECT, dxgi.DXGI_FORMAT, d3d10.D3D10_BLEND_DESC, d3d10.D3D10_BUFFER_DESC, d3d10.D3D10_COUNTER_DESC, d3d10.D3D10_DEPTH_STENCIL_DESC, d3d10.D3D10_DEPTH_STENCILOP_DESC, d3d10.D3D10_DEPTH_STENCIL_VIEW_DESC, d3d10.D3D10_INPUT_ELEMENT_DESC, # FIXME: aliases to D3D_PRIMITIVE_TOPOLOGY clashing with D3D11_PRIMITIVE_TOPOLOGY #d3d10.D3D10_PRIMITIVE_TOPOLOGY, d3d10.D3D10_QUERY_DESC, d3d10.D3D10_RASTERIZER_DESC, d3d10.D3D10_RENDER_TARGET_VIEW_DESC, d3d10.D3D10_SAMPLER_DESC, d3d10.D3D10_SHADER_RESOURCE_VIEW_DESC, d3d10.D3D10_TEXTURE1D_DESC, d3d10.D3D10_TEXTURE2D_DESC, d3d10.D3D10_TEXTURE3D_DESC, d3d10.D3D10_VIEWPORT, d3d10.D3D10_BLEND_DESC1, d3d10.D3D10_SHADER_RESOURCE_VIEW_DESC1, d3d11.D3D11_BLEND_DESC, d3d11.D3D11_BLEND_DESC1, d3d11.D3D11_BUFFER_DESC, d3d11.D3D11_CLASS_INSTANCE_DESC, d3d11.D3D11_COUNTER_DESC, d3d11.D3D11_DEPTH_STENCIL_DESC, d3d11.D3D11_DEPTH_STENCILOP_DESC, d3d11.D3D11_DEPTH_STENCIL_VIEW_DESC, d3d11.D3D11_INPUT_ELEMENT_DESC, d3d11.D3D11_PACKED_MIP_DESC, d3d11.D3D11_PRIMITIVE_TOPOLOGY, d3d11.D3D11_QUERY_DESC, d3d11.D3D11_RASTERIZER_DESC, d3d11.D3D11_RASTERIZER_DESC1, d3d11.D3D11_RENDER_TARGET_BLEND_DESC, d3d11.D3D11_RENDER_TARGET_VIEW_DESC, d3d11.D3D11_SAMPLER_DESC, d3d11.D3D11_SHADER_RESOURCE_VIEW_DESC, d3d11.D3D11_TEXTURE1D_DESC, d3d11.D3D11_TEXTURE2D_DESC, d3d11.D3D11_TEXTURE3D_DESC, d3d11.D3D11_UNORDERED_ACCESS_VIEW_DESC, d3d11.D3D11_VIEWPORT, ] dumper = Dumper(api, types) dumper.dump() tmpNnpnZF/retrace/glws.hpp0000664000175000017500000000711312543167424015100 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * Abstraction for GL window system specific APIs (GLX, WGL). */ #pragma once #include #include #include #include "glprofile.hpp" namespace glws { using glprofile::Profile; bool checkExtension(const char *extName, const char *extString); template< class T > class Attributes { protected: std::vector attribs; public: void add(T param) { attribs.push_back(param); } void add(T pname, T pvalue) { add(pname); add(pvalue); } void end(T terminator = 0) { add(terminator); } operator T * (void) { return &attribs[0]; } operator const T * (void) const { return &attribs[0]; } }; class Visual { public: Profile profile; /* TODO */ #if 0 unsigned long redMask; unsigned long greenMask; unsigned long blueMask; unsigned long alphaMask; #endif bool doubleBuffer; Visual(Profile prof) : profile(prof) {} virtual ~Visual() {} }; class Drawable { public: const Visual *visual; int width; int height; bool pbuffer; bool visible; Drawable(const Visual *vis, int w, int h, bool pb) : visual(vis), width(w), height(h), pbuffer(pb), visible(false) {} virtual ~Drawable() {} virtual void resize(int w, int h) { width = w; height = h; } virtual void show(void) { assert(!pbuffer); visible = true; } virtual void copySubBuffer(int x, int y, int width, int height); virtual void swapBuffers(void) = 0; }; class Context { public: const Visual *visual; Profile profile; glprofile::Extensions extensions; Context(const Visual *vis) : visual(vis), profile(vis->profile) {} virtual ~Context() {} // Context must be current bool hasExtension(const char *extension); }; void init(void); void cleanup(void); Visual * createVisual(bool doubleBuffer, unsigned samples, Profile profile); Drawable * createDrawable(const Visual *visual, int width, int height, bool pbuffer = false); Context * createContext(const Visual *visual, Context *shareContext = 0, bool debug = false); bool makeCurrent(Drawable *drawable, Context *context); bool processEvents(void); } /* namespace glws */ tmpNnpnZF/retrace/d3d11state.cpp0000664000175000017500000001251612543167424015777 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "com_ptr.hpp" #include "d3d11imports.hpp" #include "d3d10state.hpp" #include "dxgistate_so.hpp" namespace d3dstate { // Ensure ExtractDescType template is sane static_assert( std::is_same< ExtractDescType< decltype( &ID3D11BlendState::GetDesc ) >::type, D3D11_BLEND_DESC >::value, "type mismatch" ); static void dumpRasterizerState(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { com_ptr pRasterizerState; pDeviceContext->RSGetState(&pRasterizerState); writer.beginMember("RasterizerState"); dumpStateObjectDesc(writer, pRasterizerState); writer.endMember(); // RasterizerState } static void dumpBlendState(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { com_ptr pBlendState; FLOAT BlendFactor[4]; UINT SampleMask; pDeviceContext->OMGetBlendState(&pBlendState, BlendFactor, &SampleMask); writer.beginMember("BlendState"); dumpStateObjectDesc(writer, pBlendState); writer.endMember(); // BlendState writer.beginMember("BlendFactor"); writer.beginArray(); writer.writeFloat(BlendFactor[0]); writer.writeFloat(BlendFactor[1]); writer.writeFloat(BlendFactor[2]); writer.writeFloat(BlendFactor[3]); writer.endArray(); writer.endMember(); // BlendFactor writer.writeIntMember("SampleMask", SampleMask); } static void dumpDepthStencilState(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { com_ptr pDepthStencilState; UINT stencilRef; pDeviceContext->OMGetDepthStencilState(&pDepthStencilState, &stencilRef); writer.beginMember("DepthStencilState"); dumpStateObjectDesc(writer, pDepthStencilState); writer.endMember(); // DepthStencilState writer.writeIntMember("StencilRef", stencilRef); } static void dumpParameters(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { // TODO: dump description of current bound state writer.beginMember("parameters"); writer.beginObject(); dumpRasterizerState(writer, pDeviceContext); dumpBlendState(writer, pDeviceContext); dumpDepthStencilState(writer, pDeviceContext); writer.endObject(); writer.endMember(); // parameters } static void dumpShaders(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { writer.beginMember("shaders"); writer.beginObject(); com_ptr pVertexShader; pDeviceContext->VSGetShader(&pVertexShader, NULL, NULL); if (pVertexShader) { dumpShader(writer, "VS", pVertexShader); } com_ptr pHullShader; pDeviceContext->HSGetShader(&pHullShader, NULL, NULL); if (pHullShader) { dumpShader(writer, "HS", pHullShader); } com_ptr pDomainShader; pDeviceContext->DSGetShader(&pDomainShader, NULL, NULL); if (pDomainShader) { dumpShader(writer, "DS", pDomainShader); } com_ptr pGeometryShader; pDeviceContext->GSGetShader(&pGeometryShader, NULL, NULL); if (pGeometryShader) { dumpShader(writer, "GS", pGeometryShader); } com_ptr pPixelShader; pDeviceContext->PSGetShader(&pPixelShader, NULL, NULL); if (pPixelShader) { dumpShader(writer, "PS", pPixelShader); } writer.endObject(); writer.endMember(); // shaders } void dumpDevice(StateWriter &writer, ID3D11DeviceContext *pDeviceContext) { dumpParameters(writer, pDeviceContext); dumpShaders(writer, pDeviceContext); // TODO: dump constant buffers writer.beginMember("uniforms"); writer.beginObject(); writer.endObject(); writer.endMember(); // uniforms // TODO: dump stream-out buffer, vertex buffer writer.beginMember("buffers"); writer.beginObject(); writer.endObject(); writer.endMember(); // buffers dumpTextures(writer, pDeviceContext); dumpFramebuffer(writer, pDeviceContext); } } /* namespace d3dstate */ tmpNnpnZF/retrace/state_writer.cpp0000664000175000017500000000451412543167424016635 0ustar chrischris/************************************************************************** * * Copyright 2015 VMware, Inc * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "state_writer.hpp" #include #include #include "image.hpp" StateWriter::~StateWriter() { } void StateWriter::writeImage(image::Image *image, const ImageDesc & desc) { assert(image); if (!image) { writeNull(); return; } beginObject(); // Tell the GUI this is no ordinary object, but an image writeStringMember("__class__", "image"); writeIntMember("__width__", image->width); writeIntMember("__height__", image->height / desc.depth); writeIntMember("__depth__", desc.depth); writeStringMember("__format__", desc.format.c_str()); if (!image->label.empty()) { writeStringMember("__label__", image->label.c_str()); } beginMember("__data__"); std::stringstream ss; if (image->channelType == image::TYPE_UNORM8) { image->writePNG(ss); } else { image->writePNM(ss); } const std::string & s = ss.str(); writeBlob(s.data(), s.size()); endMember(); // __data__ endObject(); } tmpNnpnZF/retrace/json.cpp0000664000175000017500000001506412543167424015074 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ /* * JSON writing functions. */ #include #include #include #include "json.hpp" void JSONWriter::newline(void) { os << "\n"; for (int i = 0; i < level; ++i) os << " "; } void JSONWriter::separator(void) { if (value) { os << ","; switch (space) { case '\0': break; case '\n': newline(); break; default: os << space; break; } } else { if (space == '\n') { newline(); } } } static void escapeAsciiString(std::ostream &os, const char *str) { os << "\""; const unsigned char *src = (const unsigned char *)str; unsigned char c; while ((c = *src++)) { if ((c == '\"') || (c == '\\')) { // escape character os << '\\' << (unsigned char)c; } else if ((c >= 0x20 && c <= 0x7e) || c == '\t' || c == '\r' || c == '\n') { // pass-through character os << (unsigned char)c; } else { assert(0); os << "?"; } } os << "\""; } static void escapeUnicodeString(std::ostream &os, const char *str) { os << "\""; const char *locale = setlocale(LC_CTYPE, ""); const char *src = str; mbstate_t state; memset(&state, 0, sizeof state); do { // Convert characters one at a time in order to recover from // conversion errors wchar_t c; size_t written = mbsrtowcs(&c, &src, 1, &state); if (written == 0) { // completed break; } if (written == (size_t)-1) { // conversion error -- skip os << "?"; do { ++src; } while (*src & 0x80); } else if ((c == '\"') || (c == '\\')) { // escape character os << '\\' << (unsigned char)c; } else if ((c >= 0x20 && c <= 0x7e) || c == '\t' || c == '\r' || c == '\n') { // pass-through character os << (unsigned char)c; } else { // unicode os << "\\u" << std::hex << std::setfill('0') << std::setw(4) << (unsigned)c << std::setfill(' ') << std::dec; } } while (src); setlocale(LC_CTYPE, locale); os << "\""; } static void encodeBase64String(std::ostream &os, const unsigned char *bytes, size_t size) { const char *table64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; unsigned char c0, c1, c2, c3; char buf[4]; unsigned written; os << "\""; written = 0; while (size >= 3) { c0 = bytes[0] >> 2; c1 = ((bytes[0] & 0x03) << 4) | ((bytes[1] & 0xf0) >> 4); c2 = ((bytes[1] & 0x0f) << 2) | ((bytes[2] & 0xc0) >> 6); c3 = bytes[2] & 0x3f; buf[0] = table64[c0]; buf[1] = table64[c1]; buf[2] = table64[c2]; buf[3] = table64[c3]; os.write(buf, 4); bytes += 3; size -= 3; ++written; if (written >= 76/4 && size) { os << "\n"; written = 0; } } if (size > 0) { c0 = bytes[0] >> 2; c1 = ((bytes[0] & 0x03) << 4); buf[2] = '='; buf[3] = '='; if (size > 1) { c1 |= ((bytes[1] & 0xf0) >> 4); c2 = ((bytes[1] & 0x0f) << 2); if (size > 2) { c2 |= ((bytes[2] & 0xc0) >> 6); c3 = bytes[2] & 0x3f; buf[3] = table64[c3]; } buf[2] = table64[c2]; } buf[1] = table64[c1]; buf[0] = table64[c0]; os.write(buf, 4); } os << "\""; } JSONWriter::JSONWriter(std::ostream &_os) : os(_os), level(0), value(false), space(0) { beginObject(); } JSONWriter::~JSONWriter() { endObject(); newline(); } void JSONWriter::beginObject() { separator(); os << "{"; ++level; value = false; } void JSONWriter::endObject() { --level; if (value) newline(); os << "}"; value = true; space = '\n'; } void JSONWriter::beginMember(const char * name) { space = 0; separator(); newline(); escapeAsciiString(os, name); os << ": "; value = false; } void JSONWriter::endMember(void) { assert(value); value = true; space = 0; } void JSONWriter::beginArray() { separator(); os << "["; ++level; value = false; space = 0; } void JSONWriter::endArray(void) { --level; if (space == '\n') { newline(); } os << "]"; value = true; space = '\n'; } void JSONWriter::writeString(const char *s) { if (!s) { writeNull(); return; } separator(); escapeUnicodeString(os, s); value = true; space = ' '; } void JSONWriter::writeBase64(const void *bytes, size_t size) { separator(); encodeBase64String(os, (const unsigned char *)bytes, size); value = true; space = ' '; } void JSONWriter::writeNull(void) { separator(); os << "null"; value = true; space = ' '; } void JSONWriter::writeBool(bool b) { separator(); os << (b ? "true" : "false"); value = true; space = ' '; } tmpNnpnZF/retrace/glws_egl_android.cpp0000664000175000017500000005206612543167424017431 0ustar chrischris/************************************************************************** * * Copyright 2011 LunarG, Inc. * Copyright 2011 Jose Fonseca * Copyright 2015 BogDan Vatra * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "glproc.hpp" #include "glws.hpp" extern "C" int main(int, char **); namespace glws { static char TAG[]="apitrace"; static JavaVM *s_javaVM = nullptr; static jobject s_activityObject = nullptr; static std::mutex s_activityObjectMutex; static jmethodID s_setSurfaceSizeMethodID = nullptr; static jfieldID s_descriptor = nullptr; typedef std::shared_ptr AndroidWindow; static AndroidWindow s_currentNativeWindow; static std::atomic_int s_currentNativeWindowId(0); static std::mutex s_currentNativeWindowMutex; static int s_stdout_fd = -1; static int s_stderr_fd = -1; static std::mutex s_stateMutex; static std::condition_variable s_stateWait; static EGLDisplay eglDisplay = EGL_NO_DISPLAY; static char const *eglExtensions = NULL; static bool has_EGL_KHR_create_context = false; struct ResourceTracker; static std::mutex s_resourcesMutex; static std::vector s_resources; class FdWriter : public std::streambuf { public: FdWriter(int fd) { m_fd = fd; int opts = fcntl(m_fd, F_GETFL); opts = opts & (~O_NONBLOCK); fcntl(m_fd, F_SETFL, opts); } // basic_streambuf interface protected: std::streamsize xsputn(const char_type *__s, std::streamsize __n) { std::streamsize ret = 0; while( __n ) { ssize_t written = write(m_fd, __s, __n); if (written > 0) { __n -= written; __s += written; ret += written; } else { switch (errno) { case EBADF: case EINVAL: case EPIPE: std::exit(1); break; } } } return ret; } int_type overflow(int_type __c) { return xsputn(reinterpret_cast(&__c), 1) == 1 ? __c : traits_type::eof(); } private: int m_fd = -1; }; static EGLenum translateAPI(glprofile::Profile profile) { switch (profile.api) { case glprofile::API_GL: return EGL_OPENGL_API; case glprofile::API_GLES: return EGL_OPENGL_ES_API; default: assert(0); return EGL_NONE; } } /* Must be called before * * - eglCreateContext * - eglGetCurrentContext * - eglGetCurrentDisplay * - eglGetCurrentSurface * - eglMakeCurrent (when its ctx parameter is EGL_NO_CONTEXT ), * - eglWaitClient * - eglWaitNative */ static void bindAPI(EGLenum api) { if (eglBindAPI(api) != EGL_TRUE) { std::cerr << "error: eglBindAPI failed\n"; exit(1); } } struct EglVisual : public Visual { EglVisual(Profile prof) : Visual(prof) {} EGLConfig config = 0; EGLint format = -1; }; struct ResourceTracker { ResourceTracker() { s_resourcesMutex.lock(); s_resources.push_back(this); s_resourcesMutex.unlock(); } virtual ~ResourceTracker() { s_resourcesMutex.lock(); s_resources.erase(std::find(s_resources.begin(), s_resources.end(), this)); s_resourcesMutex.unlock(); } }; class EglDrawable : public Drawable, private ResourceTracker { public: EglDrawable(const Visual *vis, int w, int h, bool pbuffer) : Drawable(vis, w, h, pbuffer), api(EGL_OPENGL_ES_API), windowId(0) { eglWaitNative(EGL_CORE_NATIVE_ENGINE); const EglVisual * eglVisual = static_cast(visual); update(); ANativeWindow_setBuffersGeometry(window.get(), 0, 0, eglVisual->format); surface = eglCreateWindowSurface(eglDisplay, eglVisual->config, window.get(), NULL); } ~EglDrawable() { eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface(eglDisplay, surface); eglWaitClient(); eglWaitNative(EGL_CORE_NATIVE_ENGINE); } void recreate(void) { EGLContext currentContext = eglGetCurrentContext(); EGLSurface currentDrawSurface = eglGetCurrentSurface(EGL_DRAW); EGLSurface currentReadSurface = eglGetCurrentSurface(EGL_READ); bool rebindDrawSurface = currentDrawSurface == surface; bool rebindReadSurface = currentReadSurface == surface; if (rebindDrawSurface || rebindReadSurface) { eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface(eglDisplay, surface); } const EglVisual * eglVisual = static_cast(visual); ANativeWindow_setBuffersGeometry(window.get(), 0, 0, eglVisual->format); surface = eglCreateWindowSurface(eglDisplay, eglVisual->config, (EGLNativeWindowType)window.get(), NULL); if (rebindDrawSurface || rebindReadSurface) eglMakeCurrent(eglDisplay, surface, surface, currentContext); } void resize(int w, int h) { if (w == width && h == height) { return; } eglWaitClient(); Drawable::resize(w, h); resizeSurface(w, h); } void show(void) { if (visible) { return; } eglWaitClient(); eglWaitNative(EGL_CORE_NATIVE_ENGINE); Drawable::show(); } void swapBuffers(void) { if (update()) recreate(); bindAPI(api); eglSwapBuffers(eglDisplay, surface); } private: inline bool update() { if (windowId.load() == s_currentNativeWindowId.load()) return false; s_currentNativeWindowMutex.lock(); window = s_currentNativeWindow; windowId.store(s_currentNativeWindowId.load()); s_currentNativeWindowMutex.unlock(); return true; } void resizeSurface(int w, int h) { JNIEnv *env = nullptr; if (JNI_OK != s_javaVM->AttachCurrentThread(&env, nullptr)) { __android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed"); std::exit(1); } s_activityObjectMutex.lock(); env->CallVoidMethod(s_activityObject, s_setSurfaceSizeMethodID, w, h); if (env->ExceptionCheck()) { env->ExceptionDescribe(); env->ExceptionClear(); } s_activityObjectMutex.unlock(); s_javaVM->DetachCurrentThread(); } public: EGLSurface surface; EGLenum api; private: AndroidWindow window; std::atomic_int windowId; }; class EglContext : public Context, private ResourceTracker { public: EGLContext context; EglContext(const Visual *vis, EGLContext ctx) : Context(vis), context(ctx) {} ~EglContext() { eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(eglDisplay, context); } }; void init(void) { eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); if (eglDisplay == EGL_NO_DISPLAY) { std::cerr << "error: unable to get EGL display\n"; exit(1); } EGLint major, minor; if (!eglInitialize(eglDisplay, &major, &minor)) { std::cerr << "error: unable to initialize EGL display\n"; exit(1); } eglExtensions = eglQueryString(eglDisplay, EGL_EXTENSIONS); has_EGL_KHR_create_context = checkExtension("EGL_KHR_create_context", eglExtensions); } void cleanup(void) { while (!s_resources.empty()) { delete *s_resources.rbegin(); } if (eglDisplay != EGL_NO_DISPLAY) { eglTerminate(eglDisplay); } eglDisplay = EGL_NO_DISPLAY; eglExtensions = nullptr; has_EGL_KHR_create_context = false; s_stateMutex.lock(); close(s_stdout_fd); close(s_stderr_fd); s_stdout_fd = -1; s_stderr_fd = -1; s_stateMutex.unlock(); } Visual * createVisual(bool doubleBuffer, unsigned samples, Profile profile) { EGLint api_bits; if (profile.api == glprofile::API_GL) { api_bits = EGL_OPENGL_BIT; if (profile.core && !has_EGL_KHR_create_context) { return NULL; } } else if (profile.api == glprofile::API_GLES) { switch (profile.major) { case 1: api_bits = EGL_OPENGL_ES_BIT; break; case 3: if (has_EGL_KHR_create_context) { api_bits = EGL_OPENGL_ES3_BIT; break; } /* fall-through */ case 2: api_bits = EGL_OPENGL_ES2_BIT; break; default: return NULL; } } else { assert(0); return NULL; } Attributes attribs; attribs.add(EGL_SURFACE_TYPE, EGL_WINDOW_BIT); attribs.add(EGL_RED_SIZE, 1); attribs.add(EGL_GREEN_SIZE, 1); attribs.add(EGL_BLUE_SIZE, 1); attribs.add(EGL_ALPHA_SIZE, 1); attribs.add(EGL_DEPTH_SIZE, 1); attribs.add(EGL_STENCIL_SIZE, 1); attribs.add(EGL_RENDERABLE_TYPE, api_bits); attribs.end(EGL_NONE); EGLint num_configs = 0; if (!eglGetConfigs(eglDisplay, NULL, 0, &num_configs) || num_configs <= 0) { return NULL; } std::vector configs(num_configs); if (!eglChooseConfig(eglDisplay, attribs, &configs[0], num_configs, &num_configs) || num_configs <= 0) { return NULL; } // We can't tell what other APIs the trace will use afterwards, therefore // try to pick a config which supports the widest set of APIs. int bestScore = -1; EGLConfig config = configs[0]; for (EGLint i = 0; i < num_configs; ++i) { EGLint renderable_type = EGL_NONE; eglGetConfigAttrib(eglDisplay, configs[i], EGL_RENDERABLE_TYPE, &renderable_type); int score = 0; assert(renderable_type & api_bits); renderable_type &= ~api_bits; if (renderable_type & EGL_OPENGL_ES2_BIT) { score += 1 << 4; } if (renderable_type & EGL_OPENGL_ES3_BIT) { score += 1 << 3; } if (renderable_type & EGL_OPENGL_ES_BIT) { score += 1 << 2; } if (renderable_type & EGL_OPENGL_BIT) { score += 1 << 1; } if (score > bestScore) { config = configs[i]; bestScore = score; } } assert(bestScore >= 0); EGLint visual_id = -1; if (!eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &visual_id)) { assert(0); return NULL; } assert(visual_id != -1); EglVisual *visual = new EglVisual(profile); visual->config = config; visual->format = visual_id; return visual; } Drawable * createDrawable(const Visual *visual, int width, int height, bool pbuffer) { return new EglDrawable(visual, width, height, pbuffer); } Context * createContext(const Visual *_visual, Context *shareContext, bool debug) { Profile profile = _visual->profile; const EglVisual *visual = static_cast(_visual); EGLContext share_context = EGL_NO_CONTEXT; EGLContext context; Attributes attribs; if (shareContext) { share_context = static_cast(shareContext)->context; } int contextFlags = 0; if (profile.api == glprofile::API_GL) { if (has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_MAJOR_VERSION_KHR, profile.major); attribs.add(EGL_CONTEXT_MINOR_VERSION_KHR, profile.minor); int profileMask = profile.core ? EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR : EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR; attribs.add(EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, profileMask); if (profile.forwardCompatible) { contextFlags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR; } } else if (profile.versionGreaterOrEqual(3, 2)) { std::cerr << "error: EGL_KHR_create_context not supported\n"; return NULL; } } else if (profile.api == glprofile::API_GLES) { if (has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_MAJOR_VERSION_KHR, profile.major); attribs.add(EGL_CONTEXT_MINOR_VERSION_KHR, profile.minor); } else { attribs.add(EGL_CONTEXT_CLIENT_VERSION, profile.major); } } else { assert(0); return NULL; } if (debug) { contextFlags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR; } if (contextFlags && has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_FLAGS_KHR, contextFlags); } attribs.end(EGL_NONE); EGLenum api = translateAPI(profile); bindAPI(api); context = eglCreateContext(eglDisplay, visual->config, share_context, attribs); if (!context) { if (debug) { // XXX: Mesa has problems with EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR // with OpenGL ES contexts, so retry without it return createContext(_visual, shareContext, false); } return NULL; } return new EglContext(visual, context); } bool makeCurrent(Drawable *drawable, Context *context) { if (!drawable || !context) { return eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); } else { EglDrawable *eglDrawable = static_cast(drawable); EglContext *eglContext = static_cast(context); EGLBoolean ok; EGLenum api = translateAPI(eglContext->profile); bindAPI(api); ok = eglMakeCurrent(eglDisplay, eglDrawable->surface, eglDrawable->surface, eglContext->context); if (ok) { eglDrawable->api = api; } return ok; } } bool processEvents(void) { return false; } static void readParamsAndStartTrace() { std::string paramsLine; char buff[4096]; while (true) { ssize_t sz = read(s_stdout_fd, buff, 4095); if (sz < 0) { cleanup(); return ; } buff[sz] = '\0'; paramsLine += buff; if (paramsLine.find('\n') > 0) break; } std::regex word_regex("(\"[^\"]*\")|([^\\s]+)"); auto words_begin = std::sregex_iterator(paramsLine.begin(), paramsLine.end(), word_regex); auto words_end = std::sregex_iterator(); std::vector paramsVector; std::vector params; params.push_back(TAG); for (std::sregex_iterator i = words_begin; i != words_end; ++i) { paramsVector.push_back(i->str()); params.push_back(const_cast(paramsVector.back().c_str())); } { std::unique_lock lock(s_stateMutex); __android_log_print(ANDROID_LOG_DEBUG, TAG, "Wait for stderr socket"); s_stateWait.wait(lock, []{return s_stderr_fd != -1; }); } __android_log_print(ANDROID_LOG_DEBUG, TAG, "Start retrace"); optind = 1; optreset = 1; main(params.size(), ¶ms[0]); cleanup(); // Remove "std::exit" after apitrace will cleanup its static variables. std::exit(0); // goodbye cruel world ! } static inline int getFd(JNIEnv* env, jobject obj) { return env->GetIntField(obj, s_descriptor); } static bool setFd(std::ostream &stream, int *state_fd, int fd) { std::lock_guard lock(s_stateMutex); if (*state_fd != -1) return false; *state_fd = fd; delete dynamic_cast(stream.rdbuf(new FdWriter(fd))); return true; } static jboolean setStdoutFileDescriptor(JNIEnv *env, jobject /*object*/, jobject fd) { bool res = setFd(std::cout, &s_stdout_fd, getFd(env, fd)); if (res) std::async(std::launch::async, glws::readParamsAndStartTrace); return res; } static jboolean setStderrFileDescriptor(JNIEnv *env, jobject /*object*/, jobject fd) { bool res = setFd(std::cerr, &s_stderr_fd, getFd(env, fd)); if (res) s_stateWait.notify_one(); return res; } static void onActivityCreated(JNIEnv *env, jobject /*object*/, jobject activity) { s_activityObjectMutex.lock(); s_activityObject = env->NewGlobalRef(activity); s_activityObjectMutex.unlock(); } static void onSurfaceCreated(JNIEnv *env, jobject /*object*/, jobject surface) { s_currentNativeWindowMutex.lock(); s_currentNativeWindow = AndroidWindow(ANativeWindow_fromSurface(env, surface), [](ANativeWindow *w) { ANativeWindow_release(w); }); ++s_currentNativeWindowId; s_currentNativeWindowMutex.unlock(); } static void onSurfaceChanged(JNIEnv *env, jobject /*object*/, jobject surface, int /*format*/, int /*width*/, int /*height*/) { s_currentNativeWindowMutex.lock(); s_currentNativeWindow = AndroidWindow(ANativeWindow_fromSurface(env, surface), [](ANativeWindow *w) { ANativeWindow_release(w); }); ++s_currentNativeWindowId; s_currentNativeWindowMutex.unlock(); } static void onSurfaceRedrawNeeded(JNIEnv */*env*/, jobject /*object*/, jobject /*surface*/) { } static void onSurfaceDestroyed(JNIEnv */*env*/, jobject /*object*/) { s_currentNativeWindowMutex.lock(); s_currentNativeWindow.reset(); s_currentNativeWindowId.store(0); s_currentNativeWindowMutex.unlock(); } static void onActivityDestroyed(JNIEnv *env, jobject /*object*/) { s_activityObjectMutex.lock(); env->DeleteGlobalRef(s_activityObject); s_activityObject = nullptr; s_activityObjectMutex.unlock(); } static JNINativeMethod methods[] = { {"setStdoutFileDescriptor", "(Ljava/io/FileDescriptor;)Z", (void *)setStdoutFileDescriptor}, {"setStderrFileDescriptor", "(Ljava/io/FileDescriptor;)Z", (void *)setStderrFileDescriptor}, {"onActivityCreatedNative", "(Lapitrace/github/io/eglretrace/RetraceActivity;)V", (void *)onActivityCreated}, {"onSurfaceCreatedNative", "(Landroid/view/Surface;)V", (void *)onSurfaceCreated}, {"onSurfaceChangedNative", "(Landroid/view/Surface;III)V", (void *)onSurfaceChanged}, {"onSurfaceRedrawNeededNative", "(Landroid/view/Surface;)V", (void *)onSurfaceRedrawNeeded}, {"onSurfaceDestroyedNative", "()V", (void *)onSurfaceDestroyed}, {"onActivityDestroyedNative", "()V", (void *)onActivityDestroyed} }; } /* namespace glws */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/) { typedef union { JNIEnv *nativeEnvironment; void *venv; } UnionJNIEnvToVoid; __android_log_print(ANDROID_LOG_INFO, glws::TAG, "apitrace start"); UnionJNIEnvToVoid uenv; uenv.venv = nullptr; glws::s_javaVM = nullptr; if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "GetEnv failed"); return -1; } JNIEnv *env = uenv.nativeEnvironment; jclass clazz; clazz = env->FindClass("apitrace/github/io/eglretrace/RetraceActivity"); if (!clazz) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "Can't find RetraceActivity"); return JNI_FALSE; } glws::s_setSurfaceSizeMethodID = env->GetMethodID(clazz, "setSurfaceSize", "(II)V"); if (!glws::s_setSurfaceSizeMethodID) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "Can't find setSurfaceSize method"); return JNI_FALSE; } if (env->RegisterNatives(clazz, glws::methods, sizeof(glws::methods) / sizeof(glws::methods[0])) < 0) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "RegisterNatives failed"); return JNI_FALSE; } clazz = env->FindClass("java/io/FileDescriptor"); if (!clazz) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "Can't find FileDescriptor class"); return JNI_FALSE; } glws::s_descriptor = env->GetFieldID(clazz, "descriptor", "I"); if (!glws::s_descriptor) { __android_log_print(ANDROID_LOG_FATAL, glws::TAG, "Can't find descriptor field"); return JNI_FALSE; } glws::s_javaVM = vm; return JNI_VERSION_1_4; } tmpNnpnZF/retrace/dxgistate.cpp0000664000175000017500000005011712543167424016115 0ustar chrischris/************************************************************************** * * Copyright 2013 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "image.hpp" #include "state_writer.hpp" #include "com_ptr.hpp" #include "dxgistate.hpp" #include "d3d10state.hpp" #include "d3d11state.hpp" #ifdef __MINGW32__ #define nullptr NULL #endif #include "DirectXTex.h" namespace d3dstate { static DXGI_FORMAT ChooseConversionFormat(DXGI_FORMAT Format, unsigned &numChannels, image::ChannelType &channelType) { numChannels = 4; channelType = image::TYPE_UNORM8; switch (Format) { // Float case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: channelType = image::TYPE_FLOAT; return DXGI_FORMAT_R32G32B32A32_FLOAT; // Unsigned normalized case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_A8_UNORM: case DXGI_FORMAT_R1_UNORM: case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_BC7_UNORM: return DXGI_FORMAT_R8G8B8A8_UNORM; // SRGB case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: case DXGI_FORMAT_BC7_UNORM_SRGB: return DXGI_FORMAT_R8G8B8A8_UNORM; // Signed normalized case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_BC4_SNORM: case DXGI_FORMAT_BC5_SNORM: return DXGI_FORMAT_R8G8B8A8_SNORM; // Unsigned case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R8_UINT: return DXGI_FORMAT_R8G8B8A8_UINT; // Signed case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R32G32B32_SINT: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_R8_SINT: return DXGI_FORMAT_R8G8B8A8_SINT; // Depth case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_D16_UNORM: numChannels = 1; channelType = image::TYPE_FLOAT; return DXGI_FORMAT_D32_FLOAT; // Typeless case DXGI_FORMAT_UNKNOWN: case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return DXGI_FORMAT_UNKNOWN; default: return DXGI_FORMAT_R8G8B8A8_UNORM; } } /** * Convert between DXGI formats. * */ HRESULT ConvertFormat(DXGI_FORMAT SrcFormat, void *SrcData, UINT SrcPitch, DXGI_FORMAT DstFormat, void *DstData, UINT DstPitch, UINT Width, UINT Height) { HRESULT hr; DirectX::Image SrcImage; DirectX::Image DstImage; SrcImage.width = Width; SrcImage.height = Height; SrcImage.format = SrcFormat; SrcImage.rowPitch = SrcPitch; SrcImage.slicePitch = Height * SrcPitch; SrcImage.pixels = (uint8_t*)SrcData; DstImage.width = Width; DstImage.height = Height; DstImage.format = DstFormat; DstImage.rowPitch = DstPitch; DstImage.slicePitch = Height * DstPitch; DstImage.pixels = (uint8_t*)DstData; DirectX::Rect rect(0, 0, Width, Height); hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); assert(SUCCEEDED(hr)); if (FAILED(hr)) { return hr; } if (SrcFormat != DstFormat) { DirectX::ScratchImage ScratchImage; ScratchImage.Initialize2D(DstFormat, Width, Height, 1, 1); if (DirectX::IsCompressed(SrcFormat)) { hr = DirectX::Decompress(SrcImage, DstFormat, ScratchImage); } else { hr = DirectX::Convert(SrcImage, DstFormat, DirectX::TEX_FILTER_DEFAULT, 0.0f, ScratchImage); } if (SUCCEEDED(hr)) { hr = CopyRectangle(*ScratchImage.GetImage(0, 0, 0), rect, DstImage, DirectX::TEX_FILTER_DEFAULT, 0, 0); } } else { hr = CopyRectangle(SrcImage, rect, DstImage, DirectX::TEX_FILTER_DEFAULT, 0, 0); } return hr; } image::Image * ConvertImage(DXGI_FORMAT SrcFormat, void *SrcData, UINT SrcPitch, UINT Width, UINT Height) { unsigned numChannels; image::ChannelType channelType; DXGI_FORMAT DstFormat = ChooseConversionFormat(SrcFormat, numChannels, channelType); if (DstFormat == DXGI_FORMAT_UNKNOWN) { return NULL; } image::Image *image = new image::Image(Width, Height, numChannels, false, channelType); if (!image) { return NULL; } assert(image->stride() > 0); HRESULT hr; hr = ConvertFormat(SrcFormat, SrcData, SrcPitch, DstFormat, image->start(), image->stride(), Width, Height); if (FAILED(hr)) { std::cerr << "warning: failed to convert from format " << SrcFormat << " to format " << DstFormat << "\n"; delete image; image = NULL; } return image; } image::Image * getRenderTargetImage(IDXGISwapChain *pSwapChain) { HRESULT hr; assert(pSwapChain); if (!pSwapChain) { return NULL; } DXGI_SWAP_CHAIN_DESC Desc; hr = pSwapChain->GetDesc(&Desc); assert(SUCCEEDED(hr)); DXGI_FORMAT Format = Desc.BufferDesc.Format; /* * There is a IDXGISurface::Map method, but swapchains are not normally mappable, * and there is no way to copy into a staging resource, which effectively means there * is no way to read a IDXGISwapChain using DXGI interfaces alone. * * We must figure out * the appropriate D3D10/D3D11 interfaces, and use them instead. */ com_ptr pD3D10Device; hr = pSwapChain->GetDevice(IID_ID3D10Device, (void **)&pD3D10Device); if (SUCCEEDED(hr)) { ID3D10Resource *pD3D10Resource = NULL; hr = pSwapChain->GetBuffer(0, IID_ID3D10Resource, (void **)&pD3D10Resource); assert(SUCCEEDED(hr)); if (FAILED(hr)) { return NULL; } return getSubResourceImage(pD3D10Device, pD3D10Resource, Format, 0, 0); } com_ptr pD3D11Device; hr = pSwapChain->GetDevice(IID_ID3D11Device, (void **)&pD3D11Device); if (SUCCEEDED(hr)) { ID3D11Resource *pD3D11Resource = NULL; hr = pSwapChain->GetBuffer(0, IID_ID3D11Resource, (void **)&pD3D11Resource); assert(SUCCEEDED(hr)); if (FAILED(hr)) { return NULL; } com_ptr pD3D11DeviceContext; pD3D11Device->GetImmediateContext(&pD3D11DeviceContext); return getSubResourceImage(pD3D11DeviceContext, pD3D11Resource, Format, 0, 0); } return NULL; } void dumpDevice(StateWriter &writer, IDXGISwapChain *pSwapChain) { HRESULT hr; if (pSwapChain) { com_ptr pD3D10Device; hr = pSwapChain->GetDevice(IID_ID3D10Device, (void **)&pD3D10Device); if (SUCCEEDED(hr)) { dumpDevice(writer, pD3D10Device); return; } com_ptr pD3D11Device; hr = pSwapChain->GetDevice(IID_ID3D11Device, (void **)&pD3D11Device); if (SUCCEEDED(hr)) { com_ptr pD3D11DeviceContext; pD3D11Device->GetImmediateContext(&pD3D11DeviceContext); dumpDevice(writer, pD3D11DeviceContext); return; } } // Fallback -- this should really never happen. assert(0); writer.beginMember("framebuffer"); writer.beginObject(); if (pSwapChain) { image::Image *image; image = getRenderTargetImage(pSwapChain); if (image) { writer.beginMember("SWAP_CHAIN"); writer.writeImage(image); writer.endMember(); delete image; } } writer.endObject(); writer.endMember(); // framebuffer } std::string getDXGIFormatName(DXGI_FORMAT format) { switch (format) { case DXGI_FORMAT_UNKNOWN: return "DXGI_FORMAT_UNKNOWN"; case DXGI_FORMAT_R32G32B32A32_TYPELESS: return "DXGI_FORMAT_R32G32B32A32_TYPELESS"; case DXGI_FORMAT_R32G32B32A32_FLOAT: return "DXGI_FORMAT_R32G32B32A32_FLOAT"; case DXGI_FORMAT_R32G32B32A32_UINT: return "DXGI_FORMAT_R32G32B32A32_UINT"; case DXGI_FORMAT_R32G32B32A32_SINT: return "DXGI_FORMAT_R32G32B32A32_SINT"; case DXGI_FORMAT_R32G32B32_TYPELESS: return "DXGI_FORMAT_R32G32B32_TYPELESS"; case DXGI_FORMAT_R32G32B32_FLOAT: return "DXGI_FORMAT_R32G32B32_FLOAT"; case DXGI_FORMAT_R32G32B32_UINT: return "DXGI_FORMAT_R32G32B32_UINT"; case DXGI_FORMAT_R32G32B32_SINT: return "DXGI_FORMAT_R32G32B32_SINT"; case DXGI_FORMAT_R16G16B16A16_TYPELESS: return "DXGI_FORMAT_R16G16B16A16_TYPELESS"; case DXGI_FORMAT_R16G16B16A16_FLOAT: return "DXGI_FORMAT_R16G16B16A16_FLOAT"; case DXGI_FORMAT_R16G16B16A16_UNORM: return "DXGI_FORMAT_R16G16B16A16_UNORM"; case DXGI_FORMAT_R16G16B16A16_UINT: return "DXGI_FORMAT_R16G16B16A16_UINT"; case DXGI_FORMAT_R16G16B16A16_SNORM: return "DXGI_FORMAT_R16G16B16A16_SNORM"; case DXGI_FORMAT_R16G16B16A16_SINT: return "DXGI_FORMAT_R16G16B16A16_SINT"; case DXGI_FORMAT_R32G32_TYPELESS: return "DXGI_FORMAT_R32G32_TYPELESS"; case DXGI_FORMAT_R32G32_FLOAT: return "DXGI_FORMAT_R32G32_FLOAT"; case DXGI_FORMAT_R32G32_UINT: return "DXGI_FORMAT_R32G32_UINT"; case DXGI_FORMAT_R32G32_SINT: return "DXGI_FORMAT_R32G32_SINT"; case DXGI_FORMAT_R32G8X24_TYPELESS: return "DXGI_FORMAT_R32G8X24_TYPELESS"; case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: return "DXGI_FORMAT_D32_FLOAT_S8X24_UINT"; case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: return "DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS"; case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return "DXGI_FORMAT_X32_TYPELESS_G8X24_UINT"; case DXGI_FORMAT_R10G10B10A2_TYPELESS: return "DXGI_FORMAT_R10G10B10A2_TYPELESS"; case DXGI_FORMAT_R10G10B10A2_UNORM: return "DXGI_FORMAT_R10G10B10A2_UNORM"; case DXGI_FORMAT_R10G10B10A2_UINT: return "DXGI_FORMAT_R10G10B10A2_UINT"; case DXGI_FORMAT_R11G11B10_FLOAT: return "DXGI_FORMAT_R11G11B10_FLOAT"; case DXGI_FORMAT_R8G8B8A8_TYPELESS: return "DXGI_FORMAT_R8G8B8A8_TYPELESS"; case DXGI_FORMAT_R8G8B8A8_UNORM: return "DXGI_FORMAT_R8G8B8A8_UNORM"; case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: return "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB"; case DXGI_FORMAT_R8G8B8A8_UINT: return "DXGI_FORMAT_R8G8B8A8_UINT"; case DXGI_FORMAT_R8G8B8A8_SNORM: return "DXGI_FORMAT_R8G8B8A8_SNORM"; case DXGI_FORMAT_R8G8B8A8_SINT: return "DXGI_FORMAT_R8G8B8A8_SINT"; case DXGI_FORMAT_R16G16_TYPELESS: return "DXGI_FORMAT_R16G16_TYPELESS"; case DXGI_FORMAT_R16G16_FLOAT: return "DXGI_FORMAT_R16G16_FLOAT"; case DXGI_FORMAT_R16G16_UNORM: return "DXGI_FORMAT_R16G16_UNORM"; case DXGI_FORMAT_R16G16_UINT: return "DXGI_FORMAT_R16G16_UINT"; case DXGI_FORMAT_R16G16_SNORM: return "DXGI_FORMAT_R16G16_SNORM"; case DXGI_FORMAT_R16G16_SINT: return "DXGI_FORMAT_R16G16_SINT"; case DXGI_FORMAT_R32_TYPELESS: return "DXGI_FORMAT_R32_TYPELESS"; case DXGI_FORMAT_D32_FLOAT: return "DXGI_FORMAT_D32_FLOAT"; case DXGI_FORMAT_R32_FLOAT: return "DXGI_FORMAT_R32_FLOAT"; case DXGI_FORMAT_R32_UINT: return "DXGI_FORMAT_R32_UINT"; case DXGI_FORMAT_R32_SINT: return "DXGI_FORMAT_R32_SINT"; case DXGI_FORMAT_R24G8_TYPELESS: return "DXGI_FORMAT_R24G8_TYPELESS"; case DXGI_FORMAT_D24_UNORM_S8_UINT: return "DXGI_FORMAT_D24_UNORM_S8_UINT"; case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: return "DXGI_FORMAT_R24_UNORM_X8_TYPELESS"; case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return "DXGI_FORMAT_X24_TYPELESS_G8_UINT"; case DXGI_FORMAT_R8G8_TYPELESS: return "DXGI_FORMAT_R8G8_TYPELESS"; case DXGI_FORMAT_R8G8_UNORM: return "DXGI_FORMAT_R8G8_UNORM"; case DXGI_FORMAT_R8G8_UINT: return "DXGI_FORMAT_R8G8_UINT"; case DXGI_FORMAT_R8G8_SNORM: return "DXGI_FORMAT_R8G8_SNORM"; case DXGI_FORMAT_R8G8_SINT: return "DXGI_FORMAT_R8G8_SINT"; case DXGI_FORMAT_R16_TYPELESS: return "DXGI_FORMAT_R16_TYPELESS"; case DXGI_FORMAT_R16_FLOAT: return "DXGI_FORMAT_R16_FLOAT"; case DXGI_FORMAT_D16_UNORM: return "DXGI_FORMAT_D16_UNORM"; case DXGI_FORMAT_R16_UNORM: return "DXGI_FORMAT_R16_UNORM"; case DXGI_FORMAT_R16_UINT: return "DXGI_FORMAT_R16_UINT"; case DXGI_FORMAT_R16_SNORM: return "DXGI_FORMAT_R16_SNORM"; case DXGI_FORMAT_R16_SINT: return "DXGI_FORMAT_R16_SINT"; case DXGI_FORMAT_R8_TYPELESS: return "DXGI_FORMAT_R8_TYPELESS"; case DXGI_FORMAT_R8_UNORM: return "DXGI_FORMAT_R8_UNORM"; case DXGI_FORMAT_R8_UINT: return "DXGI_FORMAT_R8_UINT"; case DXGI_FORMAT_R8_SNORM: return "DXGI_FORMAT_R8_SNORM"; case DXGI_FORMAT_R8_SINT: return "DXGI_FORMAT_R8_SINT"; case DXGI_FORMAT_A8_UNORM: return "DXGI_FORMAT_A8_UNORM"; case DXGI_FORMAT_R1_UNORM: return "DXGI_FORMAT_R1_UNORM"; case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: return "DXGI_FORMAT_R9G9B9E5_SHAREDEXP"; case DXGI_FORMAT_R8G8_B8G8_UNORM: return "DXGI_FORMAT_R8G8_B8G8_UNORM"; case DXGI_FORMAT_G8R8_G8B8_UNORM: return "DXGI_FORMAT_G8R8_G8B8_UNORM"; case DXGI_FORMAT_BC1_TYPELESS: return "DXGI_FORMAT_BC1_TYPELESS"; case DXGI_FORMAT_BC1_UNORM: return "DXGI_FORMAT_BC1_UNORM"; case DXGI_FORMAT_BC1_UNORM_SRGB: return "DXGI_FORMAT_BC1_UNORM_SRGB"; case DXGI_FORMAT_BC2_TYPELESS: return "DXGI_FORMAT_BC2_TYPELESS"; case DXGI_FORMAT_BC2_UNORM: return "DXGI_FORMAT_BC2_UNORM"; case DXGI_FORMAT_BC2_UNORM_SRGB: return "DXGI_FORMAT_BC2_UNORM_SRGB"; case DXGI_FORMAT_BC3_TYPELESS: return "DXGI_FORMAT_BC3_TYPELESS"; case DXGI_FORMAT_BC3_UNORM: return "DXGI_FORMAT_BC3_UNORM"; case DXGI_FORMAT_BC3_UNORM_SRGB: return "DXGI_FORMAT_BC3_UNORM_SRGB"; case DXGI_FORMAT_BC4_TYPELESS: return "DXGI_FORMAT_BC4_TYPELESS"; case DXGI_FORMAT_BC4_UNORM: return "DXGI_FORMAT_BC4_UNORM"; case DXGI_FORMAT_BC4_SNORM: return "DXGI_FORMAT_BC4_SNORM"; case DXGI_FORMAT_BC5_TYPELESS: return "DXGI_FORMAT_BC5_TYPELESS"; case DXGI_FORMAT_BC5_UNORM: return "DXGI_FORMAT_BC5_UNORM"; case DXGI_FORMAT_BC5_SNORM: return "DXGI_FORMAT_BC5_SNORM"; case DXGI_FORMAT_B5G6R5_UNORM: return "DXGI_FORMAT_B5G6R5_UNORM"; case DXGI_FORMAT_B5G5R5A1_UNORM: return "DXGI_FORMAT_B5G5R5A1_UNORM"; case DXGI_FORMAT_B8G8R8A8_UNORM: return "DXGI_FORMAT_B8G8R8A8_UNORM"; case DXGI_FORMAT_B8G8R8X8_UNORM: return "DXGI_FORMAT_B8G8R8X8_UNORM"; case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: return "DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM"; case DXGI_FORMAT_B8G8R8A8_TYPELESS: return "DXGI_FORMAT_B8G8R8A8_TYPELESS"; case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: return "DXGI_FORMAT_B8G8R8A8_UNORM_SRGB"; case DXGI_FORMAT_B8G8R8X8_TYPELESS: return "DXGI_FORMAT_B8G8R8X8_TYPELESS"; case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: return "DXGI_FORMAT_B8G8R8X8_UNORM_SRGB"; case DXGI_FORMAT_BC6H_TYPELESS: return "DXGI_FORMAT_BC6H_TYPELESS"; case DXGI_FORMAT_BC6H_UF16: return "DXGI_FORMAT_BC6H_UF16"; case DXGI_FORMAT_BC6H_SF16: return "DXGI_FORMAT_BC6H_SF16"; case DXGI_FORMAT_BC7_TYPELESS: return "DXGI_FORMAT_BC7_TYPELESS"; case DXGI_FORMAT_BC7_UNORM: return "DXGI_FORMAT_BC7_UNORM"; case DXGI_FORMAT_BC7_UNORM_SRGB: return "DXGI_FORMAT_BC7_UNORM_SRGB"; case DXGI_FORMAT_AYUV: return "DXGI_FORMAT_AYUV"; case DXGI_FORMAT_Y410: return "DXGI_FORMAT_Y410"; case DXGI_FORMAT_Y416: return "DXGI_FORMAT_Y416"; case DXGI_FORMAT_NV12: return "DXGI_FORMAT_NV12"; case DXGI_FORMAT_P010: return "DXGI_FORMAT_P010"; case DXGI_FORMAT_P016: return "DXGI_FORMAT_P016"; case DXGI_FORMAT_420_OPAQUE: return "DXGI_FORMAT_420_OPAQUE"; case DXGI_FORMAT_YUY2: return "DXGI_FORMAT_YUY2"; case DXGI_FORMAT_Y210: return "DXGI_FORMAT_Y210"; case DXGI_FORMAT_Y216: return "DXGI_FORMAT_Y216"; case DXGI_FORMAT_NV11: return "DXGI_FORMAT_NV11"; case DXGI_FORMAT_AI44: return "DXGI_FORMAT_AI44"; case DXGI_FORMAT_IA44: return "DXGI_FORMAT_IA44"; case DXGI_FORMAT_P8: return "DXGI_FORMAT_P8"; case DXGI_FORMAT_A8P8: return "DXGI_FORMAT_A8P8"; case DXGI_FORMAT_B4G4R4A4_UNORM: return "DXGI_FORMAT_B4G4R4A4_UNORM"; case DXGI_FORMAT_FORCE_UINT: return "DXGI_FORMAT_FORCE_UINT"; default: return "DXGI_ERROR_FORMAT"; } } } /* namespace d3dstate */ tmpNnpnZF/retrace/d3dstate.hpp0000664000175000017500000000635412543167424015645 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #ifdef HAVE_DXGI #include #endif struct IDirect3DDevice7; struct IDirect3DDevice8; struct IDirect3DDevice9; struct IDXGISwapChain; struct ID3D10Device; struct ID3D10Resource; struct ID3D11DeviceContext; struct ID3D11Resource; class StateWriter; namespace image { class Image; } namespace d3dstate { extern const GUID GUID_D3DSTATE; /* * D3D7 */ image::Image * getRenderTargetImage(IDirect3DDevice7 *pDevice); void dumpFramebuffer(StateWriter &writer, IDirect3DDevice7 *pDevice); void dumpDevice(StateWriter &writer, IDirect3DDevice7 *pDevice); /* * D3D8 */ image::Image * getRenderTargetImage(IDirect3DDevice8 *pDevice); void dumpFramebuffer(StateWriter &writer, IDirect3DDevice8 *pDevice); void dumpDevice(StateWriter &writer, IDirect3DDevice8 *pDevice); /* * D3D9 */ image::Image * getRenderTargetImage(IDirect3DDevice9 *pDevice); void dumpTextures(StateWriter &writer, IDirect3DDevice9 *pDevice); void dumpFramebuffer(StateWriter &writer, IDirect3DDevice9 *pDevice); void dumpDevice(StateWriter &writer, IDirect3DDevice9 *pDevice); #ifdef HAVE_DXGI /* * DXGI */ image::Image * getRenderTargetImage(IDXGISwapChain *pSwapChain); void dumpDevice(StateWriter &writer, IDXGISwapChain *pSwapChain); /* * D3D10 */ image::Image * getRenderTargetImage(ID3D10Device *pDevice); void dumpTextures(StateWriter &writer, ID3D10Device *pDevice); void dumpFramebuffer(StateWriter &writer, ID3D10Device *pDevice); void dumpDevice(StateWriter &writer, ID3D10Device *pDevice); /* * D3D11 */ image::Image * getRenderTargetImage(ID3D11DeviceContext *pDeviceContext, DXGI_FORMAT *dxgiFormat = 0); void dumpTextures(StateWriter &writer, ID3D11DeviceContext *pDeviceContext); void dumpFramebuffer(StateWriter &writer, ID3D11DeviceContext *pDeviceContext); void dumpDevice(StateWriter &writer, ID3D11DeviceContext *pDeviceContext); #endif /* HAVE_DXGI */ } /* namespace d3dstate */ tmpNnpnZF/retrace/scoped_allocator.hpp0000664000175000017500000000541512543167424017444 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include #include #include /** * Similar to alloca(), but implemented with malloc. */ class ScopedAllocator { private: uintptr_t next; public: inline ScopedAllocator() : next(0) { } inline void * alloc(size_t size) { /* Always return valid address, even when size is zero */ size = std::max(size, sizeof(uintptr_t)); uintptr_t * buf = static_cast(malloc(sizeof(uintptr_t) + size)); if (!buf) { return NULL; } *buf = next; next = reinterpret_cast(buf); assert((next & 1) == 0); return static_cast(&buf[1]); } /* XXX: See comment in retrace::ScopedAllocator::allocArray template. */ template< class T > inline T * alloc(size_t size = 1, size_t sizeof_T = sizeof(T)) { return static_cast(alloc(sizeof_T * size)); } /** * Prevent this pointer from being automatically freed. */ template< class T > inline void bind(T *ptr) { if (ptr) { reinterpret_cast(ptr)[-1] |= 1; } } inline ~ScopedAllocator() { while (next) { uintptr_t temp = *reinterpret_cast(next); bool bind = temp & 1; temp &= ~1; if (!bind) { free(reinterpret_cast(next)); } next = temp; } } }; tmpNnpnZF/retrace/d3d9state.cpp0000664000175000017500000000642512543167424015730 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "state_writer.hpp" #include "com_ptr.hpp" #include "d3d9imports.hpp" #include "d3dshader.hpp" #include "d3dstate.hpp" namespace d3dstate { template< class T > inline void dumpShader(StateWriter &writer, const char *name, T *pShader) { if (!pShader) { return; } HRESULT hr; UINT SizeOfData = 0; hr = pShader->GetFunction(NULL, &SizeOfData); if (SUCCEEDED(hr)) { void *pData; pData = malloc(SizeOfData); if (pData) { hr = pShader->GetFunction(pData, &SizeOfData); if (SUCCEEDED(hr)) { com_ptr pDisassembly; hr = DisassembleShader((const DWORD *)pData, &pDisassembly); if (SUCCEEDED(hr)) { writer.beginMember(name); writer.writeString((const char *)pDisassembly->GetBufferPointer() /*, pDisassembly->GetBufferSize() */); writer.endMember(); } } free(pData); } } } static void dumpShaders(StateWriter &writer, IDirect3DDevice9 *pDevice) { writer.beginMember("shaders"); HRESULT hr; writer.beginObject(); com_ptr pVertexShader; hr = pDevice->GetVertexShader(&pVertexShader); if (SUCCEEDED(hr)) { dumpShader(writer, "vertex", pVertexShader); } com_ptr pPixelShader; hr = pDevice->GetPixelShader(&pPixelShader); if (SUCCEEDED(hr)) { dumpShader(writer, "pixel", pPixelShader); } writer.endObject(); writer.endMember(); // shaders } void dumpDevice(StateWriter &writer, IDirect3DDevice9 *pDevice) { /* TODO */ writer.beginMember("parameters"); writer.beginObject(); writer.endObject(); writer.endMember(); // parameters dumpShaders(writer, pDevice); dumpTextures(writer, pDevice); dumpFramebuffer(writer, pDevice); } } /* namespace d3dstate */ tmpNnpnZF/retrace/glws_waffle.cpp0000664000175000017500000001423512543167424016422 0ustar chrischris#define WAFFLE_API_EXPERIMENTAL #define WAFFLE_API_VERSION 0x0103 #include "os.hpp" #include "waffle.h" #include "glws.hpp" namespace glws { struct waffle_display *dpy; class WaffleVisual : public Visual { public: struct waffle_config *config; WaffleVisual(Profile prof, waffle_config *cfg) : Visual(prof), config (cfg) {} ~WaffleVisual() { if (this->config != NULL) { waffle_config_destroy(this->config); this->config = NULL; } } }; class WaffleDrawable : public Drawable { public: struct waffle_window *window; WaffleDrawable(const Visual *vis, int w, int h, bool pbuffer, struct waffle_window *win) : Drawable (vis, w, h, pbuffer), window (win) {} void resize(int w, int h) { if (w == width && h == height) { return; } waffle_window_resize(window, w, h); Drawable::resize(w, h); } void show(void) { if (visible) { return; } waffle_window_show(window); Drawable::show(); } void swapBuffers(void) { waffle_window_swap_buffers(window); } }; class WaffleContext : public Context { public: struct waffle_context *context; WaffleContext(const Visual *vis, struct waffle_context *ctx) : Context(vis), context(ctx) {} ~WaffleContext() { if( context != NULL ) { waffle_context_destroy(context); context = NULL; } } }; /* With waffle there is not too many events to look for.. */ bool processEvents(void) { return true; } void init(void) { Attributes waffle_init_attrib_list; waffle_init_attrib_list.add( WAFFLE_PLATFORM, #if defined(__ANDROID__) WAFFLE_PLATFORM_ANDROID #elif defined(__APPLE__) WAFFLE_PLATFORM_CGL #elif defined(HAVE_X11) # if 1 WAFFLE_PLATFORM_GLX # else WAFFLE_PLATFORM_X11_EGL # endif #else # warning Unsupported platform WAFFLE_NONE #endif ); waffle_init_attrib_list.end(WAFFLE_NONE); waffle_init(waffle_init_attrib_list); dpy = waffle_display_connect(NULL); if (!dpy) { os::log("%s: waffle_display_connect(NULL) == NULL\n", __FILE__); os::abort(); } } void cleanup(void) { waffle_display_disconnect(dpy); } Visual * createVisual(bool doubleBuffer, unsigned samples, Profile profile) { struct waffle_config *cfg; int waffle_api; if (profile.api == glprofile::API_GL) { waffle_api = WAFFLE_CONTEXT_OPENGL; } else if (profile.api == glprofile::API_GLES) { switch (profile.major) { case 1: waffle_api = WAFFLE_CONTEXT_OPENGL_ES1; break; case 2: waffle_api = WAFFLE_CONTEXT_OPENGL_ES2; break; case 3: waffle_api = WAFFLE_CONTEXT_OPENGL_ES3; break; default: os::log("%s: Unsupported context profile\n", __FILE__); os::abort(); return NULL; } } else { assert(0); return NULL; } if (!waffle_display_supports_context_api(dpy, waffle_api)) { os::log("%s: !waffle_display_supports_context_api\n", __FILE__); os::abort(); return NULL; } Attributes config_attrib_list; config_attrib_list.add(WAFFLE_CONTEXT_API, waffle_api); if (profile.api == glprofile::API_GL) { config_attrib_list.add(WAFFLE_CONTEXT_MAJOR_VERSION, profile.major); config_attrib_list.add(WAFFLE_CONTEXT_MINOR_VERSION, profile.minor); if (profile.versionGreaterOrEqual(3, 2)) { int profileMask = profile.core ? WAFFLE_CONTEXT_CORE_PROFILE : WAFFLE_CONTEXT_COMPATIBILITY_PROFILE; config_attrib_list.add(WAFFLE_CONTEXT_PROFILE, profileMask); } if (profile.forwardCompatible) { config_attrib_list.add(WAFFLE_CONTEXT_FORWARD_COMPATIBLE, true); } } config_attrib_list.add(WAFFLE_RED_SIZE, 8); config_attrib_list.add(WAFFLE_GREEN_SIZE, 8); config_attrib_list.add(WAFFLE_BLUE_SIZE, 8); config_attrib_list.add(WAFFLE_DEPTH_SIZE, 8); config_attrib_list.add(WAFFLE_ALPHA_SIZE, 8); config_attrib_list.add(WAFFLE_STENCIL_SIZE, 8); config_attrib_list.add(WAFFLE_DOUBLE_BUFFERED, doubleBuffer); if (0) { config_attrib_list.add(WAFFLE_CONTEXT_DEBUG, true); } config_attrib_list.end(); cfg = waffle_config_choose(dpy, config_attrib_list); if (!cfg) { os::log("Error in %s waffle_config_choose(dpy, " \ "config_attrib_list)\n", __FILE__); os::abort(); return NULL; } return new WaffleVisual(profile, cfg); } Drawable * createDrawable(const Visual *visual, int width, int height, bool pbuffer) { struct waffle_window *window; const WaffleVisual *waffleVisual = static_cast(visual); window = waffle_window_create(waffleVisual->config, width, height); return new WaffleDrawable(visual, width, height, pbuffer, window); } Context * createContext(const Visual *visual, Context *shareContext, bool debug) { struct waffle_context *context; const WaffleVisual *waffleVisual = static_cast(visual); struct waffle_context * share_context = NULL; if (shareContext) { share_context = static_cast(shareContext)->context; } context = waffle_context_create(waffleVisual->config, share_context); if (!context) { os::log("Error in %s waffle_context_create()\n", __FILE__); os::abort(); return NULL; } return new WaffleContext(visual, context); } bool makeCurrent(Drawable *drawable, Context *context) { if (!drawable || !context) { return waffle_make_current(dpy, NULL, NULL); } else { WaffleDrawable *waffleDrawable = static_cast(drawable); WaffleContext *waffleContext = static_cast(context); return waffle_make_current(dpy, waffleDrawable->window, waffleContext->context); } } } /* namespace glws */ tmpNnpnZF/retrace/glws_egl_xlib.cpp0000664000175000017500000003307712543167424016750 0ustar chrischris/************************************************************************** * * Copyright 2011 LunarG, Inc. * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include #include "glproc.hpp" #include "glws.hpp" #include "glws_xlib.hpp" #include namespace glws { static EGLDisplay eglDisplay = EGL_NO_DISPLAY; static char const *eglExtensions = NULL; static bool has_EGL_KHR_create_context = false; static EGLenum translateAPI(glprofile::Profile profile) { switch (profile.api) { case glprofile::API_GL: return EGL_OPENGL_API; case glprofile::API_GLES: return EGL_OPENGL_ES_API; default: assert(0); return EGL_NONE; } } /* Must be called before * * - eglCreateContext * - eglGetCurrentContext * - eglGetCurrentDisplay * - eglGetCurrentSurface * - eglMakeCurrent (when its ctx parameter is EGL_NO_CONTEXT ), * - eglWaitClient * - eglWaitNative */ static void bindAPI(EGLenum api) { if (eglBindAPI(api) != EGL_TRUE) { std::cerr << "error: eglBindAPI failed\n"; exit(1); } } class EglVisual : public Visual { public: EGLConfig config; XVisualInfo *visinfo; EglVisual(Profile prof) : Visual(prof), config(0), visinfo(0) {} ~EglVisual() { XFree(visinfo); } }; class EglDrawable : public Drawable { public: Window window; EGLSurface surface; EGLenum api; EglDrawable(const Visual *vis, int w, int h, bool pbuffer) : Drawable(vis, w, h, pbuffer), api(EGL_OPENGL_ES_API) { XVisualInfo *visinfo = static_cast(visual)->visinfo; const char *name = "eglretrace"; window = createWindow(visinfo, name, width, height); eglWaitNative(EGL_CORE_NATIVE_ENGINE); EGLConfig config = static_cast(visual)->config; surface = eglCreateWindowSurface(eglDisplay, config, (EGLNativeWindowType)window, NULL); } ~EglDrawable() { eglDestroySurface(eglDisplay, surface); eglWaitClient(); XDestroyWindow(display, window); eglWaitNative(EGL_CORE_NATIVE_ENGINE); } void recreate(void) { EGLContext currentContext = eglGetCurrentContext(); EGLSurface currentDrawSurface = eglGetCurrentSurface(EGL_DRAW); EGLSurface currentReadSurface = eglGetCurrentSurface(EGL_READ); bool rebindDrawSurface = currentDrawSurface == surface; bool rebindReadSurface = currentReadSurface == surface; if (rebindDrawSurface || rebindReadSurface) { eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); } // XXX: Defer destruction to prevent getting the same surface as before, which seems to cause Mesa to crash EGLSurface oldSurface = surface; EGLConfig config = static_cast(visual)->config; surface = eglCreateWindowSurface(eglDisplay, config, (EGLNativeWindowType)window, NULL); if (rebindDrawSurface || rebindReadSurface) { eglMakeCurrent(eglDisplay, surface, surface, currentContext); } eglDestroySurface(eglDisplay, oldSurface); } void resize(int w, int h) { if (w == width && h == height) { return; } eglWaitClient(); // We need to ensure that pending events are processed here, and XSync // with discard = True guarantees that, but it appears the limited // event processing we do so far is sufficient //XSync(display, True); Drawable::resize(w, h); resizeWindow(window, w, h); eglWaitNative(EGL_CORE_NATIVE_ENGINE); /* * Some implementations won't update the backbuffer unless we recreate * the EGL surface. */ int eglWidth; int eglHeight; eglQuerySurface(eglDisplay, surface, EGL_WIDTH, &eglWidth); eglQuerySurface(eglDisplay, surface, EGL_HEIGHT, &eglHeight); if (eglWidth != width || eglHeight != height) { recreate(); eglQuerySurface(eglDisplay, surface, EGL_WIDTH, &eglWidth); eglQuerySurface(eglDisplay, surface, EGL_HEIGHT, &eglHeight); } assert(eglWidth == width); assert(eglHeight == height); } void show(void) { if (visible) { return; } eglWaitClient(); showWindow(window); eglWaitNative(EGL_CORE_NATIVE_ENGINE); Drawable::show(); } void swapBuffers(void) { bindAPI(api); eglSwapBuffers(eglDisplay, surface); processKeys(window); } }; class EglContext : public Context { public: EGLContext context; EglContext(const Visual *vis, EGLContext ctx) : Context(vis), context(ctx) {} ~EglContext() { eglDestroyContext(eglDisplay, context); } }; /** * Load the symbols from the specified shared object into global namespace, so * that they can be later found by dlsym(RTLD_NEXT, ...); */ static void load(const char *filename) { if (!dlopen(filename, RTLD_GLOBAL | RTLD_LAZY)) { std::cerr << "error: unable to open " << filename << "\n"; exit(1); } } void init(void) { load("libEGL.so.1"); initX(); eglExtensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); if (eglExtensions && checkExtension("EGL_EXT_platform_x11", eglExtensions)) { Attributes attribs; attribs.add(EGL_PLATFORM_X11_SCREEN_EXT, screen); attribs.add(EGL_NONE); eglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_X11_EXT, display, attribs); } else { eglDisplay = eglGetDisplay((EGLNativeDisplayType)display); } if (eglDisplay == EGL_NO_DISPLAY) { std::cerr << "error: unable to get EGL display\n"; XCloseDisplay(display); exit(1); } EGLint major, minor; if (!eglInitialize(eglDisplay, &major, &minor)) { std::cerr << "error: unable to initialize EGL display\n"; XCloseDisplay(display); exit(1); } eglExtensions = eglQueryString(eglDisplay, EGL_EXTENSIONS); has_EGL_KHR_create_context = checkExtension("EGL_KHR_create_context", eglExtensions); } void cleanup(void) { if (eglDisplay != EGL_NO_DISPLAY) { eglTerminate(eglDisplay); } cleanupX(); } Visual * createVisual(bool doubleBuffer, unsigned samples, Profile profile) { EGLint api_bits; if (profile.api == glprofile::API_GL) { api_bits = EGL_OPENGL_BIT; if (profile.core && !has_EGL_KHR_create_context) { return NULL; } } else if (profile.api == glprofile::API_GLES) { switch (profile.major) { case 1: api_bits = EGL_OPENGL_ES_BIT; break; case 3: if (has_EGL_KHR_create_context) { api_bits = EGL_OPENGL_ES3_BIT; break; } /* fall-through */ case 2: api_bits = EGL_OPENGL_ES2_BIT; break; default: return NULL; } } else { assert(0); return NULL; } Attributes attribs; attribs.add(EGL_SURFACE_TYPE, EGL_WINDOW_BIT); attribs.add(EGL_RED_SIZE, 1); attribs.add(EGL_GREEN_SIZE, 1); attribs.add(EGL_BLUE_SIZE, 1); attribs.add(EGL_ALPHA_SIZE, 1); attribs.add(EGL_DEPTH_SIZE, 1); attribs.add(EGL_STENCIL_SIZE, 1); attribs.add(EGL_RENDERABLE_TYPE, api_bits); attribs.end(EGL_NONE); EGLint num_configs = 0; if (!eglGetConfigs(eglDisplay, NULL, 0, &num_configs) || num_configs <= 0) { return NULL; } std::vector configs(num_configs); if (!eglChooseConfig(eglDisplay, attribs, &configs[0], num_configs, &num_configs) || num_configs <= 0) { return NULL; } // We can't tell what other APIs the trace will use afterwards, therefore // try to pick a config which supports the widest set of APIs. int bestScore = -1; EGLConfig config = configs[0]; for (EGLint i = 0; i < num_configs; ++i) { EGLint renderable_type = EGL_NONE; eglGetConfigAttrib(eglDisplay, configs[i], EGL_RENDERABLE_TYPE, &renderable_type); int score = 0; assert(renderable_type & api_bits); renderable_type &= ~api_bits; if (renderable_type & EGL_OPENGL_ES2_BIT) { score += 1 << 4; } if (renderable_type & EGL_OPENGL_ES3_BIT) { score += 1 << 3; } if (renderable_type & EGL_OPENGL_ES_BIT) { score += 1 << 2; } if (renderable_type & EGL_OPENGL_BIT) { score += 1 << 1; } if (score > bestScore) { config = configs[i]; bestScore = score; } } assert(bestScore >= 0); EGLint visual_id; if (!eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &visual_id)) { assert(0); return NULL; } EglVisual *visual = new EglVisual(profile); visual->config = config; XVisualInfo templ; int num_visuals = 0; templ.visualid = visual_id; visual->visinfo = XGetVisualInfo(display, VisualIDMask, &templ, &num_visuals); assert(visual->visinfo); return visual; } Drawable * createDrawable(const Visual *visual, int width, int height, bool pbuffer) { return new EglDrawable(visual, width, height, pbuffer); } Context * createContext(const Visual *_visual, Context *shareContext, bool debug) { Profile profile = _visual->profile; const EglVisual *visual = static_cast(_visual); EGLContext share_context = EGL_NO_CONTEXT; EGLContext context; Attributes attribs; if (shareContext) { share_context = static_cast(shareContext)->context; } int contextFlags = 0; if (profile.api == glprofile::API_GL) { load("libGL.so.1"); if (has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_MAJOR_VERSION_KHR, profile.major); attribs.add(EGL_CONTEXT_MINOR_VERSION_KHR, profile.minor); int profileMask = profile.core ? EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR : EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR; attribs.add(EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, profileMask); if (profile.forwardCompatible) { contextFlags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR; } } else if (profile.versionGreaterOrEqual(3, 2)) { std::cerr << "error: EGL_KHR_create_context not supported\n"; return NULL; } } else if (profile.api == glprofile::API_GLES) { if (profile.major >= 2) { load("libGLESv2.so.2"); } else { load("libGLESv1_CM.so.1"); } if (has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_MAJOR_VERSION_KHR, profile.major); attribs.add(EGL_CONTEXT_MINOR_VERSION_KHR, profile.minor); } else { attribs.add(EGL_CONTEXT_CLIENT_VERSION, profile.major); } } else { assert(0); return NULL; } if (debug) { contextFlags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR; } if (contextFlags && has_EGL_KHR_create_context) { attribs.add(EGL_CONTEXT_FLAGS_KHR, contextFlags); } attribs.end(EGL_NONE); EGLenum api = translateAPI(profile); bindAPI(api); context = eglCreateContext(eglDisplay, visual->config, share_context, attribs); if (!context) { if (debug) { // XXX: Mesa has problems with EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR // with OpenGL ES contexts, so retry without it return createContext(_visual, shareContext, false); } return NULL; } return new EglContext(visual, context); } bool makeCurrent(Drawable *drawable, Context *context) { if (!drawable || !context) { return eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); } else { EglDrawable *eglDrawable = static_cast(drawable); EglContext *eglContext = static_cast(context); EGLBoolean ok; EGLenum api = translateAPI(eglContext->profile); bindAPI(api); ok = eglMakeCurrent(eglDisplay, eglDrawable->surface, eglDrawable->surface, eglContext->context); if (ok) { eglDrawable->api = api; } return ok; } } } /* namespace glws */ tmpNnpnZF/retrace/retrace.py0000664000175000017500000005726112543167424015423 0ustar chrischris########################################################################## # # Copyright 2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """Generic retracing code generator.""" # Adjust path import os.path import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import specs.stdapi as stdapi class UnsupportedType(Exception): pass def lookupHandle(handle, value, lval=False): if handle.key is None: return "_%s_map[%s]" % (handle.name, value) else: key_name, key_type = handle.key if handle.name == "location" and lval == False: return "_location_map[%s].lookupUniformLocation(%s)" % (key_name, value) else: return "_%s_map[%s][%s]" % (handle.name, key_name, value) class ValueAllocator(stdapi.Visitor): def visitLiteral(self, literal, lvalue, rvalue): pass def visitConst(self, const, lvalue, rvalue): self.visit(const.type, lvalue, rvalue) def visitAlias(self, alias, lvalue, rvalue): self.visit(alias.type, lvalue, rvalue) def visitEnum(self, enum, lvalue, rvalue): pass def visitBitmask(self, bitmask, lvalue, rvalue): pass def visitArray(self, array, lvalue, rvalue): print ' %s = _allocator.allocArray<%s>(&%s);' % (lvalue, array.type, rvalue) def visitPointer(self, pointer, lvalue, rvalue): print ' %s = _allocator.allocArray<%s>(&%s);' % (lvalue, pointer.type, rvalue) def visitIntPointer(self, pointer, lvalue, rvalue): pass def visitObjPointer(self, pointer, lvalue, rvalue): pass def visitLinearPointer(self, pointer, lvalue, rvalue): pass def visitReference(self, reference, lvalue, rvalue): self.visit(reference.type, lvalue, rvalue); def visitHandle(self, handle, lvalue, rvalue): pass def visitBlob(self, blob, lvalue, rvalue): pass def visitString(self, string, lvalue, rvalue): pass def visitStruct(self, struct, lvalue, rvalue): pass def visitPolymorphic(self, polymorphic, lvalue, rvalue): assert polymorphic.defaultType is not None self.visit(polymorphic.defaultType, lvalue, rvalue) def visitOpaque(self, opaque, lvalue, rvalue): pass class ValueDeserializer(stdapi.Visitor, stdapi.ExpanderMixin): def visitLiteral(self, literal, lvalue, rvalue): print ' %s = (%s).to%s();' % (lvalue, rvalue, literal.kind) def visitConst(self, const, lvalue, rvalue): self.visit(const.type, lvalue, rvalue) def visitAlias(self, alias, lvalue, rvalue): self.visit(alias.type, lvalue, rvalue) def visitEnum(self, enum, lvalue, rvalue): print ' %s = static_cast<%s>((%s).toSInt());' % (lvalue, enum, rvalue) def visitBitmask(self, bitmask, lvalue, rvalue): self.visit(bitmask.type, lvalue, rvalue) def visitArray(self, array, lvalue, rvalue): tmp = '_a_' + array.tag + '_' + str(self.seq) self.seq += 1 print ' if (%s) {' % (lvalue,) print ' const trace::Array *%s = (%s).toArray();' % (tmp, rvalue) if self.insideStruct: if isinstance(array.length, int): # Member is an array print r' static_assert( std::is_array< std::remove_reference< decltype( %s ) >::type >::value , "lvalue must be an array" );' % lvalue print r' static_assert( std::extent< std::remove_reference< decltype( %s ) >::type >::value == %s, "array size mismatch" );' % (lvalue, array.length) else: # Member is a pointer to an array, hence must be allocated print r' static_assert( std::is_pointer< std::remove_reference< decltype( %s ) >::type >::value , "lvalue must be a pointer" );' % lvalue print r' %s = _allocator.allocArray<%s>(&%s);' % (lvalue, array.type, rvalue) length = '%s->values.size()' % (tmp,) index = '_j' + array.tag print ' for (size_t {i} = 0; {i} < {length}; ++{i}) {{'.format(i = index, length = length) try: self.visit(array.type, '%s[%s]' % (lvalue, index), '*%s->values[%s]' % (tmp, index)) finally: print ' }' print ' }' def visitPointer(self, pointer, lvalue, rvalue): tmp = '_a_' + pointer.tag + '_' + str(self.seq) self.seq += 1 print ' if (%s) {' % (lvalue,) print ' const trace::Array *%s = (%s).toArray();' % (tmp, rvalue) try: self.visit(pointer.type, '%s[0]' % (lvalue,), '*%s->values[0]' % (tmp,)) finally: print ' }' def visitIntPointer(self, pointer, lvalue, rvalue): print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, pointer, rvalue) def visitObjPointer(self, pointer, lvalue, rvalue): print ' %s = retrace::asObjPointer<%s>(call, %s);' % (lvalue, pointer.type, rvalue) def visitLinearPointer(self, pointer, lvalue, rvalue): print ' %s = static_cast<%s>(retrace::toPointer(%s));' % (lvalue, pointer, rvalue) def visitReference(self, reference, lvalue, rvalue): self.visit(reference.type, lvalue, rvalue); def visitHandle(self, handle, lvalue, rvalue): #OpaqueValueDeserializer().visit(handle.type, lvalue, rvalue); self.visit(handle.type, lvalue, rvalue); new_lvalue = lookupHandle(handle, lvalue) print ' if (retrace::verbosity >= 2) {' print ' std::cout << "%s " << size_t(%s) << " <- " << size_t(%s) << "\\n";' % (handle.name, lvalue, new_lvalue) print ' }' if (new_lvalue.startswith('_program_map') or new_lvalue.startswith('_shader_map')): print 'if (glretrace::supportsARBShaderObjects) {' print ' %s = _handleARB_map[%s];' % (lvalue, lvalue) print '} else {' print ' %s = %s;' % (lvalue, new_lvalue) print '}' else: print ' %s = %s;' % (lvalue, new_lvalue) def visitBlob(self, blob, lvalue, rvalue): print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, blob, rvalue) def visitString(self, string, lvalue, rvalue): print ' %s = (%s)((%s).toString());' % (lvalue, string.expr, rvalue) seq = 0 insideStruct = 0 def visitStruct(self, struct, lvalue, rvalue): tmp = '_s_' + struct.tag + '_' + str(self.seq) self.seq += 1 self.insideStruct += 1 print ' const trace::Struct *%s = (%s).toStruct();' % (tmp, rvalue) print ' assert(%s);' % (tmp) for i in range(len(struct.members)): member = struct.members[i] self.visitMember(member, lvalue, '*%s->members[%s]' % (tmp, i)) self.insideStruct -= 1 def visitPolymorphic(self, polymorphic, lvalue, rvalue): if polymorphic.defaultType is None: switchExpr = self.expand(polymorphic.switchExpr) print r' switch (%s) {' % switchExpr for cases, type in polymorphic.iterSwitch(): for case in cases: print r' %s:' % case caseLvalue = lvalue if type.expr is not None: caseLvalue = 'static_cast<%s>(%s)' % (type, caseLvalue) print r' {' try: self.visit(type, caseLvalue, rvalue) finally: print r' }' print r' break;' if polymorphic.defaultType is None: print r' default:' print r' retrace::warning(call) << "unexpected polymorphic case" << %s << "\n";' % (switchExpr,) print r' break;' print r' }' else: self.visit(polymorphic.defaultType, lvalue, rvalue) def visitOpaque(self, opaque, lvalue, rvalue): raise UnsupportedType class OpaqueValueDeserializer(ValueDeserializer): '''Value extractor that also understands opaque values. Normally opaque values can't be retraced, unless they are being extracted in the context of handles.''' def visitOpaque(self, opaque, lvalue, rvalue): print ' %s = static_cast<%s>(retrace::toPointer(%s));' % (lvalue, opaque, rvalue) class SwizzledValueRegistrator(stdapi.Visitor, stdapi.ExpanderMixin): '''Type visitor which will register (un)swizzled value pairs, to later be swizzled.''' def visitLiteral(self, literal, lvalue, rvalue): pass def visitAlias(self, alias, lvalue, rvalue): self.visit(alias.type, lvalue, rvalue) def visitEnum(self, enum, lvalue, rvalue): pass def visitBitmask(self, bitmask, lvalue, rvalue): pass def visitArray(self, array, lvalue, rvalue): print ' const trace::Array *_a%s = (%s).toArray();' % (array.tag, rvalue) print ' if (_a%s) {' % (array.tag) length = '_a%s->values.size()' % array.tag index = '_j' + array.tag print ' for (size_t {i} = 0; {i} < {length}; ++{i}) {{'.format(i = index, length = length) try: self.visit(array.type, '%s[%s]' % (lvalue, index), '*_a%s->values[%s]' % (array.tag, index)) finally: print ' }' print ' }' def visitPointer(self, pointer, lvalue, rvalue): print ' const trace::Array *_a%s = (%s).toArray();' % (pointer.tag, rvalue) print ' if (_a%s) {' % (pointer.tag) try: self.visit(pointer.type, '%s[0]' % (lvalue,), '*_a%s->values[0]' % (pointer.tag,)) finally: print ' }' def visitIntPointer(self, pointer, lvalue, rvalue): pass def visitObjPointer(self, pointer, lvalue, rvalue): print r' retrace::addObj(call, %s, %s);' % (rvalue, lvalue) def visitLinearPointer(self, pointer, lvalue, rvalue): assert pointer.size is not None if pointer.size is not None: print r' retrace::addRegion(call, (%s).toUIntPtr(), %s, %s);' % (rvalue, lvalue, pointer.size) def visitReference(self, reference, lvalue, rvalue): pass def visitHandle(self, handle, lvalue, rvalue): print ' %s _origResult;' % handle.type OpaqueValueDeserializer().visit(handle.type, '_origResult', rvalue); if handle.range is None: rvalue = "_origResult" entry = lookupHandle(handle, rvalue, True) if (entry.startswith('_program_map') or entry.startswith('_shader_map')): print 'if (glretrace::supportsARBShaderObjects) {' print ' _handleARB_map[%s] = %s;' % (rvalue, lvalue) print '} else {' print ' %s = %s;' % (entry, lvalue) print '}' else: print " %s = %s;" % (entry, lvalue) print ' if (retrace::verbosity >= 2) {' print ' std::cout << "{handle.name} " << {rvalue} << " -> " << {lvalue} << "\\n";'.format(**locals()) print ' }' else: i = '_h' + handle.tag lvalue = "%s + %s" % (lvalue, i) rvalue = "_origResult + %s" % (i,) entry = lookupHandle(handle, rvalue) print ' for ({handle.type} {i} = 0; {i} < {handle.range}; ++{i}) {{'.format(**locals()) print ' {entry} = {lvalue};'.format(**locals()) print ' if (retrace::verbosity >= 2) {' print ' std::cout << "{handle.name} " << ({rvalue}) << " -> " << ({lvalue}) << "\\n";'.format(**locals()) print ' }' print ' }' def visitBlob(self, blob, lvalue, rvalue): pass def visitString(self, string, lvalue, rvalue): pass seq = 0 def visitStruct(self, struct, lvalue, rvalue): tmp = '_s_' + struct.tag + '_' + str(self.seq) self.seq += 1 print ' const trace::Struct *%s = (%s).toStruct();' % (tmp, rvalue) print ' assert(%s);' % (tmp,) print ' (void)%s;' % (tmp,) for i in range(len(struct.members)): member = struct.members[i] self.visitMember(member, lvalue, '*%s->members[%s]' % (tmp, i)) def visitPolymorphic(self, polymorphic, lvalue, rvalue): assert polymorphic.defaultType is not None self.visit(polymorphic.defaultType, lvalue, rvalue) def visitOpaque(self, opaque, lvalue, rvalue): pass class Retracer: def retraceFunction(self, function): print 'static void retrace_%s(trace::Call &call) {' % function.name self.retraceFunctionBody(function) print '}' print def retraceInterfaceMethod(self, interface, method): print 'static void retrace_%s__%s(trace::Call &call) {' % (interface.name, method.name) self.retraceInterfaceMethodBody(interface, method) print '}' print def retraceFunctionBody(self, function): assert function.sideeffects if function.type is not stdapi.Void: self.checkOrigResult(function) self.deserializeArgs(function) self.declareRet(function) self.invokeFunction(function) self.swizzleValues(function) def retraceInterfaceMethodBody(self, interface, method): assert method.sideeffects if method.type is not stdapi.Void: self.checkOrigResult(method) self.deserializeThisPointer(interface) self.deserializeArgs(method) self.declareRet(method) self.invokeInterfaceMethod(interface, method) self.swizzleValues(method) def checkOrigResult(self, function): '''Hook for checking the original result, to prevent succeeding now where the original did not, which would cause diversion and potentially unpredictable results.''' assert function.type is not stdapi.Void if str(function.type) == 'HRESULT': print r' if (call.ret && FAILED(call.ret->toSInt())) {' print r' return;' print r' }' def deserializeThisPointer(self, interface): print r' %s *_this;' % (interface.name,) print r' _this = retrace::asObjPointer<%s>(call, call.arg(0));' % (interface.name,) print r' if (!_this) {' print r' return;' print r' }' def deserializeArgs(self, function): print ' retrace::ScopedAllocator _allocator;' print ' (void)_allocator;' success = True for arg in function.args: arg_type = arg.type.mutable() print ' %s %s;' % (arg_type, arg.name) rvalue = 'call.arg(%u)' % (arg.index,) lvalue = arg.name try: self.extractArg(function, arg, arg_type, lvalue, rvalue) except UnsupportedType: success = False print ' memset(&%s, 0, sizeof %s); // FIXME' % (arg.name, arg.name) print if not success: print ' if (1) {' self.failFunction(function) sys.stderr.write('warning: unsupported %s call\n' % function.name) print ' }' def swizzleValues(self, function): for arg in function.args: if arg.output: arg_type = arg.type.mutable() rvalue = 'call.arg(%u)' % (arg.index,) lvalue = arg.name try: self.regiterSwizzledValue(arg_type, lvalue, rvalue) except UnsupportedType: print ' // XXX: %s' % arg.name if function.type is not stdapi.Void: rvalue = '*call.ret' lvalue = '_result' try: self.regiterSwizzledValue(function.type, lvalue, rvalue) except UnsupportedType: raise print ' // XXX: result' def failFunction(self, function): print ' if (retrace::verbosity >= 0) {' print ' retrace::unsupported(call);' print ' }' print ' return;' def extractArg(self, function, arg, arg_type, lvalue, rvalue): ValueAllocator().visit(arg_type, lvalue, rvalue) if arg.input: ValueDeserializer().visit(arg_type, lvalue, rvalue) def extractOpaqueArg(self, function, arg, arg_type, lvalue, rvalue): try: ValueAllocator().visit(arg_type, lvalue, rvalue) except UnsupportedType: pass OpaqueValueDeserializer().visit(arg_type, lvalue, rvalue) def regiterSwizzledValue(self, type, lvalue, rvalue): visitor = SwizzledValueRegistrator() visitor.visit(type, lvalue, rvalue) def declareRet(self, function): if function.type is not stdapi.Void: print ' %s _result;' % (function.type) def invokeFunction(self, function): arg_names = ", ".join(function.argNames()) if function.type is not stdapi.Void: print ' _result = %s(%s);' % (function.name, arg_names) self.checkResult(None, function) else: print ' %s(%s);' % (function.name, arg_names) def invokeInterfaceMethod(self, interface, method): arg_names = ", ".join(method.argNames()) if method.type is not stdapi.Void: print ' _result = _this->%s(%s);' % (method.name, arg_names) else: print ' _this->%s(%s);' % (method.name, arg_names) # Adjust reference count when QueryInterface fails. This is # particularly useful when replaying traces on older Direct3D runtimes # which might miss newer versions of interfaces, yet none of those # methods are actually used. # # TODO: Generalize to other methods that return interfaces if method.name == 'QueryInterface': print r' if (FAILED(_result)) {' print r' IUnknown *pObj = retrace::asObjPointer(call, *call.arg(2).toArray()->values[0]);' print r' if (pObj) {' print r' pObj->AddRef();' print r' }' print r' }' if method.type is not stdapi.Void: self.checkResult(interface, method) # Debug COM reference counting. Disabled by default as reported # reference counts depend on internal implementation details. if method.name in ('AddRef', 'Release'): print r' if (0) retrace::checkMismatch(call, "cRef", call.ret, _result);' # On release our reference when we reach Release() == 0 call in the # trace. if method.name == 'Release': print r' ULONG _orig_result = call.ret->toUInt();' print r' if (_orig_result == 0 || _result == 0) {' print r' if (_orig_result != 0) {' print r' retrace::warning(call) << "unexpected object destruction\n";' print r' }' print r' retrace::delObj(call.arg(0));' print r' }' def checkResult(self, interface, methodOrFunction): assert methodOrFunction.type is not stdapi.Void if str(methodOrFunction.type) == 'HRESULT': print r' if (FAILED(_result)) {' print r' retrace::failed(call, _result);' print r' return;' print r' }' else: print r' (void)_result;' def checkPitchMismatch(self, method): # Warn for mismatches in 2D/3D mappings. # FIXME: We should try to swizzle them. It's a bit of work, but possible. for outArg in method.args: if outArg.output \ and isinstance(outArg.type, stdapi.Pointer) \ and isinstance(outArg.type.type, stdapi.Struct): print r' const trace::Array *_%s = call.arg(%u).toArray();' % (outArg.name, outArg.index) print r' if (%s) {' % outArg.name print r' const trace::Struct *_struct = _%s->values[0]->toStruct();' % (outArg.name) print r' if (_struct) {' struct = outArg.type.type for memberIndex in range(len(struct.members)): memberType, memberName = struct.members[memberIndex] if memberName.endswith('Pitch'): print r' retrace::checkMismatch(call, "%s", _struct->members[%u], %s->%s);' % (memberName, memberIndex, outArg.name, memberName) print r' }' print r' }' def filterFunction(self, function): return True table_name = 'retrace::callbacks' def retraceApi(self, api): print '#include "os_time.hpp"' print '#include "trace_parser.hpp"' print '#include "retrace.hpp"' print '#include "retrace_swizzle.hpp"' print types = api.getAllTypes() handles = [type for type in types if isinstance(type, stdapi.Handle)] handle_names = set() for handle in handles: if handle.name not in handle_names: if handle.key is None: print 'static retrace::map<%s> _%s_map;' % (handle.type, handle.name) else: key_name, key_type = handle.key print 'static std::map<%s, retrace::map<%s> > _%s_map;' % (key_type, handle.type, handle.name) handle_names.add(handle.name) print functions = filter(self.filterFunction, api.getAllFunctions()) for function in functions: if function.sideeffects and not function.internal: self.retraceFunction(function) interfaces = api.getAllInterfaces() for interface in interfaces: for method in interface.methods: if method.sideeffects and not method.internal: self.retraceInterfaceMethod(interface, method) print 'const retrace::Entry %s[] = {' % self.table_name for function in functions: if not function.internal: if function.sideeffects: print ' {"%s", &retrace_%s},' % (function.name, function.name) else: print ' {"%s", &retrace::ignore},' % (function.name,) for interface in interfaces: for base, method in interface.iterBaseMethods(): if method.sideeffects: print ' {"%s::%s", &retrace_%s__%s},' % (interface.name, method.name, base.name, method.name) else: print ' {"%s::%s", &retrace::ignore},' % (interface.name, method.name) print ' {NULL, NULL}' print '};' print tmpNnpnZF/retrace/glstate.hpp0000664000175000017500000000347012543167424015571 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "glimports.hpp" #ifndef ARRAYSIZE #define ARRAYSIZE(_x) (sizeof(_x)/sizeof((_x)[0])) #endif namespace image { class Image; } class StateWriter; namespace glstate { extern const GLenum textureTargets[]; extern const unsigned numTextureTargets; GLenum getTextureBinding(GLenum target); const char *enumToString(GLenum pname); void dumpCurrentContext(StateWriter &writer); bool getDrawableBounds(GLint *width, GLint *height); image::Image * getDrawBufferImage(void); } /* namespace glstate */ tmpNnpnZF/retrace/glretrace_cgl.cpp0000664000175000017500000003444412543167424016723 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include "glproc.hpp" #include "retrace.hpp" #include "retrace_swizzle.hpp" #include "glretrace.hpp" #define kCGLNoError 0 #define kCGLPFAAllRenderers 1 #define kCGLPFATripleBuffer 3 #define kCGLPFADoubleBuffer 5 #define kCGLPFAStereo 6 #define kCGLPFAAuxBuffers 7 #define kCGLPFAColorSize 8 #define kCGLPFAAlphaSize 11 #define kCGLPFADepthSize 12 #define kCGLPFAStencilSize 13 #define kCGLPFAAccumSize 14 #define kCGLPFAMinimumPolicy 51 #define kCGLPFAMaximumPolicy 52 #define kCGLPFAOffScreen 53 #define kCGLPFAFullScreen 54 #define kCGLPFASampleBuffers 55 #define kCGLPFASamples 56 #define kCGLPFAAuxDepthStencil 57 #define kCGLPFAColorFloat 58 #define kCGLPFAMultisample 59 #define kCGLPFASupersample 60 #define kCGLPFASampleAlpha 61 #define kCGLPFARendererID 70 #define kCGLPFASingleRenderer 71 #define kCGLPFANoRecovery 72 #define kCGLPFAAccelerated 73 #define kCGLPFAClosestPolicy 74 #define kCGLPFARobust 75 #define kCGLPFABackingStore 76 #define kCGLPFABackingVolatile 77 #define kCGLPFAMPSafe 78 #define kCGLPFAWindow 80 #define kCGLPFAMultiScreen 81 #define kCGLPFACompliant 83 #define kCGLPFADisplayMask 84 #define kCGLPFAPBuffer 90 #define kCGLPFARemotePBuffer 91 #define kCGLPFAAllowOfflineRenderers 96 #define kCGLPFAAcceleratedCompute 97 #define kCGLPFAOpenGLProfile 99 #define kCGLPFASupportsAutomaticGraphicsSwitching 101 #define kCGLPFAVirtualScreenCount 128 #define kCGLOGLPVersion_Legacy 0x1000 #define kCGLOGLPVersion_3_2_Core 0x3200 #define kCGLOGLPVersion_GL3_Core 0x3200 #define kCGLOGLPVersion_GL4_Core 0x4100 using namespace glretrace; typedef std::map DrawableMap; typedef std::map ContextMap; // sid -> Drawable* map static DrawableMap drawable_map; // ctx -> Context* map static ContextMap context_map; static Context *sharedContext = NULL; struct PixelFormat { glprofile::Profile profile; PixelFormat() : profile(glprofile::API_GL, 1, 0) {} }; static glws::Drawable * getDrawable(unsigned long drawable_id, glprofile::Profile profile) { if (drawable_id == 0) { return NULL; } DrawableMap::const_iterator it; it = drawable_map.find(drawable_id); if (it == drawable_map.end()) { return (drawable_map[drawable_id] = glretrace::createDrawable(profile)); } return it->second; } static Context * getContext(unsigned long long ctx) { if (ctx == 0) { return NULL; } ContextMap::const_iterator it; it = context_map.find(ctx); if (it == context_map.end()) { Context *context; context_map[ctx] = context = glretrace::createContext(sharedContext); if (!sharedContext) { sharedContext = context; } return context; } return it->second; } static void retrace_CGLChoosePixelFormat(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } bool singleBuffer = true; int profile = 0; const trace::Array * attribs = call.arg(0).toArray(); if (attribs) { size_t i = 0; while (i < attribs->values.size()) { int param = attribs->values[i++]->toSInt(); if (param == 0) { break; } switch (param) { // Boolean attributes case kCGLPFAAllRenderers: case kCGLPFAStereo: case kCGLPFAMinimumPolicy: case kCGLPFAMaximumPolicy: case kCGLPFAOffScreen: case kCGLPFAFullScreen: case kCGLPFAAuxDepthStencil: case kCGLPFAColorFloat: case kCGLPFAMultisample: case kCGLPFASupersample: case kCGLPFASampleAlpha: case kCGLPFASingleRenderer: case kCGLPFANoRecovery: case kCGLPFAAccelerated: case kCGLPFAClosestPolicy: case kCGLPFARobust: case kCGLPFABackingStore: case kCGLPFABackingVolatile: case kCGLPFAMPSafe: case kCGLPFAWindow: case kCGLPFAMultiScreen: case kCGLPFACompliant: case kCGLPFAPBuffer: case kCGLPFARemotePBuffer: case kCGLPFAAllowOfflineRenderers: case kCGLPFAAcceleratedCompute: case kCGLPFASupportsAutomaticGraphicsSwitching: break; case kCGLPFADoubleBuffer: case kCGLPFATripleBuffer: singleBuffer = false; break; // Valued attributes case kCGLPFAColorSize: case kCGLPFAAlphaSize: case kCGLPFADepthSize: case kCGLPFAStencilSize: case kCGLPFAAuxBuffers: case kCGLPFAAccumSize: case kCGLPFASampleBuffers: case kCGLPFASamples: case kCGLPFARendererID: case kCGLPFADisplayMask: case kCGLPFAVirtualScreenCount: ++i; break; case kCGLPFAOpenGLProfile: profile = attribs->values[i++]->toSInt(); break; default: retrace::warning(call) << "unexpected attribute " << param << "\n"; break; } } } trace::Value & pix = call.argByName("pix")[0]; PixelFormat *pixelFormat = new PixelFormat; // TODO: Do this on a per visual basis switch (profile) { case 0: break; case kCGLOGLPVersion_Legacy: pixelFormat->profile = glprofile::Profile(glprofile::API_GL, 1, 0); break; case kCGLOGLPVersion_GL3_Core: pixelFormat->profile = glprofile::Profile(glprofile::API_GL, 3, 2, true, true); break; case kCGLOGLPVersion_GL4_Core: pixelFormat->profile = glprofile::Profile(glprofile::API_GL, 4, 1, true, true); break; default: retrace::warning(call) << "unexpected opengl profile " << std::hex << profile << std::dec << "\n"; break; } // XXX: Generalize this, don't override command line options. retrace::doubleBuffer = !singleBuffer; retrace::addObj(call, pix, pixelFormat); } static void retrace_CGLDestroyPixelFormat(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } trace::Value & pix = call.argByName("pix"); PixelFormat *pixelFormat = retrace::asObjPointer(call, pix); delete pixelFormat; retrace::delObj(pix); } static void retrace_CGLCreateContext(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } trace::Value & pix = call.argByName("pix"); const PixelFormat *pixelFormat = retrace::asObjPointer(call, pix); glprofile::Profile profile = pixelFormat ? pixelFormat->profile : glretrace::defaultProfile; unsigned long long share = call.arg(1).toUIntPtr(); Context *sharedContext = getContext(share); const trace::Array *ctx_ptr = call.arg(2).toArray(); assert(ctx_ptr); unsigned long long ctx = ctx_ptr->values[0]->toUIntPtr(); Context *context = glretrace::createContext(sharedContext, profile); context_map[ctx] = context; } static void retrace_CGLDestroyContext(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); ContextMap::iterator it; it = context_map.find(ctx); if (it == context_map.end()) { return; } delete it->second; context_map.erase(it); } static void retrace_CGLSetSurface(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); unsigned long long cid = call.arg(1).toUInt(); int wid = call.arg(2).toUInt(); int sid = call.arg(3).toUInt(); (void)cid; (void)wid; Context *context = getContext(ctx); if (context) { glws::Drawable *drawable = getDrawable(sid, context->wsContext->profile); context->drawable = drawable; } } static void retrace_CGLClearDrawable(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); Context *context = getContext(ctx); if (context) { context->drawable = NULL; } } static void retrace_CGLSetCurrentContext(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); Context *new_context = getContext(ctx); glws::Drawable *new_drawable = NULL; if (new_context) { if (!new_context->drawable) { glprofile::Profile profile = new_context->wsContext->profile; new_context->drawable = glretrace::createDrawable(profile); } new_drawable = new_context->drawable; } glretrace::makeCurrent(call, new_drawable, new_context); } static void retrace_CGLFlushDrawable(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } unsigned long long ctx = call.arg(0).toUIntPtr(); Context *context = getContext(ctx); if (context) { glws::Drawable *drawable = context->drawable; if (drawable) { if (retrace::doubleBuffer) { drawable->swapBuffers(); } else { glFlush(); } frame_complete(call); } else { if (retrace::debug) { retrace::warning(call) << "context has no drawable\n"; } } } } static void retrace_CGLSetVirtualScreen(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } GLint screen = call.arg(1).toSInt(); if (screen != 0) { retrace::warning(call) << "multiple virtual screens unsupported\n"; } } /** * We can't fully reimplement CGLTexImageIOSurface2D, as external IOSurface are * no longer present. Simply emit a glTexImage2D to ensure the texture storage * is present. * * See also: * - /System/Library/Frameworks/OpenGL.framework/Headers/CGLIOSurface.h */ static void retrace_CGLTexImageIOSurface2D(trace::Call &call) { if (call.ret->toUInt() != kCGLNoError) { return; } if (retrace::debug) { retrace::warning(call) << "external IOSurface not supported\n"; } unsigned long long ctx = call.arg(0).toUIntPtr(); Context *context = getContext(ctx); GLenum target; target = static_cast((call.arg(1)).toSInt()); GLint level = 0; GLint internalformat; internalformat = static_cast((call.arg(2)).toSInt()); GLsizei width; width = (call.arg(3)).toSInt(); GLsizei height; height = (call.arg(4)).toSInt(); GLint border = 0; GLenum format; format = static_cast((call.arg(5)).toSInt()); GLenum type; type = static_cast((call.arg(6)).toSInt()); GLvoid * pixels = NULL; if (glretrace::getCurrentContext() != context) { if (retrace::debug) { retrace::warning(call) << "current context mismatch\n"; } } glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); if (retrace::debug && !glretrace::insideGlBeginEnd) { glretrace::checkGlError(call); } } const retrace::Entry glretrace::cgl_callbacks[] = { {"CGLChoosePixelFormat", &retrace_CGLChoosePixelFormat}, {"CGLClearDrawable", &retrace_CGLClearDrawable}, {"CGLCreateContext", &retrace_CGLCreateContext}, {"CGLDescribePixelFormat", &retrace::ignore}, {"CGLDescribeRenderer", &retrace::ignore}, {"CGLDestroyContext", &retrace_CGLDestroyContext}, {"CGLDestroyPixelFormat", &retrace_CGLDestroyPixelFormat}, {"CGLDisable", &retrace::ignore}, {"CGLEnable", &retrace::ignore}, {"CGLErrorString", &retrace::ignore}, {"CGLFlushDrawable", &retrace_CGLFlushDrawable}, {"CGLGetCurrentContext", &retrace::ignore}, {"CGLGetGlobalOption", &retrace::ignore}, {"CGLGetOption", &retrace::ignore}, {"CGLGetParameter", &retrace::ignore}, {"CGLGetPixelFormat", &retrace::ignore}, {"CGLGetSurface", &retrace::ignore}, {"CGLGetVersion", &retrace::ignore}, {"CGLGetVirtualScreen", &retrace::ignore}, {"CGLIsEnabled", &retrace::ignore}, {"CGLLockContext", &retrace::ignore}, {"CGLSetCurrentContext", &retrace_CGLSetCurrentContext}, {"CGLSetGlobalOption", &retrace::ignore}, {"CGLSetOption", &retrace::ignore}, {"CGLSetSurface", &retrace_CGLSetSurface}, {"CGLSetParameter", &retrace::ignore}, {"CGLSetVirtualScreen", &retrace_CGLSetVirtualScreen}, {"CGLTexImageIOSurface2D", &retrace_CGLTexImageIOSurface2D}, {"CGLUnlockContext", &retrace::ignore}, {"CGLUpdateContext", &retrace::ignore}, {NULL, NULL}, }; tmpNnpnZF/retrace/ddrawretrace.py0000664000175000017500000001156412543167424016441 0ustar chrischris########################################################################## # # Copyright 2011 Jose Fonseca # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ """D3D retracer generator.""" import sys from dllretrace import DllRetracer as Retracer from specs.stdapi import API from specs.d3d import ddraw, HWND class D3DRetracer(Retracer): def retraceApi(self, api): print '// Swizzling mapping for lock addresses' print 'static std::map _maps;' print # TODO: Keep a table of windows print 'static HWND g_hWnd;' print Retracer.retraceApi(self, api) def invokeInterfaceMethod(self, interface, method): # keep track of the last used device for state dumping if interface.name in ('IDirect3DDevice7',): if method.name == 'Release': print r' if (call.ret->toUInt() == 0) {' print r' d3d7Dumper.unbindDevice(_this);' print r' }' else: print r' d3d7Dumper.bindDevice(_this);' # create windows as neccessary hWndArg = method.getArgByType(HWND) if hWndArg is not None: # FIXME: Try to guess the window size (e.g., from IDirectDrawSurface7::Blt) print r' if (!g_hWnd) {' print r' g_hWnd = d3dretrace::createWindow(512, 512);' print r' }' print r' %s = g_hWnd;' % hWndArg.name if method.name == 'Lock': # Reset _DONOTWAIT flags. Otherwise they may fail, and we have no # way to cope with it (other than retry). mapFlagsArg = method.getArgByName('dwFlags') if mapFlagsArg is not None: print r' dwFlags &= DDLOCK_DONOTWAIT;' print r' dwFlags |= DDLOCK_WAIT;' Retracer.invokeInterfaceMethod(self, interface, method) if method.name == 'CreateDevice': print r' if (FAILED(_result)) {' print r' exit(1);' print r' }' # notify frame has been completed # process events after presents if interface.name == 'IDirectDrawSurface7' and method.name == 'Blt': print r' DDSCAPS2 ddsCaps;' print r' if (SUCCEEDED(_this->GetCaps(&ddsCaps)) &&' print r' (ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)) {' print r' retrace::frameComplete(call);' print r' d3dretrace::processEvents();' print r' }' if method.name == 'Lock': print ' VOID *_pbData = NULL;' print ' size_t _MappedSize = 0;' # FIXME: determine the mapping size #print ' _getMapInfo(_this, %s, _pbData, _MappedSize);' % ', '.join(method.argNames()[:-1]) print ' if (_MappedSize) {' print ' _maps[_this] = _pbData;' # TODO: check pitches match print ' } else {' print ' return;' print ' }' if method.name == 'Unlock': print ' VOID *_pbData = 0;' print ' _pbData = _maps[_this];' print ' if (_pbData) {' print ' retrace::delRegionByPointer(_pbData);' print ' _maps[_this] = 0;' print ' }' def main(): print r'#include ' print print r'#include ' print print r'#include "d3dretrace.hpp"' print api = API() print r'#include "d3dimports.hpp"' api.addModule(ddraw) print print '''static d3dretrace::D3DDumper d3d7Dumper;''' print retracer = D3DRetracer() retracer.table_name = 'd3dretrace::ddraw_callbacks' retracer.retraceApi(api) if __name__ == '__main__': main() tmpNnpnZF/retrace/dxgistate.hpp0000664000175000017500000000377312543167424016130 0ustar chrischris/************************************************************************** * * Copyright 2013 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #pragma once #include #include "compat.h" #include #ifndef ARRAYSIZE #define ARRAYSIZE(_x) (sizeof(_x)/sizeof((_x)[0])) #endif namespace image { class Image; } namespace d3dstate { HRESULT ConvertFormat(DXGI_FORMAT SrcFormat, void *SrcData, UINT SrcPitch, DXGI_FORMAT DstFormat, void *DstData, UINT DstPitch, UINT Width, UINT Height); image::Image * ConvertImage(DXGI_FORMAT SrcFormat, void *SrcData, UINT SrcPitch, UINT Width, UINT Height); image::Image * getRenderTargetImage(IDXGISwapChain *pSwapChain); std::string getDXGIFormatName(DXGI_FORMAT format); } /* namespace d3dstate */ tmpNnpnZF/retrace/README.markdown0000664000175000017500000000051512543167424016113 0ustar chrischrisThe source for replaying retraces lives in this directory. There are actually several distinct layers in this directory which should be eventually be split out: * retrace -- deserialization and interpretation of calls from a trace * ws -- windowing system helpers and abstractions * state -- dumping of state into JSON format tmpNnpnZF/retrace/d3d9state_images.cpp0000664000175000017500000001647012543167424017256 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "image.hpp" #include "state_writer.hpp" #include "com_ptr.hpp" #include "d3d9state.hpp" #include "d3dstate.hpp" namespace d3dstate { static image::Image * getSurfaceImage(IDirect3DDevice9 *pDevice, IDirect3DSurface9 *pSurface) { image::Image *image = NULL; HRESULT hr; if (!pSurface) { return NULL; } D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); assert(SUCCEEDED(hr)); D3DLOCKED_RECT LockedRect; hr = pSurface->LockRect(&LockedRect, NULL, D3DLOCK_READONLY); if (FAILED(hr)) { return NULL; } image = ConvertImage(Desc.Format, LockedRect.pBits, LockedRect.Pitch, Desc.Width, Desc.Height); pSurface->UnlockRect(); return image; } static image::Image * getRenderTargetImage(IDirect3DDevice9 *pDevice, IDirect3DSurface9 *pRenderTarget) { HRESULT hr; if (!pRenderTarget) { return NULL; } D3DSURFACE_DESC Desc; hr = pRenderTarget->GetDesc(&Desc); assert(SUCCEEDED(hr)); com_ptr pStagingSurface; hr = pDevice->CreateOffscreenPlainSurface(Desc.Width, Desc.Height, Desc.Format, D3DPOOL_SYSTEMMEM, &pStagingSurface, NULL); if (FAILED(hr)) { return NULL; } hr = pDevice->GetRenderTargetData(pRenderTarget, pStagingSurface); if (FAILED(hr)) { std::cerr << "warning: GetRenderTargetData failed\n"; return NULL; } return getSurfaceImage(pDevice, pStagingSurface); } image::Image * getRenderTargetImage(IDirect3DDevice9 *pDevice) { HRESULT hr; com_ptr pRenderTarget; hr = pDevice->GetRenderTarget(0, &pRenderTarget); if (FAILED(hr)) { return NULL; } assert(pRenderTarget); return getRenderTargetImage(pDevice, pRenderTarget); } static image::Image * getTextureImage(IDirect3DDevice9 *pDevice, IDirect3DBaseTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level) { HRESULT hr; if (!pTexture) { return NULL; } com_ptr pSurface; D3DRESOURCETYPE Type = pTexture->GetType(); switch (Type) { case D3DRTYPE_TEXTURE: assert(FaceType == D3DCUBEMAP_FACE_POSITIVE_X); hr = reinterpret_cast(pTexture)->GetSurfaceLevel(Level, &pSurface); break; case D3DRTYPE_CUBETEXTURE: hr = reinterpret_cast(pTexture)->GetCubeMapSurface(FaceType, Level, &pSurface); break; default: /* TODO: support volume textures */ return NULL; } if (FAILED(hr) || !pSurface) { return NULL; } D3DSURFACE_DESC Desc; hr = pSurface->GetDesc(&Desc); assert(SUCCEEDED(hr)); if (Desc.Pool != D3DPOOL_DEFAULT || Desc.Usage & D3DUSAGE_DYNAMIC) { // Lockable texture return getSurfaceImage(pDevice, pSurface); } else if (Desc.Usage & D3DUSAGE_RENDERTARGET) { // Rendertarget texture return getRenderTargetImage(pDevice, pSurface); } else { // D3D constraints are such there is not much else that can be done. return NULL; } } void dumpTextures(StateWriter &writer, IDirect3DDevice9 *pDevice) { HRESULT hr; writer.beginMember("textures"); writer.beginObject(); for (DWORD Stage = 0; Stage < 16; ++Stage) { com_ptr pTexture; hr = pDevice->GetTexture(Stage, &pTexture); if (FAILED(hr)) { continue; } if (!pTexture) { continue; } D3DRESOURCETYPE Type = pTexture->GetType(); DWORD NumFaces = Type == D3DRTYPE_CUBETEXTURE ? 6 : 1; DWORD NumLevels = pTexture->GetLevelCount(); for (DWORD Face = 0; Face < NumFaces; ++Face) { for (DWORD Level = 0; Level < NumLevels; ++Level) { image::Image *image; image = getTextureImage(pDevice, pTexture, static_cast(Face), Level); if (image) { char label[128]; if (Type == D3DRTYPE_CUBETEXTURE) { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_FACE_%lu_LEVEL_%lu", Stage, Face, Level); } else { _snprintf(label, sizeof label, "PS_RESOURCE_%lu_LEVEL_%lu", Stage, Level); } writer.beginMember(label); writer.writeImage(image); writer.endMember(); // PS_RESOURCE_* delete image; } } } } writer.endObject(); writer.endMember(); // textures } void dumpFramebuffer(StateWriter &writer, IDirect3DDevice9 *pDevice) { HRESULT hr; writer.beginMember("framebuffer"); writer.beginObject(); D3DCAPS9 Caps; pDevice->GetDeviceCaps(&Caps); for (UINT i = 0; i < Caps.NumSimultaneousRTs; ++i) { com_ptr pRenderTarget; hr = pDevice->GetRenderTarget(i, &pRenderTarget); if (FAILED(hr)) { continue; } if (!pRenderTarget) { continue; } image::Image *image; image = getRenderTargetImage(pDevice, pRenderTarget); if (image) { char label[64]; _snprintf(label, sizeof label, "RENDER_TARGET_%u", i); writer.beginMember(label); writer.writeImage(image); writer.endMember(); // RENDER_TARGET_* delete image; } } com_ptr pDepthStencil; hr = pDevice->GetDepthStencilSurface(&pDepthStencil); if (SUCCEEDED(hr) && pDepthStencil) { image::Image *image; image = getSurfaceImage(pDevice, pDepthStencil); if (image) { writer.beginMember("DEPTH_STENCIL"); writer.writeImage(image); writer.endMember(); // RENDER_TARGET_* delete image; } } writer.endObject(); writer.endMember(); // framebuffer } } /* namespace d3dstate */ tmpNnpnZF/retrace/d3d10state.cpp0000664000175000017500000001045612543167424015777 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "com_ptr.hpp" #include "d3d10imports.hpp" #include "d3d10state.hpp" #include "dxgistate_so.hpp" namespace d3dstate { const GUID GUID_D3DSTATE = {0x7D71CAC9,0x7F58,0x432C,{0xA9,0x75,0xA1,0x9F,0xCF,0xCE,0xFD,0x14}}; static void dumpRasterizerState(StateWriter &writer, ID3D10Device *pDevice) { com_ptr pRasterizerState; pDevice->RSGetState(&pRasterizerState); writer.beginMember("RasterizerState"); dumpStateObjectDesc(writer, pRasterizerState); writer.endMember(); // RasterizerState } static void dumpBlendState(StateWriter &writer, ID3D10Device *pDevice) { com_ptr pBlendState; FLOAT BlendFactor[4]; UINT SampleMask; pDevice->OMGetBlendState(&pBlendState, BlendFactor, &SampleMask); writer.beginMember("BlendState"); dumpStateObjectDesc(writer, pBlendState); writer.endMember(); // BlendState writer.beginMember("BlendFactor"); writer.beginArray(); writer.writeFloat(BlendFactor[0]); writer.writeFloat(BlendFactor[1]); writer.writeFloat(BlendFactor[2]); writer.writeFloat(BlendFactor[3]); writer.endArray(); writer.endMember(); // BlendFactor writer.writeIntMember("SampleMask", SampleMask); } static void dumpDepthStencilState(StateWriter &writer, ID3D10Device *pDevice) { com_ptr pDepthStencilState; UINT stencilRef; pDevice->OMGetDepthStencilState(&pDepthStencilState, &stencilRef); writer.beginMember("DepthStencilState"); dumpStateObjectDesc(writer, pDepthStencilState); writer.endMember(); // DepthStencilState writer.writeIntMember("StencilRef", stencilRef); } static void dumpParameters(StateWriter &writer, ID3D10Device *pDevice) { // TODO: dump description of current bound state writer.beginMember("parameters"); writer.beginObject(); dumpRasterizerState(writer, pDevice); dumpBlendState(writer, pDevice); dumpDepthStencilState(writer, pDevice); writer.endObject(); writer.endMember(); // parameters } static void dumpShaders(StateWriter &writer, ID3D10Device *pDevice) { writer.beginMember("shaders"); writer.beginObject(); com_ptr pVertexShader; pDevice->VSGetShader(&pVertexShader); if (pVertexShader) { dumpShader(writer, "VS", pVertexShader); } com_ptr pGeometryShader; pDevice->GSGetShader(&pGeometryShader); if (pGeometryShader) { dumpShader(writer, "GS", pGeometryShader); } com_ptr pPixelShader; pDevice->PSGetShader(&pPixelShader); if (pPixelShader) { dumpShader(writer, "PS", pPixelShader); } writer.endObject(); writer.endMember(); // shaders } void dumpDevice(StateWriter &writer, ID3D10Device *pDevice) { dumpParameters(writer, pDevice); dumpShaders(writer, pDevice); dumpTextures(writer, pDevice); dumpFramebuffer(writer, pDevice); } } /* namespace d3dstate */ tmpNnpnZF/retrace/dllretrace.py0000664000175000017500000000564012543167424016111 0ustar chrischris########################################################################## # # Copyright 2008-2010 VMware, Inc. # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ##########################################################################/ from retrace import Retracer from dispatch import Dispatcher from specs.stdapi import API class DllDispatcher(Dispatcher): def dispatchModule(self, module): tag = module.name.upper() print r'const char *g_sz%sDllName = NULL;' % (tag,) print r'HMODULE g_h%sModule = NULL;' % (tag,) print r'' print r'static PROC' print r'_get%sProcAddress(LPCSTR lpProcName) {' % tag print r' if (!g_h%sModule) {' % tag print r' if (g_sz%sDllName) {' % tag print r' g_h%sModule = LoadLibraryA(g_sz%sDllName);' % (tag, tag) print r' if (!g_h%sModule) {' % tag print r' os::log("warning: failed to load %%s\n", g_sz%sDllName);' % tag print r' }' print r' }' print r' if (!g_h%sModule) {' % tag print r' g_h%sModule = LoadLibraryA("%s.dll");' % (tag, module.name) print r' }' print r' if (!g_h%sModule) {' % tag print r' os::log("error: failed to load %s.dll\n");' % module.name print r' exit(1);' print r' }' print r' }' print r' return GetProcAddress(g_h%sModule, lpProcName);' % tag print r'}' print r'' Dispatcher.dispatchModule(self, module) def getProcAddressName(self, module, function): return '_get%sProcAddress' % (module.name.upper()) class DllRetracer(Retracer): def retraceApi(self, api): for module in api.modules: dispatcher = DllDispatcher() dispatcher.dispatchModule(module) Retracer.retraceApi(self, api) tmpNnpnZF/retrace/glretrace_main.cpp0000775000175000017500000004725512543167424017111 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * Copyright (C) 2013 Intel Corporation. All rights reversed. * Author: Shuang He * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "retrace.hpp" #include "glproc.hpp" #include "glstate.hpp" #include "glretrace.hpp" #include "os_time.hpp" #include "os_memory.hpp" #include "highlight.hpp" /* Synchronous debug output may reduce performance however, * without it the callNo in the callback may be inaccurate * as the callback may be called at any time. */ #define DEBUG_OUTPUT_SYNCHRONOUS 0 namespace glretrace { glprofile::Profile defaultProfile(glprofile::API_GL, 1, 0); bool insideList = false; bool insideGlBeginEnd = false; bool supportsARBShaderObjects = false; enum { GPU_START = 0, GPU_DURATION, OCCLUSION, NUM_QUERIES, }; struct CallQuery { GLuint ids[NUM_QUERIES]; unsigned call; bool isDraw; GLuint program; const trace::FunctionSig *sig; int64_t cpuStart; int64_t cpuEnd; int64_t vsizeStart; int64_t vsizeEnd; int64_t rssStart; int64_t rssEnd; }; static bool supportsElapsed = true; static bool supportsTimestamp = true; static bool supportsOcclusion = true; static bool supportsDebugOutput = true; static std::list callQueries; static void APIENTRY debugOutputCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam); void checkGlError(trace::Call &call) { GLenum error = glGetError(); while (error != GL_NO_ERROR) { std::ostream & os = retrace::warning(call); os << "glGetError("; os << call.name(); os << ") = "; switch (error) { case GL_INVALID_ENUM: os << "GL_INVALID_ENUM"; break; case GL_INVALID_VALUE: os << "GL_INVALID_VALUE"; break; case GL_INVALID_OPERATION: os << "GL_INVALID_OPERATION"; break; case GL_STACK_OVERFLOW: os << "GL_STACK_OVERFLOW"; break; case GL_STACK_UNDERFLOW: os << "GL_STACK_UNDERFLOW"; break; case GL_OUT_OF_MEMORY: os << "GL_OUT_OF_MEMORY"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: os << "GL_INVALID_FRAMEBUFFER_OPERATION"; break; case GL_TABLE_TOO_LARGE: os << "GL_TABLE_TOO_LARGE"; break; default: os << error; break; } os << "\n"; error = glGetError(); } } static inline int64_t getCurrentTime(void) { if (retrace::profilingGpuTimes && supportsTimestamp) { /* Get the current GL time without stalling */ GLint64 timestamp = 0; glGetInteger64v(GL_TIMESTAMP, ×tamp); return timestamp; } else { return os::getTime(); } } static inline int64_t getTimeFrequency(void) { if (retrace::profilingGpuTimes && supportsTimestamp) { return 1000000000; } else { return os::timeFrequency; } } static inline void getCurrentVsize(int64_t& vsize) { vsize = os::getVsize(); } static inline void getCurrentRss(int64_t& rss) { rss = os::getRss(); } static void completeCallQuery(CallQuery& query) { /* Get call start and duration */ int64_t gpuStart = 0, gpuDuration = 0, cpuDuration = 0, pixels = 0, vsizeDuration = 0, rssDuration = 0; if (query.isDraw) { if (retrace::profilingGpuTimes) { if (supportsTimestamp) { /* Use ARB queries in case EXT not present */ glGetQueryObjecti64v(query.ids[GPU_START], GL_QUERY_RESULT, &gpuStart); glGetQueryObjecti64v(query.ids[GPU_DURATION], GL_QUERY_RESULT, &gpuDuration); } else { glGetQueryObjecti64vEXT(query.ids[GPU_DURATION], GL_QUERY_RESULT, &gpuDuration); } } if (retrace::profilingPixelsDrawn) { if (supportsTimestamp) { glGetQueryObjecti64v(query.ids[OCCLUSION], GL_QUERY_RESULT, &pixels); } else if (supportsElapsed) { glGetQueryObjecti64vEXT(query.ids[OCCLUSION], GL_QUERY_RESULT, &pixels); } else { uint32_t pixels32; glGetQueryObjectuiv(query.ids[OCCLUSION], GL_QUERY_RESULT, &pixels32); pixels = static_cast(pixels32); } } } else { pixels = -1; } if (retrace::profilingCpuTimes) { double cpuTimeScale = 1.0E9 / getTimeFrequency(); cpuDuration = (query.cpuEnd - query.cpuStart) * cpuTimeScale; query.cpuStart *= cpuTimeScale; } if (retrace::profilingMemoryUsage) { vsizeDuration = query.vsizeEnd - query.vsizeStart; rssDuration = query.rssEnd - query.rssStart; } glDeleteQueries(NUM_QUERIES, query.ids); /* Add call to profile */ retrace::profiler.addCall(query.call, query.sig->name, query.program, pixels, gpuStart, gpuDuration, query.cpuStart, cpuDuration, query.vsizeStart, vsizeDuration, query.rssStart, rssDuration); } void flushQueries() { for (std::list::iterator itr = callQueries.begin(); itr != callQueries.end(); ++itr) { completeCallQuery(*itr); } callQueries.clear(); } void beginProfile(trace::Call &call, bool isDraw) { glretrace::Context *currentContext = glretrace::getCurrentContext(); /* Create call query */ CallQuery query; query.isDraw = isDraw; query.call = call.no; query.sig = call.sig; query.program = currentContext ? currentContext->activeProgram : 0; glGenQueries(NUM_QUERIES, query.ids); /* GPU profiling only for draw calls */ if (isDraw) { if (retrace::profilingGpuTimes) { if (supportsTimestamp) { glQueryCounter(query.ids[GPU_START], GL_TIMESTAMP); } glBeginQuery(GL_TIME_ELAPSED, query.ids[GPU_DURATION]); } if (retrace::profilingPixelsDrawn) { glBeginQuery(GL_SAMPLES_PASSED, query.ids[OCCLUSION]); } } callQueries.push_back(query); /* CPU profiling for all calls */ if (retrace::profilingCpuTimes) { CallQuery& query = callQueries.back(); query.cpuStart = getCurrentTime(); } if (retrace::profilingMemoryUsage) { CallQuery& query = callQueries.back(); query.vsizeStart = os::getVsize(); query.rssStart = os::getRss(); } } void endProfile(trace::Call &call, bool isDraw) { /* CPU profiling for all calls */ if (retrace::profilingCpuTimes) { CallQuery& query = callQueries.back(); query.cpuEnd = getCurrentTime(); } /* GPU profiling only for draw calls */ if (isDraw) { if (retrace::profilingGpuTimes) { glEndQuery(GL_TIME_ELAPSED); } if (retrace::profilingPixelsDrawn) { glEndQuery(GL_SAMPLES_PASSED); } } if (retrace::profilingMemoryUsage) { CallQuery& query = callQueries.back(); query.vsizeEnd = os::getVsize(); query.rssEnd = os::getRss(); } } GLenum blockOnFence(trace::Call &call, GLsync sync, GLbitfield flags) { GLenum result; do { result = glClientWaitSync(sync, flags, 1000); } while (result == GL_TIMEOUT_EXPIRED); switch (result) { case GL_ALREADY_SIGNALED: case GL_CONDITION_SATISFIED: break; default: retrace::warning(call) << "got " << glstate::enumToString(result) << "\n"; } return result; } /** * Helper for properly retrace glClientWaitSync(). */ GLenum clientWaitSync(trace::Call &call, GLsync sync, GLbitfield flags, GLuint64 timeout) { GLenum result = call.ret->toSInt(); switch (result) { case GL_ALREADY_SIGNALED: case GL_CONDITION_SATISFIED: // We must block, as following calls might rely on the fence being // signaled result = blockOnFence(call, sync, flags); break; case GL_TIMEOUT_EXPIRED: result = glClientWaitSync(sync, flags, timeout); break; case GL_WAIT_FAILED: break; default: retrace::warning(call) << "unexpected return value\n"; break; } return result; } /* * Called the first time a context is made current. */ void initContext() { glretrace::Context *currentContext = glretrace::getCurrentContext(); assert(currentContext); /* Ensure we got a matching profile. * * In particular on MacOSX, there is no way to specify specific versions, so this is all we can do. * * Also, see if OpenGL ES can be handled through ARB_ES*_compatibility. */ glprofile::Profile expectedProfile = currentContext->wsContext->profile; glprofile::Profile currentProfile = glprofile::getCurrentContextProfile(); if (!currentProfile.matches(expectedProfile)) { if (expectedProfile.api == glprofile::API_GLES && currentProfile.api == glprofile::API_GL && ((expectedProfile.major == 2 && currentContext->hasExtension("GL_ARB_ES2_compatibility")) || (expectedProfile.major == 3 && currentContext->hasExtension("GL_ARB_ES3_compatibility")))) { std::cerr << "warning: context mismatch:" << " expected " << expectedProfile << "," << " but got " << currentProfile << " with GL_ARB_ES" << expectedProfile.major << "_compatibility\n"; } else { std::cerr << "error: context mismatch: expected " << expectedProfile << ", but got " << currentProfile << "\n"; exit(1); } } /* Ensure we have adequate extension support */ supportsTimestamp = currentProfile.versionGreaterOrEqual(glprofile::API_GL, 3, 3) || currentContext->hasExtension("GL_ARB_timer_query"); supportsElapsed = currentContext->hasExtension("GL_EXT_timer_query") || supportsTimestamp; supportsOcclusion = currentProfile.versionGreaterOrEqual(glprofile::API_GL, 1, 5); supportsDebugOutput = currentContext->hasExtension("GL_ARB_debug_output"); supportsARBShaderObjects = currentContext->hasExtension("GL_ARB_shader_objects"); #ifdef __APPLE__ // GL_TIMESTAMP doesn't work on Apple. GL_TIME_ELAPSED still does however. // http://lists.apple.com/archives/mac-opengl/2014/Nov/threads.html#00001 supportsTimestamp = false; #endif /* Check for timer query support */ if (retrace::profilingGpuTimes) { if (!supportsTimestamp && !supportsElapsed) { std::cout << "Error: Cannot run profile, GL_ARB_timer_query or GL_EXT_timer_query extensions are not supported." << std::endl; exit(-1); } GLint bits = 0; glGetQueryiv(GL_TIME_ELAPSED, GL_QUERY_COUNTER_BITS, &bits); if (!bits) { std::cout << "Error: Cannot run profile, GL_QUERY_COUNTER_BITS == 0." << std::endl; exit(-1); } } /* Check for occlusion query support */ if (retrace::profilingPixelsDrawn && !supportsOcclusion) { std::cout << "Error: Cannot run profile, GL_ARB_occlusion_query extension is not supported." << std::endl; exit(-1); } /* Setup debug message call back */ if (retrace::debug && supportsDebugOutput) { glretrace::Context *currentContext = glretrace::getCurrentContext(); glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); glDebugMessageCallbackARB(&debugOutputCallback, currentContext); if (DEBUG_OUTPUT_SYNCHRONOUS) { glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); } } /* Sync the gpu and cpu start times */ if (retrace::profilingCpuTimes || retrace::profilingGpuTimes) { if (!retrace::profiler.hasBaseTimes()) { double cpuTimeScale = 1.0E9 / getTimeFrequency(); GLint64 currentTime = getCurrentTime() * cpuTimeScale; retrace::profiler.setBaseCpuTime(currentTime); retrace::profiler.setBaseGpuTime(currentTime); } } if (retrace::profilingMemoryUsage) { GLint64 currentVsize, currentRss; getCurrentVsize(currentVsize); retrace::profiler.setBaseVsizeUsage(currentVsize); getCurrentRss(currentRss); retrace::profiler.setBaseRssUsage(currentRss); } } void frame_complete(trace::Call &call) { if (retrace::profiling) { /* Complete any remaining queries */ flushQueries(); /* Indicate end of current frame */ retrace::profiler.addFrameEnd(); } retrace::frameComplete(call); glretrace::Context *currentContext = glretrace::getCurrentContext(); if (!currentContext) { return; } glws::Drawable *currentDrawable = currentContext->drawable; assert(currentDrawable); if (retrace::debug && !currentDrawable->pbuffer && !currentDrawable->visible) { retrace::warning(call) << "could not infer drawable size (glViewport never called)\n"; } } // Limit messages // TODO: expose this via a command line option. static const unsigned maxMessageCount = 100; static std::map< uint64_t, unsigned > messageCounts; static void APIENTRY debugOutputCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void *userParam) { /* Ignore application messages while dumping state. */ if (retrace::dumpingState && source == GL_DEBUG_SOURCE_APPLICATION) { return; } /* Ignore NVIDIA's "Buffer detailed info:" messages, as they seem to be * purely informative, and high frequency. */ if (source == GL_DEBUG_SOURCE_API && type == GL_DEBUG_TYPE_OTHER && severity == GL_DEBUG_SEVERITY_LOW && id == 131185) { return; } // Keep track of identical messages; and ignore them after a while. uint64_t messageHash = (uint64_t)id + ((uint64_t)severity << 16) + ((uint64_t)type << 32) + ((uint64_t)source << 48); size_t messageCount = messageCounts[messageHash]++; if (messageCount > maxMessageCount) { return; } const highlight::Highlighter & highlighter = highlight::defaultHighlighter(std::cerr); const char *severityStr = ""; const highlight::Attribute * color = &highlighter.normal(); switch (severity) { case GL_DEBUG_SEVERITY_HIGH: color = &highlighter.color(highlight::RED); severityStr = " major"; break; case GL_DEBUG_SEVERITY_MEDIUM: break; case GL_DEBUG_SEVERITY_LOW: color = &highlighter.color(highlight::GRAY); severityStr = " minor"; break; case GL_DEBUG_SEVERITY_NOTIFICATION: color = &highlighter.color(highlight::GRAY); break; default: assert(0); } const char *sourceStr = ""; switch (source) { case GL_DEBUG_SOURCE_API: sourceStr = " api"; break; case GL_DEBUG_SOURCE_WINDOW_SYSTEM: sourceStr = " window system"; break; case GL_DEBUG_SOURCE_SHADER_COMPILER: sourceStr = " shader compiler"; break; case GL_DEBUG_SOURCE_THIRD_PARTY: sourceStr = " third party"; break; case GL_DEBUG_SOURCE_APPLICATION: sourceStr = " application"; break; case GL_DEBUG_SOURCE_OTHER: break; default: assert(0); } const char *typeStr = ""; switch (type) { case GL_DEBUG_TYPE_ERROR: typeStr = " error"; break; case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: typeStr = " deprecated behaviour"; break; case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: typeStr = " undefined behaviour"; break; case GL_DEBUG_TYPE_PORTABILITY: typeStr = " portability issue"; break; case GL_DEBUG_TYPE_PERFORMANCE: typeStr = " performance issue"; break; default: assert(0); /* fall-through */ case GL_DEBUG_TYPE_OTHER: typeStr = " issue"; break; case GL_DEBUG_TYPE_MARKER: typeStr = " marker"; break; case GL_DEBUG_TYPE_PUSH_GROUP: typeStr = " push group"; break; case GL_DEBUG_TYPE_POP_GROUP: typeStr = " pop group"; break; } std::cerr << *color << retrace::callNo << ": message:" << severityStr << sourceStr << typeStr; if (id) { std::cerr << " " << id; } std::cerr << ": "; if (messageCount == maxMessageCount) { std::cerr << "too many identical messages; ignoring" << highlighter.normal() << std::endl; return; } std::cerr << message; std::cerr << highlighter.normal(); // Write new line if not included in the message already. size_t messageLen = strlen(message); if (!messageLen || (message[messageLen - 1] != '\n' && message[messageLen - 1] != '\r')) { std::cerr << std::endl; } } } /* namespace glretrace */ class GLDumper : public retrace::Dumper { public: image::Image * getSnapshot(void) { if (!glretrace::getCurrentContext()) { return NULL; } return glstate::getDrawBufferImage(); } bool canDump(void) { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (glretrace::insideGlBeginEnd || !currentContext) { return false; } return true; } void dumpState(StateWriter &writer) { glstate::dumpCurrentContext(writer); } }; static GLDumper glDumper; void retrace::setFeatureLevel(const char *featureLevel) { glretrace::defaultProfile = glprofile::Profile(glprofile::API_GL, 3, 2, true); } void retrace::setUp(void) { glws::init(); dumper = &glDumper; } void retrace::addCallbacks(retrace::Retracer &retracer) { retracer.addCallbacks(glretrace::gl_callbacks); retracer.addCallbacks(glretrace::glx_callbacks); retracer.addCallbacks(glretrace::wgl_callbacks); retracer.addCallbacks(glretrace::cgl_callbacks); retracer.addCallbacks(glretrace::egl_callbacks); } void retrace::flushRendering(void) { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (currentContext) { glretrace::flushQueries(); } } void retrace::finishRendering(void) { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (currentContext) { glFinish(); } } void retrace::waitForInput(void) { flushRendering(); while (glws::processEvents()) { os::sleep(100*1000); } } void retrace::cleanUp(void) { glws::cleanup(); } tmpNnpnZF/retrace/glretrace_wgl.cpp0000664000175000017500000001746112543167424016747 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "glproc.hpp" #include "retrace.hpp" #include "glretrace.hpp" using namespace glretrace; typedef std::map DrawableMap; typedef std::map ContextMap; static DrawableMap drawable_map; static DrawableMap pbuffer_map; static ContextMap context_map; static glws::Drawable * getDrawable(unsigned long long hdc) { if (hdc == 0) { return NULL; } DrawableMap::const_iterator it; it = drawable_map.find(hdc); if (it == drawable_map.end()) { return (drawable_map[hdc] = glretrace::createDrawable()); } return it->second; } static Context * getContext(unsigned long long context_ptr) { if (context_ptr == 0) { return NULL; } ContextMap::const_iterator it; it = context_map.find(context_ptr); if (it == context_map.end()) { assert(false); return NULL; } return it->second; } static void retrace_wglCreateContext(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); if (!orig_context) { return; } Context *context = glretrace::createContext(); context_map[orig_context] = context; } static void retrace_wglDeleteContext(trace::Call &call) { unsigned long long hglrc = call.arg(0).toUIntPtr(); ContextMap::iterator it; it = context_map.find(hglrc); if (it == context_map.end()) { return; } delete it->second; context_map.erase(it); } static void retrace_wglMakeCurrent(trace::Call &call) { bool ret = call.ret->toBool(); glws::Drawable *new_drawable = NULL; Context *new_context = NULL; if (ret) { unsigned long long hglrc = call.arg(1).toUIntPtr(); if (hglrc) { new_drawable = getDrawable(call.arg(0).toUIntPtr()); new_context = getContext(hglrc); } } glretrace::makeCurrent(call, new_drawable, new_context); } static void retrace_wglSwapBuffers(trace::Call &call) { bool ret = call.ret->toBool(); if (!ret) { return; } glws::Drawable *drawable = getDrawable(call.arg(0).toUIntPtr()); frame_complete(call); if (retrace::doubleBuffer) { if (drawable) { drawable->swapBuffers(); } else { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (currentContext) { currentContext->drawable->swapBuffers(); } } } else { glFlush(); } } static void retrace_wglShareLists(trace::Call &call) { bool ret = call.ret->toBool(); if (!ret) { return; } unsigned long long hglrc1 = call.arg(0).toUIntPtr(); unsigned long long hglrc2 = call.arg(1).toUIntPtr(); Context *share_context = getContext(hglrc1); Context *old_context = getContext(hglrc2); glprofile::Profile profile = old_context->wsContext->profile; Context *new_context = glretrace::createContext(share_context, profile); if (new_context) { glretrace::Context *currentContext = glretrace::getCurrentContext(); if (currentContext == old_context) { glretrace::makeCurrent(call, currentContext->drawable, new_context); } context_map[hglrc2] = new_context; delete old_context; } } static void retrace_wglCreateLayerContext(trace::Call &call) { retrace_wglCreateContext(call); } static void retrace_wglSwapLayerBuffers(trace::Call &call) { retrace_wglSwapBuffers(call); } static void retrace_wglCreatePbufferARB(trace::Call &call) { unsigned long long orig_pbuffer = call.ret->toUIntPtr(); if (!orig_pbuffer) { return; } int iWidth = call.arg(2).toUInt(); int iHeight = call.arg(3).toUInt(); glws::Drawable *drawable = glretrace::createPbuffer(iWidth, iHeight); pbuffer_map[orig_pbuffer] = drawable; } static void retrace_wglGetPbufferDCARB(trace::Call &call) { unsigned long long orig_hdc = call.ret->toUIntPtr(); if (!orig_hdc) { return; } glws::Drawable *pbuffer = pbuffer_map[call.arg(0).toUIntPtr()]; drawable_map[orig_hdc] = pbuffer; } static void retrace_wglCreateContextAttribsARB(trace::Call &call) { unsigned long long orig_context = call.ret->toUIntPtr(); if (!orig_context) { return; } Context *share_context = getContext(call.arg(1).toUIntPtr()); const trace::Value * attribList = &call.arg(2); glprofile::Profile profile = parseContextAttribList(attribList); Context *context = glretrace::createContext(share_context, profile); context_map[orig_context] = context; } const retrace::Entry glretrace::wgl_callbacks[] = { {"glAddSwapHintRectWIN", &retrace::ignore}, {"wglChoosePixelFormat", &retrace::ignore}, {"wglChoosePixelFormatARB", &retrace::ignore}, {"wglChoosePixelFormatEXT", &retrace::ignore}, {"wglCreateContext", &retrace_wglCreateContext}, {"wglCreateContextAttribsARB", &retrace_wglCreateContextAttribsARB}, {"wglCreateLayerContext", &retrace_wglCreateLayerContext}, {"wglCreatePbufferARB", &retrace_wglCreatePbufferARB}, {"wglDeleteContext", &retrace_wglDeleteContext}, {"wglDescribeLayerPlane", &retrace::ignore}, {"wglDescribePixelFormat", &retrace::ignore}, {"wglDestroyPbufferARB", &retrace::ignore}, {"wglGetCurrentContext", &retrace::ignore}, {"wglGetCurrentDC", &retrace::ignore}, {"wglGetCurrentReadDCARB", &retrace::ignore}, {"wglGetCurrentReadDCEXT", &retrace::ignore}, {"wglGetDefaultProcAddress", &retrace::ignore}, {"wglGetExtensionsStringARB", &retrace::ignore}, {"wglGetExtensionsStringEXT", &retrace::ignore}, {"wglGetLayerPaletteEntries", &retrace::ignore}, {"wglGetPbufferDCARB", &retrace_wglGetPbufferDCARB}, {"wglGetPixelFormat", &retrace::ignore}, {"wglGetPixelFormatAttribfvARB", &retrace::ignore}, {"wglGetPixelFormatAttribfvEXT", &retrace::ignore}, {"wglGetPixelFormatAttribivARB", &retrace::ignore}, {"wglGetPixelFormatAttribivEXT", &retrace::ignore}, {"wglGetProcAddress", &retrace::ignore}, {"wglGetSwapIntervalEXT", &retrace::ignore}, {"wglMakeCurrent", &retrace_wglMakeCurrent}, {"wglQueryPbufferARB", &retrace::ignore}, {"wglReleasePbufferDCARB", &retrace::ignore}, {"wglReleaseTexImageARB", &retrace::ignore}, {"wglSetPbufferAttribARB", &retrace::ignore}, {"wglSetPixelFormat", &retrace::ignore}, {"wglShareLists", &retrace_wglShareLists}, {"wglSwapBuffers", &retrace_wglSwapBuffers}, {"wglSwapIntervalEXT", &retrace::ignore}, {"wglSwapLayerBuffers", &retrace_wglSwapLayerBuffers}, {NULL, NULL} }; tmpNnpnZF/retrace/CMakeLists.txt0000664000175000017500000003000012543167424016142 0ustar chrischris############################################################################## # API retracers include_directories ( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/helpers ${CMAKE_BINARY_DIR}/dispatch ${CMAKE_SOURCE_DIR}/dispatch ${CMAKE_SOURCE_DIR}/image ${CMAKE_SOURCE_DIR}/thirdparty/dxerr ) add_definitions (-DRETRACE) add_custom_command ( OUTPUT glretrace_gl.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glretrace_gl.cpp DEPENDS glretrace.py retrace.py ${CMAKE_SOURCE_DIR}/specs/glapi.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_custom_command ( OUTPUT glstate_params.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glstate_params.py > ${CMAKE_CURRENT_BINARY_DIR}/glstate_params.cpp DEPENDS glstate_params.py ${CMAKE_SOURCE_DIR}/specs/glparams.py ${CMAKE_SOURCE_DIR}/specs/gltypes.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_library (retrace_common STATIC retrace.cpp retrace_main.cpp retrace_stdc.cpp retrace_swizzle.cpp json.cpp state_writer.cpp state_writer_json.cpp state_writer_ubjson.cpp ) target_link_libraries (retrace_common image common ${ZLIB_LIBRARIES} ${SNAPPY_LIBRARIES} ${GETOPT_LIBRARIES} ) if (NOT ANDROID AND CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries (retrace_common rt) endif () if (WIN32) target_link_libraries (retrace_common dxerr winmm) endif () add_library (glretrace_common STATIC glretrace_gl.cpp glretrace_cgl.cpp glretrace_glx.cpp glretrace_wgl.cpp glretrace_egl.cpp glretrace_main.cpp glretrace_ws.cpp glstate.cpp glstate_formats.cpp glstate_images.cpp glstate_params.cpp glstate_shaders.cpp glws.cpp ) add_dependencies (glretrace_common glproc) target_link_libraries (glretrace_common retrace_common ) if (PROCPS_FOUND) target_link_libraries (glretrace_common ${PROCPS_LIBRARY}) endif () if (WIN32) set (glws_os glws_wgl.cpp) else () if (APPLE) set (glws_os glws_cocoa.mm) else () set (glws_os glws_xlib.cpp glws_glx.cpp) endif () endif () if (WIN32 OR APPLE OR X11_FOUND) add_executable (glretrace ${glws_os} ) add_dependencies (glretrace glproc) target_link_libraries (glretrace retrace_common glretrace_common glhelpers glproc_gl ) if (WIN32) else () if (APPLE) target_link_libraries (glretrace "-framework Cocoa" "-framework ApplicationServices" # CGS* #"-framework OpenGL" # CGL* ) else () target_link_libraries (glretrace ${X11_X11_LIB}) endif () target_link_libraries (glretrace # gdb doesn't like when pthreads is loaded through dlopen (which happens # when dlopen'ing libGL), so link pthreads to avoid this issue. See also # http://stackoverflow.com/questions/2702628/gdb-cannot-find-new-threads-generic-error ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) endif () install (TARGETS glretrace RUNTIME DESTINATION bin) install_pdb (glretrace DESTINATION bin) endif () if (ENABLE_EGL AND X11_FOUND AND NOT WIN32 AND NOT APPLE AND NOT ENABLE_WAFFLE) add_executable (eglretrace glws_xlib.cpp glws_egl_xlib.cpp ) add_dependencies (eglretrace glproc) target_link_libraries (eglretrace retrace_common glretrace_common glhelpers glproc_egl ${X11_X11_LIB} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) install (TARGETS eglretrace RUNTIME DESTINATION bin) endif () if (ENABLE_EGL) if ((ANDROID OR ENABLE_WAFFLE) AND Waffle_FOUND) add_executable (eglretrace glws_waffle.cpp ) add_dependencies (eglretrace glproc) include_directories (${Waffle_INCLUDE_DIR}) target_link_libraries (eglretrace retrace_common glretrace_common glhelpers glproc_egl ${Waffle_LIBRARY} ${X11_X11_LIB} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) install (TARGETS eglretrace RUNTIME DESTINATION bin) elseif (ANDROID AND (DEFINED ANDROID_SDK)) add_library(retrace SHARED glws_egl_android.cpp) target_link_libraries (retrace retrace_common glretrace_common glhelpers glproc_egl android ) set (ANDROID_BUILD_DIR "${CMAKE_BINARY_DIR}/android-build") configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/android/local.properties.in" "${CMAKE_BINARY_DIR}/local.properties") add_custom_target (copyAndroidStuff COMMAND ${CMAKE_COMMAND} -E remove_directory "${ANDROID_BUILD_DIR}" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/android" "${ANDROID_BUILD_DIR}" COMMAND ${CMAKE_COMMAND} -E make_directory "${ANDROID_BUILD_DIR}/libs/${ANDROID_NDK_ABI_NAME}" # FIXME According to android.toolchain.cmake decumentation the # android libs should be putted to # ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} but # android.toolchain.cmake sees LIBRARY_OUTPUT_PATH_ROOT as # CMAKE_SOURCE_DIR and this CMakeLists.txt file sees it as # ANDROID_BUILD_DIR ;-( so, I must use # ${CMAKE_SOURCE_DIR}/libs/${ANDROID_NDK_ABI_NAME} insted of # ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} ... COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_shared.so" "${ANDROID_BUILD_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/libretrace.so" "${ANDROID_BUILD_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" DEPENDS retrace ) add_custom_target (retraceAPK COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_BINARY_DIR}/local.properties" "${ANDROID_BUILD_DIR}/local.properties" COMMAND "${CMAKE_SOURCE_DIR}/thirdparty/gradlew/gradlew" "assembleDebug" DEPENDS copyAndroidStuff DEPENDS "${CMAKE_BINARY_DIR}/local.properties" WORKING_DIRECTORY "${ANDROID_BUILD_DIR}") add_custom_target (installRetraceAPK COMMAND "${CMAKE_SOURCE_DIR}/thirdparty/gradlew/gradlew" "installDebug" DEPENDS retraceAPK WORKING_DIRECTORY "${ANDROID_BUILD_DIR}") endif () endif () if (WIN32) if (DirectX_D3D_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D_INCLUDE_DIR}) add_custom_command ( OUTPUT d3dretrace_ddraw.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ddrawretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_ddraw.cpp DEPENDS ddrawretrace.py dllretrace.py retrace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/ddraw.py ${CMAKE_SOURCE_DIR}/specs/d3d.py ${CMAKE_SOURCE_DIR}/specs/d3dtypes.py ${CMAKE_SOURCE_DIR}/specs/d3dcaps.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) set (D3DSTATE_SOURCES ${D3DSTATE_SOURCES} d3d7state.cpp d3d7state_images.cpp ) else () message (FATAL_ERROR "d3d.h is required.") endif () if (DirectX_D3D8_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D8_INCLUDE_DIR}) set (HAVE_D3D8 1) set (D3DSTATE_SOURCES ${D3DSTATE_SOURCES} d3d8state.cpp d3d8state_images.cpp ) else () set (HAVE_D3D8 0) endif () add_custom_command ( OUTPUT d3dretrace_d3d8.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9retrace.py d3d8 ${HAVE_D3D8} > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d8.cpp DEPENDS d3d9retrace.py dllretrace.py retrace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d8.py ${CMAKE_SOURCE_DIR}/specs/d3d8types.py ${CMAKE_SOURCE_DIR}/specs/d3d8caps.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) if (DirectX_D3D9_INCLUDE_FOUND) include_directories (BEFORE SYSTEM ${DirectX_D3D9_INCLUDE_DIR}) set (HAVE_D3D9 1) else () set (HAVE_D3D9 0) endif () add_custom_command ( OUTPUT d3dretrace_d3d9.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9retrace.py d3d9 ${HAVE_D3D9} > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d9.cpp DEPENDS d3d9retrace.py dllretrace.py retrace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d9.py ${CMAKE_SOURCE_DIR}/specs/d3d9types.py ${CMAKE_SOURCE_DIR}/specs/d3d9caps.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) if (DirectX_D3D11_2_INCLUDE_FOUND) add_definitions (-DHAVE_DXGI) include_directories (BEFORE SYSTEM ${DirectX_D3D11_2_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/thirdparty/directxtex/DirectXTex ) set (D3DSTATE_SOURCES ${D3DSTATE_SOURCES} dxgistate.cpp dxgistate_so.cpp d3d10state.cpp d3d10state_images.cpp d3d11state.cpp d3d11state_images.cpp d3dretrace_dxgi.cpp ) add_custom_command ( OUTPUT dxgistate_so.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dxgistate_so.py > ${CMAKE_CURRENT_BINARY_DIR}/dxgistate_so.cpp DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dxgistate_so.py ${CMAKE_SOURCE_DIR}/specs/d3d11.py ${CMAKE_SOURCE_DIR}/specs/d3d11sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3d10.py ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py ${CMAKE_SOURCE_DIR}/specs/dxgi.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) add_custom_command ( OUTPUT d3dretrace_dxgi.cpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dxgiretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_dxgi.cpp DEPENDS dxgiretrace.py dllretrace.py retrace.py ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py ${CMAKE_SOURCE_DIR}/specs/d3d11.py ${CMAKE_SOURCE_DIR}/specs/d3d11sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3d10.py ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py ${CMAKE_SOURCE_DIR}/specs/dxgi.py ${CMAKE_SOURCE_DIR}/specs/winapi.py ${CMAKE_SOURCE_DIR}/specs/stdapi.py ) endif () add_executable (d3dretrace d3dretrace_main.cpp d3dretrace_ddraw.cpp d3dretrace_d3d8.cpp d3dretrace_d3d9.cpp d3dretrace_dxgi_priv.cpp d3dretrace_ws.cpp d3d9state.cpp d3d9state_formats.cpp d3d9state_images.cpp ${D3DSTATE_SOURCES} ) target_link_libraries (d3dretrace retrace_common d3dhelpers ) if (DirectX_D3D11_2_INCLUDE_FOUND) target_link_libraries (d3dretrace directxtex) endif () install (TARGETS d3dretrace RUNTIME DESTINATION bin) install_pdb (d3dretrace DESTINATION bin) endif () tmpNnpnZF/retrace/retrace_swizzle.cpp0000664000175000017500000002034212543167424017332 0ustar chrischris/************************************************************************** * * Copyright 2011-2012 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include "retrace.hpp" #include "retrace_swizzle.hpp" namespace retrace { struct Region { void *buffer; unsigned long long size; }; typedef std::map RegionMap; static RegionMap regionMap; static inline bool contains(RegionMap::iterator &it, unsigned long long address) { return it->first <= address && (it->first + it->second.size) > address; } static inline bool intersects(RegionMap::iterator &it, unsigned long long start, unsigned long long size) { unsigned long it_start = it->first; unsigned long it_stop = it->first + it->second.size; unsigned long stop = start + size; return it_start < stop && start < it_stop; } // Iterator to the first region that contains the address, or the first after static RegionMap::iterator lowerBound(unsigned long long address) { RegionMap::iterator it = regionMap.lower_bound(address); while (it != regionMap.begin()) { RegionMap::iterator pred = it; --pred; if (contains(pred, address)) { it = pred; } else { break; } } #ifndef NDEBUG if (it != regionMap.end()) { assert(contains(it, address) || it->first > address); } #endif return it; } // Iterator to the first region that starts after the address static RegionMap::iterator upperBound(unsigned long long address) { RegionMap::iterator it = regionMap.upper_bound(address); #ifndef NDEBUG if (it != regionMap.end()) { assert(it->first >= address); } #endif return it; } void addRegion(trace::Call &call, unsigned long long address, void *buffer, unsigned long long size) { if (retrace::verbosity >= 2) { std::cout << "region " << std::hex << "0x" << address << "-0x" << (address + size) << " -> " << "0x" << (uintptr_t)buffer << "-0x" << ((uintptr_t)buffer + size) << std::dec << "\n"; } if (!address) { // Ignore NULL pointer assert(!buffer); return; } const bool debug = #ifdef NDEBUG false #else true #endif ; if (debug) { RegionMap::iterator start = lowerBound(address); RegionMap::iterator stop = upperBound(address + size - 1); if (0) { // Forget all regions that intersect this new one. regionMap.erase(start, stop); } else { for (RegionMap::iterator it = start; it != stop; ++it) { warning(call) << std::hex << "region 0x" << address << "-0x" << (address + size) << " " "intersects existing region 0x" << it->first << "-0x" << (it->first + it->second.size) << "\n" << std::dec; assert(intersects(it, address, size)); } } } assert(buffer); Region region; region.buffer = buffer; region.size = size; regionMap[address] = region; } static RegionMap::iterator lookupRegion(unsigned long long address) { RegionMap::iterator it = regionMap.lower_bound(address); if (it == regionMap.end() || it->first > address) { if (it == regionMap.begin()) { return regionMap.end(); } else { --it; } } assert(contains(it, address)); return it; } void delRegion(unsigned long long address) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { regionMap.erase(it); } else { assert(0); } } void delRegionByPointer(void *ptr) { for (RegionMap::iterator it = regionMap.begin(); it != regionMap.end(); ++it) { if (it->second.buffer == ptr) { regionMap.erase(it); return; } } assert(0); } static void lookupAddress(unsigned long long address, void * & ptr, size_t & len) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { unsigned long long offset = address - it->first; assert(offset < it->second.size); ptr = (char *)it->second.buffer + offset; len = it->second.size - offset; if (retrace::verbosity >= 2) { std::cout << "region " << std::hex << "0x" << address << " <- " << "0x" << (uintptr_t)ptr << std::dec << "\n"; } return; } if (retrace::debug && address >= 64 * 1024 * 1024) { /* Likely not an offset, but an address that should had been swizzled */ std::cerr << "warning: passing high address 0x" << std::hex << address << std::dec << " as uintptr_t\n"; } ptr = (void *)(uintptr_t)address; len = 0; } class Translator : protected trace::Visitor { protected: const bool bind; void *ptr; size_t len; protected: void visit(trace::Null *) { ptr = NULL; len = 0; } void visit(trace::Blob *blob) { ptr = blob->toPointer(bind); len = blob->size; } void visit(trace::Pointer *p) { lookupAddress(p->value, ptr, len); } public: Translator(bool _bind) : bind(_bind), ptr(NULL), len(0) {} void operator() (trace::Value *node, void * & _ptr, size_t & _len) { _visit(node); _ptr = ptr; _len = len; } }; void toRange(trace::Value &value, void * & ptr, size_t & len) { Translator(false) (&value, ptr, len); } void * toPointer(trace::Value &value, bool bind) { void * ptr; size_t len; Translator translator(bind); translator(&value, ptr, len); (void)len; return ptr; } static std::map _obj_map; void addObj(trace::Call &call, trace::Value &value, void *obj) { unsigned long long address = value.toUIntPtr(); if (!address) { if (obj) { warning(call) << "unexpected non-null object\n"; } return; } if (!obj) { warning(call) << "got null for object 0x" << std::hex << address << std::dec << "\n"; } _obj_map[address] = obj; if (retrace::verbosity >= 2) { std::cout << std::hex << "obj 0x" << address << " -> 0x" << size_t(obj) << std::dec << "\n"; } } void delObj(trace::Value &value) { unsigned long long address = value.toUIntPtr(); _obj_map.erase(address); if (retrace::verbosity >= 2) { std::cout << std::hex << "obj 0x" << address << std::dec << " del\n"; } } void * toObjPointer(trace::Call &call, trace::Value &value) { unsigned long long address = value.toUIntPtr(); void *obj; if (address) { obj = _obj_map[address]; if (!obj) { warning(call) << "unknown object 0x" << std::hex << address << std::dec << "\n"; } } else { obj = NULL; } if (retrace::verbosity >= 2) { std::cout << std::hex << "obj 0x" << address << " <- 0x" << size_t(obj) << std::dec << "\n"; } return obj; } } /* retrace */ tmpNnpnZF/retrace/glstate.cpp0000664000175000017500000003465212543167424015572 0ustar chrischris/************************************************************************** * * Copyright 2011 Jose Fonseca * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include #include #include #include "image.hpp" #include "state_writer.hpp" #include "glproc.hpp" #include "glws.hpp" #include "glsize.hpp" #include "glstate.hpp" #include "glstate_internal.hpp" namespace glstate { Context::Context(void) { memset(this, 0, sizeof *this); glprofile::Profile profile = glprofile::getCurrentContextProfile(); glprofile::Extensions ext; ext.getCurrentContextExtensions(profile); ES = profile.es(); core = profile.core; ARB_draw_buffers = !ES; // Check extensions we use. ARB_sampler_objects = ext.has("GL_ARB_sampler_objects"); KHR_debug = ext.has("GL_KHR_debug"); EXT_debug_label = ext.has("GL_EXT_debug_label"); } PixelPackState::PixelPackState(const Context &context) { ES = context.ES; // Start with default state pack_alignment = 4; pack_image_height = 0; pack_lsb_first = GL_FALSE; pack_row_length = 0; pack_skip_images = 0; pack_skip_pixels = 0; pack_skip_rows = 0; pack_swap_bytes = GL_FALSE; pixel_pack_buffer_binding = 0; // Get current state glGetIntegerv(GL_PACK_ALIGNMENT, &pack_alignment); if (!ES) { glGetIntegerv(GL_PACK_IMAGE_HEIGHT, &pack_image_height); glGetIntegerv(GL_PACK_LSB_FIRST, &pack_lsb_first); glGetIntegerv(GL_PACK_ROW_LENGTH, &pack_row_length); glGetIntegerv(GL_PACK_SKIP_IMAGES, &pack_skip_images); glGetIntegerv(GL_PACK_SKIP_PIXELS, &pack_skip_pixels); glGetIntegerv(GL_PACK_SKIP_ROWS, &pack_skip_rows); glGetIntegerv(GL_PACK_SWAP_BYTES, &pack_swap_bytes); glGetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING, &pixel_pack_buffer_binding); } // Reset state for compact images glPixelStorei(GL_PACK_ALIGNMENT, 1); if (!ES) { glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0); glPixelStorei(GL_PACK_LSB_FIRST, GL_FALSE); glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_SKIP_IMAGES, 0); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0); glPixelStorei(GL_PACK_SWAP_BYTES, GL_FALSE); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } } PixelPackState::~PixelPackState() { glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment); if (!ES) { glPixelStorei(GL_PACK_IMAGE_HEIGHT, pack_image_height); glPixelStorei(GL_PACK_LSB_FIRST, pack_lsb_first); glPixelStorei(GL_PACK_ROW_LENGTH, pack_row_length); glPixelStorei(GL_PACK_SKIP_IMAGES, pack_skip_images); glPixelStorei(GL_PACK_SKIP_PIXELS, pack_skip_pixels); glPixelStorei(GL_PACK_SKIP_ROWS, pack_skip_rows); glPixelStorei(GL_PACK_SWAP_BYTES, pack_swap_bytes); glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_pack_buffer_binding); } } static GLenum getBufferBinding(GLenum target) { switch (target) { case GL_ARRAY_BUFFER: return GL_ARRAY_BUFFER_BINDING; case GL_ATOMIC_COUNTER_BUFFER: return GL_ATOMIC_COUNTER_BUFFER_BINDING; case GL_COPY_READ_BUFFER: return GL_COPY_READ_BUFFER_BINDING; case GL_COPY_WRITE_BUFFER: return GL_COPY_WRITE_BUFFER_BINDING; case GL_DRAW_INDIRECT_BUFFER: return GL_DRAW_INDIRECT_BUFFER_BINDING; case GL_DISPATCH_INDIRECT_BUFFER: return GL_DISPATCH_INDIRECT_BUFFER_BINDING; case GL_ELEMENT_ARRAY_BUFFER: return GL_ELEMENT_ARRAY_BUFFER_BINDING; case GL_PIXEL_PACK_BUFFER: return GL_PIXEL_PACK_BUFFER_BINDING; case GL_PIXEL_UNPACK_BUFFER: return GL_PIXEL_UNPACK_BUFFER_BINDING; case GL_QUERY_BUFFER: return GL_QUERY_BUFFER_BINDING; case GL_SHADER_STORAGE_BUFFER: return GL_SHADER_STORAGE_BUFFER_BINDING; case GL_TEXTURE_BUFFER: return GL_TEXTURE_BUFFER; case GL_TRANSFORM_FEEDBACK_BUFFER: return GL_TRANSFORM_FEEDBACK_BUFFER_BINDING; case GL_UNIFORM_BUFFER: return GL_UNIFORM_BUFFER_BINDING; default: assert(false); return GL_NONE; } } BufferBinding::BufferBinding(GLenum _target, GLuint _buffer) : target(_target), buffer(_buffer), prevBuffer(0) { GLenum binding = getBufferBinding(target); glGetIntegerv(binding, (GLint *) &prevBuffer); if (prevBuffer != buffer) { glBindBuffer(target, buffer); } } BufferBinding::~BufferBinding() { if (prevBuffer != buffer) { glBindBuffer(target, prevBuffer); } } BufferMapping::BufferMapping() : target(GL_NONE), buffer(0), map_pointer(NULL), unmap(false) { } GLvoid * BufferMapping::map(GLenum _target, GLuint _buffer) { target = _target; buffer = _buffer; map_pointer = NULL; unmap = false; BufferBinding bb(target, buffer); // Recursive mappings of the same buffer are not allowed. And with the // pursuit of persistent mappings for performance this will become more // and more common. GLint mapped = GL_FALSE; glGetBufferParameteriv(target, GL_BUFFER_MAPPED, &mapped); if (mapped) { glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &map_pointer); assert(map_pointer != NULL); GLint map_offset = 0; glGetBufferParameteriv(target, GL_BUFFER_MAP_OFFSET, &map_offset); if (map_offset != 0) { std::cerr << "warning: " << enumToString(target) << " buffer " << buffer << " is already mapped with offset " << map_offset << "\n"; // FIXME: This most likely won't work. We should remap the // buffer with the full range, then re-map when done. This // should never happen in practice with persistent mappings // though. map_pointer = (GLubyte *)map_pointer - map_offset; } } else { map_pointer = glMapBuffer(target, GL_READ_ONLY); if (map_pointer) { unmap = true; } } return map_pointer; } BufferMapping::~BufferMapping() { if (unmap) { BufferBinding bb(target, buffer); GLenum ret = glUnmapBuffer(target); assert(ret == GL_TRUE); (void)ret; } } void dumpBoolean(StateWriter &writer, GLboolean value) { switch (value) { case GL_FALSE: writer.writeString("GL_FALSE"); break; case GL_TRUE: writer.writeString("GL_TRUE"); break; default: writer.writeInt(static_cast(value)); break; } } void dumpEnum(StateWriter &writer, GLenum pname) { const char *s = enumToString(pname); if (s) { writer.writeString(s); } else { writer.writeInt(pname); } } /** * Get a GL_KHR_debug/GL_EXT_debug_label object label. * * The returned string should be destroyed with free() when no longer * necessary. */ char * getObjectLabel(Context &context, GLenum identifier, GLuint name) { if (!name) { return NULL; } GLsizei length = 0; if (context.KHR_debug) { /* * XXX: According to * http://www.khronos.org/registry/gles/extensions/KHR/debug.txt * description of glGetObjectLabel: * * "If